@pulsebeam/peer 0.0.21 → 0.1.0-rc.2

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.
package/dist/index.d.cts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { RpcOptions, UnaryCall, ServerStreamingCall } from '@protobuf-ts/runtime-rpc';
2
2
  import { MessageType } from '@protobuf-ts/runtime';
3
+ import { PreinitializedMapStore, ReadableAtom } from 'nanostores';
3
4
 
4
5
  /**
5
6
  * @generated from protobuf enum pulsebeam.v1.SdpKind
@@ -26,6 +27,407 @@ declare enum SdpKind {
26
27
  */
27
28
  ROLLBACK = 4
28
29
  }
30
+ /**
31
+ * @generated from protobuf enum pulsebeam.v1.EventType
32
+ */
33
+ declare enum EventType {
34
+ /**
35
+ * Default value, should always be the first
36
+ *
37
+ * @generated from protobuf enum value: UNKNOWN_EVENT = 0;
38
+ */
39
+ UNKNOWN_EVENT = 0,
40
+ /**
41
+ * --- Error Reporting Events (Range: 1000 - 1099) ---
42
+ *
43
+ * Base for error reporting events
44
+ *
45
+ * @generated from protobuf enum value: EVENT_ERROR_REPORTING_BASE = 1000;
46
+ */
47
+ EVENT_ERROR_REPORTING_BASE = 1000,
48
+ /**
49
+ * An error occurred with the signaling connection
50
+ *
51
+ * @generated from protobuf enum value: EVENT_ERROR_SIGNALING_CONNECTION_FAILED = 1001;
52
+ */
53
+ EVENT_ERROR_SIGNALING_CONNECTION_FAILED = 1001,
54
+ /**
55
+ * An error occurred with the ICE connection
56
+ *
57
+ * @generated from protobuf enum value: EVENT_ERROR_ICE_CONNECTION_FAILED = 1002;
58
+ */
59
+ EVENT_ERROR_ICE_CONNECTION_FAILED = 1002,
60
+ /**
61
+ * An error occurred while capturing audio
62
+ *
63
+ * @generated from protobuf enum value: EVENT_ERROR_MEDIA_CAPTURE_AUDIO_FAILED = 1003;
64
+ */
65
+ EVENT_ERROR_MEDIA_CAPTURE_AUDIO_FAILED = 1003,
66
+ /**
67
+ * An error occurred while capturing video
68
+ *
69
+ * @generated from protobuf enum value: EVENT_ERROR_MEDIA_CAPTURE_VIDEO_FAILED = 1004;
70
+ */
71
+ EVENT_ERROR_MEDIA_CAPTURE_VIDEO_FAILED = 1004,
72
+ /**
73
+ * An error occurred while capturing screen
74
+ *
75
+ * @generated from protobuf enum value: EVENT_ERROR_MEDIA_CAPTURE_SCREEN_FAILED = 1005;
76
+ */
77
+ EVENT_ERROR_MEDIA_CAPTURE_SCREEN_FAILED = 1005,
78
+ /**
79
+ * An error occurred during SDP negotiation
80
+ *
81
+ * @generated from protobuf enum value: EVENT_ERROR_SDP_NEGOTIATION_FAILED = 1006;
82
+ */
83
+ EVENT_ERROR_SDP_NEGOTIATION_FAILED = 1006,
84
+ /**
85
+ * A general or uncategorized error
86
+ *
87
+ * @generated from protobuf enum value: EVENT_ERROR_OTHER = 1099;
88
+ */
89
+ EVENT_ERROR_OTHER = 1099,
90
+ /**
91
+ * --- ICE Candidate Events (Range: 2000 - 2099) ---
92
+ *
93
+ * Base for ICE candidate related events
94
+ *
95
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_BASE = 2000;
96
+ */
97
+ EVENT_ICE_CANDIDATE_BASE = 2000,
98
+ /**
99
+ * ICE gathering process initiated
100
+ *
101
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_GATHERING_STARTED = 2001;
102
+ */
103
+ EVENT_ICE_CANDIDATE_GATHERING_STARTED = 2001,
104
+ /**
105
+ * A reflexive ICE candidate was discovered
106
+ *
107
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_LOCAL_REFLEXIVE_FOUND = 2002;
108
+ */
109
+ EVENT_ICE_CANDIDATE_LOCAL_REFLEXIVE_FOUND = 2002,
110
+ /**
111
+ * A host ICE candidate was discovered
112
+ *
113
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_LOCAL_HOST_FOUND = 2003;
114
+ */
115
+ EVENT_ICE_CANDIDATE_LOCAL_HOST_FOUND = 2003,
116
+ /**
117
+ * A server-reflexive (STUN) ICE candidate was discovered
118
+ *
119
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_LOCAL_SRFLX_FOUND = 2004;
120
+ */
121
+ EVENT_ICE_CANDIDATE_LOCAL_SRFLX_FOUND = 2004,
122
+ /**
123
+ * A peer-reflexive ICE candidate was discovered (less common)
124
+ *
125
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_LOCAL_PRFLX_FOUND = 2005;
126
+ */
127
+ EVENT_ICE_CANDIDATE_LOCAL_PRFLX_FOUND = 2005,
128
+ /**
129
+ * An ICE candidate from the remote peer was received
130
+ *
131
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_REMOTE_RECEIVED = 2006;
132
+ */
133
+ EVENT_ICE_CANDIDATE_REMOTE_RECEIVED = 2006,
134
+ /**
135
+ * A reflexive ICE candidate was discovered
136
+ *
137
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_REMOTE_REFLEXIVE_FOUND = 2007;
138
+ */
139
+ EVENT_ICE_CANDIDATE_REMOTE_REFLEXIVE_FOUND = 2007,
140
+ /**
141
+ * A host ICE candidate was discovered
142
+ *
143
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_REMOTE_HOST_FOUND = 2008;
144
+ */
145
+ EVENT_ICE_CANDIDATE_REMOTE_HOST_FOUND = 2008,
146
+ /**
147
+ * A server-reflexive (STUN) ICE candidate was discovered
148
+ *
149
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_REMOTE_SRFLX_FOUND = 2009;
150
+ */
151
+ EVENT_ICE_CANDIDATE_REMOTE_SRFLX_FOUND = 2009,
152
+ /**
153
+ * A peer-reflexive ICE candidate was discovered (less common)
154
+ *
155
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_REMOTE_PRFLX_FOUND = 2010;
156
+ */
157
+ EVENT_ICE_CANDIDATE_REMOTE_PRFLX_FOUND = 2010,
158
+ /**
159
+ * ICE candidate pair succeeded in establishing a connection
160
+ *
161
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_PAIRING_SUCCESS = 2011;
162
+ */
163
+ EVENT_ICE_CANDIDATE_PAIRING_SUCCESS = 2011,
164
+ /**
165
+ * ICE candidate pair failed to establish a connection
166
+ *
167
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_PAIRING_FAILED = 2012;
168
+ */
169
+ EVENT_ICE_CANDIDATE_PAIRING_FAILED = 2012,
170
+ /**
171
+ * The ICE connection state has changed (e.g., connecting, connected, failed)
172
+ *
173
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_CONNECTION_STATE_CHANGED = 2013;
174
+ */
175
+ EVENT_ICE_CANDIDATE_CONNECTION_STATE_CHANGED = 2013,
176
+ /**
177
+ * ICE gathering process finished
178
+ *
179
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_GATHERING_COMPLETED = 2014;
180
+ */
181
+ EVENT_ICE_CANDIDATE_GATHERING_COMPLETED = 2014,
182
+ /**
183
+ * The best ICE candidate pair was selected for communication
184
+ *
185
+ * @generated from protobuf enum value: EVENT_ICE_CANDIDATE_SELECTED_PAIR = 2015;
186
+ */
187
+ EVENT_ICE_CANDIDATE_SELECTED_PAIR = 2015,
188
+ /**
189
+ * --- Signaling Events (Range: 3000 - 3099) ---
190
+ *
191
+ * Base for signaling related events
192
+ *
193
+ * @generated from protobuf enum value: EVENT_SIGNALING_BASE = 3000;
194
+ */
195
+ EVENT_SIGNALING_BASE = 3000,
196
+ /**
197
+ * A signaling offer (e.g., SDP) was created locally
198
+ *
199
+ * @generated from protobuf enum value: EVENT_SIGNALING_OFFER_CREATED = 3001;
200
+ */
201
+ EVENT_SIGNALING_OFFER_CREATED = 3001,
202
+ /**
203
+ * A signaling offer was sent to the remote peer
204
+ *
205
+ * @generated from protobuf enum value: EVENT_SIGNALING_OFFER_SENT = 3002;
206
+ */
207
+ EVENT_SIGNALING_OFFER_SENT = 3002,
208
+ /**
209
+ * A signaling offer was received from the remote peer
210
+ *
211
+ * @generated from protobuf enum value: EVENT_SIGNALING_OFFER_RECEIVED = 3003;
212
+ */
213
+ EVENT_SIGNALING_OFFER_RECEIVED = 3003,
214
+ /**
215
+ * A signaling answer (e.g., SDP) was created locally
216
+ *
217
+ * @generated from protobuf enum value: EVENT_SIGNALING_ANSWER_CREATED = 3004;
218
+ */
219
+ EVENT_SIGNALING_ANSWER_CREATED = 3004,
220
+ /**
221
+ * A signaling answer was sent to the remote peer
222
+ *
223
+ * @generated from protobuf enum value: EVENT_SIGNALING_ANSWER_SENT = 3005;
224
+ */
225
+ EVENT_SIGNALING_ANSWER_SENT = 3005,
226
+ /**
227
+ * A signaling answer was received from the remote peer
228
+ *
229
+ * @generated from protobuf enum value: EVENT_SIGNALING_ANSWER_RECEIVED = 3006;
230
+ */
231
+ EVENT_SIGNALING_ANSWER_RECEIVED = 3006,
232
+ /**
233
+ * A signal indicating that negotiation is required
234
+ *
235
+ * @generated from protobuf enum value: EVENT_SIGNALING_NEGOTIATION_NEEDED = 3007;
236
+ */
237
+ EVENT_SIGNALING_NEGOTIATION_NEEDED = 3007,
238
+ /**
239
+ * A request to restart ICE negotiation was initiated
240
+ *
241
+ * @generated from protobuf enum value: EVENT_SIGNALING_ICE_RESTART_TRIGGERED = 3008;
242
+ */
243
+ EVENT_SIGNALING_ICE_RESTART_TRIGGERED = 3008,
244
+ /**
245
+ * Signaling connection established
246
+ *
247
+ * @generated from protobuf enum value: EVENT_SIGNALING_CONNECTED = 3009;
248
+ */
249
+ EVENT_SIGNALING_CONNECTED = 3009,
250
+ /**
251
+ * Signaling connection lost
252
+ *
253
+ * @generated from protobuf enum value: EVENT_SIGNALING_DISCONNECTED = 3010;
254
+ */
255
+ EVENT_SIGNALING_DISCONNECTED = 3010,
256
+ /**
257
+ * --- User Interaction Events (Range: 4000 - 4099) ---
258
+ *
259
+ * Base for user interaction events
260
+ *
261
+ * @generated from protobuf enum value: EVENT_USER_INTERACTION_BASE = 4000;
262
+ */
263
+ EVENT_USER_INTERACTION_BASE = 4000,
264
+ /**
265
+ * A user joined the communication session
266
+ *
267
+ * @generated from protobuf enum value: EVENT_USER_JOINED_SESSION = 4001;
268
+ */
269
+ EVENT_USER_JOINED_SESSION = 4001,
270
+ /**
271
+ * A user left the communication session
272
+ *
273
+ * @generated from protobuf enum value: EVENT_USER_LEFT_SESSION = 4002;
274
+ */
275
+ EVENT_USER_LEFT_SESSION = 4002,
276
+ /**
277
+ * A user muted their audio
278
+ *
279
+ * @generated from protobuf enum value: EVENT_USER_MUTED_AUDIO = 4003;
280
+ */
281
+ EVENT_USER_MUTED_AUDIO = 4003,
282
+ /**
283
+ * A user unmuted their audio
284
+ *
285
+ * @generated from protobuf enum value: EVENT_USER_UNMUTED_AUDIO = 4004;
286
+ */
287
+ EVENT_USER_UNMUTED_AUDIO = 4004,
288
+ /**
289
+ * A user muted their video
290
+ *
291
+ * @generated from protobuf enum value: EVENT_USER_MUTED_VIDEO = 4005;
292
+ */
293
+ EVENT_USER_MUTED_VIDEO = 4005,
294
+ /**
295
+ * A user unmuted their video
296
+ *
297
+ * @generated from protobuf enum value: EVENT_USER_UNMUTED_VIDEO = 4006;
298
+ */
299
+ EVENT_USER_UNMUTED_VIDEO = 4006,
300
+ /**
301
+ * A user started sharing their screen
302
+ *
303
+ * @generated from protobuf enum value: EVENT_USER_SCREEN_SHARE_STARTED = 4007;
304
+ */
305
+ EVENT_USER_SCREEN_SHARE_STARTED = 4007,
306
+ /**
307
+ * A user stopped sharing their screen
308
+ *
309
+ * @generated from protobuf enum value: EVENT_USER_SCREEN_SHARE_STOPPED = 4008;
310
+ */
311
+ EVENT_USER_SCREEN_SHARE_STOPPED = 4008,
312
+ /**
313
+ * A user sent a text message
314
+ *
315
+ * @generated from protobuf enum value: EVENT_USER_INPUT_TEXT_MESSAGE_SENT = 4009;
316
+ */
317
+ EVENT_USER_INPUT_TEXT_MESSAGE_SENT = 4009,
318
+ /**
319
+ * A user received a text message
320
+ *
321
+ * @generated from protobuf enum value: EVENT_USER_INPUT_TEXT_MESSAGE_RECEIVED = 4010;
322
+ */
323
+ EVENT_USER_INPUT_TEXT_MESSAGE_RECEIVED = 4010,
324
+ /**
325
+ * --- Media Handling Events (Range: 5000 - 5099) ---
326
+ *
327
+ * Base for media handling events
328
+ *
329
+ * @generated from protobuf enum value: EVENT_MEDIA_HANDLING_BASE = 5000;
330
+ */
331
+ EVENT_MEDIA_HANDLING_BASE = 5000,
332
+ /**
333
+ * A local audio track was added
334
+ *
335
+ * @generated from protobuf enum value: EVENT_MEDIA_LOCAL_AUDIO_TRACK_ADDED = 5001;
336
+ */
337
+ EVENT_MEDIA_LOCAL_AUDIO_TRACK_ADDED = 5001,
338
+ /**
339
+ * A local video track was added
340
+ *
341
+ * @generated from protobuf enum value: EVENT_MEDIA_LOCAL_VIDEO_TRACK_ADDED = 5002;
342
+ */
343
+ EVENT_MEDIA_LOCAL_VIDEO_TRACK_ADDED = 5002,
344
+ /**
345
+ * A remote audio track was added
346
+ *
347
+ * @generated from protobuf enum value: EVENT_MEDIA_REMOTE_AUDIO_TRACK_ADDED = 5003;
348
+ */
349
+ EVENT_MEDIA_REMOTE_AUDIO_TRACK_ADDED = 5003,
350
+ /**
351
+ * A remote video track was added
352
+ *
353
+ * @generated from protobuf enum value: EVENT_MEDIA_REMOTE_VIDEO_TRACK_ADDED = 5004;
354
+ */
355
+ EVENT_MEDIA_REMOTE_VIDEO_TRACK_ADDED = 5004,
356
+ /**
357
+ * A local audio track was removed
358
+ *
359
+ * @generated from protobuf enum value: EVENT_MEDIA_LOCAL_AUDIO_TRACK_REMOVED = 5005;
360
+ */
361
+ EVENT_MEDIA_LOCAL_AUDIO_TRACK_REMOVED = 5005,
362
+ /**
363
+ * A local video track was removed
364
+ *
365
+ * @generated from protobuf enum value: EVENT_MEDIA_LOCAL_VIDEO_TRACK_REMOVED = 5006;
366
+ */
367
+ EVENT_MEDIA_LOCAL_VIDEO_TRACK_REMOVED = 5006,
368
+ /**
369
+ * A remote audio track was removed
370
+ *
371
+ * @generated from protobuf enum value: EVENT_MEDIA_REMOTE_AUDIO_TRACK_REMOVED = 5007;
372
+ */
373
+ EVENT_MEDIA_REMOTE_AUDIO_TRACK_REMOVED = 5007,
374
+ /**
375
+ * A remote video track was removed
376
+ *
377
+ * @generated from protobuf enum value: EVENT_MEDIA_REMOTE_VIDEO_TRACK_REMOVED = 5008;
378
+ */
379
+ EVENT_MEDIA_REMOTE_VIDEO_TRACK_REMOVED = 5008,
380
+ /**
381
+ * Audio playback started
382
+ *
383
+ * @generated from protobuf enum value: EVENT_MEDIA_AUDIO_PLAYBACK_STARTED = 5009;
384
+ */
385
+ EVENT_MEDIA_AUDIO_PLAYBACK_STARTED = 5009,
386
+ /**
387
+ * Video playback started
388
+ *
389
+ * @generated from protobuf enum value: EVENT_MEDIA_VIDEO_PLAYBACK_STARTED = 5010;
390
+ */
391
+ EVENT_MEDIA_VIDEO_PLAYBACK_STARTED = 5010,
392
+ /**
393
+ * Audio playback stopped
394
+ *
395
+ * @generated from protobuf enum value: EVENT_MEDIA_AUDIO_PLAYBACK_STOPPED = 5011;
396
+ */
397
+ EVENT_MEDIA_AUDIO_PLAYBACK_STOPPED = 5011,
398
+ /**
399
+ * Video playback stopped
400
+ *
401
+ * @generated from protobuf enum value: EVENT_MEDIA_VIDEO_PLAYBACK_STOPPED = 5012;
402
+ */
403
+ EVENT_MEDIA_VIDEO_PLAYBACK_STOPPED = 5012,
404
+ /**
405
+ * --- ICE Connection Type (Range: 6000 - 6099) ---
406
+ *
407
+ * @generated from protobuf enum value: CONNECTION_TYPE_UNKNOWN = 6000;
408
+ */
409
+ CONNECTION_TYPE_UNKNOWN = 6000,
410
+ /**
411
+ * @generated from protobuf enum value: CONNECTION_TYPE_DIRECT = 6001;
412
+ */
413
+ CONNECTION_TYPE_DIRECT = 6001,
414
+ /**
415
+ * @generated from protobuf enum value: CONNECTION_TYPE_RELAY = 6002;
416
+ */
417
+ CONNECTION_TYPE_RELAY = 6002,
418
+ /**
419
+ * Server Reflexive
420
+ *
421
+ * @generated from protobuf enum value: CONNECTION_TYPE_SRFLX = 6003;
422
+ */
423
+ CONNECTION_TYPE_SRFLX = 6003,
424
+ /**
425
+ * Peer Reflexive
426
+ *
427
+ * @generated from protobuf enum value: CONNECTION_TYPE_PRFLX = 6004;
428
+ */
429
+ CONNECTION_TYPE_PRFLX = 6004
430
+ }
29
431
  declare class PrepareReq$Type extends MessageType<PrepareReq> {
30
432
  constructor();
31
433
  }
@@ -450,6 +852,111 @@ interface AckRange {
450
852
  * @generated MessageType for protobuf message pulsebeam.v1.AckRange
451
853
  */
452
854
  declare const AckRange: AckRange$Type;
855
+ declare class AnalyticsReportReq$Type extends MessageType<AnalyticsReportReq> {
856
+ constructor();
857
+ }
858
+ /**
859
+ * @generated from protobuf message pulsebeam.v1.AnalyticsReportReq
860
+ */
861
+ interface AnalyticsReportReq {
862
+ /**
863
+ * @generated from protobuf field: repeated pulsebeam.v1.AnalyticsEvent events = 1;
864
+ */
865
+ events: AnalyticsEvent[];
866
+ }
867
+ /**
868
+ * @generated MessageType for protobuf message pulsebeam.v1.AnalyticsReportReq
869
+ */
870
+ declare const AnalyticsReportReq: AnalyticsReportReq$Type;
871
+ declare class AnalyticsEvent$Type extends MessageType<AnalyticsEvent> {
872
+ constructor();
873
+ }
874
+ /**
875
+ * @generated from protobuf message pulsebeam.v1.AnalyticsEvent
876
+ */
877
+ interface AnalyticsEvent {
878
+ /**
879
+ * @generated from protobuf field: pulsebeam.v1.AnalyticsTags tags = 1;
880
+ */
881
+ tags?: AnalyticsTags;
882
+ /**
883
+ * @generated from protobuf field: repeated pulsebeam.v1.AnalyticsMetrics metrics = 2;
884
+ */
885
+ metrics: AnalyticsMetrics[];
886
+ }
887
+ /**
888
+ * @generated MessageType for protobuf message pulsebeam.v1.AnalyticsEvent
889
+ */
890
+ declare const AnalyticsEvent: AnalyticsEvent$Type;
891
+ declare class AnalyticsTags$Type extends MessageType<AnalyticsTags> {
892
+ constructor();
893
+ }
894
+ /**
895
+ * @generated from protobuf message pulsebeam.v1.AnalyticsTags
896
+ */
897
+ interface AnalyticsTags {
898
+ /**
899
+ * @generated from protobuf field: pulsebeam.v1.PeerInfo src = 1;
900
+ */
901
+ src?: PeerInfo;
902
+ /**
903
+ * @generated from protobuf field: pulsebeam.v1.PeerInfo dst = 2;
904
+ */
905
+ dst?: PeerInfo;
906
+ }
907
+ /**
908
+ * @generated MessageType for protobuf message pulsebeam.v1.AnalyticsTags
909
+ */
910
+ declare const AnalyticsTags: AnalyticsTags$Type;
911
+ declare class AnalyticsMetrics$Type extends MessageType<AnalyticsMetrics> {
912
+ constructor();
913
+ }
914
+ /**
915
+ * "scaled" = trunc(X * 10^3)
916
+ *
917
+ * @generated from protobuf message pulsebeam.v1.AnalyticsMetrics
918
+ */
919
+ interface AnalyticsMetrics {
920
+ /**
921
+ * @generated from protobuf field: sint64 timestamp_us = 1;
922
+ */
923
+ timestampUs: bigint;
924
+ /**
925
+ * @generated from protobuf field: optional pulsebeam.v1.EventType event_type = 2;
926
+ */
927
+ eventType?: EventType;
928
+ /**
929
+ * The overall derived quality score:
930
+ * - 80-100: excellent
931
+ * - 60-79: good
932
+ * - 40-59: fair
933
+ * - 20-39: poor
934
+ * - 0-19: bad
935
+ *
936
+ * @generated from protobuf field: optional sint64 quality_score = 3;
937
+ */
938
+ qualityScore?: bigint;
939
+ /**
940
+ * @generated from protobuf field: optional sint64 rtt_us = 4;
941
+ */
942
+ rttUs?: bigint;
943
+ }
944
+ /**
945
+ * @generated MessageType for protobuf message pulsebeam.v1.AnalyticsMetrics
946
+ */
947
+ declare const AnalyticsMetrics: AnalyticsMetrics$Type;
948
+ declare class AnalyticsReportResp$Type extends MessageType<AnalyticsReportResp> {
949
+ constructor();
950
+ }
951
+ /**
952
+ * @generated from protobuf message pulsebeam.v1.AnalyticsReportResp
953
+ */
954
+ interface AnalyticsReportResp {
955
+ }
956
+ /**
957
+ * @generated MessageType for protobuf message pulsebeam.v1.AnalyticsReportResp
958
+ */
959
+ declare const AnalyticsReportResp: AnalyticsReportResp$Type;
453
960
 
454
961
  /**
455
962
  * @generated from protobuf service pulsebeam.v1.Signaling
@@ -467,6 +974,10 @@ interface ISignalingClient {
467
974
  * @generated from protobuf rpc: Recv(pulsebeam.v1.RecvReq) returns (stream pulsebeam.v1.RecvResp);
468
975
  */
469
976
  recv(input: RecvReq, options?: RpcOptions): ServerStreamingCall<RecvReq, RecvResp>;
977
+ /**
978
+ * @generated from protobuf rpc: AnalyticsReport(pulsebeam.v1.AnalyticsReportReq) returns (pulsebeam.v1.AnalyticsReportResp);
979
+ */
980
+ analyticsReport(input: AnalyticsReportReq, options?: RpcOptions): UnaryCall<AnalyticsReportReq, AnalyticsReportResp>;
470
981
  }
471
982
 
472
983
  type LogObj = Record<string, unknown>;
@@ -490,6 +1001,184 @@ declare class Logger {
490
1001
  sub(name: string, obj?: LogObj): Logger;
491
1002
  }
492
1003
 
1004
+ /**
1005
+ * asleep is an async version of setTimeout with abortable signal.
1006
+ * the function will resolve to false when aborted, meaning the delay will
1007
+ * be less than the expected.
1008
+ */
1009
+ declare function asleep(ms: number, signal?: AbortSignal): Promise<boolean>;
1010
+
1011
+ declare const defaultAsleep: typeof asleep;
1012
+ declare const defaultRandUint32: (reserved: number) => number;
1013
+ declare const defaultIsRecoverable: (_err: unknown) => boolean;
1014
+ declare class Queue {
1015
+ private map;
1016
+ private emitted;
1017
+ private unreliable;
1018
+ private processing;
1019
+ private readonly logger;
1020
+ onmsg: (_: Message) => Promise<void>;
1021
+ constructor(logger: Logger);
1022
+ enqueue(msg: Message): void;
1023
+ processNext(): Promise<void>;
1024
+ }
1025
+ interface TransportOptions {
1026
+ readonly enableDiscovery: boolean;
1027
+ readonly groupId: string;
1028
+ readonly peerId: string;
1029
+ readonly logger: Logger;
1030
+ readonly asleep?: typeof defaultAsleep;
1031
+ readonly randUint32?: typeof defaultRandUint32;
1032
+ readonly isRecoverable?: typeof defaultIsRecoverable;
1033
+ }
1034
+ declare class Transport {
1035
+ private readonly client;
1036
+ readonly opts: TransportOptions;
1037
+ readonly info: PeerInfo;
1038
+ private streams;
1039
+ private abort;
1040
+ readonly logger: Logger;
1041
+ readonly asleep: typeof defaultAsleep;
1042
+ private readonly randUint32;
1043
+ private readonly isRecoverable;
1044
+ onstream: (_: Stream) => void;
1045
+ onclosed: (_reason: string) => void;
1046
+ constructor(client: ISignalingClient, opts: TransportOptions);
1047
+ listen(): Promise<void>;
1048
+ close(reason?: string): Promise<void>;
1049
+ private handleControlMessage;
1050
+ private handleMessages;
1051
+ removeStream(stream: Stream): void;
1052
+ connect(otherGroupId: string, otherPeerId: string, signal: AbortSignal): Promise<void>;
1053
+ send(signal: AbortSignal, msg: Message): Promise<void>;
1054
+ reportAnalytics(event: AnalyticsReportReq): Promise<void>;
1055
+ }
1056
+ declare class Stream {
1057
+ private readonly transport;
1058
+ readonly info: PeerInfo;
1059
+ readonly other: PeerInfo;
1060
+ readonly logger: Logger;
1061
+ private abort;
1062
+ recvq: Queue;
1063
+ private lastSeqnum;
1064
+ onsignal: (_: Signal) => Promise<void>;
1065
+ onclosed: (_reason: string) => void;
1066
+ constructor(transport: Transport, info: PeerInfo, other: PeerInfo, logger: Logger);
1067
+ createSignal(...signals: AbortSignal[]): AbortSignal;
1068
+ enqueue(msg: Message): void;
1069
+ send(payload: MessagePayload, reliable: boolean, signal?: AbortSignal): Promise<void>;
1070
+ private handleMessage;
1071
+ close(reason?: string, skipBye?: boolean): Promise<void>;
1072
+ }
1073
+
1074
+ /**
1075
+ * The Session class is a wrapper around RTCPeerConnection designed to manage
1076
+ * WebRTC connections, signaling, and ICE candidates. It handles negotiation,
1077
+ * ICE restarts, signaling messages, and connection lifecycle events.
1078
+ */
1079
+ declare class Session {
1080
+ private readonly stream;
1081
+ private pc;
1082
+ private makingOffer;
1083
+ private impolite;
1084
+ private pendingCandidates;
1085
+ private iceBatcher;
1086
+ private readonly logger;
1087
+ private abort;
1088
+ private generationCounter;
1089
+ private iceRestartCount;
1090
+ private lastIceRestart;
1091
+ private timers;
1092
+ private _closeReason?;
1093
+ private _connectionState;
1094
+ private internalDataChannel;
1095
+ private _metrics;
1096
+ /**
1097
+ * See {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/ondatachannel}
1098
+ */
1099
+ ondatachannel: RTCPeerConnection["ondatachannel"];
1100
+ /**
1101
+ * See {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/onconnectionstatechange}
1102
+ */
1103
+ onconnectionstatechange: RTCPeerConnection["onconnectionstatechange"];
1104
+ /**
1105
+ * Callback invoked when a new media track is added to the connection.
1106
+ * See {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/ontrack}
1107
+ */
1108
+ ontrack: RTCPeerConnection["ontrack"];
1109
+ /**
1110
+ * Adds a media track to the connection.
1111
+ * See {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/addTrack}
1112
+ * @returns {RTCRtpSender} the newly created track
1113
+ */
1114
+ addTrack(track: MediaStreamTrack, ...streams: MediaStream[]): RTCRtpSender;
1115
+ /**
1116
+ * The getSenders() method of the RTCPeerConnection interface returns an array of RTCRtpSender objects,
1117
+ * each of which represents the RTP sender responsible for transmitting one track's data.
1118
+ * A sender object provides methods and properties for examining and controlling the encoding and transmission of the track's data.
1119
+ * See {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/getSenders}
1120
+ * @returns {RTCRtpSender[]}
1121
+ */
1122
+ getSenders(): RTCRtpSender[];
1123
+ /**
1124
+ * Removes a media track from the connection.
1125
+ * See {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/removeTrack}
1126
+ * @returns {void}
1127
+ */
1128
+ removeTrack(sender: RTCRtpSender): void;
1129
+ /**
1130
+ * Creates a data channel (useful for sending arbitrary data) through the connection.
1131
+ * See {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/createDataChannel}
1132
+ */
1133
+ createDataChannel(...args: Parameters<RTCPeerConnection["createDataChannel"]>): RTCDataChannel;
1134
+ getStats(...args: Parameters<RTCPeerConnection["getStats"]>): Promise<RTCStatsReport>;
1135
+ /**
1136
+ * Returns the current connection state of the underlying RTCPeerConnection
1137
+ * See {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/connectionState}
1138
+ * @returns {RTCPeerConnectionState}
1139
+ */
1140
+ get connectionState(): RTCPeerConnectionState;
1141
+ /**
1142
+ * If reason is available, returns the reason for the session being closed.
1143
+ * @returns {string | undefined}
1144
+ */
1145
+ get closeReason(): string | undefined;
1146
+ /**
1147
+ * Retrieves the identifier of the other peer.
1148
+ * @returns {string}
1149
+ */
1150
+ get other(): PeerInfo;
1151
+ /**
1152
+ * Closes the session, aborts pending tasks, and cleans up resources.
1153
+ * Publishes events and logs.
1154
+ * @param {string} [reason] - (optional) Your reason for closing the session.
1155
+ * @returns {void}
1156
+ * @example mysession.close("Normal closure");
1157
+ */
1158
+ close(reason?: string): void;
1159
+ /**
1160
+ * Creates a Session with the provided stream and
1161
+ * configs. Sets up event handlers, signaling, and ICE candidate
1162
+ * management.
1163
+ * See {@link Session} For class responsibilities
1164
+ * @param stream Represents the transport stream for signaling messages.
1165
+ * @param config Configuration object for the RTCPeerConnection.
1166
+ */
1167
+ constructor(stream: Stream, config: RTCConfiguration);
1168
+ private recordEvent;
1169
+ collectMetrics(): Promise<AnalyticsEvent>;
1170
+ private onnegotiationneeded;
1171
+ private sendLocalIceCandidates;
1172
+ /** internal @private */
1173
+ private setConnectionState;
1174
+ private setLocalDescription;
1175
+ private triggerIceRestart;
1176
+ private sendSignal;
1177
+ private handleSignal;
1178
+ private addCandidates;
1179
+ private checkPendingCandidates;
1180
+ }
1181
+
493
1182
  /**
494
1183
  * A high-level API for managing the peer-to-peer WebRTC connection. Provides
495
1184
  * access to lower-level {@link RTCPeerConnection} functionality. Including
@@ -586,6 +1275,11 @@ interface PeerOptionsFull {
586
1275
  * @type {string} token
587
1276
  */
588
1277
  token: string;
1278
+ /**
1279
+ * By default, client analytics is enabled. To opt out, set this field to true.
1280
+ * @type {boolean} disableAnalytics
1281
+ */
1282
+ disableAnalytics?: boolean;
589
1283
  /**
590
1284
  * (Optional) Base URL for API calls. Defaults to using our servers: "https://cloud.pulsebeam.dev/twirp".
591
1285
  * @type {string | undefined} [baseUrl]
@@ -625,9 +1319,10 @@ type PeerState = "new" | "closed";
625
1319
  * Peer is a mediator for signaling, connecting, and managing sessions.
626
1320
  */
627
1321
  declare class Peer {
1322
+ private readonly opts;
628
1323
  private transport;
629
1324
  private readonly logger;
630
- private sessions;
1325
+ private _sessions;
631
1326
  private _state;
632
1327
  /**
633
1328
  * Callback invoked when a new session is established.
@@ -650,6 +1345,7 @@ declare class Peer {
650
1345
  * @param isRecoverable Function to determine if an error is recoverable.
651
1346
  */
652
1347
  constructor(logger: Logger, client: ISignalingClient, opts: PeerOptionsFull, isRecoverable: (_err: unknown) => boolean);
1348
+ get sessions(): Session[];
653
1349
  /**
654
1350
  * Starts the peer, making it ready to establish connections.
655
1351
  * Peers must be started before a connection can occur.
@@ -658,6 +1354,7 @@ declare class Peer {
658
1354
  * @throws {Error} When the peer was previously closed.
659
1355
  */
660
1356
  start(): void;
1357
+ analyticsLoop(): Promise<void>;
661
1358
  /**
662
1359
  * Closes the peer. Releases associated resources.
663
1360
  * Signals to the AbortController passed to connect if connect was called.
@@ -699,4 +1396,33 @@ declare class Peer {
699
1396
  */
700
1397
  declare function createPeer(opts: PeerOptions): Promise<Peer>;
701
1398
 
702
- export { type ISession, Peer, PeerInfo, type PeerOptions, type PeerOptionsFull, type PeerState, createPeer };
1399
+ type Value = string | number | undefined;
1400
+ type Key = string;
1401
+ type KVStore = Record<Key, Value>;
1402
+ interface RemotePeer {
1403
+ info: PeerInfo;
1404
+ streams: MediaStream[];
1405
+ state: RTCPeerConnectionState;
1406
+ }
1407
+ declare class PeerStore {
1408
+ readonly peer: Peer;
1409
+ static readonly KV_NAMESPACE = "__crdt_kv";
1410
+ readonly $kv: PreinitializedMapStore<KVStore> & object;
1411
+ readonly $streams: PreinitializedMapStore<Record<string, MediaStream | undefined>> & object;
1412
+ readonly $remotePeers: ReadableAtom<Record<string, RemotePeer>>;
1413
+ readonly $state: ReadableAtom<PeerState>;
1414
+ private readonly $_remotePeers;
1415
+ private readonly $_state;
1416
+ private readonly crdtStore;
1417
+ private replicaId;
1418
+ private sendChannels;
1419
+ constructor(peer: Peer);
1420
+ close(): void;
1421
+ mute(disabled: boolean): void;
1422
+ private set;
1423
+ private notifyPeer;
1424
+ private notifyPeers;
1425
+ private receiveUpdate;
1426
+ }
1427
+
1428
+ export { type ISession, type KVStore, type Key, Peer, PeerInfo, type PeerOptions, type PeerOptionsFull, type PeerState, PeerStore, type RemotePeer, type Value, createPeer };