diff --git a/package-lock.json b/package-lock.json index 5bfb705e45a..759880504c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -64,8 +64,7 @@ }, "node_modules/@aws-crypto/crc32": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -74,8 +73,7 @@ }, "node_modules/@aws-crypto/crc32c": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", - "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -104,8 +102,7 @@ }, "node_modules/@aws-crypto/sha256-browser": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/ie11-detection": "^3.0.0", "@aws-crypto/sha256-js": "^3.0.0", @@ -119,8 +116,7 @@ }, "node_modules/@aws-crypto/sha256-js": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -145,8 +141,7 @@ }, "node_modules/@aws-sdk/client-s3": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.428.0.tgz", - "integrity": "sha512-qz4SV0sjeKC/m573Ox0wWhVABhN35cy0zBOvYixtEQNBzQbWefk8luHkNxntyybuLPZz6ChDzU98+EBac5RuRg==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "3.0.0", "@aws-crypto/sha256-browser": "3.0.0", @@ -214,8 +209,7 @@ }, "node_modules/@aws-sdk/client-sso": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.428.0.tgz", - "integrity": "sha512-6BuY7cd1licnCZTKuI/IK3ycKATIgsG53TuaK1hZcikwUB2Oiu2z6K+aWpmO9mJuJ6qAoE4dLlAy6lBBBkG6yQ==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -258,13 +252,11 @@ }, "node_modules/@aws-sdk/client-sso/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/client-sts": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.428.0.tgz", - "integrity": "sha512-ko9hgmIkS5FNPYtT3pntGGmp+yi+VXBEgePUBoplEKjCxsX/aTgFcq2Rs9duD9/CzkThd42Z0l0fWsVAErVxWQ==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -311,13 +303,11 @@ }, "node_modules/@aws-sdk/client-sts/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/credential-provider-env": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.428.0.tgz", - "integrity": "sha512-e6fbY174Idzw0r5ZMT1qkDh+dpOp1DX3ickhr7J6ipo3cUGLI45Y5lnR9nYXWfB5o/wiNv4zXgN+Y3ORJJHzyA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@smithy/property-provider": "^2.0.0", @@ -330,13 +320,11 @@ }, "node_modules/@aws-sdk/credential-provider-env/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/credential-provider-ini": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.428.0.tgz", - "integrity": "sha512-JPc0pVAsP8fOfMxhmPhp7PjddqHaPGBwgVI+wgbkFRUDOmeKCVhoxCB8Womx0R07qRqD5ZCUKBS2NHQ2b3MFRQ==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "3.428.0", "@aws-sdk/credential-provider-process": "3.428.0", @@ -355,13 +343,11 @@ }, "node_modules/@aws-sdk/credential-provider-ini/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/credential-provider-node": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.428.0.tgz", - "integrity": "sha512-o8toLXf6/sklBpw2e1mzAUq6SvXQzT6iag7Xbg9E0Z2EgVeXLTnWeVto3ilU3cmhTHXBp6wprwUUq2jbjTxMcg==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "3.428.0", "@aws-sdk/credential-provider-ini": "3.428.0", @@ -381,13 +367,11 @@ }, "node_modules/@aws-sdk/credential-provider-node/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/credential-provider-process": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.428.0.tgz", - "integrity": "sha512-UG2S2/4Wrskbkbgt9fBlnzwQ2hfTXvLJwUgGOluSOf6+mGCcoDku4zzc9EQdk1MwN5Us+ziyMrIMNY5sbdLg6g==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@smithy/property-provider": "^2.0.0", @@ -401,13 +385,11 @@ }, "node_modules/@aws-sdk/credential-provider-process/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/credential-provider-sso": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.428.0.tgz", - "integrity": "sha512-sW2+kSlICSNntsNhLV5apqJkIOXH5hFISCjwVfyB9JXJQDAj8rzkiFfRsKwQ3aTlTYCysrGesIn46+GRP5AgZw==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-sso": "3.428.0", "@aws-sdk/token-providers": "3.428.0", @@ -423,13 +405,11 @@ }, "node_modules/@aws-sdk/credential-provider-sso/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.428.0.tgz", - "integrity": "sha512-ueuUPPlrJFvtDUVTGnClUGt1wxCbEiKArknah/w9cfcc/c1HtFd/M7x/z2Sm0gSItR45sVcK54qjzmhm29DMzg==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@smithy/property-provider": "^2.0.0", @@ -442,13 +422,11 @@ }, "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.428.0.tgz", - "integrity": "sha512-xZ/o6E7icVVTFlOLBKrIQJqFToL0KmWEGLFcaHhgCNz5gppEK2iGH9GondQotQPesiEyi46HwzM6GLNRylELww==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@aws-sdk/util-arn-parser": "3.310.0", @@ -464,13 +442,11 @@ }, "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/middleware-expect-continue": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.428.0.tgz", - "integrity": "sha512-d/vWUs9RD4fuO1oi7gJby6aEPb6XTf2+jCbrs/hUEYFMxQu7wwQx2c6BWAjfQca8zVadh7FY0cDNtL2Ep2d8zA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@smithy/protocol-http": "^3.0.7", @@ -483,13 +459,11 @@ }, "node_modules/@aws-sdk/middleware-expect-continue/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/middleware-flexible-checksums": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.428.0.tgz", - "integrity": "sha512-O54XmBSvi9A6ZBRVSYrEvoGH1BjtR1TT8042gOdJgouI0OVWtjqHT2ZPVTbQ/rKW5QeLXszVloXFW6eqOwrVTg==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "3.0.0", "@aws-crypto/crc32c": "3.0.0", @@ -506,13 +480,11 @@ }, "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/middleware-host-header": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.428.0.tgz", - "integrity": "sha512-iIHbW5Ym60ol9Q6vsLnaiNdeUIa9DA0OuoOe9LiHC8SYUYVAAhE+xJXUhn1qk/J7z+4qGOkDnVyEvnSaqRPL/w==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@smithy/protocol-http": "^3.0.7", @@ -525,13 +497,11 @@ }, "node_modules/@aws-sdk/middleware-host-header/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/middleware-location-constraint": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.428.0.tgz", - "integrity": "sha512-2YvAhkdzMITTc2fVIH7FS5Hqa7AuoHBg92W0CzPOiKBkC0D6m5hw8o5Z5RnH/M9ki2eB4dn+7uB6p7Lgs+VFdw==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@smithy/types": "^2.3.5", @@ -543,13 +513,11 @@ }, "node_modules/@aws-sdk/middleware-location-constraint/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/middleware-logger": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.428.0.tgz", - "integrity": "sha512-1P0V0quL9u2amdNOn6yYT7/ToQUmkLJqCKHPxsRyDB829vBThWndvvH5MkoItj/VgE1zWqMtrzN3xtzD7zx6Qg==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@smithy/types": "^2.3.5", @@ -561,13 +529,11 @@ }, "node_modules/@aws-sdk/middleware-logger/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.428.0.tgz", - "integrity": "sha512-xC0OMduCByyRdiQz324RXy4kunnCG4LUJCfvdoegM33Elp9ex0D3fcfO1mUgV8qiLwSennIsSRVXHuhNxE2HZA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@smithy/protocol-http": "^3.0.7", @@ -580,13 +546,11 @@ }, "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/middleware-sdk-s3": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.428.0.tgz", - "integrity": "sha512-C9hJlzMGlDeVNn91TvC6lsTplnH4hFPM2kiuMha5A/EXPPOg9c5vFH5awL3ubEiIUPwwDu3d583hvsPd6G3qxA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@aws-sdk/util-arn-parser": "3.310.0", @@ -601,13 +565,11 @@ }, "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/middleware-sdk-sts": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.428.0.tgz", - "integrity": "sha512-Uutl2niYXTnNP8v84v6umWDHD5no7d5/OqkZE1DsmeKR/dje90J5unJWf7MOsqvYm0JGDEWF4lk9xGVyqsw+Aw==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/middleware-signing": "3.428.0", "@aws-sdk/types": "3.428.0", @@ -620,13 +582,11 @@ }, "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/middleware-signing": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.428.0.tgz", - "integrity": "sha512-oMSerTPwtsQAR7fIU/G0b0BA30wF+MC4gZSrJjbypF8MK8nPC2yMfKLR8+QavGOGEW7rUMQ0uklThMTTwQEXNQ==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@smithy/property-provider": "^2.0.0", @@ -642,13 +602,11 @@ }, "node_modules/@aws-sdk/middleware-signing/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/middleware-ssec": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.428.0.tgz", - "integrity": "sha512-QPKisAErRHFoopmdFhgOmjZPcUM6rvWCtnoEY4Sw9F0aIyK6yCTn+nB5j+3FAPvUvblE22srM6aow8TcGx1gjA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@smithy/types": "^2.3.5", @@ -660,13 +618,11 @@ }, "node_modules/@aws-sdk/middleware-ssec/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/middleware-user-agent": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.428.0.tgz", - "integrity": "sha512-+GAhObeHRick2D5jr3YkPckjcggt5v6uUVtEUQW2AdD65cE5PjIvmksv6FuM/mME/9nNA+wufQnHbLI8teLeaw==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@aws-sdk/util-endpoints": "3.428.0", @@ -680,13 +636,11 @@ }, "node_modules/@aws-sdk/middleware-user-agent/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/region-config-resolver": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.428.0.tgz", - "integrity": "sha512-VqyHZ/Hoz3WrXXMx8cAhFBl8IpjodbRsTjBI117QPq1YRCegxNdGvqmGZnJj8N2Ef9MP1iU30ZWQB+sviDcogA==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^2.1.1", "@smithy/types": "^2.3.5", @@ -700,13 +654,11 @@ }, "node_modules/@aws-sdk/region-config-resolver/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/signature-v4-multi-region": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.428.0.tgz", - "integrity": "sha512-ImuontXK1vEHtxK+qiPVfLTk/+bKSwYqrVkE2/o5rnsqD78/wySzTn5RnkA73Nb+UL4qSd0dkOcuubEee2aUpQ==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@smithy/protocol-http": "^3.0.7", @@ -720,13 +672,11 @@ }, "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/token-providers": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.428.0.tgz", - "integrity": "sha512-Jciofr//rB1v1FLxADkXoHOCmYyiv2HVNlOq3z5Zkch9ipItOfD6X7f4G4n+IZzElIFzwe4OKoBtJfcnnfo3Pg==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -770,13 +720,11 @@ }, "node_modules/@aws-sdk/token-providers/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/types": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.428.0.tgz", - "integrity": "sha512-4T0Ps2spjg3qbWE6ZK13Vd3FnzpfliaiotqjxUK5YhjDrKXeT36HJp46JhDupElQuHtTkpdiJOSYk2lvY2H4IA==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "tslib": "^2.5.0" @@ -791,8 +739,7 @@ }, "node_modules/@aws-sdk/util-arn-parser": { "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", - "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -802,13 +749,11 @@ }, "node_modules/@aws-sdk/util-arn-parser/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/util-endpoints": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.428.0.tgz", - "integrity": "sha512-ToKMhYlUWJ0YrbggpJLZeyZZNDXtQ4NITxqo/oeGltTT9KG4o/LqVY59EveV0f8P32ObDyj9Vh1mnjxeo3DxGw==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "tslib": "^2.5.0" @@ -819,8 +764,7 @@ }, "node_modules/@aws-sdk/util-endpoints/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/util-locate-window": { "version": "3.310.0", @@ -838,8 +782,7 @@ }, "node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.428.0.tgz", - "integrity": "sha512-qlc2UoGsmCpuh1ErY3VayZuAGl74TWWcLmhhQMkeByFSb6KooBlwOmDpDzJRtgwJoe0KXnyHBO6lzl9iczcozg==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@smithy/types": "^2.3.5", @@ -849,13 +792,11 @@ }, "node_modules/@aws-sdk/util-user-agent-browser/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/util-user-agent-node": { "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.428.0.tgz", - "integrity": "sha512-s721C3H8TkNd0usWLPEAy7yW2lEglR8QAYojdQGzE0e0wymc671nZAFePSZFRtmqZiFOSfk0R602L5fDbP3a8Q==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.428.0", "@smithy/node-config-provider": "^2.1.1", @@ -876,8 +817,7 @@ }, "node_modules/@aws-sdk/util-user-agent-node/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@aws-sdk/util-utf8-browser": { "version": "3.259.0", @@ -962,17 +902,15 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "license": "MIT", "dependencies": { "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", @@ -1041,9 +979,8 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -1077,9 +1014,8 @@ }, "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -1102,9 +1038,8 @@ }, "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -1127,25 +1062,22 @@ }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "license": "MIT", "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" @@ -1280,8 +1212,7 @@ }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -1298,8 +1229,7 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -1341,8 +1271,7 @@ }, "node_modules/@babel/highlight": { "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -1411,8 +1340,7 @@ }, "node_modules/@babel/parser": { "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -2571,9 +2499,8 @@ }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -2629,8 +2556,7 @@ }, "node_modules/@babel/template": { "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/parser": "^7.22.15", @@ -2642,8 +2568,7 @@ }, "node_modules/@babel/template/node_modules/@babel/code-frame": { "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "license": "MIT", "dependencies": { "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" @@ -2654,8 +2579,7 @@ }, "node_modules/@babel/template/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -2665,8 +2589,7 @@ }, "node_modules/@babel/template/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2678,37 +2601,32 @@ }, "node_modules/@babel/template/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/@babel/template/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "license": "MIT" }, "node_modules/@babel/template/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@babel/template/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/template/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -2718,8 +2636,7 @@ }, "node_modules/@babel/traverse": { "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/generator": "^7.23.0", @@ -2738,8 +2655,7 @@ }, "node_modules/@babel/traverse/node_modules/@babel/code-frame": { "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "license": "MIT", "dependencies": { "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" @@ -2750,8 +2666,7 @@ }, "node_modules/@babel/traverse/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -2761,8 +2676,7 @@ }, "node_modules/@babel/traverse/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2774,21 +2688,18 @@ }, "node_modules/@babel/traverse/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/@babel/traverse/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "license": "MIT" }, "node_modules/@babel/traverse/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -2802,16 +2713,14 @@ }, "node_modules/@babel/traverse/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/traverse/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -2821,8 +2730,7 @@ }, "node_modules/@babel/types": { "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -3826,8 +3734,7 @@ }, "node_modules/@smithy/abort-controller": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.11.tgz", - "integrity": "sha512-MSzE1qR2JNyb7ot3blIOT3O3H0Jn06iNDEgHRaqZUwBgx5EG+VIx24Y21tlKofzYryIOcWpIohLrIIyocD6LMA==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "tslib": "^2.5.0" @@ -3838,21 +3745,18 @@ }, "node_modules/@smithy/abort-controller/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/chunked-blob-reader": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", - "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" } }, "node_modules/@smithy/chunked-blob-reader-native": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz", - "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-base64": "^2.0.0", "tslib": "^2.5.0" @@ -3860,18 +3764,15 @@ }, "node_modules/@smithy/chunked-blob-reader-native/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/chunked-blob-reader/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/config-resolver": { "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.14.tgz", - "integrity": "sha512-K1K+FuWQoy8j/G7lAmK85o03O89s2Vvh6kMFmzEmiHUoQCRH1rzbDtMnGNiaMHeSeYJ6y79IyTusdRG+LuWwtg==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^2.1.1", "@smithy/types": "^2.3.5", @@ -3885,13 +3786,11 @@ }, "node_modules/@smithy/config-resolver/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/credential-provider-imds": { "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.16.tgz", - "integrity": "sha512-tKa2xF+69TvGxJT+lnJpGrKxUuAZDLYXFhqnPEgnHz+psTpkpcB4QRjHj63+uj83KaeFJdTfW201eLZeRn6FfA==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^2.1.1", "@smithy/property-provider": "^2.0.12", @@ -3905,13 +3804,11 @@ }, "node_modules/@smithy/credential-provider-imds/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/eventstream-codec": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.11.tgz", - "integrity": "sha512-BQCTjxhCYRZIfXapa2LmZSaH8QUBGwMZw7XRN83hrdixbLjIcj+o549zjkedFS07Ve2TlvWUI6BTzP+nv7snBA==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "3.0.0", "@smithy/types": "^2.3.5", @@ -3921,13 +3818,11 @@ }, "node_modules/@smithy/eventstream-codec/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/eventstream-serde-browser": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.11.tgz", - "integrity": "sha512-p9IK4uvwT6B3pT1VGlODvcVBfPVikjBFHAcKpvvNF+7lAEI+YiC6d0SROPkpjnvCgVBYyGXa3ciqrWnFze6mwQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/eventstream-serde-universal": "^2.0.11", "@smithy/types": "^2.3.5", @@ -3939,13 +3834,11 @@ }, "node_modules/@smithy/eventstream-serde-browser/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/eventstream-serde-config-resolver": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.11.tgz", - "integrity": "sha512-vN32E8yExo0Z8L7kXhlU9KRURrhqOpPdLxQMp3MwfMThrjiqbr1Sk5srUXc1ed2Ygl/l0TEN9vwNG0bQHg6AjQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "tslib": "^2.5.0" @@ -3956,13 +3849,11 @@ }, "node_modules/@smithy/eventstream-serde-config-resolver/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/eventstream-serde-node": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.11.tgz", - "integrity": "sha512-Gjqbpg7UmD+YzkpgNShNcDNZcUpBWIkvX2XCGptz5PoxJU/UQbuF9eSc93ZlIb7j4aGjtFfqk23HUMW8Hopg2Q==", + "license": "Apache-2.0", "dependencies": { "@smithy/eventstream-serde-universal": "^2.0.11", "@smithy/types": "^2.3.5", @@ -3974,13 +3865,11 @@ }, "node_modules/@smithy/eventstream-serde-node/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/eventstream-serde-universal": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.11.tgz", - "integrity": "sha512-F8FsxLTbFN4+Esgpo+nNKcEajrgRZJ+pG9c8+MhLM4Odp5ejLHw2GMCXd81cGsgmfcbnzdDEXazPPVzOwj89MQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/eventstream-codec": "^2.0.11", "@smithy/types": "^2.3.5", @@ -3992,13 +3881,11 @@ }, "node_modules/@smithy/eventstream-serde-universal/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/fetch-http-handler": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.3.tgz", - "integrity": "sha512-0G9sePU+0R+8d7cie+OXzNbbkjnD4RfBlVCs46ZEuQAMcxK8OniemYXSSkOc80CCk8Il4DnlYZcUSvsIs2OB2w==", + "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^3.0.7", "@smithy/querystring-builder": "^2.0.11", @@ -4009,13 +3896,11 @@ }, "node_modules/@smithy/fetch-http-handler/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/hash-blob-browser": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.11.tgz", - "integrity": "sha512-/6vq/NiH2EN3mWdwcLdjVohP+VCng+ZA1GnlUdx959egsfgIlLWQvCyjnB2ze9Hr6VHV5XEFLLpLQH2dHA6Sgw==", + "license": "Apache-2.0", "dependencies": { "@smithy/chunked-blob-reader": "^2.0.0", "@smithy/chunked-blob-reader-native": "^2.0.0", @@ -4025,13 +3910,11 @@ }, "node_modules/@smithy/hash-blob-browser/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/hash-node": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.11.tgz", - "integrity": "sha512-PbleVugN2tbhl1ZoNWVrZ1oTFFas/Hq+s6zGO8B9bv4w/StTriTKA9W+xZJACOj9X7zwfoTLbscM+avCB1KqOQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "@smithy/util-buffer-from": "^2.0.0", @@ -4044,13 +3927,11 @@ }, "node_modules/@smithy/hash-node/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/hash-stream-node": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.11.tgz", - "integrity": "sha512-Jn2yl+Dn0kvwKvSavvR1/BFVYa2wIkaJKWeTH48kno89gqHAJxMh1hrtBN6SJ7F8VhodNZTiNOlQVqCSfLheNQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "@smithy/util-utf8": "^2.0.0", @@ -4062,13 +3943,11 @@ }, "node_modules/@smithy/hash-stream-node/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/invalid-dependency": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.11.tgz", - "integrity": "sha512-zazq99ujxYv/NOf9zh7xXbNgzoVLsqE0wle8P/1zU/XdhPi/0zohTPKWUzIxjGdqb5hkkwfBkNkl5H+LE0mvgw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "tslib": "^2.5.0" @@ -4076,13 +3955,11 @@ }, "node_modules/@smithy/invalid-dependency/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/is-array-buffer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", - "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -4092,13 +3969,11 @@ }, "node_modules/@smithy/is-array-buffer/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/md5-js": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.11.tgz", - "integrity": "sha512-YBIv+e95qeGvQA05ucwstmTeQ/bUzWgU+nO2Ffmif5awu6IzSR0Jfk3XLYh4mdy7f8DCgsn8qA63u7N9Lu0+5A==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "@smithy/util-utf8": "^2.0.0", @@ -4107,13 +3982,11 @@ }, "node_modules/@smithy/md5-js/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/middleware-content-length": { "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.13.tgz", - "integrity": "sha512-Md2kxWpaec3bXp1oERFPQPBhOXCkGSAF7uc1E+4rkwjgw3/tqAXRtbjbggu67HJdwaif76As8AV6XxbD1HzqTQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^3.0.7", "@smithy/types": "^2.3.5", @@ -4125,13 +3998,11 @@ }, "node_modules/@smithy/middleware-content-length/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/middleware-endpoint": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.1.tgz", - "integrity": "sha512-YAqGagBvHqDEew4EGz9BrQ7M+f+u7ck9EL4zzYirOhIcXeBS/+q4A5+ObHDDwEp38lD6t88YUtFy3OptqEaDQg==", + "license": "Apache-2.0", "dependencies": { "@smithy/middleware-serde": "^2.0.11", "@smithy/node-config-provider": "^2.1.1", @@ -4147,13 +4018,11 @@ }, "node_modules/@smithy/middleware-endpoint/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/middleware-retry": { "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.16.tgz", - "integrity": "sha512-Br5+0yoiMS0ugiOAfJxregzMMGIRCbX4PYo1kDHtLgvkA/d++aHbnHB819m5zOIAMPvPE7AThZgcsoK+WOsUTA==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^2.1.1", "@smithy/protocol-http": "^3.0.7", @@ -4170,21 +4039,18 @@ }, "node_modules/@smithy/middleware-retry/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/middleware-retry/node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@smithy/middleware-serde": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.11.tgz", - "integrity": "sha512-NuxnjMyf4zQqhwwdh0OTj5RqpnuT6HcH5Xg5GrPijPcKzc2REXVEVK4Yyk8ckj8ez1XSj/bCmJ+oNjmqB02GWA==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "tslib": "^2.5.0" @@ -4195,13 +4061,11 @@ }, "node_modules/@smithy/middleware-serde/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/middleware-stack": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.5.tgz", - "integrity": "sha512-bVQU/rZzBY7CbSxIrDTGZYnBWKtIw+PL/cRc9B7etZk1IKSOe0NvKMJyWllfhfhrTeMF6eleCzOihIQympAvPw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "tslib": "^2.5.0" @@ -4212,13 +4076,11 @@ }, "node_modules/@smithy/middleware-stack/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/node-config-provider": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.1.tgz", - "integrity": "sha512-1lF6s1YWBi1LBu2O30tD3jyTgMtuvk/Z1twzXM4GPYe4dmZix4nNREPJIPOcfFikNU2o0eTYP80+izx5F2jIJA==", + "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^2.0.12", "@smithy/shared-ini-file-loader": "^2.2.0", @@ -4231,13 +4093,11 @@ }, "node_modules/@smithy/node-config-provider/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/node-http-handler": { "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.7.tgz", - "integrity": "sha512-PQIKZXlp3awCDn/xNlCSTFE7aYG/5Tx33M05NfQmWYeB5yV1GZZOSz4dXpwiNJYTXb9jPqjl+ueXXkwtEluFFA==", + "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^2.0.11", "@smithy/protocol-http": "^3.0.7", @@ -4251,13 +4111,11 @@ }, "node_modules/@smithy/node-http-handler/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/property-provider": { "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.12.tgz", - "integrity": "sha512-Un/OvvuQ1Kg8WYtoMCicfsFFuHb/TKL3pCA6ZIo/WvNTJTR94RtoRnL7mY4XkkUAoFMyf6KjcQJ76y1FX7S5rw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "tslib": "^2.5.0" @@ -4268,13 +4126,11 @@ }, "node_modules/@smithy/property-provider/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/protocol-http": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.7.tgz", - "integrity": "sha512-HnZW8y+r66ntYueCDbLqKwWcMNWW8o3eVpSrHNluwtBJ/EUWfQHRKSiu6vZZtc6PGfPQWgVfucoCE/C3QufMAA==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "tslib": "^2.5.0" @@ -4285,13 +4141,11 @@ }, "node_modules/@smithy/protocol-http/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/querystring-builder": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.11.tgz", - "integrity": "sha512-b4kEbVMxpmfv2VWUITn2otckTi7GlMteZQxi+jlwedoATOGEyrCJPfRcYQJjbCi3fZ2QTfh3PcORvB27+j38Yg==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "@smithy/util-uri-escape": "^2.0.0", @@ -4303,13 +4157,11 @@ }, "node_modules/@smithy/querystring-builder/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/querystring-parser": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.11.tgz", - "integrity": "sha512-YXe7jhi7s3dQ0Fu9dLoY/gLu6NCyy8tBWJL/v2c9i7/RLpHgKT+uT96/OqZkHizCJ4kr0ZD46tzMjql/o60KLg==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "tslib": "^2.5.0" @@ -4320,13 +4172,11 @@ }, "node_modules/@smithy/querystring-parser/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/service-error-classification": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.4.tgz", - "integrity": "sha512-77506l12I5gxTZqBkx3Wb0RqMG81bMYLaVQ+EqIWFwQDJRs5UFeXogKxSKojCmz1wLUziHZQXm03MBzPQiumQw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5" }, @@ -4336,8 +4186,7 @@ }, "node_modules/@smithy/shared-ini-file-loader": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.0.tgz", - "integrity": "sha512-xFXqs4vAb5BdkzHSRrTapFoaqS4/3m/CGZzdw46fBjYZ0paYuLAoMY60ICCn1FfGirG+PiJ3eWcqJNe4/SkfyA==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "tslib": "^2.5.0" @@ -4348,13 +4197,11 @@ }, "node_modules/@smithy/shared-ini-file-loader/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/signature-v4": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.11.tgz", - "integrity": "sha512-EFVU1dT+2s8xi227l1A9O27edT/GNKvyAK6lZnIZ0zhIHq/jSLznvkk15aonGAM1kmhmZBVGpI7Tt0odueZK9A==", + "license": "Apache-2.0", "dependencies": { "@smithy/eventstream-codec": "^2.0.11", "@smithy/is-array-buffer": "^2.0.0", @@ -4371,13 +4218,11 @@ }, "node_modules/@smithy/signature-v4/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/smithy-client": { "version": "2.1.11", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.11.tgz", - "integrity": "sha512-okjMbuBBCTiieK665OFN/ap6u9+Z9z55PMphS5FYCsS6Zfp137Q3qlnt0OgBAnUVnH/mNGyoJV0LBX9gkTWptg==", + "license": "Apache-2.0", "dependencies": { "@smithy/middleware-stack": "^2.0.5", "@smithy/types": "^2.3.5", @@ -4390,13 +4235,11 @@ }, "node_modules/@smithy/smithy-client/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/types": { "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.5.tgz", - "integrity": "sha512-ehyDt8M9hehyxrLQGoA1BGPou8Js1Ocoh5M0ngDhJMqbFmNK5N6Xhr9/ZExWkyIW8XcGkiMPq3ZUEE0ScrhbuQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -4406,13 +4249,11 @@ }, "node_modules/@smithy/types/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/url-parser": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.11.tgz", - "integrity": "sha512-h89yXMCCF+S5k9XIoKltMIWTYj+FcEkU/IIFZ6RtE222fskOTL4Iak6ZRG+ehSvZDt8yKEcxqheTDq7JvvtK3g==", + "license": "Apache-2.0", "dependencies": { "@smithy/querystring-parser": "^2.0.11", "@smithy/types": "^2.3.5", @@ -4421,13 +4262,11 @@ }, "node_modules/@smithy/url-parser/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/util-base64": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", - "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" @@ -4438,26 +4277,22 @@ }, "node_modules/@smithy/util-base64/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/util-body-length-browser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", - "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" } }, "node_modules/@smithy/util-body-length-browser/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/util-body-length-node": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", - "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -4467,13 +4302,11 @@ }, "node_modules/@smithy/util-body-length-node/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/util-buffer-from": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", - "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^2.0.0", "tslib": "^2.5.0" @@ -4484,13 +4317,11 @@ }, "node_modules/@smithy/util-buffer-from/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/util-config-provider": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", - "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -4500,13 +4331,11 @@ }, "node_modules/@smithy/util-config-provider/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/util-defaults-mode-browser": { "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.15.tgz", - "integrity": "sha512-2raMZOYKSuke7QlDg/HDcxQdrp0zteJ8z+S0B9Rn23J55ZFNK1+IjG4HkN6vo/0u3Xy/JOdJ93ibiBSB8F7kOw==", + "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^2.0.12", "@smithy/smithy-client": "^2.1.11", @@ -4520,13 +4349,11 @@ }, "node_modules/@smithy/util-defaults-mode-browser/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/util-defaults-mode-node": { "version": "2.0.19", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.19.tgz", - "integrity": "sha512-7pScU4jBFADB2MBYKM3zb5onMh6Nn0X3IfaFVLYPyCarTIZDLUtUl1GtruzEUJPmDzP+uGeqOtU589HDY0Ni6g==", + "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^2.0.14", "@smithy/credential-provider-imds": "^2.0.16", @@ -4542,13 +4369,11 @@ }, "node_modules/@smithy/util-defaults-mode-node/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/util-hex-encoding": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", - "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -4558,13 +4383,11 @@ }, "node_modules/@smithy/util-hex-encoding/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/util-middleware": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.4.tgz", - "integrity": "sha512-Pbu6P4MBwRcjrLgdTR1O4Y3c0sTZn2JdOiJNcgL7EcIStcQodj+6ZTXtbyU/WTEU3MV2NMA10LxFc3AWHZ3+4A==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.5", "tslib": "^2.5.0" @@ -4575,13 +4398,11 @@ }, "node_modules/@smithy/util-middleware/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/util-retry": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.4.tgz", - "integrity": "sha512-b+n1jBBKc77C1E/zfBe1Zo7S9OXGBiGn55N0apfhZHxPUP/fMH5AhFUUcWaJh7NAnah284M5lGkBKuhnr3yK5w==", + "license": "Apache-2.0", "dependencies": { "@smithy/service-error-classification": "^2.0.4", "@smithy/types": "^2.3.5", @@ -4593,13 +4414,11 @@ }, "node_modules/@smithy/util-retry/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/util-stream": { "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.16.tgz", - "integrity": "sha512-b5ZSRh1KzUzC7LoJcpfk7+iXGoRr3WylEfmPd4FnBLm90OwxSB9VgK1fDZwicfYxSEvWHdYXgvvjPtenEYBBhw==", + "license": "Apache-2.0", "dependencies": { "@smithy/fetch-http-handler": "^2.2.3", "@smithy/node-http-handler": "^2.1.7", @@ -4616,13 +4435,11 @@ }, "node_modules/@smithy/util-stream/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/util-uri-escape": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", - "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -4632,13 +4449,11 @@ }, "node_modules/@smithy/util-uri-escape/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/util-utf8": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", - "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" @@ -4649,13 +4464,11 @@ }, "node_modules/@smithy/util-utf8/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@smithy/util-waiter": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.11.tgz", - "integrity": "sha512-8SJWUl9O1YhjC77EccgltI3q4XZQp3vp9DGEW6o0OdkUcwqm/H4qOLnMkA2n+NDojuM5Iia2jWoCdbluIiG7TA==", + "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^2.0.11", "@smithy/types": "^2.3.5", @@ -4667,8 +4480,7 @@ }, "node_modules/@smithy/util-waiter/node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/@swc/core": { "version": "1.3.58", @@ -5094,9 +4906,16 @@ }, "node_modules/@types/lodash": { "version": "4.14.195", - "dev": true, "license": "MIT" }, + "node_modules/@types/lodash-es": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.10.tgz", + "integrity": "sha512-YJP+w/2khSBwbUSFdGsSqmDvmnN3cCKoPOL7Zjle6s30ZtemkkqhjVfFqGwPN7ASil5VyjE2GtyU/yqYY6mC0A==", + "dependencies": { + "@types/lodash": "*" + } + }, "node_modules/@types/long": { "version": "4.0.2", "license": "MIT" @@ -5147,6 +4966,12 @@ "version": "1.0.4", "license": "MIT" }, + "node_modules/@types/parse-link-header": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-link-header/-/parse-link-header-2.0.2.tgz", + "integrity": "sha512-RKU5SIF0oyM2ZI0ubw66FkM/0RJUv/r84I7vJcXkcICcfeOpd1WXfpcqkFJPaWli5z3YdxMsfWojyU5uofT6sA==", + "dev": true + }, "node_modules/@types/passport": { "version": "1.0.12", "dev": true, @@ -6093,9 +5918,8 @@ }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -6220,8 +6044,7 @@ }, "node_modules/bowser": { "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + "license": "MIT" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -7818,8 +7641,6 @@ }, "node_modules/fast-xml-parser": { "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", "funding": [ { "type": "paypal", @@ -7830,6 +7651,7 @@ "url": "https://github.com/sponsors/NaturalIntelligence" } ], + "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -8148,9 +7970,8 @@ }, "node_modules/get-func-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -8773,8 +8594,7 @@ }, "node_modules/jsonwebtoken": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -8984,6 +8804,11 @@ "version": "4.17.21", "license": "MIT" }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, "node_modules/lodash.camelcase": { "version": "4.3.0", "license": "MIT" @@ -9010,23 +8835,19 @@ }, "node_modules/lodash.includes": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + "license": "MIT" }, "node_modules/lodash.isboolean": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + "license": "MIT" }, "node_modules/lodash.isinteger": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + "license": "MIT" }, "node_modules/lodash.isnumber": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", @@ -9034,8 +8855,7 @@ }, "node_modules/lodash.isstring": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -9044,8 +8864,7 @@ }, "node_modules/lodash.once": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + "license": "MIT" }, "node_modules/lodash.sortby": { "version": "4.7.0", @@ -9176,9 +8995,8 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -9772,6 +9590,14 @@ "node": ">=6" } }, + "node_modules/parse-link-header": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-2.0.0.tgz", + "integrity": "sha512-xjU87V0VyHZybn2RrCX5TIFGxTVZE6zqqZWMPlIKiSKuWh/X5WZdt+w1Ki1nXB+8L/KtL+nZ4iq+sfI6MrhhMw==", + "dependencies": { + "xtend": "~4.0.1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "license": "MIT", @@ -10054,8 +9880,6 @@ }, "node_modules/postcss": { "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "dev": true, "funding": [ { @@ -10071,6 +9895,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", @@ -10273,9 +10098,8 @@ }, "node_modules/protobufjs": { "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -11219,8 +11043,7 @@ }, "node_modules/strnum": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + "license": "MIT" }, "node_modules/sucrase": { "version": "3.34.0", @@ -12313,9 +12136,7 @@ }, "node_modules/vm2": { "version": "3.9.19", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz", - "integrity": "sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==", - "deprecated": "The library contains critical security issues and should not be used for production! The maintenance of the project has been discontinued. Consider migrating your code to isolated-vm.", + "license": "MIT", "dependencies": { "acorn": "^8.7.0", "acorn-walk": "^8.2.0" @@ -12588,9 +12409,8 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12917,6 +12737,7 @@ "@sentry/node": "^7.37.2", "@temporalio/client": "^1.5.2", "@types/fs-extra": "^11.0.1", + "@types/lodash-es": "^4.17.10", "amqplib": "^0.10.3", "archiver": "^6.0.1", "axios": "^1.3.4", @@ -12931,9 +12752,10 @@ "js-yaml": "^4.1.0", "jsonwebtoken": "^9.0.2", "knex": "^2.3.0", - "lodash": "^4.17.21", + "lodash-es": "^4.17.21", "md5": "^2.3.0", "ms": "^2.1.3", + "parse-link-header": "^2.0.0", "pg": "^8.8.0", "posthog-node": "^2.2.3", "rimraf": "^5.0.1", @@ -12953,6 +12775,7 @@ "@types/js-yaml": "^4.0.5", "@types/lodash": "^4.14.195", "@types/node": "^18.7.6", + "@types/parse-link-header": "^2.0.0", "@types/uuid": "^9.0.0", "typescript": "^4.7.4" }, diff --git a/packages/shared/lib/models/Provider.ts b/packages/shared/lib/models/Provider.ts index abb3023e2ad..563323d4b4d 100644 --- a/packages/shared/lib/models/Provider.ts +++ b/packages/shared/lib/models/Provider.ts @@ -1,3 +1,4 @@ +import type { CursorPagination, LinkPagination, OffsetPagination } from '../sdk/sync.js'; import type { AuthModes } from './Auth.js'; import type { TimestampsAndDeleted } from './Generic.js'; import type { Sync, Action } from './Sync.js'; @@ -28,6 +29,7 @@ export interface Template { after?: string; }; decompress?: boolean; + paginate?: LinkPagination | CursorPagination | OffsetPagination; }; authorization_url: string; authorization_params?: Record; diff --git a/packages/shared/lib/sdk/sync.ts b/packages/shared/lib/sdk/sync.ts index 0c2a9024988..e9e607ab0aa 100644 --- a/packages/shared/lib/sdk/sync.ts +++ b/packages/shared/lib/sdk/sync.ts @@ -8,6 +8,8 @@ import errorManager, { ErrorSourceEnum } from '../utils/error.manager.js'; import { LogActionEnum } from '../models/Activity.js'; import { Nango } from '@nangohq/node'; +import configService from '../services/config.service.js'; +import paginateService from '../services/paginate.service.js'; type LogLevel = 'info' | 'debug' | 'error' | 'warn' | 'http' | 'verbose' | 'silly'; @@ -45,7 +47,7 @@ interface ParamsSerializerOptions extends SerializerOptions { serialize?: CustomParamsSerializer; } -interface AxiosResponse { +export interface AxiosResponse { data: T; status: number; statusText: string; @@ -59,7 +61,34 @@ interface DataResponse { [index: string]: unknown | undefined | string | number | boolean | Record; } -interface ProxyConfiguration { +export enum PaginationType { + CURSOR = 'cursor', + LINK = 'link', + OFFSET = 'offset' +} + +export interface Pagination { + type: string; + limit?: number; + response_path?: string; + limit_name_in_request: string; +} + +export interface CursorPagination extends Pagination { + cursor_path_in_response: string; + cursor_name_in_request: string; +} + +export interface LinkPagination extends Pagination { + link_rel_in_response_header?: string; + link_path_in_response_body?: string; +} + +export interface OffsetPagination extends Pagination { + offset_name_in_request: string; +} + +export interface ProxyConfiguration { endpoint: string; providerConfigKey?: string; connectionId?: string; @@ -71,6 +100,7 @@ interface ProxyConfiguration { data?: unknown; retries?: number; baseUrlOverride?: string; + paginate?: Partial | Partial | Partial; } enum AuthModes { @@ -307,6 +337,58 @@ export class NangoAction { return this.attributes as A; } + + public async *paginate(config: ProxyConfiguration): AsyncGenerator { + const providerConfigKey: string = this.providerConfigKey as string; + const template = configService.getTemplate(providerConfigKey); + const templatePaginationConfig: Pagination | undefined = template.proxy?.paginate; + + if (!templatePaginationConfig && (!config.paginate || !config.paginate.type)) { + throw Error('There was no pagination configuration for this integration or configuration passed in.'); + } + + const paginationConfig: Pagination = { + ...(templatePaginationConfig || {}), + ...(config.paginate || {}) + } as Pagination; + + paginateService.validateConfiguration(paginationConfig); + + config.method = config.method || 'GET'; + + const configMethod: string = config.method.toLocaleLowerCase(); + const passPaginationParamsInBody: boolean = ['post', 'put', 'patch'].includes(configMethod); + + const updatedBodyOrParams: Record = ((passPaginationParamsInBody ? config.data : config.params) as Record) ?? {}; + const limitParameterName: string = paginationConfig.limit_name_in_request; + + if (paginationConfig['limit']) { + updatedBodyOrParams[limitParameterName] = paginationConfig['limit']; + } + + switch (paginationConfig.type.toLowerCase()) { + case PaginationType.CURSOR: + return yield* paginateService.cursor( + config, + paginationConfig as CursorPagination, + updatedBodyOrParams, + passPaginationParamsInBody, + this.proxy.bind(this) + ); + case PaginationType.LINK: + return yield* paginateService.link(config, paginationConfig, updatedBodyOrParams, passPaginationParamsInBody, this.proxy.bind(this)); + case PaginationType.OFFSET: + return yield* paginateService.offset( + config, + paginationConfig as OffsetPagination, + updatedBodyOrParams, + passPaginationParamsInBody, + this.proxy.bind(this) + ); + default: + throw Error(`'${paginationConfig.type} ' pagination is not supported. Please, make sure it's one of ${Object.values(PaginationType)}`); + } + } } export class NangoSync extends NangoAction { diff --git a/packages/shared/lib/sdk/sync.unit.test.ts b/packages/shared/lib/sdk/sync.unit.test.ts new file mode 100644 index 00000000000..df8f26430e2 --- /dev/null +++ b/packages/shared/lib/sdk/sync.unit.test.ts @@ -0,0 +1,315 @@ +import { Nango } from '@nangohq/node'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { AuthModes, type Template } from '../models/index.js'; +import configService from '../services/config.service.js'; +import { CursorPagination, NangoAction, LinkPagination, OffsetPagination } from './sync.js'; +import { isValidHttpUrl } from '../utils/utils.js'; + +vi.mock('@nangohq/node', () => { + const Nango = vi.fn(); + return { Nango }; +}); + +describe('Pagination', () => { + const providerConfigKey = 'github'; + + const cursorPagination: CursorPagination = { + type: 'cursor', + cursor_path_in_response: 'metadata.next_cursor', + cursor_name_in_request: 'cursor', + limit_name_in_request: 'limit', + response_path: 'issues' + }; + const offsetPagination: OffsetPagination = { + type: 'offset', + limit_name_in_request: 'per_page', + offset_name_in_request: 'offset', + response_path: 'issues' + }; + const linkPagination: LinkPagination = { + type: 'link', + response_path: 'issues', + limit_name_in_request: 'limit', + link_path_in_response_body: 'metadata.next_cursor' + }; + + const paginationConfigs = [cursorPagination, offsetPagination, linkPagination]; + + let nangoAction: NangoAction; + let nango: Nango; + + beforeEach(() => { + const config: any = { + secretKey: 'encrypted', + serverUrl: 'https://example.com', + providerConfigKey + }; + nangoAction = new NangoAction(config); + nango = new Nango({ secretKey: config.secretKey }); + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + it('Throws error if there is no pagination config in provider template', async () => { + const template: Template = { + auth_mode: AuthModes.OAuth2, + proxy: { base_url: '' }, + authorization_url: '', + token_url: '' + }; + vi.spyOn(configService, 'getTemplate').mockImplementation(() => template); + + const expectedErrorMessage = 'There was no pagination configuration for this integration or configuration passed in'; + await expect(() => nangoAction.paginate({ endpoint: '' }).next()).rejects.toThrowError(expectedErrorMessage); + }); + + it('Sends pagination params in body for POST HTTP method', async () => { + stubProviderTemplate(cursorPagination); + + // TODO: mock to return at least one more page to check that cursor is passed in body too + (await import('@nangohq/node')).Nango.prototype.proxy = vi.fn().mockReturnValue({ data: { issues: [] } }); + + const endpoint = '/issues'; + + await nangoAction.paginate({ endpoint, method: 'POST', paginate: { limit: 2 } }).next(); + + expect(nango.proxy).toHaveBeenCalledWith({ + method: 'POST', + endpoint, + data: { limit: 2 }, + paginate: { limit: 2 } + }); + }); + + it('Overrides template pagination params with ones passed in the proxy config', async () => { + stubProviderTemplate(cursorPagination); + + (await import('@nangohq/node')).Nango.prototype.proxy = vi + .fn() + .mockReturnValueOnce({ data: { issues: [{}, {}, {}] } }) + .mockReturnValueOnce({ data: { issues: [] } }); + + const endpoint = '/issues'; + const paginationConfigOverride: OffsetPagination = { + type: 'offset', + limit_name_in_request: 'per_page', + limit: 3, + offset_name_in_request: 'offset', + response_path: 'issues' + }; + + const generator = nangoAction.paginate({ endpoint, paginate: paginationConfigOverride }); + for await (const batch of generator) { + console.log(batch); + } + + expect(nango.proxy).toHaveBeenLastCalledWith({ + method: 'GET', + endpoint, + params: { offset: '3', per_page: 3 }, + paginate: paginationConfigOverride + }); + }); + + it('Paginates using offset', async () => { + stubProviderTemplate(offsetPagination); + + const firstBatch: any[] = [{ id: 1 }, { id: 2 }, { id: 3 }]; + const secondBatch: any[] = [{ id: 4 }, { id: 5 }, { id: 6 }]; + (await import('@nangohq/node')).Nango.prototype.proxy = vi + .fn() + .mockReturnValueOnce({ data: { issues: firstBatch } }) + .mockReturnValueOnce({ data: { issues: secondBatch } }) + .mockReturnValueOnce({ data: { issues: [] } }); + + const endpoint = '/issues'; + + const generator = nangoAction.paginate({ endpoint }); + + let actualRecords: any[] = []; + for await (const batch of generator) { + actualRecords.push(...batch); + } + + const expectedRecords = [...firstBatch, ...secondBatch]; + + expect(actualRecords).toStrictEqual(expectedRecords); + }); + + it('Paginates using cursor', async () => { + stubProviderTemplate(cursorPagination); + + const firstBatch: any[] = [{ id: 1 }, { id: 2 }, { id: 3 }]; + const secondBatch: any[] = [{ id: 4 }, { id: 5 }, { id: 6 }]; + const thirdBatch: any[] = [{ id: 7 }, { id: 8 }, { id: 9 }]; + (await import('@nangohq/node')).Nango.prototype.proxy = vi + .fn() + .mockReturnValueOnce({ + data: { + issues: firstBatch, + metadata: { + next_cursor: '2' + } + } + }) + .mockReturnValueOnce({ + data: { + issues: secondBatch, + metadata: { + next_cursor: '2' + } + } + }) + .mockReturnValueOnce({ data: { issues: thirdBatch } }); + + const endpoint = '/issues'; + + const generator = nangoAction.paginate({ endpoint }); + + let actualRecords: any[] = []; + for await (const batch of generator) { + actualRecords.push(...batch); + } + + const expectedRecords = [...firstBatch, ...secondBatch, ...thirdBatch]; + + expect(actualRecords).toStrictEqual(expectedRecords); + }); + + it('Stops pagination if cursor is empty', async () => { + stubProviderTemplate(cursorPagination); + + const onlyBatch: any[] = [{ id: 1 }, { id: 2 }, { id: 3 }]; + (await import('@nangohq/node')).Nango.prototype.proxy = vi.fn().mockReturnValueOnce({ + data: { + issues: onlyBatch, + metadata: { + next_cursor: '' + } + } + }); + + const endpoint = '/issues'; + + const generator = nangoAction.paginate({ endpoint }); + + let actualRecords: any[] = []; + for await (const batch of generator) { + actualRecords.push(...batch); + } + + expect(actualRecords).toStrictEqual(onlyBatch); + }); + + it.each(paginationConfigs)( + 'Extracts records from nested body param for $type pagination type', + async (paginationConfig: CursorPagination | OffsetPagination | LinkPagination) => { + stubProviderTemplate(paginationConfig); + + const firstBatch: any[] = [{ id: 1 }, { id: 2 }, { id: 3 }]; + const emptyBatch: any[] = []; + (await import('@nangohq/node')).Nango.prototype.proxy = vi + .fn() + .mockReturnValueOnce({ + data: { + issues: firstBatch, + metadata: { + next_cursor: '' + } + } + }) + + .mockReturnValueOnce({ + data: { + issues: emptyBatch, + metadata: { + next_cursor: '' + } + } + }); + + const endpoint = '/issues'; + + const generator = nangoAction.paginate({ endpoint }); + + let actualRecords: any[] = []; + for await (const batch of generator) { + actualRecords.push(...batch); + } + + expect(actualRecords).toStrictEqual(firstBatch); + } + ); + + it.each([ + // TODO: validate proper config is passed to proxy + ['https://api.gihub.com/issues?page=2', 'https://api.gihub.com/issues?page=3'], + ['/issues?page=2', '/issues?page=3'] + ])('Paginates using next URL/path %s from body', async (nextUrlOrPathValue, anotherNextUrlOrPathValue) => { + stubProviderTemplate(linkPagination); + + const firstBatch: any[] = [{ id: 1 }, { id: 2 }, { id: 3 }]; + const secondBatch: any[] = [{ id: 4 }, { id: 5 }, { id: 6 }]; + const thirdBatch: any[] = [{ id: 7 }, { id: 8 }, { id: 9 }]; + (await import('@nangohq/node')).Nango.prototype.proxy = vi + .fn() + .mockReturnValueOnce({ + data: { + issues: firstBatch, + metadata: { + next_cursor: nextUrlOrPathValue + } + } + }) + .mockReturnValueOnce({ + data: { + issues: secondBatch, + metadata: { + next_cursor: anotherNextUrlOrPathValue + } + } + }) + .mockReturnValueOnce({ data: { issues: thirdBatch } }); + + const endpoint = '/issues'; + + const generator = nangoAction.paginate({ endpoint }); + + let actualRecords: any[] = []; + for await (const batch of generator) { + actualRecords.push(...batch); + } + + const expectedRecords = [...firstBatch, ...secondBatch, ...thirdBatch]; + let expectedEndpoint: string; + if (isValidHttpUrl(anotherNextUrlOrPathValue)) { + const url: URL = new URL(anotherNextUrlOrPathValue); + expectedEndpoint = url.pathname + url.search; + } else { + expectedEndpoint = anotherNextUrlOrPathValue; + } + + expect(actualRecords).toStrictEqual(expectedRecords); + expect(nango.proxy).toHaveBeenCalledWith( + expect.objectContaining({ + endpoint: expectedEndpoint + }) + ); + }); + + const stubProviderTemplate = (paginationConfig: CursorPagination | OffsetPagination | LinkPagination) => { + const template: Template = buildTemplate(paginationConfig); + vi.spyOn(configService, 'getTemplate').mockImplementation(() => template); + }; + + const buildTemplate = (paginationConfig: CursorPagination | OffsetPagination | LinkPagination): Template => { + return { + auth_mode: AuthModes.OAuth2, + proxy: { base_url: 'https://api.github.com/', paginate: paginationConfig }, + authorization_url: '', + token_url: '' + }; + }; +}); diff --git a/packages/shared/lib/services/paginate.service.ts b/packages/shared/lib/services/paginate.service.ts new file mode 100644 index 00000000000..dfd5d83ca5b --- /dev/null +++ b/packages/shared/lib/services/paginate.service.ts @@ -0,0 +1,170 @@ +import parseLinksHeader from 'parse-link-header'; +import get from 'lodash-es/get.js'; +import type { Pagination, AxiosResponse, ProxyConfiguration, CursorPagination, OffsetPagination, LinkPagination } from '../sdk/sync.js'; +import { PaginationType } from '../sdk/sync.js'; +import { isValidHttpUrl } from '../utils/utils.js'; + +class PaginationService { + public validateConfiguration(paginationConfig: Pagination): void { + if (!paginationConfig.type) { + throw new Error('Pagination type is required'); + } + const { type } = paginationConfig; + if (type.toLowerCase() === PaginationType.CURSOR) { + const cursorPagination: CursorPagination = paginationConfig as CursorPagination; + if (!cursorPagination.cursor_name_in_request) { + throw new Error('Param cursor_name_in_request is required for cursor pagination'); + } + if (!cursorPagination.cursor_path_in_response) { + throw new Error('Param cursor_path_in_response is required for cursor pagination'); + } + + if (paginationConfig.limit && !paginationConfig.limit_name_in_request) { + throw new Error('Param limit_name_in_request is required for cursor pagination when limit is set'); + } + } else if (type.toLowerCase() === PaginationType.LINK) { + const linkPagination: LinkPagination = paginationConfig as LinkPagination; + if (!linkPagination.link_rel_in_response_header && !linkPagination.link_path_in_response_body) { + throw new Error('Either param link_rel_in_response_header or link_path_in_response_body is required for link pagination'); + } + } else if (type.toLowerCase() === PaginationType.OFFSET) { + const offsetPagination: OffsetPagination = paginationConfig as OffsetPagination; + if (!offsetPagination.offset_name_in_request) { + throw new Error('Param offset_name_in_request is required for offset pagination'); + } + } else { + throw new Error( + `Pagination type ${type} is not supported. Only ${PaginationType.CURSOR}, ${PaginationType.LINK}, and ${PaginationType.OFFSET} pagination types are supported.` + ); + } + } + + public async *cursor( + config: ProxyConfiguration, + paginationConfig: CursorPagination, + updatedBodyOrParams: Record, + passPaginationParamsInBody: boolean, + proxy: (config: ProxyConfiguration) => Promise + ): AsyncGenerator { + const cursorPagination: CursorPagination = paginationConfig as CursorPagination; + + let nextCursor: string | undefined; + + while (true) { + if (nextCursor) { + updatedBodyOrParams[cursorPagination.cursor_name_in_request] = nextCursor; + } + + this.updateConfigBodyOrParams(passPaginationParamsInBody, config, updatedBodyOrParams); + + const response: AxiosResponse = await proxy(config); + + const responseData: T[] = cursorPagination.response_path ? get(response.data, cursorPagination.response_path) : response.data; + + if (!responseData.length) { + return; + } + + yield responseData; + + nextCursor = get(response.data, cursorPagination.cursor_path_in_response); + + if (!nextCursor || nextCursor.trim().length === 0) { + return; + } + } + } + + public async *link( + config: ProxyConfiguration, + paginationConfig: LinkPagination, + updatedBodyOrParams: Record, + passPaginationParamsInBody: boolean, + proxy: (config: ProxyConfiguration) => Promise + ): AsyncGenerator { + const linkPagination: LinkPagination = paginationConfig as LinkPagination; + + this.updateConfigBodyOrParams(passPaginationParamsInBody, config, updatedBodyOrParams); + + while (true) { + const response: AxiosResponse = await proxy(config); + + const responseData: T[] = paginationConfig.response_path ? get(response.data, paginationConfig.response_path) : response.data; + if (!responseData.length) { + return; + } + + yield responseData; + + const nextPageLink: string | undefined = this.getNextPageLinkFromBodyOrHeaders(linkPagination, response, paginationConfig); + + if (!nextPageLink) { + return; + } + + if (!isValidHttpUrl(nextPageLink)) { + // some providers only send path+query params in the link so we can immediately assign those to the endpoint + config.endpoint = nextPageLink; + } else { + const url: URL = new URL(nextPageLink); + config.endpoint = url.pathname + url.search; + } + delete config.params; + } + } + + public async *offset( + config: ProxyConfiguration, + paginationConfig: OffsetPagination, + updatedBodyOrParams: Record, + passPaginationParamsInBody: boolean, + proxy: (config: ProxyConfiguration) => Promise + ): AsyncGenerator { + const offsetPagination: OffsetPagination = paginationConfig as OffsetPagination; + const offsetParameterName: string = offsetPagination.offset_name_in_request; + let offset = 0; + + while (true) { + updatedBodyOrParams[offsetParameterName] = `${offset}`; + + this.updateConfigBodyOrParams(passPaginationParamsInBody, config, updatedBodyOrParams); + + const response: AxiosResponse = await proxy(config); + + const responseData: T[] = paginationConfig.response_path ? get(response.data, paginationConfig.response_path) : response.data; + if (!responseData.length) { + return; + } + + yield responseData; + + if (paginationConfig['limit'] && responseData.length < paginationConfig['limit']) { + return; + } + + if (responseData.length < 1) { + // Last page was empty so no need to fetch further + return; + } + + offset += responseData.length; + } + } + + private updateConfigBodyOrParams(passPaginationParamsInBody: boolean, config: ProxyConfiguration, updatedBodyOrParams: Record) { + passPaginationParamsInBody ? (config.data = updatedBodyOrParams) : (config.params = updatedBodyOrParams); + } + + private getNextPageLinkFromBodyOrHeaders(linkPagination: LinkPagination, response: AxiosResponse, paginationConfig: Pagination) { + if (linkPagination.link_rel_in_response_header) { + const linkHeader = parseLinksHeader(response.headers['link']); + return linkHeader?.[linkPagination.link_rel_in_response_header]?.url; + } else if (linkPagination.link_path_in_response_body) { + return get(response.data, linkPagination.link_path_in_response_body); + } + + throw Error(`Either 'link_rel_in_response_header' or 'link_path_in_response_body' should be specified for '${paginationConfig.type}' pagination`); + } +} + +export default new PaginationService(); diff --git a/packages/shared/package.json b/packages/shared/package.json index dfd661cec61..8dac778082b 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -37,9 +37,10 @@ "js-yaml": "^4.1.0", "jsonwebtoken": "^9.0.2", "knex": "^2.3.0", - "lodash": "^4.17.21", + "lodash-es": "^4.17.21", "md5": "^2.3.0", "ms": "^2.1.3", + "parse-link-header": "^2.0.0", "pg": "^8.8.0", "posthog-node": "^2.2.3", "rimraf": "^5.0.1", @@ -60,9 +61,10 @@ "@types/cors": "^2.8.12", "@types/debug": "^4.1.7", "@types/human-to-cron": "^0.3.0", + "@types/lodash-es": "^4.17.10", "@types/js-yaml": "^4.0.5", - "@types/lodash": "^4.14.195", "@types/node": "^18.7.6", + "@types/parse-link-header": "^2.0.0", "@types/uuid": "^9.0.0", "typescript": "^4.7.4" } diff --git a/packages/shared/providers.yaml b/packages/shared/providers.yaml index 15984ca2eb1..a3b595b8708 100644 --- a/packages/shared/providers.yaml +++ b/packages/shared/providers.yaml @@ -70,6 +70,12 @@ asana: grant_type: refresh_token proxy: base_url: https://app.asana.com + paginate: + type: cursor + cursor_path_in_response: next_page.offset + cursor_name_in_request: offset + response_path: data + limit_name_in_request: limit docs: https://developers.asana.com/reference ashby: auth_mode: BASIC @@ -361,6 +367,10 @@ github: base_url: https://api.github.com retry: at: 'x-ratelimit-reset' + paginate: + type: link + limit_name_in_request: per_page + link_rel_in_response_header: next docs: https://docs.github.com/en/rest github-app: alias: github @@ -492,6 +502,12 @@ hubspot: proxy: base_url: https://api.hubapi.com decompress: true + paginate: + type: cursor + cursor_path_in_response: paging.next.after + limit_name_in_request: limit + cursor_name_in_request: after + response_path: results docs: https://developers.hubspot.com/docs/api/overview instagram: auth_mode: OAUTH2 @@ -520,6 +536,12 @@ jira: prompt: consent proxy: base_url: https://api.atlassian.com + paginate: + type: link + link_rel_in_response_header: next + limit_name_in_request: limit + response_path: results + link_path_in_response_body: _links.next keap: auth_mode: OAUTH2 authorization_url: https://accounts.infusionsoft.com/app/oauth/authorize @@ -652,6 +674,12 @@ notion: base_url: https://api.notion.com headers: 'Notion-Version': '2022-06-28' + paginate: + type: cursor + cursor_path_in_response: start_cursor + cursor_name_in_request: start_cursor + limit_name_in_request: page_size + response_path: results docs: https://developers.notion.com/reference one-drive: alias: microsoft-teams @@ -869,6 +897,11 @@ slack: - incoming_webhook.url proxy: base_url: https://slack.com/api + paginate: + type: cursor + cursor_path_in_response: response_metadata.next_cursor + cursor_name_in_request: cursor + limit_name_in_request: limit docs: https://api.slack.com/apis smugmug: auth_mode: OAUTH1 diff --git a/scripts/validation/providers/schema.json b/scripts/validation/providers/schema.json index c2429d6c5f5..4bcfadd569f 100644 --- a/scripts/validation/providers/schema.json +++ b/scripts/validation/providers/schema.json @@ -6,7 +6,7 @@ "properties": { "auth_mode": { "type": "string", - "enum": [ "API_KEY", "APP", "BASIC", "NONE", "OAUTH1", "OAUTH2"] + "enum": ["API_KEY", "APP", "BASIC", "NONE", "OAUTH1", "OAUTH2"] }, "authorization_url": { "type": "string" }, "token_url": { "type": "string" }, @@ -20,6 +20,7 @@ "type": "object", "properties": { "base_url": { "type": "string" }, + "paginate": { "type": "object" }, "headers": { "type": "object", "patternProperties": {