Skip to content

Commit d28b29f

Browse files
committed
feat(cubejs-server-core): support proxy in http agent transport
1 parent 52a664e commit d28b29f

File tree

3 files changed

+144
-14
lines changed

3 files changed

+144
-14
lines changed

packages/cubejs-server-core/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
"codesandbox-import-utils": "^2.1.12",
4141
"cross-spawn": "^7.0.1",
4242
"fs-extra": "^8.1.0",
43+
"http-proxy-agent": "^7.0.2",
44+
"https-proxy-agent": "^7.0.6",
4345
"is-docker": "^2.1.1",
4446
"joi": "^17.8.3",
4547
"jsonwebtoken": "^9.0.2",

packages/cubejs-server-core/src/core/agentCollect.ts

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { getEnv } from '@cubejs-backend/shared';
22
import http from 'http';
33
import https from 'https';
4+
import { HttpsProxyAgent } from 'https-proxy-agent';
5+
import { HttpProxyAgent } from 'http-proxy-agent';
46
import fetch from 'node-fetch';
57
import crypto from 'crypto';
68
import WebSocket from 'ws';
@@ -50,12 +52,12 @@ class WebSocketTransport implements AgentTransport {
5052
clearTimeout(this.pingTimeout);
5153
this.onClose();
5254
});
53-
55+
5456
this.wsClient.on('error', e => {
5557
connectionPromiseReject(e);
5658
this.logger('Agent Error', { error: (e.stack || e).toString() });
5759
});
58-
60+
5961
this.wsClient.on('message', (data: WebSocket.Data) => {
6062
try {
6163
const { method, params } = JSON.parse(data.toString());
@@ -103,17 +105,45 @@ class WebSocketTransport implements AgentTransport {
103105
}
104106
}
105107

108+
function isOnNoProxyList(url: string): boolean {
109+
const noProxy = process.env.NO_PROXY || process.env.no_proxy;
110+
if (!noProxy) {
111+
return false;
112+
}
113+
114+
const parsedUrl = new URL(url);
115+
const { hostname } = parsedUrl;
116+
const noProxyList = noProxy.split(',').map((entry) => entry.trim());
117+
118+
return noProxyList.some((entry) => {
119+
if (entry === '*') {
120+
return true;
121+
}
122+
if (entry.startsWith('.')) {
123+
return hostname.endsWith(entry);
124+
}
125+
126+
return hostname === entry;
127+
});
128+
}
129+
106130
class HttpTransport implements AgentTransport {
107-
private agent: http.Agent | https.Agent;
131+
private agent: http.Agent | https.Agent | HttpProxyAgent<string> | HttpsProxyAgent<string>;
108132

109133
public constructor(
110134
private readonly endpointUrl: string
111135
) {
112-
const AgentClass = endpointUrl.startsWith('https') ? https.Agent : http.Agent;
113-
this.agent = new AgentClass({
136+
const agentParams = {
114137
keepAlive: true,
115138
maxSockets: getEnv('agentMaxSockets')
116-
});
139+
};
140+
if (!isOnNoProxyList(endpointUrl) && (process.env.http_proxy || process.env.https_proxy)) {
141+
this.agent = endpointUrl.startsWith('https') ?
142+
new HttpsProxyAgent(process.env.https_proxy, agentParams) :
143+
new HttpProxyAgent(process.env.http_proxy, agentParams);
144+
} else {
145+
this.agent = endpointUrl.startsWith('https') ? new https.Agent(agentParams) : new http.Agent(agentParams);
146+
}
117147
}
118148

119149
public ready() {
@@ -167,7 +197,7 @@ export default async (event: Record<string, any>, endpointUrl: string, logger: a
167197
const sentAt = new Date().toJSON();
168198
const result = await transport.send(toFlush.map(r => ({ ...r, sentAt })));
169199
if (!result && retries > 0) return flush(toFlush, retries - 1);
170-
200+
171201
return true;
172202
} catch (e: any) {
173203
if (retries > 0) return flush(toFlush, retries - 1);

yarn.lock

Lines changed: 105 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9846,7 +9846,7 @@
98469846
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
98479847
integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
98489848

9849-
"@types/ramda@0.27.40", "@types/ramda@^0.27.32", "@types/ramda@^0.27.34", "@types/ramda@^0.27.40":
9849+
"@types/ramda@^0.27.32", "@types/ramda@^0.27.34", "@types/ramda@^0.27.40":
98509850
version "0.27.40"
98519851
resolved "https://registry.yarnpkg.com/@types/ramda/-/ramda-0.27.40.tgz#99f307356fe553095ee4d3c2af2b0eb3af7a8413"
98529852
integrity sha512-V99ZfTH2tqVYdLDAlgh2uT+N074HPgqnAsMjALKSBqogYd0HbuuGMqNukJ6fk9Ml/Htaus76fsc4Yh3p7q1VdQ==
@@ -11335,6 +11335,11 @@ agent-base@^7.0.2, agent-base@^7.1.0:
1133511335
dependencies:
1133611336
debug "^4.3.4"
1133711337

11338+
agent-base@^7.1.2:
11339+
version "7.1.3"
11340+
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1"
11341+
integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==
11342+
1133811343
agentkeepalive@^4.1.3:
1133911344
version "4.1.4"
1134011345
resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.4.tgz#d928028a4862cb11718e55227872e842a44c945b"
@@ -13428,6 +13433,11 @@ commander@^8.0.0, commander@^8.3.0:
1342813433
resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
1342913434
integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
1343013435

13436+
commander@~2.1.0:
13437+
version "2.1.0"
13438+
resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781"
13439+
integrity sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ==
13440+
1343113441
common-ancestor-path@^1.0.1:
1343213442
version "1.0.1"
1343313443
resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7"
@@ -14459,7 +14469,7 @@ d3-timer@^3.0.1:
1445914469
resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0"
1446014470
integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==
1446114471

14462-
d@1, d@^1.0.2:
14472+
d@1, d@^1.0.1, d@^1.0.2:
1446314473
version "1.0.2"
1446414474
resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de"
1446514475
integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==
@@ -15657,7 +15667,7 @@ es-to-primitive@^1.2.1:
1565715667
is-date-object "^1.0.1"
1565815668
is-symbol "^1.0.2"
1565915669

15660-
es5-ext@0.10.53, es5-ext@^0.10.35, es5-ext@^0.10.64:
15670+
es5-ext@^0.10.35:
1566115671
version "0.10.53"
1566215672
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"
1566315673
integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==
@@ -15666,7 +15676,17 @@ [email protected], es5-ext@^0.10.35, es5-ext@^0.10.64:
1566615676
es6-symbol "~3.1.3"
1566715677
next-tick "~1.0.0"
1566815678

15669-
es6-iterator@~2.0.3:
15679+
es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14:
15680+
version "0.10.64"
15681+
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714"
15682+
integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==
15683+
dependencies:
15684+
es6-iterator "^2.0.3"
15685+
es6-symbol "^3.1.3"
15686+
esniff "^2.0.1"
15687+
next-tick "^1.1.0"
15688+
15689+
es6-iterator@^2.0.3, es6-iterator@~2.0.3:
1567015690
version "2.0.3"
1567115691
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
1567215692
integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==
@@ -15675,7 +15695,7 @@ es6-iterator@~2.0.3:
1567515695
es5-ext "^0.10.35"
1567615696
es6-symbol "^3.1.1"
1567715697

15678-
es6-symbol@^3.1.0, es6-symbol@^3.1.1, es6-symbol@~3.1.3:
15698+
es6-symbol@^3.1.0, es6-symbol@^3.1.1, es6-symbol@^3.1.3, es6-symbol@~3.1.3:
1567915699
version "3.1.4"
1568015700
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c"
1568115701
integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==
@@ -16311,6 +16331,16 @@ eslint@^8.54.0:
1631116331
strip-ansi "^6.0.1"
1631216332
text-table "^0.2.0"
1631316333

16334+
esniff@^2.0.1:
16335+
version "2.0.1"
16336+
resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308"
16337+
integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==
16338+
dependencies:
16339+
d "^1.0.1"
16340+
es5-ext "^0.10.62"
16341+
event-emitter "^0.3.5"
16342+
type "^2.7.2"
16343+
1631416344
espree@^6.2.1:
1631516345
version "6.2.1"
1631616346
resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
@@ -16394,6 +16424,14 @@ etag@~1.8.1:
1639416424
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
1639516425
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
1639616426

16427+
event-emitter@^0.3.5:
16428+
version "0.3.5"
16429+
resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
16430+
integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==
16431+
dependencies:
16432+
d "1"
16433+
es5-ext "~0.10.14"
16434+
1639716435
1639816436
version "4.3.0"
1639916437
resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e"
@@ -18204,6 +18242,14 @@ http-proxy-agent@^7.0.0:
1820418242
agent-base "^7.1.0"
1820518243
debug "^4.3.4"
1820618244

18245+
http-proxy-agent@^7.0.2:
18246+
version "7.0.2"
18247+
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e"
18248+
integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==
18249+
dependencies:
18250+
agent-base "^7.1.0"
18251+
debug "^4.3.4"
18252+
1820718253
http-proxy-middleware@^2.0.0, http-proxy-middleware@^2.0.3:
1820818254
version "2.0.7"
1820918255
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz#915f236d92ae98ef48278a95dedf17e991936ec6"
@@ -18278,6 +18324,14 @@ https-proxy-agent@^7.0.1:
1827818324
agent-base "^7.0.2"
1827918325
debug "4"
1828018326

18327+
https-proxy-agent@^7.0.6:
18328+
version "7.0.6"
18329+
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9"
18330+
integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==
18331+
dependencies:
18332+
agent-base "^7.1.2"
18333+
debug "4"
18334+
1828118335
human-signals@^1.1.1:
1828218336
version "1.1.1"
1828318337
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
@@ -21649,6 +21703,11 @@ nan@^2.18.0, nan@^2.19.0, nan@^2.20.0:
2164921703
resolved "https://registry.yarnpkg.com/nan/-/nan-2.22.0.tgz#31bc433fc33213c97bad36404bb68063de604de3"
2165021704
integrity sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==
2165121705

21706+
nan@~1.0.0:
21707+
version "1.0.0"
21708+
resolved "https://registry.yarnpkg.com/nan/-/nan-1.0.0.tgz#ae24f8850818d662fcab5acf7f3b95bfaa2ccf38"
21709+
integrity sha512-Wm2/nFOm2y9HtJfgOLnctGbfvF23FcQZeyUZqDD8JQG3zO5kXh3MkQKiUaA68mJiVWrOzLFkAV1u6bC8P52DJA==
21710+
2165221711
nanoid@^3.1.30, nanoid@^3.3.7, nanoid@^3.3.8:
2165321712
version "3.3.8"
2165421713
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
@@ -21713,6 +21772,11 @@ neo-async@^2.6.0, neo-async@^2.6.2:
2171321772
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
2171421773
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
2171521774

21775+
next-tick@^1.1.0:
21776+
version "1.1.0"
21777+
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
21778+
integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
21779+
2171621780
next-tick@~1.0.0:
2171721781
version "1.0.0"
2171821782
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
@@ -21902,7 +21966,7 @@ node-gyp@^9.3.0:
2190221966
tar "^6.1.2"
2190321967
which "^2.0.2"
2190421968

21905-
node-int64@^0.3.3:
21969+
node-int64@^0.3.3, node-int64@~0.3.0:
2190621970
version "0.3.3"
2190721971
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.3.3.tgz#2d6e6b2ece5de8588b43d88d1bc41b26cd1fa84d"
2190821972
integrity sha1-LW5rLs5d6FiLQ9iNG8QbJs0fqE0=
@@ -22523,6 +22587,11 @@ optionator@^0.9.3:
2252322587
prelude-ls "^1.2.1"
2252422588
type-check "^0.4.0"
2252522589

22590+
options@>=0.0.5:
22591+
version "0.0.6"
22592+
resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
22593+
integrity sha512-bOj3L1ypm++N+n7CEbbe473A414AB7z+amKYshRb//iuL3MpdDCLhPnw6aVTdKB9g5ZRVHIEp8eUln6L2NUStg==
22594+
2252622595
2252722596
version "5.3.0"
2252822597
resolved "https://registry.yarnpkg.com/ora/-/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f"
@@ -24468,6 +24537,11 @@ python-struct@^1.1.3:
2446824537
dependencies:
2446924538
long "^4.0.0"
2447024539

24540+
24541+
version "1.0.1"
24542+
resolved "https://registry.yarnpkg.com/q/-/q-1.0.1.tgz#11872aeedee89268110b10a718448ffb10112a14"
24543+
integrity sha512-18MnBaCeBX9sLRUdtxz/6onlb7wLzFxCylklyO8n27y5JxJYaGLPu4ccyc5zih58SpEzY8QmfwaWqguqXU6Y+A==
24544+
2447124545
q@^1.5.0:
2447224546
version "1.5.1"
2447324547
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
@@ -27763,7 +27837,7 @@ thread-loader@^3.0.0:
2776327837
neo-async "^2.6.2"
2776427838
schema-utils "^3.0.0"
2776527839

27766-
thrift@0.20.0, thrift@^0.20.0, thrift@^0.9.3:
27840+
thrift@^0.20.0:
2776727841
version "0.20.0"
2776827842
resolved "https://registry.yarnpkg.com/thrift/-/thrift-0.20.0.tgz#b2dbeaaf7c2385aed2eba59d442c87f033fa8e5e"
2776927843
integrity sha512-oSmJTaoIAGolpupVHFfsWcmdEKX81fcDI6ty0hhezzdgZvp0XyXgMe9+1YusI8Ahy0HK4n8jlNrkPjOPeHZjdQ==
@@ -27774,6 +27848,15 @@ [email protected], thrift@^0.20.0, thrift@^0.9.3:
2777427848
q "^1.5.0"
2777527849
ws "^5.2.3"
2777627850

27851+
thrift@^0.9.3:
27852+
version "0.9.3"
27853+
resolved "https://registry.yarnpkg.com/thrift/-/thrift-0.9.3.tgz#99021336403d42e08b8efadb1c37a06d7998b2a6"
27854+
integrity sha512-CLjTMnk31Yhcteeyfhxv1UU8yv0jqlc5kNDGogbpWG2mUU2sJtj33sQzA+qml8Kj2y8WUdVKY7kkZxiczKoATw==
27855+
dependencies:
27856+
node-int64 "~0.3.0"
27857+
q "1.0.x"
27858+
ws "~0.4.32"
27859+
2777727860
throat@^6.0.1:
2777827861
version "6.0.2"
2777927862
resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe"
@@ -27849,6 +27932,11 @@ tinycolor2@^1.4.1:
2784927932
resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803"
2785027933
integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==
2785127934

27935+
27936+
version "0.0.1"
27937+
resolved "https://registry.yarnpkg.com/tinycolor/-/tinycolor-0.0.1.tgz#320b5a52d83abb5978d81a3e887d4aefb15a6164"
27938+
integrity sha512-+CorETse1kl98xg0WAzii8DTT4ABF4R3nquhrkIbVGcw1T8JYs5Gfx9xEfGINPUZGDj9C4BmOtuKeaTtuuRolg==
27939+
2785227940
tinypool@^0.7.0:
2785327941
version "0.7.0"
2785427942
resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.7.0.tgz#88053cc99b4a594382af23190c609d93fddf8021"
@@ -29517,6 +29605,16 @@ ws@^8.1.0, ws@^8.13.0, ws@^8.16.0:
2951729605
resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc"
2951829606
integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==
2951929607

29608+
ws@~0.4.32:
29609+
version "0.4.32"
29610+
resolved "https://registry.yarnpkg.com/ws/-/ws-0.4.32.tgz#787a6154414f3c99ed83c5772153b20feb0cec32"
29611+
integrity sha512-htqsS0U9Z9lb3ITjidQkRvkLdVhQePrMeu475yEfOWkAYvJ6dSjQp1tOH6ugaddzX5b7sQjMPNtY71eTzrV/kA==
29612+
dependencies:
29613+
commander "~2.1.0"
29614+
nan "~1.0.0"
29615+
options ">=0.0.5"
29616+
tinycolor "0.x"
29617+
2952029618
xhr@^2.0.1:
2952129619
version "2.6.0"
2952229620
resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d"

0 commit comments

Comments
 (0)