diff --git a/.github/workflows/build_macos.yaml b/.github/workflows/build_macos.yaml index 518457e4..5d9a1399 100644 --- a/.github/workflows/build_macos.yaml +++ b/.github/workflows/build_macos.yaml @@ -114,10 +114,6 @@ jobs: - name: Install Deps run: "yarn install --frozen-lockfile" - # Python 3.12 drops distutils which keytar relies on - - name: Install setuptools - run: pip3 install setuptools - - name: Build Natives if: steps.cache.outputs.cache-hit != 'true' run: yarn build:native:universal diff --git a/dockerbuild/Dockerfile b/dockerbuild/Dockerfile index 11622a52..b434857c 100644 --- a/dockerbuild/Dockerfile +++ b/dockerbuild/Dockerfile @@ -8,8 +8,6 @@ RUN apt-get -qq update && apt-get -y -qq dist-upgrade && \ apt-get -y -qq install --no-install-recommends \ # tclsh is required for building SQLite as part of SQLCipher tcl \ - # libsecret-1-dev is required even for prebuild keytar - libsecret-1-dev \ # Used by seshat (when not SQLCIPHER_STATIC) \ libsqlcipher-dev && \ apt-get purge -y --auto-remove && rm -rf /var/lib/apt/lists/* diff --git a/package.json b/package.json index 6b7870c8..58009e5b 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,6 @@ "counterpart": "^0.18.6", "electron-store": "^11.0.0", "electron-window-state": "^5.0.3", - "keytar-forked": "7.10.0", "minimist": "^1.2.6", "png-to-ico": "^3.0.0", "uuid": "^13.0.0" @@ -77,7 +76,7 @@ "@babel/preset-env": "^7.18.10", "@babel/preset-typescript": "^7.18.6", "@electron/asar": "4.0.1", - "@playwright/test": "1.56.1", + "@playwright/test": "1.57.0", "@stylistic/eslint-plugin": "^5.0.0", "@types/auto-launch": "^5.0.1", "@types/counterpart": "^0.18.1", diff --git a/playwright/e2e/launch/launch.spec.ts b/playwright/e2e/launch/launch.spec.ts index 6bd591a6..b10dd603 100644 --- a/playwright/e2e/launch/launch.spec.ts +++ b/playwright/e2e/launch/launch.spec.ts @@ -6,8 +6,6 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com Please see LICENSE files in the repository root for full details. */ -import keytar from "keytar-forked"; - import { test, expect } from "../../element-desktop-test.js"; declare global { @@ -61,34 +59,6 @@ test.describe("App launch", () => { ), ).resolves.not.toBeNull(); }); - - test.describe("migrate from keytar", () => { - test.skip( - process.env.GITHUB_ACTIONS && ["linux", "darwin"].includes(process.platform), - "GitHub Actions hosted runner are not a compatible environment for this test", - ); - - const pickleKey = "DEADBEEF1234"; - const keytarService = "element.io"; - const keytarKey = `${userId}|${deviceId}`; - - test.beforeAll(async () => { - await keytar.setPassword(keytarService, keytarKey, pickleKey); - await expect(keytar.getPassword(keytarService, keytarKey)).resolves.toBe(pickleKey); - }); - test.afterAll(async () => { - await keytar.deletePassword(keytarService, keytarKey); - }); - - test("should migrate successfully", async ({ page }) => { - await expect( - page.evaluate( - ([userId, deviceId]) => window.mxPlatformPeg.get().getPickleKey(userId, deviceId), - [userId, deviceId], - ), - ).resolves.toBe(pickleKey); - }); - }); }); test.describe("--no-update", () => { diff --git a/src/ipc.ts b/src/ipc.ts index 8efcd947..c59f70eb 100644 --- a/src/ipc.ts +++ b/src/ipc.ts @@ -111,7 +111,7 @@ ipcMain.on("ipcCall", async function (_ev: IpcMainEvent, payload) { try { ret = await store.getSecret(`${args[0]}|${args[1]}`); } catch { - // if an error is thrown (e.g. keytar can't connect to the keychain), + // if an error is thrown (e.g. we can't initialise safeStorage), // then return null, which means the default pickle key will be used ret = null; } diff --git a/src/store.ts b/src/store.ts index f807448c..dee629be 100644 --- a/src/store.ts +++ b/src/store.ts @@ -15,22 +15,10 @@ limitations under the License. */ import ElectronStore from "electron-store"; -import keytar from "keytar-forked"; import { app, safeStorage, dialog, type SafeStorage, type Session } from "electron"; import { _t } from "./language-helper.js"; -/** - * Legacy keytar service name for storing secrets. - * @deprecated - */ -const KEYTAR_SERVICE = "element.io"; -/** - * Super legacy keytar service name for reading secrets. - * @deprecated - */ -const LEGACY_KEYTAR_SERVICE = "riot.im"; - /** * String union type representing all the safeStorage backends. * + The "unknown" backend shouldn't exist in practice once the app is ready @@ -147,7 +135,7 @@ const enum Mode { /** * JSON-backed store for settings which need to be accessible by the main process. * Secrets are stored within the `safeStorage` object, encrypted with safeStorage. - * Any secrets operations are blocked on Electron app ready emit, and keytar migration if still needed. + * Any secrets operations are blocked on Electron app ready emit. */ class Store extends ElectronStore { private static internalInstance?: Store; @@ -283,8 +271,6 @@ class Store extends ElectronStore { /** * Prepare the safeStorage backend for use. - * We don't eagerly import from keytar as that would bring in data for all Element profiles and not just the current one, - * so we import lazily in getSecret. * * This will relaunch the app in some cases, in which case it will return false and the caller should abort startup. * @@ -462,7 +448,6 @@ class Store extends ElectronStore { /** * Get the stored secret for the key. - * Lazily migrates keys from keytar if they are not yet in the store. * * @param key The string key name. * @@ -470,25 +455,11 @@ class Store extends ElectronStore { */ public async getSecret(key: string): Promise { await this.safeStorageReady(); - let secret = this.secrets!.get(key); - if (secret) return secret; - - try { - secret = await this.getSecretKeytar(key); - } catch (e) { - console.warn(`Failed to read data from keytar with key='${key}'`, e); - } - if (secret) { - console.debug("Migrating secret from keytar", key); - this.secrets!.set(key, secret); - } - - return secret; + return this.secrets!.get(key); } /** * Add the secret for the key to the keychain. - * We write to both safeStorage & keytar to support downgrading the application. * * @param key The string key name. * @param secret The string password. @@ -498,46 +469,16 @@ class Store extends ElectronStore { public async setSecret(key: string, secret: string): Promise { await this.safeStorageReady(); this.secrets!.set(key, secret); - try { - await keytar.setPassword(KEYTAR_SERVICE, key, secret); - } catch (e) { - console.warn(`Failed to write safeStorage backwards-compatibility key='${key}' data to keytar`, e); - } } /** * Delete the stored password for the key. - * Removes from safeStorage, keytar & keytar legacy. * * @param key The string key name. */ public async deleteSecret(key: string): Promise { await this.safeStorageReady(); this.secrets!.delete(key); - try { - await this.deleteSecretKeytar(key); - } catch (e) { - console.warn(`Failed to delete secret with key='${key}' from keytar`, e); - } - } - - /** - * @deprecated will be removed in the near future - */ - private async getSecretKeytar(key: string): Promise { - return ( - (await keytar.getPassword(KEYTAR_SERVICE, key)) ?? - (await keytar.getPassword(LEGACY_KEYTAR_SERVICE, key)) ?? - undefined - ); - } - - /** - * @deprecated will be removed in the near future - */ - private async deleteSecretKeytar(key: string): Promise { - await keytar.deletePassword(LEGACY_KEYTAR_SERVICE, key); - await keytar.deletePassword(KEYTAR_SERVICE, key); } } diff --git a/yarn.lock b/yarn.lock index 3df53473..ac38c8a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2519,14 +2519,14 @@ __metadata: languageName: node linkType: hard -"@playwright/test@npm:1.56.1": - version: 1.56.1 - resolution: "@playwright/test@npm:1.56.1" +"@playwright/test@npm:1.57.0": + version: 1.57.0 + resolution: "@playwright/test@npm:1.57.0" dependencies: - playwright: "npm:1.56.1" + playwright: "npm:1.57.0" bin: playwright: cli.js - checksum: 10c0/2b5b0e1f2e6a18f6e5ce6897c7440ca78f64e0b004834e9808e93ad2b78b96366b562ae4366602669cf8ad793a43d85481b58541e74be71e905e732d833dd691 + checksum: 10c0/35ba4b28be72bf0a53e33dbb11c6cff848fb9a37f49e893ce63a90675b5291ec29a1ba82c8a3b043abaead129400f0589623e9ace2e6a1c8eaa409721ecc3774 languageName: node linkType: hard @@ -3668,7 +3668,7 @@ __metadata: languageName: node linkType: hard -"bl@npm:^4.0.3, bl@npm:^4.1.0": +"bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" dependencies: @@ -3950,13 +3950,6 @@ __metadata: languageName: node linkType: hard -"chownr@npm:^1.1.1": - version: 1.1.4 - resolution: "chownr@npm:1.1.4" - checksum: 10c0/ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db - languageName: node - linkType: hard - "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -4351,13 +4344,6 @@ __metadata: languageName: node linkType: hard -"deep-extend@npm:^0.6.0": - version: 0.6.0 - resolution: "deep-extend@npm:0.6.0" - checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 - languageName: node - linkType: hard - "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -4672,7 +4658,7 @@ __metadata: "@babel/preset-env": "npm:^7.18.10" "@babel/preset-typescript": "npm:^7.18.6" "@electron/asar": "npm:4.0.1" - "@playwright/test": "npm:1.56.1" + "@playwright/test": "npm:1.57.0" "@sentry/electron": "npm:^7.0.0" "@stylistic/eslint-plugin": "npm:^5.0.0" "@types/auto-launch": "npm:^5.0.1" @@ -4702,7 +4688,6 @@ __metadata: eslint-plugin-unicorn: "npm:^56.0.0" glob: "npm:^13.0.0" husky: "npm:^9.1.6" - keytar-forked: "npm:7.10.0" knip: "npm:^5.0.0" lint-staged: "npm:^16.0.0" matrix-web-i18n: "npm:^3.2.1" @@ -4751,7 +4736,7 @@ __metadata: languageName: node linkType: hard -"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": +"end-of-stream@npm:^1.1.0": version: 1.4.4 resolution: "end-of-stream@npm:1.4.4" dependencies: @@ -5350,13 +5335,6 @@ __metadata: languageName: node linkType: hard -"expand-template@npm:^2.0.3": - version: 2.0.3 - resolution: "expand-template@npm:2.0.3" - checksum: 10c0/1c9e7afe9acadf9d373301d27f6a47b34e89b3391b1ef38b7471d381812537ef2457e620ae7f819d2642ce9c43b189b3583813ec395e2938319abe356a9b2f51 - languageName: node - linkType: hard - "exponential-backoff@npm:^3.1.1": version: 3.1.3 resolution: "exponential-backoff@npm:3.1.3" @@ -5606,13 +5584,6 @@ __metadata: languageName: node linkType: hard -"fs-constants@npm:^1.0.0": - version: 1.0.0 - resolution: "fs-constants@npm:1.0.0" - checksum: 10c0/a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 - languageName: node - linkType: hard - "fs-extra@npm:^10.0.0, fs-extra@npm:^10.1.0": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" @@ -5854,13 +5825,6 @@ __metadata: languageName: node linkType: hard -"github-from-package@npm:0.0.0": - version: 0.0.0 - resolution: "github-from-package@npm:0.0.0" - checksum: 10c0/737ee3f52d0a27e26332cde85b533c21fcdc0b09fb716c3f8e522cfaa9c600d4a631dec9fcde179ec9d47cca89017b7848ed4d6ae6b6b78f936c06825b1fcc12 - languageName: node - linkType: hard - "glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -6281,13 +6245,6 @@ __metadata: languageName: node linkType: hard -"ini@npm:~1.3.0": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a - languageName: node - linkType: hard - "internal-slot@npm:^1.1.0": version: 1.1.0 resolution: "internal-slot@npm:1.1.0" @@ -6893,17 +6850,6 @@ __metadata: languageName: node linkType: hard -"keytar-forked@npm:7.10.0": - version: 7.10.0 - resolution: "keytar-forked@npm:7.10.0" - dependencies: - node-addon-api: "npm:^8.3.0" - node-gyp: "npm:latest" - prebuild-install: "npm:^7.1.3" - checksum: 10c0/46c974fd5a26d8e4c751af751bed4fed01b5b61154eb3b2485214e9282a26aebc0e29391fe9925be2bc5f50cf78de8ef480c114749ce94473f6f990cc0232551 - languageName: node - linkType: hard - "keyv@npm:^4.0.0, keyv@npm:^4.5.3": version: 4.5.4 resolution: "keyv@npm:4.5.4" @@ -7307,7 +7253,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.8": +"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.8": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 @@ -7422,13 +7368,6 @@ __metadata: languageName: node linkType: hard -"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": - version: 0.5.3 - resolution: "mkdirp-classic@npm:0.5.3" - checksum: 10c0/95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168 - languageName: node - linkType: hard - "mkdirp@npm:^0.5.1": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" @@ -7479,13 +7418,6 @@ __metadata: languageName: node linkType: hard -"napi-build-utils@npm:^2.0.0": - version: 2.0.0 - resolution: "napi-build-utils@npm:2.0.0" - checksum: 10c0/5833aaeb5cc5c173da47a102efa4680a95842c13e0d9cc70428bd3ee8d96bb2172f8860d2811799b5daa5cbeda779933601492a2028a6a5351c6d0fcf6de83db - languageName: node - linkType: hard - "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -7518,15 +7450,6 @@ __metadata: languageName: node linkType: hard -"node-addon-api@npm:^8.3.0": - version: 8.3.1 - resolution: "node-addon-api@npm:8.3.1" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/e28f1c5094130ecc3a0bf882e0385e74cac9c5112d35287dbce369959551ab7ca4d1f1a69af737107c894c14b4063dd5002e2b3c16a27035d025bb06eefee058 - languageName: node - linkType: hard - "node-api-version@npm:^0.2.1": version: 0.2.1 resolution: "node-api-version@npm:0.2.1" @@ -8169,27 +8092,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.56.1": - version: 1.56.1 - resolution: "playwright-core@npm:1.56.1" +"playwright-core@npm:1.57.0": + version: 1.57.0 + resolution: "playwright-core@npm:1.57.0" bin: playwright-core: cli.js - checksum: 10c0/ffd40142b99c68678b387445d5b42f1fee4ab0b65d983058c37f342e5629f9cdbdac0506ea80a0dfd41a8f9f13345bad54e9a8c35826ef66dc765f4eb3db8da7 + checksum: 10c0/798e35d83bf48419a8c73de20bb94d68be5dde68de23f95d80a0ebe401e3b83e29e3e84aea7894d67fa6c79d2d3d40cc5bcde3e166f657ce50987aaa2421b6a9 languageName: node linkType: hard -"playwright@npm:1.56.1": - version: 1.56.1 - resolution: "playwright@npm:1.56.1" +"playwright@npm:1.57.0": + version: 1.57.0 + resolution: "playwright@npm:1.57.0" dependencies: fsevents: "npm:2.3.2" - playwright-core: "npm:1.56.1" + playwright-core: "npm:1.57.0" dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: 10c0/8e9965aede86df0f4722063385748498977b219630a40a10d1b82b8bd8d4d4e9b6b65ecbfa024331a30800163161aca292fb6dd7446c531a1ad25f4155625ab4 + checksum: 10c0/ab03c99a67b835bdea9059f516ad3b6e42c21025f9adaa161a4ef6bc7ca716dcba476d287140bb240d06126eb23f889a8933b8f5f1f1a56b80659d92d1358899 languageName: node linkType: hard @@ -8293,28 +8216,6 @@ __metadata: languageName: node linkType: hard -"prebuild-install@npm:^7.1.3": - version: 7.1.3 - resolution: "prebuild-install@npm:7.1.3" - dependencies: - detect-libc: "npm:^2.0.0" - expand-template: "npm:^2.0.3" - github-from-package: "npm:0.0.0" - minimist: "npm:^1.2.3" - mkdirp-classic: "npm:^0.5.3" - napi-build-utils: "npm:^2.0.0" - node-abi: "npm:^3.3.0" - pump: "npm:^3.0.0" - rc: "npm:^1.2.7" - simple-get: "npm:^4.0.0" - tar-fs: "npm:^2.0.0" - tunnel-agent: "npm:^0.6.0" - bin: - prebuild-install: bin.js - checksum: 10c0/25919a42b52734606a4036ab492d37cfe8b601273d8dfb1fa3c84e141a0a475e7bad3ab848c741d2f810cef892fcf6059b8c7fe5b29f98d30e0c29ad009bedff - languageName: node - linkType: hard - "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -8400,20 +8301,6 @@ __metadata: languageName: node linkType: hard -"rc@npm:^1.2.7": - version: 1.2.8 - resolution: "rc@npm:1.2.8" - dependencies: - deep-extend: "npm:^0.6.0" - ini: "npm:~1.3.0" - minimist: "npm:^1.2.0" - strip-json-comments: "npm:~2.0.1" - bin: - rc: ./cli.js - checksum: 10c0/24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 - languageName: node - linkType: hard - "read-binary-file-arch@npm:^1.0.6": version: 1.0.6 resolution: "read-binary-file-arch@npm:1.0.6" @@ -8448,7 +8335,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": +"readable-stream@npm:^3.4.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -8806,13 +8693,6 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 - languageName: node - linkType: hard - "safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" @@ -8820,6 +8700,13 @@ __metadata: languageName: node linkType: hard +"safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + "safe-push-apply@npm:^1.0.0": version: 1.0.0 resolution: "safe-push-apply@npm:1.0.0" @@ -9068,24 +8955,6 @@ __metadata: languageName: node linkType: hard -"simple-concat@npm:^1.0.0": - version: 1.0.1 - resolution: "simple-concat@npm:1.0.1" - checksum: 10c0/62f7508e674414008910b5397c1811941d457dfa0db4fd5aa7fa0409eb02c3609608dfcd7508cace75b3a0bf67a2a77990711e32cd213d2c76f4fd12ee86d776 - languageName: node - linkType: hard - -"simple-get@npm:^4.0.0": - version: 4.0.1 - resolution: "simple-get@npm:4.0.1" - dependencies: - decompress-response: "npm:^6.0.0" - once: "npm:^1.3.1" - simple-concat: "npm:^1.0.0" - checksum: 10c0/b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0 - languageName: node - linkType: hard - "simple-update-notifier@npm:2.0.0": version: 2.0.0 resolution: "simple-update-notifier@npm:2.0.0" @@ -9405,13 +9274,6 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:~2.0.1": - version: 2.0.1 - resolution: "strip-json-comments@npm:2.0.1" - checksum: 10c0/b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 - languageName: node - linkType: hard - "stubborn-fs@npm:^1.2.5": version: 1.2.5 resolution: "stubborn-fs@npm:1.2.5" @@ -9458,31 +9320,6 @@ __metadata: languageName: node linkType: hard -"tar-fs@npm:^2.0.0": - version: 2.1.4 - resolution: "tar-fs@npm:2.1.4" - dependencies: - chownr: "npm:^1.1.1" - mkdirp-classic: "npm:^0.5.2" - pump: "npm:^3.0.0" - tar-stream: "npm:^2.1.4" - checksum: 10c0/decb25acdc6839182c06ec83cba6136205bda1db984e120c8ffd0d80182bc5baa1d916f9b6c5c663ea3f9975b4dd49e3c6bb7b1707cbcdaba4e76042f43ec84c - languageName: node - linkType: hard - -"tar-stream@npm:^2.1.4": - version: 2.2.0 - resolution: "tar-stream@npm:2.2.0" - dependencies: - bl: "npm:^4.0.3" - end-of-stream: "npm:^1.4.1" - fs-constants: "npm:^1.0.0" - inherits: "npm:^2.0.3" - readable-stream: "npm:^3.1.1" - checksum: 10c0/2f4c910b3ee7196502e1ff015a7ba321ec6ea837667220d7bcb8d0852d51cb04b87f7ae471008a6fb8f5b1a1b5078f62f3a82d30c706f20ada1238ac797e7692 - languageName: node - linkType: hard - "tar@npm:^6.0.5, tar@npm:^6.1.12": version: 6.2.1 resolution: "tar@npm:6.2.1" @@ -9656,15 +9493,6 @@ __metadata: languageName: node linkType: hard -"tunnel-agent@npm:^0.6.0": - version: 0.6.0 - resolution: "tunnel-agent@npm:0.6.0" - dependencies: - safe-buffer: "npm:^5.0.1" - checksum: 10c0/4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a - languageName: node - linkType: hard - "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0"