import { CredentialsManager } from './credentials-manager.js';
import { Peer, Room, User } from './types.js';
import { Info, Event, Disposable, JoinRoomResponse, JoinRoomPollResponse } from 'open-collaboration-protocol';
import { Logger } from './utils/logging.js';
export interface PreparedRoom {
    id: string;
    jwt: string;
}
export interface RoomClaim {
    room: string;
    roomClock: number;
    user: User;
    host?: boolean;
}
export declare function isRoomClaim(obj: unknown): obj is RoomClaim;
export interface RoomJoinInfo extends Info {
    failure: boolean;
}
export interface JoinPollResult extends Disposable {
    update(result: JoinRoomResponse | JoinRoomPollResponse): void;
    onUpdate: Event<JoinRoomResponse | JoinRoomPollResponse>;
    result?: JoinRoomResponse | JoinRoomPollResponse;
}
export declare class RoomManager {
    protected rooms: Map<string, Room>;
    protected peers: Map<string, Room>;
    protected pollResults: Map<string, JoinPollResult>;
    private readonly messageRelay;
    protected readonly credentials: CredentialsManager;
    protected logger: Logger;
    closeRoom(id: string): Promise<void>;
    prepareRoom(user: User): Promise<PreparedRoom>;
    join(peer: Peer, roomId: string): Promise<Room>;
    leaveRoom(peer: Peer): Promise<void>;
    getRoomById(id: string): Room | undefined;
    getRoomByPeerId(id: string): Room | undefined;
    requestJoin(room: Room, user: User): Promise<string>;
    pollJoin(responseId: string): JoinPollResult | undefined;
}
//# sourceMappingURL=room-manager.d.ts.map