diff --git a/desktop/app/src/init.tsx b/desktop/app/src/init.tsx index 403ddec91..0f4767c2f 100644 --- a/desktop/app/src/init.tsx +++ b/desktop/app/src/init.tsx @@ -87,7 +87,11 @@ async function getFlipperServer( ); const keytar: KeytarModule = await getKeytarModule(staticPath); const gatekeepers = getGatekeepers(environmentInfo.os.unixname); - if (gatekeepers['flipper_desktop_use_server']) { + + const serverUsageEnabled = gatekeepers['flipper_desktop_use_server']; + const settings = await loadSettings(); + + if (serverUsageEnabled && (!settings.server || settings.server.enabled)) { const socketPath = await makeSocketPath(); if (!(await checkSocketInUse(socketPath))) { console.info('flipper-server: not running/listening, start'); @@ -104,6 +108,7 @@ async function getFlipperServer( '', false, keytar, + 'embedded', ); const companionEnv = await initCompanionEnv(server); @@ -113,6 +118,7 @@ async function getFlipperServer( } else { console.info('flipper-server: already running'); const loggerOutputFile = 'flipper-server-log.out'; + tailServerLogs(path.join(staticPath, loggerOutputFile)); } @@ -139,7 +145,7 @@ async function getFlipperServer( }, launcherSettings: await loadLauncherSettings(), processConfig: loadProcessConfig(env), - settings: await loadSettings(), + settings, validWebSocketOrigins: constants.VALID_WEB_SOCKET_REQUEST_ORIGIN_PREFIXES, }, diff --git a/desktop/flipper-common/src/server-types.tsx b/desktop/flipper-common/src/server-types.tsx index 597e25a11..323283c3a 100644 --- a/desktop/flipper-common/src/server-types.tsx +++ b/desktop/flipper-common/src/server-types.tsx @@ -28,6 +28,8 @@ import { // In the future, this file would deserve it's own package, as it doesn't really relate to plugins. // Since flipper-plugin however is currently shared among server, client and defines a lot of base types, leaving it here for now. +export type FlipperServerType = 'embedded' | 'external'; + export type FlipperServerState = | 'pending' | 'starting' @@ -454,6 +456,7 @@ export type FlipperServerConfig = { processConfig: ProcessConfig; validWebSocketOrigins: string[]; environmentInfo: EnvironmentInfo; + type?: FlipperServerType; }; export interface FlipperServer { diff --git a/desktop/flipper-common/src/settings.tsx b/desktop/flipper-common/src/settings.tsx index dd6264e1f..c1ea10167 100644 --- a/desktop/flipper-common/src/settings.tsx +++ b/desktop/flipper-common/src/settings.tsx @@ -58,6 +58,9 @@ export type Settings = { host?: string; port?: number; }; + server?: { + enabled: boolean; + }; }; export enum ReleaseChannel { diff --git a/desktop/flipper-server-core/src/server/startFlipperServer.tsx b/desktop/flipper-server-core/src/server/startFlipperServer.tsx index 8fe7ac182..ce92bf0f2 100644 --- a/desktop/flipper-server-core/src/server/startFlipperServer.tsx +++ b/desktop/flipper-server-core/src/server/startFlipperServer.tsx @@ -8,7 +8,11 @@ */ import os from 'os'; -import {parseEnvironmentVariables, getLogger} from 'flipper-common'; +import { + parseEnvironmentVariables, + getLogger, + FlipperServerType, +} from 'flipper-common'; import path from 'path'; import fs from 'fs-extra'; import {KeytarModule} from '../utils/keytar'; @@ -34,6 +38,7 @@ export async function startFlipperServer( settingsString: string, enableLauncherSettings: boolean, keytarModule: KeytarModule, + type: FlipperServerType, ): Promise { const execPath = process.execPath; const appPath = rootDir; @@ -68,6 +73,7 @@ export async function startFlipperServer( processConfig: loadProcessConfig(env), settings: await loadSettings(settingsString), validWebSocketOrigins: ['localhost:', 'http://localhost:'], + type, }, getLogger(), keytarModule, diff --git a/desktop/flipper-server-core/src/utils/settings.tsx b/desktop/flipper-server-core/src/utils/settings.tsx index 4094c2610..dc483f7a7 100644 --- a/desktop/flipper-server-core/src/utils/settings.tsx +++ b/desktop/flipper-server-core/src/utils/settings.tsx @@ -69,6 +69,9 @@ function getDefaultSettings(): Settings { enablePluginMarketplace: false, marketplaceURL: '', enablePluginMarketplaceAutoUpdate: true, + server: { + enabled: false, + }, }; } diff --git a/desktop/flipper-server/src/index.tsx b/desktop/flipper-server/src/index.tsx index 76db80518..b0e4f1923 100644 --- a/desktop/flipper-server/src/index.tsx +++ b/desktop/flipper-server/src/index.tsx @@ -105,6 +105,7 @@ async function start() { argv.settingsString, argv.launcherSettings, keytar, + 'external', ); const companionEnv = await initCompanionEnv(flipperServer); if (argv.failFast) { diff --git a/desktop/flipper-ui-core/src/chrome/SettingsSheet.tsx b/desktop/flipper-ui-core/src/chrome/SettingsSheet.tsx index 394021b56..08adbde82 100644 --- a/desktop/flipper-ui-core/src/chrome/SettingsSheet.tsx +++ b/desktop/flipper-ui-core/src/chrome/SettingsSheet.tsx @@ -130,8 +130,14 @@ class SettingsSheet extends Component { enablePluginMarketplace, enablePluginMarketplaceAutoUpdate, marketplaceURL, + server, } = this.state.updatedSettings; + const serverUsageEnabled = getRenderHostInstance().GK( + 'flipper_desktop_use_server', + ); + const serverType = getRenderHostInstance().serverConfig.type; + const settingsPristine = isEqual(this.props.settings, this.state.updatedSettings) && isEqual(this.props.launcherSettings, this.state.updatedLauncherSettings); @@ -381,6 +387,58 @@ class SettingsSheet extends Component { /> + { + this.setState((prevState) => ({ + updatedSettings: { + ...prevState.updatedSettings, + server: {enabled: v}, + }, + })); + }}> + {serverUsageEnabled ? ( + <> + + {serverType ? ( + <> + + {serverType === 'external' ? ( + <> +
+ + To stop the server, it may be necessary to kill the + process listening at port 52342. See below: + +
+ + sudo lsof -i -P | grep LISTEN | grep 52342 +
+ sudo kill <PID> +
+ + ) : ( + <> + )} + + ) : ( + <> + )} + + ) : ( + + )} +
Reset all new user tooltips