import { CallData, CallDataOptions } from '../data/call';
import { CallInfo, CallingDemuxId, CallingEraId, CallingUserId } from '../calling';
export declare enum SfuClientStatus {
    Active = "ACTIVE",
    Pending = "PENDING",
    Blocked = "BLOCKED",
    Rejected = "REJECTED"
}
export type SfuClient = Readonly<{
    userId: CallingUserId;
    demuxId: CallingDemuxId;
    isAdmin: boolean;
}>;
export type SfuCallOptions = Readonly<CallDataOptions & {
    eraId: CallingEraId;
    creatorUserId: CallingUserId;
    maxClients: number;
    newClientsRequireApproval: boolean;
    persistApprovalForAllUsersWhoJoin: boolean;
    approvedUsers: ReadonlyArray<CallingUserId> | null;
}>;
export declare class SfuCall extends CallData {
    #private;
    constructor(options: SfuCallOptions);
    get eraId(): CallingEraId;
    getInfo(includePendingClients: boolean): CallInfo;
    isAdmin(userId: string): boolean;
    addClient(client: SfuClient): SfuClientStatus;
    hasClient(demuxId: CallingDemuxId): boolean;
    approvePendingDemuxId(demuxId: CallingDemuxId): void;
    denyPendingDemuxId(demuxId: CallingDemuxId): void;
    dropDemuxId(demuxId: CallingDemuxId): void;
    blockDemuxId(demuxId: CallingDemuxId): void;
}
