/**
 * WebRTC Streaming Signals
 * Real-time collaboration with automatic reconnection and peer discovery
 */
import { StreamingSignal } from './coalgebra';
export type RTCConnectionState = 'connecting' | 'connected' | 'disconnected' | 'failed' | 'closed';
export interface PeerSignaling {
    offer(peerId: string, offer: RTCSessionDescriptionInit): Promise<void>;
    answer(peerId: string, answer: RTCSessionDescriptionInit): Promise<void>;
    iceCandidate(peerId: string, candidate: RTCIceCandidateInit): Promise<void>;
    onOffer(callback: (peerId: string, offer: RTCSessionDescriptionInit) => void): void;
    onAnswer(callback: (peerId: string, answer: RTCSessionDescriptionInit) => void): void;
    onIceCandidate(callback: (peerId: string, candidate: RTCIceCandidateInit) => void): void;
}
export interface WebRTCStreamConfig {
    iceServers?: RTCIceServer[];
    dataChannelOptions?: RTCDataChannelInit;
    reconnectAttempts?: number;
    reconnectDelay?: number;
    heartbeatInterval?: number;
}
export declare class WebRTCPeer {
    peerId: string;
    private config;
    private signaling;
    private connection;
    private dataChannel;
    private reconnectAttempts;
    private heartbeatTimer;
    private messageHandlers;
    constructor(peerId: string, config: WebRTCStreamConfig, signaling: PeerSignaling);
    private setupConnection;
    private setupDataChannel;
    private startHeartbeat;
    private stopHeartbeat;
    private handleReconnection;
    createOffer(): Promise<void>;
    handleOffer(offer: RTCSessionDescriptionInit): Promise<void>;
    handleAnswer(answer: RTCSessionDescriptionInit): Promise<void>;
    handleIceCandidate(candidate: RTCIceCandidateInit): Promise<void>;
    send(data: unknown): boolean;
    onMessage(handler: (data: unknown) => void): () => void;
    getConnectionState(): RTCConnectionState;
    close(): void;
}
export declare class BroadcastChannelSignaling implements PeerSignaling {
    private channel;
    private offerHandlers;
    private answerHandlers;
    private iceCandidateHandlers;
    constructor(channelName?: string);
    private handleMessage;
    offer(peerId: string, offer: RTCSessionDescriptionInit): Promise<void>;
    answer(peerId: string, answer: RTCSessionDescriptionInit): Promise<void>;
    iceCandidate(peerId: string, candidate: RTCIceCandidateInit): Promise<void>;
    onOffer(callback: (peerId: string, offer: RTCSessionDescriptionInit) => void): void;
    onAnswer(callback: (peerId: string, answer: RTCSessionDescriptionInit) => void): void;
    onIceCandidate(callback: (peerId: string, candidate: RTCIceCandidateInit) => void): void;
    close(): void;
}
export declare const createWebRTCStream: <T>(peerId: string, config?: WebRTCStreamConfig, signaling?: PeerSignaling) => StreamingSignal<T>;
export declare const createWebRTCBroadcast: <T>(peerIds: string[], config?: WebRTCStreamConfig, signaling?: PeerSignaling) => StreamingSignal<T>;
