| 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; |