import { VideoRoomEventParams, Optional } from '@signalwire/core';
import { RealTimeRoomEvents, RealTimeRoomListeners, RealtimeRoomListenersEventsMapping, VideoRoomSessionContract } from '../types';
import { RoomSessionMember } from './RoomSessionMember';
import { BaseVideo } from './BaseVideo';
import { Video } from './Video';
export interface RoomSessionFullState extends Omit<RoomSession, 'members'> {
    /** List of members that are part of this room session */
    members?: RoomSessionMember[];
}
export interface RoomSession extends VideoRoomSessionContract, BaseVideo<RealTimeRoomListeners, RealTimeRoomEvents> {
    /**
     * Returns a list of members currently in the room.
     *
     * @example
     * ```typescript
     * await room.getMembers()
     * ```
     */
    getMembers(): Promise<{
        members: RoomSessionMember[];
    }>;
    /** @internal */
    setPayload(payload: Optional<VideoRoomEventParams, 'room'>): void;
}
type RoomSessionPayload = Optional<VideoRoomEventParams, 'room'>;
export interface RoomSessionOptions {
    video: Video;
    payload: RoomSessionPayload;
}
export declare class RoomSession extends BaseVideo<RealTimeRoomListeners, RealTimeRoomEvents> {
    private _payload;
    protected _eventMap: RealtimeRoomListenersEventsMapping;
    constructor(options: RoomSessionOptions);
    get id(): string;
    get roomSessionId(): string;
    get roomId(): string;
    get name(): string;
    get displayName(): string;
    get hideVideoMuted(): boolean;
    get layoutName(): string;
    get meta(): Record<string, unknown> | undefined;
    get previewUrl(): string | undefined;
    get recording(): boolean;
    get streaming(): boolean;
    get locked(): boolean;
    get eventChannel(): string;
    get prioritizeHandraise(): boolean;
    get updated(): VideoRoomSessionContract["updated"];
    /** @internal */
    protected getSubscriptions(): ("room.started" | "room.ended" | "room.subscribed" | "room.updated" | "member.joined" | "member.left" | "member.updated" | "layout.changed" | "recording.started" | "recording.updated" | "recording.ended" | "playback.started" | "playback.updated" | "playback.ended" | "stream.started" | "stream.ended" | "member.updated.deaf" | "member.updated.visible" | "member.updated.audioMuted" | "member.updated.videoMuted" | "member.updated.inputVolume" | "member.updated.outputVolume" | "member.updated.inputSensitivity" | import("@signalwire/core").MemberTalkingEventNames | "memberList.updated" | "room.audienceCount")[];
}
export declare const RoomSessionAPI: import("@signalwire/core").ConstructableType<RoomSession>;
export {};
//# sourceMappingURL=RoomSession.d.ts.map