Summary:
This diff removes most remaining Electron imports, by storing env and path constants on the RenderHost. As nice side effect those paths are all cached now as well.
To make sure RenderHost is initialised before Flipper itself, forced loading Flipper through a require. Otherwise the setup is super sensitive to circular import statements, since a lot of module initialisation code depends on those paths / env vars.
Reviewed By: nikoant
Differential Revision: D31992230
fbshipit-source-id: 91beb430902272aaf4b051b35cdf12d2fc993347
Summary: Fixed several tests that caused uncaught promise rejects to fire after the tests finished. This caused jest to fail if there are too many of them.
Reviewed By: aigoncharov
Differential Revision: D32118124
fbshipit-source-id: 50734dab6dee2efec7f056940af72858b27b1707
Summary: moved `app/src/server` to `flipper-server-core/src` and fixed any fallout from that (aka integration points I missed on the preparing diffs).
Reviewed By: passy
Differential Revision: D31541378
fbshipit-source-id: 8a7e0169ebefa515781f6e5e0f7b926415d4b7e9
Summary:
what else can I say
move_complexity
Reviewed By: passy
Differential Revision: D31483414
fbshipit-source-id: 1692c792121a3aae0843eb238040cae0445cdf54
Summary: Moved Logger, sleep, timeout and server contract types to flipper-common packages.
Reviewed By: passy
Differential Revision: D31475790
fbshipit-source-id: 42d2147698875f9e919ad5250f9953f3bff3ec2d
Summary: Further decoupling of `server/` from the rest of the code base. Also fixed a problem with promise chaining causing promises to create unhandled rejection errors.
Reviewed By: passy
Differential Revision: D31474919
fbshipit-source-id: 027cccbe9b57d856c94d63c093d39b6cb3e53312
Summary: This diff separates the concept of a Client as now on the UI, from the concept of a Client as known on the server, and makes all interactions with client and vice versa async.
Reviewed By: timur-valiev
Differential Revision: D31235682
fbshipit-source-id: 99089e9b390b4c5359f97f6f2b15bf4b182b6cb9
Summary: Refactor clients storage: array -> map. A lot of logic looks up clients by their id, which is currently done with an array.find operation, which is pretty inefficient. This diff changes it to a map, that is pretty important, as in the next diff the decoupled client message handing will need to find the client again for every message that arrives.
Reviewed By: timur-valiev
Differential Revision: D31303536
fbshipit-source-id: ca3f540a3de7665930d2354436d37cb0fbfd5546
Summary:
Changelog: Improved plugin / device / app selection handing.
During some refactorings I discovered that the `connetions.selectedApp` field contained sometimes an application id, and sometimes just the name. This caused inconsistent behavior especially in unit tests.
I've cleaned that up, and renamed it to `selectedAppId` where applicable, to make the distinction more clear.
And, in contrast, userPreferredApp now always has a name, not an id.
During refactoring our existing selection update logic was quite in the way, which was overcomplicated still, since during the sandy chrome migration, the reducers needed to be able to handle both the old UI, and the new application selection UI. That logic has been simplified now, and a lot of tests were added.
As a further simplification the preferredApp/Device/Plugin are now only read and used when updating selection, but not when running selectors.
Reviewed By: timur-valiev
Differential Revision: D31305180
fbshipit-source-id: 2dbd9f9c33950227cc63aa29cc4a98bdd0db8e7a
Summary:
Client up `client.device` (which had no code references anymore) / `client.deviceSync`. Cleaned up feature code for old SDKs (pre 2, which is 3 years old).
This makes decapitating Client a little simpler in the rest of the stack.
Reviewed By: passy
Differential Revision: D31235436
fbshipit-source-id: 919679c1830e2b9368d0787d7b363c090305edb8
Summary: Some cleanup in device destruction code. This diff wraps up the stack that decouples device management from the UI. Next steps are client management, and system management (file access / command execution)
Reviewed By: passy
Differential Revision: D31084036
fbshipit-source-id: 93efee7dba2193589d3c08c51128ce03de5eff7f
Summary:
This stack takes care of handling care of moving all device interactions over the (possible) async channel FlipperServer. The FlipperServer interface (see previous diff) allows listening to specific server events using `on`, and emit commands to be executed by the server by using `exec` (e.g. `exec('take-screenshot', serial) => Promise<buffer>`).
FlipperServerImpl implements this interface on the server side.
The device implementations are split as follows
```
server / backend process:
ServerDevice
- iOSDevice
- AndroidDevice
- MetroDevice
- DummyDevice
- Mac/Windows Device
frontend / ui:
BaseDevice: a normal connected, device, implements device apis as they already existed
- ArchivedDevice (note that this doesn't have a server counterpart)
- TestDevice (for unit tests, with stubbed backend communication)
```
All features of devices are for simplicity unified (since the deviations are small), where specific device types might not implement certain features like taking screenshots or running shell commands.
To avoid making this diff unnecessarily big, some open Todo's will be addressed later in this stack, and it shouldn't be landed alone.
Reviewed By: timur-valiev
Differential Revision: D30909346
fbshipit-source-id: cce0bee94fdd5db59bebe3577a6084219a038719
Summary: This is the first diff in a stack of many where server and UI logic is further decoupled to be only communication through an event listener / emitting commands, where all data going over these media is json serializable. In this diff we extract the common interfaces that are to be used by both server and UI layer.
Reviewed By: passy
Differential Revision: D30899609
fbshipit-source-id: dc3c783707d47671f1d0f5dbf99cde17a8f69062
Summary:
Connections from VSCode and Kite would remain forever pending because they don't go through the secure connection handler. This diff fixes that. Also removed the separate event that existed for that, since registering a new client is already a 'success' signal, so it doesn't need a separate event.
It turned out that the VSCode pending connection is actually correct, as it never handles the `getPlugins` event, so apparently the handling is broken. Added timeouts to guard against that as well.
Applied several code simplications as well.
Introduced an explicit cert exchange medium 'NONE' so that in code it is a bit clearer where CSR negotiation is supposed to happen.
Changelog: Fixed an issue where Kite / Unity apps didn't connect anymore
Reviewed By: timur-valiev
Differential Revision: D30866301
fbshipit-source-id: 8bd214fd9eebcd9a7583f1b44ee283883002f62e
Summary: Made a start with decoupling JS device. Incomplete as there are still Electron deps.
Reviewed By: timur-valiev
Differential Revision: D30309257
fbshipit-source-id: b8002170cbbe8d68e1795ce7c12ffce4c8eac853
Summary: Decoupled metro 'device' from Redux store. Extracting some commonalities with Android device management up into FlipperServer
Reviewed By: timur-valiev
Differential Revision: D30309256
fbshipit-source-id: 1a9ac01e3f21d2d08761554d3644a7ae8d00a93e
Summary: See earlier diffs in the stack. This diff decouple android device management from the Redux store, replacing it with specific events.
Reviewed By: timur-valiev
Differential Revision: D30286345
fbshipit-source-id: 42f52056bf123b862e2fc087f2e7130c02bdd742
Summary: This diff moves the first small pieces of getting device detection up and running to `server/`, and the wiring between FlipperServer and flipper core / redux is setting up specific events and dispatch actions from there.
Reviewed By: timur-valiev
Differential Revision: D30276776
fbshipit-source-id: b30b996d03c27459815bebeb97b05b5fe5d24bec