@stream-io/video-client 0.5.11 → 0.6.1

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 (56) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/index.browser.es.js +377 -566
  3. package/dist/index.browser.es.js.map +1 -1
  4. package/dist/index.cjs.js +376 -565
  5. package/dist/index.cjs.js.map +1 -1
  6. package/dist/index.es.js +377 -566
  7. package/dist/index.es.js.map +1 -1
  8. package/dist/src/Call.d.ts +12 -13
  9. package/dist/src/StreamVideoClient.d.ts +4 -5
  10. package/dist/src/coordinator/connection/client.d.ts +7 -13
  11. package/dist/src/coordinator/connection/types.d.ts +16 -4
  12. package/dist/src/devices/SpeakerManager.d.ts +14 -3
  13. package/dist/src/events/call-permissions.d.ts +2 -2
  14. package/dist/src/events/call.d.ts +4 -4
  15. package/dist/src/events/internal.d.ts +2 -2
  16. package/dist/src/events/participant.d.ts +5 -5
  17. package/dist/src/rtc/Dispatcher.d.ts +19 -6
  18. package/dist/src/rtc/IceTrickleBuffer.d.ts +2 -3
  19. package/dist/src/rtc/signal.d.ts +2 -2
  20. package/dist/src/types.d.ts +7 -0
  21. package/package.json +4 -4
  22. package/src/Call.ts +46 -53
  23. package/src/StreamSfuClient.ts +1 -3
  24. package/src/StreamVideoClient.ts +14 -13
  25. package/src/__tests__/server-side/call.test.ts +1 -7
  26. package/src/coordinator/connection/client.ts +30 -53
  27. package/src/coordinator/connection/connection.ts +22 -9
  28. package/src/coordinator/connection/types.ts +16 -5
  29. package/src/devices/InputMediaDeviceManagerState.ts +10 -1
  30. package/src/devices/SpeakerManager.ts +25 -4
  31. package/src/devices/__tests__/InputMediaDeviceManagerState.test.ts +25 -1
  32. package/src/devices/__tests__/SpeakerManager.test.ts +32 -2
  33. package/src/events/__tests__/call-permissions.test.ts +10 -20
  34. package/src/events/__tests__/mutes.test.ts +26 -55
  35. package/src/events/__tests__/participant.test.ts +47 -87
  36. package/src/events/call-permissions.ts +3 -4
  37. package/src/events/call.ts +6 -13
  38. package/src/events/callEventHandlers.ts +7 -4
  39. package/src/events/internal.ts +14 -22
  40. package/src/events/mutes.ts +1 -4
  41. package/src/events/participant.ts +14 -19
  42. package/src/events/speaker.ts +2 -8
  43. package/src/gen/google/protobuf/struct.ts +12 -19
  44. package/src/gen/google/protobuf/timestamp.ts +4 -7
  45. package/src/gen/video/sfu/event/events.ts +83 -164
  46. package/src/gen/video/sfu/models/models.ts +81 -123
  47. package/src/gen/video/sfu/signal_rpc/signal.client.ts +1 -1
  48. package/src/gen/video/sfu/signal_rpc/signal.ts +38 -77
  49. package/src/helpers/DynascaleManager.ts +7 -5
  50. package/src/helpers/__tests__/DynascaleManager.test.ts +5 -0
  51. package/src/rtc/Dispatcher.ts +42 -25
  52. package/src/rtc/IceTrickleBuffer.ts +4 -8
  53. package/src/rtc/Publisher.ts +1 -3
  54. package/src/rtc/Subscriber.ts +2 -6
  55. package/src/rtc/signal.ts +3 -2
  56. package/src/types.ts +8 -0
package/dist/index.cjs.js CHANGED
@@ -218,11 +218,8 @@ class Struct$Type extends runtime.MessageType {
218
218
  return target;
219
219
  }
220
220
  create(value) {
221
- const message = { fields: {} };
222
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
223
- enumerable: false,
224
- value: this,
225
- });
221
+ const message = globalThis.Object.create(this.messagePrototype);
222
+ message.fields = {};
226
223
  if (value !== undefined)
227
224
  runtime.reflectionMergePartial(this, message, value);
228
225
  return message;
@@ -265,7 +262,7 @@ class Struct$Type extends runtime.MessageType {
265
262
  }
266
263
  internalBinaryWrite(message, writer, options) {
267
264
  /* map<string, google.protobuf.Value> fields = 1; */
268
- for (let k of Object.keys(message.fields)) {
265
+ for (let k of globalThis.Object.keys(message.fields)) {
269
266
  writer
270
267
  .tag(1, runtime.WireType.LengthDelimited)
271
268
  .fork()
@@ -347,7 +344,10 @@ class Value$Type extends runtime.MessageType {
347
344
  case 'nullValue':
348
345
  return null;
349
346
  case 'numberValue':
350
- return message.kind.numberValue;
347
+ let numberValue = message.kind.numberValue;
348
+ if (typeof numberValue == 'number' && !Number.isFinite(numberValue))
349
+ throw new globalThis.Error();
350
+ return numberValue;
351
351
  case 'stringValue':
352
352
  return message.kind.stringValue;
353
353
  case 'listValue':
@@ -407,11 +407,8 @@ class Value$Type extends runtime.MessageType {
407
407
  return target;
408
408
  }
409
409
  create(value) {
410
- const message = { kind: { oneofKind: undefined } };
411
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
412
- enumerable: false,
413
- value: this,
414
- });
410
+ const message = globalThis.Object.create(this.messagePrototype);
411
+ message.kind = { oneofKind: undefined };
415
412
  if (value !== undefined)
416
413
  runtime.reflectionMergePartial(this, message, value);
417
414
  return message;
@@ -532,11 +529,8 @@ class ListValue$Type extends runtime.MessageType {
532
529
  return target;
533
530
  }
534
531
  create(value) {
535
- const message = { values: [] };
536
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
537
- enumerable: false,
538
- value: this,
539
- });
532
+ const message = globalThis.Object.create(this.messagePrototype);
533
+ message.values = [];
540
534
  if (value !== undefined)
541
535
  runtime.reflectionMergePartial(this, message, value);
542
536
  return message;
@@ -671,11 +665,9 @@ class Timestamp$Type extends runtime.MessageType {
671
665
  return target;
672
666
  }
673
667
  create(value) {
674
- const message = { seconds: '0', nanos: 0 };
675
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
676
- enumerable: false,
677
- value: this,
678
- });
668
+ const message = globalThis.Object.create(this.messagePrototype);
669
+ message.seconds = '0';
670
+ message.nanos = 0;
679
671
  if (value !== undefined)
680
672
  runtime.reflectionMergePartial(this, message, value);
681
673
  return message;
@@ -1012,11 +1004,9 @@ class CallState$Type extends runtime.MessageType {
1012
1004
  ]);
1013
1005
  }
1014
1006
  create(value) {
1015
- const message = { participants: [], pins: [] };
1016
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
1017
- enumerable: false,
1018
- value: this,
1019
- });
1007
+ const message = globalThis.Object.create(this.messagePrototype);
1008
+ message.participants = [];
1009
+ message.pins = [];
1020
1010
  if (value !== undefined)
1021
1011
  runtime.reflectionMergePartial(this, message, value);
1022
1012
  return message;
@@ -1081,11 +1071,9 @@ class ParticipantCount$Type extends runtime.MessageType {
1081
1071
  ]);
1082
1072
  }
1083
1073
  create(value) {
1084
- const message = { total: 0, anonymous: 0 };
1085
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
1086
- enumerable: false,
1087
- value: this,
1088
- });
1074
+ const message = globalThis.Object.create(this.messagePrototype);
1075
+ message.total = 0;
1076
+ message.anonymous = 0;
1089
1077
  if (value !== undefined)
1090
1078
  runtime.reflectionMergePartial(this, message, value);
1091
1079
  return message;
@@ -1138,11 +1126,9 @@ class Pin$Type extends runtime.MessageType {
1138
1126
  ]);
1139
1127
  }
1140
1128
  create(value) {
1141
- const message = { userId: '', sessionId: '' };
1142
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
1143
- enumerable: false,
1144
- value: this,
1145
- });
1129
+ const message = globalThis.Object.create(this.messagePrototype);
1130
+ message.userId = '';
1131
+ message.sessionId = '';
1146
1132
  if (value !== undefined)
1147
1133
  runtime.reflectionMergePartial(this, message, value);
1148
1134
  return message;
@@ -1241,23 +1227,18 @@ class Participant$Type extends runtime.MessageType {
1241
1227
  ]);
1242
1228
  }
1243
1229
  create(value) {
1244
- const message = {
1245
- userId: '',
1246
- sessionId: '',
1247
- publishedTracks: [],
1248
- trackLookupPrefix: '',
1249
- connectionQuality: 0,
1250
- isSpeaking: false,
1251
- isDominantSpeaker: false,
1252
- audioLevel: 0,
1253
- name: '',
1254
- image: '',
1255
- roles: [],
1256
- };
1257
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
1258
- enumerable: false,
1259
- value: this,
1260
- });
1230
+ const message = globalThis.Object.create(this.messagePrototype);
1231
+ message.userId = '';
1232
+ message.sessionId = '';
1233
+ message.publishedTracks = [];
1234
+ message.trackLookupPrefix = '';
1235
+ message.connectionQuality = 0;
1236
+ message.isSpeaking = false;
1237
+ message.isDominantSpeaker = false;
1238
+ message.audioLevel = 0;
1239
+ message.name = '';
1240
+ message.image = '';
1241
+ message.roles = [];
1261
1242
  if (value !== undefined)
1262
1243
  runtime.reflectionMergePartial(this, message, value);
1263
1244
  return message;
@@ -1393,11 +1374,9 @@ class StreamQuality$Type extends runtime.MessageType {
1393
1374
  ]);
1394
1375
  }
1395
1376
  create(value) {
1396
- const message = { videoQuality: 0, userId: '' };
1397
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
1398
- enumerable: false,
1399
- value: this,
1400
- });
1377
+ const message = globalThis.Object.create(this.messagePrototype);
1378
+ message.videoQuality = 0;
1379
+ message.userId = '';
1401
1380
  if (value !== undefined)
1402
1381
  runtime.reflectionMergePartial(this, message, value);
1403
1382
  return message;
@@ -1450,11 +1429,9 @@ class VideoDimension$Type extends runtime.MessageType {
1450
1429
  ]);
1451
1430
  }
1452
1431
  create(value) {
1453
- const message = { width: 0, height: 0 };
1454
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
1455
- enumerable: false,
1456
- value: this,
1457
- });
1432
+ const message = globalThis.Object.create(this.messagePrototype);
1433
+ message.width = 0;
1434
+ message.height = 0;
1458
1435
  if (value !== undefined)
1459
1436
  runtime.reflectionMergePartial(this, message, value);
1460
1437
  return message;
@@ -1524,11 +1501,11 @@ class VideoLayer$Type extends runtime.MessageType {
1524
1501
  ]);
1525
1502
  }
1526
1503
  create(value) {
1527
- const message = { rid: '', bitrate: 0, fps: 0, quality: 0 };
1528
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
1529
- enumerable: false,
1530
- value: this,
1531
- });
1504
+ const message = globalThis.Object.create(this.messagePrototype);
1505
+ message.rid = '';
1506
+ message.bitrate = 0;
1507
+ message.fps = 0;
1508
+ message.quality = 0;
1532
1509
  if (value !== undefined)
1533
1510
  runtime.reflectionMergePartial(this, message, value);
1534
1511
  return message;
@@ -1624,18 +1601,13 @@ class Codec$Type extends runtime.MessageType {
1624
1601
  ]);
1625
1602
  }
1626
1603
  create(value) {
1627
- const message = {
1628
- payloadType: 0,
1629
- name: '',
1630
- fmtpLine: '',
1631
- clockRate: 0,
1632
- encodingParameters: '',
1633
- feedbacks: [],
1634
- };
1635
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
1636
- enumerable: false,
1637
- value: this,
1638
- });
1604
+ const message = globalThis.Object.create(this.messagePrototype);
1605
+ message.payloadType = 0;
1606
+ message.name = '';
1607
+ message.fmtpLine = '';
1608
+ message.clockRate = 0;
1609
+ message.encodingParameters = '';
1610
+ message.feedbacks = [];
1639
1611
  if (value !== undefined)
1640
1612
  runtime.reflectionMergePartial(this, message, value);
1641
1613
  return message;
@@ -1725,11 +1697,10 @@ let ICETrickle$Type$1 = class ICETrickle$Type extends runtime.MessageType {
1725
1697
  ]);
1726
1698
  }
1727
1699
  create(value) {
1728
- const message = { peerType: 0, iceCandidate: '', sessionId: '' };
1729
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
1730
- enumerable: false,
1731
- value: this,
1732
- });
1700
+ const message = globalThis.Object.create(this.messagePrototype);
1701
+ message.peerType = 0;
1702
+ message.iceCandidate = '';
1703
+ message.sessionId = '';
1733
1704
  if (value !== undefined)
1734
1705
  runtime.reflectionMergePartial(this, message, value);
1735
1706
  return message;
@@ -1808,19 +1779,14 @@ class TrackInfo$Type extends runtime.MessageType {
1808
1779
  ]);
1809
1780
  }
1810
1781
  create(value) {
1811
- const message = {
1812
- trackId: '',
1813
- trackType: 0,
1814
- layers: [],
1815
- mid: '',
1816
- dtx: false,
1817
- stereo: false,
1818
- red: false,
1819
- };
1820
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
1821
- enumerable: false,
1822
- value: this,
1823
- });
1782
+ const message = globalThis.Object.create(this.messagePrototype);
1783
+ message.trackId = '';
1784
+ message.trackType = 0;
1785
+ message.layers = [];
1786
+ message.mid = '';
1787
+ message.dtx = false;
1788
+ message.stereo = false;
1789
+ message.red = false;
1824
1790
  if (value !== undefined)
1825
1791
  runtime.reflectionMergePartial(this, message, value);
1826
1792
  return message;
@@ -1918,11 +1884,11 @@ class Call$Type extends runtime.MessageType {
1918
1884
  ]);
1919
1885
  }
1920
1886
  create(value) {
1921
- const message = { type: '', id: '', createdByUserId: '', hostUserId: '' };
1922
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
1923
- enumerable: false,
1924
- value: this,
1925
- });
1887
+ const message = globalThis.Object.create(this.messagePrototype);
1888
+ message.type = '';
1889
+ message.id = '';
1890
+ message.createdByUserId = '';
1891
+ message.hostUserId = '';
1926
1892
  if (value !== undefined)
1927
1893
  runtime.reflectionMergePartial(this, message, value);
1928
1894
  return message;
@@ -2015,11 +1981,10 @@ let Error$Type$1 = class Error$Type extends runtime.MessageType {
2015
1981
  ]);
2016
1982
  }
2017
1983
  create(value) {
2018
- const message = { code: 0, message: '', shouldRetry: false };
2019
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2020
- enumerable: false,
2021
- value: this,
2022
- });
1984
+ const message = globalThis.Object.create(this.messagePrototype);
1985
+ message.code = 0;
1986
+ message.message = '';
1987
+ message.shouldRetry = false;
2023
1988
  if (value !== undefined)
2024
1989
  runtime.reflectionMergePartial(this, message, value);
2025
1990
  return message;
@@ -2080,11 +2045,7 @@ class ClientDetails$Type extends runtime.MessageType {
2080
2045
  ]);
2081
2046
  }
2082
2047
  create(value) {
2083
- const message = {};
2084
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2085
- enumerable: false,
2086
- value: this,
2087
- });
2048
+ const message = globalThis.Object.create(this.messagePrototype);
2088
2049
  if (value !== undefined)
2089
2050
  runtime.reflectionMergePartial(this, message, value);
2090
2051
  return message;
@@ -2156,11 +2117,11 @@ class Sdk$Type extends runtime.MessageType {
2156
2117
  ]);
2157
2118
  }
2158
2119
  create(value) {
2159
- const message = { type: 0, major: '', minor: '', patch: '' };
2160
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2161
- enumerable: false,
2162
- value: this,
2163
- });
2120
+ const message = globalThis.Object.create(this.messagePrototype);
2121
+ message.type = 0;
2122
+ message.major = '';
2123
+ message.minor = '';
2124
+ message.patch = '';
2164
2125
  if (value !== undefined)
2165
2126
  runtime.reflectionMergePartial(this, message, value);
2166
2127
  return message;
@@ -2231,11 +2192,10 @@ class OS$Type extends runtime.MessageType {
2231
2192
  ]);
2232
2193
  }
2233
2194
  create(value) {
2234
- const message = { name: '', version: '', architecture: '' };
2235
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2236
- enumerable: false,
2237
- value: this,
2238
- });
2195
+ const message = globalThis.Object.create(this.messagePrototype);
2196
+ message.name = '';
2197
+ message.version = '';
2198
+ message.architecture = '';
2239
2199
  if (value !== undefined)
2240
2200
  runtime.reflectionMergePartial(this, message, value);
2241
2201
  return message;
@@ -2294,11 +2254,9 @@ class Browser$Type extends runtime.MessageType {
2294
2254
  ]);
2295
2255
  }
2296
2256
  create(value) {
2297
- const message = { name: '', version: '' };
2298
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2299
- enumerable: false,
2300
- value: this,
2301
- });
2257
+ const message = globalThis.Object.create(this.messagePrototype);
2258
+ message.name = '';
2259
+ message.version = '';
2302
2260
  if (value !== undefined)
2303
2261
  runtime.reflectionMergePartial(this, message, value);
2304
2262
  return message;
@@ -2351,11 +2309,9 @@ class Device$Type extends runtime.MessageType {
2351
2309
  ]);
2352
2310
  }
2353
2311
  create(value) {
2354
- const message = { name: '', version: '' };
2355
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2356
- enumerable: false,
2357
- value: this,
2358
- });
2312
+ const message = globalThis.Object.create(this.messagePrototype);
2313
+ message.name = '';
2314
+ message.version = '';
2359
2315
  if (value !== undefined)
2360
2316
  runtime.reflectionMergePartial(this, message, value);
2361
2317
  return message;
@@ -2424,15 +2380,10 @@ class CallGrants$Type extends runtime.MessageType {
2424
2380
  ]);
2425
2381
  }
2426
2382
  create(value) {
2427
- const message = {
2428
- canPublishAudio: false,
2429
- canPublishVideo: false,
2430
- canScreenshare: false,
2431
- };
2432
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2433
- enumerable: false,
2434
- value: this,
2435
- });
2383
+ const message = globalThis.Object.create(this.messagePrototype);
2384
+ message.canPublishAudio = false;
2385
+ message.canPublishVideo = false;
2386
+ message.canScreenshare = false;
2436
2387
  if (value !== undefined)
2437
2388
  runtime.reflectionMergePartial(this, message, value);
2438
2389
  return message;
@@ -2514,7 +2465,7 @@ var models = /*#__PURE__*/Object.freeze({
2514
2465
  });
2515
2466
 
2516
2467
  /* eslint-disable */
2517
- // @generated by protobuf-ts 2.9.0 with parameter long_type_string,client_generic,server_none,eslint_disable
2468
+ // @generated by protobuf-ts 2.9.3 with parameter long_type_string,client_generic,server_none,eslint_disable
2518
2469
  // @generated from protobuf file "video/sfu/signal_rpc/signal.proto" (package "stream.video.sfu.signal", syntax proto3)
2519
2470
  // tslint:disable
2520
2471
  // @generated message type with reflection information, may provide speed optimized methods
@@ -2531,11 +2482,9 @@ class ICERestartRequest$Type extends runtime.MessageType {
2531
2482
  ]);
2532
2483
  }
2533
2484
  create(value) {
2534
- const message = { sessionId: '', peerType: 0 };
2535
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2536
- enumerable: false,
2537
- value: this,
2538
- });
2485
+ const message = globalThis.Object.create(this.messagePrototype);
2486
+ message.sessionId = '';
2487
+ message.peerType = 0;
2539
2488
  if (value !== undefined)
2540
2489
  runtime.reflectionMergePartial(this, message, value);
2541
2490
  return message;
@@ -2587,11 +2536,7 @@ class ICERestartResponse$Type extends runtime.MessageType {
2587
2536
  ]);
2588
2537
  }
2589
2538
  create(value) {
2590
- const message = {};
2591
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2592
- enumerable: false,
2593
- value: this,
2594
- });
2539
+ const message = globalThis.Object.create(this.messagePrototype);
2595
2540
  if (value !== undefined)
2596
2541
  runtime.reflectionMergePartial(this, message, value);
2597
2542
  return message;
@@ -2644,11 +2589,9 @@ class UpdateMuteStatesRequest$Type extends runtime.MessageType {
2644
2589
  ]);
2645
2590
  }
2646
2591
  create(value) {
2647
- const message = { sessionId: '', muteStates: [] };
2648
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2649
- enumerable: false,
2650
- value: this,
2651
- });
2592
+ const message = globalThis.Object.create(this.messagePrototype);
2593
+ message.sessionId = '';
2594
+ message.muteStates = [];
2652
2595
  if (value !== undefined)
2653
2596
  runtime.reflectionMergePartial(this, message, value);
2654
2597
  return message;
@@ -2700,11 +2643,7 @@ class UpdateMuteStatesResponse$Type extends runtime.MessageType {
2700
2643
  ]);
2701
2644
  }
2702
2645
  create(value) {
2703
- const message = {};
2704
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2705
- enumerable: false,
2706
- value: this,
2707
- });
2646
+ const message = globalThis.Object.create(this.messagePrototype);
2708
2647
  if (value !== undefined)
2709
2648
  runtime.reflectionMergePartial(this, message, value);
2710
2649
  return message;
@@ -2760,11 +2699,9 @@ class TrackMuteState$Type extends runtime.MessageType {
2760
2699
  ]);
2761
2700
  }
2762
2701
  create(value) {
2763
- const message = { trackType: 0, muted: false };
2764
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2765
- enumerable: false,
2766
- value: this,
2767
- });
2702
+ const message = globalThis.Object.create(this.messagePrototype);
2703
+ message.trackType = 0;
2704
+ message.muted = false;
2768
2705
  if (value !== undefined)
2769
2706
  runtime.reflectionMergePartial(this, message, value);
2770
2707
  return message;
@@ -2816,11 +2753,8 @@ class AudioMuteChanged$Type extends runtime.MessageType {
2816
2753
  ]);
2817
2754
  }
2818
2755
  create(value) {
2819
- const message = { muted: false };
2820
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2821
- enumerable: false,
2822
- value: this,
2823
- });
2756
+ const message = globalThis.Object.create(this.messagePrototype);
2757
+ message.muted = false;
2824
2758
  if (value !== undefined)
2825
2759
  runtime.reflectionMergePartial(this, message, value);
2826
2760
  return message;
@@ -2866,11 +2800,8 @@ class VideoMuteChanged$Type extends runtime.MessageType {
2866
2800
  ]);
2867
2801
  }
2868
2802
  create(value) {
2869
- const message = { muted: false };
2870
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2871
- enumerable: false,
2872
- value: this,
2873
- });
2803
+ const message = globalThis.Object.create(this.messagePrototype);
2804
+ message.muted = false;
2874
2805
  if (value !== undefined)
2875
2806
  runtime.reflectionMergePartial(this, message, value);
2876
2807
  return message;
@@ -2923,11 +2854,9 @@ class UpdateSubscriptionsRequest$Type extends runtime.MessageType {
2923
2854
  ]);
2924
2855
  }
2925
2856
  create(value) {
2926
- const message = { sessionId: '', tracks: [] };
2927
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2928
- enumerable: false,
2929
- value: this,
2930
- });
2857
+ const message = globalThis.Object.create(this.messagePrototype);
2858
+ message.sessionId = '';
2859
+ message.tracks = [];
2931
2860
  if (value !== undefined)
2932
2861
  runtime.reflectionMergePartial(this, message, value);
2933
2862
  return message;
@@ -2979,11 +2908,7 @@ class UpdateSubscriptionsResponse$Type extends runtime.MessageType {
2979
2908
  ]);
2980
2909
  }
2981
2910
  create(value) {
2982
- const message = {};
2983
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
2984
- enumerable: false,
2985
- value: this,
2986
- });
2911
+ const message = globalThis.Object.create(this.messagePrototype);
2987
2912
  if (value !== undefined)
2988
2913
  runtime.reflectionMergePartial(this, message, value);
2989
2914
  return message;
@@ -3041,11 +2966,10 @@ class TrackSubscriptionDetails$Type extends runtime.MessageType {
3041
2966
  ]);
3042
2967
  }
3043
2968
  create(value) {
3044
- const message = { userId: '', sessionId: '', trackType: 0 };
3045
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
3046
- enumerable: false,
3047
- value: this,
3048
- });
2969
+ const message = globalThis.Object.create(this.messagePrototype);
2970
+ message.userId = '';
2971
+ message.sessionId = '';
2972
+ message.trackType = 0;
3049
2973
  if (value !== undefined)
3050
2974
  runtime.reflectionMergePartial(this, message, value);
3051
2975
  return message;
@@ -3116,11 +3040,10 @@ class SendAnswerRequest$Type extends runtime.MessageType {
3116
3040
  ]);
3117
3041
  }
3118
3042
  create(value) {
3119
- const message = { peerType: 0, sdp: '', sessionId: '' };
3120
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
3121
- enumerable: false,
3122
- value: this,
3123
- });
3043
+ const message = globalThis.Object.create(this.messagePrototype);
3044
+ message.peerType = 0;
3045
+ message.sdp = '';
3046
+ message.sessionId = '';
3124
3047
  if (value !== undefined)
3125
3048
  runtime.reflectionMergePartial(this, message, value);
3126
3049
  return message;
@@ -3178,11 +3101,7 @@ class SendAnswerResponse$Type extends runtime.MessageType {
3178
3101
  ]);
3179
3102
  }
3180
3103
  create(value) {
3181
- const message = {};
3182
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
3183
- enumerable: false,
3184
- value: this,
3185
- });
3104
+ const message = globalThis.Object.create(this.messagePrototype);
3186
3105
  if (value !== undefined)
3187
3106
  runtime.reflectionMergePartial(this, message, value);
3188
3107
  return message;
@@ -3228,11 +3147,7 @@ class ICETrickleResponse$Type extends runtime.MessageType {
3228
3147
  ]);
3229
3148
  }
3230
3149
  create(value) {
3231
- const message = {};
3232
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
3233
- enumerable: false,
3234
- value: this,
3235
- });
3150
+ const message = globalThis.Object.create(this.messagePrototype);
3236
3151
  if (value !== undefined)
3237
3152
  runtime.reflectionMergePartial(this, message, value);
3238
3153
  return message;
@@ -3286,11 +3201,10 @@ class SetPublisherRequest$Type extends runtime.MessageType {
3286
3201
  ]);
3287
3202
  }
3288
3203
  create(value) {
3289
- const message = { sdp: '', sessionId: '', tracks: [] };
3290
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
3291
- enumerable: false,
3292
- value: this,
3293
- });
3204
+ const message = globalThis.Object.create(this.messagePrototype);
3205
+ message.sdp = '';
3206
+ message.sessionId = '';
3207
+ message.tracks = [];
3294
3208
  if (value !== undefined)
3295
3209
  runtime.reflectionMergePartial(this, message, value);
3296
3210
  return message;
@@ -3351,11 +3265,10 @@ class SetPublisherResponse$Type extends runtime.MessageType {
3351
3265
  ]);
3352
3266
  }
3353
3267
  create(value) {
3354
- const message = { sdp: '', sessionId: '', iceRestart: false };
3355
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
3356
- enumerable: false,
3357
- value: this,
3358
- });
3268
+ const message = globalThis.Object.create(this.messagePrototype);
3269
+ message.sdp = '';
3270
+ message.sessionId = '';
3271
+ message.iceRestart = false;
3359
3272
  if (value !== undefined)
3360
3273
  runtime.reflectionMergePartial(this, message, value);
3361
3274
  return message;
@@ -3603,11 +3516,8 @@ class SfuEvent$Type extends runtime.MessageType {
3603
3516
  ]);
3604
3517
  }
3605
3518
  create(value) {
3606
- const message = { eventPayload: { oneofKind: undefined } };
3607
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
3608
- enumerable: false,
3609
- value: this,
3610
- });
3519
+ const message = globalThis.Object.create(this.messagePrototype);
3520
+ message.eventPayload = { oneofKind: undefined };
3611
3521
  if (value !== undefined)
3612
3522
  runtime.reflectionMergePartial(this, message, value);
3613
3523
  return message;
@@ -3815,11 +3725,8 @@ class PinsChanged$Type extends runtime.MessageType {
3815
3725
  ]);
3816
3726
  }
3817
3727
  create(value) {
3818
- const message = { pins: [] };
3819
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
3820
- enumerable: false,
3821
- value: this,
3822
- });
3728
+ const message = globalThis.Object.create(this.messagePrototype);
3729
+ message.pins = [];
3823
3730
  if (value !== undefined)
3824
3731
  runtime.reflectionMergePartial(this, message, value);
3825
3732
  return message;
@@ -3865,11 +3772,7 @@ class Error$Type extends runtime.MessageType {
3865
3772
  ]);
3866
3773
  }
3867
3774
  create(value) {
3868
- const message = {};
3869
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
3870
- enumerable: false,
3871
- value: this,
3872
- });
3775
+ const message = globalThis.Object.create(this.messagePrototype);
3873
3776
  if (value !== undefined)
3874
3777
  runtime.reflectionMergePartial(this, message, value);
3875
3778
  return message;
@@ -3926,11 +3829,9 @@ class ICETrickle$Type extends runtime.MessageType {
3926
3829
  ]);
3927
3830
  }
3928
3831
  create(value) {
3929
- const message = { peerType: 0, iceCandidate: '' };
3930
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
3931
- enumerable: false,
3932
- value: this,
3933
- });
3832
+ const message = globalThis.Object.create(this.messagePrototype);
3833
+ message.peerType = 0;
3834
+ message.iceCandidate = '';
3934
3835
  if (value !== undefined)
3935
3836
  runtime.reflectionMergePartial(this, message, value);
3936
3837
  return message;
@@ -3987,11 +3888,8 @@ class ICERestart$Type extends runtime.MessageType {
3987
3888
  ]);
3988
3889
  }
3989
3890
  create(value) {
3990
- const message = { peerType: 0 };
3991
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
3992
- enumerable: false,
3993
- value: this,
3994
- });
3891
+ const message = globalThis.Object.create(this.messagePrototype);
3892
+ message.peerType = 0;
3995
3893
  if (value !== undefined)
3996
3894
  runtime.reflectionMergePartial(this, message, value);
3997
3895
  return message;
@@ -4050,11 +3948,8 @@ class SfuRequest$Type extends runtime.MessageType {
4050
3948
  ]);
4051
3949
  }
4052
3950
  create(value) {
4053
- const message = { requestPayload: { oneofKind: undefined } };
4054
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4055
- enumerable: false,
4056
- value: this,
4057
- });
3951
+ const message = globalThis.Object.create(this.messagePrototype);
3952
+ message.requestPayload = { oneofKind: undefined };
4058
3953
  if (value !== undefined)
4059
3954
  runtime.reflectionMergePartial(this, message, value);
4060
3955
  return message;
@@ -4110,11 +4005,7 @@ class HealthCheckRequest$Type extends runtime.MessageType {
4110
4005
  super('stream.video.sfu.event.HealthCheckRequest', []);
4111
4006
  }
4112
4007
  create(value) {
4113
- const message = {};
4114
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4115
- enumerable: false,
4116
- value: this,
4117
- });
4008
+ const message = globalThis.Object.create(this.messagePrototype);
4118
4009
  if (value !== undefined)
4119
4010
  runtime.reflectionMergePartial(this, message, value);
4120
4011
  return message;
@@ -4146,11 +4037,7 @@ class HealthCheckResponse$Type extends runtime.MessageType {
4146
4037
  ]);
4147
4038
  }
4148
4039
  create(value) {
4149
- const message = {};
4150
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4151
- enumerable: false,
4152
- value: this,
4153
- });
4040
+ const message = globalThis.Object.create(this.messagePrototype);
4154
4041
  if (value !== undefined)
4155
4042
  runtime.reflectionMergePartial(this, message, value);
4156
4043
  return message;
@@ -4208,11 +4095,10 @@ class TrackPublished$Type extends runtime.MessageType {
4208
4095
  ]);
4209
4096
  }
4210
4097
  create(value) {
4211
- const message = { userId: '', sessionId: '', type: 0 };
4212
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4213
- enumerable: false,
4214
- value: this,
4215
- });
4098
+ const message = globalThis.Object.create(this.messagePrototype);
4099
+ message.userId = '';
4100
+ message.sessionId = '';
4101
+ message.type = 0;
4216
4102
  if (value !== undefined)
4217
4103
  runtime.reflectionMergePartial(this, message, value);
4218
4104
  return message;
@@ -4298,11 +4184,11 @@ class TrackUnpublished$Type extends runtime.MessageType {
4298
4184
  ]);
4299
4185
  }
4300
4186
  create(value) {
4301
- const message = { userId: '', sessionId: '', type: 0, cause: 0 };
4302
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4303
- enumerable: false,
4304
- value: this,
4305
- });
4187
+ const message = globalThis.Object.create(this.messagePrototype);
4188
+ message.userId = '';
4189
+ message.sessionId = '';
4190
+ message.type = 0;
4191
+ message.cause = 0;
4306
4192
  if (value !== undefined)
4307
4193
  runtime.reflectionMergePartial(this, message, value);
4308
4194
  return message;
@@ -4392,16 +4278,11 @@ class JoinRequest$Type extends runtime.MessageType {
4392
4278
  ]);
4393
4279
  }
4394
4280
  create(value) {
4395
- const message = {
4396
- token: '',
4397
- sessionId: '',
4398
- subscriberSdp: '',
4399
- fastReconnect: false,
4400
- };
4401
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4402
- enumerable: false,
4403
- value: this,
4404
- });
4281
+ const message = globalThis.Object.create(this.messagePrototype);
4282
+ message.token = '';
4283
+ message.sessionId = '';
4284
+ message.subscriberSdp = '';
4285
+ message.fastReconnect = false;
4405
4286
  if (value !== undefined)
4406
4287
  runtime.reflectionMergePartial(this, message, value);
4407
4288
  return message;
@@ -4496,11 +4377,10 @@ class Migration$Type extends runtime.MessageType {
4496
4377
  ]);
4497
4378
  }
4498
4379
  create(value) {
4499
- const message = { fromSfuId: '', announcedTracks: [], subscriptions: [] };
4500
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4501
- enumerable: false,
4502
- value: this,
4503
- });
4380
+ const message = globalThis.Object.create(this.messagePrototype);
4381
+ message.fromSfuId = '';
4382
+ message.announcedTracks = [];
4383
+ message.subscriptions = [];
4504
4384
  if (value !== undefined)
4505
4385
  runtime.reflectionMergePartial(this, message, value);
4506
4386
  return message;
@@ -4559,11 +4439,8 @@ class JoinResponse$Type extends runtime.MessageType {
4559
4439
  ]);
4560
4440
  }
4561
4441
  create(value) {
4562
- const message = { reconnected: false };
4563
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4564
- enumerable: false,
4565
- value: this,
4566
- });
4442
+ const message = globalThis.Object.create(this.messagePrototype);
4443
+ message.reconnected = false;
4567
4444
  if (value !== undefined)
4568
4445
  runtime.reflectionMergePartial(this, message, value);
4569
4446
  return message;
@@ -4616,11 +4493,8 @@ class ParticipantJoined$Type extends runtime.MessageType {
4616
4493
  ]);
4617
4494
  }
4618
4495
  create(value) {
4619
- const message = { callCid: '' };
4620
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4621
- enumerable: false,
4622
- value: this,
4623
- });
4496
+ const message = globalThis.Object.create(this.messagePrototype);
4497
+ message.callCid = '';
4624
4498
  if (value !== undefined)
4625
4499
  runtime.reflectionMergePartial(this, message, value);
4626
4500
  return message;
@@ -4673,11 +4547,8 @@ class ParticipantLeft$Type extends runtime.MessageType {
4673
4547
  ]);
4674
4548
  }
4675
4549
  create(value) {
4676
- const message = { callCid: '' };
4677
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4678
- enumerable: false,
4679
- value: this,
4680
- });
4550
+ const message = globalThis.Object.create(this.messagePrototype);
4551
+ message.callCid = '';
4681
4552
  if (value !== undefined)
4682
4553
  runtime.reflectionMergePartial(this, message, value);
4683
4554
  return message;
@@ -4730,11 +4601,9 @@ class SubscriberOffer$Type extends runtime.MessageType {
4730
4601
  ]);
4731
4602
  }
4732
4603
  create(value) {
4733
- const message = { iceRestart: false, sdp: '' };
4734
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4735
- enumerable: false,
4736
- value: this,
4737
- });
4604
+ const message = globalThis.Object.create(this.messagePrototype);
4605
+ message.iceRestart = false;
4606
+ message.sdp = '';
4738
4607
  if (value !== undefined)
4739
4608
  runtime.reflectionMergePartial(this, message, value);
4740
4609
  return message;
@@ -4786,11 +4655,8 @@ class PublisherAnswer$Type extends runtime.MessageType {
4786
4655
  ]);
4787
4656
  }
4788
4657
  create(value) {
4789
- const message = { sdp: '' };
4790
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4791
- enumerable: false,
4792
- value: this,
4793
- });
4658
+ const message = globalThis.Object.create(this.messagePrototype);
4659
+ message.sdp = '';
4794
4660
  if (value !== undefined)
4795
4661
  runtime.reflectionMergePartial(this, message, value);
4796
4662
  return message;
@@ -4842,11 +4708,8 @@ class ConnectionQualityChanged$Type extends runtime.MessageType {
4842
4708
  ]);
4843
4709
  }
4844
4710
  create(value) {
4845
- const message = { connectionQualityUpdates: [] };
4846
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4847
- enumerable: false,
4848
- value: this,
4849
- });
4711
+ const message = globalThis.Object.create(this.messagePrototype);
4712
+ message.connectionQualityUpdates = [];
4850
4713
  if (value !== undefined)
4851
4714
  runtime.reflectionMergePartial(this, message, value);
4852
4715
  return message;
@@ -4903,11 +4766,10 @@ class ConnectionQualityInfo$Type extends runtime.MessageType {
4903
4766
  ]);
4904
4767
  }
4905
4768
  create(value) {
4906
- const message = { userId: '', sessionId: '', connectionQuality: 0 };
4907
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4908
- enumerable: false,
4909
- value: this,
4910
- });
4769
+ const message = globalThis.Object.create(this.messagePrototype);
4770
+ message.userId = '';
4771
+ message.sessionId = '';
4772
+ message.connectionQuality = 0;
4911
4773
  if (value !== undefined)
4912
4774
  runtime.reflectionMergePartial(this, message, value);
4913
4775
  return message;
@@ -4966,11 +4828,9 @@ class DominantSpeakerChanged$Type extends runtime.MessageType {
4966
4828
  ]);
4967
4829
  }
4968
4830
  create(value) {
4969
- const message = { userId: '', sessionId: '' };
4970
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
4971
- enumerable: false,
4972
- value: this,
4973
- });
4831
+ const message = globalThis.Object.create(this.messagePrototype);
4832
+ message.userId = '';
4833
+ message.sessionId = '';
4974
4834
  if (value !== undefined)
4975
4835
  runtime.reflectionMergePartial(this, message, value);
4976
4836
  return message;
@@ -5025,11 +4885,11 @@ class AudioLevel$Type extends runtime.MessageType {
5025
4885
  ]);
5026
4886
  }
5027
4887
  create(value) {
5028
- const message = { userId: '', sessionId: '', level: 0, isSpeaking: false };
5029
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
5030
- enumerable: false,
5031
- value: this,
5032
- });
4888
+ const message = globalThis.Object.create(this.messagePrototype);
4889
+ message.userId = '';
4890
+ message.sessionId = '';
4891
+ message.level = 0;
4892
+ message.isSpeaking = false;
5033
4893
  if (value !== undefined)
5034
4894
  runtime.reflectionMergePartial(this, message, value);
5035
4895
  return message;
@@ -5099,11 +4959,8 @@ class AudioLevelChanged$Type extends runtime.MessageType {
5099
4959
  ]);
5100
4960
  }
5101
4961
  create(value) {
5102
- const message = { audioLevels: [] };
5103
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
5104
- enumerable: false,
5105
- value: this,
5106
- });
4962
+ const message = globalThis.Object.create(this.messagePrototype);
4963
+ message.audioLevels = [];
5107
4964
  if (value !== undefined)
5108
4965
  runtime.reflectionMergePartial(this, message, value);
5109
4966
  return message;
@@ -5154,11 +5011,8 @@ class AudioMediaRequest$Type extends runtime.MessageType {
5154
5011
  ]);
5155
5012
  }
5156
5013
  create(value) {
5157
- const message = { channelCount: 0 };
5158
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
5159
- enumerable: false,
5160
- value: this,
5161
- });
5014
+ const message = globalThis.Object.create(this.messagePrototype);
5015
+ message.channelCount = 0;
5162
5016
  if (value !== undefined)
5163
5017
  runtime.reflectionMergePartial(this, message, value);
5164
5018
  return message;
@@ -5210,11 +5064,7 @@ class AudioSender$Type extends runtime.MessageType {
5210
5064
  ]);
5211
5065
  }
5212
5066
  create(value) {
5213
- const message = {};
5214
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
5215
- enumerable: false,
5216
- value: this,
5217
- });
5067
+ const message = globalThis.Object.create(this.messagePrototype);
5218
5068
  if (value !== undefined)
5219
5069
  runtime.reflectionMergePartial(this, message, value);
5220
5070
  return message;
@@ -5278,11 +5128,10 @@ class VideoMediaRequest$Type extends runtime.MessageType {
5278
5128
  ]);
5279
5129
  }
5280
5130
  create(value) {
5281
- const message = { idealHeight: 0, idealWidth: 0, idealFrameRate: 0 };
5282
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
5283
- enumerable: false,
5284
- value: this,
5285
- });
5131
+ const message = globalThis.Object.create(this.messagePrototype);
5132
+ message.idealHeight = 0;
5133
+ message.idealWidth = 0;
5134
+ message.idealFrameRate = 0;
5286
5135
  if (value !== undefined)
5287
5136
  runtime.reflectionMergePartial(this, message, value);
5288
5137
  return message;
@@ -5365,18 +5214,13 @@ class VideoLayerSetting$Type extends runtime.MessageType {
5365
5214
  ]);
5366
5215
  }
5367
5216
  create(value) {
5368
- const message = {
5369
- name: '',
5370
- active: false,
5371
- maxBitrate: 0,
5372
- scaleResolutionDownBy: 0,
5373
- priority: 0,
5374
- maxFramerate: 0,
5375
- };
5376
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
5377
- enumerable: false,
5378
- value: this,
5379
- });
5217
+ const message = globalThis.Object.create(this.messagePrototype);
5218
+ message.name = '';
5219
+ message.active = false;
5220
+ message.maxBitrate = 0;
5221
+ message.scaleResolutionDownBy = 0;
5222
+ message.priority = 0;
5223
+ message.maxFramerate = 0;
5380
5224
  if (value !== undefined)
5381
5225
  runtime.reflectionMergePartial(this, message, value);
5382
5226
  return message;
@@ -5471,11 +5315,8 @@ class VideoSender$Type extends runtime.MessageType {
5471
5315
  ]);
5472
5316
  }
5473
5317
  create(value) {
5474
- const message = { layers: [] };
5475
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
5476
- enumerable: false,
5477
- value: this,
5478
- });
5318
+ const message = globalThis.Object.create(this.messagePrototype);
5319
+ message.layers = [];
5479
5320
  if (value !== undefined)
5480
5321
  runtime.reflectionMergePartial(this, message, value);
5481
5322
  return message;
@@ -5546,11 +5387,9 @@ class ChangePublishQuality$Type extends runtime.MessageType {
5546
5387
  ]);
5547
5388
  }
5548
5389
  create(value) {
5549
- const message = { audioSenders: [], videoSenders: [] };
5550
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
5551
- enumerable: false,
5552
- value: this,
5553
- });
5390
+ const message = globalThis.Object.create(this.messagePrototype);
5391
+ message.audioSenders = [];
5392
+ message.videoSenders = [];
5554
5393
  if (value !== undefined)
5555
5394
  runtime.reflectionMergePartial(this, message, value);
5556
5395
  return message;
@@ -5603,11 +5442,8 @@ class CallGrantsUpdated$Type extends runtime.MessageType {
5603
5442
  ]);
5604
5443
  }
5605
5444
  create(value) {
5606
- const message = { message: '' };
5607
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
5608
- enumerable: false,
5609
- value: this,
5610
- });
5445
+ const message = globalThis.Object.create(this.messagePrototype);
5446
+ message.message = '';
5611
5447
  if (value !== undefined)
5612
5448
  runtime.reflectionMergePartial(this, message, value);
5613
5449
  return message;
@@ -5668,11 +5504,8 @@ class GoAway$Type extends runtime.MessageType {
5668
5504
  ]);
5669
5505
  }
5670
5506
  create(value) {
5671
- const message = { reason: 0 };
5672
- globalThis.Object.defineProperty(message, runtime.MESSAGE_TYPE, {
5673
- enumerable: false,
5674
- value: this,
5675
- });
5507
+ const message = globalThis.Object.create(this.messagePrototype);
5508
+ message.reason = 0;
5676
5509
  if (value !== undefined)
5677
5510
  runtime.reflectionMergePartial(this, message, value);
5678
5511
  return message;
@@ -5995,21 +5828,24 @@ const isSfuEvent = (eventName) => {
5995
5828
  };
5996
5829
  class Dispatcher {
5997
5830
  constructor() {
5831
+ this.logger = getLogger(['Dispatcher']);
5998
5832
  this.subscribers = {};
5999
- this.logger = getLogger(['sfu-client']);
6000
5833
  this.dispatch = (message) => {
6001
5834
  const eventKind = message.eventPayload.oneofKind;
6002
- if (eventKind) {
6003
- this.logger('debug', `Dispatching ${eventKind}`, message.eventPayload[eventKind]);
6004
- const listeners = this.subscribers[eventKind];
6005
- listeners?.forEach((fn) => {
6006
- try {
6007
- fn(message);
6008
- }
6009
- catch (e) {
6010
- this.logger('warn', 'Listener failed with error', e);
6011
- }
6012
- });
5835
+ if (!eventKind)
5836
+ return;
5837
+ const payload = message.eventPayload[eventKind];
5838
+ this.logger('debug', `Dispatching ${eventKind}`, payload);
5839
+ const listeners = this.subscribers[eventKind];
5840
+ if (!listeners)
5841
+ return;
5842
+ for (const fn of listeners) {
5843
+ try {
5844
+ fn(payload);
5845
+ }
5846
+ catch (e) {
5847
+ this.logger('warn', 'Listener failed with error', e);
5848
+ }
6013
5849
  }
6014
5850
  };
6015
5851
  this.on = (eventName, fn) => {
@@ -6041,6 +5877,7 @@ class IceTrickleBuffer {
6041
5877
  constructor() {
6042
5878
  this.subscriberCandidates = new rxjs.ReplaySubject();
6043
5879
  this.publisherCandidates = new rxjs.ReplaySubject();
5880
+ this.logger = getLogger(['sfu-client']);
6044
5881
  this.push = (iceTrickle) => {
6045
5882
  if (iceTrickle.peerType === PeerType.SUBSCRIBER) {
6046
5883
  this.subscriberCandidates.next(iceTrickle);
@@ -6049,10 +5886,9 @@ class IceTrickleBuffer {
6049
5886
  this.publisherCandidates.next(iceTrickle);
6050
5887
  }
6051
5888
  else {
6052
- this.logger?.('warn', `ICETrickle, Unknown peer type`, iceTrickle);
5889
+ this.logger('warn', `ICETrickle, Unknown peer type`, iceTrickle);
6053
5890
  }
6054
5891
  };
6055
- this.logger = getLogger(['sfu-client']);
6056
5892
  }
6057
5893
  }
6058
5894
 
@@ -8142,10 +7978,7 @@ class Publisher {
8142
7978
  this.isDtxEnabled = isDtxEnabled;
8143
7979
  this.isRedEnabled = isRedEnabled;
8144
7980
  this.iceRestartDelay = iceRestartDelay;
8145
- this.unsubscribeOnIceRestart = dispatcher.on('iceRestart', async (message) => {
8146
- if (message.eventPayload.oneofKind !== 'iceRestart')
8147
- return;
8148
- const { iceRestart } = message.eventPayload;
7981
+ this.unsubscribeOnIceRestart = dispatcher.on('iceRestart', async (iceRestart) => {
8149
7982
  if (iceRestart.peerType !== PeerType.PUBLISHER_UNSPECIFIED)
8150
7983
  return;
8151
7984
  await this.restartIce();
@@ -8421,16 +8254,10 @@ class Subscriber {
8421
8254
  this.state = state;
8422
8255
  this.iceRestartDelay = iceRestartDelay;
8423
8256
  this.pc = this.createPeerConnection(connectionConfig);
8424
- this.unregisterOnSubscriberOffer = dispatcher.on('subscriberOffer', async (message) => {
8425
- if (message.eventPayload.oneofKind !== 'subscriberOffer')
8426
- return;
8427
- const { subscriberOffer } = message.eventPayload;
8257
+ this.unregisterOnSubscriberOffer = dispatcher.on('subscriberOffer', async (subscriberOffer) => {
8428
8258
  await this.negotiate(subscriberOffer);
8429
8259
  });
8430
- this.unregisterOnIceRestart = dispatcher.on('iceRestart', async (message) => {
8431
- if (message.eventPayload.oneofKind !== 'iceRestart')
8432
- return;
8433
- const { iceRestart } = message.eventPayload;
8260
+ this.unregisterOnIceRestart = dispatcher.on('iceRestart', async (iceRestart) => {
8434
8261
  if (iceRestart.peerType !== PeerType.SUBSCRIBER)
8435
8262
  return;
8436
8263
  await this.restartIce();
@@ -8753,10 +8580,7 @@ class StreamSfuClient {
8753
8580
  // connection is established. In that case, those events (ICE candidates)
8754
8581
  // need to be buffered and later added to the appropriate PeerConnection
8755
8582
  // once the remoteDescription is known and set.
8756
- this.unsubscribeIceTrickle = dispatcher.on('iceTrickle', (e) => {
8757
- if (e.eventPayload.oneofKind !== 'iceTrickle')
8758
- return;
8759
- const { iceTrickle } = e.eventPayload;
8583
+ this.unsubscribeIceTrickle = dispatcher.on('iceTrickle', (iceTrickle) => {
8760
8584
  this.iceTrickleBuffer.push(iceTrickle);
8761
8585
  });
8762
8586
  this.signalWs = createWebSocketSignalChannel({
@@ -8835,11 +8659,9 @@ const retryable = async (rpc, logger) => {
8835
8659
  */
8836
8660
  const watchCallAccepted = (call) => {
8837
8661
  return async function onCallAccepted(event) {
8838
- if (event.type !== 'call.accepted' ||
8839
- // We want to discard the event if it's from the current user
8840
- event.user.id === call.currentUserId) {
8662
+ // We want to discard the event if it's from the current user
8663
+ if (event.user.id === call.currentUserId)
8841
8664
  return;
8842
- }
8843
8665
  const { state } = call;
8844
8666
  if (event.call.created_by.id === call.currentUserId &&
8845
8667
  state.callingState === exports.CallingState.RINGING) {
@@ -8853,8 +8675,6 @@ const watchCallAccepted = (call) => {
8853
8675
  */
8854
8676
  const watchCallRejected = (call) => {
8855
8677
  return async function onCallRejected(event) {
8856
- if (event.type !== 'call.rejected')
8857
- return;
8858
8678
  // We want to discard the event if it's from the current user
8859
8679
  if (event.user.id === call.currentUserId)
8860
8680
  return;
@@ -8891,9 +8711,7 @@ const watchCallRejected = (call) => {
8891
8711
  * Event handler that watches the delivery of `call.ended` Websocket event.
8892
8712
  */
8893
8713
  const watchCallEnded = (call) => {
8894
- return async function onCallCancelled(event) {
8895
- if (event.type !== 'call.ended')
8896
- return;
8714
+ return async function onCallEnded() {
8897
8715
  const { callingState } = call.state;
8898
8716
  if (callingState === exports.CallingState.RINGING ||
8899
8717
  callingState === exports.CallingState.JOINED ||
@@ -8910,9 +8728,7 @@ const watchCallEnded = (call) => {
8910
8728
  */
8911
8729
  const watchCallGrantsUpdated = (state) => {
8912
8730
  return function onCallGrantsUpdated(event) {
8913
- if (event.eventPayload.oneofKind !== 'callGrantsUpdated')
8914
- return;
8915
- const { currentGrants } = event.eventPayload.callGrantsUpdated;
8731
+ const { currentGrants } = event;
8916
8732
  if (currentGrants) {
8917
8733
  const { canPublishAudio, canPublishVideo, canScreenshare } = currentGrants;
8918
8734
  const update = {
@@ -8937,9 +8753,7 @@ const logger$1 = getLogger(['events']);
8937
8753
  */
8938
8754
  const watchChangePublishQuality = (dispatcher, call) => {
8939
8755
  return dispatcher.on('changePublishQuality', (e) => {
8940
- if (e.eventPayload.oneofKind !== 'changePublishQuality')
8941
- return;
8942
- const { videoSenders } = e.eventPayload.changePublishQuality;
8756
+ const { videoSenders } = e;
8943
8757
  videoSenders.forEach((videoSender) => {
8944
8758
  const { layers } = videoSender;
8945
8759
  call.updatePublishQuality(layers.filter((l) => l.active));
@@ -8948,10 +8762,7 @@ const watchChangePublishQuality = (dispatcher, call) => {
8948
8762
  };
8949
8763
  const watchConnectionQualityChanged = (dispatcher, state) => {
8950
8764
  return dispatcher.on('connectionQualityChanged', (e) => {
8951
- if (e.eventPayload.oneofKind !== 'connectionQualityChanged')
8952
- return;
8953
- const { connectionQualityChanged } = e.eventPayload;
8954
- const { connectionQualityUpdates } = connectionQualityChanged;
8765
+ const { connectionQualityUpdates } = e;
8955
8766
  if (!connectionQualityUpdates)
8956
8767
  return;
8957
8768
  state.updateParticipants(connectionQualityUpdates.reduce((patches, update) => {
@@ -8969,9 +8780,7 @@ const watchConnectionQualityChanged = (dispatcher, state) => {
8969
8780
  */
8970
8781
  const watchParticipantCountChanged = (dispatcher, state) => {
8971
8782
  return dispatcher.on('healthCheckResponse', (e) => {
8972
- if (e.eventPayload.oneofKind !== 'healthCheckResponse')
8973
- return;
8974
- const { participantCount } = e.eventPayload.healthCheckResponse;
8783
+ const { participantCount } = e;
8975
8784
  if (participantCount) {
8976
8785
  state.setParticipantCount(participantCount.total);
8977
8786
  state.setAnonymousParticipantCount(participantCount.anonymous);
@@ -8980,12 +8789,13 @@ const watchParticipantCountChanged = (dispatcher, state) => {
8980
8789
  };
8981
8790
  const watchLiveEnded = (dispatcher, call) => {
8982
8791
  return dispatcher.on('error', (e) => {
8983
- if (e.eventPayload.oneofKind !== 'error' ||
8984
- !e.eventPayload.error.error ||
8985
- e.eventPayload.error.error.code !== ErrorCode.LIVE_ENDED)
8792
+ if (e.error && e.error.code !== ErrorCode.LIVE_ENDED)
8986
8793
  return;
8987
- if (!call.permissionsContext.hasPermission(OwnCapability.JOIN_BACKSTAGE))
8988
- call.leave();
8794
+ if (!call.permissionsContext.hasPermission(OwnCapability.JOIN_BACKSTAGE)) {
8795
+ call.leave().catch((err) => {
8796
+ logger$1('error', 'Failed to leave call after live ended', err);
8797
+ });
8798
+ }
8989
8799
  });
8990
8800
  };
8991
8801
  /**
@@ -8993,9 +8803,9 @@ const watchLiveEnded = (dispatcher, call) => {
8993
8803
  */
8994
8804
  const watchSfuErrorReports = (dispatcher) => {
8995
8805
  return dispatcher.on('error', (e) => {
8996
- if (e.eventPayload.oneofKind !== 'error' || !e.eventPayload.error.error)
8806
+ if (!e.error)
8997
8807
  return;
8998
- const error = e.eventPayload.error.error;
8808
+ const { error } = e;
8999
8809
  logger$1('error', 'SFU reported error', {
9000
8810
  code: ErrorCode[error.code],
9001
8811
  message: error.message,
@@ -9009,9 +8819,7 @@ const watchSfuErrorReports = (dispatcher) => {
9009
8819
  */
9010
8820
  const watchPinsUpdated = (state) => {
9011
8821
  return function onPinsUpdated(e) {
9012
- if (e.eventPayload.oneofKind !== 'pinsUpdated')
9013
- return;
9014
- const { pins } = e.eventPayload.pinsUpdated;
8822
+ const { pins } = e;
9015
8823
  state.setServerSidePins(pins);
9016
8824
  };
9017
8825
  };
@@ -9023,9 +8831,7 @@ const watchPinsUpdated = (state) => {
9023
8831
  */
9024
8832
  const handleRemoteSoftMute = (call) => {
9025
8833
  return call.on('trackUnpublished', async (event) => {
9026
- if (event.eventPayload.oneofKind !== 'trackUnpublished')
9027
- return;
9028
- const { trackUnpublished: { cause, type, sessionId }, } = event.eventPayload;
8834
+ const { cause, type, sessionId } = event;
9029
8835
  const { localParticipant } = call.state;
9030
8836
  if (cause === TrackUnpublishReason.MODERATION &&
9031
8837
  sessionId === localParticipant?.sessionId) {
@@ -9057,9 +8863,7 @@ const handleRemoteSoftMute = (call) => {
9057
8863
  */
9058
8864
  const watchParticipantJoined = (state) => {
9059
8865
  return function onParticipantJoined(e) {
9060
- if (e.eventPayload.oneofKind !== 'participantJoined')
9061
- return;
9062
- const { participant } = e.eventPayload.participantJoined;
8866
+ const { participant } = e;
9063
8867
  if (!participant)
9064
8868
  return;
9065
8869
  // `state.updateOrAddParticipant` acts as a safeguard against
@@ -9083,9 +8887,7 @@ const watchParticipantJoined = (state) => {
9083
8887
  */
9084
8888
  const watchParticipantLeft = (state) => {
9085
8889
  return function onParticipantLeft(e) {
9086
- if (e.eventPayload.oneofKind !== 'participantLeft')
9087
- return;
9088
- const { participant } = e.eventPayload.participantLeft;
8890
+ const { participant } = e;
9089
8891
  if (!participant)
9090
8892
  return;
9091
8893
  state.setParticipants((participants) => participants.filter((p) => p.sessionId !== participant.sessionId));
@@ -9097,9 +8899,7 @@ const watchParticipantLeft = (state) => {
9097
8899
  */
9098
8900
  const watchTrackPublished = (state) => {
9099
8901
  return function onTrackPublished(e) {
9100
- if (e.eventPayload.oneofKind !== 'trackPublished')
9101
- return;
9102
- const { trackPublished: { type, sessionId, participant }, } = e.eventPayload;
8902
+ const { type, sessionId, participant } = e;
9103
8903
  // An optimization for large calls.
9104
8904
  // After a certain threshold, the SFU would stop emitting `participantJoined`
9105
8905
  // events, and instead, it would only provide the participant's information
@@ -9120,9 +8920,7 @@ const watchTrackPublished = (state) => {
9120
8920
  */
9121
8921
  const watchTrackUnpublished = (state) => {
9122
8922
  return function onTrackUnpublished(e) {
9123
- if (e.eventPayload.oneofKind !== 'trackUnpublished')
9124
- return;
9125
- const { trackUnpublished: { type, sessionId, participant }, } = e.eventPayload;
8923
+ const { type, sessionId, participant } = e;
9126
8924
  // An optimization for large calls. See `watchTrackPublished`.
9127
8925
  if (participant) {
9128
8926
  state.updateOrAddParticipant(sessionId, participant);
@@ -9141,9 +8939,7 @@ const unique = (v, i, arr) => arr.indexOf(v) === i;
9141
8939
  */
9142
8940
  const watchDominantSpeakerChanged = (dispatcher, state) => {
9143
8941
  return dispatcher.on('dominantSpeakerChanged', (e) => {
9144
- if (e.eventPayload.oneofKind !== 'dominantSpeakerChanged')
9145
- return;
9146
- const { dominantSpeakerChanged: { sessionId }, } = e.eventPayload;
8942
+ const { sessionId } = e;
9147
8943
  if (sessionId === state.dominantSpeaker?.sessionId)
9148
8944
  return;
9149
8945
  state.setParticipants((participants) => participants.map((participant) => {
@@ -9170,9 +8966,7 @@ const watchDominantSpeakerChanged = (dispatcher, state) => {
9170
8966
  */
9171
8967
  const watchAudioLevelChanged = (dispatcher, state) => {
9172
8968
  return dispatcher.on('audioLevelChanged', (e) => {
9173
- if (e.eventPayload.oneofKind !== 'audioLevelChanged')
9174
- return;
9175
- const { audioLevels } = e.eventPayload.audioLevelChanged;
8969
+ const { audioLevels } = e;
9176
8970
  state.updateParticipants(audioLevels.reduce((patches, current) => {
9177
8971
  patches[current.sessionId] = {
9178
8972
  audioLevel: current.level,
@@ -9893,8 +9687,11 @@ class DynascaleManager {
9893
9687
  audioElement.setSinkId(deviceId);
9894
9688
  }
9895
9689
  });
9896
- const volumeSubscription = this.call.speaker.state.volume$.subscribe((volume) => {
9897
- audioElement.volume = volume;
9690
+ const volumeSubscription = rxjs.combineLatest([
9691
+ this.call.speaker.state.volume$,
9692
+ participant$.pipe(rxjs.distinctUntilKeyChanged('audioVolume')),
9693
+ ]).subscribe(([volume, p]) => {
9694
+ audioElement.volume = p.audioVolume ?? volume;
9898
9695
  });
9899
9696
  audioElement.autoplay = true;
9900
9697
  return () => {
@@ -10588,7 +10385,13 @@ class InputMediaDeviceManagerState {
10588
10385
  return notifyGranted();
10589
10386
  }
10590
10387
  let permissionState;
10591
- const notify = () => subscriber.next(permissionState.state === 'granted');
10388
+ const notify = () => subscriber.next(
10389
+ // In Safari, the `change` event doesn't reliably emit and hence,
10390
+ // permissionState stays in 'prompt' state forever.
10391
+ // Instead of checking if a permission is granted, we check if it isn't denied
10392
+ isSafari()
10393
+ ? permissionState.state !== 'denied'
10394
+ : permissionState.state === 'granted');
10592
10395
  navigator.permissions
10593
10396
  .query({ name: this.permissionName })
10594
10397
  .then((permissionStatus) => {
@@ -11252,12 +11055,13 @@ class SpeakerState {
11252
11055
  }
11253
11056
 
11254
11057
  class SpeakerManager {
11255
- constructor() {
11058
+ constructor(call) {
11256
11059
  this.state = new SpeakerState();
11257
11060
  this.subscriptions = [];
11258
11061
  this.removeSubscriptions = () => {
11259
11062
  this.subscriptions.forEach((s) => s.unsubscribe());
11260
11063
  };
11064
+ this.call = call;
11261
11065
  if (deviceIds$ && !isReactNative()) {
11262
11066
  this.subscriptions.push(rxjs.combineLatest([deviceIds$, this.state.selectedDevice$]).subscribe(([devices, deviceId]) => {
11263
11067
  if (!deviceId) {
@@ -11281,7 +11085,7 @@ class SpeakerManager {
11281
11085
  return getAudioOutputDevices();
11282
11086
  }
11283
11087
  /**
11284
- * Select device
11088
+ * Select a device.
11285
11089
  *
11286
11090
  * Note: this method is not supported in React Native
11287
11091
  *
@@ -11295,7 +11099,7 @@ class SpeakerManager {
11295
11099
  }
11296
11100
  /**
11297
11101
  * Set the volume of the audio elements
11298
- * @param volume a number between 0 and 1
11102
+ * @param volume a number between 0 and 1.
11299
11103
  *
11300
11104
  * Note: this method is not supported in React Native
11301
11105
  */
@@ -11308,6 +11112,23 @@ class SpeakerManager {
11308
11112
  }
11309
11113
  this.state.setVolume(volume);
11310
11114
  }
11115
+ /**
11116
+ * Set the volume of a participant.
11117
+ *
11118
+ * Note: this method is not supported in React Native.
11119
+ *
11120
+ * @param sessionId the participant's session id.
11121
+ * @param volume a number between 0 and 1. Set it to `undefined` to use the default volume.
11122
+ */
11123
+ setParticipantVolume(sessionId, volume) {
11124
+ if (isReactNative()) {
11125
+ throw new Error('This feature is not supported in React Native');
11126
+ }
11127
+ if (volume && (volume < 0 || volume > 1)) {
11128
+ throw new Error('Volume must be between 0 and 1, or undefined');
11129
+ }
11130
+ this.call.state.updateParticipant(sessionId, { audioVolume: volume });
11131
+ }
11311
11132
  }
11312
11133
 
11313
11134
  /**
@@ -11349,6 +11170,46 @@ class Call {
11349
11170
  */
11350
11171
  this.leaveCallHooks = new Set();
11351
11172
  this.streamClientEventHandlers = new Map();
11173
+ /**
11174
+ * You can subscribe to WebSocket events provided by the API. To remove a subscription, call the `off` method.
11175
+ * Please note that subscribing to WebSocket events is an advanced use-case.
11176
+ * For most use-cases, it should be enough to watch for state changes.
11177
+ *
11178
+ * @param eventName the event name.
11179
+ * @param fn the event handler.
11180
+ */
11181
+ this.on = (eventName, fn) => {
11182
+ if (isSfuEvent(eventName)) {
11183
+ return this.dispatcher.on(eventName, fn);
11184
+ }
11185
+ const offHandler = this.streamClient.on(eventName, (e) => {
11186
+ const event = e;
11187
+ if (event.call_cid && event.call_cid === this.cid) {
11188
+ fn(event);
11189
+ }
11190
+ });
11191
+ // keep the 'off' reference returned by the stream client
11192
+ this.streamClientEventHandlers.set(fn, offHandler);
11193
+ return () => {
11194
+ this.off(eventName, fn);
11195
+ };
11196
+ };
11197
+ /**
11198
+ * Remove subscription for WebSocket events that were created by the `on` method.
11199
+ *
11200
+ * @param eventName the event name.
11201
+ * @param fn the event handler.
11202
+ */
11203
+ this.off = (eventName, fn) => {
11204
+ if (isSfuEvent(eventName)) {
11205
+ return this.dispatcher.off(eventName, fn);
11206
+ }
11207
+ // unsubscribe from the stream client event by using the 'off' reference
11208
+ const registeredOffHandler = this.streamClientEventHandlers.get(fn);
11209
+ if (registeredOffHandler) {
11210
+ registeredOffHandler();
11211
+ }
11212
+ };
11352
11213
  /**
11353
11214
  * Leave the call and stop the media streams that were published by the call.
11354
11215
  */
@@ -11632,9 +11493,7 @@ class Call {
11632
11493
  sfuClient.signalReady.then(() => {
11633
11494
  // register a handler for the "goAway" event
11634
11495
  const unregisterGoAway = this.dispatcher.on('goAway', (event) => {
11635
- if (event.eventPayload.oneofKind !== 'goAway')
11636
- return;
11637
- const { reason } = event.eventPayload.goAway;
11496
+ const { reason } = event;
11638
11497
  this.logger('info', `[Migration]: Going away from SFU... Reason: ${GoAwayReason[reason]}`);
11639
11498
  reconnect('migrate').catch((err) => {
11640
11499
  this.logger('warn', `[Migration]: Failed to migrate to another SFU.`, err);
@@ -11859,11 +11718,9 @@ class Call {
11859
11718
  this.waitForJoinResponse = (timeout = 5000) => {
11860
11719
  return new Promise((resolve, reject) => {
11861
11720
  const unsubscribe = this.on('joinResponse', (event) => {
11862
- if (event.eventPayload.oneofKind !== 'joinResponse')
11863
- return;
11864
11721
  clearTimeout(timeoutId);
11865
11722
  unsubscribe();
11866
- resolve(event.eventPayload.joinResponse);
11723
+ resolve(event);
11867
11724
  });
11868
11725
  const timeoutId = setTimeout(() => {
11869
11726
  unsubscribe();
@@ -12516,7 +12373,7 @@ class Call {
12516
12373
  this.leaveCallHooks.add(createSubscription(this.trackSubscriptionsSubject.pipe(rxjs.debounce((v) => rxjs.timer(v.type)), rxjs.map((v) => v.data)), (subscriptions) => this.sfuClient?.updateSubscriptions(subscriptions)));
12517
12374
  this.camera = new CameraManager(this);
12518
12375
  this.microphone = new MicrophoneManager(this);
12519
- this.speaker = new SpeakerManager();
12376
+ this.speaker = new SpeakerManager(this);
12520
12377
  this.screenShare = new ScreenShareManager(this);
12521
12378
  }
12522
12379
  registerEffects() {
@@ -12602,31 +12459,6 @@ class Call {
12602
12459
  this.leaveCallHooks.add(registerRingingCallEventHandlers(this));
12603
12460
  }));
12604
12461
  }
12605
- on(eventName, fn) {
12606
- if (isSfuEvent(eventName)) {
12607
- return this.dispatcher.on(eventName, fn);
12608
- }
12609
- else {
12610
- const eventHandler = (event) => {
12611
- if (event.call_cid && event.call_cid === this.cid) {
12612
- fn(event);
12613
- }
12614
- };
12615
- this.streamClientEventHandlers.set(fn, eventHandler);
12616
- return this.streamClient.on(eventName, eventHandler);
12617
- }
12618
- }
12619
- off(eventName, fn) {
12620
- if (isSfuEvent(eventName)) {
12621
- return this.dispatcher.off(eventName, fn);
12622
- }
12623
- else {
12624
- const registeredEventHandler = this.streamClientEventHandlers.get(fn);
12625
- if (registeredEventHandler) {
12626
- return this.streamClient.off(eventName, registeredEventHandler);
12627
- }
12628
- }
12629
- }
12630
12462
  /**
12631
12463
  * A flag indicating whether the call is "ringing" type of call.
12632
12464
  */
@@ -12876,18 +12708,19 @@ class StableWSConnection {
12876
12708
  if (this.wsID !== wsID)
12877
12709
  return;
12878
12710
  this._log('onmessage() - onmessage callback', { event, wsID });
12879
- const data = typeof event.data === 'string' ? JSON.parse(event.data) : null;
12711
+ const data = typeof event.data === 'string'
12712
+ ? JSON.parse(event.data)
12713
+ : null;
12880
12714
  // we wait till the first message before we consider the connection open.
12881
12715
  // the reason for this is that auth errors and similar errors trigger a ws.onopen and immediately
12882
12716
  // after that a ws.onclose.
12883
- if (!this.isResolved && data && data.type === 'connection.ok') {
12717
+ if (!this.isResolved && data && data.type === 'connection.error') {
12884
12718
  this.isResolved = true;
12885
12719
  if (data.error) {
12720
+ // @ts-expect-error - the types of _errorFromWSEvent are incorrect
12886
12721
  this.rejectPromise?.(this._errorFromWSEvent(data, false));
12887
12722
  return;
12888
12723
  }
12889
- this.resolvePromise?.(data);
12890
- this._setHealth(true);
12891
12724
  }
12892
12725
  // trigger the event..
12893
12726
  this.lastEvent = new Date();
@@ -12896,8 +12729,12 @@ class StableWSConnection {
12896
12729
  // the initial health-check should come from the client
12897
12730
  this.scheduleNextPing();
12898
12731
  }
12899
- if (data && data.error) {
12900
- const { code } = this._errorFromWSEvent(data, true);
12732
+ if (data && data.type === 'connection.ok') {
12733
+ this.resolvePromise?.(data);
12734
+ this._setHealth(true);
12735
+ }
12736
+ if (data && data.type === 'connection.error' && data.error) {
12737
+ const { code } = data.error;
12901
12738
  this.isHealthy = false;
12902
12739
  this.isConnecting = false;
12903
12740
  this.consecutiveFailures += 1;
@@ -12908,7 +12745,9 @@ class StableWSConnection {
12908
12745
  this._reconnect({ refreshToken: true });
12909
12746
  }
12910
12747
  }
12911
- this.client.handleEvent(event);
12748
+ if (data) {
12749
+ this.client.dispatchEvent(data);
12750
+ }
12912
12751
  this.scheduleConnectionCheck();
12913
12752
  };
12914
12753
  this.onclose = (wsID, event) => {
@@ -13850,6 +13689,7 @@ class StreamClient {
13850
13689
  * @param {httpsAgent} [options.httpsAgent] - custom httpsAgent, in node it's default to https.agent()
13851
13690
  */
13852
13691
  constructor(key, options) {
13692
+ this.listeners = {};
13853
13693
  this.nextRequestAbortController = null;
13854
13694
  this.devToken = (userID) => {
13855
13695
  return DevToken(userID);
@@ -14039,41 +13879,31 @@ class StreamClient {
14039
13879
  * on - Listen to events on all channels and users your watching
14040
13880
  *
14041
13881
  * client.on('message.new', event => {console.log("my new message", event, channel.state.messages)})
14042
- * or
14043
- * client.on(event => {console.log(event.type)})
14044
13882
  *
14045
- * @param {EventHandler | string} callbackOrEventName The event type to listen for (optional)
14046
- * @param {EventHandler} [callbackOrNothing] The callback to call
13883
+ * @param eventName The event type to listen for (optional)
13884
+ * @param callback The callback to call
14047
13885
  *
14048
- * @return {Function} Returns a function which, when called, unsubscribes the event handler.
13886
+ * @return Returns a function which, when called, unsubscribes the event handler.
14049
13887
  */
14050
- this.on = (callbackOrEventName, callbackOrNothing) => {
14051
- const key = callbackOrNothing ? callbackOrEventName : 'all';
14052
- const callback = callbackOrNothing
14053
- ? callbackOrNothing
14054
- : callbackOrEventName;
14055
- if (!(key in this.listeners)) {
14056
- this.listeners[key] = [];
13888
+ this.on = (eventName, callback) => {
13889
+ if (!this.listeners[eventName]) {
13890
+ this.listeners[eventName] = [];
14057
13891
  }
14058
- this.listeners[key].push(callback);
13892
+ this.logger('debug', `Adding listener for ${eventName} event`);
13893
+ this.listeners[eventName]?.push(callback);
14059
13894
  return () => {
14060
- this.off(key, callback);
13895
+ this.off(eventName, callback);
14061
13896
  };
14062
13897
  };
14063
13898
  /**
14064
13899
  * off - Remove the event handler
14065
- *
14066
13900
  */
14067
- this.off = (callbackOrEventName, callbackOrNothing) => {
14068
- const key = callbackOrNothing ? callbackOrEventName : 'all';
14069
- const callback = callbackOrNothing
14070
- ? callbackOrNothing
14071
- : callbackOrEventName;
14072
- if (!(key in this.listeners)) {
14073
- this.listeners[key] = [];
13901
+ this.off = (eventName, callback) => {
13902
+ if (!this.listeners[eventName]) {
13903
+ this.listeners[eventName] = [];
14074
13904
  }
14075
- this.logger('debug', `Removing listener for ${key} event`);
14076
- this.listeners[key] = this.listeners[key].filter((value) => value !== callback);
13905
+ this.logger('debug', `Removing listener for ${eventName} event`);
13906
+ this.listeners[eventName] = this.listeners[eventName]?.filter((value) => value !== callback);
14077
13907
  };
14078
13908
  this._logApiRequest = (type, url, data, config) => {
14079
13909
  this.logger('trace', `client: ${type} - Request - ${url}`, {
@@ -14195,26 +14025,14 @@ class StreamClient {
14195
14025
  if (!event.received_at)
14196
14026
  event.received_at = new Date();
14197
14027
  this.logger('debug', `Dispatching event: ${event.type}`, event);
14198
- this._callClientListeners(event);
14199
- };
14200
- this.handleEvent = (messageEvent) => {
14201
- // dispatch the event to the channel listeners
14202
- const jsonString = messageEvent.data;
14203
- const event = JSON.parse(jsonString);
14204
- this.dispatchEvent(event);
14205
- };
14206
- this._callClientListeners = (event) => {
14207
- const client = this;
14208
- // gather and call the listeners
14209
- const listeners = [];
14210
- if (client.listeners.all) {
14211
- listeners.push(...client.listeners.all);
14212
- }
14213
- if (client.listeners[event.type]) {
14214
- listeners.push(...client.listeners[event.type]);
14215
- }
14216
- // call the event and send it to the listeners
14217
- for (const listener of listeners) {
14028
+ if (!this.listeners)
14029
+ return;
14030
+ // call generic listeners
14031
+ for (const listener of this.listeners.all || []) {
14032
+ listener(event);
14033
+ }
14034
+ // call type specific listeners
14035
+ for (const listener of this.listeners[event.type] || []) {
14218
14036
  listener(event);
14219
14037
  }
14220
14038
  };
@@ -14296,7 +14114,7 @@ class StreamClient {
14296
14114
  });
14297
14115
  };
14298
14116
  this.getUserAgent = () => {
14299
- const version = "0.5.11" ;
14117
+ const version = "0.6.1" ;
14300
14118
  return (this.userAgent ||
14301
14119
  `stream-video-javascript-client-${this.node ? 'node' : 'browser'}-${version}`);
14302
14120
  };
@@ -14396,7 +14214,6 @@ class StreamClient {
14396
14214
  };
14397
14215
  // set the key
14398
14216
  this.key = key;
14399
- this.listeners = {};
14400
14217
  // set the secret
14401
14218
  this.secret = options?.secret;
14402
14219
  // set the options... and figure out defaults...
@@ -14498,11 +14315,11 @@ class StreamVideoClient {
14498
14315
  /**
14499
14316
  * Remove subscription for WebSocket events that were created by the `on` method.
14500
14317
  *
14501
- * @param event the event name.
14318
+ * @param eventName the event name.
14502
14319
  * @param callback the callback which was passed to the `on` method.
14503
14320
  */
14504
- this.off = (event, callback) => {
14505
- return this.streamClient.off(event, callback);
14321
+ this.off = (eventName, callback) => {
14322
+ return this.streamClient.off(eventName, callback);
14506
14323
  };
14507
14324
  /**
14508
14325
  * Creates a new call.
@@ -14591,7 +14408,6 @@ class StreamVideoClient {
14591
14408
  *
14592
14409
  * @param {string} id The device id
14593
14410
  * @param {string} [userID] The user id. Only specify this for serverside requests
14594
- *
14595
14411
  */
14596
14412
  this.removeDevice = async (id, userID) => {
14597
14413
  return await this.streamClient.delete('/devices', {
@@ -14715,8 +14531,7 @@ class StreamVideoClient {
14715
14531
  if (connectUserResponse?.me) {
14716
14532
  this.writeableStateStore.setConnectedUser(connectUserResponse.me);
14717
14533
  }
14718
- this.eventHandlersToUnregister.push(this.on('connection.changed', (e) => {
14719
- const event = e;
14534
+ this.eventHandlersToUnregister.push(this.on('connection.changed', (event) => {
14720
14535
  if (event.online) {
14721
14536
  const callsToReWatch = this.writeableStateStore.calls
14722
14537
  .filter((call) => call.watching)
@@ -14736,8 +14551,6 @@ class StreamVideoClient {
14736
14551
  }
14737
14552
  }));
14738
14553
  this.eventHandlersToUnregister.push(this.on('call.created', (event) => {
14739
- if (event.type !== 'call.created')
14740
- return;
14741
14554
  const { call, members } = event;
14742
14555
  if (user.id === call.created_by.id) {
14743
14556
  this.logger('warn', 'Received `call.created` sent by the current user');
@@ -14755,8 +14568,6 @@ class StreamVideoClient {
14755
14568
  this.writeableStateStore.registerCall(newCall);
14756
14569
  }));
14757
14570
  this.eventHandlersToUnregister.push(this.on('call.ring', async (event) => {
14758
- if (event.type !== 'call.ring')
14759
- return;
14760
14571
  const { call, members } = event;
14761
14572
  if (user.id === call.created_by.id) {
14762
14573
  this.logger('debug', 'Received `call.ring` sent by the current user so ignoring the event');