import type { BrowserUserContext } from './browser.js';
import './browser.js';
import type { BrowsingContextBrowsingContext } from './browsing_context.js';
import './browsing_context.js';
import type { EmptyParams, EmptyResult } from './common.js';
import './common.js';
import { Domain } from '../domain.js';
export interface SessionCapabilitiesRequest {
    alwaysMatch?: SessionCapabilityRequest;
    firstMatch?: Array<SessionCapabilityRequest>;
}
export interface SessionCapabilityRequest {
    acceptInsecureCerts?: boolean;
    browserName?: string;
    browserVersion?: string;
    platformName?: string;
    proxy?: SessionProxyConfiguration;
    unhandledPromptBehavior?: SessionUserPromptHandler;
}
export interface SessionCapabilityResponse {
    acceptInsecureCerts: boolean;
    browserName: string;
    browserVersion: string;
    platformName: string;
    setWindowRect: boolean;
    userAgent: string;
    proxy?: SessionProxyConfiguration;
    unhandledPromptBehavior?: SessionUserPromptHandler;
    webSocketUrl?: string;
}
export type SessionProxyConfiguration = SessionAutodetectProxyConfiguration | SessionDirectProxyConfiguration | SessionManualProxyConfiguration | SessionPacProxyConfiguration | SessionSystemProxyConfiguration;
export interface SessionAutodetectProxyConfiguration {
    proxyType: "autodetect";
}
export interface SessionDirectProxyConfiguration {
    proxyType: "direct";
}
export interface SessionManualProxyConfiguration {
    proxyType: "manual";
    httpProxy?: string;
    sslProxy?: string;
    socksProxy: string;
    socksVersion: number;
    noProxy?: Array<string>;
}
export interface SessionSocksProxyConfiguration {
    socksProxy: string;
    socksVersion: number;
}
export interface SessionPacProxyConfiguration {
    proxyType: "pac";
    proxyAutoconfigUrl: string;
}
export interface SessionSystemProxyConfiguration {
    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: Array<string>;
    contexts?: Array<BrowsingContextBrowsingContext>;
    userContexts?: Array<BrowserUserContext>;
}
export interface SessionUnsubscribeByIdRequest {
    subscriptions: Array<SessionSubscription>;
}
export interface SessionUnsubscribeByAttributesRequest {
    events: Array<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: SessionCapabilityResponse;
}
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;
/**
 * This is an unsupported API. No compatibility guarantees are provided.
 * It tracks the W3C WebDriver BiDi specification directly. As the specification
 * evolves, this API will change or be removed without prior notice.
 */
export declare class Session extends Domain {
    static readonly UserPromptHandlerType: Readonly<{
        readonly ACCEPT: "accept";
        readonly DISMISS: "dismiss";
        readonly IGNORE: "ignore";
    }>;
    static create(driver: unknown): Promise<Session>;
    /**
     * @returns {Promise<void>}
     * @see https://w3c.github.io/webdriver-bidi/#command-session-end
     */
    end(): Promise<void>;
    /**
     * @param {SessionNewParameters} params
     * @param {SessionCapabilitiesRequest} params.capabilities
     * @returns {Promise<SessionNewResult>}
     * @see https://w3c.github.io/webdriver-bidi/#command-session-new
     */
    new(params: SessionNewParameters): Promise<SessionNewResult>;
    /**
     * @returns {Promise<SessionStatusResult>}
     * @see https://w3c.github.io/webdriver-bidi/#command-session-status
     */
    status(): Promise<SessionStatusResult>;
    /**
     * @param {SessionSubscribeParameters} params
     * @param {Array<string>} params.events
     * @param {Array<BrowsingContextBrowsingContext>} [params.contexts]
     * @param {Array<BrowserUserContext>} [params.userContexts]
     * @returns {Promise<SessionSubscribeResult>}
     * @see https://w3c.github.io/webdriver-bidi/#command-session-subscribe
     */
    subscribe(params: SessionSubscribeParameters): Promise<SessionSubscribeResult>;
    /**
     * @param {SessionUnsubscribeParameters} params
     * @returns {Promise<void>}
     * @see https://w3c.github.io/webdriver-bidi/#command-session-unsubscribe
     */
    unsubscribe(params: SessionUnsubscribeParameters): Promise<void>;
}
