Skip to content

Commit effc51c

Browse files
committed
fixup! http: support http proxy for fetch under NODE_USE_ENV_PROXY
1 parent 2bf26eb commit effc51c

13 files changed

+427
-80
lines changed

doc/api/cli.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3528,6 +3528,21 @@ If `value` equals `'0'`, certificate validation is disabled for TLS connections.
35283528
This makes TLS, and HTTPS by extension, insecure. The use of this environment
35293529
variable is strongly discouraged.
35303530

3531+
### `NODE_USE_ENV_PROXY=1`
3532+
3533+
<!-- YAML
3534+
added: REPLACEME
3535+
-->
3536+
3537+
> Stability: 1.1 - Active Development
3538+
3539+
When enabled, Node.js parses the `HTTP_PROXY`, `HTTPS_PROXY` and `NO_PROXY`
3540+
environment variables during startup, and tunnels requests over the
3541+
specified proxy.
3542+
3543+
This currently only affects requests sent over `fetch()`. Support for other
3544+
built-in `http` and `https` methods is under way.
3545+
35313546
### `NODE_V8_COVERAGE=dir`
35323547

35333548
When set, Node.js will begin outputting [V8 JavaScript code coverage][] and

lib/internal/process/pre_execution.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,16 @@ function prepareExecution(options) {
157157

158158
function setupHttpProxy() {
159159
if (process.env.NODE_USE_ENV_PROXY &&
160-
(process.env.HTTP_PROXY || process.env.HTTPS_PROXY)) {
160+
(process.env.HTTP_PROXY || process.env.HTTPS_PROXY ||
161+
process.env.http_proxy || process.env.https_proxy)) {
161162
const { setGlobalDispatcher, EnvHttpProxyAgent } = require('internal/deps/undici/undici');
162163
const envHttpProxyAgent = new EnvHttpProxyAgent();
163164
setGlobalDispatcher(envHttpProxyAgent);
164-
// TODO(joyeecheung): handle http/https global agents and perhaps Agent constructor
165-
// behaviors.
165+
// TODO(joyeecheung): This currently only affects fetch. Implement handling in the
166+
// http/https Agent constructor too.
167+
// TODO(joyeecheung): This is currently guarded with NODE_USE_ENV_PROXY. Investigate whether
168+
// it's possible to enable it by default without stepping on other existing libraries that
169+
// sets the global dispatcher or monkey patches the global agent.
166170
}
167171
}
168172

test/common/proxy-server.js

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
'use strict';
2+
3+
const net = require('net');
4+
const http = require('http');
5+
const assert = require('assert');
6+
7+
function logRequest(logs, req) {
8+
logs.push({
9+
method: req.method,
10+
url: req.url,
11+
headers: { ...req.headers },
12+
});
13+
}
14+
15+
// This creates a minimal proxy server that logs the requests it gets
16+
// to an array before performing proxying.
17+
exports.createProxyServer = function() {
18+
const logs = [];
19+
20+
const proxy = http.createServer();
21+
proxy.on('request', (req, res) => {
22+
logRequest(logs, req);
23+
const [hostname, port] = req.headers.host.split(':');
24+
const targetPort = port || 80;
25+
26+
const options = {
27+
hostname: hostname,
28+
port: targetPort,
29+
path: req.url,
30+
method: req.method,
31+
headers: req.headers,
32+
};
33+
34+
const proxyReq = http.request(options, (proxyRes) => {
35+
res.writeHead(proxyRes.statusCode, proxyRes.headers);
36+
proxyRes.pipe(res, { end: true });
37+
});
38+
39+
proxyReq.on('error', (err) => {
40+
logs.push({ error: err, source: 'proxy request' });
41+
res.writeHead(500);
42+
res.end('Proxy error: ' + err.message);
43+
});
44+
45+
req.pipe(proxyReq, { end: true });
46+
});
47+
48+
proxy.on('connect', (req, res, head) => {
49+
logRequest(logs, req);
50+
51+
const [hostname, port] = req.url.split(':');
52+
const proxyReq = net.connect(port, hostname, () => {
53+
res.write(
54+
'HTTP/1.1 200 Connection Established\r\n' +
55+
'Proxy-agent: Node.js-Proxy\r\n' +
56+
'\r\n',
57+
);
58+
proxyReq.write(head);
59+
res.pipe(proxyReq);
60+
proxyReq.pipe(res);
61+
});
62+
63+
proxyReq.on('error', (err) => {
64+
logs.push({ error: err, source: 'proxy request' });
65+
res.write('HTTP/1.1 500 Connection Error\r\n\r\n');
66+
res.end('Proxy error: ' + err.message);
67+
});
68+
});
69+
70+
proxy.on('error', (err) => {
71+
logs.push({ error: err, source: 'proxy server' });
72+
});
73+
74+
return { proxy, logs };
75+
};
76+
77+
exports.checkProxiedRequest = async function(envExtension, expectation) {
78+
const { spawnPromisified } = require('./');
79+
const fixtures = require('./fixtures');
80+
const { code, signal, stdout, stderr } = await spawnPromisified(
81+
process.execPath,
82+
[fixtures.path('fetch-and-log.mjs')], {
83+
env: {
84+
...process.env,
85+
...envExtension,
86+
},
87+
});
88+
89+
assert.deepStrictEqual({
90+
stderr: stderr.trim(),
91+
stdout: stdout.trim(),
92+
code,
93+
signal,
94+
}, {
95+
stderr: '',
96+
code: 0,
97+
signal: null,
98+
...expectation,
99+
});
100+
};

test/fixtures/fetch-and-log.mjs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
const address = process.env.SERVER_ADDRESS;
2-
const response = await fetch(address);
1+
const response = await fetch(process.env.FETCH_URL);
32
const body = await response.text();
43
console.log(body);

test/fixtures/keys/Makefile

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,31 @@ fake-startcom-root-cert.pem: fake-startcom-root.cnf \
244244
echo '01' > fake-startcom-root-serial
245245
touch fake-startcom-root-database.txt
246246

247+
test-localhost-ca.key:
248+
openssl genrsa -out test-localhost-ca.key 4096
249+
250+
test-localhost-ca.pem: test-localhost-ca.key
251+
openssl req -x509 -new \
252+
-key test-localhost-ca.key \
253+
-days 9999 \
254+
-subj '/CN=NodeJS Test CA' \
255+
-out test-localhost-ca.pem
256+
257+
test-localhost-key.pem: test-localhost-ca.pem
258+
openssl req -newkey rsa:4096 \
259+
-keyout test-localhost-key.pem \
260+
-out test-localhost.csr \
261+
-nodes -subj '/CN=localhost'
262+
263+
test-localhost-cert.pem: test-localhost-key.pem
264+
openssl x509 -req -in test-localhost.csr \
265+
-CA test-localhost-ca.pem \
266+
-CAkey test-localhost-ca.key \
267+
-CAcreateserial \
268+
-days 99999 \
269+
-out test-localhost-cert.pem
270+
271+
rm test-localhost.csr
247272

248273
intermediate-ca-key.pem:
249274
openssl genrsa -out intermediate.key 2048
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIJJwIBAAKCAgEA8FmOEci9TxtSXAz737A1w05Qz/08aDrcuN/cuiahY4eibjYH
3+
A8Puv2WPUWRmmUHk1i5lD8G8g0I+LmzpXHE4u4NGt8O2FYpNkTe6/K+SuBB0tPWS
4+
ysngVAGHrYmhntldn/O3hIkLYWZ1BIQOwcyPC+EBUpqzX8ZcAMim52cWgPJw8gVW
5+
XcA43/tuRFVDw052cp7D7bfJkfEHJyIcdBaUmm3ooo1gBLyBL5cUJGkzkQBblZ/L
6+
r7cEptEkKrGhSvUcjYWe8heVyYlaugMmj5szsqIyDNHy3kWQlIfEdtSZX1UBZ+rl
7+
UKG5ygixdE4vgMoOTl8Rn3Wl+/enkwMxtX/gIGM4bz0Sp2hKK4YOr1wOHwnQ72P7
8+
VqiBENK0plgJPrI/Xu+ftyZkUh6cO5j/dHCW7uy7jfVzWmbacuK2sqw4XRhXnBWA
9+
avRNh0BC3xsz3yi/c6H8jwfXyPTLO+gbU9/x0hrVU/lEEP4eYfPD6KOeBCZXHRr3
10+
32LlI6vmQZZUPMzXHQVFE8iUfV+pJkPAO+WkbL40OQPzIA7eYhdqVo8Gv9mFpOxH
11+
qjenTjabfVKlEmR7rL1FUyLBwMWpHboXH7EmXFCMQAlWU8bIO0W+cRJUpsCdjgA5
12+
RTsEj5xdOIMSYJX4FAnSYHhazp9ntIsVQOBMQU/MsUyGTLjWitH/xun2m3sCAwEA
13+
AQKCAgAVxBZwl9xFALVprqdUr5F+2WXKICXLTqFUgLlthjgRWmQkVPI3rhO984WS
14+
GmSMNoJxvwvZ7HKU9HfLHoPXok0/9fh+hdPEiZzSrNhbL886qgrXpHGhubx9/xF5
15+
bsBbMVYgOSMCdqK4NF4ehZMMi+jca4kCIQ5jewQz8ffjdtt72/jMgh07KkA8UHnA
16+
6HPViRKC+MvHiGBRviEmsxkejjjw70klB2aNp0CPvb/OOFS6Ke0hVLJOfGWIceIz
17+
l5iCwEXQrywgwnAHK1AzDjv8v1JkN/oOXSkAZg5c1Rq+pCwrjPguoAAaWDsKB9WC
18+
Md5tbF71S/i9lxrsAZaEYsKqrCTwvPjJDeE9/0obbkaHEwv/XneQfaB6oXQHC1mx
19+
JXjJIT3cQSv5vpp4QMvrDXtYmswEmTFaJoOMbl1Sc3Z+PXL98W7HIaCJU4IedXfO
20+
65JVlP2x1C0cjBZa7LbAHwKP3nhG/ceyUOZ9Grx1CK9rZtoH2Q/lDKdQDoXo242m
21+
07y3Q/eEPKp7SNm45kj464AHwHHOxoGKIg7zU0b7SX2ponKAlFTjpb3MlHA8rKeN
22+
eI6IgTJx3Vs+fIVAQn0BxpF7WA+rdy/vQUQv7qcxBXbJSnw6a/Jp75f4zgRvOjNi
23+
zhBCL6Ttw/RUwKbtBJafUouzmsB6wofbQUIVA83UIoU9uFayYQKCAQEA/7SrvwDB
24+
q16U18xurxAKG/jHENrSgdKOQhU4VOI3jYsHBwhOMi7cVoSm+hHmcBGuRe85VKGt
25+
QQ95cnivt3TRVB9KLXzjV5E8JN4tOV3AEP3CaWup7nkxXf9y17OVJ/1tYBalULep
26+
dTCnuLI0JQHail0FMeHhId4KNJhN96FFyHlKgc3PVSta45l+QnhKv/97rGSHB0ik
27+
qLUa3rUUpEe7h0DjtPsqbUScZJtafrFCD/PKdHwAEiAncaYZkxU/fV5Mwt7KwOap
28+
uFKl3A92Ld9vSJqmgbBvfWUN4LqOjRryTkMXH0M0V9gL0Rz9t/H6hW3Gfp4t5IPV
29+
UjgJkiWtuSUqSwKCAQEA8KBcPoVURHFQ35sX7rm9WNzRW8FO+EjHWOezaGQJV49Q
30+
JJ+9Cki/RTdgdGFzrySdjZEi0HOwmiLCiceqMF1uVLAJFCd2W1NDfXfqdSC8j5If
31+
kCxyp/l8U04vu7Qu/rAiu2fDYUyyBHuw82dznAI6/P8MiuisATDhPhY/0iJsRNFp
32+
mpkLHIniWBfMvBioA7eF3kCtu+sUg8fxlIrZ9Zwp2uWPHDwNIVn6B/6T66H8bLsq
33+
4yh8GHMnNPyqBU8AycH0xf5Fp4cIyRg2clya0kat3Srk/f/TBhPqLQ0eRhBD4jU1
34+
H/R2qcbiOnG2CoVP0yqAudzet0Z6FH+1uncuj2SVkQKCAQAu5/+RXBwqyYDYTUII
35+
jxKrqukpaFqxQeSirq3UtGKoblZtrdJaVkpI/LB8swfoivXDEm0b30Se6K3Il+bz
36+
6lPz8IF08rHpgFTeFnuJSG9RLpuZJwzXGBg8O/3fH6w+17hWphDRS7+kJba+pMH3
37+
/+0M8J9hVSQtSEPq/f1fbZAVhFpskUp1Pyy/D4sful1L9xvCtfYnGeZKpF43eFQ/
38+
BoGaAAdFTcWsoadmtTDWiMGrl3cOAykoKgnSSTvrxTwOTVwbay8aT7XWgCK4yYVO
39+
SOxrDyN4Kttozz7KeK5pqAXG4Xu+Wl+htZoFVCIeuh7QlyCQXYfhoWViXbEzxAGo
40+
Mu8dAoIBAEK/+VbOnaWu2YRt/aGXnNL9zoXphgKSDdq3y6j1tzG268B9H2+u5oBI
41+
8FTYg8LeIWaYEFRLA35+jgCyhp+MC4MqohoZKFgFLP+tODjtr+ET4/WWnufB6Z8i
42+
XVNwlGjKa5gZHLXtFKTxuxCKbiOk6sAr8ErIaI6cBJ+4hFPCgM5GWUktk0uDZGqT
43+
j5POMy10x4nz3z315Gb6HCXcrsHXZDT44U4vymSqFRYKpPYEpYV0Fl2VaXdO2l10
44+
iaWXWNyfFUunUaM7blB6iwAGeFxEhw6HS6a6RMu20otUzEUbVfl2URpgMlq+dRtJ
45+
V/prKM2nSLZGcvHcdxkgpETpstzMRkECggEASY6bOoxIINw+DvBrXg75P67Jhx8j
46+
p2kyswFVYrRg7GYPc0zbuAO8lrbD/0y5jTXydW7WLDY6m29myh4CzuM0NP40AR1/
47+
thWVaLvu/iwZoxLZ5/D1cAMvNnYeeBJ38Ub/WmpAXBZXbWhQyGYfDw7K0iEoRX7t
48+
r02Q6K0ayZBd1lmjN6oYv5L8dBy+pYTRLJ4+Tnynz+xDCI8TfU+BmL9hoD+oMzDQ
49+
RVLIIttcVXDDlzaPMYPG0WzNSIwMazZ7PJIRDK9oJ7CQ0K+/fD4Vu7D8FT7rKV2P
50+
llFp7XpHL2g4fTDWLqgp7gTMo68yi6CKYrR+Iq1eXqyXfBC+LCajPXw5ig==
51+
-----END RSA PRIVATE KEY-----
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFFTCCAv2gAwIBAgIUH7mpOF2yS9gN/YRzfxdU/poeWuwwDQYJKoZIhvcNAQEL
3+
BQAwGTEXMBUGA1UEAwwOTm9kZUpTIFRlc3QgQ0EwIBcNMjUwMzEwMTc0MTQwWhgP
4+
MjA1MjA3MjUxNzQxNDBaMBkxFzAVBgNVBAMMDk5vZGVKUyBUZXN0IENBMIICIjAN
5+
BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8FmOEci9TxtSXAz737A1w05Qz/08
6+
aDrcuN/cuiahY4eibjYHA8Puv2WPUWRmmUHk1i5lD8G8g0I+LmzpXHE4u4NGt8O2
7+
FYpNkTe6/K+SuBB0tPWSysngVAGHrYmhntldn/O3hIkLYWZ1BIQOwcyPC+EBUpqz
8+
X8ZcAMim52cWgPJw8gVWXcA43/tuRFVDw052cp7D7bfJkfEHJyIcdBaUmm3ooo1g
9+
BLyBL5cUJGkzkQBblZ/Lr7cEptEkKrGhSvUcjYWe8heVyYlaugMmj5szsqIyDNHy
10+
3kWQlIfEdtSZX1UBZ+rlUKG5ygixdE4vgMoOTl8Rn3Wl+/enkwMxtX/gIGM4bz0S
11+
p2hKK4YOr1wOHwnQ72P7VqiBENK0plgJPrI/Xu+ftyZkUh6cO5j/dHCW7uy7jfVz
12+
WmbacuK2sqw4XRhXnBWAavRNh0BC3xsz3yi/c6H8jwfXyPTLO+gbU9/x0hrVU/lE
13+
EP4eYfPD6KOeBCZXHRr332LlI6vmQZZUPMzXHQVFE8iUfV+pJkPAO+WkbL40OQPz
14+
IA7eYhdqVo8Gv9mFpOxHqjenTjabfVKlEmR7rL1FUyLBwMWpHboXH7EmXFCMQAlW
15+
U8bIO0W+cRJUpsCdjgA5RTsEj5xdOIMSYJX4FAnSYHhazp9ntIsVQOBMQU/MsUyG
16+
TLjWitH/xun2m3sCAwEAAaNTMFEwHQYDVR0OBBYEFGO1Lm7z5rFliehB9+poTkfT
17+
Ein6MB8GA1UdIwQYMBaAFGO1Lm7z5rFliehB9+poTkfTEin6MA8GA1UdEwEB/wQF
18+
MAMBAf8wDQYJKoZIhvcNAQELBQADggIBAJxAYnA1IIv9pv5gYo0WFIh6Cb354mk3
19+
t9rMAyhzTBoTBtgJrXo/xyk4HkL2URYxW+280SJUBiB0fv5SXzUcwenhtplS1jJe
20+
LoUN5/8aIwhNnL3lq8iV73cxEcKT/UTOY393akr/oqcGGDdc2Rcj+GvBzpFVs00w
21+
5WXEhOYpOsK04U3XghbuMIdU37NaG9jVouUXhzpsm9xmkEMTvD/YFS4/Q1waCpxw
22+
ywChZ2sEX+zZvM9a1vfA+fc6JqH69cC6xfT9gZcWF90WH8ewsm+5I1jsDYLBMdl7
23+
15FVkoQRCTeMn12fyfWdVBGTrPR1De8fwnALMBsajqp8yOqnS2RJA10NGkZn5c0M
24+
m5sVi4pSfmx3AWJkNq5R7KT+3Vi7TAVoJw9MirFdC/VWF7k+iEwmu4SA7QtDlYlm
25+
MV6R+Kaa0e87HEAcxL03SI10YXX4L7skdfG4j/pYwdU4uI/7UPhLT3Do5MMJMC6H
26+
elaz5iSCykH2yPN0R0pLXeRtODLCD0MxFiCQZ5Rplr2PwW6d96Pfl1WhmJmfkUXe
27+
5TJP7ijF5Z1UVPKOYTFVOa9A9BhjNRvYnxRNqMw3wTVi7fBWTTdVxh4LRC4Tw6qE
28+
RZMYtNq2Y2GzV0I8P8ukH0XZdp3TxMyRNL40miq2UHnmcRYQZc08NSq0cSqJWWDJ
29+
6q+wUyT5B+iS
30+
-----END CERTIFICATE-----
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0A80D82186AD73F90DA52BA942ABBB1A2D4524F3
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIEtjCCAp4CFAqA2CGGrXP5DaUrqUKruxotRSTzMA0GCSqGSIb3DQEBCwUAMBkx
3+
FzAVBgNVBAMMDk5vZGVKUyBUZXN0IENBMCAXDTI1MDMxMDE3NDE0MFoYDzIyOTgx
4+
MjIzMTc0MTQwWjAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEB
5+
AQUAA4ICDwAwggIKAoICAQDCJ1/GJ51dH2TMh73PoNpHiFO+SutbDBeDveRLdOS+
6+
c+CvkDKQMmDi1uRsJUxZAf3DeNS7SHey7gnNiZ3a+iZvelFfhU3zKughDzec168Y
7+
Nr2h1ueZFj7PX6ooQzoCnSUXDJPdFzokzha7Flq8+uxS8kK3I1XxoNOgfiNmSjmj
8+
A8BpSd0eN/hwpNHgwghkJSpriJjhNLJ9R/4aXiPbmJ77CET/vffGVtkF1hguYklh
9+
sbTAG+BirVpae2WuXGqY/uEuQEr8C+VqJEiUiLc14cSUFlRDWCRM7P4QMvX89dAn
10+
aISD4cyrMqj7GfayquQR8q7qGoabOvDihxXl0CpVXzMVsCmiozXAv8l7zAE2MY0q
11+
KMgCJD+B9xkgzzQc6QMNItXt1o7l29mIYMj9VMwwiCESj/tDgqHqvgVf6WeEEfeQ
12+
zYl1hGKf7kLq86awMqkcWhTFbB80Z9atukiwk/OLVZZVwfgemJXQQkp4FaH/jaqR
13+
8UTrl1jTC4juLgITYXQK9BRPenii1l+Ug94YYgZ3T7/5HaBqE3YpBZodZCxtqpU6
14+
BhXokPu+NXW6pqkjJW3vKuSt/m1LIhldlnUOZNZz4iafOWSIWhD8N5pU9h3pfDXI
15+
pu7e7PIaHLn7JD47B6efhn2NrATn3dLGRB9QPvOfrEy5ncY6daEx6Ek5czQR48QU
16+
CQIDAQABMA0GCSqGSIb3DQEBCwUAA4ICAQCoxbHSt6QGxhRfro+jEhoswULILF78
17+
+IyLsK2TA+PdBrv+Ta07caPeOkZCVGH3RspPt9zXJ/uXDFz2lnbz3wbPd17xNpEV
18+
/784XYNvSdBdWu5NE4bEqLJlrr9GdMKl0vm/JHfHgDyjgrLgPGs1UvGr2QavE9jW
19+
eWukjXOQ0QZmpjo1sDWb+vjIrKI2skLfMsW23qzYdZ5Rut1Hkq2iHiK8YZGp9b/v
20+
nP8HEuFIyK8XNev9cqawDWDSCWkPRyTPA7ADFYGEWZ/gt7QnVaissyZwklf4D4md
21+
2hMkRehvzLbnFywTgjPWjzx7k0m3Y92h4pKB559ithEqG7DvLxcoEB0LWGbsI5b5
22+
wdO6rxAmH9llDb45CVneOBocZVSjov0PexndHwJGONI745mY3jxS0UzZeOzcMYWO
23+
wL9CF0ON3vKkLLy5hW77DKQsS2FH5dm2A/tmTaDVhcCRUpQYwIL5oavlQiDbPq7y
24+
gjaA4wpUCIAmFhqDfUKlEBe3j2Zk26GjV0Pu7qaweFK9NWgYDkVLrkVfaSY7tZ2j
25+
G4qi8UMNt3ZqXbMZYzcIn4gQAH9tfPcXFw2cgnWLXhzw8nagZG5n6RaV0QoAfY7f
26+
DLzAcQBG0v6urTobiQrV3pwhO2nIhyHTDXYDG63CWFpaeLiH+DdmyMwYsPy62/o3
27+
3tObrNKxpyXXMA==
28+
-----END CERTIFICATE-----
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
-----BEGIN PRIVATE KEY-----
2+
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
51+
qYpICD+s+ad6gz/B7o2SHFigOdXdxRw=
52+
-----END PRIVATE KEY-----

test/fixtures/proxy-handler.js

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)