import type { NativeModule } from "expo-modules-core/types";
import { WhipConfigurationOptions, CameraId, ConnectOptions, WhepConfigurationOptions, SenderAudioCodecName, SenderVideoCodecName, ReceiverAudioCodecName, ReceiverVideoCodecName } from "./ReactNativeMobileWhepClient.types";
/** Describes whether the camera is front-facing or back-facing. */
export type CameraFacingDirection = "front" | "back" | "unspecified";
/** Contains information about the camera available on the device. */
export type Camera = {
    /** A unique ID of the camera.  */
    id: CameraId;
    /** A string describing camera name. */
    name: string;
    /** Information about the camera being a front one or back one. */
    facingDirection: CameraFacingDirection;
};
type RNMobileWhepClientModule = {
    cameras: readonly Camera[];
    whepPeerConnectionState: PeerConnectionState | null;
    whipPeerConnectionState: PeerConnectionState | null;
    createWhepClient: (configurationOptions: WhepConfigurationOptions, preferredVideoCodecs: ReceiverVideoCodecName[], preferredAudioCodecs: ReceiverAudioCodecName[]) => void;
    connectWhep: (serverUrl: string, authToken?: string) => Promise<void>;
    disconnectWhep: () => Promise<void>;
    pauseWhep: () => void;
    unpauseWhep: () => void;
    createWhipClient: (configurationOptions: WhipConfigurationOptions, preferredVideoCodecs: SenderVideoCodecName[], preferredAudioCodecs: SenderAudioCodecName[]) => void;
    connectWhip: (serverUrl: string, authToken?: string) => Promise<void>;
    disconnectWhip: () => Promise<void>;
    cleanupWhip: () => void;
    getSupportedSenderVideoCodecsNames: () => SenderVideoCodecName[];
    getSupportedReceiverVideoCodecsNames: () => ReceiverVideoCodecName[];
    getSupportedReceiverAudioCodecsNames: () => ReceiverAudioCodecName[];
    getSupportedSenderAudioCodecsNames: () => SenderAudioCodecName[];
};
export declare const ReceivableEvents: {
    readonly WhepPeerConnectionStateChanged: "WhepPeerConnectionStateChanged";
    readonly WhipPeerConnectionStateChanged: "WhipPeerConnectionStateChanged";
    readonly ReconnectionStatusChanged: "ReconnectionStatusChanged";
    readonly Warning: "Warning";
};
export type PeerConnectionState = "new" | "connecting" | "connected" | "disconnected" | "failed" | "closed" | "unknown";
export type ReceivableEventPayloads = {
    [ReceivableEvents.ReconnectionStatusChanged]: "reconnectionStarted" | "reconnected" | "reconnectionRetriesLimitReached";
    [ReceivableEvents.WhepPeerConnectionStateChanged]: PeerConnectionState;
    [ReceivableEvents.WhipPeerConnectionStateChanged]: PeerConnectionState;
    [ReceivableEvents.Warning]: string;
};
declare const nativeModule: RNMobileWhepClientModule & NativeModule<Record<keyof typeof ReceivableEvents, (payload: any) => void>>;
export declare class WhipClient {
    private readonly configurationOptions;
    private readonly preferredVideoCodecs;
    private readonly preferredAudioCodecs;
    private isInitialized;
    constructor(configurationOptions: WhipConfigurationOptions, preferredVideoCodecs?: SenderVideoCodecName[], preferredAudioCodecs?: SenderAudioCodecName[]);
    private initializeIfNeeded;
    connect(connectOptions: ConnectOptions): Promise<void>;
    disconnect(): Promise<void>;
    cleanup(): Promise<void>;
    static getSupportedAudioCodecs(): SenderAudioCodecName[];
    static getSupportedVideoCodecs(): SenderVideoCodecName[];
}
export declare class WhepClient {
    private readonly configurationOptions;
    private readonly preferredVideoCodecs;
    private readonly preferredAudioCodecs;
    private isInitialized;
    constructor(configurationOptions: WhepConfigurationOptions, preferredVideoCodecs?: ReceiverVideoCodecName[], preferredAudioCodecs?: ReceiverAudioCodecName[]);
    private initializeIfNeeded;
    /**
     * Connects to the WHEP server defined while creating WHEP client.
     * Allows user to receive video and audio stream.
     */
    connect(connectOptions: ConnectOptions): Promise<void>;
    /**
     * Disconnects from the WHEP server defined while creating WHEP client.
     * Frees the resources.
     */
    disconnect(): Promise<void>;
}
/** Gives access to the cameras available on the device.*/
export declare const cameras: readonly Camera[];
/** Gives access to the current state of the WHEP peer connection. */
export declare const whepPeerConnectionState: PeerConnectionState | null;
/** Gives access to the current state of the WHIP peer connection. */
export declare const whipPeerConnectionState: PeerConnectionState | null;
export default nativeModule;
//# sourceMappingURL=ReactNativeMobileWhepClientModule.d.ts.map