mirror of
https://github.com/xtr-dev/rondevu-client.git
synced 2025-12-10 02:43:25 +00:00
Split the monolithic peer.ts file into a modular state-based architecture: - Created separate files for each state class (idle, creating-offer, waiting-for-answer, answering, exchanging-ice, connected, failed, closed) - Extracted shared types into types.ts - Extracted base PeerState class into state.ts - Updated peer/index.ts to import state classes instead of defining them inline - Made close() method async to support dynamic imports and avoid circular dependencies - Used dynamic imports in state transitions to prevent circular dependency issues This improves code organization, maintainability, and makes each state's logic easier to understand and test. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
/**
|
|
* Timeout configurations for different connection phases
|
|
*/
|
|
export interface PeerTimeouts {
|
|
/** Timeout for ICE gathering (default: 10000ms) */
|
|
iceGathering?: number;
|
|
/** Timeout for waiting for answer (default: 30000ms) */
|
|
waitingForAnswer?: number;
|
|
/** Timeout for creating answer (default: 10000ms) */
|
|
creatingAnswer?: number;
|
|
/** Timeout for ICE connection (default: 30000ms) */
|
|
iceConnection?: number;
|
|
}
|
|
|
|
/**
|
|
* Options for creating a peer connection
|
|
*/
|
|
export interface PeerOptions {
|
|
/** RTCConfiguration for the peer connection */
|
|
rtcConfig?: RTCConfiguration;
|
|
/** Topics to advertise this connection under */
|
|
topics: string[];
|
|
/** How long the offer should live (milliseconds) */
|
|
ttl?: number;
|
|
/** Whether to create a data channel automatically (for offerer) */
|
|
createDataChannel?: boolean;
|
|
/** Label for the automatically created data channel */
|
|
dataChannelLabel?: string;
|
|
/** Timeout configurations */
|
|
timeouts?: PeerTimeouts;
|
|
}
|
|
|
|
/**
|
|
* Events emitted by RondevuPeer
|
|
*/
|
|
export interface PeerEvents extends Record<string, (...args: any[]) => void> {
|
|
'state': (state: string) => void;
|
|
'connected': () => void;
|
|
'disconnected': () => void;
|
|
'failed': (error: Error) => void;
|
|
'datachannel': (channel: RTCDataChannel) => void;
|
|
'track': (event: RTCTrackEvent) => void;
|
|
}
|