From 795da5008f013acdaf6484ede57ee80ce7a055f9 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Wed, 18 Dec 2024 13:49:45 +0200 Subject: [PATCH 01/28] =?UTF-8?q?Aloitettu=20lampi-siirt=C3=A4j=C3=A4-kont?= =?UTF-8?q?in=20tekeminen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cdk/files/bastion/ensure-psql-roles-up-to-date.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cdk/files/bastion/ensure-psql-roles-up-to-date.sh b/cdk/files/bastion/ensure-psql-roles-up-to-date.sh index 3e8b871..6a03889 100755 --- a/cdk/files/bastion/ensure-psql-roles-up-to-date.sh +++ b/cdk/files/bastion/ensure-psql-roles-up-to-date.sh @@ -59,7 +59,7 @@ echo "" echo "Role 'oph_group' is not needed anymore, drop it." PGPASSWORD=$master_pw psql -h $host --user oph --dbname $db --command "drop role oph_group;" echo "" -echo "Creating user insert_raw_user nad role insert_raw_role (for IAM authentication" +echo "Creating user insert_raw_user nad role insert_raw_role (for IAM authentication)" PGPASSWORD=$master_pw psql -h $host --user oph --dbname $db --command "create schema raw;" PGPASSWORD=$master_pw psql -h $host --user oph --dbname $db --command "create role insert_raw_role;" PGPASSWORD=$master_pw psql -h $host --user oph --dbname $db --command "grant usage on schema raw to insert_raw_role;" @@ -69,5 +69,7 @@ PGPASSWORD=$master_pw psql -h $host --user oph --dbname $db --command "grant ins PGPASSWORD=$master_pw psql -h $host --user oph --dbname $db --command "create user insert_raw_user;" PGPASSWORD=$master_pw psql -h $host --user oph --dbname $db --command "grant rds_iam to insert_raw_user;" PGPASSWORD=$master_pw psql -h $host --user oph --dbname $db --command "grant insert_raw_role to insert_raw_user;" +echo "Creating AWS S3 extension" +PGPASSWORD=$master_pw psql -h $host --user oph --dbname $db --command "create extension aws_s3 cascade;" echo "" echo "DONE!" From 50a04f4614091c4d64895a2e25dffb4c7d046450 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Wed, 18 Dec 2024 13:50:03 +0200 Subject: [PATCH 02/28] =?UTF-8?q?Aloitettu=20lampi-siirt=C3=A4j=C3=A4-kont?= =?UTF-8?q?in=20tekeminen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-lampi-siirtaja.yml | 40 ++++ lampi-siirtaja-container/Dockerfile | 13 ++ lampi-siirtaja-container/README.md | 11 ++ lampi-siirtaja-container/build.sh | 4 + lampi-siirtaja-container/install.sh | 25 +++ .../lampi-siirtaja/dist/run.js.map | 1 + .../lampi-siirtaja/package-lock.json | 181 ++++++++++++++++++ .../lampi-siirtaja/package.json | 32 ++++ .../lampi-siirtaja/src/run.ts | 37 ++++ .../lampi-siirtaja/tsconfig.json | 11 ++ lampi-siirtaja-container/run.sh | 14 ++ 11 files changed, 369 insertions(+) create mode 100644 .github/workflows/build-lampi-siirtaja.yml create mode 100644 lampi-siirtaja-container/Dockerfile create mode 100644 lampi-siirtaja-container/README.md create mode 100755 lampi-siirtaja-container/build.sh create mode 100644 lampi-siirtaja-container/install.sh create mode 100644 lampi-siirtaja-container/lampi-siirtaja/dist/run.js.map create mode 100644 lampi-siirtaja-container/lampi-siirtaja/package-lock.json create mode 100644 lampi-siirtaja-container/lampi-siirtaja/package.json create mode 100644 lampi-siirtaja-container/lampi-siirtaja/src/run.ts create mode 100644 lampi-siirtaja-container/lampi-siirtaja/tsconfig.json create mode 100755 lampi-siirtaja-container/run.sh diff --git a/.github/workflows/build-lampi-siirtaja.yml b/.github/workflows/build-lampi-siirtaja.yml new file mode 100644 index 0000000..7e0aafe --- /dev/null +++ b/.github/workflows/build-lampi-siirtaja.yml @@ -0,0 +1,40 @@ +name: Build Lampi-siirtäjä Container + +on: + workflow_dispatch: + push: + paths: + - '.github/workflows/build-lampi-siirtaja.yml' + - 'lampi-siirtaja-container/**' + +permissions: + id-token: write + contents: read + +jobs: + build-and-deploy-container: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1 + with: + role-to-assume: ${{ secrets.AWS_OVARA_UTILITY_ROLE_ARN }} + role-session-name: ovara-lampi-siirtaja-ecr-push + aws-region: eu-west-1 + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v2 + + - name: Build, tag, and push docker image to Amazon ECR + env: + REGISTRY: ${{ steps.login-ecr.outputs.registry }} + REPOSITORY: ovara-dbt-runner + IMAGE_TAG: ga-${{ github.run_number }} + run: | + cd lampi-siirtaja-container + docker build -t $REGISTRY/$REPOSITORY:$IMAGE_TAG . + docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG diff --git a/lampi-siirtaja-container/Dockerfile b/lampi-siirtaja-container/Dockerfile new file mode 100644 index 0000000..e94c7c4 --- /dev/null +++ b/lampi-siirtaja-container/Dockerfile @@ -0,0 +1,13 @@ +FROM node:20-alpine3.20 +RUN apk upgrade --no-cache +RUN apk --no-cache add bash + +WORKDIR /root/ +COPY ./run.sh ./run.sh +COPY ./install.sh ./install.sh +ADD ./lampi-siirtaja ./lampi-siirtaja +RUN \ + bash install.sh && \ + rm install.sh + +ENTRYPOINT ["bash", "/root/run.sh", ""] diff --git a/lampi-siirtaja-container/README.md b/lampi-siirtaja-container/README.md new file mode 100644 index 0000000..349811c --- /dev/null +++ b/lampi-siirtaja-container/README.md @@ -0,0 +1,11 @@ +# DBT-ajojen Docker-kontti + +## Kontin build +``` +./build.sh +``` + +## Kontin käynnistäminen +``` +docker run --rm --name lampi-siirtaja ovara-lampi-siirtaja +``` diff --git a/lampi-siirtaja-container/build.sh b/lampi-siirtaja-container/build.sh new file mode 100755 index 0000000..cb26dc3 --- /dev/null +++ b/lampi-siirtaja-container/build.sh @@ -0,0 +1,4 @@ +#!/bin/bash +cd "${0%/*}" +docker build --progress=plain -t ovara-lampi-siirtaja . +cd - diff --git a/lampi-siirtaja-container/install.sh b/lampi-siirtaja-container/install.sh new file mode 100644 index 0000000..ceca2d8 --- /dev/null +++ b/lampi-siirtaja-container/install.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +set -eu + +case "$(uname -m)" in + aarch64) ARCHITECTURE="arm64" ;; + x86_64) ARCHITECTURE="amd64" ;; + *) ARCHITECTURE=$(uname -m) ;; +esac +echo $ARCHITECTURE + +echo "Installing needed software" +apk --no-cache add \ + python3 \ + py3-pip + +echo "Listing contents of /root folder" +ls -Al /root + +echo "Listing contents of /root/lampi-siirtaja folder" +ls -Al /root/lampi-siirtaja + +echo "Installing dependencies with npm" +cd /root/lampi-siirtaja +npm ci diff --git a/lampi-siirtaja-container/lampi-siirtaja/dist/run.js.map b/lampi-siirtaja-container/lampi-siirtaja/dist/run.js.map new file mode 100644 index 0000000..7b3b30c --- /dev/null +++ b/lampi-siirtaja-container/lampi-siirtaja/dist/run.js.map @@ -0,0 +1 @@ +{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,0DAAiC;AAEjC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEvC,MAAM,KAAK,GAAG,gBAAgB,UAAU,IAAI,UAAU,IAAI,MAAM,aAAa,CAAC;AAE9E,MAAM,uBAAuB,GAAG,GAAG,EAAE;IACnC,IAAG,CAAC,MAAM;QAAE,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACtD,IAAG,CAAC,UAAU;QAAE,MAAM,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAChE,IAAG,CAAC,UAAU;QAAE,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC5D,IAAG,CAAC,cAAc;QAAE,MAAM,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACpE,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,CAAC,UAAkB,EAAE,EAAE;IAEvC,MAAM,GAAG,GAAG;;;4BAGc,UAAU;GACnC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAErC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACzC,CAAC,CAAA;AAED,MAAM,IAAI,GAAG,GAAS,EAAE;IACtB,uBAAuB,EAAE,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;AAC1C,CAAC,CAAA,CAAA;AAED,IAAI,EAAE,CAAC"} \ No newline at end of file diff --git a/lampi-siirtaja-container/lampi-siirtaja/package-lock.json b/lampi-siirtaja-container/lampi-siirtaja/package-lock.json new file mode 100644 index 0000000..8dae6c3 --- /dev/null +++ b/lampi-siirtaja-container/lampi-siirtaja/package-lock.json @@ -0,0 +1,181 @@ +{ + "name": "lampi-siirtaja", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "lampi-siirtaja", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "bindings": "^1.5.0", + "file-uri-to-path": "^1.0.0", + "libpq": "^1.8.13", + "nan": "^2.19.0", + "pg-int8": "^1.0.1", + "pg-native": "^3.2.0", + "pg-types": "^1.13.0", + "postgres-array": "^1.0.3", + "postgres-bytea": "^1.0.0", + "postgres-date": "^1.0.7", + "postgres-interval": "^1.2.0", + "string-format": "^2.0.0", + "xtend": "^4.0.2" + }, + "devDependencies": { + "@types/node": "^22.10.2", + "typescript": "^5.7.2" + } + }, + "node_modules/@types/node": { + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/libpq": { + "version": "1.8.13", + "resolved": "https://registry.npmjs.org/libpq/-/libpq-1.8.13.tgz", + "integrity": "sha512-t1wpnGVgwRIFSKoe4RFUllAFj953kNMcdXhGvFJwI0r6lJQqgSwTeiIciaCinjOmHk0HnFeWQSMC6Uw2591G4A==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "1.5.0", + "nan": "2.19.0" + } + }, + "node_modules/nan": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/pg-native/-/pg-native-3.2.0.tgz", + "integrity": "sha512-9q9I6RmT285DiRc0xkYb8e+bwOIIbnfVLddnzzXW35K1sZc74dR+symo2oeuzSW/sDQ8n24gWAvlGWK/GDJ3+Q==", + "license": "MIT", + "dependencies": { + "libpq": "1.8.13", + "pg-types": "^1.12.1" + } + }, + "node_modules/pg-types": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.13.0.tgz", + "integrity": "sha512-lfKli0Gkl/+za/+b6lzENajczwZHc7D5kiUCZfgm914jipD2kIOIvEkAhZ8GrW3/TUoP9w8FHjwpPObBye5KQQ==", + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~1.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.0", + "postgres-interval": "^1.1.0" + } + }, + "node_modules/postgres-array": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.3.tgz", + "integrity": "sha512-5wClXrAP0+78mcsNX3/ithQ5exKvCyK5lr5NEEEeGwwM6NJdQgzIJBVxLvRW+huFpX92F2QnZ5CcokH0VhK2qQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "license": "WTFPL OR MIT" + }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + } + } +} diff --git a/lampi-siirtaja-container/lampi-siirtaja/package.json b/lampi-siirtaja-container/lampi-siirtaja/package.json new file mode 100644 index 0000000..8f4b427 --- /dev/null +++ b/lampi-siirtaja-container/lampi-siirtaja/package.json @@ -0,0 +1,32 @@ +{ + "name": "lampi-siirtaja", + "version": "1.0.0", + "main": "dist/run.js", + "dependencies": { + "bindings": "^1.5.0", + "file-uri-to-path": "^1.0.0", + "libpq": "^1.8.13", + "nan": "^2.19.0", + "pg-int8": "^1.0.1", + "pg-native": "^3.2.0", + "pg-types": "^1.13.0", + "postgres-array": "^1.0.3", + "postgres-bytea": "^1.0.0", + "postgres-date": "^1.0.7", + "postgres-interval": "^1.2.0", + "string-format": "^2.0.0", + "xtend": "^4.0.2" + }, + "scripts": { + "start": "tsc && node dist/run.js", + "lint": "eslint . --ext .ts", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "description": "", + "devDependencies": { + "@types/node": "^22.10.2", + "typescript": "^5.7.2" + } +} diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts new file mode 100644 index 0000000..55aa2ec --- /dev/null +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -0,0 +1,37 @@ +import PgClient from 'pg-native'; + +const dbHost = process.argv[2]; +const dbUsername = process.argv[3]; +const dbPassword = process.argv[4]; +const lampiS3Baucket = process.argv[5]; + +const dbUri = `postgresql://${dbUsername}:${dbPassword}@${dbHost}:5432/ovara`; + +const validateCommandlineArgs = () => { + if(!dbHost) throw Error("Tietokannan osoite puuttuu"); + if(!dbUsername) throw Error("Tietokannan käyttäjänimi puuttuu"); + if(!dbPassword) throw Error("Tietokannan salasana puuttuu"); + if(!lampiS3Baucket) throw Error("Lammen S3-ampärin nimi puuttuu"); +} + +const getTables = (schemaName: String) => { + + const sql = ` + select table_name + from information_schema.tables + where table_schema = '${schemaName}'; + `; + + const pgClient = new PgClient(); + pgClient.connectSync(dbUri); + const rows = pgClient.querySync(sql); + + return rows.map(row => row.table_name); +} + +const main = async () => { + validateCommandlineArgs(); + console.log(`Tietokanta-URI: ${dbUri}`.replace(dbPassword, '*****')); +} + +main(); diff --git a/lampi-siirtaja-container/lampi-siirtaja/tsconfig.json b/lampi-siirtaja-container/lampi-siirtaja/tsconfig.json new file mode 100644 index 0000000..d58a717 --- /dev/null +++ b/lampi-siirtaja-container/lampi-siirtaja/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "module": "commonjs", + "esModuleInterop": true, + "target": "es6", + "moduleResolution": "node", + "sourceMap": true, + "outDir": "dist" + }, + "lib": ["es2015"] +} diff --git a/lampi-siirtaja-container/run.sh b/lampi-siirtaja-container/run.sh new file mode 100755 index 0000000..750672f --- /dev/null +++ b/lampi-siirtaja-container/run.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +set -e + +echo "Running Lampi-siirtäjä..." + +start=$(date +%s) + +cd /root/lampi-siirtaja +npm start + +echo "Ajon kesto `expr $(date +%s) - ${start}` s" + +exit 0 From 79d66372fd76de270993470eab71436888d701a6 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Wed, 18 Dec 2024 16:55:17 +0200 Subject: [PATCH 03/28] =?UTF-8?q?Lis=C3=A4tty=20Lampi-siirt=C3=A4j=C3=A4?= =?UTF-8?q?=20ECS:=C3=A4=C3=A4n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cdk/lib/ecs-stack.ts | 300 +++++++++++++++++++++++++--- lampi-siirtaja-container/install.sh | 5 +- utility/cdk/lib/ecr-stack.ts | 7 + 3 files changed, 279 insertions(+), 33 deletions(-) diff --git a/cdk/lib/ecs-stack.ts b/cdk/lib/ecs-stack.ts index c686448..5868390 100644 --- a/cdk/lib/ecs-stack.ts +++ b/cdk/lib/ecs-stack.ts @@ -50,6 +50,17 @@ export class EcsStack extends cdk.Stack { 'ECS-konteille paasy tietokantaan' ); + const ecsClusterName = `${config.environment}-ecs-cluster`; + const ecsCluster = new ecs.Cluster(this, ecsClusterName, { + clusterName: ecsClusterName, + containerInsights: true, + vpc: props.vpc, + }); + + const ovaraCustomMetricsNamespace = `${config.environment}-OvaraCustomMetrics`; + + /* DBT Runner starts */ + const dbtFargateTaskName = `${config.environment}-dbt-task`; const dbtTaskLogGroup = new logs.LogGroup( @@ -60,18 +71,11 @@ export class EcsStack extends cdk.Stack { } ); - const logDriver = new ecs.AwsLogDriver({ + const dbtRunnerLogDriver = new ecs.AwsLogDriver({ logGroup: dbtTaskLogGroup, streamPrefix: 'dbt-runner-app', }); - const ecsClusterName = `${config.environment}-ecs-cluster`; - const ecsCluster = new ecs.Cluster(this, ecsClusterName, { - clusterName: ecsClusterName, - containerInsights: true, - vpc: props.vpc, - }); - const dbtRunnerRepositoryName = 'ovara-dbt-runner'; const dbtRunnerRepository = ecr.Repository.fromRepositoryAttributes( this, @@ -85,7 +89,7 @@ export class EcsStack extends cdk.Stack { } ); - const imageVersion = + const dbtRunnerImageVersion = props.ecsImageTag !== undefined && props.ecsImageTag !== '' ? props.ecsImageTag : ssm.StringParameter.valueForStringParameter( @@ -95,13 +99,12 @@ export class EcsStack extends cdk.Stack { const dbtRunnerImage = ecs.ContainerImage.fromEcrRepository( dbtRunnerRepository, - imageVersion + dbtRunnerImageVersion ); - - const schedule = appscaling.Schedule.cron(config.dbtCron); + + const dbtRunnerSchedule = appscaling.Schedule.cron(config.dbtCron); const dbtProcessingEnabled = config.dbtProcessingEnabled?.toLowerCase() === 'true'; - - const scheduledFargateTask = new ecsPatterns.ScheduledFargateTask( + const dbtRunnerScheduledFargateTask = new ecsPatterns.ScheduledFargateTask( this, dbtFargateTaskName, { @@ -109,7 +112,7 @@ export class EcsStack extends cdk.Stack { cluster: ecsCluster, scheduledFargateTaskImageOptions: { image: dbtRunnerImage, - logDriver: logDriver, + logDriver: dbtRunnerLogDriver, cpu: 1024, memoryLimitMiB: 2048, environment: { @@ -130,13 +133,13 @@ export class EcsStack extends cdk.Stack { }, }, //schedule: appscaling.Schedule.expression('rate(5 minutes)'), - schedule: schedule, + schedule: dbtRunnerSchedule, securityGroups: [ecsSecurityGroup], enabled: dbtProcessingEnabled, } ); - scheduledFargateTask.taskDefinition.addToExecutionRolePolicy( + dbtRunnerScheduledFargateTask.taskDefinition.addToExecutionRolePolicy( new iam.PolicyStatement({ actions: [ 'ecr:GetAuthorizationToken', @@ -149,21 +152,22 @@ export class EcsStack extends cdk.Stack { }) ); - scheduledFargateTask.taskDefinition + dbtRunnerScheduledFargateTask.taskDefinition .obtainExecutionRole() .grantAssumeRole(props.githubActionsDeploymentRole); - scheduledFargateTask.taskDefinition + dbtRunnerScheduledFargateTask.taskDefinition .obtainExecutionRole() .grantPassRole(props.githubActionsDeploymentRole); - const eventsRule = scheduledFargateTask.eventRule.node.defaultChild as CfnRule; + const dbtRunnerEventsRule = dbtRunnerScheduledFargateTask.eventRule.node + .defaultChild as CfnRule; - const eventsRole = new iam.Role(this, 'EventsRole', { + const dbtRunnerEventsRole = new iam.Role(this, 'EventsRole', { assumedBy: new iam.ServicePrincipal('events.amazonaws.com'), }); - eventsRole.addToPolicy( + dbtRunnerEventsRole.addToPolicy( new iam.PolicyStatement({ actions: ['ecs:RunTask'], conditions: { @@ -172,40 +176,43 @@ export class EcsStack extends cdk.Stack { }, }, resources: [ - scheduledFargateTask.taskDefinition.taskDefinitionArn.substring( + dbtRunnerScheduledFargateTask.taskDefinition.taskDefinitionArn.substring( 0, - scheduledFargateTask.taskDefinition.taskDefinitionArn.lastIndexOf(':') + 1 + dbtRunnerScheduledFargateTask.taskDefinition.taskDefinitionArn.lastIndexOf( + ':' + ) + 1 ) + '*', ], }) ); - eventsRole.addToPolicy( + dbtRunnerEventsRole.addToPolicy( new iam.PolicyStatement({ actions: ['ecs:TagResource'], resources: [`arn:aws:ecs:${this.region}:*:task/${ecsClusterName}/*`], }) ); - eventsRole.addToPolicy( + dbtRunnerEventsRole.addToPolicy( new iam.PolicyStatement({ actions: ['iam:PassRole'], resources: [ - scheduledFargateTask.taskDefinition.taskRole.roleArn, - scheduledFargateTask.taskDefinition.executionRole!.roleArn, + dbtRunnerScheduledFargateTask.taskDefinition.taskRole.roleArn, + dbtRunnerScheduledFargateTask.taskDefinition.executionRole!.roleArn, ], }) ); - eventsRule.targets = [ + dbtRunnerEventsRule.targets = [ { arn: ecsCluster.clusterArn, id: 'Target0', - roleArn: eventsRole.roleArn, + roleArn: dbtRunnerEventsRole.roleArn, ecsParameters: { launchType: 'FARGATE', taskCount: 1, - taskDefinitionArn: scheduledFargateTask.taskDefinition.taskDefinitionArn, + taskDefinitionArn: + dbtRunnerScheduledFargateTask.taskDefinition.taskDefinitionArn, networkConfiguration: { awsVpcConfiguration: { securityGroups: [ecsSecurityGroup.securityGroupId], @@ -226,7 +233,6 @@ export class EcsStack extends cdk.Stack { // Metriikat ja hälytykset - const ovaraCustomMetricsNamespace = `${config.environment}-OvaraCustomMetrics`; const dbtRunnerFailedErrorMetricName = 'DbtRunnerFailedError'; const dbtRunnerKestoMetricName = 'DbtRunnerKesto'; @@ -279,6 +285,236 @@ export class EcsStack extends cdk.Stack { metricValue: '$kesto', }); + /* DBT Runner ends */ + + /* Lampi-siirtäjä starts */ + + const lampiSiirtajaFargateTaskName = `${config.environment}-ovara-lampi-siirtaja`; + + const lampiSiirtajaLogGroup = new logs.LogGroup( + this, + `${config.environment}-${lampiSiirtajaFargateTaskName}LogGroup`, + { + logGroupName: `/aws/ecs/task/${lampiSiirtajaFargateTaskName}`, + } + ); + + const lampiSiirtajaLogDriver = new ecs.AwsLogDriver({ + logGroup: lampiSiirtajaLogGroup, + streamPrefix: 'ovara-lampi-siirtaja-app', + }); + + const lampiSiirtajaRepositoryName = 'ovara-lampi-siirtaja'; + const lampiSiirtajaRepository = ecr.Repository.fromRepositoryAttributes( + this, + lampiSiirtajaRepositoryName, + { + repositoryArn: ssm.StringParameter.valueForStringParameter( + this, + `/${config.environment}/ovara-utility-ovara-lampi-siirtaja-repository-arn` + ), + repositoryName: lampiSiirtajaRepositoryName, + } + ); + + const lampiSiirtajaImageVersion = ssm.StringParameter.valueForStringParameter( + this, + `/${config.environment}/ecs/lampi-siirtaja/version` + ); + + const lampiSiirtajaImage = ecs.ContainerImage.fromEcrRepository( + lampiSiirtajaRepository, + lampiSiirtajaImageVersion + ); + + const lampiSiirtajaSchedule = appscaling.Schedule.cron(config.dbtCron); + const lampiSiirtajaScheduledFargateTask = new ecsPatterns.ScheduledFargateTask( + this, + lampiSiirtajaFargateTaskName, + { + ruleName: `${config.environment}-lampiSiirtajaScheduledFargateTaskRule`, + cluster: ecsCluster, + scheduledFargateTaskImageOptions: { + image: lampiSiirtajaImage, + logDriver: lampiSiirtajaLogDriver, + cpu: 1024, + memoryLimitMiB: 2048, + environment: { + POSTGRES_HOST_PROD: `raportointi.db.${config.publicHostedZone}`, + DBT_PORT_PROD: '5432', + DBT_USERNAME_PROD: 'app', + }, + secrets: { + DBT_PASSWORD_PROD: ecs.Secret.fromSsmParameter( + ssm.StringParameter.fromSecureStringParameterAttributes( + this, + `${config.environment}-auroraAppPassword`, + { + parameterName: `/${config.environment}/aurora/raportointi/app-user-password`, + } + ) + ), + }, + }, + //schedule: appscaling.Schedule.expression('rate(5 minutes)'), + schedule: lampiSiirtajaSchedule, + securityGroups: [ecsSecurityGroup], + enabled: true, + } + ); + + lampiSiirtajaScheduledFargateTask.taskDefinition.addToExecutionRolePolicy( + new iam.PolicyStatement({ + actions: [ + 'ecr:GetAuthorizationToken', + 'ecr:BatchCheckLayerAvailability', + 'ecr:GetDownloadUrlForLayer', + 'ecr:BatchGetImage', + ], + effect: Effect.ALLOW, + resources: ['*'], + }) + ); + + lampiSiirtajaScheduledFargateTask.taskDefinition + .obtainExecutionRole() + .grantAssumeRole(props.githubActionsDeploymentRole); + + lampiSiirtajaScheduledFargateTask.taskDefinition + .obtainExecutionRole() + .grantPassRole(props.githubActionsDeploymentRole); + + const lampiSiirtajaEventsRule = lampiSiirtajaScheduledFargateTask.eventRule.node + .defaultChild as CfnRule; + + const lampiSiirtajaEventsRole = new iam.Role(this, 'EventsRole', { + assumedBy: new iam.ServicePrincipal('events.amazonaws.com'), + }); + + lampiSiirtajaEventsRole.addToPolicy( + new iam.PolicyStatement({ + actions: ['ecs:RunTask'], + conditions: { + ArnEquals: { + 'ecs:cluster': ecsCluster.clusterArn, + }, + }, + resources: [ + lampiSiirtajaScheduledFargateTask.taskDefinition.taskDefinitionArn.substring( + 0, + lampiSiirtajaScheduledFargateTask.taskDefinition.taskDefinitionArn.lastIndexOf( + ':' + ) + 1 + ) + '*', + ], + }) + ); + + lampiSiirtajaEventsRole.addToPolicy( + new iam.PolicyStatement({ + actions: ['ecs:TagResource'], + resources: [`arn:aws:ecs:${this.region}:*:task/${ecsClusterName}/*`], + }) + ); + + lampiSiirtajaEventsRole.addToPolicy( + new iam.PolicyStatement({ + actions: ['iam:PassRole'], + resources: [ + lampiSiirtajaScheduledFargateTask.taskDefinition.taskRole.roleArn, + lampiSiirtajaScheduledFargateTask.taskDefinition.executionRole!.roleArn, + ], + }) + ); + + lampiSiirtajaEventsRule.targets = [ + { + arn: ecsCluster.clusterArn, + id: 'Target0', + roleArn: lampiSiirtajaEventsRole.roleArn, + ecsParameters: { + launchType: 'FARGATE', + taskCount: 1, + taskDefinitionArn: + lampiSiirtajaScheduledFargateTask.taskDefinition.taskDefinitionArn, + networkConfiguration: { + awsVpcConfiguration: { + securityGroups: [ecsSecurityGroup.securityGroupId], + subnets: [ + props.vpc.selectSubnets({ + subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS, + }).subnets[0].subnetId, + props.vpc.selectSubnets({ + subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS, + }).subnets[1].subnetId, + ], + assignPublicIp: 'DISABLED', + }, + }, + }, + }, + ]; + + // Metriikat ja hälytykset + + const lampiSiirtajaFailedErrorMetricName = 'LampiSiirtajaFailedError'; + const lampiSiirtajaKestoMetricName = 'LampiSiirtajaKesto'; + + const lampiSiirtajaFailedErrorMetric = new cloudwatch.Metric({ + namespace: ovaraCustomMetricsNamespace, + metricName: lampiSiirtajaFailedErrorMetricName, + period: cdk.Duration.minutes(5), + unit: cloudwatch.Unit.NONE, + statistic: cloudwatch.Stats.SUM, + }); + + new logs.MetricFilter( + this, + `${config.environment}-lampiSiirtajaFailedErrorMetricFilter`, + { + filterPattern: logs.FilterPattern.literal('?"Error" ?"ERROR" ?"error"'), + logGroup: lampiSiirtajaLogGroup, + metricName: lampiSiirtajaFailedErrorMetricName, + metricNamespace: ovaraCustomMetricsNamespace, + } + ); + + const lampiSiirtajaFailedErrorAlarm = new cloudwatch.Alarm( + this, + 'LampiSiirtajaAlarmId', + { + metric: lampiSiirtajaFailedErrorMetric, + evaluationPeriods: 3, + datapointsToAlarm: 1, + alarmName: `${config.environment}-ovara-LampiSiirtajaFailedError`, + alarmDescription: 'Ovaran tietojen siirtämisessä Lampeen tapahtui virhe', + comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD, + threshold: 0, + } + ); + addActionsToAlarm(lampiSiirtajaFailedErrorAlarm); + + new cloudwatch.Metric({ + namespace: ovaraCustomMetricsNamespace, + metricName: lampiSiirtajaKestoMetricName, + period: cdk.Duration.minutes(5), + unit: cloudwatch.Unit.SECONDS, + statistic: cloudwatch.Stats.SUM, + }); + + new logs.MetricFilter(this, `${config.environment}-lampiSiirtajaKestoMetricFilter`, { + filterPattern: logs.FilterPattern.spaceDelimited('text1', 'text2', 'kesto', 'text3') + .whereString('text1', '=', 'Ajon') + .whereString('text2', '=', 'kesto') + .whereString('text3', '=', 's'), + logGroup: lampiSiirtajaLogGroup, + metricName: lampiSiirtajaKestoMetricName, + metricNamespace: ovaraCustomMetricsNamespace, + metricValue: '$kesto', + }); + + /* Lampi-siirtäjä ends */ + cdkNag.NagSuppressions.addStackSuppressions(this, [ { id: 'AwsSolutions-IAM5', reason: "Can't fix this." }, { id: 'AwsSolutions-ECS2', reason: 'Static environment variables' }, diff --git a/lampi-siirtaja-container/install.sh b/lampi-siirtaja-container/install.sh index ceca2d8..e79835a 100644 --- a/lampi-siirtaja-container/install.sh +++ b/lampi-siirtaja-container/install.sh @@ -12,7 +12,10 @@ echo $ARCHITECTURE echo "Installing needed software" apk --no-cache add \ python3 \ - py3-pip + py3-pip \ + libpq-dev \ + g++ \ + make echo "Listing contents of /root folder" ls -Al /root diff --git a/utility/cdk/lib/ecr-stack.ts b/utility/cdk/lib/ecr-stack.ts index ad2767c..ceacedf 100644 --- a/utility/cdk/lib/ecr-stack.ts +++ b/utility/cdk/lib/ecr-stack.ts @@ -16,6 +16,12 @@ export class EcrStack extends cdk.Stack { imageScanOnPush: true, }); + const lampiSiirtajaRepositoryName = 'ovara-lampi-siirtaja'; + const lampiSiirtajaRepository = new ecr.Repository(this, lampiSiirtajaRepositoryName, { + repositoryName: lampiSiirtajaRepositoryName, + imageScanOnPush: true, + }); + const githubOidcProvider = new iam.OpenIdConnectProvider(this, `OvaraUtilityGithubOidcProvider`, { url: 'https://token.actions.githubusercontent.com', thumbprints: ['6938fd4d98bab03faadb97b34396831e3780aea1'], @@ -36,6 +42,7 @@ export class EcrStack extends cdk.Stack { }); dbtRunnerRepository.grantPush(githubActionsDeploymentRole); + lampiSiirtajaRepository.grantPush(githubActionsDeploymentRole); const ovaraTestiAccountId = ssm.StringParameter.valueForStringParameter( this, From 1097366ee58ffd46f9b78574061efc418915f9ca Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Wed, 18 Dec 2024 17:19:59 +0200 Subject: [PATCH 04/28] =?UTF-8?q?Muutettu=20Lampi-siirt=C3=A4j=C3=A4n=20EC?= =?UTF-8?q?S-taskia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cdk/config/testi.json | 5 +++++ cdk/config/tuotanto.json | 5 +++++ cdk/lib/config.ts | 1 + cdk/lib/ecs-stack.ts | 29 +++++++++++++++++++++++------ 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/cdk/config/testi.json b/cdk/config/testi.json index 539f2d3..38ea575 100644 --- a/cdk/config/testi.json +++ b/cdk/config/testi.json @@ -27,5 +27,10 @@ "minute": "30", "hour": "5-15/1", "weekDay": "2-6/1" + }, + "lampiSiirtajaCron": { + "minute": "0", + "hour": "5-15/1", + "weekDay": "2-6/1" } } diff --git a/cdk/config/tuotanto.json b/cdk/config/tuotanto.json index bc299a6..7043c3a 100644 --- a/cdk/config/tuotanto.json +++ b/cdk/config/tuotanto.json @@ -27,5 +27,10 @@ "minute": "30", "hour": "5-15/2", "weekDay": "2-6/1" + }, + "lampiSiirtajaCron": { + "minute": "0", + "hour": "5-15/1", + "weekDay": "2-6/1" } } diff --git a/cdk/lib/config.ts b/cdk/lib/config.ts index a290a5d..edf0398 100644 --- a/cdk/lib/config.ts +++ b/cdk/lib/config.ts @@ -23,6 +23,7 @@ export interface Config { lampiFileHandlerActive: string; dbtProcessingEnabled: string; dbtCron: appscaling.CronOptions; + lampiSiirtajaCron: appscaling.CronOptions; profile: string; publicHostedZone: string; siirtotiedostot: { diff --git a/cdk/lib/ecs-stack.ts b/cdk/lib/ecs-stack.ts index 5868390..8ca352b 100644 --- a/cdk/lib/ecs-stack.ts +++ b/cdk/lib/ecs-stack.ts @@ -10,6 +10,7 @@ import { CfnRule } from 'aws-cdk-lib/aws-events'; import * as iam from 'aws-cdk-lib/aws-iam'; import { Effect } from 'aws-cdk-lib/aws-iam'; import * as logs from 'aws-cdk-lib/aws-logs'; +import * as s3 from 'aws-cdk-lib/aws-s3'; import * as sns from 'aws-cdk-lib/aws-sns'; import * as ssm from 'aws-cdk-lib/aws-ssm'; import * as cdkNag from 'cdk-nag'; @@ -327,7 +328,22 @@ export class EcsStack extends cdk.Stack { lampiSiirtajaImageVersion ); - const lampiSiirtajaSchedule = appscaling.Schedule.cron(config.dbtCron); + // Tilapäinen S3-ämpäri testausta varten + const lampiSiirtajaTempS3Bucket = new s3.Bucket( + this, + `${config.environment}-temp-lampi-siirtaja-bucket`, + { + bucketName: `${config.environment}-temp-lampi-siirtaja-bucket`, + objectOwnership: s3.ObjectOwnership.BUCKET_OWNER_ENFORCED, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + serverAccessLogsBucket: new s3.Bucket( + this, + `${config.environment}-temp-lampi-siirtaja-bucket-server-access-logs` + ), + } + ); + + const lampiSiirtajaSchedule = appscaling.Schedule.cron(config.lampiSiirtajaCron); const lampiSiirtajaScheduledFargateTask = new ecsPatterns.ScheduledFargateTask( this, lampiSiirtajaFargateTaskName, @@ -340,15 +356,15 @@ export class EcsStack extends cdk.Stack { cpu: 1024, memoryLimitMiB: 2048, environment: { - POSTGRES_HOST_PROD: `raportointi.db.${config.publicHostedZone}`, - DBT_PORT_PROD: '5432', - DBT_USERNAME_PROD: 'app', + POSTGRES_HOST: `raportointi.db.${config.publicHostedZone}`, + DB_USERNAME: 'app', + LAMPI_S3_BUCKET: lampiSiirtajaTempS3Bucket.bucketName, }, secrets: { DBT_PASSWORD_PROD: ecs.Secret.fromSsmParameter( ssm.StringParameter.fromSecureStringParameterAttributes( this, - `${config.environment}-auroraAppPassword`, + `${config.environment}-lampiSiirtajaauroraAppPassword`, { parameterName: `/${config.environment}/aurora/raportointi/app-user-password`, } @@ -387,7 +403,7 @@ export class EcsStack extends cdk.Stack { const lampiSiirtajaEventsRule = lampiSiirtajaScheduledFargateTask.eventRule.node .defaultChild as CfnRule; - const lampiSiirtajaEventsRole = new iam.Role(this, 'EventsRole', { + const lampiSiirtajaEventsRole = new iam.Role(this, 'LampiSiirtajaEventsRole', { assumedBy: new iam.ServicePrincipal('events.amazonaws.com'), }); @@ -518,6 +534,7 @@ export class EcsStack extends cdk.Stack { cdkNag.NagSuppressions.addStackSuppressions(this, [ { id: 'AwsSolutions-IAM5', reason: "Can't fix this." }, { id: 'AwsSolutions-ECS2', reason: 'Static environment variables' }, + { id: 'AwsSolutions-S10', reason: 'Tilapäinen S3-ämpäri' }, ]); } } From 8fd9bbf3e6c5b59c28b3c116f9141de90d6fe701 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Wed, 18 Dec 2024 17:29:48 +0200 Subject: [PATCH 05/28] =?UTF-8?q?Korjattu=20Lampi-siirt=C3=A4j=C3=A4n=20k?= =?UTF-8?q?=C3=A4ynnistyst=C3=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cdk/lib/ecs-stack.ts | 2 +- lampi-siirtaja-container/lampi-siirtaja/src/run.ts | 5 +++-- lampi-siirtaja-container/run.sh | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/cdk/lib/ecs-stack.ts b/cdk/lib/ecs-stack.ts index 8ca352b..c01239c 100644 --- a/cdk/lib/ecs-stack.ts +++ b/cdk/lib/ecs-stack.ts @@ -361,7 +361,7 @@ export class EcsStack extends cdk.Stack { LAMPI_S3_BUCKET: lampiSiirtajaTempS3Bucket.bucketName, }, secrets: { - DBT_PASSWORD_PROD: ecs.Secret.fromSsmParameter( + DB_PASSWORD: ecs.Secret.fromSsmParameter( ssm.StringParameter.fromSecureStringParameterAttributes( this, `${config.environment}-lampiSiirtajaauroraAppPassword`, diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index 55aa2ec..f1e6850 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -3,7 +3,7 @@ import PgClient from 'pg-native'; const dbHost = process.argv[2]; const dbUsername = process.argv[3]; const dbPassword = process.argv[4]; -const lampiS3Baucket = process.argv[5]; +const lampiS3Bucket = process.argv[5]; const dbUri = `postgresql://${dbUsername}:${dbPassword}@${dbHost}:5432/ovara`; @@ -11,7 +11,7 @@ const validateCommandlineArgs = () => { if(!dbHost) throw Error("Tietokannan osoite puuttuu"); if(!dbUsername) throw Error("Tietokannan käyttäjänimi puuttuu"); if(!dbPassword) throw Error("Tietokannan salasana puuttuu"); - if(!lampiS3Baucket) throw Error("Lammen S3-ampärin nimi puuttuu"); + if(!lampiS3Bucket) throw Error("Lammen S3-ampärin nimi puuttuu"); } const getTables = (schemaName: String) => { @@ -32,6 +32,7 @@ const getTables = (schemaName: String) => { const main = async () => { validateCommandlineArgs(); console.log(`Tietokanta-URI: ${dbUri}`.replace(dbPassword, '*****')); + console.log(`Lampi S3-ämpäri: ${lampiS3Bucket}`.replace(dbPassword, '*****')); } main(); diff --git a/lampi-siirtaja-container/run.sh b/lampi-siirtaja-container/run.sh index 750672f..80db76c 100755 --- a/lampi-siirtaja-container/run.sh +++ b/lampi-siirtaja-container/run.sh @@ -7,7 +7,7 @@ echo "Running Lampi-siirtäjä..." start=$(date +%s) cd /root/lampi-siirtaja -npm start +npm start "$POSTGRES_HOST" "$DB_USERNAME" "$DB_PASSWORD" "$LAMPI_S3_BUCKET" echo "Ajon kesto `expr $(date +%s) - ${start}` s" From b6590f540fda8636dfa713f226431a8eaa82f421 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Wed, 18 Dec 2024 17:39:23 +0200 Subject: [PATCH 06/28] =?UTF-8?q?Lis=C3=A4tty=20LampiSiirt=C3=A4j=C3=A4lle?= =?UTF-8?q?=20oikeuksia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cdk/lib/ecs-stack.ts | 4 ++++ lampi-siirtaja-container/lampi-siirtaja/src/run.ts | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/cdk/lib/ecs-stack.ts b/cdk/lib/ecs-stack.ts index c01239c..639bcbd 100644 --- a/cdk/lib/ecs-stack.ts +++ b/cdk/lib/ecs-stack.ts @@ -379,6 +379,10 @@ export class EcsStack extends cdk.Stack { } ); + lampiSiirtajaTempS3Bucket.grantReadWrite( + lampiSiirtajaScheduledFargateTask.taskDefinition.taskRole + ); + lampiSiirtajaScheduledFargateTask.taskDefinition.addToExecutionRolePolicy( new iam.PolicyStatement({ actions: [ diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index f1e6850..14571a4 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -32,7 +32,7 @@ const getTables = (schemaName: String) => { const main = async () => { validateCommandlineArgs(); console.log(`Tietokanta-URI: ${dbUri}`.replace(dbPassword, '*****')); - console.log(`Lampi S3-ämpäri: ${lampiS3Bucket}`.replace(dbPassword, '*****')); + console.log(`Lampi S3-ämpäri: ${lampiS3Bucket}`); } main(); From 3bad98c4d0ec84c2d14c7d63a1187ad302e6bd54 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Wed, 18 Dec 2024 17:47:45 +0200 Subject: [PATCH 07/28] Korjattu buildiin oikea repo --- .github/workflows/build-lampi-siirtaja.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-lampi-siirtaja.yml b/.github/workflows/build-lampi-siirtaja.yml index 7e0aafe..f03ce76 100644 --- a/.github/workflows/build-lampi-siirtaja.yml +++ b/.github/workflows/build-lampi-siirtaja.yml @@ -32,7 +32,7 @@ jobs: - name: Build, tag, and push docker image to Amazon ECR env: REGISTRY: ${{ steps.login-ecr.outputs.registry }} - REPOSITORY: ovara-dbt-runner + REPOSITORY: ovara-lampi-siirtaja IMAGE_TAG: ga-${{ github.run_number }} run: | cd lampi-siirtaja-container From afa1fcbeb26f11f1876bf4abba324ba72bba39b5 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Wed, 18 Dec 2024 18:10:09 +0200 Subject: [PATCH 08/28] =?UTF-8?q?Muutettu=20lukemaan=20konfiguraatio=20ymp?= =?UTF-8?q?=C3=A4rist=C3=B6parametreista?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lampi-siirtaja/src/run.ts | 16 +++++++++------- lampi-siirtaja-container/run.sh | 2 +- utility/cdk/lib/ecr-stack.ts | 14 ++++++++++++++ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index 14571a4..c62e13f 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -1,20 +1,20 @@ import PgClient from 'pg-native'; -const dbHost = process.argv[2]; -const dbUsername = process.argv[3]; -const dbPassword = process.argv[4]; -const lampiS3Bucket = process.argv[5]; +const dbHost = process.env.POSTGRES_HOST; +const dbUsername = process.env.DB_USERNAME; +const dbPassword = process.env.DB_PASSWORD; +const lampiS3Bucket = process.env.LAMPI_S3_BUCKET; const dbUri = `postgresql://${dbUsername}:${dbPassword}@${dbHost}:5432/ovara`; -const validateCommandlineArgs = () => { +const validateParameters = () => { if(!dbHost) throw Error("Tietokannan osoite puuttuu"); if(!dbUsername) throw Error("Tietokannan käyttäjänimi puuttuu"); if(!dbPassword) throw Error("Tietokannan salasana puuttuu"); if(!lampiS3Bucket) throw Error("Lammen S3-ampärin nimi puuttuu"); } -const getTables = (schemaName: String) => { +const getTableNames = (schemaName: String) => { const sql = ` select table_name @@ -30,9 +30,11 @@ const getTables = (schemaName: String) => { } const main = async () => { - validateCommandlineArgs(); + validateParameters(); console.log(`Tietokanta-URI: ${dbUri}`.replace(dbPassword, '*****')); console.log(`Lampi S3-ämpäri: ${lampiS3Bucket}`); + const tableNames = getTableNames('pub'); + console.log(`Table names: ${tableNames}`); } main(); diff --git a/lampi-siirtaja-container/run.sh b/lampi-siirtaja-container/run.sh index 80db76c..750672f 100755 --- a/lampi-siirtaja-container/run.sh +++ b/lampi-siirtaja-container/run.sh @@ -7,7 +7,7 @@ echo "Running Lampi-siirtäjä..." start=$(date +%s) cd /root/lampi-siirtaja -npm start "$POSTGRES_HOST" "$DB_USERNAME" "$DB_PASSWORD" "$LAMPI_S3_BUCKET" +npm start echo "Ajon kesto `expr $(date +%s) - ${start}` s" diff --git a/utility/cdk/lib/ecr-stack.ts b/utility/cdk/lib/ecr-stack.ts index ceacedf..08386f9 100644 --- a/utility/cdk/lib/ecr-stack.ts +++ b/utility/cdk/lib/ecr-stack.ts @@ -68,6 +68,20 @@ export class EcrStack extends cdk.Stack { ] })); + lampiSiirtajaRepository.addToResourcePolicy(new PolicyStatement({ + actions: [ + 'ecr:GetAuthorizationToken', + 'ecr:BatchCheckLayerAvailability', + 'ecr:GetDownloadUrlForLayer', + 'ecr:BatchGetImage', + ], + effect: iam.Effect.ALLOW, + principals: [ + new iam.ArnPrincipal(`arn:aws:iam::${ovaraTestiAccountId}:root`), + new iam.ArnPrincipal(`arn:aws:iam::${ovaraTuotantoAccountId}:root`), + ] + })); + cdkNag.NagSuppressions.addStackSuppressions(this, [ { id: 'AwsSolutions-IAM5', reason: 'In this case it is ok.' }, ]); From ce22392558eefd8932866a12b30a251577ddb07a Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Wed, 18 Dec 2024 19:34:51 +0200 Subject: [PATCH 09/28] =?UTF-8?q?Tiedostojen=20kopiointia=20S3-=C3=A4mp?= =?UTF-8?q?=C3=A4riin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lampi-siirtaja/src/run.ts | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index c62e13f..11c5c06 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -14,7 +14,7 @@ const validateParameters = () => { if(!lampiS3Bucket) throw Error("Lammen S3-ampärin nimi puuttuu"); } -const getTableNames = (schemaName: String) => { +const getTableNames = (schemaName: string): string[] => { const sql = ` select table_name @@ -29,12 +29,30 @@ const getTableNames = (schemaName: String) => { return rows.map(row => row.table_name); } +const copyTableToS3 = (tableName: string) => { + const sql = ` + select * + from aws_s3.query_export_to_s3( + 'select * from ${tableName}', + aws_commons.create_s3_uri('${lampiS3Bucket}', '${tableName}.csv', 'eu-west-1'), + options := 'FORMAT CSV, HEADER TRUE' + ); + `; + const pgClient = new PgClient(); + pgClient.connectSync(dbUri); + const result = pgClient.querySync(sql); + console.log(`S3 copy result for table ${tableName}: ${JSON.stringify(result, null, 4)}`); +} + const main = async () => { validateParameters(); console.log(`Tietokanta-URI: ${dbUri}`.replace(dbPassword, '*****')); console.log(`Lampi S3-ämpäri: ${lampiS3Bucket}`); - const tableNames = getTableNames('pub'); + const tableNames: string[] = getTableNames('pub'); console.log(`Table names: ${tableNames}`); + tableNames.slice(0, 2).forEach((tableName: string) => { + copyTableToS3(tableName); + }); } main(); From 3a42a278c379997326f66494380f7792ab8b4893 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 19 Dec 2024 09:49:07 +0200 Subject: [PATCH 10/28] =?UTF-8?q?Auroralle=20oikeudet=20kirjoittaa=20S3-?= =?UTF-8?q?=C3=A4mp=C3=A4riin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cdk/bin/cdk.ts | 6 +-- .../bastion/ensure-psql-roles-up-to-date.sh | 2 + cdk/lib/config.ts | 7 +++- cdk/lib/database-stack.ts | 2 + cdk/lib/ecs-stack.ts | 37 +++++++++++++++++++ .../lampi-siirtaja/src/run.ts | 6 ++- 6 files changed, 55 insertions(+), 5 deletions(-) diff --git a/cdk/bin/cdk.ts b/cdk/bin/cdk.ts index a53083a..04c839f 100644 --- a/cdk/bin/cdk.ts +++ b/cdk/bin/cdk.ts @@ -19,11 +19,10 @@ import { S3Stack } from '../lib/s3-stack'; const app = new cdk.App(); const environmentName = app.node.tryGetContext('environment') || process.env.ENVIRONMENT; const ecsImageTag = app.node.tryGetContext('ecsImageTag'); -const props = getGenericStackProps(environmentName); +const accountId = process.env.CDK_DEFAULT_ACCOUNT || ''; +const props = getGenericStackProps(environmentName, accountId); const config = props.config; -const accountId = process.env.CDK_DEFAULT_ACCOUNT; - const externalRolesStack = new ExternalRolesStack( app, `${config.environment}-ExternalRolesStack`, @@ -71,6 +70,7 @@ const databaseStack = new DatabaseStack(app, `${config.environment}-DatabaseStac }); const ecsStack = new EcsStack(app, `${config.environment}-EcsStack`, { + auroraCluster: databaseStack.auroraCluster, auroraSecurityGroup: databaseStack.auroraSecurityGroup, githubActionsDeploymentRole: externalRolesStack.githubActionsDeploymentRole, ecsImageTag: ecsImageTag, diff --git a/cdk/files/bastion/ensure-psql-roles-up-to-date.sh b/cdk/files/bastion/ensure-psql-roles-up-to-date.sh index 6a03889..fcfa3a9 100755 --- a/cdk/files/bastion/ensure-psql-roles-up-to-date.sh +++ b/cdk/files/bastion/ensure-psql-roles-up-to-date.sh @@ -71,5 +71,7 @@ PGPASSWORD=$master_pw psql -h $host --user oph --dbname $db --command "grant rds PGPASSWORD=$master_pw psql -h $host --user oph --dbname $db --command "grant insert_raw_role to insert_raw_user;" echo "Creating AWS S3 extension" PGPASSWORD=$master_pw psql -h $host --user oph --dbname $db --command "create extension aws_s3 cascade;" +PGPASSWORD=$master_pw psql -h $host --user oph --dbname $db --command "grant usage on schema aws_s3 to app;" +PGPASSWORD=$master_pw psql -h $host --user oph --dbname $db --command "grant execute on all functions in schema aws_s3 to app;" echo "" echo "DONE!" diff --git a/cdk/lib/config.ts b/cdk/lib/config.ts index edf0398..17cc9c0 100644 --- a/cdk/lib/config.ts +++ b/cdk/lib/config.ts @@ -4,6 +4,7 @@ import * as cdk from 'aws-cdk-lib'; import * as appscaling from 'aws-cdk-lib/aws-applicationautoscaling'; export interface GenericStackProps extends cdk.StackProps { + accountId: string; config: Config; } @@ -36,11 +37,15 @@ export interface Config { }; } -export const getGenericStackProps = (environment: string): GenericStackProps => { +export const getGenericStackProps = ( + environment: string, + accountId: string +): GenericStackProps => { const filename: string = `config/${environment}.json`; const fileContent: string = fs.readFileSync(filename, 'utf8'); const config: Config = JSON.parse(fileContent); return { + accountId: accountId, config: config, env: { account: process.env.CDK_DEFAULT_ACCOUNT, diff --git a/cdk/lib/database-stack.ts b/cdk/lib/database-stack.ts index 4ef84a1..8850c66 100644 --- a/cdk/lib/database-stack.ts +++ b/cdk/lib/database-stack.ts @@ -30,6 +30,7 @@ export interface DatabaseStackProps extends GenericStackProps { export class DatabaseStack extends cdk.Stack { public readonly auroraSecurityGroup: ec2.ISecurityGroup; public readonly lampiTiedostoKasiteltyTable: dynamodb.ITableV2; + public readonly auroraCluster: rds.IDatabaseCluster; constructor(scope: Construct, id: string, props: DatabaseStackProps) { super(scope, id, props); @@ -123,6 +124,7 @@ export class DatabaseStack extends cdk.Stack { : rds.DBClusterStorageType.AURORA, } ); + this.auroraCluster = auroraCluster; new cdk.CfnOutput(this, 'AuroraClusterResourceId', { exportName: `${config.environment}-opiskelijavalinnanraportointi-aurora-cluster-resourceid`, diff --git a/cdk/lib/ecs-stack.ts b/cdk/lib/ecs-stack.ts index 639bcbd..7f60305 100644 --- a/cdk/lib/ecs-stack.ts +++ b/cdk/lib/ecs-stack.ts @@ -10,6 +10,7 @@ import { CfnRule } from 'aws-cdk-lib/aws-events'; import * as iam from 'aws-cdk-lib/aws-iam'; import { Effect } from 'aws-cdk-lib/aws-iam'; import * as logs from 'aws-cdk-lib/aws-logs'; +import * as rds from 'aws-cdk-lib/aws-rds'; import * as s3 from 'aws-cdk-lib/aws-s3'; import * as sns from 'aws-cdk-lib/aws-sns'; import * as ssm from 'aws-cdk-lib/aws-ssm'; @@ -19,6 +20,7 @@ import { Construct } from 'constructs'; import { Config, GenericStackProps } from './config'; export interface EcsStackProps extends GenericStackProps { + auroraCluster: rds.IDatabaseCluster; auroraSecurityGroup: ec2.ISecurityGroup; ecsImageTag: string; githubActionsDeploymentRole: iam.IRole; @@ -343,6 +345,41 @@ export class EcsStack extends cdk.Stack { } ); + const rdsExportPolicy = new iam.ManagedPolicy( + this, + `${config.environment}-ovara-aurora-export-policy`, + { + statements: [ + new iam.PolicyStatement({ + sid: `${config.environment}OvaraAuroraExportExport`, + effect: Effect.ALLOW, + actions: ['s3:PutObject', 's3:AbortMultipartUpload'], + resources: [ + lampiSiirtajaTempS3Bucket.bucketArn, + lampiSiirtajaTempS3Bucket.arnForObjects('*'), + ], + }), + ], + } + ); + + const rdsExportRole = new iam.Role( + this, + `${config.environment}-ovara-aurora-export-role`, + { + assumedBy: new iam.ServicePrincipal('rds.amazonaws.com'), + managedPolicies: [rdsExportPolicy], + } + ); + + const cfnDbCluster = props.auroraCluster.node.defaultChild as rds.CfnDBCluster; + cfnDbCluster.associatedRoles = [ + { + featureName: 's3Export', + roleArn: rdsExportRole.roleArn, + }, + ]; + const lampiSiirtajaSchedule = appscaling.Schedule.cron(config.lampiSiirtajaCron); const lampiSiirtajaScheduledFargateTask = new ecsPatterns.ScheduledFargateTask( this, diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index 11c5c06..4d7ea2f 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -34,7 +34,11 @@ const copyTableToS3 = (tableName: string) => { select * from aws_s3.query_export_to_s3( 'select * from ${tableName}', - aws_commons.create_s3_uri('${lampiS3Bucket}', '${tableName}.csv', 'eu-west-1'), + aws_commons.create_s3_uri( + '${lampiS3Bucket}', + '${tableName}.csv', + 'eu-west-1' + ), options := 'FORMAT CSV, HEADER TRUE' ); `; From a6f382f1823fd7ed4747dfaa075d9b39c74ccc63 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 19 Dec 2024 10:19:37 +0200 Subject: [PATCH 11/28] =?UTF-8?q?Korjattu=20S3-export=20SQL:=C3=A4=C3=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lampi-siirtaja-container/lampi-siirtaja/src/run.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index 4d7ea2f..77d30bd 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -29,14 +29,14 @@ const getTableNames = (schemaName: string): string[] => { return rows.map(row => row.table_name); } -const copyTableToS3 = (tableName: string) => { +const copyTableToS3 = (schemaName: string, tableName: string) => { const sql = ` select * from aws_s3.query_export_to_s3( - 'select * from ${tableName}', + 'select * from ${schemaName}.${tableName}', aws_commons.create_s3_uri( '${lampiS3Bucket}', - '${tableName}.csv', + '${schemaName}.${tableName}.csv', 'eu-west-1' ), options := 'FORMAT CSV, HEADER TRUE' @@ -52,10 +52,11 @@ const main = async () => { validateParameters(); console.log(`Tietokanta-URI: ${dbUri}`.replace(dbPassword, '*****')); console.log(`Lampi S3-ämpäri: ${lampiS3Bucket}`); - const tableNames: string[] = getTableNames('pub'); + const schemaName = 'pub'; + const tableNames: string[] = getTableNames(schemaName); console.log(`Table names: ${tableNames}`); tableNames.slice(0, 2).forEach((tableName: string) => { - copyTableToS3(tableName); + copyTableToS3(schemaName, tableName); }); } From e35892e7baa1d5492420781f37ace693576feaba Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 19 Dec 2024 12:19:36 +0200 Subject: [PATCH 12/28] =?UTF-8?q?Lampi-siirt=C3=A4j=C3=A4lle=20oma=20S3-?= =?UTF-8?q?=C3=A4mp=C3=A4ri?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cdk/lib/ecs-stack.ts | 24 +++++++++++++++++-- .../lampi-siirtaja/src/run.ts | 7 +++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/cdk/lib/ecs-stack.ts b/cdk/lib/ecs-stack.ts index 7f60305..5d6abc8 100644 --- a/cdk/lib/ecs-stack.ts +++ b/cdk/lib/ecs-stack.ts @@ -345,6 +345,21 @@ export class EcsStack extends cdk.Stack { } ); + const lampiSiirtajaS3Bucket = new s3.Bucket( + this, + `${config.environment}-lampi-siirtaja-bucket`, + { + bucketName: `${config.environment}-lampi-siirtaja-bucket`, + objectOwnership: s3.ObjectOwnership.BUCKET_OWNER_ENFORCED, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + serverAccessLogsBucket: new s3.Bucket( + this, + `${config.environment}-lampi-siirtaja-bucket-server-access-logs` + ), + versioned: true, + } + ); + const rdsExportPolicy = new iam.ManagedPolicy( this, `${config.environment}-ovara-aurora-export-policy`, @@ -355,8 +370,8 @@ export class EcsStack extends cdk.Stack { effect: Effect.ALLOW, actions: ['s3:PutObject', 's3:AbortMultipartUpload'], resources: [ - lampiSiirtajaTempS3Bucket.bucketArn, - lampiSiirtajaTempS3Bucket.arnForObjects('*'), + lampiSiirtajaS3Bucket.bucketArn, + lampiSiirtajaS3Bucket.arnForObjects('*'), ], }), ], @@ -396,6 +411,7 @@ export class EcsStack extends cdk.Stack { POSTGRES_HOST: `raportointi.db.${config.publicHostedZone}`, DB_USERNAME: 'app', LAMPI_S3_BUCKET: lampiSiirtajaTempS3Bucket.bucketName, + OVARA_LAMPI_SIIRTAJA_BUCKET: lampiSiirtajaS3Bucket.bucketName, }, secrets: { DB_PASSWORD: ecs.Secret.fromSsmParameter( @@ -420,6 +436,10 @@ export class EcsStack extends cdk.Stack { lampiSiirtajaScheduledFargateTask.taskDefinition.taskRole ); + lampiSiirtajaS3Bucket.grantReadWrite( + lampiSiirtajaScheduledFargateTask.taskDefinition.taskRole + ); + lampiSiirtajaScheduledFargateTask.taskDefinition.addToExecutionRolePolicy( new iam.PolicyStatement({ actions: [ diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index 77d30bd..6923efd 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -4,6 +4,7 @@ const dbHost = process.env.POSTGRES_HOST; const dbUsername = process.env.DB_USERNAME; const dbPassword = process.env.DB_PASSWORD; const lampiS3Bucket = process.env.LAMPI_S3_BUCKET; +const ovaraLampitSiirtajaBucket = process.env.OVARA_LAMPI_SIIRTAJA_BUCKET; const dbUri = `postgresql://${dbUsername}:${dbPassword}@${dbHost}:5432/ovara`; @@ -35,7 +36,7 @@ const copyTableToS3 = (schemaName: string, tableName: string) => { from aws_s3.query_export_to_s3( 'select * from ${schemaName}.${tableName}', aws_commons.create_s3_uri( - '${lampiS3Bucket}', + '${ovaraLampitSiirtajaBucket}', '${schemaName}.${tableName}.csv', 'eu-west-1' ), @@ -51,11 +52,11 @@ const copyTableToS3 = (schemaName: string, tableName: string) => { const main = async () => { validateParameters(); console.log(`Tietokanta-URI: ${dbUri}`.replace(dbPassword, '*****')); - console.log(`Lampi S3-ämpäri: ${lampiS3Bucket}`); const schemaName = 'pub'; const tableNames: string[] = getTableNames(schemaName); console.log(`Table names: ${tableNames}`); - tableNames.slice(0, 2).forEach((tableName: string) => { + //tableNames.slice(0, 2).forEach((tableName: string) => { + tableNames.forEach((tableName: string) => { copyTableToS3(schemaName, tableName); }); } From 663bf26b415a4f7f0cf641f268425cc3fdd9c319 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 19 Dec 2024 12:53:31 +0200 Subject: [PATCH 13/28] =?UTF-8?q?Lampitiedostojen=20siirto=20=C3=A4mp?= =?UTF-8?q?=C3=A4rist=C3=A4=20toiseen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lampi-siirtaja/package-lock.json | 1657 +++++++++++++++++ .../lampi-siirtaja/package.json | 1 + .../lampi-siirtaja/src/run.ts | 42 +- 3 files changed, 1696 insertions(+), 4 deletions(-) diff --git a/lampi-siirtaja-container/lampi-siirtaja/package-lock.json b/lampi-siirtaja-container/lampi-siirtaja/package-lock.json index 8dae6c3..8b8513e 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/package-lock.json +++ b/lampi-siirtaja-container/lampi-siirtaja/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "@aws-sdk/client-s3": "^3.715.0", "bindings": "^1.5.0", "file-uri-to-path": "^1.0.0", "libpq": "^1.8.13", @@ -28,6 +29,1609 @@ "typescript": "^5.7.2" } }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/crc32c": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.715.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.715.0.tgz", + "integrity": "sha512-7Qq8nW+/Yf+1Prjbwt2I6BsxhY28V6mbi8WF0n8m4qbC+y9wvreNuGv0PgzuLpfcP1bacB1ItW/Wkwuw2mau0w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.714.0", + "@aws-sdk/client-sts": "3.714.0", + "@aws-sdk/core": "3.714.0", + "@aws-sdk/credential-provider-node": "3.714.0", + "@aws-sdk/middleware-bucket-endpoint": "3.714.0", + "@aws-sdk/middleware-expect-continue": "3.714.0", + "@aws-sdk/middleware-flexible-checksums": "3.715.0", + "@aws-sdk/middleware-host-header": "3.714.0", + "@aws-sdk/middleware-location-constraint": "3.714.0", + "@aws-sdk/middleware-logger": "3.714.0", + "@aws-sdk/middleware-recursion-detection": "3.714.0", + "@aws-sdk/middleware-sdk-s3": "3.714.0", + "@aws-sdk/middleware-ssec": "3.714.0", + "@aws-sdk/middleware-user-agent": "3.714.0", + "@aws-sdk/region-config-resolver": "3.714.0", + "@aws-sdk/signature-v4-multi-region": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@aws-sdk/util-endpoints": "3.714.0", + "@aws-sdk/util-user-agent-browser": "3.714.0", + "@aws-sdk/util-user-agent-node": "3.714.0", + "@aws-sdk/xml-builder": "3.709.0", + "@smithy/config-resolver": "^3.0.13", + "@smithy/core": "^2.5.5", + "@smithy/eventstream-serde-browser": "^3.0.14", + "@smithy/eventstream-serde-config-resolver": "^3.0.11", + "@smithy/eventstream-serde-node": "^3.0.13", + "@smithy/fetch-http-handler": "^4.1.2", + "@smithy/hash-blob-browser": "^3.1.10", + "@smithy/hash-node": "^3.0.11", + "@smithy/hash-stream-node": "^3.1.10", + "@smithy/invalid-dependency": "^3.0.11", + "@smithy/md5-js": "^3.0.11", + "@smithy/middleware-content-length": "^3.0.13", + "@smithy/middleware-endpoint": "^3.2.5", + "@smithy/middleware-retry": "^3.0.30", + "@smithy/middleware-serde": "^3.0.11", + "@smithy/middleware-stack": "^3.0.11", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/node-http-handler": "^3.3.2", + "@smithy/protocol-http": "^4.1.8", + "@smithy/smithy-client": "^3.5.0", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.30", + "@smithy/util-defaults-mode-node": "^3.0.30", + "@smithy/util-endpoints": "^2.1.7", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-retry": "^3.0.11", + "@smithy/util-stream": "^3.3.2", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.714.0.tgz", + "integrity": "sha512-pFtjY5Ga91qrryo0UfbjetdT2p9rOgtHofogAeEuGjxx7/rupBpdlW0WDOtD/7jhmbhM8WZEr6aH7GLzzkKfCA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.714.0", + "@aws-sdk/middleware-host-header": "3.714.0", + "@aws-sdk/middleware-logger": "3.714.0", + "@aws-sdk/middleware-recursion-detection": "3.714.0", + "@aws-sdk/middleware-user-agent": "3.714.0", + "@aws-sdk/region-config-resolver": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@aws-sdk/util-endpoints": "3.714.0", + "@aws-sdk/util-user-agent-browser": "3.714.0", + "@aws-sdk/util-user-agent-node": "3.714.0", + "@smithy/config-resolver": "^3.0.13", + "@smithy/core": "^2.5.5", + "@smithy/fetch-http-handler": "^4.1.2", + "@smithy/hash-node": "^3.0.11", + "@smithy/invalid-dependency": "^3.0.11", + "@smithy/middleware-content-length": "^3.0.13", + "@smithy/middleware-endpoint": "^3.2.5", + "@smithy/middleware-retry": "^3.0.30", + "@smithy/middleware-serde": "^3.0.11", + "@smithy/middleware-stack": "^3.0.11", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/node-http-handler": "^3.3.2", + "@smithy/protocol-http": "^4.1.8", + "@smithy/smithy-client": "^3.5.0", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.30", + "@smithy/util-defaults-mode-node": "^3.0.30", + "@smithy/util-endpoints": "^2.1.7", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-retry": "^3.0.11", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.714.0.tgz", + "integrity": "sha512-dMvpPUaL3v01psPY1ZyCzQ/w2tOgQTH1if0zBF5r2q7Vc0oOPzbBZgNAhG1bDWlRCBW0iXmoqRFoWUwQ5rtx+A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.714.0", + "@aws-sdk/credential-provider-node": "3.714.0", + "@aws-sdk/middleware-host-header": "3.714.0", + "@aws-sdk/middleware-logger": "3.714.0", + "@aws-sdk/middleware-recursion-detection": "3.714.0", + "@aws-sdk/middleware-user-agent": "3.714.0", + "@aws-sdk/region-config-resolver": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@aws-sdk/util-endpoints": "3.714.0", + "@aws-sdk/util-user-agent-browser": "3.714.0", + "@aws-sdk/util-user-agent-node": "3.714.0", + "@smithy/config-resolver": "^3.0.13", + "@smithy/core": "^2.5.5", + "@smithy/fetch-http-handler": "^4.1.2", + "@smithy/hash-node": "^3.0.11", + "@smithy/invalid-dependency": "^3.0.11", + "@smithy/middleware-content-length": "^3.0.13", + "@smithy/middleware-endpoint": "^3.2.5", + "@smithy/middleware-retry": "^3.0.30", + "@smithy/middleware-serde": "^3.0.11", + "@smithy/middleware-stack": "^3.0.11", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/node-http-handler": "^3.3.2", + "@smithy/protocol-http": "^4.1.8", + "@smithy/smithy-client": "^3.5.0", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.30", + "@smithy/util-defaults-mode-node": "^3.0.30", + "@smithy/util-endpoints": "^2.1.7", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-retry": "^3.0.11", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.714.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.714.0.tgz", + "integrity": "sha512-ThcXgolapPsOzeavJF4Am312umFyoFBBeiTYD8PQGIiYkbJi4hXcjoWacmtkq6moMmMZSP9iK/ellls7vwY2JQ==", + "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.714.0", + "@aws-sdk/core": "3.714.0", + "@aws-sdk/credential-provider-node": "3.714.0", + "@aws-sdk/middleware-host-header": "3.714.0", + "@aws-sdk/middleware-logger": "3.714.0", + "@aws-sdk/middleware-recursion-detection": "3.714.0", + "@aws-sdk/middleware-user-agent": "3.714.0", + "@aws-sdk/region-config-resolver": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@aws-sdk/util-endpoints": "3.714.0", + "@aws-sdk/util-user-agent-browser": "3.714.0", + "@aws-sdk/util-user-agent-node": "3.714.0", + "@smithy/config-resolver": "^3.0.13", + "@smithy/core": "^2.5.5", + "@smithy/fetch-http-handler": "^4.1.2", + "@smithy/hash-node": "^3.0.11", + "@smithy/invalid-dependency": "^3.0.11", + "@smithy/middleware-content-length": "^3.0.13", + "@smithy/middleware-endpoint": "^3.2.5", + "@smithy/middleware-retry": "^3.0.30", + "@smithy/middleware-serde": "^3.0.11", + "@smithy/middleware-stack": "^3.0.11", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/node-http-handler": "^3.3.2", + "@smithy/protocol-http": "^4.1.8", + "@smithy/smithy-client": "^3.5.0", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.30", + "@smithy/util-defaults-mode-node": "^3.0.30", + "@smithy/util-endpoints": "^2.1.7", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-retry": "^3.0.11", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.714.0.tgz", + "integrity": "sha512-TlZ50d8MEPVp9O03SvisOmcmxjxhMDKHJJcrBgYjgDej6QmNfiFwtCRkReXDdkEeXP29ehMs7uPXtmVvPqziYw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/core": "^2.5.5", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/property-provider": "^3.1.11", + "@smithy/protocol-http": "^4.1.8", + "@smithy/signature-v4": "^4.2.4", + "@smithy/smithy-client": "^3.5.0", + "@smithy/types": "^3.7.2", + "@smithy/util-middleware": "^3.0.11", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.714.0.tgz", + "integrity": "sha512-0S4nKE1a+EHXAInXUeuWkyzVnXzmwIbwLStVidAIoyl6sJF8xGdw+r3AaoTr7p0YXzdoDUsn3wBTCA6ZwgXVbA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@smithy/property-provider": "^3.1.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.714.0.tgz", + "integrity": "sha512-1AXEfUSQUQg+x/DpH1XJhjf2yEgTHHatM3cvYu7FZMhRXF28Q5OJDbEFPfdqrK+vmCiYRWhszDb+zuUIvz46bw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@smithy/fetch-http-handler": "^4.1.2", + "@smithy/node-http-handler": "^3.3.2", + "@smithy/property-provider": "^3.1.11", + "@smithy/protocol-http": "^4.1.8", + "@smithy/smithy-client": "^3.5.0", + "@smithy/types": "^3.7.2", + "@smithy/util-stream": "^3.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.714.0.tgz", + "integrity": "sha512-w5wOcgBngfcvVev5wnYWXoc/W2ewVmGJkfRdGquhFt8pkUxktyd8eXehqkP7u31SONVlgy96EFTdSCzWpTrqOw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.714.0", + "@aws-sdk/credential-provider-env": "3.714.0", + "@aws-sdk/credential-provider-http": "3.714.0", + "@aws-sdk/credential-provider-process": "3.714.0", + "@aws-sdk/credential-provider-sso": "3.714.0", + "@aws-sdk/credential-provider-web-identity": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@smithy/credential-provider-imds": "^3.2.8", + "@smithy/property-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.714.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.714.0.tgz", + "integrity": "sha512-ebho1HYNKzaw0ZfbI9kEicSW8J7tsOoV6EJajsjfFnuP+GY9J5Oi4759GEq1Qqj7GxIhrySOZFzif/hxAXPWtQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.714.0", + "@aws-sdk/credential-provider-http": "3.714.0", + "@aws-sdk/credential-provider-ini": "3.714.0", + "@aws-sdk/credential-provider-process": "3.714.0", + "@aws-sdk/credential-provider-sso": "3.714.0", + "@aws-sdk/credential-provider-web-identity": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@smithy/credential-provider-imds": "^3.2.8", + "@smithy/property-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.714.0.tgz", + "integrity": "sha512-mHM+zYJDUiXggBx4YvQgMOhbkV07KUib8/jWPnAZbUJcRncN/yevAp/WNocjUN4VaBWkooJUgoTET/okRK+TCQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@smithy/property-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.714.0.tgz", + "integrity": "sha512-LQyHUQd+/A0PO96m6/A3KeekRplRpG9AmwLn8VPknlmACAhhbWHehzerCTd42V8dClf5pigr25/aVqh/2p/sRw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.714.0", + "@aws-sdk/core": "3.714.0", + "@aws-sdk/token-providers": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@smithy/property-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.714.0.tgz", + "integrity": "sha512-piKfEJvLrGZ0bH4NPO19d1dtfCZi2p6YJUK/9vRCD1rvJidOuHNeUwIcxTnkIMovQHX12rZVvU9ub0C3CwegUQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@smithy/property-provider": "^3.1.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.714.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.714.0.tgz", + "integrity": "sha512-I/xSOskiseJJ8i183Z522BgqbgYzLKP7jGcg2Qeib/IWoG2IP+9DH8pwqagKaPAycyswtnoKBJiiFXY43n0CkA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@aws-sdk/util-arn-parser": "3.693.0", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-config-provider": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.714.0.tgz", + "integrity": "sha512-rlzsXdG8Lzo4Qpl35ZnpOBAWlzvDHpP9++0AXoUwAJA0QmMm7auIRmgxJuNj91VwT9h15ZU6xjU4S7fJl4W0+w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.715.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.715.0.tgz", + "integrity": "sha512-oDUxpwBZqQ0x7c9typmaX7cHxFsyxwApQPuPYV4hSTBsLtqpDc7KtyV+lgxQxkgoHya6P37+Wwllr4FjcujXwg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-stream": "^3.3.2", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.714.0.tgz", + "integrity": "sha512-6l68kjNrh5QC8FGX3I3geBDavWN5Tg1RLHJ2HLA8ByGBtJyCwnz3hEkKfaxn0bBx0hF9DzbfjEOUF6cDqy2Kjg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.714.0.tgz", + "integrity": "sha512-MX7M+V+FblujKck3fyuzePVIAy9530gY719IiSxV6uN1qLHl7VDJxNblpF/KpXakD6rOg8OpvtmqsXj9aBMftw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.714.0.tgz", + "integrity": "sha512-RkqHlMvQWUaRklU1bMfUuBvdWwxgUtEqpADaHXlGVj3vtEY2UgBjy+57CveC4MByqKIunNvVHBBbjrGVtwY7Lg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.714.0.tgz", + "integrity": "sha512-AVU5ixnh93nqtsfgNc284oXsXaadyHGPHpql/jwgaaqQfEXjS/1/j3j9E/vpacfTTz2Vzo7hAOjnvrOXSEVDaA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.714.0.tgz", + "integrity": "sha512-YYhX+JefwwEsUxYs0YXn5Mfb97Lo3hwnk3qRIlUkcotCsHYwgCX4jVWjeh8HK+RFFx3Krbh/8/YmzTkI/Z4Z9Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@aws-sdk/util-arn-parser": "3.693.0", + "@smithy/core": "^2.5.5", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/protocol-http": "^4.1.8", + "@smithy/signature-v4": "^4.2.4", + "@smithy/smithy-client": "^3.5.0", + "@smithy/types": "^3.7.2", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-stream": "^3.3.2", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.714.0.tgz", + "integrity": "sha512-RkK8REAVwNUQmYbIDRw8eYbMJ8F1Rw4C9mlME4BBMhFlelGcD3ErU2ce24moQbDxBjNwHNESmIqgmdQk93CDCQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.714.0.tgz", + "integrity": "sha512-OgLjJf7WxUqA2OgiqGCfIc68gsbXlIG8LjObBiF0qlMStAd0L23AGuK5VmYinJlsle9qUpwQvWgKFKaDgdQXgA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@aws-sdk/util-endpoints": "3.714.0", + "@smithy/core": "^2.5.5", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.714.0.tgz", + "integrity": "sha512-HJzsQxgMOAzZrbf/YIqEx30or4tZK1oNAk6Wm6xecUQx+23JXIaePRu1YFUOLBBERQ4QBPpISFurZWBMZ5ibAw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/types": "^3.7.2", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.714.0.tgz", + "integrity": "sha512-xIQyx0ILRtJZnSUPpMsWkwASuFDYh9GPnr7p+pmfsV5KtRQluHuoH1wPkPTeNuTnAl7RDHUOmcOgTPUCDxiKxg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@smithy/protocol-http": "^4.1.8", + "@smithy/signature-v4": "^4.2.4", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.714.0.tgz", + "integrity": "sha512-vKN064aLE3kl+Zl16Ony3jltHnMddMBT7JRkP1L+lLywhA0PcAKxpdvComul/sTBWnbnwLnaS5NsDUhcWySH8A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/property-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.714.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.714.0.tgz", + "integrity": "sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.693.0.tgz", + "integrity": "sha512-WC8x6ca+NRrtpAH64rWu+ryDZI3HuLwlEr8EU6/dbC/pt+r/zC0PBoC15VEygUaBA+isppCikQpGyEDu0Yj7gQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.714.0.tgz", + "integrity": "sha512-Xv+Z2lhe7w7ZZRsgBwBMZgGTVmS+dkkj2S13uNHAx9lhB5ovM8PhK5G/j28xYf6vIibeuHkRAbb7/ozdZIGR+A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/types": "^3.7.2", + "@smithy/util-endpoints": "^2.1.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.693.0.tgz", + "integrity": "sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.714.0.tgz", + "integrity": "sha512-OdJJ03cP9/MgIVToPJPCPUImbpZzTcwdIgbXC0tUQPJhbD7b7cB4LdnkhNHko+MptpOrCq4CPY/33EpOjRdofw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/types": "^3.7.2", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.714.0.tgz", + "integrity": "sha512-x8JoZb7yBEbNUmHUNoRAP4L++6A5uZCVf2yFLw8CZKpH4q+Cf1a68ou48OfnND3H0rbBnLXc/3uOlseRvd57/g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.709.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.709.0.tgz", + "integrity": "sha512-2GPCwlNxeHspoK/Mc8nbk9cBOkSpp3j2SJUQmFnyQK6V/pR6II2oPRyZkMomug1Rc10hqlBHByMecq4zhV2uUw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.9.tgz", + "integrity": "sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-4.0.0.tgz", + "integrity": "sha512-jSqRnZvkT4egkq/7b6/QRCNXmmYVcHwnJldqJ3IhVpQE2atObVJ137xmGeuGFhjFUr8gCEVAOKwSY79OvpbDaQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.1.tgz", + "integrity": "sha512-VEYtPvh5rs/xlyqpm5NRnfYLZn+q0SRPELbvBV+C/G7IQ+ouTuo+NKKa3ShG5OaFR8NYVMXls9hPYLTvIKKDrQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.13.tgz", + "integrity": "sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/types": "^3.7.2", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.5.tgz", + "integrity": "sha512-G8G/sDDhXA7o0bOvkc7bgai6POuSld/+XhNnWAbpQTpLv2OZPvyqQ58tLPPlz0bSNsXktldDDREIv1LczFeNEw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^3.0.11", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-stream": "^3.3.2", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.8.tgz", + "integrity": "sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/property-provider": "^3.1.11", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.10.tgz", + "integrity": "sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^3.7.2", + "@smithy/util-hex-encoding": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.14.tgz", + "integrity": "sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.13", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.11.tgz", + "integrity": "sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.13.tgz", + "integrity": "sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.13", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.13.tgz", + "integrity": "sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^3.1.10", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.2.tgz", + "integrity": "sha512-R7rU7Ae3ItU4rC0c5mB2sP5mJNbCfoDc8I5XlYjIZnquyUwec7fEo78F6DA3SmgJgkU1qTMcZJuGblxZsl10ZA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.1.8", + "@smithy/querystring-builder": "^3.0.11", + "@smithy/types": "^3.7.2", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.10.tgz", + "integrity": "sha512-elwslXOoNunmfS0fh55jHggyhccobFkexLYC1ZeZ1xP2BTSrcIBaHV2b4xUQOdctrSNOpMqOZH1r2XzWTEhyfA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/chunked-blob-reader": "^4.0.0", + "@smithy/chunked-blob-reader-native": "^3.0.1", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-node": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.11.tgz", + "integrity": "sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.10.tgz", + "integrity": "sha512-olomK/jZQ93OMayW1zfTHwcbwBdhcZOHsyWyiZ9h9IXvc1mCD/VuvzbLb3Gy/qNJwI4MANPLctTp2BucV2oU/Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.11.tgz", + "integrity": "sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.11.tgz", + "integrity": "sha512-3NM0L3i2Zm4bbgG6Ymi9NBcxXhryi3uE8fIfHJZIOfZVxOkGdjdgjR9A06SFIZCfnEIWKXZdm6Yq5/aPXFFhsQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.13.tgz", + "integrity": "sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.5.tgz", + "integrity": "sha512-VhJNs/s/lyx4weiZdXSloBgoLoS8osV0dKIain8nGmx7of3QFKu5BSdEuk1z/U8x9iwes1i+XCiNusEvuK1ijg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.5.5", + "@smithy/middleware-serde": "^3.0.11", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "@smithy/util-middleware": "^3.0.11", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "3.0.30", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.30.tgz", + "integrity": "sha512-6323RL2BvAR3VQpTjHpa52kH/iSHyxd/G9ohb2MkBk2Ucu+oMtRXT8yi7KTSIS9nb58aupG6nO0OlXnQOAcvmQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/protocol-http": "^4.1.8", + "@smithy/service-error-classification": "^3.0.11", + "@smithy/smithy-client": "^3.5.0", + "@smithy/types": "^3.7.2", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-retry": "^3.0.11", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.11.tgz", + "integrity": "sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.11.tgz", + "integrity": "sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.12.tgz", + "integrity": "sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.2.tgz", + "integrity": "sha512-t4ng1DAd527vlxvOfKFYEe6/QFBcsj7WpNlWTyjorwXXcKw3XlltBGbyHfSJ24QT84nF+agDha9tNYpzmSRZPA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^3.1.9", + "@smithy/protocol-http": "^4.1.8", + "@smithy/querystring-builder": "^3.0.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.11.tgz", + "integrity": "sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", + "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.11.tgz", + "integrity": "sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.11.tgz", + "integrity": "sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz", + "integrity": "sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz", + "integrity": "sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.4.tgz", + "integrity": "sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.5.0.tgz", + "integrity": "sha512-Y8FeOa7gbDfCWf7njrkoRATPa5eNLUEjlJS5z5rXatYuGkCb80LbHcu8AQR8qgAZZaNHCLyo2N+pxPsV7l+ivg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.5.5", + "@smithy/middleware-endpoint": "^3.2.5", + "@smithy/middleware-stack": "^3.0.11", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-stream": "^3.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", + "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.11.tgz", + "integrity": "sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^3.0.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "3.0.30", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.30.tgz", + "integrity": "sha512-nLuGmgfcr0gzm64pqF2UT4SGWVG8UGviAdayDlVzJPNa6Z4lqvpDzdRXmLxtOdEjVlTOEdpZ9dd3ZMMu488mzg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^3.1.11", + "@smithy/smithy-client": "^3.5.0", + "@smithy/types": "^3.7.2", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "3.0.30", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.30.tgz", + "integrity": "sha512-OD63eWoH68vp75mYcfYyuVH+p7Li/mY4sYOROnauDrtObo1cS4uWfsy/zhOTW8F8ZPxQC1ZXZKVxoxvMGUv2Ow==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^3.0.13", + "@smithy/credential-provider-imds": "^3.2.8", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/property-provider": "^3.1.11", + "@smithy/smithy-client": "^3.5.0", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.7.tgz", + "integrity": "sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.11.tgz", + "integrity": "sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.11.tgz", + "integrity": "sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^3.0.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.3.2.tgz", + "integrity": "sha512-sInAqdiVeisUGYAv/FrXpmJ0b4WTFmciTRqzhb7wVuem9BHvhIG7tpiYHLDWrl2stOokNZpTTGqz3mzB2qFwXg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^4.1.2", + "@smithy/node-http-handler": "^3.3.2", + "@smithy/types": "^3.7.2", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.2.0.tgz", + "integrity": "sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^3.1.9", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@types/node": { "version": "22.10.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", @@ -47,6 +1651,34 @@ "file-uri-to-path": "1.0.0" } }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "license": "MIT" + }, + "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/file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -147,6 +1779,18 @@ "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", "license": "WTFPL OR MIT" }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/typescript": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", @@ -168,6 +1812,19 @@ "dev": true, "license": "MIT" }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/lampi-siirtaja-container/lampi-siirtaja/package.json b/lampi-siirtaja-container/lampi-siirtaja/package.json index 8f4b427..0221801 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/package.json +++ b/lampi-siirtaja-container/lampi-siirtaja/package.json @@ -3,6 +3,7 @@ "version": "1.0.0", "main": "dist/run.js", "dependencies": { + "@aws-sdk/client-s3": "^3.715.0", "bindings": "^1.5.0", "file-uri-to-path": "^1.0.0", "libpq": "^1.8.13", diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index 6923efd..e70a8c7 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -1,10 +1,17 @@ import PgClient from 'pg-native'; +import { + S3Client, + CopyObjectCommand, + ObjectNotInActiveTierError, + waitUntilObjectExists, GetObjectCommand, GetObjectCommandOutput, PutObjectCommand, PutObjectCommandOutput, +} from '@aws-sdk/client-s3'; + const dbHost = process.env.POSTGRES_HOST; const dbUsername = process.env.DB_USERNAME; const dbPassword = process.env.DB_PASSWORD; const lampiS3Bucket = process.env.LAMPI_S3_BUCKET; -const ovaraLampitSiirtajaBucket = process.env.OVARA_LAMPI_SIIRTAJA_BUCKET; +const ovaraLampiSiirtajaBucket = process.env.OVARA_LAMPI_SIIRTAJA_BUCKET; const dbUri = `postgresql://${dbUsername}:${dbPassword}@${dbHost}:5432/ovara`; @@ -36,7 +43,7 @@ const copyTableToS3 = (schemaName: string, tableName: string) => { from aws_s3.query_export_to_s3( 'select * from ${schemaName}.${tableName}', aws_commons.create_s3_uri( - '${ovaraLampitSiirtajaBucket}', + '${ovaraLampiSiirtajaBucket}', '${schemaName}.${tableName}.csv', 'eu-west-1' ), @@ -49,14 +56,41 @@ const copyTableToS3 = (schemaName: string, tableName: string) => { console.log(`S3 copy result for table ${tableName}: ${JSON.stringify(result, null, 4)}`); } +const copyFileToLampi = async (sourceKey: string) => { + const ovaraS3Client: S3Client = new S3Client({}); + const lampiS3Client: S3Client = new S3Client({}); + const destinationKey = sourceKey; + + const getObjectCommandOutput: GetObjectCommandOutput = await ovaraS3Client.send( + new GetObjectCommand({ + Bucket: ovaraLampiSiirtajaBucket, + Key: sourceKey, + }), + ); + + const putObjectCommandOutput: PutObjectCommandOutput = await lampiS3Client.send( + new PutObjectCommand({ + Bucket: lampiS3Bucket, + Key: destinationKey, + Body: getObjectCommandOutput.Body + }) + ); + + console.log( + `Successfully copied ${ovaraLampiSiirtajaBucket}/${sourceKey} to ${lampiS3Bucket}/${destinationKey}`, + ); + + console.log(`putObjectCommandOutput: ${JSON.stringify(putObjectCommandOutput, null, 4)}`); +} + const main = async () => { validateParameters(); console.log(`Tietokanta-URI: ${dbUri}`.replace(dbPassword, '*****')); const schemaName = 'pub'; const tableNames: string[] = getTableNames(schemaName); console.log(`Table names: ${tableNames}`); - //tableNames.slice(0, 2).forEach((tableName: string) => { - tableNames.forEach((tableName: string) => { + //tableNames.forEach((tableName: string) => { + tableNames.slice(0, 2).forEach((tableName: string) => { copyTableToS3(schemaName, tableName); }); } From 896faad55320220dc2c97700571d3aec51d42715 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 19 Dec 2024 13:03:44 +0200 Subject: [PATCH 14/28] =?UTF-8?q?Tiedostojen=20kopiointi=20=C3=A4mp=C3=A4r?= =?UTF-8?q?ist=C3=A4=20toiseen=20k=C3=A4ytt=C3=B6=C3=B6n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lampi-siirtaja-container/lampi-siirtaja/src/run.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index e70a8c7..ef77521 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -92,6 +92,8 @@ const main = async () => { //tableNames.forEach((tableName: string) => { tableNames.slice(0, 2).forEach((tableName: string) => { copyTableToS3(schemaName, tableName); + const sourceKey = `${schemaName}.${tableName}.csv`; + copyFileToLampi(sourceKey); }); } From 78d45a39ba043c23b27501a6297cbf72d96b9df7 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 19 Dec 2024 13:17:00 +0200 Subject: [PATCH 15/28] Korjattu bodyn asettamista --- lampi-siirtaja-container/lampi-siirtaja/src/run.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index ef77521..7f5d4d4 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -68,11 +68,13 @@ const copyFileToLampi = async (sourceKey: string) => { }), ); + const bodyString: string = await getObjectCommandOutput.Body.transformToString(); + const putObjectCommandOutput: PutObjectCommandOutput = await lampiS3Client.send( new PutObjectCommand({ Bucket: lampiS3Bucket, Key: destinationKey, - Body: getObjectCommandOutput.Body + Body: bodyString }) ); From ab3b94a1ba8107ab3ca58a71c751abda10c577ce Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 19 Dec 2024 13:41:50 +0200 Subject: [PATCH 16/28] manifest.json Lammelle --- cdk/lib/ecs-stack.ts | 1 + .../lampi-siirtaja/src/run.ts | 39 +++++++++++++++---- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/cdk/lib/ecs-stack.ts b/cdk/lib/ecs-stack.ts index 5d6abc8..e0786f3 100644 --- a/cdk/lib/ecs-stack.ts +++ b/cdk/lib/ecs-stack.ts @@ -342,6 +342,7 @@ export class EcsStack extends cdk.Stack { this, `${config.environment}-temp-lampi-siirtaja-bucket-server-access-logs` ), + versioned: true, } ); diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index 7f5d4d4..a45cb6e 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -22,6 +22,11 @@ const validateParameters = () => { if(!lampiS3Bucket) throw Error("Lammen S3-ampärin nimi puuttuu"); } +type ManifestItem = { + key: string; + s3Version: string; +}; + const getTableNames = (schemaName: string): string[] => { const sql = ` @@ -56,7 +61,7 @@ const copyTableToS3 = (schemaName: string, tableName: string) => { console.log(`S3 copy result for table ${tableName}: ${JSON.stringify(result, null, 4)}`); } -const copyFileToLampi = async (sourceKey: string) => { +const copyFileToLampi = async (sourceKey: string): Promise => { const ovaraS3Client: S3Client = new S3Client({}); const lampiS3Client: S3Client = new S3Client({}); const destinationKey = sourceKey; @@ -83,20 +88,40 @@ const copyFileToLampi = async (sourceKey: string) => { ); console.log(`putObjectCommandOutput: ${JSON.stringify(putObjectCommandOutput, null, 4)}`); + + const manifestItem = { + key: destinationKey, + s3Version: putObjectCommandOutput.VersionId + }; + + return manifestItem; +} + +const uploadManifestToLampi = async (manifest: ManifestItem[]) => { + const lampiS3Client: S3Client = new S3Client({}); + const destinationKey = 'manifest.json'; + + await lampiS3Client.send(new PutObjectCommand({ + Bucket: lampiS3Bucket, + Key: destinationKey, + Body: JSON.stringify(manifest, null, 4) + })); } const main = async () => { validateParameters(); console.log(`Tietokanta-URI: ${dbUri}`.replace(dbPassword, '*****')); const schemaName = 'pub'; - const tableNames: string[] = getTableNames(schemaName); + const tableNames: string[] = getTableNames(schemaName).slice(0, 2); console.log(`Table names: ${tableNames}`); - //tableNames.forEach((tableName: string) => { - tableNames.slice(0, 2).forEach((tableName: string) => { + const manifest: ManifestItem[] = []; + for (const tableName of tableNames) { copyTableToS3(schemaName, tableName); const sourceKey = `${schemaName}.${tableName}.csv`; - copyFileToLampi(sourceKey); - }); + const manifestItem = await copyFileToLampi(sourceKey); + manifest.push(manifestItem); + } + await uploadManifestToLampi(manifest); } -main(); +main().then(() => console.log('Ovaran tietojen siirtäminen Lampeen valmistui')); From c938fd92e7361d4a431fbc178477a6d3e492dbad Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 19 Dec 2024 14:01:06 +0200 Subject: [PATCH 17/28] =?UTF-8?q?Sek=C3=A4=20pub=20ett=C3=A4=20stg=20-skee?= =?UTF-8?q?mojen=20kaikkien=20taulujen=20siirt=C3=A4minen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lampi-siirtaja/src/run.ts | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index a45cb6e..caf7075 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -84,10 +84,10 @@ const copyFileToLampi = async (sourceKey: string): Promise => { ); console.log( - `Successfully copied ${ovaraLampiSiirtajaBucket}/${sourceKey} to ${lampiS3Bucket}/${destinationKey}`, + `Siirretty ${ovaraLampiSiirtajaBucket}/${sourceKey} => ${lampiS3Bucket}/${destinationKey}`, ); - console.log(`putObjectCommandOutput: ${JSON.stringify(putObjectCommandOutput, null, 4)}`); + //console.log(`putObjectCommandOutput: ${JSON.stringify(putObjectCommandOutput, null, 4)}`); const manifestItem = { key: destinationKey, @@ -110,18 +110,30 @@ const uploadManifestToLampi = async (manifest: ManifestItem[]) => { const main = async () => { validateParameters(); - console.log(`Tietokanta-URI: ${dbUri}`.replace(dbPassword, '*****')); - const schemaName = 'pub'; - const tableNames: string[] = getTableNames(schemaName).slice(0, 2); - console.log(`Table names: ${tableNames}`); + console.log(`Aloitetaan Ovaran tietojen kopiointi Lampeen`); + console.log(`Tietokannan konfiguraatio: ${dbUri}`.replace(dbPassword, '*****')); + const schemaNames = ['pub', 'stg']; const manifest: ManifestItem[] = []; - for (const tableName of tableNames) { - copyTableToS3(schemaName, tableName); - const sourceKey = `${schemaName}.${tableName}.csv`; - const manifestItem = await copyFileToLampi(sourceKey); - manifest.push(manifestItem); + for (const schemaName of schemaNames) { + console.log(`Aloitetaan skeeman "${schemaName}" taulujen siirtäminen Lampeen`); + //const tableNames: string[] = getTableNames(schemaName).slice(0, 2); + const tableNames: string[] = getTableNames(schemaName); + console.log(`Table names: ${tableNames}`); + for (const tableName of tableNames) { + console.log(`Aloitetaan skeeman "${schemaName}" taulun "${tableName}" siirtäminen Ovaran S3-ämpäriin`); + copyTableToS3(schemaName, tableName); + console.log(`Skeeman "${schemaName}" taulun "${tableName}" siirtäminen Ovaran S3-ämpäriin valmistui`); + const sourceKey = `${schemaName}.${tableName}.csv`; + console.log(`Aloitetaan skeeman "${schemaName}" taulun "${tableName}" siirtäminen Ovaran S3-ämpäristä Lammen S3-ämpäriin (key: "${sourceKey}")`); + const manifestItem = await copyFileToLampi(sourceKey); + console.log(`Aloitetaan skeeman "${schemaName}" taulun "${tableName}" siirtäminen Ovaran S3-ämpäristä Lammen S3-ämpäriin valmistui (key: "${sourceKey}")`); + manifest.push(manifestItem); + } + console.log(`Aloitetaan skeeman "${schemaName}" taulujen siirtäminen Lampeen valmistui`); } + console.log(`Aloitetaan manifest-tiedoston siirtäminen Lampeen`) await uploadManifestToLampi(manifest); + console.log(`Aloitetaan manifest-tiedoston siirtäminen Lampeen valmistui`) } main().then(() => console.log('Ovaran tietojen siirtäminen Lampeen valmistui')); From e5cb0013e431a9c585ee29dfdce44cc9fa572c0f Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 19 Dec 2024 20:19:33 +0200 Subject: [PATCH 18/28] Siirron streamaus --- .../lampi-siirtaja/package-lock.json | 1 + .../lampi-siirtaja/package.json | 1 + lampi-siirtaja-container/lampi-siirtaja/src/run.ts | 13 ++++++++----- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/lampi-siirtaja-container/lampi-siirtaja/package-lock.json b/lampi-siirtaja-container/lampi-siirtaja/package-lock.json index 8b8513e..3a37901 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/package-lock.json +++ b/lampi-siirtaja-container/lampi-siirtaja/package-lock.json @@ -10,6 +10,7 @@ "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.715.0", + "@smithy/types": "^3.7.2", "bindings": "^1.5.0", "file-uri-to-path": "^1.0.0", "libpq": "^1.8.13", diff --git a/lampi-siirtaja-container/lampi-siirtaja/package.json b/lampi-siirtaja-container/lampi-siirtaja/package.json index 0221801..acfb58a 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/package.json +++ b/lampi-siirtaja-container/lampi-siirtaja/package.json @@ -4,6 +4,7 @@ "main": "dist/run.js", "dependencies": { "@aws-sdk/client-s3": "^3.715.0", + "@smithy/types": "^3.7.2", "bindings": "^1.5.0", "file-uri-to-path": "^1.0.0", "libpq": "^1.8.13", diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index caf7075..30f3ed0 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -1,11 +1,12 @@ import PgClient from 'pg-native'; - +import { NodeJsClient } from "@smithy/types"; import { S3Client, CopyObjectCommand, ObjectNotInActiveTierError, waitUntilObjectExists, GetObjectCommand, GetObjectCommandOutput, PutObjectCommand, PutObjectCommandOutput, } from '@aws-sdk/client-s3'; +import { Readable } from 'node:stream'; const dbHost = process.env.POSTGRES_HOST; const dbUsername = process.env.DB_USERNAME; @@ -62,8 +63,8 @@ const copyTableToS3 = (schemaName: string, tableName: string) => { } const copyFileToLampi = async (sourceKey: string): Promise => { - const ovaraS3Client: S3Client = new S3Client({}); - const lampiS3Client: S3Client = new S3Client({}); + const ovaraS3Client: S3Client = new S3Client({}) as NodeJsClient; + const lampiS3Client: S3Client = new S3Client({}) as NodeJsClient; const destinationKey = sourceKey; const getObjectCommandOutput: GetObjectCommandOutput = await ovaraS3Client.send( @@ -73,13 +74,15 @@ const copyFileToLampi = async (sourceKey: string): Promise => { }), ); - const bodyString: string = await getObjectCommandOutput.Body.transformToString(); + //const bodyString: string = await getObjectCommandOutput.Body.transformToString(); const putObjectCommandOutput: PutObjectCommandOutput = await lampiS3Client.send( new PutObjectCommand({ Bucket: lampiS3Bucket, Key: destinationKey, - Body: bodyString + Body: getObjectCommandOutput.Body, + ContentLength: getObjectCommandOutput.ContentLength + //Body: bodyString }) ); From 85635d0c02d7f8ea4275fb928bb073766d0f9c45 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 19 Dec 2024 20:46:05 +0200 Subject: [PATCH 19/28] Parannettu lokitusta --- .../lampi-siirtaja/src/run.ts | 39 +++++++------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index 30f3ed0..906c90c 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -2,11 +2,11 @@ import PgClient from 'pg-native'; import { NodeJsClient } from "@smithy/types"; import { S3Client, - CopyObjectCommand, - ObjectNotInActiveTierError, - waitUntilObjectExists, GetObjectCommand, GetObjectCommandOutput, PutObjectCommand, PutObjectCommandOutput, + GetObjectCommand, + GetObjectCommandOutput, + PutObjectCommand, + PutObjectCommandOutput, } from '@aws-sdk/client-s3'; -import { Readable } from 'node:stream'; const dbHost = process.env.POSTGRES_HOST; const dbUsername = process.env.DB_USERNAME; @@ -58,8 +58,9 @@ const copyTableToS3 = (schemaName: string, tableName: string) => { `; const pgClient = new PgClient(); pgClient.connectSync(dbUri); - const result = pgClient.querySync(sql); - console.log(`S3 copy result for table ${tableName}: ${JSON.stringify(result, null, 4)}`); + const queryResult = pgClient.querySync(sql); + console.log(`Taulun ${tableName} kopioinnin tulos | Rivien määrä: ${queryResult.rows_uploaded} | Tiedostojen määrä: ${queryResult.files_uploaded} | Tiedostojen koko: ${queryResult.bytes_uploaded}`); + if(queryResult.files_uploaded !== '1') console.error(`Scheman ${schemaName} taulusta ${tableName} muodostui S3-ämpäriin useampi kuin yksi tiedosto (${queryResult.files_uploaded})`); } const copyFileToLampi = async (sourceKey: string): Promise => { @@ -74,30 +75,21 @@ const copyFileToLampi = async (sourceKey: string): Promise => { }), ); - //const bodyString: string = await getObjectCommandOutput.Body.transformToString(); - const putObjectCommandOutput: PutObjectCommandOutput = await lampiS3Client.send( new PutObjectCommand({ Bucket: lampiS3Bucket, Key: destinationKey, Body: getObjectCommandOutput.Body, ContentLength: getObjectCommandOutput.ContentLength - //Body: bodyString }) ); - console.log( - `Siirretty ${ovaraLampiSiirtajaBucket}/${sourceKey} => ${lampiS3Bucket}/${destinationKey}`, - ); - - //console.log(`putObjectCommandOutput: ${JSON.stringify(putObjectCommandOutput, null, 4)}`); + console.log(`Siirretty ${ovaraLampiSiirtajaBucket}/${sourceKey} => ${lampiS3Bucket}/${destinationKey}`,); - const manifestItem = { + return { key: destinationKey, s3Version: putObjectCommandOutput.VersionId }; - - return manifestItem; } const uploadManifestToLampi = async (manifest: ManifestItem[]) => { @@ -118,21 +110,20 @@ const main = async () => { const schemaNames = ['pub', 'stg']; const manifest: ManifestItem[] = []; for (const schemaName of schemaNames) { - console.log(`Aloitetaan skeeman "${schemaName}" taulujen siirtäminen Lampeen`); - //const tableNames: string[] = getTableNames(schemaName).slice(0, 2); + console.log(`Aloitetaan scheman "${schemaName}" taulujen siirtäminen Lampeen`); const tableNames: string[] = getTableNames(schemaName); console.log(`Table names: ${tableNames}`); for (const tableName of tableNames) { - console.log(`Aloitetaan skeeman "${schemaName}" taulun "${tableName}" siirtäminen Ovaran S3-ämpäriin`); + console.log(`Aloitetaan scheman "${schemaName}" taulun "${tableName}" siirtäminen tietokannasta Ovaran S3-ämpäriin`); copyTableToS3(schemaName, tableName); - console.log(`Skeeman "${schemaName}" taulun "${tableName}" siirtäminen Ovaran S3-ämpäriin valmistui`); + console.log(`Scheman "${schemaName}" taulun "${tableName}" siirtäminen tietokannasta Ovaran S3-ämpäriin valmistui`); const sourceKey = `${schemaName}.${tableName}.csv`; - console.log(`Aloitetaan skeeman "${schemaName}" taulun "${tableName}" siirtäminen Ovaran S3-ämpäristä Lammen S3-ämpäriin (key: "${sourceKey}")`); + console.log(`Aloitetaan scheman "${schemaName}" taulun "${tableName}" siirtäminen Ovaran S3-ämpäristä Lammen S3-ämpäriin (key: "${sourceKey}")`); const manifestItem = await copyFileToLampi(sourceKey); - console.log(`Aloitetaan skeeman "${schemaName}" taulun "${tableName}" siirtäminen Ovaran S3-ämpäristä Lammen S3-ämpäriin valmistui (key: "${sourceKey}")`); + console.log(`Scheman "${schemaName}" taulun "${tableName}" siirtäminen Ovaran S3-ämpäristä Lammen S3-ämpäriin valmistui (key: "${sourceKey}")`); manifest.push(manifestItem); } - console.log(`Aloitetaan skeeman "${schemaName}" taulujen siirtäminen Lampeen valmistui`); + console.log(`Scheman "${schemaName}" taulujen siirtäminen Lampeen valmistui`); } console.log(`Aloitetaan manifest-tiedoston siirtäminen Lampeen`) await uploadManifestToLampi(manifest); From d895dac15ce9c1158314410a4f8af279f8b6bfa7 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 19 Dec 2024 22:40:14 +0200 Subject: [PATCH 20/28] =?UTF-8?q?Lis=C3=A4tty=20content-type?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lampi-siirtaja-container/lampi-siirtaja/src/run.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index 906c90c..a1971dc 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -80,7 +80,8 @@ const copyFileToLampi = async (sourceKey: string): Promise => { Bucket: lampiS3Bucket, Key: destinationKey, Body: getObjectCommandOutput.Body, - ContentLength: getObjectCommandOutput.ContentLength + ContentLength: getObjectCommandOutput.ContentLength, + ContentType: 'text/csv' }) ); @@ -105,18 +106,24 @@ const uploadManifestToLampi = async (manifest: ManifestItem[]) => { const main = async () => { validateParameters(); + console.log(`Aloitetaan Ovaran tietojen kopiointi Lampeen`); console.log(`Tietokannan konfiguraatio: ${dbUri}`.replace(dbPassword, '*****')); + const schemaNames = ['pub', 'stg']; const manifest: ManifestItem[] = []; + for (const schemaName of schemaNames) { + console.log(`Aloitetaan scheman "${schemaName}" taulujen siirtäminen Lampeen`); const tableNames: string[] = getTableNames(schemaName); console.log(`Table names: ${tableNames}`); + for (const tableName of tableNames) { console.log(`Aloitetaan scheman "${schemaName}" taulun "${tableName}" siirtäminen tietokannasta Ovaran S3-ämpäriin`); copyTableToS3(schemaName, tableName); console.log(`Scheman "${schemaName}" taulun "${tableName}" siirtäminen tietokannasta Ovaran S3-ämpäriin valmistui`); + const sourceKey = `${schemaName}.${tableName}.csv`; console.log(`Aloitetaan scheman "${schemaName}" taulun "${tableName}" siirtäminen Ovaran S3-ämpäristä Lammen S3-ämpäriin (key: "${sourceKey}")`); const manifestItem = await copyFileToLampi(sourceKey); From 803cac2d5d728cb2f2a1756700856bf1c2d8b79c Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 9 Jan 2025 15:53:48 +0200 Subject: [PATCH 21/28] Korjausta --- cdk/lib/ecs-stack.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cdk/lib/ecs-stack.ts b/cdk/lib/ecs-stack.ts index e0786f3..4e516fd 100644 --- a/cdk/lib/ecs-stack.ts +++ b/cdk/lib/ecs-stack.ts @@ -104,7 +104,7 @@ export class EcsStack extends cdk.Stack { dbtRunnerRepository, dbtRunnerImageVersion ); - + const dbtRunnerSchedule = appscaling.Schedule.cron(config.dbtCron); const dbtProcessingEnabled = config.dbtProcessingEnabled?.toLowerCase() === 'true'; const dbtRunnerScheduledFargateTask = new ecsPatterns.ScheduledFargateTask( From 5263693c78dcfc5ec73c2161baec7fba3adbd0b9 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 9 Jan 2025 16:40:16 +0200 Subject: [PATCH 22/28] =?UTF-8?q?Poistettu=20schema-tiedostojen=20nimist?= =?UTF-8?q?=C3=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cdk/config/testi.json | 1 + cdk/config/tuotanto.json | 1 + cdk/lib/config.ts | 1 + cdk/lib/ecs-stack.ts | 3 ++- lampi-siirtaja-container/lampi-siirtaja/src/run.ts | 4 ++-- 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/cdk/config/testi.json b/cdk/config/testi.json index 38ea575..1946b89 100644 --- a/cdk/config/testi.json +++ b/cdk/config/testi.json @@ -28,6 +28,7 @@ "hour": "5-15/1", "weekDay": "2-6/1" }, + "lampiSiirtajaEnabled": "true", "lampiSiirtajaCron": { "minute": "0", "hour": "5-15/1", diff --git a/cdk/config/tuotanto.json b/cdk/config/tuotanto.json index 7043c3a..5c86f1d 100644 --- a/cdk/config/tuotanto.json +++ b/cdk/config/tuotanto.json @@ -28,6 +28,7 @@ "hour": "5-15/2", "weekDay": "2-6/1" }, + "lampiSiirtajaEnabled": "false", "lampiSiirtajaCron": { "minute": "0", "hour": "5-15/1", diff --git a/cdk/lib/config.ts b/cdk/lib/config.ts index 17cc9c0..c7569e8 100644 --- a/cdk/lib/config.ts +++ b/cdk/lib/config.ts @@ -24,6 +24,7 @@ export interface Config { lampiFileHandlerActive: string; dbtProcessingEnabled: string; dbtCron: appscaling.CronOptions; + lampiSiirtajaEnabled: string; lampiSiirtajaCron: appscaling.CronOptions; profile: string; publicHostedZone: string; diff --git a/cdk/lib/ecs-stack.ts b/cdk/lib/ecs-stack.ts index 4e516fd..b7aa8de 100644 --- a/cdk/lib/ecs-stack.ts +++ b/cdk/lib/ecs-stack.ts @@ -397,6 +397,7 @@ export class EcsStack extends cdk.Stack { ]; const lampiSiirtajaSchedule = appscaling.Schedule.cron(config.lampiSiirtajaCron); + const lampiSiirtajaEnabled = config.lampiSiirtajaEnabled?.toLowerCase() === 'true'; const lampiSiirtajaScheduledFargateTask = new ecsPatterns.ScheduledFargateTask( this, lampiSiirtajaFargateTaskName, @@ -429,7 +430,7 @@ export class EcsStack extends cdk.Stack { //schedule: appscaling.Schedule.expression('rate(5 minutes)'), schedule: lampiSiirtajaSchedule, securityGroups: [ecsSecurityGroup], - enabled: true, + enabled: lampiSiirtajaEnabled, } ); diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index a1971dc..7254282 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -50,7 +50,7 @@ const copyTableToS3 = (schemaName: string, tableName: string) => { 'select * from ${schemaName}.${tableName}', aws_commons.create_s3_uri( '${ovaraLampiSiirtajaBucket}', - '${schemaName}.${tableName}.csv', + '${tableName}.csv', 'eu-west-1' ), options := 'FORMAT CSV, HEADER TRUE' @@ -124,7 +124,7 @@ const main = async () => { copyTableToS3(schemaName, tableName); console.log(`Scheman "${schemaName}" taulun "${tableName}" siirtäminen tietokannasta Ovaran S3-ämpäriin valmistui`); - const sourceKey = `${schemaName}.${tableName}.csv`; + const sourceKey = `${tableName}.csv`; console.log(`Aloitetaan scheman "${schemaName}" taulun "${tableName}" siirtäminen Ovaran S3-ämpäristä Lammen S3-ämpäriin (key: "${sourceKey}")`); const manifestItem = await copyFileToLampi(sourceKey); console.log(`Scheman "${schemaName}" taulun "${tableName}" siirtäminen Ovaran S3-ämpäristä Lammen S3-ämpäriin valmistui (key: "${sourceKey}")`); From e691433fa00081e6717eee49a8e0624a9827b3ef Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 9 Jan 2025 16:40:50 +0200 Subject: [PATCH 23/28] stg-scheman sijaan dw-schema Lampeen --- lampi-siirtaja-container/lampi-siirtaja/src/run.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index 7254282..e40ab1b 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -110,7 +110,7 @@ const main = async () => { console.log(`Aloitetaan Ovaran tietojen kopiointi Lampeen`); console.log(`Tietokannan konfiguraatio: ${dbUri}`.replace(dbPassword, '*****')); - const schemaNames = ['pub', 'stg']; + const schemaNames = ['pub', 'dw']; const manifest: ManifestItem[] = []; for (const schemaName of schemaNames) { From 5a480bd8c1a282f8311a18452d06db1df60941ac Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 9 Jan 2025 18:23:21 +0200 Subject: [PATCH 24/28] Debug-lokitusta --- lampi-siirtaja-container/lampi-siirtaja/src/run.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index e40ab1b..fb78023 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -59,6 +59,7 @@ const copyTableToS3 = (schemaName: string, tableName: string) => { const pgClient = new PgClient(); pgClient.connectSync(dbUri); const queryResult = pgClient.querySync(sql); + console.log(`QueryResult: ${JSON.stringify(queryResult, null, 4)}`); console.log(`Taulun ${tableName} kopioinnin tulos | Rivien määrä: ${queryResult.rows_uploaded} | Tiedostojen määrä: ${queryResult.files_uploaded} | Tiedostojen koko: ${queryResult.bytes_uploaded}`); if(queryResult.files_uploaded !== '1') console.error(`Scheman ${schemaName} taulusta ${tableName} muodostui S3-ämpäriin useampi kuin yksi tiedosto (${queryResult.files_uploaded})`); } From 49ed6d568b2664c118200a81af64e4957917d01b Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 9 Jan 2025 18:31:30 +0200 Subject: [PATCH 25/28] S3 multipart upload --- .../lampi-siirtaja/package-lock.json | 2649 +++++++++++------ .../lampi-siirtaja/package.json | 1 + .../lampi-siirtaja/src/run.ts | 29 +- 3 files changed, 1845 insertions(+), 834 deletions(-) diff --git a/lampi-siirtaja-container/lampi-siirtaja/package-lock.json b/lampi-siirtaja-container/lampi-siirtaja/package-lock.json index 3a37901..ab1f897 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/package-lock.json +++ b/lampi-siirtaja-container/lampi-siirtaja/package-lock.json @@ -10,6 +10,7 @@ "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.715.0", + "@aws-sdk/lib-storage": "^3.723.0", "@smithy/types": "^3.7.2", "bindings": "^1.5.0", "file-uri-to-path": "^1.0.0", @@ -233,1404 +234,2268 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.715.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.715.0.tgz", - "integrity": "sha512-7Qq8nW+/Yf+1Prjbwt2I6BsxhY28V6mbi8WF0n8m4qbC+y9wvreNuGv0PgzuLpfcP1bacB1ItW/Wkwuw2mau0w==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.723.0.tgz", + "integrity": "sha512-uJkSBWeAbEORApCSc8ZlD8nmmJVZnklauSR+GLnG19ZiHQl3ib6IzT4zdnMHrrIXqVttwkyC8eT703ZUDVaacw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.714.0", - "@aws-sdk/client-sts": "3.714.0", - "@aws-sdk/core": "3.714.0", - "@aws-sdk/credential-provider-node": "3.714.0", - "@aws-sdk/middleware-bucket-endpoint": "3.714.0", - "@aws-sdk/middleware-expect-continue": "3.714.0", - "@aws-sdk/middleware-flexible-checksums": "3.715.0", - "@aws-sdk/middleware-host-header": "3.714.0", - "@aws-sdk/middleware-location-constraint": "3.714.0", - "@aws-sdk/middleware-logger": "3.714.0", - "@aws-sdk/middleware-recursion-detection": "3.714.0", - "@aws-sdk/middleware-sdk-s3": "3.714.0", - "@aws-sdk/middleware-ssec": "3.714.0", - "@aws-sdk/middleware-user-agent": "3.714.0", - "@aws-sdk/region-config-resolver": "3.714.0", - "@aws-sdk/signature-v4-multi-region": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-endpoints": "3.714.0", - "@aws-sdk/util-user-agent-browser": "3.714.0", - "@aws-sdk/util-user-agent-node": "3.714.0", - "@aws-sdk/xml-builder": "3.709.0", - "@smithy/config-resolver": "^3.0.13", - "@smithy/core": "^2.5.5", - "@smithy/eventstream-serde-browser": "^3.0.14", - "@smithy/eventstream-serde-config-resolver": "^3.0.11", - "@smithy/eventstream-serde-node": "^3.0.13", - "@smithy/fetch-http-handler": "^4.1.2", - "@smithy/hash-blob-browser": "^3.1.10", - "@smithy/hash-node": "^3.0.11", - "@smithy/hash-stream-node": "^3.1.10", - "@smithy/invalid-dependency": "^3.0.11", - "@smithy/md5-js": "^3.0.11", - "@smithy/middleware-content-length": "^3.0.13", - "@smithy/middleware-endpoint": "^3.2.5", - "@smithy/middleware-retry": "^3.0.30", - "@smithy/middleware-serde": "^3.0.11", - "@smithy/middleware-stack": "^3.0.11", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/node-http-handler": "^3.3.2", - "@smithy/protocol-http": "^4.1.8", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/url-parser": "^3.0.11", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.30", - "@smithy/util-defaults-mode-node": "^3.0.30", - "@smithy/util-endpoints": "^2.1.7", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-retry": "^3.0.11", - "@smithy/util-stream": "^3.3.2", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.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-bucket-endpoint": "3.723.0", + "@aws-sdk/middleware-expect-continue": "3.723.0", + "@aws-sdk/middleware-flexible-checksums": "3.723.0", + "@aws-sdk/middleware-host-header": "3.723.0", + "@aws-sdk/middleware-location-constraint": "3.723.0", + "@aws-sdk/middleware-logger": "3.723.0", + "@aws-sdk/middleware-recursion-detection": "3.723.0", + "@aws-sdk/middleware-sdk-s3": "3.723.0", + "@aws-sdk/middleware-ssec": "3.723.0", + "@aws-sdk/middleware-user-agent": "3.723.0", + "@aws-sdk/region-config-resolver": "3.723.0", + "@aws-sdk/signature-v4-multi-region": "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", + "@aws-sdk/xml-builder": "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-blob-browser": "^4.0.0", + "@smithy/hash-node": "^4.0.0", + "@smithy/hash-stream-node": "^4.0.0", + "@smithy/invalid-dependency": "^4.0.0", + "@smithy/md5-js": "^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-stream": "^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-s3/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.714.0.tgz", - "integrity": "sha512-pFtjY5Ga91qrryo0UfbjetdT2p9rOgtHofogAeEuGjxx7/rupBpdlW0WDOtD/7jhmbhM8WZEr6aH7GLzzkKfCA==", + "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.714.0", - "@aws-sdk/middleware-host-header": "3.714.0", - "@aws-sdk/middleware-logger": "3.714.0", - "@aws-sdk/middleware-recursion-detection": "3.714.0", - "@aws-sdk/middleware-user-agent": "3.714.0", - "@aws-sdk/region-config-resolver": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-endpoints": "3.714.0", - "@aws-sdk/util-user-agent-browser": "3.714.0", - "@aws-sdk/util-user-agent-node": "3.714.0", - "@smithy/config-resolver": "^3.0.13", - "@smithy/core": "^2.5.5", - "@smithy/fetch-http-handler": "^4.1.2", - "@smithy/hash-node": "^3.0.11", - "@smithy/invalid-dependency": "^3.0.11", - "@smithy/middleware-content-length": "^3.0.13", - "@smithy/middleware-endpoint": "^3.2.5", - "@smithy/middleware-retry": "^3.0.30", - "@smithy/middleware-serde": "^3.0.11", - "@smithy/middleware-stack": "^3.0.11", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/node-http-handler": "^3.3.2", - "@smithy/protocol-http": "^4.1.8", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/url-parser": "^3.0.11", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.30", - "@smithy/util-defaults-mode-node": "^3.0.30", - "@smithy/util-endpoints": "^2.1.7", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-retry": "^3.0.11", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.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": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.714.0.tgz", - "integrity": "sha512-dMvpPUaL3v01psPY1ZyCzQ/w2tOgQTH1if0zBF5r2q7Vc0oOPzbBZgNAhG1bDWlRCBW0iXmoqRFoWUwQ5rtx+A==", + "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", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.714.0", - "@aws-sdk/credential-provider-node": "3.714.0", - "@aws-sdk/middleware-host-header": "3.714.0", - "@aws-sdk/middleware-logger": "3.714.0", - "@aws-sdk/middleware-recursion-detection": "3.714.0", - "@aws-sdk/middleware-user-agent": "3.714.0", - "@aws-sdk/region-config-resolver": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-endpoints": "3.714.0", - "@aws-sdk/util-user-agent-browser": "3.714.0", - "@aws-sdk/util-user-agent-node": "3.714.0", - "@smithy/config-resolver": "^3.0.13", - "@smithy/core": "^2.5.5", - "@smithy/fetch-http-handler": "^4.1.2", - "@smithy/hash-node": "^3.0.11", - "@smithy/invalid-dependency": "^3.0.11", - "@smithy/middleware-content-length": "^3.0.13", - "@smithy/middleware-endpoint": "^3.2.5", - "@smithy/middleware-retry": "^3.0.30", - "@smithy/middleware-serde": "^3.0.11", - "@smithy/middleware-stack": "^3.0.11", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/node-http-handler": "^3.3.2", - "@smithy/protocol-http": "^4.1.8", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/url-parser": "^3.0.11", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.30", - "@smithy/util-defaults-mode-node": "^3.0.30", - "@smithy/util-endpoints": "^2.1.7", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-retry": "^3.0.11", - "@smithy/util-utf8": "^3.0.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/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.714.0" + "engines": { + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.714.0.tgz", - "integrity": "sha512-ThcXgolapPsOzeavJF4Am312umFyoFBBeiTYD8PQGIiYkbJi4hXcjoWacmtkq6moMmMZSP9iK/ellls7vwY2JQ==", + "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", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.714.0", - "@aws-sdk/core": "3.714.0", - "@aws-sdk/credential-provider-node": "3.714.0", - "@aws-sdk/middleware-host-header": "3.714.0", - "@aws-sdk/middleware-logger": "3.714.0", - "@aws-sdk/middleware-recursion-detection": "3.714.0", - "@aws-sdk/middleware-user-agent": "3.714.0", - "@aws-sdk/region-config-resolver": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-endpoints": "3.714.0", - "@aws-sdk/util-user-agent-browser": "3.714.0", - "@aws-sdk/util-user-agent-node": "3.714.0", - "@smithy/config-resolver": "^3.0.13", - "@smithy/core": "^2.5.5", - "@smithy/fetch-http-handler": "^4.1.2", - "@smithy/hash-node": "^3.0.11", - "@smithy/invalid-dependency": "^3.0.11", - "@smithy/middleware-content-length": "^3.0.13", - "@smithy/middleware-endpoint": "^3.2.5", - "@smithy/middleware-retry": "^3.0.30", - "@smithy/middleware-serde": "^3.0.11", - "@smithy/middleware-stack": "^3.0.11", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/node-http-handler": "^3.3.2", - "@smithy/protocol-http": "^4.1.8", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/url-parser": "^3.0.11", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.30", - "@smithy/util-defaults-mode-node": "^3.0.30", - "@smithy/util-endpoints": "^2.1.7", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-retry": "^3.0.11", - "@smithy/util-utf8": "^3.0.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/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/core": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.714.0.tgz", - "integrity": "sha512-TlZ50d8MEPVp9O03SvisOmcmxjxhMDKHJJcrBgYjgDej6QmNfiFwtCRkReXDdkEeXP29ehMs7uPXtmVvPqziYw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/core": "^2.5.5", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/property-provider": "^3.1.11", - "@smithy/protocol-http": "^4.1.8", - "@smithy/signature-v4": "^4.2.4", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/util-middleware": "^3.0.11", + "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": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.714.0.tgz", - "integrity": "sha512-0S4nKE1a+EHXAInXUeuWkyzVnXzmwIbwLStVidAIoyl6sJF8xGdw+r3AaoTr7p0YXzdoDUsn3wBTCA6ZwgXVbA==", + "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.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/property-provider": "^3.1.11", - "@smithy/types": "^3.7.2", + "@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": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.714.0.tgz", - "integrity": "sha512-1AXEfUSQUQg+x/DpH1XJhjf2yEgTHHatM3cvYu7FZMhRXF28Q5OJDbEFPfdqrK+vmCiYRWhszDb+zuUIvz46bw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/fetch-http-handler": "^4.1.2", - "@smithy/node-http-handler": "^3.3.2", - "@smithy/property-provider": "^3.1.11", - "@smithy/protocol-http": "^4.1.8", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/util-stream": "^3.3.2", + "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": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.714.0.tgz", - "integrity": "sha512-w5wOcgBngfcvVev5wnYWXoc/W2ewVmGJkfRdGquhFt8pkUxktyd8eXehqkP7u31SONVlgy96EFTdSCzWpTrqOw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.714.0", - "@aws-sdk/credential-provider-env": "3.714.0", - "@aws-sdk/credential-provider-http": "3.714.0", - "@aws-sdk/credential-provider-process": "3.714.0", - "@aws-sdk/credential-provider-sso": "3.714.0", - "@aws-sdk/credential-provider-web-identity": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/credential-provider-imds": "^3.2.8", - "@smithy/property-provider": "^3.1.11", - "@smithy/shared-ini-file-loader": "^3.1.12", - "@smithy/types": "^3.7.2", + "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": ">=16.0.0" + "node": ">=18.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.714.0" + "@aws-sdk/client-sts": "^3.723.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.714.0.tgz", - "integrity": "sha512-ebho1HYNKzaw0ZfbI9kEicSW8J7tsOoV6EJajsjfFnuP+GY9J5Oi4759GEq1Qqj7GxIhrySOZFzif/hxAXPWtQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.714.0", - "@aws-sdk/credential-provider-http": "3.714.0", - "@aws-sdk/credential-provider-ini": "3.714.0", - "@aws-sdk/credential-provider-process": "3.714.0", - "@aws-sdk/credential-provider-sso": "3.714.0", - "@aws-sdk/credential-provider-web-identity": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/credential-provider-imds": "^3.2.8", - "@smithy/property-provider": "^3.1.11", - "@smithy/shared-ini-file-loader": "^3.1.12", - "@smithy/types": "^3.7.2", + "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": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.714.0.tgz", - "integrity": "sha512-mHM+zYJDUiXggBx4YvQgMOhbkV07KUib8/jWPnAZbUJcRncN/yevAp/WNocjUN4VaBWkooJUgoTET/okRK+TCQ==", + "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.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/property-provider": "^3.1.11", - "@smithy/shared-ini-file-loader": "^3.1.12", - "@smithy/types": "^3.7.2", + "@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": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.714.0.tgz", - "integrity": "sha512-LQyHUQd+/A0PO96m6/A3KeekRplRpG9AmwLn8VPknlmACAhhbWHehzerCTd42V8dClf5pigr25/aVqh/2p/sRw==", + "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.714.0", - "@aws-sdk/core": "3.714.0", - "@aws-sdk/token-providers": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/property-provider": "^3.1.11", - "@smithy/shared-ini-file-loader": "^3.1.12", - "@smithy/types": "^3.7.2", + "@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": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.714.0.tgz", - "integrity": "sha512-piKfEJvLrGZ0bH4NPO19d1dtfCZi2p6YJUK/9vRCD1rvJidOuHNeUwIcxTnkIMovQHX12rZVvU9ub0C3CwegUQ==", + "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.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/property-provider": "^3.1.11", - "@smithy/types": "^3.7.2", + "@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": ">=16.0.0" + "node": ">=18.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.714.0" + "@aws-sdk/client-sts": "^3.723.0" } }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.714.0.tgz", - "integrity": "sha512-I/xSOskiseJJ8i183Z522BgqbgYzLKP7jGcg2Qeib/IWoG2IP+9DH8pwqagKaPAycyswtnoKBJiiFXY43n0CkA==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-arn-parser": "3.693.0", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", - "@smithy/util-config-provider": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.714.0.tgz", - "integrity": "sha512-rlzsXdG8Lzo4Qpl35ZnpOBAWlzvDHpP9++0AXoUwAJA0QmMm7auIRmgxJuNj91VwT9h15ZU6xjU4S7fJl4W0+w==", + "node_modules/@aws-sdk/lib-storage": { + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.723.0.tgz", + "integrity": "sha512-GaRahX+p7H0oYiuPojEhORizosZQ2bgLlv+LxUXY54nzAQKdwKmSjAFO7My9eJOfMlSmdlQvK5a35sar8U2lUQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", + "@smithy/abort-controller": "^4.0.0", + "@smithy/middleware-endpoint": "^4.0.0", + "@smithy/smithy-client": "^4.0.0", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.723.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.715.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.715.0.tgz", - "integrity": "sha512-oDUxpwBZqQ0x7c9typmaX7cHxFsyxwApQPuPYV4hSTBsLtqpDc7KtyV+lgxQxkgoHya6P37+Wwllr4FjcujXwg==", + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.723.0.tgz", + "integrity": "sha512-OmKSXwSlXyW+zg+xq4hUf7V4VF5/fa4LHu1JzeBlomrKX3/NnqhnJn7760GXoDr16AT+dP7nvv35Ofp91umEAg==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@aws-crypto/crc32c": "5.2.0", - "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-stream": "^3.3.2", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/types": "3.723.0", + "@aws-sdk/util-arn-parser": "3.723.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-config-provider": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.714.0.tgz", - "integrity": "sha512-6l68kjNrh5QC8FGX3I3geBDavWN5Tg1RLHJ2HLA8ByGBtJyCwnz3hEkKfaxn0bBx0hF9DzbfjEOUF6cDqy2Kjg==", + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.714.0.tgz", - "integrity": "sha512-MX7M+V+FblujKck3fyuzePVIAy9530gY719IiSxV6uN1qLHl7VDJxNblpF/KpXakD6rOg8OpvtmqsXj9aBMftw==", + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.723.0.tgz", + "integrity": "sha512-w/O0EkIzkiqvGu7U8Ke7tue0V0HYM5dZQrz6nVU+R8T2LddWJ+njEIHU4Wh8aHPLQXdZA5NQumv0xLPdEutykw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/types": "^3.7.2", + "@aws-sdk/types": "3.723.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.714.0.tgz", - "integrity": "sha512-RkqHlMvQWUaRklU1bMfUuBvdWwxgUtEqpADaHXlGVj3vtEY2UgBjy+57CveC4MByqKIunNvVHBBbjrGVtwY7Lg==", + "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.714.0.tgz", - "integrity": "sha512-AVU5ixnh93nqtsfgNc284oXsXaadyHGPHpql/jwgaaqQfEXjS/1/j3j9E/vpacfTTz2Vzo7hAOjnvrOXSEVDaA==", + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.723.0.tgz", + "integrity": "sha512-JY76mrUCLa0FHeMZp8X9+KK6uEuZaRZaQrlgq6zkXX/3udukH0T3YdFC+Y9uw5ddbiwZ5+KwgmlhnPpiXKfP4g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-stream": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.714.0.tgz", - "integrity": "sha512-YYhX+JefwwEsUxYs0YXn5Mfb97Lo3hwnk3qRIlUkcotCsHYwgCX4jVWjeh8HK+RFFx3Krbh/8/YmzTkI/Z4Z9Q==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-arn-parser": "3.693.0", - "@smithy/core": "^2.5.5", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/protocol-http": "^4.1.8", - "@smithy/signature-v4": "^4.2.4", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-stream": "^3.3.2", - "@smithy/util-utf8": "^3.0.0", + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.714.0.tgz", - "integrity": "sha512-RkK8REAVwNUQmYbIDRw8eYbMJ8F1Rw4C9mlME4BBMhFlelGcD3ErU2ce24moQbDxBjNwHNESmIqgmdQk93CDCQ==", + "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.714.0", - "@smithy/types": "^3.7.2", + "@aws-sdk/types": "3.723.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.714.0.tgz", - "integrity": "sha512-OgLjJf7WxUqA2OgiqGCfIc68gsbXlIG8LjObBiF0qlMStAd0L23AGuK5VmYinJlsle9qUpwQvWgKFKaDgdQXgA==", + "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-endpoints": "3.714.0", - "@smithy/core": "^2.5.5", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.714.0.tgz", - "integrity": "sha512-HJzsQxgMOAzZrbf/YIqEx30or4tZK1oNAk6Wm6xecUQx+23JXIaePRu1YFUOLBBERQ4QBPpISFurZWBMZ5ibAw==", + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.723.0.tgz", + "integrity": "sha512-inp9tyrdRWjGOMu1rzli8i2gTo0P4X6L7nNRXNTKfyPNZcBimZ4H0H1B671JofSI5isaklVy5r4pvv2VjjLSHw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/types": "^3.7.2", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.11", + "@aws-sdk/types": "3.723.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.714.0.tgz", - "integrity": "sha512-xIQyx0ILRtJZnSUPpMsWkwASuFDYh9GPnr7p+pmfsV5KtRQluHuoH1wPkPTeNuTnAl7RDHUOmcOgTPUCDxiKxg==", + "node_modules/@aws-sdk/middleware-location-constraint/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/protocol-http": "^4.1.8", - "@smithy/signature-v4": "^4.2.4", - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.714.0.tgz", - "integrity": "sha512-vKN064aLE3kl+Zl16Ony3jltHnMddMBT7JRkP1L+lLywhA0PcAKxpdvComul/sTBWnbnwLnaS5NsDUhcWySH8A==", + "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.714.0", - "@smithy/property-provider": "^3.1.11", - "@smithy/shared-ini-file-loader": "^3.1.12", - "@smithy/types": "^3.7.2", + "@aws-sdk/types": "3.723.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.714.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/types": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.714.0.tgz", - "integrity": "sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA==", + "node_modules/@aws-sdk/middleware-logger/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.693.0.tgz", - "integrity": "sha512-WC8x6ca+NRrtpAH64rWu+ryDZI3HuLwlEr8EU6/dbC/pt+r/zC0PBoC15VEygUaBA+isppCikQpGyEDu0Yj7gQ==", + "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": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.714.0.tgz", - "integrity": "sha512-Xv+Z2lhe7w7ZZRsgBwBMZgGTVmS+dkkj2S13uNHAx9lhB5ovM8PhK5G/j28xYf6vIibeuHkRAbb7/ozdZIGR+A==", + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/types": "^3.7.2", - "@smithy/util-endpoints": "^2.1.7", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.693.0.tgz", - "integrity": "sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==", + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.723.0.tgz", + "integrity": "sha512-wfjOvNJVp8LDWhq4wO5jtSMb8Vgf4tNlR7QTEQfoYc6AGU3WlK5xyUQcpfcpwytEhQTN9u0cJLQpSyXDO+qSCw==", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/core": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@aws-sdk/util-arn-parser": "3.723.0", + "@smithy/core": "^3.0.0", + "@smithy/node-config-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-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-stream": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.714.0.tgz", - "integrity": "sha512-OdJJ03cP9/MgIVToPJPCPUImbpZzTcwdIgbXC0tUQPJhbD7b7cB4LdnkhNHko+MptpOrCq4CPY/33EpOjRdofw==", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/types": "^3.7.2", - "bowser": "^2.11.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.714.0.tgz", - "integrity": "sha512-x8JoZb7yBEbNUmHUNoRAP4L++6A5uZCVf2yFLw8CZKpH4q+Cf1a68ou48OfnND3H0rbBnLXc/3uOlseRvd57/g==", + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.723.0.tgz", + "integrity": "sha512-Bs+8RAeSMik6ZYCGSDJzJieGsDDh2fRbh1HQG94T8kpwBXVxMYihm6e9Xp2cyl+w9fyyCnh0IdCKChP/DvrdhA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/types": "^3.7.2", + "@aws-sdk/types": "3.723.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.709.0.tgz", - "integrity": "sha512-2GPCwlNxeHspoK/Mc8nbk9cBOkSpp3j2SJUQmFnyQK6V/pR6II2oPRyZkMomug1Rc10hqlBHByMecq4zhV2uUw==", + "node_modules/@aws-sdk/middleware-ssec/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/abort-controller": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.9.tgz", - "integrity": "sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw==", + "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": { - "@smithy/types": "^3.7.2", + "@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": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/chunked-blob-reader": { + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/types": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-4.0.0.tgz", - "integrity": "sha512-jSqRnZvkT4egkq/7b6/QRCNXmmYVcHwnJldqJ3IhVpQE2atObVJ137xmGeuGFhjFUr8gCEVAOKwSY79OvpbDaQ==", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@smithy/chunked-blob-reader-native": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.1.tgz", - "integrity": "sha512-VEYtPvh5rs/xlyqpm5NRnfYLZn+q0SRPELbvBV+C/G7IQ+ouTuo+NKKa3ShG5OaFR8NYVMXls9hPYLTvIKKDrQ==", + "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": { - "@smithy/util-base64": "^3.0.0", + "@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/@smithy/config-resolver": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.13.tgz", - "integrity": "sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg==", + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.12", - "@smithy/types": "^3.7.2", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.11", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/core": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.5.tgz", - "integrity": "sha512-G8G/sDDhXA7o0bOvkc7bgai6POuSld/+XhNnWAbpQTpLv2OZPvyqQ58tLPPlz0bSNsXktldDDREIv1LczFeNEw==", + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.723.0.tgz", + "integrity": "sha512-lJlVAa5Sl589qO8lwMLVUtnlF1Q7I+6k1Iomv2goY9d1bRl4q2N5Pit2qJVr2AMW0sceQXeh23i2a/CKOqVAdg==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^3.0.11", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-stream": "^3.3.2", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/middleware-sdk-s3": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/signature-v4": "^5.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/credential-provider-imds": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.8.tgz", - "integrity": "sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw==", + "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.12", - "@smithy/property-provider": "^3.1.11", - "@smithy/types": "^3.7.2", - "@smithy/url-parser": "^3.0.11", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-codec": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.10.tgz", - "integrity": "sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ==", + "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-crypto/crc32": "5.2.0", - "@smithy/types": "^3.7.2", - "@smithy/util-hex-encoding": "^3.0.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" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.723.0" } }, - "node_modules/@smithy/eventstream-serde-browser": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.14.tgz", - "integrity": "sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg==", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.13", - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.11.tgz", - "integrity": "sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ==", + "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==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.13.tgz", - "integrity": "sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ==", + "node_modules/@aws-sdk/types/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.723.0.tgz", + "integrity": "sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "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/util-endpoints/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.693.0.tgz", + "integrity": "sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "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/util-user-agent-browser/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "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/util-user-agent-node/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.723.0.tgz", + "integrity": "sha512-5xK2SqGU1mzzsOeemy7cy3fGKxR1sEpUs4pEiIjaT0OIvU+fZaDVUEYWOqsgns6wI90XZEQJlXtI8uAHX/do5Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/xml-builder/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.0.tgz", + "integrity": "sha512-xFNL1ZfluscKiVI0qlPEnu7pL1UgNNIzQdjTPkaO7JCJtIkbArPYNtqbxohuNaQdksJ01Tn1wLbDA5oIp62P8w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/abort-controller/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz", + "integrity": "sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz", + "integrity": "sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.0.0.tgz", + "integrity": "sha512-29pIDlUY/a9+ChJPAarPiD9cU8fBtBh0wFnmnhj7j5AhgMzc+uyXdfzmziH6xx2jzw54waSP3HfnFkTANZuPYA==", + "license": "Apache-2.0", + "dependencies": { + "@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/@smithy/config-resolver/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.0.0.tgz", + "integrity": "sha512-pKaas7RWvPljJ8uByCeBa10rtbVJCy4N/Fr7OSPxFezcyG0SQuXWnESZqzXj7m2+A+kPzG6fKyP4wrKidl2Ikg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-stream": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.0.tgz", + "integrity": "sha512-+hTShyZHiq2AVFOxJja3k6O17DKU6TaZbwr2y1OH5HQtUw2a+7O3mMR+10LVmc39ef72SAj+uFX0IW9rJGaLQQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/url-parser": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.0.tgz", + "integrity": "sha512-YvKUUOo3qehqOxNrkax3YKXF1v0ff475FhDgbBmF8Bo0oOOpsXZyltjQnwBzIeTYo446ZPV85KM3kY4YoxUNOg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-codec/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.0.tgz", + "integrity": "sha512-YRwsVPJU/DN1VshH8tKs4CxY66HLhmDSw6oZDM2LVIgHODsqpJBcRdEfcnb97ULmgyFrWxTjL9UXpyKPuJXQRA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.0.0.tgz", + "integrity": "sha512-OZ/aK9LHsZch0VZ6bnf+dPD80kJripnZnkc36QNymnej49VkHJLSNJxsM0pwt53FA6+fUYYMMT0DVDTH1Msq2g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.0.tgz", + "integrity": "sha512-10b4F+zXbzxZHKuP+m2st/C+rEGK7FUut1dNSRw6DQCCfaTUecJGCoHPCmk2CRvuMTzunVpS1BKLMk839318VQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.0.tgz", + "integrity": "sha512-HEhZpf731J3oFYJtaKO3dnV6stIjA+lJwXuXGu/WbSgicDWGAOITUwTt9ynldEFsnFkNu9b/C4ebXnJA16xSCA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^4.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.0.tgz", + "integrity": "sha512-jUEq+4056uqsDLRqQb1fm48rrSMBYcBxVvODfiP37ORcV5n9xWJQsINWcIffyYxWTM5K0Y/GOfhSQGDtWpAPpQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.0.0", + "@smithy/querystring-builder": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.0.tgz", + "integrity": "sha512-JBXNC2YCDlm9uqP/eQJbK6auahAaq4HndJC2PURxWPRUDjbXDRJS5Npfi+7zSxKOSOWxXCG/3dLE5D8znI9l/w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/chunked-blob-reader": "^5.0.0", + "@smithy/chunked-blob-reader-native": "^4.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-blob-browser/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.0.tgz", + "integrity": "sha512-25OxGYGnG3JPEOTk4iFE03bfmoC6GXUQ4L13z4cNdsS3mkncH22AGSDRfKwwEqutNUxXQZWVy9f72Fm59C9qlg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.0.tgz", + "integrity": "sha512-MRgYnr9atik1c02mdgjjJkNK5A8IvRRlpa/zOdA8PxmQtBCwjODKzobyI166uamxrL20wg7vuKoVSAjQU4IXfw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-stream-node/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.0.tgz", + "integrity": "sha512-0GTyet02HX/sPctEhOExY+3HI7hwkVwOoJg0XnItTJ+Xw7JMuL9FOxALTmKVIV6+wg0kF6veLeg72hVSbD9UCw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", + "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.0.tgz", + "integrity": "sha512-NUjbK+M1RNd0J/mM3eh4Yw5SfUrJBsIAea/H5dvc8tirxWFHFDUHJ/CK40/vtY3niiYnygWjZZ+ISydray6Raw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/md5-js/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.0.tgz", + "integrity": "sha512-nM1RJqLwkSCidumGK8WwNEZ0a0D/4LkwqdPna+QmHrdPoAK6WGLyZFosdMpsAW1OIbDLWGa+r37Mo4Vth4S4kQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.0.tgz", + "integrity": "sha512-/f6z5SqUurmqemhBZNhM0c+C7QW0AY/zJpic//sbdu26q98HSPAI/xvzStjYq+UhtWeAe/jaX6gamdL/2r3W1g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.0.0", + "@smithy/middleware-serde": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/shared-ini-file-loader": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/url-parser": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.0.tgz", + "integrity": "sha512-K6tsFp3Ik44H3694a+LWoXLV8mqy8zn6/vTw2feU72MaIzi51EHMVNNxxpL6e2GI6oxw8FFRGWgGn8+wQRrHZQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/service-error-classification": "^4.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-retry": "^4.0.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.0.tgz", + "integrity": "sha512-aW4Zo8Cm988RCvhysErzqrQ4YPKgZFhajvgPoZnsWIDaZfT419J17Ahr13Lul3kqGad2dCz7YOrXd7r+UAEj/w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.0.tgz", + "integrity": "sha512-4NFaX88RmgVrCyJv/3RsSdqMwxzI/EQa8nvhUDVxmLUMRS2JUdHnliD6IwKuqIwIzz+E1aZK3EhSHUM4HXp3ww==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.0.tgz", + "integrity": "sha512-Crp9rg1ewjqgM2i7pWSpNhfbBa0usyKGDVQLEXTOpu6trFqq3BFLLCgbCE1S18h6mxqKnOqUONq3nWOxUk75XA==", + "license": "Apache-2.0", + "dependencies": { + "@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/@smithy/node-config-provider/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.0.tgz", + "integrity": "sha512-WvumtEaFyxaI95zmj6eYlF/vCFCKNyru3P/UUHCUS9BjvajUtNckH2cY3bBfi+qqMPX5gha4g26lcOlE/wPz/Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/querystring-builder": "^4.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.13", - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.13.tgz", - "integrity": "sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw==", + "node_modules/@smithy/property-provider": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.0.tgz", + "integrity": "sha512-AJSvY1k3SdM0stGrIjL8/FIjXO7X9I7KkznXDmr76RGz+yvaDHLsLm2hSHyzAlmwEQnHaafSU2dwaV0JcnR/4w==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^3.1.10", - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/fetch-http-handler": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.2.tgz", - "integrity": "sha512-R7rU7Ae3ItU4rC0c5mB2sP5mJNbCfoDc8I5XlYjIZnquyUwec7fEo78F6DA3SmgJgkU1qTMcZJuGblxZsl10ZA==", + "node_modules/@smithy/property-provider/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.8", - "@smithy/querystring-builder": "^3.0.11", - "@smithy/types": "^3.7.2", - "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@smithy/hash-blob-browser": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.10.tgz", - "integrity": "sha512-elwslXOoNunmfS0fh55jHggyhccobFkexLYC1ZeZ1xP2BTSrcIBaHV2b4xUQOdctrSNOpMqOZH1r2XzWTEhyfA==", + "node_modules/@smithy/protocol-http": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.0.0.tgz", + "integrity": "sha512-laAcIHWq9GQ5VdAS71DUrCj5HUHZ/89Ee+HRTLhFR5/E3toBlnZfPG+kqBajwfEB5aSdRuKslfzl5Dzrn3pr8A==", "license": "Apache-2.0", "dependencies": { - "@smithy/chunked-blob-reader": "^4.0.0", - "@smithy/chunked-blob-reader-native": "^3.0.1", - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@smithy/hash-node": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.11.tgz", - "integrity": "sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA==", + "node_modules/@smithy/protocol-http/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/hash-stream-node": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.10.tgz", - "integrity": "sha512-olomK/jZQ93OMayW1zfTHwcbwBdhcZOHsyWyiZ9h9IXvc1mCD/VuvzbLb3Gy/qNJwI4MANPLctTp2BucV2oU/Q==", + "node_modules/@smithy/querystring-builder": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.0.tgz", + "integrity": "sha512-kMqPDRf+/hwm+Dmk8AQCaYTJxNWWpNdJJteeMm0jwDbmRDqSqHQ7oLEVzvOnbWJu1poVtOhv6v7jsbyx9JASsw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", - "@smithy/util-utf8": "^3.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/invalid-dependency": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.11.tgz", - "integrity": "sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ==", + "node_modules/@smithy/querystring-builder/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "node_modules/@smithy/querystring-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.0.tgz", + "integrity": "sha512-SbogL1PNEmm28ya0eK2S0EZEbYwe0qpaqSGrODm+uYS6dQ7pekPLVNXjBRuuLIAT26ZF2wTsp6X7AVRBNZd8qw==", "license": "Apache-2.0", "dependencies": { + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/md5-js": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.11.tgz", - "integrity": "sha512-3NM0L3i2Zm4bbgG6Ymi9NBcxXhryi3uE8fIfHJZIOfZVxOkGdjdgjR9A06SFIZCfnEIWKXZdm6Yq5/aPXFFhsQ==", + "node_modules/@smithy/querystring-parser/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-content-length": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.13.tgz", - "integrity": "sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw==", + "node_modules/@smithy/service-error-classification": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.0.tgz", + "integrity": "sha512-hIZreT6aXSG0PK/psT1S+kfeGTnYnRRlf7rU3yDmH/crSVjTbS/5h5w2J7eO2ODrQb3xfhJcYxQBREdwsZk6TA==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", - "tslib": "^2.6.2" + "@smithy/types": "^4.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-endpoint": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.5.tgz", - "integrity": "sha512-VhJNs/s/lyx4weiZdXSloBgoLoS8osV0dKIain8nGmx7of3QFKu5BSdEuk1z/U8x9iwes1i+XCiNusEvuK1ijg==", + "node_modules/@smithy/service-error-classification/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^2.5.5", - "@smithy/middleware-serde": "^3.0.11", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/shared-ini-file-loader": "^3.1.12", - "@smithy/types": "^3.7.2", - "@smithy/url-parser": "^3.0.11", - "@smithy/util-middleware": "^3.0.11", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-retry": { - "version": "3.0.30", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.30.tgz", - "integrity": "sha512-6323RL2BvAR3VQpTjHpa52kH/iSHyxd/G9ohb2MkBk2Ucu+oMtRXT8yi7KTSIS9nb58aupG6nO0OlXnQOAcvmQ==", + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.0.tgz", + "integrity": "sha512-Ktupe8msp2GPaKKVfiz3NNUNnslJiGGRoVh3BDpm/RChkQ5INQpqmTc2taE0XChNYumNynLfb3keekIPaiaZeg==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.12", - "@smithy/protocol-http": "^4.1.8", - "@smithy/service-error-classification": "^3.0.11", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-retry": "^3.0.11", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-serde": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.11.tgz", - "integrity": "sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw==", + "node_modules/@smithy/shared-ini-file-loader/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-stack": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.11.tgz", - "integrity": "sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA==", + "node_modules/@smithy/signature-v4": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.0.tgz", + "integrity": "sha512-zqcOR1sZTuoA6K3PBNwzu4YgT1pmIwz47tYpgaJjBTfGUIMtcjUaXKtuSKEScdv+0wx45/PbXz0//hk80fky3w==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/node-config-provider": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.12.tgz", - "integrity": "sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ==", + "node_modules/@smithy/signature-v4/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.11", - "@smithy/shared-ini-file-loader": "^3.1.12", - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/node-http-handler": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.2.tgz", - "integrity": "sha512-t4ng1DAd527vlxvOfKFYEe6/QFBcsj7WpNlWTyjorwXXcKw3XlltBGbyHfSJ24QT84nF+agDha9tNYpzmSRZPA==", + "node_modules/@smithy/smithy-client": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.0.0.tgz", + "integrity": "sha512-AgcZ6B+JuqArYioAbaYrCpTCjYsD3/1hPSXntbN2ipsfc4hE+72RFZevUPYgsKxpy3G+QxuLfqm11i3+oX4oSA==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.9", - "@smithy/protocol-http": "^4.1.8", - "@smithy/querystring-builder": "^3.0.11", - "@smithy/types": "^3.7.2", + "@smithy/core": "^3.0.0", + "@smithy/middleware-endpoint": "^4.0.0", + "@smithy/middleware-stack": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-stream": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/property-provider": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.11.tgz", - "integrity": "sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A==", + "node_modules/@smithy/smithy-client/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/protocol-http": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", - "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", + "node_modules/@smithy/types": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", + "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/querystring-builder": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.11.tgz", - "integrity": "sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg==", + "node_modules/@smithy/url-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.0.tgz", + "integrity": "sha512-2iPpuLoH0hCKpLtqVgilHtpPKsmHihbkwBm3h3RPuEctdmuiOlFRZ2ZI8IHSwl0o4ff5IdyyJ0yu/2tS9KpUug==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", - "@smithy/util-uri-escape": "^3.0.0", + "@smithy/querystring-parser": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-parser": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.11.tgz", - "integrity": "sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw==", + "node_modules/@smithy/url-parser/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/service-error-classification": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz", - "integrity": "sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==", + "node_modules/@smithy/util-base64": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", + "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2" + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz", - "integrity": "sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==", + "node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", + "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/signature-v4": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.4.tgz", - "integrity": "sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA==", + "node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", + "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-uri-escape": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/smithy-client": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.5.0.tgz", - "integrity": "sha512-Y8FeOa7gbDfCWf7njrkoRATPa5eNLUEjlJS5z5rXatYuGkCb80LbHcu8AQR8qgAZZaNHCLyo2N+pxPsV7l+ivg==", + "node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", + "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^2.5.5", - "@smithy/middleware-endpoint": "^3.2.5", - "@smithy/middleware-stack": "^3.0.11", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", - "@smithy/util-stream": "^3.3.2", + "@smithy/is-array-buffer": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/types": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", - "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", + "node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", + "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/url-parser": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.11.tgz", - "integrity": "sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw==", + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.0.tgz", + "integrity": "sha512-7wqsXkzaJkpSqV+Ca95pN9yQutXvhaKeCxGGmjWnRGXY1fW/yR7wr1ouNnUYCJuTS8MvmB61xp5Qdj8YMgIA2Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^3.0.11", - "@smithy/types": "^3.7.2", + "@smithy/property-provider": "^4.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "bowser": "^2.11.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/util-body-length-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", - "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.0.tgz", + "integrity": "sha512-P8VK885kiRT6TEtvcQvz+L/+xIhrDhCmM664ToUtrshFSBhwGYaJWlQNAH9fXlMhwnNvR+tmh1KngKJIgQP6bw==", "license": "Apache-2.0", "dependencies": { + "@smithy/config-resolver": "^4.0.0", + "@smithy/credential-provider-imds": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@smithy/util-body-length-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", - "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/util-buffer-from": { + "node_modules/@smithy/util-endpoints": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.0.tgz", + "integrity": "sha512-kyOKbkg77lsIVN2jC08uEWm3s16eK1YdVDyi/nKeBDbUnjR30dmTEga79E5tiu5OEgTAdngNswA9V+L6xa65sA==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/util-config-provider": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", - "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "node_modules/@smithy/util-endpoints/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.30", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.30.tgz", - "integrity": "sha512-nLuGmgfcr0gzm64pqF2UT4SGWVG8UGviAdayDlVzJPNa6Z4lqvpDzdRXmLxtOdEjVlTOEdpZ9dd3ZMMu488mzg==", + "node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", + "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.11", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "bowser": "^2.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.30", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.30.tgz", - "integrity": "sha512-OD63eWoH68vp75mYcfYyuVH+p7Li/mY4sYOROnauDrtObo1cS4uWfsy/zhOTW8F8ZPxQC1ZXZKVxoxvMGUv2Ow==", + "node_modules/@smithy/util-middleware": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.0.tgz", + "integrity": "sha512-ncuvK6ekpDqtASHg7jx3d3nrkD2BsTzUmeVgvtepuHGxtySY8qUlb4SiNRdxHYcv3pL2SwdXs70RwKBU0edW5w==", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^3.0.13", - "@smithy/credential-provider-imds": "^3.2.8", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/property-provider": "^3.1.11", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/util-endpoints": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.7.tgz", - "integrity": "sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw==", + "node_modules/@smithy/util-middleware/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.12", - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "node_modules/@smithy/util-retry": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.0.tgz", + "integrity": "sha512-64WFoC19NVuHh3HQO2QbGw+n6GzQ6VH/drxwXLOU3GDLKxUUzIR9XNm9aTVqh8/7R+y+DgITiv5LpX5XdOy73A==", "license": "Apache-2.0", "dependencies": { + "@smithy/service-error-classification": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/util-middleware": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.11.tgz", - "integrity": "sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow==", + "node_modules/@smithy/util-retry/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/util-retry": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.11.tgz", - "integrity": "sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==", + "node_modules/@smithy/util-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.0.0.tgz", + "integrity": "sha512-ctcLq8Ogi2FQuGy2RxJXGGrozhFEb4p9FawB5SpTNAkNQWbNHcwrGcVSVI3FtdQtkNAINLiEdMnrx+UN/mafvw==", "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^3.0.11", - "@smithy/types": "^3.7.2", + "@smithy/fetch-http-handler": "^5.0.0", + "@smithy/node-http-handler": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/util-stream": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.3.2.tgz", - "integrity": "sha512-sInAqdiVeisUGYAv/FrXpmJ0b4WTFmciTRqzhb7wVuem9BHvhIG7tpiYHLDWrl2stOokNZpTTGqz3mzB2qFwXg==", + "node_modules/@smithy/util-stream/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^4.1.2", - "@smithy/node-http-handler": "^3.3.2", - "@smithy/types": "^3.7.2", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", + "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", + "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-buffer-from": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-waiter": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.2.0.tgz", - "integrity": "sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.1.tgz", + "integrity": "sha512-PiLI5OMSDOw0IyA+lB8Ta0CIgaJuIyXE97Khvrk1G1ab71WbMTruzLKP9j3nS6QJScGirkUVN9sTOhZHU8q3OQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.9", - "@smithy/types": "^3.7.2", + "@smithy/abort-controller": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-waiter/node_modules/@smithy/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.0.0.tgz", + "integrity": "sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@types/node": { @@ -1643,6 +2508,26 @@ "undici-types": "~6.20.0" } }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -1658,6 +2543,25 @@ "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", "license": "MIT" }, + "node_modules/buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/fast-xml-parser": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", @@ -1686,6 +2590,32 @@ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "license": "MIT" }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, "node_modules/libpq": { "version": "1.8.13", "resolved": "https://registry.npmjs.org/libpq/-/libpq-1.8.13.tgz", @@ -1774,6 +2704,59 @@ "node": ">=0.10.0" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-format": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", @@ -1813,6 +2796,12 @@ "dev": true, "license": "MIT" }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, "node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", diff --git a/lampi-siirtaja-container/lampi-siirtaja/package.json b/lampi-siirtaja-container/lampi-siirtaja/package.json index acfb58a..cfe0d12 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/package.json +++ b/lampi-siirtaja-container/lampi-siirtaja/package.json @@ -4,6 +4,7 @@ "main": "dist/run.js", "dependencies": { "@aws-sdk/client-s3": "^3.715.0", + "@aws-sdk/lib-storage": "^3.723.0", "@smithy/types": "^3.7.2", "bindings": "^1.5.0", "file-uri-to-path": "^1.0.0", diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index fb78023..beb78fe 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -1,12 +1,13 @@ import PgClient from 'pg-native'; -import { NodeJsClient } from "@smithy/types"; +import { NodeJsClient } from '@smithy/types'; import { S3Client, GetObjectCommand, GetObjectCommandOutput, PutObjectCommand, - PutObjectCommandOutput, + PutObjectCommandOutput, CompleteMultipartUploadCommandOutput, } from '@aws-sdk/client-s3'; +import { Upload } from '@aws-sdk/lib-storage'; const dbHost = process.env.POSTGRES_HOST; const dbUsername = process.env.DB_USERNAME; @@ -76,6 +77,7 @@ const copyFileToLampi = async (sourceKey: string): Promise => { }), ); + /* const putObjectCommandOutput: PutObjectCommandOutput = await lampiS3Client.send( new PutObjectCommand({ Bucket: lampiS3Bucket, @@ -85,12 +87,31 @@ const copyFileToLampi = async (sourceKey: string): Promise => { ContentType: 'text/csv' }) ); + */ + const target = { + Bucket: lampiS3Bucket, + Key: destinationKey, + Body: getObjectCommandOutput.Body, + ContentLength: getObjectCommandOutput.ContentLength, + ContentType: 'text/csv' + } + + const parallelUploads3 = new Upload({ + client: lampiS3Client, + queueSize: 8, + partSize: 1024, + leavePartsOnError: false, + params: target, + }); + + const completeMultipartUploadCommandOutput: CompleteMultipartUploadCommandOutput = await parallelUploads3.done(); - console.log(`Siirretty ${ovaraLampiSiirtajaBucket}/${sourceKey} => ${lampiS3Bucket}/${destinationKey}`,); + console.log(`Siirretty ${ovaraLampiSiirtajaBucket}/${sourceKey} => ${lampiS3Bucket}/${destinationKey}`); return { key: destinationKey, - s3Version: putObjectCommandOutput.VersionId + s3Version: completeMultipartUploadCommandOutput.VersionId + //s3Version: putObjectCommandOutput.VersionId }; } From 6c7655bd75c7ef57b7c2da634f28a6ef7a89056f Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 9 Jan 2025 18:42:09 +0200 Subject: [PATCH 26/28] Korjattu uploadin part size -> 500MB --- cdk/config/testi.json | 2 +- cdk/config/tuotanto.json | 2 +- lampi-siirtaja-container/lampi-siirtaja/src/run.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cdk/config/testi.json b/cdk/config/testi.json index 1946b89..1e9ae38 100644 --- a/cdk/config/testi.json +++ b/cdk/config/testi.json @@ -31,7 +31,7 @@ "lampiSiirtajaEnabled": "true", "lampiSiirtajaCron": { "minute": "0", - "hour": "5-15/1", + "hour": "0", "weekDay": "2-6/1" } } diff --git a/cdk/config/tuotanto.json b/cdk/config/tuotanto.json index 5c86f1d..816a66f 100644 --- a/cdk/config/tuotanto.json +++ b/cdk/config/tuotanto.json @@ -31,7 +31,7 @@ "lampiSiirtajaEnabled": "false", "lampiSiirtajaCron": { "minute": "0", - "hour": "5-15/1", + "hour": "0", "weekDay": "2-6/1" } } diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index beb78fe..0ca5453 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -98,8 +98,8 @@ const copyFileToLampi = async (sourceKey: string): Promise => { const parallelUploads3 = new Upload({ client: lampiS3Client, - queueSize: 8, - partSize: 1024, + queueSize: 4, // rinnakkaisuus + partSize: 524288000, // 500MB leavePartsOnError: false, params: target, }); From 181dc9d3e0b3d6146923667efa176ba2499a9931 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 9 Jan 2025 19:15:28 +0200 Subject: [PATCH 27/28] =?UTF-8?q?Korjattu=20Lampi-siirron=20lokitusta=20ja?= =?UTF-8?q?=20lis=C3=A4tty=20resursseja?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cdk/lib/ecs-stack.ts | 4 ++-- lampi-siirtaja-container/lampi-siirtaja/package.json | 2 +- lampi-siirtaja-container/lampi-siirtaja/src/run.ts | 9 +++++---- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/cdk/lib/ecs-stack.ts b/cdk/lib/ecs-stack.ts index b7aa8de..c91753b 100644 --- a/cdk/lib/ecs-stack.ts +++ b/cdk/lib/ecs-stack.ts @@ -407,8 +407,8 @@ export class EcsStack extends cdk.Stack { scheduledFargateTaskImageOptions: { image: lampiSiirtajaImage, logDriver: lampiSiirtajaLogDriver, - cpu: 1024, - memoryLimitMiB: 2048, + cpu: 2048, + memoryLimitMiB: 6144, environment: { POSTGRES_HOST: `raportointi.db.${config.publicHostedZone}`, DB_USERNAME: 'app', diff --git a/lampi-siirtaja-container/lampi-siirtaja/package.json b/lampi-siirtaja-container/lampi-siirtaja/package.json index cfe0d12..2b18cd9 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/package.json +++ b/lampi-siirtaja-container/lampi-siirtaja/package.json @@ -21,7 +21,7 @@ "xtend": "^4.0.2" }, "scripts": { - "start": "tsc && node dist/run.js", + "start": "tsc && node --max-old-space-size=4096 dist/run.js", "lint": "eslint . --ext .ts", "test": "echo \"Error: no test specified\" && exit 1" }, diff --git a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts index 0ca5453..cf67ce7 100644 --- a/lampi-siirtaja-container/lampi-siirtaja/src/run.ts +++ b/lampi-siirtaja-container/lampi-siirtaja/src/run.ts @@ -61,8 +61,9 @@ const copyTableToS3 = (schemaName: string, tableName: string) => { pgClient.connectSync(dbUri); const queryResult = pgClient.querySync(sql); console.log(`QueryResult: ${JSON.stringify(queryResult, null, 4)}`); - console.log(`Taulun ${tableName} kopioinnin tulos | Rivien määrä: ${queryResult.rows_uploaded} | Tiedostojen määrä: ${queryResult.files_uploaded} | Tiedostojen koko: ${queryResult.bytes_uploaded}`); - if(queryResult.files_uploaded !== '1') console.error(`Scheman ${schemaName} taulusta ${tableName} muodostui S3-ämpäriin useampi kuin yksi tiedosto (${queryResult.files_uploaded})`); + const result = queryResult[0] || {}; + console.log(`Taulun ${tableName} kopioinnin tulos | Rivien määrä: ${result.rows_uploaded} | Tiedostojen määrä: ${result.files_uploaded} | Tiedostojen koko: ${result.bytes_uploaded}`); + if(result.files_uploaded !== '1') console.error(`Scheman ${schemaName} taulusta ${tableName} muodostui S3-ämpäriin useampi kuin yksi tiedosto (${result.files_uploaded})`); } const copyFileToLampi = async (sourceKey: string): Promise => { @@ -96,7 +97,7 @@ const copyFileToLampi = async (sourceKey: string): Promise => { ContentType: 'text/csv' } - const parallelUploads3 = new Upload({ + const parallelS3Upload = new Upload({ client: lampiS3Client, queueSize: 4, // rinnakkaisuus partSize: 524288000, // 500MB @@ -104,7 +105,7 @@ const copyFileToLampi = async (sourceKey: string): Promise => { params: target, }); - const completeMultipartUploadCommandOutput: CompleteMultipartUploadCommandOutput = await parallelUploads3.done(); + const completeMultipartUploadCommandOutput: CompleteMultipartUploadCommandOutput = await parallelS3Upload.done(); console.log(`Siirretty ${ovaraLampiSiirtajaBucket}/${sourceKey} => ${lampiS3Bucket}/${destinationKey}`); From 14ada2c4f7f679ed84637571d7a5d87bb5175074 Mon Sep 17 00:00:00 2001 From: August Kilponen Date: Thu, 9 Jan 2025 22:23:14 +0200 Subject: [PATCH 28/28] =?UTF-8?q?Versiointi=20pois=20p=C3=A4=C3=A4lt=C3=A4?= =?UTF-8?q?=20Ovara->Lampi-siirron=20=C3=A4mp=C3=A4reist=C3=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cdk/lib/ecs-stack.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/cdk/lib/ecs-stack.ts b/cdk/lib/ecs-stack.ts index c91753b..8899666 100644 --- a/cdk/lib/ecs-stack.ts +++ b/cdk/lib/ecs-stack.ts @@ -135,7 +135,6 @@ export class EcsStack extends cdk.Stack { ), }, }, - //schedule: appscaling.Schedule.expression('rate(5 minutes)'), schedule: dbtRunnerSchedule, securityGroups: [ecsSecurityGroup], enabled: dbtProcessingEnabled, @@ -342,7 +341,7 @@ export class EcsStack extends cdk.Stack { this, `${config.environment}-temp-lampi-siirtaja-bucket-server-access-logs` ), - versioned: true, + versioned: false, } ); @@ -357,7 +356,7 @@ export class EcsStack extends cdk.Stack { this, `${config.environment}-lampi-siirtaja-bucket-server-access-logs` ), - versioned: true, + versioned: false, } ); @@ -427,7 +426,6 @@ export class EcsStack extends cdk.Stack { ), }, }, - //schedule: appscaling.Schedule.expression('rate(5 minutes)'), schedule: lampiSiirtajaSchedule, securityGroups: [ecsSecurityGroup], enabled: lampiSiirtajaEnabled,