Summary: Fixes Github CI failures on main (see T153688440)
Reviewed By: lblasa
Differential Revision: D46016296
fbshipit-source-id: 61c624797aa4a9a967b7c9f81fbe71b5908de236
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:
Bumps [deep-equal](https://github.com/inspect-js/node-deep-equal) from 2.0.5 to 2.2.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/inspect-js/node-deep-equal/blob/master/CHANGELOG.md">deep-equal's changelog</a>.</em></p>
<blockquote>
<h2><a href="https://github.com/inspect-js/node-deep-equal/compare/v2.2.0...v2.2.1">v2.2.1</a> - 2023-04-27</h2>
<h3>Commits</h3>
<ul>
<li>[Tests] add passing tests covering object key ordering <a href="51c9ff6b4c"><code>51c9ff6</code></a></li>
<li>[Refactor] use <code>array-buffer-byte-length</code> <a href="f47822cf0c"><code>f47822c</code></a></li>
<li>[Deps] update <code>is-array-buffer</code>, <code>regexp.prototype.flags</code> <a href="160d851333"><code>160d851</code></a></li>
<li>[Deps] update <code>es-get-iterator</code>, <code>get-intrinsic</code> <a href="2e08e956a4"><code>2e08e95</code></a></li>
<li>[Dev Deps] update <code>object.getownpropertydescriptors</code> <a href="63e9ab7450"><code>63e9ab7</code></a></li>
<li>[Dev Deps] update <code>tape</code> <a href="c8db964f60"><code>c8db964</code></a></li>
</ul>
<h2><a href="https://github.com/inspect-js/node-deep-equal/compare/v2.1.0...v2.2.0">v2.2.0</a> - 2023-01-05</h2>
<h3>Commits</h3>
<ul>
<li>[New] add support for <code>SharedArrayBuffer</code> <a href="0ef51c79b7"><code>0ef51c7</code></a></li>
<li>[Refactor] use <code>is-array-buffer</code> package <a href="0360ee1f1b"><code>0360ee1</code></a></li>
<li>[Fix] <code>whichTypedArray</code> can return false in both cases <a href="df3e3c4e30"><code>df3e3c4</code></a></li>
<li>[Dev Deps] update <code>aud</code>, <code>object.getownpropertydescriptors</code> <a href="6d62ea4f2b"><code>6d62ea4</code></a></li>
<li>[Dev Deps] update <code>ljharb/eslint-config</code> <a href="15aab59d64"><code>15aab59</code></a></li>
<li>[Deps] update <code>which-typed-array</code> <a href="8dfce27f33"><code>8dfce27</code></a></li>
<li>[eslint] remove <code>.eslintignore</code> <a href="af46773b28"><code>af46773</code></a></li>
</ul>
<h2><a href="https://github.com/inspect-js/node-deep-equal/compare/v2.0.5...v2.1.0">v2.1.0</a> - 2022-11-02</h2>
<h3>Fixed</h3>
<ul>
<li>[New] add support for <code>ArrayBuffer</code> <a href="https://redirect.github.com/inspect-js/node-deep-equal/issues/94"><code>[https://github.com/facebook/flipper/issues/94](https://github.com/inspect-js/node-deep-equal/issues/94)</code></a></li>
</ul>
<h3>Commits</h3>
<ul>
<li>[actions] reuse common workflows <a href="12de2873de"><code>12de287</code></a></li>
<li>[actions] use <code>node/install</code> instead of <code>node/run</code>; use <code>codecov</code> action <a href="ec248b96f4"><code>ec248b9</code></a></li>
<li>[Tests] run assert tests on a dynamic matrix <a href="695aebd509"><code>695aebd</code></a></li>
<li>[readme] add badges <a href="492e159158"><code>492e159</code></a></li>
<li>[Test] ArrayBuffers in node < 0.12 have a nonconfigurable own <code>byteLength</code> property <a href="40f4b87196"><code>40f4b87</code></a></li>
<li>[meta] use <code>npmignore</code> to autogenerate an npmignore file <a href="2627269314"><code>2627269</code></a></li>
<li>[Dev Deps] update <code>eslint</code>, <code>ljharb/eslint-config</code>, <code>safe-publish-latest</code>, <code>tape</code> <a href="7a05bb7482"><code>7a05bb7</code></a></li>
<li>[Deps] update <code>call-bind</code>, <code>es-get-iterator</code>, <code>get-intrinsic</code>, <code>is-arguments</code>, <code>is-regex</code>, <code>regexp.prototype.flags</code>, <code>side-channel</code>, <code>which-boxed-primitive</code>, <code>which-typed-array</code> <a href="c0844e629b"><code>c0844e6</code></a></li>
<li>[actions] update codecov uploader <a href="b1b0552fe3"><code>b1b0552</code></a></li>
<li>[Dev Deps] update <code>eslint</code>, <code>ljharb/eslint-config</code>, <code>aud</code>, <code>auto-changelog</code>, <code>has-symbols</code>, <code>object.getownpropertydescriptors</code>, <code>tape</code> <a href="9a1ccf5285"><code>9a1ccf5</code></a></li>
<li>[meta] do not publish github action workflow files <a href="2d63384d66"><code>2d63384</code></a></li>
<li>[actions] update rebase action to use reusable workflow <a href="69d21f55af"><code>69d21f5</code></a></li>
<li>[Dev Deps] update <code>eslint</code>, <code>ljharb/eslint-config</code>, <code>aud</code>, <code>has-symbols</code>, <code>object.getownpropertydescriptors</code>, <code>tape</code> <a href="297aae88f6"><code>297aae8</code></a></li>
<li>[Tests] add tests for regexes with the same source but different flags <a href="29c8a0da09"><code>29c8a0d</code></a></li>
<li>[Dev Deps] update <code>eslint</code>, <code>ljharb/eslint-config</code> <a href="9e64ec93a8"><code>9e64ec9</code></a></li>
<li>[Deps] update <code>is-arguments</code>, <code>is-date-object</code>, <code>is-regex</code>, <code>which-typed-array</code> <a href="edfb752810"><code>edfb752</code></a></li>
<li>[Dev Deps] update <code>eslint</code>, <code>ljharb/eslint-config</code>, <code>auto-changelog</code>, <code>tape</code> <a href="7b5f7a348b"><code>7b5f7a3</code></a></li>
<li>[Dev Deps] update <code>eslint</code>, <code>ljharb/eslint-config</code>, <code>has-typed-arrays</code>, <code>tape</code> <a href="e328a237ba"><code>e328a23</code></a></li>
<li>[Deps] update <code>get-intrinsic</code>, <code>regexp.prototype.flags</code>, <code>which-typed-array</code> <a href="29123a7185"><code>29123a7</code></a></li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="6ea6b8d296"><code>6ea6b8d</code></a> v2.2.1</li>
<li><a href="f47822cf0c"><code>f47822c</code></a> [Refactor] use <code>array-buffer-byte-length</code></li>
<li><a href="160d851333"><code>160d851</code></a> [Deps] update <code>is-array-buffer</code>, <code>regexp.prototype.flags</code></li>
<li><a href="63e9ab7450"><code>63e9ab7</code></a> [Dev Deps] update <code>object.getownpropertydescriptors</code></li>
<li><a href="2e08e956a4"><code>2e08e95</code></a> [Deps] update <code>es-get-iterator</code>, <code>get-intrinsic</code></li>
<li><a href="c8db964f60"><code>c8db964</code></a> [Dev Deps] update <code>tape</code></li>
<li><a href="51c9ff6b4c"><code>51c9ff6</code></a> [Tests] add passing tests covering object key ordering</li>
<li><a href="b9d9e54c27"><code>b9d9e54</code></a> v2.2.0</li>
<li><a href="0ef51c79b7"><code>0ef51c7</code></a> [New] add support for <code>SharedArrayBuffer</code></li>
<li><a href="0360ee1f1b"><code>0360ee1</code></a> [Refactor] use <code>is-array-buffer</code> package</li>
<li>Additional commits viewable in <a href="https://github.com/inspect-js/node-deep-equal/compare/v2.0.5...v2.2.1">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/4729
Reviewed By: passy
Differential Revision: D46016549
Pulled By: ivanmisuno
fbshipit-source-id: bbce2af026fba2c5d7622c4593b241155cc6e82e
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:
I had wrongly assumed the display mode was standalone for Electron, but it turns out that is not the case.
So, explicitly prevent showing the wizard in Electron builds.
Reviewed By: antonk52
Differential Revision: D45983295
fbshipit-source-id: 0bd770d28c0e52a7417789751ac78c5f84165d86
Summary:
## Context
The editor for mocks is currently just a textarea. It'd be nicer as a monaco editor :D
## Changes
* Add monaco editor
* Change bundler for flipper plugins to allow loading .ttf as `dataurl`
* Resize the input/button for name and save and put them at the top next to each other
* Add a default mock template for when the editor is empty
allow-large-files
Reviewed By: aigoncharov
Differential Revision: D45929635
fbshipit-source-id: 66f3103d073ac630cb41d21f2ce3a7f89e15fed8
Summary: If Flipper server is not running, the offline landing site will offer an option to start it by trying to open 'start-server' under the `flipper-launcher://` scheme.
Reviewed By: mweststrate
Differential Revision: D45950872
fbshipit-source-id: 0d4e22c8474413e914c3c7b4fc9154ae628a8b42
Summary: Get some metrics from the PWA installation wizard.
Reviewed By: antonk52
Differential Revision: D45863352
fbshipit-source-id: 1cf8912a47c749b3b2c2e573796ee1935ea172c9
Summary:
Setting the background to red for error logs has a lot of implications for all text colouring inside of its container.
Instead, set the error border to red, which gives a clear error indication whilst making things easier to read.
changelog: Improve console error logs readability
Reviewed By: mweststrate
Differential Revision: D45861604
fbshipit-source-id: 51f557451ac16269b69ff830a26328552e134ee5
Summary:
Previously we used an overlay to indicated selected but this was kind of hard to see due to <1 opacity. I think this approach where we enchance the border is clearer.
Also we used border colour earlier to indicate type of node which i think was never obvious to the user. Given that nodes heavily overlap we should remove this design language
changelog: UIDebugger, improve selected and hover state of the visualiser
Reviewed By: antonk52
Differential Revision: D45737758
fbshipit-source-id: 5299043656787d6479cff6ec2b38cebe8417fd53
Summary: Fixes a regression from D45394048. It "sortable" as a nullable column prop. When it is undefined it should be treated as true.
Reviewed By: LukeDefeo
Differential Revision: D45776216
fbshipit-source-id: dcd8ce97217086deab7b2b1852837fbfa7437d13
Summary:
I accidentally used vscode. I acctidentally used an await keyword in a sync funciton. typescript has an codeaction to add an async to the function which was out of my screen. This changed the function return type to promise which caused other errors around the codebase and it took me a while to figure out where the error was coming from.
All eslint code actions are safe to apply which is not the case with typescript. Thus making this change.
Reviewed By: lblasa
Differential Revision: D45773531
fbshipit-source-id: 1f8835c442d7703644b1af729ab55fcef7d5be73
Summary:
Let's ban the non null assertion syntax `maybeNull!` as it is unsafe and can cause unexpected behavior. Ideally this should be an error or require a comment explaining why the value cannot be nullish. Though, there are 468 occurrences around the codebase and it is not worth it to manually go around fixing it now. Thus I used a warn to still warn developers to avoid the use where possible.
Last week I spend over an hour on debugging something where the code was null-asserted as the developer thought the value could never be null while in reallity it could. Adding a runtime check in this case sounds reasonable.
rule docs
https://typescript-eslint.io/rules/no-non-null-assertion/
Reviewed By: nikoant
Differential Revision: D45773327
fbshipit-source-id: 9e8a40af353ce979f469ffaedd8e777d72500dab
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: This feature is annoying and useless
Reviewed By: antonk52
Differential Revision: D45696921
fbshipit-source-id: 01c007d3e196a7511b940b7973bb8e6a880e27e5
Summary: various tests failing due to this dep
Reviewed By: antonk52
Differential Revision: D45731274
fbshipit-source-id: cb79199c15a8973f50e5075dab16605d0120b30c
Summary:
Pull Request resolved: https://github.com/facebook/flipper/pull/4732
This diff adds a `language` field into `CreatePasteArgs` type to potentially specify programming language in the paste service
Reviewed By: mweststrate
Differential Revision: D45701098
fbshipit-source-id: 080d76e5ff332518881e9c6b84aa47aaea680309
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 logic was a little outdated to when we were accumulating subtrees, now its much simpler, if the previously focused id is not in the new frame, remove focus
Changelog: UIDebugger, fix focus mode behaviour
Reviewed By: mweststrate
Differential Revision: D45523026
fbshipit-source-id: 894a85df21cc27eb57dbef411ae57743d0c4f753
Summary: People complained about barely noticeable filtered state indication multiple times
Reviewed By: antonk52
Differential Revision: D45394233
fbshipit-source-id: 60a3531b1808ae8f95ce8cd405a20b74bad0ed46
Summary:
Given that stream interceptor is async the folling race conditino could occur.
Frame at time t=0 comes in, we yeild to the event loop while fetching metadata, fetch takes 5 ticks
Frame at time t=1 comes in, we yeild to the event loop but fetch takes 1 tick
At time t=2 the second frame is augmented and display
At time t=5 the first fetch returns and we display and older frame
This is a simple check to avoid this.
Reviewed By: aigoncharov
Differential Revision: D45314013
fbshipit-source-id: 054e7e6beb52dfbfd94bc9f8ee3d0a758a669f66
Summary:
In order to support this the stream inceptor transform nodes now is able to return a list of new meta enties, since these are new attributes we try to mimic what would have happened if they were generated on the client. This makes the rest of the logic downstream simpler
Introduced metadata register, same idea as on the clients.
The attributes available are a mixed bag, will work with blok server to imporove
Reviewed By: antonk52
Differential Revision: D45177781
fbshipit-source-id: 9d761b2f682e7e0fd4710f5b2e9d9d6ff26741fc
Summary: This is purely a cosmetic change but more accurately reflects the nature of how we send data from device to desktop. Ie its always an entire frame rather than subtrees. This helps with correctness great Both ios and android are like this and have been for a while.
Reviewed By: lblasa
Differential Revision: D45080088
fbshipit-source-id: 8f68047056c4825b0b1dd89f26c7fa462e2ecb1b
Summary: We were memoizing the reduction trace fetch in the stream interceptor but this was redundant. We let the library handle that. Also pulled the calls into the uidebugger so we have more control over the retry behaviour
Reviewed By: mweststrate
Differential Revision: D45079132
fbshipit-source-id: 7354fce0fddbebdb0b027dade03398a36adc5e9a
Summary:
* Added line number as an attribute to node, in theory we could get it from the device in the case of compose
* dont need to use miles as have the file already
* cleaned up naming in ide file resolver so its clear its the qualified name we are talking about
Reviewed By: lblasa
Differential Revision: D45079135
fbshipit-source-id: 24f2d5814800a4a404b680599d307cc750758fcd
Summary:
1. Need to unminify the names from something call the minification map
2. Bloks attributes themselves are already minified. However the uidebugger also has a similar concept in its own metadata so the data we get off the device has been minified twice. To fix this we remap the metadata off the device using the minification map. In order to find the correct entry we need to get the style id of the bloks model parent. this is sent as a metadata custom attribute
Reviewed By: lblasa
Differential Revision: D45079136
fbshipit-source-id: bb448d81918c0b8c9e8ac87c4390b46a8a374d78
Summary:
Hooked up metadata to the stream inteceptor, enhanced error handling to deal with:
1. Recording subsequent metadata messaages that came in while in error state such that all of them are processed
2. Recording any frames that came in while in error state such that after recovering from error we have the latest state
3. Splitting out recoverable and non recoverable errors more explicitly
Reviewed By: lblasa
Differential Revision: D45079137
fbshipit-source-id: 67a2ffef72d94d2b1492f201a2228659720e306b
Summary:
Added stream interecptor which gets a chance to augment the messages off the wire. Stream interceptor transformations are async and can fail due to network errors so added error state with a retry button. The retry button will just call the function again.
I am also handling errors better generally when this method fails unexpectedly, logging more clearly what went wrong and communicating it to the user
Did some refactoring of subtree update event to support this
Reviewed By: lblasa
Differential Revision: D44415260
fbshipit-source-id: a5a5542b318775b641d53941808399a8fa4634d3
Summary: Type is any as it can be litterally anything, using json is a bit of pain as we have to do a lot of type checks to access anything
Reviewed By: lblasa
Differential Revision: D45079133
fbshipit-source-id: bcce93a1fce48d2779a648576f12df6392a0938e
Summary: These replace tags, and are KV instead. They allow us to send framework specific data that arent common enough to be promoted to the top level, similar to hidden attributes. They will be needed for bloks
Reviewed By: lblasa
Differential Revision: D45079134
fbshipit-source-id: e4962bd56f0c24608504367f50cd796fd3d79fcd
Summary: This is no longer needed or sent by the client given our new approach to frames
Reviewed By: antonk52
Differential Revision: D44872566
fbshipit-source-id: 9ec340a5cc68605f730cf6677fb89778bf77a3a1
Summary:
^
There's no references to this anywhere, so delete.
Reviewed By: antonk52
Differential Revision: D45309041
fbshipit-source-id: e62e94b089eee30b82b05f64c8e7b31dd03597b6