main
js 140 lines 5 KB
Raw
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 * @flow
8 */
9
10 /* eslint-disable no-unused-vars */
11
12 declare const __EXTENSION__: boolean;
13 declare const __TEST__: boolean;
14
15 declare const __IS_FIREFOX__: boolean;
16 declare const __IS_CHROME__: boolean;
17 declare const __IS_EDGE__: boolean;
18 declare const __IS_NATIVE__: boolean;
19
20 interface ExtensionAction {
21 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/action/setIcon} */
22 setIcon(details: {
23 tabId: number,
24 path?: string | {[iconSize: string]: string},
25 }): void;
26 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/action/setPopup} */
27 setPopup(details: {tabId: number, popup: string}): void;
28 }
29
30 interface ExtensionDevtools {
31 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/devtools/inspectedWindow} */
32 inspectedWindow: $FlowFixMe;
33 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/devtools/network} */
34 network: $FlowFixMe;
35 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/devtools/panels} */
36 panels: $FlowFixMe;
37 }
38
39 interface ExtensionEvent<Listener: Function> {
40 addListener(callback: Listener): void;
41 removeListener(callback: Listener): void;
42 }
43
44 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/Tab} */
45 // TODO: Only covers used properties. Extend as needed.
46 interface ExtensionTab {
47 id?: number;
48 }
49
50 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/MessageSender} */
51 // TODO: Only covers used properties. Extend as needed.
52 interface ExtensionRuntimeSender {
53 tab?: ExtensionTab;
54 }
55
56 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/Port} */
57 // TODO: Only covers used properties. Extend as needed.
58 interface ExtensionRuntimePort {
59 disconnect(): void;
60 name: string;
61 onMessage: ExtensionEvent<
62 (message: mixed, port: ExtensionRuntimePort) => void,
63 >;
64 onDisconnect: ExtensionEvent<(port: ExtensionRuntimePort) => void>;
65 postMessage(message: mixed, transferable?: $ReadOnlyArray<mixed>): void;
66 sender?: ExtensionRuntimeSender;
67 }
68
69 interface ExtensionMessageSender {
70 id?: string;
71 url?: string;
72 tab?: {
73 id: number,
74 url: string,
75 };
76 }
77
78 interface ExtensionRuntime {
79 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/connect} */
80 connect(connectInfo?: {
81 name?: string,
82 includeTlsChannelId?: boolean,
83 }): ExtensionRuntimePort;
84 connect(
85 extensionId: string,
86 connectInfo?: {name?: string, includeTlsChannelId?: boolean},
87 ): ExtensionRuntimePort;
88 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/getURL} */
89 getURL(path: string): string;
90 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage} */
91 onMessage: ExtensionEvent<
92 (
93 message: any,
94 sender: ExtensionMessageSender,
95 sendResponse: (response: any) => void,
96 ) => any,
97 >;
98 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onConnect} */
99 onConnect: ExtensionEvent<(port: ExtensionRuntimePort) => void>;
100 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage} */
101 sendMessage(
102 message: any,
103 options?: {includeTlsChannelId?: boolean},
104 ): Promise<any>;
105 sendMessage(
106 extensionId: string,
107 message: any,
108 // We're making this required so that we don't accidentally call the wrong overload.
109 options: {includeTlsChannelId?: boolean},
110 ): Promise<any>;
111 }
112
113 interface ExtensionTabs {
114 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onActivated} */
115 onActivated: ExtensionEvent<
116 (activeInfo: {
117 previousTabId: number,
118 tabId: number,
119 windowId: number,
120 }) => void,
121 >;
122 }
123
124 interface ExtensionAPI {
125 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/action} */
126 action: ExtensionAction;
127 devtools: ExtensionDevtools;
128 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/permissions} */
129 permissions: $FlowFixMe;
130 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime} */
131 runtime: ExtensionRuntime;
132 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting} */
133 scripting: $FlowFixMe;
134 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage} */
135 storage: $FlowFixMe;
136 /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs} */
137 tabs: ExtensionTabs;
138 }
139
140 declare const chrome: ExtensionAPI;