import { SfuClientStatus } from './call';
import { CallInfo, CallingDemuxId, CallingEraId, CallingRoomId, CallingUserId, CallType } from '../calling';
import { IcePassword, IceUsernameFragment } from './ice';
import { CallingPublicKey } from './crypto';
export type SfuJoinCallRequest = Readonly<{
    eraId: CallingEraId;
    roomId: CallingRoomId | null;
    userId: CallingUserId;
    demuxId: CallingDemuxId;
    clientIceUsernameFragment: IceUsernameFragment;
    clientIcePassword: IcePassword;
    clientPublicKey: CallingPublicKey;
    clientHkdfExtraInfo: Uint8Array<ArrayBuffer> | null;
    serverIceUsernameFragment: IceUsernameFragment;
    serverIcePassword: IcePassword;
    callType: CallType;
    isAdmin: boolean;
    newClientsRequireApproval: boolean;
    approvedUsers: ReadonlyArray<CallingUserId> | null;
}>;
export type SfuJoinCallResponse = Readonly<{
    serverPublicKey: CallingPublicKey;
    clientStatus: SfuClientStatus;
}>;
export type SfuPeekCallRequest = Readonly<{
    eraId: CallingEraId;
    userId: CallingUserId;
}>;
export type SfuPeekCallResponse = Readonly<{
    info: CallInfo;
}>;
/**
 * Selective Forwarding Unit
 */
export declare class SfuService {
    #private;
    joinCall(request: SfuJoinCallRequest): Promise<SfuJoinCallResponse>;
    peekCall(request: SfuPeekCallRequest): Promise<SfuPeekCallResponse>;
}
