From 655c1f7f4e92e41373c03b3683e2108dfe05105a Mon Sep 17 00:00:00 2001 From: Min RK Date: Sun, 11 May 2025 08:16:39 +0200 Subject: [PATCH 1/5] switch to http-proxy-3 requires node 20, a major bump since no LTS has it --- .github/workflows/test.yml | 14 +- README.md | 2 +- lib/configproxy.js | 2 +- package-lock.json | 508 +++++++++++-------------------------- package.json | 4 +- 5 files changed, 155 insertions(+), 375 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3845ce05..d3784cca 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,7 +24,7 @@ on: jobs: # Audit dependencies for known vulnerabilities audit-dependencies: - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -50,7 +50,7 @@ jobs: npm audit --production --audit-level=moderate test: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 strategy: fail-fast: false # Do not cancel all jobs if one fails matrix: @@ -58,13 +58,11 @@ jobs: # always require at least the oldest version, as well as our # README.md file under the install section. node_version: - # Removing node 10 is dropping support for ubuntu 20.04 LTS - - "10" - - "12" - - "14" - - "16" - - "18" + # ubuntu 24.04 LTS has node 18, + # so we currently require non-distro nodejs ~everywhere + # (e.g. nodesource, containers) - "20" + - "22" - current steps: diff --git a/README.md b/README.md index 5fb5b344..94be000e 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ functionality to [JupyterHub] deployments. ## Install -Prerequisite: [Node.js](https://nodejs.org/en/download/) ≥ 10 +Prerequisite: [Node.js](https://nodejs.org/en/download/) ≥ 20 If you're installing `configurable-http-proxy` in Linux, you can follow [the instruction of nodesource](https://github.com/nodesource/distributions#installation-instructions) to install arbitrary version of Node.js. diff --git a/lib/configproxy.js b/lib/configproxy.js index 6ff1ed2d..e6661a87 100644 --- a/lib/configproxy.js +++ b/lib/configproxy.js @@ -13,7 +13,7 @@ var http = require("http"), fs = require("fs"), path = require("path"), EventEmitter = require("events").EventEmitter, - httpProxy = require("http-proxy-node16"), + httpProxy = require("http-proxy-3"), winston = require("winston"), util = require("util"), URL = require("url"), diff --git a/package-lock.json b/package-lock.json index e075cf99..4d631773 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "BSD-3-Clause", "dependencies": { "commander": "~7.2", - "http-proxy-node16": "1.0.5", + "http-proxy-3": "1.20.0", "prom-client": "14.2.0", "strftime": "~0.10.0", "winston": "~3.15.0" @@ -26,17 +26,19 @@ "ws": "^8.4.0" }, "engines": { - "node": ">= 10.0" + "node": ">= 20.0" } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -72,29 +74,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@babel/core/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -231,53 +210,48 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "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==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.17.tgz", - "integrity": "sha512-tEpjqSBGt/SFEsFikKds1sLNChKKGGR17flIgQKXH4fG6m9gTgl3gnOC1giHNyaBCSKuTfxaSzHi7UnvqiVKxg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.12.17", - "@babel/types": "^7.12.17" - } - }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", - "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -286,14 +260,15 @@ } }, "node_modules/@babel/template": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", - "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -320,38 +295,15 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -475,18 +427,6 @@ "node": ">=8" } }, - "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==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/append-transform": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", @@ -564,20 +504,6 @@ "node": ">=6" } }, - "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==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -702,10 +628,11 @@ "dev": true }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -721,6 +648,23 @@ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -821,15 +765,6 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "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==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -843,11 +778,6 @@ "node": ">=4" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -898,15 +828,16 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -1017,15 +948,6 @@ "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, - "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==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -1085,17 +1007,18 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, - "node_modules/http-proxy-node16": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/http-proxy-node16/-/http-proxy-node16-1.0.5.tgz", - "integrity": "sha512-pBBZEJ7g22pyioXL+cIf4Vfu9r5xkcre+6NIe2fSAVQn6YvrsXwy7gtkDiOzAtQUXCvgadT7QBLGapIl/98H1g==", + "node_modules/http-proxy-3": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/http-proxy-3/-/http-proxy-3-1.20.0.tgz", + "integrity": "sha512-lGheif1UzSJ4j1MvvlWUA8u95tFnNzMMhtqOFIASZ9wD4UrLxp+F0QCR4BbE/ddrSpw+i+iJiO0oTH/9mEsriw==", + "hasInstallScript": true, + "license": "MIT", "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "debug": "^4.4.0", + "follow-redirects": "^1.15.9" }, "engines": { - "node": ">=8.0.0" + "node": ">=20.0.0" } }, "node_modules/imurmurhash": { @@ -1277,29 +1200,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1345,7 +1245,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "3.14.1", @@ -1660,6 +1561,13 @@ "node": ">=8" } }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -1735,11 +1643,6 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -1944,18 +1847,6 @@ "node": ">=0.8.0" } }, - "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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/tdigest": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.1.tgz", @@ -1983,15 +1874,6 @@ "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -2243,13 +2125,14 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "requires": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" } }, "@babel/core": { @@ -2275,21 +2158,6 @@ "source-map": "^0.5.0" }, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -2410,54 +2278,45 @@ } }, "@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true }, "@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==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true }, "@babel/helpers": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.17.tgz", - "integrity": "sha512-tEpjqSBGt/SFEsFikKds1sLNChKKGGR17flIgQKXH4fG6m9gTgl3gnOC1giHNyaBCSKuTfxaSzHi7UnvqiVKxg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", "dev": true, "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.12.17", - "@babel/types": "^7.12.17" + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" } }, - "@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "@babel/parser": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/types": "^7.27.1" } }, - "@babel/parser": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", - "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", - "dev": true - }, "@babel/template": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", - "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" } }, "@babel/traverse": { @@ -2476,34 +2335,16 @@ "@babel/types": "^7.23.9", "debug": "^4.3.1", "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" } }, "@colors/colors": { @@ -2600,15 +2441,6 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "append-transform": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", @@ -2677,17 +2509,6 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -2805,9 +2626,9 @@ "dev": true }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -2821,6 +2642,14 @@ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "requires": { + "ms": "^2.1.3" + } + }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -2908,23 +2737,12 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "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==", - "dev": true - }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -2963,9 +2781,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==" }, "foreground-child": { "version": "2.0.0", @@ -3033,12 +2851,6 @@ "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, - "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==", - "dev": true - }, "hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -3094,14 +2906,13 @@ } } }, - "http-proxy-node16": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/http-proxy-node16/-/http-proxy-node16-1.0.5.tgz", - "integrity": "sha512-pBBZEJ7g22pyioXL+cIf4Vfu9r5xkcre+6NIe2fSAVQn6YvrsXwy7gtkDiOzAtQUXCvgadT7QBLGapIl/98H1g==", + "http-proxy-3": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/http-proxy-3/-/http-proxy-3-1.20.0.tgz", + "integrity": "sha512-lGheif1UzSJ4j1MvvlWUA8u95tFnNzMMhtqOFIASZ9wD4UrLxp+F0QCR4BbE/ddrSpw+i+iJiO0oTH/9mEsriw==", "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "debug": "^4.4.0", + "follow-redirects": "^1.15.9" } }, "imurmurhash": { @@ -3246,21 +3057,6 @@ "source-map": "^0.6.1" }, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3533,6 +3329,12 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -3590,11 +3392,6 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -3737,15 +3534,6 @@ "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", "dev": true }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, "tdigest": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.1.tgz", @@ -3770,12 +3558,6 @@ "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", diff --git a/package.json b/package.json index 7c8c4d1d..eecf54c3 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "commander": "~7.2", - "http-proxy-node16": "1.0.5", + "http-proxy-3": "1.20.0", "prom-client": "14.2.0", "strftime": "~0.10.0", "winston": "~3.15.0" @@ -23,7 +23,7 @@ "ws": "^8.4.0" }, "engines": { - "node": ">= 10.0" + "node": ">= 20.0" }, "engineStrict": true, "main": "index.js", From a41648e7f5a577f6bcc316849949e8c0f11b5de8 Mon Sep 17 00:00:00 2001 From: Min RK Date: Sun, 11 May 2025 20:08:54 +0200 Subject: [PATCH 2/5] http-proxy-3 1.20.2, node 18 --- .github/workflows/test.yml | 5 ++--- package-lock.json | 18 +++++++++--------- package.json | 4 ++-- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d3784cca..beb0831a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -58,9 +58,8 @@ jobs: # always require at least the oldest version, as well as our # README.md file under the install section. node_version: - # ubuntu 24.04 LTS has node 18, - # so we currently require non-distro nodejs ~everywhere - # (e.g. nodesource, containers) + # Removing node 18 is dropping support for ubuntu 24.04 LTS, debian 12 + - "18" - "20" - "22" - current diff --git a/package-lock.json b/package-lock.json index 4d631773..67bda95d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "BSD-3-Clause", "dependencies": { "commander": "~7.2", - "http-proxy-3": "1.20.0", + "http-proxy-3": "1.20.2", "prom-client": "14.2.0", "strftime": "~0.10.0", "winston": "~3.15.0" @@ -26,7 +26,7 @@ "ws": "^8.4.0" }, "engines": { - "node": ">= 20.0" + "node": ">= 18" } }, "node_modules/@babel/code-frame": { @@ -1008,9 +1008,9 @@ "dev": true }, "node_modules/http-proxy-3": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/http-proxy-3/-/http-proxy-3-1.20.0.tgz", - "integrity": "sha512-lGheif1UzSJ4j1MvvlWUA8u95tFnNzMMhtqOFIASZ9wD4UrLxp+F0QCR4BbE/ddrSpw+i+iJiO0oTH/9mEsriw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/http-proxy-3/-/http-proxy-3-1.20.2.tgz", + "integrity": "sha512-R22uOUERxqML90sutMCHDCX3vUcp2B981hqVxXRwBHYO5GDplsHq3+hLV6s6wKz0GTXOK4avNS/d8cXJqDru3Q==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -1018,7 +1018,7 @@ "follow-redirects": "^1.15.9" }, "engines": { - "node": ">=20.0.0" + "node": ">=18" } }, "node_modules/imurmurhash": { @@ -2907,9 +2907,9 @@ } }, "http-proxy-3": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/http-proxy-3/-/http-proxy-3-1.20.0.tgz", - "integrity": "sha512-lGheif1UzSJ4j1MvvlWUA8u95tFnNzMMhtqOFIASZ9wD4UrLxp+F0QCR4BbE/ddrSpw+i+iJiO0oTH/9mEsriw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/http-proxy-3/-/http-proxy-3-1.20.2.tgz", + "integrity": "sha512-R22uOUERxqML90sutMCHDCX3vUcp2B981hqVxXRwBHYO5GDplsHq3+hLV6s6wKz0GTXOK4avNS/d8cXJqDru3Q==", "requires": { "debug": "^4.4.0", "follow-redirects": "^1.15.9" diff --git a/package.json b/package.json index eecf54c3..b37f7179 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "commander": "~7.2", - "http-proxy-3": "1.20.0", + "http-proxy-3": "1.20.2", "prom-client": "14.2.0", "strftime": "~0.10.0", "winston": "~3.15.0" @@ -23,7 +23,7 @@ "ws": "^8.4.0" }, "engines": { - "node": ">= 20.0" + "node": ">= 18" }, "engineStrict": true, "main": "index.js", From 377448299e3fa9a231a6846e590b0b0e83057429 Mon Sep 17 00:00:00 2001 From: Min RK Date: Sun, 11 May 2025 20:10:21 +0200 Subject: [PATCH 3/5] node 18 in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 94be000e..ba05a7bf 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ functionality to [JupyterHub] deployments. ## Install -Prerequisite: [Node.js](https://nodejs.org/en/download/) ≥ 20 +Prerequisite: [Node.js](https://nodejs.org/en/download/) ≥ 18 If you're installing `configurable-http-proxy` in Linux, you can follow [the instruction of nodesource](https://github.com/nodesource/distributions#installation-instructions) to install arbitrary version of Node.js. From b6c44369fe361c6a3a2b334c6c516493876e09dd Mon Sep 17 00:00:00 2001 From: Min RK Date: Tue, 13 May 2025 12:04:56 +0200 Subject: [PATCH 4/5] update to use URL instead of deprecated url.parse --- lib/configproxy.js | 68 ++++++++++++++++++++++------------------------ lib/testutil.js | 10 +++---- 2 files changed, 36 insertions(+), 42 deletions(-) diff --git a/lib/configproxy.js b/lib/configproxy.js index e6661a87..77c70d29 100644 --- a/lib/configproxy.js +++ b/lib/configproxy.js @@ -16,9 +16,7 @@ var http = require("http"), httpProxy = require("http-proxy-3"), winston = require("winston"), util = require("util"), - URL = require("url"), defaultLogger = require("./log").defaultLogger, - querystring = require("querystring"), metrics = require("./metrics"); function bound(that, method) { @@ -311,23 +309,20 @@ class ConfigurableProxy extends EventEmitter { } // GET returns routing table as JSON dict var that = this; - var parsed = URL.parse(req.url); + var parsed = new URL(req.url, "https://example.com"); var inactiveSince = null; - if (parsed.query) { - var query = querystring.parse(parsed.query); - if (query.inactive_since !== undefined) { - // camelCaseify - query.inactiveSince = query.inactive_since; - } - - if (query.inactiveSince !== undefined) { - var timestamp = Date.parse(query.inactiveSince); - if (isFinite(timestamp)) { - inactiveSince = new Date(timestamp); - } else { - fail(req, res, 400, "Invalid datestamp '" + query.inactiveSince + "' must be ISO8601."); - return; - } + var inactiveSinceParam = parsed.searchParams.get("inactiveSince"); + if (!inactiveSinceParam) { + // camelCaseify old inactive_since + inactiveSinceParam = parsed.searchParams.get("inactive_since"); + } + if (inactiveSinceParam) { + var timestamp = Date.parse(inactiveSinceParam); + if (isFinite(timestamp)) { + inactiveSince = new Date(timestamp); + } else { + fail(req, res, 400, "Invalid datestamp '" + inactiveSinceParam + "' must be ISO8601."); + return; } } res.writeHead(200, { "Content-Type": "application/json" }); @@ -393,7 +388,7 @@ class ConfigurableProxy extends EventEmitter { var metricsTimerEnd = this.metrics.findTargetForReqSummary.startTimer(); // return proxy target for a given url path var basePath = this.hostRouting ? "/" + parseHost(req) : ""; - var path = basePath + decodeURIComponent(URL.parse(req.url).pathname); + var path = basePath + decodeURIComponent(new URL(req.url, "http://example.com").pathname); var route = await this._routes.getTarget(path); metricsTimerEnd(); if (route) { @@ -460,26 +455,27 @@ class ConfigurableProxy extends EventEmitter { return; } if (this.errorTarget) { - var urlSpec = URL.parse(this.errorTarget); + var urlSpec = new URL(this.errorTarget); // error request is $errorTarget/$code?url=$requestUrl - urlSpec.search = "?" + querystring.encode({ url: req.url }); + urlSpec.searchParams.set("url", req.url); urlSpec.pathname = urlSpec.pathname + code.toString(); var secure = /https/gi.test(urlSpec.protocol) ? true : false; - var url = URL.format(urlSpec); - this.log.debug("Requesting custom error page: %s", urlSpec.format()); + var url = urlSpec.toString(); + this.log.debug("Requesting custom error page: %s", url); - // construct request target from urlSpec - var target = URL.parse(url); - target.method = "GET"; + // construct request options + var options = { + method: "GET", + }; // add client SSL config if error target is using https if (secure && this.options.clientSsl) { - target.key = this.options.clientSsl.key; - target.cert = this.options.clientSsl.cert; - target.ca = this.options.clientSsl.ca; + options.key = this.options.clientSsl.key; + options.cert = this.options.clientSsl.cert; + options.ca = this.options.clientSsl.ca; } - var errorRequest = (secure ? https : http).request(target, function (upstream) { + var errorRequest = (secure ? https : http).request(url, options, function (upstream) { if (res.writableEnded) return; // response already done ["content-type", "content-encoding"].map(function (key) { if (!upstream.headers[key]) return; @@ -556,15 +552,15 @@ class ConfigurableProxy extends EventEmitter { req.url = req.url.slice(prefix.length); } - target = URL.parse(target); + target = new URL(target); + var proxyOptions = { target: target }; if (that.options.clientSsl) { - target.key = that.options.clientSsl.key; - target.cert = that.options.clientSsl.cert; - target.ca = that.options.clientSsl.ca; + proxyOptions.key = that.options.clientSsl.key; + proxyOptions.cert = that.options.clientSsl.cert; + proxyOptions.ca = that.options.clientSsl.ca; } // add config argument - var proxyOptions = { target: target }; if (target.protocol.slice(-2) === "s:") { proxyOptions.agent = that.httpsAgent; } else { @@ -657,7 +653,7 @@ class ConfigurableProxy extends EventEmitter { function pushPathArg(arg) { args.push(arg === undefined ? arg : decodeURIComponent(arg)); } - var path = URL.parse(req.url).pathname; + var path = new URL(req.url, "https://example.com").pathname; for (var i = 0; i < this.apiHandlers.length; i++) { var pat = this.apiHandlers[i][0]; var match = pat.exec(path); diff --git a/lib/testutil.js b/lib/testutil.js index b391f729..eaca2be3 100644 --- a/lib/testutil.js +++ b/lib/testutil.js @@ -1,10 +1,8 @@ "use strict"; var http = require("http"); -var URL = require("url"); var extend = require("util")._extend; var WebSocketServer = require("ws").WebSocketServer; -var querystring = require("querystring"); var configproxy = require("./configproxy"); var defaultLogger = require("./log").defaultLogger; @@ -112,17 +110,17 @@ exports.setupProxy = function (port, options, paths) { if (options.errorTarget) { countdown++; var errorServer = http.createServer(function (req, res) { - var parsed = URL.parse(req.url); - var query = querystring.parse(parsed.query); + var query = new URL(req.url, "http://example.com").searchParams; res.setHeader("Content-Type", "text/plain"); req.on("data", function () {}); req.on("end", function () { - res.write(query.url); + res.write(query.get("url")); res.end(); }); }); errorServer.on("listening", onlisten); - errorServer.listen(URL.parse(options.errorTarget).port, ip); + const errorUrl = new URL(options.errorTarget); + errorServer.listen(errorUrl.port, ip); servers.push(errorServer); } From 57376a9f90cd467f60ba658dd6dff72023670ae8 Mon Sep 17 00:00:00 2001 From: Min RK Date: Tue, 13 May 2025 16:25:24 +0200 Subject: [PATCH 5/5] bump http-proxy-3 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 67bda95d..fa35a1d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "BSD-3-Clause", "dependencies": { "commander": "~7.2", - "http-proxy-3": "1.20.2", + "http-proxy-3": "1.20.3", "prom-client": "14.2.0", "strftime": "~0.10.0", "winston": "~3.15.0" @@ -1008,9 +1008,9 @@ "dev": true }, "node_modules/http-proxy-3": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/http-proxy-3/-/http-proxy-3-1.20.2.tgz", - "integrity": "sha512-R22uOUERxqML90sutMCHDCX3vUcp2B981hqVxXRwBHYO5GDplsHq3+hLV6s6wKz0GTXOK4avNS/d8cXJqDru3Q==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/http-proxy-3/-/http-proxy-3-1.20.3.tgz", + "integrity": "sha512-+sN2kcpOQhUeONuS9NdbwU4Hm33+C6nWYxJaT976JgeFioMz4mt3aOhujRFh7Uo1ynMSmSGBldYbnJb7T5WLSQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -2907,9 +2907,9 @@ } }, "http-proxy-3": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/http-proxy-3/-/http-proxy-3-1.20.2.tgz", - "integrity": "sha512-R22uOUERxqML90sutMCHDCX3vUcp2B981hqVxXRwBHYO5GDplsHq3+hLV6s6wKz0GTXOK4avNS/d8cXJqDru3Q==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/http-proxy-3/-/http-proxy-3-1.20.3.tgz", + "integrity": "sha512-+sN2kcpOQhUeONuS9NdbwU4Hm33+C6nWYxJaT976JgeFioMz4mt3aOhujRFh7Uo1ynMSmSGBldYbnJb7T5WLSQ==", "requires": { "debug": "^4.4.0", "follow-redirects": "^1.15.9" diff --git a/package.json b/package.json index b37f7179..6a80d69f 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "commander": "~7.2", - "http-proxy-3": "1.20.2", + "http-proxy-3": "1.20.3", "prom-client": "14.2.0", "strftime": "~0.10.0", "winston": "~3.15.0"