resig.js
Version:
Universal reactive signal library with complete platform features: signals, animations, CRDTs, scheduling, DOM integration. Works identically across React, SolidJS, Svelte, Vue, and Qwik.
63 lines (62 loc) • 2.95 kB
TypeScript
/**
* 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>;