diff --git a/desktop/flipper-server-core/src/plugins/PluginManager.tsx b/desktop/flipper-server-core/src/plugins/PluginManager.tsx index 75fabd3b7..178b6d326 100644 --- a/desktop/flipper-server-core/src/plugins/PluginManager.tsx +++ b/desktop/flipper-server-core/src/plugins/PluginManager.tsx @@ -34,6 +34,7 @@ import { installPluginFromNpm, } from 'flipper-plugin-lib'; import {ServerAddOnManager} from './ServerAddManager'; +import {loadMarketplacePlugins} from './loadMarketplacePlugins'; const maxInstalledPluginVersionsToKeep = 2; @@ -98,6 +99,30 @@ export class PluginManager { return bundledPlugins; } + async loadMarketplacePlugins() { + console.info('Load available plugins from marketplace'); + return loadMarketplacePlugins(this.flipperServer, ''); + } + + async installPluginForMarketplace(name: string) { + console.info(`Install plugin '${name}' from marketplace`); + + const plugins = await this.loadMarketplacePlugins(); + const plugin = plugins.find((p) => p.id === name); + if (plugin) { + console.info(`Plugin '${name}' is available, attempt to install`); + try { + return await this.downloadPlugin(plugin); + } catch (e) { + console.warn(`Unable to install plugin '${name}'. Error:`, e); + } + } else { + console.info('Plugin not available in marketplace'); + } + + throw new Error(`Unable to install plugin '${name}' from marketplace`); + } + async downloadPlugin( plugin: DownloadablePluginDetails, ): Promise {