From bfefd78d32fe977fcd05eaa3a9a0b494d35828ab Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Tue, 14 Jan 2025 07:18:52 -0800 Subject: [PATCH] test: excise 'request' library from our tests (#4417) The 'request' library is long since deprecated. I'm tired of the security warnings for its deps. --- package-lock.json | 426 ------------------ package.json | 1 - test/cloud-metadata/test-server.test.js | 177 ++++---- .../modules/http/request.test.js | 10 +- test/sanitize-field-names/_shared.js | 35 ++ test/sanitize-field-names/express.test.js | 24 +- test/sanitize-field-names/fastify.test.js | 23 +- test/sanitize-field-names/hapi.test.js | 23 +- test/sanitize-field-names/koa.test.js | 23 +- test/sanitize-field-names/restify.test.js | 23 +- 10 files changed, 182 insertions(+), 583 deletions(-) diff --git a/package-lock.json b/package-lock.json index e72a3b62207..128fe8c8170 100644 --- a/package-lock.json +++ b/package-lock.json @@ -117,7 +117,6 @@ "prettier": "^3.0.0", "pug": "^3.0.1", "redis": "^4.3.0", - "request": "^2.88.2", "restify": "^11.0.0", "rimraf": "^3.0.2", "tape": "^5.0.0", @@ -7074,15 +7073,6 @@ "node": ">=4.0" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/aws-ssl-profiles": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.1.tgz", @@ -7092,12 +7082,6 @@ "node": ">= 6.0.0" } }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, "node_modules/axios": { "version": "1.7.9", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", @@ -7620,12 +7604,6 @@ } ] }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, "node_modules/cassandra-driver": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.7.2.tgz", @@ -9724,12 +9702,6 @@ "node": ">= 0.8" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -10144,29 +10116,6 @@ "is-callable": "^1.1.3" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, "node_modules/formidable": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", @@ -10541,51 +10490,6 @@ "node": ">=0.10.0" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/har-validator/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/har-validator/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -10821,21 +10725,6 @@ "node": ">= 14" } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, "node_modules/http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -11408,12 +11297,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "node_modules/is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", @@ -11495,12 +11378,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, "node_modules/jackpot": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/jackpot/-/jackpot-0.0.6.tgz", @@ -11724,21 +11601,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/jstransformer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", @@ -12928,15 +12790,6 @@ "node": "*" } }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -13285,12 +13138,6 @@ "node": ">=8" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "node_modules/pg": { "version": "8.13.1", "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.1.tgz", @@ -13773,12 +13620,6 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "node_modules/pug": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", @@ -14224,57 +14065,6 @@ "resolved": "https://registry.npmjs.org/relative-microtime/-/relative-microtime-2.0.0.tgz", "integrity": "sha512-l18ha6HEZc+No/uK4GyAnNxgKW7nvEe35IaeN54sShMojtqik2a6GbTyuiezkjpPaqP874Z3lW5ysBo5irz4NA==" }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/require_optional": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", @@ -15717,19 +15507,6 @@ "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", "dev": true }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", @@ -15792,18 +15569,6 @@ "node": ">=0.6.x" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -22079,24 +21844,12 @@ } } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, "aws-ssl-profiles": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.1.tgz", "integrity": "sha512-+H+kuK34PfMaI9PNU/NSjBKL5hh/KDM9J72kwYeYEm0A8B1AC4fuCy3qsjnA7lxklgyXsB68yn8Z2xoZEjgwCQ==", "dev": true }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, "axios": { "version": "1.7.9", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", @@ -22475,12 +22228,6 @@ "integrity": "sha512-WTrjUCSMp3LYX0nE12ECkV0a+e6LC85E0Auz75555/qr78Oc8YWhEPNfDd6SHdtlCMSzqtuXY0uyEMNRcsKpKw==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, "cassandra-driver": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.7.2.tgz", @@ -24075,12 +23822,6 @@ "mini-queue": "0.0.14" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -24422,23 +24163,6 @@ "is-callable": "^1.1.3" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "formidable": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", @@ -24702,42 +24426,6 @@ } } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } - } - }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -24923,17 +24611,6 @@ "debug": "^4.3.4" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -25323,12 +25000,6 @@ "which-typed-array": "^1.1.14" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", @@ -25389,12 +25060,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, "jackpot": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/jackpot/-/jackpot-0.0.6.tgz", @@ -25590,18 +25255,6 @@ } } }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, "jstransformer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", @@ -26531,12 +26184,6 @@ "integrity": "sha1-StCAk21EPCVhrtnyGX7//iX05QY=", "dev": true }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -26795,12 +26442,6 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "pg": { "version": "8.13.1", "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.1.tgz", @@ -27142,12 +26783,6 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "pug": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", @@ -27514,48 +27149,6 @@ "resolved": "https://registry.npmjs.org/relative-microtime/-/relative-microtime-2.0.0.tgz", "integrity": "sha512-l18ha6HEZc+No/uK4GyAnNxgKW7nvEe35IaeN54sShMojtqik2a6GbTyuiezkjpPaqP874Z3lW5ysBo5irz4NA==" }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, "require_optional": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", @@ -28709,16 +28302,6 @@ "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", "dev": true }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, "tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", @@ -28774,15 +28357,6 @@ "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", "dev": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", diff --git a/package.json b/package.json index 781fb683999..00cdb8ce35b 100644 --- a/package.json +++ b/package.json @@ -196,7 +196,6 @@ "prettier": "^3.0.0", "pug": "^3.0.1", "redis": "^4.3.0", - "request": "^2.88.2", "restify": "^11.0.0", "rimraf": "^3.0.2", "tape": "^5.0.0", diff --git a/test/cloud-metadata/test-server.test.js b/test/cloud-metadata/test-server.test.js index 279813cfd45..dd2859b5e84 100644 --- a/test/cloud-metadata/test-server.test.js +++ b/test/cloud-metadata/test-server.test.js @@ -5,9 +5,9 @@ */ 'use strict'; +const http = require('http'); const { createTestServer } = require('./_lib'); const tape = require('tape'); -const request = require('request'); tape.test('test the test server: valid', function (t) { const serverAws = createTestServer('aws', 'default aws fixture'); @@ -32,14 +32,17 @@ tape.test('basic metadata request: aws', function (t) { const url = `http://127.0.0.1:${ listener.address().port }/latest/dynamic/instance-identity/document`; - request(url, function (error, response, rawBody) { - if (error) { - throw error; - } - const body = JSON.parse(rawBody); - t.ok(body.version, 'version set'); - listener.close(); - t.end(); + http.get(url, (res) => { + const chunks = []; + res.on('data', (chunk) => { + chunks.push(chunk); + }); + res.on('end', () => { + const body = JSON.parse(Buffer.concat(chunks)); + t.ok(body.version, 'version set'); + listener.close(); + t.end(); + }); }); }); }); @@ -47,92 +50,112 @@ tape.test('basic metadata request: aws', function (t) { tape.test('basic metadata request: gcp', function (t) { const serverGcp = createTestServer('gcp', 'default gcp fixture'); const listener = serverGcp.listen(0, function () { - const url = `http://127.0.0.1:${ - listener.address().port - }/computeMetadata/v1/?recursive=true`; - const options = { - url, - headers: { - 'Metadata-Flavor': 'Google', + http.get( + { + hostname: '127.0.0.1', + port: listener.address().port, + path: '/computeMetadata/v1/?recursive=true', + headers: { + 'Metadata-Flavor': 'Google', + }, }, - }; - request(options, function (error, response, rawBody) { - if (error) { - throw error; - } - const body = JSON.parse(rawBody); - t.ok(body.instance.id, 'id set'); - listener.close(); - t.end(); - }); + (res) => { + const chunks = []; + res.on('data', (chunk) => { + chunks.push(chunk); + }); + res.on('end', () => { + const body = JSON.parse(Buffer.concat(chunks)); + t.ok(body.instance.id, 'id set'); + listener.close(); + t.end(); + }); + }, + ); }); }); tape.test('basic metadata request: azure', function (t) { const serverAzure = createTestServer('azure', 'default azure fixture'); const listener = serverAzure.listen(0, function () { - const url = `http://127.0.0.1:${ - listener.address().port - }/metadata/instance?api-version=2020-09-01`; - const options = { - url, - headers: { - Metadata: 'true', + http.get( + { + hostname: '127.0.0.1', + port: listener.address().port, + path: '/metadata/instance?api-version=2020-09-01', + headers: { + Metadata: 'true', + }, }, - }; - request(options, function (error, response, rawBody) { - if (error) { - throw error; - } - const body = JSON.parse(rawBody); - t.ok(body.compute.vmId, 'vmId set'); - listener.close(); - t.end(); - }); + (res) => { + const chunks = []; + res.on('data', (chunk) => { + chunks.push(chunk); + }); + res.on('end', () => { + const body = JSON.parse(Buffer.concat(chunks)); + t.ok(body.compute.vmId, 'vmId set'); + listener.close(); + t.end(); + }); + }, + ); }); }); tape.test('IMDSv2 token fetching: aws', function (t) { const serverAws = createTestServer('aws-IMDSv2', 'default aws fixture'); const listener = serverAws.listen(0, function () { - const urlToken = `http://127.0.0.1:${ - listener.address().port - }/latest/api/token`; - const optionsToken = { - url: urlToken, - headers: { - 'X-aws-ec2-metadata-token-ttl-seconds': '300', + // First request to get API token. + const req = http.request( + { + method: 'PUT', + hostname: '127.0.0.1', + port: listener.address().port, + path: '/latest/api/token', + headers: { + 'X-aws-ec2-metadata-token-ttl-seconds': '300', + }, }, - }; - request.put( - optionsToken, - function (errorToken, responseToken, rawBodyToken) { - // token request succeded, now make real request - t.equals( - rawBodyToken, - 'AQAAAOaONNcThIsIsAfAkEtOkEn_b94UPLuLYRThIsIsAfAkEtOkEn==', - 'returns correct fake token', - ); - const url = `http://127.0.0.1:${ - listener.address().port - }/latest/dynamic/instance-identity/document`; - const options = { - url, - headers: { - 'X-aws-ec2-metadata-token': rawBodyToken, - }, - }; - request(options, function (error, response, rawBody) { - if (error) { - throw error; - } + (res) => { + const chunks = []; + res.on('data', (chunk) => { + chunks.push(chunk); + }); + res.on('end', () => { + const rawBodyToken = Buffer.concat(chunks).toString('utf8'); + t.equals( + rawBodyToken, + 'AQAAAOaONNcThIsIsAfAkEtOkEn_b94UPLuLYRThIsIsAfAkEtOkEn==', + 'returns correct fake token', + ); - const body = JSON.parse(rawBody); - t.ok(body.version, 'version set'); - listener.close(); - t.end(); + // Second request to get metadata, using that token. + http.get( + { + hostname: '127.0.0.1', + port: listener.address().port, + path: '/latest/dynamic/instance-identity/document', + headers: { + 'X-aws-ec2-metadata-token': rawBodyToken, + }, + }, + (res) => { + const chunks = []; + res.on('data', (chunk) => { + chunks.push(chunk); + }); + res.on('end', () => { + const body = JSON.parse(Buffer.concat(chunks)); + t.ok(body.version, 'version set'); + listener.close(); + t.end(); + }); + }, + ); }); }, ); + req.end(); }); }); diff --git a/test/instrumentation/modules/http/request.test.js b/test/instrumentation/modules/http/request.test.js index f77967de2b6..0ce44a492fb 100644 --- a/test/instrumentation/modules/http/request.test.js +++ b/test/instrumentation/modules/http/request.test.js @@ -20,7 +20,6 @@ var http = require('http'); var test = require('tape'); var express = require('express'); -var request = require('request'); var mockClient = require('../../../_mock_http_client'); var findObjInArray = require('../../../_utils').findObjInArray; @@ -52,7 +51,9 @@ test('request', function (t) { }); app.get('/', (req, res) => { - request(`http://localhost:${req.socket.localPort}/test`).pipe(res); + http.get(`http://localhost:${req.socket.localPort}/test`, (cres) => { + cres.pipe(res); + }); }); sendRequest(server); @@ -83,7 +84,10 @@ test('Outcome', function (t) { }); app.get('/', (req, res) => { - request(`http://localhost:${req.socket.localPort}/test`).pipe(res); + http.get(`http://localhost:${req.socket.localPort}/test`, (cres) => { + res.statusCode = cres.statusCode; + cres.pipe(res); + }); }); sendRequest(server); diff --git a/test/sanitize-field-names/_shared.js b/test/sanitize-field-names/_shared.js index 21fde0c9bff..b20aff1c6dc 100644 --- a/test/sanitize-field-names/_shared.js +++ b/test/sanitize-field-names/_shared.js @@ -5,6 +5,8 @@ */ 'use strict'; + +const http = require('http'); const querystring = require('querystring'); const mockClient = require('../_mock_http_client'); @@ -114,9 +116,42 @@ function getBodyAsObject(string) { } } +/** + * Convenience function to make an form-encoded HTTP POST request and callback + * with the body, `cb(null, res, body)`. + */ +function requestPost(url, headers, form, cb) { + const u = new URL(url); + const req = http.request( + { + method: 'POST', + hostname: u.hostname, + port: u.port, + path: u.pathname + u.search, + headers: Object.assign( + { 'content-type': 'application/x-www-form-urlencoded' }, + headers, + ), + }, + (res) => { + const chunks = []; + res.on('data', (chunk) => { + chunks.push(chunk); + }); + res.on('end', () => { + const body = Buffer.concat(chunks).toString('utf8'); + cb(null, res, body); + }); + }, + ); + req.write(querystring.encode(form)); + req.end(); +} + module.exports = { createAgentConfig, getBodyAsObject, + requestPost, resetAgent, assertRequestHeadersWithFixture, assertResponseHeadersWithFixture, diff --git a/test/sanitize-field-names/express.test.js b/test/sanitize-field-names/express.test.js index d276963b328..ae4a136ac04 100644 --- a/test/sanitize-field-names/express.test.js +++ b/test/sanitize-field-names/express.test.js @@ -8,6 +8,7 @@ const { createAgentConfig } = require('./_shared'); const agent = require('../..').start(createAgentConfig()); const { + requestPost, resetAgent, assertRequestHeadersWithFixture, assertResponseHeadersWithFixture, @@ -15,7 +16,6 @@ const { } = require('./_shared'); const test = require('tape'); -const request = require('request'); const express = require('express'); const bodyParser = require('body-parser'); const fixtures = require('./_fixtures'); @@ -52,21 +52,13 @@ function runTest( }); const server = app.listen(0, '0.0.0.0', () => { - const url = `http://${server.address().address}:${ - server.address().port - }/test`; - request.post( - url, - { - form: formFields, - headers: requestHeaders, - }, - function (error, response, body) { - t.error(error); - t.ok(body, 'received response'); - t.end(); - }, - ); + const addr = server.address(); + const url = `http://${addr.address}:${addr.port}/test`; + requestPost(url, requestHeaders, formFields, (err, _res, body) => { + t.error(err); + t.ok(body, 'received response'); + t.end(); + }); }); const done = () => { diff --git a/test/sanitize-field-names/fastify.test.js b/test/sanitize-field-names/fastify.test.js index f284704d2b6..1136faef678 100644 --- a/test/sanitize-field-names/fastify.test.js +++ b/test/sanitize-field-names/fastify.test.js @@ -15,13 +15,13 @@ if (isFastifyIncompat) { } const { + requestPost, resetAgent, assertFormsWithFixture, assertRequestHeadersWithFixture, assertResponseHeadersWithFixture, } = require('./_shared'); const test = require('tape'); -const request = require('request'); const fastify = require('fastify'); const fastifyFormbody = require('@fastify/formbody'); const fixtures = require('./_fixtures'); @@ -64,20 +64,13 @@ function runTest( throw err; } const url = `${address}/test`; - request.post( - url, - { - form: formFields, - headers: requestHeaders, - }, - function (error, response, body) { - if (error) { - t.fail(error); - } - t.ok(body, 'received response'); - t.end(); - }, - ); + requestPost(url, requestHeaders, formFields, (err, _res, body) => { + if (err) { + t.fail(err); + } + t.ok(body, 'received response'); + t.end(); + }); }); const done = () => { diff --git a/test/sanitize-field-names/hapi.test.js b/test/sanitize-field-names/hapi.test.js index 937f5d46677..76362b445c8 100644 --- a/test/sanitize-field-names/hapi.test.js +++ b/test/sanitize-field-names/hapi.test.js @@ -7,6 +7,7 @@ 'use strict'; const { + requestPost, assertRequestHeadersWithFixture, assertResponseHeadersWithFixture, assertFormsWithFixture, @@ -22,7 +23,6 @@ if (isHapiIncompat()) { } const test = require('tape'); -const request = require('request'); const Hapi = require('@hapi/hapi'); const fixtures = require('./_fixtures'); @@ -96,18 +96,11 @@ async function runTest( await server.start(); const url = server.info.uri + '/test'; - request.post( - url, - { - form: formFields, - headers: requestHeaders, - }, - function (error, response, body) { - if (error) { - t.fail(error); - } - t.ok(body, 'received response'); - t.end(); - }, - ); + requestPost(url, requestHeaders, formFields, (err, _res, body) => { + if (err) { + t.fail(err); + } + t.ok(body, 'received response'); + t.end(); + }); } diff --git a/test/sanitize-field-names/koa.test.js b/test/sanitize-field-names/koa.test.js index 0e7d2fb9b1b..eba2bc54b13 100644 --- a/test/sanitize-field-names/koa.test.js +++ b/test/sanitize-field-names/koa.test.js @@ -8,12 +8,12 @@ const { createAgentConfig } = require('./_shared'); const agent = require('../..').start(createAgentConfig()); const { + requestPost, resetAgent, assertRequestHeadersWithFixture, assertResponseHeadersWithFixture, } = require('./_shared'); const test = require('tape'); -const request = require('request'); const Koa = require('koa'); const koaBodyparser = require('koa-bodyparser'); const fixtures = require('./_fixtures'); @@ -83,19 +83,12 @@ function runTest( const url = `http://${server.address().address}:${ server.address().port }/test`; - request.post( - url, - { - form: formFields, - headers: requestHeaders, - }, - function (error, response, body) { - if (error) { - t.fail(error); - } - t.ok(body, 'received response'); - t.end(); - }, - ); + requestPost(url, requestHeaders, formFields, (err, _res, body) => { + if (err) { + t.fail(err); + } + t.ok(body, 'received response'); + t.end(); + }); }); } diff --git a/test/sanitize-field-names/restify.test.js b/test/sanitize-field-names/restify.test.js index d9120f38b77..43191bd35e2 100644 --- a/test/sanitize-field-names/restify.test.js +++ b/test/sanitize-field-names/restify.test.js @@ -15,13 +15,13 @@ if (isRestifyIncompat) { const { createAgentConfig } = require('./_shared'); const agent = require('../..').start(createAgentConfig()); const { + requestPost, resetAgent, assertRequestHeadersWithFixture, assertResponseHeadersWithFixture, assertFormsWithFixture, } = require('./_shared'); const test = require('tape'); -const request = require('request'); const restify = require('restify'); const fixtures = require('./_fixtures'); @@ -93,19 +93,12 @@ function runTest( server.listen(0, '0.0.0.0', () => { const url = `${server.url}/test`; - request.post( - url, - { - form: formFields, - headers: requestHeaders, - }, - function (error, response, body) { - if (error) { - t.fail(error); - } - t.ok(body, 'received response'); - t.end(); - }, - ); + requestPost(url, requestHeaders, formFields, (err, _res, body) => { + if (err) { + t.fail(err); + } + t.ok(body, 'received response'); + t.end(); + }); }); }