diff --git a/lerna.json b/lerna.json index 630f0d68c0..86aa36fc6e 100644 --- a/lerna.json +++ b/lerna.json @@ -4,7 +4,7 @@ "packages": [ "packages/*" ], - "version": "6.4.7", + "version": "6.4.8", "npmClient": "yarn", "npmClientArgs": [ "--network-timeout=100000" diff --git a/packages/core/package.json b/packages/core/package.json index 4d18ce9c18..146833a557 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -3,7 +3,7 @@ "productName": "", "description": "Lens Desktop Core", "homepage": "https://github.com/lensapp/lens", - "version": "6.4.7", + "version": "6.4.8", "repository": { "type": "git", "url": "git+https://github.com/lensapp/lens.git" diff --git a/packages/core/src/main/getDiForUnitTesting.ts b/packages/core/src/main/getDiForUnitTesting.ts index 1698997e36..1324667ae6 100644 --- a/packages/core/src/main/getDiForUnitTesting.ts +++ b/packages/core/src/main/getDiForUnitTesting.ts @@ -26,7 +26,6 @@ import electronUpdaterIsActiveInjectable from "./electron-app/features/electron- import setUpdateOnQuitInjectable from "./electron-app/features/set-update-on-quit.injectable"; import waitUntilBundledExtensionsAreLoadedInjectable from "./start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable"; import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx"; -import electronInjectable from "./utils/resolve-system-proxy/electron.injectable"; import initializeClusterManagerInjectable from "./cluster/initialize-manager.injectable"; import type { GlobalOverride } from "../common/test-utils/get-global-override"; import applicationInformationInjectable from "../common/vars/application-information-injectable"; @@ -73,7 +72,6 @@ export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) di.override(globalOverride.injectable, globalOverride.overridingInstantiate); } - di.override(electronInjectable, () => ({})); di.override(waitUntilBundledExtensionsAreLoadedInjectable, () => async () => {}); overrideRunnablesHavingSideEffects(di); diff --git a/packages/core/src/main/utils/resolve-system-proxy/electron.injectable.ts b/packages/core/src/main/utils/resolve-system-proxy/electron.injectable.ts deleted file mode 100644 index a5999c9e59..0000000000 --- a/packages/core/src/main/utils/resolve-system-proxy/electron.injectable.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { getInjectable } from "@ogre-tools/injectable"; -import electron from "electron"; - -const electronInjectable = getInjectable({ - id: "electron", - instantiate: () => electron, - causesSideEffects: true, -}); - -export default electronInjectable; diff --git a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.injectable.ts b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.injectable.ts index c663d59fde..4ad2da39b8 100644 --- a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.injectable.ts +++ b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.injectable.ts @@ -3,28 +3,19 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import electronInjectable from "./electron.injectable"; import withErrorLoggingInjectable from "../../../common/utils/with-error-logging/with-error-logging.injectable"; +import resolveSystemProxyWindowInjectable from "./resolve-system-proxy-window.injectable"; const resolveSystemProxyFromElectronInjectable = getInjectable({ id: "resolve-system-proxy-from-electron", instantiate: (di) => { - const electron = di.inject(electronInjectable); + const helperWindow = di.inject(resolveSystemProxyWindowInjectable); const withErrorLoggingFor = di.inject(withErrorLoggingInjectable); - const withErrorLogging = withErrorLoggingFor(() => "Error resolving proxy"); - + return withErrorLogging(async (url: string) => { - const webContent = electron.webContents - .getAllWebContents() - .find((x) => !x.isDestroyed()); - - if (!webContent) { - throw new Error(`Tried to resolve proxy for "${url}", but no browser window was available`); - } - - return await webContent.session.resolveProxy(url); + return await helperWindow.webContents.session.resolveProxy(url); }); }, }); diff --git a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts index a80a05a7cf..9a8b485ef7 100644 --- a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts +++ b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts @@ -5,13 +5,13 @@ import { getDiForUnitTesting } from "../../getDiForUnitTesting"; import resolveSystemProxyFromElectronInjectable from "./resolve-system-proxy-from-electron.injectable"; -import electronInjectable from "./electron.injectable"; +import resolveSystemProxyWindowInjectable from "./resolve-system-proxy-window.injectable"; import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; -import type electron from "electron"; import { getPromiseStatus } from "../../../common/test-utils/get-promise-status"; import logErrorInjectable from "../../../common/log-error.injectable"; import type { DiContainer } from "@ogre-tools/injectable"; +import type { BrowserWindow, Session, WebContents } from "electron"; describe("technical: resolve-system-proxy-from-electron", () => { let resolveSystemProxyMock: AsyncFnMock<(url: string) => Promise>; @@ -26,44 +26,19 @@ describe("technical: resolve-system-proxy-from-electron", () => { di.override(logErrorInjectable, () => logErrorMock); }); - describe("given there are non-destroyed Lens windows, when called with URL", () => { + describe("given there are no unexpected issues, when called with URL", () => { beforeEach(() => { resolveSystemProxyMock = asyncFn(); di.override( - electronInjectable, - - () => - ({ - webContents: { - getAllWebContents: () => [ - { - isDestroyed: () => true, - - session: { - resolveProxy: () => { - throw new Error("should never come here"); - }, - }, - }, - - { - isDestroyed: () => false, - session: { resolveProxy: resolveSystemProxyMock }, - }, - - { - isDestroyed: () => false, - - session: { - resolveProxy: () => { - throw new Error("should never come here"); - }, - }, - }, - ], - }, - } as unknown as typeof electron), + resolveSystemProxyWindowInjectable, + () => ({ + webContents: { + session: { + resolveProxy: resolveSystemProxyMock, + } as unknown as Session, + } as unknown as WebContents, + } as unknown as BrowserWindow), ); const resolveSystemProxyFromElectron = di.inject( @@ -73,7 +48,7 @@ describe("technical: resolve-system-proxy-from-electron", () => { actualPromise = resolveSystemProxyFromElectron("some-url"); }); - it("calls to resolve proxy from the first window", () => { + it("calls to resolve proxy from the browser window", () => { expect(resolveSystemProxyMock).toHaveBeenCalledWith("some-url"); }); @@ -90,28 +65,23 @@ describe("technical: resolve-system-proxy-from-electron", () => { }); }); - describe("given there are only destroyed Lens windows, when called with URL", () => { + describe("given there are unexpected issues, when called with URL", () => { let error: any; beforeEach(async () => { - di.override( - electronInjectable, - () => - ({ - webContents: { - getAllWebContents: () => [ - { - isDestroyed: () => true, + resolveSystemProxyMock = asyncFn(); - session: { - resolveProxy: () => { - throw new Error("should never come here"); - }, - }, - }, - ], - }, - } as unknown as typeof electron), + di.override( + resolveSystemProxyWindowInjectable, + () => ({ + webContents: { + session: { + resolveProxy: () => { + throw new Error("unexpected error"); + }, + } as unknown as Session, + } as unknown as WebContents, + } as unknown as BrowserWindow), ); resolveSystemProxyMock = asyncFn(); @@ -128,7 +98,7 @@ describe("technical: resolve-system-proxy-from-electron", () => { }); it("throws error", () => { - expect(error.message).toBe('Tried to resolve proxy for "some-url", but no browser window was available'); + expect(error.message).toBe("unexpected error"); }); it("logs error", () => { diff --git a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.global-override-for-injectable.ts b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.global-override-for-injectable.ts new file mode 100644 index 0000000000..4bf1ada952 --- /dev/null +++ b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.global-override-for-injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { getGlobalOverride } from "@k8slens/test-utils"; +import type { BrowserWindow, Session, WebContents } from "electron"; +import resolveSystemProxyWindowInjectable from "./resolve-system-proxy-window.injectable"; + +export default getGlobalOverride( + resolveSystemProxyWindowInjectable, + () => ({ + webContents: { + session: { + resolveProxy: () => "DIRECT", + } as unknown as Session, + } as unknown as WebContents, + } as unknown as BrowserWindow), +); diff --git a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.injectable.ts b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.injectable.ts new file mode 100644 index 0000000000..88e4319fa0 --- /dev/null +++ b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.injectable.ts @@ -0,0 +1,16 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { BrowserWindow } from "electron"; + +const resolveSystemProxyWindowInjectable = getInjectable({ + id: "resolve-system-proxy-window", + instantiate: () => { + return new BrowserWindow({ show: false, paintWhenInitiallyHidden: false }); + }, + causesSideEffects: true, +}); + +export default resolveSystemProxyWindowInjectable; diff --git a/packages/extension-api/package.json b/packages/extension-api/package.json index ae638adcdc..c6302d875e 100644 --- a/packages/extension-api/package.json +++ b/packages/extension-api/package.json @@ -2,7 +2,7 @@ "name": "@k8slens/extensions", "productName": "OpenLens extensions", "description": "OpenLens - Open Source Kubernetes IDE: extensions", - "version": "6.4.7", + "version": "6.4.8", "copyright": "© 2022 OpenLens Authors", "license": "MIT", "main": "dist/extension-api.js", @@ -26,7 +26,7 @@ "prepare:dev": "yarn run build" }, "dependencies": { - "@k8slens/core": "^6.4.7" + "@k8slens/core": "^6.4.8" }, "devDependencies": { "@types/node": "^16.18.6", diff --git a/packages/open-lens/package.json b/packages/open-lens/package.json index 182372518e..da1d157945 100644 --- a/packages/open-lens/package.json +++ b/packages/open-lens/package.json @@ -4,7 +4,7 @@ "productName": "OpenLens", "description": "OpenLens - Open Source IDE for Kubernetes", "homepage": "https://github.com/lensapp/lens", - "version": "6.4.7", + "version": "6.4.8", "repository": { "type": "git", "url": "git+https://github.com/lensapp/lens.git" @@ -192,7 +192,7 @@ } }, "dependencies": { - "@k8slens/core": "^6.4.7", + "@k8slens/core": "^6.4.8", "@k8slens/ensure-binaries": "^6.4.0-beta.16", "@k8slens/generate-tray-icons": "^6.4.0-beta.16", "@ogre-tools/fp": "^12.0.1",