diff --git a/desktop/flipper-common/src/ServerAddOn.tsx b/desktop/flipper-common/src/ServerAddOn.tsx index 2795083ef..5bd656f90 100644 --- a/desktop/flipper-common/src/ServerAddOn.tsx +++ b/desktop/flipper-common/src/ServerAddOn.tsx @@ -7,9 +7,45 @@ * @format */ -import {FlipperServerCommands} from './server-types'; +import { + FlipperServer, + FlipperServerCommands, + FlipperServerEvents, +} from './server-types'; export interface ServerAddOnControls { start: FlipperServerCommands['plugins-server-add-on-start']; stop: FlipperServerCommands['plugins-server-add-on-stop']; } + +// TODO: Share with js-flipper? Is it worth it? +export type FlipperPluginReceiverRes = + | object + | string + | number + | boolean + | null + | undefined + | void; + +export type FlipperPluginReceiver = ( + data: any, +) => FlipperPluginReceiverRes | Promise; + +export interface ServerAddOnPluginConnection { + send(method: string, params: unknown): void; + receive(method: string, receiver: FlipperPluginReceiver): void; +} + +export interface FlipperServerForServerAddOn extends FlipperServer { + emit( + event: 'plugins-server-add-on-message', + payload: FlipperServerEvents['plugins-server-add-on-message'], + ): void; +} + +export type ServerAddOnCleanup = () => Promise; +export type ServerAddOn = ( + connection: ServerAddOnPluginConnection, + {flipperServer}: {flipperServer: FlipperServerForServerAddOn}, +) => Promise; diff --git a/desktop/flipper-common/src/index.tsx b/desktop/flipper-common/src/index.tsx index b8e6aa16a..f81ba69b6 100644 --- a/desktop/flipper-common/src/index.tsx +++ b/desktop/flipper-common/src/index.tsx @@ -51,3 +51,4 @@ export * from './clientUtils'; export * from './settings'; export * from './PluginDetails'; export * from './doctor'; +export * from './ServerAddOn'; diff --git a/desktop/flipper-plugin/src/__tests__/api.node.tsx b/desktop/flipper-plugin/src/__tests__/api.node.tsx index 76782eb48..306246c14 100644 --- a/desktop/flipper-plugin/src/__tests__/api.node.tsx +++ b/desktop/flipper-plugin/src/__tests__/api.node.tsx @@ -109,6 +109,7 @@ test('Correct top level API exposed', () => { "FileDescriptor", "FileEncoding", "FlipperLib", + "FlipperServerForServerAddOn", "HighlightManager", "Idler", "InteractionReport", @@ -119,6 +120,8 @@ test('Correct top level API exposed', () => { "Notification", "PluginClient", "RemoteServerContext", + "ServerAddOn", + "ServerAddOnPluginConnection", ] `); }); diff --git a/desktop/flipper-plugin/src/index.tsx b/desktop/flipper-plugin/src/index.tsx index 55adc2fb0..f96fc32ed 100644 --- a/desktop/flipper-plugin/src/index.tsx +++ b/desktop/flipper-plugin/src/index.tsx @@ -152,4 +152,7 @@ export { DeviceLogLevel, Logger, CrashLog, + ServerAddOn, + ServerAddOnPluginConnection, + FlipperServerForServerAddOn, } from 'flipper-common'; diff --git a/desktop/flipper-server-core/src/plugins/PluginManager.tsx b/desktop/flipper-server-core/src/plugins/PluginManager.tsx index f3a604f12..e0f47dd1c 100644 --- a/desktop/flipper-server-core/src/plugins/PluginManager.tsx +++ b/desktop/flipper-server-core/src/plugins/PluginManager.tsx @@ -16,6 +16,7 @@ import { BundledPluginDetails, DownloadablePluginDetails, ExecuteMessage, + FlipperServerForServerAddOn, InstalledPluginDetails, } from 'flipper-common'; import {getStaticPath} from '../utils/pathUtils'; @@ -32,7 +33,6 @@ import { installPluginFromNpm, } from 'flipper-plugin-lib'; import {ServerAddOn} from './ServerAddOn'; -import {FlipperServerForServerAddOn} from './ServerAddOnDesktopToModuleConnection'; const maxInstalledPluginVersionsToKeep = 2; diff --git a/desktop/flipper-server-core/src/plugins/ServerAddOn.tsx b/desktop/flipper-server-core/src/plugins/ServerAddOn.tsx index fc2c90505..ebb145296 100644 --- a/desktop/flipper-server-core/src/plugins/ServerAddOn.tsx +++ b/desktop/flipper-server-core/src/plugins/ServerAddOn.tsx @@ -10,20 +10,15 @@ import assert from 'assert'; import {assertNotNull} from '../comms/Utilities'; import { - ServerAddOnDesktopToModuleConnection, FlipperServerForServerAddOn, -} from './ServerAddOnDesktopToModuleConnection'; -import { - ServerAddOnModuleToDesktopConnection, - ServerAddOnPluginConnection, -} from './ServerAddOnModuleToDesktopConnection'; + ServerAddOnCleanup, + ServerAddOn as ServerAddOnFn, +} from 'flipper-common'; +import {ServerAddOnDesktopToModuleConnection} from './ServerAddOnDesktopToModuleConnection'; +import {ServerAddOnModuleToDesktopConnection} from './ServerAddOnModuleToDesktopConnection'; -type ServerAddOnCleanup = () => Promise; interface ServerAddOnModule { - serverAddOn?: ( - connection: ServerAddOnPluginConnection, - {flipperServer}: {flipperServer: FlipperServerForServerAddOn}, - ) => Promise; + serverAddOn?: ServerAddOnFn; } const loadPlugin = (_pluginName: string): ServerAddOnModule => { diff --git a/desktop/flipper-server-core/src/plugins/ServerAddOnDesktopToModuleConnection.tsx b/desktop/flipper-server-core/src/plugins/ServerAddOnDesktopToModuleConnection.tsx index 9ed7af565..d820d6424 100644 --- a/desktop/flipper-server-core/src/plugins/ServerAddOnDesktopToModuleConnection.tsx +++ b/desktop/flipper-server-core/src/plugins/ServerAddOnDesktopToModuleConnection.tsx @@ -11,27 +11,13 @@ import assert from 'assert'; import { ClientResponseType, ExecuteMessage, - FlipperServer, - FlipperServerEvents, + FlipperServerForServerAddOn, } from 'flipper-common'; -import {ServerDevice} from '../devices/ServerDevice'; import { ServerAddOnModuleToDesktopConnection, ServerAddOnModuleToDesktopConnectionEvents, } from './ServerAddOnModuleToDesktopConnection'; -export interface FlipperServerForServerAddOn extends FlipperServer { - emit( - event: 'plugins-server-add-on-message', - payload: FlipperServerEvents['plugins-server-add-on-message'], - ): void; - registerDevice(device: ServerDevice): void; - unregisterDevice(serial: string): void; - getDevice(serial: string): ServerDevice; - getDeviceSerials(): string[]; - getDevices(): ServerDevice[]; -} - export class ServerAddOnDesktopToModuleConnection { constructor( private readonly moduleToDesktopConnection: ServerAddOnModuleToDesktopConnection, diff --git a/desktop/flipper-server-core/src/plugins/ServerAddOnModuleToDesktopConnection.tsx b/desktop/flipper-server-core/src/plugins/ServerAddOnModuleToDesktopConnection.tsx index 66ac1faa1..c1903251c 100644 --- a/desktop/flipper-server-core/src/plugins/ServerAddOnModuleToDesktopConnection.tsx +++ b/desktop/flipper-server-core/src/plugins/ServerAddOnModuleToDesktopConnection.tsx @@ -8,32 +8,19 @@ */ import EventEmitter from 'events'; -import {ResponseMessage, ClientErrorType, ExecuteMessage} from 'flipper-common'; +import { + ResponseMessage, + ClientErrorType, + ExecuteMessage, + ServerAddOnPluginConnection, + FlipperPluginReceiver, +} from 'flipper-common'; import {safeJSONStringify} from '../utils/safeJSONStringify'; -// TODO: Share with js-flipper? Is it worth it? -type FlipperPluginReceiverRes = - | object - | string - | number - | boolean - | null - | undefined - | void; - -type FlipperPluginReceiver = ( - data: any, -) => FlipperPluginReceiverRes | Promise; - export type ServerAddOnModuleToDesktopConnectionEvents = { message: ExecuteMessage; }; -export interface ServerAddOnPluginConnection { - send(method: string, params: unknown): void; - receive(method: string, receiver: FlipperPluginReceiver): void; -} - export class ServerAddOnModuleToDesktopConnection extends EventEmitter implements ServerAddOnPluginConnection