@xtr-dev/rondevu-client 0.12.4 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +100 -381
  2. package/dist/api.d.ts +75 -96
  3. package/dist/api.js +202 -243
  4. package/dist/crypto-adapter.d.ts +37 -0
  5. package/dist/crypto-adapter.js +4 -0
  6. package/dist/index.d.ts +8 -15
  7. package/dist/index.js +5 -8
  8. package/dist/node-crypto-adapter.d.ts +35 -0
  9. package/dist/node-crypto-adapter.js +80 -0
  10. package/dist/rondevu-signaler.d.ts +14 -12
  11. package/dist/rondevu-signaler.js +111 -95
  12. package/dist/rondevu.d.ts +329 -0
  13. package/dist/rondevu.js +648 -0
  14. package/dist/rpc-batcher.d.ts +61 -0
  15. package/dist/rpc-batcher.js +111 -0
  16. package/dist/types.d.ts +8 -21
  17. package/dist/types.js +4 -6
  18. package/dist/web-crypto-adapter.d.ts +16 -0
  19. package/dist/web-crypto-adapter.js +52 -0
  20. package/package.json +1 -1
  21. package/dist/bin.d.ts +0 -35
  22. package/dist/bin.js +0 -35
  23. package/dist/connection-manager.d.ts +0 -104
  24. package/dist/connection-manager.js +0 -324
  25. package/dist/connection.d.ts +0 -112
  26. package/dist/connection.js +0 -194
  27. package/dist/durable-connection.d.ts +0 -120
  28. package/dist/durable-connection.js +0 -244
  29. package/dist/event-bus.d.ts +0 -52
  30. package/dist/event-bus.js +0 -84
  31. package/dist/noop-signaler.d.ts +0 -14
  32. package/dist/noop-signaler.js +0 -27
  33. package/dist/quick-start.d.ts +0 -29
  34. package/dist/quick-start.js +0 -44
  35. package/dist/rondevu-context.d.ts +0 -10
  36. package/dist/rondevu-context.js +0 -20
  37. package/dist/rondevu-service.d.ts +0 -87
  38. package/dist/rondevu-service.js +0 -170
  39. package/dist/service-client.d.ts +0 -77
  40. package/dist/service-client.js +0 -158
  41. package/dist/service-host.d.ts +0 -67
  42. package/dist/service-host.js +0 -120
  43. package/dist/signaler.d.ts +0 -25
  44. package/dist/signaler.js +0 -89
  45. package/dist/webrtc-context.d.ts +0 -5
  46. package/dist/webrtc-context.js +0 -35
package/dist/api.d.ts CHANGED
@@ -1,40 +1,17 @@
1
1
  /**
2
- * Rondevu API Client - Single class for all API endpoints
2
+ * Rondevu API Client - RPC interface
3
3
  */
4
- export interface Credentials {
5
- peerId: string;
6
- secret: string;
7
- }
8
- export interface Keypair {
9
- publicKey: string;
10
- privateKey: string;
11
- }
12
- export interface OfferRequest {
13
- sdp: string;
14
- topics?: string[];
15
- ttl?: number;
16
- secret?: string;
17
- }
18
- export interface Offer {
19
- id: string;
20
- peerId: string;
21
- sdp: string;
22
- topics: string[];
23
- ttl: number;
24
- createdAt: number;
25
- expiresAt: number;
26
- answererPeerId?: string;
27
- }
4
+ import { CryptoAdapter, Keypair } from './crypto-adapter.js';
5
+ import { BatcherOptions } from './rpc-batcher.js';
6
+ export type { Keypair } from './crypto-adapter.js';
7
+ export type { BatcherOptions } from './rpc-batcher.js';
28
8
  export interface OfferRequest {
29
9
  sdp: string;
30
10
  }
31
11
  export interface ServiceRequest {
32
- username: string;
33
12
  serviceFqn: string;
34
13
  offers: OfferRequest[];
35
14
  ttl?: number;
36
- isPublic?: boolean;
37
- metadata?: Record<string, any>;
38
15
  signature: string;
39
16
  message: string;
40
17
  }
@@ -46,121 +23,123 @@ export interface ServiceOffer {
46
23
  }
47
24
  export interface Service {
48
25
  serviceId: string;
49
- uuid: string;
50
26
  offers: ServiceOffer[];
51
27
  username: string;
52
28
  serviceFqn: string;
53
- isPublic: boolean;
54
- metadata?: Record<string, any>;
55
29
  createdAt: number;
56
30
  expiresAt: number;
57
31
  }
58
32
  export interface IceCandidate {
59
- candidate: RTCIceCandidateInit;
33
+ candidate: RTCIceCandidateInit | null;
60
34
  createdAt: number;
61
35
  }
62
36
  /**
63
- * RondevuAPI - Complete API client for Rondevu signaling server
37
+ * RondevuAPI - RPC-based API client for Rondevu signaling server
64
38
  */
65
39
  export declare class RondevuAPI {
66
40
  private baseUrl;
67
- private credentials?;
68
- constructor(baseUrl: string, credentials?: Credentials | undefined);
41
+ private username;
42
+ private keypair;
43
+ private crypto;
44
+ private batcher;
45
+ constructor(baseUrl: string, username: string, keypair: Keypair, cryptoAdapter?: CryptoAdapter, batcherOptions?: BatcherOptions | false);
69
46
  /**
70
- * Set credentials for authentication
47
+ * Generate authentication parameters for RPC calls
71
48
  */
72
- setCredentials(credentials: Credentials): void;
49
+ private generateAuth;
73
50
  /**
74
- * Authentication header
51
+ * Execute RPC call with optional batching
75
52
  */
76
- private getAuthHeader;
53
+ private rpc;
77
54
  /**
78
- * Generate an Ed25519 keypair for username claiming and service publishing
55
+ * Execute single RPC call directly (bypasses batcher)
79
56
  */
80
- static generateKeypair(): Promise<Keypair>;
57
+ private rpcDirect;
81
58
  /**
82
- * Sign a message with an Ed25519 private key
59
+ * Execute batch RPC calls directly (bypasses batcher)
83
60
  */
84
- static signMessage(message: string, privateKeyBase64: string): Promise<string>;
61
+ private rpcBatchDirect;
85
62
  /**
86
- * Verify a signature
87
- */
88
- static verifySignature(message: string, signatureBase64: string, publicKeyBase64: string): Promise<boolean>;
89
- /**
90
- * Register a new peer and get credentials
63
+ * Generate an Ed25519 keypair for username claiming and service publishing
64
+ * @param cryptoAdapter - Optional crypto adapter (defaults to WebCryptoAdapter)
91
65
  */
92
- register(): Promise<Credentials>;
66
+ static generateKeypair(cryptoAdapter?: CryptoAdapter): Promise<Keypair>;
93
67
  /**
94
- * Create one or more offers
68
+ * Sign a message with an Ed25519 private key
69
+ * @param cryptoAdapter - Optional crypto adapter (defaults to WebCryptoAdapter)
95
70
  */
96
- createOffers(offers: OfferRequest[]): Promise<Offer[]>;
71
+ static signMessage(message: string, privateKeyBase64: string, cryptoAdapter?: CryptoAdapter): Promise<string>;
97
72
  /**
98
- * Get offer by ID
73
+ * Verify an Ed25519 signature
74
+ * @param cryptoAdapter - Optional crypto adapter (defaults to WebCryptoAdapter)
99
75
  */
100
- getOffer(offerId: string): Promise<Offer>;
76
+ static verifySignature(message: string, signatureBase64: string, publicKeyBase64: string, cryptoAdapter?: CryptoAdapter): Promise<boolean>;
101
77
  /**
102
- * Answer a service
78
+ * Check if a username is available
103
79
  */
104
- answerService(serviceUuid: string, sdp: string): Promise<{
105
- offerId: string;
106
- }>;
80
+ isUsernameAvailable(username: string): Promise<boolean>;
107
81
  /**
108
- * Get answer for a service (offerer polls this)
82
+ * Check if current username is claimed
109
83
  */
110
- getServiceAnswer(serviceUuid: string): Promise<{
111
- sdp: string;
112
- offerId: string;
113
- } | null>;
84
+ isUsernameClaimed(): Promise<boolean>;
114
85
  /**
115
- * Search offers by topic
86
+ * Publish a service
116
87
  */
117
- searchOffers(topic: string): Promise<Offer[]>;
88
+ publishService(service: ServiceRequest): Promise<Service>;
118
89
  /**
119
- * Add ICE candidates to a service
90
+ * Get service by FQN (direct lookup, random, or paginated)
120
91
  */
121
- addServiceIceCandidates(serviceUuid: string, candidates: RTCIceCandidateInit[], offerId?: string): Promise<{
122
- offerId: string;
123
- }>;
92
+ getService(serviceFqn: string, options?: {
93
+ limit?: number;
94
+ offset?: number;
95
+ }): Promise<any>;
124
96
  /**
125
- * Get ICE candidates for a service (with polling support)
97
+ * Delete a service
126
98
  */
127
- getServiceIceCandidates(serviceUuid: string, since?: number, offerId?: string): Promise<{
128
- candidates: IceCandidate[];
129
- offerId: string;
130
- }>;
99
+ deleteService(serviceFqn: string): Promise<void>;
131
100
  /**
132
- * Publish a service
101
+ * Answer an offer
133
102
  */
134
- publishService(service: ServiceRequest): Promise<Service>;
103
+ answerOffer(serviceFqn: string, offerId: string, sdp: string): Promise<void>;
135
104
  /**
136
- * Get service by UUID
105
+ * Get answer for a specific offer (offerer polls this)
137
106
  */
138
- getService(uuid: string): Promise<Service & {
139
- offerId: string;
107
+ getOfferAnswer(serviceFqn: string, offerId: string): Promise<{
140
108
  sdp: string;
141
- }>;
142
- /**
143
- * Search services by username - lists all services for a username
144
- */
145
- searchServicesByUsername(username: string): Promise<Service[]>;
109
+ offerId: string;
110
+ answererId: string;
111
+ answeredAt: number;
112
+ } | null>;
146
113
  /**
147
- * Search services by username AND FQN - returns full service details
148
- */
149
- searchServices(username: string, serviceFqn: string): Promise<Service[]>;
114
+ * Combined polling for answers and ICE candidates
115
+ */
116
+ poll(since?: number): Promise<{
117
+ answers: Array<{
118
+ offerId: string;
119
+ serviceId?: string;
120
+ answererId: string;
121
+ sdp: string;
122
+ answeredAt: number;
123
+ }>;
124
+ iceCandidates: Record<string, Array<{
125
+ candidate: RTCIceCandidateInit | null;
126
+ role: 'offerer' | 'answerer';
127
+ peerId: string;
128
+ createdAt: number;
129
+ }>>;
130
+ }>;
150
131
  /**
151
- * Check if username is available
132
+ * Add ICE candidates to a specific offer
152
133
  */
153
- checkUsername(username: string): Promise<{
154
- available: boolean;
155
- publicKey?: string;
156
- claimedAt?: number;
157
- expiresAt?: number;
134
+ addOfferIceCandidates(serviceFqn: string, offerId: string, candidates: RTCIceCandidateInit[]): Promise<{
135
+ count: number;
136
+ offerId: string;
158
137
  }>;
159
138
  /**
160
- * Claim a username (requires Ed25519 signature)
139
+ * Get ICE candidates for a specific offer
161
140
  */
162
- claimUsername(username: string, publicKey: string, signature: string, message: string): Promise<{
163
- success: boolean;
164
- username: string;
141
+ getOfferIceCandidates(serviceFqn: string, offerId: string, since?: number): Promise<{
142
+ candidates: IceCandidate[];
143
+ offerId: string;
165
144
  }>;
166
145
  }