477a00db1a
Testing / remote-protocol-compat (0.9.5) (push) Successful in 48s
Testing / remote-protocol-compat (0.9.3) (push) Successful in 47s
Build & Publish Package / publish (push) Successful in 46s
Package Extension / package-extension (push) Successful in 59s
Testing / test (push) Failing after 50s
- Add a neutral WebExtension API adapter that uses Firefox browser.* or Chromium chrome.* without mutating globals. - Switch extension runtime code to the adapter and add Firefox-specific typings for tabs, windows, tab groups, storage, scripting, and native messaging ports. - Fix Firefox temporary add-on instructions to load the packaged manifest with background.scripts instead of the Chromium service worker manifest. - Detect Firefox in clients.list via runtime.getBrowserInfo and keep Chromium user-agent fallback support. - Make navigate.open wait briefly for Firefox to replace initial about:blank with the requested URL. - Add JS coverage for API selection, clients.list browser detection, and Firefox navigate.open URL polling. - Bump package and extension version to 0.15.2.
26 lines
884 B
TypeScript
26 lines
884 B
TypeScript
import { webExtApi as api } from '../browser-api';
|
|
import type { ScriptInjection, ScriptInjectionResult } from '../types';
|
|
// api.scripting.executeScript wrapper with transient-error retry.
|
|
import { isTransientScriptError } from './errors';
|
|
import { sleep } from './throttle';
|
|
import type { Serializable } from '../types';
|
|
|
|
export async function executeScript<Args extends Serializable[], Result>(
|
|
options: ScriptInjection<Args>,
|
|
retries = 3,
|
|
): Promise<ScriptInjectionResult<Result>[]> {
|
|
for (let i = 0; i < retries; i++) {
|
|
try {
|
|
return await api.scripting.executeScript(options);
|
|
} catch (e) {
|
|
if (i < retries - 1 && isTransientScriptError(e)) {
|
|
await sleep(300);
|
|
continue;
|
|
}
|
|
throw e;
|
|
}
|
|
}
|
|
// Unreachable: the loop either returns or throws on the final iteration.
|
|
throw new Error("executeScript: exhausted retries");
|
|
}
|