diff --git a/src/common/protocol-handler/router.ts b/src/common/protocol-handler/router.ts index ea74d7ea0a..fe05783947 100644 --- a/src/common/protocol-handler/router.ts +++ b/src/common/protocol-handler/router.ts @@ -30,6 +30,7 @@ import { ExtensionsStore } from "../../extensions/extensions-store"; import { ExtensionLoader } from "../../extensions/extension-loader"; import type { LensExtension } from "../../extensions/lens-extension"; import type { RouteHandler, RouteParams } from "../../extensions/registries/protocol-handler"; +import { when } from "mobx"; // IPC channel for protocol actions. Main broadcasts the open-url events to this channel. export const ProtocolHandlerIpcPrefix = "protocol-handler"; @@ -178,16 +179,19 @@ export abstract class LensProtocolRouter extends Singleton { const { [EXTENSION_PUBLISHER_MATCH]: publisher, [EXTENSION_NAME_MATCH]: partialName } = match.params; const name = [publisher, partialName].filter(Boolean).join("/"); + const extensionLoader = ExtensionLoader.getInstance(); - const extension = ExtensionLoader.getInstance().getInstanceByName(name); - - if (!extension) { - logger.info(`${LensProtocolRouter.LoggingPrefix}: Extension ${name} matched, but not installed`); + try { + await when(() => !!extensionLoader.getInstanceByName(name), { timeout: 5_000 }); + } catch(error) { + logger.info(`${LensProtocolRouter.LoggingPrefix}: Extension ${name} matched, but not installed (${error})`); return name; } - if (!extension.isBundled && !ExtensionsStore.getInstance().isEnabled(extension.id)) { + const extension = extensionLoader.getInstanceByName(name); + + if (!ExtensionsStore.getInstance().isEnabled(extension.id)) { logger.info(`${LensProtocolRouter.LoggingPrefix}: Extension ${name} matched, but not enabled`); return name; diff --git a/src/main/index.ts b/src/main/index.ts index d9013cf1ba..f4c4351df9 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -187,10 +187,6 @@ app.on("ready", async () => { LensProtocolRouterMain.getInstance().rendererLoaded = true; }); - ExtensionLoader.getInstance().whenLoaded.then(() => { - LensProtocolRouterMain.getInstance().extensionsLoaded = true; - }); - logger.info("🧩 Initializing extensions"); // call after windowManager to see splash earlier diff --git a/src/main/protocol-handler/__test__/router.test.ts b/src/main/protocol-handler/__test__/router.test.ts index 6c1d9e777a..42e9bda3c6 100644 --- a/src/main/protocol-handler/__test__/router.test.ts +++ b/src/main/protocol-handler/__test__/router.test.ts @@ -44,7 +44,6 @@ describe("protocol router tests", () => { const lpr = LensProtocolRouterMain.createInstance(); - lpr.extensionsLoaded = true; lpr.rendererLoaded = true; }); diff --git a/src/main/protocol-handler/router.ts b/src/main/protocol-handler/router.ts index cbd609a9ff..2dc2665341 100644 --- a/src/main/protocol-handler/router.ts +++ b/src/main/protocol-handler/router.ts @@ -54,7 +54,6 @@ export class LensProtocolRouterMain extends proto.LensProtocolRouter { private missingExtensionHandlers: FallbackHandler[] = []; @observable rendererLoaded = false; - @observable extensionsLoaded = false; protected disposers = disposer(); @@ -90,7 +89,7 @@ export class LensProtocolRouterMain extends proto.LensProtocolRouter { if (routeInternally) { this._routeToInternal(url); } else { - this.disposers.push(when(() => this.extensionsLoaded, () => this._routeToExtension(url))); + this._routeToExtension(url); } } catch (error) { broadcastMessage(ProtocolHandlerInvalid, error.toString(), rawUrl);