From 4d1d9648f06b7b6bcf034625654bf4f9846e9fe0 Mon Sep 17 00:00:00 2001 From: Andrey Goncharov Date: Mon, 21 Feb 2022 03:51:30 -0800 Subject: [PATCH] JS Flipper announcement Summary: Annonce JS flipper Reviewed By: mweststrate Differential Revision: D33565875 fbshipit-source-id: da7140ea3a331ff3d387801410e88d1f6746bee3 --- .../2022-02-21-js-flipper-announcement.md | 268 ++++++++++++++++++ website/static/img/flipper-arch.svg | 16 ++ website/static/img/js-flipper.jpg | Bin 0 -> 92655 bytes 3 files changed, 284 insertions(+) create mode 100644 website/blog/2022-02-21-js-flipper-announcement.md create mode 100644 website/static/img/flipper-arch.svg create mode 100644 website/static/img/js-flipper.jpg diff --git a/website/blog/2022-02-21-js-flipper-announcement.md b/website/blog/2022-02-21-js-flipper-announcement.md new file mode 100644 index 000000000..3ca10ae7f --- /dev/null +++ b/website/blog/2022-02-21-js-flipper-announcement.md @@ -0,0 +1,268 @@ +--- +title: Flipper is coming to your web and Node.js apps +author: Andrey Goncharov +author_title: Software Engineer +author_url: https://github.com/aigoncharov +author_image_url: https://avatars.githubusercontent.com/u/12794628?v=4 +tags: [flipper, web, react, node.js] +description: + Flipper now provides an official JavaScript client. We will see what + `js-flipper` is, go over Flipper communication protocol, talk about what it + takes to build a new Flipper client. +image: /img/js-flipper.jpg +hide_table_of_contents: false +--- + +![Cover image](/img/js-flipper.jpg) + +For quite some time already, Flipper has secretly provided an experimental +JavaScript SDK to support connections from browsers and Node.js under the name +of `flipper-js-client-sdk`. With the ongoing migration of all our clients to +WebSockets, we have committed to providing an official documented SDK for +JavaScript clients. Without further ado, welcome +[js-flipper](https://www.npmjs.com/package/js-flipper)! + +In this post we will: + +- See what `js-flipper` is +- Get acquainted with how to build a Flipper plugin for a React app +- Learn how Flipper talks to a mobile device +- Dive deeper into the message structure +- Glance at what it takes to support a new platform + + + +## What `js-flipper` is and why it matters + +Flipper supports native iOS, native Android apps and React Native apps out of +the box. Now with `js-flipper`, Flipper also supports JavaScript apps. Any +JavaScript app, whether they run in your browser or on your Node.js server, can +now connect to Flipper for a debugging session. + +`js-flipper` is a new NPM package that exposes a Flipper client to your +JavaScript apps. Any Flipper client, in its turn, is a set of abstractions that +let your device connect and talk to Flipper. Long story short, `js-flipper` +allows you to easily write Flipper plugins for your web and Node.js apps. + +> [Here](https://fbflipper.com/docs/tutorial/javascript/) is how you can write +> your first simple plugin. + +Why does it matter? + +It's a huge deal for two reasons: + +1. Flipper at its core is just a device discovery service with a message bus. + Its power comes from the plugins and the ecosystem. +2. It brings us one step closer to our goal of running Flipper everywhere. Bring + Flipper to your microwave! On a serious note, more platforms -> bigger + community -> more developers -> more plugins -> better Flipper for everyone. + +Let's take a quick look at the principal architecture of Flipper: + +![Flipper architecture](/img/flipper-arch.svg) + +Here is what happens there: + +1. Flipper constantly polls + [ADB](https://developer.android.com/studio/command-line/adb) for available + Android devices and [IDB](https://fbidb.io/) for available iOS devices. +2. If the device is running an app with an enabled Flipper client, the client + tries to connect to Flipper on your laptop. It lets Flipper know that there + is an app that it can talk to. Flipper and app chit-chat a bit negotiating + the security and the list of supported plugins. +3. The developer picks one of the connected apps / devices. Say, it's the app. +4. The developer clicks one of the available plugins. +5. The plugin starts talking to the app on the device via the message bus + exposed by Flipper. The plugin asks for necessary data from the app and shows + it in a pretty UI. + +At Meta, we have many active plugins, across a wide variety of devices, not just +phones, but also Quests, desktop applications, etc. At its core, Flipper is +data-agnostic and connect data flows to plugin displays. All Flipper core (we +call it Flipper Server) knows is what devices and Flipper-enabled apps are out +there. I hope it gets us on the same page regarding why plugins (and plugin +developers!) are crucial for Flipper. + +Another important conclusion you could draw from the diagram is that the state +of Flipper plugins is ephemeral and lives in the UI. + +## How Flipper talks to a mobile device + +Let's dive a bit deeper into how exactly the device and Flipper talk. Flipper +pulls device logs from ADB/IDB. For everything else, Flipper expects the app +(Flipper client inside of the app) to open a WebSocket connection to Flipper. + +The algorithm looks like this: + +1. The app opens a WebSocket connection to Flipper. +2. They exchange certificates. Flipper connects to the app using ADB/IDB and + writes a certificate to the app storage. +3. The app opens a secure WebSocket connection to Flipper using the certificate. + +Why do we even bother with the certificate exchange process? One of the +potential attack vectors is that a developer could install a malicious app on +the testing device. That app could spin up a WebSocket server and mask itself as +Flipper. However, unlike Flipper, the malicious app can't access the file +storage of another app. As a result, it can't complete the certificate exchange +process. + +On mobile devices certificate exchange is important, so that other apps on the +phone can't impersonate Flipper. For browser apps this isn't an issue as the +browser already makes sure a malicious page cannot act as Flipper server. For +platforms like this, we use a simplified connection algorithm: + +1. The app opens a WebSocket connection to Flipper. +2. Bingo! + +`js-flipper` implements the second algorithm, without the certificate exchange. + +## Message protocol and structure + +Once the final WebSocket connection is established, Flipper starts talking to +the app: + +1. It sends `getPlugins` and `getBackgroundPlugins` messages to get a list of + plugins supported by the app. +2. Flipper displays the available plugins to the developer. +3. Developer clicks on one of the plugins (enables a plugin). +4. Flipper loads the UI for the plugin. Let's settle on calling the part of the + plugin "desktop plugin" and the device part of the plugin "client plugin". +5. Flipper sends `init` message to the app. +6. Client plugin `onConnect` code is executed. Read more about Client Plugin API + [here](https://fbflipper.com/docs/extending/create-plugin/). +7. Whenever a "desktop plugin" needs some data from the device it sends an + `execute` message to the "client plugin" on the device. +8. "Client plugin" replies with the data. +9. "Client plugin" might force the "desktop plugin" to do something as well by + sending an `execute` message as well. However, it is rare. In the current + implementation, the "client plugin" can never expect a reply back from the + "desktop plugin". In other words, consider it as an event sink, not as a way + to extract some data from the "desktop plugin". +10. When the plugin is deactivated a `deinit` message is sent to the "client + plugin". +11. Client plugin `onDisconnect` code is executed. + +> The process above is for the insecure WebSocket connections we currently use +> in `js-flipper`. It is more complicated for secure WebSocket connections that +> require certificate exchange. + +Flipper expects each message to have the following structure: + +```ts +export interface FlipperRequest { + method: string; // 'getPlugins' | 'getBackgroundPlugins' | 'init' | 'deinit' | 'execute' | 'isMethodSupported' + params?: { + api: string; // Plugin ID (name) + // These nested `method` and `params` could be anything. + // You set them yourself as you see fit to support the data exchange between the "desktop plugin" and the "client plugin". + // For example, for 'ReactNativeTicTacToe' we support 2 methods: 'SetState' and 'GetState'. + // We pass a game state with a 'SetState' message. See https://fbflipper.com/docs/tutorial/javascript/#step-3-call-addplugin-to-add-your-plugin + method: string; + params?: unknown; + }; +} +``` + +The only exception is the response message the "client plugin" sends back when +the data is requested. + +```ts +export type FlipperResponse = { + id: number; + success?: object | string | number | boolean | null; + error?: { + message: string; + stacktrace?: string; + name?: string; + }; +}; +``` + +## Building a new client + +At this point, you know what messages your client needs to support in a Flipper +client: + +- `getPlugins` +- `getBackgroundPlugins` +- `init` +- `deinit` +- `execute` + +One other message we did not mention before is `isMethodSupported`. Its job is +to reply back to a "desktop plugin" whether a "client plugin" supports one of +plugin messages (that nested `method` field). It's useful when you have a single +"desktop plugin" implementation, but different "client plugin" implementations. +For example, some operations might not be supported on iOS, but are supported on +Android. Alternatively, it can address version differences between the plugin +installed on the device and the one loaded into Flipper. + +If you want to build a proper Flipper client, you also need to provide an +abstraction for plugin developers. Consider matching +[what we have for existing clients](https://fbflipper.com/docs/extending/create-plugin/#flipperplugin). + +Most of the groundwork for handling connections and doing certificate exchange +is already done in our +[C++ engine](https://github.com/facebook/flipper/tree/main/xplat). Our iOS, +Android, React Native clients use it under the hood. `js-flipper` implements +everything from scratch using native browser APIs (for Node.js apps we +[require developers to provide a WebSocket implementation](https://github.com/facebook/flipper/tree/main/js/js-flipper#nodejs)). + +Here is a detailed document on how to +[implement a client](https://fbflipper.com/docs/extending/new-clients/). You +might also want to check the source code of our existing clients: + +- [iOS](https://github.com/facebook/flipper/tree/main/iOS/FlipperKit) +- [Android](https://github.com/facebook/flipper/tree/main/android/src/main) +- [React Native](https://github.com/facebook/flipper/tree/main/react-native/react-native-flipper) +- [JavaScript](https://github.com/facebook/flipper/tree/main/js/js-flipper) + +## What's next? + +As of now, we do not provide any default plugins you might be used to for +`js-flipper` (Layout, Logs, Navigation, Crash Reporter, and others). We hope +this will change in the future with the help of ur beloved open-source +community! + +_Call to action!_ + +We would like to encourage you to play with `js-flipper`. See how it fits your +use-case and get back back to us with your feedback on +[GitHub](https://github.com/facebook/flipper/issues). If you find yourself +implementing one of your favorite Flipper plugins for `js-flipper`, do not +hesitate and raise a PR! + +Plugins can be either generic or very application specific. Plugins can interact +with Redux or MobX stores, read performance data or console logs from the +browser. At Meta, we also see a lot of plugins that are very application +specific. For example, plugins that allow logging in as specific test users with +a single click, reading the internal state of NewsFeed and interacting with it, +simulating photos captured by a smartphone, etc. A Flipper plugin can be any +form of UI that is useful to speed up debugging and tasks on things you work on +frequently! + +## P.S. Flipper needs you! + +Flipper is maintained by a small team at Meta, yet is serving over a hundred +plugins and dozens of different targets. Our team's goal is to support Flipper +as a plugin-based platform for which we maintain the infrastructure. We don't +typically invest in individual plugins, but we do love plugin improvements. For +example, the support for mocking network requests (on Android) was entirely +contributed by the community (thanks +[James Harmon](https://github.com/bizzguy)!). As was Protobuf support (thanks +[Harold Martin](https://github.com/hbmartin)!). + +For that reason, we've marked many requests in the issue tracker as +[PR Welcome](https://github.com/facebook/flipper/issues?q=is%3Aissue+is%3Aopen+label%3A%22PR+welcome%22). +Contributing changes should be as simple as cloning the +[repository](https://github.com/facebook/flipper) and running +`yarn && yarn start` in the `desktop/` folder. + +Investing in debugging tools, both generic ones or just for specific apps, will +benefit iteration speed. And we hope Flipper will make it as hassle free as +possible to create your debugging tools. For an overview of Flipper for React +Native, and why and how to build your own plugins, we recommend checking out the +[Flipper: The Extensible DevTool Platform for React Native](https://youtu.be/WltZTn3ODW4) +talk. + +Happy debugging! diff --git a/website/static/img/flipper-arch.svg b/website/static/img/flipper-arch.svg new file mode 100644 index 000000000..022d13d95 --- /dev/null +++ b/website/static/img/flipper-arch.svg @@ -0,0 +1,16 @@ + + + + + + + YOUR LAPTOPFLIPPER COREDEVICE DISCOVERYMESSAGE BUSDEVELOPERDEVICE1. FLIPPER FINDS NEW DEVICESFLIPPER UIDEVICESELECTIONGAZILLIONOFPLUGINSAPPFLIPPERCLIENT2. APP CONNECTS TO FLIPPER AND TELLS FLIPPER IT SPEAKS "FLIPPER" 3. DEVELOPER PICKS ONEOF THE DISCOVERED APPS / DEVICES4. DEVELOPER PICKS ONEOF THE AVAILABLE PLUGINS5. SELECTED PLUGINSTARTS CHATTING WITH THE APPLIKE CRAZY \ No newline at end of file diff --git a/website/static/img/js-flipper.jpg b/website/static/img/js-flipper.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e89b15745db358e9cbd76f2be5719bb97b8d2f8 GIT binary patch literal 92655 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 z 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

a zElV*LmhwqmxrE^{i-Fh@vvd_@6o-+V>3_lI`Ks$q5(okkavJYr59NA90Wt8Rk zJ47EONI<#k+s-&^Ho&*%>Yc1PIlfO$(i?yUDNZO(^8&yn%K#rk6hum)DAv!LHJkpP z9^(Lz=AvHjE?tvaJ^i6X8)I=hgAJsBEq~O;^0BnNi`HKP0}P>oNvncD*dY5f%>TT# z{a?C|7WpkoqU+ZV`O5^|B`5fr$aFdpYM1e4WM4Cilq?W7a_)6Us9+?w$W$$v-dW%_ zv0~f?;#~c$uBv`T-HwH$Dg3;#u%#K zV_6w6efbLo?TCxJK%v@;N$^jDP;si3R76@G1Od5TzE*Mh(_mzfke|q!n4{$HE6V*n zruvZB4ack78+Eb&#ma`fijY$kg-oZ4gKd2Eiop6hK-E?CuaX4+O2R=2?6I*tnCg~>O= zO)F1-Sjd}m6+j=>_drM_9cX|JxQeQ!E+~jMNQTaDF4&R&y$~qRI@rl%J0}z_$8%>HW-3-BX`Le zP=^o3Vk@z{mGFCL~|gf!xC6gVNzX)iW6eae(jzmwP(k z>4p>ZY97(O%$t({Nx)GqP(k01h+sRKJ+~mNMSs*hQ7@`SC%0h z;BRZFztFXhB&hBZ8i0@2148TzcfLF5U!@mhjn|s-$IasikWlQy||7wCBV>lCFcQqQ~Th*oqZl9G}wTZnxV3Kh|rL)UaaA z4xP(1;y+GtTHoy)0Mu(+k;{4eVbV&{Pjz(jd2nK_ZAB@+@a3eS@%9m`lHPt^gAS&N zNTM3uW=O-Z&|9@pwcok4l;DZ&w@=`*Bb!08my&CbdY`juq7rv?!-DwaH}6{sYy7xTtR9SgXWHHldVn2NbWyIMfgW!b3CImu26KD zaU!D}1I(sP+_cUgR2k))pR<i`(#H+ zHsrJ_Zw8}%A!6kOp0-)s?fm0l$2LX+77a&|Ei>a?H~tB7bpnd{4OT#3LCc`t=U@}5pP-Z=-HY|? z_0b=XfZ304+-h1K4-E^>*In6lb(o#nkKh*J|4}(0KEeX~L6vHXeP!pTeu49q_|AJZ zj=qJdK-Rn?;pBs!wtHDdZI;nLLBt5mD=hgf?O51>`hF!mKWc}v9I!#}NJKJEHD%P8 z8L4iRm9Q2VLo$#82lLUYnIprd>em`_?yVP8BGNmMP>4cqx(Xf$3zVa%rJToD*EQ=u z^Xt_80XR4Qx7_;wv2!SY02EwEa=zTH4qh;3cB{4+Mi2S7NE+M7(Bc}(o4X!n&17KB z-Nl8gOjC?Uz59YkDaj&K<+op1uFYr;n38%!Nn8X=dxk|~66t5wI!1#^iwmtui6+Rh zA>(Of6+!)I#5BHmeO>#%+A-0xgRygn9Wp}fQjTvjddtVew>M=WzS*DTj51mhK4p`S zPjsPAu?e}>QoxkyyWeuAQZo9EX2Hd{t~1JpoClAGta)X;P@Z_t1tXAMih%q4;10qj z%*`O7Oq?0qKUaMEpsZT6PU;;*O*IDH&&C^#Y}Ix2{aZFUJGm{{nIxhppNKw=mwiOy z<%4_s1|w;&Vog&VaiBfys|a%mDT9a=Cj|}e*_^>e*s83M9qbdxBlIydn2}G|=mf`{ z1jACn<)YN)gIpHqh7^dX>$B9yrS?@m;%#ioKQvqWGzl63Y-i%t8xlf!rXVtUis3<^ z;`P_kOsMDnzpe?op?D-Wl$e99S&8Fjj^m%{HDT(8Ca3KKHI!{Nb#ES|8N