From cb208316f9a8b00fecae319a5ebf631f23161076 Mon Sep 17 00:00:00 2001 From: "Michael B. Klein" Date: Fri, 14 Feb 2025 23:18:25 +0000 Subject: [PATCH] Refactor project structure into sub-stacks Add ability to selectively deploy stacks Use cfn-lint instead of sam validate wip wip --- .github/workflows/test-node.yml | 6 +- .github/workflows/validate-template.yml | 8 +- Makefile | 45 +- {node => api}/.mocharc.js | 0 {node => api}/.npmignore | 0 .../dependencies}/package-lock.json | 0 .../dependencies}/package.json | 0 {node => api}/nyc.config.js | 0 {node => api}/package-lock.json | 0 {node => api}/package.json | 2 +- {node => api}/src/api/api-token.js | 0 {node => api}/src/api/opensearch.js | 0 {node => api}/src/api/pagination.js | 0 {node => api}/src/api/request/models.js | 0 {node => api}/src/api/request/pipeline.js | 0 {node => api}/src/api/response/error.js | 0 .../src/api/response/iiif/collection.js | 0 .../src/api/response/iiif/manifest.js | 0 .../response/iiif/presentation-api/items.js | 0 .../iiif/presentation-api/metadata.js | 0 .../presentation-api/placeholder-canvas.js | 0 .../iiif/presentation-api/provider.js | 0 .../src/api/response/opensearch/index.js | 0 {node => api}/src/api/response/transformer.js | 0 {node => api}/src/aws/fetch.js | 0 {node => api}/src/environment.js | 0 .../src/handlers/authorize-document.js | 0 .../src/handlers/get-auth-callback.js | 0 {node => api}/src/handlers/get-auth-login.js | 0 {node => api}/src/handlers/get-auth-logout.js | 0 {node => api}/src/handlers/get-auth-token.js | 0 {node => api}/src/handlers/get-auth-whoami.js | 0 .../src/handlers/get-chat-endpoint.js | 0 .../src/handlers/get-collection-by-id.js | 0 {node => api}/src/handlers/get-collections.js | 0 .../src/handlers/get-file-set-auth.js | 0 .../src/handlers/get-file-set-by-id.js | 0 .../src/handlers/get-file-set-download.js | 54 +- .../src/handlers/get-shared-link-by-id.js | 0 {node => api}/src/handlers/get-similar.js | 0 {node => api}/src/handlers/get-thumbnail.js | 0 {node => api}/src/handlers/get-work-auth.js | 0 {node => api}/src/handlers/get-work-by-id.js | 0 {node => api}/src/handlers/middleware.js | 0 {node => api}/src/handlers/oai.js | 0 {node => api}/src/handlers/oai/search.js | 0 {node => api}/src/handlers/oai/verbs.js | 0 .../src/handlers/oai/xml-transformer.js | 0 {node => api}/src/handlers/options-request.js | 0 .../src/handlers/post-chat-feedback.js | 0 {node => api}/src/handlers/search-runner.js | 0 {node => api}/src/handlers/search.js | 0 .../src/handlers/transcode-templates.js | 0 {node => api}/src/helpers.js | 0 {node => api}/src/honeybadger-setup.js | 0 {node => api}/src/package-lock.json | 655 ++-------- {node => api}/src/package.json | 2 +- api/template.yaml | 668 ++++++++++ {node => api}/test/.eslintrc | 0 .../mocks/collection-1234-no-thumbnail.json | 0 .../collection-1234-private-published.json | 0 .../test/fixtures/mocks/collection-1234.json | 0 .../test/fixtures/mocks/collections.json | 0 .../mocks/expired-shared-link-9101112.json | 0 .../test/fixtures/mocks/fileset-1234.json | 0 .../fixtures/mocks/fileset-audio-1234.json | 0 .../fixtures/mocks/fileset-baddata-1234.json | 0 .../fixtures/mocks/fileset-netid-1234.json | 0 .../mocks/fileset-restricted-1234.json | 0 .../fileset-restricted-unpublished-1234.json | 0 .../mocks/fileset-unpublished-1234.json | 0 .../fixtures/mocks/fileset-video-1234.json | 0 .../mocks/missing-collection-1234.json | 0 .../fixtures/mocks/missing-fileset-1234.json | 0 .../test/fixtures/mocks/missing-index.json | 0 .../mocks/missing-shared-link-5678.json | 0 .../fixtures/mocks/missing-work-1234.json | 0 .../mocks/oai-list-identifiers-sets.json | 0 .../test/fixtures/mocks/oai-sets.json | 0 .../mocks/private-unpublished-work-1234.json | 0 .../fixtures/mocks/private-work-1234.json | 0 .../fixtures/mocks/real-search-event.json | 0 .../test/fixtures/mocks/scroll-empty.json | 0 .../test/fixtures/mocks/scroll-missing.json | 0 {node => api}/test/fixtures/mocks/scroll.json | 0 .../mocks/search-earliest-record.json | 0 .../mocks/search-multiple-targets.json | 0 {node => api}/test/fixtures/mocks/search.json | 0 .../test/fixtures/mocks/shared-link-1234.json | 0 .../test/fixtures/mocks/similar.json | 0 .../test/fixtures/mocks/thumbnail_full.jpg | Bin .../test/fixtures/mocks/thumbnail_square.jpg | Bin .../fixtures/mocks/unpublished-work-1234.json | 0 .../mocks/work-1234-no-collection.json | 0 ...-1234-no-fileset-representative-image.json | 0 .../work-1234-no-fileset-width-height.json | 0 .../mocks/work-1234-no-thumbnail.json | 0 .../test/fixtures/mocks/work-1234.json | 0 .../test/fixtures/mocks/work-netid-1234.json | 0 .../fixtures/mocks/work-restricted-1234.json | 0 .../work-restricted-unpublished-1234.json | 0 .../test/fixtures/mocks/work-video-5678.json | 0 .../integration/get-auth-callback.test.js | 0 .../test/integration/get-auth-login.test.js | 0 .../test/integration/get-auth-logout.test.js | 0 .../test/integration/get-auth-token.test.js | 0 .../test/integration/get-auth-whoami.test.js | 0 .../integration/get-chat-endpoint.test.js | 0 .../integration/get-collection-by-id.test.js | 0 .../test/integration/get-collections.test.js | 0 .../test/integration/get-doc.test.js | 0 .../integration/get-file-set-auth.test.js | 0 .../integration/get-file-set-download.test.js | 0 .../integration/get-shared-link-by-id.test.js | 0 .../test/integration/get-similar.test.js | 0 .../test/integration/get-thumbnail.test.js | 0 .../test/integration/get-work-auth.test.js | 0 .../test/integration/get-work-by-id.test.js | 0 .../test/integration/middleware.test.js | 0 {node => api}/test/integration/oai.test.js | 0 .../test/integration/options-request.test.js | 0 .../integration/post-chat-feedback.test.js | 0 {node => api}/test/integration/search.test.js | 0 .../test/test-helpers/event-builder.js | 0 {node => api}/test/test-helpers/index.js | 0 {node => api}/test/unit/api/api-token.test.js | 0 {node => api}/test/unit/api/helpers.test.js | 0 .../test/unit/api/opensearch.test.js | 0 .../test/unit/api/pagination.test.js | 0 .../test/unit/api/request/models.test.js | 0 .../test/unit/api/request/pipeline.test.js | 0 .../test/unit/api/response/error.test.js | 0 .../unit/api/response/iiif/collection.test.js | 0 .../unit/api/response/iiif/manifest.test.js | 0 .../iiif/presentation-api/items.test.js | 0 .../iiif/presentation-api/metadata.test.js | 0 .../placeholder-canvas.test.js | 0 .../iiif/presentation-api/provider.test.js | 0 .../test/unit/api/response/opensearch.test.js | 0 .../test/unit/aws/environment.test.js | 0 {node => api}/test/unit/package.test.js | 0 .../lambdas}/get-download-link.js | 0 .../lambdas}/package-lock.json | 0 {lambdas => av-download/lambdas}/package.json | 0 .../lambdas}/send-templated-email.js | 0 .../lambdas}/start-audio-transcode.js | 0 .../lambdas}/start-transcode.js | 0 .../lambdas}/transcode-status.js | 0 av-download/template.yaml | 459 +++++++ chat/template.yaml | 2 +- {node => docs}/redirect/index.js | 4 +- docs/template.yaml | 108 ++ node/src/handlers/default-request.js | 6 - node/test/integration/default-handler.test.js | 22 - node/test/unit/redirect.test.js | 18 - state_machines/av_download.json | 110 -- template.yaml | 1104 ++--------------- 157 files changed, 1514 insertions(+), 1759 deletions(-) rename {node => api}/.mocharc.js (100%) rename {node => api}/.npmignore (100%) rename {layers/api_dependencies => api/dependencies}/package-lock.json (100%) rename {layers/api_dependencies => api/dependencies}/package.json (100%) rename {node => api}/nyc.config.js (100%) rename {node => api}/package-lock.json (100%) rename {node => api}/package.json (93%) rename {node => api}/src/api/api-token.js (100%) rename {node => api}/src/api/opensearch.js (100%) rename {node => api}/src/api/pagination.js (100%) rename {node => api}/src/api/request/models.js (100%) rename {node => api}/src/api/request/pipeline.js (100%) rename {node => api}/src/api/response/error.js (100%) rename {node => api}/src/api/response/iiif/collection.js (100%) rename {node => api}/src/api/response/iiif/manifest.js (100%) rename {node => api}/src/api/response/iiif/presentation-api/items.js (100%) rename {node => api}/src/api/response/iiif/presentation-api/metadata.js (100%) rename {node => api}/src/api/response/iiif/presentation-api/placeholder-canvas.js (100%) rename {node => api}/src/api/response/iiif/presentation-api/provider.js (100%) rename {node => api}/src/api/response/opensearch/index.js (100%) rename {node => api}/src/api/response/transformer.js (100%) rename {node => api}/src/aws/fetch.js (100%) rename {node => api}/src/environment.js (100%) rename {node => api}/src/handlers/authorize-document.js (100%) rename {node => api}/src/handlers/get-auth-callback.js (100%) rename {node => api}/src/handlers/get-auth-login.js (100%) rename {node => api}/src/handlers/get-auth-logout.js (100%) rename {node => api}/src/handlers/get-auth-token.js (100%) rename {node => api}/src/handlers/get-auth-whoami.js (100%) rename {node => api}/src/handlers/get-chat-endpoint.js (100%) rename {node => api}/src/handlers/get-collection-by-id.js (100%) rename {node => api}/src/handlers/get-collections.js (100%) rename {node => api}/src/handlers/get-file-set-auth.js (100%) rename {node => api}/src/handlers/get-file-set-by-id.js (100%) rename {node => api}/src/handlers/get-file-set-download.js (81%) rename {node => api}/src/handlers/get-shared-link-by-id.js (100%) rename {node => api}/src/handlers/get-similar.js (100%) rename {node => api}/src/handlers/get-thumbnail.js (100%) rename {node => api}/src/handlers/get-work-auth.js (100%) rename {node => api}/src/handlers/get-work-by-id.js (100%) rename {node => api}/src/handlers/middleware.js (100%) rename {node => api}/src/handlers/oai.js (100%) rename {node => api}/src/handlers/oai/search.js (100%) rename {node => api}/src/handlers/oai/verbs.js (100%) rename {node => api}/src/handlers/oai/xml-transformer.js (100%) rename {node => api}/src/handlers/options-request.js (100%) rename {node => api}/src/handlers/post-chat-feedback.js (100%) rename {node => api}/src/handlers/search-runner.js (100%) rename {node => api}/src/handlers/search.js (100%) rename {node => api}/src/handlers/transcode-templates.js (100%) rename {node => api}/src/helpers.js (100%) rename {node => api}/src/honeybadger-setup.js (100%) rename {node => api}/src/package-lock.json (93%) rename {node => api}/src/package.json (97%) create mode 100644 api/template.yaml rename {node => api}/test/.eslintrc (100%) rename {node => api}/test/fixtures/mocks/collection-1234-no-thumbnail.json (100%) rename {node => api}/test/fixtures/mocks/collection-1234-private-published.json (100%) rename {node => api}/test/fixtures/mocks/collection-1234.json (100%) rename {node => api}/test/fixtures/mocks/collections.json (100%) rename {node => api}/test/fixtures/mocks/expired-shared-link-9101112.json (100%) rename {node => api}/test/fixtures/mocks/fileset-1234.json (100%) rename {node => api}/test/fixtures/mocks/fileset-audio-1234.json (100%) rename {node => api}/test/fixtures/mocks/fileset-baddata-1234.json (100%) rename {node => api}/test/fixtures/mocks/fileset-netid-1234.json (100%) rename {node => api}/test/fixtures/mocks/fileset-restricted-1234.json (100%) rename {node => api}/test/fixtures/mocks/fileset-restricted-unpublished-1234.json (100%) rename {node => api}/test/fixtures/mocks/fileset-unpublished-1234.json (100%) rename {node => api}/test/fixtures/mocks/fileset-video-1234.json (100%) rename {node => api}/test/fixtures/mocks/missing-collection-1234.json (100%) rename {node => api}/test/fixtures/mocks/missing-fileset-1234.json (100%) rename {node => api}/test/fixtures/mocks/missing-index.json (100%) rename {node => api}/test/fixtures/mocks/missing-shared-link-5678.json (100%) rename {node => api}/test/fixtures/mocks/missing-work-1234.json (100%) rename {node => api}/test/fixtures/mocks/oai-list-identifiers-sets.json (100%) rename {node => api}/test/fixtures/mocks/oai-sets.json (100%) rename {node => api}/test/fixtures/mocks/private-unpublished-work-1234.json (100%) rename {node => api}/test/fixtures/mocks/private-work-1234.json (100%) rename {node => api}/test/fixtures/mocks/real-search-event.json (100%) rename {node => api}/test/fixtures/mocks/scroll-empty.json (100%) rename {node => api}/test/fixtures/mocks/scroll-missing.json (100%) rename {node => api}/test/fixtures/mocks/scroll.json (100%) rename {node => api}/test/fixtures/mocks/search-earliest-record.json (100%) rename {node => api}/test/fixtures/mocks/search-multiple-targets.json (100%) rename {node => api}/test/fixtures/mocks/search.json (100%) rename {node => api}/test/fixtures/mocks/shared-link-1234.json (100%) rename {node => api}/test/fixtures/mocks/similar.json (100%) rename {node => api}/test/fixtures/mocks/thumbnail_full.jpg (100%) rename {node => api}/test/fixtures/mocks/thumbnail_square.jpg (100%) rename {node => api}/test/fixtures/mocks/unpublished-work-1234.json (100%) rename {node => api}/test/fixtures/mocks/work-1234-no-collection.json (100%) rename {node => api}/test/fixtures/mocks/work-1234-no-fileset-representative-image.json (100%) rename {node => api}/test/fixtures/mocks/work-1234-no-fileset-width-height.json (100%) rename {node => api}/test/fixtures/mocks/work-1234-no-thumbnail.json (100%) rename {node => api}/test/fixtures/mocks/work-1234.json (100%) rename {node => api}/test/fixtures/mocks/work-netid-1234.json (100%) rename {node => api}/test/fixtures/mocks/work-restricted-1234.json (100%) rename {node => api}/test/fixtures/mocks/work-restricted-unpublished-1234.json (100%) rename {node => api}/test/fixtures/mocks/work-video-5678.json (100%) rename {node => api}/test/integration/get-auth-callback.test.js (100%) rename {node => api}/test/integration/get-auth-login.test.js (100%) rename {node => api}/test/integration/get-auth-logout.test.js (100%) rename {node => api}/test/integration/get-auth-token.test.js (100%) rename {node => api}/test/integration/get-auth-whoami.test.js (100%) rename {node => api}/test/integration/get-chat-endpoint.test.js (100%) rename {node => api}/test/integration/get-collection-by-id.test.js (100%) rename {node => api}/test/integration/get-collections.test.js (100%) rename {node => api}/test/integration/get-doc.test.js (100%) rename {node => api}/test/integration/get-file-set-auth.test.js (100%) rename {node => api}/test/integration/get-file-set-download.test.js (100%) rename {node => api}/test/integration/get-shared-link-by-id.test.js (100%) rename {node => api}/test/integration/get-similar.test.js (100%) rename {node => api}/test/integration/get-thumbnail.test.js (100%) rename {node => api}/test/integration/get-work-auth.test.js (100%) rename {node => api}/test/integration/get-work-by-id.test.js (100%) rename {node => api}/test/integration/middleware.test.js (100%) rename {node => api}/test/integration/oai.test.js (100%) rename {node => api}/test/integration/options-request.test.js (100%) rename {node => api}/test/integration/post-chat-feedback.test.js (100%) rename {node => api}/test/integration/search.test.js (100%) rename {node => api}/test/test-helpers/event-builder.js (100%) rename {node => api}/test/test-helpers/index.js (100%) rename {node => api}/test/unit/api/api-token.test.js (100%) rename {node => api}/test/unit/api/helpers.test.js (100%) rename {node => api}/test/unit/api/opensearch.test.js (100%) rename {node => api}/test/unit/api/pagination.test.js (100%) rename {node => api}/test/unit/api/request/models.test.js (100%) rename {node => api}/test/unit/api/request/pipeline.test.js (100%) rename {node => api}/test/unit/api/response/error.test.js (100%) rename {node => api}/test/unit/api/response/iiif/collection.test.js (100%) rename {node => api}/test/unit/api/response/iiif/manifest.test.js (100%) rename {node => api}/test/unit/api/response/iiif/presentation-api/items.test.js (100%) rename {node => api}/test/unit/api/response/iiif/presentation-api/metadata.test.js (100%) rename {node => api}/test/unit/api/response/iiif/presentation-api/placeholder-canvas.test.js (100%) rename {node => api}/test/unit/api/response/iiif/presentation-api/provider.test.js (100%) rename {node => api}/test/unit/api/response/opensearch.test.js (100%) rename {node => api}/test/unit/aws/environment.test.js (100%) rename {node => api}/test/unit/package.test.js (100%) rename {lambdas => av-download/lambdas}/get-download-link.js (100%) rename {lambdas => av-download/lambdas}/package-lock.json (100%) rename {lambdas => av-download/lambdas}/package.json (100%) rename {lambdas => av-download/lambdas}/send-templated-email.js (100%) rename {lambdas => av-download/lambdas}/start-audio-transcode.js (100%) rename {lambdas => av-download/lambdas}/start-transcode.js (100%) rename {lambdas => av-download/lambdas}/transcode-status.js (100%) create mode 100644 av-download/template.yaml rename {node => docs}/redirect/index.js (97%) create mode 100644 docs/template.yaml delete mode 100644 node/src/handlers/default-request.js delete mode 100644 node/test/integration/default-handler.test.js delete mode 100644 node/test/unit/redirect.test.js delete mode 100644 state_machines/av_download.json diff --git a/.github/workflows/test-node.yml b/.github/workflows/test-node.yml index 81694682..33e6a0c6 100644 --- a/.github/workflows/test-node.yml +++ b/.github/workflows/test-node.yml @@ -3,11 +3,11 @@ on: push: paths: - ".github/workflows/test-node.yml" - - "node/**" + - "api/**" workflow_dispatch: defaults: run: - working-directory: ./node + working-directory: ./api jobs: test: runs-on: ubuntu-latest @@ -20,7 +20,7 @@ jobs: with: node-version: 20.x cache: "npm" - cache-dependency-path: 'node/package-lock.json' + cache-dependency-path: 'api/package-lock.json' - run: npm ci - name: Check code style run: npm run lint && npm run prettier diff --git a/.github/workflows/validate-template.yml b/.github/workflows/validate-template.yml index d02d6604..75cc6329 100644 --- a/.github/workflows/validate-template.yml +++ b/.github/workflows/validate-template.yml @@ -16,13 +16,15 @@ jobs: - uses: actions/setup-python@v4 with: python-version: '3.12' + - name: Install cfn-lint + run: pip install cfn-lint - uses: aws-actions/setup-sam@v1 - - name: sam fix https://github.com/aws/aws-sam-cli/issues/4527 - run: $(dirname $(readlink $(which sam)))/pip install --force-reinstall "cryptography==38.0.4" + # - name: sam fix https://github.com/aws/aws-sam-cli/issues/4527 + # run: $(dirname $(readlink $(which sam)))/pip install --force-reinstall "cryptography==38.0.4" - uses: aws-actions/configure-aws-credentials@master with: role-to-assume: arn:aws:iam::${{ secrets.AwsAccount }}:role/github-actions-role aws-region: us-east-1 - uses: actions/checkout@v3 - name: Validate template - run: sam build && sam validate \ No newline at end of file + run: make build && make validate \ No newline at end of file diff --git a/Makefile b/Makefile index e43138ab..4d6536f8 100644 --- a/Makefile +++ b/Makefile @@ -26,14 +26,24 @@ help: echo "make test-python | run python tests" echo "make cover-node | run node tests with coverage" echo "make cover-python | run python tests with coverage" -.aws-sam/build.toml: ./template.yaml node/package-lock.json node/src/package-lock.json chat/dependencies/requirements.txt chat/src/requirements.txt - sed -Ei.orig 's/^(\s+)#\*\s/\1/' template.yaml - sed -Ei.orig 's/^(\s+)#\*\s/\1/' chat/template.yaml - sam build --cached --parallel - mv template.yaml.orig template.yaml - mv chat/template.yaml.orig chat/template.yaml + +.aws-sam/build.toml: ./template.yaml api/package-lock.json api/src/package-lock.json chat/dependencies/requirements.txt chat/src/requirements.txt + sed -Ei.orig 's/"dependencies"/"devDependencies"/' api/src/package.json + cp api/src/package-lock.json api/src/package-lock.json.orig + cd api/src && npm i --package-lock-only && cd - + for d in . api av-download chat docs ; do \ + sed -Ei.orig 's/^(\s+)#\*\s/\1/' $$d/template.yaml; \ + done + + -sam build --cached --parallel + + for d in . api av-download chat docs ; do \ + mv $$d/template.yaml.orig $$d/template.yaml; \ + done + mv api/src/package.json.orig api/src/package.json + mv api/src/package-lock.json.orig api/src/package-lock.json deps-node: - cd node/src ;\ + cd api/src ;\ npm list >/dev/null 2>&1 ;\ src_deps=$$? ;\ cd .. ;\ @@ -41,14 +51,14 @@ deps-node: dev_deps=$$? ;\ test $$src_deps -eq 0 -a $$dev_deps -eq 0 || npm ci - cd lambdas ;\ + cd av-download/lambdas ;\ npm list >/dev/null 2>&1 || npm ci cover-node: deps-node - cd node && npm run test:coverage + cd api && npm run test:coverage style-node: deps-node - cd node && npm run prettier + cd api && npm run prettier test-node: deps-node - cd node && npm run test + cd api && npm run test deps-python: cd chat/src && pip install -r requirements.txt && pip install -r requirements-dev.txt cover-python: deps-python @@ -63,16 +73,19 @@ test-python: deps-python cd chat && __SKIP_SECRETS__=true SKIP_LLM_REQUEST=True PYTHONPATH=src:test python -m unittest discover -v python-version: cd chat && python --version -build: .aws-sam/build.toml +build: + bash -c "trap 'trap - SIGINT SIGTERM ERR; $(MAKE) reset; exit 1' SIGINT SIGTERM ERR; $(MAKE) .aws-sam/build.toml reset" +validate: + cfn-lint template.yaml **/template.yaml --ignore-checks E3510 serve-http: deps-node @printf '\033[0;31mWARNING: Serving only the local HTTP API. The chat websocket API is not available in local mode.\033[0m\n' rm -rf .aws-sam - sam local start-api --host 0.0.0.0 --log-file dc-api.log ${SERVE_PARAMS} + sam local start-api -t api/template.yaml --env-vars $$PWD/env.json --host 0.0.0.0 --log-file dc-api.log ${SERVE_PARAMS} serve-https: SERVE_PARAMS = --port 3002 --ssl-cert-file $$HOME/.dev_cert/dev.rdc.cert.pem --ssl-key-file $$HOME/.dev_cert/dev.rdc.key.pem serve-https: serve-http serve: serve-https start-with-step: deps-node - sam local start-lambda --host 0.0.0.0 --port 3005 --env-vars env.json --log-file lambda.log & \ + sam local start-lambda -t av-download/template.yaml --host 0.0.0.0 --port 3005 --env-vars $$PWD/env.json --log-file lambda.log & \ echo $$! > .sam-pids ;\ sam local start-api --host 0.0.0.0 --port 3002 --log-file dc-api.log \ --ssl-cert-file $$HOME/.dev_cert/dev.rdc.cert.pem --ssl-key-file $$HOME/.dev_cert/dev.rdc.key.pem & \ @@ -89,4 +102,6 @@ env: secrets: ln -s ../tfvars/dc-api/* . clean: - rm -rf .aws-sam node/node_modules node/src/node_modules python/**/__pycache__ python/.coverage python/.ruff_cache \ No newline at end of file + rm -rf .aws-sam api/node_modules api/src/node_modules python/**/__pycache__ python/.coverage python/.ruff_cache +reset: + for f in $$(find . -maxdepth 2 -name '*.orig'); do mv $$f $${f%%.orig}; done diff --git a/node/.mocharc.js b/api/.mocharc.js similarity index 100% rename from node/.mocharc.js rename to api/.mocharc.js diff --git a/node/.npmignore b/api/.npmignore similarity index 100% rename from node/.npmignore rename to api/.npmignore diff --git a/layers/api_dependencies/package-lock.json b/api/dependencies/package-lock.json similarity index 100% rename from layers/api_dependencies/package-lock.json rename to api/dependencies/package-lock.json diff --git a/layers/api_dependencies/package.json b/api/dependencies/package.json similarity index 100% rename from layers/api_dependencies/package.json rename to api/dependencies/package.json diff --git a/node/nyc.config.js b/api/nyc.config.js similarity index 100% rename from node/nyc.config.js rename to api/nyc.config.js diff --git a/node/package-lock.json b/api/package-lock.json similarity index 100% rename from node/package-lock.json rename to api/package-lock.json diff --git a/node/package.json b/api/package.json similarity index 93% rename from node/package.json rename to api/package.json index 7fedc8ed..5010c3b1 100644 --- a/node/package.json +++ b/api/package.json @@ -10,7 +10,7 @@ }, "scripts": { "lint": "eslint src/**/*.js test/**/*.js", - "preinstall": "cd src && npm i && cd - && cd ../lambdas && npm i && cd -", + "preinstall": "cd src && npm i && cd - && cd ../av-download/lambdas && npm i && cd -", "prettier": "prettier -c src test", "prettier:fix": "prettier -cw src test", "test": "mocha", diff --git a/node/src/api/api-token.js b/api/src/api/api-token.js similarity index 100% rename from node/src/api/api-token.js rename to api/src/api/api-token.js diff --git a/node/src/api/opensearch.js b/api/src/api/opensearch.js similarity index 100% rename from node/src/api/opensearch.js rename to api/src/api/opensearch.js diff --git a/node/src/api/pagination.js b/api/src/api/pagination.js similarity index 100% rename from node/src/api/pagination.js rename to api/src/api/pagination.js diff --git a/node/src/api/request/models.js b/api/src/api/request/models.js similarity index 100% rename from node/src/api/request/models.js rename to api/src/api/request/models.js diff --git a/node/src/api/request/pipeline.js b/api/src/api/request/pipeline.js similarity index 100% rename from node/src/api/request/pipeline.js rename to api/src/api/request/pipeline.js diff --git a/node/src/api/response/error.js b/api/src/api/response/error.js similarity index 100% rename from node/src/api/response/error.js rename to api/src/api/response/error.js diff --git a/node/src/api/response/iiif/collection.js b/api/src/api/response/iiif/collection.js similarity index 100% rename from node/src/api/response/iiif/collection.js rename to api/src/api/response/iiif/collection.js diff --git a/node/src/api/response/iiif/manifest.js b/api/src/api/response/iiif/manifest.js similarity index 100% rename from node/src/api/response/iiif/manifest.js rename to api/src/api/response/iiif/manifest.js diff --git a/node/src/api/response/iiif/presentation-api/items.js b/api/src/api/response/iiif/presentation-api/items.js similarity index 100% rename from node/src/api/response/iiif/presentation-api/items.js rename to api/src/api/response/iiif/presentation-api/items.js diff --git a/node/src/api/response/iiif/presentation-api/metadata.js b/api/src/api/response/iiif/presentation-api/metadata.js similarity index 100% rename from node/src/api/response/iiif/presentation-api/metadata.js rename to api/src/api/response/iiif/presentation-api/metadata.js diff --git a/node/src/api/response/iiif/presentation-api/placeholder-canvas.js b/api/src/api/response/iiif/presentation-api/placeholder-canvas.js similarity index 100% rename from node/src/api/response/iiif/presentation-api/placeholder-canvas.js rename to api/src/api/response/iiif/presentation-api/placeholder-canvas.js diff --git a/node/src/api/response/iiif/presentation-api/provider.js b/api/src/api/response/iiif/presentation-api/provider.js similarity index 100% rename from node/src/api/response/iiif/presentation-api/provider.js rename to api/src/api/response/iiif/presentation-api/provider.js diff --git a/node/src/api/response/opensearch/index.js b/api/src/api/response/opensearch/index.js similarity index 100% rename from node/src/api/response/opensearch/index.js rename to api/src/api/response/opensearch/index.js diff --git a/node/src/api/response/transformer.js b/api/src/api/response/transformer.js similarity index 100% rename from node/src/api/response/transformer.js rename to api/src/api/response/transformer.js diff --git a/node/src/aws/fetch.js b/api/src/aws/fetch.js similarity index 100% rename from node/src/aws/fetch.js rename to api/src/aws/fetch.js diff --git a/node/src/environment.js b/api/src/environment.js similarity index 100% rename from node/src/environment.js rename to api/src/environment.js diff --git a/node/src/handlers/authorize-document.js b/api/src/handlers/authorize-document.js similarity index 100% rename from node/src/handlers/authorize-document.js rename to api/src/handlers/authorize-document.js diff --git a/node/src/handlers/get-auth-callback.js b/api/src/handlers/get-auth-callback.js similarity index 100% rename from node/src/handlers/get-auth-callback.js rename to api/src/handlers/get-auth-callback.js diff --git a/node/src/handlers/get-auth-login.js b/api/src/handlers/get-auth-login.js similarity index 100% rename from node/src/handlers/get-auth-login.js rename to api/src/handlers/get-auth-login.js diff --git a/node/src/handlers/get-auth-logout.js b/api/src/handlers/get-auth-logout.js similarity index 100% rename from node/src/handlers/get-auth-logout.js rename to api/src/handlers/get-auth-logout.js diff --git a/node/src/handlers/get-auth-token.js b/api/src/handlers/get-auth-token.js similarity index 100% rename from node/src/handlers/get-auth-token.js rename to api/src/handlers/get-auth-token.js diff --git a/node/src/handlers/get-auth-whoami.js b/api/src/handlers/get-auth-whoami.js similarity index 100% rename from node/src/handlers/get-auth-whoami.js rename to api/src/handlers/get-auth-whoami.js diff --git a/node/src/handlers/get-chat-endpoint.js b/api/src/handlers/get-chat-endpoint.js similarity index 100% rename from node/src/handlers/get-chat-endpoint.js rename to api/src/handlers/get-chat-endpoint.js diff --git a/node/src/handlers/get-collection-by-id.js b/api/src/handlers/get-collection-by-id.js similarity index 100% rename from node/src/handlers/get-collection-by-id.js rename to api/src/handlers/get-collection-by-id.js diff --git a/node/src/handlers/get-collections.js b/api/src/handlers/get-collections.js similarity index 100% rename from node/src/handlers/get-collections.js rename to api/src/handlers/get-collections.js diff --git a/node/src/handlers/get-file-set-auth.js b/api/src/handlers/get-file-set-auth.js similarity index 100% rename from node/src/handlers/get-file-set-auth.js rename to api/src/handlers/get-file-set-auth.js diff --git a/node/src/handlers/get-file-set-by-id.js b/api/src/handlers/get-file-set-by-id.js similarity index 100% rename from node/src/handlers/get-file-set-by-id.js rename to api/src/handlers/get-file-set-by-id.js diff --git a/node/src/handlers/get-file-set-download.js b/api/src/handlers/get-file-set-download.js similarity index 81% rename from node/src/handlers/get-file-set-download.js rename to api/src/handlers/get-file-set-download.js index 2b321117..0fceae17 100644 --- a/node/src/handlers/get-file-set-download.js +++ b/api/src/handlers/get-file-set-download.js @@ -1,3 +1,7 @@ +const { + GetSecretValueCommand, + SecretsManagerClient, +} = require("@aws-sdk/client-secrets-manager"); const { SFNClient, StartExecutionCommand } = require("@aws-sdk/client-sfn"); const { wrap } = require("./middleware"); const { getFileSet } = require("../api/opensearch"); @@ -12,10 +16,15 @@ const mime = require("mime-types"); const opensearchResponse = require("../api/response/opensearch"); const path = require("path"); +let Secrets; /** * Handler for download file set endpoint */ -exports.handler = wrap(async (event) => { +exports.handler = wrap(async (event, context) => { + const secretsManagerClient = + context?.injections?.secretsManagerClient || new SecretsManagerClient({}); + await loadSecrets(secretsManagerClient); + const id = event.pathParameters.id; const email = event.queryStringParameters?.email; const referer = event.headers?.referer; @@ -57,6 +66,23 @@ exports.handler = wrap(async (event) => { } }); +async function loadSecrets(client) { + if (Secrets) return Secrets; + + const { SECRETS_PATH } = process.env; + const SecretId = `${SECRETS_PATH}/config/av-download`; + try { + const cmd = new GetSecretValueCommand({ SecretId }); + const secretsResponse = await client.send(cmd); + if (secretsResponse.SecretString) { + Secrets = JSON.parse(secretsResponse.SecretString); + } + } catch (err) { + console.warn("Error loading secrets from", SecretId); + } + return Secrets; +} + function isAltFileDownload(doc) { const acceptedTypes = [ "application/pdf", @@ -109,7 +135,7 @@ function derivativeKey(doc) { async function getDownloadLink(doc) { const clientParams = {}; - const bucket = process.env.PYRAMID_BUCKET; + const bucket = Secrets.pyramid_bucket; const key = derivativeKey(doc); const getObjectParams = { @@ -173,8 +199,8 @@ const IIIFImageRequest = async (doc) => { }; async function processAVDownload(doc, email, referer) { - const stepFunctionConfig = process.env.STEP_FUNCTION_ENDPOINT - ? { endpoint: process.env.STEP_FUNCTION_ENDPOINT } + const stepFunctionConfig = Secrets.step_function_endpoint + ? { endpoint: Secrets.step_function_endpoint } : {}; const client = new SFNClient(stepFunctionConfig); @@ -182,7 +208,7 @@ async function processAVDownload(doc, email, referer) { const url = new URL(fileSet.streaming_url); const sourceLocation = s3Location(fileSet.streaming_url); - const destinationBucket = process.env.MEDIA_CONVERT_DESTINATION_BUCKET; + const destinationBucket = Secrets.media_convert_destination_bucket; const fileSetId = path.parse(url.pathname).name; const fileSetLabel = fileSet.label; const workId = fileSet.work_id; @@ -197,14 +223,14 @@ async function processAVDownload(doc, email, referer) { const filename = isAudio(doc) ? `${fileSetId}.mp3` : `${fileSetId}.mp4`; var params = { - stateMachineArn: process.env.AV_DOWNLOAD_STATE_MACHINE_ARN, + stateMachineArn: Secrets.av_download_state_machine_arn, input: JSON.stringify({ configuration: { - startAudioTranscodeFunction: process.env.START_AUDIO_TRANSCODE_FUNCTION, - startTranscodeFunction: process.env.START_TRANSCODE_FUNCTION, - transcodeStatusFunction: process.env.TRANSCODE_STATUS_FUNCTION, - getDownloadLinkFunction: process.env.GET_DOWNLOAD_LINK_FUNCTION, - sendTemplatedEmailFunction: process.env.SEND_TEMPLATED_EMAIL_FUNCTION, + startAudioTranscodeFunction: Secrets.start_audio_transcode_function, + startTranscodeFunction: Secrets.start_transcode_function, + transcodeStatusFunction: Secrets.transcode_status_function, + getDownloadLinkFunction: Secrets.get_download_link_function, + sendTemplatedEmailFunction: Secrets.send_templated_email_function, }, transcodeInput: { settings: settings, @@ -221,8 +247,8 @@ async function processAVDownload(doc, email, referer) { }, sendEmailInput: { to: email, - template: process.env.AV_DOWNLOAD_EMAIL_TEMPLATE, - from: process.env.REPOSITORY_EMAIL, + template: Secrets.av_download_email_template, + from: Secrets.repository_email, params: { downloadLink: "", fileSetId, @@ -253,7 +279,7 @@ async function processAVDownload(doc, email, referer) { function s3Location(streaming_url) { const url = new URL(streaming_url); - return `s3://${process.env.STREAMING_BUCKET}${url.pathname}`; + return `s3://${Secrets.streaming_bucket}${url.pathname}`; } function invalidRequest(code, message) { diff --git a/node/src/handlers/get-shared-link-by-id.js b/api/src/handlers/get-shared-link-by-id.js similarity index 100% rename from node/src/handlers/get-shared-link-by-id.js rename to api/src/handlers/get-shared-link-by-id.js diff --git a/node/src/handlers/get-similar.js b/api/src/handlers/get-similar.js similarity index 100% rename from node/src/handlers/get-similar.js rename to api/src/handlers/get-similar.js diff --git a/node/src/handlers/get-thumbnail.js b/api/src/handlers/get-thumbnail.js similarity index 100% rename from node/src/handlers/get-thumbnail.js rename to api/src/handlers/get-thumbnail.js diff --git a/node/src/handlers/get-work-auth.js b/api/src/handlers/get-work-auth.js similarity index 100% rename from node/src/handlers/get-work-auth.js rename to api/src/handlers/get-work-auth.js diff --git a/node/src/handlers/get-work-by-id.js b/api/src/handlers/get-work-by-id.js similarity index 100% rename from node/src/handlers/get-work-by-id.js rename to api/src/handlers/get-work-by-id.js diff --git a/node/src/handlers/middleware.js b/api/src/handlers/middleware.js similarity index 100% rename from node/src/handlers/middleware.js rename to api/src/handlers/middleware.js diff --git a/node/src/handlers/oai.js b/api/src/handlers/oai.js similarity index 100% rename from node/src/handlers/oai.js rename to api/src/handlers/oai.js diff --git a/node/src/handlers/oai/search.js b/api/src/handlers/oai/search.js similarity index 100% rename from node/src/handlers/oai/search.js rename to api/src/handlers/oai/search.js diff --git a/node/src/handlers/oai/verbs.js b/api/src/handlers/oai/verbs.js similarity index 100% rename from node/src/handlers/oai/verbs.js rename to api/src/handlers/oai/verbs.js diff --git a/node/src/handlers/oai/xml-transformer.js b/api/src/handlers/oai/xml-transformer.js similarity index 100% rename from node/src/handlers/oai/xml-transformer.js rename to api/src/handlers/oai/xml-transformer.js diff --git a/node/src/handlers/options-request.js b/api/src/handlers/options-request.js similarity index 100% rename from node/src/handlers/options-request.js rename to api/src/handlers/options-request.js diff --git a/node/src/handlers/post-chat-feedback.js b/api/src/handlers/post-chat-feedback.js similarity index 100% rename from node/src/handlers/post-chat-feedback.js rename to api/src/handlers/post-chat-feedback.js diff --git a/node/src/handlers/search-runner.js b/api/src/handlers/search-runner.js similarity index 100% rename from node/src/handlers/search-runner.js rename to api/src/handlers/search-runner.js diff --git a/node/src/handlers/search.js b/api/src/handlers/search.js similarity index 100% rename from node/src/handlers/search.js rename to api/src/handlers/search.js diff --git a/node/src/handlers/transcode-templates.js b/api/src/handlers/transcode-templates.js similarity index 100% rename from node/src/handlers/transcode-templates.js rename to api/src/handlers/transcode-templates.js diff --git a/node/src/helpers.js b/api/src/helpers.js similarity index 100% rename from node/src/helpers.js rename to api/src/helpers.js diff --git a/node/src/honeybadger-setup.js b/api/src/honeybadger-setup.js similarity index 100% rename from node/src/honeybadger-setup.js rename to api/src/honeybadger-setup.js diff --git a/node/src/package-lock.json b/api/src/package-lock.json similarity index 93% rename from node/src/package-lock.json rename to api/src/package-lock.json index b3287a96..3adaad89 100644 --- a/node/src/package-lock.json +++ b/api/src/package-lock.json @@ -8,7 +8,7 @@ "name": "dc-api", "version": "2.6.0", "license": "Apache-2.0", - "devDependencies": { + "dependencies": { "@aws-crypto/sha256-browser": "^2.0.1", "@aws-sdk/client-s3": "^3.565.0", "@aws-sdk/client-secrets-manager": "^3.563.0", @@ -38,7 +38,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", - "dev": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -52,7 +51,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -63,7 +61,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -75,7 +72,6 @@ "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==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -88,7 +84,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -100,14 +95,12 @@ "node_modules/@aws-crypto/crc32/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "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==", - "dev": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -118,7 +111,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -129,7 +121,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -141,7 +132,6 @@ "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==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -154,7 +144,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -166,14 +155,12 @@ "node_modules/@aws-crypto/crc32c/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-crypto/ie11-detection": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", - "dev": true, "dependencies": { "tslib": "^1.11.1" } @@ -182,7 +169,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", - "dev": true, "dependencies": { "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", @@ -196,7 +182,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" } @@ -205,7 +190,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -216,7 +200,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -228,7 +211,6 @@ "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==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -241,7 +223,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -253,14 +234,12 @@ "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-crypto/sha256-browser": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.2.tgz", "integrity": "sha512-V7nEV6nKYHqiWVksjQ/BnIppDHrvALDrLoL9lsxvhn/iVo77L7zGLjR+/+nFFvqg/EUz/AJr7YnVGimf1e9X7Q==", - "dev": true, "dependencies": { "@aws-crypto/ie11-detection": "^2.0.2", "@aws-crypto/sha256-js": "^2.0.2", @@ -276,7 +255,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.2.tgz", "integrity": "sha512-iXLdKH19qPmIC73fVCrHWCSYjN/sxaAvZ3jNNyw6FclmHyjLKg0f69WlC9KTnyElxCR5MO9SKaG00VwlJwyAkQ==", - "dev": true, "dependencies": { "@aws-crypto/util": "^2.0.2", "@aws-sdk/types": "^3.110.0", @@ -287,7 +265,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", - "dev": true, "dependencies": { "tslib": "^1.11.1" } @@ -296,7 +273,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", - "dev": true, "dependencies": { "@aws-sdk/types": "^3.110.0", "@aws-sdk/util-utf8-browser": "^3.0.0", @@ -307,7 +283,6 @@ "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.677.0.tgz", "integrity": "sha512-TrfT7hyjs0FRh5MosduFZsskHhjvBKL451Wo5f80IcnxvNL8YZouh6kblUSiHKUxuc32WSiAKbXJJaPWdXs75Q==", - "dev": true, "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", @@ -376,7 +351,6 @@ "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==", - "dev": true, "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -391,7 +365,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -404,7 +377,6 @@ "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==", - "dev": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -418,7 +390,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" } @@ -427,7 +398,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -438,7 +408,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -451,7 +420,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.6.tgz", "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -464,7 +432,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -476,7 +443,6 @@ "version": "3.2.5", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz", "integrity": "sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==", - "dev": true, "dependencies": { "@smithy/abort-controller": "^3.1.6", "@smithy/protocol-http": "^4.1.5", @@ -492,7 +458,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -505,7 +470,6 @@ "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==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -517,14 +481,12 @@ "node_modules/@aws-sdk/client-s3/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/client-secrets-manager": { "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.686.0.tgz", "integrity": "sha512-cGp4ZWS1X8p4ZmmG5GXc9nup1LsmbcBLNjZqAm4OXUINSTymrL9WKSQC/Yv48WnVlloZnQvwbK7/biCPrAS06Q==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -578,7 +540,6 @@ "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==", - "dev": true, "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -593,7 +554,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -606,7 +566,6 @@ "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==", - "dev": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -620,7 +579,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" } @@ -629,7 +587,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -640,7 +597,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -653,7 +609,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.686.0.tgz", "integrity": "sha512-D8huL2BSHNP9QdQrqPcx4DCJXcG/vrPimNbymgCBgnYyS1HNs11Hu27ZPrbWCZFC8n/bvfXGXOhm8WAHOi4Vtw==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -702,7 +657,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.686.0.tgz", "integrity": "sha512-bV8yw1tpEj9WOVEnIJTcHPmTqikGccvh9RCg9ohc5DVKLajt/pUF4b+8dDyqNrEijUqlpDDwpSnh1GFhfe298A==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -755,7 +709,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.686.0.tgz", "integrity": "sha512-WVyOYdK3w7RhK6UrA2MY8KPIbcZ88BGIoKmRhcOXdIUC8CLL1UIECgdRthFXOU+MBqDPFS+VeF+COk0CpRhE8Q==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -806,7 +759,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.686.0.tgz", "integrity": "sha512-Xt3DV4DnAT3v2WURwzTxWQK34Ew+iiLzoUoguvLaZrVMFOqMMrwVjP+sizqIaHp1j7rGmFcN5I8saXnsDLuQLA==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.686.0", "@smithy/core": "^2.5.1", @@ -828,7 +780,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.686.0.tgz", "integrity": "sha512-osD7lPO8OREkgxPiTWmA1i6XEmOth1uW9HWWj/+A2YGCj1G/t2sHu931w4Qj9NWHYZtbTTXQYVRg+TErALV7nQ==", - "dev": true, "dependencies": { "@aws-sdk/core": "3.686.0", "@aws-sdk/types": "3.686.0", @@ -844,7 +795,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.686.0.tgz", "integrity": "sha512-xyGAD/f3vR/wssUiZrNFWQWXZvI4zRm2wpHhoHA1cC2fbRMNFYtFn365yw6dU7l00ZLcdFB1H119AYIUZS7xbw==", - "dev": true, "dependencies": { "@aws-sdk/core": "3.686.0", "@aws-sdk/types": "3.686.0", @@ -865,7 +815,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.686.0.tgz", "integrity": "sha512-90yr47QsduNiuVizMaJ2GctXZfp/z6s9eSk8ryMxMEJ2zJtaQHmJXIxaNnXj5Kh7V+HhCK7rYu58eyhZvz2Seg==", - "dev": true, "dependencies": { "@aws-sdk/core": "3.686.0", "@aws-sdk/credential-provider-env": "3.686.0", @@ -891,7 +840,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.686.0.tgz", "integrity": "sha512-d5etJJD5rE3ALxrZag80EuFYI+tmJrS4E4dvFNRCosVFKvIC89VVpVY0W+OaA0J+D4FD3OzBwxan31BQAW3IyA==", - "dev": true, "dependencies": { "@aws-sdk/credential-provider-env": "3.686.0", "@aws-sdk/credential-provider-http": "3.686.0", @@ -914,7 +862,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.686.0.tgz", "integrity": "sha512-sXqaAgyzMOc+dm4CnzAR5Q6S9OWVHyZjLfW6IQkmGjqeQXmZl24c4E82+w64C+CTkJrFLzH1VNOYp1Hy5gE6Qw==", - "dev": true, "dependencies": { "@aws-sdk/core": "3.686.0", "@aws-sdk/types": "3.686.0", @@ -931,7 +878,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.686.0.tgz", "integrity": "sha512-bGDFRcqpGUe2YBL5gmRZTLcxGwbtFd916JsdqmNgJwhhlOXPF6nqjGil5ZYruS3AMPy0BMntnG0Mvn/ZbusT/A==", - "dev": true, "dependencies": { "@aws-sdk/client-sso": "3.686.0", "@aws-sdk/core": "3.686.0", @@ -950,7 +896,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.686.0.tgz", "integrity": "sha512-40UqCpPxyHCXDP7CGd9JIOZDgDZf+u1OyLaGBpjQJlz1HYuEsIWnnbTe29Yg3Ah/Zc3g4NBWcUdlGVotlnpnDg==", - "dev": true, "dependencies": { "@aws-sdk/core": "3.686.0", "@aws-sdk/types": "3.686.0", @@ -969,7 +914,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.686.0.tgz", "integrity": "sha512-+Yc6rO02z+yhFbHmRZGvEw1vmzf/ifS9a4aBjJGeVVU+ZxaUvnk+IUZWrj4YQopUQ+bSujmMUzJLXSkbDq7yuw==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.686.0", "@smithy/protocol-http": "^4.1.5", @@ -984,7 +928,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.686.0.tgz", "integrity": "sha512-cX43ODfA2+SPdX7VRxu6gXk4t4bdVJ9pkktbfnkE5t27OlwNfvSGGhnHrQL8xTOFeyQ+3T+oowf26gf1OI+vIg==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.686.0", "@smithy/types": "^3.6.0", @@ -998,7 +941,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.686.0.tgz", "integrity": "sha512-jF9hQ162xLgp9zZ/3w5RUNhmwVnXDBlABEUX8jCgzaFpaa742qR/KKtjjZQ6jMbQnP+8fOCSXFAVNMU+s6v81w==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.686.0", "@smithy/protocol-http": "^4.1.5", @@ -1013,7 +955,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.686.0.tgz", "integrity": "sha512-/GRU68H5J66OD2a/RtX5s2ECtXTlMq6NneLlzcx0mIWnZ2VRMS2vFW2j2jrBEPJ5Y5us1/lK/fbun6gNo3qh7Q==", - "dev": true, "dependencies": { "@aws-sdk/core": "3.686.0", "@aws-sdk/types": "3.686.0", @@ -1031,7 +972,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.686.0.tgz", "integrity": "sha512-6zXD3bSD8tcsMAVVwO1gO7rI1uy2fCD3czgawuPGPopeLiPpo6/3FoUWCQzk2nvEhj7p9Z4BbjwZGSlRkVrXTw==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.686.0", "@smithy/node-config-provider": "^3.1.9", @@ -1048,7 +988,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.686.0.tgz", "integrity": "sha512-9oL4kTCSePFmyKPskibeiOXV6qavPZ63/kXM9Wh9V6dTSvBtLeNnMxqGvENGKJcTdIgtoqyqA6ET9u0PJ5IRIg==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.686.0", "@smithy/property-provider": "^3.1.7", @@ -1067,7 +1006,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.686.0.tgz", "integrity": "sha512-xFnrb3wxOoJcW2Xrh63ZgFo5buIu9DF7bOHnwoUxHdNpUXicUh0AHw85TjXxyxIAd0d1psY/DU7QHoNI3OswgQ==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -1080,7 +1018,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.686.0.tgz", "integrity": "sha512-7msZE2oYl+6QYeeRBjlDgxQUhq/XRky3cXE0FqLFs2muLS7XSuQEXkpOXB3R782ygAP6JX0kmBxPTLurRTikZg==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.686.0", "@smithy/types": "^3.6.0", @@ -1095,7 +1032,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.686.0.tgz", "integrity": "sha512-YiQXeGYZegF1b7B2GOR61orhgv79qmI0z7+Agm3NXLO6hGfVV3kFUJbXnjtH1BgWo5hbZYW7HQ2omGb3dnb6Lg==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.686.0", "@smithy/types": "^3.6.0", @@ -1107,7 +1043,6 @@ "version": "3.686.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.686.0.tgz", "integrity": "sha512-XXUhZPeacJt5BmWc0qNXA4/yyQGXPmFcTOFe5aqXuZbhtTCNVJ0fPQHFip37iGSHCg8eAFykiBn9W8hD4swolQ==", - "dev": true, "dependencies": { "@aws-sdk/middleware-user-agent": "3.686.0", "@aws-sdk/types": "3.686.0", @@ -1131,7 +1066,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.6.tgz", "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -1144,7 +1078,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.0.0.tgz", "integrity": "sha512-MLb1f5tbBO2X6K4lMEKJvxeLooyg7guq48C2zKr4qM7F2Gpkz4dc+hdSgu77pCJ76jVqFBjZczHYAs6dp15N+g==", - "dev": true, "dependencies": { "@smithy/protocol-http": "^4.1.5", "@smithy/querystring-builder": "^3.0.8", @@ -1157,7 +1090,6 @@ "version": "3.2.5", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz", "integrity": "sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==", - "dev": true, "dependencies": { "@smithy/abort-controller": "^3.1.6", "@smithy/protocol-http": "^4.1.5", @@ -1173,7 +1105,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -1186,7 +1117,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.1.tgz", "integrity": "sha512-NsV1jF4EvmO5wqmaSzlnTVetemBS3FZHdyc5CExbDljcyJCEEkJr8ANu2JvtNbVg/9MvKAWV44kTrGS+Pi4INg==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "@smithy/protocol-http": "^4.1.5", @@ -1205,7 +1135,6 @@ "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==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -1218,7 +1147,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1229,14 +1157,12 @@ "node_modules/@aws-sdk/client-secrets-manager/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==", - "dev": true + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/@aws-sdk/client-sfn": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sfn/-/client-sfn-3.677.0.tgz", "integrity": "sha512-mEmJwlHCOf2khp3w1cnImSZCfYrOrbpHAi/ucxX9eYvnWvFhhORVeY+g6clmw1EZWZO+BKMLIAGzAK9ATl9Thw==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -1290,7 +1216,6 @@ "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==", - "dev": true, "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -1305,7 +1230,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -1318,7 +1242,6 @@ "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==", - "dev": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -1332,7 +1255,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" } @@ -1341,7 +1263,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -1352,7 +1273,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -1365,7 +1285,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.6.tgz", "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -1378,7 +1297,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1390,7 +1308,6 @@ "version": "3.2.5", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz", "integrity": "sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==", - "dev": true, "dependencies": { "@smithy/abort-controller": "^3.1.6", "@smithy/protocol-http": "^4.1.5", @@ -1406,7 +1323,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -1419,7 +1335,6 @@ "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==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -1431,14 +1346,12 @@ "node_modules/@aws-sdk/client-sfn/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/client-sns": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sns/-/client-sns-3.677.0.tgz", "integrity": "sha512-jK9gqYH5mSH8rsg4d/pXQMJYx6a4Xd8xKnfg49g4qWbhNdQMfYpLryRsNkkBEPn3EylACu+fDbP+Pz/6GeOSgg==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -1490,7 +1403,6 @@ "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==", - "dev": true, "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -1505,7 +1417,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -1518,7 +1429,6 @@ "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==", - "dev": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -1532,7 +1442,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" } @@ -1541,7 +1450,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -1552,7 +1460,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -1565,7 +1472,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.6.tgz", "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -1578,7 +1484,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1590,7 +1495,6 @@ "version": "3.2.5", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz", "integrity": "sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==", - "dev": true, "dependencies": { "@smithy/abort-controller": "^3.1.6", "@smithy/protocol-http": "^4.1.5", @@ -1606,7 +1510,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -1619,7 +1522,6 @@ "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==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -1631,14 +1533,12 @@ "node_modules/@aws-sdk/client-sns/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/client-sso": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.677.0.tgz", "integrity": "sha512-/y6EskFhOa2w9VwXaXoyOrGeBjnOj/72wsxDOslS908qH+nf7m40pBK6e/iBelg04vlx0gqhlbfK8hLbaT6KHA==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -1687,7 +1587,6 @@ "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.677.0.tgz", "integrity": "sha512-2zgZkRIU7DsnUVOy+9bjfJ0IYMzi9ONWXQt/WqMa7HOnj4RfenfpipyhHYxGZR5kmehgv53EI79yvUu+SAfGNg==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -1740,7 +1639,6 @@ "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==", - "dev": true, "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -1755,7 +1653,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -1768,7 +1665,6 @@ "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==", - "dev": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -1782,7 +1678,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" } @@ -1791,7 +1686,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -1802,7 +1696,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -1815,7 +1708,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.6.tgz", "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -1828,7 +1720,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1840,7 +1731,6 @@ "version": "3.2.5", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz", "integrity": "sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==", - "dev": true, "dependencies": { "@smithy/abort-controller": "^3.1.6", "@smithy/protocol-http": "^4.1.5", @@ -1856,7 +1746,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -1869,7 +1758,6 @@ "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==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -1881,14 +1769,12 @@ "node_modules/@aws-sdk/client-sso-oidc/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/client-sso/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==", - "dev": true, "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -1903,7 +1789,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -1916,7 +1801,6 @@ "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==", - "dev": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -1930,7 +1814,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" } @@ -1939,7 +1822,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -1950,7 +1832,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -1963,7 +1844,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.6.tgz", "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -1976,7 +1856,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1988,7 +1867,6 @@ "version": "3.2.5", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz", "integrity": "sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==", - "dev": true, "dependencies": { "@smithy/abort-controller": "^3.1.6", "@smithy/protocol-http": "^4.1.5", @@ -2004,7 +1882,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2017,7 +1894,6 @@ "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==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -2029,14 +1905,12 @@ "node_modules/@aws-sdk/client-sso/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/client-sts": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.677.0.tgz", "integrity": "sha512-N5fs1GLSthnwrs44b4IJI//dcShuIT42g4pM8FCUJZwbrWn9Sp9F876R1mvb8A9TAy2S4qCXi7TkHS0REnuicQ==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -2087,7 +1961,6 @@ "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==", - "dev": true, "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -2102,7 +1975,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -2115,7 +1987,6 @@ "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==", - "dev": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -2129,7 +2000,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" } @@ -2138,7 +2008,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -2149,7 +2018,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -2162,7 +2030,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.6.tgz", "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2175,7 +2042,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -2187,7 +2053,6 @@ "version": "3.2.5", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz", "integrity": "sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==", - "dev": true, "dependencies": { "@smithy/abort-controller": "^3.1.6", "@smithy/protocol-http": "^4.1.5", @@ -2203,7 +2068,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2216,7 +2080,6 @@ "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==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -2228,14 +2091,12 @@ "node_modules/@aws-sdk/client-sts/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/core": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.677.0.tgz", "integrity": "sha512-5auvc1wmXmd7u9Y9nM95Ia+VX7J2FiZLuADitHqE4mHPH9riDgOY+uK/yM+UKr+lfq4zKiZQG7i8cfabZlCY8g==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.667.0", "@smithy/core": "^2.4.8", @@ -2257,7 +2118,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2270,7 +2130,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.1.tgz", "integrity": "sha512-NsV1jF4EvmO5wqmaSzlnTVetemBS3FZHdyc5CExbDljcyJCEEkJr8ANu2JvtNbVg/9MvKAWV44kTrGS+Pi4INg==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "@smithy/protocol-http": "^4.1.5", @@ -2288,14 +2147,12 @@ "node_modules/@aws-sdk/core/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/credential-provider-env": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.677.0.tgz", "integrity": "sha512-0ctcqKzclr9TiNIkB8I+YRogjWH/4mLWQGv/bgb8ElHqph+rPy4pOubj1Ax01sbs7XdwDaImjBYV5xXE+BEsYw==", - "dev": true, "dependencies": { "@aws-sdk/core": "3.677.0", "@aws-sdk/types": "3.667.0", @@ -2310,14 +2167,12 @@ "node_modules/@aws-sdk/credential-provider-env/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/credential-provider-http": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.677.0.tgz", "integrity": "sha512-c4TnShdzk37dhL1HGGzZ2PDKIIEmo1IbT/4y5hSRdNc8Z8fu6spE5GoeVsv6p/HdSGPS7XTy6aOFCMCk4AeIzQ==", - "dev": true, "dependencies": { "@aws-sdk/core": "3.677.0", "@aws-sdk/types": "3.667.0", @@ -2338,7 +2193,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.6.tgz", "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2351,7 +2205,6 @@ "version": "3.2.5", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz", "integrity": "sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==", - "dev": true, "dependencies": { "@smithy/abort-controller": "^3.1.6", "@smithy/protocol-http": "^4.1.5", @@ -2367,7 +2220,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2379,14 +2231,12 @@ "node_modules/@aws-sdk/credential-provider-http/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/credential-provider-ini": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.677.0.tgz", "integrity": "sha512-hW+oHj5zplPLzTk74LG+gZVOKQnmBPyRIbwg3uZWr23xfOxh/Osu9Wq8qwgu2+UyFHr+6/DRFjZJ6avNA2jpKw==", - "dev": true, "dependencies": { "@aws-sdk/core": "3.677.0", "@aws-sdk/credential-provider-env": "3.677.0", @@ -2411,14 +2261,12 @@ "node_modules/@aws-sdk/credential-provider-ini/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/credential-provider-node": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.677.0.tgz", "integrity": "sha512-DwFriiDx2SSdj7VhRv/0fm8UIK7isy+WZAlqUdZ9xDsX4x1AD5KwMv9AwGhJrMuTjnPSxRSwjt23S7ZXwUfhdw==", - "dev": true, "dependencies": { "@aws-sdk/credential-provider-env": "3.677.0", "@aws-sdk/credential-provider-http": "3.677.0", @@ -2440,14 +2288,12 @@ "node_modules/@aws-sdk/credential-provider-node/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/credential-provider-process": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.677.0.tgz", "integrity": "sha512-pBqHjIFvHBJb2NOsVqdIHWcOzXDoNXBokxTvMggb3WYML6ixwrH7kpd1CAzegeQlvZD4SCcRoy3ahv5rbuR+og==", - "dev": true, "dependencies": { "@aws-sdk/core": "3.677.0", "@aws-sdk/types": "3.667.0", @@ -2463,14 +2309,12 @@ "node_modules/@aws-sdk/credential-provider-process/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/credential-provider-sso": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.677.0.tgz", "integrity": "sha512-OkRP3z8yI22t9LS9At5fYr6RN7zKSDiGgeyjEnrqiGHOWGPMJN2GKa8IAFC4dgXt4Nm/EfmEW7UweiqzEKJKOA==", - "dev": true, "dependencies": { "@aws-sdk/client-sso": "3.677.0", "@aws-sdk/core": "3.677.0", @@ -2488,14 +2332,12 @@ "node_modules/@aws-sdk/credential-provider-sso/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.677.0.tgz", "integrity": "sha512-yjuI6hSt1rLFqBQiNKx/nF75Ao72xR8ybqKztzebtFNCrYl8oXVkRiigg5XKNCDmelsx1lcU9IcSiuPHzlGtUQ==", - "dev": true, "dependencies": { "@aws-sdk/core": "3.677.0", "@aws-sdk/types": "3.667.0", @@ -2513,14 +2355,12 @@ "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { "version": "3.667.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.667.0.tgz", "integrity": "sha512-XGz4jMAkDoTyFdtLz7ZF+C05IAhCTC1PllpvTBaj821z/L0ilhbqVhrT/f2Buw8Id/K5A390csGXgusXyrFFjA==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.667.0", "@aws-sdk/util-arn-parser": "3.568.0", @@ -2538,7 +2378,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2550,14 +2389,12 @@ "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/middleware-expect-continue": { "version": "3.667.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.667.0.tgz", "integrity": "sha512-0TiSL9S5DSG95NHGIz6qTMuV7GDKVn8tvvGSrSSZu/wXO3JaYSH0AElVpYfc4PtPRqVpEyNA7nnc7W56mMCLWQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.667.0", "@smithy/protocol-http": "^4.1.4", @@ -2572,7 +2409,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2584,14 +2420,12 @@ "node_modules/@aws-sdk/middleware-expect-continue/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/middleware-flexible-checksums": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.677.0.tgz", "integrity": "sha512-mTv3zRH+3/hW8hY0K855UrBmzW4pLb7n8MjlyL2dR8+wfXXw6DsSxGmEb4Jq13OjLTwSxyZs00JdpKtzgiIieA==", - "dev": true, "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", @@ -2613,7 +2447,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2625,14 +2458,12 @@ "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/middleware-host-header": { "version": "3.667.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.667.0.tgz", "integrity": "sha512-Z7fIAMQnPegs7JjAQvlOeWXwpMRfegh5eCoIP6VLJIeR6DLfYKbP35JBtt98R6DXslrN2RsbTogjbxPEDQfw1w==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.667.0", "@smithy/protocol-http": "^4.1.4", @@ -2647,7 +2478,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2659,14 +2489,12 @@ "node_modules/@aws-sdk/middleware-host-header/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/middleware-location-constraint": { "version": "3.667.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.667.0.tgz", "integrity": "sha512-ob85H3HhT3/u5O+x0o557xGZ78vSNeSSwMaSitxdsfs2hOuoUl1uk+OeLpi1hkuJnL41FPpokV7TVII2XrFfmg==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.667.0", "@smithy/types": "^3.5.0", @@ -2679,14 +2507,12 @@ "node_modules/@aws-sdk/middleware-location-constraint/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/middleware-logger": { "version": "3.667.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.667.0.tgz", "integrity": "sha512-PtTRNpNm/5c746jRgZCNg4X9xEJIwggkGJrF0GP9AB1ANg4pc/sF2Fvn1NtqPe9wtQ2stunJprnm5WkCHN7QiA==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.667.0", "@smithy/types": "^3.5.0", @@ -2699,14 +2525,12 @@ "node_modules/@aws-sdk/middleware-logger/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.667.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.667.0.tgz", "integrity": "sha512-U5glWD3ehFohzpUpopLtmqAlDurGWo2wRGPNgi4SwhWU7UDt6LS7E/UvJjqC0CUrjlzOw+my2A+Ncf+fisMhxQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.667.0", "@smithy/protocol-http": "^4.1.4", @@ -2721,7 +2545,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2733,14 +2556,12 @@ "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/middleware-sdk-s3": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.677.0.tgz", "integrity": "sha512-3U8FHgWuxhAl97HMdaFs/SJlhpb5+i//FHv0JWYm2oAPZflIRFeJn1bgVtD7ka1NY2iJjpnqX8hHJPS547MnFQ==", - "dev": true, "dependencies": { "@aws-sdk/core": "3.677.0", "@aws-sdk/types": "3.667.0", @@ -2765,7 +2586,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2778,7 +2598,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.1.tgz", "integrity": "sha512-NsV1jF4EvmO5wqmaSzlnTVetemBS3FZHdyc5CExbDljcyJCEEkJr8ANu2JvtNbVg/9MvKAWV44kTrGS+Pi4INg==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "@smithy/protocol-http": "^4.1.5", @@ -2796,14 +2615,12 @@ "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/middleware-ssec": { "version": "3.667.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.667.0.tgz", "integrity": "sha512-1wuAUZIkmZIvOmGg5qNQU821CGFHhkuKioxXgNh0DpUxZ9+AeiV7yorJr+bqkb2KBFv1i1TnzGRecvKf/KvZIQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.667.0", "@smithy/types": "^3.5.0", @@ -2816,14 +2633,12 @@ "node_modules/@aws-sdk/middleware-ssec/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/middleware-user-agent": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.677.0.tgz", "integrity": "sha512-A3gzUsTsvyv/JCmD0p2fkbiOyp+tpAiAADDwzi+eYeyzH4xzqnrzSkGk5KSb58uUQo27eeBzRXHd46d0u+sMrQ==", - "dev": true, "dependencies": { "@aws-sdk/core": "3.677.0", "@aws-sdk/types": "3.667.0", @@ -2841,7 +2656,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2853,14 +2667,12 @@ "node_modules/@aws-sdk/middleware-user-agent/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/region-config-resolver": { "version": "3.667.0", "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.667.0.tgz", "integrity": "sha512-iNr+JhhA902JMKHG9IwT9YdaEx6KGl6vjAL5BRNeOjfj4cZYMog6Lz/IlfOAltMtT0w88DAHDEFrBd2uO0l2eg==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.667.0", "@smithy/node-config-provider": "^3.1.8", @@ -2876,14 +2688,12 @@ "node_modules/@aws-sdk/region-config-resolver/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/s3-request-presigner": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.677.0.tgz", "integrity": "sha512-oudJgBX8FPFWiDt/jQ1fW+sJ+XHRMsQ2XXV1aAMCBNsopTBIfn4N8tAymLI3AVJl4UAsxToUITJb5k4NAx2UTw==", - "dev": true, "dependencies": { "@aws-sdk/signature-v4-multi-region": "3.677.0", "@aws-sdk/types": "3.667.0", @@ -2902,7 +2712,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2914,14 +2723,12 @@ "node_modules/@aws-sdk/s3-request-presigner/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/signature-v4-multi-region": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.677.0.tgz", "integrity": "sha512-VJvYwPnyPMBbvKDAO58t90/y2AtdRp4epax6QR0XScZEBuS777gQ3wJb1JyHLeEAEolKj/dd6jV5Iq+/lsZIIQ==", - "dev": true, "dependencies": { "@aws-sdk/middleware-sdk-s3": "3.677.0", "@aws-sdk/types": "3.667.0", @@ -2938,7 +2745,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -2951,7 +2757,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.1.tgz", "integrity": "sha512-NsV1jF4EvmO5wqmaSzlnTVetemBS3FZHdyc5CExbDljcyJCEEkJr8ANu2JvtNbVg/9MvKAWV44kTrGS+Pi4INg==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "@smithy/protocol-http": "^4.1.5", @@ -2969,14 +2774,12 @@ "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/token-providers": { "version": "3.667.0", "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.667.0.tgz", "integrity": "sha512-ZecJlG8p6D4UTYlBHwOWX6nknVtw/OBJ3yPXTSajBjhUlj9lE2xvejI8gl4rqkyLXk7z3bki+KR4tATbMaM9yg==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.667.0", "@smithy/property-provider": "^3.1.7", @@ -2994,14 +2797,12 @@ "node_modules/@aws-sdk/token-providers/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/types": { "version": "3.667.0", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.667.0.tgz", "integrity": "sha512-gYq0xCsqFfQaSL/yT1Gl1vIUjtsg7d7RhnUfsXaHt8xTxOKRTdH9GjbesBjXOzgOvB0W0vfssfreSNGFlOOMJg==", - "dev": true, "dependencies": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -3013,14 +2814,12 @@ "node_modules/@aws-sdk/types/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/util-arn-parser": { "version": "3.568.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -3031,14 +2830,12 @@ "node_modules/@aws-sdk/util-arn-parser/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/util-endpoints": { "version": "3.667.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.667.0.tgz", "integrity": "sha512-X22SYDAuQJWnkF1/q17pkX3nGw5XMD9YEUbmt87vUnRq7iyJ3JOpl6UKOBeUBaL838wA5yzdbinmCITJ/VZ1QA==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.667.0", "@smithy/types": "^3.5.0", @@ -3052,14 +2849,12 @@ "node_modules/@aws-sdk/util-endpoints/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/util-format-url": { "version": "3.667.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.667.0.tgz", "integrity": "sha512-S0D731SnEPnTfbJ/Dldw5dDrOc8uipK6NLXHDs2xIq0t61iwZLMEiN8yWCs2wAZVVJKpldUM1THLaaufU9SSSA==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.667.0", "@smithy/querystring-builder": "^3.0.7", @@ -3073,14 +2868,12 @@ "node_modules/@aws-sdk/util-format-url/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/util-locate-window": { "version": "3.568.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -3091,14 +2884,12 @@ "node_modules/@aws-sdk/util-locate-window/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.675.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.675.0.tgz", "integrity": "sha512-HW4vGfRiX54RLcsYjLuAhcBBJ6lRVEZd7njfGpAwBB9s7BH8t48vrpYbyA5XbbqbTvXfYBnugQCUw9HWjEa1ww==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.667.0", "@smithy/types": "^3.5.0", @@ -3109,14 +2900,12 @@ "node_modules/@aws-sdk/util-user-agent-browser/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/util-user-agent-node": { "version": "3.677.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.677.0.tgz", "integrity": "sha512-gFhL0zVY/um0Eu2aWil82pjWaZL4yBmOnjz0+RDz18okFBHaz1Om8o/H+1Vvj+xsnuDYV4ezVMyAaXVtTcYOnw==", - "dev": true, "dependencies": { "@aws-sdk/middleware-user-agent": "3.677.0", "@aws-sdk/types": "3.667.0", @@ -3139,14 +2928,12 @@ "node_modules/@aws-sdk/util-user-agent-node/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/util-utf8-browser": { "version": "3.259.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dev": true, "dependencies": { "tslib": "^2.3.1" } @@ -3154,14 +2941,12 @@ "node_modules/@aws-sdk/util-utf8-browser/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/xml-builder": { "version": "3.662.0", "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.662.0.tgz", "integrity": "sha512-ikLkXn0igUpnJu2mCZjklvmcDGWT9OaLRv3JyC/cRkTaaSrblPjPM7KKsltxdMTLQ+v7fjCN0TsJpxphMfaOPA==", - "dev": true, "dependencies": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -3173,14 +2958,12 @@ "node_modules/@aws-sdk/xml-builder/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@babel/runtime": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.9.tgz", "integrity": "sha512-4zpTHZ9Cm6L9L+uIqghQX8ZXg8HKFcjYO3qHoO8zTmRm6HQUJ8SSJ+KRvbMBZn0EGVlT4DRYeQ/6hjlyXBh+Kg==", - "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -3192,7 +2975,6 @@ "version": "4.9.2", "resolved": "https://registry.npmjs.org/@honeybadger-io/core/-/core-4.9.2.tgz", "integrity": "sha512-l1dabSseq+qDAspHhUg4N9UjEhbu1W7ESJRXyyrWxuUxcPXDrk24ssSgAVowG/NLlCfUMLQ1iWYKIYY6f+25sw==", - "dev": true, "dependencies": { "stacktrace-parser": "^0.1.10" } @@ -3201,7 +2983,6 @@ "version": "4.9.3", "resolved": "https://registry.npmjs.org/@honeybadger-io/js/-/js-4.9.3.tgz", "integrity": "sha512-pk76zGxEWLj0I3h/ujzrWAkJJ5rq3YMJwjk4Bs+5ToJMD5Lwpb7B5dW56ivVCfffDPkFXDpXvhVJ8BcycrwRcA==", - "dev": true, "dependencies": { "@honeybadger-io/core": "^4.9.2", "@types/aws-lambda": "^8.10.89", @@ -3212,7 +2993,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@iiif/parser/-/parser-1.1.2.tgz", "integrity": "sha512-yjbhSWBB+cWHjAgeWlMYgNydMxDGU1BO3JnmgxCclMcfi59JDsKHMXpgZpCNw+svcirBtIMD2u70KPFinr2pUA==", - "dev": true, "dependencies": { "@iiif/presentation-2": "^1.0.4", "@iiif/presentation-3": "^1.1.3", @@ -3223,7 +3003,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/@iiif/presentation-2/-/presentation-2-1.0.4.tgz", "integrity": "sha512-hJakpq62VBajesLJrYPtFm6hcn6c/HkKP7CmKZ5atuzu40m0nifWYsqigR1l9sZGvhhHb/DRshPmiW/0GNrJoA==", - "dev": true, "peerDependencies": { "@iiif/presentation-3": "*" } @@ -3232,7 +3011,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/@iiif/presentation-3/-/presentation-3-1.1.3.tgz", "integrity": "sha512-Ek+25nkQouo0pXAqCsWYbAeS4jLDEBQA7iul2jzgnvoJrucxDQN2lXyNLgOUDRqpTdSqJ69iz5lm6DLaxil+Nw==", - "dev": true, "dependencies": { "@types/geojson": "^7946.0.7" } @@ -3241,7 +3019,6 @@ "version": "0.9.22", "resolved": "https://registry.npmjs.org/@iiif/vault/-/vault-0.9.22.tgz", "integrity": "sha512-HaFX1u9TSZha0i/esZR5sZzydZgjZgITeO0JrT1qXm+qSaB1Oc0PRNzatXW48Xa0q3PPYbBB71zCL1/D1i1i1A==", - "dev": true, "dependencies": { "@iiif/parser": "^1.1.2", "@iiif/presentation-2": "1.*", @@ -3257,7 +3034,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", - "dev": true, "dependencies": { "@smithy/types": "^2.12.0", "tslib": "^2.6.2" @@ -3270,7 +3046,6 @@ "version": "2.12.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -3281,14 +3056,12 @@ "node_modules/@smithy/abort-controller/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" } @@ -3297,7 +3070,6 @@ "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==", - "dev": true, "dependencies": { "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" @@ -3306,20 +3078,17 @@ "node_modules/@smithy/chunked-blob-reader-native/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/chunked-blob-reader/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/config-resolver": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.10.tgz", "integrity": "sha512-Uh0Sz9gdUuz538nvkPiyv1DZRX9+D15EKDtnQP5rYVAzM/dnYk3P8cg73jcxyOitPgT3mE3OVj7ky7sibzHWkw==", - "dev": true, "dependencies": { "@smithy/node-config-provider": "^3.1.9", "@smithy/types": "^3.6.0", @@ -3334,14 +3103,12 @@ "node_modules/@smithy/config-resolver/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/core": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.1.tgz", "integrity": "sha512-DujtuDA7BGEKExJ05W5OdxCoyekcKT3Rhg1ZGeiUWaz2BJIWXjZmsG/DIP4W48GHno7AQwRsaCb8NcBgH3QZpg==", - "dev": true, "dependencies": { "@smithy/middleware-serde": "^3.0.8", "@smithy/protocol-http": "^4.1.5", @@ -3360,7 +3127,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -3372,14 +3138,12 @@ "node_modules/@smithy/core/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/credential-provider-imds": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.5.tgz", "integrity": "sha512-4FTQGAsuwqTzVMmiRVTn0RR9GrbRfkP0wfu/tXWVHd2LgNpTY0uglQpIScXK4NaEyXbB3JmZt8gfVqO50lP8wg==", - "dev": true, "dependencies": { "@smithy/node-config-provider": "^3.1.9", "@smithy/property-provider": "^3.1.8", @@ -3394,14 +3158,12 @@ "node_modules/@smithy/credential-provider-imds/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/eventstream-codec": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.7.tgz", "integrity": "sha512-kVSXScIiRN7q+s1x7BrQtZ1Aa9hvvP9FeCqCdBxv37GimIHgBCOnZ5Ip80HLt0DhnAKpiobFdGqTFgbaJNrazA==", - "dev": true, "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^3.6.0", @@ -3412,14 +3174,12 @@ "node_modules/@smithy/eventstream-codec/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/eventstream-serde-browser": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.11.tgz", "integrity": "sha512-Pd1Wnq3CQ/v2SxRifDUihvpXzirJYbbtXfEnnLV/z0OGCTx/btVX74P86IgrZkjOydOASBGXdPpupYQI+iO/6A==", - "dev": true, "dependencies": { "@smithy/eventstream-serde-universal": "^3.0.10", "@smithy/types": "^3.6.0", @@ -3432,14 +3192,12 @@ "node_modules/@smithy/eventstream-serde-browser/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/eventstream-serde-config-resolver": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.8.tgz", "integrity": "sha512-zkFIG2i1BLbfoGQnf1qEeMqX0h5qAznzaZmMVNnvPZz9J5AWBPkOMckZWPedGUPcVITacwIdQXoPcdIQq5FRcg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -3451,14 +3209,12 @@ "node_modules/@smithy/eventstream-serde-config-resolver/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/eventstream-serde-node": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.10.tgz", "integrity": "sha512-hjpU1tIsJ9qpcoZq9zGHBJPBOeBGYt+n8vfhDwnITPhEre6APrvqq/y3XMDEGUT2cWQ4ramNqBPRbx3qn55rhw==", - "dev": true, "dependencies": { "@smithy/eventstream-serde-universal": "^3.0.10", "@smithy/types": "^3.6.0", @@ -3471,14 +3227,12 @@ "node_modules/@smithy/eventstream-serde-node/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/eventstream-serde-universal": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.10.tgz", "integrity": "sha512-ewG1GHbbqsFZ4asaq40KmxCmXO+AFSM1b+DcO2C03dyJj/ZH71CiTg853FSE/3SHK9q3jiYQIFjlGSwfxQ9kww==", - "dev": true, "dependencies": { "@smithy/eventstream-codec": "^3.1.7", "@smithy/types": "^3.6.0", @@ -3491,14 +3245,12 @@ "node_modules/@smithy/eventstream-serde-universal/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/fetch-http-handler": { "version": "3.2.9", "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz", "integrity": "sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==", - "dev": true, "dependencies": { "@smithy/protocol-http": "^4.1.4", "@smithy/querystring-builder": "^3.0.7", @@ -3511,7 +3263,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -3523,14 +3274,12 @@ "node_modules/@smithy/fetch-http-handler/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/hash-blob-browser": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.7.tgz", "integrity": "sha512-4yNlxVNJifPM5ThaA5HKnHkn7JhctFUHvcaz6YXxHlYOSIrzI6VKQPTN8Gs1iN5nqq9iFcwIR9THqchUCouIfg==", - "dev": true, "dependencies": { "@smithy/chunked-blob-reader": "^4.0.0", "@smithy/chunked-blob-reader-native": "^3.0.1", @@ -3541,14 +3290,12 @@ "node_modules/@smithy/hash-blob-browser/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/hash-node": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.8.tgz", "integrity": "sha512-tlNQYbfpWXHimHqrvgo14DrMAgUBua/cNoz9fMYcDmYej7MAmUcjav/QKQbFc3NrcPxeJ7QClER4tWZmfwoPng==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "@smithy/util-buffer-from": "^3.0.0", @@ -3562,14 +3309,12 @@ "node_modules/@smithy/hash-node/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/hash-stream-node": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.7.tgz", "integrity": "sha512-xMAsvJ3hLG63lsBVi1Hl6BBSfhd8/Qnp8fC06kjOpJvyyCEXdwHITa5Kvdsk6gaAXLhbZMhQMIGvgUbfnJDP6Q==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "@smithy/util-utf8": "^3.0.0", @@ -3582,14 +3327,12 @@ "node_modules/@smithy/hash-stream-node/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/invalid-dependency": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.8.tgz", "integrity": "sha512-7Qynk6NWtTQhnGTTZwks++nJhQ1O54Mzi7fz4PqZOiYXb4Z1Flpb2yRvdALoggTS8xjtohWUM+RygOtB30YL3Q==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -3598,14 +3341,12 @@ "node_modules/@smithy/invalid-dependency/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -3616,14 +3357,12 @@ "node_modules/@smithy/is-array-buffer/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/md5-js": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.8.tgz", "integrity": "sha512-LwApfTK0OJ/tCyNUXqnWCKoE2b4rDSr4BJlDAVCkiWYeHESr+y+d5zlAanuLW6fnitVJRD/7d9/kN/ZM9Su4mA==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "@smithy/util-utf8": "^3.0.0", @@ -3633,14 +3372,12 @@ "node_modules/@smithy/md5-js/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/middleware-content-length": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.10.tgz", "integrity": "sha512-T4dIdCs1d/+/qMpwhJ1DzOhxCZjZHbHazEPJWdB4GDi2HjIZllVzeBEcdJUN0fomV8DURsgOyrbEUzg3vzTaOg==", - "dev": true, "dependencies": { "@smithy/protocol-http": "^4.1.5", "@smithy/types": "^3.6.0", @@ -3654,7 +3391,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -3666,14 +3402,12 @@ "node_modules/@smithy/middleware-content-length/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/middleware-endpoint": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.1.tgz", "integrity": "sha512-wWO3xYmFm6WRW8VsEJ5oU6h7aosFXfszlz3Dj176pTij6o21oZnzkCLzShfmRaaCHDkBXWBdO0c4sQAvLFP6zA==", - "dev": true, "dependencies": { "@smithy/core": "^2.5.1", "@smithy/middleware-serde": "^3.0.8", @@ -3691,14 +3425,12 @@ "node_modules/@smithy/middleware-endpoint/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/middleware-retry": { "version": "3.0.25", "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.25.tgz", "integrity": "sha512-m1F70cPaMBML4HiTgCw5I+jFNtjgz5z5UdGnUbG37vw6kh4UvizFYjqJGHvicfgKMkDL6mXwyPp5mhZg02g5sg==", - "dev": true, "dependencies": { "@smithy/node-config-provider": "^3.1.9", "@smithy/protocol-http": "^4.1.5", @@ -3718,7 +3450,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -3730,14 +3461,12 @@ "node_modules/@smithy/middleware-retry/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/middleware-serde": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.8.tgz", "integrity": "sha512-Xg2jK9Wc/1g/MBMP/EUn2DLspN8LNt+GMe7cgF+Ty3vl+Zvu+VeZU5nmhveU+H8pxyTsjrAkci8NqY6OuvZnjA==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -3749,14 +3478,12 @@ "node_modules/@smithy/middleware-serde/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/middleware-stack": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.8.tgz", "integrity": "sha512-d7ZuwvYgp1+3682Nx0MD3D/HtkmZd49N3JUndYWQXfRZrYEnCWYc8BHcNmVsPAp9gKvlurdg/mubE6b/rPS9MA==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -3768,14 +3495,12 @@ "node_modules/@smithy/middleware-stack/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/node-config-provider": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.9.tgz", "integrity": "sha512-qRHoah49QJ71eemjuS/WhUXB+mpNtwHRWQr77J/m40ewBVVwvo52kYAmb7iuaECgGTTcYxHS4Wmewfwy++ueew==", - "dev": true, "dependencies": { "@smithy/property-provider": "^3.1.8", "@smithy/shared-ini-file-loader": "^3.1.9", @@ -3789,14 +3514,12 @@ "node_modules/@smithy/node-config-provider/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/node-http-handler": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", - "dev": true, "dependencies": { "@smithy/abort-controller": "^2.2.0", "@smithy/protocol-http": "^3.3.0", @@ -3812,7 +3535,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", - "dev": true, "dependencies": { "@smithy/types": "^2.12.0", "@smithy/util-uri-escape": "^2.2.0", @@ -3826,7 +3548,6 @@ "version": "2.12.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -3838,7 +3559,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -3849,14 +3569,12 @@ "node_modules/@smithy/node-http-handler/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/property-provider": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.8.tgz", "integrity": "sha512-ukNUyo6rHmusG64lmkjFeXemwYuKge1BJ8CtpVKmrxQxc6rhUX0vebcptFA9MmrGsnLhwnnqeH83VTU9hwOpjA==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -3868,14 +3586,12 @@ "node_modules/@smithy/property-provider/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/protocol-http": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", - "dev": true, "dependencies": { "@smithy/types": "^2.12.0", "tslib": "^2.6.2" @@ -3888,7 +3604,6 @@ "version": "2.12.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -3899,14 +3614,12 @@ "node_modules/@smithy/protocol-http/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/querystring-builder": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.8.tgz", "integrity": "sha512-btYxGVqFUARbUrN6VhL9c3dnSviIwBYD9Rz1jHuN1hgh28Fpv2xjU1HeCeDJX68xctz7r4l1PBnFhGg1WBBPuA==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "@smithy/util-uri-escape": "^3.0.0", @@ -3919,14 +3632,12 @@ "node_modules/@smithy/querystring-builder/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/querystring-parser": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.8.tgz", "integrity": "sha512-BtEk3FG7Ks64GAbt+JnKqwuobJNX8VmFLBsKIwWr1D60T426fGrV2L3YS5siOcUhhp6/Y6yhBw1PSPxA5p7qGg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -3938,14 +3649,12 @@ "node_modules/@smithy/querystring-parser/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/service-error-classification": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.8.tgz", "integrity": "sha512-uEC/kCCFto83bz5ZzapcrgGqHOh/0r69sZ2ZuHlgoD5kYgXJEThCoTuw/y1Ub3cE7aaKdznb+jD9xRPIfIwD7g==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0" }, @@ -3957,7 +3666,6 @@ "version": "3.1.9", "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.9.tgz", "integrity": "sha512-/+OsJRNtoRbtsX0UpSgWVxFZLsJHo/4sTr+kBg/J78sr7iC+tHeOvOJrS5hCpVQ6sWBbhWLp1UNiuMyZhE6pmA==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -3969,14 +3677,12 @@ "node_modules/@smithy/shared-ini-file-loader/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/signature-v4": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz", "integrity": "sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "@smithy/types": "^2.12.0", @@ -3994,7 +3700,6 @@ "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -4006,7 +3711,6 @@ "version": "2.12.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -4018,7 +3722,6 @@ "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==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -4031,7 +3734,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -4043,7 +3745,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", - "dev": true, "dependencies": { "@smithy/types": "^2.12.0", "tslib": "^2.6.2" @@ -4056,7 +3757,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -4068,7 +3768,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -4080,14 +3779,12 @@ "node_modules/@smithy/signature-v4/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/smithy-client": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.2.tgz", "integrity": "sha512-dxw1BDxJiY9/zI3cBqfVrInij6ShjpV4fmGHesGZZUiP9OSE/EVfdwdRz0PgvkEvrZHpsj2htRaHJfftE8giBA==", - "dev": true, "dependencies": { "@smithy/core": "^2.5.1", "@smithy/middleware-endpoint": "^3.2.1", @@ -4105,7 +3802,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -4117,14 +3813,12 @@ "node_modules/@smithy/smithy-client/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/types": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.6.0.tgz", "integrity": "sha512-8VXK/KzOHefoC65yRgCn5vG1cysPJjHnOVt9d0ybFQSmJgQj152vMn4EkYhGuaOmnnZvCPav/KnYyE6/KsNZ2w==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -4135,14 +3829,12 @@ "node_modules/@smithy/types/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/url-parser": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.8.tgz", "integrity": "sha512-4FdOhwpTW7jtSFWm7SpfLGKIBC9ZaTKG5nBF0wK24aoQKQyDIKUw3+KFWCQ9maMzrgTJIuOvOnsV2lLGW5XjTg==", - "dev": true, "dependencies": { "@smithy/querystring-parser": "^3.0.8", "@smithy/types": "^3.6.0", @@ -4152,14 +3844,12 @@ "node_modules/@smithy/url-parser/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "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==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", @@ -4172,14 +3862,12 @@ "node_modules/@smithy/util-base64/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" } @@ -4187,14 +3875,12 @@ "node_modules/@smithy/util-body-length-browser/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -4205,14 +3891,12 @@ "node_modules/@smithy/util-body-length-node/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "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==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" @@ -4224,14 +3908,12 @@ "node_modules/@smithy/util-buffer-from/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -4242,14 +3924,12 @@ "node_modules/@smithy/util-config-provider/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/util-defaults-mode-browser": { "version": "3.0.25", "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.25.tgz", "integrity": "sha512-fRw7zymjIDt6XxIsLwfJfYUfbGoO9CmCJk6rjJ/X5cd20+d2Is7xjU5Kt/AiDt6hX8DAf5dztmfP5O82gR9emA==", - "dev": true, "dependencies": { "@smithy/property-provider": "^3.1.8", "@smithy/smithy-client": "^3.4.2", @@ -4264,14 +3944,12 @@ "node_modules/@smithy/util-defaults-mode-browser/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/util-defaults-mode-node": { "version": "3.0.25", "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.25.tgz", "integrity": "sha512-H3BSZdBDiVZGzt8TG51Pd2FvFO0PAx/A0mJ0EH8a13KJ6iUCdYnw/Dk/MdC1kTd0eUuUGisDFaxXVXo4HHFL1g==", - "dev": true, "dependencies": { "@smithy/config-resolver": "^3.0.10", "@smithy/credential-provider-imds": "^3.2.5", @@ -4288,14 +3966,12 @@ "node_modules/@smithy/util-defaults-mode-node/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/util-endpoints": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.4.tgz", "integrity": "sha512-kPt8j4emm7rdMWQyL0F89o92q10gvCUa6sBkBtDJ7nV2+P7wpXczzOfoDJ49CKXe5CCqb8dc1W+ZdLlrKzSAnQ==", - "dev": true, "dependencies": { "@smithy/node-config-provider": "^3.1.9", "@smithy/types": "^3.6.0", @@ -4308,14 +3984,12 @@ "node_modules/@smithy/util-endpoints/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -4326,14 +4000,12 @@ "node_modules/@smithy/util-hex-encoding/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/util-middleware": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.8.tgz", "integrity": "sha512-p7iYAPaQjoeM+AKABpYWeDdtwQNxasr4aXQEA/OmbOaug9V0odRVDy3Wx4ci8soljE/JXQo+abV0qZpW8NX0yA==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -4345,14 +4017,12 @@ "node_modules/@smithy/util-middleware/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/util-retry": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.8.tgz", "integrity": "sha512-TCEhLnY581YJ+g1x0hapPz13JFqzmh/pMWL2KEFASC51qCfw3+Y47MrTmea4bUE5vsdxQ4F6/KFbUeSz22Q1ow==", - "dev": true, "dependencies": { "@smithy/service-error-classification": "^3.0.8", "@smithy/types": "^3.6.0", @@ -4365,14 +4035,12 @@ "node_modules/@smithy/util-retry/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/util-stream": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.2.1.tgz", "integrity": "sha512-R3ufuzJRxSJbE58K9AEnL/uSZyVdHzud9wLS8tIbXclxKzoe09CRohj2xV8wpx5tj7ZbiJaKYcutMm1eYgz/0A==", - "dev": true, "dependencies": { "@smithy/fetch-http-handler": "^4.0.0", "@smithy/node-http-handler": "^3.2.5", @@ -4391,7 +4059,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.6.tgz", "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -4404,7 +4071,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.0.0.tgz", "integrity": "sha512-MLb1f5tbBO2X6K4lMEKJvxeLooyg7guq48C2zKr4qM7F2Gpkz4dc+hdSgu77pCJ76jVqFBjZczHYAs6dp15N+g==", - "dev": true, "dependencies": { "@smithy/protocol-http": "^4.1.5", "@smithy/querystring-builder": "^3.0.8", @@ -4417,7 +4083,6 @@ "version": "3.2.5", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz", "integrity": "sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==", - "dev": true, "dependencies": { "@smithy/abort-controller": "^3.1.6", "@smithy/protocol-http": "^4.1.5", @@ -4433,7 +4098,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -4445,14 +4109,12 @@ "node_modules/@smithy/util-stream/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "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==", - "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -4463,14 +4125,12 @@ "node_modules/@smithy/util-uri-escape/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "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==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" @@ -4482,14 +4142,12 @@ "node_modules/@smithy/util-utf8/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@smithy/util-waiter": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.7.tgz", "integrity": "sha512-d5yGlQtmN/z5eoTtIYgkvOw27US2Ous4VycnXatyoImIF9tzlcpnKqQ/V7qhvJmb2p6xZne1NopCLakdTnkBBQ==", - "dev": true, "dependencies": { "@smithy/abort-controller": "^3.1.6", "@smithy/types": "^3.6.0", @@ -4503,7 +4161,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.6.tgz", "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==", - "dev": true, "dependencies": { "@smithy/types": "^3.6.0", "tslib": "^2.6.2" @@ -4515,20 +4172,17 @@ "node_modules/@smithy/util-waiter/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@types/aws-lambda": { "version": "8.10.145", "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.145.tgz", - "integrity": "sha512-dtByW6WiFk5W5Jfgz1VM+YPA21xMXTuSFoLYIDY0L44jDLLflVPtZkYuu3/YxpGcvjzKFBZLU+GyKjR0HOYtyw==", - "dev": true + "integrity": "sha512-dtByW6WiFk5W5Jfgz1VM+YPA21xMXTuSFoLYIDY0L44jDLLflVPtZkYuu3/YxpGcvjzKFBZLU+GyKjR0HOYtyw==" }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -4538,7 +4192,6 @@ "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -4547,7 +4200,6 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -4559,7 +4211,6 @@ "version": "4.19.6", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -4570,26 +4221,22 @@ "node_modules/@types/geojson": { "version": "7946.0.14", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", - "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==", - "dev": true + "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==" }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "node_modules/@types/node": { "version": "22.7.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.9.tgz", "integrity": "sha512-jrTfRC7FM6nChvU7X2KqcrgquofrWLFDeYC1hKfwNWomVvrn7JIksqf344WN2X/y8xrgqBd2dJATZV4GbatBfg==", - "dev": true, "dependencies": { "undici-types": "~6.19.2" } @@ -4597,20 +4244,17 @@ "node_modules/@types/qs": { "version": "6.9.16", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", - "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", - "dev": true + "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -4620,7 +4264,6 @@ "version": "1.15.7", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dev": true, "dependencies": { "@types/http-errors": "*", "@types/node": "*", @@ -4630,20 +4273,17 @@ "node_modules/@types/uuid": { "version": "9.0.8", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "dev": true + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", - "dev": true, "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -4653,20 +4293,17 @@ "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==", - "dev": true + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -4678,7 +4315,6 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -4687,7 +4323,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, "engines": { "node": ">= 12" } @@ -4696,7 +4331,6 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, "dependencies": { "ms": "^2.1.3" }, @@ -4713,7 +4347,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -4722,7 +4355,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true, "engines": { "node": ">=4" } @@ -4731,7 +4363,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", "integrity": "sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -4740,7 +4371,6 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, "dependencies": { "safe-buffer": "^5.0.1" } @@ -4749,7 +4379,6 @@ "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==", - "dev": true, "funding": [ { "type": "github", @@ -4771,7 +4400,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, "funding": [ { "type": "github", @@ -4794,7 +4422,6 @@ "version": "1.15.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "dev": true, "funding": [ { "type": "individual", @@ -4814,7 +4441,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -4828,7 +4454,6 @@ "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, "dependencies": { "fetch-blob": "^3.1.2" }, @@ -4839,14 +4464,12 @@ "node_modules/http-status-codes": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz", - "integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==", - "dev": true + "integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==" }, "node_modules/iiif-builder": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/iiif-builder/-/iiif-builder-1.0.7.tgz", "integrity": "sha512-PZl7ayHGA9q+6wgCVlIOT3EnfqpbOD6JVjTkcJdMgO9t9jjbfBrO2jhs+3XRue4bg8d7i2opZARPjS9K1qRXaQ==", - "dev": true, "dependencies": { "@iiif/parser": "1.x", "@iiif/presentation-3": "1.x", @@ -4857,7 +4480,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", - "dev": true, "engines": { "node": "*" } @@ -4866,7 +4488,6 @@ "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "dev": true, "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -4888,7 +4509,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dev": true, "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -4899,7 +4519,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -4908,56 +4527,47 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "dev": true + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "dev": true + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "dev": true + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" }, "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "dev": true + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, "node_modules/lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, "node_modules/lz-string": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "dev": true, "bin": { "lz-string": "bin/bin.js" } @@ -4966,7 +4576,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -4975,7 +4584,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -4987,7 +4595,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4995,20 +4602,17 @@ "node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "dev": true + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true, "funding": [ { "type": "github", @@ -5027,7 +4631,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -5044,20 +4647,17 @@ "node_modules/parse-http-header": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-http-header/-/parse-http-header-1.0.1.tgz", - "integrity": "sha512-xOoH7vzokDoenX4e3c+4ik8lf30kq9Pawq20TH5uq3RURsIJquqFTE0gS7OAEE6nvMQzuP5OXxubYuN7YLsTiw==", - "dev": true + "integrity": "sha512-xOoH7vzokDoenX4e3c+4ik8lf30kq9Pawq20TH5uq3RURsIJquqFTE0gS7OAEE6nvMQzuP5OXxubYuN7YLsTiw==" }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "node_modules/redux": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "dev": true, "dependencies": { "@babel/runtime": "^7.9.2" } @@ -5065,14 +4665,12 @@ "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "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==", - "dev": true, "funding": [ { "type": "github", @@ -5091,14 +4689,12 @@ "node_modules/sax": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, "node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, "bin": { "semver": "bin/semver" } @@ -5107,7 +4703,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/sort-json/-/sort-json-2.0.1.tgz", "integrity": "sha512-s8cs2bcsQCzo/P2T/uoU6Js4dS/jnX8+4xunziNoq9qmSpZNCrRIAIvp4avsz0ST18HycV4z/7myJ7jsHWB2XQ==", - "dev": true, "dependencies": { "detect-indent": "^5.0.0", "detect-newline": "^2.1.0", @@ -5121,7 +4716,6 @@ "version": "0.1.10", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, "dependencies": { "type-fest": "^0.7.1" }, @@ -5132,26 +4726,22 @@ "node_modules/strnum": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "dev": true + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/type-fest": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true, "engines": { "node": ">=8" } @@ -5160,7 +4750,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/typesafe-actions/-/typesafe-actions-5.1.0.tgz", "integrity": "sha512-bna6Yi1pRznoo6Bz1cE6btB/Yy8Xywytyfrzu/wc+NFW3ZF0I+2iCGImhBsoYYCOWuICtRO4yHcnDlzgo1AdNg==", - "dev": true, "engines": { "node": ">= 4" } @@ -5168,14 +4757,12 @@ "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, "node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -5188,7 +4775,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "dev": true, "engines": { "node": ">= 8" } @@ -5197,7 +4783,6 @@ "version": "1.6.11", "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "dev": true, "dependencies": { "sax": "^1.2.4" }, diff --git a/node/src/package.json b/api/src/package.json similarity index 97% rename from node/src/package.json rename to api/src/package.json index 48505398..3eae4abd 100644 --- a/node/src/package.json +++ b/api/src/package.json @@ -5,7 +5,7 @@ "repository": "https://github.com/nulib/dc-api-v2", "author": "nulib", "license": "Apache-2.0", - "devDependencies": { + "dependencies": { "@aws-crypto/sha256-browser": "^2.0.1", "@aws-sdk/client-s3": "^3.565.0", "@aws-sdk/client-secrets-manager": "^3.563.0", diff --git a/api/template.yaml b/api/template.yaml new file mode 100644 index 00000000..d98f24e4 --- /dev/null +++ b/api/template.yaml @@ -0,0 +1,668 @@ +# Build and Deploy Template for DC API +# +# Note: Any comment starting with `#*` will be removed +# at build time. This allows us to run without the +# dependency layer in development without removing the +# layer from the build. + +AWSTemplateFormatVersion: "2010-09-09" +Transform: + - AWS::Serverless-2016-10-31 + - AWS::LanguageExtensions +Description: dc-api-v2 API +Globals: + Function: + CodeUri: ./src + Runtime: nodejs20.x + Architectures: + - x86_64 + MemorySize: 128 + Timeout: 10 + Environment: + Variables: + API_TOKEN_NAME: !Ref ApiTokenName + DC_API_ENDPOINT: !Ref DcApiEndpoint + DC_URL: !Ref DcUrl + DEV_TEAM_NET_IDS: !Ref DevTeamNetIds + ENV_PREFIX: !Ref EnvironmentPrefix + HONEYBADGER_API_KEY: !Ref HoneybadgerApiKey + HONEYBADGER_ENV: !Ref HoneybadgerEnv + HONEYBADGER_REVISION: !Ref HoneybadgerRevision + READING_ROOM_IPS: !Ref ReadingRoomIPs + SECRETS_PATH: !Ref SecretsPath +Parameters: + ApiTokenName: + Type: String + Description: Name of the jwt that DC API issues + ApiTokenSecret: + Type: String + Description: Secret Key for Encrypting JWTs (must match IIIF server) + ChatWebSocketURI: + Type: String + Description: URI of the chat websocket API + Default: "" + CustomDomainCertificateArn: + Type: String + Description: SSL Certificate for the Custom Domain Name + CustomDomainZone: + Type: String + Description: Hosted Zone Name for Custom Domain + CustomDomainHost: + Type: String + Description: Hostname within ApiDomainName for Custom Domain + DcApiEndpoint: + Type: String + Description: URL for DC API + DcUrl: + Type: String + Description: URL of Digital Collections website + DevTeamNetIds: + Type: String + Description: Northwestern NetIDs of the development team + EnvironmentPrefix: + Type: String + Description: Index Prefix + Default: "" + HoneybadgerApiKey: + Type: String + Description: Honeybadger API Key + Default: "" + HoneybadgerEnv: + Type: String + Description: Honeybadger Environment + Default: "" + HoneybadgerRevision: + Type: String + Description: Honeybadger Revision + Default: "" + PyramidBucket: + Type: String + Description: Meadow Pyramid Bucket + ReadingRoomIPs: + Type: String + Description: Comma-delimited list of IP addresses to serve private resources to + SecretsPath: + Type: String + Description: Prefix to use when loading configs from Secrets Manager + SecretsPolicy: + Type: String + Description: Policy that allows reading of required secrets + WriteConfigSecret: + Type: String + Description: Set to something other than "true" to _not_ write configuration secrets + Default: "true" +Conditions: + WriteSecret: + Fn::Equals: + - !Ref WriteConfigSecret + - true +Resources: + #* apiDependencies: + #* Type: AWS::Serverless::LayerVersion + #* Properties: + #* LayerName: !Sub "${AWS::StackName}-api-dependencies" + #* Description: Dependencies for API handlers + #* ContentUri: ./dependencies + #* CompatibleRuntimes: + #* - nodejs20.x + #* LicenseInfo: Apache-2.0 + #* Metadata: + #* BuildMethod: nodejs20.x + # Configuration + apiConfiguration: + Type: AWS::SecretsManager::Secret + Condition: WriteSecret + Properties: + Name: !Sub "${SecretsPath}/config/dcapi" + SecretString: + Fn::ToJsonString: + api_token_secret: !Ref ApiTokenSecret + base_url: !Sub "https://${CustomDomainHost}.${CustomDomainZone}/api/v2" + readIndexPolicy: + Type: AWS::IAM::ManagedPolicy + Properties: + PolicyDocument: + Version: 2012-10-17 + Statement: + - Sid: ESHTTPPolicy + Effect: Allow + Action: + - es:ESHttp* + Resource: "*" + # V2 API + getAuthCallbackFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-auth-callback.handler + Description: NUSSO callback function. + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + Events: + ApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /auth/callback + Method: GET + ApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /auth/callback + Method: HEAD + getAuthLoginFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-auth-login.handler + Description: Performs NUSSO login. + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + Events: + ApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /auth/login + Method: GET + getAuthLogoutFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-auth-logout.handler + Description: Performs NUSSO logout. + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + Events: + ApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /auth/logout + Method: GET + getAuthTokenFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-auth-token.handler + Description: Function to retrieve raw JWT. + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + Events: + ApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /auth/token + Method: GET + ApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /auth/token + Method: HEAD + getAuthWhoAmIFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-auth-whoami.handler + Description: Exchanges valid JWT token for user information. + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + Events: + ApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /auth/whoami + Method: GET + getCollectionsFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-collections.handler + Description: Gets Collections. + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + - !Ref readIndexPolicy + Events: + ApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /collections + Method: GET + ApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /collections + Method: HEAD + getCollectionByIdFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-collection-by-id.handler + Description: Gets a Collection by id. + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + - !Ref readIndexPolicy + Events: + ApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /collections/{id} + Method: GET + ApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /collections/{id} + Method: HEAD + getFileSetByIdFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-file-set-by-id.handler + Description: Gets a FileSet by id. + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + - !Ref readIndexPolicy + Events: + ApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /file-sets/{id} + Method: GET + ApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /file-sets/{id} + Method: HEAD + getFileSetAuthFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-file-set-auth.handler + Description: Authorizes access to a file set. + #* Layers: + #* - !Ref apiDependencies + Environment: + Variables: + USE_PROXIED_IP: true + Policies: + - !Ref SecretsPolicy + - !Ref readIndexPolicy + Events: + ApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /file-sets/{id}/authorization + Method: GET + ApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /file-sets/{id}/authorization + Method: HEAD + getFileSetDownloadFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-file-set-download.handler + Description: Downloads a file set. + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + - Version: 2012-10-17 + Statement: + - Sid: ExecuteAVDownloadStepFunction + Effect: Allow + Action: + - states:StartExecution + Resource: + - "*" + - Sid: BucketAccess + Effect: Allow + Action: + - s3:GetObject + Resource: !Sub "arn:aws:s3:::${PyramidBucket}/*" + - Sid: ESHTTPPolicy + Effect: Allow + Action: + - es:ESHttp* + Resource: "*" + Events: + ApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /file-sets/{id}/download + Method: GET + ApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /file-sets/{id}/download + Method: HEAD + getWorkAuthFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-work-auth.handler + Description: Authorizes access to a work. + #* Layers: + #* - !Ref apiDependencies + Environment: + Variables: + USE_PROXIED_IP: true + Policies: + - !Ref SecretsPolicy + - !Ref readIndexPolicy + Events: + ApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /works/{id}/authorization + Method: GET + ApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /works/{id}/authorization + Method: HEAD + getWorkByIdFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-work-by-id.handler + Description: Gets a Work by id. + #* Layers: + #* - !Ref apiDependencies + Environment: + Variables: + USE_PROXIED_IP: true + Policies: + - !Ref SecretsPolicy + - !Ref readIndexPolicy + Events: + ApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /works/{id} + Method: GET + ApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /works/{id} + Method: HEAD + getThumbnailFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-thumbnail.handler + Description: Gets a Work's representative thumbnail. + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + - !Ref readIndexPolicy + Events: + CollectionApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /collections/{id}/thumbnail + Method: GET + CollectionApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /collections/{id}/thumbnail + Method: HEAD + WorkApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /works/{id}/thumbnail + Method: GET + WorkApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /works/{id}/thumbnail + Method: HEAD + getSimilarFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-similar.handler + Timeout: 100 + Description: Gets works similar to a specific work. + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + - !Ref readIndexPolicy + Events: + WorkApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /works/{id}/similar + Method: GET + WorkApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /works/{id}/similar + Method: HEAD + searchPostFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/search.postSearch + Description: Handles OpenSearch search requests, Works only by default. + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + - !Ref readIndexPolicy + Events: + SearchApi: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /search + Method: POST + SearchWithModelsApi: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /search/{models} + Method: POST + searchGetFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/search.getSearch + Description: Handles paging requests + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + - !Ref readIndexPolicy + Events: + SearchApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /search + Method: GET + SearchApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /search + Method: HEAD + SearchWithModelsApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /search/{models} + Method: GET + SearchWithModelsApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /search/{models} + Method: HEAD + optionsFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/options-request.handler + Timeout: 3 + Description: Handles all OPTIONS requests + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + Events: + Everything: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /{proxy+} + Method: OPTIONS + getSharedLinkByIdFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-shared-link-by-id.handler + Description: Gets a shared link document by id. + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + - !Ref readIndexPolicy + Events: + ApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /shared-links/{id} + Method: GET + ApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /shared-links/{id} + Method: HEAD + oaiFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/oai.handler + Description: Transforms works into OAI Records. + #* Layers: + #* - !Ref apiDependencies + Timeout: 60 + Policies: + - !Ref SecretsPolicy + - !Ref readIndexPolicy + Events: + GetApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /oai + Method: GET + GetApiHead: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /oai + Method: HEAD + PostApi: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /oai + Method: POST + chatWebsocketEndpoint: + Type: AWS::Serverless::Function + Properties: + Handler: handlers/get-chat-endpoint.handler + Description: Returns the URI of the chat websocket API. + #* Layers: + #* - !Ref apiDependencies + Environment: + Variables: + WEBSOCKET_URI: !Ref ChatWebSocketURI + Policies: + - !Ref SecretsPolicy + Events: + GetApiGet: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /chat/endpoint + Method: GET + chatFeedback: + Type: AWS::Serverless::Function + Properties: + Environment: + Variables: + CHAT_FEEDBACK_BUCKET: !Ref chatFeedbackBucket + CHAT_FEEDBACK_TOPIC_ARN: !Ref chatFeedbackTopic + Handler: handlers/post-chat-feedback.handler + Description: Handles feedback from the chat. + #* Layers: + #* - !Ref apiDependencies + Policies: + - !Ref SecretsPolicy + - Version: 2012-10-17 + Statement: + - Sid: BucketAccess + Effect: Allow + Action: + - s3:PutObject + Resource: !Sub "arn:aws:s3:::${chatFeedbackBucket}/*" + - Sid: TopicAccess + Effect: Allow + Action: + - sns:Publish + Resource: !Ref chatFeedbackTopic + Events: + PostApi: + Type: HttpApi + Properties: + ApiId: !Ref dcApi + Path: /chat/feedback + Method: POST + chatFeedbackBucket: + Type: 'AWS::S3::Bucket' + chatFeedbackTopic: + Type: AWS::SNS::Topic + Properties: + DisplayName: DC Chat Feedback + TopicName: !Sub "${AWS::StackName}-chat-feedback" + dcApi: + Type: AWS::Serverless::HttpApi + Properties: + StageName: v2 + StageVariables: + basePath: api/v2 + Domain: + DomainName: !Sub "${CustomDomainHost}.${CustomDomainZone}" + BasePath: ["api/v2"] + CertificateArn: !Ref CustomDomainCertificateArn + Route53: + HostedZoneName: !Sub "${CustomDomainZone}." diff --git a/node/test/.eslintrc b/api/test/.eslintrc similarity index 100% rename from node/test/.eslintrc rename to api/test/.eslintrc diff --git a/node/test/fixtures/mocks/collection-1234-no-thumbnail.json b/api/test/fixtures/mocks/collection-1234-no-thumbnail.json similarity index 100% rename from node/test/fixtures/mocks/collection-1234-no-thumbnail.json rename to api/test/fixtures/mocks/collection-1234-no-thumbnail.json diff --git a/node/test/fixtures/mocks/collection-1234-private-published.json b/api/test/fixtures/mocks/collection-1234-private-published.json similarity index 100% rename from node/test/fixtures/mocks/collection-1234-private-published.json rename to api/test/fixtures/mocks/collection-1234-private-published.json diff --git a/node/test/fixtures/mocks/collection-1234.json b/api/test/fixtures/mocks/collection-1234.json similarity index 100% rename from node/test/fixtures/mocks/collection-1234.json rename to api/test/fixtures/mocks/collection-1234.json diff --git a/node/test/fixtures/mocks/collections.json b/api/test/fixtures/mocks/collections.json similarity index 100% rename from node/test/fixtures/mocks/collections.json rename to api/test/fixtures/mocks/collections.json diff --git a/node/test/fixtures/mocks/expired-shared-link-9101112.json b/api/test/fixtures/mocks/expired-shared-link-9101112.json similarity index 100% rename from node/test/fixtures/mocks/expired-shared-link-9101112.json rename to api/test/fixtures/mocks/expired-shared-link-9101112.json diff --git a/node/test/fixtures/mocks/fileset-1234.json b/api/test/fixtures/mocks/fileset-1234.json similarity index 100% rename from node/test/fixtures/mocks/fileset-1234.json rename to api/test/fixtures/mocks/fileset-1234.json diff --git a/node/test/fixtures/mocks/fileset-audio-1234.json b/api/test/fixtures/mocks/fileset-audio-1234.json similarity index 100% rename from node/test/fixtures/mocks/fileset-audio-1234.json rename to api/test/fixtures/mocks/fileset-audio-1234.json diff --git a/node/test/fixtures/mocks/fileset-baddata-1234.json b/api/test/fixtures/mocks/fileset-baddata-1234.json similarity index 100% rename from node/test/fixtures/mocks/fileset-baddata-1234.json rename to api/test/fixtures/mocks/fileset-baddata-1234.json diff --git a/node/test/fixtures/mocks/fileset-netid-1234.json b/api/test/fixtures/mocks/fileset-netid-1234.json similarity index 100% rename from node/test/fixtures/mocks/fileset-netid-1234.json rename to api/test/fixtures/mocks/fileset-netid-1234.json diff --git a/node/test/fixtures/mocks/fileset-restricted-1234.json b/api/test/fixtures/mocks/fileset-restricted-1234.json similarity index 100% rename from node/test/fixtures/mocks/fileset-restricted-1234.json rename to api/test/fixtures/mocks/fileset-restricted-1234.json diff --git a/node/test/fixtures/mocks/fileset-restricted-unpublished-1234.json b/api/test/fixtures/mocks/fileset-restricted-unpublished-1234.json similarity index 100% rename from node/test/fixtures/mocks/fileset-restricted-unpublished-1234.json rename to api/test/fixtures/mocks/fileset-restricted-unpublished-1234.json diff --git a/node/test/fixtures/mocks/fileset-unpublished-1234.json b/api/test/fixtures/mocks/fileset-unpublished-1234.json similarity index 100% rename from node/test/fixtures/mocks/fileset-unpublished-1234.json rename to api/test/fixtures/mocks/fileset-unpublished-1234.json diff --git a/node/test/fixtures/mocks/fileset-video-1234.json b/api/test/fixtures/mocks/fileset-video-1234.json similarity index 100% rename from node/test/fixtures/mocks/fileset-video-1234.json rename to api/test/fixtures/mocks/fileset-video-1234.json diff --git a/node/test/fixtures/mocks/missing-collection-1234.json b/api/test/fixtures/mocks/missing-collection-1234.json similarity index 100% rename from node/test/fixtures/mocks/missing-collection-1234.json rename to api/test/fixtures/mocks/missing-collection-1234.json diff --git a/node/test/fixtures/mocks/missing-fileset-1234.json b/api/test/fixtures/mocks/missing-fileset-1234.json similarity index 100% rename from node/test/fixtures/mocks/missing-fileset-1234.json rename to api/test/fixtures/mocks/missing-fileset-1234.json diff --git a/node/test/fixtures/mocks/missing-index.json b/api/test/fixtures/mocks/missing-index.json similarity index 100% rename from node/test/fixtures/mocks/missing-index.json rename to api/test/fixtures/mocks/missing-index.json diff --git a/node/test/fixtures/mocks/missing-shared-link-5678.json b/api/test/fixtures/mocks/missing-shared-link-5678.json similarity index 100% rename from node/test/fixtures/mocks/missing-shared-link-5678.json rename to api/test/fixtures/mocks/missing-shared-link-5678.json diff --git a/node/test/fixtures/mocks/missing-work-1234.json b/api/test/fixtures/mocks/missing-work-1234.json similarity index 100% rename from node/test/fixtures/mocks/missing-work-1234.json rename to api/test/fixtures/mocks/missing-work-1234.json diff --git a/node/test/fixtures/mocks/oai-list-identifiers-sets.json b/api/test/fixtures/mocks/oai-list-identifiers-sets.json similarity index 100% rename from node/test/fixtures/mocks/oai-list-identifiers-sets.json rename to api/test/fixtures/mocks/oai-list-identifiers-sets.json diff --git a/node/test/fixtures/mocks/oai-sets.json b/api/test/fixtures/mocks/oai-sets.json similarity index 100% rename from node/test/fixtures/mocks/oai-sets.json rename to api/test/fixtures/mocks/oai-sets.json diff --git a/node/test/fixtures/mocks/private-unpublished-work-1234.json b/api/test/fixtures/mocks/private-unpublished-work-1234.json similarity index 100% rename from node/test/fixtures/mocks/private-unpublished-work-1234.json rename to api/test/fixtures/mocks/private-unpublished-work-1234.json diff --git a/node/test/fixtures/mocks/private-work-1234.json b/api/test/fixtures/mocks/private-work-1234.json similarity index 100% rename from node/test/fixtures/mocks/private-work-1234.json rename to api/test/fixtures/mocks/private-work-1234.json diff --git a/node/test/fixtures/mocks/real-search-event.json b/api/test/fixtures/mocks/real-search-event.json similarity index 100% rename from node/test/fixtures/mocks/real-search-event.json rename to api/test/fixtures/mocks/real-search-event.json diff --git a/node/test/fixtures/mocks/scroll-empty.json b/api/test/fixtures/mocks/scroll-empty.json similarity index 100% rename from node/test/fixtures/mocks/scroll-empty.json rename to api/test/fixtures/mocks/scroll-empty.json diff --git a/node/test/fixtures/mocks/scroll-missing.json b/api/test/fixtures/mocks/scroll-missing.json similarity index 100% rename from node/test/fixtures/mocks/scroll-missing.json rename to api/test/fixtures/mocks/scroll-missing.json diff --git a/node/test/fixtures/mocks/scroll.json b/api/test/fixtures/mocks/scroll.json similarity index 100% rename from node/test/fixtures/mocks/scroll.json rename to api/test/fixtures/mocks/scroll.json diff --git a/node/test/fixtures/mocks/search-earliest-record.json b/api/test/fixtures/mocks/search-earliest-record.json similarity index 100% rename from node/test/fixtures/mocks/search-earliest-record.json rename to api/test/fixtures/mocks/search-earliest-record.json diff --git a/node/test/fixtures/mocks/search-multiple-targets.json b/api/test/fixtures/mocks/search-multiple-targets.json similarity index 100% rename from node/test/fixtures/mocks/search-multiple-targets.json rename to api/test/fixtures/mocks/search-multiple-targets.json diff --git a/node/test/fixtures/mocks/search.json b/api/test/fixtures/mocks/search.json similarity index 100% rename from node/test/fixtures/mocks/search.json rename to api/test/fixtures/mocks/search.json diff --git a/node/test/fixtures/mocks/shared-link-1234.json b/api/test/fixtures/mocks/shared-link-1234.json similarity index 100% rename from node/test/fixtures/mocks/shared-link-1234.json rename to api/test/fixtures/mocks/shared-link-1234.json diff --git a/node/test/fixtures/mocks/similar.json b/api/test/fixtures/mocks/similar.json similarity index 100% rename from node/test/fixtures/mocks/similar.json rename to api/test/fixtures/mocks/similar.json diff --git a/node/test/fixtures/mocks/thumbnail_full.jpg b/api/test/fixtures/mocks/thumbnail_full.jpg similarity index 100% rename from node/test/fixtures/mocks/thumbnail_full.jpg rename to api/test/fixtures/mocks/thumbnail_full.jpg diff --git a/node/test/fixtures/mocks/thumbnail_square.jpg b/api/test/fixtures/mocks/thumbnail_square.jpg similarity index 100% rename from node/test/fixtures/mocks/thumbnail_square.jpg rename to api/test/fixtures/mocks/thumbnail_square.jpg diff --git a/node/test/fixtures/mocks/unpublished-work-1234.json b/api/test/fixtures/mocks/unpublished-work-1234.json similarity index 100% rename from node/test/fixtures/mocks/unpublished-work-1234.json rename to api/test/fixtures/mocks/unpublished-work-1234.json diff --git a/node/test/fixtures/mocks/work-1234-no-collection.json b/api/test/fixtures/mocks/work-1234-no-collection.json similarity index 100% rename from node/test/fixtures/mocks/work-1234-no-collection.json rename to api/test/fixtures/mocks/work-1234-no-collection.json diff --git a/node/test/fixtures/mocks/work-1234-no-fileset-representative-image.json b/api/test/fixtures/mocks/work-1234-no-fileset-representative-image.json similarity index 100% rename from node/test/fixtures/mocks/work-1234-no-fileset-representative-image.json rename to api/test/fixtures/mocks/work-1234-no-fileset-representative-image.json diff --git a/node/test/fixtures/mocks/work-1234-no-fileset-width-height.json b/api/test/fixtures/mocks/work-1234-no-fileset-width-height.json similarity index 100% rename from node/test/fixtures/mocks/work-1234-no-fileset-width-height.json rename to api/test/fixtures/mocks/work-1234-no-fileset-width-height.json diff --git a/node/test/fixtures/mocks/work-1234-no-thumbnail.json b/api/test/fixtures/mocks/work-1234-no-thumbnail.json similarity index 100% rename from node/test/fixtures/mocks/work-1234-no-thumbnail.json rename to api/test/fixtures/mocks/work-1234-no-thumbnail.json diff --git a/node/test/fixtures/mocks/work-1234.json b/api/test/fixtures/mocks/work-1234.json similarity index 100% rename from node/test/fixtures/mocks/work-1234.json rename to api/test/fixtures/mocks/work-1234.json diff --git a/node/test/fixtures/mocks/work-netid-1234.json b/api/test/fixtures/mocks/work-netid-1234.json similarity index 100% rename from node/test/fixtures/mocks/work-netid-1234.json rename to api/test/fixtures/mocks/work-netid-1234.json diff --git a/node/test/fixtures/mocks/work-restricted-1234.json b/api/test/fixtures/mocks/work-restricted-1234.json similarity index 100% rename from node/test/fixtures/mocks/work-restricted-1234.json rename to api/test/fixtures/mocks/work-restricted-1234.json diff --git a/node/test/fixtures/mocks/work-restricted-unpublished-1234.json b/api/test/fixtures/mocks/work-restricted-unpublished-1234.json similarity index 100% rename from node/test/fixtures/mocks/work-restricted-unpublished-1234.json rename to api/test/fixtures/mocks/work-restricted-unpublished-1234.json diff --git a/node/test/fixtures/mocks/work-video-5678.json b/api/test/fixtures/mocks/work-video-5678.json similarity index 100% rename from node/test/fixtures/mocks/work-video-5678.json rename to api/test/fixtures/mocks/work-video-5678.json diff --git a/node/test/integration/get-auth-callback.test.js b/api/test/integration/get-auth-callback.test.js similarity index 100% rename from node/test/integration/get-auth-callback.test.js rename to api/test/integration/get-auth-callback.test.js diff --git a/node/test/integration/get-auth-login.test.js b/api/test/integration/get-auth-login.test.js similarity index 100% rename from node/test/integration/get-auth-login.test.js rename to api/test/integration/get-auth-login.test.js diff --git a/node/test/integration/get-auth-logout.test.js b/api/test/integration/get-auth-logout.test.js similarity index 100% rename from node/test/integration/get-auth-logout.test.js rename to api/test/integration/get-auth-logout.test.js diff --git a/node/test/integration/get-auth-token.test.js b/api/test/integration/get-auth-token.test.js similarity index 100% rename from node/test/integration/get-auth-token.test.js rename to api/test/integration/get-auth-token.test.js diff --git a/node/test/integration/get-auth-whoami.test.js b/api/test/integration/get-auth-whoami.test.js similarity index 100% rename from node/test/integration/get-auth-whoami.test.js rename to api/test/integration/get-auth-whoami.test.js diff --git a/node/test/integration/get-chat-endpoint.test.js b/api/test/integration/get-chat-endpoint.test.js similarity index 100% rename from node/test/integration/get-chat-endpoint.test.js rename to api/test/integration/get-chat-endpoint.test.js diff --git a/node/test/integration/get-collection-by-id.test.js b/api/test/integration/get-collection-by-id.test.js similarity index 100% rename from node/test/integration/get-collection-by-id.test.js rename to api/test/integration/get-collection-by-id.test.js diff --git a/node/test/integration/get-collections.test.js b/api/test/integration/get-collections.test.js similarity index 100% rename from node/test/integration/get-collections.test.js rename to api/test/integration/get-collections.test.js diff --git a/node/test/integration/get-doc.test.js b/api/test/integration/get-doc.test.js similarity index 100% rename from node/test/integration/get-doc.test.js rename to api/test/integration/get-doc.test.js diff --git a/node/test/integration/get-file-set-auth.test.js b/api/test/integration/get-file-set-auth.test.js similarity index 100% rename from node/test/integration/get-file-set-auth.test.js rename to api/test/integration/get-file-set-auth.test.js diff --git a/node/test/integration/get-file-set-download.test.js b/api/test/integration/get-file-set-download.test.js similarity index 100% rename from node/test/integration/get-file-set-download.test.js rename to api/test/integration/get-file-set-download.test.js diff --git a/node/test/integration/get-shared-link-by-id.test.js b/api/test/integration/get-shared-link-by-id.test.js similarity index 100% rename from node/test/integration/get-shared-link-by-id.test.js rename to api/test/integration/get-shared-link-by-id.test.js diff --git a/node/test/integration/get-similar.test.js b/api/test/integration/get-similar.test.js similarity index 100% rename from node/test/integration/get-similar.test.js rename to api/test/integration/get-similar.test.js diff --git a/node/test/integration/get-thumbnail.test.js b/api/test/integration/get-thumbnail.test.js similarity index 100% rename from node/test/integration/get-thumbnail.test.js rename to api/test/integration/get-thumbnail.test.js diff --git a/node/test/integration/get-work-auth.test.js b/api/test/integration/get-work-auth.test.js similarity index 100% rename from node/test/integration/get-work-auth.test.js rename to api/test/integration/get-work-auth.test.js diff --git a/node/test/integration/get-work-by-id.test.js b/api/test/integration/get-work-by-id.test.js similarity index 100% rename from node/test/integration/get-work-by-id.test.js rename to api/test/integration/get-work-by-id.test.js diff --git a/node/test/integration/middleware.test.js b/api/test/integration/middleware.test.js similarity index 100% rename from node/test/integration/middleware.test.js rename to api/test/integration/middleware.test.js diff --git a/node/test/integration/oai.test.js b/api/test/integration/oai.test.js similarity index 100% rename from node/test/integration/oai.test.js rename to api/test/integration/oai.test.js diff --git a/node/test/integration/options-request.test.js b/api/test/integration/options-request.test.js similarity index 100% rename from node/test/integration/options-request.test.js rename to api/test/integration/options-request.test.js diff --git a/node/test/integration/post-chat-feedback.test.js b/api/test/integration/post-chat-feedback.test.js similarity index 100% rename from node/test/integration/post-chat-feedback.test.js rename to api/test/integration/post-chat-feedback.test.js diff --git a/node/test/integration/search.test.js b/api/test/integration/search.test.js similarity index 100% rename from node/test/integration/search.test.js rename to api/test/integration/search.test.js diff --git a/node/test/test-helpers/event-builder.js b/api/test/test-helpers/event-builder.js similarity index 100% rename from node/test/test-helpers/event-builder.js rename to api/test/test-helpers/event-builder.js diff --git a/node/test/test-helpers/index.js b/api/test/test-helpers/index.js similarity index 100% rename from node/test/test-helpers/index.js rename to api/test/test-helpers/index.js diff --git a/node/test/unit/api/api-token.test.js b/api/test/unit/api/api-token.test.js similarity index 100% rename from node/test/unit/api/api-token.test.js rename to api/test/unit/api/api-token.test.js diff --git a/node/test/unit/api/helpers.test.js b/api/test/unit/api/helpers.test.js similarity index 100% rename from node/test/unit/api/helpers.test.js rename to api/test/unit/api/helpers.test.js diff --git a/node/test/unit/api/opensearch.test.js b/api/test/unit/api/opensearch.test.js similarity index 100% rename from node/test/unit/api/opensearch.test.js rename to api/test/unit/api/opensearch.test.js diff --git a/node/test/unit/api/pagination.test.js b/api/test/unit/api/pagination.test.js similarity index 100% rename from node/test/unit/api/pagination.test.js rename to api/test/unit/api/pagination.test.js diff --git a/node/test/unit/api/request/models.test.js b/api/test/unit/api/request/models.test.js similarity index 100% rename from node/test/unit/api/request/models.test.js rename to api/test/unit/api/request/models.test.js diff --git a/node/test/unit/api/request/pipeline.test.js b/api/test/unit/api/request/pipeline.test.js similarity index 100% rename from node/test/unit/api/request/pipeline.test.js rename to api/test/unit/api/request/pipeline.test.js diff --git a/node/test/unit/api/response/error.test.js b/api/test/unit/api/response/error.test.js similarity index 100% rename from node/test/unit/api/response/error.test.js rename to api/test/unit/api/response/error.test.js diff --git a/node/test/unit/api/response/iiif/collection.test.js b/api/test/unit/api/response/iiif/collection.test.js similarity index 100% rename from node/test/unit/api/response/iiif/collection.test.js rename to api/test/unit/api/response/iiif/collection.test.js diff --git a/node/test/unit/api/response/iiif/manifest.test.js b/api/test/unit/api/response/iiif/manifest.test.js similarity index 100% rename from node/test/unit/api/response/iiif/manifest.test.js rename to api/test/unit/api/response/iiif/manifest.test.js diff --git a/node/test/unit/api/response/iiif/presentation-api/items.test.js b/api/test/unit/api/response/iiif/presentation-api/items.test.js similarity index 100% rename from node/test/unit/api/response/iiif/presentation-api/items.test.js rename to api/test/unit/api/response/iiif/presentation-api/items.test.js diff --git a/node/test/unit/api/response/iiif/presentation-api/metadata.test.js b/api/test/unit/api/response/iiif/presentation-api/metadata.test.js similarity index 100% rename from node/test/unit/api/response/iiif/presentation-api/metadata.test.js rename to api/test/unit/api/response/iiif/presentation-api/metadata.test.js diff --git a/node/test/unit/api/response/iiif/presentation-api/placeholder-canvas.test.js b/api/test/unit/api/response/iiif/presentation-api/placeholder-canvas.test.js similarity index 100% rename from node/test/unit/api/response/iiif/presentation-api/placeholder-canvas.test.js rename to api/test/unit/api/response/iiif/presentation-api/placeholder-canvas.test.js diff --git a/node/test/unit/api/response/iiif/presentation-api/provider.test.js b/api/test/unit/api/response/iiif/presentation-api/provider.test.js similarity index 100% rename from node/test/unit/api/response/iiif/presentation-api/provider.test.js rename to api/test/unit/api/response/iiif/presentation-api/provider.test.js diff --git a/node/test/unit/api/response/opensearch.test.js b/api/test/unit/api/response/opensearch.test.js similarity index 100% rename from node/test/unit/api/response/opensearch.test.js rename to api/test/unit/api/response/opensearch.test.js diff --git a/node/test/unit/aws/environment.test.js b/api/test/unit/aws/environment.test.js similarity index 100% rename from node/test/unit/aws/environment.test.js rename to api/test/unit/aws/environment.test.js diff --git a/node/test/unit/package.test.js b/api/test/unit/package.test.js similarity index 100% rename from node/test/unit/package.test.js rename to api/test/unit/package.test.js diff --git a/lambdas/get-download-link.js b/av-download/lambdas/get-download-link.js similarity index 100% rename from lambdas/get-download-link.js rename to av-download/lambdas/get-download-link.js diff --git a/lambdas/package-lock.json b/av-download/lambdas/package-lock.json similarity index 100% rename from lambdas/package-lock.json rename to av-download/lambdas/package-lock.json diff --git a/lambdas/package.json b/av-download/lambdas/package.json similarity index 100% rename from lambdas/package.json rename to av-download/lambdas/package.json diff --git a/lambdas/send-templated-email.js b/av-download/lambdas/send-templated-email.js similarity index 100% rename from lambdas/send-templated-email.js rename to av-download/lambdas/send-templated-email.js diff --git a/lambdas/start-audio-transcode.js b/av-download/lambdas/start-audio-transcode.js similarity index 100% rename from lambdas/start-audio-transcode.js rename to av-download/lambdas/start-audio-transcode.js diff --git a/lambdas/start-transcode.js b/av-download/lambdas/start-transcode.js similarity index 100% rename from lambdas/start-transcode.js rename to av-download/lambdas/start-transcode.js diff --git a/lambdas/transcode-status.js b/av-download/lambdas/transcode-status.js similarity index 100% rename from lambdas/transcode-status.js rename to av-download/lambdas/transcode-status.js diff --git a/av-download/template.yaml b/av-download/template.yaml new file mode 100644 index 00000000..82e5d681 --- /dev/null +++ b/av-download/template.yaml @@ -0,0 +1,459 @@ +# Build and Deploy Template for DC API +# +# Note: Any comment starting with `#*` will be removed +# at build time. This allows us to run without the +# dependency layer in development without removing the +# layer from the build. + +AWSTemplateFormatVersion: "2010-09-09" +Transform: + - AWS::Serverless-2016-10-31 + - AWS::LanguageExtensions +Description: dc-api-v2 AV Download Support +Parameters: + FfmpegLayer: + Type: String + Description: "FFMPEG Lambda Layer ARN" + Default: "arn:aws:lambda:us-east-1:625046682746:layer:ffmpeg:11" + MediaConvertDestinationBucket: + Type: String + Description: S3 bucket destination for transcoded AV resource + Default: "" + MediaConvertEndpoint: + Type: String + Description: MediaConvert endpoint + Default: "" + MediaConvertJobQueueArn: + Type: String + Description: Job Queue ARN for MediaConvert + Default: "" + MediaConvertRoleArn: + Type: String + Description: MediaConvert role ARN + Default: "" + PyramidBucket: + Type: String + Description: Meadow Pyramid Bucket + RepositoryEmail: + Type: String + Description: Verified email address to use as sender + SecretsPath: + Type: String + Description: Prefix to use when loading configs from Secrets Manager + StreamingBucket: + Type: String + Description: Meadow Streaming Bucket +Resources: + apiConfiguration: + Type: AWS::SecretsManager::Secret + Properties: + Name: !Sub "${SecretsPath}/config/av-download" + SecretString: + Fn::ToJsonString: + step_function_endpoint: !Ref AWS::NoValue + av_download_state_machine_arn: !Ref avDownloadStateMachine + av_download_email_template: !Ref avDownloadEmailTemplate + use_proxied_ip: true + streaming_bucket: !Ref StreamingBucket + media_convert_destination_bucket: !Ref MediaConvertDestinationBucket + media_convert_endpoint: !Ref MediaConvertEndpoint + media_convert_job_queue_arn: !Ref MediaConvertJobQueueArn + media_convert_role_arn: !Ref MediaConvertRoleArn + pyramid_bucket: !Ref PyramidBucket + repository_email: !Ref RepositoryEmail + start_audio_transcode_function: !GetAtt startAudioTranscodeFunction.Arn + start_transcode_function: !GetAtt startTranscodeFunction.Arn + transcode_status_function: !GetAtt transcodeStatusFunction.Arn + get_download_link_function: !GetAtt getDownloadLinkFunction.Arn + send_templated_email_function: !GetAtt sendTemplatedEmailFunction.Arn + avDownloadStateMachine: + Type: AWS::Serverless::StateMachine + Properties: + Definition: + Comment: HLS stiching and save as file in s3 and email download link + StartAt: audioOrVideo + States: + audioOrVideo: + Type: Choice + Choices: + - Variable: "$.transcodeInput.type" + StringEquals: audio + Next: startAudioTranscode + Default: startTranscode + startAudioTranscode: + Type: Task + Resource: arn:aws:states:::lambda:invoke + Parameters: + Payload.$: "$.transcodeInput" + FunctionName.$: "$.configuration.startAudioTranscodeFunction" + Next: getDownloadLink + InputPath: "$" + ResultPath: "$.audioTranscodeOutput" + startTranscode: + Type: Task + Resource: arn:aws:states:::lambda:invoke + Parameters: + Payload.$: "$.transcodeInput" + FunctionName.$: "$.configuration.startTranscodeFunction" + Next: transcodeStatus + InputPath: "$" + ResultPath: "$.transcodeOutput" + transcodeStatus: + Type: Task + Resource: arn:aws:states:::lambda:invoke + Parameters: + Payload.$: "$.transcodeOutput.Payload" + FunctionName.$: "$.configuration.transcodeStatusFunction" + InputPath: "$" + ResultPath: "$.transcodeOutput" + Next: transcodeCompleted? + transcodeCompleted?: + Type: Choice + Choices: + - Variable: "$.transcodeOutput.Payload.status" + StringEquals: COMPLETE + Next: getDownloadLink + - Variable: "$.transcodeOutput.Payload.status" + StringEquals: ERROR + Next: failWorkflow + - Variable: "$.transcodeOutput.Payload.status" + StringEquals: CANCELED + Next: failWorkflow + Default: Wait 10 seconds + Wait 10 seconds: + Type: Wait + Seconds: 10 + Next: transcodeStatus + getDownloadLink: + Type: Task + Resource: arn:aws:states:::lambda:invoke + Parameters: + Payload.$: "$.presignedUrlInput" + FunctionName.$: "$.configuration.getDownloadLinkFunction" + InputPath: "$" + ResultPath: "$.downloadLinkOutput" + Next: sendTemplatedEmail + sendTemplatedEmail: + Type: Task + Resource: arn:aws:states:::lambda:invoke + Parameters: + Payload: + to.$: "$.sendEmailInput.to" + from.$: "$.sendEmailInput.from" + template.$: "$.sendEmailInput.template" + params: + downloadLink.$: "$.downloadLinkOutput.Payload.downloadLink" + fileSetId.$: "$.sendEmailInput.params.fileSetId" + fileSetLabel.$: "$.sendEmailInput.params.fileSetLabel" + workId.$: "$.sendEmailInput.params.workId" + fileType.$: "$.sendEmailInput.params.fileType" + FunctionName.$: "$.configuration.sendTemplatedEmailFunction" + End: true + failWorkflow: + Type: Fail + Name: !Sub "${AWS::StackName}-av-download-state-machine" + Policies: + - Version: 2012-10-17 + Statement: + - Sid: LambaInvokePermissions + Effect: Allow + Action: + - lambda:InvokeFunction + Resource: + - !GetAtt startAudioTranscodeFunction.Arn + - !GetAtt startTranscodeFunction.Arn + - !GetAtt transcodeStatusFunction.Arn + - !GetAtt getDownloadLinkFunction.Arn + - !GetAtt sendTemplatedEmailFunction.Arn + avDownloadEmailTemplate: + Type: AWS::SES::Template + Properties: + Template: + TemplateName: !Sub "${AWS::StackName}-av-download-template" + SubjectPart: Download of {{fileSetLabel}} is ready! + TextPart: | + Hello, + Your request for {{fileType}} download of {{fileSetLabel}} (file set id: {{fileSetId}}) has been fulfilled. Your download will be available for 3 days. + The {{fileType}} file can be downloaded from {{downloadLink}} + HtmlPart: | + + + + + NUL Meadow Download + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+

+ Northwestern University Logo +

+
+
+ + + + + + +
+

+ Hello, +

+

+ Your request for {{fileType}} download of {{fileSetLabel}} (file set id: {{fileSetId}}) has been + fulfilled. Click below to download your file: +

+

+ + + {{downloadLink}} + +

+

+ (Your download will be available for 3 days) +

+
+
+ + + + + + + + + +
+

+ Northwestern University Library +

+
+

+ VISIT MEADOW NOW +

+
+
+ + + + startAudioTranscodeFunction: + Type: AWS::Serverless::Function + Properties: + Runtime: nodejs20.x + CodeUri: ./lambdas + Handler: start-audio-transcode.handler + Description: Performs audio transcode job with ffmpeg + Timeout: 900 + MemorySize: 10240 + Layers: + - !Ref FfmpegLayer + Policies: + - Version: 2012-10-17 + Statement: + - Sid: BucketAccess + Effect: Allow + Action: + - s3:PutObject + Resource: !Sub "arn:aws:s3:::${MediaConvertDestinationBucket}/*" + Environment: + Variables: + MEDIA_CONVERT_DESTINATION_BUCKET: !Ref MediaConvertDestinationBucket + startTranscodeFunction: + Type: AWS::Serverless::Function + Properties: + Runtime: nodejs20.x + CodeUri: ./lambdas + Handler: start-transcode.handler + Description: Creates MediaConvert Job to transcode HLS stream + Environment: + Variables: + MEDIA_CONVERT_ENDPOINT: !Ref MediaConvertEndpoint + MEDIA_CONVERT_JOB_QUEUE_ARN: !Ref MediaConvertJobQueueArn + MEDIA_CONVERT_ROLE_ARN: !Ref MediaConvertRoleArn + Policies: + - Version: 2012-10-17 + Statement: + - Sid: PassMediaConvertRole + Effect: Allow + Action: + - iam:PassRole + Resource: + - !Ref MediaConvertRoleArn + - Sid: StartTranscodeJob + Effect: Allow + Action: + - mediaconvert:CreateJob + Resource: "*" + transcodeStatusFunction: + Type: AWS::Serverless::Function + Properties: + Runtime: nodejs20.x + CodeUri: ./lambdas + Handler: transcode-status.handler + Description: Determines when transcode job has completed or errored + Environment: + Variables: + MEDIA_CONVERT_ENDPOINT: !Ref MediaConvertEndpoint + Policies: + - Version: 2012-10-17 + Statement: + - Sid: TranscodeJobStatus + Effect: Allow + Action: + - mediaconvert:GetJob + - mediaconvert:ListJobs + Resource: "*" + getDownloadLinkFunction: + Type: AWS::Serverless::Function + Properties: + Runtime: nodejs20.x + CodeUri: ./lambdas + Handler: get-download-link.handler + Description: Creates presigned url + Policies: + - Version: 2012-10-17 + Statement: + - Sid: BucketAccess + Effect: Allow + Action: + - s3:GetObject + Resource: !Sub "arn:aws:s3:::${MediaConvertDestinationBucket}/*" + sendTemplatedEmailFunction: + Type: AWS::Serverless::Function + Properties: + Runtime: nodejs20.x + CodeUri: ./lambdas + Handler: send-templated-email.handler + Description: Sends email + Policies: + - Version: 2012-10-17 + Statement: + - Sid: SESSendEmail + Effect: Allow + Action: + - ses:SendTemplatedEmail + Resource: "*" diff --git a/chat/template.yaml b/chat/template.yaml index ecdb0d17..061c3493 100644 --- a/chat/template.yaml +++ b/chat/template.yaml @@ -1,6 +1,6 @@ AWSTemplateFormatVersion: "2010-09-09" Transform: AWS::Serverless-2016-10-31 -Description: Websocket Chat API for dc-api-v2 +Description: dc-api-v2 Websocket Chat API Parameters: ApiTokenName: Type: String diff --git a/node/redirect/index.js b/docs/redirect/index.js similarity index 97% rename from node/redirect/index.js rename to docs/redirect/index.js index ca667b76..66335872 100644 --- a/node/redirect/index.js +++ b/docs/redirect/index.js @@ -8,5 +8,5 @@ exports.handler = async () => { location: target }, body: `

Redirecting to API Documentation

` - } -} + }; +}; diff --git a/docs/template.yaml b/docs/template.yaml new file mode 100644 index 00000000..9e92c292 --- /dev/null +++ b/docs/template.yaml @@ -0,0 +1,108 @@ +# Build and Deploy Template for DC API +# +# Note: Any comment starting with `#*` will be removed +# at build time. This allows us to run without the +# dependency layer in development without removing the +# layer from the build. + +AWSTemplateFormatVersion: "2010-09-09" +Transform: + - AWS::Serverless-2016-10-31 + - AWS::LanguageExtensions +Description: dc-api-v2 Docs +Parameters: + CustomDomainZone: + Type: String + Description: Hosted Zone Name for Custom Domain + CustomDomainHost: + Type: String + Description: Hostname within ApiDomainName for Custom Domain + RootApiID: + Type: String + Description: ID of the root API + RootApiLatestStage: + Type: String + Description: Name of the latest stage for the root API +Resources: + rootRedirect: + Type: AWS::Serverless::Function + Properties: + Runtime: nodejs20.x + CodeUri: ./redirect + Handler: index.handler + Timeout: 1 + Description: Redirects to latest version of docs + Environment: + Variables: + REDIRECT_TO: /docs/v2/index.html + rootRedirectIntegration: + Type: AWS::ApiGatewayV2::Integration + Properties: + ApiId: !Ref RootApiID + IntegrationType: AWS_PROXY + IntegrationUri: !GetAtt rootRedirect.Arn + PayloadFormatVersion: "2.0" + rootRedirectRouteGet: + Type: AWS::ApiGatewayV2::Route + Properties: + ApiId: !Ref RootApiID + RouteKey: GET / + Target: !Sub integrations/${rootRedirectIntegration} + rootRedirectRouteHead: + Type: AWS::ApiGatewayV2::Route + Properties: + ApiId: !Ref RootApiID + RouteKey: HEAD / + Target: !Sub integrations/${rootRedirectIntegration} + rootRedirectPermission: + Type: AWS::Lambda::Permission + Properties: + Action: lambda:InvokeFunction + FunctionName: !Ref rootRedirect + Principal: apigateway.amazonaws.com + SourceArn: !Sub arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${RootApiID}/*/*/ + docsMapping: + Type: AWS::ApiGatewayV2::ApiMapping + Properties: + DomainName: !Sub "${CustomDomainHost}.${CustomDomainZone}" + ApiId: !Ref RootApiID + Stage: !Ref RootApiLatestStage + docsBucket: + Type: AWS::S3::Bucket + Properties: + PublicAccessBlockConfiguration: + BlockPublicAcls: false + BlockPublicPolicy: false + IgnorePublicAcls: false + RestrictPublicBuckets: false + WebsiteConfiguration: + IndexDocument: index.html + ErrorDocument: index.html + docsBucketPolicy: + Type: AWS::S3::BucketPolicy + Properties: + PolicyDocument: + Id: MyPolicy + Version: 2012-10-17 + Statement: + - Sid: PublicReadForGetBucketObjects + Effect: Allow + Principal: "*" + Action: "s3:GetObject" + Resource: !Sub "arn:aws:s3:::${docsBucket}/*" + Bucket: !Ref docsBucket + docsIntegration: + Type: AWS::ApiGatewayV2::Integration + Properties: + ApiId: !Ref RootApiID + IntegrationMethod: GET + IntegrationType: HTTP_PROXY + IntegrationUri: !Sub "http://${docsBucket}.s3-website-us-east-1.amazonaws.com/{proxy}" + PayloadFormatVersion: "1.0" + docsRoute: + Type: AWS::ApiGatewayV2::Route + Properties: + ApiId: !Ref RootApiID + AuthorizationType: NONE + RouteKey: GET /docs/v2/{proxy+} + Target: !Sub "integrations/${docsIntegration}" diff --git a/node/src/handlers/default-request.js b/node/src/handlers/default-request.js deleted file mode 100644 index 4d7e7c55..00000000 --- a/node/src/handlers/default-request.js +++ /dev/null @@ -1,6 +0,0 @@ -const { transformError } = require("../api/response/error"); -const { wrap } = require("./middleware"); - -module.exports.handler = wrap(async () => { - return transformError({ statusCode: 404 }); -}); diff --git a/node/test/integration/default-handler.test.js b/node/test/integration/default-handler.test.js deleted file mode 100644 index a8568301..00000000 --- a/node/test/integration/default-handler.test.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; - -const chai = require("chai"); -const expect = chai.expect; - -const defaultHandler = requireSource("handlers/default-request"); - -describe("$default handler", async () => { - const event = helpers - .mockEvent("GET", "/blah") - .headers({ - Origin: "https://dc.library.northwestern.edu/origin-test-path", - }) - .render(); - - it("returns a 404 response", async () => { - const response = await defaultHandler.handler(event); - expect(response.statusCode).to.eq(404); - expect(JSON.parse(response.body).status).to.eq(404); - expect(JSON.parse(response.body).error).to.eq("Not Found"); - }); -}); diff --git a/node/test/unit/redirect.test.js b/node/test/unit/redirect.test.js deleted file mode 100644 index 2a6ab0ce..00000000 --- a/node/test/unit/redirect.test.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; - -const { handler } = require("../../redirect"); - -const chai = require("chai"); -const expect = chai.expect; - -describe("redirect", function () { - helpers.saveEnvironment(); - - it("redirects unrecognized routes to the configured path", async () => { - process.env.REDIRECT_TO = "/redirect/target"; - const event = helpers.mockEvent("GET", "/").render(); - const result = await handler(event); - expect(result.statusCode).to.eq(302); - expect(result.headers.location).to.eq("/redirect/target"); - }); -}); diff --git a/state_machines/av_download.json b/state_machines/av_download.json deleted file mode 100644 index 7e8de941..00000000 --- a/state_machines/av_download.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "Comment": "HLS stiching and save as file in s3 and email download link", - "StartAt": "audioOrVideo", - "States": { - "audioOrVideo": { - "Type": "Choice", - "Choices": [ - { - "Variable": "$.transcodeInput.type", - "StringEquals": "audio", - "Next": "startAudioTranscode" - } - ], - "Default": "startTranscode" - }, - "startAudioTranscode": { - "Type": "Task", - "Resource": "arn:aws:states:::lambda:invoke", - "Parameters": { - "Payload.$": "$.transcodeInput", - "FunctionName.$": "$.configuration.startAudioTranscodeFunction" - }, - "Next": "getDownloadLink", - "InputPath": "$", - "ResultPath": "$.audioTranscodeOutput" - }, - "startTranscode": { - "Type": "Task", - "Resource": "arn:aws:states:::lambda:invoke", - "Parameters": { - "Payload.$": "$.transcodeInput", - "FunctionName.$": "$.configuration.startTranscodeFunction" - }, - "Next": "transcodeStatus", - "InputPath": "$", - "ResultPath": "$.transcodeOutput" - }, - "transcodeStatus": { - "Type": "Task", - "Resource": "arn:aws:states:::lambda:invoke", - "Parameters": { - "Payload.$": "$.transcodeOutput.Payload", - "FunctionName.$": "$.configuration.transcodeStatusFunction" - }, - "InputPath": "$", - "ResultPath": "$.transcodeOutput", - "Next": "transcodeCompleted?" - }, - "transcodeCompleted?": { - "Type": "Choice", - "Choices": [ - { - "Variable": "$.transcodeOutput.Payload.status", - "StringEquals": "COMPLETE", - "Next": "getDownloadLink" - }, - { - "Variable": "$.transcodeOutput.Payload.status", - "StringEquals": "ERROR", - "Next": "failWorkflow" - }, - { - "Variable": "$.transcodeOutput.Payload.status", - "StringEquals": "CANCELED", - "Next": "failWorkflow" - } - ], - "Default": "Wait 10 seconds" - }, - "Wait 10 seconds": { - "Type": "Wait", - "Seconds": 10, - "Next": "transcodeStatus" - }, - "getDownloadLink": { - "Type": "Task", - "Resource": "arn:aws:states:::lambda:invoke", - "Parameters": { - "Payload.$": "$.presignedUrlInput", - "FunctionName.$": "$.configuration.getDownloadLinkFunction" - }, - "InputPath": "$", - "ResultPath": "$.downloadLinkOutput", - "Next": "sendTemplatedEmail" - }, - "sendTemplatedEmail": { - "Type": "Task", - "Resource": "arn:aws:states:::lambda:invoke", - "Parameters": { - "Payload": { - "to.$": "$.sendEmailInput.to", - "from.$": "$.sendEmailInput.from", - "template.$": "$.sendEmailInput.template", - "params": { - "downloadLink.$": "$.downloadLinkOutput.Payload.downloadLink", - "fileSetId.$": "$.sendEmailInput.params.fileSetId", - "fileSetLabel.$": "$.sendEmailInput.params.fileSetLabel", - "workId.$": "$.sendEmailInput.params.workId", - "fileType.$": "$.sendEmailInput.params.fileType" - } - }, - "FunctionName.$": "$.configuration.sendTemplatedEmailFunction" - }, - "End": true - }, - "failWorkflow": { - "Type": "Fail" - } - } -} \ No newline at end of file diff --git a/template.yaml b/template.yaml index ce4c8787..25da1118 100644 --- a/template.yaml +++ b/template.yaml @@ -9,31 +9,7 @@ AWSTemplateFormatVersion: "2010-09-09" Transform: - AWS::Serverless-2016-10-31 - AWS::LanguageExtensions -Description: > - dc-api-v2 - - SAM Template for dc-api-v2 -# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst -Globals: - Function: - CodeUri: ./node/src - Runtime: nodejs20.x - Architectures: - - x86_64 - MemorySize: 128 - Timeout: 10 - Environment: - Variables: - API_TOKEN_NAME: !Ref ApiTokenName - DC_API_ENDPOINT: !Ref DcApiEndpoint - DC_URL: !Ref DcUrl - DEV_TEAM_NET_IDS: !Ref DevTeamNetIds - ENV_PREFIX: !Ref EnvironmentPrefix - HONEYBADGER_API_KEY: !Ref HoneybadgerApiKey - HONEYBADGER_ENV: !Ref HoneybadgerEnv - HONEYBADGER_REVISION: !Ref HoneybadgerRevision - READING_ROOM_IPS: !Ref ReadingRoomIPs - SECRETS_PATH: !Ref SecretsPath +Description: dc-api-v2 Parameters: ApiTokenName: Type: String @@ -56,6 +32,22 @@ Parameters: DcUrl: Type: String Description: URL of Digital Collections website + DeployAPI: + Type: String + Description: Set to true to deploy API + Default: "true" + DeployAVDownload: + Type: String + Description: Set to true to deploy AVDownload + Default: "true" + DeployChat: + Type: String + Description: Set to true to deploy Chat + Default: "true" + DeployDocs: + Type: String + Description: Set to true to deploy Docs + Default: "false" DevTeamNetIds: Type: String Description: Northwestern NetIDs of the development team @@ -115,32 +107,15 @@ Parameters: Description: Set to something other than "true" to _not_ write configuration secrets Default: "true" Conditions: - WriteSecret: - Fn::Equals: - - !Ref WriteConfigSecret - - true + DeployAPI: + Fn::Equals: [!Ref DeployAPI, "true"] + DeployAVDownload: + Fn::Equals: [!Ref DeployAVDownload, "true"] + DeployChat: + Fn::Equals: [!Ref DeployChat, "true"] + DeployDocs: + Fn::Equals: [!Ref DeployDocs, "true"] Resources: - #* apiDependencies: - #* Type: AWS::Serverless::LayerVersion - #* Properties: - #* LayerName: !Sub "${AWS::StackName}-api-dependencies" - #* Description: Dependencies for API handlers - #* ContentUri: ./layers/api_dependencies - #* CompatibleRuntimes: - #* - nodejs20.x - #* LicenseInfo: Apache-2.0 - #* Metadata: - #* BuildMethod: nodejs20.x - # Configuration - apiConfiguration: - Type: AWS::SecretsManager::Secret - Condition: WriteSecret - Properties: - Name: !Sub "${SecretsPath}/config/dcapi" - SecretString: - Fn::ToJsonString: - api_token_secret: !Ref ApiTokenSecret - base_url: !Sub "https://${CustomDomainHost}.${CustomDomainZone}/api/v2" readSecretsPolicy: Type: AWS::IAM::ManagedPolicy Properties: @@ -157,504 +132,48 @@ Resources: Action: - secretsmanager:BatchGetSecretValue Resource: "*" - readIndexPolicy: - Type: AWS::IAM::ManagedPolicy - Properties: - PolicyDocument: - Version: 2012-10-17 - Statement: - - Sid: ESHTTPPolicy - Effect: Allow - Action: - - es:ESHttp* - Resource: "*" - # V2 API - getAuthCallbackFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-auth-callback.handler - Description: NUSSO callback function. - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - Events: - ApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /auth/callback - Method: GET - ApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /auth/callback - Method: HEAD - getAuthLoginFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-auth-login.handler - Description: Performs NUSSO login. - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - Events: - ApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /auth/login - Method: GET - getAuthLogoutFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-auth-logout.handler - Description: Performs NUSSO logout. - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - Events: - ApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /auth/logout - Method: GET - getAuthTokenFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-auth-token.handler - Description: Function to retrieve raw JWT. - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - Events: - ApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /auth/token - Method: GET - ApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /auth/token - Method: HEAD - getAuthWhoAmIFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-auth-whoami.handler - Description: Exchanges valid JWT token for user information. - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - Events: - ApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /auth/whoami - Method: GET - getCollectionsFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-collections.handler - Description: Gets Collections. - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - - !Ref readIndexPolicy - Events: - ApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /collections - Method: GET - ApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /collections - Method: HEAD - getCollectionByIdFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-collection-by-id.handler - Description: Gets a Collection by id. - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - - !Ref readIndexPolicy - Events: - ApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /collections/{id} - Method: GET - ApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /collections/{id} - Method: HEAD - getFileSetByIdFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-file-set-by-id.handler - Description: Gets a FileSet by id. - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - - !Ref readIndexPolicy - Events: - ApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /file-sets/{id} - Method: GET - ApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /file-sets/{id} - Method: HEAD - getFileSetAuthFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-file-set-auth.handler - Description: Authorizes access to a file set. - #* Layers: - #* - !Ref apiDependencies - Environment: - Variables: - USE_PROXIED_IP: true - Policies: - - !Ref readSecretsPolicy - - !Ref readIndexPolicy - Events: - ApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /file-sets/{id}/authorization - Method: GET - ApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /file-sets/{id}/authorization - Method: HEAD - getFileSetDownloadFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-file-set-download.handler - Description: Downloads a file set. - #* Layers: - #* - !Ref apiDependencies - Environment: - Variables: - STEP_FUNCTION_ENDPOINT: !Ref AWS::NoValue - AV_DOWNLOAD_STATE_MACHINE_ARN: !Ref avDownloadStateMachine - AV_DOWNLOAD_EMAIL_TEMPLATE: !Ref avDownloadEmailTemplate - USE_PROXIED_IP: true - STREAMING_BUCKET: !Ref StreamingBucket - MEDIA_CONVERT_DESTINATION_BUCKET: !Ref MediaConvertDestinationBucket - MEDIA_CONVERT_ENDPOINT: !Ref MediaConvertEndpoint - MEDIA_CONVERT_JOB_QUEUE_ARN: !Ref MediaConvertJobQueueArn - MEDIA_CONVERT_ROLE_ARN: !Ref MediaConvertRoleArn - PYRAMID_BUCKET: !Ref PyramidBucket - REPOSITORY_EMAIL: !Ref RepositoryEmail - START_AUDIO_TRANSCODE_FUNCTION: !GetAtt startAudioTranscodeFunction.Arn - START_TRANSCODE_FUNCTION: !GetAtt startTranscodeFunction.Arn - TRANSCODE_STATUS_FUNCTION: !GetAtt transcodeStatusFunction.Arn - GET_DOWNLOAD_LINK_FUNCTION: !GetAtt getDownloadLinkFunction.Arn - SEND_TEMPLATED_EMAIL_FUNCTION: !GetAtt sendTemplatedEmailFunction.Arn - Policies: - - !Ref readSecretsPolicy - - Version: 2012-10-17 - Statement: - - Sid: ExecuteAVDownloadStepFunction - Effect: Allow - Action: - - states:StartExecution - Resource: - - !Ref avDownloadStateMachine - - Sid: BucketAccess - Effect: Allow - Action: - - s3:GetObject - Resource: !Sub "arn:aws:s3:::${PyramidBucket}/*" - - Sid: ESHTTPPolicy - Effect: Allow - Action: - - es:ESHttp* - Resource: "*" - Events: - ApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /file-sets/{id}/download - Method: GET - ApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /file-sets/{id}/download - Method: HEAD - getWorkAuthFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-work-auth.handler - Description: Authorizes access to a work. - #* Layers: - #* - !Ref apiDependencies - Environment: - Variables: - USE_PROXIED_IP: true - Policies: - - !Ref readSecretsPolicy - - !Ref readIndexPolicy - Events: - ApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /works/{id}/authorization - Method: GET - ApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /works/{id}/authorization - Method: HEAD - getWorkByIdFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-work-by-id.handler - Description: Gets a Work by id. - #* Layers: - #* - !Ref apiDependencies - Environment: - Variables: - USE_PROXIED_IP: true - Policies: - - !Ref readSecretsPolicy - - !Ref readIndexPolicy - Events: - ApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /works/{id} - Method: GET - ApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /works/{id} - Method: HEAD - getThumbnailFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-thumbnail.handler - Description: Gets a Work's representative thumbnail. - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - - !Ref readIndexPolicy - Events: - CollectionApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /collections/{id}/thumbnail - Method: GET - CollectionApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /collections/{id}/thumbnail - Method: HEAD - WorkApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /works/{id}/thumbnail - Method: GET - WorkApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /works/{id}/thumbnail - Method: HEAD - getSimilarFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-similar.handler - Timeout: 100 - Description: Gets works similar to a specific work. - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - - !Ref readIndexPolicy - Events: - WorkApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /works/{id}/similar - Method: GET - WorkApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /works/{id}/similar - Method: HEAD - searchPostFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/search.postSearch - Description: Handles OpenSearch search requests, Works only by default. - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - - !Ref readIndexPolicy - Events: - SearchApi: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /search - Method: POST - SearchWithModelsApi: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /search/{models} - Method: POST - searchGetFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/search.getSearch - Description: Handles paging requests - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - - !Ref readIndexPolicy - Events: - SearchApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /search - Method: GET - SearchApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /search - Method: HEAD - SearchWithModelsApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /search/{models} - Method: GET - SearchWithModelsApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /search/{models} - Method: HEAD - optionsFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/options-request.handler - Timeout: 3 - Description: Handles all OPTIONS requests - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - Events: - Everything: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /{proxy+} - Method: OPTIONS - getSharedLinkByIdFunction: - Type: AWS::Serverless::Function + api: + Type: AWS::Serverless::Application + Condition: DeployAPI Properties: - Handler: handlers/get-shared-link-by-id.handler - Description: Gets a shared link document by id. - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - - !Ref readIndexPolicy - Events: - ApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /shared-links/{id} - Method: GET - ApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /shared-links/{id} - Method: HEAD - oaiFunction: - Type: AWS::Serverless::Function + Location: ./api/template.yaml + Parameters: + ApiTokenName: !Ref ApiTokenName + ApiTokenSecret: !Ref ApiTokenSecret + ChatWebSocketURI: !If [DeployChat, !GetAtt [chatWebsocket, Outputs.WebSocketURI], ""] + CustomDomainCertificateArn: !Ref CustomDomainCertificateArn + CustomDomainZone: !Ref CustomDomainZone + CustomDomainHost: !Ref CustomDomainHost + DcApiEndpoint: !Ref DcApiEndpoint + DcUrl: !Ref DcUrl + DevTeamNetIds: !Ref DevTeamNetIds + EnvironmentPrefix: !Ref EnvironmentPrefix + HoneybadgerApiKey: !Ref HoneybadgerApiKey + HoneybadgerEnv: !Ref HoneybadgerEnv + HoneybadgerRevision: !Ref HoneybadgerRevision + PyramidBucket: !Ref PyramidBucket + ReadingRoomIPs: !Ref ReadingRoomIPs + SecretsPath: !Ref SecretsPath + SecretsPolicy: !Ref readSecretsPolicy + WriteConfigSecret: !Ref WriteConfigSecret + avDownload: + Type: AWS::Serverless::Application + Condition: DeployAVDownload Properties: - Handler: handlers/oai.handler - Description: Transforms works into OAI Records. - #* Layers: - #* - !Ref apiDependencies - Timeout: 60 - Policies: - - !Ref readSecretsPolicy - - !Ref readIndexPolicy - Events: - GetApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /oai - Method: GET - GetApiHead: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /oai - Method: HEAD - PostApi: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /oai - Method: POST + Location: ./av-download/template.yaml + Parameters: + FfmpegLayer: !Ref FfmpegLayer + MediaConvertDestinationBucket: !Ref MediaConvertDestinationBucket + MediaConvertEndpoint: !Ref MediaConvertEndpoint + MediaConvertJobQueueArn: !Ref MediaConvertJobQueueArn + MediaConvertRoleArn: !Ref MediaConvertRoleArn + PyramidBucket: !Ref PyramidBucket + RepositoryEmail: !Ref RepositoryEmail + SecretsPath: !Ref SecretsPath + StreamingBucket: !Ref StreamingBucket chatWebsocket: Type: AWS::Serverless::Application + Condition: DeployChat Properties: Location: ./chat/template.yaml Parameters: @@ -665,498 +184,27 @@ Resources: HoneybadgerRevision: !Ref HoneybadgerRevision SecretsPath: !Ref SecretsPath SecretsPolicy: !Ref readSecretsPolicy - chatWebsocketEndpoint: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/get-chat-endpoint.handler - Description: Returns the URI of the chat websocket API. - #* Layers: - #* - !Ref apiDependencies - Environment: - Variables: - WEBSOCKET_URI: !GetAtt chatWebsocket.Outputs.WebSocketURI - Policies: - - !Ref readSecretsPolicy - Events: - GetApiGet: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /chat/endpoint - Method: GET - chatFeedback: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/post-chat-feedback.handler - Description: Handles feedback from the chat. - #* Layers: - #* - !Ref apiDependencies - Environment: - Variables: - CHAT_FEEDBACK_BUCKET: !Ref chatFeedbackBucket - CHAT_FEEDBACK_TOPIC_ARN: !Ref chatFeedbackTopic - Policies: - - !Ref readSecretsPolicy - - Version: 2012-10-17 - Statement: - - Sid: BucketAccess - Effect: Allow - Action: - - s3:PutObject - Resource: !Sub "arn:aws:s3:::${chatFeedbackBucket}/*" - - Sid: TopicAccess - Effect: Allow - Action: - - sns:Publish - Resource: !Ref chatFeedbackTopic - Events: - PostApi: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: /chat/feedback - Method: POST - chatFeedbackBucket: - Type: 'AWS::S3::Bucket' - Properties: - BucketName: - Fn::Join: - - "-" - - - !Sub "${AWS::StackName}-chat-feedback" - - !Select [2, !Split ['/', !Ref AWS::StackId]] - chatFeedbackTopic: - Type: AWS::SNS::Topic - Properties: - DisplayName: DC Chat Feedback - TopicName: !Sub "${AWS::StackName}-chat-feedback" - defaultFunction: - Type: AWS::Serverless::Function - Properties: - Handler: handlers/default-request.handler - Timeout: 3 - Description: Handles all other requests - #* Layers: - #* - !Ref apiDependencies - Policies: - - !Ref readSecretsPolicy - Events: - Everything: - Type: HttpApi - Properties: - ApiId: !Ref dcApi - Path: $default - Method: ANY - - # Resources for AV Download state machine - avDownloadStateMachine: - Type: AWS::Serverless::StateMachine - Properties: - DefinitionUri: ./state_machines/av_download.json - Name: !Sub "${AWS::StackName}-av-download-state-machine" - Policies: - - !Ref readSecretsPolicy - - Version: 2012-10-17 - Statement: - - Sid: LambaInvokePermissions - Effect: Allow - Action: - - lambda:InvokeFunction - Resource: - - !GetAtt startAudioTranscodeFunction.Arn - - !GetAtt startTranscodeFunction.Arn - - !GetAtt transcodeStatusFunction.Arn - - !GetAtt getDownloadLinkFunction.Arn - - !GetAtt sendTemplatedEmailFunction.Arn - avDownloadEmailTemplate: - Type: AWS::SES::Template - Properties: - Template: - TemplateName: !Sub "${AWS::StackName}-av-download-template" - SubjectPart: Download of {{fileSetLabel}} is ready! - TextPart: | - Hello, - Your request for {{fileType}} download of {{fileSetLabel}} (file set id: {{fileSetId}}) has been fulfilled. Your download will be available for 3 days. - The {{fileType}} file can be downloaded from {{downloadLink}} - HtmlPart: | - - - - - NUL Meadow Download - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - -
-

- Northwestern University Logo -

-
-
- - - - - - -
-

- Hello, -

-

- Your request for {{fileType}} download of {{fileSetLabel}} (file set id: {{fileSetId}}) has been - fulfilled. Click below to download your file: -

-

- - - {{downloadLink}} - -

-

- (Your download will be available for 3 days) -

-
-
- - - - - - - - - -
-

- Northwestern University Library -

-
-

- VISIT MEADOW NOW -

-
-
- - - - startAudioTranscodeFunction: - Type: AWS::Serverless::Function - Properties: - Runtime: nodejs16.x - CodeUri: ./lambdas - Handler: start-audio-transcode.handler - Description: Performs audio transcode job with ffmpeg - Timeout: 900 - MemorySize: 10240 - Layers: - - !Ref FfmpegLayer - Policies: - - !Ref readSecretsPolicy - - Version: 2012-10-17 - Statement: - - Sid: BucketAccess - Effect: Allow - Action: - - s3:PutObject - Resource: !Sub "arn:aws:s3:::${MediaConvertDestinationBucket}/*" - Environment: - Variables: - MEDIA_CONVERT_DESTINATION_BUCKET: !Ref MediaConvertDestinationBucket - startTranscodeFunction: - Type: AWS::Serverless::Function - Properties: - Runtime: nodejs20.x - CodeUri: ./lambdas - Handler: start-transcode.handler - Description: Creates MediaConvert Job to transcode HLS stream - Environment: - Variables: - MEDIA_CONVERT_ENDPOINT: !Ref MediaConvertEndpoint - MEDIA_CONVERT_JOB_QUEUE_ARN: !Ref MediaConvertJobQueueArn - MEDIA_CONVERT_ROLE_ARN: !Ref MediaConvertRoleArn - Policies: - - !Ref readSecretsPolicy - - Version: 2012-10-17 - Statement: - - Sid: PassMediaConvertRole - Effect: Allow - Action: - - iam:PassRole - Resource: - - !Ref MediaConvertRoleArn - - Sid: StartTranscodeJob - Effect: Allow - Action: - - mediaconvert:CreateJob - Resource: "*" - transcodeStatusFunction: - Type: AWS::Serverless::Function - Properties: - Runtime: nodejs20.x - CodeUri: ./lambdas - Handler: transcode-status.handler - Description: Determines when transcode job has completed or errored - Environment: - Variables: - MEDIA_CONVERT_ENDPOINT: !Ref MediaConvertEndpoint - Policies: - - !Ref readSecretsPolicy - - Version: 2012-10-17 - Statement: - - Sid: TranscodeJobStatus - Effect: Allow - Action: - - mediaconvert:GetJob - - mediaconvert:ListJobs - Resource: "*" - getDownloadLinkFunction: - Type: AWS::Serverless::Function - Properties: - Runtime: nodejs20.x - CodeUri: ./lambdas - Handler: get-download-link.handler - Description: Creates presigned url - Policies: - - !Ref readSecretsPolicy - - Version: 2012-10-17 - Statement: - - Sid: BucketAccess - Effect: Allow - Action: - - s3:GetObject - Resource: !Sub "arn:aws:s3:::${MediaConvertDestinationBucket}/*" - sendTemplatedEmailFunction: - Type: AWS::Serverless::Function + docs: + Type: AWS::Serverless::Application + Condition: DeployDocs Properties: - Runtime: nodejs20.x - CodeUri: ./lambdas - Handler: send-templated-email.handler - Description: Sends email - Policies: - - !Ref readSecretsPolicy - - Version: 2012-10-17 - Statement: - - Sid: SESSendEmail - Effect: Allow - Action: - - ses:SendTemplatedEmail - Resource: "*" - + Location: ./docs/template.yaml + Parameters: + CustomDomainHost: !Ref CustomDomainHost + CustomDomainZone: !Ref CustomDomainZone + RootApiID: !Ref rootApi + RootApiLatestStage: !Ref rootApilatestStage # API Gateway Resources - dcApi: - Type: AWS::Serverless::HttpApi - Properties: - StageName: v2 - StageVariables: - basePath: api/v2 - Domain: - DomainName: !Sub "${CustomDomainHost}.${CustomDomainZone}" - BasePath: api/v2 - CertificateArn: !Ref CustomDomainCertificateArn - Route53: - HostedZoneName: !Sub "${CustomDomainZone}." - # root API rootApi: Type: AWS::Serverless::HttpApi Properties: StageName: latest - rootRedirect: - Type: AWS::Serverless::Function - Properties: - CodeUri: ./node/redirect - Handler: index.handler - Timeout: 1 - Description: Redirects to latest version of docs - Environment: - Variables: - REDIRECT_TO: /docs/v2/index.html - Events: - RedirectApiGet: - Type: HttpApi - Properties: - ApiId: !Ref rootApi - Path: / - Method: GET - RedirectApiHead: - Type: HttpApi - Properties: - ApiId: !Ref rootApi - Path: / - Method: HEAD - # Documentation - docsMapping: - Type: AWS::ApiGatewayV2::ApiMapping - Properties: - DomainName: !Sub "${CustomDomainHost}.${CustomDomainZone}" - ApiId: !Ref rootApi - Stage: !Ref rootApilatestStage - DependsOn: dcApi - docsBucket: - Type: AWS::S3::Bucket - Properties: - BucketName: !Sub "${CustomDomainHost}-docs.${CustomDomainZone}" - PublicAccessBlockConfiguration: - BlockPublicAcls: false - BlockPublicPolicy: false - IgnorePublicAcls: false - RestrictPublicBuckets: false - WebsiteConfiguration: - IndexDocument: index.html - ErrorDocument: index.html - docsBucketPolicy: - Type: AWS::S3::BucketPolicy - Properties: - PolicyDocument: - Id: MyPolicy - Version: 2012-10-17 - Statement: - - Sid: PublicReadForGetBucketObjects - Effect: Allow - Principal: "*" - Action: "s3:GetObject" - Resource: !Sub "arn:aws:s3:::${docsBucket}/*" - Bucket: !Ref docsBucket - docsIntegration: - Type: AWS::ApiGatewayV2::Integration - Properties: - ApiId: !Ref rootApi - IntegrationMethod: GET - IntegrationType: HTTP_PROXY - IntegrationUri: !Sub "http://${docsBucket}.s3-website-us-east-1.amazonaws.com/{proxy}" - PayloadFormatVersion: "1.0" - docsRoute: - Type: AWS::ApiGatewayV2::Route - Properties: - ApiId: !Ref rootApi - AuthorizationType: NONE - RouteKey: GET /docs/v2/{proxy+} - Target: !Sub "integrations/${docsIntegration}" Outputs: Endpoint: Description: "The base API endpoint for the stack" - Value: !Sub "https://${CustomDomainHost}.${CustomDomainZone}/api/v2" \ No newline at end of file + Value: !Sub "https://${CustomDomainHost}.${CustomDomainZone}/api/v2" + WebSocketURI: + Description: "The WebSocket URI for the chat application" + Value: !If [DeployChat, !GetAtt [chatWebsocket, Outputs.WebSocketURI], ""]