diff --git a/.env.sample b/.env.sample index c4ea110..2c9f560 100644 --- a/.env.sample +++ b/.env.sample @@ -1,3 +1,4 @@ +# shellcheck disable=SC2034 # These settings work for American Cloud. #S3_ACCESS_KEY=??? @@ -19,8 +20,6 @@ S3_SET_ACL=false #ENDORSER_API_URL=https://test-api.endorser.ch #ENDORSER_API_URL=https://api.endorser.ch -INFURA_PROJECT_ID=??? - # host where the final image can be accessed by the public # default is https://test-image.timesafari.app #DOWNLOAD_IMAGE_SERVER=test-image.timesafari.app diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..16faf3a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,21 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] +### Added +- Replacement of an existing file +- Local resolver for did:ethr +- Testing for file deletion +### Fixed +- Incorrect check for others who recorded same image +### Changed in DB or environment +- Nothing + + +## [1.0.0] +### Added +- All endpoints: image POST & DELETE, image-limits, ping diff --git a/Dockerfile b/Dockerfile index 34f47f6..3ade64a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM node:21-alpine +FROM node:22-alpine ARG IMAGE_API_VERSION RUN npm install -g pnpm RUN apk add git @@ -10,4 +10,4 @@ WORKDIR image-api RUN git checkout $IMAGE_API_VERSION RUN pnpm install --prod -CMD node server.js +CMD node src/server.js diff --git a/Makefile.test b/Makefile.test new file mode 100644 index 0000000..b12b46e --- /dev/null +++ b/Makefile.test @@ -0,0 +1,103 @@ +# from https://github.com/box/Makefile.test +# `make -C test -j` + +# Makefile that has a convenient check target. +# It can be included from another Makefile that only has a TESTS variable +# defined like this +# +# TESTS ?= +# +# Runs the specified test executables. Prepends the test's name to each test's output +# and gives a nice summary at the end of test execution about passed failed +# tests. + +# Only bash is supported +SHELL := /bin/bash + +THIS_FILE := $(realpath $(lastword $(MAKEFILE_LIST))) +# The directory where Makefile.test (this file) resides +THIS_FILE_DIR := $(shell dirname $(THIS_FILE)) + +# FIRST_MAKEFILE may be passed from parent make to child make. If it is not +# absent, do not overwrite it. +FIRST_MAKEFILE ?= $(realpath $(firstword $(MAKEFILE_LIST))) +export FIRST_MAKEFILE + +# The directory where the Makefile, that is invoked from the command line, +# resides. That makefile would define the TESTS variable. We assume that the +# binaries defined in the TESTS variable also reside in the directory as +# the Makefile. The generated intermediate files will also go to this directory. +FIRST_MAKEFILE_DIR ?= $(shell dirname $(FIRST_MAKEFILE)) +export FIRST_MAKEFILE_DIR + +# So that the child makefiles can see the same TESTS variable. +export TESTS + +failedTestsName := .makefile_test_failed_tests +executedTestsName := .makefile_test_executed_tests +TEST_TARGETS := $(TESTS:%=TARGET_FOR_%) +export TEST_TARGETS + +# If the tests need a different environment one can append to this variable. +TEST_ENVIRONMENT = PYTHONPATH=$(THIS_FILE_DIR):$$PYTHONPATH PATH=$(THIS_FILE_DIR):$$PATH + +# TODO: Only write to intermediate files, if they exist already. +# https://unix.stackexchange.com/q/405497/212862 +# There is still a race condition here. Maybe we should use sed for appending. +define RUN_ONE_TEST +TARGET_FOR_$(1): $$(FIRST_MAKEFILE_DIR)/$(1) + +@export PATH=$$$$(pwd):$$$$PATH; \ + if [ -e $$(FIRST_MAKEFILE_DIR)/$$(executedTestsName) ]; then \ + echo $$< >> $$(FIRST_MAKEFILE_DIR)/$$(executedTestsName); \ + fi; \ + $$(TEST_ENVIRONMENT) $$< 2>&1 | sed "s/^/ [$$$$(basename $$<)] /"; test $$$${PIPESTATUS[0]} -eq 0; \ + if [ $$$$? -eq 0 ]; then \ + echo " PASSED: $$$$(basename $$<)"; \ + else \ + echo " FAILED: $$$$(basename $$<)"; \ + if [ -e $$(FIRST_MAKEFILE_DIR)/$$(failedTestsName) ]; then \ + echo $$< >> $$(FIRST_MAKEFILE_DIR)/$$(failedTestsName); \ + fi; \ + fi; +endef + +# Build the above rule to run one test, for all tests. +$(foreach currtest,$(TESTS),$(eval $(call RUN_ONE_TEST,$(currtest)))) + +# execute the tests and look at the generated temp files afterwards. +actualCheck: $(TEST_TARGETS) + +@failed_tests=$$(cat $(FIRST_MAKEFILE_DIR)/$(failedTestsName) 2> /dev/null | wc -l;); \ + executed_tests=$$(cat $(FIRST_MAKEFILE_DIR)/$(executedTestsName) 2> /dev/null | wc -l;); \ + if [ $$failed_tests -ne 0 -a $$executed_tests -ne 0 ]; then \ + echo ---------------------------------; \ + echo "Failed $$failed_tests out of $$executed_tests tests"; \ + echo ---------------------------------; \ + elif [ $$failed_tests -eq 0 ]; then \ + echo ---------------------------------; \ + echo "All $$executed_tests tests passed"; \ + echo ---------------------------------; \ + fi; \ + exit $$failed_tests; + +# A commonly used bash command to clean intermediate files. Instead of writing +# it every time re-use this variable. +RM_INTERMEDIATE_FILES := rm -f $(FIRST_MAKEFILE_DIR)/$(failedTestsName) $(FIRST_MAKEFILE_DIR)/$(executedTestsName) + +# At the start of the make, we want to start with empty intermediate files. +TRUNCATE_INTERMEDIATE_FILES := cat /dev/null > $(FIRST_MAKEFILE_DIR)/$(failedTestsName) && cat /dev/null > $(FIRST_MAKEFILE_DIR)/$(executedTestsName) + +# With trap make sure the clean step is always executed before and after the +# tests run time. Do not leave residual files in the repo. +check: + +@trap "code=\$$?; \ + $(RM_INTERMEDIATE_FILES); \ + exit \$${code};" EXIT; \ + $(TRUNCATE_INTERMEDIATE_FILES); \ + $(MAKE) -f $(THIS_FILE) actualCheck; + +all: check + +.PHONY: all check preCheck actualCheck $(TEST_TARGETS) +.DEFAULT_GOAL := all + + diff --git a/README.md b/README.md index 2392022..c0c1ec9 100644 --- a/README.md +++ b/README.md @@ -13,23 +13,29 @@ mkdir uploads pnpm run migrate ``` -Now set up an S3 bucket & Infura project, and create a .env file from .env.sample with these important settings: +Now set up an S3 bucket, and create a .env file from .env.sample with these important settings: ``` AWS_ACCESS_KEY= AWS_SECRET_KEY= AWS_REGION= - -INFURA_PROJECT_ID= ``` ## dev ``` -node server.js +node src/server.js ``` ## test +#### automated + +```shell +make -C test -j +``` + +#### manual + ```shell # run this first command in a directory where `npm install did-jwt` has been run CODE='OWNER_DID="did:ethr:0x0000694B58C2cC69658993A90D3840C560f2F51F"; OWNER_PRIVATE_KEY_HEX="2b6472c026ec2aa2c4235c994a63868fc9212d18b58f6cbfe861b52e71330f5b"; didJwt = require("did-jwt"); didJwt.createJWT({ exp: Math.floor(Date.now() / 1000) + 60, iat: Math.floor(Date.now() / 1000), iss: OWNER_DID }, { issuer: OWNER_DID, signer: didJwt.SimpleSigner(OWNER_PRIVATE_KEY_HEX) }).then(console.log)' @@ -51,4 +57,4 @@ JWT=`node -e "$CODE"`; curl -X DELETE -H "Authorization: Bearer $JWT" http://loc ## deploy to prod subsequent times -* Update version in server.js file. Add CHANGELOG.md entry. +* Update version in server.js 'ping' endpoint. Add CHANGELOG.md entry. diff --git a/package.json b/package.json index 2584ea4..6a547c3 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,16 @@ { - "name": "Images for Trade", - "version": "0.0.1", + "version": "1.2.0-beta", "description": "", "license": "UNLICENSED", "dependencies": { - "@aws-sdk/client-s3": "^3.521.0", - "@aws-sdk/lib-storage": "^3.521.0", + "@aws-sdk/client-s3": "^3.614.0", + "@aws-sdk/lib-storage": "^3.614.0", "cors": "^2.8.5", - "did-jwt": "^8.0.1", + "did-jwt": "^8.0.4", "did-resolver": "^4.1.0", "dotenv": "^16.4.5", - "ethr-did-resolver": "^10.1.5", - "express": "^4.18.2", + "express": "^4.19.2", "luxon": "^3.4.4", "multer": "1.4.5-lts.1", "sqlite3": "^5.1.7" @@ -21,6 +19,7 @@ "flywaydb-cli": "^0.9.0" }, "scripts": { - "migrate": "flyway -configFiles=sql/flyway.conf migrate" + "migrate": "flyway -configFiles=sql/flyway.conf migrate", + "start": "node src/server.js" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ca5746..78ac278 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,29 +6,26 @@ settings: dependencies: '@aws-sdk/client-s3': - specifier: ^3.521.0 - version: 3.521.0 + specifier: ^3.614.0 + version: 3.614.0 '@aws-sdk/lib-storage': - specifier: ^3.521.0 - version: 3.521.0(@aws-sdk/client-s3@3.521.0) + specifier: ^3.614.0 + version: 3.614.0(@aws-sdk/client-s3@3.614.0) cors: specifier: ^2.8.5 version: 2.8.5 did-jwt: - specifier: ^8.0.1 - version: 8.0.1 + specifier: ^8.0.4 + version: 8.0.4 did-resolver: specifier: ^4.1.0 version: 4.1.0 dotenv: specifier: ^16.4.5 version: 16.4.5 - ethr-did-resolver: - specifier: ^10.1.5 - version: 10.1.5 express: - specifier: ^4.18.2 - version: 4.18.2 + specifier: ^4.19.2 + version: 4.19.2 luxon: specifier: ^3.4.4 version: 3.4.4 @@ -46,655 +43,641 @@ devDependencies: packages: - /@adraffy/ens-normalize@1.10.1: - resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} - dev: false - - /@aws-crypto/crc32@3.0.0: - resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} - dependencies: - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.521.0 - tslib: 1.14.1 - dev: false - - /@aws-crypto/crc32c@3.0.0: - resolution: {integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==} - dependencies: - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.521.0 - tslib: 1.14.1 - dev: false - - /@aws-crypto/ie11-detection@3.0.0: - resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} - dependencies: - tslib: 1.14.1 - dev: false - - /@aws-crypto/sha1-browser@3.0.0: - resolution: {integrity: sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==} - dependencies: - '@aws-crypto/ie11-detection': 3.0.0 - '@aws-crypto/supports-web-crypto': 3.0.0 - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.521.0 - '@aws-sdk/util-locate-window': 3.495.0 - '@aws-sdk/util-utf8-browser': 3.259.0 - tslib: 1.14.1 - dev: false - - /@aws-crypto/sha256-browser@3.0.0: - resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} - dependencies: - '@aws-crypto/ie11-detection': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-crypto/supports-web-crypto': 3.0.0 - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.521.0 - '@aws-sdk/util-locate-window': 3.495.0 - '@aws-sdk/util-utf8-browser': 3.259.0 - tslib: 1.14.1 - dev: false - - /@aws-crypto/sha256-js@3.0.0: - resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} - dependencies: - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.521.0 - tslib: 1.14.1 - dev: false - - /@aws-crypto/supports-web-crypto@3.0.0: - resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} - dependencies: - tslib: 1.14.1 - dev: false - - /@aws-crypto/util@3.0.0: - resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} - dependencies: - '@aws-sdk/types': 3.521.0 - '@aws-sdk/util-utf8-browser': 3.259.0 - tslib: 1.14.1 - dev: false - - /@aws-sdk/client-s3@3.521.0: - resolution: {integrity: sha512-txSfcxezAIW72dgRfhX+plc/lMouilY/QFVne/Cv01SL8Tzclcyp7T7LtkV7aSO4Tb9CUScHdqwWOfjZzCm/yQ==} - engines: {node: '>=14.0.0'} - dependencies: - '@aws-crypto/sha1-browser': 3.0.0 - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.521.0(@aws-sdk/credential-provider-node@3.521.0) - '@aws-sdk/core': 3.521.0 - '@aws-sdk/credential-provider-node': 3.521.0 - '@aws-sdk/middleware-bucket-endpoint': 3.521.0 - '@aws-sdk/middleware-expect-continue': 3.521.0 - '@aws-sdk/middleware-flexible-checksums': 3.521.0 - '@aws-sdk/middleware-host-header': 3.521.0 - '@aws-sdk/middleware-location-constraint': 3.521.0 - '@aws-sdk/middleware-logger': 3.521.0 - '@aws-sdk/middleware-recursion-detection': 3.521.0 - '@aws-sdk/middleware-sdk-s3': 3.521.0 - '@aws-sdk/middleware-signing': 3.521.0 - '@aws-sdk/middleware-ssec': 3.521.0 - '@aws-sdk/middleware-user-agent': 3.521.0 - '@aws-sdk/region-config-resolver': 3.521.0 - '@aws-sdk/signature-v4-multi-region': 3.521.0 - '@aws-sdk/types': 3.521.0 - '@aws-sdk/util-endpoints': 3.521.0 - '@aws-sdk/util-user-agent-browser': 3.521.0 - '@aws-sdk/util-user-agent-node': 3.521.0 - '@aws-sdk/xml-builder': 3.521.0 - '@smithy/config-resolver': 2.1.2 - '@smithy/core': 1.3.3 - '@smithy/eventstream-serde-browser': 2.1.2 - '@smithy/eventstream-serde-config-resolver': 2.1.2 - '@smithy/eventstream-serde-node': 2.1.2 - '@smithy/fetch-http-handler': 2.4.2 - '@smithy/hash-blob-browser': 2.1.2 - '@smithy/hash-node': 2.1.2 - '@smithy/hash-stream-node': 2.1.2 - '@smithy/invalid-dependency': 2.1.2 - '@smithy/md5-js': 2.1.2 - '@smithy/middleware-content-length': 2.1.2 - '@smithy/middleware-endpoint': 2.4.2 - '@smithy/middleware-retry': 2.1.2 - '@smithy/middleware-serde': 2.1.2 - '@smithy/middleware-stack': 2.1.2 - '@smithy/node-config-provider': 2.2.2 - '@smithy/node-http-handler': 2.4.0 - '@smithy/protocol-http': 3.2.0 - '@smithy/smithy-client': 2.4.0 - '@smithy/types': 2.10.0 - '@smithy/url-parser': 2.1.2 - '@smithy/util-base64': 2.1.1 - '@smithy/util-body-length-browser': 2.1.1 - '@smithy/util-body-length-node': 2.2.1 - '@smithy/util-defaults-mode-browser': 2.1.2 - '@smithy/util-defaults-mode-node': 2.2.1 - '@smithy/util-endpoints': 1.1.2 - '@smithy/util-retry': 2.1.2 - '@smithy/util-stream': 2.1.2 - '@smithy/util-utf8': 2.1.1 - '@smithy/util-waiter': 2.1.2 - fast-xml-parser: 4.2.5 - tslib: 2.6.2 + /@aws-crypto/crc32@5.2.0: + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.609.0 + tslib: 2.6.3 + dev: false + + /@aws-crypto/crc32c@5.2.0: + resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.609.0 + tslib: 2.6.3 + dev: false + + /@aws-crypto/sha1-browser@5.2.0: + resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} + dependencies: + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.609.0 + '@aws-sdk/util-locate-window': 3.568.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.3 + dev: false + + /@aws-crypto/sha256-browser@5.2.0: + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.609.0 + '@aws-sdk/util-locate-window': 3.568.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.3 + dev: false + + /@aws-crypto/sha256-js@5.2.0: + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.609.0 + tslib: 2.6.3 + dev: false + + /@aws-crypto/supports-web-crypto@5.2.0: + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + dependencies: + tslib: 2.6.3 + dev: false + + /@aws-crypto/util@5.2.0: + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + dependencies: + '@aws-sdk/types': 3.609.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.3 + dev: false + + /@aws-sdk/client-s3@3.614.0: + resolution: {integrity: sha512-9BlhfeBegvyjOqHtcr9kvrT80wiy7EVUiqYyTFiiDv/hJIcG88XHQCZdLU7658XBkQ7aFrr5b8rF2HRD1oroxw==} + engines: {node: '>=16.0.0'} + dependencies: + '@aws-crypto/sha1-browser': 5.2.0 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.614.0(@aws-sdk/client-sts@3.614.0) + '@aws-sdk/client-sts': 3.614.0 + '@aws-sdk/core': 3.614.0 + '@aws-sdk/credential-provider-node': 3.614.0(@aws-sdk/client-sso-oidc@3.614.0)(@aws-sdk/client-sts@3.614.0) + '@aws-sdk/middleware-bucket-endpoint': 3.614.0 + '@aws-sdk/middleware-expect-continue': 3.609.0 + '@aws-sdk/middleware-flexible-checksums': 3.614.0 + '@aws-sdk/middleware-host-header': 3.609.0 + '@aws-sdk/middleware-location-constraint': 3.609.0 + '@aws-sdk/middleware-logger': 3.609.0 + '@aws-sdk/middleware-recursion-detection': 3.609.0 + '@aws-sdk/middleware-sdk-s3': 3.614.0 + '@aws-sdk/middleware-signing': 3.609.0 + '@aws-sdk/middleware-ssec': 3.609.0 + '@aws-sdk/middleware-user-agent': 3.614.0 + '@aws-sdk/region-config-resolver': 3.614.0 + '@aws-sdk/signature-v4-multi-region': 3.614.0 + '@aws-sdk/types': 3.609.0 + '@aws-sdk/util-endpoints': 3.614.0 + '@aws-sdk/util-user-agent-browser': 3.609.0 + '@aws-sdk/util-user-agent-node': 3.614.0 + '@aws-sdk/xml-builder': 3.609.0 + '@smithy/config-resolver': 3.0.5 + '@smithy/core': 2.2.6 + '@smithy/eventstream-serde-browser': 3.0.4 + '@smithy/eventstream-serde-config-resolver': 3.0.3 + '@smithy/eventstream-serde-node': 3.0.4 + '@smithy/fetch-http-handler': 3.2.1 + '@smithy/hash-blob-browser': 3.1.2 + '@smithy/hash-node': 3.0.3 + '@smithy/hash-stream-node': 3.1.2 + '@smithy/invalid-dependency': 3.0.3 + '@smithy/md5-js': 3.0.3 + '@smithy/middleware-content-length': 3.0.3 + '@smithy/middleware-endpoint': 3.0.5 + '@smithy/middleware-retry': 3.0.9 + '@smithy/middleware-serde': 3.0.3 + '@smithy/middleware-stack': 3.0.3 + '@smithy/node-config-provider': 3.1.4 + '@smithy/node-http-handler': 3.1.2 + '@smithy/protocol-http': 4.0.3 + '@smithy/smithy-client': 3.1.7 + '@smithy/types': 3.3.0 + '@smithy/url-parser': 3.0.3 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.9 + '@smithy/util-defaults-mode-node': 3.0.9 + '@smithy/util-endpoints': 2.0.5 + '@smithy/util-retry': 3.0.3 + '@smithy/util-stream': 3.0.6 + '@smithy/util-utf8': 3.0.0 + '@smithy/util-waiter': 3.1.2 + tslib: 2.6.3 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/client-sso-oidc@3.521.0(@aws-sdk/credential-provider-node@3.521.0): - resolution: {integrity: sha512-MhX0CjV/543MR7DRPr3lA4ZDpGGKopp8cyV4EkSGXB7LMN//eFKKDhuZDlpgWU+aFe2A3DIqlNJjqgs08W0cSA==} - engines: {node: '>=14.0.0'} + /@aws-sdk/client-sso-oidc@3.614.0(@aws-sdk/client-sts@3.614.0): + resolution: {integrity: sha512-BI1NWcpppbHg/28zbUg54dZeckork8BItZIcjls12vxasy+p3iEzrJVG60jcbUTTsk3Qc1tyxNfrdcVqx0y7Ww==} + engines: {node: '>=16.0.0'} peerDependencies: - '@aws-sdk/credential-provider-node': ^3.521.0 - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.521.0(@aws-sdk/credential-provider-node@3.521.0) - '@aws-sdk/core': 3.521.0 - '@aws-sdk/credential-provider-node': 3.521.0 - '@aws-sdk/middleware-host-header': 3.521.0 - '@aws-sdk/middleware-logger': 3.521.0 - '@aws-sdk/middleware-recursion-detection': 3.521.0 - '@aws-sdk/middleware-user-agent': 3.521.0 - '@aws-sdk/region-config-resolver': 3.521.0 - '@aws-sdk/types': 3.521.0 - '@aws-sdk/util-endpoints': 3.521.0 - '@aws-sdk/util-user-agent-browser': 3.521.0 - '@aws-sdk/util-user-agent-node': 3.521.0 - '@smithy/config-resolver': 2.1.2 - '@smithy/core': 1.3.3 - '@smithy/fetch-http-handler': 2.4.2 - '@smithy/hash-node': 2.1.2 - '@smithy/invalid-dependency': 2.1.2 - '@smithy/middleware-content-length': 2.1.2 - '@smithy/middleware-endpoint': 2.4.2 - '@smithy/middleware-retry': 2.1.2 - '@smithy/middleware-serde': 2.1.2 - '@smithy/middleware-stack': 2.1.2 - '@smithy/node-config-provider': 2.2.2 - '@smithy/node-http-handler': 2.4.0 - '@smithy/protocol-http': 3.2.0 - '@smithy/smithy-client': 2.4.0 - '@smithy/types': 2.10.0 - '@smithy/url-parser': 2.1.2 - '@smithy/util-base64': 2.1.1 - '@smithy/util-body-length-browser': 2.1.1 - '@smithy/util-body-length-node': 2.2.1 - '@smithy/util-defaults-mode-browser': 2.1.2 - '@smithy/util-defaults-mode-node': 2.2.1 - '@smithy/util-endpoints': 1.1.2 - '@smithy/util-middleware': 2.1.2 - '@smithy/util-retry': 2.1.2 - '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + '@aws-sdk/client-sts': ^3.614.0 + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sts': 3.614.0 + '@aws-sdk/core': 3.614.0 + '@aws-sdk/credential-provider-node': 3.614.0(@aws-sdk/client-sso-oidc@3.614.0)(@aws-sdk/client-sts@3.614.0) + '@aws-sdk/middleware-host-header': 3.609.0 + '@aws-sdk/middleware-logger': 3.609.0 + '@aws-sdk/middleware-recursion-detection': 3.609.0 + '@aws-sdk/middleware-user-agent': 3.614.0 + '@aws-sdk/region-config-resolver': 3.614.0 + '@aws-sdk/types': 3.609.0 + '@aws-sdk/util-endpoints': 3.614.0 + '@aws-sdk/util-user-agent-browser': 3.609.0 + '@aws-sdk/util-user-agent-node': 3.614.0 + '@smithy/config-resolver': 3.0.5 + '@smithy/core': 2.2.6 + '@smithy/fetch-http-handler': 3.2.1 + '@smithy/hash-node': 3.0.3 + '@smithy/invalid-dependency': 3.0.3 + '@smithy/middleware-content-length': 3.0.3 + '@smithy/middleware-endpoint': 3.0.5 + '@smithy/middleware-retry': 3.0.9 + '@smithy/middleware-serde': 3.0.3 + '@smithy/middleware-stack': 3.0.3 + '@smithy/node-config-provider': 3.1.4 + '@smithy/node-http-handler': 3.1.2 + '@smithy/protocol-http': 4.0.3 + '@smithy/smithy-client': 3.1.7 + '@smithy/types': 3.3.0 + '@smithy/url-parser': 3.0.3 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.9 + '@smithy/util-defaults-mode-node': 3.0.9 + '@smithy/util-endpoints': 2.0.5 + '@smithy/util-middleware': 3.0.3 + '@smithy/util-retry': 3.0.3 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/client-sso@3.521.0: - resolution: {integrity: sha512-aEx8kEvWmTwCja6hvIZd5PvxHsI1HQZkckXhw1UrkDPnfcAwQoQAgselI7D+PVT5qQDIjXRm0NpsvBLaLj6jZw==} - engines: {node: '>=14.0.0'} - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/core': 3.521.0 - '@aws-sdk/middleware-host-header': 3.521.0 - '@aws-sdk/middleware-logger': 3.521.0 - '@aws-sdk/middleware-recursion-detection': 3.521.0 - '@aws-sdk/middleware-user-agent': 3.521.0 - '@aws-sdk/region-config-resolver': 3.521.0 - '@aws-sdk/types': 3.521.0 - '@aws-sdk/util-endpoints': 3.521.0 - '@aws-sdk/util-user-agent-browser': 3.521.0 - '@aws-sdk/util-user-agent-node': 3.521.0 - '@smithy/config-resolver': 2.1.2 - '@smithy/core': 1.3.3 - '@smithy/fetch-http-handler': 2.4.2 - '@smithy/hash-node': 2.1.2 - '@smithy/invalid-dependency': 2.1.2 - '@smithy/middleware-content-length': 2.1.2 - '@smithy/middleware-endpoint': 2.4.2 - '@smithy/middleware-retry': 2.1.2 - '@smithy/middleware-serde': 2.1.2 - '@smithy/middleware-stack': 2.1.2 - '@smithy/node-config-provider': 2.2.2 - '@smithy/node-http-handler': 2.4.0 - '@smithy/protocol-http': 3.2.0 - '@smithy/smithy-client': 2.4.0 - '@smithy/types': 2.10.0 - '@smithy/url-parser': 2.1.2 - '@smithy/util-base64': 2.1.1 - '@smithy/util-body-length-browser': 2.1.1 - '@smithy/util-body-length-node': 2.2.1 - '@smithy/util-defaults-mode-browser': 2.1.2 - '@smithy/util-defaults-mode-node': 2.2.1 - '@smithy/util-endpoints': 1.1.2 - '@smithy/util-middleware': 2.1.2 - '@smithy/util-retry': 2.1.2 - '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + /@aws-sdk/client-sso@3.614.0: + resolution: {integrity: sha512-p5pyYaxRzBttjBkqfc8i3K7DzBdTg3ECdVgBo6INIUxfvDy0J8QUE8vNtCgvFIkq+uPw/8M+Eo4zzln7anuO0Q==} + engines: {node: '>=16.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.614.0 + '@aws-sdk/middleware-host-header': 3.609.0 + '@aws-sdk/middleware-logger': 3.609.0 + '@aws-sdk/middleware-recursion-detection': 3.609.0 + '@aws-sdk/middleware-user-agent': 3.614.0 + '@aws-sdk/region-config-resolver': 3.614.0 + '@aws-sdk/types': 3.609.0 + '@aws-sdk/util-endpoints': 3.614.0 + '@aws-sdk/util-user-agent-browser': 3.609.0 + '@aws-sdk/util-user-agent-node': 3.614.0 + '@smithy/config-resolver': 3.0.5 + '@smithy/core': 2.2.6 + '@smithy/fetch-http-handler': 3.2.1 + '@smithy/hash-node': 3.0.3 + '@smithy/invalid-dependency': 3.0.3 + '@smithy/middleware-content-length': 3.0.3 + '@smithy/middleware-endpoint': 3.0.5 + '@smithy/middleware-retry': 3.0.9 + '@smithy/middleware-serde': 3.0.3 + '@smithy/middleware-stack': 3.0.3 + '@smithy/node-config-provider': 3.1.4 + '@smithy/node-http-handler': 3.1.2 + '@smithy/protocol-http': 4.0.3 + '@smithy/smithy-client': 3.1.7 + '@smithy/types': 3.3.0 + '@smithy/url-parser': 3.0.3 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.9 + '@smithy/util-defaults-mode-node': 3.0.9 + '@smithy/util-endpoints': 2.0.5 + '@smithy/util-middleware': 3.0.3 + '@smithy/util-retry': 3.0.3 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/client-sts@3.521.0(@aws-sdk/credential-provider-node@3.521.0): - resolution: {integrity: sha512-f1J5NDbntcwIHJqhks89sQvk7UXPmN0X0BZ2mgpj6pWP+NlPqy+1t1bia8qRhEuNITaEigoq6rqe9xaf4FdY9A==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@aws-sdk/credential-provider-node': ^3.521.0 - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/core': 3.521.0 - '@aws-sdk/credential-provider-node': 3.521.0 - '@aws-sdk/middleware-host-header': 3.521.0 - '@aws-sdk/middleware-logger': 3.521.0 - '@aws-sdk/middleware-recursion-detection': 3.521.0 - '@aws-sdk/middleware-user-agent': 3.521.0 - '@aws-sdk/region-config-resolver': 3.521.0 - '@aws-sdk/types': 3.521.0 - '@aws-sdk/util-endpoints': 3.521.0 - '@aws-sdk/util-user-agent-browser': 3.521.0 - '@aws-sdk/util-user-agent-node': 3.521.0 - '@smithy/config-resolver': 2.1.2 - '@smithy/core': 1.3.3 - '@smithy/fetch-http-handler': 2.4.2 - '@smithy/hash-node': 2.1.2 - '@smithy/invalid-dependency': 2.1.2 - '@smithy/middleware-content-length': 2.1.2 - '@smithy/middleware-endpoint': 2.4.2 - '@smithy/middleware-retry': 2.1.2 - '@smithy/middleware-serde': 2.1.2 - '@smithy/middleware-stack': 2.1.2 - '@smithy/node-config-provider': 2.2.2 - '@smithy/node-http-handler': 2.4.0 - '@smithy/protocol-http': 3.2.0 - '@smithy/smithy-client': 2.4.0 - '@smithy/types': 2.10.0 - '@smithy/url-parser': 2.1.2 - '@smithy/util-base64': 2.1.1 - '@smithy/util-body-length-browser': 2.1.1 - '@smithy/util-body-length-node': 2.2.1 - '@smithy/util-defaults-mode-browser': 2.1.2 - '@smithy/util-defaults-mode-node': 2.2.1 - '@smithy/util-endpoints': 1.1.2 - '@smithy/util-middleware': 2.1.2 - '@smithy/util-retry': 2.1.2 - '@smithy/util-utf8': 2.1.1 - fast-xml-parser: 4.2.5 - tslib: 2.6.2 + /@aws-sdk/client-sts@3.614.0: + resolution: {integrity: sha512-i6QmaVA1KHHYNnI2VYQy/sc31rLm4+jSp8b/YbQpFnD0w3aXsrEEHHlxek45uSkHb4Nrj1omFBVy/xp1WVYx2Q==} + engines: {node: '>=16.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.614.0(@aws-sdk/client-sts@3.614.0) + '@aws-sdk/core': 3.614.0 + '@aws-sdk/credential-provider-node': 3.614.0(@aws-sdk/client-sso-oidc@3.614.0)(@aws-sdk/client-sts@3.614.0) + '@aws-sdk/middleware-host-header': 3.609.0 + '@aws-sdk/middleware-logger': 3.609.0 + '@aws-sdk/middleware-recursion-detection': 3.609.0 + '@aws-sdk/middleware-user-agent': 3.614.0 + '@aws-sdk/region-config-resolver': 3.614.0 + '@aws-sdk/types': 3.609.0 + '@aws-sdk/util-endpoints': 3.614.0 + '@aws-sdk/util-user-agent-browser': 3.609.0 + '@aws-sdk/util-user-agent-node': 3.614.0 + '@smithy/config-resolver': 3.0.5 + '@smithy/core': 2.2.6 + '@smithy/fetch-http-handler': 3.2.1 + '@smithy/hash-node': 3.0.3 + '@smithy/invalid-dependency': 3.0.3 + '@smithy/middleware-content-length': 3.0.3 + '@smithy/middleware-endpoint': 3.0.5 + '@smithy/middleware-retry': 3.0.9 + '@smithy/middleware-serde': 3.0.3 + '@smithy/middleware-stack': 3.0.3 + '@smithy/node-config-provider': 3.1.4 + '@smithy/node-http-handler': 3.1.2 + '@smithy/protocol-http': 4.0.3 + '@smithy/smithy-client': 3.1.7 + '@smithy/types': 3.3.0 + '@smithy/url-parser': 3.0.3 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.9 + '@smithy/util-defaults-mode-node': 3.0.9 + '@smithy/util-endpoints': 2.0.5 + '@smithy/util-middleware': 3.0.3 + '@smithy/util-retry': 3.0.3 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/core@3.521.0: - resolution: {integrity: sha512-KovKmW7yg/P2HVG2dhV2DAJLyoeGelgsnSGHaktXo/josJ3vDGRNqqRSgVaqKFxnD98dPEMLrjkzZumNUNGvLw==} - engines: {node: '>=14.0.0'} + /@aws-sdk/core@3.614.0: + resolution: {integrity: sha512-BUuS5/1YkgmKc4J0bg83XEtMyDHVyqG2QDzfmhYe8gbOIZabUl1FlrFVwhCAthtrrI6MPGTQcERB4BtJKUSplw==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/core': 1.3.3 - '@smithy/protocol-http': 3.2.0 - '@smithy/signature-v4': 2.1.2 - '@smithy/smithy-client': 2.4.0 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/core': 2.2.6 + '@smithy/protocol-http': 4.0.3 + '@smithy/signature-v4': 3.1.2 + '@smithy/smithy-client': 3.1.7 + '@smithy/types': 3.3.0 + fast-xml-parser: 4.2.5 + tslib: 2.6.3 dev: false - /@aws-sdk/credential-provider-env@3.521.0: - resolution: {integrity: sha512-OwblTJNdDAoqYVwcNfhlKDp5z+DINrjBfC6ZjNdlJpTXgxT3IqzuilTJTlydQ+2eG7aXfV9OwTVRQWdCmzFuKA==} - engines: {node: '>=14.0.0'} + /@aws-sdk/credential-provider-env@3.609.0: + resolution: {integrity: sha512-v69ZCWcec2iuV9vLVJMa6fAb5xwkzN4jYIT8yjo2c4Ia/j976Q+TPf35Pnz5My48Xr94EFcaBazrWedF+kwfuQ==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@smithy/property-provider': 2.1.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@smithy/property-provider': 3.1.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@aws-sdk/credential-provider-http@3.521.0: - resolution: {integrity: sha512-yJM1yNGj2XFH8v6/ffWrFY5nC3/2+8qZ8c4mMMwZru8bYXeuSV4+NNfE59HUWvkAF7xP76u4gr4I8kNrMPTlfg==} - engines: {node: '>=14.0.0'} + /@aws-sdk/credential-provider-http@3.614.0: + resolution: {integrity: sha512-YIEjlNUKb3Vo/iTnGAPdsiDC3FUUnNoex2OwU8LmR7AkYZiWdB8nx99DfgkkY+OFMUpw7nKD2PCOtuFONelfGA==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@smithy/fetch-http-handler': 2.4.2 - '@smithy/node-http-handler': 2.4.0 - '@smithy/property-provider': 2.1.2 - '@smithy/protocol-http': 3.2.0 - '@smithy/smithy-client': 2.4.0 - '@smithy/types': 2.10.0 - '@smithy/util-stream': 2.1.2 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@smithy/fetch-http-handler': 3.2.1 + '@smithy/node-http-handler': 3.1.2 + '@smithy/property-provider': 3.1.3 + '@smithy/protocol-http': 4.0.3 + '@smithy/smithy-client': 3.1.7 + '@smithy/types': 3.3.0 + '@smithy/util-stream': 3.0.6 + tslib: 2.6.3 dev: false - /@aws-sdk/credential-provider-ini@3.521.0(@aws-sdk/credential-provider-node@3.521.0): - resolution: {integrity: sha512-HuhP1AlKgvBBxUIwxL/2DsDemiuwgbz1APUNSeJhDBF6JyZuxR0NU8zEZkvH9b4ukTcmcKGABpY0Wex4rAh3xw==} - engines: {node: '>=14.0.0'} - dependencies: - '@aws-sdk/client-sts': 3.521.0(@aws-sdk/credential-provider-node@3.521.0) - '@aws-sdk/credential-provider-env': 3.521.0 - '@aws-sdk/credential-provider-process': 3.521.0 - '@aws-sdk/credential-provider-sso': 3.521.0(@aws-sdk/credential-provider-node@3.521.0) - '@aws-sdk/credential-provider-web-identity': 3.521.0(@aws-sdk/credential-provider-node@3.521.0) - '@aws-sdk/types': 3.521.0 - '@smithy/credential-provider-imds': 2.2.2 - '@smithy/property-provider': 2.1.2 - '@smithy/shared-ini-file-loader': 2.3.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + /@aws-sdk/credential-provider-ini@3.614.0(@aws-sdk/client-sso-oidc@3.614.0)(@aws-sdk/client-sts@3.614.0): + resolution: {integrity: sha512-KfLuLFGwlvFSZ2MuzYwWGPb1y5TeiwX5okIDe0aQ1h10oD3924FXbN+mabOnUHQ8EFcGAtCaWbrC86mI7ktC6A==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.614.0 + dependencies: + '@aws-sdk/client-sts': 3.614.0 + '@aws-sdk/credential-provider-env': 3.609.0 + '@aws-sdk/credential-provider-http': 3.614.0 + '@aws-sdk/credential-provider-process': 3.614.0 + '@aws-sdk/credential-provider-sso': 3.614.0(@aws-sdk/client-sso-oidc@3.614.0) + '@aws-sdk/credential-provider-web-identity': 3.609.0(@aws-sdk/client-sts@3.614.0) + '@aws-sdk/types': 3.609.0 + '@smithy/credential-provider-imds': 3.1.4 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 transitivePeerDependencies: - - '@aws-sdk/credential-provider-node' + - '@aws-sdk/client-sso-oidc' - aws-crt dev: false - /@aws-sdk/credential-provider-node@3.521.0: - resolution: {integrity: sha512-N9SR4gWI10qh4V2myBcTw8IlX3QpsMMxa4Q8d/FHiAX6eNV7e6irXkXX8o7+J1gtCRy1AtBMqAdGsve4GVqYMQ==} - engines: {node: '>=14.0.0'} - dependencies: - '@aws-sdk/credential-provider-env': 3.521.0 - '@aws-sdk/credential-provider-http': 3.521.0 - '@aws-sdk/credential-provider-ini': 3.521.0(@aws-sdk/credential-provider-node@3.521.0) - '@aws-sdk/credential-provider-process': 3.521.0 - '@aws-sdk/credential-provider-sso': 3.521.0(@aws-sdk/credential-provider-node@3.521.0) - '@aws-sdk/credential-provider-web-identity': 3.521.0(@aws-sdk/credential-provider-node@3.521.0) - '@aws-sdk/types': 3.521.0 - '@smithy/credential-provider-imds': 2.2.2 - '@smithy/property-provider': 2.1.2 - '@smithy/shared-ini-file-loader': 2.3.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + /@aws-sdk/credential-provider-node@3.614.0(@aws-sdk/client-sso-oidc@3.614.0)(@aws-sdk/client-sts@3.614.0): + resolution: {integrity: sha512-4J6gPEuFZP0mkWq5E//oMS1vrmMM88iNNcv7TEljYnsc6JTAlKejCyFwx6CN+nkIhmIZsl06SXIhBemzBdBPfg==} + engines: {node: '>=16.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.609.0 + '@aws-sdk/credential-provider-http': 3.614.0 + '@aws-sdk/credential-provider-ini': 3.614.0(@aws-sdk/client-sso-oidc@3.614.0)(@aws-sdk/client-sts@3.614.0) + '@aws-sdk/credential-provider-process': 3.614.0 + '@aws-sdk/credential-provider-sso': 3.614.0(@aws-sdk/client-sso-oidc@3.614.0) + '@aws-sdk/credential-provider-web-identity': 3.609.0(@aws-sdk/client-sts@3.614.0) + '@aws-sdk/types': 3.609.0 + '@smithy/credential-provider-imds': 3.1.4 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' - aws-crt dev: false - /@aws-sdk/credential-provider-process@3.521.0: - resolution: {integrity: sha512-EcJjcrpdklxbRAFFgSLk6QGVtvnfZ80ItfZ47VL9LkhWcDAkQ1Oi0esHq+zOgvjb7VkCyD3Q9CyEwT6MlJsriA==} - engines: {node: '>=14.0.0'} + /@aws-sdk/credential-provider-process@3.614.0: + resolution: {integrity: sha512-Q0SI0sTRwi8iNODLs5+bbv8vgz8Qy2QdxbCHnPk/6Cx6LMf7i3dqmWquFbspqFRd8QiqxStrblwxrUYZi09tkA==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@smithy/property-provider': 2.1.2 - '@smithy/shared-ini-file-loader': 2.3.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@aws-sdk/credential-provider-sso@3.521.0(@aws-sdk/credential-provider-node@3.521.0): - resolution: {integrity: sha512-GAfc0ji+fC2k9VngYM3zsS1J5ojfWg0WUOBzavvHzkhx/O3CqOt82Vfikg3PvemAp9yOgKPMaasTHVeipNLBBQ==} - engines: {node: '>=14.0.0'} + /@aws-sdk/credential-provider-sso@3.614.0(@aws-sdk/client-sso-oidc@3.614.0): + resolution: {integrity: sha512-55+gp0JY4451cWI1qXmVMFM0GQaBKiQpXv2P0xmd9P3qLDyeFUSEW8XPh0d2lb1ICr6x4s47ynXVdGCIv2mXMg==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/client-sso': 3.521.0 - '@aws-sdk/token-providers': 3.521.0(@aws-sdk/credential-provider-node@3.521.0) - '@aws-sdk/types': 3.521.0 - '@smithy/property-provider': 2.1.2 - '@smithy/shared-ini-file-loader': 2.3.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@aws-sdk/client-sso': 3.614.0 + '@aws-sdk/token-providers': 3.614.0(@aws-sdk/client-sso-oidc@3.614.0) + '@aws-sdk/types': 3.609.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 transitivePeerDependencies: - - '@aws-sdk/credential-provider-node' + - '@aws-sdk/client-sso-oidc' - aws-crt dev: false - /@aws-sdk/credential-provider-web-identity@3.521.0(@aws-sdk/credential-provider-node@3.521.0): - resolution: {integrity: sha512-ZPPJqdbPOE4BkdrPrYBtsWg0Zy5b+GY1sbMWLQt0tcISgN5EIoePCS2pGNWnBUmBT+mibMQCVv9fOQpqzRkvAw==} - engines: {node: '>=14.0.0'} + /@aws-sdk/credential-provider-web-identity@3.609.0(@aws-sdk/client-sts@3.614.0): + resolution: {integrity: sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.609.0 dependencies: - '@aws-sdk/client-sts': 3.521.0(@aws-sdk/credential-provider-node@3.521.0) - '@aws-sdk/types': 3.521.0 - '@smithy/property-provider': 2.1.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 - transitivePeerDependencies: - - '@aws-sdk/credential-provider-node' - - aws-crt + '@aws-sdk/client-sts': 3.614.0 + '@aws-sdk/types': 3.609.0 + '@smithy/property-provider': 3.1.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@aws-sdk/lib-storage@3.521.0(@aws-sdk/client-s3@3.521.0): - resolution: {integrity: sha512-TDkh6j/9dPlHtMeNsv++CCOT+HSWKTAjKkp8A9du3d9axyILE6ukqssehObgkB+8fNu4h776Hq9YJE2QExdrOw==} - engines: {node: '>=14.0.0'} + /@aws-sdk/lib-storage@3.614.0(@aws-sdk/client-s3@3.614.0): + resolution: {integrity: sha512-Bzni+r7pS+nRiqcmWPpB/OiQEM4GszGRp1DXpL3rKnwaeu+Qgf2w12DULxWUacIvOc4IzLsv6tpEidQ/P1zKQg==} + engines: {node: '>=16.0.0'} peerDependencies: - '@aws-sdk/client-s3': ^3.0.0 + '@aws-sdk/client-s3': ^3.614.0 dependencies: - '@aws-sdk/client-s3': 3.521.0 - '@smithy/abort-controller': 2.1.2 - '@smithy/middleware-endpoint': 2.4.2 - '@smithy/smithy-client': 2.4.0 + '@aws-sdk/client-s3': 3.614.0 + '@smithy/abort-controller': 3.1.1 + '@smithy/middleware-endpoint': 3.0.5 + '@smithy/smithy-client': 3.1.7 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /@aws-sdk/middleware-bucket-endpoint@3.521.0: - resolution: {integrity: sha512-wUPSpzeEGwAic5OJmXQGt1RCbt5KHighZ1ubUeNV67FMPsxaEW+Y0Kd+L0vbbFoQptIui2GqP5JxuROr6J7SjA==} - engines: {node: '>=14.0.0'} + /@aws-sdk/middleware-bucket-endpoint@3.614.0: + resolution: {integrity: sha512-TqEY8KcZeZ0LIxXaqG9RSSNnDHvD8RAFP4Xenwsxqnyad0Yn7LgCoFwRByelJ0t54ROYL1/ETJleWE4U4TOXdg==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@aws-sdk/util-arn-parser': 3.495.0 - '@smithy/node-config-provider': 2.2.2 - '@smithy/protocol-http': 3.2.0 - '@smithy/types': 2.10.0 - '@smithy/util-config-provider': 2.2.1 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@aws-sdk/util-arn-parser': 3.568.0 + '@smithy/node-config-provider': 3.1.4 + '@smithy/protocol-http': 4.0.3 + '@smithy/types': 3.3.0 + '@smithy/util-config-provider': 3.0.0 + tslib: 2.6.3 dev: false - /@aws-sdk/middleware-expect-continue@3.521.0: - resolution: {integrity: sha512-6NBaPS+1b1QbsbJ74KI9MkqWbj8rnY6uKNEo0wkxgA8Q6u0aTn/jV+jrn5ZemdYmfS/y/VbaoY/hE+/QNp5vUw==} - engines: {node: '>=14.0.0'} + /@aws-sdk/middleware-expect-continue@3.609.0: + resolution: {integrity: sha512-+zeg//mSer4JZRxOB/4mUOMUJyuYPwATnIC5moBB8P8Xe+mJaVRFy8qlCtzYNj2TycnlsBPzTK0j7P1yvDh97w==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@smithy/protocol-http': 3.2.0 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@smithy/protocol-http': 4.0.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@aws-sdk/middleware-flexible-checksums@3.521.0: - resolution: {integrity: sha512-sWNN0wtdwImO2QqN4J1YVTpDhdii6Tp5p8jCkCE1Qe+afQ5u52PeRAS/9U56cJnqM5JLabO4kE10Mm5rufNs2A==} - engines: {node: '>=14.0.0'} + /@aws-sdk/middleware-flexible-checksums@3.614.0: + resolution: {integrity: sha512-ZLpxVXMboDeMT7p2Kdp5m1uLVKOktkZoMgLvvbe3zbrU4Ji5IU5xVE0aa4X7H28BtuODCs6SLESnPs19bhMKlA==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-crypto/crc32': 3.0.0 - '@aws-crypto/crc32c': 3.0.0 - '@aws-sdk/types': 3.521.0 - '@smithy/is-array-buffer': 2.1.1 - '@smithy/protocol-http': 3.2.0 - '@smithy/types': 2.10.0 - '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + '@aws-crypto/crc32': 5.2.0 + '@aws-crypto/crc32c': 5.2.0 + '@aws-sdk/types': 3.609.0 + '@smithy/is-array-buffer': 3.0.0 + '@smithy/protocol-http': 4.0.3 + '@smithy/types': 3.3.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 dev: false - /@aws-sdk/middleware-host-header@3.521.0: - resolution: {integrity: sha512-Bc4stnMtVAdqosYI1wedFK9tffclCuwpOK/JA4bxbnvSyP1kz4s1HBVT9OOMzdLRLWLwVj/RslXKfSbzOUP7ug==} - engines: {node: '>=14.0.0'} + /@aws-sdk/middleware-host-header@3.609.0: + resolution: {integrity: sha512-iTKfo158lc4jLDfYeZmYMIBHsn8m6zX+XB6birCSNZ/rrlzAkPbGE43CNdKfvjyWdqgLMRXF+B+OcZRvqhMXPQ==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@smithy/protocol-http': 3.2.0 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@smithy/protocol-http': 4.0.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@aws-sdk/middleware-location-constraint@3.521.0: - resolution: {integrity: sha512-XlGst6F3+20mhMVk+te7w8Yvrm9i9JGpgRdxdMN1pnXtGn/aAKF9lFFm4bOu47PR/XHun2PLmKlLnlZd7NAP2Q==} - engines: {node: '>=14.0.0'} + /@aws-sdk/middleware-location-constraint@3.609.0: + resolution: {integrity: sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@aws-sdk/middleware-logger@3.521.0: - resolution: {integrity: sha512-JJ4nyYvLu3RyyNHo74Rlx6WKxJsAixWCEnnFb6IGRUHvsG+xBGU7HF5koY2log8BqlDLrt4ZUaV/CGy5Dp8Mfg==} - engines: {node: '>=14.0.0'} + /@aws-sdk/middleware-logger@3.609.0: + resolution: {integrity: sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@aws-sdk/middleware-recursion-detection@3.521.0: - resolution: {integrity: sha512-1m5AsC55liTlaYMjc4pIQfjfBHG9LpWgubSl4uUxJSdI++zdA/SRBwXl40p7Ac/y5esweluhWabyiv1g/W4+Xg==} - engines: {node: '>=14.0.0'} + /@aws-sdk/middleware-recursion-detection@3.609.0: + resolution: {integrity: sha512-6sewsYB7/o/nbUfA99Aa/LokM+a/u4Wpm/X2o0RxOsDtSB795ObebLJe2BxY5UssbGaWkn7LswyfvrdZNXNj1w==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@smithy/protocol-http': 3.2.0 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@smithy/protocol-http': 4.0.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@aws-sdk/middleware-sdk-s3@3.521.0: - resolution: {integrity: sha512-aDeOScfzGGHZ7oEDx+EPzz+JVa8/B88CPeDRaDmO5dFNv2/5PFumHfh0gc6XFl4nJWPPOrJyZ1UYU/9VdDfSyQ==} - engines: {node: '>=14.0.0'} + /@aws-sdk/middleware-sdk-s3@3.614.0: + resolution: {integrity: sha512-9fJTaiuuOfFV4FqmUEhPYzrtv7JOfYpB7q65oG3uayVH4ngWHIJkjnnX79zRhNZKdPGta+XIsnZzjEghg82ngA==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@aws-sdk/util-arn-parser': 3.495.0 - '@smithy/node-config-provider': 2.2.2 - '@smithy/protocol-http': 3.2.0 - '@smithy/signature-v4': 2.1.2 - '@smithy/smithy-client': 2.4.0 - '@smithy/types': 2.10.0 - '@smithy/util-config-provider': 2.2.1 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@aws-sdk/util-arn-parser': 3.568.0 + '@smithy/node-config-provider': 3.1.4 + '@smithy/protocol-http': 4.0.3 + '@smithy/signature-v4': 3.1.2 + '@smithy/smithy-client': 3.1.7 + '@smithy/types': 3.3.0 + '@smithy/util-config-provider': 3.0.0 + tslib: 2.6.3 dev: false - /@aws-sdk/middleware-signing@3.521.0: - resolution: {integrity: sha512-OW1jKeN6Eh3/OItXBtyNRFOv1MuZQBeHpEbywgYwtaqxTGxm9gFj//9wFsCXK4zg1+ghun8iC0buNbyOvCUf9A==} - engines: {node: '>=14.0.0'} + /@aws-sdk/middleware-signing@3.609.0: + resolution: {integrity: sha512-2w3dBLjQVKIajYzokO4hduq8/0hSMUYHHmIo1Kdl+MSY8uwRBt12bLL6pyreobTcRMxizvn2ph/CQ9I1ST/WGQ==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@smithy/property-provider': 2.1.2 - '@smithy/protocol-http': 3.2.0 - '@smithy/signature-v4': 2.1.2 - '@smithy/types': 2.10.0 - '@smithy/util-middleware': 2.1.2 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@smithy/property-provider': 3.1.3 + '@smithy/protocol-http': 4.0.3 + '@smithy/signature-v4': 3.1.2 + '@smithy/types': 3.3.0 + '@smithy/util-middleware': 3.0.3 + tslib: 2.6.3 dev: false - /@aws-sdk/middleware-ssec@3.521.0: - resolution: {integrity: sha512-O9vlns8bFxkZA71CyjQbiB2tm3v+925C37Z3wzn9sj2x0FTB3njgSR23w05d8HP2ve1GPuqoVD0T0pa+jG0Zbw==} - engines: {node: '>=14.0.0'} + /@aws-sdk/middleware-ssec@3.609.0: + resolution: {integrity: sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@aws-sdk/middleware-user-agent@3.521.0: - resolution: {integrity: sha512-+hmQjWDG93wCcJn5QY2MkzAL1aG5wl3FJ/ud2nQOu/Gx7d4QVT/B6VJwoG6GSPVuVPZwzne5n9zPVst6RmWJGA==} - engines: {node: '>=14.0.0'} + /@aws-sdk/middleware-user-agent@3.614.0: + resolution: {integrity: sha512-xUxh0UPQiMTG6E31Yvu6zVYlikrIcFDKljM11CaatInzvZubGTGiX0DjpqRlfGzUNsuPc/zNrKwRP2+wypgqIw==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@aws-sdk/util-endpoints': 3.521.0 - '@smithy/protocol-http': 3.2.0 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@aws-sdk/util-endpoints': 3.614.0 + '@smithy/protocol-http': 4.0.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@aws-sdk/region-config-resolver@3.521.0: - resolution: {integrity: sha512-eC2T62nFgQva9Q0Sqoc9xsYyyH9EN2rJtmUKkWsBMf77atpmajAYRl5B/DzLwGHlXGsgVK2tJdU5wnmpQCEwEQ==} - engines: {node: '>=14.0.0'} + /@aws-sdk/region-config-resolver@3.614.0: + resolution: {integrity: sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@smithy/node-config-provider': 2.2.2 - '@smithy/types': 2.10.0 - '@smithy/util-config-provider': 2.2.1 - '@smithy/util-middleware': 2.1.2 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@smithy/node-config-provider': 3.1.4 + '@smithy/types': 3.3.0 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.3 + tslib: 2.6.3 dev: false - /@aws-sdk/signature-v4-multi-region@3.521.0: - resolution: {integrity: sha512-JVMGQEE6+MQ5Enc/NDQNw8cmy/soALH/Ky00SVQvrfb9ec4H40eDQbbn/d7lua52UCcvUv1w+Ppk00WzbqDAcQ==} - engines: {node: '>=14.0.0'} + /@aws-sdk/signature-v4-multi-region@3.614.0: + resolution: {integrity: sha512-6mW3ONW4oLzxrePznYhz7sNT9ji9Am9ufLeV722tbOVS5lArBOZ6E1oPz0uYBhisUPznWKhcLRMggt7vIJWMng==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/middleware-sdk-s3': 3.521.0 - '@aws-sdk/types': 3.521.0 - '@smithy/protocol-http': 3.2.0 - '@smithy/signature-v4': 2.1.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@aws-sdk/middleware-sdk-s3': 3.614.0 + '@aws-sdk/types': 3.609.0 + '@smithy/protocol-http': 4.0.3 + '@smithy/signature-v4': 3.1.2 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@aws-sdk/token-providers@3.521.0(@aws-sdk/credential-provider-node@3.521.0): - resolution: {integrity: sha512-63XxPOn13j87yPWKm6UXOPdMZIMyEyCDJzmlxnIACP8m20S/c6b8xLJ4fE/PUlD0MTKxpFeQbandq5OhnLsWSQ==} - engines: {node: '>=14.0.0'} + /@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.614.0): + resolution: {integrity: sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sso-oidc': ^3.614.0 dependencies: - '@aws-sdk/client-sso-oidc': 3.521.0(@aws-sdk/credential-provider-node@3.521.0) - '@aws-sdk/types': 3.521.0 - '@smithy/property-provider': 2.1.2 - '@smithy/shared-ini-file-loader': 2.3.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 - transitivePeerDependencies: - - '@aws-sdk/credential-provider-node' - - aws-crt + '@aws-sdk/client-sso-oidc': 3.614.0(@aws-sdk/client-sts@3.614.0) + '@aws-sdk/types': 3.609.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@aws-sdk/types@3.521.0: - resolution: {integrity: sha512-H9I3Lut0F9d+kTibrhnTRqDRzhxf/vrDu12FUdTXVZEvVAQ7w9yrVHAZx8j2e8GWegetsQsNitO3KMrj4dA4pw==} - engines: {node: '>=14.0.0'} + /@aws-sdk/types@3.609.0: + resolution: {integrity: sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@aws-sdk/util-arn-parser@3.495.0: - resolution: {integrity: sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg==} - engines: {node: '>=14.0.0'} + /@aws-sdk/util-arn-parser@3.568.0: + resolution: {integrity: sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==} + engines: {node: '>=16.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /@aws-sdk/util-endpoints@3.521.0: - resolution: {integrity: sha512-lO5+1LeAZycDqgNjQyZdPSdXFQKXaW5bRuQ3UIT3bOCcUAbDI0BYXlPm1huPNTCEkI9ItnDCbISbV0uF901VXw==} - engines: {node: '>=14.0.0'} + /@aws-sdk/util-endpoints@3.614.0: + resolution: {integrity: sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw==} + engines: {node: '>=16.0.0'} dependencies: - '@aws-sdk/types': 3.521.0 - '@smithy/types': 2.10.0 - '@smithy/util-endpoints': 1.1.2 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@smithy/types': 3.3.0 + '@smithy/util-endpoints': 2.0.5 + tslib: 2.6.3 dev: false - /@aws-sdk/util-locate-window@3.495.0: - resolution: {integrity: sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==} - engines: {node: '>=14.0.0'} + /@aws-sdk/util-locate-window@3.568.0: + resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==} + engines: {node: '>=16.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /@aws-sdk/util-user-agent-browser@3.521.0: - resolution: {integrity: sha512-2t3uW6AXOvJ5iiI1JG9zPqKQDc/TRFa+v13aqT5KKw9h3WHFyRUpd4sFQL6Ul0urrq2Zg9cG4NHBkei3k9lsHA==} + /@aws-sdk/util-user-agent-browser@3.609.0: + resolution: {integrity: sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==} dependencies: - '@aws-sdk/types': 3.521.0 - '@smithy/types': 2.10.0 + '@aws-sdk/types': 3.609.0 + '@smithy/types': 3.3.0 bowser: 2.11.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /@aws-sdk/util-user-agent-node@3.521.0: - resolution: {integrity: sha512-g4KMEiyLc8DG21eMrp6fJUdfQ9F0fxfCNMDRgf0SE/pWI/u4vuWR2n8obLwq1pMVx7Ksva1NO3dc+a3Rgr0hag==} - engines: {node: '>=14.0.0'} + /@aws-sdk/util-user-agent-node@3.614.0: + resolution: {integrity: sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==} + engines: {node: '>=16.0.0'} peerDependencies: aws-crt: '>=1.0.0' peerDependenciesMeta: aws-crt: optional: true dependencies: - '@aws-sdk/types': 3.521.0 - '@smithy/node-config-provider': 2.2.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@aws-sdk/types': 3.609.0 + '@smithy/node-config-provider': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@aws-sdk/util-utf8-browser@3.259.0: - resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + /@aws-sdk/xml-builder@3.609.0: + resolution: {integrity: sha512-l9XxNcA4HX98rwCC2/KoiWcmEiRfZe4G+mYwDbCFT87JIMj6GBhLDkAzr/W8KAaA2IDr8Vc6J8fZPgVulxxfMA==} + engines: {node: '>=16.0.0'} dependencies: - tslib: 2.6.2 - dev: false - - /@aws-sdk/xml-builder@3.521.0: - resolution: {integrity: sha512-ahaG39sgpBN/UOKzOW9Ey6Iuy6tK8vh2D+/tsLFLQ59PXoCvU06xg++TGXKpxsYMJGIzBvZMDC1aBhGmm/HsaA==} - engines: {node: '>=14.0.0'} - dependencies: - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false /@gar/promisify@1.1.3: @@ -707,29 +690,18 @@ packages: resolution: {integrity: sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==} dev: false - /@noble/ciphers@0.5.1: - resolution: {integrity: sha512-aNE06lbe36ifvMbbWvmmF/8jx6EQPu2HVg70V95T+iGjOuYwPpAccwAQc2HlXO2D0aiQ3zavbMga4jjWnrpiPA==} - dev: false - - /@noble/curves@1.2.0: - resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} - dependencies: - '@noble/hashes': 1.3.2 + /@noble/ciphers@0.5.3: + resolution: {integrity: sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==} dev: false - /@noble/curves@1.3.0: - resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} + /@noble/curves@1.4.2: + resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} dependencies: - '@noble/hashes': 1.3.3 - dev: false - - /@noble/hashes@1.3.2: - resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} - engines: {node: '>= 16'} + '@noble/hashes': 1.4.0 dev: false - /@noble/hashes@1.3.3: - resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + /@noble/hashes@1.4.0: + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} engines: {node: '>= 16'} dev: false @@ -738,7 +710,7 @@ packages: requiresBuild: true dependencies: '@gar/promisify': 1.1.3 - semver: 7.6.0 + semver: 7.6.2 dev: false optional: true @@ -753,463 +725,486 @@ packages: dev: false optional: true - /@scure/base@1.1.5: - resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} + /@scure/base@1.1.7: + resolution: {integrity: sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==} dev: false - /@smithy/abort-controller@2.1.2: - resolution: {integrity: sha512-iwUxrFm/ZFCXhzhtZ6JnoJzAsqUrVfBAZUTQj8ypXGtIjwXZpKqmgYiuqrDERiydDI5gesqvsC4Rqe57GGhbVg==} - engines: {node: '>=14.0.0'} + /@smithy/abort-controller@3.1.1: + resolution: {integrity: sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/chunked-blob-reader-native@2.1.1: - resolution: {integrity: sha512-zNW+43dltfNMUrBEYLMWgI8lQr0uhtTcUyxkgC9EP4j17WREzgSFMPUFVrVV6Rc2+QtWERYjb4tzZnQGa7R9fQ==} + /@smithy/chunked-blob-reader-native@3.0.0: + resolution: {integrity: sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==} dependencies: - '@smithy/util-base64': 2.1.1 - tslib: 2.6.2 + '@smithy/util-base64': 3.0.0 + tslib: 2.6.3 dev: false - /@smithy/chunked-blob-reader@2.1.1: - resolution: {integrity: sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ==} + /@smithy/chunked-blob-reader@3.0.0: + resolution: {integrity: sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /@smithy/config-resolver@2.1.2: - resolution: {integrity: sha512-ZDMY63xJVsJl7ei/yIMv9nx8OiEOulwNnQOUDGpIvzoBrcbvYwiMjIMe5mP5J4fUmttKkpiTKwta/7IUriAn9w==} - engines: {node: '>=14.0.0'} + /@smithy/config-resolver@3.0.5: + resolution: {integrity: sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/node-config-provider': 2.2.2 - '@smithy/types': 2.10.0 - '@smithy/util-config-provider': 2.2.1 - '@smithy/util-middleware': 2.1.2 - tslib: 2.6.2 + '@smithy/node-config-provider': 3.1.4 + '@smithy/types': 3.3.0 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.3 + tslib: 2.6.3 dev: false - /@smithy/core@1.3.3: - resolution: {integrity: sha512-8cT/swERvU1EUMuJF914+psSeVy4+NcNhbRe1WEKN1yIMPE5+Tq5EaPq1HWjKCodcdBIyU9ViTjd62XnebXMHA==} - engines: {node: '>=14.0.0'} + /@smithy/core@2.2.6: + resolution: {integrity: sha512-tBbVIv/ui7/lLTKayYJJvi8JLVL2SwOQTbNFEOrvzSE3ktByvsa1erwBOnAMo8N5Vu30g7lN4lLStrU75oDGuw==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/middleware-endpoint': 2.4.2 - '@smithy/middleware-retry': 2.1.2 - '@smithy/middleware-serde': 2.1.2 - '@smithy/protocol-http': 3.2.0 - '@smithy/smithy-client': 2.4.0 - '@smithy/types': 2.10.0 - '@smithy/util-middleware': 2.1.2 - tslib: 2.6.2 + '@smithy/middleware-endpoint': 3.0.5 + '@smithy/middleware-retry': 3.0.9 + '@smithy/middleware-serde': 3.0.3 + '@smithy/protocol-http': 4.0.3 + '@smithy/smithy-client': 3.1.7 + '@smithy/types': 3.3.0 + '@smithy/util-middleware': 3.0.3 + tslib: 2.6.3 dev: false - /@smithy/credential-provider-imds@2.2.2: - resolution: {integrity: sha512-a2xpqWzhzcYwImGbFox5qJLf6i5HKdVeOVj7d6kVFElmbS2QW2T4HmefRc5z1huVArk9bh5Rk1NiFp9YBCXU3g==} - engines: {node: '>=14.0.0'} + /@smithy/credential-provider-imds@3.1.4: + resolution: {integrity: sha512-NKyH01m97Xa5xf3pB2QOF3lnuE8RIK0hTVNU5zvZAwZU8uspYO4DHQVlK+Y5gwSrujTfHvbfd1D9UFJAc0iYKQ==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/node-config-provider': 2.2.2 - '@smithy/property-provider': 2.1.2 - '@smithy/types': 2.10.0 - '@smithy/url-parser': 2.1.2 - tslib: 2.6.2 + '@smithy/node-config-provider': 3.1.4 + '@smithy/property-provider': 3.1.3 + '@smithy/types': 3.3.0 + '@smithy/url-parser': 3.0.3 + tslib: 2.6.3 dev: false - /@smithy/eventstream-codec@2.1.2: - resolution: {integrity: sha512-2PHrVRixITHSOj3bxfZmY93apGf8/DFiyhRh9W0ukfi07cvlhlRonZ0fjgcqryJjUZ5vYHqqmfIE/Qe1HM9mlw==} + /@smithy/eventstream-codec@3.1.2: + resolution: {integrity: sha512-0mBcu49JWt4MXhrhRAlxASNy0IjDRFU+aWNDRal9OtUJvJNiwDuyKMUONSOjLjSCeGwZaE0wOErdqULer8r7yw==} dependencies: - '@aws-crypto/crc32': 3.0.0 - '@smithy/types': 2.10.0 - '@smithy/util-hex-encoding': 2.1.1 - tslib: 2.6.2 + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 3.3.0 + '@smithy/util-hex-encoding': 3.0.0 + tslib: 2.6.3 dev: false - /@smithy/eventstream-serde-browser@2.1.2: - resolution: {integrity: sha512-2N11IFHvOmKuwK6hLVkqM8ge8oiQsFkflr4h07LToxo3rX+njkx/5eRn6RVcyNmpbdbxYYt0s0Pf8u+yhHmOKg==} - engines: {node: '>=14.0.0'} + /@smithy/eventstream-serde-browser@3.0.4: + resolution: {integrity: sha512-Eo4anLZX6ltGJTZ5yJMc80gZPYYwBn44g0h7oFq6et+TYr5dUsTpIcDbz2evsOKIZhZ7zBoFWHtBXQ4QQeb5xA==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/eventstream-serde-universal': 2.1.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/eventstream-serde-universal': 3.0.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/eventstream-serde-config-resolver@2.1.2: - resolution: {integrity: sha512-nD/+k3mK+lMMwf2AItl7uWma+edHLqiE6LyIYXYnIBlCJcIQnA/vTHjHFoSJFCfG30sBJnU/7u4X5j/mbs9uKg==} - engines: {node: '>=14.0.0'} + /@smithy/eventstream-serde-config-resolver@3.0.3: + resolution: {integrity: sha512-NVTYjOuYpGfrN/VbRQgn31x73KDLfCXCsFdad8DiIc3IcdxL+dYA9zEQPyOP7Fy2QL8CPy2WE4WCUD+ZsLNfaQ==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/eventstream-serde-node@2.1.2: - resolution: {integrity: sha512-zNE6DhbwDEWTKl4mELkrdgXBGC7UsFg1LDkTwizSOFB/gd7G7la083wb0JgU+xPt+TYKK0AuUlOM0rUZSJzqeA==} - engines: {node: '>=14.0.0'} + /@smithy/eventstream-serde-node@3.0.4: + resolution: {integrity: sha512-mjlG0OzGAYuUpdUpflfb9zyLrBGgmQmrobNT8b42ZTsGv/J03+t24uhhtVEKG/b2jFtPIHF74Bq+VUtbzEKOKg==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/eventstream-serde-universal': 2.1.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/eventstream-serde-universal': 3.0.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/eventstream-serde-universal@2.1.2: - resolution: {integrity: sha512-Upd/zy+dNvvIDPU1HGhW9ivNjvJQ0W4UkkQOzr5Mo0hz2lqnZAyOuit4TK2JAEg/oo+V1gUY4XywDc7zNbCF0g==} - engines: {node: '>=14.0.0'} + /@smithy/eventstream-serde-universal@3.0.4: + resolution: {integrity: sha512-Od9dv8zh3PgOD7Vj4T3HSuox16n0VG8jJIM2gvKASL6aCtcS8CfHZDWe1Ik3ZXW6xBouU+45Q5wgoliWDZiJ0A==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/eventstream-codec': 2.1.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/eventstream-codec': 3.1.2 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/fetch-http-handler@2.4.2: - resolution: {integrity: sha512-sIGMVwa/8h6eqNjarI3F07gvML3mMXcqBe+BINNLuKsVKXMNBN6wRzeZbbx7lfiJDEHAP28qRns8flHEoBB7zw==} + /@smithy/fetch-http-handler@3.2.1: + resolution: {integrity: sha512-0w0bgUvZmfa0vHN8a+moByhCJT07WN6AHKEhFSOLsDpnszm+5dLVv5utGaqbhOrZ/aF5x3xuPMs/oMCd+4O5xg==} dependencies: - '@smithy/protocol-http': 3.2.0 - '@smithy/querystring-builder': 2.1.2 - '@smithy/types': 2.10.0 - '@smithy/util-base64': 2.1.1 - tslib: 2.6.2 + '@smithy/protocol-http': 4.0.3 + '@smithy/querystring-builder': 3.0.3 + '@smithy/types': 3.3.0 + '@smithy/util-base64': 3.0.0 + tslib: 2.6.3 dev: false - /@smithy/hash-blob-browser@2.1.2: - resolution: {integrity: sha512-f8QHgOVSXeYsc4BLKWdfXRowKa2g9byAkAX5c7Ku89bi9uBquWLEVmKlYXFBlkX562Fkmp2YSeciv+zZuOrIOQ==} + /@smithy/hash-blob-browser@3.1.2: + resolution: {integrity: sha512-hAbfqN2UbISltakCC2TP0kx4LqXBttEv2MqSPE98gVuDFMf05lU+TpC41QtqGP3Ff5A3GwZMPfKnEy0VmEUpmg==} dependencies: - '@smithy/chunked-blob-reader': 2.1.1 - '@smithy/chunked-blob-reader-native': 2.1.1 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/chunked-blob-reader': 3.0.0 + '@smithy/chunked-blob-reader-native': 3.0.0 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/hash-node@2.1.2: - resolution: {integrity: sha512-3Sgn4s0g4xud1M/j6hQwYCkz04lVJ24wvCAx4xI26frr3Ao6v0o2VZkBpUySTeQbMUBp2DhuzJ0fV1zybzkckw==} - engines: {node: '>=14.0.0'} + /@smithy/hash-node@3.0.3: + resolution: {integrity: sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 - '@smithy/util-buffer-from': 2.1.1 - '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 dev: false - /@smithy/hash-stream-node@2.1.2: - resolution: {integrity: sha512-UB6xo+KN3axrLO+MfnWb8mtdeep4vjGUcjYCVFdk9h+OqUb7JYWZZLRcupRPZx28cNBCBEUtc9wVZDI71JDdQA==} - engines: {node: '>=14.0.0'} + /@smithy/hash-stream-node@3.1.2: + resolution: {integrity: sha512-PBgDMeEdDzi6JxKwbfBtwQG9eT9cVwsf0dZzLXoJF4sHKHs5HEo/3lJWpn6jibfJwT34I1EBXpBnZE8AxAft6g==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 - '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 dev: false - /@smithy/invalid-dependency@2.1.2: - resolution: {integrity: sha512-qdgKhkFYxDJnKecx2ANwz3JRkXjm0qDgEnAs5BIfb2z/XqA2l7s9BTH7GTC/RR4E8h6EDCeb5rM2rnARxviqIg==} + /@smithy/invalid-dependency@3.0.3: + resolution: {integrity: sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==} dependencies: - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/is-array-buffer@2.1.1: - resolution: {integrity: sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==} + /@smithy/is-array-buffer@2.2.0: + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /@smithy/md5-js@2.1.2: - resolution: {integrity: sha512-C/FWR5ooyDNDfc1Opx3n0QFO5p4G0gldIbk2VU9mPGnZVTjzXcWM5jUQp33My5UK305tKYpG5/kZdQSNVh+tLw==} + /@smithy/is-array-buffer@3.0.0: + resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 - '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /@smithy/middleware-content-length@2.1.2: - resolution: {integrity: sha512-XEWtul1tHP31EtUIobEyN499paUIbnCTRtjY+ciDCEXW81lZmpjrDG3aL0FxJDPnvatVQuMV1V5eg6MCqTFaLQ==} - engines: {node: '>=14.0.0'} + /@smithy/md5-js@3.0.3: + resolution: {integrity: sha512-O/SAkGVwpWmelpj/8yDtsaVe6sINHLB1q8YE/+ZQbDxIw3SRLbTZuRaI10K12sVoENdnHqzPp5i3/H+BcZ3m3Q==} dependencies: - '@smithy/protocol-http': 3.2.0 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 dev: false - /@smithy/middleware-endpoint@2.4.2: - resolution: {integrity: sha512-72qbmVwaWcLOd/OT52fszrrlXywPwciwpsRiIk/dIvpcwkpGE9qrYZ2bt/SYcA/ma8Rz9Ni2AbBuSXLDYISS+A==} - engines: {node: '>=14.0.0'} + /@smithy/middleware-content-length@3.0.3: + resolution: {integrity: sha512-Dbz2bzexReYIQDWMr+gZhpwBetNXzbhnEMhYKA6urqmojO14CsXjnsoPYO8UL/xxcawn8ZsuVU61ElkLSltIUQ==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/middleware-serde': 2.1.2 - '@smithy/node-config-provider': 2.2.2 - '@smithy/shared-ini-file-loader': 2.3.2 - '@smithy/types': 2.10.0 - '@smithy/url-parser': 2.1.2 - '@smithy/util-middleware': 2.1.2 - tslib: 2.6.2 + '@smithy/protocol-http': 4.0.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/middleware-retry@2.1.2: - resolution: {integrity: sha512-tlvSK+v9bPHHb0dLWvEaFW2Iz0IeA57ISvSaso36I33u8F8wYqo5FCvenH7TgMVBx57jyJBXOmYCZa9n5gdJIg==} - engines: {node: '>=14.0.0'} + /@smithy/middleware-endpoint@3.0.5: + resolution: {integrity: sha512-V4acqqrh5tDxUEGVTOgf2lYMZqPQsoGntCrjrJZEeBzEzDry2d2vcI1QCXhGltXPPY+BMc6eksZMguA9fIY8vA==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/node-config-provider': 2.2.2 - '@smithy/protocol-http': 3.2.0 - '@smithy/service-error-classification': 2.1.2 - '@smithy/smithy-client': 2.4.0 - '@smithy/types': 2.10.0 - '@smithy/util-middleware': 2.1.2 - '@smithy/util-retry': 2.1.2 - tslib: 2.6.2 - uuid: 8.3.2 + '@smithy/middleware-serde': 3.0.3 + '@smithy/node-config-provider': 3.1.4 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + '@smithy/url-parser': 3.0.3 + '@smithy/util-middleware': 3.0.3 + tslib: 2.6.3 dev: false - /@smithy/middleware-serde@2.1.2: - resolution: {integrity: sha512-XNU6aVIhlSbjuo2XsfZ7rd4HhjTXDlNWxAmhlBfViTW1TNK02CeWdeEntp5XtQKYD//pyTIbYi35EQvIidAkOw==} - engines: {node: '>=14.0.0'} + /@smithy/middleware-retry@3.0.9: + resolution: {integrity: sha512-Mrv9omExU1gA7Y0VEJG2LieGfPYtwwcEiOnVGZ54a37NEMr66TJ0glFslOJFuKWG6izg5DpKIUmDV9rRxjm47Q==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/node-config-provider': 3.1.4 + '@smithy/protocol-http': 4.0.3 + '@smithy/service-error-classification': 3.0.3 + '@smithy/smithy-client': 3.1.7 + '@smithy/types': 3.3.0 + '@smithy/util-middleware': 3.0.3 + '@smithy/util-retry': 3.0.3 + tslib: 2.6.3 + uuid: 9.0.1 dev: false - /@smithy/middleware-stack@2.1.2: - resolution: {integrity: sha512-EPGaHGd4XmZcaRYjbhyqiqN/Q/ESxXu5e5TK24CTZUe99y8/XCxmiX8VLMM4H0DI7K3yfElR0wPAAvceoSkTgw==} - engines: {node: '>=14.0.0'} + /@smithy/middleware-serde@3.0.3: + resolution: {integrity: sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/node-config-provider@2.2.2: - resolution: {integrity: sha512-QXvpqHSijAm13ZsVkUo92b085UzDvYP1LblWTb3uWi9WilhDvYnVyPLXaryLhOWZ2YvdhK2170T3ZBqtg+quIQ==} - engines: {node: '>=14.0.0'} + /@smithy/middleware-stack@3.0.3: + resolution: {integrity: sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/property-provider': 2.1.2 - '@smithy/shared-ini-file-loader': 2.3.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/node-http-handler@2.4.0: - resolution: {integrity: sha512-Mf2f7MMy31W8LisJ9O+7J5cKiNwBwBBLU6biQ7/sFSFdhuOxPN7hOPoZ8vlaFjvrpfOUJw9YOpjGyNTKuvomOQ==} - engines: {node: '>=14.0.0'} + /@smithy/node-config-provider@3.1.4: + resolution: {integrity: sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/abort-controller': 2.1.2 - '@smithy/protocol-http': 3.2.0 - '@smithy/querystring-builder': 2.1.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/property-provider@2.1.2: - resolution: {integrity: sha512-yaXCVFKzxbSXqOoyA7AdAgXhwdjiLeui7n2P6XLjBCz/GZFdLUJgSY6KL1PevaxT4REMwUSs/bSHAe/0jdzEHw==} - engines: {node: '>=14.0.0'} + /@smithy/node-http-handler@3.1.2: + resolution: {integrity: sha512-Td3rUNI7qqtoSLTsJBtsyfoG4cF/XMFmJr6Z2dX8QNzIi6tIW6YmuyFml8mJ2cNpyWNqITKbROMOFrvQjmsOvw==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/abort-controller': 3.1.1 + '@smithy/protocol-http': 4.0.3 + '@smithy/querystring-builder': 3.0.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/protocol-http@3.2.0: - resolution: {integrity: sha512-VRp0YITYIQum+rX4zeZ3cW1wl9r90IQzQN+VLS1NxdSMt6NLsJiJqR9czTxlaeWNrLHsFAETmjmdrS48Ug1liA==} - engines: {node: '>=14.0.0'} + /@smithy/property-provider@3.1.3: + resolution: {integrity: sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/querystring-builder@2.1.2: - resolution: {integrity: sha512-wk6QpuvBBLJF5w8aADsZOtxaHY9cF5MZe1Ry3hSqqBxARdUrMoXi/jukUz5W0ftXGlbA398IN8dIIUj3WXqJXg==} - engines: {node: '>=14.0.0'} + /@smithy/protocol-http@4.0.3: + resolution: {integrity: sha512-x5jmrCWwQlx+Zv4jAtc33ijJ+vqqYN+c/ZkrnpvEe/uDas7AT7A/4Rc2CdfxgWv4WFGmEqODIrrUToPN6DDkGw==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 - '@smithy/util-uri-escape': 2.1.1 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/querystring-parser@2.1.2: - resolution: {integrity: sha512-z1yL5Iiagm/UxVy1tcuTFZdfOBK/QtYeK6wfClAJ7cOY7kIaYR6jn1cVXXJmhAQSh1b2ljP4xiZN4Ybj7Tbs5w==} - engines: {node: '>=14.0.0'} + /@smithy/querystring-builder@3.0.3: + resolution: {integrity: sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + '@smithy/util-uri-escape': 3.0.0 + tslib: 2.6.3 dev: false - /@smithy/service-error-classification@2.1.2: - resolution: {integrity: sha512-R+gL1pAPuWkH6unFridk57wDH5PFY2IlVg2NUjSAjoaIaU+sxqKf/7AOWIcx9Bdn+xY0/4IRQ69urlC+F3I9gg==} - engines: {node: '>=14.0.0'} + /@smithy/querystring-parser@3.0.3: + resolution: {integrity: sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/shared-ini-file-loader@2.3.2: - resolution: {integrity: sha512-idHGDJB+gBh+aaIjmWj6agmtNWftoyAenErky74hAtKyUaCvfocSBgEJ2pQ6o68svBluvGIj4NGFgJu0198mow==} - engines: {node: '>=14.0.0'} + /@smithy/service-error-classification@3.0.3: + resolution: {integrity: sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/types': 3.3.0 dev: false - /@smithy/signature-v4@2.1.2: - resolution: {integrity: sha512-DdPWaNGIbxzyocR3ncH8xlxQgsqteRADEdCPoivgBzwv17UzKy2obtdi2vwNc5lAJ955bGEkkWef9O7kc1Eocg==} - engines: {node: '>=14.0.0'} + /@smithy/shared-ini-file-loader@3.1.4: + resolution: {integrity: sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/eventstream-codec': 2.1.2 - '@smithy/is-array-buffer': 2.1.1 - '@smithy/types': 2.10.0 - '@smithy/util-hex-encoding': 2.1.1 - '@smithy/util-middleware': 2.1.2 - '@smithy/util-uri-escape': 2.1.1 - '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/smithy-client@2.4.0: - resolution: {integrity: sha512-6/jxk0om9l2s9BcgHtrBn+Hd3xcFGDzxfEJ2FvGpZxIz0S7bgvZg1gyR66O1xf1w9WZBH+W7JClhfSn2gETINw==} - engines: {node: '>=14.0.0'} + /@smithy/signature-v4@3.1.2: + resolution: {integrity: sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/middleware-endpoint': 2.4.2 - '@smithy/middleware-stack': 2.1.2 - '@smithy/protocol-http': 3.2.0 - '@smithy/types': 2.10.0 - '@smithy/util-stream': 2.1.2 - tslib: 2.6.2 + '@smithy/is-array-buffer': 3.0.0 + '@smithy/types': 3.3.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-middleware': 3.0.3 + '@smithy/util-uri-escape': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 dev: false - /@smithy/types@2.10.0: - resolution: {integrity: sha512-QYXQmpIebS8/jYXgyJjCanKZbI4Rr8tBVGBAIdDhA35f025TVjJNW69FJ0TGiDqt+lIGo037YIswq2t2Y1AYZQ==} - engines: {node: '>=14.0.0'} + /@smithy/smithy-client@3.1.7: + resolution: {integrity: sha512-nZbJZB0XI3YnaFBWGDBr7kjaew6O0oNYNmopyIz6gKZEbxzrtH7rwvU1GcVxcSFoOwWecLJEe79fxEMljHopFQ==} + engines: {node: '>=16.0.0'} dependencies: - tslib: 2.6.2 + '@smithy/middleware-endpoint': 3.0.5 + '@smithy/middleware-stack': 3.0.3 + '@smithy/protocol-http': 4.0.3 + '@smithy/types': 3.3.0 + '@smithy/util-stream': 3.0.6 + tslib: 2.6.3 dev: false - /@smithy/url-parser@2.1.2: - resolution: {integrity: sha512-KBPi740ciTujUaY+RfQuPABD0QFmgSBN5qNVDCGTryfsbG4jkwC0YnElSzi72m24HegMyxzZDLG4Oh4/97mw2g==} + /@smithy/types@3.3.0: + resolution: {integrity: sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/querystring-parser': 2.1.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /@smithy/util-base64@2.1.1: - resolution: {integrity: sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==} - engines: {node: '>=14.0.0'} + /@smithy/url-parser@3.0.3: + resolution: {integrity: sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==} dependencies: - '@smithy/util-buffer-from': 2.1.1 - tslib: 2.6.2 + '@smithy/querystring-parser': 3.0.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/util-body-length-browser@2.1.1: - resolution: {integrity: sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==} + /@smithy/util-base64@3.0.0: + resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} + engines: {node: '>=16.0.0'} dependencies: - tslib: 2.6.2 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 dev: false - /@smithy/util-body-length-node@2.2.1: - resolution: {integrity: sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==} - engines: {node: '>=14.0.0'} + /@smithy/util-body-length-browser@3.0.0: + resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /@smithy/util-buffer-from@2.1.1: - resolution: {integrity: sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==} - engines: {node: '>=14.0.0'} + /@smithy/util-body-length-node@3.0.0: + resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/is-array-buffer': 2.1.1 - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /@smithy/util-config-provider@2.2.1: - resolution: {integrity: sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==} + /@smithy/util-buffer-from@2.2.0: + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.6.2 + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.6.3 + dev: false + + /@smithy/util-buffer-from@3.0.0: + resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==} + engines: {node: '>=16.0.0'} + dependencies: + '@smithy/is-array-buffer': 3.0.0 + tslib: 2.6.3 dev: false - /@smithy/util-defaults-mode-browser@2.1.2: - resolution: {integrity: sha512-YmojdmsE7VbvFGJ/8btn/5etLm1HOQkgVX6nMWlB0yBL/Vb//s3aTebUJ66zj2+LNrBS3B9S+18+LQU72Yj0AQ==} + /@smithy/util-config-provider@3.0.0: + resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} + engines: {node: '>=16.0.0'} + dependencies: + tslib: 2.6.3 + dev: false + + /@smithy/util-defaults-mode-browser@3.0.9: + resolution: {integrity: sha512-WKPcElz92MAQG09miBdb0GxEH/MwD5GfE8g07WokITq5g6J1ROQfYCKC1wNnkqAGfrSywT7L0rdvvqlBplqiyA==} engines: {node: '>= 10.0.0'} dependencies: - '@smithy/property-provider': 2.1.2 - '@smithy/smithy-client': 2.4.0 - '@smithy/types': 2.10.0 + '@smithy/property-provider': 3.1.3 + '@smithy/smithy-client': 3.1.7 + '@smithy/types': 3.3.0 bowser: 2.11.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /@smithy/util-defaults-mode-node@2.2.1: - resolution: {integrity: sha512-kof7M9Q2qP5yaQn8hHJL3KwozyvIfLe+ys7feifSul6gBAAeoraibo/MWqotb/I0fVLMlCMDwn7WXFsGUwnsew==} + /@smithy/util-defaults-mode-node@3.0.9: + resolution: {integrity: sha512-dQLrUqFxqpf0GvEKEuFdgXcdZwz6oFm752h4d6C7lQz+RLddf761L2r7dSwGWzESMMB3wKj0jL+skRhEGlecjw==} engines: {node: '>= 10.0.0'} dependencies: - '@smithy/config-resolver': 2.1.2 - '@smithy/credential-provider-imds': 2.2.2 - '@smithy/node-config-provider': 2.2.2 - '@smithy/property-provider': 2.1.2 - '@smithy/smithy-client': 2.4.0 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/config-resolver': 3.0.5 + '@smithy/credential-provider-imds': 3.1.4 + '@smithy/node-config-provider': 3.1.4 + '@smithy/property-provider': 3.1.3 + '@smithy/smithy-client': 3.1.7 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/util-endpoints@1.1.2: - resolution: {integrity: sha512-2/REfdcJ20y9iF+9kSBRBsaoGzjT5dZ3E6/TA45GHJuJAb/vZTj76VLTcrl2iN3fWXiDK1B8RxchaLGbr7RxxA==} - engines: {node: '>= 14.0.0'} + /@smithy/util-endpoints@2.0.5: + resolution: {integrity: sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/node-config-provider': 2.2.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/node-config-provider': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/util-hex-encoding@2.1.1: - resolution: {integrity: sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==} - engines: {node: '>=14.0.0'} + /@smithy/util-hex-encoding@3.0.0: + resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} + engines: {node: '>=16.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /@smithy/util-middleware@2.1.2: - resolution: {integrity: sha512-lvSOnwQ7iAajtWb1nAyy0CkOIn8d+jGykQOtt2NXDsPzOTfejZM/Uph+O/TmVgWoXdcGuw5peUMG2f5xEIl6UQ==} - engines: {node: '>=14.0.0'} + /@smithy/util-middleware@3.0.3: + resolution: {integrity: sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/util-retry@2.1.2: - resolution: {integrity: sha512-pqifOgRqwLfRu+ks3awEKKqPeYxrHLwo4Yu2EarGzeoarTd1LVEyyf5qLE6M7IiCsxnXRhn9FoWIdZOC+oC/VQ==} - engines: {node: '>= 14.0.0'} + /@smithy/util-retry@3.0.3: + resolution: {integrity: sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/service-error-classification': 2.1.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/service-error-classification': 3.0.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false - /@smithy/util-stream@2.1.2: - resolution: {integrity: sha512-AbGjvoSok7YeUKv9WRVRSChQfsufLR54YCAabTbaABRdIucywRQs29em0uAP6r4RLj+4aFZStWGYpFgT0P8UlQ==} - engines: {node: '>=14.0.0'} + /@smithy/util-stream@3.0.6: + resolution: {integrity: sha512-w9i//7egejAIvplX821rPWWgaiY1dxsQUw0hXX7qwa/uZ9U3zplqTQ871jWadkcVB9gFDhkPWYVZf4yfFbZ0xA==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/fetch-http-handler': 2.4.2 - '@smithy/node-http-handler': 2.4.0 - '@smithy/types': 2.10.0 - '@smithy/util-base64': 2.1.1 - '@smithy/util-buffer-from': 2.1.1 - '@smithy/util-hex-encoding': 2.1.1 - '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + '@smithy/fetch-http-handler': 3.2.1 + '@smithy/node-http-handler': 3.1.2 + '@smithy/types': 3.3.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 dev: false - /@smithy/util-uri-escape@2.1.1: - resolution: {integrity: sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==} - engines: {node: '>=14.0.0'} + /@smithy/util-uri-escape@3.0.0: + resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} + engines: {node: '>=16.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /@smithy/util-utf8@2.1.1: - resolution: {integrity: sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==} + /@smithy/util-utf8@2.3.0: + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/util-buffer-from': 2.1.1 - tslib: 2.6.2 + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.6.3 dev: false - /@smithy/util-waiter@2.1.2: - resolution: {integrity: sha512-yxLC57GBDmbDmrnH+vJxsrbV4/aYUucBONkSRLZyJIVFAl/QJH+O/h+phITHDaxVZCYZAcudYJw4ERE32BJM7g==} - engines: {node: '>=14.0.0'} + /@smithy/util-utf8@3.0.0: + resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==} + engines: {node: '>=16.0.0'} dependencies: - '@smithy/abort-controller': 2.1.2 - '@smithy/types': 2.10.0 - tslib: 2.6.2 + '@smithy/util-buffer-from': 3.0.0 + tslib: 2.6.3 + dev: false + + /@smithy/util-waiter@3.1.2: + resolution: {integrity: sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==} + engines: {node: '>=16.0.0'} + dependencies: + '@smithy/abort-controller': 3.1.1 + '@smithy/types': 3.3.0 + tslib: 2.6.3 dev: false /@tootallnate/once@1.1.2: @@ -1219,10 +1214,6 @@ packages: dev: false optional: true - /@types/node@18.15.13: - resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} - dev: false - /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} requiresBuild: true @@ -1237,16 +1228,12 @@ packages: negotiator: 0.6.3 dev: false - /aes-js@4.0.0-beta.5: - resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} - dev: false - /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} requiresBuild: true dependencies: - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: false @@ -1300,6 +1287,7 @@ packages: /are-we-there-yet@3.0.1: resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. requiresBuild: true dependencies: delegates: 1.0.0 @@ -1330,8 +1318,8 @@ packages: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} dev: true - /aws4@1.12.0: - resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + /aws4@1.13.0: + resolution: {integrity: sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g==} dev: true /balanced-match@1.0.2: @@ -1357,7 +1345,7 @@ packages: /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: - buffer: 5.6.0 + buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 dev: false @@ -1366,8 +1354,8 @@ packages: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} dev: true - /body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + /body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 @@ -1379,7 +1367,7 @@ packages: iconv-lite: 0.4.24 on-finished: 2.4.1 qs: 6.11.0 - raw-body: 2.5.1 + raw-body: 2.5.2 type-is: 1.6.18 unpipe: 1.0.0 transitivePeerDependencies: @@ -1411,6 +1399,13 @@ packages: ieee754: 1.2.1 dev: false + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -1444,7 +1439,7 @@ packages: promise-inflight: 1.0.1 rimraf: 3.0.2 ssri: 8.0.1 - tar: 6.2.0 + tar: 6.2.1 unique-filename: 1.1.1 transitivePeerDependencies: - bluebird @@ -1459,7 +1454,7 @@ packages: es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 - set-function-length: 1.2.1 + set-function-length: 1.2.2 dev: false /canonicalize@2.0.0: @@ -1535,8 +1530,8 @@ packages: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: false - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + /cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} dev: false @@ -1572,8 +1567,8 @@ packages: dependencies: ms: 2.0.0 - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + /debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} engines: {node: '>=6.0'} requiresBuild: true peerDependencies: @@ -1628,18 +1623,18 @@ packages: engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: false - /detect-libc@2.0.2: - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + /detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} dev: false - /did-jwt@8.0.1: - resolution: {integrity: sha512-J3AWsJhf8wJhKBjzCnFn2fgG403TF4uFnj+zpvQnUlMBu6+ySYj6nACFZ6FN+8Coj0kvbdXJermU6hs1Ihx3gA==} + /did-jwt@8.0.4: + resolution: {integrity: sha512-KPtG7H+8GgKGMiDqFvOdNy5BBN3hpA+8xV7VygEnpst5oPIqjvcH3rTtnPF55a8bOxIzE2PudKGIXIQhekv7WA==} dependencies: - '@noble/ciphers': 0.5.1 - '@noble/curves': 1.3.0 - '@noble/hashes': 1.3.3 - '@scure/base': 1.1.5 + '@noble/ciphers': 0.5.3 + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.7 canonicalize: 2.0.0 did-resolver: 4.1.0 multibase: 4.0.6 @@ -1726,32 +1721,6 @@ packages: engines: {node: '>= 0.6'} dev: false - /ethers@6.11.1: - resolution: {integrity: sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==} - engines: {node: '>=14.0.0'} - dependencies: - '@adraffy/ens-normalize': 1.10.1 - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@types/node': 18.15.13 - aes-js: 4.0.0-beta.5 - tslib: 2.4.0 - ws: 8.5.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /ethr-did-resolver@10.1.5: - resolution: {integrity: sha512-wVCKhF6qQo2IewH9ui4lRBixbvT/A6szZFQoJkfvjP6EU/3MSb4KOP5QNpM37zmFU/rQGjHNt7bF13fNcmZ6wQ==} - dependencies: - did-resolver: 4.1.0 - ethers: 6.11.1 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -1762,16 +1731,16 @@ packages: engines: {node: '>=6'} dev: false - /express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + /express@4.19.2: + resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.1 + body-parser: 1.20.2 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.5.0 + cookie: 0.6.0 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 @@ -1938,6 +1907,7 @@ packages: /gauge@4.0.4: resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. requiresBuild: true dependencies: aproba: 2.0.0 @@ -1959,7 +1929,7 @@ packages: function-bind: 1.1.2 has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.1 + hasown: 2.0.2 dev: false /getpass@0.1.7: @@ -1974,6 +1944,7 @@ packages: /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported requiresBuild: true dependencies: fs.realpath: 1.0.0 @@ -2029,8 +2000,8 @@ packages: dev: false optional: true - /hasown@2.0.1: - resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 @@ -2060,7 +2031,7 @@ packages: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: false @@ -2081,7 +2052,7 @@ packages: requiresBuild: true dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: false @@ -2137,6 +2108,7 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. requiresBuild: true dependencies: once: 1.4.0 @@ -2243,6 +2215,7 @@ packages: dependencies: yallist: 4.0.0 dev: false + optional: true /luxon@3.4.4: resolution: {integrity: sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==} @@ -2452,16 +2425,15 @@ packages: engines: {node: '>= 0.6'} dev: false - /node-abi@3.56.0: - resolution: {integrity: sha512-fZjdhDOeRcaS+rcpve7XuwHBmktS1nS1gzgghwKUQQ8nTy2FdSDr6ZT8k6YhvlJeHmmQMYiT/IH9hfco5zeW2Q==} + /node-abi@3.65.0: + resolution: {integrity: sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==} engines: {node: '>=10'} dependencies: - semver: 7.6.0 + semver: 7.6.2 dev: false - /node-addon-api@7.1.0: - resolution: {integrity: sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==} - engines: {node: ^16 || ^18 || >= 20} + /node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} dev: false /node-gyp@8.4.1: @@ -2477,8 +2449,8 @@ packages: nopt: 5.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.6.0 - tar: 6.2.0 + semver: 7.6.2 + tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: - bluebird @@ -2499,6 +2471,7 @@ packages: /npmlog@6.0.2: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. requiresBuild: true dependencies: are-we-there-yet: 3.0.1 @@ -2517,8 +2490,9 @@ packages: engines: {node: '>=0.10.0'} dev: false - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} dev: false /on-finished@2.4.1: @@ -2569,13 +2543,13 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - detect-libc: 2.0.2 + detect-libc: 2.0.3 expand-template: 2.0.3 github-from-package: 0.0.0 minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.56.0 + node-abi: 3.65.0 pump: 3.0.0 rc: 1.2.8 simple-get: 4.0.1 @@ -2640,7 +2614,7 @@ packages: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.5 + side-channel: 1.0.6 dev: false /qs@6.5.3: @@ -2653,8 +2627,8 @@ packages: engines: {node: '>= 0.6'} dev: false - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + /raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} dependencies: bytes: 3.1.2 @@ -2689,7 +2663,7 @@ packages: engines: {node: '>= 6'} dependencies: inherits: 2.0.4 - string_decoder: 1.1.1 + string_decoder: 1.3.0 util-deprecate: 1.0.2 dev: false @@ -2729,7 +2703,7 @@ packages: deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 dependencies: aws-sign2: 0.7.0 - aws4: 1.12.0 + aws4: 1.13.0 caseless: 0.12.0 combined-stream: 1.0.8 extend: 3.0.2 @@ -2759,6 +2733,7 @@ packages: /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -2766,6 +2741,7 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true requiresBuild: true dependencies: @@ -2782,12 +2758,10 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + /semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true - dependencies: - lru-cache: 6.0.0 dev: false /send@0.18.0: @@ -2829,8 +2803,8 @@ packages: dev: false optional: true - /set-function-length@1.2.1: - resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 @@ -2845,14 +2819,14 @@ packages: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: false - /side-channel@1.0.5: - resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 dev: false /signal-exit@3.0.7: @@ -2886,15 +2860,15 @@ packages: requiresBuild: true dependencies: agent-base: 6.0.2 - debug: 4.3.4 - socks: 2.8.1 + debug: 4.3.5 + socks: 2.8.3 transitivePeerDependencies: - supports-color dev: false optional: true - /socks@2.8.1: - resolution: {integrity: sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==} + /socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} requiresBuild: true dependencies: @@ -2917,9 +2891,9 @@ packages: optional: true dependencies: bindings: 1.5.0 - node-addon-api: 7.1.0 + node-addon-api: 7.1.1 prebuild-install: 7.1.2 - tar: 6.2.0 + tar: 6.2.1 optionalDependencies: node-gyp: 8.4.1 transitivePeerDependencies: @@ -2990,6 +2964,12 @@ packages: dependencies: safe-buffer: 5.1.2 + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -3028,8 +3008,8 @@ packages: readable-stream: 3.6.2 dev: false - /tar@6.2.0: - resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + /tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} dependencies: chownr: 2.0.0 @@ -3057,16 +3037,8 @@ packages: punycode: 2.3.1 dev: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: false - - /tslib@2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - dev: false - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + /tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} dev: false /tunnel-agent@0.6.0: @@ -3141,8 +3113,8 @@ packages: hasBin: true dev: true - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true dev: false @@ -3182,19 +3154,6 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} requiresBuild: true - /ws@8.5.0: - resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} diff --git a/sql/migrations/V2__add_is_replacement.sql b/sql/migrations/V2__add_is_replacement.sql new file mode 100644 index 0000000..b7f43f0 --- /dev/null +++ b/sql/migrations/V2__add_is_replacement.sql @@ -0,0 +1,2 @@ + +ALTER TABLE image ADD COLUMN is_replacement BOOLEAN NOT NULL DEFAULT FALSE; diff --git a/server.js b/src/server.js similarity index 64% rename from server.js rename to src/server.js index 4c6f1a0..3bc500b 100644 --- a/server.js +++ b/src/server.js @@ -4,13 +4,14 @@ const crypto = require('crypto'); const didJwt = require('did-jwt'); const { Resolver } = require('did-resolver'); const express = require('express'); -const { getResolver } = require('ethr-did-resolver'); const fs = require('fs'); const { DateTime } = require('luxon'); const multer = require('multer'); const path = require('path'); const sqlite3 = require('sqlite3').verbose(); +const { didEthLocalResolver } = require("./vc/did-eth-local-resolver"); + require('dotenv').config() const app = express(); @@ -18,17 +19,11 @@ app.use(cors()); const port = process.env.PORT || 3002; // file name also referenced in flyway.conf and potentially in .env files or in environment variables -const dbFile = process.env.SQLITE_FILE || './image.sqlite'; +const dbFile = process.env.SQLITE_FILE || './image-db.sqlite'; const bucketName = process.env.S3_BUCKET_NAME || 'gifts-image-test'; const imageServer = process.env.DOWNLOAD_IMAGE_SERVER || 'test-image.timesafari.app'; -const ethrDidResolver = getResolver; -const resolver = - new Resolver({ - ...ethrDidResolver({ - infuraProjectId: process.env.INFURA_PROJECT_ID || 'fake-infura-project-id' - }) - }) +const resolver = new Resolver({ 'ethr': didEthLocalResolver }); // Open a connection to the SQLite database const db = new sqlite3.Database(dbFile, (err) => { @@ -54,38 +49,51 @@ const uploadDir = 'uploads'; const uploadMulter = multer({ dest: uploadDir + '/' }); app.get('/ping', async (req, res) => { - res.send('pong v1.0.0'); + res.send('pong - v 0.0.1'); // version }); app.get('/image-limits', async (req, res) => { - limitsResult = await retrievelimits(req, res); - if (!limitsResult.success) { - return limitsResult.result; + try { + limitsResult = await retrievelimits(req, res); + if (!limitsResult.success) { + return limitsResult.result; + } + return res.status(200).send(JSON.stringify({ + success: true, + doneImagesThisWeek: limitsResult.doneImagesThisWeek, + maxImagesPerWeek: limitsResult.maxImagesPerWeek, + nextWeekBeginDateTime: limitsResult.nextWeekBeginDateTime + })); + } catch (e) { + console.error('Error getting image limits:', e, ' ... with this string: ' + e); + return res.status(500).send(JSON.stringify({ success: false, message: 'Got this error retrieving limits: ' + e })); } - return res.status(200).send(JSON.stringify({ - success: true, - doneImagesThisWeek: limitsResult.doneImagesThisWeek, - maxImagesPerWeek: limitsResult.maxImagesPerWeek, - nextWeekBeginDateTime: limitsResult.nextWeekBeginDateTime - })); }); -// POST endpoint to upload an image +/** + * POST endpoint to upload an image + * + * Send as FormData, with: + * - "image" file Blob + * - "claimType" (optional, eg. "GiveAction", "PlanAction", "profile") + * - "handleId" (optional) + * - "fileName" (optional, if you want to replace an previous image) + */ app.post('/image', uploadMulter.single('image'), async (req, res) => { const reqFile = req.file; if (reqFile == null) { return res.status(400).send(JSON.stringify({ success: false, message: 'No file uploaded.' })); } - if (reqFile.size > 10000000) { - fs.rm(reqFile.path, (err) => { - if (err) { - console.error("Error deleting too-large temp file", reqFile.path, "with error (but continuing):", err); - } - }); - return res.status(400).send(JSON.stringify({success: false, message: 'File size is too large. Maximum file size is 10MB.'})); - } - try { + if (reqFile.size > 10485760) { // 10MB + fs.rm(reqFile.path, (err) => { + if (err) { + console.error("Error deleting too-large temp file", reqFile.path, "with error (but continuing):", err); + } + }); + return res.status(400).send(JSON.stringify({success: false, message: 'File size is too large. Maximum file size is 10MB.'})); + } + limitsResult = await retrievelimits(req, res); if (!limitsResult.success) { return limitsResult.result; @@ -102,41 +110,123 @@ app.post('/image', uploadMulter.single('image'), async (req, res) => { fs.readFile(reqFile.path, async (err, data) => { if (err) throw err; // Handle error - const hashSum = crypto.createHash('sha256'); - hashSum.update(data); - const hashHex = hashSum.digest('hex'); + try { + let finalFileName; + if (req.body.fileName) { + // replacement file name given + finalFileName = req.body.fileName; + + // check if the file to replace was sent by this user earlier + const didForOriginal = await new Promise((resolve, reject) => { + // For some reason, this prepared-statement SQL gives seg fault: "SELECT did FROM image WHERE did = ? and final_file = ?" + if (issuerDid.indexOf("'") >= 0 || finalFileName.indexOf("'") >= 0) { + console.error("Error: SQL injection attempt with", issuerDid, finalFileName); + return res.status(400).send(JSON.stringify({ success: false, message: 'SQL injection attempt detected.' })); + } + const sql = "SELECT did FROM image WHERE did = '" + issuerDid + "' and final_file = '" + finalFileName + "'"; + db.get( + sql, + [], + (dbErr, row) => { + if (dbErr) { + console.error(currentDate, 'Error getting image for user from database:', dbErr) + reject(dbErr); + } + resolve(row?.did); + } + ); + }); + if (!didForOriginal) { + return res.status(404).send(JSON.stringify({ success: false, message: 'No image entry found for user ' + issuerDid + ' for file ' + finalFileName })); + } - const fileName = hashHex + path.extname(reqFile.originalname); + // check if any other user recorded this image + const othersWhoSentImage = await new Promise((resolve, reject) => { + db.get( + 'SELECT did FROM image WHERE final_file = ? and did != ?', + [ finalFileName, issuerDid ], + (dbErr, row) => { + if (dbErr) { + console.error(currentDate, 'Error getting image for other users from database:', dbErr) + reject(dbErr); + } + resolve(row?.did); + } + ); + }); + if (othersWhoSentImage) { + return res.status(400).send(JSON.stringify({ success: false, message: 'Other users have also saved this image so it cannot be modified. You will have to replace your own references.' })); + } - try { + // remove from S3 + const params = { + Bucket: bucketName, // S3 Bucket name + Key: finalFileName, // File name to use in S3 + }; + const command = new DeleteObjectCommand(params); + const response = await s3Client.send(command); + if (response.$metadata.httpStatusCode !== 200 + && response.$metadata.httpStatusCode !== 202 + && response.$metadata.httpStatusCode !== 204) { + const errorTime = new Date().toISOString(); + console.error(errorTime, "Error deleting from S3 with bad HTTP status, with metadata:", response.$metadata); + return res.status(500).send(JSON.stringify({ + success: false, + message: "Got bad status of " + response.$metadata.httpStatusCode + " from S3. See server logs at " + errorTime + })); + } - // look to see if this image already exists - const imageUrl = await new Promise((resolve, reject) => { - db.get( - 'SELECT url FROM image WHERE final_file = ? and did = ?', - [ fileName, issuerDid ], - (dbErr, row) => { - if (dbErr) { - console.error(currentDate, 'Error getting image for user from database:', dbErr) - // continue anyway + // might as well remove from DB and add it all back again later + await new Promise((resolve, reject) => { + db.run( + 'DELETE FROM image where did = ? and final_file = ?', + [ issuerDid, finalFileName ], + (dbErr) => { + if (dbErr) { + const currentDate = new Date().toISOString(); + console.error(currentDate, "Error deleting record by", issuerDid, "named", finalFileName, "from database:", dbErr); + // don't continue because then we'll have storage we cannot track (and potentially limit) + reject(dbErr); + } + resolve(); } - resolve(row?.url); - } - ); - }); - if (imageUrl) { - return res.status(201).send(JSON.stringify({ success: true, url: imageUrl, message: 'This image already existed.' })); + ); + }); + } else { + // no replacement file name given so it's a new file + const hashSum = crypto.createHash('sha256'); + hashSum.update(data); + const hashHex = hashSum.digest('hex'); + finalFileName = hashHex + path.extname(reqFile.originalname); + + // look to see if this image already exists for this user + const imageUrl = await new Promise((resolve, reject) => { + db.get( + 'SELECT url FROM image WHERE final_file = ? and did = ?', + [ finalFileName, issuerDid ], + (dbErr, row) => { + if (dbErr) { + console.error(currentDate, 'Error getting image for user from database:', dbErr) + // continue anyway + } + resolve(row?.url); + } + ); + }); + if (imageUrl) { + return res.status(201).send(JSON.stringify({ success: true, url: imageUrl, message: 'This image already existed.' })); + } } // record the upload in the database const currentDate = new Date().toISOString(); const localFile = reqFile.path.startsWith(uploadDir + '/') ? reqFile.path.substring(uploadDir.length + 1) : reqFile.path; - const finalUrl = `https://${imageServer}/${fileName}`; + const finalUrl = `https://${imageServer}/${finalFileName}`; const claimType = req.body.claimType; const handleId = req.body.handleId; await new Promise((resolve, reject) => { db.run( - 'INSERT INTO image (time, did, claim_type, handle_id, local_file, size, final_file, mime_type, url) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', + 'INSERT INTO image (time, did, claim_type, handle_id, local_file, size, final_file, mime_type, url, is_replacement) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [ currentDate, issuerDid, @@ -144,9 +234,10 @@ app.post('/image', uploadMulter.single('image'), async (req, res) => { handleId, localFile, reqFile.size, - fileName, + finalFileName, reqFile.mimetype, - finalUrl + finalUrl, + !!req.body.fileName, ], (dbErr) => { if (dbErr) { @@ -164,7 +255,7 @@ app.post('/image', uploadMulter.single('image'), async (req, res) => { Body: data, Bucket: bucketName, // S3 Bucket name ContentType: reqFile.mimetype, // File content type - Key: fileName, // File name to use in S3 + Key: finalFileName, // File name to use in S3 }; if (process.env.S3_SET_ACL === 'true') { params.ACL = 'public-read'; @@ -186,7 +277,7 @@ app.post('/image', uploadMulter.single('image'), async (req, res) => { }); // AWS URL: https://gifts-image-test.s3.amazonaws.com/gifts-image-test/FILE // American Cloud URL: https://a2-west.americancloud.com/TENANT:giftsimagetest/FILE - return res.status(200).send(JSON.stringify({success: true, url: finalUrl})); + return res.status(201).send({success: true, url: finalUrl}); } } catch (uploadError) { const errorTime = new Date().toISOString(); @@ -240,11 +331,11 @@ app.delete('/image/:url', async (req, res) => { }); if (!thisUserImageFile) { console.error('No image entry found for user', issuerDid, '& URL', url, 'so returning 404.'); - return res.status(404).send(JSON.stringify({ success: false, message: 'No image entry found for user ' + issuerDid + ' & URL ' + url })); + return res.status(404).send({ success: false, message: 'No image entry found for user ' + issuerDid + ' & URL ' + url }); } // check if any other user recorded this image - const otherUserImage = await new Promise((resolve, reject) => { + const othersWhoSentImage = await new Promise((resolve, reject) => { db.get( 'SELECT did FROM image WHERE url = ? and did != ?', [ url, issuerDid ], @@ -258,7 +349,7 @@ app.delete('/image/:url', async (req, res) => { ); }); - if (!otherUserImage) { + if (!othersWhoSentImage) { // remove from S3 since nobody else recorded it const params = { Bucket: bucketName, // S3 Bucket name @@ -271,10 +362,10 @@ app.delete('/image/:url', async (req, res) => { && response.$metadata.httpStatusCode !== 204) { const errorTime = new Date().toISOString(); console.error(errorTime, "Error deleting from S3 with bad HTTP status, with metadata:", response.$metadata); - return res.status(500).send(JSON.stringify({ + return res.status(500).send({ success: false, message: "Got bad status of " + response.$metadata.httpStatusCode + " from S3. See server logs at " + errorTime - })); + }); } } @@ -286,22 +377,22 @@ app.delete('/image/:url', async (req, res) => { (dbErr) => { if (dbErr) { const currentDate = new Date().toISOString(); - console.error(currentDate, "Error deleting record from", issuerDid, "into database:", dbErr); - // don't continue because then we'll have storage we cannot track (and potentially limit) + console.error(currentDate, "Error deleting record by", issuerDid, "with URL", url, "from database:", dbErr); + // we'll let them know that it's not all cleaned up so they can try again reject(dbErr); } resolve(); } ); }); - return res.status(204).send(JSON.stringify({ success: true })); + return res.status(204).send({ success: true }); } catch (error) { const errorTime = new Date().toISOString(); console.error(errorTime, "Error processing image delete:", error); - return res.status(500).send(JSON.stringify({ + return res.status(500).send({ success: false, message: "Got error processing image delete. See server logs at " + errorTime + " Error Details: " + error - })); + }); } }); diff --git a/src/vc/did-eth-local-resolver.js b/src/vc/did-eth-local-resolver.js new file mode 100644 index 0000000..3921705 --- /dev/null +++ b/src/vc/did-eth-local-resolver.js @@ -0,0 +1,47 @@ +const { DIDResolutionResult } = require('did-resolver'); +/** + * This did:ethr resolver instructs the did-jwt machinery to use the + * EcdsaSecp256k1RecoveryMethod2020Uses verification method which adds the recovery bit to the + * signature to recover the DID's public key from a signature. + * + * This effectively hard codes the did:ethr DID resolver to use the address as the public key. + * @param did : string + * @returns {Promise} + * + * Similar code resides in endorser-ch + */ +const didEthLocalResolver = async(did) => { + const didRegex = /^did:ethr:(0x[0-9a-fA-F]{40})$/; + const match = did.match(didRegex); + + if (match) { + const address = match[1]; // Extract eth address: 0x... + const publicKeyHex = address; // Use the address directly as a public key placeholder + + return { + didDocumentMetadata: {}, + didResolutionMetadata: { + contentType: "application/did+ld+json" + }, + didDocument: { + '@context': [ + 'https://www.w3.org/ns/did/v1', + "https://w3id.org/security/suites/secp256k1recovery-2020/v2" + ], + id: did, + verificationMethod: [{ + id: `${did}#controller`, + type: 'EcdsaSecp256k1RecoveryMethod2020', + controller: did, + blockchainAccountId: "eip155:1:" + publicKeyHex, + }], + authentication: [`${did}#controller`], + assertionMethod: [`${did}#controller`], + }, + }; + } + + throw new Error(`Unsupported DID format: ${did}`); +}; + +module.exports = { didEthLocalResolver }; diff --git a/src/vc/index.js b/src/vc/index.js new file mode 100644 index 0000000..7ab4375 --- /dev/null +++ b/src/vc/index.js @@ -0,0 +1,7 @@ +/** + * Verifiable Credential & DID functions, specifically for EndorserSearch.org tools + * + * The goal is to make this folder similar across projects, then move it to a library. + * Other projects: endorser-ch, crowd-funder-for-time-pwa + * + */ diff --git a/test/Makefile b/test/Makefile new file mode 100644 index 0000000..e69cfe5 --- /dev/null +++ b/test/Makefile @@ -0,0 +1,6 @@ +# see ../Makefile.test + +TESTS ?= \ + test.sh + +include ../Makefile.test diff --git a/test/test.sh b/test/test.sh new file mode 100755 index 0000000..380ea2d --- /dev/null +++ b/test/test.sh @@ -0,0 +1,127 @@ +#!/usr/bin/env bash + +# Execute from the "test" directory so that the test files are available. +# +# We recommend you have the pkgx.dev tools installed. +# If you want to use your installed curl & jq & node, you can comment out the two "pkgx" commands. + +HOST=http://localhost:3002 + +if ! [[ "$PWD" == */test ]]; then + echo "Error: Run this script in the 'test' directory." + exit 1 +fi + +# load the tools: curl, jq, node +eval "$(pkgx --shellcode)" +env +curl +jq +node + +JWT_CODE_USER_0='OWNER_DID="did:ethr:0x0000694B58C2cC69658993A90D3840C560f2F51F"; OWNER_PRIVATE_KEY_HEX="2b6472c026ec2aa2c4235c994a63868fc9212d18b58f6cbfe861b52e71330f5b"; didJwt = require("did-jwt"); didJwt.createJWT({ exp: Math.floor(Date.now() / 1000) + 60, iat: Math.floor(Date.now() / 1000), iss: OWNER_DID }, { issuer: OWNER_DID, signer: didJwt.SimpleSigner(OWNER_PRIVATE_KEY_HEX) }).then(console.log)' +JWT_CODE_USER_1='OWNER_DID="did:ethr:0x111d15564f824D56C7a07b913aA7aDd03382aA39"; OWNER_PRIVATE_KEY_HEX="be64d297e1c6f3545971cd0bc24c3bf32656f8639a2ae32cb84a1e3c75ad69cd"; didJwt = require("did-jwt"); didJwt.createJWT({ exp: Math.floor(Date.now() / 1000) + 60, iat: Math.floor(Date.now() / 1000), iss: OWNER_DID }, { issuer: OWNER_DID, signer: didJwt.SimpleSigner(OWNER_PRIVATE_KEY_HEX) }).then(console.log)' + +# exit as soon as anything fails +set -e + +echo "Upload test0.png by user #0" +JWT=$(node -e "$JWT_CODE_USER_0") +echo JWT: $JWT +RESULT=$(curl -X POST -H "Authorization: Bearer $JWT" -F "image=@test0.png" "$HOST/image") +echo curl result: $RESULT + +echo "Download from the URL supplied" +URL0=$(echo $RESULT | jq -r '.url') +# -L to follow redirect because the returned URL is a timesafari.app URL +STATUS_CODE=$(curl -o test0-back.png -w "%{http_code}" -L $URL0); +if [ $STATUS_CODE -ne 200 ]; then + echo "File is not accessible, received status code: $STATUS_CODE"; +fi + +echo "Check that downloaded file is the same as the original" +if diff "test0.png" "test0-back.png" >/dev/null; then + echo "Got the same file." +else + echo "Did not get the same file." + exit 1 +fi + +echo "Upload test1.png by user #1" +JWT=$(node -e "$JWT_CODE_USER_1") +echo JWT: $JWT +RESULT=$(curl -X POST -H "Authorization: Bearer $JWT" -F "image=@test1.png" "$HOST/image") +echo curl result: $RESULT +URL2=$(echo $RESULT | jq -r '.url') +if [ "$URL0" != "$URL2" ]; then + echo "URLs 0 & 1 are different." +else + echo "URLs 0 & 1 are not different." + exit 1 +fi + +echo "Now unsuccessfully upload a change to the image by user 1" +FILENAME0=$(basename $URL0) +JWT=$(node -e "$JWT_CODE_USER_1") +echo JWT: $JWT +RESULT=$(curl -X POST -H "Authorization: Bearer $JWT" -F "image=@test1.png" -F "fileName=$FILENAME0" "$HOST/image") +echo curl result: $RESULT +SUCCESS=$(echo $RESULT | jq -r '.success') +if [ $SUCCESS = "false" ]; then + echo "User #1 could not replace existing file." +else + echo "File may have been replaced wrongly."; + exit 1 +fi + +echo "Now successfully upload a change to the image by user 0" +JWT=$(node -e "$JWT_CODE_USER_0") +echo JWT: $JWT +RESULT=$(curl -X POST -H "Authorization: Bearer $JWT" -F "image=@test1.png" -F "fileName=$FILENAME0" "$HOST/image") +echo curl result: $RESULT +SUCCESS=$(echo $RESULT | jq -r '.success') +if [ $SUCCESS = "true" ]; then + echo "User #0 did replace file."; +else + echo "User #0 couldn't replace file."; + exit 1 +fi + +echo "Fail to remove test file 0 from the service" +TEST_URL="https%3A%2F%2Ftest-image.timesafari.app%2F4599145c3a8792a678f458747f2d8512c680e8680bf5563c35b06cd770051ed2.png" +JWT=$(node -e "$JWT_CODE_USER_1") +echo JWT: $JWT +RESULT=$(curl -X DELETE -H "Authorization: Bearer $JWT" "$HOST/image/$TEST_URL") +echo curl result: $RESULT +SUCCESS=$(echo $RESULT | jq -r '.success') +if [ "$SUCCESS" = "false" ]; then + echo "Test file 0 was not cleaned off server." +else + echo "Test file 0 was cleaned off server."; + exit 1 +fi + +echo "Remove test file 0 from the service" +TEST_URL="https%3A%2F%2Ftest-image.timesafari.app%2F4599145c3a8792a678f458747f2d8512c680e8680bf5563c35b06cd770051ed2.png" +JWT=$(node -e "$JWT_CODE_USER_0") +echo JWT: $JWT +RESULT=$(curl -X DELETE -H "Authorization: Bearer $JWT" "$HOST/image/$TEST_URL") +echo curl result: $RESULT +SUCCESS=$(echo $RESULT | jq -r '.success') +if [[ -z "$RESULT" ]] || [[ "$SUCCESS" = "true" ]]; then + echo "Test file 0 was cleaned off server." +else + echo "Test file 0 was not cleaned off server."; + exit 1 +fi + +echo "Remove test file 1 from the service" +TEST_URL="https%3A%2F%2Ftest-image.timesafari.app%2F83801e59789f962ddd19dbf99abd65b416e4c6560c28bdb3e663cea045561b07.png" +JWT=$(node -e "$JWT_CODE_USER_1") +echo JWT: $JWT +RESULT=$(curl -X DELETE -H "Authorization: Bearer $JWT" "$HOST/image/$TEST_URL") +echo curl result: $RESULT +SUCCESS=$(echo $RESULT | jq -r '.success') +if [[ -z "$RESULT" ]] || [[ "$SUCCESS" = "true" ]]; then + echo "Test file 1 was cleaned off server." +else + echo "Test file 1 was not cleaned off server."; + exit 1 +fi diff --git a/test/test0.png b/test/test0.png new file mode 100644 index 0000000..a434966 Binary files /dev/null and b/test/test0.png differ diff --git a/test/test1.png b/test/test1.png new file mode 100644 index 0000000..7374d46 Binary files /dev/null and b/test/test1.png differ