Add server add-on documentation
Reviewed By: nikoant Differential Revision: D36446375 fbshipit-source-id: dfa9098428413bff454b5893f022735267dba5b8
This commit is contained in:
committed by
Facebook GitHub Bot
parent
76d4f01934
commit
88bc3110a5
@@ -153,9 +153,7 @@ export interface BasePluginClient<
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Subscribe to a specific event arriving from the server add-on.
|
* Subscribe to a specific event arriving from the server add-on.
|
||||||
*
|
|
||||||
* Messages can only arrive if the plugin is enabled and connected.
|
* Messages can only arrive if the plugin is enabled and connected.
|
||||||
* For background plugins messages will be batched and arrive the next time the plugin is connected.
|
|
||||||
*/
|
*/
|
||||||
onServerAddOnMessage<Event extends keyof ServerAddOnEvents & string>(
|
onServerAddOnMessage<Event extends keyof ServerAddOnEvents & string>(
|
||||||
event: Event,
|
event: Event,
|
||||||
|
|||||||
@@ -194,6 +194,73 @@ export function plugin(client: PluginClient) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### `onUnhandledMessage`
|
||||||
|
|
||||||
|
Usage: `client.onUnhandledMessage(callback: (event: string, params) => void)`
|
||||||
|
|
||||||
|
This method subscribe to all messages arriving from the devices which is not handled by an `onMessage` handler.
|
||||||
|
This handler is untyped, and onMessage should be favored over using onUnhandledMessage if the event name is known upfront.
|
||||||
|
|
||||||
|
#### `onServerAddOnStart`
|
||||||
|
|
||||||
|
> Experimental!
|
||||||
|
|
||||||
|
Usage: `client.onServerAddOnStart(callback: () => void)`
|
||||||
|
|
||||||
|
Triggered when a server add-on starts.
|
||||||
|
You should send messages to the server add-on only after it connects.
|
||||||
|
Do not forget to stop all communication when the add-on stops.
|
||||||
|
|
||||||
|
#### `onServerAddOnStop`
|
||||||
|
|
||||||
|
> Experimental!
|
||||||
|
|
||||||
|
Usage: `client.onServerAddOnStop(callback: () => void)`
|
||||||
|
|
||||||
|
Triggered when a server add-on stops.
|
||||||
|
You should stop all communication with the server add-on when the add-on stops.
|
||||||
|
|
||||||
|
#### `onServerAddOnMessage`
|
||||||
|
|
||||||
|
> Experimental!
|
||||||
|
|
||||||
|
Usage: `client.onServerAddOnMessage(event: string, callback: (params) => void)`
|
||||||
|
|
||||||
|
This subscribes the plugin to a specific event that is fired from the server add-on.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
type ServerAddOnEvents = {
|
||||||
|
newRow: {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
url: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export function plugin(client: PluginClient<{}, {}, ServerAddOnEvents>) {
|
||||||
|
const rows = createState<Record<string, Row>>({}, {persist: 'rows'});
|
||||||
|
|
||||||
|
client.onServerAddOnMessage('newRow', (row /* type will be inferred correctly */) => {
|
||||||
|
rows.update((draft) => {
|
||||||
|
draft[row.id] = row;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// etc
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `onServerAddOnUnhandledMessage`
|
||||||
|
|
||||||
|
> Experimental!
|
||||||
|
|
||||||
|
Usage: `client.onServerAddOnUnhandledMessage(callback: (event: string, params) => void)`
|
||||||
|
|
||||||
|
Subscribe to all messages arriving from the server add-ons not handled by another listener.
|
||||||
|
This handler is untyped, and onMessage should be favored over using onUnhandledMessage if the event name is known upfront.
|
||||||
|
|
||||||
### `onReady`
|
### `onReady`
|
||||||
|
|
||||||
The `onReady` event is triggered immediately after a plugin has been initialized and any pending state was restored.
|
The `onReady` event is triggered immediately after a plugin has been initialized and any pending state was restored.
|
||||||
@@ -201,6 +268,7 @@ This event fires after `onImport` / the interpretation of any `persist` flags an
|
|||||||
This event does not signal that the plugin is loaded in the UI yet (see `onActivated`) and does fire before deeplinks (see `onDeeplink`) are handled.
|
This event does not signal that the plugin is loaded in the UI yet (see `onActivated`) and does fire before deeplinks (see `onDeeplink`) are handled.
|
||||||
If a plugin has complex initialization logic it is recommended to put it in the `onReady` hook, as an error in the onReady hook won't cause the plugin not to be loaded.
|
If a plugin has complex initialization logic it is recommended to put it in the `onReady` hook, as an error in the onReady hook won't cause the plugin not to be loaded.
|
||||||
|
|
||||||
|
|
||||||
### Methods
|
### Methods
|
||||||
|
|
||||||
#### `send`
|
#### `send`
|
||||||
@@ -355,6 +423,39 @@ The gatekeepers are cached in `localStorage`. Therefore, you might get the cache
|
|||||||
Logger instance that logs information to the console, but also to the internal logging (in FB only builds) and which can be used to track performance.
|
Logger instance that logs information to the console, but also to the internal logging (in FB only builds) and which can be used to track performance.
|
||||||
See also [`useLogger`](#uselogger).
|
See also [`useLogger`](#uselogger).
|
||||||
|
|
||||||
|
#### `sendToServerAddOn`
|
||||||
|
|
||||||
|
Usage: `client.sendToServerAddOn(method: string, params: object): Promise<object>`
|
||||||
|
|
||||||
|
Send a message to the server add-on.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
type ServerAddOnMethods = {
|
||||||
|
currentLogs(params: {since: number}): Promise<string[]>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export function plugin(client: PluginClient<{}, {}, {}, ServerAddOnMethods}>) {
|
||||||
|
const logs = createState<string[]>([])
|
||||||
|
|
||||||
|
client.onServerAddOnStart(async () => {
|
||||||
|
try {
|
||||||
|
const currentLogs = await client.sendToServerAddOn('currentLogs', {
|
||||||
|
since: Date.now()
|
||||||
|
})
|
||||||
|
logs.set(currentLogs)
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Failed to retrieve current logs: ", e)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
//etc
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
See [React DevTools plugin](https://github.com/facebook/flipper/blob/main/desktop/plugins/public/reactdevtools/index.tsx) for an example of how to use server add-ons.
|
||||||
|
|
||||||
## DevicePluginClient
|
## DevicePluginClient
|
||||||
|
|
||||||
### Properties
|
### Properties
|
||||||
@@ -389,6 +490,22 @@ See the similarly named event under [`PluginClient`](#pluginclient).
|
|||||||
|
|
||||||
See the similarly named event under [`PluginClient`](#pluginclient).
|
See the similarly named event under [`PluginClient`](#pluginclient).
|
||||||
|
|
||||||
|
### `onServerAddOnStart`
|
||||||
|
|
||||||
|
See the similarly named event under [`PluginClient`](#pluginclient).
|
||||||
|
|
||||||
|
### `onServerAddOnStop`
|
||||||
|
|
||||||
|
See the similarly named event under [`PluginClient`](#pluginclient).
|
||||||
|
|
||||||
|
### `onServerAddOnMessage`
|
||||||
|
|
||||||
|
See the similarly named event under [`PluginClient`](#pluginclient).
|
||||||
|
|
||||||
|
### `onServerAddOnUnhandledMessage`
|
||||||
|
|
||||||
|
See the similarly named event under [`PluginClient`](#pluginclient).
|
||||||
|
|
||||||
### Methods
|
### Methods
|
||||||
|
|
||||||
#### `addMenuEntry`
|
#### `addMenuEntry`
|
||||||
@@ -411,6 +528,10 @@ See the similarly named method under [`PluginClient`](#pluginclient).
|
|||||||
|
|
||||||
See the similarly named method under [`PluginClient`](#pluginclient).
|
See the similarly named method under [`PluginClient`](#pluginclient).
|
||||||
|
|
||||||
|
### `sendToServerAddOn`
|
||||||
|
|
||||||
|
See the similarly named method under [`PluginClient`](#pluginclient).
|
||||||
|
|
||||||
## Device
|
## Device
|
||||||
|
|
||||||
`Device` captures the metadata of the device the plugin is currently connected to.
|
`Device` captures the metadata of the device the plugin is currently connected to.
|
||||||
|
|||||||
Reference in New Issue
Block a user