import type { BrowserUserContext } from './browser.js';
import type { BrowsingContextBrowsingContext } from './browsing_context.js';
import type { EmptyResult, Extensible, JsUint } from './common.js';
export type ScriptCommand = ScriptAddPreloadScript | ScriptCallFunction | ScriptDisown | ScriptEvaluate | ScriptGetRealms | ScriptRemovePreloadScript;
export type ScriptResult = ScriptAddPreloadScriptResult | ScriptCallFunctionResult | ScriptDisownResult | ScriptEvaluateResult | ScriptGetRealmsResult | ScriptRemovePreloadScriptResult;
export type ScriptEvent = ScriptMessage | ScriptRealmCreated | ScriptRealmDestroyed;
export type ScriptChannel = string;
export interface ScriptChannelValue {
    type: "channel";
    value: ScriptChannelProperties;
}
export interface ScriptChannelProperties {
    channel: ScriptChannel;
    serializationOptions?: ScriptSerializationOptions;
    ownership?: ScriptResultOwnership;
}
export type ScriptEvaluateResult = ScriptEvaluateResultSuccess | ScriptEvaluateResultException;
export interface ScriptEvaluateResultSuccess {
    type: "success";
    result: ScriptRemoteValue;
    realm: ScriptRealm;
}
export interface ScriptEvaluateResultException {
    type: "exception";
    exceptionDetails: ScriptExceptionDetails;
    realm: ScriptRealm;
}
export interface ScriptExceptionDetails {
    columnNumber: JsUint;
    exception: ScriptRemoteValue;
    lineNumber: JsUint;
    stackTrace: ScriptStackTrace;
    text: string;
}
export type ScriptHandle = string;
export type ScriptInternalId = string;
export type ScriptLocalValue = ScriptRemoteReference | ScriptPrimitiveProtocolValue | ScriptChannelValue | ScriptArrayLocalValue | ScriptDateLocalValue | ScriptMapLocalValue | ScriptObjectLocalValue | ScriptRegExpLocalValue | ScriptSetLocalValue;
export type ScriptListLocalValue = ScriptLocalValue[];
export interface ScriptArrayLocalValue {
    type: "array";
    value: ScriptListLocalValue;
}
export interface ScriptDateLocalValue {
    type: "date";
    value: string;
}
export type ScriptMappingLocalValue = (ScriptLocalValue | ScriptLocalValue)[];
export interface ScriptMapLocalValue {
    type: "map";
    value: ScriptMappingLocalValue;
}
export interface ScriptObjectLocalValue {
    type: "object";
    value: ScriptMappingLocalValue;
}
export interface ScriptRegExpValue {
    pattern: string;
    flags?: string;
}
export interface ScriptRegExpLocalValue {
    type: "regexp";
    value: ScriptRegExpValue;
}
export interface ScriptSetLocalValue {
    type: "set";
    value: ScriptListLocalValue;
}
export type ScriptPreloadScript = string;
export type ScriptRealm = string;
export type ScriptPrimitiveProtocolValue = ScriptUndefinedValue | ScriptNullValue | ScriptStringValue | ScriptNumberValue | ScriptBooleanValue | ScriptBigIntValue;
export interface ScriptUndefinedValue {
    type: "undefined";
}
export interface ScriptNullValue {
    type: "null";
}
export interface ScriptStringValue {
    type: "string";
    value: string;
}
export type ScriptSpecialNumber = "NaN" | "-0" | "Infinity" | "-Infinity";
export interface ScriptNumberValue {
    type: "number";
    value: Number | ScriptSpecialNumber;
}
export interface ScriptBooleanValue {
    type: "boolean";
    value: boolean;
}
export interface ScriptBigIntValue {
    type: "bigint";
    value: string;
}
export type ScriptRealmInfo = ScriptWindowRealmInfo | ScriptDedicatedWorkerRealmInfo | ScriptSharedWorkerRealmInfo | ScriptServiceWorkerRealmInfo | ScriptWorkerRealmInfo | ScriptPaintWorkletRealmInfo | ScriptAudioWorkletRealmInfo | ScriptWorkletRealmInfo;
export interface ScriptBaseRealmInfo {
    realm: ScriptRealm;
    origin: string;
}
export type ScriptWindowRealmInfo = ScriptBaseRealmInfo & {
    type: "window";
    context: BrowsingContextBrowsingContext;
    userContext?: BrowserUserContext;
    sandbox?: string;
};
export type ScriptDedicatedWorkerRealmInfo = ScriptBaseRealmInfo & {
    type: "dedicated-worker";
    owners: ScriptRealm[];
};
export type ScriptSharedWorkerRealmInfo = ScriptBaseRealmInfo & {
    type: "shared-worker";
};
export type ScriptServiceWorkerRealmInfo = ScriptBaseRealmInfo & {
    type: "service-worker";
};
export type ScriptWorkerRealmInfo = ScriptBaseRealmInfo & {
    type: "worker";
};
export type ScriptPaintWorkletRealmInfo = ScriptBaseRealmInfo & {
    type: "paint-worklet";
};
export type ScriptAudioWorkletRealmInfo = ScriptBaseRealmInfo & {
    type: "audio-worklet";
};
export type ScriptWorkletRealmInfo = ScriptBaseRealmInfo & {
    type: "worklet";
};
export type ScriptRealmType = "window" | "dedicated-worker" | "shared-worker" | "service-worker" | "worker" | "paint-worklet" | "audio-worklet" | "worklet";
export type ScriptRemoteReference = ScriptSharedReference | ScriptRemoteObjectReference;
export type ScriptSharedReference = Extensible & {
    sharedId: ScriptSharedId;
    handle?: ScriptHandle;
};
export type ScriptRemoteObjectReference = Extensible & {
    handle: ScriptHandle;
    sharedId?: ScriptSharedId;
};
export type ScriptRemoteValue = ScriptPrimitiveProtocolValue | ScriptSymbolRemoteValue | ScriptArrayRemoteValue | ScriptObjectRemoteValue | ScriptFunctionRemoteValue | ScriptRegExpRemoteValue | ScriptDateRemoteValue | ScriptMapRemoteValue | ScriptSetRemoteValue | ScriptWeakMapRemoteValue | ScriptWeakSetRemoteValue | ScriptGeneratorRemoteValue | ScriptErrorRemoteValue | ScriptProxyRemoteValue | ScriptPromiseRemoteValue | ScriptTypedArrayRemoteValue | ScriptArrayBufferRemoteValue | ScriptNodeListRemoteValue | ScriptHtmlCollectionRemoteValue | ScriptNodeRemoteValue | ScriptWindowProxyRemoteValue;
export type ScriptListRemoteValue = ScriptRemoteValue[];
export type ScriptMappingRemoteValue = (ScriptRemoteValue | ScriptRemoteValue)[];
export interface ScriptSymbolRemoteValue {
    type: "symbol";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
}
export interface ScriptArrayRemoteValue {
    type: "array";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
    value?: ScriptListRemoteValue;
}
export interface ScriptObjectRemoteValue {
    type: "object";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
    value?: ScriptMappingRemoteValue;
}
export interface ScriptFunctionRemoteValue {
    type: "function";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
}
export type ScriptRegExpRemoteValue = ScriptRegExpLocalValue & {
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
};
export type ScriptDateRemoteValue = ScriptDateLocalValue & {
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
};
export interface ScriptMapRemoteValue {
    type: "map";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
    value?: ScriptMappingRemoteValue;
}
export interface ScriptSetRemoteValue {
    type: "set";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
    value?: ScriptListRemoteValue;
}
export interface ScriptWeakMapRemoteValue {
    type: "weakmap";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
}
export interface ScriptWeakSetRemoteValue {
    type: "weakset";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
}
export interface ScriptGeneratorRemoteValue {
    type: "generator";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
}
export interface ScriptErrorRemoteValue {
    type: "error";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
}
export interface ScriptProxyRemoteValue {
    type: "proxy";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
}
export interface ScriptPromiseRemoteValue {
    type: "promise";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
}
export interface ScriptTypedArrayRemoteValue {
    type: "typedarray";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
}
export interface ScriptArrayBufferRemoteValue {
    type: "arraybuffer";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
}
export interface ScriptNodeListRemoteValue {
    type: "nodelist";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
    value?: ScriptListRemoteValue;
}
export interface ScriptHtmlCollectionRemoteValue {
    type: "htmlcollection";
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
    value?: ScriptListRemoteValue;
}
export interface ScriptNodeRemoteValue {
    type: "node";
    sharedId?: ScriptSharedId;
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
    value?: ScriptNodeProperties;
}
export interface ScriptNodeProperties {
    nodeType: JsUint;
    childNodeCount: JsUint;
    attributes?: Record<string, string>;
    children?: ScriptNodeRemoteValue[];
    localName?: string;
    mode?: "open" | "closed";
    namespaceUri?: string;
    nodeValue?: string;
    shadowRoot?: ScriptNodeRemoteValue | null;
}
export interface ScriptWindowProxyRemoteValue {
    type: "window";
    value: ScriptWindowProxyProperties;
    handle?: ScriptHandle;
    internalId?: ScriptInternalId;
}
export interface ScriptWindowProxyProperties {
    context: BrowsingContextBrowsingContext;
}
export type ScriptResultOwnership = "root" | "none";
export interface ScriptSerializationOptions {
    maxDomDepth?: JsUint | null;
    /**
     * @default null
     */
    maxObjectDepth?: JsUint | null;
    /**
     * @default 'none'
     */
    includeShadowTree?: "none" | "open" | "all";
}
export type ScriptSharedId = string;
export interface ScriptStackFrame {
    columnNumber: JsUint;
    functionName: string;
    lineNumber: JsUint;
    url: string;
}
export interface ScriptStackTrace {
    callFrames: ScriptStackFrame[];
}
export interface ScriptSource {
    realm: ScriptRealm;
    context?: BrowsingContextBrowsingContext;
    userContext?: BrowserUserContext;
}
export interface ScriptRealmTarget {
    realm: ScriptRealm;
}
export interface ScriptContextTarget {
    context: BrowsingContextBrowsingContext;
    sandbox?: string;
}
export type ScriptTarget = ScriptContextTarget | ScriptRealmTarget;
export interface ScriptAddPreloadScript {
    method: "script.addPreloadScript";
    params: ScriptAddPreloadScriptParameters;
}
export interface ScriptAddPreloadScriptParameters {
    functionDeclaration: string;
    arguments?: ScriptChannelValue[];
    contexts?: BrowsingContextBrowsingContext[];
    userContexts?: BrowserUserContext[];
    sandbox?: string;
}
export interface ScriptAddPreloadScriptResult {
    script: ScriptPreloadScript;
}
export interface ScriptDisown {
    method: "script.disown";
    params: ScriptDisownParameters;
}
export interface ScriptDisownParameters {
    handles: ScriptHandle[];
    target: ScriptTarget;
}
export type ScriptDisownResult = EmptyResult;
export interface ScriptCallFunction {
    method: "script.callFunction";
    params: ScriptCallFunctionParameters;
}
export interface ScriptCallFunctionParameters {
    functionDeclaration: string;
    awaitPromise: boolean;
    target: ScriptTarget;
    arguments?: ScriptLocalValue[];
    resultOwnership?: ScriptResultOwnership;
    serializationOptions?: ScriptSerializationOptions;
    this?: ScriptLocalValue;
    userActivation?: boolean;
}
export type ScriptCallFunctionResult = ScriptEvaluateResult;
export interface ScriptEvaluate {
    method: "script.evaluate";
    params: ScriptEvaluateParameters;
}
export interface ScriptEvaluateParameters {
    expression: string;
    target: ScriptTarget;
    awaitPromise: boolean;
    resultOwnership?: ScriptResultOwnership;
    serializationOptions?: ScriptSerializationOptions;
    userActivation?: boolean;
}
export interface ScriptGetRealms {
    method: "script.getRealms";
    params: ScriptGetRealmsParameters;
}
export interface ScriptGetRealmsParameters {
    context?: BrowsingContextBrowsingContext;
    type?: ScriptRealmType;
}
export interface ScriptGetRealmsResult {
    realms: ScriptRealmInfo[];
}
export interface ScriptRemovePreloadScript {
    method: "script.removePreloadScript";
    params: ScriptRemovePreloadScriptParameters;
}
export interface ScriptRemovePreloadScriptParameters {
    script: ScriptPreloadScript;
}
export type ScriptRemovePreloadScriptResult = EmptyResult;
export interface ScriptMessage {
    method: "script.message";
    params: ScriptMessageParameters;
}
export interface ScriptMessageParameters {
    channel: ScriptChannel;
    data: ScriptRemoteValue;
    source: ScriptSource;
}
export interface ScriptRealmCreated {
    method: "script.realmCreated";
    params: ScriptRealmInfo;
}
export interface ScriptRealmDestroyed {
    method: "script.realmDestroyed";
    params: ScriptRealmDestroyedParameters;
}
export interface ScriptRealmDestroyedParameters {
    realm: ScriptRealm;
}
/** @deprecated Use {@link Script.create} instead — will be removed in a future major version. */
export declare function getScriptManagerInstance(driver: unknown): Promise<Script>;
export declare class Script {
    private readonly bidi;
    private constructor();
    static create(driver: unknown): Promise<Script>;
    addPreloadScript(params: ScriptAddPreloadScriptParameters): Promise<ScriptAddPreloadScriptResult>;
    callFunction(params: ScriptCallFunctionParameters): Promise<ScriptCallFunctionResult>;
    disown(params: ScriptDisownParameters): Promise<void>;
    evaluate(params: ScriptEvaluateParameters): Promise<ScriptEvaluateResult>;
    getRealms(params: ScriptGetRealmsParameters): Promise<ScriptGetRealmsResult>;
    removePreloadScript(params: ScriptRemovePreloadScriptParameters): Promise<void>;
    onMessage(callback: (params: ScriptMessageParameters) => void): Promise<void>;
    onRealmCreated(callback: (params: ScriptRealmInfo) => void): Promise<void>;
    onRealmDestroyed(callback: (params: ScriptRealmDestroyedParameters) => void): Promise<void>;
    getAllRealms(): Promise<ScriptGetRealmsResult>;
    getRealmsByType(type: ScriptRealmType): Promise<ScriptGetRealmsResult>;
    getRealmsInBrowsingContext(context: BrowsingContextBrowsingContext): Promise<ScriptGetRealmsResult>;
    getRealmsInBrowsingContextByType(context: BrowsingContextBrowsingContext, type: ScriptRealmType): Promise<ScriptGetRealmsResult>;
    callFunctionInRealm(realmId: ScriptRealm, functionDeclaration: string, awaitPromise: boolean, args?: ScriptLocalValue[], resultOwnership?: ScriptResultOwnership, serializationOptions?: ScriptSerializationOptions, userActivation?: boolean): Promise<ScriptEvaluateResult>;
    callFunctionInBrowsingContext(browsingContextId: BrowsingContextBrowsingContext, functionDeclaration: string, awaitPromise: boolean, args?: ScriptLocalValue[], sandbox?: string, resultOwnership?: ScriptResultOwnership, serializationOptions?: ScriptSerializationOptions, userActivation?: boolean): Promise<ScriptEvaluateResult>;
    evaluateFunctionInRealm(realmId: ScriptRealm, expression: string, awaitPromise: boolean, resultOwnership?: ScriptResultOwnership, serializationOptions?: ScriptSerializationOptions, userActivation?: boolean): Promise<ScriptEvaluateResult>;
    evaluateFunctionInBrowsingContext(browsingContextId: BrowsingContextBrowsingContext, expression: string, awaitPromise: boolean, sandbox?: string, resultOwnership?: ScriptResultOwnership, serializationOptions?: ScriptSerializationOptions, userActivation?: boolean): Promise<ScriptEvaluateResult>;
    disownRealmScript(realmId: ScriptRealm, handles: ScriptHandle[]): Promise<void>;
    disownBrowsingContextScript(browsingContextId: BrowsingContextBrowsingContext, handles: ScriptHandle[], sandbox?: string): Promise<void>;
}
