import type { BrowserUserContext } from './browser.js';
import type { BrowsingContextBrowsingContext } from './browsing_context.js';
import type { EmptyParams, EmptyResult, Extensible } from './common.js';
export type SessionCommand = SessionEnd | SessionNew | SessionStatus | SessionSubscribe | SessionUnsubscribe;
export type SessionResult = SessionEndResult | SessionNewResult | SessionStatusResult | SessionSubscribeResult | SessionUnsubscribeResult;
export interface SessionCapabilitiesRequest {
    alwaysMatch?: SessionCapabilityRequest;
    firstMatch?: SessionCapabilityRequest[];
}
export type SessionCapabilityRequest = Extensible & {
    acceptInsecureCerts?: boolean;
    browserName?: string;
    browserVersion?: string;
    platformName?: string;
    proxy?: SessionProxyConfiguration;
    unhandledPromptBehavior?: SessionUserPromptHandler;
};
export type SessionProxyConfiguration = SessionAutodetectProxyConfiguration | SessionDirectProxyConfiguration | SessionManualProxyConfiguration | SessionPacProxyConfiguration | SessionSystemProxyConfiguration;
export type SessionAutodetectProxyConfiguration = Extensible & {
    proxyType: "autodetect";
};
export type SessionDirectProxyConfiguration = Extensible & {
    proxyType: "direct";
};
export type SessionManualProxyConfiguration = SessionSocksProxyConfiguration & Extensible & {
    proxyType: "manual";
    httpProxy?: string;
    sslProxy?: string;
    noProxy?: string[];
};
export interface SessionSocksProxyConfiguration {
    socksProxy: string;
    socksVersion: number;
}
export type SessionPacProxyConfiguration = Extensible & {
    proxyType: "pac";
    proxyAutoconfigUrl: string;
};
export type SessionSystemProxyConfiguration = Extensible & {
    proxyType: "system";
};
export interface SessionUserPromptHandler {
    alert?: SessionUserPromptHandlerType;
    beforeUnload?: SessionUserPromptHandlerType;
    confirm?: SessionUserPromptHandlerType;
    default?: SessionUserPromptHandlerType;
    file?: SessionUserPromptHandlerType;
    prompt?: SessionUserPromptHandlerType;
}
export type SessionUserPromptHandlerType = "accept" | "dismiss" | "ignore";
export type SessionSubscription = string;
export interface SessionSubscribeParameters {
    events: string[];
    contexts?: BrowsingContextBrowsingContext[];
    userContexts?: BrowserUserContext[];
}
export interface SessionUnsubscribeByIdRequest {
    subscriptions: SessionSubscription[];
}
export interface SessionUnsubscribeByAttributesRequest {
    events: string[];
}
export interface SessionStatus {
    method: "session.status";
    params: EmptyParams;
}
export interface SessionStatusResult {
    ready: boolean;
    message: string;
}
export interface SessionNew {
    method: "session.new";
    params: SessionNewParameters;
}
export interface SessionNewParameters {
    capabilities: SessionCapabilitiesRequest;
}
export interface SessionNewResult {
    sessionId: string;
    capabilities: {
        acceptInsecureCerts: boolean;
        browserName: string;
        browserVersion: string;
        platformName: string;
        setWindowRect: boolean;
        userAgent: string;
        proxy?: SessionProxyConfiguration;
        unhandledPromptBehavior?: SessionUserPromptHandler;
        webSocketUrl?: string;
    };
}
export interface SessionEnd {
    method: "session.end";
    params: EmptyParams;
}
export type SessionEndResult = EmptyResult;
export interface SessionSubscribe {
    method: "session.subscribe";
    params: SessionSubscribeParameters;
}
export interface SessionSubscribeResult {
    subscription: SessionSubscription;
}
export interface SessionUnsubscribe {
    method: "session.unsubscribe";
    params: SessionUnsubscribeParameters;
}
export type SessionUnsubscribeParameters = SessionUnsubscribeByAttributesRequest | SessionUnsubscribeByIdRequest;
export type SessionUnsubscribeResult = EmptyResult;
export declare class Session {
    private readonly bidi;
    private constructor();
    static create(driver: unknown): Promise<Session>;
    end(): Promise<void>;
    new(params: SessionNewParameters): Promise<SessionNewResult>;
    status(): Promise<SessionStatusResult>;
    subscribe(params: SessionSubscribeParameters): Promise<SessionSubscribeResult>;
    unsubscribe(params: SessionUnsubscribeParameters): Promise<void>;
}
