Summary:
`setProcessState` does some adjusting to PATH. This was only ever done for Electron.
This change moves that functionality to FlipperServerImpl which is the one what orchestrates. By doing this, flipper server also benefits from getting these adjustments.
Reviewed By: antonk52
Differential Revision: D46836659
fbshipit-source-id: f98291d320cf9b7f3808223af8745c068b1318ce
Summary:
When distributing plugin over Marketplace. Currently there is an issue with downloading a plugin to `tmp` folder if the plugin `packageName` starts with `company-prefix/flipper-plugin-name`. It would throw `ENONET` error while trying to stream the response data into `tmp` folder.
## Changelog
- add support for prefixed plugin package names (`shopify/flipper-plugin-name`,...)
Pull Request resolved: https://github.com/facebook/flipper/pull/4811
Test Plan: - Try install a plugin from Marketplace which has `/` in the plugin `package.json` `name`.
Reviewed By: lblasa
Differential Revision: D46679195
Pulled By: passy
fbshipit-source-id: f330896dae9da7cbe101b1c6d7ed07667fb7ae0a
Summary:
^
In addition to logging to the console bootstrap performance metrics, track these events to scuba as well.
Reviewed By: aigoncharov
Differential Revision: D46648876
fbshipit-source-id: 191704c13158884bb8cfbca614a23f2a64f1fd93
Summary: This is a better place as it takes place once the server starts listening.
Reviewed By: passy
Differential Revision: D46558350
fbshipit-source-id: f586defecc8e16d8f0b285615803662d8b6b75fb
Summary: This is necessary as we map from the protocol medium to our internal medium representation.
Reviewed By: mweststrate
Differential Revision: D46557431
fbshipit-source-id: 617307cd860e1c7e230be2441c06417c44af580e
Summary: If after 15min there are no connected clients, close flipper server.
Reviewed By: antonk52
Differential Revision: D46519563
fbshipit-source-id: c3396ed8987be8ca7075c644734793e4ebceba18
Summary: These are no longer that useful and can be quite verbose, remove.
Reviewed By: antonk52
Differential Revision: D46516093
fbshipit-source-id: e6c3a546d379ca20ff8757fdc3feaa11bf0788a0
Summary:
All clients need to provide an authentication token before connecting. Electron app is no different.
This change adds the authentication token whether we are connecting over UDS or TCP.
Before this change, if Flipper server was already running, launching the Electron app would look similar to this:
{F1016961594}
Reviewed By: antonk52
Differential Revision: D46418758
fbshipit-source-id: f00ffe675df78403d5921250e3e9ed9331a55bde
Summary:
Used to be stored in the static directory as it was meant to be used by connecting clients.
This is still the case, except that there may be different clients with different static directories all trying to connect to the same server.
Instead, store the authentication token with the other crypto files, in the user's home directory.
By doing this, all clients, as long as they have access to the local filesystem, can use it.
Reviewed By: mweststrate
Differential Revision: D46418639
fbshipit-source-id: 181e98346d86ad7b3fc1d0005aca3350deb6df32
Summary:
I noticed we were not killing the PortForwardingApp on exit.
This is not ideal.
So, use an exit hook to kill the app.
Reviewed By: passy
Differential Revision: D46392855
fbshipit-source-id: e2b75f76c9dfab0ff46df3ad2c94a1a523154b2a
Summary:
Simplifies medium usage. Clients report this value as an integer. Internally, we transform this integer as type (a set of valid strings).
Instead of transform this value in different places, do it once when the client query is received.
Reviewed By: antonk52
Differential Revision: D46358024
fbshipit-source-id: ecd2b6c6ccbe7c38787a89d4e2f81930c7b91864
Summary: On my mac localhost resolves to an IP6 address by the new adb lib. This should fix it.
Reviewed By: LukeDefeo
Differential Revision: D46314612
fbshipit-source-id: 3771efd2c6b79fe9ae9851ce4aac35bcede28847
Summary: It seems that adb path has changed on the jest-e2e side. That might case the flipper e2e test failure. With this fallback we have granular control of the path.
Reviewed By: antonk52
Differential Revision: D46278512
fbshipit-source-id: 97310459de54eeb003eefb3a3ff06af8b13bebae
Summary:
Need to answer:
- Certificate exchange success rate, fails and errors a day per OS and device type.
Reviewed By: antonk52
Differential Revision: D46221301
fbshipit-source-id: 03c6993aa15f56fdf98a7abd57d00b2af0e9ce1a
Summary: Same as previous diff but for plain socket.
Reviewed By: antonk52
Differential Revision: D46220933
fbshipit-source-id: 235ca860891b8514dd0d743d32fe85f15a2cdd7e
Summary: Same as previous diff but for TLS attempts.
Reviewed By: antonk52
Differential Revision: D46220897
fbshipit-source-id: 9495c39edffbdebe0ba21ec7320b63bad8759dde
Summary:
Need to answer:
- How many app connections a day/week?
- How many connections a day/week per app?
- How many connections a day/week per os?
- How many connections a day/week over WWW exchange?
- How many connections a day/week over FS exchange?
- How many connections over a device?
- How many connections over a simulator?
Reviewed By: antonk52
Differential Revision: D46220581
fbshipit-source-id: 6783f49b59cba91cd04625044314973d98cef301
Summary:
Need to answer:
- How many starts a day over time
Reviewed By: antonk52
Differential Revision: D46219995
fbshipit-source-id: bffaeadf684a2d34c6e145784c5a86dbaf5f532a
Summary:
Need to answer:
- Proxy errors rate over time
Reviewed By: antonk52
Differential Revision: D46219927
fbshipit-source-id: 1ad8cc60303ed3aa34828b9ff87009ff7754a146
Summary:
Some times the socket can already be in use by an existing process. Track it as to quantify how likely this is found in production. May remove later.
Need to answer:
- Socket already in use rate over time
Reviewed By: antonk52
Differential Revision: D46219768
fbshipit-source-id: 27da82cddb707f729a1d43079e84c221bb544a82
Summary:
Define the tracker interface and replace the existing authentication token verification tracking.
Subsequent diffs will add analytics for remaining connectivity areas.
Need to answer:
- No tokens rate over time
- Unable to verify tokens rate over time
Reviewed By: antonk52
Differential Revision: D46219661
fbshipit-source-id: dfc41cae664bc1ef211d312990120111fca3808b
Summary:
Right now, this simply avoids trying to create a server instance if one appears to be already running.
In a future change, we may decide to kill the existing instance and replace it with a new one.
But, in this case, running this as is will be useful as it will provide the connection URL with the auth token.
Also remove flipper server dependency from finding installation. In this case, we don't need it and can use `os.getPlatform()` instead.
Reviewed By: antonk52
Differential Revision: D46144843
fbshipit-source-id: 2922843b916d37e0126e43ae65a622f87a6920ec
Summary: Recently , we started verifying a special token for every websocket connection. It made e2e tests fail. We are going to use this bypass flag in jest e2e envs.
Reviewed By: lblasa
Differential Revision: D46025343
fbshipit-source-id: c2e6e0b561286fb8b571565243a45cdfb56a54a9
Summary:
We were using an old unmaintained/abandonned library for communicating with adb server https://github.com/openstf/adbkit
This was giving me issues i couldnt figure out when running flipper server.
There is a popular fork written in typescript here https://github.com/DeviceFarmer/adbkit but it uses blue bird for promises.
There is a fork of the fork here which i have chosen to use which is the same api as above but with es6 promises, https://github.com/UrielCh/adbkit.
Both forks have a slightly different api to the original. In the original library there was a single client and any command directed at a particular device had a serial as the first argument
In the new libraries you create a DeviceClient where the serial is baked in and you don't need to supply this argument every time
allow-large-files
Reviewed By: lblasa
Differential Revision: D45569652
fbshipit-source-id: 2a23c0eaa12feaebdccadb3d343e087c0d5708d5
Summary:
Clean initialisation by passing down the environment info to start server.
(Also rename dir to path as that's the name used in other places)
Reviewed By: passy
Differential Revision: D45731751
fbshipit-source-id: a60fdd49c567fc312d1f8da72db3a46a0828c140
Summary:
For Electron builds, use the same directory as certificates and keys.
For headless builds, then use the static directory.
Reviewed By: antonk52
Differential Revision: D45728515
fbshipit-source-id: 55a3b143a9289fed23e57cbf6b701a5e48d27332
Summary: The isHeadlessBuild flag was not properly set.
Reviewed By: antonk52
Differential Revision: D45728435
fbshipit-source-id: 3616c4358114d4f3d96372766dabf48b27b44333
Summary:
Until now, launching flipper-server with TCP would accept any incoming connection as long as it comes from the same origin (localhost) using web socket host origin verification.
This is not entirely secure as origin can be spoofed with tools like curl.
Our team created a security review and a proposal was written:
https://docs.google.com/document/d/16iXypCQibPiner061SoaQUFUY9tLVAEpkKfV_hUXI7c/
Effectively, Flipper can generate a token which is then used by the client to authenticate.
This diff contains the changes required to generate, obtain, and validate authentication tokens from clients connecting to flipper over TCP connections.
The token itself is a JWT token. JWT was chosen because it is a simple industry standard which offers three features which can immediately benefit us:
- Expiration handling. No need for Flipper to store this information anywhere.
- Payload. Payload can be used to push any data we deem relevant i.e. unix username.
- Signing. Signed and verified using the same server key pair which is already in place for certificate exchange.
Additionally, the token is stored in the Flipper static folder. This ensures that the browser and PWA clients have access to it.
Reviewed By: mweststrate
Differential Revision: D45179654
fbshipit-source-id: 6761bcb24f4ba30b67d1511cde8fe875158d78af
Summary: The error is non-fatal as it's already handled and it's not actionable by the Flipper team.
Reviewed By: lawrencelomax
Differential Revision: D44054514
fbshipit-source-id: c54c7e935374a1c97e54a5da4daaa3f26b236023
Summary: We can't do much if a phone is not setup properly
Reviewed By: lblasa
Differential Revision: D43980508
fbshipit-source-id: 5baf82ae36030b81c7cc90bcf6a5de2af9304fb3
Summary: This is firing regularly when people have a broken local setup.
Reviewed By: lawrencelomax
Differential Revision: D43834469
fbshipit-source-id: 1fbc2cf52f93046984e9846f8aed931106542b03
Summary:
Bumps [js-base64](https://github.com/dankogai/js-base64) from 3.7.4 to 3.7.5.
<details>
<summary>Commits</summary>
<ul>
<li><a href="7e790b799e"><code>7e790b7</code></a> version 3.7.5</li>
<li><a href="f729053682"><code>f729053</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/dankogai/js-base64/issues/167">https://github.com/facebook/flipper/issues/167</a> from ctomacheski/main</li>
<li><a href="a9a994f367"><code>a9a994f</code></a> improve performance by stop using the mapFn param on Uint8Array.from constructor</li>
<li>See full diff in <a href="https://github.com/dankogai/js-base64/compare/3.7.4...3.7.5">compare view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `dependabot rebase` will rebase this PR
- `dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `dependabot merge` will merge this PR after your CI passes on it
- `dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `dependabot cancel merge` will cancel a previously requested merge and block automerging
- `dependabot reopen` will reopen this PR if it is closed
- `dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
</details>
Pull Request resolved: https://github.com/facebook/flipper/pull/4519
Reviewed By: mweststrate
Differential Revision: D43305193
Pulled By: ivanmisuno
fbshipit-source-id: e10eb134c079951e325c1f4d627eb1e60510c12d
Summary: Plugin download failure is typical a transient error, no need to trigger monitoring for that
Reviewed By: ivanmisuno
Differential Revision: D43118116
fbshipit-source-id: 0cd0f87f0ed6123adcba28139308ecea92b1b508
Summary:
The 'screenrecord' command is not in some Android phones e.g OPPO. So 'screenrecord' command can't be used as a basis for determining whether or not you can take a screenshot. Replace it with 'screencap' command to determine whether you can take a screenshot.
## Changelog
Fixed a bug where the screenshot of some Android phones was unavailable
Pull Request resolved: https://github.com/facebook/flipper/pull/4366
Test Plan: It passed the test on my Mac and OPPO phone Reno2.
Reviewed By: ivanmisuno
Differential Revision: D42918902
Pulled By: passy
fbshipit-source-id: c1f02f075817d90e0d447f466a1168b6ec932e4e
Summary: Combining a bunch of individual tasks for dep upgrades into one diff.
Reviewed By: ivanmisuno
Differential Revision: D42706074
fbshipit-source-id: 054b2545ad1295699f47f4c6eb5065b7b9a1d6a0
Summary:
In our organization, Flipper is distributed in a version controlled way. As a result, we do not want users to manually update or receive prompts to update when a new version is available. There is already a `--updater` flag in the command line arguments for flipper.exe, but it isn't piped through. This change pipes it through and disables all update related UI when `--no-updater` is passed in.
## Changelog
Support --updater and --no-updater options for flipper.exe
Pull Request resolved: https://github.com/facebook/flipper/pull/4277
Test Plan: Ran `yarn build --win` in flipper/desktop, and launched flipper.exe from flipper/dist/win-unpacked with the `--updater`, `--no-updater` and no flags and ensured the proper behavior was observed (update UI shows by default or when `--updater` is specified, and doesn't show when `--no-updater` is specified).
Reviewed By: passy
Differential Revision: D41298321
Pulled By: mweststrate
fbshipit-source-id: 5ddfede2700954f0fdd6a111b20d0836fab25565
Summary:
Not in all environments keytar is available, but still it will be useful to be able to login to intern with Flipper, even for temporarily sessions. This solution falls back to in memory storage.
Note that the underlying assuption is that multiple different users are not connected to the same Flipper server, as this would share their session!
https://fb.workplace.com/groups/flippersupport/permalink/1498550730625580/
Reviewed By: passy
Differential Revision: D41218132
fbshipit-source-id: 6e518d742df639bfbdc9a36ed1fa56ecb363a0b0
Summary: On older Android devices (API 24) `-printf ` is not available
Reviewed By: lblasa
Differential Revision: D40980640
fbshipit-source-id: d1a1bcadc496deaf3d514c1e45b2e0104a937b18
Summary:
Flipper plugins fail when importing css from third-party dependencies. This diff tries to fix that.
Effectively, the plugin can import the css and export it when is bundled.
When we load the plugin, we check if there's a css file for it. If there's one, we return it and try to use it.
Reviewed By: aigoncharov
Differential Revision: D40758178
fbshipit-source-id: e53afffcc481504905d5eeb1aea1f9114ee2a86b