import type { Debugger } from 'debug';
import { type Variables } from './utils/writeVariables';
import { type AxeCoreSettings } from './utils/initializeSession';
import { type TestContext } from './utils/testContext';
interface ControllerParams {
    /** The namespace for the debug logger. */
    debugLoggerName: string;
    /** The name of the integration. Used for variables assertion */
    integrationName?: string;
    /** Configuration function name. Use for variables assertion */
    configurationFunction?: string;
}
interface ControllerActionOptions {
    timeout?: number;
}
declare abstract class Controller {
    #private;
    protected abstract executeScript<A = unknown, T = void>(fn: string | ((...args: A[]) => Promise<T>), ...args: unknown[]): Promise<T>;
    /**
     * Capture a screenshot using the test framework's native API.
     * Subclasses override this to provide framework-specific implementations.
     * Returns a base64-encoded PNG string.
     */
    abstract captureScreenshot(): Promise<string>;
    protected isStopped: boolean;
    protected debugLogger: Debugger;
    protected timeout: Variables['timeout'];
    protected axeCoreSettings?: AxeCoreSettings;
    protected runOptions?: Variables['run_options'];
    /**
     * Per-instance test attribution. Set by framework-aware adapters
     * (Playwright Test, WDIO runner) via `setTestContext()`. Vanilla
     * Playwright / WDIO users don't set this — they populate the global
     * sink instead, and `analyze`/`flush`/`stop` fall back to
     * `this.testContext ?? getGlobalTestContext()`.
     */
    protected testContext: TestContext | null;
    constructor({ debugLoggerName, integrationName, configurationFunction }: ControllerParams);
    /**
     * Set or clear per-instance test attribution. Called by framework-aware
     * adapters (Playwright Test, WDIO runner) at each test's start/end.
     * Routes through `normalizeTestContext()` so input matches the global
     * sink path. Pass `null` to clear.
     */
    setTestContext(context: TestContext | null): void;
    start({ timeout }?: ControllerActionOptions): Promise<void>;
    stop({ timeout }?: ControllerActionOptions): Promise<void>;
    analyze({ __Method, __UserRequestedAnalyze }?: {
        __Method?: string;
        __UserRequestedAnalyze?: boolean;
    }, { timeout }?: ControllerActionOptions): Promise<void>;
    flush({ timeout }?: ControllerActionOptions): Promise<void>;
}
export default Controller;
