UNPKG

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
/** * 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>;