import { PeerOptions } from "peerjs";
export type NetworkEvents = {
    message: {
        data: unknown;
        peerId: string;
    };
    connection: {
        peerId: string;
        metadata: unknown;
    };
    disconnection: {
        peerId: string;
    };
    error: {
        error: unknown;
        context?: string;
    };
};
type NetworkManagerOptions = {
    debug?: boolean;
    peerOptions?: PeerOptions;
};
export declare class NetworkManager {
    private debug;
    private peer;
    private peerOptions;
    private connections;
    private emitter;
    constructor({ debug, peerOptions }?: NetworkManagerOptions);
    /**
     * Initialize the network manager, optionally with a specific peer ID.
     * If no ID is provided, PeerJS will generate one.
     * @param {string} [peerId] - Optional identifier for this peer
     */
    initialize(peerId?: string): Promise<void>;
    private log;
    /**
     * Set up event listeners for the peer
     */
    private setupEventListeners;
    /**
     * Connect to another peer
     * @param {string} peerId - ID of the peer to connect to
     * @param {unknown} [metadata] - Optional metadata to send with connection
     */
    connectToPeer(peerId: string, metadata?: unknown): void;
    /**
     * Handle a new connection (both incoming and outgoing)
     * @param {DataConnection} connection - The PeerJS connection object
     */
    private handleNewConnection;
    /**
     * Broadcast a message to all connected peers
     * @param {unknown} data - The data to broadcast
     */
    broadcast(data: unknown, excludeSelf?: boolean): void;
    /**
     * Send a message to a specific peer
     * @param {string} peerId - ID of the target peer
     * @param {unknown} data - The data to send
     * @returns {boolean} Whether the message was sent successfully
     */
    sendToPeer(peerId: string, data: unknown): boolean;
    /**
     * Register an event listener
     * @param {K} event - Event name to listen for
     * @param {function} handler - Event handler function
     */
    on<K extends keyof NetworkEvents>(event: K, handler: (data: NetworkEvents[K]) => void): void;
    /**
     * Remove an event listener
     * @param {K} event - Event name to remove listener from
     * @param {function} handler - Event handler to remove
     */
    off<K extends keyof NetworkEvents>(event: K, handler: (data: NetworkEvents[K]) => void): void;
    /**
     * Get the current peer ID
     * @returns {string} The peer ID, or null if not initialized
     */
    getPeerId(): string | null;
    /**
     * Get all connected peer IDs
     * @returns {string[]} Array of connected peer IDs
     */
    getConnectedPeers(): string[];
    /**
     * Disconnect a specific peer connection.
     * @param {string} peerId - ID of the peer to disconnect
     * @returns {boolean} Whether a connection was found and closed
     */
    disconnectPeer(peerId: string): boolean;
    /**
     * Clean up resources
     */
    destroy(): void;
}
export {};
