From dbcbd0c544c626d87158fa4b952dec9c6f8f6001 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Fri, 23 Feb 2024 15:10:17 -0700 Subject: [PATCH] update to v3 of AWS SDK, add mime-type to upload --- README.md | 6 + package.json | 3 +- pnpm-lock.yaml | 1299 ++++++++++++++++++++++++++++++++++++++++++------ server.js | 41 +- 4 files changed, 1191 insertions(+), 158 deletions(-) diff --git a/README.md b/README.md index 43545ee..6afbd88 100644 --- a/README.md +++ b/README.md @@ -13,3 +13,9 @@ pnpm install ``` node server.js ``` + +## test + +``` +curl -X POST -F "image=@./test.png" http://localhost:3000/image +``` diff --git a/package.json b/package.json index 1fddb1c..e1a699f 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "", "license": "UNLICENSED", "dependencies": { - "aws-sdk": "^2.1564.0", + "@aws-sdk/client-s3": "^3.521.0", + "@aws-sdk/lib-storage": "^3.521.0", "dotenv": "^16.4.5", "express": "^4.18.2", "multer": "1.4.5-lts.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 89707bc..19981e5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,9 +5,12 @@ settings: excludeLinksFromLockfile: false dependencies: - aws-sdk: - specifier: ^2.1564.0 - version: 2.1564.0 + '@aws-sdk/client-s3': + specifier: ^3.521.0 + version: 3.521.0 + '@aws-sdk/lib-storage': + specifier: ^3.521.0 + version: 3.521.0(@aws-sdk/client-s3@3.521.0) dotenv: specifier: ^16.4.5 version: 16.4.5 @@ -20,6 +23,1108 @@ dependencies: packages: + /@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 + 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'} + 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 + 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 + 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 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/core@3.521.0: + resolution: {integrity: sha512-KovKmW7yg/P2HVG2dhV2DAJLyoeGelgsnSGHaktXo/josJ3vDGRNqqRSgVaqKFxnD98dPEMLrjkzZumNUNGvLw==} + engines: {node: '>=14.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 + dev: false + + /@aws-sdk/credential-provider-env@3.521.0: + resolution: {integrity: sha512-OwblTJNdDAoqYVwcNfhlKDp5z+DINrjBfC6ZjNdlJpTXgxT3IqzuilTJTlydQ+2eG7aXfV9OwTVRQWdCmzFuKA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.521.0 + '@smithy/property-provider': 2.1.2 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/credential-provider-http@3.521.0: + resolution: {integrity: sha512-yJM1yNGj2XFH8v6/ffWrFY5nC3/2+8qZ8c4mMMwZru8bYXeuSV4+NNfE59HUWvkAF7xP76u4gr4I8kNrMPTlfg==} + engines: {node: '>=14.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 + 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 + transitivePeerDependencies: + - '@aws-sdk/credential-provider-node' + - 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 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-process@3.521.0: + resolution: {integrity: sha512-EcJjcrpdklxbRAFFgSLk6QGVtvnfZ80ItfZ47VL9LkhWcDAkQ1Oi0esHq+zOgvjb7VkCyD3Q9CyEwT6MlJsriA==} + engines: {node: '>=14.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 + 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'} + 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 + transitivePeerDependencies: + - '@aws-sdk/credential-provider-node' + - 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'} + 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 + 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'} + peerDependencies: + '@aws-sdk/client-s3': ^3.0.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 + buffer: 5.6.0 + events: 3.3.0 + stream-browserify: 3.0.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-bucket-endpoint@3.521.0: + resolution: {integrity: sha512-wUPSpzeEGwAic5OJmXQGt1RCbt5KHighZ1ubUeNV67FMPsxaEW+Y0Kd+L0vbbFoQptIui2GqP5JxuROr6J7SjA==} + engines: {node: '>=14.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 + 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'} + dependencies: + '@aws-sdk/types': 3.521.0 + '@smithy/protocol-http': 3.2.0 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-flexible-checksums@3.521.0: + resolution: {integrity: sha512-sWNN0wtdwImO2QqN4J1YVTpDhdii6Tp5p8jCkCE1Qe+afQ5u52PeRAS/9U56cJnqM5JLabO4kE10Mm5rufNs2A==} + engines: {node: '>=14.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 + dev: false + + /@aws-sdk/middleware-host-header@3.521.0: + resolution: {integrity: sha512-Bc4stnMtVAdqosYI1wedFK9tffclCuwpOK/JA4bxbnvSyP1kz4s1HBVT9OOMzdLRLWLwVj/RslXKfSbzOUP7ug==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.521.0 + '@smithy/protocol-http': 3.2.0 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-location-constraint@3.521.0: + resolution: {integrity: sha512-XlGst6F3+20mhMVk+te7w8Yvrm9i9JGpgRdxdMN1pnXtGn/aAKF9lFFm4bOu47PR/XHun2PLmKlLnlZd7NAP2Q==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.521.0 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-logger@3.521.0: + resolution: {integrity: sha512-JJ4nyYvLu3RyyNHo74Rlx6WKxJsAixWCEnnFb6IGRUHvsG+xBGU7HF5koY2log8BqlDLrt4ZUaV/CGy5Dp8Mfg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.521.0 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-recursion-detection@3.521.0: + resolution: {integrity: sha512-1m5AsC55liTlaYMjc4pIQfjfBHG9LpWgubSl4uUxJSdI++zdA/SRBwXl40p7Ac/y5esweluhWabyiv1g/W4+Xg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.521.0 + '@smithy/protocol-http': 3.2.0 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-sdk-s3@3.521.0: + resolution: {integrity: sha512-aDeOScfzGGHZ7oEDx+EPzz+JVa8/B88CPeDRaDmO5dFNv2/5PFumHfh0gc6XFl4nJWPPOrJyZ1UYU/9VdDfSyQ==} + engines: {node: '>=14.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 + dev: false + + /@aws-sdk/middleware-signing@3.521.0: + resolution: {integrity: sha512-OW1jKeN6Eh3/OItXBtyNRFOv1MuZQBeHpEbywgYwtaqxTGxm9gFj//9wFsCXK4zg1+ghun8iC0buNbyOvCUf9A==} + engines: {node: '>=14.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 + dev: false + + /@aws-sdk/middleware-ssec@3.521.0: + resolution: {integrity: sha512-O9vlns8bFxkZA71CyjQbiB2tm3v+925C37Z3wzn9sj2x0FTB3njgSR23w05d8HP2ve1GPuqoVD0T0pa+jG0Zbw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.521.0 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-user-agent@3.521.0: + resolution: {integrity: sha512-+hmQjWDG93wCcJn5QY2MkzAL1aG5wl3FJ/ud2nQOu/Gx7d4QVT/B6VJwoG6GSPVuVPZwzne5n9zPVst6RmWJGA==} + engines: {node: '>=14.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 + dev: false + + /@aws-sdk/region-config-resolver@3.521.0: + resolution: {integrity: sha512-eC2T62nFgQva9Q0Sqoc9xsYyyH9EN2rJtmUKkWsBMf77atpmajAYRl5B/DzLwGHlXGsgVK2tJdU5wnmpQCEwEQ==} + engines: {node: '>=14.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 + 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'} + 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 + 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'} + 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 + dev: false + + /@aws-sdk/types@3.521.0: + resolution: {integrity: sha512-H9I3Lut0F9d+kTibrhnTRqDRzhxf/vrDu12FUdTXVZEvVAQ7w9yrVHAZx8j2e8GWegetsQsNitO3KMrj4dA4pw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-arn-parser@3.495.0: + resolution: {integrity: sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-endpoints@3.521.0: + resolution: {integrity: sha512-lO5+1LeAZycDqgNjQyZdPSdXFQKXaW5bRuQ3UIT3bOCcUAbDI0BYXlPm1huPNTCEkI9ItnDCbISbV0uF901VXw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.521.0 + '@smithy/types': 2.10.0 + '@smithy/util-endpoints': 1.1.2 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-locate-window@3.495.0: + resolution: {integrity: sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-user-agent-browser@3.521.0: + resolution: {integrity: sha512-2t3uW6AXOvJ5iiI1JG9zPqKQDc/TRFa+v13aqT5KKw9h3WHFyRUpd4sFQL6Ul0urrq2Zg9cG4NHBkei3k9lsHA==} + dependencies: + '@aws-sdk/types': 3.521.0 + '@smithy/types': 2.10.0 + bowser: 2.11.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-user-agent-node@3.521.0: + resolution: {integrity: sha512-g4KMEiyLc8DG21eMrp6fJUdfQ9F0fxfCNMDRgf0SE/pWI/u4vuWR2n8obLwq1pMVx7Ksva1NO3dc+a3Rgr0hag==} + engines: {node: '>=14.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 + dev: false + + /@aws-sdk/util-utf8-browser@3.259.0: + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + 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 + dev: false + + /@smithy/abort-controller@2.1.2: + resolution: {integrity: sha512-iwUxrFm/ZFCXhzhtZ6JnoJzAsqUrVfBAZUTQj8ypXGtIjwXZpKqmgYiuqrDERiydDI5gesqvsC4Rqe57GGhbVg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/chunked-blob-reader-native@2.1.1: + resolution: {integrity: sha512-zNW+43dltfNMUrBEYLMWgI8lQr0uhtTcUyxkgC9EP4j17WREzgSFMPUFVrVV6Rc2+QtWERYjb4tzZnQGa7R9fQ==} + dependencies: + '@smithy/util-base64': 2.1.1 + tslib: 2.6.2 + dev: false + + /@smithy/chunked-blob-reader@2.1.1: + resolution: {integrity: sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ==} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/config-resolver@2.1.2: + resolution: {integrity: sha512-ZDMY63xJVsJl7ei/yIMv9nx8OiEOulwNnQOUDGpIvzoBrcbvYwiMjIMe5mP5J4fUmttKkpiTKwta/7IUriAn9w==} + engines: {node: '>=14.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 + dev: false + + /@smithy/core@1.3.3: + resolution: {integrity: sha512-8cT/swERvU1EUMuJF914+psSeVy4+NcNhbRe1WEKN1yIMPE5+Tq5EaPq1HWjKCodcdBIyU9ViTjd62XnebXMHA==} + engines: {node: '>=14.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 + dev: false + + /@smithy/credential-provider-imds@2.2.2: + resolution: {integrity: sha512-a2xpqWzhzcYwImGbFox5qJLf6i5HKdVeOVj7d6kVFElmbS2QW2T4HmefRc5z1huVArk9bh5Rk1NiFp9YBCXU3g==} + engines: {node: '>=14.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 + dev: false + + /@smithy/eventstream-codec@2.1.2: + resolution: {integrity: sha512-2PHrVRixITHSOj3bxfZmY93apGf8/DFiyhRh9W0ukfi07cvlhlRonZ0fjgcqryJjUZ5vYHqqmfIE/Qe1HM9mlw==} + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@smithy/types': 2.10.0 + '@smithy/util-hex-encoding': 2.1.1 + tslib: 2.6.2 + dev: false + + /@smithy/eventstream-serde-browser@2.1.2: + resolution: {integrity: sha512-2N11IFHvOmKuwK6hLVkqM8ge8oiQsFkflr4h07LToxo3rX+njkx/5eRn6RVcyNmpbdbxYYt0s0Pf8u+yhHmOKg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/eventstream-serde-universal': 2.1.2 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + 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'} + dependencies: + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/eventstream-serde-node@2.1.2: + resolution: {integrity: sha512-zNE6DhbwDEWTKl4mELkrdgXBGC7UsFg1LDkTwizSOFB/gd7G7la083wb0JgU+xPt+TYKK0AuUlOM0rUZSJzqeA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/eventstream-serde-universal': 2.1.2 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/eventstream-serde-universal@2.1.2: + resolution: {integrity: sha512-Upd/zy+dNvvIDPU1HGhW9ivNjvJQ0W4UkkQOzr5Mo0hz2lqnZAyOuit4TK2JAEg/oo+V1gUY4XywDc7zNbCF0g==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/eventstream-codec': 2.1.2 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/fetch-http-handler@2.4.2: + resolution: {integrity: sha512-sIGMVwa/8h6eqNjarI3F07gvML3mMXcqBe+BINNLuKsVKXMNBN6wRzeZbbx7lfiJDEHAP28qRns8flHEoBB7zw==} + 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 + dev: false + + /@smithy/hash-blob-browser@2.1.2: + resolution: {integrity: sha512-f8QHgOVSXeYsc4BLKWdfXRowKa2g9byAkAX5c7Ku89bi9uBquWLEVmKlYXFBlkX562Fkmp2YSeciv+zZuOrIOQ==} + 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 + dev: false + + /@smithy/hash-node@2.1.2: + resolution: {integrity: sha512-3Sgn4s0g4xud1M/j6hQwYCkz04lVJ24wvCAx4xI26frr3Ao6v0o2VZkBpUySTeQbMUBp2DhuzJ0fV1zybzkckw==} + engines: {node: '>=14.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 + dev: false + + /@smithy/hash-stream-node@2.1.2: + resolution: {integrity: sha512-UB6xo+KN3axrLO+MfnWb8mtdeep4vjGUcjYCVFdk9h+OqUb7JYWZZLRcupRPZx28cNBCBEUtc9wVZDI71JDdQA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.10.0 + '@smithy/util-utf8': 2.1.1 + tslib: 2.6.2 + dev: false + + /@smithy/invalid-dependency@2.1.2: + resolution: {integrity: sha512-qdgKhkFYxDJnKecx2ANwz3JRkXjm0qDgEnAs5BIfb2z/XqA2l7s9BTH7GTC/RR4E8h6EDCeb5rM2rnARxviqIg==} + dependencies: + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/is-array-buffer@2.1.1: + resolution: {integrity: sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/md5-js@2.1.2: + resolution: {integrity: sha512-C/FWR5ooyDNDfc1Opx3n0QFO5p4G0gldIbk2VU9mPGnZVTjzXcWM5jUQp33My5UK305tKYpG5/kZdQSNVh+tLw==} + dependencies: + '@smithy/types': 2.10.0 + '@smithy/util-utf8': 2.1.1 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-content-length@2.1.2: + resolution: {integrity: sha512-XEWtul1tHP31EtUIobEyN499paUIbnCTRtjY+ciDCEXW81lZmpjrDG3aL0FxJDPnvatVQuMV1V5eg6MCqTFaLQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/protocol-http': 3.2.0 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-endpoint@2.4.2: + resolution: {integrity: sha512-72qbmVwaWcLOd/OT52fszrrlXywPwciwpsRiIk/dIvpcwkpGE9qrYZ2bt/SYcA/ma8Rz9Ni2AbBuSXLDYISS+A==} + engines: {node: '>=14.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 + dev: false + + /@smithy/middleware-retry@2.1.2: + resolution: {integrity: sha512-tlvSK+v9bPHHb0dLWvEaFW2Iz0IeA57ISvSaso36I33u8F8wYqo5FCvenH7TgMVBx57jyJBXOmYCZa9n5gdJIg==} + engines: {node: '>=14.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 + dev: false + + /@smithy/middleware-serde@2.1.2: + resolution: {integrity: sha512-XNU6aVIhlSbjuo2XsfZ7rd4HhjTXDlNWxAmhlBfViTW1TNK02CeWdeEntp5XtQKYD//pyTIbYi35EQvIidAkOw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-stack@2.1.2: + resolution: {integrity: sha512-EPGaHGd4XmZcaRYjbhyqiqN/Q/ESxXu5e5TK24CTZUe99y8/XCxmiX8VLMM4H0DI7K3yfElR0wPAAvceoSkTgw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/node-config-provider@2.2.2: + resolution: {integrity: sha512-QXvpqHSijAm13ZsVkUo92b085UzDvYP1LblWTb3uWi9WilhDvYnVyPLXaryLhOWZ2YvdhK2170T3ZBqtg+quIQ==} + engines: {node: '>=14.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 + dev: false + + /@smithy/node-http-handler@2.4.0: + resolution: {integrity: sha512-Mf2f7MMy31W8LisJ9O+7J5cKiNwBwBBLU6biQ7/sFSFdhuOxPN7hOPoZ8vlaFjvrpfOUJw9YOpjGyNTKuvomOQ==} + engines: {node: '>=14.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 + dev: false + + /@smithy/property-provider@2.1.2: + resolution: {integrity: sha512-yaXCVFKzxbSXqOoyA7AdAgXhwdjiLeui7n2P6XLjBCz/GZFdLUJgSY6KL1PevaxT4REMwUSs/bSHAe/0jdzEHw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/protocol-http@3.2.0: + resolution: {integrity: sha512-VRp0YITYIQum+rX4zeZ3cW1wl9r90IQzQN+VLS1NxdSMt6NLsJiJqR9czTxlaeWNrLHsFAETmjmdrS48Ug1liA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/querystring-builder@2.1.2: + resolution: {integrity: sha512-wk6QpuvBBLJF5w8aADsZOtxaHY9cF5MZe1Ry3hSqqBxARdUrMoXi/jukUz5W0ftXGlbA398IN8dIIUj3WXqJXg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.10.0 + '@smithy/util-uri-escape': 2.1.1 + tslib: 2.6.2 + dev: false + + /@smithy/querystring-parser@2.1.2: + resolution: {integrity: sha512-z1yL5Iiagm/UxVy1tcuTFZdfOBK/QtYeK6wfClAJ7cOY7kIaYR6jn1cVXXJmhAQSh1b2ljP4xiZN4Ybj7Tbs5w==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/service-error-classification@2.1.2: + resolution: {integrity: sha512-R+gL1pAPuWkH6unFridk57wDH5PFY2IlVg2NUjSAjoaIaU+sxqKf/7AOWIcx9Bdn+xY0/4IRQ69urlC+F3I9gg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.10.0 + dev: false + + /@smithy/shared-ini-file-loader@2.3.2: + resolution: {integrity: sha512-idHGDJB+gBh+aaIjmWj6agmtNWftoyAenErky74hAtKyUaCvfocSBgEJ2pQ6o68svBluvGIj4NGFgJu0198mow==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/signature-v4@2.1.2: + resolution: {integrity: sha512-DdPWaNGIbxzyocR3ncH8xlxQgsqteRADEdCPoivgBzwv17UzKy2obtdi2vwNc5lAJ955bGEkkWef9O7kc1Eocg==} + engines: {node: '>=14.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 + dev: false + + /@smithy/smithy-client@2.4.0: + resolution: {integrity: sha512-6/jxk0om9l2s9BcgHtrBn+Hd3xcFGDzxfEJ2FvGpZxIz0S7bgvZg1gyR66O1xf1w9WZBH+W7JClhfSn2gETINw==} + engines: {node: '>=14.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 + dev: false + + /@smithy/types@2.10.0: + resolution: {integrity: sha512-QYXQmpIebS8/jYXgyJjCanKZbI4Rr8tBVGBAIdDhA35f025TVjJNW69FJ0TGiDqt+lIGo037YIswq2t2Y1AYZQ==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/url-parser@2.1.2: + resolution: {integrity: sha512-KBPi740ciTujUaY+RfQuPABD0QFmgSBN5qNVDCGTryfsbG4jkwC0YnElSzi72m24HegMyxzZDLG4Oh4/97mw2g==} + dependencies: + '@smithy/querystring-parser': 2.1.2 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-base64@2.1.1: + resolution: {integrity: sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/util-buffer-from': 2.1.1 + tslib: 2.6.2 + dev: false + + /@smithy/util-body-length-browser@2.1.1: + resolution: {integrity: sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-body-length-node@2.2.1: + resolution: {integrity: sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-buffer-from@2.1.1: + resolution: {integrity: sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/is-array-buffer': 2.1.1 + tslib: 2.6.2 + dev: false + + /@smithy/util-config-provider@2.2.1: + resolution: {integrity: sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-defaults-mode-browser@2.1.2: + resolution: {integrity: sha512-YmojdmsE7VbvFGJ/8btn/5etLm1HOQkgVX6nMWlB0yBL/Vb//s3aTebUJ66zj2+LNrBS3B9S+18+LQU72Yj0AQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@smithy/property-provider': 2.1.2 + '@smithy/smithy-client': 2.4.0 + '@smithy/types': 2.10.0 + bowser: 2.11.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-defaults-mode-node@2.2.1: + resolution: {integrity: sha512-kof7M9Q2qP5yaQn8hHJL3KwozyvIfLe+ys7feifSul6gBAAeoraibo/MWqotb/I0fVLMlCMDwn7WXFsGUwnsew==} + 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 + dev: false + + /@smithy/util-endpoints@1.1.2: + resolution: {integrity: sha512-2/REfdcJ20y9iF+9kSBRBsaoGzjT5dZ3E6/TA45GHJuJAb/vZTj76VLTcrl2iN3fWXiDK1B8RxchaLGbr7RxxA==} + engines: {node: '>= 14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.2.2 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-hex-encoding@2.1.1: + resolution: {integrity: sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-middleware@2.1.2: + resolution: {integrity: sha512-lvSOnwQ7iAajtWb1nAyy0CkOIn8d+jGykQOtt2NXDsPzOTfejZM/Uph+O/TmVgWoXdcGuw5peUMG2f5xEIl6UQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-retry@2.1.2: + resolution: {integrity: sha512-pqifOgRqwLfRu+ks3awEKKqPeYxrHLwo4Yu2EarGzeoarTd1LVEyyf5qLE6M7IiCsxnXRhn9FoWIdZOC+oC/VQ==} + engines: {node: '>= 14.0.0'} + dependencies: + '@smithy/service-error-classification': 2.1.2 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-stream@2.1.2: + resolution: {integrity: sha512-AbGjvoSok7YeUKv9WRVRSChQfsufLR54YCAabTbaABRdIucywRQs29em0uAP6r4RLj+4aFZStWGYpFgT0P8UlQ==} + engines: {node: '>=14.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 + dev: false + + /@smithy/util-uri-escape@2.1.1: + resolution: {integrity: sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-utf8@2.1.1: + resolution: {integrity: sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/util-buffer-from': 2.1.1 + tslib: 2.6.2 + dev: false + + /@smithy/util-waiter@2.1.2: + resolution: {integrity: sha512-yxLC57GBDmbDmrnH+vJxsrbV4/aYUucBONkSRLZyJIVFAl/QJH+O/h+phITHDaxVZCYZAcudYJw4ERE32BJM7g==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/abort-controller': 2.1.2 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + dev: false + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -36,29 +1141,6 @@ packages: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: false - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - dependencies: - possible-typed-array-names: 1.0.0 - dev: false - - /aws-sdk@2.1564.0: - resolution: {integrity: sha512-597Ugza41QCTknjv2VDeUMBFHvHVdg/h9qydDwnX+2kK/EcdE+Vjopcz2+lhHBlbqLi9yUbT4yc1nfo8T+f53w==} - engines: {node: '>= 10.0.0'} - dependencies: - buffer: 4.9.2 - events: 1.1.1 - ieee754: 1.1.13 - jmespath: 0.16.0 - querystring: 0.2.0 - sax: 1.2.1 - url: 0.10.3 - util: 0.12.5 - uuid: 8.0.0 - xml2js: 0.6.2 - dev: false - /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: false @@ -83,16 +1165,19 @@ packages: - supports-color dev: false + /bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + dev: false + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: false - /buffer@4.9.2: - resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + /buffer@5.6.0: + resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} dependencies: base64-js: 1.5.1 - ieee754: 1.1.13 - isarray: 1.0.0 + ieee754: 1.2.1 dev: false /busboy@1.6.0: @@ -218,9 +1303,9 @@ packages: engines: {node: '>= 0.6'} dev: false - /events@1.1.1: - resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} - engines: {node: '>=0.4.x'} + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} dev: false /express@4.18.2: @@ -262,6 +1347,13 @@ packages: - supports-color dev: false + /fast-xml-parser@4.2.5: + resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + /finalhandler@1.2.0: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} @@ -277,12 +1369,6 @@ packages: - supports-color dev: false - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: false - /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -330,13 +1416,6 @@ packages: engines: {node: '>= 0.4'} dev: false - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: false - /hasown@2.0.1: resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} engines: {node: '>= 0.4'} @@ -362,8 +1441,8 @@ packages: safer-buffer: 2.1.2 dev: false - /ieee754@1.1.13: - resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: false /inherits@2.0.4: @@ -375,42 +1454,10 @@ packages: engines: {node: '>= 0.10'} dev: false - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: false - - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: false - - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: false - - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.14 - dev: false - /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: false - /jmespath@0.16.0: - resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} - engines: {node: '>= 0.6.0'} - dev: false - /media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -505,11 +1552,6 @@ packages: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: false - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: false - /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: false @@ -522,10 +1564,6 @@ packages: ipaddr.js: 1.9.1 dev: false - /punycode@1.3.2: - resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} - dev: false - /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} @@ -533,12 +1571,6 @@ packages: side-channel: 1.0.5 dev: false - /querystring@0.2.0: - resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} - engines: {node: '>=0.4.x'} - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. - dev: false - /range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -566,6 +1598,15 @@ packages: util-deprecate: 1.0.2 dev: false + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: false @@ -578,10 +1619,6 @@ packages: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: false - /sax@1.2.1: - resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} - dev: false - /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} @@ -646,6 +1683,13 @@ packages: engines: {node: '>= 0.8'} dev: false + /stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -657,11 +1701,23 @@ packages: safe-buffer: 5.1.2 dev: false + /strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + dev: false + /toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} dev: false + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: false + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -679,34 +1735,17 @@ packages: engines: {node: '>= 0.8'} dev: false - /url@0.10.3: - resolution: {integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==} - dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - dev: false - /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false - /util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.13 - which-typed-array: 1.1.14 - dev: false - /utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} dev: false - /uuid@8.0.0: - resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: false @@ -715,30 +1754,6 @@ packages: engines: {node: '>= 0.8'} dev: false - /which-typed-array@1.1.14: - resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - dev: false - - /xml2js@0.6.2: - resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} - engines: {node: '>=4.0.0'} - dependencies: - sax: 1.2.1 - xmlbuilder: 11.0.1 - dev: false - - /xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - dev: false - /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} diff --git a/server.js b/server.js index 8cbd1a4..6dba451 100644 --- a/server.js +++ b/server.js @@ -1,4 +1,5 @@ -const AWS = require('aws-sdk'); +const { S3Client, PutObjectCommand } = require('@aws-sdk/client-s3'); +const crypto = require('crypto'); const express = require('express'); const fs = require('fs'); const multer = require('multer'); @@ -9,13 +10,14 @@ const app = express(); const port = 3000; // Configure AWS -AWS.config.update({ - accessKeyId: process.env.AWS_ACCESS_KEY, - secretAccessKey: process.env.AWS_SECRET_KEY, +const s3Client = new S3Client({ region: process.env.AWS_REGION, + credentials: { + accessKeyId: process.env.AWS_ACCESS_KEY, + secretAccessKey: process.env.AWS_SECRET_KEY + } }); -const s3 = new AWS.S3(); const upload = multer({ dest: 'uploads/' }); // POST endpoint to upload an image @@ -23,23 +25,32 @@ app.post('/image', upload.single('image'), (req, res) => { const file = req.file; // Read the file from the temporary location - fs.readFile(file.path, (err, data) => { + fs.readFile(file.path, async (err, data) => { if (err) throw err; // Handle error + const hashSum = crypto.createHash('sha256'); + hashSum.update(data); + const hashHex = hashSum.digest('hex'); + + const bucketName = 'gifts-image'; + const fileName = `${hashHex}_${file.originalname}`; const params = { - Bucket: 'gifts-image', // S3 Bucket name - Key: `${Date.now()}_${path.basename(file.originalname)}`, // File name to use in S3 Body: data, - //ACL: 'public-read' // Optional: if you want the uploaded file to be publicly accessible + Bucket: bucketName, // S3 Bucket name + ContentType: file.mimetype, // File content type + Key: fileName, // File name to use in S3 }; // Upload the file to S3 - s3.upload(params, function(s3Err, data) { - if (s3Err) throw s3Err; // Handle upload error - - // Once successfully uploaded to S3, send back the URL of the uploaded file - res.send(`File uploaded successfully at ${data.Location}`); - }); + try { + const command = new PutObjectCommand(params); + const response = await s3Client.send(command); + const finalUrl = `https://${bucketName}.s3.amazonaws.com/${fileName}`; + res.send(JSON.stringify({ success: true, url: finalUrl })); + } catch (uploadError) { + console.error('Error uploading to S3:', uploadError); + res.status(500).send(JSON.stringify({ success: false, message: 'Error uploading file.' })); + } }); });