import { Client } from './client';
import ModelingCommandsWs from './api/modeling/modeling_commands_ws';
import { OkWebSocketResponseData, SuccessWebSocketResponse, FailureWebSocketResponse } from './models';
type ExpectedWebSocketResponse = FailureWebSocketResponse | SuccessWebSocketResponse | Error;
type WorkerMessage = {
    from: 'websocket';
    payload: {
        type: 'message';
        data: unknown;
    };
} | {
    to: 'websocket';
    payload: {
        type: 'send';
        data: unknown;
    };
} | {
    from: 'wasm';
    payload: {
        type: 'message';
        data: unknown;
    } | {
        type: 'execute';
        data: unknown;
    };
};
type ZooClientArgs = {
    client: Client;
} & Parameters<typeof ModelingCommandsWs.urlConstructFrom>[0];
export declare class WebRTC extends EventTarget {
    private zooClientArgs;
    private rtcPeerConnection;
    private workerWebRTC;
    track?: RTCTrackEvent;
    channel?: RTCDataChannel;
    removeMouseEvents: () => void;
    removeResizeObserver: () => void;
    constructor(args: ZooClientArgs);
    deconstructor(): void;
    start(): Promise<void>;
    wasm(funcName: string, ...args: unknown[]): Promise<unknown>;
    executor(): {
        addEventListener: any;
        removeEventListener: any;
        submit: (kclStr: string, opts?: {
            mainKclPathName: string;
        }) => Promise<ExpectedWebSocketResponse>;
    };
    webRTCOnConnectionStateChange(): void;
    webRTCOnTrack(ev: RTCTrackEvent): void;
    webRTCOnDataChannel(ev: RTCDataChannelEvent): void;
    iceOnIceServerInfo(msg: Extract<OkWebSocketResponseData, {
        type: 'ice_server_info';
    }>): Promise<void>;
    iceOnSdpAnswer(msg: Extract<OkWebSocketResponseData, {
        type: 'sdp_answer';
    }>): Promise<void>;
    iceOnTrickleIce(msg: Extract<OkWebSocketResponseData, {
        type: 'trickle_ice';
    }>): Promise<void>;
    iceOnIceCandidate(ev: RTCPeerConnectionIceEvent): void;
    iceOnMessage(ev: WorkerMessage['payload']): void;
    workerWebRTCOnMessage(ev: MessageEvent<WorkerMessage>): void;
    ice(): void;
    deice(): void;
    addMouseEvents(el: HTMLVideoElement): void;
    resize(args: {
        width: number;
        height: number;
    }): void;
    addResizeObserver(el: HTMLElement): void;
    send(...args: Parameters<WebSocket['send']>): Promise<ExpectedWebSocketResponse>;
}
export {};
//# sourceMappingURL=webrtc.d.ts.map