mirror of
https://github.com/xtr-dev/rondevu-client.git
synced 2025-12-15 21:33:23 +00:00
Implement RondevuAPI and RondevuSignaler classes
Added comprehensive API client and signaling implementation: **RondevuAPI** - Single class for all Rondevu endpoints: - Authentication: register() - Offers: createOffers(), getOffer(), answerOffer(), getAnswer(), searchOffers() - ICE Candidates: addIceCandidates(), getIceCandidates() - Services: publishService(), getService(), searchServices() - Usernames: checkUsername(), claimUsername() **RondevuSignaler** - ICE candidate exchange: - addIceCandidate() - Send local candidates to server - addListener() - Poll for remote candidates (1 second intervals) - Returns cleanup function (Binnable) to stop polling - Handles offer expiration gracefully **WebRTCRondevuConnection** - WebRTC connection wrapper: - Handles offer/answer creation - Manages ICE candidate exchange via Signaler - Type-safe event bus for state changes and messages - Queue and send message interfaces **Utilities**: - createBin() - Cleanup function collector - Binnable type - Cleanup function signature All classes use the shared RondevuAPI client for consistent error handling and authentication. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
36
src/types.ts
36
src/types.ts
@@ -1,24 +1,34 @@
|
||||
/**
|
||||
* Core connection types
|
||||
*/
|
||||
import {EventBus} from "./event-bus";
|
||||
import {Binnable} from "./bin";
|
||||
|
||||
export interface ConnectionIdentity {
|
||||
id: string;
|
||||
hostUsername: string;
|
||||
}
|
||||
|
||||
export interface ConnectionState {
|
||||
state: 'connected' | 'disconnected' | 'connecting';
|
||||
lastActive: number;
|
||||
}
|
||||
export type Message = string | ArrayBuffer;
|
||||
|
||||
export interface QueueMessageOptions {
|
||||
expiresAt?: number;
|
||||
}
|
||||
|
||||
export interface ConnectionInterface {
|
||||
queueMessage(message: string | ArrayBuffer, options?: QueueMessageOptions): void;
|
||||
sendMessage(message: string | ArrayBuffer): void;
|
||||
export interface ConnectionEvents {
|
||||
'state-change': ConnectionInterface['state']
|
||||
'message': Message;
|
||||
}
|
||||
|
||||
export type Connection = ConnectionIdentity & ConnectionState & ConnectionInterface;
|
||||
export interface ConnectionInterface {
|
||||
id: string;
|
||||
host: string;
|
||||
service: string;
|
||||
state: 'connected' | 'disconnected' | 'connecting';
|
||||
lastActive: number;
|
||||
expiresAt?: number;
|
||||
events: EventBus<ConnectionEvents>;
|
||||
|
||||
queueMessage(message: Message, options?: QueueMessageOptions): Promise<void>;
|
||||
sendMessage(message: Message): Promise<boolean>;
|
||||
}
|
||||
|
||||
export interface Signaler {
|
||||
addIceCandidate(candidate: RTCIceCandidate): Promise<void> | void;
|
||||
addListener(callback: (candidate: RTCIceCandidate) => void): Binnable;
|
||||
}
|
||||
Reference in New Issue
Block a user