From 922cbe6718abf9801a10b0126ffdc84b16012002 Mon Sep 17 00:00:00 2001 From: Andrey Lushnikov Date: Tue, 30 Jun 2020 17:03:01 -0700 Subject: [PATCH] chore: roll https-proxy-agent to v5 (#2777) Co-authored-by: Luke Edwards --- package-lock.json | 41 ++++++++--------------------------- package.json | 2 +- src/install/browserFetcher.ts | 10 ++++++++- 3 files changed, 19 insertions(+), 34 deletions(-) diff --git a/package-lock.json b/package-lock.json index f290441bff..aeb605d5f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -434,11 +434,11 @@ "dev": true }, "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.0.tgz", + "integrity": "sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==", "requires": { - "es6-promisify": "^5.0.0" + "debug": "4" } }, "ajv": { @@ -1719,19 +1719,6 @@ "dev": true, "optional": true }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -2723,22 +2710,12 @@ "dev": true }, "https-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", - "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } + "agent-base": "6", + "debug": "4" } }, "iconv-lite": { diff --git a/package.json b/package.json index 07a9bf6622..d033e969e7 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "commander": "^5.1.0", "debug": "^4.1.1", "extract-zip": "^2.0.0", - "https-proxy-agent": "^3.0.0", + "https-proxy-agent": "^5.0.0", "jpeg-js": "^0.3.7", "mime": "^2.4.4", "pngjs": "^5.0.0", diff --git a/src/install/browserFetcher.ts b/src/install/browserFetcher.ts index d55a6a3ee2..b481e06500 100644 --- a/src/install/browserFetcher.ts +++ b/src/install/browserFetcher.ts @@ -17,7 +17,6 @@ import * as extract from 'extract-zip'; import * as fs from 'fs'; -import * as ProxyAgent from 'https-proxy-agent'; import * as os from 'os'; import * as path from 'path'; import * as ProgressBar from 'progress'; @@ -28,6 +27,15 @@ import { assert, logPolitely, getFromENV } from '../helper'; import * as browserPaths from './browserPaths'; import { BrowserName, BrowserPlatform, BrowserDescriptor } from './browserPaths'; +// `https-proxy-agent` v5 is written in Typescript and exposes generated types. +// However, as of June 2020, its types are generated with tsconfig that enables +// `esModuleInterop` option. +// +// As a result, we can't depend on the package unless we enable the option +// for our codebase. Instead of doing this, we abuse "require" to import module +// without types. +const ProxyAgent = require('https-proxy-agent'); + const unlinkAsync = util.promisify(fs.unlink.bind(fs)); const chmodAsync = util.promisify(fs.chmod.bind(fs)); const existsAsync = (path: string): Promise => new Promise(resolve => fs.stat(path, err => resolve(!err)));