import type { AccessibleBrowserTabSnapshot, BrowserTabSnapshot, TabEligibilityReason, } from "./tab-eligibility.js"; export type TabAccessMode = "all" | "selected"; export type TabAccessEpoch = Readonly<{ revision: number; tabRevision: number; }>; export type TabAccessReason = TabEligibilityReason | "revoked" | "paused" | "not-selected" | null; export type TabAccessState = { accessible: boolean; eligible: boolean; denied: boolean; reason: TabAccessReason; tab: BrowserTabSnapshot | null; }; export type TabAccessStorageArea = { get(keys: string[]): Promise>; set(values: Record): Promise; remove(keys: string[]): Promise; }; export type TabAccessChromeApi = { extension?: { isAllowedFileSchemeAccess?: () => boolean | Promise; }; storage: { session: TabAccessStorageArea }; tabs: { get(tabId: number): Promise; query(queryInfo: Record): Promise; }; }; export type TabAccessPolicy = { initialize(initialMode?: TabAccessMode, initialEnabled?: boolean): Promise; readonly mode: TabAccessMode; setMode(nextMode: TabAccessMode): TabAccessMode; setEnabled(nextEnabled: boolean): void; beginTransition(): void; endTransition(): void; beginRevocation(tabId: number): symbol; endRevocation(token: symbol): void; capture(tabId: number): TabAccessEpoch; epochIsCurrent(tabId: number, epoch: TabAccessEpoch): boolean; invalidateTab(tabId: number): void; invalidateAll(): void; inspectTab(tabId: number, epoch?: TabAccessEpoch): Promise; requireTab(tabId: number, epoch?: TabAccessEpoch): Promise; listAccessibleTabs(options?: { allowDuringTransition?: boolean; }): Promise; pause(tabId: number): Promise; allow(tabId: number): Promise; forgetTab(tabId: number): Promise; replaceTab(addedTabId: number, removedTabId: number): Promise; clearDenied(): Promise; isDenied(tabId: number): boolean; }; export function createTabAccessPolicy(options: { chromeApi?: TabAccessChromeApi; isSelectedTab(tab: BrowserTabSnapshot): boolean | Promise; }): TabAccessPolicy;