import { Permissions } from "wxt/browser"; import { Unwatch, WatchCallback, WxtStorageItem } from "wxt/storage"; const thumbnailCaptureEnabled: Pick>, "getValue" | "watch" | "setValue"> = { getValue: async (): Promise => await browser.permissions.contains({ permissions: ["scripting"], origins: [""] }), watch: (cb: WatchCallback): Unwatch => { const listener = async (permissions: Permissions.Permissions): Promise => { if (permissions.permissions?.includes("scripting") || permissions.origins?.includes("")) { const isGranted: boolean = await browser.permissions.contains({ permissions: ["scripting"], origins: [""] }); console.log("thumbnailCaptureEnabled changed", isGranted); cb(isGranted, !isGranted); } }; browser.permissions.onAdded.addListener(listener); browser.permissions.onRemoved.addListener(listener); return (): void => { browser.permissions.onAdded.removeListener(listener); browser.permissions.onRemoved.removeListener(listener); }; }, setValue: async (value: boolean): Promise => { let result: boolean = false; if (value) result = await browser.permissions.request({ permissions: ["scripting"], origins: [""] }); else { result = await browser.permissions.remove({ origins: [""] }); if (import.meta.env.DEV) await browser.permissions.request({ origins: ["http://localhost/*"] }); } if (!result) throw new Error("Permission request was denied"); } }; export default thumbnailCaptureEnabled;