/*!
PrivMX Web Endpoint.
Copyright © 2024 Simplito sp. z o.o.

This file is part of the PrivMX Platform (https://privmx.dev).
This software is Licensed under the PrivMX Free License.

See the License for the specific language governing permissions and
limitations under the License.
*/
import { Jsep } from "../service/WebRtcInterface";
import { ContainerPolicy, PagingList, PagingQuery, StreamInfo, StreamEventSelectorType, StreamEventType, StreamRoom, TurnCredentials, UserWithPubKey } from "../Types";
import { WebRtcClient } from "../webStreams/WebRtcClient";
import { WebRtcInterfaceImpl } from "../webStreams/WebRtcInterfaceImpl";
import { Api } from "./Api";
import { BaseNative } from "./BaseNative";
import * as Types from "../Types";
export declare class StreamApiNative extends BaseNative {
    protected webRtcClient: WebRtcClient;
    protected static bindingId: number;
    static getBindingId(): number;
    protected webRtcInterfacePtr: number;
    protected selfPtr: number;
    protected webRtcInterfaceImpl: WebRtcInterfaceImpl | null;
    constructor(api: Api, webRtcClient: WebRtcClient);
    newApi(connectionPtr: number, eventApiPtr: number): Promise<number>;
    deleteApi(ptr: number): Promise<void>;
    create(ptr: number, args: []): Promise<void>;
    createStreamRoom(ptr: number, args: [
        string,
        UserWithPubKey[],
        UserWithPubKey[],
        Uint8Array,
        Uint8Array,
        ContainerPolicy | undefined
    ]): Promise<string>;
    updateStreamRoom(ptr: number, args: [
        string,
        UserWithPubKey[],
        UserWithPubKey[],
        Uint8Array,
        Uint8Array,
        number,
        boolean,
        boolean,
        ContainerPolicy | undefined
    ]): Promise<void>;
    deleteStreamRoom(ptr: number, args: [string]): Promise<void>;
    getStreamRoom(ptr: number, args: [string]): Promise<StreamRoom>;
    listStreamRooms(ptr: number, args: [string, PagingQuery]): Promise<PagingList<StreamRoom>>;
    createStream(ptr: number, args: [string]): Promise<Types.StreamHandle>;
    joinStreamRoom(ptr: number, args: [string]): Promise<void>;
    leaveStreamRoom(ptr: number, args: [string]): Promise<void>;
    enableStreamRoomRecording(ptr: number, args: [string]): Promise<void>;
    getStreamRoomRecordingKeys(ptr: number, args: [string]): Promise<Types.RecordingEncKey[]>;
    publishStream(ptr: number, args: [number]): Promise<Types.StreamPublishResult>;
    updateStream(ptr: number, args: [number]): Promise<Types.StreamPublishResult>;
    unpublishStream(ptr: number, args: [number]): Promise<void>;
    listStreams(ptr: number, args: [string]): Promise<StreamInfo[]>;
    subscribeToRemoteStreams(ptr: number, args: [string, Types.StreamSubscription[]]): Promise<void>;
    modifyRemoteStreamsSubscriptions(ptr: number, args: [string, Types.StreamSubscription[], Types.StreamSubscription[]]): Promise<void>;
    unsubscribeFromRemoteStreams(ptr: number, args: [string, Types.StreamSubscription[]]): Promise<void>;
    keyManagement(ptr: number, args: [boolean]): Promise<void>;
    getTurnCredentials(ptr: number, args: []): Promise<TurnCredentials[]>;
    subscribeFor(ptr: number, args: [string[]]): Promise<string[]>;
    unsubscribeFrom(ptr: number, args: [string[]]): Promise<void>;
    buildSubscriptionQuery(ptr: number, args: [StreamEventType, StreamEventSelectorType, string]): Promise<string>;
    trickle(ptr: number, args: [number, RTCIceCandidate]): Promise<void>;
    acceptOfferOnReconfigure(ptr: number, args: [number, Jsep]): Promise<void>;
    setNewOfferOnReconfigure(ptr: number, args: [number, Jsep]): Promise<void>;
    protected bindWebRtcInterfaceAsHandler(bindingId: number): void;
}
