diff --git a/.github/workflows/cdk_package_code.yml b/.github/workflows/cdk_package_code.yml index 9698eed63b..d1bf688891 100644 --- a/.github/workflows/cdk_package_code.yml +++ b/.github/workflows/cdk_package_code.yml @@ -35,7 +35,7 @@ jobs: asdf_version: ${{ steps.asdf-version.outputs.version }} - name: Cache asdf - uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 + uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 with: path: | ~/.asdf diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5cc663dae1..b967edb562 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,7 @@ jobs: echo "TAG_FORMAT=$TAG_FORMAT" >> "$GITHUB_OUTPUT" quality_checks: - uses: NHSDigital/eps-common-workflows/.github/workflows/quality-checks.yml@e31e25273fb87450be4ef763ddbed4f531c45f8e + uses: NHSDigital/eps-common-workflows/.github/workflows/quality-checks.yml@d215f841eb18b803e339e4ed597ed1f30e086e17 needs: [get_asdf_version] with: asdfVersion: ${{ needs.get_asdf_version.outputs.asdf_version }} @@ -46,7 +46,7 @@ jobs: tag_release: needs: [quality_checks, get_commit_id, get_asdf_version] - uses: NHSDigital/eps-common-workflows/.github/workflows/tag-release.yml@e31e25273fb87450be4ef763ddbed4f531c45f8e + uses: NHSDigital/eps-common-workflows/.github/workflows/tag-release.yml@d215f841eb18b803e339e4ed597ed1f30e086e17 with: dry_run: true asdfVersion: ${{ needs.get_asdf_version.outputs.asdf_version }} diff --git a/.github/workflows/delete_old_cloudformation_stacks.yml b/.github/workflows/delete_old_cloudformation_stacks.yml index 1091a06a35..367f618435 100644 --- a/.github/workflows/delete_old_cloudformation_stacks.yml +++ b/.github/workflows/delete_old_cloudformation_stacks.yml @@ -26,7 +26,7 @@ jobs: .github/scripts - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 + uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 with: aws-region: eu-west-2 role-to-assume: ${{ secrets.DEV_CLOUD_FORMATION_DEPLOY_ROLE }} diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 5d1fc53342..b39a090574 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -10,7 +10,7 @@ env: jobs: dependabot-auto-approve-and-merge: needs: quality_checks - uses: NHSDigital/eps-common-workflows/.github/workflows/dependabot-auto-approve-and-merge.yml@e31e25273fb87450be4ef763ddbed4f531c45f8e + uses: NHSDigital/eps-common-workflows/.github/workflows/dependabot-auto-approve-and-merge.yml@d215f841eb18b803e339e4ed597ed1f30e086e17 secrets: AUTOMERGE_APP_ID: ${{ secrets.AUTOMERGE_APP_ID }} AUTOMERGE_PEM: ${{ secrets.AUTOMERGE_PEM }} @@ -50,7 +50,7 @@ jobs: quality_checks: # always run, but only block in the non-skip case needs: [get_commit_message, get_asdf_version] - uses: NHSDigital/eps-common-workflows/.github/workflows/quality-checks.yml@e31e25273fb87450be4ef763ddbed4f531c45f8e + uses: NHSDigital/eps-common-workflows/.github/workflows/quality-checks.yml@d215f841eb18b803e339e4ed597ed1f30e086e17 with: asdfVersion: ${{ needs.get_asdf_version.outputs.asdf_version }} secrets: @@ -120,7 +120,7 @@ jobs: run: echo "Skipping QC gate per commit message." pr_title_format_check: - uses: NHSDigital/eps-common-workflows/.github/workflows/pr_title_check.yml@e31e25273fb87450be4ef763ddbed4f531c45f8e + uses: NHSDigital/eps-common-workflows/.github/workflows/pr_title_check.yml@d215f841eb18b803e339e4ed597ed1f30e086e17 get_issue_number: runs-on: ubuntu-22.04 @@ -150,7 +150,7 @@ jobs: tag_release: needs: [get_asdf_version] - uses: NHSDigital/eps-common-workflows/.github/workflows/tag-release.yml@e31e25273fb87450be4ef763ddbed4f531c45f8e + uses: NHSDigital/eps-common-workflows/.github/workflows/tag-release.yml@d215f841eb18b803e339e4ed597ed1f30e086e17 with: dry_run: true asdfVersion: ${{ needs.get_asdf_version.outputs.asdf_version }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5edc698308..c6155a0f32 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,7 +25,7 @@ jobs: TAG_FORMAT=$(yq '.TAG_FORMAT' .github/config/settings.yml) echo "TAG_FORMAT=$TAG_FORMAT" >> "$GITHUB_OUTPUT" quality_checks: - uses: NHSDigital/eps-common-workflows/.github/workflows/quality-checks.yml@e31e25273fb87450be4ef763ddbed4f531c45f8e + uses: NHSDigital/eps-common-workflows/.github/workflows/quality-checks.yml@d215f841eb18b803e339e4ed597ed1f30e086e17 needs: [get_asdf_version] with: asdfVersion: ${{ needs.get_asdf_version.outputs.asdf_version }} @@ -44,7 +44,7 @@ jobs: tag_release: needs: [quality_checks, get_commit_id, get_asdf_version] - uses: NHSDigital/eps-common-workflows/.github/workflows/tag-release.yml@e31e25273fb87450be4ef763ddbed4f531c45f8e + uses: NHSDigital/eps-common-workflows/.github/workflows/tag-release.yml@d215f841eb18b803e339e4ed597ed1f30e086e17 with: dry_run: false asdfVersion: ${{ needs.get_asdf_version.outputs.asdf_version }} diff --git a/.github/workflows/release_all_stacks.yml b/.github/workflows/release_all_stacks.yml index 3fe9039f88..d6fa188445 100644 --- a/.github/workflows/release_all_stacks.yml +++ b/.github/workflows/release_all_stacks.yml @@ -122,7 +122,7 @@ jobs: DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }} - name: Configure AWS Credentials id: connect_aws_pull_image - uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 + uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 with: aws-region: eu-west-2 role-to-assume: ${{ secrets.CDK_PULL_IMAGE_ROLE }} @@ -153,7 +153,7 @@ jobs: - name: Configure AWS Credentials id: connect_aws_for_deployment - uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 + uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 with: aws-region: eu-west-2 role-to-assume: ${{ secrets.CLOUD_FORMATION_DEPLOY_ROLE }} @@ -162,6 +162,8 @@ jobs: - name: check redeploy stateful stack id: check_redeploy_stateful_stack + env: + AWS_MAX_ATTEMPTS: 20 run: | CF_LONDON_EXPORTS=$(aws cloudformation list-exports --region eu-west-2 --output json) CLOUDFRONT_DISTRIBUTION_ID=$(echo "$CF_LONDON_EXPORTS" | \ @@ -249,6 +251,7 @@ jobs: CLOUDFRONT_ORIGIN_CUSTOM_HEADER: ${{secrets.CLOUDFRONT_ORIGIN_CUSTOM_HEADER }} IS_PULL_REQUEST: ${{inputs.IS_PULL_REQUEST}} FORWARD_CSOC_LOGS: ${{ inputs.FORWARD_CSOC_LOGS }} + AWS_MAX_ATTEMPTS: 20 - name: Show diff for stateful stack run: | @@ -337,6 +340,8 @@ jobs: make react-build - name: deploy website + env: + AWS_MAX_ATTEMPTS: 20 run: | staticBucketName=$(aws cloudformation list-exports --query "Exports[?Name=='${{ inputs.SERVICE_NAME }}-stateful-resources:StaticContentBucket:Name'].Value" --output text) aws s3 cp ".build/packages/staticContent/404.html" "s3://${staticBucketName}/404.html" @@ -388,6 +393,7 @@ jobs: CLOUDFRONT_ORIGIN_CUSTOM_HEADER: ${{secrets.CLOUDFRONT_ORIGIN_CUSTOM_HEADER }} IS_PULL_REQUEST: ${{inputs.IS_PULL_REQUEST}} FORWARD_CSOC_LOGS: ${{ inputs.FORWARD_CSOC_LOGS }} + AWS_MAX_ATTEMPTS: 20 - name: Show diff for stateless stack run: | @@ -420,6 +426,8 @@ jobs: shell: bash - name: update cloudfront kvs id: update_cloudfront_kvs + env: + AWS_MAX_ATTEMPTS: 20 shell: bash run: | # shellcheck disable=SC2140 @@ -516,6 +524,7 @@ jobs: CLOUDFRONT_ORIGIN_CUSTOM_HEADER: ${{secrets.CLOUDFRONT_ORIGIN_CUSTOM_HEADER }} IS_PULL_REQUEST: ${{inputs.IS_PULL_REQUEST}} FORWARD_CSOC_LOGS: ${{ inputs.FORWARD_CSOC_LOGS }} + AWS_MAX_ATTEMPTS: 20 - name: Show diff for stateful stack redeployment if: ${{ steps.check_redeploy_stateful_stack.outputs.REDEPLOY_STATEFUL_STACK == 'true' }} diff --git a/.github/workflows/run_regression_tests.yml b/.github/workflows/run_regression_tests.yml index 02229286f5..d952e6f7b4 100644 --- a/.github/workflows/run_regression_tests.yml +++ b/.github/workflows/run_regression_tests.yml @@ -50,7 +50,7 @@ jobs: asdf_version: ${{ steps.asdf-version.outputs.version }} - name: Cache asdf - uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 + uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 with: path: | ~/.asdf diff --git a/.trivyignore.yaml b/.trivyignore.yaml index cc00f1064e..53f9c809e6 100644 --- a/.trivyignore.yaml +++ b/.trivyignore.yaml @@ -14,3 +14,13 @@ vulnerabilities: - "package-lock.json" statement: downstream dependency of fast-xml-parser expired_at: 2026-06-01 + - id: CVE-2026-26278 + statement: fast-xml-parser vulnerability accepted as risk - dependency of aws-cdk/client-dynamodb + expired_at: 2026-06-01 + - id: CVE-2026-26960 + statement: tar vulnerability accepted as risk + expired_at: 2026-06-01 + - id: CVE-2026-26996 + paths: + - "package-lock.json" + statement: downstream dependency - vulnerability is not relevant - we don't allow user input for anything regex. diff --git a/package-lock.json b/package-lock.json index 81e02be57d..d1ca659ec3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,15 +32,15 @@ ], "dependencies": { "conventional-changelog-eslint": "^6.0.0", - "esbuild": "^0.27.2" + "esbuild": "^0.27.3" }, "devDependencies": { "@eslint/js": "^9.38.0", "@jest/globals": "^30.1.1", "@types/jest": "^30.0.0", - "@types/node": "^25.1.0", - "@typescript-eslint/eslint-plugin": "^8.48.0", - "@typescript-eslint/parser": "^8.50.1", + "@types/node": "^25.3.0", + "@typescript-eslint/eslint-plugin": "^8.56.0", + "@typescript-eslint/parser": "^8.56.0", "@vitest/coverage-v8": "^4.0.18", "aws-sdk-client-mock": "^4.1.0", "eslint": "^9.39.2", @@ -48,7 +48,7 @@ "eslint-plugin-import-newlines": "^1.3.4", "eslint-plugin-prettier": "^5.5.4", "eslint-plugin-react": "^7.37.5", - "globals": "^17.1.0", + "globals": "^17.3.0", "jest": "^30.2.0", "jest-environment-jsdom": "^30.1.2", "jest-junit": "^16.0.0", @@ -56,7 +56,7 @@ "ts-jest": "^29.4.6", "ts-node": "^10.9.2", "typescript": "^5.9.3", - "typescript-eslint": "^8.52.0", + "typescript-eslint": "^8.56.0", "vitest": "^4.0.18" } }, @@ -89,14 +89,14 @@ "license": "ISC" }, "node_modules/@aws-amplify/analytics": { - "version": "7.0.92", - "resolved": "https://registry.npmjs.org/@aws-amplify/analytics/-/analytics-7.0.92.tgz", - "integrity": "sha512-W5n9CVa7uAMwDSfSZ9Ted8ypvRK8/zduLZOn7Ffwm7CDFQqPg2ccDsP4hbVWFJiExgaH13NC8l4vHIHLxMxtSQ==", + "version": "7.0.93", + "resolved": "https://registry.npmjs.org/@aws-amplify/analytics/-/analytics-7.0.93.tgz", + "integrity": "sha512-3WoB0VzATJyupTNQ+ZnzE0pLYnpZPtqNN4deZ8gadG5uzGhhvkt9uZtgVnn/QFGb35DnP8qNDTRiM0rL3vjyZQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-firehose": "3.723.0", - "@aws-sdk/client-kinesis": "3.723.0", - "@aws-sdk/client-personalize-events": "3.723.0", + "@aws-sdk/client-firehose": "3.982.0", + "@aws-sdk/client-kinesis": "3.982.0", + "@aws-sdk/client-personalize-events": "3.982.0", "@smithy/util-utf8": "2.0.0", "tslib": "^2.5.0" }, @@ -143,13 +143,13 @@ } }, "node_modules/@aws-amplify/api": { - "version": "6.3.23", - "resolved": "https://registry.npmjs.org/@aws-amplify/api/-/api-6.3.23.tgz", - "integrity": "sha512-b+xOGQ/OQggZZ5NqkDM9UI5w281Gtp0ZELbUEEBa2jg4mk2U1Urpi8Sb2Stop9sOogElP4z+LQWB3T3c8/mpsQ==", + "version": "6.3.24", + "resolved": "https://registry.npmjs.org/@aws-amplify/api/-/api-6.3.24.tgz", + "integrity": "sha512-19CVHj+0J35aHMPNzy12nO1mJS4oP68yFUfiMnulSsiVGV5XhUDc/bkdcX0uI7U1SsUSs+9TOBwZg27bzYIGkg==", "license": "Apache-2.0", "dependencies": { - "@aws-amplify/api-graphql": "4.8.4", - "@aws-amplify/api-rest": "4.6.2", + "@aws-amplify/api-graphql": "4.8.5", + "@aws-amplify/api-rest": "4.6.3", "@aws-amplify/data-schema": "^1.7.0", "rxjs": "^7.8.1", "tslib": "^2.5.0" @@ -159,15 +159,15 @@ } }, "node_modules/@aws-amplify/api-graphql": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/@aws-amplify/api-graphql/-/api-graphql-4.8.4.tgz", - "integrity": "sha512-VYVLalN/apnh2dTe2qjc0iMcpHjs5eQur41Ya8VDE2i1Gyfuuf+TXL7Hmf9VhkaXzUPVUTJqjyZalE4FkcA0uA==", + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/@aws-amplify/api-graphql/-/api-graphql-4.8.5.tgz", + "integrity": "sha512-Xu45+MizoethsRfCFIdN9RORenCu0e41tMkiTFVE5oKC76eoOlYHg2LlhG2Lmmasby/Ggi5bZouVxJIcP4IeIA==", "license": "Apache-2.0", "dependencies": { - "@aws-amplify/api-rest": "4.6.2", - "@aws-amplify/core": "6.16.0", + "@aws-amplify/api-rest": "4.6.3", + "@aws-amplify/core": "6.16.1", "@aws-amplify/data-schema": "^1.7.0", - "@aws-sdk/types": "3.723.0", + "@aws-sdk/types": "3.973.1", "graphql": "15.8.0", "rxjs": "^7.8.1", "tslib": "^2.5.0", @@ -188,9 +188,9 @@ } }, "node_modules/@aws-amplify/api-rest": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@aws-amplify/api-rest/-/api-rest-4.6.2.tgz", - "integrity": "sha512-lEUCe8P9lZgTKZY9HxdI0sZiwZRvKFFQnU4gLioHbT0quQZ5xYr3gO3oBh1aPPK2WncIglrSlb/qZa/vbijH9A==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@aws-amplify/api-rest/-/api-rest-4.6.3.tgz", + "integrity": "sha512-SPhttyB9SR2p5PkUPmUPfkXNqGrgvdqiNHNHhx7FjHnqFBXLDRtGhzqRbE7faDeAwrcWz1HCtcpk7MLHYt94yg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" @@ -200,9 +200,9 @@ } }, "node_modules/@aws-amplify/auth": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@aws-amplify/auth/-/auth-6.18.0.tgz", - "integrity": "sha512-m2ZHfEyN6xDEP5yC0KAYDS0CxtA9eaTpNm5LWPd1GbN/Qqwnzld7tagdc9HZViCkPkZy8Bnwlm9cw24wqQz8pQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@aws-amplify/auth/-/auth-6.19.1.tgz", + "integrity": "sha512-N6bqBUEly/xUiho0X5oGhLEDlQTWsj1i0FquDYsyuav5e9HHQBLNgG1zmpq28lyxtDaUREi/IDx+CD10EpcPcQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-js": "5.2.0", @@ -220,14 +220,13 @@ } }, "node_modules/@aws-amplify/core": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@aws-amplify/core/-/core-6.16.0.tgz", - "integrity": "sha512-YpEtvdXcC06/j3PEsQiN/AYiJh3yLK5aPijFY1SbE0rgSLt9iPPalCOh65vDjybe7SW8qdIlctcR/rROMA88ag==", + "version": "6.16.1", + "resolved": "https://registry.npmjs.org/@aws-amplify/core/-/core-6.16.1.tgz", + "integrity": "sha512-WHO6yYegmnZ+K3vnYzVwy+wnxYqSkdFakBIlgm4922QXHOQYWdIl/rrTcaagrpJEGT6YlTnqx1ANIoPojNxWmw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/types": "3.723.0", + "@aws-sdk/types": "3.973.1", "@smithy/util-hex-encoding": "2.0.0", "@types/uuid": "^9.0.0", "js-cookie": "^3.0.5", @@ -325,13 +324,13 @@ } }, "node_modules/@aws-amplify/datastore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@aws-amplify/datastore/-/datastore-5.1.4.tgz", - "integrity": "sha512-bx4aJAPLGtGiaKzIqX3ZSZr/lYgSxyhgCbaN48IFCYMlnFZ67qR/y7XnbRBaqkhTTtYhIT1mALIVDq2Hfzgo7Q==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@aws-amplify/datastore/-/datastore-5.1.5.tgz", + "integrity": "sha512-/9o4eYqWOlxVxe/riDd282FmUHHSiGUEAwle464T8wzNSqPTB7yTeQfzt2LFYTWsrYLCSR0OtOM1bY5VPSVmew==", "license": "Apache-2.0", "dependencies": { - "@aws-amplify/api": "6.3.23", - "@aws-amplify/api-graphql": "4.8.4", + "@aws-amplify/api": "6.3.24", + "@aws-amplify/api-graphql": "4.8.5", "buffer": "4.9.2", "idb": "5.0.6", "immer": "9.0.6", @@ -343,12 +342,12 @@ } }, "node_modules/@aws-amplify/notifications": { - "version": "2.0.92", - "resolved": "https://registry.npmjs.org/@aws-amplify/notifications/-/notifications-2.0.92.tgz", - "integrity": "sha512-RSG/IpHhKJHrCTceLeg5F0piMDcQRt6Dm8NQJmTZO2619nIv2bSQsOfrhlElgG3HC4thtEgJzipnJA+XGpQFDA==", + "version": "2.0.93", + "resolved": "https://registry.npmjs.org/@aws-amplify/notifications/-/notifications-2.0.93.tgz", + "integrity": "sha512-NtHKusaiWzkPXuaKsTyvKAWE8JnQcXmQoaidQ5/a9/nWWTzs983l5xgc4OPvfVR+3N63K+3iTmYHtKcEbhgS6w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.723.0", + "@aws-sdk/types": "3.973.1", "lodash": "^4.17.21", "tslib": "^2.5.0" }, @@ -357,52 +356,22 @@ } }, "node_modules/@aws-amplify/storage": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@aws-amplify/storage/-/storage-6.12.0.tgz", - "integrity": "sha512-3Y0myIgsaQ93xwGSbN+s0aXZG7whx2BlGSZAptU5jpAVgR0uYDrYCk3w3ANRXBVU0j9WuwqMDaeteXF1xhFq2w==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@aws-amplify/storage/-/storage-6.13.1.tgz", + "integrity": "sha512-iNDUmdvevcujcW4PBY7IGBMeTm+nohsZgswH6k99tG0myVsZRg0lVC4l5lcwoXoyVLpQjOmfZ0JgwV0oQbZ6zg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.723.0", + "@aws-sdk/types": "3.973.1", "@smithy/md5-js": "2.0.7", "buffer": "4.9.2", "crc-32": "1.2.2", - "fast-xml-parser": "^4.4.1", + "fast-xml-parser": "^5.3.4", "tslib": "^2.5.0" }, "peerDependencies": { "@aws-amplify/core": "^6.1.0" } }, - "node_modules/@aws-amplify/storage/node_modules/fast-xml-parser": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", - "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^1.1.1" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/@aws-amplify/storage/node_modules/strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, "node_modules/@aws-cdk/asset-awscli-v1": { "version": "2.2.263", "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.263.tgz", @@ -416,9 +385,9 @@ "license": "Apache-2.0" }, "node_modules/@aws-cdk/cloud-assembly-schema": { - "version": "48.20.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-48.20.0.tgz", - "integrity": "sha512-+eeiav9LY4wbF/EFuCt/vfvi/Zoxo8bf94PW5clbMraChEliq83w4TbRVy0jB9jE0v1ooFTtIjSQkowSPkfISg==", + "version": "50.4.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-50.4.0.tgz", + "integrity": "sha512-9Cplwc5C+SNe3hMfqZET7gXeM68tiH2ytQytCi+zz31Bn7O3GAgAnC2dYe+HWnZAgVH788ZkkBwnYXkeqx7v4g==", "bundleDependencies": [ "jsonschema", "semver" @@ -426,7 +395,7 @@ "license": "Apache-2.0", "dependencies": { "jsonschema": "~1.4.1", - "semver": "^7.7.2" + "semver": "^7.7.3" }, "engines": { "node": ">= 18.0.0" @@ -441,7 +410,7 @@ } }, "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": { - "version": "7.7.2", + "version": "7.7.3", "inBundle": true, "license": "ISC", "bin": { @@ -515,25 +484,25 @@ } }, "node_modules/@aws-lambda-powertools/commons": { - "version": "2.30.2", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/commons/-/commons-2.30.2.tgz", - "integrity": "sha512-bhhrpUdCfpBGKllJfGyi5faf12mh6tjYmOf5DALgIym89NkidFphPdZtWl5l6IN1YhgO8HWPX4Yvmi4tPBE/uw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/commons/-/commons-2.31.0.tgz", + "integrity": "sha512-K5Hy3WtU/n0M8/kgsgw6OVlF709PHOfnTfsWrJS2Cs1vVjEeBvW22a6u9n3VPNpDeqJ7GIodmSkbuzvQzq6vaA==", "license": "MIT-0", "dependencies": { "@aws/lambda-invoke-store": "0.2.3" } }, "node_modules/@aws-lambda-powertools/logger": { - "version": "2.30.2", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/logger/-/logger-2.30.2.tgz", - "integrity": "sha512-BSh2hPcnYUJNn/Olwby4LpHbUWePKuSKtfNeTBXAn+op3OcC7kx7CHSqc5PYGW7x2T8uliE1IuGB5vQz2gBeDQ==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/logger/-/logger-2.31.0.tgz", + "integrity": "sha512-FCchy2g/cK5poDvDWnVCBSN9uSDGSWDldDiHGC/bn1/oU2cCxIZu06QnYEOOOAUbCWdzgcT1F9fRjzzHbu0GxQ==", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "2.30.2", + "@aws-lambda-powertools/commons": "2.31.0", "@aws/lambda-invoke-store": "0.2.3" }, "peerDependencies": { - "@aws-lambda-powertools/jmespath": "2.30.2", + "@aws-lambda-powertools/jmespath": "2.31.0", "@middy/core": "4.x || 5.x || 6.x || 7.x" }, "peerDependenciesMeta": { @@ -546,12 +515,12 @@ } }, "node_modules/@aws-lambda-powertools/parameters": { - "version": "2.30.2", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/parameters/-/parameters-2.30.2.tgz", - "integrity": "sha512-RVyaINQ2PInZwBtAX9J9TiAOtrtvOby9r+TRpXEi4bSPGA4dHmt+cvCG9B2181nVAAK3DkuciPhzblzQK7CyDA==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/parameters/-/parameters-2.31.0.tgz", + "integrity": "sha512-CO3JVcnBWTWaGwNslGadUfzr8eQiSiRUQCUp5IVdN7TULD6CNYV32VI35AkOFhGstmEC1BKP36T+AzVGxQWIew==", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "2.30.2" + "@aws-lambda-powertools/commons": "2.31.0" }, "peerDependencies": { "@aws-sdk/client-appconfigdata": ">=3.x", @@ -583,47 +552,47 @@ } }, "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.980.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.980.0.tgz", - "integrity": "sha512-1rGhAx4cHZy3pMB3R3r84qMT5WEvQ6ajr2UksnD48fjQxwaUcpI6NsPvU5j/5BI5LqGiUO6ThOrMwSMm95twQA==", + "version": "3.995.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.995.0.tgz", + "integrity": "sha512-JDg3O4w8qi8XIHhPf1AMmquqlrpQJ6z22z0h3Z2rUmzrS+cNj3aUnXrZVRvRlHbvEMzTgVcpcfdRcy4RvDcamw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.5", - "@aws-sdk/credential-provider-node": "^3.972.4", - "@aws-sdk/dynamodb-codec": "^3.972.5", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/dynamodb-codec": "^3.972.12", "@aws-sdk/middleware-endpoint-discovery": "^3.972.3", "@aws-sdk/middleware-host-header": "^3.972.3", "@aws-sdk/middleware-logger": "^3.972.3", "@aws-sdk/middleware-recursion-detection": "^3.972.3", - "@aws-sdk/middleware-user-agent": "^3.972.5", + "@aws-sdk/middleware-user-agent": "^3.972.11", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.980.0", + "@aws-sdk/util-endpoints": "3.995.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", - "@aws-sdk/util-user-agent-node": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.10", "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.22.0", + "@smithy/core": "^3.23.2", "@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.12", - "@smithy/middleware-retry": "^4.4.29", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", "@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/node-http-handler": "^4.4.10", "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.11.1", + "@smithy/smithy-client": "^4.11.5", "@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.28", - "@smithy/util-defaults-mode-node": "^4.2.31", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", "@smithy/util-endpoints": "^3.2.8", "@smithy/util-middleware": "^4.2.8", "@smithy/util-retry": "^4.2.8", @@ -635,23 +604,85 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-dynamodb/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==", + "node_modules/@aws-sdk/client-dynamodb/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-dynamodb/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-firehose": { + "version": "3.982.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-firehose/-/client-firehose-3.982.0.tgz", + "integrity": "sha512-Qur2Siqep+gRReTjlKXcdpyX/MUnzm5OgNNudDPxzpmzdnc3ZKlUwGlbEoS1VA5cFS6N4zg6WfZqlwcXg//TSg==", "license": "Apache-2.0", "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.6", + "@aws-sdk/credential-provider-node": "^3.972.5", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.6", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.982.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.4", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.12", + "@smithy/middleware-retry": "^4.4.29", + "@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.11.1", "@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.28", + "@smithy/util-defaults-mode-node": "^4.2.31", + "@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-dynamodb/node_modules/@aws-sdk/util-endpoints": { - "version": "3.980.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.980.0.tgz", - "integrity": "sha512-AjKBNEc+rjOZQE1HwcD9aCELqg1GmUj1rtICKuY8cgwB73xJ4U/kNyqKKpN2k9emGqlfDY2D8itIp/vDc6OKpw==", + "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/util-endpoints": { + "version": "3.982.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.982.0.tgz", + "integrity": "sha512-M27u8FJP7O0Of9hMWX5dipp//8iglmV9jr7R8SR8RveU+Z50/8TqH68Tu6wUWBGMfXjzbVwn1INIAO5lZrlxXQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.1", @@ -664,7 +695,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-dynamodb/node_modules/@smithy/types": { + "node_modules/@aws-sdk/client-firehose/node_modules/@smithy/types": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", @@ -676,7 +707,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-dynamodb/node_modules/@smithy/util-utf8": { + "node_modules/@aws-sdk/client-firehose/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==", @@ -689,2614 +720,413 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-firehose": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-firehose/-/client-firehose-3.723.0.tgz", - "integrity": "sha512-mz2IXBCVpN0p3Ofrga8AJdNIZ3keiqTwjEgtm0AgSFWPNI8ioF0pZRtVrbbyzapY/7lMfcCJDQle8IPihtofYQ==", + "node_modules/@aws-sdk/client-kinesis": { + "version": "3.982.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-kinesis/-/client-kinesis-3.982.0.tgz", + "integrity": "sha512-Gh3xyumdz3IRj91HIBR48TohQyA3VSn/blDcGXzl4dwQKXgM0ISdHgyniNo2GQNhORJF3d01MSMx72s5NNQxUA==", "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.723.0", - "@aws-sdk/client-sts": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@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.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", + "@aws-sdk/core": "^3.973.6", + "@aws-sdk/credential-provider-node": "^3.972.5", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.6", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.982.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.4", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.0", + "@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.12", + "@smithy/middleware-retry": "^4.4.29", + "@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.11.1", + "@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.28", + "@smithy/util-defaults-mode-node": "^4.2.31", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/client-sso": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.723.0.tgz", - "integrity": "sha512-r1ddZDb8yPmdofX1gQ4m8oqKozgkgVONLlAuSprGObbyMy8bYt1Psxu+GjnwMmgVu3vlF069PHyW1ndrBiL1zA==", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/util-endpoints": { + "version": "3.982.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.982.0.tgz", + "integrity": "sha512-M27u8FJP7O0Of9hMWX5dipp//8iglmV9jr7R8SR8RveU+Z50/8TqH68Tu6wUWBGMfXjzbVwn1INIAO5lZrlxXQ==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@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.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/core": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.723.0.tgz", - "integrity": "sha512-UraXNmvqj3vScSsTkjMwQkhei30BhXlW5WxX6JacMKVtl95c7z0qOXquTWeTalYkFfulfdirUhvSZrl+hcyqTw==", + "node_modules/@aws-sdk/client-kinesis/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.723.0", - "@smithy/core": "^3.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/signature-v4": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.723.0.tgz", - "integrity": "sha512-OuH2yULYUHTVDUotBoP/9AEUIJPn81GQ/YBtZLoo2QyezRJ2QiO/1epVtbJlhNZRwXrToLEDmQGA2QfC8c7pbA==", + "node_modules/@aws-sdk/client-kinesis/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/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/types": "^4.0.0", + "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.723.0.tgz", - "integrity": "sha512-DTsKC6xo/kz/ZSs1IcdbQMTgiYbpGTGEd83kngFc1bzmw7AmK92DBZKNZpumf8R/UfSpTcj9zzUUmrWz1kD0eQ==", + "node_modules/@aws-sdk/client-lambda": { + "version": "3.995.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.995.0.tgz", + "integrity": "sha512-udxiVZs+l84PKrlmYelLNwxLLEJWK1bQLdt6zZdwOdzuv+39KkRaGkAH8fFhrH1S7QM19usV0l6GOE+Zzx40aQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-stream": "^4.0.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.995.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.10", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@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.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@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.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-stream": "^4.5.12", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.723.0.tgz", - "integrity": "sha512-OyLHt+aY+rkuRejigcxviS5RLUBcqbxhDTSNfP8dp9I+1SP610qRLpTIROvtKwXZssFcATpPfgikFtVYRrihXQ==", + "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": { - "@aws-sdk/credential-provider-env": "3.723.0", - "@aws-sdk/credential-provider-http": "3.723.0", - "@aws-sdk/credential-provider-ini": "3.723.0", - "@aws-sdk/credential-provider-process": "3.723.0", - "@aws-sdk/credential-provider-sso": "3.723.0", - "@aws-sdk/credential-provider-web-identity": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/credential-provider-imds": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.723.0.tgz", - "integrity": "sha512-fWRLksuSG851e7Iu+ltMrQTM7C/5iI9OkxAmCYblcCetAzjTRmMB2arku0Z83D8edIZEQtOJMt5oQ9KNg43pzg==", + "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": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-env": "3.723.0", - "@aws-sdk/credential-provider-http": "3.723.0", - "@aws-sdk/credential-provider-process": "3.723.0", - "@aws-sdk/credential-provider-sso": "3.723.0", - "@aws-sdk/credential-provider-web-identity": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/credential-provider-imds": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", + "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.723.0" } }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.723.0.tgz", - "integrity": "sha512-tl7pojbFbr3qLcOE6xWaNCf1zEfZrIdSJtOPeSXfV/thFMMAvIjgf3YN6Zo1a6cxGee8zrV/C8PgOH33n+Ev/A==", + "node_modules/@aws-sdk/client-personalize-events": { + "version": "3.982.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize-events/-/client-personalize-events-3.982.0.tgz", + "integrity": "sha512-JllssIZCPxAgYy4gkIM2e/kXxWT0xQzzZd5y9rRStm0bl5MiLAxzX4q9WhGG7glyB++EuhYskiT1N+DzyM5nTw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/types": "^4.0.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.6", + "@aws-sdk/credential-provider-node": "^3.972.5", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.6", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.982.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.4", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.12", + "@smithy/middleware-retry": "^4.4.29", + "@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.11.1", + "@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.28", + "@smithy/util-defaults-mode-node": "^4.2.31", + "@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" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.723.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.723.0.tgz", - "integrity": "sha512-fgupvUjz1+jeoCBA7GMv0L6xEk92IN6VdF4YcFhsgRHlHvNgm7ayaoKQg7pz2JAAhG/3jPX6fp0ASNy+xOhmPA==", + "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/util-endpoints": { + "version": "3.982.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.982.0.tgz", + "integrity": "sha512-M27u8FJP7O0Of9hMWX5dipp//8iglmV9jr7R8SR8RveU+Z50/8TqH68Tu6wUWBGMfXjzbVwn1INIAO5lZrlxXQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.723.0.tgz", - "integrity": "sha512-laCnxrk0pgUegU+ib6rj1/Uv51wei+cH8crvBJddybc8EDn7Qht61tCvBwf3o33qUDC+ZWZZewlpSebf+J+tBw==", + "node_modules/@aws-sdk/client-personalize-events/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/client-sso": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/token-providers": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.723.0.tgz", - "integrity": "sha512-hniWi1x4JHVwKElANh9afKIMUhAutHVBRD8zo6usr0PAoj+Waf220+1ULS74GXtLXAPCiNXl5Og+PHA7xT8ElQ==", + "node_modules/@aws-sdk/client-personalize-events/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.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", + "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.723.0" } }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.723.0.tgz", - "integrity": "sha512-LLVzLvk299pd7v4jN9yOSaWDZDfH0SnBPb6q+FDPaOCMGBY8kuwQso7e/ozIKSmZHRMGO3IZrflasHM+rI+2YQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/middleware-logger": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.723.0.tgz", - "integrity": "sha512-chASQfDG5NJ8s5smydOEnNK7N0gDMyuPbx7dYYcm1t/PKtnVfvWF+DHCTrRC2Ej76gLJVCVizlAJKM8v8Kg3cg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.723.0.tgz", - "integrity": "sha512-7usZMtoynT9/jxL/rkuDOFQ0C2mhXl4yCm67Rg7GNTstl67u7w5WN1aIRImMeztaKlw8ExjoTyo6WTs1Kceh7A==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.723.0.tgz", - "integrity": "sha512-AY5H2vD3IRElplBO4DCyRMNnOG/4/cb0tsHyLe1HJy0hdUF6eY5z/VVjKJoKbbDk7ui9euyOBWslXxDyLmyPWg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@smithy/core": "^3.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.723.0.tgz", - "integrity": "sha512-tGF/Cvch3uQjZIj34LY2mg8M2Dr4kYG8VU8Yd0dFnB1ybOEOveIK/9ypUo9ycZpB9oO6q01KRe5ijBaxNueUQg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/util-endpoints": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.723.0.tgz", - "integrity": "sha512-vR1ZfAUvrTtdA1Q78QxgR8TFgi2gzk+N4EmNjbyR5hHmeOXuaKRdhbNQAzLPYVe1aNUpoiy9cl8mWkg9SrNHBw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.723.0.tgz", - "integrity": "sha512-Wh9I6j2jLhNFq6fmXydIpqD1WyQLyTfSxjW9B+PXSnPyk3jtQW8AKQur7p97rO8LAUzVI0bv8kb3ZzDEVbquIg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.723.0.tgz", - "integrity": "sha512-uCtW5sGq8jCwA9w57TvVRIwNnPbSDD1lJaTIgotf7Jit2bTrYR64thgMy/drL5yU5aHOdFIQljqn/5aDXLtTJw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/types": "^4.0.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/client-firehose/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-firehose/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-firehose/node_modules/fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/@aws-sdk/client-firehose/node_modules/strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, - "node_modules/@aws-sdk/client-kinesis": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-kinesis/-/client-kinesis-3.723.0.tgz", - "integrity": "sha512-N0OMDqc9uuXQji5iIir+D9u08oA9yV1Xtpyh6oCrC8Ocm7rh6jMDATIQKj9iVBdLbpetpf3le19oinN4ZDQYbg==", - "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.723.0", - "@aws-sdk/client-sts": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/eventstream-serde-browser": "^4.0.0", - "@smithy/eventstream-serde-config-resolver": "^4.0.0", - "@smithy/eventstream-serde-node": "^4.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@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.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "@smithy/util-waiter": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/client-sso": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.723.0.tgz", - "integrity": "sha512-r1ddZDb8yPmdofX1gQ4m8oqKozgkgVONLlAuSprGObbyMy8bYt1Psxu+GjnwMmgVu3vlF069PHyW1ndrBiL1zA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@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.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/core": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.723.0.tgz", - "integrity": "sha512-UraXNmvqj3vScSsTkjMwQkhei30BhXlW5WxX6JacMKVtl95c7z0qOXquTWeTalYkFfulfdirUhvSZrl+hcyqTw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/core": "^3.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/signature-v4": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "fast-xml-parser": "4.4.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.723.0.tgz", - "integrity": "sha512-OuH2yULYUHTVDUotBoP/9AEUIJPn81GQ/YBtZLoo2QyezRJ2QiO/1epVtbJlhNZRwXrToLEDmQGA2QfC8c7pbA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.723.0.tgz", - "integrity": "sha512-DTsKC6xo/kz/ZSs1IcdbQMTgiYbpGTGEd83kngFc1bzmw7AmK92DBZKNZpumf8R/UfSpTcj9zzUUmrWz1kD0eQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-stream": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.723.0.tgz", - "integrity": "sha512-OyLHt+aY+rkuRejigcxviS5RLUBcqbxhDTSNfP8dp9I+1SP610qRLpTIROvtKwXZssFcATpPfgikFtVYRrihXQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.723.0", - "@aws-sdk/credential-provider-http": "3.723.0", - "@aws-sdk/credential-provider-ini": "3.723.0", - "@aws-sdk/credential-provider-process": "3.723.0", - "@aws-sdk/credential-provider-sso": "3.723.0", - "@aws-sdk/credential-provider-web-identity": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/credential-provider-imds": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.723.0.tgz", - "integrity": "sha512-fWRLksuSG851e7Iu+ltMrQTM7C/5iI9OkxAmCYblcCetAzjTRmMB2arku0Z83D8edIZEQtOJMt5oQ9KNg43pzg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-env": "3.723.0", - "@aws-sdk/credential-provider-http": "3.723.0", - "@aws-sdk/credential-provider-process": "3.723.0", - "@aws-sdk/credential-provider-sso": "3.723.0", - "@aws-sdk/credential-provider-web-identity": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/credential-provider-imds": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.723.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.723.0.tgz", - "integrity": "sha512-tl7pojbFbr3qLcOE6xWaNCf1zEfZrIdSJtOPeSXfV/thFMMAvIjgf3YN6Zo1a6cxGee8zrV/C8PgOH33n+Ev/A==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.723.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.723.0.tgz", - "integrity": "sha512-fgupvUjz1+jeoCBA7GMv0L6xEk92IN6VdF4YcFhsgRHlHvNgm7ayaoKQg7pz2JAAhG/3jPX6fp0ASNy+xOhmPA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.723.0.tgz", - "integrity": "sha512-laCnxrk0pgUegU+ib6rj1/Uv51wei+cH8crvBJddybc8EDn7Qht61tCvBwf3o33qUDC+ZWZZewlpSebf+J+tBw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-sso": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/token-providers": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.723.0.tgz", - "integrity": "sha512-hniWi1x4JHVwKElANh9afKIMUhAutHVBRD8zo6usr0PAoj+Waf220+1ULS74GXtLXAPCiNXl5Og+PHA7xT8ElQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.723.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.723.0.tgz", - "integrity": "sha512-LLVzLvk299pd7v4jN9yOSaWDZDfH0SnBPb6q+FDPaOCMGBY8kuwQso7e/ozIKSmZHRMGO3IZrflasHM+rI+2YQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/middleware-logger": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.723.0.tgz", - "integrity": "sha512-chASQfDG5NJ8s5smydOEnNK7N0gDMyuPbx7dYYcm1t/PKtnVfvWF+DHCTrRC2Ej76gLJVCVizlAJKM8v8Kg3cg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.723.0.tgz", - "integrity": "sha512-7usZMtoynT9/jxL/rkuDOFQ0C2mhXl4yCm67Rg7GNTstl67u7w5WN1aIRImMeztaKlw8ExjoTyo6WTs1Kceh7A==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.723.0.tgz", - "integrity": "sha512-AY5H2vD3IRElplBO4DCyRMNnOG/4/cb0tsHyLe1HJy0hdUF6eY5z/VVjKJoKbbDk7ui9euyOBWslXxDyLmyPWg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@smithy/core": "^3.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.723.0.tgz", - "integrity": "sha512-tGF/Cvch3uQjZIj34LY2mg8M2Dr4kYG8VU8Yd0dFnB1ybOEOveIK/9ypUo9ycZpB9oO6q01KRe5ijBaxNueUQg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/util-endpoints": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.723.0.tgz", - "integrity": "sha512-vR1ZfAUvrTtdA1Q78QxgR8TFgi2gzk+N4EmNjbyR5hHmeOXuaKRdhbNQAzLPYVe1aNUpoiy9cl8mWkg9SrNHBw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.723.0.tgz", - "integrity": "sha512-Wh9I6j2jLhNFq6fmXydIpqD1WyQLyTfSxjW9B+PXSnPyk3jtQW8AKQur7p97rO8LAUzVI0bv8kb3ZzDEVbquIg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.723.0.tgz", - "integrity": "sha512-uCtW5sGq8jCwA9w57TvVRIwNnPbSDD1lJaTIgotf7Jit2bTrYR64thgMy/drL5yU5aHOdFIQljqn/5aDXLtTJw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/types": "^4.0.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/client-kinesis/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-kinesis/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-kinesis/node_modules/fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/@aws-sdk/client-kinesis/node_modules/strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, - "node_modules/@aws-sdk/client-lambda": { - "version": "3.978.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.978.0.tgz", - "integrity": "sha512-R3XJh7r0m7iimku6IgDJ6mS/s2CUJVA1oicIf9/YVudEVkU3drOV3MZpzBHJwmBvBXVM8jDOA7qkfDmgVHHJSA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.4", - "@aws-sdk/credential-provider-node": "^3.972.2", - "@aws-sdk/middleware-host-header": "^3.972.2", - "@aws-sdk/middleware-logger": "^3.972.2", - "@aws-sdk/middleware-recursion-detection": "^3.972.2", - "@aws-sdk/middleware-user-agent": "^3.972.4", - "@aws-sdk/region-config-resolver": "^3.972.2", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.972.0", - "@aws-sdk/util-user-agent-browser": "^3.972.2", - "@aws-sdk/util-user-agent-node": "^3.972.2", - "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.22.0", - "@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.12", - "@smithy/middleware-retry": "^4.4.29", - "@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.11.1", - "@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.28", - "@smithy/util-defaults-mode-node": "^4.2.31", - "@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": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/client-lambda/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-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": { - "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-personalize-events": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize-events/-/client-personalize-events-3.723.0.tgz", - "integrity": "sha512-vQ8UDfI8byPZcgfLh3jU1cqVDpCK5niYyMq993ouBhkzBrEg178ZmIgEJG0dg4J9vO1Qrz353CyJgZQQF4ReFg==", - "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.723.0", - "@aws-sdk/client-sts": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@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.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/client-sso": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.723.0.tgz", - "integrity": "sha512-r1ddZDb8yPmdofX1gQ4m8oqKozgkgVONLlAuSprGObbyMy8bYt1Psxu+GjnwMmgVu3vlF069PHyW1ndrBiL1zA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@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.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/core": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.723.0.tgz", - "integrity": "sha512-UraXNmvqj3vScSsTkjMwQkhei30BhXlW5WxX6JacMKVtl95c7z0qOXquTWeTalYkFfulfdirUhvSZrl+hcyqTw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/core": "^3.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/signature-v4": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "fast-xml-parser": "4.4.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.723.0.tgz", - "integrity": "sha512-OuH2yULYUHTVDUotBoP/9AEUIJPn81GQ/YBtZLoo2QyezRJ2QiO/1epVtbJlhNZRwXrToLEDmQGA2QfC8c7pbA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.723.0.tgz", - "integrity": "sha512-DTsKC6xo/kz/ZSs1IcdbQMTgiYbpGTGEd83kngFc1bzmw7AmK92DBZKNZpumf8R/UfSpTcj9zzUUmrWz1kD0eQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-stream": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.723.0.tgz", - "integrity": "sha512-OyLHt+aY+rkuRejigcxviS5RLUBcqbxhDTSNfP8dp9I+1SP610qRLpTIROvtKwXZssFcATpPfgikFtVYRrihXQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.723.0", - "@aws-sdk/credential-provider-http": "3.723.0", - "@aws-sdk/credential-provider-ini": "3.723.0", - "@aws-sdk/credential-provider-process": "3.723.0", - "@aws-sdk/credential-provider-sso": "3.723.0", - "@aws-sdk/credential-provider-web-identity": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/credential-provider-imds": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.723.0.tgz", - "integrity": "sha512-fWRLksuSG851e7Iu+ltMrQTM7C/5iI9OkxAmCYblcCetAzjTRmMB2arku0Z83D8edIZEQtOJMt5oQ9KNg43pzg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-env": "3.723.0", - "@aws-sdk/credential-provider-http": "3.723.0", - "@aws-sdk/credential-provider-process": "3.723.0", - "@aws-sdk/credential-provider-sso": "3.723.0", - "@aws-sdk/credential-provider-web-identity": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/credential-provider-imds": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.723.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.723.0.tgz", - "integrity": "sha512-tl7pojbFbr3qLcOE6xWaNCf1zEfZrIdSJtOPeSXfV/thFMMAvIjgf3YN6Zo1a6cxGee8zrV/C8PgOH33n+Ev/A==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.723.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.723.0.tgz", - "integrity": "sha512-fgupvUjz1+jeoCBA7GMv0L6xEk92IN6VdF4YcFhsgRHlHvNgm7ayaoKQg7pz2JAAhG/3jPX6fp0ASNy+xOhmPA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.723.0.tgz", - "integrity": "sha512-laCnxrk0pgUegU+ib6rj1/Uv51wei+cH8crvBJddybc8EDn7Qht61tCvBwf3o33qUDC+ZWZZewlpSebf+J+tBw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-sso": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/token-providers": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.723.0.tgz", - "integrity": "sha512-hniWi1x4JHVwKElANh9afKIMUhAutHVBRD8zo6usr0PAoj+Waf220+1ULS74GXtLXAPCiNXl5Og+PHA7xT8ElQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.723.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.723.0.tgz", - "integrity": "sha512-LLVzLvk299pd7v4jN9yOSaWDZDfH0SnBPb6q+FDPaOCMGBY8kuwQso7e/ozIKSmZHRMGO3IZrflasHM+rI+2YQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/middleware-logger": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.723.0.tgz", - "integrity": "sha512-chASQfDG5NJ8s5smydOEnNK7N0gDMyuPbx7dYYcm1t/PKtnVfvWF+DHCTrRC2Ej76gLJVCVizlAJKM8v8Kg3cg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.723.0.tgz", - "integrity": "sha512-7usZMtoynT9/jxL/rkuDOFQ0C2mhXl4yCm67Rg7GNTstl67u7w5WN1aIRImMeztaKlw8ExjoTyo6WTs1Kceh7A==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.723.0.tgz", - "integrity": "sha512-AY5H2vD3IRElplBO4DCyRMNnOG/4/cb0tsHyLe1HJy0hdUF6eY5z/VVjKJoKbbDk7ui9euyOBWslXxDyLmyPWg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@smithy/core": "^3.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.723.0.tgz", - "integrity": "sha512-tGF/Cvch3uQjZIj34LY2mg8M2Dr4kYG8VU8Yd0dFnB1ybOEOveIK/9ypUo9ycZpB9oO6q01KRe5ijBaxNueUQg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/util-endpoints": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.723.0.tgz", - "integrity": "sha512-vR1ZfAUvrTtdA1Q78QxgR8TFgi2gzk+N4EmNjbyR5hHmeOXuaKRdhbNQAzLPYVe1aNUpoiy9cl8mWkg9SrNHBw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.723.0.tgz", - "integrity": "sha512-Wh9I6j2jLhNFq6fmXydIpqD1WyQLyTfSxjW9B+PXSnPyk3jtQW8AKQur7p97rO8LAUzVI0bv8kb3ZzDEVbquIg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.723.0.tgz", - "integrity": "sha512-uCtW5sGq8jCwA9w57TvVRIwNnPbSDD1lJaTIgotf7Jit2bTrYR64thgMy/drL5yU5aHOdFIQljqn/5aDXLtTJw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/types": "^4.0.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/client-personalize-events/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-personalize-events/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-personalize-events/node_modules/fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/@aws-sdk/client-personalize-events/node_modules/strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, - "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.980.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.980.0.tgz", - "integrity": "sha512-TeDBmkR8x3toPnvkFMBG73QqxsWjksFUMJyR0C4tZjVXjFq9igGwq8nHYDrQA0Hony6tGvH0SyNsjsL5w5qTww==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.5", - "@aws-sdk/credential-provider-node": "^3.972.4", - "@aws-sdk/middleware-host-header": "^3.972.3", - "@aws-sdk/middleware-logger": "^3.972.3", - "@aws-sdk/middleware-recursion-detection": "^3.972.3", - "@aws-sdk/middleware-user-agent": "^3.972.5", - "@aws-sdk/region-config-resolver": "^3.972.3", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.980.0", - "@aws-sdk/util-user-agent-browser": "^3.972.3", - "@aws-sdk/util-user-agent-node": "^3.972.3", - "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.22.0", - "@smithy/fetch-http-handler": "^5.3.9", - "@smithy/hash-node": "^4.2.8", - "@smithy/invalid-dependency": "^4.2.8", - "@smithy/middleware-content-length": "^4.2.8", - "@smithy/middleware-endpoint": "^4.4.12", - "@smithy/middleware-retry": "^4.4.29", - "@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.11.1", - "@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.28", - "@smithy/util-defaults-mode-node": "^4.2.31", - "@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-secrets-manager/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-secrets-manager/node_modules/@aws-sdk/util-endpoints": { - "version": "3.980.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.980.0.tgz", - "integrity": "sha512-AjKBNEc+rjOZQE1HwcD9aCELqg1GmUj1rtICKuY8cgwB73xJ4U/kNyqKKpN2k9emGqlfDY2D8itIp/vDc6OKpw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.1", - "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", - "@smithy/util-endpoints": "^3.2.8", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/client-secrets-manager/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-secrets-manager/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-sso": { - "version": "3.980.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.980.0.tgz", - "integrity": "sha512-AhNXQaJ46C1I+lQ+6Kj+L24il5K9lqqIanJd8lMszPmP7bLnmX0wTKK0dxywcvrLdij3zhWttjAKEBNgLtS8/A==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.5", - "@aws-sdk/middleware-host-header": "^3.972.3", - "@aws-sdk/middleware-logger": "^3.972.3", - "@aws-sdk/middleware-recursion-detection": "^3.972.3", - "@aws-sdk/middleware-user-agent": "^3.972.5", - "@aws-sdk/region-config-resolver": "^3.972.3", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.980.0", - "@aws-sdk/util-user-agent-browser": "^3.972.3", - "@aws-sdk/util-user-agent-node": "^3.972.3", - "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.22.0", - "@smithy/fetch-http-handler": "^5.3.9", - "@smithy/hash-node": "^4.2.8", - "@smithy/invalid-dependency": "^4.2.8", - "@smithy/middleware-content-length": "^4.2.8", - "@smithy/middleware-endpoint": "^4.4.12", - "@smithy/middleware-retry": "^4.4.29", - "@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.11.1", - "@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.28", - "@smithy/util-defaults-mode-node": "^4.2.31", - "@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-oidc": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.723.0.tgz", - "integrity": "sha512-9IH90m4bnHogBctVna2FnXaIGVORncfdxcqeEIovOxjIJJyHDmEAtA7B91dAM4sruddTbVzOYnqfPVst3odCbA==", - "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.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@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.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.723.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/client-sso": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.723.0.tgz", - "integrity": "sha512-r1ddZDb8yPmdofX1gQ4m8oqKozgkgVONLlAuSprGObbyMy8bYt1Psxu+GjnwMmgVu3vlF069PHyW1ndrBiL1zA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@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.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/core": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.723.0.tgz", - "integrity": "sha512-UraXNmvqj3vScSsTkjMwQkhei30BhXlW5WxX6JacMKVtl95c7z0qOXquTWeTalYkFfulfdirUhvSZrl+hcyqTw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/core": "^3.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/signature-v4": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "fast-xml-parser": "4.4.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.723.0.tgz", - "integrity": "sha512-OuH2yULYUHTVDUotBoP/9AEUIJPn81GQ/YBtZLoo2QyezRJ2QiO/1epVtbJlhNZRwXrToLEDmQGA2QfC8c7pbA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.723.0.tgz", - "integrity": "sha512-DTsKC6xo/kz/ZSs1IcdbQMTgiYbpGTGEd83kngFc1bzmw7AmK92DBZKNZpumf8R/UfSpTcj9zzUUmrWz1kD0eQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-stream": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.723.0.tgz", - "integrity": "sha512-fWRLksuSG851e7Iu+ltMrQTM7C/5iI9OkxAmCYblcCetAzjTRmMB2arku0Z83D8edIZEQtOJMt5oQ9KNg43pzg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-env": "3.723.0", - "@aws-sdk/credential-provider-http": "3.723.0", - "@aws-sdk/credential-provider-process": "3.723.0", - "@aws-sdk/credential-provider-sso": "3.723.0", - "@aws-sdk/credential-provider-web-identity": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/credential-provider-imds": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.723.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.723.0.tgz", - "integrity": "sha512-OyLHt+aY+rkuRejigcxviS5RLUBcqbxhDTSNfP8dp9I+1SP610qRLpTIROvtKwXZssFcATpPfgikFtVYRrihXQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.723.0", - "@aws-sdk/credential-provider-http": "3.723.0", - "@aws-sdk/credential-provider-ini": "3.723.0", - "@aws-sdk/credential-provider-process": "3.723.0", - "@aws-sdk/credential-provider-sso": "3.723.0", - "@aws-sdk/credential-provider-web-identity": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/credential-provider-imds": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.723.0.tgz", - "integrity": "sha512-fgupvUjz1+jeoCBA7GMv0L6xEk92IN6VdF4YcFhsgRHlHvNgm7ayaoKQg7pz2JAAhG/3jPX6fp0ASNy+xOhmPA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.723.0.tgz", - "integrity": "sha512-laCnxrk0pgUegU+ib6rj1/Uv51wei+cH8crvBJddybc8EDn7Qht61tCvBwf3o33qUDC+ZWZZewlpSebf+J+tBw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-sso": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/token-providers": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.723.0.tgz", - "integrity": "sha512-tl7pojbFbr3qLcOE6xWaNCf1zEfZrIdSJtOPeSXfV/thFMMAvIjgf3YN6Zo1a6cxGee8zrV/C8PgOH33n+Ev/A==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.723.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.723.0.tgz", - "integrity": "sha512-LLVzLvk299pd7v4jN9yOSaWDZDfH0SnBPb6q+FDPaOCMGBY8kuwQso7e/ozIKSmZHRMGO3IZrflasHM+rI+2YQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-logger": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.723.0.tgz", - "integrity": "sha512-chASQfDG5NJ8s5smydOEnNK7N0gDMyuPbx7dYYcm1t/PKtnVfvWF+DHCTrRC2Ej76gLJVCVizlAJKM8v8Kg3cg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.723.0.tgz", - "integrity": "sha512-7usZMtoynT9/jxL/rkuDOFQ0C2mhXl4yCm67Rg7GNTstl67u7w5WN1aIRImMeztaKlw8ExjoTyo6WTs1Kceh7A==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.723.0.tgz", - "integrity": "sha512-AY5H2vD3IRElplBO4DCyRMNnOG/4/cb0tsHyLe1HJy0hdUF6eY5z/VVjKJoKbbDk7ui9euyOBWslXxDyLmyPWg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@smithy/core": "^3.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.723.0.tgz", - "integrity": "sha512-tGF/Cvch3uQjZIj34LY2mg8M2Dr4kYG8VU8Yd0dFnB1ybOEOveIK/9ypUo9ycZpB9oO6q01KRe5ijBaxNueUQg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/token-providers": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.723.0.tgz", - "integrity": "sha512-hniWi1x4JHVwKElANh9afKIMUhAutHVBRD8zo6usr0PAoj+Waf220+1ULS74GXtLXAPCiNXl5Og+PHA7xT8ElQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.723.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/util-endpoints": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.723.0.tgz", - "integrity": "sha512-vR1ZfAUvrTtdA1Q78QxgR8TFgi2gzk+N4EmNjbyR5hHmeOXuaKRdhbNQAzLPYVe1aNUpoiy9cl8mWkg9SrNHBw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.723.0.tgz", - "integrity": "sha512-Wh9I6j2jLhNFq6fmXydIpqD1WyQLyTfSxjW9B+PXSnPyk3jtQW8AKQur7p97rO8LAUzVI0bv8kb3ZzDEVbquIg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.723.0.tgz", - "integrity": "sha512-uCtW5sGq8jCwA9w57TvVRIwNnPbSDD1lJaTIgotf7Jit2bTrYR64thgMy/drL5yU5aHOdFIQljqn/5aDXLtTJw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/types": "^4.0.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/client-sso-oidc/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-oidc/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-sso-oidc/node_modules/fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, - "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/@aws-sdk/util-endpoints": { - "version": "3.980.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.980.0.tgz", - "integrity": "sha512-AjKBNEc+rjOZQE1HwcD9aCELqg1GmUj1rtICKuY8cgwB73xJ4U/kNyqKKpN2k9emGqlfDY2D8itIp/vDc6OKpw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.1", - "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", - "@smithy/util-endpoints": "^3.2.8", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/client-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/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-sts": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.723.0.tgz", - "integrity": "sha512-YyN8x4MI/jMb4LpHsLf+VYqvbColMK8aZeGWVk2fTFsmt8lpTYGaGC1yybSwGX42mZ4W8ucu8SAYSbUraJZEjA==", - "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.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-node": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@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.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/client-sso": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.723.0.tgz", - "integrity": "sha512-r1ddZDb8yPmdofX1gQ4m8oqKozgkgVONLlAuSprGObbyMy8bYt1Psxu+GjnwMmgVu3vlF069PHyW1ndrBiL1zA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/middleware-host-header": "3.723.0", - "@aws-sdk/middleware-logger": "3.723.0", - "@aws-sdk/middleware-recursion-detection": "3.723.0", - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/region-config-resolver": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@aws-sdk/util-user-agent-browser": "3.723.0", - "@aws-sdk/util-user-agent-node": "3.723.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@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.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/core": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.723.0.tgz", - "integrity": "sha512-UraXNmvqj3vScSsTkjMwQkhei30BhXlW5WxX6JacMKVtl95c7z0qOXquTWeTalYkFfulfdirUhvSZrl+hcyqTw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/core": "^3.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/signature-v4": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "fast-xml-parser": "4.4.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.723.0.tgz", - "integrity": "sha512-OuH2yULYUHTVDUotBoP/9AEUIJPn81GQ/YBtZLoo2QyezRJ2QiO/1epVtbJlhNZRwXrToLEDmQGA2QfC8c7pbA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.723.0.tgz", - "integrity": "sha512-DTsKC6xo/kz/ZSs1IcdbQMTgiYbpGTGEd83kngFc1bzmw7AmK92DBZKNZpumf8R/UfSpTcj9zzUUmrWz1kD0eQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-stream": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.723.0.tgz", - "integrity": "sha512-fWRLksuSG851e7Iu+ltMrQTM7C/5iI9OkxAmCYblcCetAzjTRmMB2arku0Z83D8edIZEQtOJMt5oQ9KNg43pzg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/credential-provider-env": "3.723.0", - "@aws-sdk/credential-provider-http": "3.723.0", - "@aws-sdk/credential-provider-process": "3.723.0", - "@aws-sdk/credential-provider-sso": "3.723.0", - "@aws-sdk/credential-provider-web-identity": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/credential-provider-imds": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.723.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.723.0.tgz", - "integrity": "sha512-OyLHt+aY+rkuRejigcxviS5RLUBcqbxhDTSNfP8dp9I+1SP610qRLpTIROvtKwXZssFcATpPfgikFtVYRrihXQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.723.0", - "@aws-sdk/credential-provider-http": "3.723.0", - "@aws-sdk/credential-provider-ini": "3.723.0", - "@aws-sdk/credential-provider-process": "3.723.0", - "@aws-sdk/credential-provider-sso": "3.723.0", - "@aws-sdk/credential-provider-web-identity": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/credential-provider-imds": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.723.0.tgz", - "integrity": "sha512-fgupvUjz1+jeoCBA7GMv0L6xEk92IN6VdF4YcFhsgRHlHvNgm7ayaoKQg7pz2JAAhG/3jPX6fp0ASNy+xOhmPA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.723.0.tgz", - "integrity": "sha512-laCnxrk0pgUegU+ib6rj1/Uv51wei+cH8crvBJddybc8EDn7Qht61tCvBwf3o33qUDC+ZWZZewlpSebf+J+tBw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-sso": "3.723.0", - "@aws-sdk/core": "3.723.0", - "@aws-sdk/token-providers": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.723.0.tgz", - "integrity": "sha512-hniWi1x4JHVwKElANh9afKIMUhAutHVBRD8zo6usr0PAoj+Waf220+1ULS74GXtLXAPCiNXl5Og+PHA7xT8ElQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.723.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.723.0.tgz", - "integrity": "sha512-tl7pojbFbr3qLcOE6xWaNCf1zEfZrIdSJtOPeSXfV/thFMMAvIjgf3YN6Zo1a6cxGee8zrV/C8PgOH33n+Ev/A==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.723.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.723.0.tgz", - "integrity": "sha512-LLVzLvk299pd7v4jN9yOSaWDZDfH0SnBPb6q+FDPaOCMGBY8kuwQso7e/ozIKSmZHRMGO3IZrflasHM+rI+2YQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-logger": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.723.0.tgz", - "integrity": "sha512-chASQfDG5NJ8s5smydOEnNK7N0gDMyuPbx7dYYcm1t/PKtnVfvWF+DHCTrRC2Ej76gLJVCVizlAJKM8v8Kg3cg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.723.0.tgz", - "integrity": "sha512-7usZMtoynT9/jxL/rkuDOFQ0C2mhXl4yCm67Rg7GNTstl67u7w5WN1aIRImMeztaKlw8ExjoTyo6WTs1Kceh7A==", + "node_modules/@aws-sdk/client-secrets-manager": { + "version": "3.995.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.995.0.tgz", + "integrity": "sha512-JamAKL0JgvW6/UMzrYV2UgsX7cHp69yq34NEHy6bjvzUAV7P/F1FZTJkHVfD4tKzLudkfFnFEFJuOPctLYFbtg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.995.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.10", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@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.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@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.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@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/client-sts/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.723.0.tgz", - "integrity": "sha512-AY5H2vD3IRElplBO4DCyRMNnOG/4/cb0tsHyLe1HJy0hdUF6eY5z/VVjKJoKbbDk7ui9euyOBWslXxDyLmyPWg==", + "node_modules/@aws-sdk/client-secrets-manager/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.723.0", - "@aws-sdk/types": "3.723.0", - "@aws-sdk/util-endpoints": "3.723.0", - "@smithy/core": "^3.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.723.0.tgz", - "integrity": "sha512-tGF/Cvch3uQjZIj34LY2mg8M2Dr4kYG8VU8Yd0dFnB1ybOEOveIK/9ypUo9ycZpB9oO6q01KRe5ijBaxNueUQg==", + "node_modules/@aws-sdk/client-secrets-manager/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.723.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", + "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-endpoints": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.723.0.tgz", - "integrity": "sha512-vR1ZfAUvrTtdA1Q78QxgR8TFgi2gzk+N4EmNjbyR5hHmeOXuaKRdhbNQAzLPYVe1aNUpoiy9cl8mWkg9SrNHBw==", + "node_modules/@aws-sdk/client-sso": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.993.0.tgz", + "integrity": "sha512-VLUN+wIeNX24fg12SCbzTUBnBENlL014yMKZvRhPkcn4wHR6LKgNrjsG3fZ03Xs0XoKaGtNFi1VVrq666sGBoQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@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.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@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.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@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_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.723.0.tgz", - "integrity": "sha512-Wh9I6j2jLhNFq6fmXydIpqD1WyQLyTfSxjW9B+PXSnPyk3jtQW8AKQur7p97rO8LAUzVI0bv8kb3ZzDEVbquIg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.723.0", - "@smithy/types": "^4.0.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.723.0.tgz", - "integrity": "sha512-uCtW5sGq8jCwA9w57TvVRIwNnPbSDD1lJaTIgotf7Jit2bTrYR64thgMy/drL5yU5aHOdFIQljqn/5aDXLtTJw==", + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-endpoints": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.993.0.tgz", + "integrity": "sha512-j6vioBeRZ4eHX4SWGvGPpwGg/xSOcK7f1GL0VM+rdf3ZFTIsUEhCFmD78B+5r2PgztcECSzEfvHQX01k8dPQPw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.723.0", - "@aws-sdk/types": "3.723.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/types": "^4.0.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/types": { + "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==", @@ -3308,7 +1138,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": { + "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==", @@ -3321,54 +1151,20 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, "node_modules/@aws-sdk/core": { - "version": "3.973.5", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.5.tgz", - "integrity": "sha512-IMM7xGfLGW6lMvubsA4j6BHU5FPgGAxoQ/NA63KqNLMwTS+PeMBcx8DPHL12Vg6yqOZnqok9Mu4H2BdQyq7gSA==", + "version": "3.973.11", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.11.tgz", + "integrity": "sha512-wdQ8vrvHkKIV7yNUKXyjPWKCdYEUrZTHJ8Ojd5uJxXp9vqPCkUR1dpi1NtOLcrDgueJH7MUH5lQZxshjFPSbDA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.1", - "@aws-sdk/xml-builder": "^3.972.2", - "@smithy/core": "^3.22.0", + "@aws-sdk/xml-builder": "^3.972.5", + "@smithy/core": "^3.23.2", "@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.11.1", + "@smithy/smithy-client": "^4.11.5", "@smithy/types": "^4.12.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-middleware": "^4.2.8", @@ -3379,19 +1175,6 @@ "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/@smithy/types": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", @@ -3418,12 +1201,12 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.3.tgz", - "integrity": "sha512-OBYNY4xQPq7Rx+oOhtyuyO0AQvdJSpXRg7JuPNBJH4a1XXIzJQl4UHQTPKZKwfJXmYLpv4+OkcFen4LYmDPd3g==", + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.9.tgz", + "integrity": "sha512-ZptrOwQynfupubvcngLkbdIq/aXvl/czdpEG8XJ8mN8Nb19BR0jaK0bR+tfuMU36Ez9q4xv7GGkHFqEEP2hUUQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.5", + "@aws-sdk/core": "^3.973.11", "@aws-sdk/types": "^3.973.1", "@smithy/property-provider": "^4.2.8", "@smithy/types": "^4.12.0", @@ -3433,19 +1216,6 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-env/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/credential-provider-env/node_modules/@smithy/types": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", @@ -3459,33 +1229,20 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.972.5", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.5.tgz", - "integrity": "sha512-GpvBgEmSZPvlDekd26Zi+XsI27Qz7y0utUx0g2fSTSiDzhnd1FSa1owuodxR0BcUKNL7U2cOVhhDxgZ4iSoPVg==", + "version": "3.972.11", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.11.tgz", + "integrity": "sha512-hECWoOoH386bGr89NQc9vA/abkGf5TJrMREt+lhNcnSNmoBS04fK7vc3LrJBSQAUGGVj0Tz3f4dHB3w5veovig==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.5", + "@aws-sdk/core": "^3.973.11", "@aws-sdk/types": "^3.973.1", "@smithy/fetch-http-handler": "^5.3.9", - "@smithy/node-http-handler": "^4.4.8", + "@smithy/node-http-handler": "^4.4.10", "@smithy/property-provider": "^4.2.8", "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.11.1", - "@smithy/types": "^4.12.0", - "@smithy/util-stream": "^4.5.10", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "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": { + "@smithy/smithy-client": "^4.11.5", "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.12", "tslib": "^2.6.2" }, "engines": { @@ -3505,19 +1262,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.3.tgz", - "integrity": "sha512-rMQAIxstP7cLgYfsRGrGOlpyMl0l8JL2mcke3dsIPLWke05zKOFyR7yoJzWCsI/QiIxjRbxpvPiAeKEA6CoYkg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.973.5", - "@aws-sdk/credential-provider-env": "^3.972.3", - "@aws-sdk/credential-provider-http": "^3.972.5", - "@aws-sdk/credential-provider-login": "^3.972.3", - "@aws-sdk/credential-provider-process": "^3.972.3", - "@aws-sdk/credential-provider-sso": "^3.972.3", - "@aws-sdk/credential-provider-web-identity": "^3.972.3", - "@aws-sdk/nested-clients": "3.980.0", + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.9.tgz", + "integrity": "sha512-zr1csEu9n4eDiHMTYJabX1mDGuGLgjgUnNckIivvk43DocJC9/f6DefFrnUPZXE+GHtbW50YuXb+JIxKykU74A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-env": "^3.972.9", + "@aws-sdk/credential-provider-http": "^3.972.11", + "@aws-sdk/credential-provider-login": "^3.972.9", + "@aws-sdk/credential-provider-process": "^3.972.9", + "@aws-sdk/credential-provider-sso": "^3.972.9", + "@aws-sdk/credential-provider-web-identity": "^3.972.9", + "@aws-sdk/nested-clients": "3.993.0", "@aws-sdk/types": "^3.973.1", "@smithy/credential-provider-imds": "^4.2.8", "@smithy/property-provider": "^4.2.8", @@ -3529,19 +1286,6 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/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/credential-provider-ini/node_modules/@smithy/types": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", @@ -3555,13 +1299,13 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.3.tgz", - "integrity": "sha512-Gc3O91iVvA47kp2CLIXOwuo5ffo1cIpmmyIewcYjAcvurdFHQ8YdcBe1KHidnbbBO4/ZtywGBACsAX5vr3UdoA==", + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.9.tgz", + "integrity": "sha512-m4RIpVgZChv0vWS/HKChg1xLgZPpx8Z+ly9Fv7FwA8SOfuC6I3htcSaBz2Ch4bneRIiBUhwP4ziUo0UZgtJStQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.5", - "@aws-sdk/nested-clients": "3.980.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/nested-clients": "3.993.0", "@aws-sdk/types": "^3.973.1", "@smithy/property-provider": "^4.2.8", "@smithy/protocol-http": "^5.3.8", @@ -3573,19 +1317,6 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/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/credential-provider-login/node_modules/@smithy/types": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", @@ -3599,17 +1330,17 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.4.tgz", - "integrity": "sha512-UwerdzosMSY7V5oIZm3NsMDZPv2aSVzSkZxYxIOWHBeKTZlUqW7XpHtJMZ4PZpJ+HMRhgP+MDGQx4THndgqJfQ==", + "version": "3.972.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.10.tgz", + "integrity": "sha512-70nCESlvnzjo4LjJ8By8MYIiBogkYPSXl3WmMZfH9RZcB/Nt9qVWbFpYj6Fk1vLa4Vk8qagFVeXgxdieMxG1QA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "^3.972.3", - "@aws-sdk/credential-provider-http": "^3.972.5", - "@aws-sdk/credential-provider-ini": "^3.972.3", - "@aws-sdk/credential-provider-process": "^3.972.3", - "@aws-sdk/credential-provider-sso": "^3.972.3", - "@aws-sdk/credential-provider-web-identity": "^3.972.3", + "@aws-sdk/credential-provider-env": "^3.972.9", + "@aws-sdk/credential-provider-http": "^3.972.11", + "@aws-sdk/credential-provider-ini": "^3.972.9", + "@aws-sdk/credential-provider-process": "^3.972.9", + "@aws-sdk/credential-provider-sso": "^3.972.9", + "@aws-sdk/credential-provider-web-identity": "^3.972.9", "@aws-sdk/types": "^3.973.1", "@smithy/credential-provider-imds": "^4.2.8", "@smithy/property-provider": "^4.2.8", @@ -3621,19 +1352,6 @@ "node": ">=20.0.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": "^4.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, "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", @@ -3647,12 +1365,12 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.3.tgz", - "integrity": "sha512-xkSY7zjRqeVc6TXK2xr3z1bTLm0wD8cj3lAkproRGaO4Ku7dPlKy843YKnHrUOUzOnMezdZ4xtmFc0eKIDTo2w==", + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.9.tgz", + "integrity": "sha512-gOWl0Fe2gETj5Bk151+LYKpeGi2lBDLNu+NMNpHRlIrKHdBmVun8/AalwMK8ci4uRfG5a3/+zvZBMpuen1SZ0A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.5", + "@aws-sdk/core": "^3.973.11", "@aws-sdk/types": "^3.973.1", "@smithy/property-provider": "^4.2.8", "@smithy/shared-ini-file-loader": "^4.4.3", @@ -3663,19 +1381,6 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-process/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/credential-provider-process/node_modules/@smithy/types": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", @@ -3689,30 +1394,17 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.3.tgz", - "integrity": "sha512-8Ww3F5Ngk8dZ6JPL/V5LhCU1BwMfQd3tLdoEuzaewX8FdnT633tPr+KTHySz9FK7fFPcz5qG3R5edVEhWQD4AA==", + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.9.tgz", + "integrity": "sha512-ey7S686foGTArvFhi3ifQXmgptKYvLSGE2250BAQceMSXZddz7sUSNERGJT2S7u5KIe/kgugxrt01hntXVln6w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.980.0", - "@aws-sdk/core": "^3.973.5", - "@aws-sdk/token-providers": "3.980.0", + "@aws-sdk/client-sso": "3.993.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/token-providers": "3.993.0", "@aws-sdk/types": "^3.973.1", - "@smithy/property-provider": "^4.2.8", - "@smithy/shared-ini-file-loader": "^4.4.3", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-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/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -3733,13 +1425,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.3.tgz", - "integrity": "sha512-62VufdcH5rRfiRKZRcf1wVbbt/1jAntMj1+J0qAd+r5pQRg2t0/P9/Rz16B1o5/0Se9lVL506LRjrhIJAhYBfA==", + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.9.tgz", + "integrity": "sha512-8LnfS76nHXoEc9aRRiMMpxZxJeDG0yusdyo3NvPhCgESmBUgpMa4luhGbClW5NoX/qRcGxxM6Z/esqANSNMTow==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.5", - "@aws-sdk/nested-clients": "3.980.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/nested-clients": "3.993.0", "@aws-sdk/types": "^3.973.1", "@smithy/property-provider": "^4.2.8", "@smithy/shared-ini-file-loader": "^4.4.3", @@ -3750,19 +1442,6 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/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/credential-provider-web-identity/node_modules/@smithy/types": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", @@ -3776,23 +1455,20 @@ } }, "node_modules/@aws-sdk/dynamodb-codec": { - "version": "3.972.5", - "resolved": "https://registry.npmjs.org/@aws-sdk/dynamodb-codec/-/dynamodb-codec-3.972.5.tgz", - "integrity": "sha512-gFR4w3dIkaZ82kFFjil7RFtukS2y2fXrDNDfgc94DhKjjOQMJEcHM5o1GGaQE4jd2mOQfHvbeQ0ktU8xGXhHjQ==", + "version": "3.972.12", + "resolved": "https://registry.npmjs.org/@aws-sdk/dynamodb-codec/-/dynamodb-codec-3.972.12.tgz", + "integrity": "sha512-hX5lIhIACrmYPxW3sKoHxKJO87SPlnYBF8ztrQwm74tJEoX8eFo/iVjiEP56zkVvwOtMMqblNgmd7Jr0zZcbGA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.5", - "@smithy/core": "^3.22.0", - "@smithy/smithy-client": "^4.11.1", + "@aws-sdk/core": "^3.973.11", + "@smithy/core": "^3.23.2", + "@smithy/smithy-client": "^4.11.5", "@smithy/types": "^4.12.0", "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-dynamodb": "3.980.0" } }, "node_modules/@aws-sdk/dynamodb-codec/node_modules/@smithy/types": { @@ -3821,15 +1497,15 @@ } }, "node_modules/@aws-sdk/lib-dynamodb": { - "version": "3.980.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.980.0.tgz", - "integrity": "sha512-rot+9bSIUCjCJCh+BnH++ZYHCEUtTDVKkrBpN+WxbrEEGUvU1RNhkQEPXcLaf57UobRjoTI4m3LNBJCH7E6MCw==", + "version": "3.994.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.994.0.tgz", + "integrity": "sha512-ANNIhMcs6v3DHdl26oukilaaX7gaA1xrxcuMdPwjzhg3gsq98t/7NT1St7b9FeeDsKPAwAqniQYpqSDblmM6Hw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.5", - "@aws-sdk/util-dynamodb": "3.980.0", - "@smithy/core": "^3.22.0", - "@smithy/smithy-client": "^4.11.1", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/util-dynamodb": "3.994.0", + "@smithy/core": "^3.23.2", + "@smithy/smithy-client": "^4.11.5", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -3837,7 +1513,7 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@aws-sdk/client-dynamodb": "3.980.0" + "@aws-sdk/client-dynamodb": "^3.994.0" } }, "node_modules/@aws-sdk/lib-dynamodb/node_modules/@smithy/types": { @@ -3869,19 +1545,6 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-endpoint-discovery/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/middleware-endpoint-discovery/node_modules/@smithy/types": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", @@ -3909,19 +1572,6 @@ "node": ">=20.0.0" } }, - "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", - "dependencies": { - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.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", @@ -3948,19 +1598,6 @@ "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": ">=20.0.0" - } - }, "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", @@ -3989,19 +1626,6 @@ "node": ">=20.0.0" } }, - "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": { - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, "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", @@ -4015,15 +1639,15 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.972.5", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.5.tgz", - "integrity": "sha512-TVZQ6PWPwQbahUI8V+Er+gS41ctIawcI/uMNmQtQ7RMcg3JYn6gyKAFKUb3HFYx2OjYlx1u11sETSwwEUxVHTg==", + "version": "3.972.11", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.11.tgz", + "integrity": "sha512-R8CvPsPHXwzIHCAza+bllY6PrctEk4lYq/SkHJz9NLoBHCcKQrbOcsfXxO6xmipSbUNIbNIUhH0lBsJGgsRdiw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.5", + "@aws-sdk/core": "^3.973.11", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.980.0", - "@smithy/core": "^3.22.0", + "@aws-sdk/util-endpoints": "3.993.0", + "@smithy/core": "^3.23.2", "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" @@ -4032,23 +1656,10 @@ "node": ">=20.0.0" } }, - "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/types": "^4.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints": { - "version": "3.980.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.980.0.tgz", - "integrity": "sha512-AjKBNEc+rjOZQE1HwcD9aCELqg1GmUj1rtICKuY8cgwB73xJ4U/kNyqKKpN2k9emGqlfDY2D8itIp/vDc6OKpw==", + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.993.0.tgz", + "integrity": "sha512-j6vioBeRZ4eHX4SWGvGPpwGg/xSOcK7f1GL0VM+rdf3ZFTIsUEhCFmD78B+5r2PgztcECSzEfvHQX01k8dPQPw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.1", @@ -4074,44 +1685,44 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.980.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.980.0.tgz", - "integrity": "sha512-/dONY5xc5/CCKzOqHZCTidtAR4lJXWkGefXvTRKdSKMGaYbbKsxDckisd6GfnvPSLxWtvQzwgRGRutMRoYUApQ==", + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.993.0.tgz", + "integrity": "sha512-iOq86f2H67924kQUIPOAvlmMaOAvOLoDOIb66I2YqSUpMYB6ufiuJW3RlREgskxv86S5qKzMnfy/X6CqMjK6XQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.5", + "@aws-sdk/core": "^3.973.11", "@aws-sdk/middleware-host-header": "^3.972.3", "@aws-sdk/middleware-logger": "^3.972.3", "@aws-sdk/middleware-recursion-detection": "^3.972.3", - "@aws-sdk/middleware-user-agent": "^3.972.5", + "@aws-sdk/middleware-user-agent": "^3.972.11", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.980.0", + "@aws-sdk/util-endpoints": "3.993.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", - "@aws-sdk/util-user-agent-node": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.22.0", + "@smithy/core": "^3.23.2", "@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.12", - "@smithy/middleware-retry": "^4.4.29", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", "@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/node-http-handler": "^4.4.10", "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.11.1", + "@smithy/smithy-client": "^4.11.5", "@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.28", - "@smithy/util-defaults-mode-node": "^4.2.31", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", "@smithy/util-endpoints": "^3.2.8", "@smithy/util-middleware": "^4.2.8", "@smithy/util-retry": "^4.2.8", @@ -4122,23 +1733,10 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/nested-clients/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/nested-clients/node_modules/@aws-sdk/util-endpoints": { - "version": "3.980.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.980.0.tgz", - "integrity": "sha512-AjKBNEc+rjOZQE1HwcD9aCELqg1GmUj1rtICKuY8cgwB73xJ4U/kNyqKKpN2k9emGqlfDY2D8itIp/vDc6OKpw==", + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.993.0.tgz", + "integrity": "sha512-j6vioBeRZ4eHX4SWGvGPpwGg/xSOcK7f1GL0VM+rdf3ZFTIsUEhCFmD78B+5r2PgztcECSzEfvHQX01k8dPQPw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.1", @@ -4231,19 +1829,6 @@ "node": ">=20.0.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", - "dependencies": { - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.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", @@ -4257,13 +1842,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.980.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.980.0.tgz", - "integrity": "sha512-1nFileg1wAgDmieRoj9dOawgr2hhlh7xdvcH57b1NnqfPaVlcqVJyPc6k3TLDUFPY69eEwNxdGue/0wIz58vjA==", + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.993.0.tgz", + "integrity": "sha512-+35g4c+8r7sB9Sjp1KPdM8qxGn6B/shBjJtEUN4e+Edw9UEQlZKIzioOGu3UAbyE0a/s450LdLZr4wbJChtmww==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.5", - "@aws-sdk/nested-clients": "3.980.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/nested-clients": "3.993.0", "@aws-sdk/types": "^3.973.1", "@smithy/property-provider": "^4.2.8", "@smithy/shared-ini-file-loader": "^4.4.3", @@ -4274,19 +1859,6 @@ "node": ">=20.0.0" } }, - "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", - "dependencies": { - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.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", @@ -4300,16 +1872,16 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.723.0.tgz", - "integrity": "sha512-LmK3kwiMZG1y5g3LGihT9mNkeNOmwEyPk6HGcJqh0wOSV4QpWoKu2epyKE4MLQNUUlz2kOVbVbOrwmI6ZcteuA==", + "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.0.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/types/node_modules/@smithy/types": { @@ -4325,9 +1897,9 @@ } }, "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.980.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.980.0.tgz", - "integrity": "sha512-jG/yzr/JLFl7II9TTDWRKJRHThTXYNDYy694bRTj7JCXCU/Gb11ir5fJ7sV6FhlR9LrIaDb7Fft3RifvEnZcSQ==", + "version": "3.994.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.994.0.tgz", + "integrity": "sha512-TYGnR6Cn6Lckx52qv9O/1SkjqiMkeTfRPQLL/qbu+ZiHiW/AjutI+I7LrD84gLqdSaiXha2eMm9Zqq5g1kKDHA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -4336,16 +1908,16 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@aws-sdk/client-dynamodb": "3.980.0" + "@aws-sdk/client-dynamodb": "^3.994.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==", + "version": "3.995.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.995.0.tgz", + "integrity": "sha512-aym/pjB8SLbo9w2nmkrDdAAVKVlf7CM71B9mKhjDbJTzwpSFBPHqJIMdDyj0mLumKC0aIVDr1H6U+59m9GvMFw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.972.0", + "@aws-sdk/types": "^3.973.1", "@smithy/types": "^4.12.0", "@smithy/url-parser": "^4.2.8", "@smithy/util-endpoints": "^3.2.8", @@ -4355,19 +1927,6 @@ "node": ">=20.0.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": { - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.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", @@ -4416,19 +1975,6 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/util-user-agent-browser/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/util-user-agent-browser/node_modules/@smithy/types": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", @@ -4442,12 +1988,12 @@ } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.3.tgz", - "integrity": "sha512-gqG+02/lXQtO0j3US6EVnxtwwoXQC5l2qkhLCrqUrqdtcQxV7FDMbm9wLjKqoronSHyELGTjbFKK/xV5q1bZNA==", + "version": "3.972.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.10.tgz", + "integrity": "sha512-LVXzICPlsheET+sE6tkcS47Q5HkSTrANIlqL1iFxGAY/wRQ236DX/PCAK56qMh9QJoXAfXfoRW0B0Og4R+X7Nw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "^3.972.5", + "@aws-sdk/middleware-user-agent": "^3.972.11", "@aws-sdk/types": "^3.973.1", "@smithy/node-config-provider": "^4.3.8", "@smithy/types": "^4.12.0", @@ -4465,19 +2011,6 @@ } } }, - "node_modules/@aws-sdk/util-user-agent-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": "^4.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.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", @@ -4500,13 +2033,13 @@ } }, "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==", + "version": "3.972.5", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.5.tgz", + "integrity": "sha512-mCae5Ys6Qm1LDu0qdGwx2UQ63ONUe+FHw908fJzLDqFKTDBK4LDZUqKWm4OkTCNFq19bftjsBSESIGLD/s3/rA==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.12.0", - "fast-xml-parser": "5.2.5", + "fast-xml-parser": "5.3.6", "tslib": "^2.6.2" }, "engines": { @@ -4565,7 +2098,6 @@ "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", @@ -5204,7 +2736,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -5228,7 +2759,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -5268,9 +2798,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", "cpu": [ "ppc64" ], @@ -5284,9 +2814,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", "cpu": [ "arm" ], @@ -5300,9 +2830,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", "cpu": [ "arm64" ], @@ -5316,9 +2846,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", "cpu": [ "x64" ], @@ -5332,9 +2862,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", "cpu": [ "arm64" ], @@ -5348,9 +2878,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", "cpu": [ "x64" ], @@ -5364,9 +2894,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", "cpu": [ "arm64" ], @@ -5380,9 +2910,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", "cpu": [ "x64" ], @@ -5396,9 +2926,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", "cpu": [ "arm" ], @@ -5412,9 +2942,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", "cpu": [ "arm64" ], @@ -5428,9 +2958,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", "cpu": [ "ia32" ], @@ -5444,9 +2974,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", "cpu": [ "loong64" ], @@ -5460,9 +2990,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", "cpu": [ "mips64el" ], @@ -5476,9 +3006,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", "cpu": [ "ppc64" ], @@ -5492,9 +3022,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", "cpu": [ "riscv64" ], @@ -5508,9 +3038,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", "cpu": [ "s390x" ], @@ -5524,9 +3054,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", "cpu": [ "x64" ], @@ -5540,9 +3070,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", "cpu": [ "arm64" ], @@ -5556,9 +3086,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", "cpu": [ "x64" ], @@ -5572,9 +3102,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", "cpu": [ "arm64" ], @@ -5588,9 +3118,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", "cpu": [ "x64" ], @@ -5604,9 +3134,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", "cpu": [ "arm64" ], @@ -5620,9 +3150,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", "cpu": [ "x64" ], @@ -5636,9 +3166,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", "cpu": [ "arm64" ], @@ -5652,9 +3182,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", "cpu": [ "ia32" ], @@ -5668,9 +3198,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", "cpu": [ "x64" ], @@ -6654,9 +4184,9 @@ } }, "node_modules/@middy/core": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@middy/core/-/core-7.0.2.tgz", - "integrity": "sha512-C4PEJxMjWFneqfQzsbWQ9BZ7Bfds9oqw74/fTuEeunI/0PA1KtGfbHDuU1SQH6lZ3rOp+VUIYh4YDho8qmc2Rg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@middy/core/-/core-7.1.0.tgz", + "integrity": "sha512-fihJkSckBB1DJkOLlv5FcdmnH5jEFP3xRCPHsKITToQrrQVfjPFDf/ZZPqisvndy/e3DnA16Cvec1gBtP+PAIg==", "license": "MIT", "engines": { "node": ">=22" @@ -6675,9 +4205,9 @@ } }, "node_modules/@middy/http-header-normalizer": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@middy/http-header-normalizer/-/http-header-normalizer-7.0.2.tgz", - "integrity": "sha512-VYxaswkxENBy3YdHkMy6dQz1rX1pTPDuF299EPnywyXNVG740EnVkBcCwpLB0Xn5OKWPCNrwISTvntTvVXmQeg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@middy/http-header-normalizer/-/http-header-normalizer-7.1.1.tgz", + "integrity": "sha512-oe+fnz5tF7fIjtrbIphJBztfum08OXF6pTOPAjf9XERx0YVw/aqeBG+7+iFt68W7YNdv0pMZNB4BhK15jtXDrw==", "license": "MIT", "engines": { "node": ">=22" @@ -6688,12 +4218,12 @@ } }, "node_modules/@middy/input-output-logger": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@middy/input-output-logger/-/input-output-logger-7.0.2.tgz", - "integrity": "sha512-sNOb9Ja+xbWNxpMBSl0jP6mJA66IHYBVy24TVS4PRmRDty4YCVUwkd3i+ZFTVOc91Ek6MuE03+RRIkGydBIbdQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@middy/input-output-logger/-/input-output-logger-7.1.1.tgz", + "integrity": "sha512-cj/LJ/yc15L8JnlTv3n8FPviLMibvqev/ZNqusLutHr8qAjcyQCpmj3+29PePbjQKNKmq1ptwcCjaI7m6Aaq7g==", "license": "MIT", "dependencies": { - "@middy/util": "7.0.2" + "@middy/util": "7.1.1" }, "engines": { "node": ">=22" @@ -6704,9 +4234,9 @@ } }, "node_modules/@middy/util": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@middy/util/-/util-7.0.2.tgz", - "integrity": "sha512-81pP1Am7QarL6e2+SHYnDu83jxqgxM3sztHJNLDZ2B+YwzT+smGjMaDX10bFH8PvTDr/nic3QaNOe2X8UoCaBw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@middy/util/-/util-7.1.1.tgz", + "integrity": "sha512-nz1BS4tijvgRdAFqyM067x8d/dsKy0o2Vn8sbkWQ9WUsxrofAgrk4YN9BAUAR2y7krQnOCK8UCMZLOOG94GXMg==", "license": "MIT", "engines": { "node": ">=22" @@ -6717,9 +4247,9 @@ } }, "node_modules/@mswjs/interceptors": { - "version": "0.39.8", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.39.8.tgz", - "integrity": "sha512-2+BzZbjRO7Ct61k8fMNHEtoKjeWI9pIlHFTqBwZ5icHpqszIgEZbjb1MW5Z0+bITTCTl3gk4PDBxs9tA/csXvA==", + "version": "0.41.3", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.41.3.tgz", + "integrity": "sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==", "dev": true, "license": "MIT", "dependencies": { @@ -7136,9 +4666,9 @@ } }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.47.tgz", - "integrity": "sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==", + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", + "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", "dev": true, "license": "MIT" }, @@ -7602,9 +5132,9 @@ } }, "node_modules/@smithy/core": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.22.0.tgz", - "integrity": "sha512-6vjCHD6vaY8KubeNw2Fg3EK0KLGQYdldG4fYgQmA0xSW0dJ8G2xFhSOdrlUakWVoP5JuWHtFODg3PNd/DN3FDA==", + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.2.tgz", + "integrity": "sha512-HaaH4VbGie4t0+9nY3tNBRSxVTr96wzIqexUa6C2qx3MPePAuz7lIxPxYtt1Wc//SPfJLNoZJzfdt0B6ksj2jA==", "license": "Apache-2.0", "dependencies": { "@smithy/middleware-serde": "^4.2.9", @@ -7613,7 +5143,7 @@ "@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-stream": "^4.5.12", "@smithy/util-utf8": "^4.2.0", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" @@ -7972,12 +5502,12 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.4.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.12.tgz", - "integrity": "sha512-9JMKHVJtW9RysTNjcBZQHDwB0p3iTP6B1IfQV4m+uCevkVd/VuLgwfqk5cnI4RHcp4cPwoIvxQqN4B1sxeHo8Q==", + "version": "4.4.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.16.tgz", + "integrity": "sha512-L5GICFCSsNhbJ5JSKeWFGFy16Q2OhoBizb3X2DrxaJwXSEujVvjG9Jt386dpQn2t7jINglQl0b4K/Su69BdbMA==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.22.0", + "@smithy/core": "^3.23.2", "@smithy/middleware-serde": "^4.2.9", "@smithy/node-config-provider": "^4.3.8", "@smithy/shared-ini-file-loader": "^4.4.3", @@ -8003,15 +5533,15 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.4.29", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.29.tgz", - "integrity": "sha512-bmTn75a4tmKRkC5w61yYQLb3DmxNzB8qSVu9SbTYqW6GAL0WXO2bDZuMAn/GJSbOdHEdjZvWxe+9Kk015bw6Cg==", + "version": "4.4.33", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.33.tgz", + "integrity": "sha512-jLqZOdJhtIL4lnA9hXnAG6GgnJlo1sD3FqsTxm9wSfjviqgWesY/TMBVnT84yr4O0Vfe0jWoXlfFbzsBVph3WA==", "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.11.1", + "@smithy/smithy-client": "^4.11.5", "@smithy/types": "^4.12.0", "@smithy/util-middleware": "^4.2.8", "@smithy/util-retry": "^4.2.8", @@ -8113,9 +5643,9 @@ } }, "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==", + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.10.tgz", + "integrity": "sha512-u4YeUwOWRZaHbWaebvrs3UhwQwj+2VNmcVCwXcYTvPIuVyM7Ex1ftAj+fdbG/P4AkBwLq/+SKn+ydOI4ZJE9PA==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.2.8", @@ -8347,17 +5877,17 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.11.1.tgz", - "integrity": "sha512-SERgNg5Z1U+jfR6/2xPYjSEHY1t3pyTHC/Ma3YQl6qWtmiL42bvNId3W/oMUWIwu7ekL2FMPdqAmwbQegM7HeQ==", + "version": "4.11.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.11.5.tgz", + "integrity": "sha512-xixwBRqoeP2IUgcAl3U9dvJXc+qJum4lzo3maaJxifsZxKUYLfVfCXvhT4/jD01sRrHg5zjd1cw2Zmjr4/SuKQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.22.0", - "@smithy/middleware-endpoint": "^4.4.12", + "@smithy/core": "^3.23.2", + "@smithy/middleware-endpoint": "^4.4.16", "@smithy/middleware-stack": "^4.2.8", "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", - "@smithy/util-stream": "^4.5.10", + "@smithy/util-stream": "^4.5.12", "tslib": "^2.6.2" }, "engines": { @@ -8491,13 +6021,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.28", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.28.tgz", - "integrity": "sha512-/9zcatsCao9h6g18p/9vH9NIi5PSqhCkxQ/tb7pMgRFnqYp9XUOyOlGPDMHzr8n5ih6yYgwJEY2MLEobUgi47w==", + "version": "4.3.32", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.32.tgz", + "integrity": "sha512-092sjYfFMQ/iaPH798LY/OJFBcYu0sSK34Oy9vdixhsU36zlZu8OcYjF3TD4e2ARupyK7xaxPXl+T0VIJTEkkg==", "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.2.8", - "@smithy/smithy-client": "^4.11.1", + "@smithy/smithy-client": "^4.11.5", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -8518,16 +6048,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.31", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.31.tgz", - "integrity": "sha512-JTvoApUXA5kbpceI2vuqQzRjeTbLpx1eoa5R/YEZbTgtxvIB7AQZxFJ0SEyfCpgPCyVV9IT7we+ytSeIB3CyWA==", + "version": "4.2.35", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.35.tgz", + "integrity": "sha512-miz/ggz87M8VuM29y7jJZMYkn7+IErM5p5UgKIf8OtqVs/h2bXr1Bt3uTsREsI/4nK8a0PQERbAPsVPVNIsG7Q==", "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.11.1", + "@smithy/smithy-client": "^4.11.5", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -8637,13 +6167,13 @@ } }, "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==", + "version": "4.5.12", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.12.tgz", + "integrity": "sha512-D8tgkrmhAX/UNeCZbqbEO3uqyghUnEmmoO9YEvRuwxjlkKKUE7FOgCJnqpTlQPe9MApdWPky58mNQQHbnCzoNg==", "license": "Apache-2.0", "dependencies": { "@smithy/fetch-http-handler": "^5.3.9", - "@smithy/node-http-handler": "^4.4.8", + "@smithy/node-http-handler": "^4.4.10", "@smithy/types": "^4.12.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-buffer-from": "^4.2.0", @@ -8794,7 +6324,6 @@ "dev": true, "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.25" @@ -9038,7 +6567,6 @@ "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -9376,13 +6904,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz", - "integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==", + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz", + "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==", "license": "MIT", - "peer": true, "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~7.18.0" } }, "node_modules/@types/prop-types": { @@ -9398,7 +6925,6 @@ "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -9410,7 +6936,6 @@ "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/react": "*" } @@ -9487,17 +7012,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz", - "integrity": "sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.0.tgz", + "integrity": "sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/type-utils": "8.54.0", - "@typescript-eslint/utils": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/type-utils": "8.56.0", + "@typescript-eslint/utils": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" @@ -9510,23 +7035,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.54.0", - "eslint": "^8.57.0 || ^9.0.0", + "@typescript-eslint/parser": "^8.56.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.54.0.tgz", - "integrity": "sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.0.tgz", + "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", "debug": "^4.4.3" }, "engines": { @@ -9537,19 +7061,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.54.0.tgz", - "integrity": "sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.0.tgz", + "integrity": "sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.54.0", - "@typescript-eslint/types": "^8.54.0", + "@typescript-eslint/tsconfig-utils": "^8.56.0", + "@typescript-eslint/types": "^8.56.0", "debug": "^4.4.3" }, "engines": { @@ -9564,14 +7088,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz", - "integrity": "sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz", + "integrity": "sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0" + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9582,9 +7106,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz", - "integrity": "sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz", + "integrity": "sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==", "dev": true, "license": "MIT", "engines": { @@ -9599,15 +7123,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.54.0.tgz", - "integrity": "sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.0.tgz", + "integrity": "sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/utils": "8.54.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/utils": "8.56.0", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, @@ -9619,14 +7143,14 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.54.0.tgz", - "integrity": "sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.0.tgz", + "integrity": "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==", "dev": true, "license": "MIT", "engines": { @@ -9638,16 +7162,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz", - "integrity": "sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz", + "integrity": "sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.54.0", - "@typescript-eslint/tsconfig-utils": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/project-service": "8.56.0", + "@typescript-eslint/tsconfig-utils": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", @@ -9666,16 +7190,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.54.0.tgz", - "integrity": "sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.0.tgz", + "integrity": "sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0" + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9685,19 +7209,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz", - "integrity": "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz", + "integrity": "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.56.0", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9708,13 +7232,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -9997,14 +7521,14 @@ ] }, "node_modules/@vitejs/plugin-react-swc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.2.2.tgz", - "integrity": "sha512-x+rE6tsxq/gxrEJN3Nv3dIV60lFflPj94c90b+NNo6n1QV1QQUTLoL0MpaOVasUZ0zqVBn7ead1B5ecx1JAGfA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.2.3.tgz", + "integrity": "sha512-QIluDil2prhY1gdA3GGwxZzTAmLdi8cQ2CcuMW4PB/Wu4e/1pzqrwhYWVd09LInCRlDUidQjd0B70QWbjWtLxA==", "dev": true, "license": "MIT", "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.47", - "@swc/core": "^1.13.5" + "@rolldown/pluginutils": "1.0.0-rc.2", + "@swc/core": "^1.15.11" }, "engines": { "node": "^20.19.0 || >=22.12.0" @@ -10178,7 +7702,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -10554,25 +8077,25 @@ } }, "node_modules/aws-amplify": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/aws-amplify/-/aws-amplify-6.16.0.tgz", - "integrity": "sha512-4DIUtlgLJ7PIZZI30rNdd8EIuvMLbvCrT2Td4WaidsCekgZhJbekR10onnDKFmbDSw4Q8O4yoy2bRP4Qb1hRnQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-amplify/analytics": "7.0.92", - "@aws-amplify/api": "6.3.23", - "@aws-amplify/auth": "6.18.0", - "@aws-amplify/core": "6.16.0", - "@aws-amplify/datastore": "5.1.4", - "@aws-amplify/notifications": "2.0.92", - "@aws-amplify/storage": "6.12.0", + "version": "6.16.2", + "resolved": "https://registry.npmjs.org/aws-amplify/-/aws-amplify-6.16.2.tgz", + "integrity": "sha512-7CHwfH5QxZ0rzCws/DNy5VLVcIIZWd9iUTtV1Oj6kPzpkFhCJ2I8gTvhFdh61HLhrg2lShcPQ8cecBIQS/ZJ0A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/analytics": "7.0.93", + "@aws-amplify/api": "6.3.24", + "@aws-amplify/auth": "6.19.1", + "@aws-amplify/core": "6.16.1", + "@aws-amplify/datastore": "5.1.5", + "@aws-amplify/notifications": "2.0.93", + "@aws-amplify/storage": "6.13.1", "tslib": "^2.5.0" } }, "node_modules/aws-cdk": { - "version": "2.1103.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.1103.0.tgz", - "integrity": "sha512-bxEcqIeAT983x7525gf4Ya4zgpDt3Ou54El7j1ITCa/KqJ8ZaOP4F0ZHiiGuCbZduMcGJlszIXkaPJuvyNADgg==", + "version": "2.1106.1", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.1106.1.tgz", + "integrity": "sha512-oSKAvM6a5dVNb+OZoLyjLe2rIkG6URVRHN+cOUZM9uEScYDYPn2KpOQ1iGofH6szsJp76GqQqpiwEpaYXrIHmw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -10583,11 +8106,12 @@ } }, "node_modules/aws-cdk-lib": { - "version": "2.236.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.236.0.tgz", - "integrity": "sha512-LauY4BX8vdYL9DvVKCgtJ2gZBwLEgfszTlFe6R2p2NUfEJ+PPpeRGxUbTaOdwLqJGN6mDqmzdoF4or8l2v69PA==", + "version": "2.239.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.239.0.tgz", + "integrity": "sha512-0qpYrE4HL6yRaQriRukfX7m82vNj3otce6v4Y5qK859ILdZBCaz/wqqYgdTnFh6LcA11GAg/Y8l8a+j/VtczyA==", "bundleDependencies": [ "@balena/dockerignore", + "@aws-cdk/cloud-assembly-api", "case", "fs-extra", "ignore", @@ -10603,7 +8127,8 @@ "dependencies": { "@aws-cdk/asset-awscli-v1": "2.2.263", "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", - "@aws-cdk/cloud-assembly-schema": "^48.20.0", + "@aws-cdk/cloud-assembly-api": "^2.0.1", + "@aws-cdk/cloud-assembly-schema": "^50.3.0", "@balena/dockerignore": "^1.0.2", "case": "1.6.3", "fs-extra": "^11.3.3", @@ -10612,7 +8137,7 @@ "mime-types": "^2.1.35", "minimatch": "^3.1.2", "punycode": "^2.3.1", - "semver": "^7.7.3", + "semver": "^7.7.4", "table": "^6.9.0", "yaml": "1.10.2" }, @@ -10620,7 +8145,45 @@ "node": ">= 18.0.0" }, "peerDependencies": { - "constructs": "^10.0.0" + "constructs": "^10.5.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/@aws-cdk/cloud-assembly-api": { + "version": "2.0.1", + "bundleDependencies": [ + "jsonschema", + "semver" + ], + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "jsonschema": "~1.4.1", + "semver": "^7.7.3" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "@aws-cdk/cloud-assembly-schema": ">=50.3.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/@aws-cdk/cloud-assembly-api/node_modules/jsonschema": { + "version": "1.4.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/aws-cdk-lib/node_modules/@aws-cdk/cloud-assembly-api/node_modules/semver": { + "version": "7.7.3", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { @@ -10629,7 +8192,7 @@ "license": "Apache-2.0" }, "node_modules/aws-cdk-lib/node_modules/ajv": { - "version": "8.17.1", + "version": "8.18.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -10851,7 +8414,7 @@ } }, "node_modules/aws-cdk-lib/node_modules/semver": { - "version": "7.7.3", + "version": "7.7.4", "inBundle": true, "license": "ISC", "bin": { @@ -11227,14 +8790,13 @@ } }, "node_modules/axios": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.4.tgz", - "integrity": "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==", + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", + "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", "license": "MIT", - "peer": true, "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, @@ -11459,7 +9021,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -11875,11 +9436,10 @@ "license": "MIT" }, "node_modules/constructs": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.4.5.tgz", - "integrity": "sha512-fOoP70YLevMZr5avJHx2DU3LNYmC6wM8OwdrNewMZou1kZnPGOeVzBrRjZNgFDHUlulYUjkpFRSpTE3D+n+ZSg==", - "license": "Apache-2.0", - "peer": true + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.5.1.tgz", + "integrity": "sha512-f/TfFXiS3G/yVIXDjOQn9oTlyu9Wo7Fxyjj7lb8r92iO81jR2uST+9MstxZTmDGx/CgIbxCXkFXgupnLTNxQZg==", + "license": "Apache-2.0" }, "node_modules/conventional-changelog-eslint": { "version": "6.0.0", @@ -12503,9 +10063,9 @@ } }, "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -12515,32 +10075,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" } }, "node_modules/escalade": { @@ -12572,7 +10132,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -12633,7 +10192,6 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -13057,9 +10615,9 @@ "license": "BSD-3-Clause" }, "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==", + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.6.tgz", + "integrity": "sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==", "funding": [ { "type": "github", @@ -13068,7 +10626,7 @@ ], "license": "MIT", "dependencies": { - "strnum": "^2.1.0" + "strnum": "^2.1.2" }, "bin": { "fxparser": "src/cli/cli.js" @@ -13514,9 +11072,9 @@ "license": "BSD-2-Clause" }, "node_modules/globals": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.2.0.tgz", - "integrity": "sha512-tovnCz/fEq+Ripoq+p/gN1u7l6A7wwkoBT9pRCzTHzsD/LvADIzXZdjmRymh5Ztf0DYC3Rwg5cZRYjxzBmzbWg==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.3.0.tgz", + "integrity": "sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==", "dev": true, "license": "MIT", "engines": { @@ -14542,7 +12100,6 @@ "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/core": "30.2.0", "@jest/types": "30.2.0", @@ -15246,7 +12803,6 @@ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -16184,7 +13740,6 @@ "resolved": "https://registry.npmjs.org/nhsuk-frontend/-/nhsuk-frontend-9.6.4.tgz", "integrity": "sha512-y0fi91jhgS1whD7jhNXKbpJ2Lmje/h5qBZ0aXmBbZdNo56805u7SsPJYxq7Uw6ffT86zQzQIxEwPwrjgSm5Whg==", "license": "MIT", - "peer": true, "workspaces": [ "." ], @@ -16197,7 +13752,6 @@ "resolved": "https://registry.npmjs.org/nhsuk-react-components/-/nhsuk-react-components-5.0.0.tgz", "integrity": "sha512-9QbYNEgLXdFaaEbrGs3IR9Gfn3M0a/6VH8a8fjPLWofl9FaP9HArpXh+eKz6D5YzUP6SmA0+0M8b84stJyBqdQ==", "license": "MIT", - "peer": true, "dependencies": { "classnames": "^2.2.6" }, @@ -16237,13 +13791,13 @@ } }, "node_modules/nock": { - "version": "14.0.10", - "resolved": "https://registry.npmjs.org/nock/-/nock-14.0.10.tgz", - "integrity": "sha512-Q7HjkpyPeLa0ZVZC5qpxBt5EyLczFJ91MEewQiIi9taWuA0KB/MDJlUWtON+7dGouVdADTQsf9RA7TZk6D8VMw==", + "version": "14.0.11", + "resolved": "https://registry.npmjs.org/nock/-/nock-14.0.11.tgz", + "integrity": "sha512-u5xUnYE+UOOBA6SpELJheMCtj2Laqx15Vl70QxKo43Wz/6nMHXS7PrEioXLjXAwhmawdEMNImwKCcPhBJWbKVw==", "dev": true, "license": "MIT", "dependencies": { - "@mswjs/interceptors": "^0.39.5", + "@mswjs/interceptors": "^0.41.0", "json-stringify-safe": "^5.0.1", "propagate": "^2.0.0" }, @@ -16821,9 +14375,9 @@ } }, "node_modules/pino": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.0.tgz", - "integrity": "sha512-0GNPNzHXBKw6U/InGe79A3Crzyk9bcSyObF9/Gfo9DLEf5qj5RF50RSjsu0W1rZ6ZqRGdzDFCRBQvi9/rSGPtA==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz", + "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==", "license": "MIT", "dependencies": { "@pinojs/redact": "^0.4.0", @@ -17163,7 +14717,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -17176,7 +14729,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -18625,7 +16177,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -18824,7 +16375,6 @@ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -18999,7 +16549,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19009,16 +16558,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.54.0.tgz", - "integrity": "sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.56.0.tgz", + "integrity": "sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.54.0", - "@typescript-eslint/parser": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/utils": "8.54.0" + "@typescript-eslint/eslint-plugin": "8.56.0", + "@typescript-eslint/parser": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/utils": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -19028,7 +16577,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, @@ -19101,9 +16650,9 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "license": "MIT" }, "node_modules/unrs-resolver": { @@ -19277,7 +16826,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -19371,7 +16919,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -19385,7 +16932,6 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -20022,12 +17568,12 @@ "packages/cdk": { "version": "0.1.0", "dependencies": { - "aws-cdk-lib": "^2.236.0", + "aws-cdk-lib": "^2.239.0", "cdk-nag": "^2.37.55", "constructs": "^10.4.5" }, "devDependencies": { - "aws-cdk": "^2.1100.3" + "aws-cdk": "^2.1106.1" } }, "packages/CIS2SignOutLambda": { @@ -20035,15 +17581,15 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/http-header-normalizer": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/http-header-normalizer": "^7.1.1", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7" }, "devDependencies": { @@ -20067,25 +17613,26 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-lambda-powertools/parameters": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/parameters": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/client-secrets-manager": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", - "axios": "^1.13.2", + "axios": "^1.13.5", "jsonwebtoken": "^9.0.3", "jwks-rsa": "^3.2.2" }, "devDependencies": { "@types/aws-lambda": "^8.10.159", "mock-jwks": "^3.3.5", - "nock": "^14.0.10" + "nock": "^14.0.11" } }, "packages/common/authFunctions": { @@ -20093,18 +17640,19 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-lambda-powertools/parameters": "^2.30.1", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/parameters": "^2.31.0", + "@aws-sdk/client-secrets-manager": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", - "@middy/core": "^7.0.2", + "@middy/core": "^7.1.0", "aws-lambda": "^1.0.7", "jsonwebtoken": "^9.0.3", "jwks-rsa": "^3.2.2" }, "devDependencies": { - "@aws-sdk/client-dynamodb": "^3.980.0", - "axios": "^1.13.2", + "@aws-sdk/client-dynamodb": "^3.995.0", + "axios": "^1.13.5", "mock-jwks": "^3.3.5" } }, @@ -20119,13 +17667,14 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "axios": "^1.13.2", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/client-secrets-manager": "^3.995.0", + "axios": "^1.13.5", "axios-retry": "^4.5.0" }, "devDependencies": { "axios-mock-adapter": "^2.1.0", - "nock": "^14.0.10" + "nock": "^14.0.11" } }, "packages/common/dynamoFunctions": { @@ -20133,8 +17682,8 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/common-types": "^1.0.0" } }, @@ -20143,10 +17692,10 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", + "@aws-lambda-powertools/logger": "^2.31.0", "@cpt-ui-common/common-types": "^1.0.0", "aws-lambda": "^1.0.7", - "axios": "^1.13.2" + "axios": "^1.13.5" } }, "packages/common/middyErrorHandler": { @@ -20154,11 +17703,11 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1" + "@aws-lambda-powertools/logger": "^2.31.0" }, "devDependencies": { "@cpt-ui-common/testing": "^1.0.0", - "@middy/core": "^7.0.2" + "@middy/core": "^7.1.0" } }, "packages/common/pdsClient": { @@ -20166,24 +17715,24 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", + "@aws-lambda-powertools/logger": "^2.31.0", "@cpt-ui-common/common-types": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", - "ajv": "^8.17.1", - "axios": "^1.13.2", + "ajv": "^8.18.0", + "axios": "^1.13.5", "date-fns": "^4.1.0", "json-schema-to-ts": "^3.1.1" }, "devDependencies": { "@cpt-ui-common/testing": "^1.0.0", "fhir": "^4.12.0", - "nock": "^14.0.10" + "nock": "^14.0.11" } }, "packages/common/pdsClient/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -20207,26 +17756,26 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1" + "@aws-lambda-powertools/logger": "^2.31.0" }, "devDependencies": { "@cpt-ui-common/common-types": "^1.0.0", - "axios": "^1.13.2" + "axios": "^1.13.5" } }, "packages/cpt-ui": { "version": "0.1.0", "dependencies": { "@cpt-ui-common/common-types": "^1.0.0", - "aws-amplify": "^6.16.0", + "aws-amplify": "^6.16.2", "aws-rum-web": "^1.25.0", - "axios": "^1.13.2", + "axios": "^1.13.5", "date-fns": "^4.1.0", "identity-obj-proxy": "^3.0.0", "nhsuk-frontend": "9.6.4", "nhsuk-react-components": "^5.0.0", "nhsuk-react-components-extensions": "^2.3.0-beta", - "pino": "^10.3.0", + "pino": "^10.3.1", "react": "18.3.1", "react-dom": "18.3.1", "react-input-mask": "^2.0.4", @@ -20234,7 +17783,7 @@ "sass": "^1.97.2" }, "devDependencies": { - "@aws-amplify/auth": "^6.18.0", + "@aws-amplify/auth": "^6.19.1", "@swc/jest": "^0.2.39", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", @@ -20244,7 +17793,7 @@ "@types/react": "18.3.1", "@types/react-dom": "18.3.1", "@types/react-input-mask": "^3.0.6", - "@vitejs/plugin-react-swc": "^4.2.2", + "@vitejs/plugin-react-swc": "^4.2.3", "axios-mock-adapter": "^2.1.0", "sass": "^1.97.2", "vite": "^7.3.1" @@ -20254,18 +17803,18 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", "@cpt-ui-common/pdsClient": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/http-header-normalizer": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/http-header-normalizer": "^7.1.1", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", - "axios": "^1.13.2" + "axios": "^1.13.5" }, "devDependencies": { "@cpt-ui-common/testing": "^1.0.0", @@ -20277,23 +17826,23 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/commons": "^2.30.0", - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-lambda-powertools/parameters": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/client-lambda": "^3.978.0", - "@aws-sdk/client-secrets-manager": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/commons": "^2.31.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/parameters": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/client-lambda": "^3.995.0", + "@aws-sdk/client-secrets-manager": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/common-types": "^1.0.0", "@cpt-ui-common/doHSClient": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", "@cpt-ui-common/pdsClient": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", - "axios": "^1.13.2", + "axios": "^1.13.5", "jsonwebtoken": "^9.0.3", "jwks-rsa": "^3.2.2" }, @@ -20302,47 +17851,47 @@ "@types/fhir": "^0.0.41", "axios-mock-adapter": "^2.0.0", "mock-jwks": "^3.3.5", - "nock": "^14.0.10" + "nock": "^14.0.11" } }, "packages/prescriptionListLambda": { "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", "@cpt-ui-common/pdsClient": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/http-header-normalizer": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/http-header-normalizer": "^7.1.1", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", - "axios": "^1.13.2" + "axios": "^1.13.5" }, "devDependencies": { "@cpt-ui-common/common-types": "^1.0.0", "@types/aws-lambda": "^8.10.159", "@types/fhir": "^0.0.41", "fhir": "^4.12.0", - "nock": "^14.0.10" + "nock": "^14.0.11" } }, "packages/selectedRoleLambda": { "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/http-header-normalizer": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/http-header-normalizer": "^7.1.1", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7" }, "devDependencies": { @@ -20354,15 +17903,15 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/commons": "^2.30.0", - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-lambda-powertools/parameters": "^2.30.1", - "@middy/core": "^7.0.2", - "@middy/input-output-logger": "^7.0.2" + "@aws-lambda-powertools/commons": "^2.31.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/parameters": "^2.31.0", + "@middy/core": "^7.1.0", + "@middy/input-output-logger": "^7.1.1" }, "devDependencies": { "axios-mock-adapter": "^2.1.0", - "esbuild": "^0.27.2" + "esbuild": "^0.27.3" } }, "packages/testingSupport/clearActiveSessions": { @@ -20370,17 +17919,17 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/http-header-normalizer": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/http-header-normalizer": "^7.1.1", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", - "axios": "^1.13.2", + "axios": "^1.13.5", "jwks-rsa": "^3.2.2" }, "devDependencies": { @@ -20392,17 +17941,17 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/http-header-normalizer": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/http-header-normalizer": "^7.1.1", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", - "axios": "^1.13.2", + "axios": "^1.13.5", "jwks-rsa": "^3.2.2" }, "devDependencies": { diff --git a/package.json b/package.json index 6599768f27..1f13042b52 100644 --- a/package.json +++ b/package.json @@ -43,9 +43,9 @@ "@eslint/js": "^9.38.0", "@jest/globals": "^30.1.1", "@types/jest": "^30.0.0", - "@types/node": "^25.1.0", - "@typescript-eslint/eslint-plugin": "^8.48.0", - "@typescript-eslint/parser": "^8.50.1", + "@types/node": "^25.3.0", + "@typescript-eslint/eslint-plugin": "^8.56.0", + "@typescript-eslint/parser": "^8.56.0", "@vitest/coverage-v8": "^4.0.18", "aws-sdk-client-mock": "^4.1.0", "eslint": "^9.39.2", @@ -53,7 +53,7 @@ "eslint-plugin-import-newlines": "^1.3.4", "eslint-plugin-prettier": "^5.5.4", "eslint-plugin-react": "^7.37.5", - "globals": "^17.1.0", + "globals": "^17.3.0", "jest": "^30.2.0", "jest-environment-jsdom": "^30.1.2", "jest-junit": "^16.0.0", @@ -61,11 +61,11 @@ "ts-jest": "^29.4.6", "ts-node": "^10.9.2", "typescript": "^5.9.3", - "typescript-eslint": "^8.52.0", + "typescript-eslint": "^8.56.0", "vitest": "^4.0.18" }, "dependencies": { "conventional-changelog-eslint": "^6.0.0", - "esbuild": "^0.27.2" + "esbuild": "^0.27.3" } } diff --git a/packages/CIS2SignOutLambda/package.json b/packages/CIS2SignOutLambda/package.json index 1e0cda1978..d9ffc59920 100644 --- a/packages/CIS2SignOutLambda/package.json +++ b/packages/CIS2SignOutLambda/package.json @@ -13,15 +13,15 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/http-header-normalizer": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/http-header-normalizer": "^7.1.1", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7" }, "devDependencies": { diff --git a/packages/cdk/nagSuppressions.ts b/packages/cdk/nagSuppressions.ts index 26604aab66..1b0aed2b62 100644 --- a/packages/cdk/nagSuppressions.ts +++ b/packages/cdk/nagSuppressions.ts @@ -258,6 +258,37 @@ export const nagSuppressions = (stack: Stack) => { ] ) + safeAddNagSuppression( + stack, + "/StatelessStack/SharedSecrets/ApigeeApiKey/Resource", + [ + { + id: "AwsSolutions-SMG4", + reason: "Suppress error for not rotating secret. This is by design." + } + ] + ) + safeAddNagSuppression( + stack, + "/StatelessStack/SharedSecrets/ApigeeApiSecret/Resource", + [ + { + id: "AwsSolutions-SMG4", + reason: "Suppress error for not rotating secret. This is by design." + } + ] + ) + safeAddNagSuppression( + stack, + "/StatelessStack/SharedSecrets/ApigeeDoHSApiKey/Resource", + [ + { + id: "AwsSolutions-SMG4", + reason: "Suppress error for not rotating secret. This is by design." + } + ] + ) + } } diff --git a/packages/cdk/package.json b/packages/cdk/package.json index 4ce77a86a0..aff276c1dc 100644 --- a/packages/cdk/package.json +++ b/packages/cdk/package.json @@ -7,11 +7,11 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "aws-cdk-lib": "^2.236.0", + "aws-cdk-lib": "^2.239.0", "cdk-nag": "^2.37.55", "constructs": "^10.4.5" }, "devDependencies": { - "aws-cdk": "^2.1100.3" + "aws-cdk": "^2.1106.1" } } diff --git a/packages/cdk/resources/SharedSecrets.ts b/packages/cdk/resources/SharedSecrets.ts index e006235d4a..36a3d7494e 100644 --- a/packages/cdk/resources/SharedSecrets.ts +++ b/packages/cdk/resources/SharedSecrets.ts @@ -16,6 +16,9 @@ export interface SharedSecretsProps { readonly stackName: string readonly deploymentRole: IRole readonly useMockOidc?: boolean + readonly apigeeApiKey: string + readonly apigeeApiSecret: string + readonly apigeeDoHSApiKey: string } // Construct for managing shared secrets and associated resources @@ -26,6 +29,11 @@ export class SharedSecrets extends Construct { public readonly useJwtKmsKeyPolicy: ManagedPolicy public readonly getPrimaryJwtPrivateKeyPolicy: ManagedPolicy public readonly getMockJwtPrivateKeyPolicy: ManagedPolicy + public readonly apigeeSecretsKmsKey: IKey + public readonly apigeeApiKey: Secret + public readonly apigeeApiSecret: Secret + public readonly apigeeDoHSApiKey: Secret + public readonly getApigeeSecretsPolicy: ManagedPolicy constructor(scope: Construct, id: string, props: SharedSecretsProps) { super(scope, id) @@ -57,6 +65,65 @@ export class SharedSecrets extends Construct { }) }) + this.apigeeSecretsKmsKey = new Key(this, "ApigeeSecretsKmsKey", { + description: `${props.stackName}-apigeeSecretsKmsKey`, + enableKeyRotation: true, + removalPolicy: RemovalPolicy.DESTROY, + pendingWindow: Duration.days(7), + policy: new PolicyDocument({ + statements: [ + // Allow full IAM permissions for account root + new PolicyStatement({ + sid: "EnableIAMUserPermissions", + effect: Effect.ALLOW, + actions: ["kms:*"], + principals: [new AccountRootPrincipal()], + resources: ["*"] + }), + // Allow the deployment role to encrypt and generate data keys + new PolicyStatement({ + effect: Effect.ALLOW, + principals: [props.deploymentRole], + actions: ["kms:Encrypt", "kms:GenerateDataKey*"], + resources: ["*"] + }) + ] + }) + }) + this.apigeeApiKey = new Secret(this, "ApigeeApiKey", { + secretName: `${props.stackName}-apigeeApiKey`, + secretStringValue: SecretValue.unsafePlainText(props.apigeeApiKey), + encryptionKey: this.apigeeSecretsKmsKey + }) + this.apigeeApiSecret = new Secret(this, "ApigeeApiSecret", { + secretName: `${props.stackName}-apigeeApiSecret`, + secretStringValue: SecretValue.unsafePlainText(props.apigeeApiSecret), + encryptionKey: this.apigeeSecretsKmsKey + }) + this.apigeeDoHSApiKey = new Secret(this, "ApigeeDoHSApiKey", { + secretName: `${props.stackName}-apigeeDoHSApiKey`, + secretStringValue: SecretValue.unsafePlainText(props.apigeeDoHSApiKey), + encryptionKey: this.apigeeSecretsKmsKey + }) + + // Create a managed policy to allow getting the primary JWT private key secret + this.getApigeeSecretsPolicy = new ManagedPolicy(this, "GetApigeeSecretsPolicy", { + statements: [ + new PolicyStatement({ + actions: ["secretsmanager:GetSecretValue"], + resources: [ + this.apigeeApiKey.secretArn, + this.apigeeApiSecret.secretArn, + this.apigeeDoHSApiKey.secretArn] + }), + new PolicyStatement({ + actions: ["kms:DescribeKey", "kms:Decrypt"], + effect: Effect.ALLOW, + resources: [this.apigeeSecretsKmsKey.keyArn] + }) + ] + }) + // Create a managed policy to allow using the KMS key for decryption this.useJwtKmsKeyPolicy = new ManagedPolicy(this, "UseJwtKmsKeyPolicy", { description: "Policy to allow using the JWT KMS key", diff --git a/packages/cdk/resources/api/apiFunctions.ts b/packages/cdk/resources/api/apiFunctions.ts index 9ab9edd71a..02d17caf9f 100644 --- a/packages/cdk/resources/api/apiFunctions.ts +++ b/packages/cdk/resources/api/apiFunctions.ts @@ -4,8 +4,7 @@ import {SharedSecrets} from "../SharedSecrets" import {ITableV2} from "aws-cdk-lib/aws-dynamodb" import {IManagedPolicy} from "aws-cdk-lib/aws-iam" import {NodejsFunction} from "aws-cdk-lib/aws-lambda-nodejs" -import {Secret} from "aws-cdk-lib/aws-secretsmanager" -import {NagSuppressions} from "cdk-nag" +import {ISecret, Secret} from "aws-cdk-lib/aws-secretsmanager" // Interface for properties needed to create API functions export interface ApiFunctionsProps { @@ -39,9 +38,9 @@ export interface ApiFunctionsProps { readonly apigeeDoHSEndpoint: string readonly apigeePrescriptionsEndpoint: string readonly apigeePersonalDemographicsEndpoint: string - readonly apigeeApiKey: string - readonly apigeeApiSecret: string - readonly apigeeDoHSApiKey: string + readonly apigeeApiKey: ISecret + readonly apigeeApiSecret: ISecret + readonly apigeeDoHSApiKey: ISecret readonly jwtKid: string readonly logLevel: string readonly roleId: string @@ -78,7 +77,8 @@ export class ApiFunctions extends Construct { props.sessionManagementTableReadPolicy, props.useSessionManagementKmsKeyPolicy, props.sharedSecrets.useJwtKmsKeyPolicy, - props.sharedSecrets.getPrimaryJwtPrivateKeyPolicy + props.sharedSecrets.getPrimaryJwtPrivateKeyPolicy, + props.sharedSecrets.getApigeeSecretsPolicy ] if (props.useMockOidc && props.sharedSecrets.getMockJwtPrivateKeyPolicy) { @@ -101,10 +101,9 @@ export class ApiFunctions extends Construct { // Indicate if mock mode is available MOCK_MODE_ENABLED: props.useMockOidc ? "true" : "false", - APIGEE_API_SECRET: props.apigeeApiSecret, - APIGEE_API_KEY: props.apigeeApiKey, + APIGEE_API_SECRET_ARN: props.apigeeApiSecret.secretArn, + APIGEE_API_KEY_ARN: props.apigeeApiKey.secretArn, FULL_CLOUDFRONT_DOMAIN: props.fullCloudfrontDomain - } // If mock OIDC is enabled, add mock environment variables @@ -240,14 +239,6 @@ export class ApiFunctions extends Construct { // Add the policy to apiFunctionsPolicies apiFunctionsPolicies.push(patientSearchLambda.executeLambdaManagedPolicy) - // Suppress the AwsSolutions-L1 rule for the prescription list Lambda function - NagSuppressions.addResourceSuppressions(prescriptionListLambda.lambda, [ - { - id: "AwsSolutions-L1", - reason: "The Lambda function uses the latest runtime version supported at the time of implementation." - } - ]) - // Prescription Details Lambda Function const prescriptionDetailsLambda = new LambdaFunction(this, "PrescriptionDetails", { serviceName: props.serviceName, @@ -266,10 +257,9 @@ export class ApiFunctions extends Construct { apigeePrescriptionsEndpoint: props.apigeePrescriptionsEndpoint, apigeeDoHSEndpoint: props.apigeeDoHSEndpoint, apigeePersonalDemographicsEndpoint: props.apigeePersonalDemographicsEndpoint, - apigeeApiKey: props.apigeeApiKey, jwtKid: props.jwtKid, roleId: props.roleId, - APIGEE_DOHS_API_KEY: props.apigeeDoHSApiKey + APIGEE_DOHS_API_KEY_ARN: props.apigeeDoHSApiKey.secretArn } }) diff --git a/packages/cdk/resources/api/oauth2Functions.ts b/packages/cdk/resources/api/oauth2Functions.ts index 89f30614c9..6de78586ac 100644 --- a/packages/cdk/resources/api/oauth2Functions.ts +++ b/packages/cdk/resources/api/oauth2Functions.ts @@ -2,7 +2,7 @@ import {Construct} from "constructs" import {LambdaFunction} from "../LambdaFunction" import {ITableV2} from "aws-cdk-lib/aws-dynamodb" import {IManagedPolicy} from "aws-cdk-lib/aws-iam" -import {Secret} from "aws-cdk-lib/aws-secretsmanager" +import {ISecret, Secret} from "aws-cdk-lib/aws-secretsmanager" import {NodejsFunction} from "aws-cdk-lib/aws-lambda-nodejs" import {SharedSecrets} from "../SharedSecrets" @@ -57,8 +57,8 @@ export interface OAuth2FunctionsProps { readonly logRetentionInDays: number readonly logLevel: string readonly jwtKid: string - readonly apigeeApiKey: string - readonly apigeeApiSecret: string + readonly apigeeApiKey: ISecret + readonly apigeeApiSecret: ISecret } /** @@ -103,7 +103,8 @@ export class OAuth2Functions extends Construct { props.sharedSecrets.getPrimaryJwtPrivateKeyPolicy, props.sessionManagementTableWritePolicy, props.sessionManagementTableReadPolicy, - props.useSessionManagementKmsKeyPolicy + props.useSessionManagementKmsKeyPolicy, + props.sharedSecrets.getApigeeSecretsPolicy ], logRetentionInDays: props.logRetentionInDays, logLevel: props.logLevel, @@ -131,7 +132,8 @@ export class OAuth2Functions extends Construct { additionalPolicies: [ props.stateMappingTableWritePolicy, props.stateMappingTableReadPolicy, - props.useStateMappingKmsKeyPolicy + props.useStateMappingKmsKeyPolicy, + props.sharedSecrets.getApigeeSecretsPolicy ], logRetentionInDays: props.logRetentionInDays, logLevel: props.logLevel, @@ -154,7 +156,8 @@ export class OAuth2Functions extends Construct { additionalPolicies: [ props.stateMappingTableWritePolicy, props.stateMappingTableReadPolicy, - props.useStateMappingKmsKeyPolicy + props.useStateMappingKmsKeyPolicy, + props.sharedSecrets.getApigeeSecretsPolicy ], logRetentionInDays: props.logRetentionInDays, logLevel: props.logLevel, @@ -199,7 +202,8 @@ export class OAuth2Functions extends Construct { props.useStateMappingKmsKeyPolicy, props.sessionStateMappingTableWritePolicy, props.sessionStateMappingTableReadPolicy, - props.useSessionStateMappingKmsKeyPolicy + props.useSessionStateMappingKmsKeyPolicy, + props.sharedSecrets.getApigeeSecretsPolicy ], logRetentionInDays: props.logRetentionInDays, logLevel: props.logLevel, @@ -212,7 +216,7 @@ export class OAuth2Functions extends Construct { FULL_CLOUDFRONT_DOMAIN: props.fullCloudfrontDomain, StateMappingTableName: props.stateMappingTable.tableName, SessionStateMappingTableName: props.sessionStateMappingTable.tableName, - APIGEE_API_KEY: props.apigeeApiKey + APIGEE_API_KEY_ARN: props.apigeeApiKey.secretArn } }) @@ -238,7 +242,8 @@ export class OAuth2Functions extends Construct { props.sessionStateMappingTableWritePolicy, props.useSessionStateMappingKmsKeyPolicy, props.sharedSecrets.useJwtKmsKeyPolicy, - props.sharedSecrets.getMockJwtPrivateKeyPolicy + props.sharedSecrets.getMockJwtPrivateKeyPolicy, + props.sharedSecrets.getApigeeSecretsPolicy ], logRetentionInDays: props.logRetentionInDays, logLevel: props.logLevel, @@ -259,8 +264,8 @@ export class OAuth2Functions extends Construct { MOCK_OIDC_ISSUER: props.mockOidcIssuer, FULL_CLOUDFRONT_DOMAIN: props.fullCloudfrontDomain, jwtKid: props.jwtKid, - APIGEE_API_KEY: props.apigeeApiKey, - APIGEE_API_SECRET: props.apigeeApiSecret + APIGEE_API_KEY_ARN: props.apigeeApiKey.secretArn, + APIGEE_API_SECRET_ARN: props.apigeeApiSecret.secretArn } }) @@ -278,7 +283,8 @@ export class OAuth2Functions extends Construct { props.useStateMappingKmsKeyPolicy, props.sessionStateMappingTableReadPolicy, props.sessionStateMappingTableWritePolicy, - props.useSessionStateMappingKmsKeyPolicy + props.useSessionStateMappingKmsKeyPolicy, + props.sharedSecrets.getApigeeSecretsPolicy ], logRetentionInDays: props.logRetentionInDays, logLevel: props.logLevel, diff --git a/packages/cdk/stacks/StatelessResourcesStack.ts b/packages/cdk/stacks/StatelessResourcesStack.ts index a9dbae4c7a..ebe71a7147 100644 --- a/packages/cdk/stacks/StatelessResourcesStack.ts +++ b/packages/cdk/stacks/StatelessResourcesStack.ts @@ -81,9 +81,9 @@ export class StatelessResourcesStack extends Stack { const mockOidcjwksEndpoint = this.node.tryGetContext("mockOidcjwksEndpoint") const useMockOidc: boolean = this.node.tryGetContext("useMockOidc") - const apigeeApiKey = this.node.tryGetContext("apigeeApiKey") - const apigeeApiSecret = this.node.tryGetContext("apigeeApiSecret") - const apigeeDoHSApiKey = this.node.tryGetContext("apigeeDoHSApiKey") + const apigeeApiKey: string = this.node.tryGetContext("apigeeApiKey") + const apigeeApiSecret: string = this.node.tryGetContext("apigeeApiSecret") + const apigeeDoHSApiKey: string = this.node.tryGetContext("apigeeDoHSApiKey") const apigeeCIS2TokenEndpoint = this.node.tryGetContext("apigeeCIS2TokenEndpoint") const apigeeMockTokenEndpoint = this.node.tryGetContext("apigeeMockTokenEndpoint") const apigeePrescriptionsEndpoint = this.node.tryGetContext("apigeePrescriptionsEndpoint") @@ -211,7 +211,10 @@ export class StatelessResourcesStack extends Stack { const sharedSecrets = new SharedSecrets(this, "SharedSecrets", { stackName: props.stackName, deploymentRole: deploymentRole, - useMockOidc: useMockOidc + useMockOidc: useMockOidc, + apigeeApiKey: apigeeApiKey, + apigeeDoHSApiKey: apigeeDoHSApiKey, + apigeeApiSecret: apigeeApiSecret }) // Functions for the login OAuth2 proxy lambdas @@ -266,8 +269,8 @@ export class StatelessResourcesStack extends Stack { logRetentionInDays, logLevel, jwtKid, - apigeeApiKey, - apigeeApiSecret + apigeeApiKey: sharedSecrets.apigeeApiKey, + apigeeApiSecret: sharedSecrets.apigeeApiSecret }) // -- functions for API @@ -302,9 +305,9 @@ export class StatelessResourcesStack extends Stack { apigeeMockTokenEndpoint: apigeeMockTokenEndpoint, apigeePrescriptionsEndpoint: apigeePrescriptionsEndpoint, apigeeDoHSEndpoint: apigeeDoHSEndpoint, - apigeeApiKey: apigeeApiKey, - apigeeDoHSApiKey: apigeeDoHSApiKey, - apigeeApiSecret, + apigeeApiKey: sharedSecrets.apigeeApiKey, + apigeeDoHSApiKey: sharedSecrets.apigeeDoHSApiKey, + apigeeApiSecret: sharedSecrets.apigeeApiSecret, jwtKid: jwtKid, roleId: roleId, apigeePersonalDemographicsEndpoint: apigeePersonalDemographicsEndpoint, diff --git a/packages/cognito/package.json b/packages/cognito/package.json index 7db6ddc0f5..66fb6ebc6d 100644 --- a/packages/cognito/package.json +++ b/packages/cognito/package.json @@ -13,24 +13,25 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-lambda-powertools/parameters": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/parameters": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/client-secrets-manager": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", - "axios": "^1.13.2", + "axios": "^1.13.5", "jsonwebtoken": "^9.0.3", "jwks-rsa": "^3.2.2" }, "devDependencies": { "@types/aws-lambda": "^8.10.159", "mock-jwks": "^3.3.5", - "nock": "^14.0.10" + "nock": "^14.0.11" } } diff --git a/packages/cognito/src/authorizeMock.ts b/packages/cognito/src/authorizeMock.ts index 0cf377ae15..4ea4a0fb0e 100644 --- a/packages/cognito/src/authorizeMock.ts +++ b/packages/cognito/src/authorizeMock.ts @@ -1,6 +1,7 @@ import {Logger} from "@aws-lambda-powertools/logger" import {APIGatewayProxyEvent, APIGatewayProxyResult} from "aws-lambda" import {injectLambdaContext} from "@aws-lambda-powertools/logger/middleware" +import {getSecret} from "@aws-lambda-powertools/parameters/secrets" import {MiddyErrorHandler} from "@cpt-ui-common/middyErrorHandler" @@ -23,7 +24,7 @@ const authorizeEndpoint = process.env["IDP_AUTHORIZE_PATH"] as string const cis2ClientId = process.env["OIDC_CLIENT_ID"] as string const userPoolClientId = process.env["COGNITO_CLIENT_ID"] as string const cloudfrontDomain = process.env["FULL_CLOUDFRONT_DOMAIN"] as string -const apigeeApiKey = process.env["APIGEE_API_KEY"] as string +const apigeeApiKeyArn = process.env["APIGEE_API_KEY_ARN"] as string const logger = new Logger({serviceName: "authorize"}) const errorResponseBody = {message: "A system error has occurred"} @@ -32,6 +33,7 @@ const middyErrorHandler = new MiddyErrorHandler(errorResponseBody) const lambdaHandler = async ( event: APIGatewayProxyEvent ): Promise => { + const apigeeApiKey = await getSecret(apigeeApiKeyArn) logger.appendKeys({"apigw-request-id": event.requestContext?.requestId}) // we need to use the base domain for the environment so that pull requests go to that callback uri // as we can only have one callback uri per apigee application @@ -43,7 +45,7 @@ const lambdaHandler = async ( cis2ClientId, userPoolClientId, cloudfrontDomain, - apigeeApiKey + apigeeApiKeyArn }}) // Validate required environment variables @@ -82,7 +84,7 @@ const lambdaHandler = async ( // Build the redirect parameters for CIS2 const responseParameters = { redirect_uri: callbackUri, - client_id: apigeeApiKey, + client_id: apigeeApiKey.toString(), // Ensure client_id is a string response_type: "code", state: newState } diff --git a/packages/cognito/src/tokenMock.ts b/packages/cognito/src/tokenMock.ts index adc2201686..ab1284b1b5 100644 --- a/packages/cognito/src/tokenMock.ts +++ b/packages/cognito/src/tokenMock.ts @@ -50,8 +50,8 @@ const cloudfrontDomain= process.env["FULL_CLOUDFRONT_DOMAIN"] as string const jwtPrivateKeyArn= process.env["jwtPrivateKeyArn"] as string const jwtKid= process.env["jwtKid"] as string const idpTokenPath= process.env["MOCK_IDP_TOKEN_PATH"] as string -const apigeeApiKey = process.env["APIGEE_API_KEY"] as string -const apigeeApiSecret = process.env["APIGEE_API_SECRET"] as string +const apigeeApiKeyArn = process.env["APIGEE_API_KEY_ARN"] as string +const apigeeApiSecretArn = process.env["APIGEE_API_SECRET_ARN"] as string const apigeeMockTokenEndpoint = process.env["MOCK_OIDC_TOKEN_ENDPOINT"] as string const dynamoClient = new DynamoDBClient() @@ -73,6 +73,8 @@ async function createSignedJwt(claims: Record) { } const lambdaHandler = async (event: APIGatewayProxyEvent): Promise => { + const apigeeApiKey = await getSecret(apigeeApiKeyArn) + const apigeeApiSecret = await getSecret(apigeeApiSecretArn) logger.appendKeys({"apigw-request-id": event.requestContext?.requestId}) // we need to use the base domain for the environment so that pull requests go to that callback uri @@ -93,8 +95,8 @@ const lambdaHandler = async (event: APIGatewayProxyEvent): Promise { + return { + mockGetSecret: vi.fn() + } +}) + +vi.mock("@aws-lambda-powertools/parameters/secrets", () => { + const getSecret = mockGetSecret.mockImplementation(async () => { + return "apigee_api_key" + }) + + return { + getSecret + } +}) describe("authorize mock handler", () => { beforeEach(() => { diff --git a/packages/common/authFunctions/jest.config.ts b/packages/common/authFunctions/jest.config.ts deleted file mode 100644 index e3d83833cd..0000000000 --- a/packages/common/authFunctions/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import defaultConfig from "../../../jest.default.config.ts" -import type {JestConfigWithTsJest} from "ts-jest" - -const jestConfig: JestConfigWithTsJest = { - ...defaultConfig, - "rootDir": ".", - setupFiles: ["/.jest/setEnvVars.js"], - moduleNameMapper: {"@/(.*)$": ["/src/$1"]} -} - -export default jestConfig diff --git a/packages/common/authFunctions/jest.debug.config.ts b/packages/common/authFunctions/jest.debug.config.ts deleted file mode 100644 index a306273831..0000000000 --- a/packages/common/authFunctions/jest.debug.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import config from "./jest.config" -import type {JestConfigWithTsJest} from "ts-jest" - -const debugConfig: JestConfigWithTsJest = { - ...config, - "preset": "ts-jest" -} - -export default debugConfig diff --git a/packages/common/authFunctions/package.json b/packages/common/authFunctions/package.json index 1b6694ee57..96e00506a4 100644 --- a/packages/common/authFunctions/package.json +++ b/packages/common/authFunctions/package.json @@ -13,16 +13,17 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "devDependencies": { - "@aws-sdk/client-dynamodb": "^3.980.0", - "axios": "^1.13.2", + "@aws-sdk/client-dynamodb": "^3.995.0", + "axios": "^1.13.5", "mock-jwks": "^3.3.5" }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-lambda-powertools/parameters": "^2.30.1", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/parameters": "^2.31.0", + "@aws-sdk/client-secrets-manager": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", - "@middy/core": "^7.0.2", + "@middy/core": "^7.1.0", "aws-lambda": "^1.0.7", "jsonwebtoken": "^9.0.3", "jwks-rsa": "^3.2.2" diff --git a/packages/common/authFunctions/src/authenticateRequest.ts b/packages/common/authFunctions/src/authenticateRequest.ts index 695e97efed..08637733d3 100644 --- a/packages/common/authFunctions/src/authenticateRequest.ts +++ b/packages/common/authFunctions/src/authenticateRequest.ts @@ -37,8 +37,8 @@ export interface AuthenticateRequestOptions { tokenMappingTableName: string sessionManagementTableName: string jwtPrivateKeyArn: string - apigeeApiKey: string - apigeeApiSecret: string + apigeeApiKeyArn: string + apigeeApiSecretArn: string jwtKid: string apigeeCis2TokenEndpoint: string apigeeMockTokenEndpoint: string @@ -57,8 +57,8 @@ export const authParametersFromEnv = (): AuthenticateRequestOptions => { tokenMappingTableName: process.env["TokenMappingTableName"] as string, sessionManagementTableName: process.env["SessionManagementTableName"] as string, jwtPrivateKeyArn: process.env["jwtPrivateKeyArn"] as string, - apigeeApiKey: process.env["APIGEE_API_KEY"] as string, - apigeeApiSecret: process.env["APIGEE_API_SECRET"] as string, + apigeeApiKeyArn: process.env["APIGEE_API_KEY_ARN"] as string, + apigeeApiSecretArn: process.env["APIGEE_API_SECRET_ARN"] as string, jwtKid: process.env["jwtKid"] as string, apigeeMockTokenEndpoint: process.env["apigeeMockTokenEndpoint"] as string, apigeeCis2TokenEndpoint: process.env["apigeeCIS2TokenEndpoint"] as string, @@ -82,12 +82,17 @@ const refreshTokenFlow = async ( if (existingToken.refreshToken === undefined) { throw new Error("Missing refresh token") } + const apigeeApiKey = await getSecret(authOptions.apigeeApiKeyArn) + const apigeeApiSecret = await getSecret(authOptions.apigeeApiSecretArn) + if (!apigeeApiKey || !apigeeApiSecret) { + throw new Error("Missing Apigee API credentials") + } const refreshResult = await refreshApigeeAccessToken( axiosInstance, apigeeTokenEndpoint, existingToken.refreshToken, - authOptions.apigeeApiKey, - authOptions.apigeeApiSecret, + apigeeApiKey.toString(), + apigeeApiSecret.toString(), logger ) @@ -134,13 +139,18 @@ export async function authenticateRequest( ): Promise { const { jwtPrivateKeyArn, - apigeeApiKey, - apigeeApiSecret, + apigeeApiKeyArn, + apigeeApiSecretArn, jwtKid, apigeeMockTokenEndpoint, apigeeCis2TokenEndpoint, cloudfrontDomain } = authOptions + const apigeeApiKey = await getSecret(apigeeApiKeyArn) + const apigeeApiSecret = await getSecret(apigeeApiSecretArn) + if (!apigeeApiKey || !apigeeApiSecret) { + throw new Error("Missing Apigee API credentials") + } logger.info("Starting authentication flow") // Extract username and determine if this is a mock request @@ -238,8 +248,8 @@ export async function authenticateRequest( const callbackUri = `https://${baseEnvironmentDomain}/oauth2/mock-callback` const tokenExchangeBody = { grant_type: "authorization_code", - client_id: apigeeApiKey, - client_secret: apigeeApiSecret, + client_id: apigeeApiKey.toString(), + client_secret: apigeeApiSecret.toString(), redirect_uri: callbackUri, code: userRecord.apigeeCode } @@ -268,7 +278,7 @@ export async function authenticateRequest( logger, apigeeCis2TokenEndpoint, jwtPrivateKey, - apigeeApiKey, + apigeeApiKey.toString(), jwtKid, userRecord.cis2IdToken ) diff --git a/packages/common/authFunctions/tests/test_authenticateRequest.test.ts b/packages/common/authFunctions/tests/test_authenticateRequest.test.ts index a3012fc99a..4a9cb1d3ec 100644 --- a/packages/common/authFunctions/tests/test_authenticateRequest.test.ts +++ b/packages/common/authFunctions/tests/test_authenticateRequest.test.ts @@ -99,13 +99,15 @@ describe("authenticateRequest", () => { error: vi.fn() } as unknown as Logger + const mockApigeeApiKey = "dummy_apigee_api_key" + const mockApigeeApiSecret = "dummy_apigee_api_secret" const mockOptions = { tokenMappingTableName: "test-table", sessionManagementTableName: "test-session-table", jwtPrivateKeyArn: "test-key-arn", - apigeeApiKey: "test-api-key", + apigeeApiKeyArn: "dummy_apigee_api_key_arn", jwtKid: "test-kid", - apigeeApiSecret: "test-api-secret", + apigeeApiSecretArn: "dummy_apigee_api_secret_arn", apigeeMockTokenEndpoint: "mock-token-endpoint", apigeeCis2TokenEndpoint: "cis2-token-endpoint", cloudfrontDomain: "test-cloudfront-domain" @@ -127,9 +129,6 @@ describe("authenticateRequest", () => { // Default mock for constructSignedJWTBody mockConstructSignedJWTBody.mockReturnValue({param: "value"}) - - // Ensure process.env is populated - process.env.APIGEE_API_SECRET = "test-api-secret" }) it("should use existing valid token when available", async () => { @@ -232,6 +231,11 @@ describe("authenticateRequest", () => { refreshToken: "refreshed-refresh-token", expiresIn: 3600 }) + mockGetSecret + .mockReturnValueOnce("test-private-key") + .mockReturnValueOnce("test-private-key") + .mockReturnValueOnce("dummy_apigee_api_key") + .mockReturnValueOnce("dummy_apigee_api_secret") const result = await authenticateRequest( "test-user", @@ -253,8 +257,8 @@ describe("authenticateRequest", () => { axiosInstance, mockOptions.apigeeCis2TokenEndpoint, // Use the one from options "expiring-refresh-token", - mockOptions.apigeeApiKey, - "test-api-secret", // API secret from env var + mockApigeeApiKey, + mockApigeeApiSecret, // API secret from env var mockLogger ) @@ -298,6 +302,11 @@ describe("authenticateRequest", () => { refreshToken: "refreshed-refresh-token", expiresIn: 3600 }) + mockGetSecret + .mockReturnValueOnce("test-private-key") + .mockReturnValueOnce("test-private-key") + .mockReturnValueOnce("dummy_apigee_api_key") + .mockReturnValueOnce("dummy_apigee_api_secret") const result = await authenticateRequest( "test-user", @@ -319,8 +328,8 @@ describe("authenticateRequest", () => { axiosInstance, mockOptions.apigeeCis2TokenEndpoint, // Use the one from options "expiring-refresh-token", - mockOptions.apigeeApiKey, - "test-api-secret", // API secret from env var + mockApigeeApiKey, + mockApigeeApiSecret, // API secret from env var mockLogger ) @@ -427,7 +436,6 @@ describe("authenticateRequest", () => { expect(mockConstructSignedJWTBody).not.toHaveBeenCalled() expect(mockExchangeTokenForApigeeAccessToken).toHaveBeenCalled() expect(mockUpdateTokenMapping).toHaveBeenCalled() - expect(mockGetSecret).not.toHaveBeenCalled() }) it("should acquire new token when no token exists for mocked user", async () => { @@ -470,7 +478,6 @@ describe("authenticateRequest", () => { expect(mockConstructSignedJWTBody).not.toHaveBeenCalled() expect(mockExchangeTokenForApigeeAccessToken).toHaveBeenCalled() expect(mockUpdateTokenMapping).toHaveBeenCalled() - expect(mockGetSecret).not.toHaveBeenCalled() }) it("should handle token refresh failure gracefully", async () => { diff --git a/packages/common/authFunctions/vitest.config.ts b/packages/common/authFunctions/vitest.config.ts index 2d790760a4..b07fa8e1be 100644 --- a/packages/common/authFunctions/vitest.config.ts +++ b/packages/common/authFunctions/vitest.config.ts @@ -35,7 +35,9 @@ const viteConfig = defineConfig({ MOCK_USER_INFO_ENDPOINT: `${MOCK_OIDC_HOST}/userinfo`, MOCK_USER_POOL_IDP: "MockDummyPoolIdentityProvider", MOCK_IDP_TOKEN_PATH: `${MOCK_OIDC_HOST}/token`, - FULL_CLOUDFRONT_DOMAIN: "cpt-ui-pr-854.dev.eps.national.nhs.uk" + FULL_CLOUDFRONT_DOMAIN: "cpt-ui-pr-854.dev.eps.national.nhs.uk", + APIGEE_API_KEY_ARN: "dummy_apigee_api_key_arn", + APIGEE_API_SECRET_ARN: "dummy_apigee_api_secret_arn" } } }) diff --git a/packages/common/doHSClient/.vscode/launch.json b/packages/common/doHSClient/.vscode/launch.json index ba322cd1dc..c16b361af4 100644 --- a/packages/common/doHSClient/.vscode/launch.json +++ b/packages/common/doHSClient/.vscode/launch.json @@ -19,7 +19,7 @@ "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "disableOptimisticBPs": true, - "program": "${workspaceFolder}/../../,,/node_modules/.bin/jest", + "program": "${workspaceFolder}/../../../node_modules/.bin/jest", "windows": { "program": "${workspaceFolder}/node_modules/jest/bin/jest" }, diff --git a/packages/common/doHSClient/jest.debug.config.ts b/packages/common/doHSClient/jest.debug.config.ts index a306273831..fa3a3ff872 100644 --- a/packages/common/doHSClient/jest.debug.config.ts +++ b/packages/common/doHSClient/jest.debug.config.ts @@ -1,4 +1,4 @@ -import config from "./jest.config" +import config from "./jest.config.ts" import type {JestConfigWithTsJest} from "ts-jest" const debugConfig: JestConfigWithTsJest = { diff --git a/packages/common/doHSClient/package.json b/packages/common/doHSClient/package.json index c55b5df4e7..26110ef2b9 100644 --- a/packages/common/doHSClient/package.json +++ b/packages/common/doHSClient/package.json @@ -13,12 +13,13 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "axios": "^1.13.2", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/client-secrets-manager": "^3.995.0", + "axios": "^1.13.5", "axios-retry": "^4.5.0" }, "devDependencies": { "axios-mock-adapter": "^2.1.0", - "nock": "^14.0.10" + "nock": "^14.0.11" } } diff --git a/packages/common/doHSClient/src/doHSClient.ts b/packages/common/doHSClient/src/doHSClient.ts index 50e218a811..a14616af6c 100644 --- a/packages/common/doHSClient/src/doHSClient.ts +++ b/packages/common/doHSClient/src/doHSClient.ts @@ -1,9 +1,10 @@ import {Logger} from "@aws-lambda-powertools/logger" import axios, {AxiosRequestConfig} from "axios" +import {getSecret} from "@aws-lambda-powertools/parameters/secrets" // Read the DoHS API Key from environment variables const apigeeDoHSEndpoint = process.env["apigeeDoHSEndpoint"] as string -const apigeeDoHSApiKey = process.env["APIGEE_DOHS_API_KEY"] as string +const apigeeDoHSApiKeyArn = process.env["APIGEE_DOHS_API_KEY_ARN"] as string interface DoHSContact { ContactType: string @@ -22,6 +23,7 @@ export interface DoHSOrg { } export const doHSClient = async (odsCodes: Array, logger: Logger): Promise> => { + const apigeeDoHSApiKey = await getSecret(apigeeDoHSApiKeyArn) logger.info("Fetching DoHS API data for ODS codes", {odsCodes}) if (odsCodes.length === 0) { diff --git a/packages/common/doHSClient/tests/test_doHSClient.test.ts b/packages/common/doHSClient/tests/test_doHSClient.test.ts index 350a85bb24..169689f203 100644 --- a/packages/common/doHSClient/tests/test_doHSClient.test.ts +++ b/packages/common/doHSClient/tests/test_doHSClient.test.ts @@ -17,6 +17,17 @@ const validEndpoint = "https://api.example.com/dohs" process.env.apigeeApiKey = validApiKey process.env.apigeeDoHSEndpoint = validEndpoint +const mockGetSecret = jest.fn() +jest.unstable_mockModule("@aws-lambda-powertools/parameters/secrets", () => { + const getSecret = mockGetSecret.mockImplementation(async () => { + return validApiKey + }) + + return { + getSecret + } +}) + // Now we can safely import the module const {doHSClient} = await import("../src/doHSClient") @@ -40,8 +51,9 @@ describe("doHSClient", () => { it("throws an error if apigeeApiKey is not set", async () => { // Temporarily unset the API key - const originalApiKey = process.env.APIGEE_DOHS_API_KEY - delete process.env.APIGEE_DOHS_API_KEY + mockGetSecret.mockImplementationOnce(async () => { + return null + }) // Re-import the module to pick up the changed environment jest.resetModules() @@ -51,8 +63,6 @@ describe("doHSClient", () => { "Apigee API Key environment variable is not set" ) - // Restore the API key - process.env.APIGEE_DOHS_API_KEY = originalApiKey }) it("throws an error if apigeeDoHSEndpoint is not set", async () => { diff --git a/packages/common/dynamoFunctions/package.json b/packages/common/dynamoFunctions/package.json index be0b5478b3..6275a6ea62 100644 --- a/packages/common/dynamoFunctions/package.json +++ b/packages/common/dynamoFunctions/package.json @@ -13,8 +13,8 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/common-types": "^1.0.0" } } diff --git a/packages/common/lambdaUtils/package.json b/packages/common/lambdaUtils/package.json index e5b6573e77..df7b86ac0e 100644 --- a/packages/common/lambdaUtils/package.json +++ b/packages/common/lambdaUtils/package.json @@ -14,9 +14,9 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", + "@aws-lambda-powertools/logger": "^2.31.0", "@cpt-ui-common/common-types": "^1.0.0", "aws-lambda": "^1.0.7", - "axios": "^1.13.2" + "axios": "^1.13.5" } } diff --git a/packages/common/middyErrorHandler/package.json b/packages/common/middyErrorHandler/package.json index 4107e1469f..df74e3fe90 100644 --- a/packages/common/middyErrorHandler/package.json +++ b/packages/common/middyErrorHandler/package.json @@ -14,10 +14,10 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1" + "@aws-lambda-powertools/logger": "^2.31.0" }, "devDependencies": { - "@middy/core": "^7.0.2", + "@middy/core": "^7.1.0", "@cpt-ui-common/testing": "^1.0.0" } } diff --git a/packages/common/pdsClient/package.json b/packages/common/pdsClient/package.json index e7280363b0..9b14dc5e81 100644 --- a/packages/common/pdsClient/package.json +++ b/packages/common/pdsClient/package.json @@ -14,17 +14,17 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", + "@aws-lambda-powertools/logger": "^2.31.0", "@cpt-ui-common/common-types": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", - "ajv": "^8.17.1", - "axios": "^1.13.2", + "ajv": "^8.18.0", + "axios": "^1.13.5", "date-fns": "^4.1.0", "json-schema-to-ts": "^3.1.1" }, "devDependencies": { "@cpt-ui-common/testing": "^1.0.0", "fhir": "^4.12.0", - "nock": "^14.0.10" + "nock": "^14.0.11" } } diff --git a/packages/common/testing/package.json b/packages/common/testing/package.json index b652d52611..ef82a064ec 100644 --- a/packages/common/testing/package.json +++ b/packages/common/testing/package.json @@ -14,10 +14,10 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1" + "@aws-lambda-powertools/logger": "^2.31.0" }, "devDependencies": { "@cpt-ui-common/common-types": "^1.0.0", - "axios": "^1.13.2" + "axios": "^1.13.5" } } diff --git a/packages/cpt-ui/__tests__/AccessProvider.test.tsx b/packages/cpt-ui/__tests__/AccessProvider.test.tsx index f6a6a50ee2..d89ad7418c 100644 --- a/packages/cpt-ui/__tests__/AccessProvider.test.tsx +++ b/packages/cpt-ui/__tests__/AccessProvider.test.tsx @@ -3,14 +3,16 @@ import {render, act} from "@testing-library/react" import {AccessProvider, useAccess} from "@/context/AccessProvider" import {FRONTEND_PATHS} from "@/constants/environment" import {useAuth as mockUseAuth} from "@/context/AuthProvider" -import {useNavigate, useLocation} from "react-router-dom" +import {useNavigate, useLocation, MemoryRouter} from "react-router-dom" import {normalizePath as mockNormalizePath} from "@/helpers/utils" import {logger} from "@/helpers/logger" import {handleRestartLogin} from "@/helpers/logout" import Layout from "@/Layout" import LoadingPage from "@/pages/LoadingPage" +import {mockAuthState} from "./mocks/AuthStateMock" jest.mock("react-router-dom", () => ({ + ...jest.requireActual("react-router-dom"), useNavigate: jest.fn(), useLocation: jest.fn() })) @@ -60,6 +62,9 @@ jest.mock("@/constants/environment", () => ({ APP_CONFIG: { COMMIT_ID: "test-commit", VERSION_NUMBER: "1.0.0" + }, + ENV_CONFIG: { + RUM_ERROR_TIMER_INTERVAL: 10000 } })) @@ -102,14 +107,17 @@ describe("AccessProvider", () => { const renderWithProvider = () => { render( - - - + + + + + ) } it("redirects to login if not signed in and not on allowed path", () => { mockAuthHook.mockReturnValue({ + ...mockAuthState, isSignedIn: false, isSigningIn: false, updateTrackerUserInfo: jest.fn().mockResolvedValue({error: null}), @@ -127,6 +135,7 @@ describe("AccessProvider", () => { it("redirects to session selection if signed in and concurrent session", () => { mockAuthHook.mockReturnValue({ + ...mockAuthState, isSignedIn: true, isConcurrentSession: true, isSigningIn: false, @@ -142,6 +151,7 @@ describe("AccessProvider", () => { it("redirects to select role if signed in but no role is selected", () => { mockAuthHook.mockReturnValue({ + ...mockAuthState, isSignedIn: true, isSigningIn: false, selectedRole: null, @@ -158,6 +168,7 @@ describe("AccessProvider", () => { it("does not redirect if signed in and role is selected", () => { mockAuthHook.mockReturnValue({ + ...mockAuthState, isSignedIn: true, isSigningIn: false, selectedRole: {name: "someRole"}, @@ -174,6 +185,7 @@ describe("AccessProvider", () => { it("skips redirection logic when signing in and on select-your-role path", () => { mockAuthHook.mockReturnValue({ + ...mockAuthState, isSignedIn: false, isSigningIn: true, updateTrackerUserInfo: jest.fn().mockResolvedValue({error: null}), @@ -216,6 +228,7 @@ describe("AccessProvider", () => { it("redirects authenticated user with role from root path to search page", () => { mockAuthHook.mockReturnValue({ + ...mockAuthState, isSignedIn: true, isSigningIn: false, selectedRole: {name: "TestRole"}, @@ -234,6 +247,7 @@ describe("AccessProvider", () => { describe("shouldBlockChildren", () => { it("blocks children when concurrent session exists and user is on protected path", () => { (mockUseAuth as jest.Mock).mockReturnValue({ + ...mockAuthState, isSignedIn: true, isConcurrentSession: true, isSigningIn: false, @@ -245,11 +259,13 @@ describe("AccessProvider", () => { (mockNormalizePath as jest.Mock).mockReturnValue("/some-protected-path") const {container} = render( - - - - - + + + + + + + ) // Should render nothing (children blocked) - show loading wheel @@ -270,9 +286,11 @@ describe("AccessProvider", () => { ) const {container} = render( - - - + + + + + ) // Should render children (not blocked on allowed path) @@ -282,6 +300,7 @@ describe("AccessProvider", () => { it("blocks children when no role selected and user is on protected path", () => { (mockUseAuth as jest.Mock).mockReturnValue({ + ...mockAuthState, isSignedIn: true, isSigningIn: false, selectedRole: null, @@ -293,11 +312,13 @@ describe("AccessProvider", () => { (mockNormalizePath as jest.Mock).mockReturnValue("/some-protected-path") const {container} = render( - - - - - + + + + + + + ) // Should render nothing (children blocked) - show loading page @@ -312,6 +333,7 @@ describe("AccessProvider", () => { const setIntervalSpy = jest.spyOn(globalThis, "setInterval") mockAuthHook.mockReturnValue({ + ...mockAuthState, isSignedIn: true, isSigningIn: false, selectedRole: {name: "TestRole"}, @@ -330,6 +352,7 @@ describe("AccessProvider", () => { mockUpdateTrackerUserInfo.mockResolvedValue({error: null}) mockAuthHook.mockReturnValue({ + ...mockAuthState, isSignedIn: true, isSigningIn: false, selectedRole: {name: "TestRole"}, @@ -348,6 +371,7 @@ describe("AccessProvider", () => { const clearIntervalSpy = jest.spyOn(globalThis, "clearInterval") mockAuthHook.mockReturnValue({ + ...mockAuthState, isSignedIn: true, isSigningIn: false, selectedRole: {name: "TestRole"}, @@ -356,9 +380,11 @@ describe("AccessProvider", () => { mockLocationHook.mockReturnValue({pathname: "/search-by-prescription-id"}) const {unmount} = render( - - - + + + + + ) unmount() @@ -369,6 +395,7 @@ describe("AccessProvider", () => { it("should skip user info check when isSigningIn is true", async () => { mockAuthHook.mockReturnValue({ + ...mockAuthState, isSignedIn: true, isSigningIn: true, selectedRole: {name: "TestRole"}, @@ -391,6 +418,7 @@ describe("AccessProvider", () => { it("should skip user info check when on allowed no-role paths", async () => { // This test focuses on the isSigningIn logic since we can't easily mock window.location mockAuthHook.mockReturnValue({ + ...mockAuthState, isSignedIn: true, isSigningIn: true, // This will trigger the skip logic selectedRole: {name: "TestRole"}, @@ -413,6 +441,7 @@ describe("AccessProvider", () => { mockUpdateTrackerUserInfo.mockResolvedValue({error: null}) mockAuthHook.mockReturnValue({ + ...mockAuthState, isSignedIn: true, isSigningIn: false, selectedRole: {name: "TestRole"}, @@ -435,6 +464,7 @@ describe("AccessProvider", () => { mockUpdateTrackerUserInfo.mockResolvedValue({error: "Session expired", invalidSessionCause: "InvalidSession"}) const authContext = { + ...mockAuthState, isSignedIn: true, isSigningIn: false, selectedRole: {name: "TestRole"}, @@ -455,6 +485,7 @@ describe("AccessProvider", () => { it("should not call updateTrackerUserInfo when user is not signed in", async () => { mockAuthHook.mockReturnValue({ + ...mockAuthState, isSignedIn: false, isSigningIn: false, updateTrackerUserInfo: mockUpdateTrackerUserInfo @@ -475,6 +506,7 @@ describe("AccessProvider", () => { it("should handle multiple allowed no-role paths correctly", async () => { mockAuthHook.mockReturnValue({ + ...mockAuthState, isSignedIn: true, isSigningIn: false, selectedRole: {name: "TestRole"}, @@ -499,6 +531,7 @@ describe("AccessProvider", () => { .mockResolvedValueOnce({error: null}) // second periodic check const authContext = { + ...mockAuthState, isSignedIn: true, isSigningIn: false, selectedRole: {name: "TestRole"}, diff --git a/packages/cpt-ui/__tests__/EpsRoleSelectionPage.test.tsx b/packages/cpt-ui/__tests__/EpsRoleSelectionPage.test.tsx index d98ba444c9..e6f710bbbc 100644 --- a/packages/cpt-ui/__tests__/EpsRoleSelectionPage.test.tsx +++ b/packages/cpt-ui/__tests__/EpsRoleSelectionPage.test.tsx @@ -7,17 +7,25 @@ import { waitFor } from "@testing-library/react" import RoleSelectionPage from "@/components/EpsRoleSelectionPage" -import {useAuth} from "@/context/AuthProvider" -import {useNavigate} from "react-router-dom" +import {useAuth, AuthContextType} from "@/context/AuthProvider" +import {MemoryRouter, useNavigate} from "react-router-dom" import {FRONTEND_PATHS} from "@/constants/environment" import {getSearchParams} from "@/helpers/getSearchParams" -import {handleRestartLogin} from "@/helpers/logout" +import {handleRestartLogin, signOut} from "@/helpers/logout" import axios from "axios" import {RoleDetails} from "@cpt-ui-common/common-types" +import {logger} from "@/helpers/logger" +import {mockAuthState} from "./mocks/AuthStateMock" +import {LOADING_STRINGS} from "@/constants/ui-strings/LoadingPage" jest.mock("@/context/AuthProvider") jest.mock("@/helpers/getSearchParams") -jest.mock("@/helpers/logout") +jest.mock("@/helpers/logout", () => ({ + handleRestartLogin: jest.fn(), + signOut: jest.fn().mockImplementation((auth: AuthContextType) => { + auth.isSigningOut = true + }) +})) jest.mock("@/helpers/axios", () => ({ __esModule: true, default: { @@ -41,6 +49,14 @@ jest.mock("react-router-dom", () => ({ useNavigate: jest.fn() })) +jest.mock("@/helpers/logger", () => ({ + logger: { + debug: jest.fn(), + info: jest.fn(), + error: jest.fn() + } +})) + const mockUseAuth = useAuth as jest.Mock const mockGetSearchParams = getSearchParams as jest.Mock @@ -76,7 +92,6 @@ describe("RoleSelectionPage", () => { beforeAll(() => { jest.spyOn(console, "log").mockImplementation(() => {}) jest.spyOn(console, "warn").mockImplementation(() => {}) - }) beforeEach(() => { @@ -103,8 +118,10 @@ describe("RoleSelectionPage", () => { stateParams: "bar" }) - render() - expect(screen.getByRole("main")).toHaveTextContent("Loading") + render( + + ) + expect(screen.getByRole("heading", {name: `${LOADING_STRINGS.HEADER}`})).toBeInTheDocument() }) it("renders error message if auth.error exists", () => { @@ -116,7 +133,9 @@ describe("RoleSelectionPage", () => { hasSingleRoleAccess: jest.fn().mockReturnValue(false) }) - render() + render( + + ) expect(screen.getByText("There was an error selecting your role")).toBeInTheDocument() expect(screen.getByText("Something went wrong")).toBeInTheDocument() }) @@ -130,33 +149,50 @@ describe("RoleSelectionPage", () => { hasSingleRoleAccess: jest.fn().mockReturnValue(false) }) - render() + render( + + ) expect(screen.getByText("You do not have access")).toBeInTheDocument() expect(screen.getByText("Please contact support.")).toBeInTheDocument() }) - it("redirects to login if logging in but not in callback", () => { + it("redirects to login if logging in but not in callback", async () => { const navigateMock = jest.fn() mockNavigate.mockReturnValue(navigateMock) - - mockUseAuth.mockReturnValue({ - isSigningIn: true, - isSignedIn: false, - rolesWithAccess: [], - rolesWithoutAccess: [], - selectedRole: null, - error: null, - clearAuthState: jest.fn(), - hasSingleRoleAccess: jest.fn().mockReturnValue(false) - }) + const authState = { + ...mockAuthState, + isSigningIn: true + } + mockUseAuth.mockReturnValue(authState) mockGetSearchParams.mockReturnValue({ codeParams: undefined, stateParams: undefined }) - render() + const {rerender} = render( + + + + ) + + // Mock signOut to update the authState AND refresh the mock + ;(signOut as jest.Mock).mockImplementation((authState: AuthContextType) => { + authState.isSigningOut = true + mockUseAuth.mockReturnValue(authState) // Update what useAuth returns + }) + + await act(async () => { + signOut(authState) + }) - expect(navigateMock).toHaveBeenCalledWith(FRONTEND_PATHS.LOGIN) + // Rerender to pick up the new auth state + rerender( + + + + ) + + expect(screen.getByRole("heading", {name: `${LOADING_STRINGS.HEADER}`})).toBeInTheDocument() }) it("redirects if user has single roleWithAccess", () => { @@ -180,7 +216,9 @@ describe("RoleSelectionPage", () => { hasSingleRoleAccess: jest.fn().mockReturnValue(true) }) - render() + render( + + ) expect(navigateMock).toHaveBeenCalledWith(FRONTEND_PATHS.SEARCH_BY_PRESCRIPTION_ID) }) @@ -200,7 +238,9 @@ describe("RoleSelectionPage", () => { hasSingleRoleAccess: jest.fn().mockReturnValue(false) }) - render() + render( + + ) expect(screen.getByText(/You are currently logged in at/)).toBeInTheDocument() expect(screen.getByTestId("confirm-and-continue")).toBeInTheDocument() @@ -221,7 +261,9 @@ describe("RoleSelectionPage", () => { hasSingleRoleAccess: jest.fn().mockReturnValue(false) }) - render() + render( + + ) expect(screen.getByText("You can't access these roles")).toBeInTheDocument() expect(screen.getByText("Roles without access")).toBeInTheDocument() expect(screen.getByText("No Access Org (ODS: NO123)")).toBeInTheDocument() @@ -259,7 +301,9 @@ describe("RoleSelectionPage", () => { hasSingleRoleAccess: jest.fn().mockReturnValue(false) }) - render() + render( + + ) // Should only render 2 EpsCards (excluding selectedRole) const cards = screen.getAllByTestId("eps-card") @@ -269,6 +313,455 @@ describe("RoleSelectionPage", () => { expect(screen.queryByText("Admin")).not.toBeInTheDocument() }) + it("logs counts of roles", async () => { + // eslint-disable-next-line no-undef + jest.spyOn(global.crypto, "randomUUID").mockReturnValueOnce("some-log-id-uuid-value") + mockUseAuth.mockReturnValue({ + sessionId: "session-1234", + user: "cognito-user", + userDetails: { + sub: "12345", + name: "Test User" + }, + isSignedIn: true, + isSigningIn: false, + isSigningOut: false, + isConcurrentSession: false, + selectedRole: { + role_id: "1" + }, + rolesWithAccess: [ + { + role_id: "2", + role_name: "Pharmacist", + org_code: "ABC", + org_name: "Pharmacy Org" + }, + { + role_id: "1", // this one should be filtered out + role_name: "Admin", + org_code: "ZZZ", + org_name: "Same Org" + } + ], + rolesWithoutAccess: [ + { + role_id: "3", + role_name: "Technician", + org_code: "XYZ", + org_name: "Tech Org" + } + ], + error: null, + invalidSessionCause: undefined, + hasSingleRoleAccess: jest.fn().mockReturnValue(false) + }) + + render() + + expect(logger.debug).toHaveBeenCalledWith("Counts of roles returned vs rendered", { + logId: "some-log-id-uuid-value", + sessionId: "session-1234", + userId: "12345", + pageName: "/", + currentlySelectedRole: true, + returnedRolesWithAccessCount:2, + returnedRolesWithoutAccessCount: 1, + renderedRolesWithAccessCount: 1, + renderedRolesWithoutAccessCount: 1 + }, true) + }) + + it("logs auth context", async () => { + // eslint-disable-next-line no-undef + jest.spyOn(global.crypto, "randomUUID").mockReturnValueOnce("some-log-id-uuid-value") + mockUseAuth.mockReturnValue({ + sessionId: "session-1234", + user: "cognito-user", + userDetails: { + sub: "12345", + name: "Test User" + }, + isSignedIn: true, + isSigningIn: false, + isSigningOut: false, + isConcurrentSession: false, + selectedRole: { + role_id: "1" + }, + rolesWithAccess: [ + { + role_id: "2", + role_name: "Pharmacist", + org_code: "ABC", + org_name: "Pharmacy Org" + }, + { + role_id: "1", // this one should be filtered out + role_name: "Admin", + org_code: "ZZZ", + org_name: "Same Org" + } + ], + rolesWithoutAccess: [ + { + role_id: "3", + role_name: "Technician", + org_code: "XYZ", + org_name: "Tech Org" + } + ], + error: null, + invalidSessionCause: undefined, + hasSingleRoleAccess: jest.fn().mockReturnValue(false) + }) + + render() + + expect(logger.debug).toHaveBeenCalledWith("Auth context for rendered roles", { + logId: "some-log-id-uuid-value", + sessionId: "session-1234", + userId: "12345", + pageName: "/", + authContext: { + cognitoUsername: "cognito-user", + name:"Test User", + currentlySelectedRole: { + role_id: "1" + }, + isSignedIn: true, + isSigningIn: false, + isSigningOut: false, + isConcurrentSession: false, + error: null, + invalidSessionCause: undefined + } + }, true) + }) + + it("chunks and logs roles", async () => { + // eslint-disable-next-line no-undef + jest.spyOn(global.crypto, "randomUUID").mockReturnValueOnce("some-log-id-uuid-value") + mockUseAuth.mockReturnValue({ + sessionId: "session-1234", + user: "cognito-user", + userDetails: { + sub: "12345", + name: "Test User" + }, + isSignedIn: true, + isSigningIn: false, + isSigningOut: false, + isConcurrentSession: false, + selectedRole: { + role_id: "1" + }, + rolesWithAccess: [ + { + role_id: "2", + role_name: "Pharmacist", + org_code: "ABC", + org_name: "Pharmacy Org" + }, + { + role_id: "1", // this one should be filtered out + role_name: "Admin", + org_code: "ZZZ", + org_name: "Same Org" + }, + { + role_id: "3", + role_name: "Pharmacist", + org_code: "ABC", + org_name: "Pharmacy Org" + }, + { + role_id: "4", + role_name: "Admin", + org_code: "ZZZ", + org_name: "Same Org" + }, + { + role_id: "5", + role_name: "Pharmacist", + org_code: "ABC", + org_name: "Pharmacy Org" + }, + { + role_id: "6", + role_name: "Admin", + org_code: "ZZZ", + org_name: "Same Org" + } + ], + rolesWithoutAccess: [ + { + role_id: "7", + role_name: "Technician", + org_code: "XYZ", + org_name: "Tech Org" + }, + { + role_id: "8", + role_name: "Technician", + org_code: "XYZ", + org_name: "Tech Org" + }, + { + role_id: "9", + role_name: "Technician", + org_code: "XYZ", + org_name: "Tech Org" + }, + { + role_id: "10", + role_name: "Technician", + org_code: "XYZ", + org_name: "Tech Org" + }, + { + role_id: "11", + role_name: "Technician", + org_code: "XYZ", + org_name: "Tech Org" + } + ], + error: null, + invalidSessionCause: undefined, + hasSingleRoleAccess: jest.fn().mockReturnValue(false) + }) + + render() + + expect(logger.debug).toHaveBeenCalledTimes(10) + expect(logger.debug).toHaveBeenCalledWith("Returned roles with access", { + logId: "some-log-id-uuid-value", + sessionId: "session-1234", + userId: "12345", + pageName: "/", + totalChunks: 2, + chunkNo: 1, + returnedRolesWithAccess: [ + { + role_id: "2", + role_name: "Pharmacist", + org_code: "ABC", + org_name: "Pharmacy Org" + }, + { + role_id: "1", // this one should be filtered out + role_name: "Admin", + org_code: "ZZZ", + org_name: "Same Org" + }, + { + role_id: "3", + role_name: "Pharmacist", + org_code: "ABC", + org_name: "Pharmacy Org" + }, + { + role_id: "4", + role_name: "Admin", + org_code: "ZZZ", + org_name: "Same Org" + } + ] + }, true) + expect(logger.debug).toHaveBeenCalledWith("Returned roles with access", { + logId: "some-log-id-uuid-value", + sessionId: "session-1234", + userId: "12345", + pageName: "/", + totalChunks: 2, + chunkNo: 2, + returnedRolesWithAccess: [ + { + role_id: "5", + role_name: "Pharmacist", + org_code: "ABC", + org_name: "Pharmacy Org" + }, + { + role_id: "6", + role_name: "Admin", + org_code: "ZZZ", + org_name: "Same Org" + } + ] + }, true) + expect(logger.debug).toHaveBeenCalledWith("Returned roles without access", { + logId: "some-log-id-uuid-value", + sessionId: "session-1234", + userId: "12345", + pageName: "/", + totalChunks: 2, + chunkNo: 1, + returnedRolesWithoutAccess: [ + { + role_id: "7", + role_name: "Technician", + org_code: "XYZ", + org_name: "Tech Org" + }, + { + role_id: "8", + role_name: "Technician", + org_code: "XYZ", + org_name: "Tech Org" + }, + { + role_id: "9", + role_name: "Technician", + org_code: "XYZ", + org_name: "Tech Org" + }, + { + role_id: "10", + role_name: "Technician", + org_code: "XYZ", + org_name: "Tech Org" + } + ] + }, true) + expect(logger.debug).toHaveBeenCalledWith("Returned roles without access", { + logId: "some-log-id-uuid-value", + sessionId: "session-1234", + userId: "12345", + pageName: "/", + totalChunks: 2, + chunkNo: 2, + returnedRolesWithoutAccess: [ + { + role_id: "11", + role_name: "Technician", + org_code: "XYZ", + org_name: "Tech Org" + } + ] + }, true) + expect(logger.debug).toHaveBeenCalledWith("Rendered roles with access", { + logId: "some-log-id-uuid-value", + sessionId: "session-1234", + userId: "12345", + pageName: "/", + totalChunks: 2, + chunkNo: 1, + renderedRolesWithAccessProps: [ + { + link: "/your-selected-role", + role: { + role_id: "2", + role_name: "Pharmacist", + org_code: "ABC", + org_name: "Pharmacy Org" + }, + uuid: "role_with_access_0" + }, + { + link: "/your-selected-role", + role: { + role_id: "3", + role_name: "Pharmacist", + org_code: "ABC", + org_name: "Pharmacy Org" + }, + uuid: "role_with_access_2" + }, + { + link: "/your-selected-role", + role: { + role_id: "4", + role_name: "Admin", + org_code: "ZZZ", + org_name: "Same Org" + }, + uuid: "role_with_access_3" + }, + { + link: "/your-selected-role", + role: { + role_id: "5", + role_name: "Pharmacist", + org_code: "ABC", + org_name: "Pharmacy Org" + }, + uuid: "role_with_access_4" + } + ] + }, true) + expect(logger.debug).toHaveBeenCalledWith("Rendered roles with access", { + logId: "some-log-id-uuid-value", + sessionId: "session-1234", + userId: "12345", + pageName: "/", + totalChunks: 2, + chunkNo: 2, + renderedRolesWithAccessProps: [ + { + link: "/your-selected-role", + role: { + role_id: "6", + role_name: "Admin", + org_code: "ZZZ", + org_name: "Same Org" + }, + uuid: "role_with_access_5" + } + ] + }, true) + expect(logger.debug).toHaveBeenCalledWith("Rendered roles without access", { + logId: "some-log-id-uuid-value", + sessionId: "session-1234", + userId: "12345", + pageName: "/", + totalChunks: 2, + chunkNo: 1, + renderedRolesWithoutAccessProps: [ + { + roleName: "Technician", + odsCode: "XYZ", + orgName: "Tech Org", + uuid: "role_without_access_0" + }, + { + roleName: "Technician", + odsCode: "XYZ", + orgName: "Tech Org", + uuid: "role_without_access_1" + }, + { + roleName: "Technician", + odsCode: "XYZ", + orgName: "Tech Org", + uuid: "role_without_access_2" + }, + { + roleName: "Technician", + odsCode: "XYZ", + orgName: "Tech Org", + uuid: "role_without_access_3" + } + ] + }, true) + expect(logger.debug).toHaveBeenCalledWith("Rendered roles without access", { + logId: "some-log-id-uuid-value", + sessionId: "session-1234", + userId: "12345", + pageName: "/", + totalChunks: 2, + chunkNo: 2, + renderedRolesWithoutAccessProps: [ + { + roleName: "Technician", + odsCode: "XYZ", + orgName: "Tech Org", + uuid: "role_without_access_4" + } + ] + }, true) + }) + it("navigates on confirm and continue button click", async () => { mockUseAuth.mockReturnValue({ isSigningIn: false, @@ -284,7 +777,9 @@ describe("RoleSelectionPage", () => { hasSingleRoleAccess: jest.fn().mockReturnValue(false) }) - render() + render( + + ) const button = screen.getByTestId("confirm-and-continue") expect(button).toBeInTheDocument() @@ -313,11 +808,17 @@ describe("RoleSelectionPage", () => { stateParams: "bar" }) const {rerender} = render( - + + + ) - rerender() - expect(screen.getByRole("main")).toHaveTextContent("Loading") + rerender( + + + + ) + expect(screen.getByRole("heading", {name: `${LOADING_STRINGS.HEADER}`})).toBeInTheDocument() // Step 2: Simulate login complete and role assignment act(() => { @@ -335,7 +836,11 @@ describe("RoleSelectionPage", () => { authState.hasSingleRoleAccess = jest.fn().mockReturnValue(true) }) - rerender() + rerender( + + + + ) expect(mockNavigate).toHaveBeenCalledWith(FRONTEND_PATHS.SEARCH_BY_PRESCRIPTION_ID) }) @@ -364,7 +869,11 @@ describe("RoleSelectionPage", () => { }) it("renders card with correct organization name and ODS code", () => { - render() + render( + + + + ) expect(screen.getByText(/Test Pharmacy/)).toBeInTheDocument() expect(screen.getByText(/ABC123/)).toBeInTheDocument() @@ -372,7 +881,11 @@ describe("RoleSelectionPage", () => { }) it("renders address information correctly", () => { - render() + render( + + + + ) expect(screen.getByText("123 Test Street")).toBeInTheDocument() expect(screen.getByText("Test City")).toBeInTheDocument() @@ -380,7 +893,11 @@ describe("RoleSelectionPage", () => { }) it("handles click on role card", async () => { - render() + render( + + + + ) const card = screen.getByTestId("eps-card") expect(card).toBeInTheDocument() @@ -396,7 +913,11 @@ describe("RoleSelectionPage", () => { }) it("handles Enter key press on role card", async () => { - render() + render( + + + + ) const card = screen.getByTestId("eps-card") expect(card).toBeInTheDocument() @@ -412,7 +933,11 @@ describe("RoleSelectionPage", () => { }) it("handles Space key press on role card", async () => { - render() + render( + + + + ) const card = screen.getByTestId("eps-card") expect(card).toBeInTheDocument() @@ -428,7 +953,11 @@ describe("RoleSelectionPage", () => { }) it("ignores other key presses on role card", async () => { - render() + render( + + + + ) const card = screen.getByTestId("eps-card") expect(card).toBeInTheDocument() @@ -456,7 +985,11 @@ describe("RoleSelectionPage", () => { mockUpdateSelectedRole.mockRejectedValue(mockAxiosError) - render() + render( + + + + ) const card = screen.getByTestId("eps-card") @@ -479,7 +1012,11 @@ describe("RoleSelectionPage", () => { mockUpdateSelectedRole.mockRejectedValue(mockError) - render() + render( + + + + ) const card = screen.getByTestId("eps-card") @@ -493,7 +1030,11 @@ describe("RoleSelectionPage", () => { }) it("applies correct CSS classes to card elements", () => { - render() + render( + + + + ) const card = screen.getByTestId("eps-card") expect(card).toHaveClass("nhsuk-card", "nhsuk-card--primary", "nhsuk-u-margin-bottom-4") @@ -523,7 +1064,11 @@ describe("RoleSelectionPage", () => { hasSingleRoleAccess: jest.fn().mockReturnValue(false) }) - render() + render( + + + + ) expect(screen.getByText(/No Org/)).toBeInTheDocument() expect(screen.getByText(/No ODS/)).toBeInTheDocument() @@ -550,7 +1095,11 @@ describe("RoleSelectionPage", () => { hasSingleRoleAccess: jest.fn().mockReturnValue(false) }) - render() + render( + + + + ) expect(screen.getByText(/Test Pharmacy/)).toBeInTheDocument() expect(screen.queryByText("Admin Org")).not.toBeInTheDocument() @@ -559,4 +1108,37 @@ describe("RoleSelectionPage", () => { expect(cards).toHaveLength(1) }) }) + describe("Loading Page Interactions", () => { + it("Render loading when user clicks signout", async () => { + const authState = { + ...mockAuthState, + isSignedIn: true + } + mockUseAuth.mockReturnValue(authState) + const {rerender} = render( + + + + ) + + // Mock signOut to update the authState AND refresh the mock + ;(signOut as jest.Mock).mockImplementation((authState: AuthContextType) => { + authState.isSigningOut = true + mockUseAuth.mockReturnValue(authState) // Update what useAuth returns + }) + + await act(async () => { + signOut(authState) + }) + + // Rerender to pick up the new auth state + rerender( + + + + ) + + expect(screen.getByRole("heading", {name: `${LOADING_STRINGS.HEADER}`})).toBeInTheDocument() + }) + }) }) diff --git a/packages/cpt-ui/__tests__/LoadingPage.test.tsx b/packages/cpt-ui/__tests__/LoadingPage.test.tsx new file mode 100644 index 0000000000..fa244663bf --- /dev/null +++ b/packages/cpt-ui/__tests__/LoadingPage.test.tsx @@ -0,0 +1,138 @@ + +import {useAuth as mockUseAuth} from "@/context/AuthProvider" +import {logger} from "@/helpers/logger" +import {mockAuthState} from "./mocks/AuthStateMock" +import {render} from "@testing-library/react" +import {normalizePath as mockNormalizePath} from "@/helpers/utils" +import {AccessProvider} from "@/context/AccessProvider" +import {useNavigate, useLocation, MemoryRouter} from "react-router-dom" +import Layout from "@/Layout" +import LoadingPage from "@/pages/LoadingPage" +import {ENV_CONFIG} from "@/constants/environment" +import {returnLocalState} from "@/helpers/appLocalStateOutput" + +jest.mock("@/helpers/logger", () => ({ + logger: { + debug: jest.fn(), + info: jest.fn(), + error: jest.fn() + } +})) + +jest.mock("react-router-dom", () => ({ + ...jest.requireActual("react-router-dom"), + useNavigate: jest.fn(), + useLocation: jest.fn() +})) + +jest.mock("@/helpers/utils", () => ({ + normalizePath: jest.fn() +})) + +jest.mock("@/components/EpsHeader", () => ({ + __esModule: true, + default: jest.fn(() => null) +})) + +jest.mock("@/context/AuthProvider", () => ({ + useAuth: jest.fn() +})) + +let mockReturn = { + ...mockAuthState, + sessionId: "session-1234", + isSignedIn: true, + isSigningIn: false, + isConcurrentSession: true +} + +describe("LoadingPage", () => { + const navigate = jest.fn() + const mockNavigateHook = useNavigate as jest.Mock + + beforeEach(() => { + jest.clearAllMocks() + jest.useFakeTimers() + mockNavigateHook.mockReturnValue(navigate) + }) + + afterEach(() => { + jest.runOnlyPendingTimers() + jest.useRealTimers() + }) + + it("renders if should block children true and sends rum log after timeout", () => { + // Setup + let mockReturnAdjusted = { + ...mockReturn, + isSignedIn: true, + isSigningOut: true, + updateTrackerUserInfo: jest.fn().mockResolvedValue({error: null}) + } + ;(mockUseAuth as jest.Mock).mockReturnValue({...mockReturnAdjusted}) + + const path = "/some-protected-path" + ;(useLocation as jest.Mock).mockReturnValue({ + pathname: `${path}` + }) + ;(mockNormalizePath as jest.Mock).mockReturnValue(path) + + const {container} = render( + + + + + + + + ) + + // Should render nothing (children blocked) - show loading wheel + expect(container).toBeInTheDocument() + + // Advance time to trigger useEffect + jest.advanceTimersByTime(ENV_CONFIG.RUM_ERROR_TIMER_INTERVAL + 1000) + + // Verify + const localState = returnLocalState(mockReturnAdjusted) + expect(logger.debug) + .toHaveBeenCalledWith("Redirection page error timer", {...localState, path}, true) + }) + + it("renders if should block children true and doesnt send rum log before timeout", () => { + // Setup + let mockReturnAdjusted = { + ...mockReturn, + isSignedIn: true, + isSigningOut: true, + updateTrackerUserInfo: jest.fn().mockResolvedValue({error: null}) + } + ;(mockUseAuth as jest.Mock).mockReturnValue({...mockReturnAdjusted}) + + const path = "/some-protected-path" + ;(useLocation as jest.Mock).mockReturnValue({ + pathname: `${path}` + }) + ;(mockNormalizePath as jest.Mock).mockReturnValue(path) + + const {container} = render( + + + + + + + + ) + + // Should render nothing (children blocked) - show loading wheel + expect(container).toBeInTheDocument() + + // Advance time to trigger useEffect + jest.advanceTimersByTime(ENV_CONFIG.RUM_ERROR_TIMER_INTERVAL - 1000) + + // Verify + const localState = returnLocalState(mockReturnAdjusted) + expect(logger.debug).not.toHaveBeenCalledWith(`Redirection page error timer: ${path}`, localState, true) + }) +}) diff --git a/packages/cpt-ui/__tests__/logger.test.ts b/packages/cpt-ui/__tests__/logger.test.ts new file mode 100644 index 0000000000..d65d30a34f --- /dev/null +++ b/packages/cpt-ui/__tests__/logger.test.ts @@ -0,0 +1,44 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import {jest} from "@jest/globals" +import {logger} from "../src/helpers/logger" +import {cptAwsRum} from "../src/helpers/awsRum" + +describe("logger", () => { + + beforeEach(() => { + jest.resetAllMocks() + }) + + it("sends log to RUM when called with send flag", async () => { + const mock = jest.fn() + cptAwsRum.getAwsRum = jest.fn(() => ({ + recordEvent: mock + })) as unknown as any + + logger.info("test log", {bonus_arg: "value"}, true) + + expect(mock).toHaveBeenCalledWith("logger_info", {"bonus_arg": "value", "message": "test log"}) + }) + + it("does not sends log to RUM when called with send flag as false", async () => { + const mock = jest.fn() + cptAwsRum.getAwsRum = jest.fn(() => ({ + recordEvent: mock + })) as unknown as any + + logger.info("test log", {bonus_arg: "value"}, false) + + expect(mock).not.toHaveBeenCalled() + }) + + it("does not sends log to RUM when called without send flag", async () => { + const mock = jest.fn() + cptAwsRum.getAwsRum = jest.fn(() => ({ + recordEvent: mock + })) as unknown as any + + logger.info("test log", {bonus_arg: "value"}) + + expect(mock).not.toHaveBeenCalled() + }) +}) diff --git a/packages/cpt-ui/__tests__/mocks/AuthStateMock.tsx b/packages/cpt-ui/__tests__/mocks/AuthStateMock.tsx new file mode 100644 index 0000000000..8040931da1 --- /dev/null +++ b/packages/cpt-ui/__tests__/mocks/AuthStateMock.tsx @@ -0,0 +1,40 @@ +import {jest} from "@jest/globals" +import {AuthContextType} from "@/context/AuthProvider" + +/** + * Default mock AuthContextType for testing. + * Use spread syntax to override specific values in your tests: + * + * @example + * const authState = { + * ...mockAuthState, + * isSignedIn: true, + * rolesWithAccess: [myRole] + * } + * mockUseAuth.mockReturnValue(authState) + */ +export const mockAuthState = { + // State values + error: null, + user: null, + isSignedIn: false, + isSigningIn: false, + isSigningOut: false, + isConcurrentSession: false, + invalidSessionCause: undefined, + sessionId: "test-session-id", + rolesWithAccess: [], + rolesWithoutAccess: [], + selectedRole: undefined, + userDetails: undefined, + + // Mock functions with sensible defaults + cognitoSignIn: jest.fn(), + cognitoSignOut: jest.fn(), + clearAuthState: jest.fn(), + hasSingleRoleAccess: jest.fn().mockReturnValue(false), + updateSelectedRole: jest.fn(), + updateTrackerUserInfo: jest.fn(), + updateInvalidSessionCause: jest.fn(), + setIsSigningOut: jest.fn() +} as unknown as AuthContextType diff --git a/packages/cpt-ui/jest.setup.ts b/packages/cpt-ui/jest.setup.ts index 71b3edca43..dd57818e7f 100644 --- a/packages/cpt-ui/jest.setup.ts +++ b/packages/cpt-ui/jest.setup.ts @@ -67,7 +67,8 @@ jest.mock("@/constants/environment", () => ({ TARGET_ENVIRONMENT: "test", API_DOMAIN_OVERRIDE: "http://localhost:8080", BASE_PATH: "", - LOCAL_DEV: true + LOCAL_DEV: true, + RUM_ERROR_TIMER_INTERVAL: 1000 // set to 1 second for testing }, APP_CONFIG: { SERVICE_NAME: "Clinical prescription tracking service", @@ -94,6 +95,24 @@ jest.mock("@/constants/environment", () => ({ SEARCH_BY_BASIC_DETAILS: "/search-by-basic-details", TOO_MANY_SEARCH_RESULTS: "/too-many-search-results" }, + ALLOWED_NO_ROLE_PATHS: [ + "/login", + "/logout", + "/cookies", + "/privacy-notice", + "/session-logged-out", + "/cookies-selected", + "/", + "/select-active-session" + ], + PUBLIC_PATHS: [ + "/login", + "/logout", + "/cookies", + "/privacy-notice", + "/cookies-selected", + "/" + ], MOCK_AUTH_ALLOWED_ENVIRONMENTS: ["dev", "dev-pr", "int", "qa"] })) diff --git a/packages/cpt-ui/package.json b/packages/cpt-ui/package.json index 36ded37d5e..c578465216 100644 --- a/packages/cpt-ui/package.json +++ b/packages/cpt-ui/package.json @@ -14,15 +14,15 @@ }, "dependencies": { "@cpt-ui-common/common-types": "^1.0.0", - "aws-amplify": "^6.16.0", + "aws-amplify": "^6.16.2", "aws-rum-web": "^1.25.0", - "axios": "^1.13.2", + "axios": "^1.13.5", "date-fns": "^4.1.0", "identity-obj-proxy": "^3.0.0", "nhsuk-frontend": "9.6.4", "nhsuk-react-components": "^5.0.0", "nhsuk-react-components-extensions": "^2.3.0-beta", - "pino": "^10.3.0", + "pino": "^10.3.1", "react": "18.3.1", "react-dom": "18.3.1", "react-input-mask": "^2.0.4", @@ -30,7 +30,7 @@ "sass": "^1.97.2" }, "devDependencies": { - "@aws-amplify/auth": "^6.18.0", + "@aws-amplify/auth": "^6.19.1", "@swc/jest": "^0.2.39", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", @@ -40,7 +40,7 @@ "@types/react": "18.3.1", "@types/react-dom": "18.3.1", "@types/react-input-mask": "^3.0.6", - "@vitejs/plugin-react-swc": "^4.2.2", + "@vitejs/plugin-react-swc": "^4.2.3", "axios-mock-adapter": "^2.1.0", "sass": "^1.97.2", "vite": "^7.3.1" diff --git a/packages/cpt-ui/src/components/EpsRoleSelectionPage.tsx b/packages/cpt-ui/src/components/EpsRoleSelectionPage.tsx index 4ba74eadb6..57a5ca3392 100644 --- a/packages/cpt-ui/src/components/EpsRoleSelectionPage.tsx +++ b/packages/cpt-ui/src/components/EpsRoleSelectionPage.tsx @@ -12,7 +12,6 @@ import { } from "nhsuk-react-components" import {useAuth} from "@/context/AuthProvider" -import EpsSpinner from "@/components/EpsSpinner" import {RoleDetails} from "@cpt-ui-common/common-types" import {Button} from "./ReactRouterButton" import {FRONTEND_PATHS} from "@/constants/environment" @@ -22,6 +21,7 @@ import {usePageTitle} from "@/hooks/usePageTitle" import axios from "axios" import {handleRestartLogin} from "@/helpers/logout" import {CHANGE_YOUR_ROLE_PAGE_TEXT} from "@/constants/ui-strings/ChangeRolePageStrings" +import LoadingPage from "@/pages/LoadingPage" // This is passed to the EPS card component. export type RolesWithAccessProps = { @@ -37,6 +37,11 @@ export type RolesWithoutAccessProps = { roleName: string } +interface RoleComponentProps { + rolesWithAccess: Array + rolesWithoutAccess: Array +} + interface RoleSelectionPageProps { contentText: { pageTitle: string @@ -92,8 +97,10 @@ export default function RoleSelectionPage({ const navigate = useNavigate() const redirecting = useRef(false) - const [roleCardPropsWithAccess, setRoleCardPropsWithAccess] = useState>([]) - const [roleCardPropsWithoutAccess, setRoleCardPropsWithoutAccess] = useState>([]) + const [roleComponentProps, setRoleComponentProps] = useState({ + rolesWithAccess: [], + rolesWithoutAccess: [] + }) usePageTitle(auth.rolesWithAccess.length === 0 ? CHANGE_YOUR_ROLE_PAGE_TEXT.NO_ACCESS_pageTitle @@ -129,25 +136,102 @@ export default function RoleSelectionPage({ handleSetSelectedRole(e, roleCardProps) } + const chunkRolesForRumLogs = ( + roles: Array, logMessage: string, logId: string, fieldToPopulate: string) => { + const chunkSize = 4 + + const chunks = [] + for (let index = 0; index < roles.length; index += chunkSize) { + const chunk = roles.slice(index, index + chunkSize) + chunks.push(chunk) + } + + for (const [index, chunk] of chunks.entries()){ + logger.debug(logMessage, { + logId, + sessionId: auth.sessionId, + userId: auth.userDetails?.sub, + pageName: location.pathname, + totalChunks: chunks.length, + chunkNo: index+1, + [fieldToPopulate]: chunk + }, true) + } + } + useEffect(() => { // Transform roles data for display - setRoleCardPropsWithAccess(auth.rolesWithAccess.length === 0 + const rolesWithAccessComponentProps = auth.rolesWithAccess.length === 0 ? [] : auth.rolesWithAccess.map((role: RoleDetails, index) => ({ uuid: `role_with_access_${index}`, role, link: FRONTEND_PATHS.YOUR_SELECTED_ROLE - })) - ) + })).filter((duplicateRole) => duplicateRole.role.role_id !== auth.selectedRole?.role_id) - setRoleCardPropsWithoutAccess(auth.rolesWithoutAccess.map((role, index) => ({ + const rolesWithoutAccessComponentProps = auth.rolesWithoutAccess.map((role, index) => ({ uuid: `role_without_access_${index}`, roleName: role.role_name || noRoleName, orgName: role.org_name || noOrgName, odsCode: role.org_code || noODSCode - }))) + })) + + if(auth.userDetails?.sub) { + /* RUM has a 6kb event payload size limit so we need to split up the information we want to log. + All logs generated at this point will include the same logId so that we can tie them all back to the + same occurrence when trying to debug issues*/ + + /* First log just include counts of roles and other information required for the report*/ + const logId = crypto.randomUUID() + logger.debug("Counts of roles returned vs rendered", { + logId, + sessionId: auth.sessionId, + userId: auth.userDetails.sub, + pageName: location.pathname, + /* Note: If there is a selected role, the list of roles with access in the auth context + and the list to be rendered will be out by 1 */ + currentlySelectedRole: !!auth.selectedRole, + returnedRolesWithAccessCount: auth.rolesWithAccess.length, + returnedRolesWithoutAccessCount: auth.rolesWithoutAccess.length, + renderedRolesWithAccessCount: rolesWithAccessComponentProps.length, + renderedRolesWithoutAccessCount: rolesWithoutAccessComponentProps.length + }, true) + + /* Second log includes the auth context at this moment, minus the roles with/without access lists*/ + logger.debug("Auth context for rendered roles", { + logId, + sessionId: auth.sessionId, + userId: auth.userDetails.sub, + pageName: location.pathname, + /* only pick out the specific additional values we care about to reduce unnecessary noise + in logs from function props of the auth context object */ + authContext: { + cognitoUsername: auth.user, + name: auth.userDetails.name, + currentlySelectedRole: auth.selectedRole, + isSignedIn: auth.isSignedIn, + isSigningIn: auth.isSigningIn, + isSigningOut: auth.isSigningOut, + isConcurrentSession: auth.isConcurrentSession, + error: auth.error, + invalidSessionCause: auth.invalidSessionCause + } + }, true) + + chunkRolesForRumLogs(auth.rolesWithAccess, "Returned roles with access", logId, "returnedRolesWithAccess") + chunkRolesForRumLogs( + auth.rolesWithoutAccess, "Returned roles without access", logId, "returnedRolesWithoutAccess") + chunkRolesForRumLogs( + rolesWithAccessComponentProps, "Rendered roles with access", logId, "renderedRolesWithAccessProps") + chunkRolesForRumLogs( + rolesWithoutAccessComponentProps, "Rendered roles without access", logId, "renderedRolesWithoutAccessProps") + } + + setRoleComponentProps({ + rolesWithAccess: rolesWithAccessComponentProps, + rolesWithoutAccess: rolesWithoutAccessComponentProps + }) - logger.warn("RoleCardPropsWithAccess length: ", {roleCardPropsWithAccess, error: auth.error}) }, [auth.rolesWithAccess, auth.rolesWithoutAccess]) // Handle auto-redirect for single role @@ -160,8 +244,7 @@ export default function RoleSelectionPage({ return } else { // something has gone wrong so go back to login - auth.clearAuthState() - navigate(FRONTEND_PATHS.LOGIN) + handleRestartLogin(auth, "NoSearchParams") } } else { redirecting.current = false @@ -174,21 +257,6 @@ export default function RoleSelectionPage({ } }, [auth.hasSingleRoleAccess, auth.isSignedIn]) - // Show spinner while loading or redirecting - if (redirecting.current) { - return ( -
- - - - - - - -
- ) - } - // Show error if present if (auth.error) { return ( @@ -221,125 +289,127 @@ export default function RoleSelectionPage({ className="nhsuk-main-wrapper" data-testid="eps_roleSelectionComponent" > + { + redirecting.current || auth.isSigningOut ? + : + + + +

+ + + {auth.rolesWithAccess.length === 0 ? titleNoAccess : title} + + + - + {(auth.rolesWithAccess.length > 0) && caption} + + +

- - - -

- - - {auth.rolesWithAccess.length === 0 ? titleNoAccess : title} - - - - - {(auth.rolesWithAccess.length > 0) && caption} - - -

- - {auth.rolesWithAccess.length === 0 &&

{captionNoAccess}

} - {auth.selectedRole && ( -
- -

- {insetText.loggedInTemplate - .replace("{orgName}", auth.selectedRole.org_name || noOrgName) - .replace("{odsCode}", auth.selectedRole.org_code || noODSCode) - .replace("{roleName}", auth.selectedRole.role_name || noRoleName)} -

-
- -

{alternativeMessage}

-
- )} - - - {(auth.rolesWithAccess.length > 0) && (roleCardPropsWithAccess.length > 0) && ( - -
- {roleCardPropsWithAccess - .filter((duplicateRole) => duplicateRole.role.role_id !== auth.selectedRole?.role_id) - .map((roleCardProps: RolesWithAccessProps) => ( - handleCardKeyDown(e, roleCardProps)} - onClick={(e) => handleCardClick(e, roleCardProps)} - style={{cursor: "pointer"}} + {auth.rolesWithAccess.length === 0 &&

{captionNoAccess}

} + {auth.selectedRole && ( +
+ +

+ {insetText.loggedInTemplate + .replace("{orgName}", auth.selectedRole.org_name || noOrgName) + .replace("{odsCode}", auth.selectedRole.org_code || noODSCode) + .replace("{roleName}", auth.selectedRole.role_name || noRoleName)} +

+
+
- - )} + {confirmButton.text} + +

{alternativeMessage}

+ + )} + + + {(auth.rolesWithAccess.length > 0) && (roleComponentProps.rolesWithAccess.length > 0) && ( + +
+ {roleComponentProps.rolesWithAccess + .map((roleCardProps: RolesWithAccessProps) => ( + handleCardKeyDown(e, roleCardProps)} + onClick={(e) => handleCardClick(e, roleCardProps)} + style={{cursor: "pointer"}} + > + +
+
+ + {roleCardProps.role.org_name || noOrgName} +
+ (ODS: {roleCardProps.role.org_code || noODSCode}) +
+ + {roleCardProps.role.role_name || noRoleName} + +
+
+ + {(roleCardProps.role.site_address || contentText.noAddress) + .split("\n") + .map((line: string, index: number) => ( + + {line} +
+
+ ))} +
+
+
+
+
+ ))} +
+ + )} - -

{rolesWithoutAccessHeader}

-
- - {roles_without_access_table_title} - - - - - - {organisation} - {role} - - - - {roleCardPropsWithoutAccess.map( - (roleItem: RolesWithoutAccessProps) => ( - - - {roleItem.orgName} (ODS: {roleItem.odsCode}) - - - {roleItem.roleName} - + +

{rolesWithoutAccessHeader}

+
+ + {roles_without_access_table_title} + + +
+ + + {organisation} + {role} - ) - )} - -
-
-
- -
-
+ + + {roleComponentProps.rolesWithoutAccess.map( + (roleItem: RolesWithoutAccessProps) => ( + + + {roleItem.orgName} (ODS: {roleItem.odsCode}) + + + {roleItem.roleName} + + + ) + )} + + + + + +
+
+ } ) } diff --git a/packages/cpt-ui/src/constants/environment.ts b/packages/cpt-ui/src/constants/environment.ts index ed17447d6e..6171bec4f0 100644 --- a/packages/cpt-ui/src/constants/environment.ts +++ b/packages/cpt-ui/src/constants/environment.ts @@ -15,7 +15,8 @@ export const ENV_CONFIG = { BASE_PATH: import.meta.env.BASE_PATH || "site", LOCAL_DEV: import.meta.env.VITE_LOCAL_DEV === "true", BASE_URL: import.meta.env.BASE_URL, - BASE_URL_PATH: `${import.meta.env.BASE_URL}/${import.meta.env.BASE_PATH || "site"}/` + BASE_URL_PATH: `${import.meta.env.BASE_URL}/${import.meta.env.BASE_PATH || "site"}/`, + RUM_ERROR_TIMER_INTERVAL: Number(import.meta.env.VITE_RUM_ERROR_TIMER_INTERVAL) || 10000 } as const // Application Configuration @@ -94,7 +95,8 @@ export const PUBLIC_PATHS = [ export const ALLOWED_NO_ROLE_PATHS = [ ...PUBLIC_PATHS, FRONTEND_PATHS.SELECT_YOUR_ROLE, - FRONTEND_PATHS.SESSION_SELECTION + FRONTEND_PATHS.SESSION_SELECTION, + FRONTEND_PATHS.CHANGE_YOUR_ROLE ] as const export const ALLOWED_NO_REDIRECT_PATHS = [ diff --git a/packages/cpt-ui/src/constants/ui-strings/LoadingPage.ts b/packages/cpt-ui/src/constants/ui-strings/LoadingPage.ts new file mode 100644 index 0000000000..ca3a665e17 --- /dev/null +++ b/packages/cpt-ui/src/constants/ui-strings/LoadingPage.ts @@ -0,0 +1,4 @@ +// HEADER strings +export const LOADING_STRINGS = { + HEADER: "You're being redirected" +} diff --git a/packages/cpt-ui/src/context/AccessProvider.tsx b/packages/cpt-ui/src/context/AccessProvider.tsx index 82178a2e3a..193575a8e1 100644 --- a/packages/cpt-ui/src/context/AccessProvider.tsx +++ b/packages/cpt-ui/src/context/AccessProvider.tsx @@ -68,7 +68,11 @@ export const AccessProvider = ({children}: { children: ReactNode }) => { const noRole = auth.isSignedIn && !auth.isSigningIn && !auth.selectedRole const authedAtRoot = auth.isSignedIn && !!auth.selectedRole && atRoot - logger.info(path) + logger.info(`Requested path: ${path}`) + if (loggedOut && (!inNoRoleAllowed || atRoot)) { + return redirect(FRONTEND_PATHS.LOGIN, "Not signed in - redirecting to login page") + } + if (auth.isSignedIn && path === FRONTEND_PATHS.LOGIN) { if (!auth.selectedRole) { return redirect(FRONTEND_PATHS.SELECT_YOUR_ROLE, "User already logged in. No role selected.") @@ -89,10 +93,6 @@ export const AccessProvider = ({children}: { children: ReactNode }) => { return redirect(FRONTEND_PATHS.SEARCH_BY_PRESCRIPTION_ID, "Authenticated user on root path - redirecting to search") } - - if (loggedOut && (!inNoRoleAllowed || atRoot)) { - return redirect(FRONTEND_PATHS.LOGIN, "Not signed in at root - redirecting to login page") - } } const checkUserInfo = () => { diff --git a/packages/cpt-ui/src/context/AuthProvider.tsx b/packages/cpt-ui/src/context/AuthProvider.tsx index 4ae2bec78d..9514d3d36a 100644 --- a/packages/cpt-ui/src/context/AuthProvider.tsx +++ b/packages/cpt-ui/src/context/AuthProvider.tsx @@ -146,6 +146,7 @@ export const AuthProvider = ({children}: { children: React.ReactNode }) => { case "signedOut": logger.info("Processing signedOut event") + setIsSigningOut(true) clearAuthState() setError(null) break @@ -189,7 +190,6 @@ export const AuthProvider = ({children}: { children: React.ReactNode }) => { await signOut({global: true}) } - setIsSigningOut(true) logger.info("Frontend amplify signout OK!") return true } catch (err) { diff --git a/packages/cpt-ui/src/helpers/appLocalStateOutput.tsx b/packages/cpt-ui/src/helpers/appLocalStateOutput.tsx new file mode 100644 index 0000000000..42e9b59955 --- /dev/null +++ b/packages/cpt-ui/src/helpers/appLocalStateOutput.tsx @@ -0,0 +1,19 @@ +import {AuthContextType} from "@/context/AuthProvider" + +export function returnLocalState(auth: AuthContextType) { + const stateValues = { + error: auth.error, + userSub: auth.userDetails?.sub || null, + user: auth.user, + isSignedIn: auth.isSignedIn, + isSigningIn: auth.isSigningIn, + isSigningOut: auth.isSigningOut, + isConcurrentSession: auth.isConcurrentSession, + invalidSessionCause: auth.invalidSessionCause, + sessionId: auth.sessionId, + rolesWithAccessCount: auth.rolesWithAccess.length, + rolesWithoutAccessCount: auth.rolesWithoutAccess.length, + selectedRole: auth.selectedRole || null + } + return stateValues +} diff --git a/packages/cpt-ui/src/helpers/logger.tsx b/packages/cpt-ui/src/helpers/logger.tsx index 713e40da3e..349573cc40 100644 --- a/packages/cpt-ui/src/helpers/logger.tsx +++ b/packages/cpt-ui/src/helpers/logger.tsx @@ -2,6 +2,15 @@ import {APP_CONFIG} from "@/constants/environment" import pino from "pino" import {cptAwsRum} from "./awsRum" const REACT_LOG_LEVEL = APP_CONFIG.REACT_LOG_LEVEL || "debug" + +enum LogLevel { + TRACE = "trace", + DEBUG = "debug", + INFO = "info", + WARN = "warn", + ERROR = "error" +} + class Logger { logger: pino.Logger @@ -10,12 +19,34 @@ class Logger { this.logger = pino({ level: REACT_LOG_LEVEL, browser: { - asObject: true + asObject: true, + formatters: { + level: (label) => { + return { + level: label + } + } + } } }) } - public trace(message: string, args?: unknown): void { + private sendToRum(logLevel: LogLevel, message: string, additionalFields?: unknown, error?: Error): void { + const rumInstance = cptAwsRum.getAwsRum() + if (rumInstance !== null) { + rumInstance.recordEvent(`logger_${logLevel}`, {message, ...(additionalFields ? {...additionalFields}: {})}) + + if(error){ + rumInstance.recordError(error) + } + } + } + + public trace(message: string, args?: unknown, sendToRum: boolean = false): void { + if (sendToRum){ + this.sendToRum(LogLevel.TRACE, message, args) + } + if (args) { this.logger.trace(args, message) } else { @@ -23,7 +54,11 @@ class Logger { } } - public debug(message: string, args?: unknown): void { + public debug(message: string, args?: unknown, sendToRum: boolean = false): void { + if (sendToRum){ + this.sendToRum(LogLevel.DEBUG, message, args) + } + if (args) { this.logger.debug(args, message) } else { @@ -31,7 +66,11 @@ class Logger { } } - public info(message: string, args?: unknown): void { + public info(message: string, args?: unknown, sendToRum: boolean = false): void { + if (sendToRum){ + this.sendToRum(LogLevel.INFO, message, args) + } + if (args) { this.logger.info(args, message) } else { @@ -39,7 +78,11 @@ class Logger { } } - public warn(message: string, args?: unknown): void { + public warn(message: string, args?: unknown, sendToRum: boolean = false): void { + if (sendToRum){ + this.sendToRum(LogLevel.WARN, message, args) + } + if (args) { this.logger.warn(args, message) } else { @@ -48,14 +91,8 @@ class Logger { } public error(message: string, args?: unknown): void { - const rumInstance = cptAwsRum.getAwsRum() - if (rumInstance !== null) { - // get a stack trace so we get line numbers - const messageAsError = new Error(message) - rumInstance.recordEvent("logger_error", {message: message, stack: messageAsError.stack, details: args}) - // also use recordError to try and get source maps back to real line numbers - rumInstance.recordError(messageAsError) - } + const messageAsError = new Error(message) + this.sendToRum(LogLevel.ERROR, message, {stack: messageAsError.stack, details: args}, messageAsError) if (args) { this.logger.error(args, message) } else { diff --git a/packages/cpt-ui/src/helpers/logout.tsx b/packages/cpt-ui/src/helpers/logout.tsx index ba0a6805e3..515820147e 100644 --- a/packages/cpt-ui/src/helpers/logout.tsx +++ b/packages/cpt-ui/src/helpers/logout.tsx @@ -8,6 +8,7 @@ import {AUTH_CONFIG} from "@/constants/environment" */ export const signOut = async (authParam: AuthContextType, redirectUri?: string) => { + authParam.setIsSigningOut(true) const location = window.location.pathname logger.info(`Called signOut helper from ${location} with redirect of ${redirectUri}`) if (redirectUri) { diff --git a/packages/cpt-ui/src/pages/LoadingPage.tsx b/packages/cpt-ui/src/pages/LoadingPage.tsx index 946e2a55e3..2103a76129 100644 --- a/packages/cpt-ui/src/pages/LoadingPage.tsx +++ b/packages/cpt-ui/src/pages/LoadingPage.tsx @@ -1,22 +1,46 @@ -import {Col, Container, Row} from "nhsuk-react-components" +import {Container} from "nhsuk-react-components" import EpsSpinner from "@/components/EpsSpinner" import {usePageTitle} from "@/hooks/usePageTitle" import {logger} from "@/helpers/logger" import {normalizePath} from "@/helpers/utils" +import {LOADING_STRINGS} from "@/constants/ui-strings/LoadingPage" +import {Link} from "react-router-dom" +import {Fragment} from "react" +import {useAuth} from "@/context/AuthProvider" +import {useEffect} from "react" +import {ENV_CONFIG} from "@/constants/environment" +import {returnLocalState} from "@/helpers/appLocalStateOutput" export default function LoadingPage() { + const auth = useAuth() + usePageTitle("Loading information") const path = normalizePath(location.pathname) - logger.info(`Loading requested path: ${path}`) + + useEffect(() => { + const stateValues = returnLocalState(auth) + const timeout = setTimeout(() => { + // Send non-PID state values as additional fields to RUM for better observability of auth state during loading + logger.info("Redirection page error timer triggered") + logger.debug("Redirection page error timer", {...stateValues, path}, true) + }, ENV_CONFIG.RUM_ERROR_TIMER_INTERVAL) // set to 10 seconds to allow for slow connections + + return () => clearTimeout(timeout) + }, []) + return ( -
+
- - -

Loading

- - -
+ +

{LOADING_STRINGS.HEADER}

+

+ If you have not been redirected after 1 minute,{" "} + log out + {" "}to reset your session and then log in again. +

+
+ +
) diff --git a/packages/cpt-ui/vite-env.d.ts b/packages/cpt-ui/vite-env.d.ts index 32fc04eadd..3087b64160 100644 --- a/packages/cpt-ui/vite-env.d.ts +++ b/packages/cpt-ui/vite-env.d.ts @@ -29,6 +29,7 @@ interface ImportMetaEnv { readonly VITE_RUM_TELEMETRIES: string; readonly VITE_REACT_LOG_LEVEL: string; + readonly VITE_RUM_ERROR_TIMER_INTERVAL: number; } interface ImportMeta { diff --git a/packages/patientSearchLambda/package.json b/packages/patientSearchLambda/package.json index 1caeb38356..d8f2d489c8 100644 --- a/packages/patientSearchLambda/package.json +++ b/packages/patientSearchLambda/package.json @@ -13,18 +13,18 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", "@cpt-ui-common/pdsClient": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/http-header-normalizer": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/http-header-normalizer": "^7.1.1", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", - "axios": "^1.13.2" + "axios": "^1.13.5" }, "devDependencies": { "@cpt-ui-common/testing": "^1.0.0", diff --git a/packages/prescriptionDetailsLambda/package.json b/packages/prescriptionDetailsLambda/package.json index efab63791c..b97c8c7396 100644 --- a/packages/prescriptionDetailsLambda/package.json +++ b/packages/prescriptionDetailsLambda/package.json @@ -13,23 +13,23 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.30.0", - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-lambda-powertools/parameters": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/client-lambda": "^3.978.0", - "@aws-sdk/client-secrets-manager": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/commons": "^2.31.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/parameters": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/client-lambda": "^3.995.0", + "@aws-sdk/client-secrets-manager": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/common-types": "^1.0.0", "@cpt-ui-common/doHSClient": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", "@cpt-ui-common/pdsClient": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", - "axios": "^1.13.2", + "axios": "^1.13.5", "jsonwebtoken": "^9.0.3", "jwks-rsa": "^3.2.2" }, @@ -38,6 +38,6 @@ "@types/fhir": "^0.0.41", "axios-mock-adapter": "^2.0.0", "mock-jwks": "^3.3.5", - "nock": "^14.0.10" + "nock": "^14.0.11" } } diff --git a/packages/prescriptionListLambda/package.json b/packages/prescriptionListLambda/package.json index 375cf1612f..e0e7c5b6cc 100644 --- a/packages/prescriptionListLambda/package.json +++ b/packages/prescriptionListLambda/package.json @@ -13,24 +13,24 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", "@cpt-ui-common/pdsClient": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/http-header-normalizer": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/http-header-normalizer": "^7.1.1", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", - "axios": "^1.13.2" + "axios": "^1.13.5" }, "devDependencies": { "@cpt-ui-common/common-types": "^1.0.0", "@types/aws-lambda": "^8.10.159", "@types/fhir": "^0.0.41", "fhir": "^4.12.0", - "nock": "^14.0.10" + "nock": "^14.0.11" } } diff --git a/packages/selectedRoleLambda/package.json b/packages/selectedRoleLambda/package.json index b430f77908..2be248dcaa 100644 --- a/packages/selectedRoleLambda/package.json +++ b/packages/selectedRoleLambda/package.json @@ -13,15 +13,15 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/http-header-normalizer": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/http-header-normalizer": "^7.1.1", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7" }, "devDependencies": { diff --git a/packages/sessionManagementLambda/package.json b/packages/sessionManagementLambda/package.json index 1ddbed4526..1a97d7a2ae 100644 --- a/packages/sessionManagementLambda/package.json +++ b/packages/sessionManagementLambda/package.json @@ -13,14 +13,14 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.30.0", - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-lambda-powertools/parameters": "^2.30.1", - "@middy/core": "^7.0.2", - "@middy/input-output-logger": "^7.0.2" + "@aws-lambda-powertools/commons": "^2.31.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/parameters": "^2.31.0", + "@middy/core": "^7.1.0", + "@middy/input-output-logger": "^7.1.1" }, "devDependencies": { "axios-mock-adapter": "^2.1.0", - "esbuild": "^0.27.2" + "esbuild": "^0.27.3" } } diff --git a/packages/testingSupport/clearActiveSessions/package.json b/packages/testingSupport/clearActiveSessions/package.json index f0127311c0..b7557f63b1 100644 --- a/packages/testingSupport/clearActiveSessions/package.json +++ b/packages/testingSupport/clearActiveSessions/package.json @@ -13,17 +13,17 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/http-header-normalizer": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/http-header-normalizer": "^7.1.1", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", - "axios": "^1.13.2", + "axios": "^1.13.5", "jwks-rsa": "^3.2.2" }, "devDependencies": { diff --git a/packages/trackerUserInfoLambda/package.json b/packages/trackerUserInfoLambda/package.json index 6a1c90feef..1a4be684f3 100644 --- a/packages/trackerUserInfoLambda/package.json +++ b/packages/trackerUserInfoLambda/package.json @@ -13,17 +13,17 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.30.1", - "@aws-sdk/client-dynamodb": "^3.980.0", - "@aws-sdk/lib-dynamodb": "^3.980.0", + "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/lib-dynamodb": "^3.994.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.0.2", - "@middy/http-header-normalizer": "^7.0.2", - "@middy/input-output-logger": "^7.0.2", + "@middy/core": "^7.1.0", + "@middy/http-header-normalizer": "^7.1.1", + "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", - "axios": "^1.13.2", + "axios": "^1.13.5", "jwks-rsa": "^3.2.2" }, "devDependencies": { diff --git a/poetry.lock b/poetry.lock index f7c6242489..0b81e44774 100644 --- a/poetry.lock +++ b/poetry.lock @@ -252,14 +252,14 @@ files = [ [[package]] name = "pip-licenses" -version = "5.5.0" +version = "5.5.1" description = "Dump the software license list of Python packages installed with pip." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "pip_licenses-5.5.0-py3-none-any.whl", hash = "sha256:ae1869436d13ee487088d29e71fc5821950062ad25ec28b6a1a443e0add6d8e8"}, - {file = "pip_licenses-5.5.0.tar.gz", hash = "sha256:2473e7afd02a0c21460758f70fd2bb3b3c080c5150713dd33baa9493dc1563a5"}, + {file = "pip_licenses-5.5.1-py3-none-any.whl", hash = "sha256:ed5e229a93760e529cfa7edaec6630b5a2cd3874c1bddb8019e5f18a723fdead"}, + {file = "pip_licenses-5.5.1.tar.gz", hash = "sha256:7df370e6e5024a3f7449abf8e4321ef868ba9a795698ad24ab6851f3e7fc65a7"}, ] [package.dependencies] @@ -534,4 +534,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = "^3.14" -content-hash = "5b68dce34502c625b8be07c7565fe7f351a07f04a82ca87975a4dde407cd8eeb" +content-hash = "622d4bab08b2f3e8ef5e748bbfe0766fcb363e5083e0fa989bac804810e51126" diff --git a/pyproject.toml b/pyproject.toml index dd081060a0..af49ede0e4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,7 @@ requests = "^2.32.3" [tool.poetry.group.dev.dependencies] pre-commit = "^4.5.1" -pip-licenses = "^5.0.0" +pip-licenses = "^5.5.1" [build-system] requires = ["poetry>=0.12"] diff --git a/scripts/run_sync.sh b/scripts/run_sync.sh index 4689157d0c..ab616d180e 100755 --- a/scripts/run_sync.sh +++ b/scripts/run_sync.sh @@ -109,7 +109,7 @@ REACT_APP_RUM_ALLOW_COOKIES_ARN=$VITE_RUM_ALLOW_COOKIES REACT_APP_RUM_ENABLE_XRAY=$VITE_RUM_ENABLE_XRAY REACT_APP_RUM_SESSION_SAMPLE_RATE=$VITE_RUM_SESSION_SAMPLE_RATE REACT_APP_RUM_TELEMETRIES=$VITE_RUM_TELEMETRIES - +RUM_ERROR_TIMER_INTERVAL=10000 # vars needed for cdk VERSION_NUMBER="PR-${PULL_REQUEST_ID}" @@ -328,6 +328,7 @@ export ROLE_ID export USE_ZONE_APEX export IS_PULL_REQUEST export FORWARD_CSOC_LOGS +export RUM_ERROR_TIMER_INTERVAL # variables needed for StatefulResourcesApp CDK_APP_NAME=StatefulResourcesApp