mirror of
https://github.com/xtr-dev/rondevu-client.git
synced 2025-12-10 02:43:25 +00:00
feat: v0.9.0 - durable WebRTC connections with automatic reconnection
Major refactor replacing low-level APIs with high-level durable connections.
New Features:
- Automatic reconnection with exponential backoff (1s → 2s → 4s → ... max 30s)
- Message queuing during disconnections
- Durable channels that survive connection drops
- TTL auto-refresh for services (refreshes at 80% of TTL by default)
- Full configuration of timeouts, retry limits, and queue sizes
New API:
- client.exposeService() - Create durable service with automatic TTL refresh
- client.connect() - Create durable connection with automatic reconnection
- client.connectByUuid() - Connect by service UUID
- DurableChannel - Event-based channel wrapper with message queuing
- DurableConnection - Connection manager with reconnection logic
- DurableService - Service manager with TTL auto-refresh
Files Added:
- src/durable/types.ts - Type definitions and enums
- src/durable/reconnection.ts - Exponential backoff utilities
- src/durable/channel.ts - DurableChannel class (358 lines)
- src/durable/connection.ts - DurableConnection class (441 lines)
- src/durable/service.ts - DurableService class (329 lines)
- MIGRATION.md - Comprehensive migration guide
Files Removed:
- src/services.ts - Replaced by DurableService
- src/discovery.ts - Replaced by DurableConnection
BREAKING CHANGES:
- Removed: client.services.*, client.discovery.*, client.createPeer()
- Added: client.exposeService(), client.connect(), client.connectByUuid()
- Handler signature: (channel, peer, connectionId?) → (channel, connectionId)
- Event handlers: .onmessage → .on('message')
- Services: Must call service.start() to begin accepting connections
- Connections: Must call connection.connect() to establish connection
This commit is contained in:
@@ -2,7 +2,6 @@ import { RondevuOffers, Offer } from './offers.js';
|
||||
import { RondevuUsername } from './usernames.js';
|
||||
import RondevuPeer from './peer/index.js';
|
||||
import { OfferPool, AnsweredOffer } from './offer-pool.js';
|
||||
import { ServiceHandle } from './services.js';
|
||||
|
||||
/**
|
||||
* Connection information for tracking active connections
|
||||
@@ -73,9 +72,21 @@ export interface ServicePoolOptions {
|
||||
}
|
||||
|
||||
/**
|
||||
* Extended service handle with pool-specific methods
|
||||
* Service handle with pool-specific methods
|
||||
*/
|
||||
export interface PooledServiceHandle extends ServiceHandle {
|
||||
export interface PooledServiceHandle {
|
||||
/** Service ID */
|
||||
serviceId: string;
|
||||
|
||||
/** Service UUID */
|
||||
uuid: string;
|
||||
|
||||
/** Offer ID */
|
||||
offerId: string;
|
||||
|
||||
/** Unpublish the service */
|
||||
unpublish: () => Promise<void>;
|
||||
|
||||
/** Get current pool status */
|
||||
getStatus: () => PoolStatus;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user