diff --git a/.changeset/fluffy-bears-admire.md b/.changeset/fluffy-bears-admire.md new file mode 100644 index 00000000..627f1a07 --- /dev/null +++ b/.changeset/fluffy-bears-admire.md @@ -0,0 +1,5 @@ +--- +'proxy-agent': patch +--- + +Fix WebSocket connections over "http"/"https" proxies diff --git a/packages/proxy-agent/package.json b/packages/proxy-agent/package.json index 6d3c171a..13c31ebb 100644 --- a/packages/proxy-agent/package.json +++ b/packages/proxy-agent/package.json @@ -47,12 +47,14 @@ "@types/jest": "^29.5.1", "@types/node": "^14.18.45", "@types/proxy-from-env": "^1.0.1", + "@types/ws": "^8.5.4", "async-listen": "^3.0.0", "jest": "^29.5.0", "proxy": "workspace:*", "socksv5": "github:TooTallNate/socksv5#fix/dstSock-close-event", "ts-jest": "^29.1.0", "tsconfig": "workspace:*", - "typescript": "^5.0.4" + "typescript": "^5.0.4", + "ws": "^8.13.0" } } diff --git a/packages/proxy-agent/src/index.ts b/packages/proxy-agent/src/index.ts index 6b6877ce..0e72f2ef 100644 --- a/packages/proxy-agent/src/index.ts +++ b/packages/proxy-agent/src/index.ts @@ -104,7 +104,14 @@ export class ProxyAgent extends Agent { opts: AgentConnectOpts ): Promise { const { secureEndpoint } = opts; - const protocol = secureEndpoint ? 'https:' : 'http:'; + const isWebSocket = req.getHeader('upgrade') === 'websocket'; + const protocol = secureEndpoint + ? isWebSocket + ? 'wss:' + : 'https:' + : isWebSocket + ? 'ws:' + : 'http:'; const host = req.getHeader('host'); const url = new URL(req.path, `${protocol}//${host}`).href; const proxy = this.getProxyForUrl(url); @@ -126,7 +133,8 @@ export class ProxyAgent extends Agent { if (!isValidProtocol(proxyProto)) { throw new Error(`Unsupported protocol for proxy URL: ${proxy}`); } - const ctor = proxies[proxyProto][secureEndpoint ? 1 : 0]; + const ctor = + proxies[proxyProto][secureEndpoint || isWebSocket ? 1 : 0]; // @ts-expect-error meh… agent = new ctor(proxy, this.connectOpts); this.cache.set(cacheKey, agent); diff --git a/packages/proxy-agent/test/test.ts b/packages/proxy-agent/test/test.ts index d513acbf..c2954280 100644 --- a/packages/proxy-agent/test/test.ts +++ b/packages/proxy-agent/test/test.ts @@ -3,6 +3,7 @@ import * as http from 'http'; import * as https from 'https'; import { once } from 'events'; import assert from 'assert'; +import WebSocket, { WebSocketServer } from 'ws'; import { json, req } from 'agent-base'; import { ProxyServer, createProxy } from 'proxy'; // @ts-expect-error no types @@ -20,8 +21,10 @@ const sslOptions = { describe('ProxyAgent', () => { // target servers let httpServer: http.Server; + let httpWebSocketServer: WebSocketServer; let httpServerUrl: URL; let httpsServer: https.Server; + let httpsWebSocketServer: WebSocketServer; let httpsServerUrl: URL; // proxy servers @@ -36,12 +39,14 @@ describe('ProxyAgent', () => { beforeAll(async () => { // setup target HTTP server httpServer = http.createServer(); + httpWebSocketServer = new WebSocketServer({ server: httpServer }); httpServerUrl = await listen(httpServer); }); beforeAll(async () => { // setup target SSL HTTPS server httpsServer = https.createServer(sslOptions); + httpsWebSocketServer = new WebSocketServer({ server: httpsServer }); httpsServerUrl = await listen(httpsServer); }); @@ -79,9 +84,13 @@ describe('ProxyAgent', () => { beforeEach(() => { delete process.env.HTTP_PROXY; delete process.env.HTTPS_PROXY; + delete process.env.WS_PROXY; + delete process.env.WSS_PROXY; delete process.env.NO_PROXY; httpServer.removeAllListeners('request'); httpsServer.removeAllListeners('request'); + httpWebSocketServer.removeAllListeners('connection'); + httpsWebSocketServer.removeAllListeners('connection'); }); describe('"http" module', () => { @@ -278,4 +287,57 @@ describe('ProxyAgent', () => { assert(requestUrl.href === urlParameter); }); }); + + describe('"ws" module', () => { + it('should work over "http" proxy to `ws:` URL', async () => { + let requestCount = 0; + let connectionCount = 0; + httpServer.once('request', function (req, res) { + requestCount++; + res.end(); + }); + httpWebSocketServer.on('connection', (ws) => { + connectionCount++; + ws.send('OK'); + }); + + process.env.WS_PROXY = httpProxyServerUrl.href; + const agent = new ProxyAgent(); + + const ws = new WebSocket(httpServerUrl.href.replace('http', 'ws'), { + agent, + }); + const [message] = await once(ws, 'message'); + expect(connectionCount).toEqual(1); + expect(requestCount).toEqual(0); + expect(message.toString()).toEqual('OK'); + ws.close(); + }); + + it('should work over "http" proxy to `wss:` URL', async () => { + let requestCount = 0; + let connectionCount = 0; + httpsServer.once('request', function (req, res) { + requestCount++; + res.end(); + }); + httpsWebSocketServer.on('connection', (ws) => { + connectionCount++; + ws.send('OK'); + }); + + process.env.WSS_PROXY = httpProxyServerUrl.href; + const agent = new ProxyAgent(); + + const ws = new WebSocket(httpsServerUrl.href.replace('https', 'wss'), { + agent, + rejectUnauthorized: false + }); + const [message] = await once(ws, 'message'); + expect(connectionCount).toEqual(1); + expect(requestCount).toEqual(0); + expect(message.toString()).toEqual('OK'); + ws.close(); + }); + }); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bdcc8503..cb675014 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,10 +9,10 @@ importers: version: 2.26.1 '@typescript-eslint/eslint-plugin': specifier: ^5.59.1 - version: 5.59.1(@typescript-eslint/parser@5.59.1)(eslint@7.32.0) + version: 5.59.1(@typescript-eslint/parser@5.59.1)(eslint@7.32.0)(typescript@5.0.4) '@typescript-eslint/parser': specifier: ^5.59.1 - version: 5.59.1(eslint@7.32.0) + version: 5.59.1(eslint@7.32.0)(typescript@5.0.4) eslint: specifier: ^7.32.0 version: 7.32.0 @@ -27,7 +27,7 @@ importers: version: 2.8.8 turbo: specifier: latest - version: 1.9.9 + version: 1.9.3 packages/agent-base: dependencies: @@ -58,7 +58,7 @@ importers: version: 29.5.0(@types/node@14.18.45) ts-jest: specifier: ^29.1.0 - version: 29.1.0(jest@29.5.0)(typescript@5.0.4) + version: 29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@5.0.4) tsconfig: specifier: workspace:* version: link:../tsconfig @@ -82,7 +82,7 @@ importers: version: 29.5.0(@types/node@14.18.45) ts-jest: specifier: ^29.1.0 - version: 29.1.0(jest@29.5.0)(typescript@5.0.4) + version: 29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@5.0.4) tsconfig: specifier: workspace:* version: link:../tsconfig @@ -122,7 +122,7 @@ importers: version: 29.5.0(@types/node@14.18.45) ts-jest: specifier: ^29.1.0 - version: 29.1.0(jest@29.5.0)(typescript@5.0.4) + version: 29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@5.0.4) tsconfig: specifier: workspace:* version: link:../tsconfig @@ -174,7 +174,7 @@ importers: version: 1.2.2 ts-jest: specifier: ^29.1.0 - version: 29.1.0(jest@29.5.0)(typescript@5.0.4) + version: 29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@5.0.4) tsconfig: specifier: workspace:* version: link:../tsconfig @@ -211,7 +211,7 @@ importers: version: link:../proxy ts-jest: specifier: ^29.1.0 - version: 29.1.0(jest@29.5.0)(typescript@5.0.4) + version: 29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@5.0.4) tsconfig: specifier: workspace:* version: link:../tsconfig @@ -254,7 +254,7 @@ importers: version: link:../proxy ts-jest: specifier: ^29.1.0 - version: 29.1.0(jest@29.5.0)(typescript@5.0.4) + version: 29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@5.0.4) tsconfig: specifier: workspace:* version: link:../tsconfig @@ -309,7 +309,7 @@ importers: version: 0.0.6 ts-jest: specifier: ^29.1.0 - version: 29.1.0(jest@29.5.0)(typescript@5.0.4) + version: 29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@5.0.4) tsconfig: specifier: workspace:* version: link:../tsconfig @@ -346,7 +346,7 @@ importers: version: 29.5.0(@types/node@14.18.45) ts-jest: specifier: ^29.1.0 - version: 29.1.0(jest@29.5.0)(typescript@5.0.4) + version: 29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@5.0.4) tsconfig: specifier: workspace:* version: link:../tsconfig @@ -386,7 +386,7 @@ importers: version: 29.5.0(@types/node@14.18.45) ts-jest: specifier: ^29.1.0 - version: 29.1.0(jest@29.5.0)(typescript@5.0.4) + version: 29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@5.0.4) tsconfig: specifier: workspace:* version: link:../tsconfig @@ -436,6 +436,9 @@ importers: '@types/proxy-from-env': specifier: ^1.0.1 version: 1.0.1 + '@types/ws': + specifier: ^8.5.4 + version: 8.5.4 async-listen: specifier: ^3.0.0 version: 3.0.0 @@ -450,13 +453,16 @@ importers: version: github.com/TooTallNate/socksv5/d937368b28e929396166d77a06d387a4a902bd51 ts-jest: specifier: ^29.1.0 - version: 29.1.0(jest@29.5.0)(typescript@5.0.4) + version: 29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@5.0.4) tsconfig: specifier: workspace:* version: link:../tsconfig typescript: specifier: ^5.0.4 version: 5.0.4 + ws: + specifier: ^8.13.0 + version: 8.13.0 packages/socks-proxy-agent: dependencies: @@ -508,7 +514,7 @@ importers: version: github.com/TooTallNate/socksv5/d937368b28e929396166d77a06d387a4a902bd51 ts-jest: specifier: ^29.1.0 - version: 29.1.0(jest@29.5.0)(typescript@5.0.4) + version: 29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@5.0.4) tsconfig: specifier: workspace:* version: link:../tsconfig @@ -1632,6 +1638,12 @@ packages: '@types/node': 14.18.45 dev: true + /@types/ws@8.5.4: + resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} + dependencies: + '@types/node': 14.18.45 + dev: true + /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true @@ -1642,7 +1654,7 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@5.59.1(@typescript-eslint/parser@5.59.1)(eslint@7.32.0): + /@typescript-eslint/eslint-plugin@5.59.1(@typescript-eslint/parser@5.59.1)(eslint@7.32.0)(typescript@5.0.4): resolution: {integrity: sha512-AVi0uazY5quFB9hlp2Xv+ogpfpk77xzsgsIEWyVS7uK/c7MZ5tw7ZPbapa0SbfkqE0fsAMkz5UwtgMLVk2BQAg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1654,22 +1666,23 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.59.1(eslint@7.32.0) + '@typescript-eslint/parser': 5.59.1(eslint@7.32.0)(typescript@5.0.4) '@typescript-eslint/scope-manager': 5.59.1 - '@typescript-eslint/type-utils': 5.59.1(eslint@7.32.0) - '@typescript-eslint/utils': 5.59.1(eslint@7.32.0) + '@typescript-eslint/type-utils': 5.59.1(eslint@7.32.0)(typescript@5.0.4) + '@typescript-eslint/utils': 5.59.1(eslint@7.32.0)(typescript@5.0.4) debug: 4.3.4 eslint: 7.32.0 grapheme-splitter: 1.0.4 ignore: 5.2.0 natural-compare-lite: 1.4.0 semver: 7.3.8 - tsutils: 3.21.0 + tsutils: 3.21.0(typescript@5.0.4) + typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.59.1(eslint@7.32.0): + /@typescript-eslint/parser@5.59.1(eslint@7.32.0)(typescript@5.0.4): resolution: {integrity: sha512-nzjFAN8WEu6yPRDizIFyzAfgK7nybPodMNFGNH0M9tei2gYnYszRDqVA0xlnRjkl7Hkx2vYrEdb6fP2a21cG1g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1681,9 +1694,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.59.1 '@typescript-eslint/types': 5.59.1 - '@typescript-eslint/typescript-estree': 5.59.1 + '@typescript-eslint/typescript-estree': 5.59.1(typescript@5.0.4) debug: 4.3.4 eslint: 7.32.0 + typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true @@ -1696,7 +1710,7 @@ packages: '@typescript-eslint/visitor-keys': 5.59.1 dev: true - /@typescript-eslint/type-utils@5.59.1(eslint@7.32.0): + /@typescript-eslint/type-utils@5.59.1(eslint@7.32.0)(typescript@5.0.4): resolution: {integrity: sha512-ZMWQ+Oh82jWqWzvM3xU+9y5U7MEMVv6GLioM3R5NJk6uvP47kZ7YvlgSHJ7ERD6bOY7Q4uxWm25c76HKEwIjZw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1706,11 +1720,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.59.1 - '@typescript-eslint/utils': 5.59.1(eslint@7.32.0) + '@typescript-eslint/typescript-estree': 5.59.1(typescript@5.0.4) + '@typescript-eslint/utils': 5.59.1(eslint@7.32.0)(typescript@5.0.4) debug: 4.3.4 eslint: 7.32.0 - tsutils: 3.21.0 + tsutils: 3.21.0(typescript@5.0.4) + typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true @@ -1720,7 +1735,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.59.1: + /@typescript-eslint/typescript-estree@5.59.1(typescript@5.0.4): resolution: {integrity: sha512-lYLBBOCsFltFy7XVqzX0Ju+Lh3WPIAWxYpmH/Q7ZoqzbscLiCW00LeYCdsUnnfnj29/s1WovXKh2gwCoinHNGA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1735,12 +1750,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.8 - tsutils: 3.21.0 + tsutils: 3.21.0(typescript@5.0.4) + typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.59.1(eslint@7.32.0): + /@typescript-eslint/utils@5.59.1(eslint@7.32.0)(typescript@5.0.4): resolution: {integrity: sha512-MkTe7FE+K1/GxZkP5gRj3rCztg45bEhsd8HYjczBuYm+qFHP5vtZmjx3B0yUCDotceQ4sHgTyz60Ycl225njmA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1751,7 +1767,7 @@ packages: '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.59.1 '@typescript-eslint/types': 5.59.1 - '@typescript-eslint/typescript-estree': 5.59.1 + '@typescript-eslint/typescript-estree': 5.59.1(typescript@5.0.4) eslint: 7.32.0 eslint-scope: 5.1.1 semver: 7.3.8 @@ -2036,7 +2052,7 @@ packages: resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} dependencies: readable-stream: 2.3.8 - safe-buffer: 5.2.1 + safe-buffer: 5.1.2 dev: true /brace-expansion@1.1.11: @@ -4539,10 +4555,6 @@ packages: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true - /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: @@ -4928,7 +4940,7 @@ packages: engines: {node: '>=8'} dev: true - /ts-jest@29.1.0(jest@29.5.0)(typescript@5.0.4): + /ts-jest@29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@5.0.4): resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4949,6 +4961,7 @@ packages: esbuild: optional: true dependencies: + '@babel/core': 7.21.4 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 29.5.0(@types/node@14.18.45) @@ -4969,13 +4982,14 @@ packages: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} dev: false - /tsutils@3.21.0: + /tsutils@3.21.0(typescript@5.0.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 + typescript: 5.0.4 dev: true /tty-table@4.2.1: @@ -4992,65 +5006,65 @@ packages: yargs: 17.7.1 dev: true - /turbo-darwin-64@1.9.9: - resolution: {integrity: sha512-UDGM9E21eCDzF5t1F4rzrjwWutcup33e7ZjNJcW/mJDPorazZzqXGKEPIy9kXwKhamUUXfC7668r6ZuA1WXF2Q==} + /turbo-darwin-64@1.9.3: + resolution: {integrity: sha512-0dFc2cWXl82kRE4Z+QqPHhbEFEpUZho1msHXHWbz5+PqLxn8FY0lEVOHkq5tgKNNEd5KnGyj33gC/bHhpZOk5g==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64@1.9.9: - resolution: {integrity: sha512-VyfkXzTJpYLTAQ9krq2myyEq7RPObilpS04lgJ4OO1piq76RNmSpX9F/t9JCaY9Pj/4TL7i0d8PM7NGhwEA5Ag==} + /turbo-darwin-arm64@1.9.3: + resolution: {integrity: sha512-1cYbjqLBA2zYE1nbf/qVnEkrHa4PkJJbLo7hnuMuGM0bPzh4+AnTNe98gELhqI1mkTWBu/XAEeF5u6dgz0jLNA==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64@1.9.9: - resolution: {integrity: sha512-Fu1MY29Odg8dHOqXcpIIGC3T63XLOGgnGfbobXMKdrC7JQDvtJv8TUCYciRsyknZYjyyKK1z6zKuYIiDjf3KeQ==} + /turbo-linux-64@1.9.3: + resolution: {integrity: sha512-UuBPFefawEwpuxh5pM9Jqq3q4C8M0vYxVYlB3qea/nHQ80pxYq7ZcaLGEpb10SGnr3oMUUs1zZvkXWDNKCJb8Q==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64@1.9.9: - resolution: {integrity: sha512-50LI8NafPuJxdnMCBeDdzgyt1cgjQG7FwkyY336v4e95WJPUVjrHdrKH6jYXhOUyrv9+jCJxwX1Yrg02t5yJ1g==} + /turbo-linux-arm64@1.9.3: + resolution: {integrity: sha512-vUrNGa3hyDtRh9W0MkO+l1dzP8Co2gKnOVmlJQW0hdpOlWlIh22nHNGGlICg+xFa2f9j4PbQlWTsc22c019s8Q==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64@1.9.9: - resolution: {integrity: sha512-9IsTReoLmQl1IRsy3WExe2j2RKWXQyXujfJ4fXF+jp08KxjVF4/tYP2CIRJx/A7UP/7keBta27bZqzAjsmbSTA==} + /turbo-windows-64@1.9.3: + resolution: {integrity: sha512-0BZ7YaHs6r+K4ksqWus1GKK3W45DuDqlmfjm/yuUbTEVc8szmMCs12vugU2Zi5GdrdJSYfoKfEJ/PeegSLIQGQ==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64@1.9.9: - resolution: {integrity: sha512-CUu4hpeQo68JjDr0V0ygTQRLbS+/sNfdqEVV+Xz9136vpKn2WMQLAuUBVZV0Sp0S/7i+zGnplskT0fED+W46wQ==} + /turbo-windows-arm64@1.9.3: + resolution: {integrity: sha512-QJUYLSsxdXOsR1TquiOmLdAgtYcQ/RuSRpScGvnZb1hY0oLc7JWU0llkYB81wVtWs469y8H9O0cxbKwCZGR4RQ==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo@1.9.9: - resolution: {integrity: sha512-+ZS66LOT7ahKHxh6XrIdcmf2Yk9mNpAbPEj4iF2cs0cAeaDU3xLVPZFF0HbSho89Uxwhx7b5HBgPbdcjQTwQkg==} + /turbo@1.9.3: + resolution: {integrity: sha512-ID7mxmaLUPKG/hVkp+h0VuucB1U99RPCJD9cEuSEOdIPoSIuomcIClEJtKamUsdPLhLCud+BvapBNnhgh58Nzw==} hasBin: true requiresBuild: true optionalDependencies: - turbo-darwin-64: 1.9.9 - turbo-darwin-arm64: 1.9.9 - turbo-linux-64: 1.9.9 - turbo-linux-arm64: 1.9.9 - turbo-windows-64: 1.9.9 - turbo-windows-arm64: 1.9.9 + turbo-darwin-64: 1.9.3 + turbo-darwin-arm64: 1.9.3 + turbo-linux-64: 1.9.3 + turbo-linux-arm64: 1.9.3 + turbo-windows-64: 1.9.3 + turbo-windows-arm64: 1.9.3 dev: true /type-check@0.3.2: @@ -5302,6 +5316,19 @@ packages: ultron: 1.1.1 dev: true + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true diff --git a/turbo.json b/turbo.json index 64a60436..b4a2244f 100644 --- a/turbo.json +++ b/turbo.json @@ -3,6 +3,8 @@ "globalEnv": [ "HTTP_PROXY", "HTTPS_PROXY", + "WS_PROXY", + "WSS_PROXY", "ALL_PROXY", "NO_PROXY", "NORDVPN_USERNAME",