diff --git a/src/extensions/extension-loader.ts b/src/extensions/extension-loader.ts index 5e4ce43a2a..aed6d7734e 100644 --- a/src/extensions/extension-loader.ts +++ b/src/extensions/extension-loader.ts @@ -73,7 +73,7 @@ export class ExtensionLoader { } await Promise.all([this.whenLoaded, extensionsStore.whenLoaded]); - + // save state on change `extension.isEnabled` reaction(() => this.storeState, extensionsState => { extensionsStore.mergeState(extensionsState); @@ -149,7 +149,7 @@ export class ExtensionLoader { this.syncExtensions(extensions); const receivedExtensionIds = extensions.map(([lensExtensionId]) => lensExtensionId); - + // Remove deleted extensions in renderer side only this.extensions.forEach((_, lensExtensionId) => { if (!receivedExtensionIds.includes(lensExtensionId)) { @@ -301,6 +301,10 @@ export class ExtensionLoader { return this.extensions.get(extId); } + public async instanceToBeEnabled(extId: LensExtensionId): Promise { + return when(() => this.instances.get(extId)?.isEnabled); + } + /** * Get url to the tarball of the extension package. Assumes package is found from npm regisry. * @param packageName e.g. "@mirantis/lens-extension-cc" diff --git a/src/extensions/lens-extension.ts b/src/extensions/lens-extension.ts index 498729390e..4c9d948e16 100644 --- a/src/extensions/lens-extension.ts +++ b/src/extensions/lens-extension.ts @@ -22,7 +22,7 @@ export class LensExtension { readonly manifestPath: string; readonly isBundled: boolean; - @observable private isEnabled = false; + @observable isEnabled = false; constructor({ id, manifest, manifestPath, isBundled }: InstalledExtension) { this.id = id; diff --git a/src/main/protocol-handler/router.ts b/src/main/protocol-handler/router.ts index dd20c9fac8..8bd9900e08 100644 --- a/src/main/protocol-handler/router.ts +++ b/src/main/protocol-handler/router.ts @@ -4,6 +4,8 @@ import { match, matchPath } from "react-router"; import { pathToRegexp } from "path-to-regexp"; import { subscribeToBroadcast } from "../../common/ipc"; import logger from "../logger"; +import { extensionLoader } from "../../extensions/extension-loader"; +import { sanitizeExtensionName } from "../../extensions/lens-extension"; export enum RoutingErrorType { INVALID_PROTOCOL = "invalid-protocol", @@ -117,10 +119,13 @@ export class LensProtocolRouter extends Singleton { if (!routes) { if (this.missingExtensionHandler) { + const enabledPromise = extensionLoader.instanceToBeEnabled(sanitizeExtensionName(name)); + if (!await this.missingExtensionHandler(name)) { return; } + await enabledPromise; routes = this.extentionRoutes.get(name); if (!routes) {