@fishjam-cloud/webrtc-client 0.14.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 (83) hide show
  1. package/LICENSE.txt +142 -0
  2. package/README.md +30 -0
  3. package/dist/index.d.mts +761 -0
  4. package/dist/index.mjs +4952 -0
  5. package/dist/protobufs/fishjam/media_events/peer/peer.d.ts +125 -0
  6. package/dist/protobufs/fishjam/media_events/peer/peer.js +1214 -0
  7. package/dist/protobufs/fishjam/media_events/server/server.d.ts +197 -0
  8. package/dist/protobufs/fishjam/media_events/server/server.js +2121 -0
  9. package/dist/protobufs/fishjam/media_events/shared.d.ts +38 -0
  10. package/dist/protobufs/fishjam/media_events/shared.js +152 -0
  11. package/dist/webrtc-client/src/CommandsQueue.d.ts +23 -0
  12. package/dist/webrtc-client/src/CommandsQueue.js +87 -0
  13. package/dist/webrtc-client/src/ConnectionManager.d.ts +16 -0
  14. package/dist/webrtc-client/src/ConnectionManager.js +46 -0
  15. package/dist/webrtc-client/src/bitrate.d.ts +12 -0
  16. package/dist/webrtc-client/src/bitrate.js +15 -0
  17. package/dist/webrtc-client/src/deferred.d.ts +8 -0
  18. package/dist/webrtc-client/src/deferred.js +17 -0
  19. package/dist/webrtc-client/src/index.d.ts +5 -0
  20. package/dist/webrtc-client/src/index.js +3 -0
  21. package/dist/webrtc-client/src/internal.d.ts +27 -0
  22. package/dist/webrtc-client/src/internal.js +18 -0
  23. package/dist/webrtc-client/src/mediaEvent.d.ts +13 -0
  24. package/dist/webrtc-client/src/mediaEvent.js +20 -0
  25. package/dist/webrtc-client/src/tracks/Local.d.ts +49 -0
  26. package/dist/webrtc-client/src/tracks/Local.js +243 -0
  27. package/dist/webrtc-client/src/tracks/LocalTrack.d.ts +61 -0
  28. package/dist/webrtc-client/src/tracks/LocalTrack.js +212 -0
  29. package/dist/webrtc-client/src/tracks/LocalTrackManager.d.ts +39 -0
  30. package/dist/webrtc-client/src/tracks/LocalTrackManager.js +76 -0
  31. package/dist/webrtc-client/src/tracks/Remote.d.ts +32 -0
  32. package/dist/webrtc-client/src/tracks/Remote.js +165 -0
  33. package/dist/webrtc-client/src/tracks/RemoteTrack.d.ts +40 -0
  34. package/dist/webrtc-client/src/tracks/RemoteTrack.js +71 -0
  35. package/dist/webrtc-client/src/tracks/TrackCommon.d.ts +9 -0
  36. package/dist/webrtc-client/src/tracks/TrackCommon.js +1 -0
  37. package/dist/webrtc-client/src/tracks/bandwidth.d.ts +1 -0
  38. package/dist/webrtc-client/src/tracks/bandwidth.js +27 -0
  39. package/dist/webrtc-client/src/tracks/encodings.d.ts +3 -0
  40. package/dist/webrtc-client/src/tracks/encodings.js +11 -0
  41. package/dist/webrtc-client/src/tracks/muteTrackUtils.d.ts +3 -0
  42. package/dist/webrtc-client/src/tracks/muteTrackUtils.js +18 -0
  43. package/dist/webrtc-client/src/tracks/transceivers.d.ts +2 -0
  44. package/dist/webrtc-client/src/tracks/transceivers.js +93 -0
  45. package/dist/webrtc-client/src/types.d.ts +259 -0
  46. package/dist/webrtc-client/src/types.js +1 -0
  47. package/dist/webrtc-client/src/webRTCEndpoint.d.ts +298 -0
  48. package/dist/webrtc-client/src/webRTCEndpoint.js +659 -0
  49. package/dist/webrtc-client/tests/events/bandwidthEstimationEvent.test.d.ts +1 -0
  50. package/dist/webrtc-client/tests/events/bandwidthEstimationEvent.test.js +21 -0
  51. package/dist/webrtc-client/tests/events/connectedEvent.test.d.ts +1 -0
  52. package/dist/webrtc-client/tests/events/connectedEvent.test.js +70 -0
  53. package/dist/webrtc-client/tests/events/encodingSwitchedEvent.test.d.ts +1 -0
  54. package/dist/webrtc-client/tests/events/encodingSwitchedEvent.test.js +60 -0
  55. package/dist/webrtc-client/tests/events/endpointAddedEvent.test.d.ts +1 -0
  56. package/dist/webrtc-client/tests/events/endpointAddedEvent.test.js +57 -0
  57. package/dist/webrtc-client/tests/events/endpointRemovedEvent.test.d.ts +1 -0
  58. package/dist/webrtc-client/tests/events/endpointRemovedEvent.test.js +64 -0
  59. package/dist/webrtc-client/tests/events/endpointUpdatedEvent.test.d.ts +1 -0
  60. package/dist/webrtc-client/tests/events/endpointUpdatedEvent.test.js +78 -0
  61. package/dist/webrtc-client/tests/events/trackAddedEvent.test.d.ts +1 -0
  62. package/dist/webrtc-client/tests/events/trackAddedEvent.test.js +84 -0
  63. package/dist/webrtc-client/tests/events/trackRemovedEvent.test.d.ts +1 -0
  64. package/dist/webrtc-client/tests/events/trackRemovedEvent.test.js +26 -0
  65. package/dist/webrtc-client/tests/events/trackUpdatedEvent.test.d.ts +1 -0
  66. package/dist/webrtc-client/tests/events/trackUpdatedEvent.test.js +77 -0
  67. package/dist/webrtc-client/tests/events/vadNotificationEvent.test.d.ts +1 -0
  68. package/dist/webrtc-client/tests/events/vadNotificationEvent.test.js +42 -0
  69. package/dist/webrtc-client/tests/fixtures.d.ts +27 -0
  70. package/dist/webrtc-client/tests/fixtures.js +172 -0
  71. package/dist/webrtc-client/tests/methods/addTrackMethod.test.d.ts +1 -0
  72. package/dist/webrtc-client/tests/methods/addTrackMethod.test.js +46 -0
  73. package/dist/webrtc-client/tests/methods/cleanUpMethod.test.d.ts +1 -0
  74. package/dist/webrtc-client/tests/methods/cleanUpMethod.test.js +14 -0
  75. package/dist/webrtc-client/tests/methods/connectMethod.test.d.ts +1 -0
  76. package/dist/webrtc-client/tests/methods/connectMethod.test.js +40 -0
  77. package/dist/webrtc-client/tests/methods/disconnectMethod.test.d.ts +1 -0
  78. package/dist/webrtc-client/tests/methods/disconnectMethod.test.js +29 -0
  79. package/dist/webrtc-client/tests/mocks.d.ts +5 -0
  80. package/dist/webrtc-client/tests/mocks.js +80 -0
  81. package/dist/webrtc-client/tests/utils.d.ts +3 -0
  82. package/dist/webrtc-client/tests/utils.js +56 -0
  83. package/package.json +80 -0
package/dist/index.mjs ADDED
@@ -0,0 +1,4952 @@
1
+ // ../protobufs/fishjam/media_events/peer/peer.ts
2
+ import { BinaryReader as BinaryReader2, BinaryWriter as BinaryWriter2 } from "@bufbuild/protobuf/wire";
3
+
4
+ // ../protobufs/fishjam/media_events/shared.ts
5
+ import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
6
+ var Variant = /* @__PURE__ */ ((Variant4) => {
7
+ Variant4[Variant4["VARIANT_UNSPECIFIED"] = 0] = "VARIANT_UNSPECIFIED";
8
+ Variant4[Variant4["VARIANT_LOW"] = 1] = "VARIANT_LOW";
9
+ Variant4[Variant4["VARIANT_MEDIUM"] = 2] = "VARIANT_MEDIUM";
10
+ Variant4[Variant4["VARIANT_HIGH"] = 3] = "VARIANT_HIGH";
11
+ Variant4[Variant4["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
12
+ return Variant4;
13
+ })(Variant || {});
14
+ function variantFromJSON(object) {
15
+ switch (object) {
16
+ case 0:
17
+ case "VARIANT_UNSPECIFIED":
18
+ return 0 /* VARIANT_UNSPECIFIED */;
19
+ case 1:
20
+ case "VARIANT_LOW":
21
+ return 1 /* VARIANT_LOW */;
22
+ case 2:
23
+ case "VARIANT_MEDIUM":
24
+ return 2 /* VARIANT_MEDIUM */;
25
+ case 3:
26
+ case "VARIANT_HIGH":
27
+ return 3 /* VARIANT_HIGH */;
28
+ case -1:
29
+ case "UNRECOGNIZED":
30
+ default:
31
+ return -1 /* UNRECOGNIZED */;
32
+ }
33
+ }
34
+ function variantToJSON(object) {
35
+ switch (object) {
36
+ case 0 /* VARIANT_UNSPECIFIED */:
37
+ return "VARIANT_UNSPECIFIED";
38
+ case 1 /* VARIANT_LOW */:
39
+ return "VARIANT_LOW";
40
+ case 2 /* VARIANT_MEDIUM */:
41
+ return "VARIANT_MEDIUM";
42
+ case 3 /* VARIANT_HIGH */:
43
+ return "VARIANT_HIGH";
44
+ case -1 /* UNRECOGNIZED */:
45
+ default:
46
+ return "UNRECOGNIZED";
47
+ }
48
+ }
49
+ function createBaseCandidate() {
50
+ return { candidate: "", sdpMLineIndex: 0, sdpMid: "", usernameFragment: "" };
51
+ }
52
+ var Candidate = {
53
+ encode(message, writer = new BinaryWriter()) {
54
+ if (message.candidate !== "") {
55
+ writer.uint32(10).string(message.candidate);
56
+ }
57
+ if (message.sdpMLineIndex !== 0) {
58
+ writer.uint32(16).int32(message.sdpMLineIndex);
59
+ }
60
+ if (message.sdpMid !== "") {
61
+ writer.uint32(26).string(message.sdpMid);
62
+ }
63
+ if (message.usernameFragment !== "") {
64
+ writer.uint32(34).string(message.usernameFragment);
65
+ }
66
+ return writer;
67
+ },
68
+ decode(input, length) {
69
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
70
+ let end = length === void 0 ? reader.len : reader.pos + length;
71
+ const message = createBaseCandidate();
72
+ while (reader.pos < end) {
73
+ const tag = reader.uint32();
74
+ switch (tag >>> 3) {
75
+ case 1: {
76
+ if (tag !== 10) {
77
+ break;
78
+ }
79
+ message.candidate = reader.string();
80
+ continue;
81
+ }
82
+ case 2: {
83
+ if (tag !== 16) {
84
+ break;
85
+ }
86
+ message.sdpMLineIndex = reader.int32();
87
+ continue;
88
+ }
89
+ case 3: {
90
+ if (tag !== 26) {
91
+ break;
92
+ }
93
+ message.sdpMid = reader.string();
94
+ continue;
95
+ }
96
+ case 4: {
97
+ if (tag !== 34) {
98
+ break;
99
+ }
100
+ message.usernameFragment = reader.string();
101
+ continue;
102
+ }
103
+ }
104
+ if ((tag & 7) === 4 || tag === 0) {
105
+ break;
106
+ }
107
+ reader.skip(tag & 7);
108
+ }
109
+ return message;
110
+ },
111
+ fromJSON(object) {
112
+ return {
113
+ candidate: isSet(object.candidate) ? globalThis.String(object.candidate) : "",
114
+ sdpMLineIndex: isSet(object.sdpMLineIndex) ? globalThis.Number(object.sdpMLineIndex) : 0,
115
+ sdpMid: isSet(object.sdpMid) ? globalThis.String(object.sdpMid) : "",
116
+ usernameFragment: isSet(object.usernameFragment) ? globalThis.String(object.usernameFragment) : ""
117
+ };
118
+ },
119
+ toJSON(message) {
120
+ const obj = {};
121
+ if (message.candidate !== "") {
122
+ obj.candidate = message.candidate;
123
+ }
124
+ if (message.sdpMLineIndex !== 0) {
125
+ obj.sdpMLineIndex = Math.round(message.sdpMLineIndex);
126
+ }
127
+ if (message.sdpMid !== "") {
128
+ obj.sdpMid = message.sdpMid;
129
+ }
130
+ if (message.usernameFragment !== "") {
131
+ obj.usernameFragment = message.usernameFragment;
132
+ }
133
+ return obj;
134
+ },
135
+ create(base) {
136
+ return Candidate.fromPartial(base ?? {});
137
+ },
138
+ fromPartial(object) {
139
+ const message = createBaseCandidate();
140
+ message.candidate = object.candidate ?? "";
141
+ message.sdpMLineIndex = object.sdpMLineIndex ?? 0;
142
+ message.sdpMid = object.sdpMid ?? "";
143
+ message.usernameFragment = object.usernameFragment ?? "";
144
+ return message;
145
+ }
146
+ };
147
+ function isSet(value) {
148
+ return value !== null && value !== void 0;
149
+ }
150
+
151
+ // ../protobufs/fishjam/media_events/peer/peer.ts
152
+ function createBaseMediaEvent() {
153
+ return {
154
+ connect: void 0,
155
+ disconnect: void 0,
156
+ updateEndpointMetadata: void 0,
157
+ updateTrackMetadata: void 0,
158
+ renegotiateTracks: void 0,
159
+ candidate: void 0,
160
+ sdpOffer: void 0,
161
+ trackBitrates: void 0,
162
+ enableTrackVariant: void 0,
163
+ disableTrackVariant: void 0,
164
+ setTargetTrackVariant: void 0
165
+ };
166
+ }
167
+ var MediaEvent = {
168
+ encode(message, writer = new BinaryWriter2()) {
169
+ if (message.connect !== void 0) {
170
+ MediaEvent_Connect.encode(message.connect, writer.uint32(10).fork()).join();
171
+ }
172
+ if (message.disconnect !== void 0) {
173
+ MediaEvent_Disconnect.encode(message.disconnect, writer.uint32(18).fork()).join();
174
+ }
175
+ if (message.updateEndpointMetadata !== void 0) {
176
+ MediaEvent_UpdateEndpointMetadata.encode(message.updateEndpointMetadata, writer.uint32(26).fork()).join();
177
+ }
178
+ if (message.updateTrackMetadata !== void 0) {
179
+ MediaEvent_UpdateTrackMetadata.encode(message.updateTrackMetadata, writer.uint32(34).fork()).join();
180
+ }
181
+ if (message.renegotiateTracks !== void 0) {
182
+ MediaEvent_RenegotiateTracks.encode(message.renegotiateTracks, writer.uint32(42).fork()).join();
183
+ }
184
+ if (message.candidate !== void 0) {
185
+ Candidate.encode(message.candidate, writer.uint32(50).fork()).join();
186
+ }
187
+ if (message.sdpOffer !== void 0) {
188
+ MediaEvent_SdpOffer.encode(message.sdpOffer, writer.uint32(58).fork()).join();
189
+ }
190
+ if (message.trackBitrates !== void 0) {
191
+ MediaEvent_TrackBitrates.encode(message.trackBitrates, writer.uint32(66).fork()).join();
192
+ }
193
+ if (message.enableTrackVariant !== void 0) {
194
+ MediaEvent_EnableTrackVariant.encode(message.enableTrackVariant, writer.uint32(74).fork()).join();
195
+ }
196
+ if (message.disableTrackVariant !== void 0) {
197
+ MediaEvent_DisableTrackVariant.encode(message.disableTrackVariant, writer.uint32(82).fork()).join();
198
+ }
199
+ if (message.setTargetTrackVariant !== void 0) {
200
+ MediaEvent_SetTargetTrackVariant.encode(message.setTargetTrackVariant, writer.uint32(90).fork()).join();
201
+ }
202
+ return writer;
203
+ },
204
+ decode(input, length) {
205
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
206
+ let end = length === void 0 ? reader.len : reader.pos + length;
207
+ const message = createBaseMediaEvent();
208
+ while (reader.pos < end) {
209
+ const tag = reader.uint32();
210
+ switch (tag >>> 3) {
211
+ case 1: {
212
+ if (tag !== 10) {
213
+ break;
214
+ }
215
+ message.connect = MediaEvent_Connect.decode(reader, reader.uint32());
216
+ continue;
217
+ }
218
+ case 2: {
219
+ if (tag !== 18) {
220
+ break;
221
+ }
222
+ message.disconnect = MediaEvent_Disconnect.decode(reader, reader.uint32());
223
+ continue;
224
+ }
225
+ case 3: {
226
+ if (tag !== 26) {
227
+ break;
228
+ }
229
+ message.updateEndpointMetadata = MediaEvent_UpdateEndpointMetadata.decode(reader, reader.uint32());
230
+ continue;
231
+ }
232
+ case 4: {
233
+ if (tag !== 34) {
234
+ break;
235
+ }
236
+ message.updateTrackMetadata = MediaEvent_UpdateTrackMetadata.decode(reader, reader.uint32());
237
+ continue;
238
+ }
239
+ case 5: {
240
+ if (tag !== 42) {
241
+ break;
242
+ }
243
+ message.renegotiateTracks = MediaEvent_RenegotiateTracks.decode(reader, reader.uint32());
244
+ continue;
245
+ }
246
+ case 6: {
247
+ if (tag !== 50) {
248
+ break;
249
+ }
250
+ message.candidate = Candidate.decode(reader, reader.uint32());
251
+ continue;
252
+ }
253
+ case 7: {
254
+ if (tag !== 58) {
255
+ break;
256
+ }
257
+ message.sdpOffer = MediaEvent_SdpOffer.decode(reader, reader.uint32());
258
+ continue;
259
+ }
260
+ case 8: {
261
+ if (tag !== 66) {
262
+ break;
263
+ }
264
+ message.trackBitrates = MediaEvent_TrackBitrates.decode(reader, reader.uint32());
265
+ continue;
266
+ }
267
+ case 9: {
268
+ if (tag !== 74) {
269
+ break;
270
+ }
271
+ message.enableTrackVariant = MediaEvent_EnableTrackVariant.decode(reader, reader.uint32());
272
+ continue;
273
+ }
274
+ case 10: {
275
+ if (tag !== 82) {
276
+ break;
277
+ }
278
+ message.disableTrackVariant = MediaEvent_DisableTrackVariant.decode(reader, reader.uint32());
279
+ continue;
280
+ }
281
+ case 11: {
282
+ if (tag !== 90) {
283
+ break;
284
+ }
285
+ message.setTargetTrackVariant = MediaEvent_SetTargetTrackVariant.decode(reader, reader.uint32());
286
+ continue;
287
+ }
288
+ }
289
+ if ((tag & 7) === 4 || tag === 0) {
290
+ break;
291
+ }
292
+ reader.skip(tag & 7);
293
+ }
294
+ return message;
295
+ },
296
+ fromJSON(object) {
297
+ return {
298
+ connect: isSet2(object.connect) ? MediaEvent_Connect.fromJSON(object.connect) : void 0,
299
+ disconnect: isSet2(object.disconnect) ? MediaEvent_Disconnect.fromJSON(object.disconnect) : void 0,
300
+ updateEndpointMetadata: isSet2(object.updateEndpointMetadata) ? MediaEvent_UpdateEndpointMetadata.fromJSON(object.updateEndpointMetadata) : void 0,
301
+ updateTrackMetadata: isSet2(object.updateTrackMetadata) ? MediaEvent_UpdateTrackMetadata.fromJSON(object.updateTrackMetadata) : void 0,
302
+ renegotiateTracks: isSet2(object.renegotiateTracks) ? MediaEvent_RenegotiateTracks.fromJSON(object.renegotiateTracks) : void 0,
303
+ candidate: isSet2(object.candidate) ? Candidate.fromJSON(object.candidate) : void 0,
304
+ sdpOffer: isSet2(object.sdpOffer) ? MediaEvent_SdpOffer.fromJSON(object.sdpOffer) : void 0,
305
+ trackBitrates: isSet2(object.trackBitrates) ? MediaEvent_TrackBitrates.fromJSON(object.trackBitrates) : void 0,
306
+ enableTrackVariant: isSet2(object.enableTrackVariant) ? MediaEvent_EnableTrackVariant.fromJSON(object.enableTrackVariant) : void 0,
307
+ disableTrackVariant: isSet2(object.disableTrackVariant) ? MediaEvent_DisableTrackVariant.fromJSON(object.disableTrackVariant) : void 0,
308
+ setTargetTrackVariant: isSet2(object.setTargetTrackVariant) ? MediaEvent_SetTargetTrackVariant.fromJSON(object.setTargetTrackVariant) : void 0
309
+ };
310
+ },
311
+ toJSON(message) {
312
+ const obj = {};
313
+ if (message.connect !== void 0) {
314
+ obj.connect = MediaEvent_Connect.toJSON(message.connect);
315
+ }
316
+ if (message.disconnect !== void 0) {
317
+ obj.disconnect = MediaEvent_Disconnect.toJSON(message.disconnect);
318
+ }
319
+ if (message.updateEndpointMetadata !== void 0) {
320
+ obj.updateEndpointMetadata = MediaEvent_UpdateEndpointMetadata.toJSON(message.updateEndpointMetadata);
321
+ }
322
+ if (message.updateTrackMetadata !== void 0) {
323
+ obj.updateTrackMetadata = MediaEvent_UpdateTrackMetadata.toJSON(message.updateTrackMetadata);
324
+ }
325
+ if (message.renegotiateTracks !== void 0) {
326
+ obj.renegotiateTracks = MediaEvent_RenegotiateTracks.toJSON(message.renegotiateTracks);
327
+ }
328
+ if (message.candidate !== void 0) {
329
+ obj.candidate = Candidate.toJSON(message.candidate);
330
+ }
331
+ if (message.sdpOffer !== void 0) {
332
+ obj.sdpOffer = MediaEvent_SdpOffer.toJSON(message.sdpOffer);
333
+ }
334
+ if (message.trackBitrates !== void 0) {
335
+ obj.trackBitrates = MediaEvent_TrackBitrates.toJSON(message.trackBitrates);
336
+ }
337
+ if (message.enableTrackVariant !== void 0) {
338
+ obj.enableTrackVariant = MediaEvent_EnableTrackVariant.toJSON(message.enableTrackVariant);
339
+ }
340
+ if (message.disableTrackVariant !== void 0) {
341
+ obj.disableTrackVariant = MediaEvent_DisableTrackVariant.toJSON(message.disableTrackVariant);
342
+ }
343
+ if (message.setTargetTrackVariant !== void 0) {
344
+ obj.setTargetTrackVariant = MediaEvent_SetTargetTrackVariant.toJSON(message.setTargetTrackVariant);
345
+ }
346
+ return obj;
347
+ },
348
+ create(base) {
349
+ return MediaEvent.fromPartial(base ?? {});
350
+ },
351
+ fromPartial(object) {
352
+ const message = createBaseMediaEvent();
353
+ message.connect = object.connect !== void 0 && object.connect !== null ? MediaEvent_Connect.fromPartial(object.connect) : void 0;
354
+ message.disconnect = object.disconnect !== void 0 && object.disconnect !== null ? MediaEvent_Disconnect.fromPartial(object.disconnect) : void 0;
355
+ message.updateEndpointMetadata = object.updateEndpointMetadata !== void 0 && object.updateEndpointMetadata !== null ? MediaEvent_UpdateEndpointMetadata.fromPartial(object.updateEndpointMetadata) : void 0;
356
+ message.updateTrackMetadata = object.updateTrackMetadata !== void 0 && object.updateTrackMetadata !== null ? MediaEvent_UpdateTrackMetadata.fromPartial(object.updateTrackMetadata) : void 0;
357
+ message.renegotiateTracks = object.renegotiateTracks !== void 0 && object.renegotiateTracks !== null ? MediaEvent_RenegotiateTracks.fromPartial(object.renegotiateTracks) : void 0;
358
+ message.candidate = object.candidate !== void 0 && object.candidate !== null ? Candidate.fromPartial(object.candidate) : void 0;
359
+ message.sdpOffer = object.sdpOffer !== void 0 && object.sdpOffer !== null ? MediaEvent_SdpOffer.fromPartial(object.sdpOffer) : void 0;
360
+ message.trackBitrates = object.trackBitrates !== void 0 && object.trackBitrates !== null ? MediaEvent_TrackBitrates.fromPartial(object.trackBitrates) : void 0;
361
+ message.enableTrackVariant = object.enableTrackVariant !== void 0 && object.enableTrackVariant !== null ? MediaEvent_EnableTrackVariant.fromPartial(object.enableTrackVariant) : void 0;
362
+ message.disableTrackVariant = object.disableTrackVariant !== void 0 && object.disableTrackVariant !== null ? MediaEvent_DisableTrackVariant.fromPartial(object.disableTrackVariant) : void 0;
363
+ message.setTargetTrackVariant = object.setTargetTrackVariant !== void 0 && object.setTargetTrackVariant !== null ? MediaEvent_SetTargetTrackVariant.fromPartial(object.setTargetTrackVariant) : void 0;
364
+ return message;
365
+ }
366
+ };
367
+ function createBaseMediaEvent_VariantBitrate() {
368
+ return { variant: 0, bitrate: 0 };
369
+ }
370
+ var MediaEvent_VariantBitrate = {
371
+ encode(message, writer = new BinaryWriter2()) {
372
+ if (message.variant !== 0) {
373
+ writer.uint32(8).int32(message.variant);
374
+ }
375
+ if (message.bitrate !== 0) {
376
+ writer.uint32(16).int32(message.bitrate);
377
+ }
378
+ return writer;
379
+ },
380
+ decode(input, length) {
381
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
382
+ let end = length === void 0 ? reader.len : reader.pos + length;
383
+ const message = createBaseMediaEvent_VariantBitrate();
384
+ while (reader.pos < end) {
385
+ const tag = reader.uint32();
386
+ switch (tag >>> 3) {
387
+ case 1: {
388
+ if (tag !== 8) {
389
+ break;
390
+ }
391
+ message.variant = reader.int32();
392
+ continue;
393
+ }
394
+ case 2: {
395
+ if (tag !== 16) {
396
+ break;
397
+ }
398
+ message.bitrate = reader.int32();
399
+ continue;
400
+ }
401
+ }
402
+ if ((tag & 7) === 4 || tag === 0) {
403
+ break;
404
+ }
405
+ reader.skip(tag & 7);
406
+ }
407
+ return message;
408
+ },
409
+ fromJSON(object) {
410
+ return {
411
+ variant: isSet2(object.variant) ? variantFromJSON(object.variant) : 0,
412
+ bitrate: isSet2(object.bitrate) ? globalThis.Number(object.bitrate) : 0
413
+ };
414
+ },
415
+ toJSON(message) {
416
+ const obj = {};
417
+ if (message.variant !== 0) {
418
+ obj.variant = variantToJSON(message.variant);
419
+ }
420
+ if (message.bitrate !== 0) {
421
+ obj.bitrate = Math.round(message.bitrate);
422
+ }
423
+ return obj;
424
+ },
425
+ create(base) {
426
+ return MediaEvent_VariantBitrate.fromPartial(base ?? {});
427
+ },
428
+ fromPartial(object) {
429
+ const message = createBaseMediaEvent_VariantBitrate();
430
+ message.variant = object.variant ?? 0;
431
+ message.bitrate = object.bitrate ?? 0;
432
+ return message;
433
+ }
434
+ };
435
+ function createBaseMediaEvent_Connect() {
436
+ return { metadataJson: "" };
437
+ }
438
+ var MediaEvent_Connect = {
439
+ encode(message, writer = new BinaryWriter2()) {
440
+ if (message.metadataJson !== "") {
441
+ writer.uint32(10).string(message.metadataJson);
442
+ }
443
+ return writer;
444
+ },
445
+ decode(input, length) {
446
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
447
+ let end = length === void 0 ? reader.len : reader.pos + length;
448
+ const message = createBaseMediaEvent_Connect();
449
+ while (reader.pos < end) {
450
+ const tag = reader.uint32();
451
+ switch (tag >>> 3) {
452
+ case 1: {
453
+ if (tag !== 10) {
454
+ break;
455
+ }
456
+ message.metadataJson = reader.string();
457
+ continue;
458
+ }
459
+ }
460
+ if ((tag & 7) === 4 || tag === 0) {
461
+ break;
462
+ }
463
+ reader.skip(tag & 7);
464
+ }
465
+ return message;
466
+ },
467
+ fromJSON(object) {
468
+ return { metadataJson: isSet2(object.metadataJson) ? globalThis.String(object.metadataJson) : "" };
469
+ },
470
+ toJSON(message) {
471
+ const obj = {};
472
+ if (message.metadataJson !== "") {
473
+ obj.metadataJson = message.metadataJson;
474
+ }
475
+ return obj;
476
+ },
477
+ create(base) {
478
+ return MediaEvent_Connect.fromPartial(base ?? {});
479
+ },
480
+ fromPartial(object) {
481
+ const message = createBaseMediaEvent_Connect();
482
+ message.metadataJson = object.metadataJson ?? "";
483
+ return message;
484
+ }
485
+ };
486
+ function createBaseMediaEvent_Disconnect() {
487
+ return {};
488
+ }
489
+ var MediaEvent_Disconnect = {
490
+ encode(_, writer = new BinaryWriter2()) {
491
+ return writer;
492
+ },
493
+ decode(input, length) {
494
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
495
+ let end = length === void 0 ? reader.len : reader.pos + length;
496
+ const message = createBaseMediaEvent_Disconnect();
497
+ while (reader.pos < end) {
498
+ const tag = reader.uint32();
499
+ switch (tag >>> 3) {
500
+ }
501
+ if ((tag & 7) === 4 || tag === 0) {
502
+ break;
503
+ }
504
+ reader.skip(tag & 7);
505
+ }
506
+ return message;
507
+ },
508
+ fromJSON(_) {
509
+ return {};
510
+ },
511
+ toJSON(_) {
512
+ const obj = {};
513
+ return obj;
514
+ },
515
+ create(base) {
516
+ return MediaEvent_Disconnect.fromPartial(base ?? {});
517
+ },
518
+ fromPartial(_) {
519
+ const message = createBaseMediaEvent_Disconnect();
520
+ return message;
521
+ }
522
+ };
523
+ function createBaseMediaEvent_UpdateEndpointMetadata() {
524
+ return { metadataJson: "" };
525
+ }
526
+ var MediaEvent_UpdateEndpointMetadata = {
527
+ encode(message, writer = new BinaryWriter2()) {
528
+ if (message.metadataJson !== "") {
529
+ writer.uint32(10).string(message.metadataJson);
530
+ }
531
+ return writer;
532
+ },
533
+ decode(input, length) {
534
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
535
+ let end = length === void 0 ? reader.len : reader.pos + length;
536
+ const message = createBaseMediaEvent_UpdateEndpointMetadata();
537
+ while (reader.pos < end) {
538
+ const tag = reader.uint32();
539
+ switch (tag >>> 3) {
540
+ case 1: {
541
+ if (tag !== 10) {
542
+ break;
543
+ }
544
+ message.metadataJson = reader.string();
545
+ continue;
546
+ }
547
+ }
548
+ if ((tag & 7) === 4 || tag === 0) {
549
+ break;
550
+ }
551
+ reader.skip(tag & 7);
552
+ }
553
+ return message;
554
+ },
555
+ fromJSON(object) {
556
+ return { metadataJson: isSet2(object.metadataJson) ? globalThis.String(object.metadataJson) : "" };
557
+ },
558
+ toJSON(message) {
559
+ const obj = {};
560
+ if (message.metadataJson !== "") {
561
+ obj.metadataJson = message.metadataJson;
562
+ }
563
+ return obj;
564
+ },
565
+ create(base) {
566
+ return MediaEvent_UpdateEndpointMetadata.fromPartial(base ?? {});
567
+ },
568
+ fromPartial(object) {
569
+ const message = createBaseMediaEvent_UpdateEndpointMetadata();
570
+ message.metadataJson = object.metadataJson ?? "";
571
+ return message;
572
+ }
573
+ };
574
+ function createBaseMediaEvent_UpdateTrackMetadata() {
575
+ return { trackId: "", metadataJson: "" };
576
+ }
577
+ var MediaEvent_UpdateTrackMetadata = {
578
+ encode(message, writer = new BinaryWriter2()) {
579
+ if (message.trackId !== "") {
580
+ writer.uint32(10).string(message.trackId);
581
+ }
582
+ if (message.metadataJson !== "") {
583
+ writer.uint32(18).string(message.metadataJson);
584
+ }
585
+ return writer;
586
+ },
587
+ decode(input, length) {
588
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
589
+ let end = length === void 0 ? reader.len : reader.pos + length;
590
+ const message = createBaseMediaEvent_UpdateTrackMetadata();
591
+ while (reader.pos < end) {
592
+ const tag = reader.uint32();
593
+ switch (tag >>> 3) {
594
+ case 1: {
595
+ if (tag !== 10) {
596
+ break;
597
+ }
598
+ message.trackId = reader.string();
599
+ continue;
600
+ }
601
+ case 2: {
602
+ if (tag !== 18) {
603
+ break;
604
+ }
605
+ message.metadataJson = reader.string();
606
+ continue;
607
+ }
608
+ }
609
+ if ((tag & 7) === 4 || tag === 0) {
610
+ break;
611
+ }
612
+ reader.skip(tag & 7);
613
+ }
614
+ return message;
615
+ },
616
+ fromJSON(object) {
617
+ return {
618
+ trackId: isSet2(object.trackId) ? globalThis.String(object.trackId) : "",
619
+ metadataJson: isSet2(object.metadataJson) ? globalThis.String(object.metadataJson) : ""
620
+ };
621
+ },
622
+ toJSON(message) {
623
+ const obj = {};
624
+ if (message.trackId !== "") {
625
+ obj.trackId = message.trackId;
626
+ }
627
+ if (message.metadataJson !== "") {
628
+ obj.metadataJson = message.metadataJson;
629
+ }
630
+ return obj;
631
+ },
632
+ create(base) {
633
+ return MediaEvent_UpdateTrackMetadata.fromPartial(base ?? {});
634
+ },
635
+ fromPartial(object) {
636
+ const message = createBaseMediaEvent_UpdateTrackMetadata();
637
+ message.trackId = object.trackId ?? "";
638
+ message.metadataJson = object.metadataJson ?? "";
639
+ return message;
640
+ }
641
+ };
642
+ function createBaseMediaEvent_RenegotiateTracks() {
643
+ return {};
644
+ }
645
+ var MediaEvent_RenegotiateTracks = {
646
+ encode(_, writer = new BinaryWriter2()) {
647
+ return writer;
648
+ },
649
+ decode(input, length) {
650
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
651
+ let end = length === void 0 ? reader.len : reader.pos + length;
652
+ const message = createBaseMediaEvent_RenegotiateTracks();
653
+ while (reader.pos < end) {
654
+ const tag = reader.uint32();
655
+ switch (tag >>> 3) {
656
+ }
657
+ if ((tag & 7) === 4 || tag === 0) {
658
+ break;
659
+ }
660
+ reader.skip(tag & 7);
661
+ }
662
+ return message;
663
+ },
664
+ fromJSON(_) {
665
+ return {};
666
+ },
667
+ toJSON(_) {
668
+ const obj = {};
669
+ return obj;
670
+ },
671
+ create(base) {
672
+ return MediaEvent_RenegotiateTracks.fromPartial(base ?? {});
673
+ },
674
+ fromPartial(_) {
675
+ const message = createBaseMediaEvent_RenegotiateTracks();
676
+ return message;
677
+ }
678
+ };
679
+ function createBaseMediaEvent_SdpOffer() {
680
+ return { sdp: "", trackIdToMetadataJson: {}, trackIdToBitrates: {}, midToTrackId: {} };
681
+ }
682
+ var MediaEvent_SdpOffer = {
683
+ encode(message, writer = new BinaryWriter2()) {
684
+ if (message.sdp !== "") {
685
+ writer.uint32(10).string(message.sdp);
686
+ }
687
+ Object.entries(message.trackIdToMetadataJson).forEach(([key, value]) => {
688
+ MediaEvent_SdpOffer_TrackIdToMetadataJsonEntry.encode({ key, value }, writer.uint32(18).fork()).join();
689
+ });
690
+ Object.entries(message.trackIdToBitrates).forEach(([key, value]) => {
691
+ MediaEvent_SdpOffer_TrackIdToBitratesEntry.encode({ key, value }, writer.uint32(26).fork()).join();
692
+ });
693
+ Object.entries(message.midToTrackId).forEach(([key, value]) => {
694
+ MediaEvent_SdpOffer_MidToTrackIdEntry.encode({ key, value }, writer.uint32(34).fork()).join();
695
+ });
696
+ return writer;
697
+ },
698
+ decode(input, length) {
699
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
700
+ let end = length === void 0 ? reader.len : reader.pos + length;
701
+ const message = createBaseMediaEvent_SdpOffer();
702
+ while (reader.pos < end) {
703
+ const tag = reader.uint32();
704
+ switch (tag >>> 3) {
705
+ case 1: {
706
+ if (tag !== 10) {
707
+ break;
708
+ }
709
+ message.sdp = reader.string();
710
+ continue;
711
+ }
712
+ case 2: {
713
+ if (tag !== 18) {
714
+ break;
715
+ }
716
+ const entry2 = MediaEvent_SdpOffer_TrackIdToMetadataJsonEntry.decode(reader, reader.uint32());
717
+ if (entry2.value !== void 0) {
718
+ message.trackIdToMetadataJson[entry2.key] = entry2.value;
719
+ }
720
+ continue;
721
+ }
722
+ case 3: {
723
+ if (tag !== 26) {
724
+ break;
725
+ }
726
+ const entry3 = MediaEvent_SdpOffer_TrackIdToBitratesEntry.decode(reader, reader.uint32());
727
+ if (entry3.value !== void 0) {
728
+ message.trackIdToBitrates[entry3.key] = entry3.value;
729
+ }
730
+ continue;
731
+ }
732
+ case 4: {
733
+ if (tag !== 34) {
734
+ break;
735
+ }
736
+ const entry4 = MediaEvent_SdpOffer_MidToTrackIdEntry.decode(reader, reader.uint32());
737
+ if (entry4.value !== void 0) {
738
+ message.midToTrackId[entry4.key] = entry4.value;
739
+ }
740
+ continue;
741
+ }
742
+ }
743
+ if ((tag & 7) === 4 || tag === 0) {
744
+ break;
745
+ }
746
+ reader.skip(tag & 7);
747
+ }
748
+ return message;
749
+ },
750
+ fromJSON(object) {
751
+ return {
752
+ sdp: isSet2(object.sdp) ? globalThis.String(object.sdp) : "",
753
+ trackIdToMetadataJson: isObject(object.trackIdToMetadataJson) ? Object.entries(object.trackIdToMetadataJson).reduce((acc, [key, value]) => {
754
+ acc[key] = String(value);
755
+ return acc;
756
+ }, {}) : {},
757
+ trackIdToBitrates: isObject(object.trackIdToBitrates) ? Object.entries(object.trackIdToBitrates).reduce(
758
+ (acc, [key, value]) => {
759
+ acc[key] = MediaEvent_TrackBitrates.fromJSON(value);
760
+ return acc;
761
+ },
762
+ {}
763
+ ) : {},
764
+ midToTrackId: isObject(object.midToTrackId) ? Object.entries(object.midToTrackId).reduce((acc, [key, value]) => {
765
+ acc[key] = String(value);
766
+ return acc;
767
+ }, {}) : {}
768
+ };
769
+ },
770
+ toJSON(message) {
771
+ const obj = {};
772
+ if (message.sdp !== "") {
773
+ obj.sdp = message.sdp;
774
+ }
775
+ if (message.trackIdToMetadataJson) {
776
+ const entries = Object.entries(message.trackIdToMetadataJson);
777
+ if (entries.length > 0) {
778
+ obj.trackIdToMetadataJson = {};
779
+ entries.forEach(([k, v]) => {
780
+ obj.trackIdToMetadataJson[k] = v;
781
+ });
782
+ }
783
+ }
784
+ if (message.trackIdToBitrates) {
785
+ const entries = Object.entries(message.trackIdToBitrates);
786
+ if (entries.length > 0) {
787
+ obj.trackIdToBitrates = {};
788
+ entries.forEach(([k, v]) => {
789
+ obj.trackIdToBitrates[k] = MediaEvent_TrackBitrates.toJSON(v);
790
+ });
791
+ }
792
+ }
793
+ if (message.midToTrackId) {
794
+ const entries = Object.entries(message.midToTrackId);
795
+ if (entries.length > 0) {
796
+ obj.midToTrackId = {};
797
+ entries.forEach(([k, v]) => {
798
+ obj.midToTrackId[k] = v;
799
+ });
800
+ }
801
+ }
802
+ return obj;
803
+ },
804
+ create(base) {
805
+ return MediaEvent_SdpOffer.fromPartial(base ?? {});
806
+ },
807
+ fromPartial(object) {
808
+ const message = createBaseMediaEvent_SdpOffer();
809
+ message.sdp = object.sdp ?? "";
810
+ message.trackIdToMetadataJson = Object.entries(object.trackIdToMetadataJson ?? {}).reduce((acc, [key, value]) => {
811
+ if (value !== void 0) {
812
+ acc[key] = globalThis.String(value);
813
+ }
814
+ return acc;
815
+ }, {});
816
+ message.trackIdToBitrates = Object.entries(object.trackIdToBitrates ?? {}).reduce((acc, [key, value]) => {
817
+ if (value !== void 0) {
818
+ acc[key] = MediaEvent_TrackBitrates.fromPartial(value);
819
+ }
820
+ return acc;
821
+ }, {});
822
+ message.midToTrackId = Object.entries(object.midToTrackId ?? {}).reduce(
823
+ (acc, [key, value]) => {
824
+ if (value !== void 0) {
825
+ acc[key] = globalThis.String(value);
826
+ }
827
+ return acc;
828
+ },
829
+ {}
830
+ );
831
+ return message;
832
+ }
833
+ };
834
+ function createBaseMediaEvent_SdpOffer_TrackIdToMetadataJsonEntry() {
835
+ return { key: "", value: "" };
836
+ }
837
+ var MediaEvent_SdpOffer_TrackIdToMetadataJsonEntry = {
838
+ encode(message, writer = new BinaryWriter2()) {
839
+ if (message.key !== "") {
840
+ writer.uint32(10).string(message.key);
841
+ }
842
+ if (message.value !== "") {
843
+ writer.uint32(18).string(message.value);
844
+ }
845
+ return writer;
846
+ },
847
+ decode(input, length) {
848
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
849
+ let end = length === void 0 ? reader.len : reader.pos + length;
850
+ const message = createBaseMediaEvent_SdpOffer_TrackIdToMetadataJsonEntry();
851
+ while (reader.pos < end) {
852
+ const tag = reader.uint32();
853
+ switch (tag >>> 3) {
854
+ case 1: {
855
+ if (tag !== 10) {
856
+ break;
857
+ }
858
+ message.key = reader.string();
859
+ continue;
860
+ }
861
+ case 2: {
862
+ if (tag !== 18) {
863
+ break;
864
+ }
865
+ message.value = reader.string();
866
+ continue;
867
+ }
868
+ }
869
+ if ((tag & 7) === 4 || tag === 0) {
870
+ break;
871
+ }
872
+ reader.skip(tag & 7);
873
+ }
874
+ return message;
875
+ },
876
+ fromJSON(object) {
877
+ return {
878
+ key: isSet2(object.key) ? globalThis.String(object.key) : "",
879
+ value: isSet2(object.value) ? globalThis.String(object.value) : ""
880
+ };
881
+ },
882
+ toJSON(message) {
883
+ const obj = {};
884
+ if (message.key !== "") {
885
+ obj.key = message.key;
886
+ }
887
+ if (message.value !== "") {
888
+ obj.value = message.value;
889
+ }
890
+ return obj;
891
+ },
892
+ create(base) {
893
+ return MediaEvent_SdpOffer_TrackIdToMetadataJsonEntry.fromPartial(base ?? {});
894
+ },
895
+ fromPartial(object) {
896
+ const message = createBaseMediaEvent_SdpOffer_TrackIdToMetadataJsonEntry();
897
+ message.key = object.key ?? "";
898
+ message.value = object.value ?? "";
899
+ return message;
900
+ }
901
+ };
902
+ function createBaseMediaEvent_SdpOffer_TrackIdToBitratesEntry() {
903
+ return { key: "", value: void 0 };
904
+ }
905
+ var MediaEvent_SdpOffer_TrackIdToBitratesEntry = {
906
+ encode(message, writer = new BinaryWriter2()) {
907
+ if (message.key !== "") {
908
+ writer.uint32(10).string(message.key);
909
+ }
910
+ if (message.value !== void 0) {
911
+ MediaEvent_TrackBitrates.encode(message.value, writer.uint32(18).fork()).join();
912
+ }
913
+ return writer;
914
+ },
915
+ decode(input, length) {
916
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
917
+ let end = length === void 0 ? reader.len : reader.pos + length;
918
+ const message = createBaseMediaEvent_SdpOffer_TrackIdToBitratesEntry();
919
+ while (reader.pos < end) {
920
+ const tag = reader.uint32();
921
+ switch (tag >>> 3) {
922
+ case 1: {
923
+ if (tag !== 10) {
924
+ break;
925
+ }
926
+ message.key = reader.string();
927
+ continue;
928
+ }
929
+ case 2: {
930
+ if (tag !== 18) {
931
+ break;
932
+ }
933
+ message.value = MediaEvent_TrackBitrates.decode(reader, reader.uint32());
934
+ continue;
935
+ }
936
+ }
937
+ if ((tag & 7) === 4 || tag === 0) {
938
+ break;
939
+ }
940
+ reader.skip(tag & 7);
941
+ }
942
+ return message;
943
+ },
944
+ fromJSON(object) {
945
+ return {
946
+ key: isSet2(object.key) ? globalThis.String(object.key) : "",
947
+ value: isSet2(object.value) ? MediaEvent_TrackBitrates.fromJSON(object.value) : void 0
948
+ };
949
+ },
950
+ toJSON(message) {
951
+ const obj = {};
952
+ if (message.key !== "") {
953
+ obj.key = message.key;
954
+ }
955
+ if (message.value !== void 0) {
956
+ obj.value = MediaEvent_TrackBitrates.toJSON(message.value);
957
+ }
958
+ return obj;
959
+ },
960
+ create(base) {
961
+ return MediaEvent_SdpOffer_TrackIdToBitratesEntry.fromPartial(base ?? {});
962
+ },
963
+ fromPartial(object) {
964
+ const message = createBaseMediaEvent_SdpOffer_TrackIdToBitratesEntry();
965
+ message.key = object.key ?? "";
966
+ message.value = object.value !== void 0 && object.value !== null ? MediaEvent_TrackBitrates.fromPartial(object.value) : void 0;
967
+ return message;
968
+ }
969
+ };
970
+ function createBaseMediaEvent_SdpOffer_MidToTrackIdEntry() {
971
+ return { key: "", value: "" };
972
+ }
973
+ var MediaEvent_SdpOffer_MidToTrackIdEntry = {
974
+ encode(message, writer = new BinaryWriter2()) {
975
+ if (message.key !== "") {
976
+ writer.uint32(10).string(message.key);
977
+ }
978
+ if (message.value !== "") {
979
+ writer.uint32(18).string(message.value);
980
+ }
981
+ return writer;
982
+ },
983
+ decode(input, length) {
984
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
985
+ let end = length === void 0 ? reader.len : reader.pos + length;
986
+ const message = createBaseMediaEvent_SdpOffer_MidToTrackIdEntry();
987
+ while (reader.pos < end) {
988
+ const tag = reader.uint32();
989
+ switch (tag >>> 3) {
990
+ case 1: {
991
+ if (tag !== 10) {
992
+ break;
993
+ }
994
+ message.key = reader.string();
995
+ continue;
996
+ }
997
+ case 2: {
998
+ if (tag !== 18) {
999
+ break;
1000
+ }
1001
+ message.value = reader.string();
1002
+ continue;
1003
+ }
1004
+ }
1005
+ if ((tag & 7) === 4 || tag === 0) {
1006
+ break;
1007
+ }
1008
+ reader.skip(tag & 7);
1009
+ }
1010
+ return message;
1011
+ },
1012
+ fromJSON(object) {
1013
+ return {
1014
+ key: isSet2(object.key) ? globalThis.String(object.key) : "",
1015
+ value: isSet2(object.value) ? globalThis.String(object.value) : ""
1016
+ };
1017
+ },
1018
+ toJSON(message) {
1019
+ const obj = {};
1020
+ if (message.key !== "") {
1021
+ obj.key = message.key;
1022
+ }
1023
+ if (message.value !== "") {
1024
+ obj.value = message.value;
1025
+ }
1026
+ return obj;
1027
+ },
1028
+ create(base) {
1029
+ return MediaEvent_SdpOffer_MidToTrackIdEntry.fromPartial(base ?? {});
1030
+ },
1031
+ fromPartial(object) {
1032
+ const message = createBaseMediaEvent_SdpOffer_MidToTrackIdEntry();
1033
+ message.key = object.key ?? "";
1034
+ message.value = object.value ?? "";
1035
+ return message;
1036
+ }
1037
+ };
1038
+ function createBaseMediaEvent_TrackBitrates() {
1039
+ return { trackId: "", variantBitrates: [] };
1040
+ }
1041
+ var MediaEvent_TrackBitrates = {
1042
+ encode(message, writer = new BinaryWriter2()) {
1043
+ if (message.trackId !== "") {
1044
+ writer.uint32(10).string(message.trackId);
1045
+ }
1046
+ for (const v of message.variantBitrates) {
1047
+ MediaEvent_VariantBitrate.encode(v, writer.uint32(18).fork()).join();
1048
+ }
1049
+ return writer;
1050
+ },
1051
+ decode(input, length) {
1052
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
1053
+ let end = length === void 0 ? reader.len : reader.pos + length;
1054
+ const message = createBaseMediaEvent_TrackBitrates();
1055
+ while (reader.pos < end) {
1056
+ const tag = reader.uint32();
1057
+ switch (tag >>> 3) {
1058
+ case 1: {
1059
+ if (tag !== 10) {
1060
+ break;
1061
+ }
1062
+ message.trackId = reader.string();
1063
+ continue;
1064
+ }
1065
+ case 2: {
1066
+ if (tag !== 18) {
1067
+ break;
1068
+ }
1069
+ message.variantBitrates.push(MediaEvent_VariantBitrate.decode(reader, reader.uint32()));
1070
+ continue;
1071
+ }
1072
+ }
1073
+ if ((tag & 7) === 4 || tag === 0) {
1074
+ break;
1075
+ }
1076
+ reader.skip(tag & 7);
1077
+ }
1078
+ return message;
1079
+ },
1080
+ fromJSON(object) {
1081
+ return {
1082
+ trackId: isSet2(object.trackId) ? globalThis.String(object.trackId) : "",
1083
+ variantBitrates: globalThis.Array.isArray(object?.variantBitrates) ? object.variantBitrates.map((e) => MediaEvent_VariantBitrate.fromJSON(e)) : []
1084
+ };
1085
+ },
1086
+ toJSON(message) {
1087
+ const obj = {};
1088
+ if (message.trackId !== "") {
1089
+ obj.trackId = message.trackId;
1090
+ }
1091
+ if (message.variantBitrates?.length) {
1092
+ obj.variantBitrates = message.variantBitrates.map((e) => MediaEvent_VariantBitrate.toJSON(e));
1093
+ }
1094
+ return obj;
1095
+ },
1096
+ create(base) {
1097
+ return MediaEvent_TrackBitrates.fromPartial(base ?? {});
1098
+ },
1099
+ fromPartial(object) {
1100
+ const message = createBaseMediaEvent_TrackBitrates();
1101
+ message.trackId = object.trackId ?? "";
1102
+ message.variantBitrates = object.variantBitrates?.map((e) => MediaEvent_VariantBitrate.fromPartial(e)) || [];
1103
+ return message;
1104
+ }
1105
+ };
1106
+ function createBaseMediaEvent_DisableTrackVariant() {
1107
+ return { trackId: "", variant: 0 };
1108
+ }
1109
+ var MediaEvent_DisableTrackVariant = {
1110
+ encode(message, writer = new BinaryWriter2()) {
1111
+ if (message.trackId !== "") {
1112
+ writer.uint32(10).string(message.trackId);
1113
+ }
1114
+ if (message.variant !== 0) {
1115
+ writer.uint32(16).int32(message.variant);
1116
+ }
1117
+ return writer;
1118
+ },
1119
+ decode(input, length) {
1120
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
1121
+ let end = length === void 0 ? reader.len : reader.pos + length;
1122
+ const message = createBaseMediaEvent_DisableTrackVariant();
1123
+ while (reader.pos < end) {
1124
+ const tag = reader.uint32();
1125
+ switch (tag >>> 3) {
1126
+ case 1: {
1127
+ if (tag !== 10) {
1128
+ break;
1129
+ }
1130
+ message.trackId = reader.string();
1131
+ continue;
1132
+ }
1133
+ case 2: {
1134
+ if (tag !== 16) {
1135
+ break;
1136
+ }
1137
+ message.variant = reader.int32();
1138
+ continue;
1139
+ }
1140
+ }
1141
+ if ((tag & 7) === 4 || tag === 0) {
1142
+ break;
1143
+ }
1144
+ reader.skip(tag & 7);
1145
+ }
1146
+ return message;
1147
+ },
1148
+ fromJSON(object) {
1149
+ return {
1150
+ trackId: isSet2(object.trackId) ? globalThis.String(object.trackId) : "",
1151
+ variant: isSet2(object.variant) ? variantFromJSON(object.variant) : 0
1152
+ };
1153
+ },
1154
+ toJSON(message) {
1155
+ const obj = {};
1156
+ if (message.trackId !== "") {
1157
+ obj.trackId = message.trackId;
1158
+ }
1159
+ if (message.variant !== 0) {
1160
+ obj.variant = variantToJSON(message.variant);
1161
+ }
1162
+ return obj;
1163
+ },
1164
+ create(base) {
1165
+ return MediaEvent_DisableTrackVariant.fromPartial(base ?? {});
1166
+ },
1167
+ fromPartial(object) {
1168
+ const message = createBaseMediaEvent_DisableTrackVariant();
1169
+ message.trackId = object.trackId ?? "";
1170
+ message.variant = object.variant ?? 0;
1171
+ return message;
1172
+ }
1173
+ };
1174
+ function createBaseMediaEvent_EnableTrackVariant() {
1175
+ return { trackId: "", variant: 0 };
1176
+ }
1177
+ var MediaEvent_EnableTrackVariant = {
1178
+ encode(message, writer = new BinaryWriter2()) {
1179
+ if (message.trackId !== "") {
1180
+ writer.uint32(10).string(message.trackId);
1181
+ }
1182
+ if (message.variant !== 0) {
1183
+ writer.uint32(16).int32(message.variant);
1184
+ }
1185
+ return writer;
1186
+ },
1187
+ decode(input, length) {
1188
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
1189
+ let end = length === void 0 ? reader.len : reader.pos + length;
1190
+ const message = createBaseMediaEvent_EnableTrackVariant();
1191
+ while (reader.pos < end) {
1192
+ const tag = reader.uint32();
1193
+ switch (tag >>> 3) {
1194
+ case 1: {
1195
+ if (tag !== 10) {
1196
+ break;
1197
+ }
1198
+ message.trackId = reader.string();
1199
+ continue;
1200
+ }
1201
+ case 2: {
1202
+ if (tag !== 16) {
1203
+ break;
1204
+ }
1205
+ message.variant = reader.int32();
1206
+ continue;
1207
+ }
1208
+ }
1209
+ if ((tag & 7) === 4 || tag === 0) {
1210
+ break;
1211
+ }
1212
+ reader.skip(tag & 7);
1213
+ }
1214
+ return message;
1215
+ },
1216
+ fromJSON(object) {
1217
+ return {
1218
+ trackId: isSet2(object.trackId) ? globalThis.String(object.trackId) : "",
1219
+ variant: isSet2(object.variant) ? variantFromJSON(object.variant) : 0
1220
+ };
1221
+ },
1222
+ toJSON(message) {
1223
+ const obj = {};
1224
+ if (message.trackId !== "") {
1225
+ obj.trackId = message.trackId;
1226
+ }
1227
+ if (message.variant !== 0) {
1228
+ obj.variant = variantToJSON(message.variant);
1229
+ }
1230
+ return obj;
1231
+ },
1232
+ create(base) {
1233
+ return MediaEvent_EnableTrackVariant.fromPartial(base ?? {});
1234
+ },
1235
+ fromPartial(object) {
1236
+ const message = createBaseMediaEvent_EnableTrackVariant();
1237
+ message.trackId = object.trackId ?? "";
1238
+ message.variant = object.variant ?? 0;
1239
+ return message;
1240
+ }
1241
+ };
1242
+ function createBaseMediaEvent_SetTargetTrackVariant() {
1243
+ return { trackId: "", variant: 0 };
1244
+ }
1245
+ var MediaEvent_SetTargetTrackVariant = {
1246
+ encode(message, writer = new BinaryWriter2()) {
1247
+ if (message.trackId !== "") {
1248
+ writer.uint32(10).string(message.trackId);
1249
+ }
1250
+ if (message.variant !== 0) {
1251
+ writer.uint32(16).int32(message.variant);
1252
+ }
1253
+ return writer;
1254
+ },
1255
+ decode(input, length) {
1256
+ const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
1257
+ let end = length === void 0 ? reader.len : reader.pos + length;
1258
+ const message = createBaseMediaEvent_SetTargetTrackVariant();
1259
+ while (reader.pos < end) {
1260
+ const tag = reader.uint32();
1261
+ switch (tag >>> 3) {
1262
+ case 1: {
1263
+ if (tag !== 10) {
1264
+ break;
1265
+ }
1266
+ message.trackId = reader.string();
1267
+ continue;
1268
+ }
1269
+ case 2: {
1270
+ if (tag !== 16) {
1271
+ break;
1272
+ }
1273
+ message.variant = reader.int32();
1274
+ continue;
1275
+ }
1276
+ }
1277
+ if ((tag & 7) === 4 || tag === 0) {
1278
+ break;
1279
+ }
1280
+ reader.skip(tag & 7);
1281
+ }
1282
+ return message;
1283
+ },
1284
+ fromJSON(object) {
1285
+ return {
1286
+ trackId: isSet2(object.trackId) ? globalThis.String(object.trackId) : "",
1287
+ variant: isSet2(object.variant) ? variantFromJSON(object.variant) : 0
1288
+ };
1289
+ },
1290
+ toJSON(message) {
1291
+ const obj = {};
1292
+ if (message.trackId !== "") {
1293
+ obj.trackId = message.trackId;
1294
+ }
1295
+ if (message.variant !== 0) {
1296
+ obj.variant = variantToJSON(message.variant);
1297
+ }
1298
+ return obj;
1299
+ },
1300
+ create(base) {
1301
+ return MediaEvent_SetTargetTrackVariant.fromPartial(base ?? {});
1302
+ },
1303
+ fromPartial(object) {
1304
+ const message = createBaseMediaEvent_SetTargetTrackVariant();
1305
+ message.trackId = object.trackId ?? "";
1306
+ message.variant = object.variant ?? 0;
1307
+ return message;
1308
+ }
1309
+ };
1310
+ function isObject(value) {
1311
+ return typeof value === "object" && value !== null;
1312
+ }
1313
+ function isSet2(value) {
1314
+ return value !== null && value !== void 0;
1315
+ }
1316
+
1317
+ // src/webRTCEndpoint.ts
1318
+ import EventEmitter2 from "events";
1319
+ import { v4 as uuidv4 } from "uuid";
1320
+
1321
+ // src/CommandsQueue.ts
1322
+ var CommandsQueue = class {
1323
+ localTrackManager;
1324
+ connection = null;
1325
+ clearConnectionCallbacks = null;
1326
+ constructor(localTrackManager) {
1327
+ this.localTrackManager = localTrackManager;
1328
+ }
1329
+ initConnection = (connection) => {
1330
+ this.connection = connection;
1331
+ const onSignalingStateChange = () => {
1332
+ if (connection.getConnection().signalingState === "stable") {
1333
+ this.processNextCommand();
1334
+ }
1335
+ };
1336
+ const onIceGatheringStateChange = () => {
1337
+ if (connection.getConnection().iceGatheringState === "complete") {
1338
+ this.processNextCommand();
1339
+ }
1340
+ };
1341
+ const onConnectionStateChange = () => {
1342
+ if (connection.getConnection().connectionState === "connected") {
1343
+ this.processNextCommand();
1344
+ }
1345
+ };
1346
+ const onIceConnectionStateChange = () => {
1347
+ if (connection.getConnection().iceConnectionState === "connected") {
1348
+ this.processNextCommand();
1349
+ }
1350
+ };
1351
+ this.clearConnectionCallbacks = () => {
1352
+ connection.getConnection().removeEventListener("signalingstatechange", onSignalingStateChange);
1353
+ connection.getConnection().removeEventListener("icegatheringstatechange", onIceGatheringStateChange);
1354
+ connection.getConnection().removeEventListener("connectionstatechange", onConnectionStateChange);
1355
+ connection.getConnection().removeEventListener("iceconnectionstatechange", onIceConnectionStateChange);
1356
+ };
1357
+ connection.getConnection().addEventListener("icegatheringstatechange", onIceConnectionStateChange);
1358
+ connection.getConnection().addEventListener("connectionstatechange", onConnectionStateChange);
1359
+ connection.getConnection().addEventListener("iceconnectionstatechange", onIceConnectionStateChange);
1360
+ connection.getConnection().addEventListener("signalingstatechange", onSignalingStateChange);
1361
+ };
1362
+ commandsQueue = [];
1363
+ commandResolutionNotifier = null;
1364
+ pushCommand = (command) => {
1365
+ this.commandsQueue.push(command);
1366
+ this.processNextCommand();
1367
+ };
1368
+ processNextCommand = () => {
1369
+ if (this.localTrackManager.isNegotiationInProgress()) return;
1370
+ if (this.connection?.isConnectionUnstable()) return;
1371
+ this.resolvePreviousCommand();
1372
+ const command = this.commandsQueue.shift();
1373
+ if (!command) return;
1374
+ this.commandResolutionNotifier = command.resolutionNotifier;
1375
+ this.handleCommand(command);
1376
+ };
1377
+ handleCommand = async (command) => {
1378
+ try {
1379
+ command.parse?.();
1380
+ const promise = command.handler();
1381
+ if (command.resolve === "on-handler-resolve") {
1382
+ await promise;
1383
+ this.resolvePreviousCommand();
1384
+ this.processNextCommand();
1385
+ }
1386
+ } catch (error) {
1387
+ this.commandResolutionNotifier?.reject(error);
1388
+ this.commandResolutionNotifier = null;
1389
+ this.processNextCommand();
1390
+ }
1391
+ };
1392
+ resolvePreviousCommand = () => {
1393
+ if (!this.commandResolutionNotifier) return;
1394
+ this.commandResolutionNotifier.resolve();
1395
+ this.commandResolutionNotifier = null;
1396
+ };
1397
+ cleanUp = () => {
1398
+ this.commandResolutionNotifier?.reject("Disconnected");
1399
+ this.commandResolutionNotifier = null;
1400
+ this.commandsQueue = [];
1401
+ this.clearConnectionCallbacks?.();
1402
+ };
1403
+ };
1404
+
1405
+ // src/ConnectionManager.ts
1406
+ var ConnectionManager = class {
1407
+ connection;
1408
+ constructor(iceServers) {
1409
+ this.connection = new RTCPeerConnection({
1410
+ bundlePolicy: "max-bundle",
1411
+ iceServers,
1412
+ iceTransportPolicy: "all"
1413
+ });
1414
+ }
1415
+ isConnectionUnstable = () => {
1416
+ if (!this.connection) return false;
1417
+ const isSignalingUnstable = this.connection.signalingState !== "stable";
1418
+ const isConnectionNotConnected = this.connection.connectionState !== "connected";
1419
+ const isIceNotConnected = this.connection.iceConnectionState !== "connected";
1420
+ return isSignalingUnstable && isConnectionNotConnected && isIceNotConnected;
1421
+ };
1422
+ getConnection = () => {
1423
+ return this.connection;
1424
+ };
1425
+ addTransceiversIfNeeded = (serverTracks) => {
1426
+ const recvTransceivers = this.connection.getTransceivers().filter((elem) => elem.direction === "recvonly");
1427
+ const videoTransceiversAmount = recvTransceivers.filter((elem) => elem.receiver.track.kind === "video").length;
1428
+ const audioTransceiversAmount = recvTransceivers.filter((elem) => elem.receiver.track.kind === "audio").length;
1429
+ const videoNeededTypes = Array(serverTracks.video - videoTransceiversAmount).fill("video");
1430
+ const audioNeededTypes = Array(serverTracks.audio - audioTransceiversAmount).fill("audio");
1431
+ [...videoNeededTypes, ...audioNeededTypes].forEach(
1432
+ (kind) => this.connection.addTransceiver(kind, { direction: "recvonly" })
1433
+ );
1434
+ };
1435
+ addTransceiver = (track, transceiverConfig) => {
1436
+ this.connection.addTransceiver(track, transceiverConfig);
1437
+ };
1438
+ setOnTrackReady = (onTrackReady) => {
1439
+ this.connection.ontrack = onTrackReady;
1440
+ };
1441
+ setRemoteDescription = async (data) => {
1442
+ await this.connection.setRemoteDescription(data);
1443
+ };
1444
+ isTrackInUse = (track) => this.connection.getSenders().some((val) => val.track === track);
1445
+ removeTrack = (sender) => {
1446
+ this.connection.removeTrack(sender);
1447
+ };
1448
+ findSender = (mediaStreamTrackId) => this.connection.getSenders().find((sender) => sender.track && sender.track.id === mediaStreamTrackId);
1449
+ addIceCandidate = async (iceCandidate) => {
1450
+ await this.connection.addIceCandidate(iceCandidate);
1451
+ };
1452
+ };
1453
+
1454
+ // src/deferred.ts
1455
+ var Deferred = class {
1456
+ promise;
1457
+ resolveFn = () => null;
1458
+ rejectFn = () => null;
1459
+ constructor() {
1460
+ this.promise = new Promise((resolve, reject) => {
1461
+ this.resolveFn = resolve;
1462
+ this.rejectFn = reject;
1463
+ });
1464
+ }
1465
+ resolve(value) {
1466
+ this.resolveFn(value);
1467
+ }
1468
+ reject(reason) {
1469
+ this.rejectFn(reason);
1470
+ }
1471
+ };
1472
+
1473
+ // ../protobufs/fishjam/media_events/server/server.ts
1474
+ import { BinaryReader as BinaryReader3, BinaryWriter as BinaryWriter3 } from "@bufbuild/protobuf/wire";
1475
+ function mediaEvent_VadNotification_StatusFromJSON(object) {
1476
+ switch (object) {
1477
+ case 0:
1478
+ case "STATUS_UNSPECIFIED":
1479
+ return 0 /* STATUS_UNSPECIFIED */;
1480
+ case 1:
1481
+ case "STATUS_SILENCE":
1482
+ return 1 /* STATUS_SILENCE */;
1483
+ case 2:
1484
+ case "STATUS_SPEECH":
1485
+ return 2 /* STATUS_SPEECH */;
1486
+ case -1:
1487
+ case "UNRECOGNIZED":
1488
+ default:
1489
+ return -1 /* UNRECOGNIZED */;
1490
+ }
1491
+ }
1492
+ function mediaEvent_VadNotification_StatusToJSON(object) {
1493
+ switch (object) {
1494
+ case 0 /* STATUS_UNSPECIFIED */:
1495
+ return "STATUS_UNSPECIFIED";
1496
+ case 1 /* STATUS_SILENCE */:
1497
+ return "STATUS_SILENCE";
1498
+ case 2 /* STATUS_SPEECH */:
1499
+ return "STATUS_SPEECH";
1500
+ case -1 /* UNRECOGNIZED */:
1501
+ default:
1502
+ return "UNRECOGNIZED";
1503
+ }
1504
+ }
1505
+ function createBaseMediaEvent2() {
1506
+ return {
1507
+ endpointUpdated: void 0,
1508
+ trackUpdated: void 0,
1509
+ tracksAdded: void 0,
1510
+ tracksRemoved: void 0,
1511
+ endpointAdded: void 0,
1512
+ endpointRemoved: void 0,
1513
+ connected: void 0,
1514
+ error: void 0,
1515
+ offerData: void 0,
1516
+ candidate: void 0,
1517
+ sdpAnswer: void 0,
1518
+ vadNotification: void 0,
1519
+ trackVariantSwitched: void 0,
1520
+ trackVariantDisabled: void 0,
1521
+ trackVariantEnabled: void 0
1522
+ };
1523
+ }
1524
+ var MediaEvent2 = {
1525
+ encode(message, writer = new BinaryWriter3()) {
1526
+ if (message.endpointUpdated !== void 0) {
1527
+ MediaEvent_EndpointUpdated.encode(message.endpointUpdated, writer.uint32(10).fork()).join();
1528
+ }
1529
+ if (message.trackUpdated !== void 0) {
1530
+ MediaEvent_TrackUpdated.encode(message.trackUpdated, writer.uint32(18).fork()).join();
1531
+ }
1532
+ if (message.tracksAdded !== void 0) {
1533
+ MediaEvent_TracksAdded.encode(message.tracksAdded, writer.uint32(26).fork()).join();
1534
+ }
1535
+ if (message.tracksRemoved !== void 0) {
1536
+ MediaEvent_TracksRemoved.encode(message.tracksRemoved, writer.uint32(34).fork()).join();
1537
+ }
1538
+ if (message.endpointAdded !== void 0) {
1539
+ MediaEvent_EndpointAdded.encode(message.endpointAdded, writer.uint32(42).fork()).join();
1540
+ }
1541
+ if (message.endpointRemoved !== void 0) {
1542
+ MediaEvent_EndpointRemoved.encode(message.endpointRemoved, writer.uint32(50).fork()).join();
1543
+ }
1544
+ if (message.connected !== void 0) {
1545
+ MediaEvent_Connected.encode(message.connected, writer.uint32(58).fork()).join();
1546
+ }
1547
+ if (message.error !== void 0) {
1548
+ MediaEvent_Error.encode(message.error, writer.uint32(66).fork()).join();
1549
+ }
1550
+ if (message.offerData !== void 0) {
1551
+ MediaEvent_OfferData.encode(message.offerData, writer.uint32(74).fork()).join();
1552
+ }
1553
+ if (message.candidate !== void 0) {
1554
+ Candidate.encode(message.candidate, writer.uint32(82).fork()).join();
1555
+ }
1556
+ if (message.sdpAnswer !== void 0) {
1557
+ MediaEvent_SdpAnswer.encode(message.sdpAnswer, writer.uint32(90).fork()).join();
1558
+ }
1559
+ if (message.vadNotification !== void 0) {
1560
+ MediaEvent_VadNotification.encode(message.vadNotification, writer.uint32(98).fork()).join();
1561
+ }
1562
+ if (message.trackVariantSwitched !== void 0) {
1563
+ MediaEvent_TrackVariantSwitched.encode(message.trackVariantSwitched, writer.uint32(106).fork()).join();
1564
+ }
1565
+ if (message.trackVariantDisabled !== void 0) {
1566
+ MediaEvent_TrackVariantDisabled.encode(message.trackVariantDisabled, writer.uint32(114).fork()).join();
1567
+ }
1568
+ if (message.trackVariantEnabled !== void 0) {
1569
+ MediaEvent_TrackVariantEnabled.encode(message.trackVariantEnabled, writer.uint32(122).fork()).join();
1570
+ }
1571
+ return writer;
1572
+ },
1573
+ decode(input, length) {
1574
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
1575
+ let end = length === void 0 ? reader.len : reader.pos + length;
1576
+ const message = createBaseMediaEvent2();
1577
+ while (reader.pos < end) {
1578
+ const tag = reader.uint32();
1579
+ switch (tag >>> 3) {
1580
+ case 1: {
1581
+ if (tag !== 10) {
1582
+ break;
1583
+ }
1584
+ message.endpointUpdated = MediaEvent_EndpointUpdated.decode(reader, reader.uint32());
1585
+ continue;
1586
+ }
1587
+ case 2: {
1588
+ if (tag !== 18) {
1589
+ break;
1590
+ }
1591
+ message.trackUpdated = MediaEvent_TrackUpdated.decode(reader, reader.uint32());
1592
+ continue;
1593
+ }
1594
+ case 3: {
1595
+ if (tag !== 26) {
1596
+ break;
1597
+ }
1598
+ message.tracksAdded = MediaEvent_TracksAdded.decode(reader, reader.uint32());
1599
+ continue;
1600
+ }
1601
+ case 4: {
1602
+ if (tag !== 34) {
1603
+ break;
1604
+ }
1605
+ message.tracksRemoved = MediaEvent_TracksRemoved.decode(reader, reader.uint32());
1606
+ continue;
1607
+ }
1608
+ case 5: {
1609
+ if (tag !== 42) {
1610
+ break;
1611
+ }
1612
+ message.endpointAdded = MediaEvent_EndpointAdded.decode(reader, reader.uint32());
1613
+ continue;
1614
+ }
1615
+ case 6: {
1616
+ if (tag !== 50) {
1617
+ break;
1618
+ }
1619
+ message.endpointRemoved = MediaEvent_EndpointRemoved.decode(reader, reader.uint32());
1620
+ continue;
1621
+ }
1622
+ case 7: {
1623
+ if (tag !== 58) {
1624
+ break;
1625
+ }
1626
+ message.connected = MediaEvent_Connected.decode(reader, reader.uint32());
1627
+ continue;
1628
+ }
1629
+ case 8: {
1630
+ if (tag !== 66) {
1631
+ break;
1632
+ }
1633
+ message.error = MediaEvent_Error.decode(reader, reader.uint32());
1634
+ continue;
1635
+ }
1636
+ case 9: {
1637
+ if (tag !== 74) {
1638
+ break;
1639
+ }
1640
+ message.offerData = MediaEvent_OfferData.decode(reader, reader.uint32());
1641
+ continue;
1642
+ }
1643
+ case 10: {
1644
+ if (tag !== 82) {
1645
+ break;
1646
+ }
1647
+ message.candidate = Candidate.decode(reader, reader.uint32());
1648
+ continue;
1649
+ }
1650
+ case 11: {
1651
+ if (tag !== 90) {
1652
+ break;
1653
+ }
1654
+ message.sdpAnswer = MediaEvent_SdpAnswer.decode(reader, reader.uint32());
1655
+ continue;
1656
+ }
1657
+ case 12: {
1658
+ if (tag !== 98) {
1659
+ break;
1660
+ }
1661
+ message.vadNotification = MediaEvent_VadNotification.decode(reader, reader.uint32());
1662
+ continue;
1663
+ }
1664
+ case 13: {
1665
+ if (tag !== 106) {
1666
+ break;
1667
+ }
1668
+ message.trackVariantSwitched = MediaEvent_TrackVariantSwitched.decode(reader, reader.uint32());
1669
+ continue;
1670
+ }
1671
+ case 14: {
1672
+ if (tag !== 114) {
1673
+ break;
1674
+ }
1675
+ message.trackVariantDisabled = MediaEvent_TrackVariantDisabled.decode(reader, reader.uint32());
1676
+ continue;
1677
+ }
1678
+ case 15: {
1679
+ if (tag !== 122) {
1680
+ break;
1681
+ }
1682
+ message.trackVariantEnabled = MediaEvent_TrackVariantEnabled.decode(reader, reader.uint32());
1683
+ continue;
1684
+ }
1685
+ }
1686
+ if ((tag & 7) === 4 || tag === 0) {
1687
+ break;
1688
+ }
1689
+ reader.skip(tag & 7);
1690
+ }
1691
+ return message;
1692
+ },
1693
+ fromJSON(object) {
1694
+ return {
1695
+ endpointUpdated: isSet3(object.endpointUpdated) ? MediaEvent_EndpointUpdated.fromJSON(object.endpointUpdated) : void 0,
1696
+ trackUpdated: isSet3(object.trackUpdated) ? MediaEvent_TrackUpdated.fromJSON(object.trackUpdated) : void 0,
1697
+ tracksAdded: isSet3(object.tracksAdded) ? MediaEvent_TracksAdded.fromJSON(object.tracksAdded) : void 0,
1698
+ tracksRemoved: isSet3(object.tracksRemoved) ? MediaEvent_TracksRemoved.fromJSON(object.tracksRemoved) : void 0,
1699
+ endpointAdded: isSet3(object.endpointAdded) ? MediaEvent_EndpointAdded.fromJSON(object.endpointAdded) : void 0,
1700
+ endpointRemoved: isSet3(object.endpointRemoved) ? MediaEvent_EndpointRemoved.fromJSON(object.endpointRemoved) : void 0,
1701
+ connected: isSet3(object.connected) ? MediaEvent_Connected.fromJSON(object.connected) : void 0,
1702
+ error: isSet3(object.error) ? MediaEvent_Error.fromJSON(object.error) : void 0,
1703
+ offerData: isSet3(object.offerData) ? MediaEvent_OfferData.fromJSON(object.offerData) : void 0,
1704
+ candidate: isSet3(object.candidate) ? Candidate.fromJSON(object.candidate) : void 0,
1705
+ sdpAnswer: isSet3(object.sdpAnswer) ? MediaEvent_SdpAnswer.fromJSON(object.sdpAnswer) : void 0,
1706
+ vadNotification: isSet3(object.vadNotification) ? MediaEvent_VadNotification.fromJSON(object.vadNotification) : void 0,
1707
+ trackVariantSwitched: isSet3(object.trackVariantSwitched) ? MediaEvent_TrackVariantSwitched.fromJSON(object.trackVariantSwitched) : void 0,
1708
+ trackVariantDisabled: isSet3(object.trackVariantDisabled) ? MediaEvent_TrackVariantDisabled.fromJSON(object.trackVariantDisabled) : void 0,
1709
+ trackVariantEnabled: isSet3(object.trackVariantEnabled) ? MediaEvent_TrackVariantEnabled.fromJSON(object.trackVariantEnabled) : void 0
1710
+ };
1711
+ },
1712
+ toJSON(message) {
1713
+ const obj = {};
1714
+ if (message.endpointUpdated !== void 0) {
1715
+ obj.endpointUpdated = MediaEvent_EndpointUpdated.toJSON(message.endpointUpdated);
1716
+ }
1717
+ if (message.trackUpdated !== void 0) {
1718
+ obj.trackUpdated = MediaEvent_TrackUpdated.toJSON(message.trackUpdated);
1719
+ }
1720
+ if (message.tracksAdded !== void 0) {
1721
+ obj.tracksAdded = MediaEvent_TracksAdded.toJSON(message.tracksAdded);
1722
+ }
1723
+ if (message.tracksRemoved !== void 0) {
1724
+ obj.tracksRemoved = MediaEvent_TracksRemoved.toJSON(message.tracksRemoved);
1725
+ }
1726
+ if (message.endpointAdded !== void 0) {
1727
+ obj.endpointAdded = MediaEvent_EndpointAdded.toJSON(message.endpointAdded);
1728
+ }
1729
+ if (message.endpointRemoved !== void 0) {
1730
+ obj.endpointRemoved = MediaEvent_EndpointRemoved.toJSON(message.endpointRemoved);
1731
+ }
1732
+ if (message.connected !== void 0) {
1733
+ obj.connected = MediaEvent_Connected.toJSON(message.connected);
1734
+ }
1735
+ if (message.error !== void 0) {
1736
+ obj.error = MediaEvent_Error.toJSON(message.error);
1737
+ }
1738
+ if (message.offerData !== void 0) {
1739
+ obj.offerData = MediaEvent_OfferData.toJSON(message.offerData);
1740
+ }
1741
+ if (message.candidate !== void 0) {
1742
+ obj.candidate = Candidate.toJSON(message.candidate);
1743
+ }
1744
+ if (message.sdpAnswer !== void 0) {
1745
+ obj.sdpAnswer = MediaEvent_SdpAnswer.toJSON(message.sdpAnswer);
1746
+ }
1747
+ if (message.vadNotification !== void 0) {
1748
+ obj.vadNotification = MediaEvent_VadNotification.toJSON(message.vadNotification);
1749
+ }
1750
+ if (message.trackVariantSwitched !== void 0) {
1751
+ obj.trackVariantSwitched = MediaEvent_TrackVariantSwitched.toJSON(message.trackVariantSwitched);
1752
+ }
1753
+ if (message.trackVariantDisabled !== void 0) {
1754
+ obj.trackVariantDisabled = MediaEvent_TrackVariantDisabled.toJSON(message.trackVariantDisabled);
1755
+ }
1756
+ if (message.trackVariantEnabled !== void 0) {
1757
+ obj.trackVariantEnabled = MediaEvent_TrackVariantEnabled.toJSON(message.trackVariantEnabled);
1758
+ }
1759
+ return obj;
1760
+ },
1761
+ create(base) {
1762
+ return MediaEvent2.fromPartial(base ?? {});
1763
+ },
1764
+ fromPartial(object) {
1765
+ const message = createBaseMediaEvent2();
1766
+ message.endpointUpdated = object.endpointUpdated !== void 0 && object.endpointUpdated !== null ? MediaEvent_EndpointUpdated.fromPartial(object.endpointUpdated) : void 0;
1767
+ message.trackUpdated = object.trackUpdated !== void 0 && object.trackUpdated !== null ? MediaEvent_TrackUpdated.fromPartial(object.trackUpdated) : void 0;
1768
+ message.tracksAdded = object.tracksAdded !== void 0 && object.tracksAdded !== null ? MediaEvent_TracksAdded.fromPartial(object.tracksAdded) : void 0;
1769
+ message.tracksRemoved = object.tracksRemoved !== void 0 && object.tracksRemoved !== null ? MediaEvent_TracksRemoved.fromPartial(object.tracksRemoved) : void 0;
1770
+ message.endpointAdded = object.endpointAdded !== void 0 && object.endpointAdded !== null ? MediaEvent_EndpointAdded.fromPartial(object.endpointAdded) : void 0;
1771
+ message.endpointRemoved = object.endpointRemoved !== void 0 && object.endpointRemoved !== null ? MediaEvent_EndpointRemoved.fromPartial(object.endpointRemoved) : void 0;
1772
+ message.connected = object.connected !== void 0 && object.connected !== null ? MediaEvent_Connected.fromPartial(object.connected) : void 0;
1773
+ message.error = object.error !== void 0 && object.error !== null ? MediaEvent_Error.fromPartial(object.error) : void 0;
1774
+ message.offerData = object.offerData !== void 0 && object.offerData !== null ? MediaEvent_OfferData.fromPartial(object.offerData) : void 0;
1775
+ message.candidate = object.candidate !== void 0 && object.candidate !== null ? Candidate.fromPartial(object.candidate) : void 0;
1776
+ message.sdpAnswer = object.sdpAnswer !== void 0 && object.sdpAnswer !== null ? MediaEvent_SdpAnswer.fromPartial(object.sdpAnswer) : void 0;
1777
+ message.vadNotification = object.vadNotification !== void 0 && object.vadNotification !== null ? MediaEvent_VadNotification.fromPartial(object.vadNotification) : void 0;
1778
+ message.trackVariantSwitched = object.trackVariantSwitched !== void 0 && object.trackVariantSwitched !== null ? MediaEvent_TrackVariantSwitched.fromPartial(object.trackVariantSwitched) : void 0;
1779
+ message.trackVariantDisabled = object.trackVariantDisabled !== void 0 && object.trackVariantDisabled !== null ? MediaEvent_TrackVariantDisabled.fromPartial(object.trackVariantDisabled) : void 0;
1780
+ message.trackVariantEnabled = object.trackVariantEnabled !== void 0 && object.trackVariantEnabled !== null ? MediaEvent_TrackVariantEnabled.fromPartial(object.trackVariantEnabled) : void 0;
1781
+ return message;
1782
+ }
1783
+ };
1784
+ function createBaseMediaEvent_Track() {
1785
+ return { metadataJson: "", simulcastConfig: void 0 };
1786
+ }
1787
+ var MediaEvent_Track = {
1788
+ encode(message, writer = new BinaryWriter3()) {
1789
+ if (message.metadataJson !== "") {
1790
+ writer.uint32(10).string(message.metadataJson);
1791
+ }
1792
+ if (message.simulcastConfig !== void 0) {
1793
+ MediaEvent_Track_SimulcastConfig.encode(message.simulcastConfig, writer.uint32(18).fork()).join();
1794
+ }
1795
+ return writer;
1796
+ },
1797
+ decode(input, length) {
1798
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
1799
+ let end = length === void 0 ? reader.len : reader.pos + length;
1800
+ const message = createBaseMediaEvent_Track();
1801
+ while (reader.pos < end) {
1802
+ const tag = reader.uint32();
1803
+ switch (tag >>> 3) {
1804
+ case 1: {
1805
+ if (tag !== 10) {
1806
+ break;
1807
+ }
1808
+ message.metadataJson = reader.string();
1809
+ continue;
1810
+ }
1811
+ case 2: {
1812
+ if (tag !== 18) {
1813
+ break;
1814
+ }
1815
+ message.simulcastConfig = MediaEvent_Track_SimulcastConfig.decode(reader, reader.uint32());
1816
+ continue;
1817
+ }
1818
+ }
1819
+ if ((tag & 7) === 4 || tag === 0) {
1820
+ break;
1821
+ }
1822
+ reader.skip(tag & 7);
1823
+ }
1824
+ return message;
1825
+ },
1826
+ fromJSON(object) {
1827
+ return {
1828
+ metadataJson: isSet3(object.metadataJson) ? globalThis.String(object.metadataJson) : "",
1829
+ simulcastConfig: isSet3(object.simulcastConfig) ? MediaEvent_Track_SimulcastConfig.fromJSON(object.simulcastConfig) : void 0
1830
+ };
1831
+ },
1832
+ toJSON(message) {
1833
+ const obj = {};
1834
+ if (message.metadataJson !== "") {
1835
+ obj.metadataJson = message.metadataJson;
1836
+ }
1837
+ if (message.simulcastConfig !== void 0) {
1838
+ obj.simulcastConfig = MediaEvent_Track_SimulcastConfig.toJSON(message.simulcastConfig);
1839
+ }
1840
+ return obj;
1841
+ },
1842
+ create(base) {
1843
+ return MediaEvent_Track.fromPartial(base ?? {});
1844
+ },
1845
+ fromPartial(object) {
1846
+ const message = createBaseMediaEvent_Track();
1847
+ message.metadataJson = object.metadataJson ?? "";
1848
+ message.simulcastConfig = object.simulcastConfig !== void 0 && object.simulcastConfig !== null ? MediaEvent_Track_SimulcastConfig.fromPartial(object.simulcastConfig) : void 0;
1849
+ return message;
1850
+ }
1851
+ };
1852
+ function createBaseMediaEvent_Track_SimulcastConfig() {
1853
+ return { enabled: false, enabledVariants: [], disabledVariants: [] };
1854
+ }
1855
+ var MediaEvent_Track_SimulcastConfig = {
1856
+ encode(message, writer = new BinaryWriter3()) {
1857
+ if (message.enabled !== false) {
1858
+ writer.uint32(8).bool(message.enabled);
1859
+ }
1860
+ writer.uint32(18).fork();
1861
+ for (const v of message.enabledVariants) {
1862
+ writer.int32(v);
1863
+ }
1864
+ writer.join();
1865
+ writer.uint32(26).fork();
1866
+ for (const v of message.disabledVariants) {
1867
+ writer.int32(v);
1868
+ }
1869
+ writer.join();
1870
+ return writer;
1871
+ },
1872
+ decode(input, length) {
1873
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
1874
+ let end = length === void 0 ? reader.len : reader.pos + length;
1875
+ const message = createBaseMediaEvent_Track_SimulcastConfig();
1876
+ while (reader.pos < end) {
1877
+ const tag = reader.uint32();
1878
+ switch (tag >>> 3) {
1879
+ case 1: {
1880
+ if (tag !== 8) {
1881
+ break;
1882
+ }
1883
+ message.enabled = reader.bool();
1884
+ continue;
1885
+ }
1886
+ case 2: {
1887
+ if (tag === 16) {
1888
+ message.enabledVariants.push(reader.int32());
1889
+ continue;
1890
+ }
1891
+ if (tag === 18) {
1892
+ const end2 = reader.uint32() + reader.pos;
1893
+ while (reader.pos < end2) {
1894
+ message.enabledVariants.push(reader.int32());
1895
+ }
1896
+ continue;
1897
+ }
1898
+ break;
1899
+ }
1900
+ case 3: {
1901
+ if (tag === 24) {
1902
+ message.disabledVariants.push(reader.int32());
1903
+ continue;
1904
+ }
1905
+ if (tag === 26) {
1906
+ const end2 = reader.uint32() + reader.pos;
1907
+ while (reader.pos < end2) {
1908
+ message.disabledVariants.push(reader.int32());
1909
+ }
1910
+ continue;
1911
+ }
1912
+ break;
1913
+ }
1914
+ }
1915
+ if ((tag & 7) === 4 || tag === 0) {
1916
+ break;
1917
+ }
1918
+ reader.skip(tag & 7);
1919
+ }
1920
+ return message;
1921
+ },
1922
+ fromJSON(object) {
1923
+ return {
1924
+ enabled: isSet3(object.enabled) ? globalThis.Boolean(object.enabled) : false,
1925
+ enabledVariants: globalThis.Array.isArray(object?.enabledVariants) ? object.enabledVariants.map((e) => variantFromJSON(e)) : [],
1926
+ disabledVariants: globalThis.Array.isArray(object?.disabledVariants) ? object.disabledVariants.map((e) => variantFromJSON(e)) : []
1927
+ };
1928
+ },
1929
+ toJSON(message) {
1930
+ const obj = {};
1931
+ if (message.enabled !== false) {
1932
+ obj.enabled = message.enabled;
1933
+ }
1934
+ if (message.enabledVariants?.length) {
1935
+ obj.enabledVariants = message.enabledVariants.map((e) => variantToJSON(e));
1936
+ }
1937
+ if (message.disabledVariants?.length) {
1938
+ obj.disabledVariants = message.disabledVariants.map((e) => variantToJSON(e));
1939
+ }
1940
+ return obj;
1941
+ },
1942
+ create(base) {
1943
+ return MediaEvent_Track_SimulcastConfig.fromPartial(base ?? {});
1944
+ },
1945
+ fromPartial(object) {
1946
+ const message = createBaseMediaEvent_Track_SimulcastConfig();
1947
+ message.enabled = object.enabled ?? false;
1948
+ message.enabledVariants = object.enabledVariants?.map((e) => e) || [];
1949
+ message.disabledVariants = object.disabledVariants?.map((e) => e) || [];
1950
+ return message;
1951
+ }
1952
+ };
1953
+ function createBaseMediaEvent_Endpoint() {
1954
+ return { endpointType: "", metadataJson: "", trackIdToTrack: {} };
1955
+ }
1956
+ var MediaEvent_Endpoint = {
1957
+ encode(message, writer = new BinaryWriter3()) {
1958
+ if (message.endpointType !== "") {
1959
+ writer.uint32(18).string(message.endpointType);
1960
+ }
1961
+ if (message.metadataJson !== "") {
1962
+ writer.uint32(26).string(message.metadataJson);
1963
+ }
1964
+ Object.entries(message.trackIdToTrack).forEach(([key, value]) => {
1965
+ MediaEvent_Endpoint_TrackIdToTrackEntry.encode({ key, value }, writer.uint32(34).fork()).join();
1966
+ });
1967
+ return writer;
1968
+ },
1969
+ decode(input, length) {
1970
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
1971
+ let end = length === void 0 ? reader.len : reader.pos + length;
1972
+ const message = createBaseMediaEvent_Endpoint();
1973
+ while (reader.pos < end) {
1974
+ const tag = reader.uint32();
1975
+ switch (tag >>> 3) {
1976
+ case 2: {
1977
+ if (tag !== 18) {
1978
+ break;
1979
+ }
1980
+ message.endpointType = reader.string();
1981
+ continue;
1982
+ }
1983
+ case 3: {
1984
+ if (tag !== 26) {
1985
+ break;
1986
+ }
1987
+ message.metadataJson = reader.string();
1988
+ continue;
1989
+ }
1990
+ case 4: {
1991
+ if (tag !== 34) {
1992
+ break;
1993
+ }
1994
+ const entry4 = MediaEvent_Endpoint_TrackIdToTrackEntry.decode(reader, reader.uint32());
1995
+ if (entry4.value !== void 0) {
1996
+ message.trackIdToTrack[entry4.key] = entry4.value;
1997
+ }
1998
+ continue;
1999
+ }
2000
+ }
2001
+ if ((tag & 7) === 4 || tag === 0) {
2002
+ break;
2003
+ }
2004
+ reader.skip(tag & 7);
2005
+ }
2006
+ return message;
2007
+ },
2008
+ fromJSON(object) {
2009
+ return {
2010
+ endpointType: isSet3(object.endpointType) ? globalThis.String(object.endpointType) : "",
2011
+ metadataJson: isSet3(object.metadataJson) ? globalThis.String(object.metadataJson) : "",
2012
+ trackIdToTrack: isObject2(object.trackIdToTrack) ? Object.entries(object.trackIdToTrack).reduce((acc, [key, value]) => {
2013
+ acc[key] = MediaEvent_Track.fromJSON(value);
2014
+ return acc;
2015
+ }, {}) : {}
2016
+ };
2017
+ },
2018
+ toJSON(message) {
2019
+ const obj = {};
2020
+ if (message.endpointType !== "") {
2021
+ obj.endpointType = message.endpointType;
2022
+ }
2023
+ if (message.metadataJson !== "") {
2024
+ obj.metadataJson = message.metadataJson;
2025
+ }
2026
+ if (message.trackIdToTrack) {
2027
+ const entries = Object.entries(message.trackIdToTrack);
2028
+ if (entries.length > 0) {
2029
+ obj.trackIdToTrack = {};
2030
+ entries.forEach(([k, v]) => {
2031
+ obj.trackIdToTrack[k] = MediaEvent_Track.toJSON(v);
2032
+ });
2033
+ }
2034
+ }
2035
+ return obj;
2036
+ },
2037
+ create(base) {
2038
+ return MediaEvent_Endpoint.fromPartial(base ?? {});
2039
+ },
2040
+ fromPartial(object) {
2041
+ const message = createBaseMediaEvent_Endpoint();
2042
+ message.endpointType = object.endpointType ?? "";
2043
+ message.metadataJson = object.metadataJson ?? "";
2044
+ message.trackIdToTrack = Object.entries(object.trackIdToTrack ?? {}).reduce(
2045
+ (acc, [key, value]) => {
2046
+ if (value !== void 0) {
2047
+ acc[key] = MediaEvent_Track.fromPartial(value);
2048
+ }
2049
+ return acc;
2050
+ },
2051
+ {}
2052
+ );
2053
+ return message;
2054
+ }
2055
+ };
2056
+ function createBaseMediaEvent_Endpoint_TrackIdToTrackEntry() {
2057
+ return { key: "", value: void 0 };
2058
+ }
2059
+ var MediaEvent_Endpoint_TrackIdToTrackEntry = {
2060
+ encode(message, writer = new BinaryWriter3()) {
2061
+ if (message.key !== "") {
2062
+ writer.uint32(10).string(message.key);
2063
+ }
2064
+ if (message.value !== void 0) {
2065
+ MediaEvent_Track.encode(message.value, writer.uint32(18).fork()).join();
2066
+ }
2067
+ return writer;
2068
+ },
2069
+ decode(input, length) {
2070
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
2071
+ let end = length === void 0 ? reader.len : reader.pos + length;
2072
+ const message = createBaseMediaEvent_Endpoint_TrackIdToTrackEntry();
2073
+ while (reader.pos < end) {
2074
+ const tag = reader.uint32();
2075
+ switch (tag >>> 3) {
2076
+ case 1: {
2077
+ if (tag !== 10) {
2078
+ break;
2079
+ }
2080
+ message.key = reader.string();
2081
+ continue;
2082
+ }
2083
+ case 2: {
2084
+ if (tag !== 18) {
2085
+ break;
2086
+ }
2087
+ message.value = MediaEvent_Track.decode(reader, reader.uint32());
2088
+ continue;
2089
+ }
2090
+ }
2091
+ if ((tag & 7) === 4 || tag === 0) {
2092
+ break;
2093
+ }
2094
+ reader.skip(tag & 7);
2095
+ }
2096
+ return message;
2097
+ },
2098
+ fromJSON(object) {
2099
+ return {
2100
+ key: isSet3(object.key) ? globalThis.String(object.key) : "",
2101
+ value: isSet3(object.value) ? MediaEvent_Track.fromJSON(object.value) : void 0
2102
+ };
2103
+ },
2104
+ toJSON(message) {
2105
+ const obj = {};
2106
+ if (message.key !== "") {
2107
+ obj.key = message.key;
2108
+ }
2109
+ if (message.value !== void 0) {
2110
+ obj.value = MediaEvent_Track.toJSON(message.value);
2111
+ }
2112
+ return obj;
2113
+ },
2114
+ create(base) {
2115
+ return MediaEvent_Endpoint_TrackIdToTrackEntry.fromPartial(base ?? {});
2116
+ },
2117
+ fromPartial(object) {
2118
+ const message = createBaseMediaEvent_Endpoint_TrackIdToTrackEntry();
2119
+ message.key = object.key ?? "";
2120
+ message.value = object.value !== void 0 && object.value !== null ? MediaEvent_Track.fromPartial(object.value) : void 0;
2121
+ return message;
2122
+ }
2123
+ };
2124
+ function createBaseMediaEvent_IceServer() {
2125
+ return { credential: "", urls: [], username: "" };
2126
+ }
2127
+ var MediaEvent_IceServer = {
2128
+ encode(message, writer = new BinaryWriter3()) {
2129
+ if (message.credential !== "") {
2130
+ writer.uint32(10).string(message.credential);
2131
+ }
2132
+ for (const v of message.urls) {
2133
+ writer.uint32(18).string(v);
2134
+ }
2135
+ if (message.username !== "") {
2136
+ writer.uint32(26).string(message.username);
2137
+ }
2138
+ return writer;
2139
+ },
2140
+ decode(input, length) {
2141
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
2142
+ let end = length === void 0 ? reader.len : reader.pos + length;
2143
+ const message = createBaseMediaEvent_IceServer();
2144
+ while (reader.pos < end) {
2145
+ const tag = reader.uint32();
2146
+ switch (tag >>> 3) {
2147
+ case 1: {
2148
+ if (tag !== 10) {
2149
+ break;
2150
+ }
2151
+ message.credential = reader.string();
2152
+ continue;
2153
+ }
2154
+ case 2: {
2155
+ if (tag !== 18) {
2156
+ break;
2157
+ }
2158
+ message.urls.push(reader.string());
2159
+ continue;
2160
+ }
2161
+ case 3: {
2162
+ if (tag !== 26) {
2163
+ break;
2164
+ }
2165
+ message.username = reader.string();
2166
+ continue;
2167
+ }
2168
+ }
2169
+ if ((tag & 7) === 4 || tag === 0) {
2170
+ break;
2171
+ }
2172
+ reader.skip(tag & 7);
2173
+ }
2174
+ return message;
2175
+ },
2176
+ fromJSON(object) {
2177
+ return {
2178
+ credential: isSet3(object.credential) ? globalThis.String(object.credential) : "",
2179
+ urls: globalThis.Array.isArray(object?.urls) ? object.urls.map((e) => globalThis.String(e)) : [],
2180
+ username: isSet3(object.username) ? globalThis.String(object.username) : ""
2181
+ };
2182
+ },
2183
+ toJSON(message) {
2184
+ const obj = {};
2185
+ if (message.credential !== "") {
2186
+ obj.credential = message.credential;
2187
+ }
2188
+ if (message.urls?.length) {
2189
+ obj.urls = message.urls;
2190
+ }
2191
+ if (message.username !== "") {
2192
+ obj.username = message.username;
2193
+ }
2194
+ return obj;
2195
+ },
2196
+ create(base) {
2197
+ return MediaEvent_IceServer.fromPartial(base ?? {});
2198
+ },
2199
+ fromPartial(object) {
2200
+ const message = createBaseMediaEvent_IceServer();
2201
+ message.credential = object.credential ?? "";
2202
+ message.urls = object.urls?.map((e) => e) || [];
2203
+ message.username = object.username ?? "";
2204
+ return message;
2205
+ }
2206
+ };
2207
+ function createBaseMediaEvent_EndpointUpdated() {
2208
+ return { endpointId: "", metadataJson: "" };
2209
+ }
2210
+ var MediaEvent_EndpointUpdated = {
2211
+ encode(message, writer = new BinaryWriter3()) {
2212
+ if (message.endpointId !== "") {
2213
+ writer.uint32(10).string(message.endpointId);
2214
+ }
2215
+ if (message.metadataJson !== "") {
2216
+ writer.uint32(18).string(message.metadataJson);
2217
+ }
2218
+ return writer;
2219
+ },
2220
+ decode(input, length) {
2221
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
2222
+ let end = length === void 0 ? reader.len : reader.pos + length;
2223
+ const message = createBaseMediaEvent_EndpointUpdated();
2224
+ while (reader.pos < end) {
2225
+ const tag = reader.uint32();
2226
+ switch (tag >>> 3) {
2227
+ case 1: {
2228
+ if (tag !== 10) {
2229
+ break;
2230
+ }
2231
+ message.endpointId = reader.string();
2232
+ continue;
2233
+ }
2234
+ case 2: {
2235
+ if (tag !== 18) {
2236
+ break;
2237
+ }
2238
+ message.metadataJson = reader.string();
2239
+ continue;
2240
+ }
2241
+ }
2242
+ if ((tag & 7) === 4 || tag === 0) {
2243
+ break;
2244
+ }
2245
+ reader.skip(tag & 7);
2246
+ }
2247
+ return message;
2248
+ },
2249
+ fromJSON(object) {
2250
+ return {
2251
+ endpointId: isSet3(object.endpointId) ? globalThis.String(object.endpointId) : "",
2252
+ metadataJson: isSet3(object.metadataJson) ? globalThis.String(object.metadataJson) : ""
2253
+ };
2254
+ },
2255
+ toJSON(message) {
2256
+ const obj = {};
2257
+ if (message.endpointId !== "") {
2258
+ obj.endpointId = message.endpointId;
2259
+ }
2260
+ if (message.metadataJson !== "") {
2261
+ obj.metadataJson = message.metadataJson;
2262
+ }
2263
+ return obj;
2264
+ },
2265
+ create(base) {
2266
+ return MediaEvent_EndpointUpdated.fromPartial(base ?? {});
2267
+ },
2268
+ fromPartial(object) {
2269
+ const message = createBaseMediaEvent_EndpointUpdated();
2270
+ message.endpointId = object.endpointId ?? "";
2271
+ message.metadataJson = object.metadataJson ?? "";
2272
+ return message;
2273
+ }
2274
+ };
2275
+ function createBaseMediaEvent_TrackUpdated() {
2276
+ return { endpointId: "", trackId: "", metadataJson: "" };
2277
+ }
2278
+ var MediaEvent_TrackUpdated = {
2279
+ encode(message, writer = new BinaryWriter3()) {
2280
+ if (message.endpointId !== "") {
2281
+ writer.uint32(10).string(message.endpointId);
2282
+ }
2283
+ if (message.trackId !== "") {
2284
+ writer.uint32(18).string(message.trackId);
2285
+ }
2286
+ if (message.metadataJson !== "") {
2287
+ writer.uint32(26).string(message.metadataJson);
2288
+ }
2289
+ return writer;
2290
+ },
2291
+ decode(input, length) {
2292
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
2293
+ let end = length === void 0 ? reader.len : reader.pos + length;
2294
+ const message = createBaseMediaEvent_TrackUpdated();
2295
+ while (reader.pos < end) {
2296
+ const tag = reader.uint32();
2297
+ switch (tag >>> 3) {
2298
+ case 1: {
2299
+ if (tag !== 10) {
2300
+ break;
2301
+ }
2302
+ message.endpointId = reader.string();
2303
+ continue;
2304
+ }
2305
+ case 2: {
2306
+ if (tag !== 18) {
2307
+ break;
2308
+ }
2309
+ message.trackId = reader.string();
2310
+ continue;
2311
+ }
2312
+ case 3: {
2313
+ if (tag !== 26) {
2314
+ break;
2315
+ }
2316
+ message.metadataJson = reader.string();
2317
+ continue;
2318
+ }
2319
+ }
2320
+ if ((tag & 7) === 4 || tag === 0) {
2321
+ break;
2322
+ }
2323
+ reader.skip(tag & 7);
2324
+ }
2325
+ return message;
2326
+ },
2327
+ fromJSON(object) {
2328
+ return {
2329
+ endpointId: isSet3(object.endpointId) ? globalThis.String(object.endpointId) : "",
2330
+ trackId: isSet3(object.trackId) ? globalThis.String(object.trackId) : "",
2331
+ metadataJson: isSet3(object.metadataJson) ? globalThis.String(object.metadataJson) : ""
2332
+ };
2333
+ },
2334
+ toJSON(message) {
2335
+ const obj = {};
2336
+ if (message.endpointId !== "") {
2337
+ obj.endpointId = message.endpointId;
2338
+ }
2339
+ if (message.trackId !== "") {
2340
+ obj.trackId = message.trackId;
2341
+ }
2342
+ if (message.metadataJson !== "") {
2343
+ obj.metadataJson = message.metadataJson;
2344
+ }
2345
+ return obj;
2346
+ },
2347
+ create(base) {
2348
+ return MediaEvent_TrackUpdated.fromPartial(base ?? {});
2349
+ },
2350
+ fromPartial(object) {
2351
+ const message = createBaseMediaEvent_TrackUpdated();
2352
+ message.endpointId = object.endpointId ?? "";
2353
+ message.trackId = object.trackId ?? "";
2354
+ message.metadataJson = object.metadataJson ?? "";
2355
+ return message;
2356
+ }
2357
+ };
2358
+ function createBaseMediaEvent_TracksAdded() {
2359
+ return { endpointId: "", trackIdToTrack: {} };
2360
+ }
2361
+ var MediaEvent_TracksAdded = {
2362
+ encode(message, writer = new BinaryWriter3()) {
2363
+ if (message.endpointId !== "") {
2364
+ writer.uint32(10).string(message.endpointId);
2365
+ }
2366
+ Object.entries(message.trackIdToTrack).forEach(([key, value]) => {
2367
+ MediaEvent_TracksAdded_TrackIdToTrackEntry.encode({ key, value }, writer.uint32(18).fork()).join();
2368
+ });
2369
+ return writer;
2370
+ },
2371
+ decode(input, length) {
2372
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
2373
+ let end = length === void 0 ? reader.len : reader.pos + length;
2374
+ const message = createBaseMediaEvent_TracksAdded();
2375
+ while (reader.pos < end) {
2376
+ const tag = reader.uint32();
2377
+ switch (tag >>> 3) {
2378
+ case 1: {
2379
+ if (tag !== 10) {
2380
+ break;
2381
+ }
2382
+ message.endpointId = reader.string();
2383
+ continue;
2384
+ }
2385
+ case 2: {
2386
+ if (tag !== 18) {
2387
+ break;
2388
+ }
2389
+ const entry2 = MediaEvent_TracksAdded_TrackIdToTrackEntry.decode(reader, reader.uint32());
2390
+ if (entry2.value !== void 0) {
2391
+ message.trackIdToTrack[entry2.key] = entry2.value;
2392
+ }
2393
+ continue;
2394
+ }
2395
+ }
2396
+ if ((tag & 7) === 4 || tag === 0) {
2397
+ break;
2398
+ }
2399
+ reader.skip(tag & 7);
2400
+ }
2401
+ return message;
2402
+ },
2403
+ fromJSON(object) {
2404
+ return {
2405
+ endpointId: isSet3(object.endpointId) ? globalThis.String(object.endpointId) : "",
2406
+ trackIdToTrack: isObject2(object.trackIdToTrack) ? Object.entries(object.trackIdToTrack).reduce((acc, [key, value]) => {
2407
+ acc[key] = MediaEvent_Track.fromJSON(value);
2408
+ return acc;
2409
+ }, {}) : {}
2410
+ };
2411
+ },
2412
+ toJSON(message) {
2413
+ const obj = {};
2414
+ if (message.endpointId !== "") {
2415
+ obj.endpointId = message.endpointId;
2416
+ }
2417
+ if (message.trackIdToTrack) {
2418
+ const entries = Object.entries(message.trackIdToTrack);
2419
+ if (entries.length > 0) {
2420
+ obj.trackIdToTrack = {};
2421
+ entries.forEach(([k, v]) => {
2422
+ obj.trackIdToTrack[k] = MediaEvent_Track.toJSON(v);
2423
+ });
2424
+ }
2425
+ }
2426
+ return obj;
2427
+ },
2428
+ create(base) {
2429
+ return MediaEvent_TracksAdded.fromPartial(base ?? {});
2430
+ },
2431
+ fromPartial(object) {
2432
+ const message = createBaseMediaEvent_TracksAdded();
2433
+ message.endpointId = object.endpointId ?? "";
2434
+ message.trackIdToTrack = Object.entries(object.trackIdToTrack ?? {}).reduce(
2435
+ (acc, [key, value]) => {
2436
+ if (value !== void 0) {
2437
+ acc[key] = MediaEvent_Track.fromPartial(value);
2438
+ }
2439
+ return acc;
2440
+ },
2441
+ {}
2442
+ );
2443
+ return message;
2444
+ }
2445
+ };
2446
+ function createBaseMediaEvent_TracksAdded_TrackIdToTrackEntry() {
2447
+ return { key: "", value: void 0 };
2448
+ }
2449
+ var MediaEvent_TracksAdded_TrackIdToTrackEntry = {
2450
+ encode(message, writer = new BinaryWriter3()) {
2451
+ if (message.key !== "") {
2452
+ writer.uint32(10).string(message.key);
2453
+ }
2454
+ if (message.value !== void 0) {
2455
+ MediaEvent_Track.encode(message.value, writer.uint32(18).fork()).join();
2456
+ }
2457
+ return writer;
2458
+ },
2459
+ decode(input, length) {
2460
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
2461
+ let end = length === void 0 ? reader.len : reader.pos + length;
2462
+ const message = createBaseMediaEvent_TracksAdded_TrackIdToTrackEntry();
2463
+ while (reader.pos < end) {
2464
+ const tag = reader.uint32();
2465
+ switch (tag >>> 3) {
2466
+ case 1: {
2467
+ if (tag !== 10) {
2468
+ break;
2469
+ }
2470
+ message.key = reader.string();
2471
+ continue;
2472
+ }
2473
+ case 2: {
2474
+ if (tag !== 18) {
2475
+ break;
2476
+ }
2477
+ message.value = MediaEvent_Track.decode(reader, reader.uint32());
2478
+ continue;
2479
+ }
2480
+ }
2481
+ if ((tag & 7) === 4 || tag === 0) {
2482
+ break;
2483
+ }
2484
+ reader.skip(tag & 7);
2485
+ }
2486
+ return message;
2487
+ },
2488
+ fromJSON(object) {
2489
+ return {
2490
+ key: isSet3(object.key) ? globalThis.String(object.key) : "",
2491
+ value: isSet3(object.value) ? MediaEvent_Track.fromJSON(object.value) : void 0
2492
+ };
2493
+ },
2494
+ toJSON(message) {
2495
+ const obj = {};
2496
+ if (message.key !== "") {
2497
+ obj.key = message.key;
2498
+ }
2499
+ if (message.value !== void 0) {
2500
+ obj.value = MediaEvent_Track.toJSON(message.value);
2501
+ }
2502
+ return obj;
2503
+ },
2504
+ create(base) {
2505
+ return MediaEvent_TracksAdded_TrackIdToTrackEntry.fromPartial(base ?? {});
2506
+ },
2507
+ fromPartial(object) {
2508
+ const message = createBaseMediaEvent_TracksAdded_TrackIdToTrackEntry();
2509
+ message.key = object.key ?? "";
2510
+ message.value = object.value !== void 0 && object.value !== null ? MediaEvent_Track.fromPartial(object.value) : void 0;
2511
+ return message;
2512
+ }
2513
+ };
2514
+ function createBaseMediaEvent_TracksRemoved() {
2515
+ return { endpointId: "", trackIds: [] };
2516
+ }
2517
+ var MediaEvent_TracksRemoved = {
2518
+ encode(message, writer = new BinaryWriter3()) {
2519
+ if (message.endpointId !== "") {
2520
+ writer.uint32(10).string(message.endpointId);
2521
+ }
2522
+ for (const v of message.trackIds) {
2523
+ writer.uint32(18).string(v);
2524
+ }
2525
+ return writer;
2526
+ },
2527
+ decode(input, length) {
2528
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
2529
+ let end = length === void 0 ? reader.len : reader.pos + length;
2530
+ const message = createBaseMediaEvent_TracksRemoved();
2531
+ while (reader.pos < end) {
2532
+ const tag = reader.uint32();
2533
+ switch (tag >>> 3) {
2534
+ case 1: {
2535
+ if (tag !== 10) {
2536
+ break;
2537
+ }
2538
+ message.endpointId = reader.string();
2539
+ continue;
2540
+ }
2541
+ case 2: {
2542
+ if (tag !== 18) {
2543
+ break;
2544
+ }
2545
+ message.trackIds.push(reader.string());
2546
+ continue;
2547
+ }
2548
+ }
2549
+ if ((tag & 7) === 4 || tag === 0) {
2550
+ break;
2551
+ }
2552
+ reader.skip(tag & 7);
2553
+ }
2554
+ return message;
2555
+ },
2556
+ fromJSON(object) {
2557
+ return {
2558
+ endpointId: isSet3(object.endpointId) ? globalThis.String(object.endpointId) : "",
2559
+ trackIds: globalThis.Array.isArray(object?.trackIds) ? object.trackIds.map((e) => globalThis.String(e)) : []
2560
+ };
2561
+ },
2562
+ toJSON(message) {
2563
+ const obj = {};
2564
+ if (message.endpointId !== "") {
2565
+ obj.endpointId = message.endpointId;
2566
+ }
2567
+ if (message.trackIds?.length) {
2568
+ obj.trackIds = message.trackIds;
2569
+ }
2570
+ return obj;
2571
+ },
2572
+ create(base) {
2573
+ return MediaEvent_TracksRemoved.fromPartial(base ?? {});
2574
+ },
2575
+ fromPartial(object) {
2576
+ const message = createBaseMediaEvent_TracksRemoved();
2577
+ message.endpointId = object.endpointId ?? "";
2578
+ message.trackIds = object.trackIds?.map((e) => e) || [];
2579
+ return message;
2580
+ }
2581
+ };
2582
+ function createBaseMediaEvent_EndpointAdded() {
2583
+ return { endpointId: "", metadataJson: "" };
2584
+ }
2585
+ var MediaEvent_EndpointAdded = {
2586
+ encode(message, writer = new BinaryWriter3()) {
2587
+ if (message.endpointId !== "") {
2588
+ writer.uint32(10).string(message.endpointId);
2589
+ }
2590
+ if (message.metadataJson !== "") {
2591
+ writer.uint32(18).string(message.metadataJson);
2592
+ }
2593
+ return writer;
2594
+ },
2595
+ decode(input, length) {
2596
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
2597
+ let end = length === void 0 ? reader.len : reader.pos + length;
2598
+ const message = createBaseMediaEvent_EndpointAdded();
2599
+ while (reader.pos < end) {
2600
+ const tag = reader.uint32();
2601
+ switch (tag >>> 3) {
2602
+ case 1: {
2603
+ if (tag !== 10) {
2604
+ break;
2605
+ }
2606
+ message.endpointId = reader.string();
2607
+ continue;
2608
+ }
2609
+ case 2: {
2610
+ if (tag !== 18) {
2611
+ break;
2612
+ }
2613
+ message.metadataJson = reader.string();
2614
+ continue;
2615
+ }
2616
+ }
2617
+ if ((tag & 7) === 4 || tag === 0) {
2618
+ break;
2619
+ }
2620
+ reader.skip(tag & 7);
2621
+ }
2622
+ return message;
2623
+ },
2624
+ fromJSON(object) {
2625
+ return {
2626
+ endpointId: isSet3(object.endpointId) ? globalThis.String(object.endpointId) : "",
2627
+ metadataJson: isSet3(object.metadataJson) ? globalThis.String(object.metadataJson) : ""
2628
+ };
2629
+ },
2630
+ toJSON(message) {
2631
+ const obj = {};
2632
+ if (message.endpointId !== "") {
2633
+ obj.endpointId = message.endpointId;
2634
+ }
2635
+ if (message.metadataJson !== "") {
2636
+ obj.metadataJson = message.metadataJson;
2637
+ }
2638
+ return obj;
2639
+ },
2640
+ create(base) {
2641
+ return MediaEvent_EndpointAdded.fromPartial(base ?? {});
2642
+ },
2643
+ fromPartial(object) {
2644
+ const message = createBaseMediaEvent_EndpointAdded();
2645
+ message.endpointId = object.endpointId ?? "";
2646
+ message.metadataJson = object.metadataJson ?? "";
2647
+ return message;
2648
+ }
2649
+ };
2650
+ function createBaseMediaEvent_Connected() {
2651
+ return { endpointId: "", endpointIdToEndpoint: {}, iceServers: [] };
2652
+ }
2653
+ var MediaEvent_Connected = {
2654
+ encode(message, writer = new BinaryWriter3()) {
2655
+ if (message.endpointId !== "") {
2656
+ writer.uint32(10).string(message.endpointId);
2657
+ }
2658
+ Object.entries(message.endpointIdToEndpoint).forEach(([key, value]) => {
2659
+ MediaEvent_Connected_EndpointIdToEndpointEntry.encode({ key, value }, writer.uint32(18).fork()).join();
2660
+ });
2661
+ for (const v of message.iceServers) {
2662
+ MediaEvent_IceServer.encode(v, writer.uint32(26).fork()).join();
2663
+ }
2664
+ return writer;
2665
+ },
2666
+ decode(input, length) {
2667
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
2668
+ let end = length === void 0 ? reader.len : reader.pos + length;
2669
+ const message = createBaseMediaEvent_Connected();
2670
+ while (reader.pos < end) {
2671
+ const tag = reader.uint32();
2672
+ switch (tag >>> 3) {
2673
+ case 1: {
2674
+ if (tag !== 10) {
2675
+ break;
2676
+ }
2677
+ message.endpointId = reader.string();
2678
+ continue;
2679
+ }
2680
+ case 2: {
2681
+ if (tag !== 18) {
2682
+ break;
2683
+ }
2684
+ const entry2 = MediaEvent_Connected_EndpointIdToEndpointEntry.decode(reader, reader.uint32());
2685
+ if (entry2.value !== void 0) {
2686
+ message.endpointIdToEndpoint[entry2.key] = entry2.value;
2687
+ }
2688
+ continue;
2689
+ }
2690
+ case 3: {
2691
+ if (tag !== 26) {
2692
+ break;
2693
+ }
2694
+ message.iceServers.push(MediaEvent_IceServer.decode(reader, reader.uint32()));
2695
+ continue;
2696
+ }
2697
+ }
2698
+ if ((tag & 7) === 4 || tag === 0) {
2699
+ break;
2700
+ }
2701
+ reader.skip(tag & 7);
2702
+ }
2703
+ return message;
2704
+ },
2705
+ fromJSON(object) {
2706
+ return {
2707
+ endpointId: isSet3(object.endpointId) ? globalThis.String(object.endpointId) : "",
2708
+ endpointIdToEndpoint: isObject2(object.endpointIdToEndpoint) ? Object.entries(object.endpointIdToEndpoint).reduce(
2709
+ (acc, [key, value]) => {
2710
+ acc[key] = MediaEvent_Endpoint.fromJSON(value);
2711
+ return acc;
2712
+ },
2713
+ {}
2714
+ ) : {},
2715
+ iceServers: globalThis.Array.isArray(object?.iceServers) ? object.iceServers.map((e) => MediaEvent_IceServer.fromJSON(e)) : []
2716
+ };
2717
+ },
2718
+ toJSON(message) {
2719
+ const obj = {};
2720
+ if (message.endpointId !== "") {
2721
+ obj.endpointId = message.endpointId;
2722
+ }
2723
+ if (message.endpointIdToEndpoint) {
2724
+ const entries = Object.entries(message.endpointIdToEndpoint);
2725
+ if (entries.length > 0) {
2726
+ obj.endpointIdToEndpoint = {};
2727
+ entries.forEach(([k, v]) => {
2728
+ obj.endpointIdToEndpoint[k] = MediaEvent_Endpoint.toJSON(v);
2729
+ });
2730
+ }
2731
+ }
2732
+ if (message.iceServers?.length) {
2733
+ obj.iceServers = message.iceServers.map((e) => MediaEvent_IceServer.toJSON(e));
2734
+ }
2735
+ return obj;
2736
+ },
2737
+ create(base) {
2738
+ return MediaEvent_Connected.fromPartial(base ?? {});
2739
+ },
2740
+ fromPartial(object) {
2741
+ const message = createBaseMediaEvent_Connected();
2742
+ message.endpointId = object.endpointId ?? "";
2743
+ message.endpointIdToEndpoint = Object.entries(object.endpointIdToEndpoint ?? {}).reduce((acc, [key, value]) => {
2744
+ if (value !== void 0) {
2745
+ acc[key] = MediaEvent_Endpoint.fromPartial(value);
2746
+ }
2747
+ return acc;
2748
+ }, {});
2749
+ message.iceServers = object.iceServers?.map((e) => MediaEvent_IceServer.fromPartial(e)) || [];
2750
+ return message;
2751
+ }
2752
+ };
2753
+ function createBaseMediaEvent_Connected_EndpointIdToEndpointEntry() {
2754
+ return { key: "", value: void 0 };
2755
+ }
2756
+ var MediaEvent_Connected_EndpointIdToEndpointEntry = {
2757
+ encode(message, writer = new BinaryWriter3()) {
2758
+ if (message.key !== "") {
2759
+ writer.uint32(10).string(message.key);
2760
+ }
2761
+ if (message.value !== void 0) {
2762
+ MediaEvent_Endpoint.encode(message.value, writer.uint32(18).fork()).join();
2763
+ }
2764
+ return writer;
2765
+ },
2766
+ decode(input, length) {
2767
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
2768
+ let end = length === void 0 ? reader.len : reader.pos + length;
2769
+ const message = createBaseMediaEvent_Connected_EndpointIdToEndpointEntry();
2770
+ while (reader.pos < end) {
2771
+ const tag = reader.uint32();
2772
+ switch (tag >>> 3) {
2773
+ case 1: {
2774
+ if (tag !== 10) {
2775
+ break;
2776
+ }
2777
+ message.key = reader.string();
2778
+ continue;
2779
+ }
2780
+ case 2: {
2781
+ if (tag !== 18) {
2782
+ break;
2783
+ }
2784
+ message.value = MediaEvent_Endpoint.decode(reader, reader.uint32());
2785
+ continue;
2786
+ }
2787
+ }
2788
+ if ((tag & 7) === 4 || tag === 0) {
2789
+ break;
2790
+ }
2791
+ reader.skip(tag & 7);
2792
+ }
2793
+ return message;
2794
+ },
2795
+ fromJSON(object) {
2796
+ return {
2797
+ key: isSet3(object.key) ? globalThis.String(object.key) : "",
2798
+ value: isSet3(object.value) ? MediaEvent_Endpoint.fromJSON(object.value) : void 0
2799
+ };
2800
+ },
2801
+ toJSON(message) {
2802
+ const obj = {};
2803
+ if (message.key !== "") {
2804
+ obj.key = message.key;
2805
+ }
2806
+ if (message.value !== void 0) {
2807
+ obj.value = MediaEvent_Endpoint.toJSON(message.value);
2808
+ }
2809
+ return obj;
2810
+ },
2811
+ create(base) {
2812
+ return MediaEvent_Connected_EndpointIdToEndpointEntry.fromPartial(base ?? {});
2813
+ },
2814
+ fromPartial(object) {
2815
+ const message = createBaseMediaEvent_Connected_EndpointIdToEndpointEntry();
2816
+ message.key = object.key ?? "";
2817
+ message.value = object.value !== void 0 && object.value !== null ? MediaEvent_Endpoint.fromPartial(object.value) : void 0;
2818
+ return message;
2819
+ }
2820
+ };
2821
+ function createBaseMediaEvent_EndpointRemoved() {
2822
+ return { endpointId: "" };
2823
+ }
2824
+ var MediaEvent_EndpointRemoved = {
2825
+ encode(message, writer = new BinaryWriter3()) {
2826
+ if (message.endpointId !== "") {
2827
+ writer.uint32(10).string(message.endpointId);
2828
+ }
2829
+ return writer;
2830
+ },
2831
+ decode(input, length) {
2832
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
2833
+ let end = length === void 0 ? reader.len : reader.pos + length;
2834
+ const message = createBaseMediaEvent_EndpointRemoved();
2835
+ while (reader.pos < end) {
2836
+ const tag = reader.uint32();
2837
+ switch (tag >>> 3) {
2838
+ case 1: {
2839
+ if (tag !== 10) {
2840
+ break;
2841
+ }
2842
+ message.endpointId = reader.string();
2843
+ continue;
2844
+ }
2845
+ }
2846
+ if ((tag & 7) === 4 || tag === 0) {
2847
+ break;
2848
+ }
2849
+ reader.skip(tag & 7);
2850
+ }
2851
+ return message;
2852
+ },
2853
+ fromJSON(object) {
2854
+ return { endpointId: isSet3(object.endpointId) ? globalThis.String(object.endpointId) : "" };
2855
+ },
2856
+ toJSON(message) {
2857
+ const obj = {};
2858
+ if (message.endpointId !== "") {
2859
+ obj.endpointId = message.endpointId;
2860
+ }
2861
+ return obj;
2862
+ },
2863
+ create(base) {
2864
+ return MediaEvent_EndpointRemoved.fromPartial(base ?? {});
2865
+ },
2866
+ fromPartial(object) {
2867
+ const message = createBaseMediaEvent_EndpointRemoved();
2868
+ message.endpointId = object.endpointId ?? "";
2869
+ return message;
2870
+ }
2871
+ };
2872
+ function createBaseMediaEvent_Error() {
2873
+ return { message: "" };
2874
+ }
2875
+ var MediaEvent_Error = {
2876
+ encode(message, writer = new BinaryWriter3()) {
2877
+ if (message.message !== "") {
2878
+ writer.uint32(10).string(message.message);
2879
+ }
2880
+ return writer;
2881
+ },
2882
+ decode(input, length) {
2883
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
2884
+ let end = length === void 0 ? reader.len : reader.pos + length;
2885
+ const message = createBaseMediaEvent_Error();
2886
+ while (reader.pos < end) {
2887
+ const tag = reader.uint32();
2888
+ switch (tag >>> 3) {
2889
+ case 1: {
2890
+ if (tag !== 10) {
2891
+ break;
2892
+ }
2893
+ message.message = reader.string();
2894
+ continue;
2895
+ }
2896
+ }
2897
+ if ((tag & 7) === 4 || tag === 0) {
2898
+ break;
2899
+ }
2900
+ reader.skip(tag & 7);
2901
+ }
2902
+ return message;
2903
+ },
2904
+ fromJSON(object) {
2905
+ return { message: isSet3(object.message) ? globalThis.String(object.message) : "" };
2906
+ },
2907
+ toJSON(message) {
2908
+ const obj = {};
2909
+ if (message.message !== "") {
2910
+ obj.message = message.message;
2911
+ }
2912
+ return obj;
2913
+ },
2914
+ create(base) {
2915
+ return MediaEvent_Error.fromPartial(base ?? {});
2916
+ },
2917
+ fromPartial(object) {
2918
+ const message = createBaseMediaEvent_Error();
2919
+ message.message = object.message ?? "";
2920
+ return message;
2921
+ }
2922
+ };
2923
+ function createBaseMediaEvent_OfferData() {
2924
+ return { tracksTypes: void 0 };
2925
+ }
2926
+ var MediaEvent_OfferData = {
2927
+ encode(message, writer = new BinaryWriter3()) {
2928
+ if (message.tracksTypes !== void 0) {
2929
+ MediaEvent_OfferData_TrackTypes.encode(message.tracksTypes, writer.uint32(10).fork()).join();
2930
+ }
2931
+ return writer;
2932
+ },
2933
+ decode(input, length) {
2934
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
2935
+ let end = length === void 0 ? reader.len : reader.pos + length;
2936
+ const message = createBaseMediaEvent_OfferData();
2937
+ while (reader.pos < end) {
2938
+ const tag = reader.uint32();
2939
+ switch (tag >>> 3) {
2940
+ case 1: {
2941
+ if (tag !== 10) {
2942
+ break;
2943
+ }
2944
+ message.tracksTypes = MediaEvent_OfferData_TrackTypes.decode(reader, reader.uint32());
2945
+ continue;
2946
+ }
2947
+ }
2948
+ if ((tag & 7) === 4 || tag === 0) {
2949
+ break;
2950
+ }
2951
+ reader.skip(tag & 7);
2952
+ }
2953
+ return message;
2954
+ },
2955
+ fromJSON(object) {
2956
+ return {
2957
+ tracksTypes: isSet3(object.tracksTypes) ? MediaEvent_OfferData_TrackTypes.fromJSON(object.tracksTypes) : void 0
2958
+ };
2959
+ },
2960
+ toJSON(message) {
2961
+ const obj = {};
2962
+ if (message.tracksTypes !== void 0) {
2963
+ obj.tracksTypes = MediaEvent_OfferData_TrackTypes.toJSON(message.tracksTypes);
2964
+ }
2965
+ return obj;
2966
+ },
2967
+ create(base) {
2968
+ return MediaEvent_OfferData.fromPartial(base ?? {});
2969
+ },
2970
+ fromPartial(object) {
2971
+ const message = createBaseMediaEvent_OfferData();
2972
+ message.tracksTypes = object.tracksTypes !== void 0 && object.tracksTypes !== null ? MediaEvent_OfferData_TrackTypes.fromPartial(object.tracksTypes) : void 0;
2973
+ return message;
2974
+ }
2975
+ };
2976
+ function createBaseMediaEvent_OfferData_TrackTypes() {
2977
+ return { audio: 0, video: 0 };
2978
+ }
2979
+ var MediaEvent_OfferData_TrackTypes = {
2980
+ encode(message, writer = new BinaryWriter3()) {
2981
+ if (message.audio !== 0) {
2982
+ writer.uint32(8).int32(message.audio);
2983
+ }
2984
+ if (message.video !== 0) {
2985
+ writer.uint32(16).int32(message.video);
2986
+ }
2987
+ return writer;
2988
+ },
2989
+ decode(input, length) {
2990
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
2991
+ let end = length === void 0 ? reader.len : reader.pos + length;
2992
+ const message = createBaseMediaEvent_OfferData_TrackTypes();
2993
+ while (reader.pos < end) {
2994
+ const tag = reader.uint32();
2995
+ switch (tag >>> 3) {
2996
+ case 1: {
2997
+ if (tag !== 8) {
2998
+ break;
2999
+ }
3000
+ message.audio = reader.int32();
3001
+ continue;
3002
+ }
3003
+ case 2: {
3004
+ if (tag !== 16) {
3005
+ break;
3006
+ }
3007
+ message.video = reader.int32();
3008
+ continue;
3009
+ }
3010
+ }
3011
+ if ((tag & 7) === 4 || tag === 0) {
3012
+ break;
3013
+ }
3014
+ reader.skip(tag & 7);
3015
+ }
3016
+ return message;
3017
+ },
3018
+ fromJSON(object) {
3019
+ return {
3020
+ audio: isSet3(object.audio) ? globalThis.Number(object.audio) : 0,
3021
+ video: isSet3(object.video) ? globalThis.Number(object.video) : 0
3022
+ };
3023
+ },
3024
+ toJSON(message) {
3025
+ const obj = {};
3026
+ if (message.audio !== 0) {
3027
+ obj.audio = Math.round(message.audio);
3028
+ }
3029
+ if (message.video !== 0) {
3030
+ obj.video = Math.round(message.video);
3031
+ }
3032
+ return obj;
3033
+ },
3034
+ create(base) {
3035
+ return MediaEvent_OfferData_TrackTypes.fromPartial(base ?? {});
3036
+ },
3037
+ fromPartial(object) {
3038
+ const message = createBaseMediaEvent_OfferData_TrackTypes();
3039
+ message.audio = object.audio ?? 0;
3040
+ message.video = object.video ?? 0;
3041
+ return message;
3042
+ }
3043
+ };
3044
+ function createBaseMediaEvent_SdpAnswer() {
3045
+ return { sdp: "", midToTrackId: {} };
3046
+ }
3047
+ var MediaEvent_SdpAnswer = {
3048
+ encode(message, writer = new BinaryWriter3()) {
3049
+ if (message.sdp !== "") {
3050
+ writer.uint32(10).string(message.sdp);
3051
+ }
3052
+ Object.entries(message.midToTrackId).forEach(([key, value]) => {
3053
+ MediaEvent_SdpAnswer_MidToTrackIdEntry.encode({ key, value }, writer.uint32(18).fork()).join();
3054
+ });
3055
+ return writer;
3056
+ },
3057
+ decode(input, length) {
3058
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
3059
+ let end = length === void 0 ? reader.len : reader.pos + length;
3060
+ const message = createBaseMediaEvent_SdpAnswer();
3061
+ while (reader.pos < end) {
3062
+ const tag = reader.uint32();
3063
+ switch (tag >>> 3) {
3064
+ case 1: {
3065
+ if (tag !== 10) {
3066
+ break;
3067
+ }
3068
+ message.sdp = reader.string();
3069
+ continue;
3070
+ }
3071
+ case 2: {
3072
+ if (tag !== 18) {
3073
+ break;
3074
+ }
3075
+ const entry2 = MediaEvent_SdpAnswer_MidToTrackIdEntry.decode(reader, reader.uint32());
3076
+ if (entry2.value !== void 0) {
3077
+ message.midToTrackId[entry2.key] = entry2.value;
3078
+ }
3079
+ continue;
3080
+ }
3081
+ }
3082
+ if ((tag & 7) === 4 || tag === 0) {
3083
+ break;
3084
+ }
3085
+ reader.skip(tag & 7);
3086
+ }
3087
+ return message;
3088
+ },
3089
+ fromJSON(object) {
3090
+ return {
3091
+ sdp: isSet3(object.sdp) ? globalThis.String(object.sdp) : "",
3092
+ midToTrackId: isObject2(object.midToTrackId) ? Object.entries(object.midToTrackId).reduce((acc, [key, value]) => {
3093
+ acc[key] = String(value);
3094
+ return acc;
3095
+ }, {}) : {}
3096
+ };
3097
+ },
3098
+ toJSON(message) {
3099
+ const obj = {};
3100
+ if (message.sdp !== "") {
3101
+ obj.sdp = message.sdp;
3102
+ }
3103
+ if (message.midToTrackId) {
3104
+ const entries = Object.entries(message.midToTrackId);
3105
+ if (entries.length > 0) {
3106
+ obj.midToTrackId = {};
3107
+ entries.forEach(([k, v]) => {
3108
+ obj.midToTrackId[k] = v;
3109
+ });
3110
+ }
3111
+ }
3112
+ return obj;
3113
+ },
3114
+ create(base) {
3115
+ return MediaEvent_SdpAnswer.fromPartial(base ?? {});
3116
+ },
3117
+ fromPartial(object) {
3118
+ const message = createBaseMediaEvent_SdpAnswer();
3119
+ message.sdp = object.sdp ?? "";
3120
+ message.midToTrackId = Object.entries(object.midToTrackId ?? {}).reduce(
3121
+ (acc, [key, value]) => {
3122
+ if (value !== void 0) {
3123
+ acc[key] = globalThis.String(value);
3124
+ }
3125
+ return acc;
3126
+ },
3127
+ {}
3128
+ );
3129
+ return message;
3130
+ }
3131
+ };
3132
+ function createBaseMediaEvent_SdpAnswer_MidToTrackIdEntry() {
3133
+ return { key: "", value: "" };
3134
+ }
3135
+ var MediaEvent_SdpAnswer_MidToTrackIdEntry = {
3136
+ encode(message, writer = new BinaryWriter3()) {
3137
+ if (message.key !== "") {
3138
+ writer.uint32(10).string(message.key);
3139
+ }
3140
+ if (message.value !== "") {
3141
+ writer.uint32(18).string(message.value);
3142
+ }
3143
+ return writer;
3144
+ },
3145
+ decode(input, length) {
3146
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
3147
+ let end = length === void 0 ? reader.len : reader.pos + length;
3148
+ const message = createBaseMediaEvent_SdpAnswer_MidToTrackIdEntry();
3149
+ while (reader.pos < end) {
3150
+ const tag = reader.uint32();
3151
+ switch (tag >>> 3) {
3152
+ case 1: {
3153
+ if (tag !== 10) {
3154
+ break;
3155
+ }
3156
+ message.key = reader.string();
3157
+ continue;
3158
+ }
3159
+ case 2: {
3160
+ if (tag !== 18) {
3161
+ break;
3162
+ }
3163
+ message.value = reader.string();
3164
+ continue;
3165
+ }
3166
+ }
3167
+ if ((tag & 7) === 4 || tag === 0) {
3168
+ break;
3169
+ }
3170
+ reader.skip(tag & 7);
3171
+ }
3172
+ return message;
3173
+ },
3174
+ fromJSON(object) {
3175
+ return {
3176
+ key: isSet3(object.key) ? globalThis.String(object.key) : "",
3177
+ value: isSet3(object.value) ? globalThis.String(object.value) : ""
3178
+ };
3179
+ },
3180
+ toJSON(message) {
3181
+ const obj = {};
3182
+ if (message.key !== "") {
3183
+ obj.key = message.key;
3184
+ }
3185
+ if (message.value !== "") {
3186
+ obj.value = message.value;
3187
+ }
3188
+ return obj;
3189
+ },
3190
+ create(base) {
3191
+ return MediaEvent_SdpAnswer_MidToTrackIdEntry.fromPartial(base ?? {});
3192
+ },
3193
+ fromPartial(object) {
3194
+ const message = createBaseMediaEvent_SdpAnswer_MidToTrackIdEntry();
3195
+ message.key = object.key ?? "";
3196
+ message.value = object.value ?? "";
3197
+ return message;
3198
+ }
3199
+ };
3200
+ function createBaseMediaEvent_VadNotification() {
3201
+ return { trackId: "", status: 0 };
3202
+ }
3203
+ var MediaEvent_VadNotification = {
3204
+ encode(message, writer = new BinaryWriter3()) {
3205
+ if (message.trackId !== "") {
3206
+ writer.uint32(10).string(message.trackId);
3207
+ }
3208
+ if (message.status !== 0) {
3209
+ writer.uint32(16).int32(message.status);
3210
+ }
3211
+ return writer;
3212
+ },
3213
+ decode(input, length) {
3214
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
3215
+ let end = length === void 0 ? reader.len : reader.pos + length;
3216
+ const message = createBaseMediaEvent_VadNotification();
3217
+ while (reader.pos < end) {
3218
+ const tag = reader.uint32();
3219
+ switch (tag >>> 3) {
3220
+ case 1: {
3221
+ if (tag !== 10) {
3222
+ break;
3223
+ }
3224
+ message.trackId = reader.string();
3225
+ continue;
3226
+ }
3227
+ case 2: {
3228
+ if (tag !== 16) {
3229
+ break;
3230
+ }
3231
+ message.status = reader.int32();
3232
+ continue;
3233
+ }
3234
+ }
3235
+ if ((tag & 7) === 4 || tag === 0) {
3236
+ break;
3237
+ }
3238
+ reader.skip(tag & 7);
3239
+ }
3240
+ return message;
3241
+ },
3242
+ fromJSON(object) {
3243
+ return {
3244
+ trackId: isSet3(object.trackId) ? globalThis.String(object.trackId) : "",
3245
+ status: isSet3(object.status) ? mediaEvent_VadNotification_StatusFromJSON(object.status) : 0
3246
+ };
3247
+ },
3248
+ toJSON(message) {
3249
+ const obj = {};
3250
+ if (message.trackId !== "") {
3251
+ obj.trackId = message.trackId;
3252
+ }
3253
+ if (message.status !== 0) {
3254
+ obj.status = mediaEvent_VadNotification_StatusToJSON(message.status);
3255
+ }
3256
+ return obj;
3257
+ },
3258
+ create(base) {
3259
+ return MediaEvent_VadNotification.fromPartial(base ?? {});
3260
+ },
3261
+ fromPartial(object) {
3262
+ const message = createBaseMediaEvent_VadNotification();
3263
+ message.trackId = object.trackId ?? "";
3264
+ message.status = object.status ?? 0;
3265
+ return message;
3266
+ }
3267
+ };
3268
+ function createBaseMediaEvent_TrackVariantSwitched() {
3269
+ return { endpointId: "", trackId: "", variant: 0 };
3270
+ }
3271
+ var MediaEvent_TrackVariantSwitched = {
3272
+ encode(message, writer = new BinaryWriter3()) {
3273
+ if (message.endpointId !== "") {
3274
+ writer.uint32(10).string(message.endpointId);
3275
+ }
3276
+ if (message.trackId !== "") {
3277
+ writer.uint32(18).string(message.trackId);
3278
+ }
3279
+ if (message.variant !== 0) {
3280
+ writer.uint32(24).int32(message.variant);
3281
+ }
3282
+ return writer;
3283
+ },
3284
+ decode(input, length) {
3285
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
3286
+ let end = length === void 0 ? reader.len : reader.pos + length;
3287
+ const message = createBaseMediaEvent_TrackVariantSwitched();
3288
+ while (reader.pos < end) {
3289
+ const tag = reader.uint32();
3290
+ switch (tag >>> 3) {
3291
+ case 1: {
3292
+ if (tag !== 10) {
3293
+ break;
3294
+ }
3295
+ message.endpointId = reader.string();
3296
+ continue;
3297
+ }
3298
+ case 2: {
3299
+ if (tag !== 18) {
3300
+ break;
3301
+ }
3302
+ message.trackId = reader.string();
3303
+ continue;
3304
+ }
3305
+ case 3: {
3306
+ if (tag !== 24) {
3307
+ break;
3308
+ }
3309
+ message.variant = reader.int32();
3310
+ continue;
3311
+ }
3312
+ }
3313
+ if ((tag & 7) === 4 || tag === 0) {
3314
+ break;
3315
+ }
3316
+ reader.skip(tag & 7);
3317
+ }
3318
+ return message;
3319
+ },
3320
+ fromJSON(object) {
3321
+ return {
3322
+ endpointId: isSet3(object.endpointId) ? globalThis.String(object.endpointId) : "",
3323
+ trackId: isSet3(object.trackId) ? globalThis.String(object.trackId) : "",
3324
+ variant: isSet3(object.variant) ? variantFromJSON(object.variant) : 0
3325
+ };
3326
+ },
3327
+ toJSON(message) {
3328
+ const obj = {};
3329
+ if (message.endpointId !== "") {
3330
+ obj.endpointId = message.endpointId;
3331
+ }
3332
+ if (message.trackId !== "") {
3333
+ obj.trackId = message.trackId;
3334
+ }
3335
+ if (message.variant !== 0) {
3336
+ obj.variant = variantToJSON(message.variant);
3337
+ }
3338
+ return obj;
3339
+ },
3340
+ create(base) {
3341
+ return MediaEvent_TrackVariantSwitched.fromPartial(base ?? {});
3342
+ },
3343
+ fromPartial(object) {
3344
+ const message = createBaseMediaEvent_TrackVariantSwitched();
3345
+ message.endpointId = object.endpointId ?? "";
3346
+ message.trackId = object.trackId ?? "";
3347
+ message.variant = object.variant ?? 0;
3348
+ return message;
3349
+ }
3350
+ };
3351
+ function createBaseMediaEvent_TrackVariantDisabled() {
3352
+ return { endpointId: "", trackId: "", variant: 0 };
3353
+ }
3354
+ var MediaEvent_TrackVariantDisabled = {
3355
+ encode(message, writer = new BinaryWriter3()) {
3356
+ if (message.endpointId !== "") {
3357
+ writer.uint32(10).string(message.endpointId);
3358
+ }
3359
+ if (message.trackId !== "") {
3360
+ writer.uint32(18).string(message.trackId);
3361
+ }
3362
+ if (message.variant !== 0) {
3363
+ writer.uint32(24).int32(message.variant);
3364
+ }
3365
+ return writer;
3366
+ },
3367
+ decode(input, length) {
3368
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
3369
+ let end = length === void 0 ? reader.len : reader.pos + length;
3370
+ const message = createBaseMediaEvent_TrackVariantDisabled();
3371
+ while (reader.pos < end) {
3372
+ const tag = reader.uint32();
3373
+ switch (tag >>> 3) {
3374
+ case 1: {
3375
+ if (tag !== 10) {
3376
+ break;
3377
+ }
3378
+ message.endpointId = reader.string();
3379
+ continue;
3380
+ }
3381
+ case 2: {
3382
+ if (tag !== 18) {
3383
+ break;
3384
+ }
3385
+ message.trackId = reader.string();
3386
+ continue;
3387
+ }
3388
+ case 3: {
3389
+ if (tag !== 24) {
3390
+ break;
3391
+ }
3392
+ message.variant = reader.int32();
3393
+ continue;
3394
+ }
3395
+ }
3396
+ if ((tag & 7) === 4 || tag === 0) {
3397
+ break;
3398
+ }
3399
+ reader.skip(tag & 7);
3400
+ }
3401
+ return message;
3402
+ },
3403
+ fromJSON(object) {
3404
+ return {
3405
+ endpointId: isSet3(object.endpointId) ? globalThis.String(object.endpointId) : "",
3406
+ trackId: isSet3(object.trackId) ? globalThis.String(object.trackId) : "",
3407
+ variant: isSet3(object.variant) ? variantFromJSON(object.variant) : 0
3408
+ };
3409
+ },
3410
+ toJSON(message) {
3411
+ const obj = {};
3412
+ if (message.endpointId !== "") {
3413
+ obj.endpointId = message.endpointId;
3414
+ }
3415
+ if (message.trackId !== "") {
3416
+ obj.trackId = message.trackId;
3417
+ }
3418
+ if (message.variant !== 0) {
3419
+ obj.variant = variantToJSON(message.variant);
3420
+ }
3421
+ return obj;
3422
+ },
3423
+ create(base) {
3424
+ return MediaEvent_TrackVariantDisabled.fromPartial(base ?? {});
3425
+ },
3426
+ fromPartial(object) {
3427
+ const message = createBaseMediaEvent_TrackVariantDisabled();
3428
+ message.endpointId = object.endpointId ?? "";
3429
+ message.trackId = object.trackId ?? "";
3430
+ message.variant = object.variant ?? 0;
3431
+ return message;
3432
+ }
3433
+ };
3434
+ function createBaseMediaEvent_TrackVariantEnabled() {
3435
+ return { endpointId: "", trackId: "", variant: 0 };
3436
+ }
3437
+ var MediaEvent_TrackVariantEnabled = {
3438
+ encode(message, writer = new BinaryWriter3()) {
3439
+ if (message.endpointId !== "") {
3440
+ writer.uint32(10).string(message.endpointId);
3441
+ }
3442
+ if (message.trackId !== "") {
3443
+ writer.uint32(18).string(message.trackId);
3444
+ }
3445
+ if (message.variant !== 0) {
3446
+ writer.uint32(24).int32(message.variant);
3447
+ }
3448
+ return writer;
3449
+ },
3450
+ decode(input, length) {
3451
+ const reader = input instanceof BinaryReader3 ? input : new BinaryReader3(input);
3452
+ let end = length === void 0 ? reader.len : reader.pos + length;
3453
+ const message = createBaseMediaEvent_TrackVariantEnabled();
3454
+ while (reader.pos < end) {
3455
+ const tag = reader.uint32();
3456
+ switch (tag >>> 3) {
3457
+ case 1: {
3458
+ if (tag !== 10) {
3459
+ break;
3460
+ }
3461
+ message.endpointId = reader.string();
3462
+ continue;
3463
+ }
3464
+ case 2: {
3465
+ if (tag !== 18) {
3466
+ break;
3467
+ }
3468
+ message.trackId = reader.string();
3469
+ continue;
3470
+ }
3471
+ case 3: {
3472
+ if (tag !== 24) {
3473
+ break;
3474
+ }
3475
+ message.variant = reader.int32();
3476
+ continue;
3477
+ }
3478
+ }
3479
+ if ((tag & 7) === 4 || tag === 0) {
3480
+ break;
3481
+ }
3482
+ reader.skip(tag & 7);
3483
+ }
3484
+ return message;
3485
+ },
3486
+ fromJSON(object) {
3487
+ return {
3488
+ endpointId: isSet3(object.endpointId) ? globalThis.String(object.endpointId) : "",
3489
+ trackId: isSet3(object.trackId) ? globalThis.String(object.trackId) : "",
3490
+ variant: isSet3(object.variant) ? variantFromJSON(object.variant) : 0
3491
+ };
3492
+ },
3493
+ toJSON(message) {
3494
+ const obj = {};
3495
+ if (message.endpointId !== "") {
3496
+ obj.endpointId = message.endpointId;
3497
+ }
3498
+ if (message.trackId !== "") {
3499
+ obj.trackId = message.trackId;
3500
+ }
3501
+ if (message.variant !== 0) {
3502
+ obj.variant = variantToJSON(message.variant);
3503
+ }
3504
+ return obj;
3505
+ },
3506
+ create(base) {
3507
+ return MediaEvent_TrackVariantEnabled.fromPartial(base ?? {});
3508
+ },
3509
+ fromPartial(object) {
3510
+ const message = createBaseMediaEvent_TrackVariantEnabled();
3511
+ message.endpointId = object.endpointId ?? "";
3512
+ message.trackId = object.trackId ?? "";
3513
+ message.variant = object.variant ?? 0;
3514
+ return message;
3515
+ }
3516
+ };
3517
+ function isObject2(value) {
3518
+ return typeof value === "object" && value !== null;
3519
+ }
3520
+ function isSet3(value) {
3521
+ return value !== null && value !== void 0;
3522
+ }
3523
+
3524
+ // src/mediaEvent.ts
3525
+ function serializePeerMediaEvent(mediaEvent) {
3526
+ const encodedEvent = MediaEvent.encode(mediaEvent).finish();
3527
+ return encodedEvent;
3528
+ }
3529
+ function deserializeServerMediaEvent(serializedMediaEvent) {
3530
+ return MediaEvent2.decode(serializedMediaEvent);
3531
+ }
3532
+
3533
+ // src/internal.ts
3534
+ import EventEmitter from "events";
3535
+ var isTrackKind = (kind) => kind === "audio" || kind === "video";
3536
+ var TrackContextImpl = class extends EventEmitter {
3537
+ constructor(endpoint, trackId, metadata, simulcastConfig = { enabled: false, enabledVariants: [], disabledVariants: [] }) {
3538
+ super();
3539
+ this.endpoint = endpoint;
3540
+ this.trackId = trackId;
3541
+ this.track = null;
3542
+ this.trackKind = null;
3543
+ this.stream = null;
3544
+ this.metadata = metadata;
3545
+ this.simulcastConfig = simulcastConfig;
3546
+ this.maxBandwidth = 0;
3547
+ this.vadStatus = "silence";
3548
+ this.negotiationStatus = "awaiting";
3549
+ this.pendingMetadataUpdate = false;
3550
+ }
3551
+ };
3552
+
3553
+ // src/bitrate.ts
3554
+ var defaultBitrates = {
3555
+ audio: 5e4,
3556
+ video: 25e5
3557
+ };
3558
+ var UNLIMITED_BANDWIDTH = 0;
3559
+ var defaultSimulcastBitrates = {
3560
+ [3 /* VARIANT_HIGH */]: 25e5,
3561
+ [2 /* VARIANT_MEDIUM */]: 5e5,
3562
+ [1 /* VARIANT_LOW */]: 15e4,
3563
+ [0 /* VARIANT_UNSPECIFIED */]: 0,
3564
+ [-1 /* UNRECOGNIZED */]: 0
3565
+ };
3566
+
3567
+ // src/tracks/bandwidth.ts
3568
+ var splitBandwidth = (rtcRtpEncodingParameters, maxBandwidth) => {
3569
+ const bandwidth = maxBandwidth * 1024;
3570
+ if (bandwidth === 0) {
3571
+ return rtcRtpEncodingParameters.map((encoding) => ({
3572
+ ...encoding,
3573
+ maxBitrate: void 0
3574
+ }));
3575
+ }
3576
+ if (rtcRtpEncodingParameters.length === 0) {
3577
+ console.error("Attempted to limit bandwidth of the track that doesn't have any encodings");
3578
+ return rtcRtpEncodingParameters.map((encoding) => ({ ...encoding }));
3579
+ }
3580
+ if (!rtcRtpEncodingParameters[0]) throw new Error("RTCRtpEncodingParameters is in invalid state");
3581
+ const firstScaleDownBy = rtcRtpEncodingParameters[0].scaleResolutionDownBy || 1;
3582
+ const bitrate_parts = rtcRtpEncodingParameters.reduce(
3583
+ (acc, value) => acc + (firstScaleDownBy / (value.scaleResolutionDownBy || 1)) ** 2,
3584
+ 0
3585
+ );
3586
+ const x = bandwidth / bitrate_parts;
3587
+ return rtcRtpEncodingParameters.map((encoding) => ({
3588
+ ...encoding,
3589
+ maxBitrate: x * (firstScaleDownBy / (encoding.scaleResolutionDownBy || 1)) ** 2
3590
+ }));
3591
+ };
3592
+
3593
+ // src/tracks/encodings.ts
3594
+ var getEncodingParameters = (parameters, bandwidth) => {
3595
+ const unlimitedEncodings = [{}];
3596
+ return parameters.encodings.length === 0 ? unlimitedEncodings : splitBandwidth(parameters.encodings, bandwidth);
3597
+ };
3598
+ var encodingToVariantMap = {
3599
+ l: 1 /* VARIANT_LOW */,
3600
+ m: 2 /* VARIANT_MEDIUM */,
3601
+ h: 3 /* VARIANT_HIGH */
3602
+ };
3603
+
3604
+ // src/tracks/muteTrackUtils.ts
3605
+ function emitMutableEvents(action, webrtc, trackId) {
3606
+ const localEventType = action === "mute" ? "localTrackMuted" : "localTrackUnmuted";
3607
+ webrtc.emit(localEventType, { trackId });
3608
+ }
3609
+ function getActionType(currentTrack, newTrack) {
3610
+ if (currentTrack && !newTrack) {
3611
+ return "mute";
3612
+ } else if (!currentTrack && newTrack) {
3613
+ return "unmute";
3614
+ } else {
3615
+ return "replace";
3616
+ }
3617
+ }
3618
+
3619
+ // src/tracks/transceivers.ts
3620
+ var createTransceiverConfig = (trackContext) => {
3621
+ if (!trackContext.track) throw new Error(`Cannot create transceiver config for `);
3622
+ if (trackContext.track.kind === "audio") {
3623
+ return createAudioTransceiverConfig(trackContext.stream);
3624
+ }
3625
+ return createVideoTransceiverConfig(trackContext, trackContext.maxBandwidth);
3626
+ };
3627
+ var createAudioTransceiverConfig = (stream) => {
3628
+ return {
3629
+ direction: "sendonly",
3630
+ streams: stream ? [stream] : []
3631
+ };
3632
+ };
3633
+ var createVideoTransceiverConfig = (trackContext, maxBandwidth) => {
3634
+ if (!trackContext.simulcastConfig) throw new Error(`Simulcast config for track ${trackContext.trackId} not found.`);
3635
+ if (trackContext.simulcastConfig.enabled) {
3636
+ let simulcastConfig;
3637
+ if (maxBandwidth === 0) {
3638
+ simulcastConfig = /* @__PURE__ */ new Map([
3639
+ [1 /* VARIANT_LOW */, 0],
3640
+ [2 /* VARIANT_MEDIUM */, 0],
3641
+ [3 /* VARIANT_HIGH */, 0]
3642
+ ]);
3643
+ } else if (typeof maxBandwidth === "number") {
3644
+ throw new Error("Invalid bandwidth limit for simulcast track.");
3645
+ } else {
3646
+ simulcastConfig = maxBandwidth;
3647
+ }
3648
+ return createSimulcastTransceiverConfig(trackContext, simulcastConfig);
3649
+ }
3650
+ if (typeof maxBandwidth === "number") {
3651
+ return createNonSimulcastTransceiverConfig(trackContext, maxBandwidth);
3652
+ }
3653
+ throw new Error("LocalTrack is in invalid state!");
3654
+ };
3655
+ var createNonSimulcastTransceiverConfig = (trackContext, maxBandwidth) => {
3656
+ return {
3657
+ direction: "sendonly",
3658
+ sendEncodings: splitBandwidth([{ active: true }], maxBandwidth),
3659
+ streams: trackContext.stream ? [trackContext.stream] : []
3660
+ };
3661
+ };
3662
+ var createSimulcastTransceiverConfig = (trackContext, maxBandwidth) => {
3663
+ if (!trackContext.simulcastConfig) throw new Error(`Simulcast config for track ${trackContext.trackId} not found.`);
3664
+ const activeEncodings = trackContext.simulcastConfig.enabledVariants;
3665
+ const encodings = [
3666
+ {
3667
+ rid: "l",
3668
+ active: activeEncodings.includes(1 /* VARIANT_LOW */),
3669
+ // maxBitrate: 4_000_000,
3670
+ scaleResolutionDownBy: 4
3671
+ // scalabilityMode: "L1T" + TEMPORAL_LAYERS_COUNT,
3672
+ },
3673
+ {
3674
+ rid: "m",
3675
+ active: activeEncodings.includes(2 /* VARIANT_MEDIUM */),
3676
+ scaleResolutionDownBy: 2
3677
+ },
3678
+ {
3679
+ rid: "h",
3680
+ active: activeEncodings.includes(3 /* VARIANT_HIGH */)
3681
+ // maxBitrate: 4_000_000,
3682
+ // scalabilityMode: "L1T" + TEMPORAL_LAYERS_COUNT,
3683
+ }
3684
+ ];
3685
+ return {
3686
+ direction: "sendonly",
3687
+ // keep this array from low resolution to high resolution
3688
+ // in other case lower resolution encoding can get
3689
+ // higher max_bitrate
3690
+ sendEncodings: calculateSimulcastEncodings(encodings, maxBandwidth)
3691
+ };
3692
+ };
3693
+ var calculateSimulcastEncodings = (encodings, maxBandwidth) => {
3694
+ return encodings.filter((encoding) => encoding.rid).map((encoding) => {
3695
+ const variant = !!encoding.rid && encodingToVariantMap[encoding.rid] || 0 /* VARIANT_UNSPECIFIED */;
3696
+ const limit = maxBandwidth.get(variant) || 0;
3697
+ return {
3698
+ ...encoding,
3699
+ maxBitrate: limit > 0 ? limit * 1024 : void 0
3700
+ };
3701
+ });
3702
+ };
3703
+
3704
+ // src/tracks/LocalTrack.ts
3705
+ var LocalTrack = class {
3706
+ id;
3707
+ mediaStreamTrackId = null;
3708
+ mLineId = null;
3709
+ trackContext;
3710
+ sender = null;
3711
+ encodings = {
3712
+ [-1 /* UNRECOGNIZED */]: false,
3713
+ [0 /* VARIANT_UNSPECIFIED */]: false,
3714
+ [1 /* VARIANT_LOW */]: false,
3715
+ [2 /* VARIANT_MEDIUM */]: false,
3716
+ [3 /* VARIANT_HIGH */]: false
3717
+ };
3718
+ connection;
3719
+ constructor(connection, id, trackContext) {
3720
+ this.connection = connection;
3721
+ this.id = id;
3722
+ this.trackContext = trackContext;
3723
+ if (trackContext.track?.id) {
3724
+ this.mediaStreamTrackId = trackContext.track?.id;
3725
+ }
3726
+ }
3727
+ updateSender = () => {
3728
+ if (this.mediaStreamTrackId && this.connection) {
3729
+ this.sender = this.connection.findSender(this.mediaStreamTrackId);
3730
+ }
3731
+ };
3732
+ updateConnection = (connection) => {
3733
+ this.connection = connection;
3734
+ };
3735
+ disableTrackEncoding = async (encoding) => {
3736
+ if (!this.sender) throw new Error(`RTCRtpSender for track ${this.id} not found`);
3737
+ const params = this.sender.getParameters();
3738
+ const encodings = params.encodings;
3739
+ const encodingParameter = encodings.find((en) => en.rid && encodingToVariantMap[en.rid] === encoding);
3740
+ if (!encodingParameter) throw new Error(`RTCRtpEncodingParameters for track ${this.id} not found`);
3741
+ encodingParameter.active = false;
3742
+ this.encodings[encoding] = false;
3743
+ await this.sender.setParameters(params);
3744
+ };
3745
+ addTrackToConnection = () => {
3746
+ if (!this.trackContext.track) throw Error(`MediaStreamTrack for track ${this.id} does not exist`);
3747
+ if (!this.connection) throw new Error(`There is no active RTCPeerConnection`);
3748
+ const transceiverConfig = createTransceiverConfig(this.trackContext);
3749
+ this.updateEncodings();
3750
+ this.connection.addTransceiver(this.trackContext.track, transceiverConfig);
3751
+ };
3752
+ updateEncodings = () => {
3753
+ const enabledVariants = this.trackContext.simulcastConfig?.enabledVariants;
3754
+ if (this.trackContext?.track?.kind === "video" && enabledVariants) {
3755
+ this.encodings[1 /* VARIANT_LOW */] = enabledVariants.some((e) => e === 1 /* VARIANT_LOW */);
3756
+ this.encodings[2 /* VARIANT_MEDIUM */] = enabledVariants.some((e) => e === 2 /* VARIANT_MEDIUM */);
3757
+ this.encodings[3 /* VARIANT_HIGH */] = enabledVariants.some((e) => e === 3 /* VARIANT_HIGH */);
3758
+ }
3759
+ };
3760
+ removeFromConnection = () => {
3761
+ if (!this.sender) throw new Error(`RTCRtpSender for track ${this.id} not found`);
3762
+ if (!this.connection) throw new Error(`There is no active RTCPeerConnection`);
3763
+ this.connection.removeTrack(this.sender);
3764
+ };
3765
+ replaceTrack = async (newTrack, webrtc) => {
3766
+ const trackId = this.id;
3767
+ const stream = this.trackContext.stream;
3768
+ const oldTrack = this.trackContext.track;
3769
+ if (!this.sender) throw Error("There is no RTCRtpSender for this track id!");
3770
+ stream?.getTracks().forEach((track) => {
3771
+ stream?.removeTrack(track);
3772
+ });
3773
+ if (newTrack) {
3774
+ stream?.addTrack(newTrack);
3775
+ }
3776
+ this.trackContext.track = newTrack;
3777
+ this.mediaStreamTrackId = newTrack?.id ?? null;
3778
+ const action = getActionType(this.trackContext.track, newTrack);
3779
+ if (action === "mute" || action === "unmute") {
3780
+ emitMutableEvents(action, webrtc, trackId);
3781
+ }
3782
+ try {
3783
+ await this.sender.replaceTrack(newTrack);
3784
+ } catch (_error) {
3785
+ if (action === "mute") {
3786
+ emitMutableEvents("unmute", webrtc, trackId);
3787
+ } else if (action === "unmute") {
3788
+ emitMutableEvents("mute", webrtc, trackId);
3789
+ }
3790
+ this.trackContext.track = oldTrack;
3791
+ this.mediaStreamTrackId = oldTrack?.id ?? null;
3792
+ }
3793
+ };
3794
+ setTrackBandwidth = (bandwidth) => {
3795
+ if (!this.sender) throw new Error(`RTCRtpSender for track ${this.id} not found`);
3796
+ const parameters = this.sender.getParameters();
3797
+ parameters.encodings = getEncodingParameters(parameters, bandwidth);
3798
+ return this.sender.setParameters(parameters);
3799
+ };
3800
+ setEncodingBandwidth(variant, bandwidth) {
3801
+ if (!this.sender) throw new Error(`RTCRtpSender for track ${this.id} not found`);
3802
+ const parameters = this.sender.getParameters();
3803
+ const encoding = parameters.encodings.find((enc) => enc.rid && encodingToVariantMap[enc.rid] === variant);
3804
+ if (!encoding) {
3805
+ return Promise.reject(`Encoding with Variant '${variant}' doesn't exist`);
3806
+ } else if (bandwidth === 0) {
3807
+ delete encoding.maxBitrate;
3808
+ } else {
3809
+ encoding.maxBitrate = bandwidth * 1024;
3810
+ }
3811
+ return this.sender.setParameters(parameters);
3812
+ }
3813
+ updateTrackMetadata = (metadata) => {
3814
+ this.trackContext.metadata = metadata;
3815
+ };
3816
+ enableTrackEncoding = (encoding) => {
3817
+ if (!this.sender) throw new Error(`RTCRtpSender for track ${this.id} not found`);
3818
+ const params = this.sender.getParameters();
3819
+ const encodingParameters = params.encodings.find((en) => en.rid && encodingToVariantMap[en.rid] === encoding);
3820
+ if (!encodingParameters) throw new Error(`RTCRtEncodingParameters ${encoding} for track ${this.id} not found`);
3821
+ encodingParameters.active = true;
3822
+ this.encodings[encoding] = true;
3823
+ return this.sender.setParameters(params);
3824
+ };
3825
+ setMLineId = (mLineId) => {
3826
+ this.mLineId = mLineId;
3827
+ };
3828
+ isNotSimulcastTrack = (encodings) => encodings.length === 1 && !encodings[0].rid;
3829
+ getTrackBitrates = () => {
3830
+ const trackContext = this.trackContext;
3831
+ const kind = this.trackContext.track?.kind;
3832
+ if (!trackContext.track) {
3833
+ if (!trackContext.trackKind) {
3834
+ throw new Error("trackContext.trackKind is empty");
3835
+ }
3836
+ return defaultBitrates[trackContext.trackKind];
3837
+ }
3838
+ if (!this.sender) return void 0;
3839
+ const encodings = this.sender.getParameters().encodings;
3840
+ if (this.isNotSimulcastTrack(encodings)) {
3841
+ return encodings[0].maxBitrate || (kind ? defaultBitrates[kind] : UNLIMITED_BANDWIDTH);
3842
+ } else if (kind === "audio") {
3843
+ throw "Audio track cannot have multiple encodings";
3844
+ }
3845
+ return encodings.filter((encoding) => encoding.rid).reduce(
3846
+ (acc, encoding) => {
3847
+ const variant = encodingToVariantMap[encoding.rid] ?? 0 /* VARIANT_UNSPECIFIED */;
3848
+ acc[variant] = encoding.maxBitrate || defaultSimulcastBitrates[variant];
3849
+ return acc;
3850
+ },
3851
+ {}
3852
+ );
3853
+ };
3854
+ createTrackVariantBitratesEvent = () => {
3855
+ };
3856
+ };
3857
+
3858
+ // src/tracks/Local.ts
3859
+ var Local = class {
3860
+ localTracks = {};
3861
+ localEndpoint = {
3862
+ id: "",
3863
+ type: "webrtc",
3864
+ metadata: void 0,
3865
+ tracks: /* @__PURE__ */ new Map()
3866
+ };
3867
+ emit;
3868
+ sendMediaEvent;
3869
+ connection = null;
3870
+ constructor(emit, sendMediaEvent) {
3871
+ this.emit = emit;
3872
+ this.sendMediaEvent = sendMediaEvent;
3873
+ }
3874
+ updateSenders = () => {
3875
+ Object.values(this.localTracks).forEach((localTrack) => {
3876
+ localTrack.updateSender();
3877
+ });
3878
+ };
3879
+ updateMLineIds = (midToTrackIds) => {
3880
+ Object.entries(midToTrackIds).forEach(([mid, trackId]) => {
3881
+ this.localTracks[trackId]?.setMLineId(mid);
3882
+ });
3883
+ };
3884
+ updateConnection = (connection) => {
3885
+ this.connection = connection;
3886
+ Object.values(this.localTracks).forEach((track) => {
3887
+ track.updateConnection(connection);
3888
+ });
3889
+ };
3890
+ createSdpOfferEvent = (sdpOffer) => {
3891
+ const trackIdToMetadataJson = this.getTrackIdToMetadataJson();
3892
+ const trackIdToBitrates = this.getTrackIdToTrackBitrates();
3893
+ const midToTrackId = this.getMidToTrackId();
3894
+ return MediaEvent_SdpOffer.create({
3895
+ sdp: sdpOffer.sdp,
3896
+ midToTrackId,
3897
+ trackIdToBitrates,
3898
+ trackIdToMetadataJson
3899
+ });
3900
+ };
3901
+ addTrack = (connection, trackId, track, stream, trackMetadata, simulcastConfig, maxBandwidth) => {
3902
+ const trackContext = new TrackContextImpl(this.localEndpoint, trackId, trackMetadata, simulcastConfig);
3903
+ trackContext.track = track;
3904
+ trackContext.stream = stream;
3905
+ trackContext.maxBandwidth = maxBandwidth;
3906
+ if (!isTrackKind(track.kind)) throw new Error("Track has no kind");
3907
+ trackContext.trackKind = track.kind;
3908
+ this.localEndpoint.tracks.set(trackId, trackContext);
3909
+ const trackManager = new LocalTrack(connection, trackId, trackContext);
3910
+ this.localTracks[trackId] = trackManager;
3911
+ return trackManager;
3912
+ };
3913
+ getTrackByMidOrNull = (mid) => {
3914
+ return Object.values(this.localTracks).find((track) => track.mLineId === mid) ?? null;
3915
+ };
3916
+ removeTrack = (trackId) => {
3917
+ const trackManager = this.localTracks[trackId];
3918
+ if (!trackManager) throw new Error(`Cannot find ${trackId}`);
3919
+ trackManager.removeFromConnection();
3920
+ const renegotiateTracks = MediaEvent_RenegotiateTracks.create({});
3921
+ this.sendMediaEvent({ renegotiateTracks });
3922
+ this.localEndpoint.tracks.delete(trackId);
3923
+ delete this.localTracks[trackId];
3924
+ };
3925
+ replaceTrack = async (webrtc, trackId, newTrack) => {
3926
+ const trackManager = this.localTracks[trackId];
3927
+ if (!trackManager) throw new Error(`Cannot find ${trackId}`);
3928
+ await trackManager.replaceTrack(newTrack, webrtc);
3929
+ };
3930
+ setEndpointMetadata = (metadata) => {
3931
+ this.localEndpoint.metadata = metadata;
3932
+ };
3933
+ getEndpoint = () => {
3934
+ return this.localEndpoint;
3935
+ };
3936
+ setTrackBandwidth = async (trackId, bandwidth) => {
3937
+ const trackManager = this.localTracks[trackId];
3938
+ if (!trackManager) throw new Error(`Cannot find ${trackId}`);
3939
+ await trackManager.setTrackBandwidth(bandwidth);
3940
+ const trackBitrates = MediaEvent_TrackBitrates.create({
3941
+ trackId,
3942
+ variantBitrates: [{ variant: 0 /* VARIANT_UNSPECIFIED */, bitrate: bandwidth }]
3943
+ });
3944
+ this.sendMediaEvent(MediaEvent.create({ trackBitrates }));
3945
+ this.emit("localTrackBandwidthSet", {
3946
+ trackId,
3947
+ bandwidth
3948
+ });
3949
+ };
3950
+ getTrackIdToTrack = () => {
3951
+ const entries = Object.values(this.localTracks).map(
3952
+ (track) => [track.id, track.trackContext]
3953
+ );
3954
+ return new Map(entries);
3955
+ };
3956
+ setLocalEndpointId = (endpointId) => {
3957
+ this.localEndpoint.id = endpointId;
3958
+ };
3959
+ setEncodingBandwidth = async (trackId, rid, bandwidth) => {
3960
+ const trackManager = this.localTracks[trackId];
3961
+ if (!trackManager) throw new Error(`Cannot find ${trackId}`);
3962
+ await trackManager.setEncodingBandwidth(rid, bandwidth);
3963
+ const bitrates = trackManager.getTrackBitrates();
3964
+ let variantBitrates = [];
3965
+ if (typeof bitrates === "number") {
3966
+ variantBitrates = [{ variant: 0 /* VARIANT_UNSPECIFIED */, bitrate: bitrates }];
3967
+ } else if (bitrates) {
3968
+ variantBitrates = Object.entries(bitrates).map(([variant, bitrate]) => ({
3969
+ variant: Number(variant),
3970
+ bitrate
3971
+ }));
3972
+ }
3973
+ const trackBitrates = MediaEvent_TrackBitrates.create({
3974
+ trackId,
3975
+ variantBitrates
3976
+ });
3977
+ this.sendMediaEvent(MediaEvent.create({ trackBitrates }));
3978
+ this.emit("localTrackEncodingBandwidthSet", {
3979
+ trackId,
3980
+ rid,
3981
+ bandwidth
3982
+ });
3983
+ };
3984
+ updateEndpointMetadata = (metadata) => {
3985
+ this.localEndpoint.metadata = metadata;
3986
+ const updateEndpointMetadata = MediaEvent_UpdateEndpointMetadata.create({
3987
+ metadataJson: JSON.stringify(this.localEndpoint.metadata)
3988
+ });
3989
+ this.sendMediaEvent({ updateEndpointMetadata });
3990
+ this.emit("localEndpointMetadataChanged", {
3991
+ metadata: this.localEndpoint.metadata
3992
+ });
3993
+ };
3994
+ updateLocalTrackMetadata = (trackId, metadata) => {
3995
+ const trackManager = this.localTracks[trackId];
3996
+ if (!trackManager) throw new Error(`Cannot find ${trackId}`);
3997
+ trackManager.updateTrackMetadata(metadata);
3998
+ const trackContext = trackManager.trackContext;
3999
+ const updateTrackMetadata = MediaEvent_UpdateTrackMetadata.create({
4000
+ trackId,
4001
+ metadataJson: metadata ? JSON.stringify(metadata) : void 0
4002
+ });
4003
+ switch (trackContext.negotiationStatus) {
4004
+ case "done":
4005
+ this.sendMediaEvent({ updateTrackMetadata });
4006
+ this.emit("localTrackMetadataChanged", {
4007
+ trackId,
4008
+ metadata: trackContext.metadata
4009
+ });
4010
+ break;
4011
+ case "offered":
4012
+ trackContext.pendingMetadataUpdate = true;
4013
+ break;
4014
+ case "awaiting":
4015
+ break;
4016
+ }
4017
+ };
4018
+ disableLocalTrackEncoding = async (trackId, encoding) => {
4019
+ const localTrack = this.localTracks[trackId];
4020
+ if (!localTrack) throw new Error(`Track ${trackId} not found`);
4021
+ await localTrack.disableTrackEncoding(encoding);
4022
+ const disableTrackVariant = MediaEvent_DisableTrackVariant.create({ trackId, variant: encoding });
4023
+ this.sendMediaEvent(MediaEvent.create({ disableTrackVariant }));
4024
+ this.emit("localTrackEncodingEnabled", {
4025
+ trackId,
4026
+ encoding
4027
+ });
4028
+ };
4029
+ enableLocalTrackEncoding = async (trackId, variant) => {
4030
+ const trackManager = this.localTracks[trackId];
4031
+ if (!trackManager) throw new Error(`Cannot find ${trackId}`);
4032
+ await trackManager.enableTrackEncoding(variant);
4033
+ const enableTrackVariant = MediaEvent_EnableTrackVariant.create({ trackId, variant });
4034
+ this.sendMediaEvent(MediaEvent.create({ enableTrackVariant }));
4035
+ this.emit("localTrackEncodingEnabled", {
4036
+ trackId,
4037
+ encoding: variant
4038
+ });
4039
+ };
4040
+ getTrackIdToMetadataJson = () => Object.values(this.localTracks).reduce(
4041
+ (acc, { id, trackContext }) => ({ ...acc, [id]: JSON.stringify(trackContext.metadata) }),
4042
+ {}
4043
+ );
4044
+ // TODO add bitrates
4045
+ getTrackIdToTrackBitrates = () => Object.values(this.localTracks).reduce((acc, { id }) => ({ ...acc, [id]: { bitrate: 15e5 } }), {});
4046
+ getMidToTrackId = () => {
4047
+ if (!this.connection) return {};
4048
+ const mappingFromTransceivers = this.getTransceiverMapping();
4049
+ const mappingFromLocalNegotiatedTracks = Object.values(this.localTracks).filter((track) => !!track.mLineId).reduce((acc, { id, mLineId }) => ({ ...acc, [mLineId]: id }), {});
4050
+ return { ...mappingFromTransceivers, ...mappingFromLocalNegotiatedTracks };
4051
+ };
4052
+ getTransceiverMapping = () => {
4053
+ if (!this.connection) return {};
4054
+ return this.connection.getConnection().getTransceivers().filter((transceiver) => Boolean(transceiver.sender.track?.id && transceiver.mid)).reduce((acc, { sender, mid }) => {
4055
+ const localTrack = Object.values(this.localTracks).find(
4056
+ (track) => track.mediaStreamTrackId === sender.track.id
4057
+ );
4058
+ if (!localTrack) throw new Error("Local track not found");
4059
+ return { ...acc, [mid]: localTrack.id };
4060
+ }, {});
4061
+ };
4062
+ setLocalTrackStatusToOffered = () => {
4063
+ Object.values(this.localTracks).forEach((localTrack) => {
4064
+ localTrack.trackContext.negotiationStatus = "offered";
4065
+ });
4066
+ };
4067
+ addAllTracksToConnection = () => {
4068
+ Object.values(this.localTracks).forEach((localTrack) => {
4069
+ localTrack.addTrackToConnection();
4070
+ });
4071
+ };
4072
+ };
4073
+
4074
+ // src/tracks/LocalTrackManager.ts
4075
+ var LocalTrackManager = class {
4076
+ connection;
4077
+ local;
4078
+ ongoingTrackReplacement = false;
4079
+ /**
4080
+ * Indicates if an ongoing renegotiation is active.
4081
+ * During renegotiation, both parties are expected to actively exchange events: renegotiateTracks, offerData, sdpOffer, sdpAnswer.
4082
+ */
4083
+ ongoingRenegotiation = false;
4084
+ sendMediaEvent;
4085
+ constructor(local, sendMediaEvent) {
4086
+ this.local = local;
4087
+ this.sendMediaEvent = sendMediaEvent;
4088
+ }
4089
+ isNegotiationInProgress = () => {
4090
+ return this.ongoingRenegotiation || this.ongoingTrackReplacement;
4091
+ };
4092
+ cleanUp = () => {
4093
+ this.ongoingTrackReplacement = false;
4094
+ this.ongoingRenegotiation = false;
4095
+ };
4096
+ parseAddTrack = (track, simulcastConfig, maxBandwidth) => {
4097
+ if (this.getEndpointId() === "") {
4098
+ throw new Error("Cannot add tracks before being accepted by the server");
4099
+ }
4100
+ if (!simulcastConfig.enabled && !(typeof maxBandwidth === "number")) {
4101
+ throw new Error("Invalid type of `maxBandwidth` argument for a non-simulcast track, expected: number");
4102
+ }
4103
+ if (this.connection?.isTrackInUse(track)) {
4104
+ throw new Error("This track was already added to peerConnection, it can't be added again!");
4105
+ }
4106
+ };
4107
+ addTrackHandler = (trackId, track, stream, trackMetadata, simulcastConfig, maxBandwidth) => {
4108
+ this.ongoingRenegotiation = true;
4109
+ const trackManager = this.local.addTrack(
4110
+ this.connection,
4111
+ trackId,
4112
+ track,
4113
+ stream,
4114
+ trackMetadata,
4115
+ simulcastConfig,
4116
+ maxBandwidth
4117
+ );
4118
+ if (this.connection) {
4119
+ trackManager.addTrackToConnection();
4120
+ }
4121
+ this.sendMediaEvent({ renegotiateTracks: MediaEvent_RenegotiateTracks.create() });
4122
+ };
4123
+ removeTrackHandler = (trackId) => {
4124
+ if (!this.connection) throw new Error(`There is no active RTCPeerConnection`);
4125
+ this.ongoingRenegotiation = true;
4126
+ this.local.removeTrack(trackId);
4127
+ };
4128
+ replaceTrackHandler = async (webrtc, trackId, newTrack) => {
4129
+ this.ongoingTrackReplacement = true;
4130
+ try {
4131
+ await this.local.replaceTrack(webrtc, trackId, newTrack);
4132
+ } finally {
4133
+ this.ongoingTrackReplacement = false;
4134
+ }
4135
+ };
4136
+ getEndpointId = () => this.local.getEndpoint().id;
4137
+ updateConnection = (connection) => {
4138
+ this.connection = connection;
4139
+ };
4140
+ updateSenders = () => {
4141
+ this.local.updateSenders();
4142
+ };
4143
+ };
4144
+
4145
+ // src/tracks/RemoteTrack.ts
4146
+ var RemoteTrack = class {
4147
+ id;
4148
+ mLineId = null;
4149
+ trackContext;
4150
+ encodings = {
4151
+ [-1 /* UNRECOGNIZED */]: false,
4152
+ [0 /* VARIANT_UNSPECIFIED */]: false,
4153
+ [1 /* VARIANT_LOW */]: false,
4154
+ [2 /* VARIANT_MEDIUM */]: false,
4155
+ [3 /* VARIANT_HIGH */]: false
4156
+ };
4157
+ // todo this field is not exposed
4158
+ targetEncoding = null;
4159
+ constructor(id, trackContext) {
4160
+ this.id = id;
4161
+ this.trackContext = trackContext;
4162
+ }
4163
+ setMLineId = (mLineId) => {
4164
+ this.mLineId = mLineId;
4165
+ };
4166
+ setReady = (stream, track) => {
4167
+ if (!isTrackKind(track.kind)) throw new Error("Track has no kind");
4168
+ this.trackContext.stream = stream;
4169
+ this.trackContext.track = track;
4170
+ this.trackContext.trackKind = track.kind;
4171
+ };
4172
+ disableTrackEncoding = (encoding) => {
4173
+ this.encodings[encoding] = false;
4174
+ };
4175
+ enableTrackEncoding = (encoding) => {
4176
+ this.encodings[encoding] = true;
4177
+ };
4178
+ setTargetTrackEncoding = (variant) => {
4179
+ this.targetEncoding = variant;
4180
+ const trackContext = this.trackContext;
4181
+ if (!trackContext.simulcastConfig?.enabled) {
4182
+ throw new Error("The track does not support changing its target variant");
4183
+ }
4184
+ const isValidTargetEncoding = !trackContext.simulcastConfig.enabledVariants.includes(variant);
4185
+ if (isValidTargetEncoding) {
4186
+ throw new Error(`The track does not support variant ${variant}`);
4187
+ }
4188
+ };
4189
+ };
4190
+
4191
+ // src/tracks/Remote.ts
4192
+ var Remote = class {
4193
+ remoteTracks = {};
4194
+ remoteEndpoints = {};
4195
+ emit;
4196
+ sendMediaEvent;
4197
+ constructor(emit, sendMediaEvent) {
4198
+ this.emit = emit;
4199
+ this.sendMediaEvent = sendMediaEvent;
4200
+ }
4201
+ getTrackByMid = (mid) => {
4202
+ const remoteTrack = Object.values(this.remoteTracks).find((remote) => remote.mLineId === mid);
4203
+ if (!remoteTrack) throw new Error(`Remote track with ${mid} not found`);
4204
+ return remoteTrack;
4205
+ };
4206
+ addTracks = (endpointId, tracks) => {
4207
+ const endpoint = this.remoteEndpoints[endpointId];
4208
+ if (!endpoint) throw new Error(`Endpoint ${endpointId} not found`);
4209
+ Object.entries(tracks).map(([trackId, { metadataJson, simulcastConfig }]) => {
4210
+ const parsedMetadata = metadataJson ? JSON.parse(metadataJson) : void 0;
4211
+ const trackContext = new TrackContextImpl(endpoint, trackId, parsedMetadata, simulcastConfig);
4212
+ return new RemoteTrack(trackId, trackContext);
4213
+ }).forEach((remoteTrack) => {
4214
+ this.remoteTracks[remoteTrack.id] = remoteTrack;
4215
+ endpoint.tracks.set(remoteTrack.id, remoteTrack.trackContext);
4216
+ this.emit("trackAdded", remoteTrack.trackContext);
4217
+ });
4218
+ };
4219
+ removeTracks = (trackIds) => {
4220
+ trackIds.forEach((trackId) => {
4221
+ this.removeRemoteTrack(trackId);
4222
+ });
4223
+ };
4224
+ removeRemoteTrack = (trackId) => {
4225
+ const remoteTrack = this.remoteTracks[trackId];
4226
+ if (!remoteTrack) throw new Error(`Track ${trackId} not found`);
4227
+ const remoteEndpoint = this.remoteEndpoints[remoteTrack.trackContext.endpoint.id];
4228
+ if (!remoteEndpoint) throw new Error(`Endpoint ${remoteTrack.trackContext.endpoint.id} not found`);
4229
+ remoteEndpoint.tracks.delete(trackId);
4230
+ delete this.remoteTracks[trackId];
4231
+ this.emit("trackRemoved", remoteTrack.trackContext);
4232
+ };
4233
+ addRemoteEndpoint = (endpointId, metadataJson, tracks, sendNotification = true) => {
4234
+ const endpoint = {
4235
+ id: endpointId,
4236
+ type: "exwebrtc",
4237
+ metadata: metadataJson ? JSON.parse(metadataJson) : void 0,
4238
+ tracks: /* @__PURE__ */ new Map()
4239
+ };
4240
+ this.addEndpoint(endpoint);
4241
+ this.addTracks(endpoint.id, tracks ?? {});
4242
+ if (sendNotification) {
4243
+ this.emit("endpointAdded", endpoint);
4244
+ }
4245
+ };
4246
+ addEndpoint = (endpoint) => {
4247
+ this.remoteEndpoints[endpoint.id] = endpoint;
4248
+ };
4249
+ updateRemoteEndpoint = (endpointId, metadataJson) => {
4250
+ const endpoint = this.remoteEndpoints[endpointId];
4251
+ if (!endpoint) throw new Error(`Endpoint ${endpointId} not found`);
4252
+ endpoint.metadata = metadataJson ? JSON.parse(metadataJson) : void 0;
4253
+ this.emit("endpointUpdated", endpoint);
4254
+ };
4255
+ removeRemoteEndpoint = (endpointId) => {
4256
+ const endpoint = this.remoteEndpoints[endpointId];
4257
+ if (!endpoint) throw new Error(`Endpoint ${endpointId} not found`);
4258
+ const trackIds = [...endpoint.tracks.values()].map(({ trackId }) => trackId);
4259
+ this.removeTracks(trackIds);
4260
+ delete this.remoteEndpoints[endpointId];
4261
+ this.emit("endpointRemoved", endpoint);
4262
+ };
4263
+ updateRemoteTrack = (endpointId, trackId, metadataJson) => {
4264
+ if (!this.remoteEndpoints[endpointId]) throw new Error(`Endpoint ${endpointId} not found`);
4265
+ const remoteTrack = this.remoteTracks[trackId];
4266
+ if (!remoteTrack) throw new Error(`Track ${trackId} not found`);
4267
+ remoteTrack.trackContext.metadata = metadataJson ? JSON.parse(metadataJson) : void 0;
4268
+ this.emit("trackUpdated", remoteTrack.trackContext);
4269
+ };
4270
+ disableRemoteTrackEncoding = (trackId, encoding) => {
4271
+ const remoteTrack = this.remoteTracks[trackId];
4272
+ if (!remoteTrack) throw new Error(`Track ${trackId} not found`);
4273
+ remoteTrack.disableTrackEncoding(encoding);
4274
+ this.emit("trackEncodingDisabled", remoteTrack.trackContext, encoding);
4275
+ };
4276
+ enableRemoteTrackEncoding = (trackId, encoding) => {
4277
+ const remoteTrack = this.remoteTracks[trackId];
4278
+ if (!remoteTrack) throw new Error(`Track ${trackId} not found`);
4279
+ remoteTrack.enableTrackEncoding(encoding);
4280
+ this.emit("trackEncodingEnabled", remoteTrack.trackContext, encoding);
4281
+ };
4282
+ setRemoteTrackEncoding = (trackId, encoding, reason) => {
4283
+ const remoteTrack = this.remoteTracks[trackId];
4284
+ if (!remoteTrack) throw new Error(`Track ${trackId} not found`);
4285
+ remoteTrack.trackContext.encoding = encoding;
4286
+ remoteTrack.trackContext.encodingReason = reason;
4287
+ remoteTrack.trackContext.emit("encodingChanged", remoteTrack.trackContext);
4288
+ };
4289
+ setRemoteTrackVadStatus = (trackId, vadStatus) => {
4290
+ const remoteTrack = this.remoteTracks[trackId];
4291
+ if (!remoteTrack) throw new Error(`Track ${trackId} not found`);
4292
+ let nextStatus = null;
4293
+ if (vadStatus === 1 /* STATUS_SILENCE */) {
4294
+ nextStatus = "silence";
4295
+ } else if (vadStatus === 2 /* STATUS_SPEECH */) {
4296
+ nextStatus = "speech";
4297
+ }
4298
+ if (nextStatus) {
4299
+ remoteTrack.trackContext.vadStatus = nextStatus;
4300
+ remoteTrack.trackContext.emit("voiceActivityChanged", remoteTrack.trackContext);
4301
+ } else {
4302
+ console.warn("Received unknown vad status: ", vadStatus);
4303
+ }
4304
+ };
4305
+ getRemoteTrackContexts = () => {
4306
+ return Object.values(this.remoteTracks).reduce(
4307
+ (acc, current) => ({
4308
+ ...acc,
4309
+ [current.trackContext.trackId]: current.trackContext
4310
+ }),
4311
+ {}
4312
+ );
4313
+ };
4314
+ getRemoteEndpoints = () => {
4315
+ return Object.values(this.remoteEndpoints).reduce(
4316
+ (acc, current) => ({ ...acc, [current.id]: current }),
4317
+ {}
4318
+ );
4319
+ };
4320
+ setTargetRemoteTrackEncoding = (trackId, variant) => {
4321
+ const remoteTrack = this.remoteTracks[trackId];
4322
+ if (!remoteTrack) throw new Error(`Track ${trackId} not found`);
4323
+ try {
4324
+ remoteTrack.setTargetTrackEncoding(variant);
4325
+ const setTargetTrackVariant = MediaEvent_SetTargetTrackVariant.create({ variant, trackId });
4326
+ this.sendMediaEvent({ setTargetTrackVariant });
4327
+ this.emit("targetTrackEncodingRequested", {
4328
+ trackId,
4329
+ variant
4330
+ });
4331
+ } catch (e) {
4332
+ console.warn(e);
4333
+ }
4334
+ };
4335
+ updateMLineIds = (midToTrackIds) => {
4336
+ Object.entries(midToTrackIds).forEach(([mid, trackId]) => {
4337
+ this.remoteTracks[trackId]?.setMLineId(mid);
4338
+ });
4339
+ };
4340
+ };
4341
+
4342
+ // src/webRTCEndpoint.ts
4343
+ var WebRTCEndpoint = class extends EventEmitter2 {
4344
+ localTrackManager;
4345
+ remote;
4346
+ local;
4347
+ commandsQueue;
4348
+ proposedIceServers = [];
4349
+ bandwidthEstimation = BigInt(0);
4350
+ connectionManager;
4351
+ clearConnectionCallbacks = null;
4352
+ constructor() {
4353
+ super();
4354
+ const sendEvent = (mediaEvent) => this.sendMediaEvent(mediaEvent);
4355
+ const emit = (events, ...args) => {
4356
+ this.emit(events, ...args);
4357
+ };
4358
+ this.remote = new Remote(emit, sendEvent);
4359
+ this.local = new Local(emit, sendEvent);
4360
+ this.localTrackManager = new LocalTrackManager(this.local, sendEvent);
4361
+ this.commandsQueue = new CommandsQueue(this.localTrackManager);
4362
+ }
4363
+ /**
4364
+ * Tries to connect to the RTC Engine. If user is successfully connected then {@link WebRTCEndpointEvents.connected}
4365
+ * will be emitted.
4366
+ *
4367
+ * @param metadata - Any information that other endpoints will receive in {@link WebRTCEndpointEvents.endpointAdded}
4368
+ * after accepting this endpoint
4369
+ *
4370
+ * @example
4371
+ * ```ts
4372
+ * let webrtc = new WebRTCEndpoint();
4373
+ * webrtc.connect({displayName: "Bob"});
4374
+ * ```
4375
+ */
4376
+ connect = (metadata) => {
4377
+ this.local.setEndpointMetadata(metadata);
4378
+ const connect = MediaEvent_Connect.create({ metadataJson: JSON.stringify(metadata) });
4379
+ this.sendMediaEvent({ connect });
4380
+ };
4381
+ /**
4382
+ * Feeds media event received from RTC Engine to {@link WebRTCEndpoint}.
4383
+ * This function should be called whenever some media event from RTC Engine
4384
+ * was received and can result in {@link WebRTCEndpoint} generating some other
4385
+ * media events.
4386
+ *
4387
+ * @param mediaEvent - String data received over custom signalling layer.
4388
+ *
4389
+ * @example
4390
+ * This example assumes phoenix channels as signalling layer.
4391
+ * As phoenix channels require objects, RTC Engine encapsulates binary data into
4392
+ * map with one field that is converted to object with one field on the TS side.
4393
+ * ```ts
4394
+ * webrtcChannel.on("mediaEvent", (event) => webrtc.receiveMediaEvent(event.data));
4395
+ * ```
4396
+ */
4397
+ receiveMediaEvent = async (mediaEvent) => {
4398
+ const deserializedMediaEvent = deserializeServerMediaEvent(mediaEvent);
4399
+ if (deserializedMediaEvent.connected) {
4400
+ const connectedEvent = deserializedMediaEvent.connected;
4401
+ this.proposedIceServers = connectedEvent.iceServers;
4402
+ this.local.setLocalEndpointId(connectedEvent.endpointId);
4403
+ const localEndpointMetadataJson = connectedEvent.endpointIdToEndpoint[connectedEvent.endpointId]?.metadataJson;
4404
+ if (localEndpointMetadataJson) {
4405
+ this.local.setEndpointMetadata(JSON.parse(localEndpointMetadataJson));
4406
+ }
4407
+ const connectedEndpoint = connectedEvent.endpointIdToEndpoint[connectedEvent.endpointId];
4408
+ if (connectedEndpoint?.metadataJson) {
4409
+ const parsedMetadata = JSON.parse(connectedEndpoint?.metadataJson);
4410
+ this.local.setEndpointMetadata(parsedMetadata);
4411
+ }
4412
+ Object.entries(connectedEvent.endpointIdToEndpoint).filter(([endpointId]) => endpointId !== this.local.getEndpoint().id).forEach(([endpointId, endpoint]) => {
4413
+ this.remote.addRemoteEndpoint(endpointId, endpoint.metadataJson, endpoint.trackIdToTrack);
4414
+ });
4415
+ const remoteEndpoints = Object.values(this.remote.getRemoteEndpoints());
4416
+ this.emit("connected", this.local.getEndpoint().id, remoteEndpoints);
4417
+ return;
4418
+ }
4419
+ if (this.getEndpointId()) await this.handleMediaEvent(deserializedMediaEvent);
4420
+ };
4421
+ getEndpointId = () => this.local.getEndpoint().id;
4422
+ onTrackReady = (event) => {
4423
+ const stream = event.streams[0];
4424
+ if (!stream) throw new Error("Cannot find media stream");
4425
+ const mid = event.transceiver.mid;
4426
+ const remoteTrack = this.remote.getTrackByMid(mid);
4427
+ remoteTrack.setReady(stream, event.track);
4428
+ this.emit("trackReady", remoteTrack.trackContext);
4429
+ };
4430
+ /**
4431
+ * Retrieves statistics related to the RTCPeerConnection.
4432
+ * These statistics provide insights into the performance and status of the connection.
4433
+ *
4434
+ * @return {Promise<RTCStatsReport>}
4435
+ *
4436
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/getStats | MDN Web Docs: RTCPeerConnection.getStats()}
4437
+ */
4438
+ async getStatistics(selector) {
4439
+ return await this.connectionManager?.getConnection().getStats(selector) ?? /* @__PURE__ */ new Map();
4440
+ }
4441
+ /**
4442
+ * Returns a snapshot of currently received remote tracks.
4443
+ *
4444
+ * @example
4445
+ * if (webRTCEndpoint.getRemoteTracks()[trackId]?.simulcastConfig?.enabled) {
4446
+ * webRTCEndpoint.setTargetTrackEncoding(trackId, encoding);
4447
+ * }
4448
+ */
4449
+ getRemoteTracks() {
4450
+ return this.remote.getRemoteTrackContexts();
4451
+ }
4452
+ /**
4453
+ * Returns a snapshot of currently received remote endpoints.
4454
+ */
4455
+ getRemoteEndpoints() {
4456
+ return this.remote.getRemoteEndpoints();
4457
+ }
4458
+ getLocalEndpoint() {
4459
+ return this.local.getEndpoint();
4460
+ }
4461
+ getBandwidthEstimation() {
4462
+ return this.bandwidthEstimation;
4463
+ }
4464
+ handleMediaEvent = async (event) => {
4465
+ if (event.offerData) {
4466
+ await this.onOfferData(event.offerData);
4467
+ } else if (event.tracksAdded) {
4468
+ this.localTrackManager.ongoingRenegotiation = true;
4469
+ const { trackIdToTrack, endpointId } = event.tracksAdded;
4470
+ if (this.getEndpointId() === endpointId) return;
4471
+ this.remote.addTracks(endpointId, trackIdToTrack);
4472
+ } else if (event.tracksRemoved) {
4473
+ this.localTrackManager.ongoingRenegotiation = true;
4474
+ const { endpointId, trackIds } = event.tracksRemoved;
4475
+ if (this.getEndpointId() === endpointId) return;
4476
+ this.remote.removeTracks(trackIds);
4477
+ } else if (event.sdpAnswer) {
4478
+ this.localTrackManager.ongoingRenegotiation = false;
4479
+ await this.onSdpAnswer(event.sdpAnswer);
4480
+ this.commandsQueue.processNextCommand();
4481
+ } else if (event.candidate) {
4482
+ await this.onRemoteCandidate(event.candidate);
4483
+ } else if (event.endpointAdded) {
4484
+ const { endpointId, metadataJson } = event.endpointAdded;
4485
+ if (endpointId === this.getEndpointId()) return;
4486
+ this.remote.addRemoteEndpoint(endpointId, metadataJson);
4487
+ } else if (event.endpointRemoved) {
4488
+ const { endpointId } = event.endpointRemoved;
4489
+ if (endpointId === this.local.getEndpoint().id) {
4490
+ this.cleanUp();
4491
+ this.emit("disconnected");
4492
+ return;
4493
+ }
4494
+ if (this.getEndpointId() === endpointId) return;
4495
+ this.remote.removeRemoteEndpoint(endpointId);
4496
+ } else if (event.endpointUpdated) {
4497
+ const { endpointId, metadataJson } = event.endpointUpdated;
4498
+ if (this.getEndpointId() === endpointId) return;
4499
+ this.remote.updateRemoteEndpoint(endpointId, metadataJson);
4500
+ } else if (event.trackUpdated) {
4501
+ const { endpointId, trackId, metadataJson } = event.trackUpdated;
4502
+ if (this.getEndpointId() === endpointId) return;
4503
+ this.remote.updateRemoteTrack(endpointId, trackId, metadataJson);
4504
+ } else if (event.vadNotification) {
4505
+ const { trackId, status } = event.vadNotification;
4506
+ this.remote.setRemoteTrackVadStatus(trackId, status);
4507
+ } else if (event.error) {
4508
+ console.warn("signaling error", {
4509
+ message: event.error.message
4510
+ });
4511
+ this.emit("signalingError", {
4512
+ message: event.error.message
4513
+ });
4514
+ this.disconnect();
4515
+ } else if (event.trackVariantSwitched) {
4516
+ const { trackId, variant } = event.trackVariantSwitched;
4517
+ this.remote.setRemoteTrackEncoding(trackId, variant);
4518
+ } else if (event.trackVariantEnabled) {
4519
+ const { trackId, variant } = event.trackVariantEnabled;
4520
+ this.remote.enableRemoteTrackEncoding(trackId, variant);
4521
+ } else if (event.trackVariantDisabled) {
4522
+ const { trackId, variant } = event.trackVariantDisabled;
4523
+ this.remote.disableRemoteTrackEncoding(trackId, variant);
4524
+ }
4525
+ };
4526
+ onSdpAnswer = async (data) => {
4527
+ this.remote.updateMLineIds(data.midToTrackId);
4528
+ this.local.updateMLineIds(data.midToTrackId);
4529
+ Object.keys(data.midToTrackId).map((mid) => {
4530
+ if (!mid) throw new Error("TrackId is not defined");
4531
+ return mid;
4532
+ }).map((mid) => this.local.getTrackByMidOrNull(mid)).filter((localTrack) => localTrack !== null).forEach((localTrack) => {
4533
+ const trackContext = localTrack.trackContext;
4534
+ trackContext.negotiationStatus = "done";
4535
+ if (trackContext.pendingMetadataUpdate) {
4536
+ const updateTrackMetadata = MediaEvent_UpdateTrackMetadata.create({
4537
+ trackId: localTrack.id,
4538
+ metadataJson: JSON.stringify(trackContext.metadata)
4539
+ });
4540
+ this.sendMediaEvent({ updateTrackMetadata });
4541
+ }
4542
+ trackContext.pendingMetadataUpdate = false;
4543
+ });
4544
+ if (!this.connectionManager) throw new Error(`There is no active RTCPeerConnection`);
4545
+ this.connectionManager.setOnTrackReady((event) => {
4546
+ this.onTrackReady(event);
4547
+ });
4548
+ try {
4549
+ await this.connectionManager.setRemoteDescription({ sdp: data.sdp, type: "answer" });
4550
+ } catch (err) {
4551
+ console.error(err);
4552
+ }
4553
+ };
4554
+ /**
4555
+ * Adds track that will be sent to the RTC Engine.
4556
+ * @param track - Audio or video track e.g. from your microphone or camera.
4557
+ * @param trackMetadata - Any information about this track that other endpoints will
4558
+ * receive in {@link WebRTCEndpointEvents.endpointAdded}. E.g. this can source of the track - whether it's
4559
+ * screensharing, webcam or some other media device.
4560
+ * @param simulcastConfig - Simulcast configuration. By default simulcast is disabled.
4561
+ * For more information refer to {@link SimulcastConfig}.
4562
+ * @param maxBandwidth - maximal bandwidth this track can use.
4563
+ * Defaults to 0 which is unlimited.
4564
+ * This option has no effect for simulcast and audio tracks.
4565
+ * For simulcast tracks use `{@link WebRTCEndpoint.setTrackBandwidth}.
4566
+ * @returns {string} Returns id of added track
4567
+ * @example
4568
+ * ```ts
4569
+ * let localStream: MediaStream = new MediaStream();
4570
+ * try {
4571
+ * localAudioStream = await navigator.mediaDevices.getUserMedia(
4572
+ * AUDIO_CONSTRAINTS
4573
+ * );
4574
+ * localAudioStream
4575
+ * .getTracks()
4576
+ * .forEach((track) => localStream.addTrack(track));
4577
+ * } catch (error) {
4578
+ * console.error("Couldn't get microphone permission:", error);
4579
+ * }
4580
+ *
4581
+ * try {
4582
+ * localVideoStream = await navigator.mediaDevices.getUserMedia(
4583
+ * VIDEO_CONSTRAINTS
4584
+ * );
4585
+ * localVideoStream
4586
+ * .getTracks()
4587
+ * .forEach((track) => localStream.addTrack(track));
4588
+ * } catch (error) {
4589
+ * console.error("Couldn't get camera permission:", error);
4590
+ * }
4591
+ *
4592
+ * localStream
4593
+ * .getTracks()
4594
+ * .forEach((track) => webrtc.addTrack(track, localStream));
4595
+ * ```
4596
+ */
4597
+ async addTrack(track, trackMetadata, simulcastConfig = {
4598
+ enabled: false,
4599
+ enabledVariants: [],
4600
+ disabledVariants: []
4601
+ }, maxBandwidth = 0) {
4602
+ const resolutionNotifier = new Deferred();
4603
+ const trackId = this.getTrackId(uuidv4());
4604
+ const stream = new MediaStream();
4605
+ try {
4606
+ stream.addTrack(track);
4607
+ this.commandsQueue.pushCommand({
4608
+ handler: async () => this.localTrackManager.addTrackHandler(trackId, track, stream, trackMetadata, simulcastConfig, maxBandwidth),
4609
+ parse: () => this.localTrackManager.parseAddTrack(track, simulcastConfig, maxBandwidth),
4610
+ resolve: "after-renegotiation",
4611
+ resolutionNotifier
4612
+ });
4613
+ } catch (error) {
4614
+ resolutionNotifier.reject(error);
4615
+ }
4616
+ await resolutionNotifier.promise;
4617
+ this.emit("localTrackAdded", {
4618
+ trackId,
4619
+ track,
4620
+ stream,
4621
+ trackMetadata,
4622
+ simulcastConfig,
4623
+ maxBandwidth
4624
+ });
4625
+ return trackId;
4626
+ }
4627
+ /**
4628
+ * Replaces a track that is being sent to the RTC Engine.
4629
+ * @param trackId - Audio or video track.
4630
+ * @param {string} trackId - Id of audio or video track to replace.
4631
+ * @param {MediaStreamTrack} newTrack
4632
+ * @returns {Promise<boolean>} success
4633
+ * @example
4634
+ * ```ts
4635
+ * // setup camera
4636
+ * let localStream: MediaStream = new MediaStream();
4637
+ * try {
4638
+ * localVideoStream = await navigator.mediaDevices.getUserMedia(
4639
+ * VIDEO_CONSTRAINTS
4640
+ * );
4641
+ * localVideoStream
4642
+ * .getTracks()
4643
+ * .forEach((track) => localStream.addTrack(track));
4644
+ * } catch (error) {
4645
+ * console.error("Couldn't get camera permission:", error);
4646
+ * }
4647
+ * let oldTrackId;
4648
+ * localStream
4649
+ * .getTracks()
4650
+ * .forEach((track) => trackId = webrtc.addTrack(track, localStream));
4651
+ *
4652
+ * // change camera
4653
+ * const oldTrack = localStream.getVideoTracks()[0];
4654
+ * let videoDeviceId = "abcd-1234";
4655
+ * navigator.mediaDevices.getUserMedia({
4656
+ * video: {
4657
+ * ...(VIDEO_CONSTRAINTS as {}),
4658
+ * deviceId: {
4659
+ * exact: videoDeviceId,
4660
+ * },
4661
+ * }
4662
+ * })
4663
+ * .then((stream) => {
4664
+ * let videoTrack = stream.getVideoTracks()[0];
4665
+ * webrtc.replaceTrack(oldTrackId, videoTrack);
4666
+ * })
4667
+ * .catch((error) => {
4668
+ * console.error('Error switching camera', error);
4669
+ * })
4670
+ * ```
4671
+ */
4672
+ async replaceTrack(trackId, newTrack) {
4673
+ const resolutionNotifier = new Deferred();
4674
+ this.commandsQueue.pushCommand({
4675
+ handler: () => this.localTrackManager.replaceTrackHandler(this, trackId, newTrack),
4676
+ resolutionNotifier,
4677
+ resolve: "on-handler-resolve"
4678
+ });
4679
+ return resolutionNotifier.promise.then(() => {
4680
+ this.emit("localTrackReplaced", { trackId, track: newTrack });
4681
+ });
4682
+ }
4683
+ /**
4684
+ * Updates maximum bandwidth for the track identified by trackId.
4685
+ * This value directly translates to quality of the stream and, in case of video, to the amount of RTP packets being sent.
4686
+ * In case trackId points at the simulcast track bandwidth is split between all of the variant streams proportionally to their resolution.
4687
+ *
4688
+ * @param {string} trackId
4689
+ * @param {BandwidthLimit} bandwidth in kbps
4690
+ * @returns {Promise<boolean>} success
4691
+ */
4692
+ setTrackBandwidth(trackId, bandwidth) {
4693
+ if (!this.connectionManager) throw new Error(`There is no active RTCPeerConnection`);
4694
+ return this.local.setTrackBandwidth(trackId, bandwidth);
4695
+ }
4696
+ /**
4697
+ * Updates maximum bandwidth for the given simulcast encoding of the given track.
4698
+ *
4699
+ * @param {string} trackId - id of the track
4700
+ * @param {string} rid - rid of the encoding
4701
+ * @param {BandwidthLimit} bandwidth - desired max bandwidth used by the encoding (in kbps)
4702
+ * @returns
4703
+ */
4704
+ async setEncodingBandwidth(trackId, rid, bandwidth) {
4705
+ if (!this.connectionManager) throw new Error(`There is no active RTCPeerConnection`);
4706
+ return await this.local.setEncodingBandwidth(trackId, rid, bandwidth);
4707
+ }
4708
+ /**
4709
+ * Removes a track from connection that was sent to the RTC Engine.
4710
+ * @param {string} trackId - Id of audio or video track to remove.
4711
+ * @example
4712
+ * ```ts
4713
+ * // setup camera
4714
+ * let localStream: MediaStream = new MediaStream();
4715
+ * try {
4716
+ * localVideoStream = await navigator.mediaDevices.getUserMedia(
4717
+ * VIDEO_CONSTRAINTS
4718
+ * );
4719
+ * localVideoStream
4720
+ * .getTracks()
4721
+ * .forEach((track) => localStream.addTrack(track));
4722
+ * } catch (error) {
4723
+ * console.error("Couldn't get camera permission:", error);
4724
+ * }
4725
+ *
4726
+ * let trackId
4727
+ * localStream
4728
+ * .getTracks()
4729
+ * .forEach((track) => trackId = webrtc.addTrack(track, localStream));
4730
+ *
4731
+ * // remove track
4732
+ * webrtc.removeTrack(trackId)
4733
+ * ```
4734
+ */
4735
+ async removeTrack(trackId) {
4736
+ const resolutionNotifier = new Deferred();
4737
+ this.commandsQueue.pushCommand({
4738
+ handler: async () => this.localTrackManager.removeTrackHandler(trackId),
4739
+ resolutionNotifier,
4740
+ resolve: "after-renegotiation"
4741
+ });
4742
+ await resolutionNotifier.promise;
4743
+ this.emit("localTrackRemoved", {
4744
+ trackId
4745
+ });
4746
+ }
4747
+ /**
4748
+ * Sets track variant that server should send to the client library.
4749
+ *
4750
+ * The variant will be sent whenever it is available.
4751
+ * If chosen variant is temporarily unavailable, some other variant
4752
+ * will be sent until the chosen variant becomes active again.
4753
+ *
4754
+ * @param {string} trackId - id of track
4755
+ * @param {Encoding} variant - variant to receive
4756
+ * @example
4757
+ * ```ts
4758
+ * webrtc.setTargetTrackEncoding(incomingTrackCtx.trackId, "l")
4759
+ * ```
4760
+ */
4761
+ setTargetTrackEncoding(trackId, variant) {
4762
+ this.remote.setTargetRemoteTrackEncoding(trackId, variant);
4763
+ }
4764
+ /**
4765
+ * Enables track encoding so that it will be sent to the server.
4766
+ * @param {string} trackId - id of track
4767
+ * @param {Encoding} encoding - encoding that will be enabled
4768
+ * @example
4769
+ * ```ts
4770
+ * const trackId = webrtc.addTrack(track, stream, {}, {enabled: true, activeEncodings: ["l", "m", "h"]});
4771
+ * webrtc.disableTrackEncoding(trackId, "l");
4772
+ * // wait some time
4773
+ * webrtc.enableTrackEncoding(trackId, "l");
4774
+ * ```
4775
+ */
4776
+ enableTrackEncoding = async (trackId, encoding) => {
4777
+ await this.local.enableLocalTrackEncoding(trackId, encoding);
4778
+ };
4779
+ /**
4780
+ * Disables track encoding so that it will be no longer sent to the server.
4781
+ * @param {string} trackId - id of track
4782
+ * @param {Encoding} encoding - encoding that will be disabled
4783
+ * @example
4784
+ * ```ts
4785
+ * const trackId = webrtc.addTrack(track, stream, {}, {enabled: true, activeEncodings: ["l", "m", "h"]});
4786
+ * webrtc.disableTrackEncoding(trackId, "l");
4787
+ * ```
4788
+ */
4789
+ disableTrackEncoding = async (trackId, encoding) => {
4790
+ await this.local.disableLocalTrackEncoding(trackId, encoding);
4791
+ };
4792
+ /**
4793
+ * Updates the metadata for the current endpoint.
4794
+ * @param metadata - Data about this endpoint that other endpoints will receive upon being added.
4795
+ *
4796
+ * If the metadata is different from what is already tracked in the room, the optional
4797
+ * event `endpointUpdated` will be emitted for other endpoint in the room.
4798
+ */
4799
+ updateEndpointMetadata = (metadata) => {
4800
+ this.local.updateEndpointMetadata(metadata);
4801
+ };
4802
+ /**
4803
+ * Updates the metadata for a specific track.
4804
+ * @param trackId - trackId (generated in addTrack) of audio or video track.
4805
+ * @param trackMetadata - Data about this track that other endpoint will receive upon being added.
4806
+ *
4807
+ * If the metadata is different from what is already tracked in the room, the optional
4808
+ * event `trackUpdated` will be emitted for other endpoints in the room.
4809
+ */
4810
+ updateTrackMetadata = (trackId, trackMetadata) => {
4811
+ this.local.updateLocalTrackMetadata(trackId, trackMetadata);
4812
+ };
4813
+ /**
4814
+ * Disconnects from the room. This function should be called when user disconnects from the room
4815
+ * in a clean way e.g. by clicking a dedicated, custom button `disconnect`.
4816
+ * As a result there will be generated one more media event that should be
4817
+ * sent to the RTC Engine. Thanks to it each other endpoint will be notified
4818
+ * that endpoint was removed in {@link WebRTCEndpointEvents.endpointRemoved},
4819
+ */
4820
+ disconnect = () => {
4821
+ const disconnect = MediaEvent_Disconnect.create();
4822
+ this.sendMediaEvent({ disconnect });
4823
+ this.emit("disconnectRequested", {});
4824
+ this.cleanUp();
4825
+ };
4826
+ /**
4827
+ * Cleans up {@link WebRTCEndpoint} instance.
4828
+ */
4829
+ cleanUp = () => {
4830
+ if (this.connectionManager) {
4831
+ this.clearConnectionCallbacks?.();
4832
+ this.connectionManager?.getConnection().close();
4833
+ this.commandsQueue.cleanUp();
4834
+ this.localTrackManager.cleanUp();
4835
+ }
4836
+ this.connectionManager = void 0;
4837
+ };
4838
+ getTrackId(uuid) {
4839
+ return `${this.getEndpointId()}:${uuid}`;
4840
+ }
4841
+ sendMediaEvent = (mediaEvent) => {
4842
+ this.emit("sendMediaEvent", serializePeerMediaEvent(mediaEvent));
4843
+ };
4844
+ async createAndSendOffer() {
4845
+ const connection = this.connectionManager;
4846
+ if (!connection) return;
4847
+ try {
4848
+ this.localTrackManager.updateSenders();
4849
+ const offer = await connection.getConnection().createOffer();
4850
+ if (!this.connectionManager) {
4851
+ console.warn("RTCPeerConnection stopped or restarted");
4852
+ return;
4853
+ }
4854
+ await connection.getConnection().setLocalDescription(offer);
4855
+ if (!this.connectionManager) {
4856
+ console.warn("RTCPeerConnection stopped or restarted");
4857
+ return;
4858
+ }
4859
+ const sdpOffer = this.local.createSdpOfferEvent(offer);
4860
+ this.sendMediaEvent({ sdpOffer });
4861
+ this.local.setLocalTrackStatusToOffered();
4862
+ } catch (error) {
4863
+ console.error(error);
4864
+ }
4865
+ }
4866
+ onOfferData = async (offerData) => {
4867
+ const connectionManager = this.connectionManager ?? this.createNewConnection();
4868
+ if (offerData.tracksTypes) {
4869
+ connectionManager.addTransceiversIfNeeded(offerData.tracksTypes);
4870
+ }
4871
+ await this.createAndSendOffer();
4872
+ };
4873
+ setupConnectionListeners = (connection) => {
4874
+ const onIceCandidate = (event) => this.onLocalCandidate(event);
4875
+ const onIceCandidateError = (event) => this.onIceCandidateError(event);
4876
+ const onConnectionStateChange = (event) => this.onConnectionStateChange(event);
4877
+ const onIceConnectionStateChange = (event) => this.onIceConnectionStateChange(event);
4878
+ this.clearConnectionCallbacks = () => {
4879
+ connection.removeEventListener("icecandidate", onIceCandidate);
4880
+ connection.removeEventListener("icecandidateerror", onIceCandidateError);
4881
+ connection.removeEventListener("connectionstatechange", onConnectionStateChange);
4882
+ connection.removeEventListener("iceconnectionstatechange", onIceConnectionStateChange);
4883
+ };
4884
+ connection.addEventListener("icecandidate", onIceCandidate);
4885
+ connection.addEventListener("icecandidateerror", onIceCandidateError);
4886
+ connection.addEventListener("connectionstatechange", onConnectionStateChange);
4887
+ connection.addEventListener("iceconnectionstatechange", onIceConnectionStateChange);
4888
+ };
4889
+ createNewConnection = () => {
4890
+ const connectionManager = new ConnectionManager(this.proposedIceServers);
4891
+ this.localTrackManager.updateConnection(connectionManager);
4892
+ this.local.updateConnection(connectionManager);
4893
+ this.setupConnectionListeners(connectionManager.getConnection());
4894
+ this.commandsQueue.initConnection(connectionManager);
4895
+ this.local.addAllTracksToConnection();
4896
+ this.connectionManager = connectionManager;
4897
+ return connectionManager;
4898
+ };
4899
+ onRemoteCandidate = async (candidate) => {
4900
+ try {
4901
+ const iceCandidate = new RTCIceCandidate(candidate);
4902
+ if (!this.connectionManager) {
4903
+ throw new Error("Received new remote candidate but RTCConnection is undefined");
4904
+ }
4905
+ await this.connectionManager.addIceCandidate(iceCandidate);
4906
+ } catch (error) {
4907
+ console.error(error);
4908
+ }
4909
+ };
4910
+ onLocalCandidate = (event) => {
4911
+ if (!event.candidate) return;
4912
+ const candidate = Candidate.create({
4913
+ candidate: event.candidate.candidate,
4914
+ sdpMLineIndex: event.candidate.sdpMLineIndex ?? void 0,
4915
+ sdpMid: event.candidate.sdpMid ?? void 0,
4916
+ usernameFragment: event.candidate.usernameFragment ?? void 0
4917
+ });
4918
+ this.sendMediaEvent({ candidate });
4919
+ };
4920
+ onIceCandidateError = (event) => {
4921
+ console.warn(event);
4922
+ };
4923
+ onConnectionStateChange = (event) => {
4924
+ switch (this.localTrackManager.connection?.getConnection().connectionState) {
4925
+ case "failed":
4926
+ this.emit("connectionError", {
4927
+ message: "RTCPeerConnection failed",
4928
+ event
4929
+ });
4930
+ break;
4931
+ }
4932
+ };
4933
+ onIceConnectionStateChange = (event) => {
4934
+ switch (this.localTrackManager.connection?.getConnection().iceConnectionState) {
4935
+ case "disconnected":
4936
+ console.warn("ICE connection: disconnected");
4937
+ this.sendMediaEvent({ renegotiateTracks: MediaEvent_RenegotiateTracks.create() });
4938
+ break;
4939
+ case "failed":
4940
+ this.emit("connectionError", {
4941
+ message: "ICE connection failed",
4942
+ event
4943
+ });
4944
+ break;
4945
+ }
4946
+ };
4947
+ };
4948
+ export {
4949
+ MediaEvent_Track_SimulcastConfig as SimulcastConfig,
4950
+ Variant,
4951
+ WebRTCEndpoint
4952
+ };