diff --git a/desktop/flipper-frontend-core/src/AbstractClient.tsx b/desktop/flipper-frontend-core/src/AbstractClient.tsx index e228ddc5e..dfaef0a4b 100644 --- a/desktop/flipper-frontend-core/src/AbstractClient.tsx +++ b/desktop/flipper-frontend-core/src/AbstractClient.tsx @@ -50,6 +50,7 @@ export type RequestMetadata = { export interface ClientConnection { send(data: any): void; + sendExpectResponse(data: any): Promise; } @@ -63,7 +64,6 @@ export default abstract class AbstractClient extends EventEmitter { backgroundPlugins: Plugins; connection: ClientConnection | null | undefined; activePlugins: Set; - device: BaseDevice; logger: Logger; @@ -71,6 +71,11 @@ export default abstract class AbstractClient extends EventEmitter { private readonly serverAddOnControls: ServerAddOnControls; private readonly flipperServer: FlipperServer; + private resolveInitPromise!: (_: unknown) => void; + readonly initializationPromise = new Promise((_resolve) => { + this.resolveInitPromise = _resolve; + }); + constructor( id: string, query: ClientQuery, @@ -116,6 +121,7 @@ export default abstract class AbstractClient extends EventEmitter { } }); this.emit('plugins-change'); + this.resolveInitPromise?.(null); } // get the supported plugins diff --git a/desktop/flipper-ui-core/src/dispatcher/handleOpenPluginDeeplink.tsx b/desktop/flipper-ui-core/src/dispatcher/handleOpenPluginDeeplink.tsx index bb50fdcd4..cb7f21e1f 100644 --- a/desktop/flipper-ui-core/src/dispatcher/handleOpenPluginDeeplink.tsx +++ b/desktop/flipper-ui-core/src/dispatcher/handleOpenPluginDeeplink.tsx @@ -143,6 +143,11 @@ export async function handleOpenPluginDeeplink( return; } console.debug('[deeplink] Cleared device plugin support check.'); + + await client?.initializationPromise; + + console.debug('[deeplink] Client initialized'); + if (!isDevicePlugin && !client!.plugins.has(params.pluginId)) { await Dialog.alert({ title,