@addonova/browser 0.1.0 → 0.2.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.
Files changed (99) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +259 -0
  3. package/dist/api/scripting/index.d.ts.map +1 -1
  4. package/dist/api/scripting/index.js.map +1 -1
  5. package/dist/api/storage/area.d.ts +4 -0
  6. package/dist/api/storage/area.d.ts.map +1 -0
  7. package/dist/api/storage/area.js +29 -0
  8. package/dist/api/storage/area.js.map +1 -0
  9. package/dist/api/storage/index.d.ts +4 -3
  10. package/dist/api/storage/index.d.ts.map +1 -1
  11. package/dist/api/storage/index.js +7 -27
  12. package/dist/api/storage/index.js.map +1 -1
  13. package/dist/api/storage/item.d.ts +4 -0
  14. package/dist/api/storage/item.d.ts.map +1 -0
  15. package/dist/api/storage/item.js +109 -0
  16. package/dist/api/storage/item.js.map +1 -0
  17. package/dist/content/context.d.ts +24 -0
  18. package/dist/content/context.d.ts.map +1 -0
  19. package/dist/content/context.js +157 -0
  20. package/dist/content/context.js.map +1 -0
  21. package/dist/content/index.d.ts +7 -0
  22. package/dist/content/index.d.ts.map +1 -0
  23. package/dist/content/index.js +4 -0
  24. package/dist/content/index.js.map +1 -0
  25. package/dist/content/inject-root.d.ts +2 -0
  26. package/dist/content/inject-root.d.ts.map +1 -0
  27. package/dist/content/inject-root.js +4 -0
  28. package/dist/content/inject-root.js.map +1 -0
  29. package/dist/content/inject-script.d.ts +16 -0
  30. package/dist/content/inject-script.d.ts.map +1 -0
  31. package/dist/content/inject-script.js +39 -0
  32. package/dist/content/inject-script.js.map +1 -0
  33. package/dist/content/ui.d.ts +50 -0
  34. package/dist/content/ui.d.ts.map +1 -0
  35. package/dist/content/ui.js +331 -0
  36. package/dist/content/ui.js.map +1 -0
  37. package/dist/entries/chrome.d.ts +3 -0
  38. package/dist/entries/chrome.d.ts.map +1 -1
  39. package/dist/entries/chrome.js +7 -0
  40. package/dist/entries/chrome.js.map +1 -1
  41. package/dist/entries/chromium.d.ts +3 -0
  42. package/dist/entries/chromium.d.ts.map +1 -1
  43. package/dist/entries/chromium.js +7 -0
  44. package/dist/entries/chromium.js.map +1 -1
  45. package/dist/entries/edge.d.ts +3 -0
  46. package/dist/entries/edge.d.ts.map +1 -1
  47. package/dist/entries/edge.js +7 -0
  48. package/dist/entries/edge.js.map +1 -1
  49. package/dist/entries/firefox.d.ts +3 -0
  50. package/dist/entries/firefox.d.ts.map +1 -1
  51. package/dist/entries/firefox.js +7 -0
  52. package/dist/entries/firefox.js.map +1 -1
  53. package/dist/entries/shared-exports.d.ts +10 -0
  54. package/dist/entries/shared-exports.d.ts.map +1 -1
  55. package/dist/entries/shared-exports.js +5 -0
  56. package/dist/entries/shared-exports.js.map +1 -1
  57. package/dist/entries/utilities.d.ts +6 -0
  58. package/dist/entries/utilities.d.ts.map +1 -0
  59. package/dist/entries/utilities.js +7 -0
  60. package/dist/entries/utilities.js.map +1 -0
  61. package/dist/i18n/index.d.ts +16 -0
  62. package/dist/i18n/index.d.ts.map +1 -0
  63. package/dist/i18n/index.js +52 -0
  64. package/dist/i18n/index.js.map +1 -0
  65. package/dist/index.d.ts +13 -0
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +8 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/messaging/index.d.ts +22 -0
  70. package/dist/messaging/index.d.ts.map +1 -0
  71. package/dist/messaging/index.js +100 -0
  72. package/dist/messaging/index.js.map +1 -0
  73. package/dist/messaging/proxy.d.ts +17 -0
  74. package/dist/messaging/proxy.d.ts.map +1 -0
  75. package/dist/messaging/proxy.js +61 -0
  76. package/dist/messaging/proxy.js.map +1 -0
  77. package/dist/messaging/root.d.ts +4 -0
  78. package/dist/messaging/root.d.ts.map +1 -0
  79. package/dist/messaging/root.js +9 -0
  80. package/dist/messaging/root.js.map +1 -0
  81. package/dist/testing/fake-browser.d.ts +184 -0
  82. package/dist/testing/fake-browser.d.ts.map +1 -0
  83. package/dist/testing/fake-browser.js +994 -0
  84. package/dist/testing/fake-browser.js.map +1 -0
  85. package/dist/testing/index.d.ts +3 -0
  86. package/dist/testing/index.d.ts.map +1 -0
  87. package/dist/testing/index.js +2 -0
  88. package/dist/testing/index.js.map +1 -0
  89. package/dist/testing/setup.d.ts +2 -0
  90. package/dist/testing/setup.d.ts.map +1 -0
  91. package/dist/testing/setup.js +6 -0
  92. package/dist/testing/setup.js.map +1 -0
  93. package/dist/types/index.d.ts +1 -1
  94. package/dist/types/index.d.ts.map +1 -1
  95. package/dist/types/scripting.d.ts +5 -5
  96. package/dist/types/scripting.d.ts.map +1 -1
  97. package/dist/types/storage.d.ts +23 -0
  98. package/dist/types/storage.d.ts.map +1 -1
  99. package/package.json +30 -2
@@ -0,0 +1,100 @@
1
+ import { BrowserApiError, isBrowserApiError } from '../shared/errors.js';
2
+ const MESSAGE_KEY = '__addonova_message__';
3
+ const RESPONSE_KEY = '__addonova_message_response__';
4
+ export function createExtensionMessaging(runtime) {
5
+ return {
6
+ async sendMessage(type, ...args) {
7
+ const messageArgs = args;
8
+ const envelope = {
9
+ [MESSAGE_KEY]: true,
10
+ type,
11
+ ...(messageArgs.length === 0 ? {} : { data: messageArgs[0] }),
12
+ };
13
+ const response = await runtime.sendMessage(envelope);
14
+ if (!isMessageResponse(response)) {
15
+ return response;
16
+ }
17
+ if (!response.ok) {
18
+ throw deserializeError(response.error);
19
+ }
20
+ return response.data;
21
+ },
22
+ onMessage(type, handler) {
23
+ const listener = (message, sender, sendResponse) => {
24
+ if (!isMessageEnvelope(message) || message.type !== type) {
25
+ return false;
26
+ }
27
+ void Promise.resolve(handler({
28
+ data: message.data,
29
+ sender,
30
+ })).then((data) => {
31
+ sendResponse(successResponse(data));
32
+ }, (error) => {
33
+ sendResponse(failureResponse(error));
34
+ });
35
+ return true;
36
+ };
37
+ runtime.onMessage.addListener(listener);
38
+ return () => runtime.onMessage.removeListener(listener);
39
+ },
40
+ };
41
+ }
42
+ function isMessageEnvelope(value) {
43
+ return (isRecord(value) &&
44
+ value[MESSAGE_KEY] === true &&
45
+ typeof value.type === 'string');
46
+ }
47
+ function isMessageResponse(value) {
48
+ return isRecord(value) && value[RESPONSE_KEY] === true;
49
+ }
50
+ function successResponse(data) {
51
+ return { [RESPONSE_KEY]: true, ok: true, data };
52
+ }
53
+ function failureResponse(error) {
54
+ return {
55
+ [RESPONSE_KEY]: true,
56
+ ok: false,
57
+ error: serializeError(error),
58
+ };
59
+ }
60
+ function serializeError(error) {
61
+ const name = error instanceof Error && error.name !== ''
62
+ ? error.name
63
+ : 'Error';
64
+ const message = error instanceof Error ? error.message : String(error);
65
+ return {
66
+ name,
67
+ message,
68
+ ...(isBrowserApiError(error) ? { code: error.code } : {}),
69
+ ...(error instanceof Error && error.stack !== undefined
70
+ ? { stack: error.stack }
71
+ : {}),
72
+ };
73
+ }
74
+ function deserializeError(error) {
75
+ if (error === undefined) {
76
+ return new BrowserApiError('BROWSER_API_FAILED', 'The message handler failed without an error.', { api: 'runtime.sendMessage' });
77
+ }
78
+ if (error.code !== undefined && isBrowserApiErrorCode(error.code)) {
79
+ return new BrowserApiError(error.code, error.message, {
80
+ api: 'runtime.sendMessage',
81
+ });
82
+ }
83
+ const result = new Error(error.message);
84
+ result.name = error.name;
85
+ if (error.stack !== undefined) {
86
+ result.stack = error.stack;
87
+ }
88
+ return result;
89
+ }
90
+ function isBrowserApiErrorCode(value) {
91
+ return (value === 'BROWSER_UNSUPPORTED_ENVIRONMENT' ||
92
+ value === 'BROWSER_UNSUPPORTED_API' ||
93
+ value === 'BROWSER_PERMISSION_DENIED' ||
94
+ value === 'BROWSER_API_FAILED' ||
95
+ value === 'BROWSER_INVALID_ARGUMENT');
96
+ }
97
+ function isRecord(value) {
98
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
99
+ }
100
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messaging/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ExtensionMessenger } from './index.ts';
2
+ export type AsyncService<Service extends object> = {
3
+ [Key in keyof Service]: Service[Key] extends (...args: infer Args) => infer Result ? (...args: Args) => Promise<Awaited<Result>> : never;
4
+ };
5
+ export type ProxyServiceFactory<Service extends object, Args extends readonly unknown[]> = (...args: Args) => Service;
6
+ export type ProxyServiceRegistration<Service extends object, Args extends readonly unknown[]> = {
7
+ (...args: Args): Service;
8
+ readonly name: string;
9
+ dispose(): void;
10
+ };
11
+ export type MessengerFactory = <P extends object = Record<string, (data?: unknown) => unknown>>() => ExtensionMessenger<P>;
12
+ export type DefineProxyService = <Service extends object, Args extends readonly unknown[] = readonly unknown[]>(name: string, create: ProxyServiceFactory<Service, Args>) => [
13
+ register: ProxyServiceRegistration<Service, Args>,
14
+ get: () => AsyncService<Service>
15
+ ];
16
+ export declare function createProxyServices(createMessenger: MessengerFactory): DefineProxyService;
17
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/messaging/proxy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAcrD,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,MAAM,IAAI;KAChD,GAAG,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAC3C,GAAG,IAAI,EAAE,MAAM,IAAI,KAChB,MAAM,MAAM,GACb,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAC3C,KAAK;CACV,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAC7B,OAAO,SAAS,MAAM,EACtB,IAAI,SAAS,SAAS,OAAO,EAAE,IAC7B,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAE/B,MAAM,MAAM,wBAAwB,CAClC,OAAO,SAAS,MAAM,EACtB,IAAI,SAAS,SAAS,OAAO,EAAE,IAC7B;IACF,CAAC,GAAG,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OACzD,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAE7B,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,SAAS,MAAM,EACtB,IAAI,SAAS,SAAS,OAAO,EAAE,GAAG,SAAS,OAAO,EAAE,EAEpD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,KACvC;IACH,QAAQ,EAAE,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC;IACjD,GAAG,EAAE,MAAM,YAAY,CAAC,OAAO,CAAC;CACjC,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,gBAAgB,GAChC,kBAAkB,CA4FpB"}
@@ -0,0 +1,61 @@
1
+ import { BrowserApiError } from '../shared/errors.js';
2
+ const PROXY_PREFIX = '__addonova_proxy__:';
3
+ export function createProxyServices(createMessenger) {
4
+ const messaging = createMessenger();
5
+ const services = new Map();
6
+ return function defineProxyService(name, create) {
7
+ const messageType = `${PROXY_PREFIX}${name}`;
8
+ let dispose;
9
+ const register = ((...args) => {
10
+ if (services.has(name)) {
11
+ throw new BrowserApiError('BROWSER_INVALID_ARGUMENT', `Proxy service "${name}" is already registered.`);
12
+ }
13
+ const service = create(...args);
14
+ services.set(name, service);
15
+ const removeListener = messaging.onMessage(messageType, async ({ data }) => {
16
+ if (!isProxyRequest(data)) {
17
+ throw new BrowserApiError('BROWSER_INVALID_ARGUMENT', `Invalid proxy request for service "${name}".`);
18
+ }
19
+ const method = service[data.method];
20
+ if (typeof method !== 'function') {
21
+ throw new BrowserApiError('BROWSER_UNSUPPORTED_API', `Proxy service "${name}" does not implement "${data.method}".`);
22
+ }
23
+ return await method.apply(service, [...data.args]);
24
+ });
25
+ dispose = () => {
26
+ removeListener();
27
+ services.delete(name);
28
+ dispose = undefined;
29
+ };
30
+ return service;
31
+ });
32
+ Object.defineProperty(register, 'name', { value: name });
33
+ Object.defineProperty(register, 'dispose', {
34
+ value: () => {
35
+ dispose?.();
36
+ },
37
+ });
38
+ const get = () => {
39
+ const proxy = new Proxy({}, {
40
+ get(_target, property) {
41
+ if (typeof property === 'symbol' || property === 'then') {
42
+ return undefined;
43
+ }
44
+ return (...args) => messaging.sendMessage(messageType, {
45
+ method: property,
46
+ args,
47
+ });
48
+ },
49
+ });
50
+ return proxy;
51
+ };
52
+ return [register, get];
53
+ };
54
+ }
55
+ function isProxyRequest(value) {
56
+ return (typeof value === 'object' &&
57
+ value !== null &&
58
+ typeof value.method === 'string' &&
59
+ Array.isArray(value.args));
60
+ }
61
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/messaging/proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ExtensionMessenger } from './index.ts';
2
+ export declare function defineExtensionMessaging<P extends object = Record<string, (data?: unknown) => unknown>>(): ExtensionMessenger<P>;
3
+ export declare const defineProxyService: import("./proxy.ts").DefineProxyService;
4
+ //# sourceMappingURL=root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/messaging/root.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAMrD,wBAAgB,wBAAwB,CACtC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,KAC3D,kBAAkB,CAAC,CAAC,CAAC,CAEzB;AAED,eAAO,MAAM,kBAAkB,yCAAuC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { runtime } from '../api/singletons.js';
2
+ import { createExtensionMessaging } from './index.js';
3
+ import { createProxyServices } from './proxy.js';
4
+ const createMessenger = () => createExtensionMessaging(runtime);
5
+ export function defineExtensionMessaging() {
6
+ return createExtensionMessaging(runtime);
7
+ }
8
+ export const defineProxyService = createProxyServices(createMessenger);
9
+ //# sourceMappingURL=root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/messaging/root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,eAAe,GAAG,GAAqB,EAAE,CAC7C,wBAAwB,CAAI,OAAO,CAAC,CAAC;AAEvC,MAAM,UAAU,wBAAwB;IAGtC,OAAO,wBAAwB,CAAI,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC"}
@@ -0,0 +1,184 @@
1
+ import type { BrowserTarget } from '../shared/capabilities.ts';
2
+ import type { InjectionResult, ScriptInjection } from '../types/scripting.ts';
3
+ import type { StorageAreaName, StorageChanges } from '../types/storage.ts';
4
+ import type { MessageSender, SendResponse } from '../types/runtime.ts';
5
+ import type { Tab } from '../types/tabs.ts';
6
+ import type { Window } from '../types/windows.ts';
7
+ export type FakeEvent<Args extends readonly unknown[] = readonly unknown[]> = {
8
+ addListener(listener: (...args: Args) => unknown): void;
9
+ removeListener(listener: (...args: Args) => unknown): void;
10
+ hasListener(listener: (...args: Args) => unknown): boolean;
11
+ hasListeners(): boolean;
12
+ emit(...args: Args): void;
13
+ dispatch(...args: Args): unknown[];
14
+ clear(): void;
15
+ readonly listenerCount: number;
16
+ };
17
+ export interface FakeBrowserOptions {
18
+ readonly target?: BrowserTarget;
19
+ readonly id?: string;
20
+ readonly manifest?: Readonly<Record<string, unknown>>;
21
+ readonly messages?: Readonly<Record<string, string | {
22
+ readonly message: string;
23
+ }>>;
24
+ readonly uiLanguage?: string;
25
+ readonly permissions?: {
26
+ readonly permissions?: readonly string[];
27
+ readonly origins?: readonly string[];
28
+ };
29
+ readonly initialStorage?: Partial<Readonly<Record<StorageAreaName, Readonly<Record<string, unknown>>>>>;
30
+ readonly initialTabs?: readonly Partial<Tab>[];
31
+ }
32
+ export interface FakeRuntime {
33
+ id: string;
34
+ lastError: undefined;
35
+ getManifest<T = Record<string, unknown>>(): T;
36
+ getURL(path: string): string;
37
+ sendMessage<T = unknown>(message: unknown, callback?: (response: T) => void): Promise<T>;
38
+ connect(connectInfo?: {
39
+ readonly name?: string;
40
+ }): FakePort;
41
+ readonly onMessage: FakeEvent<[
42
+ message: unknown,
43
+ sender: MessageSender,
44
+ sendResponse: SendResponse
45
+ ]>;
46
+ readonly onInstalled: FakeEvent<[details: Record<string, unknown>]>;
47
+ readonly onStartup: FakeEvent<[]>;
48
+ readonly onSuspend: FakeEvent<[]>;
49
+ }
50
+ export interface FakePort {
51
+ readonly name: string;
52
+ readonly sender?: MessageSender;
53
+ postMessage(message: unknown): void;
54
+ disconnect(): void;
55
+ readonly onMessage: FakeEvent<[message: unknown, port: FakePort]>;
56
+ readonly onDisconnect: FakeEvent<[port: FakePort]>;
57
+ }
58
+ export interface FakeStorageArea {
59
+ get(callback?: (value: Record<string, unknown>) => void): Promise<Record<string, unknown>>;
60
+ get(keys: unknown, callback?: (value: Record<string, unknown>) => void): Promise<Record<string, unknown>>;
61
+ set(items: Record<string, unknown>, callback?: () => void): Promise<void>;
62
+ remove(keys: unknown, callback?: () => void): Promise<void>;
63
+ clear(callback?: () => void): Promise<void>;
64
+ getBytesInUse(keys?: unknown, callback?: (value: number) => void): Promise<number>;
65
+ }
66
+ export interface FakeStorage {
67
+ readonly local: FakeStorageArea;
68
+ readonly sync: FakeStorageArea;
69
+ readonly session: FakeStorageArea;
70
+ readonly managed: FakeStorageArea;
71
+ readonly onChanged: FakeEvent<[
72
+ changes: StorageChanges,
73
+ areaName: StorageAreaName
74
+ ]>;
75
+ }
76
+ export interface FakeTabs {
77
+ query(queryInfo?: Record<string, unknown>, callback?: (tabs: Tab[]) => void): Promise<Tab[]>;
78
+ get(tabId: number, callback?: (tab: Tab) => void): Promise<Tab>;
79
+ create(createProperties?: Record<string, unknown>, callback?: (tab: Tab) => void): Promise<Tab>;
80
+ update(tabId: number, updateProperties: Record<string, unknown>, callback?: (tab: Tab) => void): Promise<Tab>;
81
+ remove(tabIds: number | readonly number[], callback?: () => void): Promise<void>;
82
+ reload(tabId?: number, reloadProperties?: Record<string, unknown>, callback?: () => void): Promise<void>;
83
+ sendMessage<T = unknown>(tabId: number, message: unknown, options?: Record<string, unknown>, callback?: (response: T) => void): Promise<T>;
84
+ readonly onCreated: FakeEvent<[tab: Tab]>;
85
+ readonly onUpdated: FakeEvent<[
86
+ tabId: number,
87
+ changeInfo: Record<string, unknown>,
88
+ tab: Tab
89
+ ]>;
90
+ readonly onRemoved: FakeEvent<[
91
+ tabId: number,
92
+ removeInfo: Record<string, unknown>
93
+ ]>;
94
+ readonly onActivated: FakeEvent<[
95
+ activeInfo: {
96
+ readonly tabId: number;
97
+ readonly windowId: number;
98
+ }
99
+ ]>;
100
+ }
101
+ export interface FakeWindows {
102
+ getCurrent(getInfo?: Record<string, unknown>, callback?: (window: Window) => void): Promise<Window>;
103
+ create(createData?: Record<string, unknown>, callback?: (window: Window) => void): Promise<Window>;
104
+ update(windowId: number, updateInfo: Record<string, unknown>, callback?: (window: Window) => void): Promise<Window>;
105
+ remove(windowId: number, callback?: () => void): Promise<void>;
106
+ getAll(getInfo?: Record<string, unknown>, callback?: (windows: Window[]) => void): Promise<Window[]>;
107
+ }
108
+ export interface FakeAction {
109
+ readonly area: 'action';
110
+ setBadgeText(details: Record<string, unknown>, callback?: () => void): Promise<void>;
111
+ setBadgeBackgroundColor(details: Record<string, unknown>, callback?: () => void): Promise<void>;
112
+ setTitle(details: Record<string, unknown>, callback?: () => void): Promise<void>;
113
+ setIcon(details: Record<string, unknown>, callback?: () => void): Promise<void>;
114
+ openPopup(options?: Record<string, unknown>, callback?: () => void): Promise<void>;
115
+ readonly onClicked: FakeEvent<[tab: Tab]>;
116
+ readonly badgeText: string | undefined;
117
+ readonly title: string | undefined;
118
+ }
119
+ export interface FakeAlarms {
120
+ create(infoOrName: Record<string, unknown> | string, infoOrCallback?: Record<string, unknown> | (() => void), callback?: () => void): Promise<void>;
121
+ get(name?: string, callback?: (alarm: Record<string, unknown> | undefined) => void): Promise<Record<string, unknown> | undefined>;
122
+ getAll(callback?: (alarms: Record<string, unknown>[]) => void): Promise<Record<string, unknown>[]>;
123
+ clear(name?: string, callback?: (wasCleared: boolean) => void): Promise<boolean>;
124
+ clearAll(callback?: (wasCleared: boolean) => void): Promise<boolean>;
125
+ readonly onAlarm: FakeEvent<[alarm: Record<string, unknown>]>;
126
+ }
127
+ export interface FakeI18n {
128
+ getMessage(messageName: string, substitutions?: string | readonly string[]): string;
129
+ getUILanguage(): string;
130
+ detectLanguage(text: string): Promise<unknown>;
131
+ }
132
+ export interface FakePermissions {
133
+ contains(permissions: Record<string, unknown>, callback?: (value: boolean) => void): Promise<boolean>;
134
+ request(permissions: Record<string, unknown>, callback?: (value: boolean) => void): Promise<boolean>;
135
+ remove(permissions: Record<string, unknown>, callback?: (value: boolean) => void): Promise<boolean>;
136
+ getAll(callback?: (value: Record<string, unknown>) => void): Promise<Record<string, unknown>>;
137
+ readonly onAdded: FakeEvent<[permissions: Record<string, unknown>]>;
138
+ readonly onRemoved: FakeEvent<[permissions: Record<string, unknown>]>;
139
+ }
140
+ export interface FakeScripting {
141
+ executeScript<Result = unknown, Args extends readonly unknown[] = readonly unknown[]>(injection: ScriptInjection<Args> | readonly ScriptInjection<Args>[], callback?: (results: InjectionResult<Result>[]) => void): Promise<InjectionResult<Result>[]>;
142
+ insertCSS(injection: unknown, callback?: () => void): Promise<void>;
143
+ removeCSS(injection: unknown, callback?: () => void): Promise<void>;
144
+ }
145
+ export interface FakeNotifications {
146
+ create(options: Record<string, unknown>, callback?: (id: string) => void): Promise<string>;
147
+ update(id: string, options: Record<string, unknown>, callback?: (updated: boolean) => void): Promise<boolean>;
148
+ clear(id: string, callback?: (cleared: boolean) => void): Promise<boolean>;
149
+ getAll(callback?: (notifications: Record<string, boolean>) => void): Promise<Record<string, boolean>>;
150
+ readonly onClicked: FakeEvent<[id: string]>;
151
+ readonly onClosed: FakeEvent<[id: string, byUser: boolean]>;
152
+ readonly onButtonClicked: FakeEvent<[id: string, buttonIndex: number]>;
153
+ }
154
+ export interface FakeBrowser {
155
+ readonly target: BrowserTarget;
156
+ readonly runtime: FakeRuntime;
157
+ readonly storage: FakeStorage;
158
+ readonly tabs: FakeTabs;
159
+ readonly windows: FakeWindows;
160
+ readonly action: FakeAction;
161
+ readonly alarms: FakeAlarms;
162
+ readonly i18n: FakeI18n;
163
+ readonly permissions: FakePermissions;
164
+ readonly scripting: FakeScripting;
165
+ readonly notifications: FakeNotifications;
166
+ readonly commands: Record<string, unknown>;
167
+ readonly contextMenus: Record<string, unknown>;
168
+ readonly cookies: Record<string, unknown>;
169
+ readonly downloads: Record<string, unknown>;
170
+ readonly sessions: Record<string, unknown>;
171
+ readonly bookmarks: Record<string, unknown>;
172
+ readonly webNavigation: Record<string, unknown>;
173
+ readonly webRequest: Record<string, unknown>;
174
+ reset(): void;
175
+ }
176
+ export declare function createFakeEvent<Args extends readonly unknown[] = readonly unknown[]>(): FakeEvent<Args>;
177
+ export declare function createFakeBrowser(options?: FakeBrowserOptions): FakeBrowser;
178
+ export declare const fakeBrowser: FakeBrowser;
179
+ export declare function resetFakeBrowser(): void;
180
+ export declare function installFakeBrowser(options?: FakeBrowserOptions & {
181
+ readonly scope?: unknown;
182
+ }): FakeBrowser;
183
+ export declare function uninstallFakeBrowser(scope?: unknown): void;
184
+ //# sourceMappingURL=fake-browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake-browser.d.ts","sourceRoot":"","sources":["../../src/testing/fake-browser.ts"],"names":[],"mappings":"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"}