diff --git a/package-lock.json b/package-lock.json index f0827d7..a1d44ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "Apache-2.0", "dependencies": { "@aws-sdk/node-http-handler": "^3.53.0", + "@aws-sdk/protocol-http": "^3.296.0", "proxy-agent": "^5.0.0" }, "devDependencies": { @@ -228,6 +229,19 @@ "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/client-sso": { "version": "3.31.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.31.0.tgz", @@ -283,6 +297,19 @@ "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/client-sts": { "version": "3.31.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.31.0.tgz", @@ -343,6 +370,19 @@ "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/config-resolver": { "version": "3.30.0", "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.30.0.tgz", @@ -558,6 +598,19 @@ "tslib": "^2.3.0" } }, + "node_modules/@aws-sdk/fetch-http-handler/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/hash-blob-browser": { "version": "3.29.0", "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.29.0.tgz", @@ -646,6 +699,19 @@ "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/middleware-apply-body-checksum/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { "version": "3.30.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.30.0.tgz", @@ -661,6 +727,19 @@ "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/middleware-content-length": { "version": "3.29.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.29.0.tgz", @@ -675,6 +754,19 @@ "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/middleware-content-length/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/middleware-expect-continue": { "version": "3.29.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.29.0.tgz", @@ -690,6 +782,19 @@ "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/middleware-header-default": { "version": "3.29.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-header-default/-/middleware-header-default-3.29.0.tgz", @@ -704,6 +809,19 @@ "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/middleware-header-default/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/middleware-host-header": { "version": "3.29.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.29.0.tgz", @@ -718,6 +836,19 @@ "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/middleware-host-header/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/middleware-location-constraint": { "version": "3.29.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.29.0.tgz", @@ -760,6 +891,19 @@ "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/middleware-retry/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/middleware-sdk-s3": { "version": "3.30.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.30.0.tgz", @@ -775,6 +919,19 @@ "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/middleware-sdk-sts": { "version": "3.30.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.30.0.tgz", @@ -792,6 +949,19 @@ "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/middleware-serde": { "version": "3.29.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.29.0.tgz", @@ -821,6 +991,19 @@ "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/middleware-ssec": { "version": "3.29.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.29.0.tgz", @@ -860,6 +1043,19 @@ "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@aws-sdk/node-config-provider": { "version": "3.29.0", "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.29.0.tgz", @@ -960,16 +1156,26 @@ } }, "node_modules/@aws-sdk/protocol-http": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", - "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", - "dev": true, + "version": "3.296.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.296.0.tgz", + "integrity": "sha512-0U1Z/+tpwdRiSToWo1bpdkbTzjbLugTnd02ATjvK4B7zi363SUGlKfoWgV+v7FU/22CIUI1ZIe7XzXvq5rJfjA==", "dependencies": { - "@aws-sdk/types": "3.29.0", - "tslib": "^2.3.0" + "@aws-sdk/types": "3.296.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/protocol-http/node_modules/@aws-sdk/types": { + "version": "3.296.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.296.0.tgz", + "integrity": "sha512-s0wIac64rrMEo2ioUxP9IarGiiCGmelCspNcoNTPSjGl25QqjhyfQqTeGgS58qJ4fHoQb07qra39930xp1IzJg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, "node_modules/@aws-sdk/querystring-builder": { @@ -13293,9 +13499,9 @@ } }, "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" }, "node_modules/tsutils": { "version": "3.21.0", @@ -13972,6 +14178,16 @@ "@aws-sdk/types": "3.29.0", "tslib": "^2.3.0" } + }, + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } } } }, @@ -14023,6 +14239,16 @@ "@aws-sdk/types": "3.29.0", "tslib": "^2.3.0" } + }, + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } } } }, @@ -14079,6 +14305,16 @@ "@aws-sdk/types": "3.29.0", "tslib": "^2.3.0" } + }, + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } } } }, @@ -14259,6 +14495,18 @@ "@aws-sdk/types": "3.29.0", "@aws-sdk/util-base64-browser": "3.29.0", "tslib": "^2.3.0" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } + } } }, "@aws-sdk/hash-blob-browser": { @@ -14335,6 +14583,18 @@ "@aws-sdk/protocol-http": "3.29.0", "@aws-sdk/types": "3.29.0", "tslib": "^2.3.0" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } + } } }, "@aws-sdk/middleware-bucket-endpoint": { @@ -14347,6 +14607,18 @@ "@aws-sdk/types": "3.29.0", "@aws-sdk/util-arn-parser": "3.29.0", "tslib": "^2.3.0" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } + } } }, "@aws-sdk/middleware-content-length": { @@ -14358,6 +14630,18 @@ "@aws-sdk/protocol-http": "3.29.0", "@aws-sdk/types": "3.29.0", "tslib": "^2.3.0" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } + } } }, "@aws-sdk/middleware-expect-continue": { @@ -14370,6 +14654,18 @@ "@aws-sdk/protocol-http": "3.29.0", "@aws-sdk/types": "3.29.0", "tslib": "^2.3.0" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } + } } }, "@aws-sdk/middleware-header-default": { @@ -14381,6 +14677,18 @@ "@aws-sdk/protocol-http": "3.29.0", "@aws-sdk/types": "3.29.0", "tslib": "^2.3.0" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } + } } }, "@aws-sdk/middleware-host-header": { @@ -14392,6 +14700,18 @@ "@aws-sdk/protocol-http": "3.29.0", "@aws-sdk/types": "3.29.0", "tslib": "^2.3.0" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } + } } }, "@aws-sdk/middleware-location-constraint": { @@ -14425,6 +14745,18 @@ "@aws-sdk/types": "3.29.0", "tslib": "^2.3.0", "uuid": "^8.3.2" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } + } } }, "@aws-sdk/middleware-sdk-s3": { @@ -14437,6 +14769,18 @@ "@aws-sdk/types": "3.29.0", "@aws-sdk/util-arn-parser": "3.29.0", "tslib": "^2.3.0" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } + } } }, "@aws-sdk/middleware-sdk-sts": { @@ -14451,6 +14795,18 @@ "@aws-sdk/signature-v4": "3.30.0", "@aws-sdk/types": "3.29.0", "tslib": "^2.3.0" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } + } } }, "@aws-sdk/middleware-serde": { @@ -14474,6 +14830,18 @@ "@aws-sdk/signature-v4": "3.30.0", "@aws-sdk/types": "3.29.0", "tslib": "^2.3.0" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } + } } }, "@aws-sdk/middleware-ssec": { @@ -14504,6 +14872,18 @@ "@aws-sdk/protocol-http": "3.29.0", "@aws-sdk/types": "3.29.0", "tslib": "^2.3.0" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", + "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.29.0", + "tslib": "^2.3.0" + } + } } }, "@aws-sdk/node-config-provider": { @@ -14584,13 +14964,22 @@ } }, "@aws-sdk/protocol-http": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.29.0.tgz", - "integrity": "sha512-OIeJ7ukfgGkaIL0/NNM5sxIlfxtOqQN+KoaQ89YeLBlJPVoKnptAw+eWjjLwxLs+r/SbyZHXbBawP+sbzq0mSQ==", - "dev": true, + "version": "3.296.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.296.0.tgz", + "integrity": "sha512-0U1Z/+tpwdRiSToWo1bpdkbTzjbLugTnd02ATjvK4B7zi363SUGlKfoWgV+v7FU/22CIUI1ZIe7XzXvq5rJfjA==", "requires": { - "@aws-sdk/types": "3.29.0", - "tslib": "^2.3.0" + "@aws-sdk/types": "3.296.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.296.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.296.0.tgz", + "integrity": "sha512-s0wIac64rrMEo2ioUxP9IarGiiCGmelCspNcoNTPSjGl25QqjhyfQqTeGgS58qJ4fHoQb07qra39930xp1IzJg==", + "requires": { + "tslib": "^2.5.0" + } + } } }, "@aws-sdk/querystring-builder": { @@ -23984,9 +24373,9 @@ } }, "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" }, "tsutils": { "version": "3.21.0", diff --git a/package.json b/package.json index a980d53..1f0453c 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "homepage": "https://github.com/awslabs/aws-sdk-v3-js-proxy#readme", "dependencies": { "@aws-sdk/node-http-handler": "^3.53.0", + "@aws-sdk/protocol-http": "^3.296.0", "proxy-agent": "^5.0.0" }, "devDependencies": { diff --git a/src/add-proxy.ts b/src/add-proxy.ts index e0f6b25..4e205aa 100644 --- a/src/add-proxy.ts +++ b/src/add-proxy.ts @@ -14,28 +14,52 @@ export const addProxyToClient = ( debug = false, httpsOnly = false, throwOnNoProxy = true, + ...opts }: AddProxyOptions = {} ): T => { const httpProxy = getHttpProxy(); const httpsProxy = getHttpsProxy(); + const httpAgent = httpProxy ? new ProxyAgent(httpProxy) : undefined; + const httpsAgent = httpsProxy ? new ProxyAgent(httpsProxy) : undefined; const log = debug ? console.log : () => null; - if (httpProxy && httpsProxy && !httpsOnly) { - console.warn( - 'Both HTTP and HTTPS proxy found in environment, defaulting to HTTP\n\n' + - 'To use the HTTPS proxy instead, set the `httpsOnly` option to `true`' - ); + if (httpProxy && httpsProxy) { + if (httpsOnly) { + log( + `Setting https proxy to ${httpsProxy} (httpsOnly enabled with both https and http found in env)` + ); + client.config.requestHandler = new NodeHttpHandler({ + httpAgent: httpsAgent, + httpsAgent, + ...opts, + }); + } else { + log( + `Setting http proxy to ${httpProxy} and https proxy to ${httpsProxy}` + ); + client.config.requestHandler = new NodeHttpHandler({ + httpAgent, + httpsAgent, + ...opts, + }); + } + + return client; } if (httpProxy && !httpsOnly) { log(`Setting http proxy to ${httpProxy}`); client.config.requestHandler = new NodeHttpHandler({ - httpAgent: new ProxyAgent(httpProxy), + httpAgent, + httpsAgent: httpAgent, + ...opts, }); } else if (httpsProxy) { log(`Setting https proxy to ${httpsProxy}`); client.config.requestHandler = new NodeHttpHandler({ - httpsAgent: new ProxyAgent(httpsProxy), + httpAgent: httpsAgent, + httpsAgent, + ...opts, }); } else if (throwOnNoProxy) { log( diff --git a/src/types.ts b/src/types.ts index e5cc46a..eef238a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,3 +1,4 @@ +import { NodeHttpHandlerOptions } from '@aws-sdk/node-http-handler'; import type { HttpHandler } from '@aws-sdk/protocol-http'; type ConfigWithRequestHandler = { @@ -13,7 +14,8 @@ export type ClientWithConfig = T extends ConfigWithRequestHandler /** * Set of options that can be passed to `addProxyToClient` */ -export interface AddProxyOptions { +export interface AddProxyOptions + extends Pick { /** * Throw an error if no proxy is found in the environment. * diff --git a/test/add-proxy.spec.ts b/test/add-proxy.spec.ts index 2a6d702..0411056 100644 --- a/test/add-proxy.spec.ts +++ b/test/add-proxy.spec.ts @@ -11,7 +11,6 @@ const MockNodeHttpHandler = mocked(NodeHttpHandler); describe('add-proxy', () => { describe('addProxyToClient', () => { let client: S3Client; - let warnSpy = jest.spyOn(global.console, 'warn'); let logSpy = jest.spyOn(global.console, 'log'); const PREV_ENV = process.env; @@ -21,7 +20,6 @@ describe('add-proxy', () => { client = new S3Client({ region: 'us-east-1', }); - warnSpy = jest.spyOn(global.console, 'warn'); logSpy = jest.spyOn(global.console, 'log'); }); @@ -56,37 +54,37 @@ describe('add-proxy', () => { expect(fn).not.toThrow(); }); - it('should attach an httpAgent as the requestHandler when an http proxy is set', () => { + it('should attach an httpAgent AND httpsAgent when both proxies are set', () => { process.env.HTTP_PROXY = 'http://localhost'; + process.env.HTTPS_PROXY = 'https://localhost'; addProxyToClient(client); expect(MockNodeHttpHandler).toHaveBeenCalledWith({ httpAgent: new ProxyAgent('http://localhost'), + httpsAgent: new ProxyAgent('https://localhost'), }); }); - it('should attach an httpsAgent as the requestHandler when an https proxy is set', () => { - process.env.HTTPS_PROXY = 'https://localhost'; + it('should attach an httpAgent as the requestHandler when an http proxy is set', () => { + process.env.HTTP_PROXY = 'http://localhost'; addProxyToClient(client); expect(MockNodeHttpHandler).toHaveBeenCalledWith({ - httpsAgent: new ProxyAgent('https://localhost'), + httpAgent: new ProxyAgent('http://localhost'), + httpsAgent: new ProxyAgent('http://localhost'), }); }); - it('should use http proxy if both proxies are found but httpsOnly is false', () => { - const opts: AddProxyOptions = { - httpsOnly: false, - }; + it('should attach an httpsAgent as the requestHandler when an https proxy is set', () => { process.env.HTTPS_PROXY = 'https://localhost'; - process.env.HTTP_PROXY = 'http://localhost'; - addProxyToClient(client, opts); + addProxyToClient(client); expect(MockNodeHttpHandler).toHaveBeenCalledWith({ - httpAgent: new ProxyAgent('http://localhost'), + httpAgent: new ProxyAgent('https://localhost'), + httpsAgent: new ProxyAgent('https://localhost'), }); }); @@ -101,6 +99,7 @@ describe('add-proxy', () => { expect(MockNodeHttpHandler).toHaveBeenCalledWith({ httpsAgent: new ProxyAgent('https://localhost'), + httpAgent: new ProxyAgent('https://localhost'), }); }); @@ -114,41 +113,56 @@ describe('add-proxy', () => { expect(MockNodeHttpHandler).toHaveBeenCalledWith({ httpsAgent: new ProxyAgent('https://localhost'), + httpAgent: new ProxyAgent('https://localhost'), }); }); - it('should log a warning when both http and https proxy are set and httpsOnly is false', () => { + it('should print to the console when debug is set to true', () => { const opts: AddProxyOptions = { - httpsOnly: false, + debug: true, }; - process.env.HTTPS_PROXY = 'https://localhost'; process.env.HTTP_PROXY = 'http://localhost'; addProxyToClient(client, opts); - expect(warnSpy).toHaveBeenCalled(); + expect(logSpy).toHaveBeenCalledTimes(1); }); - it('should print to the console when debug is set to true', () => { + it('should not print to the console when debug is set to false', () => { const opts: AddProxyOptions = { - debug: true, + debug: false, }; process.env.HTTP_PROXY = 'http://localhost'; addProxyToClient(client, opts); - expect(logSpy).toHaveBeenCalledTimes(1); + expect(logSpy).not.toHaveBeenCalled(); }); - it('should not print to the console when debug is set to false', () => { + it('should add connectionTimeout when provided', () => { const opts: AddProxyOptions = { - debug: false, + connectionTimeout: 100, }; process.env.HTTP_PROXY = 'http://localhost'; addProxyToClient(client, opts); - expect(logSpy).not.toHaveBeenCalled(); + expect(MockNodeHttpHandler).toHaveBeenCalledWith( + expect.objectContaining(opts) + ); + }); + + it('should add socketTimeout when provided', () => { + const opts: AddProxyOptions = { + socketTimeout: 10, + }; + process.env.HTTP_PROXY = 'http://localhost'; + + addProxyToClient(client, opts); + + expect(MockNodeHttpHandler).toHaveBeenCalledWith( + expect.objectContaining(opts) + ); }); }); });