import { MediaConnection, PeerError } from "peerjs";
import { LobbyP2P as Lobby, Lobby as LobbyArena } from "./types";
import { BaseLobby } from "./BaseLobby";
export declare class LobbyP2P extends BaseLobby<typeof LobbyP2P.events[number]> implements Lobby {
    static readonly events: readonly ["peerConnecting", "peerConnected", "peerDisconnected", "peerAbandoned", "peerRefused", "peerError", "dataReceived", "serverConnected", "serverDisconnected", "serverError"];
    private static instance?;
    private con?;
    private host?;
    private lobby?;
    private media?;
    protected opponent?: string;
    private peer;
    private target?;
    private username?;
    constructor(lobby?: LobbyArena);
    get actions(): {
        listPlayers: () => Promise<Array<string>>;
        disconnect: () => void;
        reconnect: () => Promise<LobbyP2P>;
        abandon: () => Promise<void>;
    };
    get communications(): {
        chat: (message: string) => Promise<string>;
        call: () => Promise<MediaConnection>;
        onCall: (callback: (accept: (stream?: MediaStream) => void, decline: () => void) => void) => void;
        hangUp: () => Promise<void>;
        onMessage: (callback: (message: string) => void) => void;
    };
    get data(): {
        send: (data: any) => void;
        onReceive: (callback: (payload: any) => void) => void;
    };
    get events(): {
        onConnect: (callback: () => void) => void;
        onMatchFound: (callback: (opponent: string) => void) => void;
        onDisconnect: (callback: () => void) => void;
        onAbandon: (callback: () => void) => void;
        onError: (callback: (error: PeerError<any>, fatal: boolean) => void) => void;
    };
    get session(): {
        username: string;
        opponent: string;
        isConnected: boolean;
    };
    connect(target: string): Promise<void>;
    private destroy;
    private disconnectSafely;
    getID(): Promise<string>;
    static getInstance(): LobbyP2P;
    private registerDataCallbacks;
    private resolveConnection;
}
