mediasoup-client 3.6.96 → 3.6.98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/tests/test.js CHANGED
@@ -212,7 +212,6 @@ test('transport.produce() without "connect" listener rejects', async () => {
212
212
  .toThrow(Error);
213
213
  }, 500);
214
214
  test('transport.produce() succeeds', async () => {
215
- var _a, _b;
216
215
  const audioTrack = new fake_mediastreamtrack_1.FakeMediaStreamTrack({ kind: 'audio' });
217
216
  const videoTrack = new fake_mediastreamtrack_1.FakeMediaStreamTrack({ kind: 'video' });
218
217
  let audioProducerId;
@@ -307,12 +306,12 @@ test('transport.produce() succeeds', async () => {
307
306
  encodings = audioProducer.rtpParameters.encodings;
308
307
  expect(Array.isArray(encodings)).toBe(true);
309
308
  expect(encodings.length).toBe(1);
310
- expect(typeof (encodings === null || encodings === void 0 ? void 0 : encodings[0])).toBe('object');
309
+ expect(typeof encodings?.[0]).toBe('object');
311
310
  expect(Object.keys(encodings[0])).toEqual(['ssrc', 'dtx']);
312
- expect(typeof (encodings === null || encodings === void 0 ? void 0 : encodings[0].ssrc)).toBe('number');
311
+ expect(typeof encodings?.[0].ssrc).toBe('number');
313
312
  rtcp = audioProducer.rtpParameters.rtcp;
314
313
  expect(typeof rtcp).toBe('object');
315
- expect(typeof (rtcp === null || rtcp === void 0 ? void 0 : rtcp.cname)).toBe('string');
314
+ expect(typeof rtcp?.cname).toBe('string');
316
315
  expect(audioProducer.paused).toBe(true);
317
316
  expect(audioProducer.maxSpatialLayer).toBe(undefined);
318
317
  expect(audioProducer.appData).toEqual({ foo: 'FOO' });
@@ -401,19 +400,19 @@ test('transport.produce() succeeds', async () => {
401
400
  encodings = videoProducer.rtpParameters.encodings;
402
401
  expect(Array.isArray(encodings)).toBe(true);
403
402
  expect(encodings.length).toBe(2);
404
- expect(typeof (encodings === null || encodings === void 0 ? void 0 : encodings[0])).toBe('object');
405
- expect(typeof (encodings === null || encodings === void 0 ? void 0 : encodings[0].ssrc)).toBe('number');
406
- expect(typeof (encodings === null || encodings === void 0 ? void 0 : encodings[0].rtx)).toBe('object');
403
+ expect(typeof encodings?.[0]).toBe('object');
404
+ expect(typeof encodings?.[0].ssrc).toBe('number');
405
+ expect(typeof encodings?.[0].rtx).toBe('object');
407
406
  expect(Object.keys(encodings[0].rtx)).toEqual(['ssrc']);
408
- expect(typeof ((_a = encodings === null || encodings === void 0 ? void 0 : encodings[0].rtx) === null || _a === void 0 ? void 0 : _a.ssrc)).toBe('number');
409
- expect(typeof (encodings === null || encodings === void 0 ? void 0 : encodings[1])).toBe('object');
410
- expect(typeof (encodings === null || encodings === void 0 ? void 0 : encodings[1].ssrc)).toBe('number');
411
- expect(typeof (encodings === null || encodings === void 0 ? void 0 : encodings[1].rtx)).toBe('object');
407
+ expect(typeof encodings?.[0].rtx?.ssrc).toBe('number');
408
+ expect(typeof encodings?.[1]).toBe('object');
409
+ expect(typeof encodings?.[1].ssrc).toBe('number');
410
+ expect(typeof encodings?.[1].rtx).toBe('object');
412
411
  expect(Object.keys(encodings[1].rtx)).toEqual(['ssrc']);
413
- expect(typeof ((_b = encodings === null || encodings === void 0 ? void 0 : encodings[1].rtx) === null || _b === void 0 ? void 0 : _b.ssrc)).toBe('number');
412
+ expect(typeof encodings?.[1].rtx?.ssrc).toBe('number');
414
413
  rtcp = videoProducer.rtpParameters.rtcp;
415
414
  expect(typeof rtcp).toBe('object');
416
- expect(typeof (rtcp === null || rtcp === void 0 ? void 0 : rtcp.cname)).toBe('string');
415
+ expect(typeof rtcp?.cname).toBe('string');
417
416
  expect(videoProducer.paused).toBe(false);
418
417
  expect(videoProducer.maxSpatialLayer).toBe(undefined);
419
418
  expect(videoProducer.appData).toEqual({});
@@ -446,7 +445,6 @@ test('transport.produce() with a non object appData rejects with TypeError', asy
446
445
  .toThrow(TypeError);
447
446
  }, 500);
448
447
  test('transport.consume() succeeds', async () => {
449
- var _a;
450
448
  const audioConsumerRemoteParameters = fakeParameters.generateConsumerRemoteParameters({ codecMimeType: 'audio/opus' });
451
449
  const videoConsumerRemoteParameters = fakeParameters.generateConsumerRemoteParameters({ codecMimeType: 'video/VP8' });
452
450
  let connectEventNumTimesCalled = 0;
@@ -517,12 +515,12 @@ test('transport.consume() succeeds', async () => {
517
515
  encodings = audioConsumer.rtpParameters.encodings;
518
516
  expect(Array.isArray(encodings)).toBe(true);
519
517
  expect(encodings.length).toBe(1);
520
- expect(typeof (encodings === null || encodings === void 0 ? void 0 : encodings[0])).toBe('object');
518
+ expect(typeof encodings?.[0]).toBe('object');
521
519
  expect(Object.keys(encodings[0])).toEqual(['ssrc', 'dtx']);
522
520
  expect(typeof encodings[0].ssrc).toBe('number');
523
521
  rtcp = audioProducer.rtpParameters.rtcp;
524
522
  expect(typeof rtcp).toBe('object');
525
- expect(typeof (rtcp === null || rtcp === void 0 ? void 0 : rtcp.cname)).toBe('string');
523
+ expect(typeof rtcp?.cname).toBe('string');
526
524
  expect(audioConsumer.paused).toBe(false);
527
525
  expect(audioConsumer.appData).toEqual({ bar: 'BAR' });
528
526
  videoConsumer = await recvTransport.consume({
@@ -602,15 +600,15 @@ test('transport.consume() succeeds', async () => {
602
600
  encodings = videoConsumer.rtpParameters.encodings;
603
601
  expect(Array.isArray(encodings)).toBe(true);
604
602
  expect(encodings.length).toBe(1);
605
- expect(typeof (encodings === null || encodings === void 0 ? void 0 : encodings[0])).toBe('object');
603
+ expect(typeof encodings?.[0]).toBe('object');
606
604
  expect(Object.keys(encodings[0])).toEqual(['ssrc', 'rtx', 'dtx']);
607
- expect(typeof (encodings === null || encodings === void 0 ? void 0 : encodings[0].ssrc)).toBe('number');
608
- expect(typeof (encodings === null || encodings === void 0 ? void 0 : encodings[0].rtx)).toBe('object');
605
+ expect(typeof encodings?.[0].ssrc).toBe('number');
606
+ expect(typeof encodings?.[0].rtx).toBe('object');
609
607
  expect(Object.keys(encodings[0].rtx)).toEqual(['ssrc']);
610
- expect(typeof ((_a = encodings === null || encodings === void 0 ? void 0 : encodings[0].rtx) === null || _a === void 0 ? void 0 : _a.ssrc)).toBe('number');
608
+ expect(typeof encodings?.[0].rtx?.ssrc).toBe('number');
611
609
  rtcp = videoConsumer.rtpParameters.rtcp;
612
610
  expect(typeof rtcp).toBe('object');
613
- expect(typeof (rtcp === null || rtcp === void 0 ? void 0 : rtcp.cname)).toBe('string');
611
+ expect(typeof rtcp?.cname).toBe('string');
614
612
  expect(videoConsumer.paused).toBe(false);
615
613
  expect(videoConsumer.appData).toEqual({});
616
614
  recvTransport.removeAllListeners('connect');
@@ -841,6 +839,36 @@ test('transport.updateIceServers() without iceServers rejects with TypeError', a
841
839
  .rejects
842
840
  .toThrow(TypeError);
843
841
  }, 500);
842
+ test('ICE gathering state change fires "icegatheringstatechange" in live Transport', () => {
843
+ // NOTE: These tests are a bit flaky and we should isolate them. FakeHandler
844
+ // emits '@connectionstatechange' with value 'connecting' as soon as its
845
+ // private setupTransport() method is called (which has happens many times in
846
+ // tests above already). So here we have to reset it manually to test things.
847
+ // @ts-ignore
848
+ sendTransport.handler.setIceGatheringState('new');
849
+ // @ts-ignore
850
+ sendTransport.handler.setConnectionState('new');
851
+ let iceGatheringStateChangeEventNumTimesCalled = 0;
852
+ let connectionStateChangeEventNumTimesCalled = 0;
853
+ sendTransport.on('icegatheringstatechange', (iceGatheringState) => {
854
+ iceGatheringStateChangeEventNumTimesCalled++;
855
+ expect(iceGatheringState).toBe('complete');
856
+ expect(sendTransport.iceGatheringState).toBe('complete');
857
+ expect(sendTransport.connectionState).toBe('new');
858
+ });
859
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
860
+ sendTransport.on('connectionstatechange', (connectionState) => {
861
+ connectionStateChangeEventNumTimesCalled++;
862
+ });
863
+ // @ts-ignore
864
+ sendTransport.handler.setIceGatheringState('complete');
865
+ expect(iceGatheringStateChangeEventNumTimesCalled).toBe(1);
866
+ expect(connectionStateChangeEventNumTimesCalled).toBe(0);
867
+ expect(sendTransport.iceGatheringState).toBe('complete');
868
+ expect(sendTransport.connectionState).toBe('new');
869
+ sendTransport.removeAllListeners('icegatheringstatechange');
870
+ sendTransport.removeAllListeners('connectionstatechange');
871
+ });
844
872
  test('connection state change fires "connectionstatechange" in live Transport', () => {
845
873
  let connectionStateChangeEventNumTimesCalled = 0;
846
874
  sendTransport.on('connectionstatechange', (connectionState) => {
@@ -854,20 +882,17 @@ test('connection state change fires "connectionstatechange" in live Transport',
854
882
  sendTransport.removeAllListeners('connectionstatechange');
855
883
  });
856
884
  test('producer.pause() succeeds', () => {
857
- var _a;
858
885
  videoProducer.pause();
859
886
  expect(videoProducer.paused).toBe(true);
860
887
  // Track will be still enabled due to disableTrackOnPause: false.
861
- expect((_a = videoProducer.track) === null || _a === void 0 ? void 0 : _a.enabled).toBe(true);
888
+ expect(videoProducer.track?.enabled).toBe(true);
862
889
  });
863
890
  test('producer.resume() succeeds', () => {
864
- var _a;
865
891
  videoProducer.resume();
866
892
  expect(videoProducer.paused).toBe(false);
867
- expect((_a = videoProducer.track) === null || _a === void 0 ? void 0 : _a.enabled).toBe(true);
893
+ expect(videoProducer.track?.enabled).toBe(true);
868
894
  });
869
895
  test('producer.replaceTrack() with a new track succeeds', async () => {
870
- var _a;
871
896
  // Have the audio Producer paused.
872
897
  audioProducer.pause();
873
898
  const audioProducerPreviousTrack = audioProducer.track;
@@ -876,8 +901,8 @@ test('producer.replaceTrack() with a new track succeeds', async () => {
876
901
  .resolves
877
902
  .toBe(undefined);
878
903
  // Previous track must be 'live' due to stopTracks: false.
879
- expect(audioProducerPreviousTrack === null || audioProducerPreviousTrack === void 0 ? void 0 : audioProducerPreviousTrack.readyState).toBe('live');
880
- expect((_a = audioProducer.track) === null || _a === void 0 ? void 0 : _a.readyState).toBe('live');
904
+ expect(audioProducerPreviousTrack?.readyState).toBe('live');
905
+ expect(audioProducer.track?.readyState).toBe('live');
881
906
  expect(audioProducer.track).not.toBe(audioProducerPreviousTrack);
882
907
  expect(audioProducer.track).toBe(newAudioTrack);
883
908
  // Producer was already paused.
@@ -890,7 +915,7 @@ test('producer.replaceTrack() with a new track succeeds', async () => {
890
915
  .resolves
891
916
  .toBe(undefined);
892
917
  // Previous track must be 'ended' due to stopTracks: true.
893
- expect(videoProducerPreviousTrack === null || videoProducerPreviousTrack === void 0 ? void 0 : videoProducerPreviousTrack.readyState).toBe('ended');
918
+ expect(videoProducerPreviousTrack?.readyState).toBe('ended');
894
919
  expect(videoProducer.track).not.toBe(videoProducerPreviousTrack);
895
920
  expect(videoProducer.track).toBe(newVideoTrack);
896
921
  expect(videoProducer.paused).toBe(false);
@@ -903,7 +928,7 @@ test('producer.replaceTrack() with null succeeds', async () => {
903
928
  .resolves
904
929
  .toBe(undefined);
905
930
  // Previous track must be 'live' due to stopTracks: false.
906
- expect(audioProducerPreviousTrack === null || audioProducerPreviousTrack === void 0 ? void 0 : audioProducerPreviousTrack.readyState).toBe('live');
931
+ expect(audioProducerPreviousTrack?.readyState).toBe('live');
907
932
  expect(audioProducer.track).toBeNull();
908
933
  // Producer was already paused.
909
934
  expect(audioProducer.paused).toBe(true);
@@ -919,26 +944,24 @@ test('producer.replaceTrack() with null succeeds', async () => {
919
944
  // The given audio track was muted but the Producer was not, so the track
920
945
  // must not be muted now.
921
946
  expect(audioProducer.paused).toBe(false);
922
- expect(audioProducerPreviousTrack === null || audioProducerPreviousTrack === void 0 ? void 0 : audioProducerPreviousTrack.enabled).toBe(true);
947
+ expect(audioProducerPreviousTrack?.enabled).toBe(true);
923
948
  // Reset the audio paused state.
924
949
  audioProducer.resume();
925
950
  }, 500);
926
951
  test('producer.replaceTrack() with an ended track rejects with InvalidStateError', async () => {
927
- var _a;
928
952
  const track = new fake_mediastreamtrack_1.FakeMediaStreamTrack({ kind: 'audio' });
929
953
  track.stop();
930
954
  await expect(videoProducer.replaceTrack({ track }))
931
955
  .rejects
932
956
  .toThrow(errors_1.InvalidStateError);
933
957
  expect(track.readyState).toBe('ended');
934
- expect((_a = videoProducer.track) === null || _a === void 0 ? void 0 : _a.readyState).toBe('live');
958
+ expect(videoProducer.track?.readyState).toBe('live');
935
959
  }, 500);
936
960
  test('producer.replaceTrack() with the same track succeeds', async () => {
937
- var _a;
938
961
  await expect(audioProducer.replaceTrack({ track: audioProducer.track }))
939
962
  .resolves
940
963
  .toBe(undefined);
941
- expect((_a = audioProducer.track) === null || _a === void 0 ? void 0 : _a.readyState).toBe('live');
964
+ expect(audioProducer.track?.readyState).toBe('live');
942
965
  }, 500);
943
966
  test('producer.setMaxSpatialLayer() succeeds', async () => {
944
967
  await expect(videoProducer.setMaxSpatialLayer(0))
@@ -987,11 +1010,10 @@ test('consumer.getStats() succeeds', async () => {
987
1010
  expect(typeof stats).toBe('object');
988
1011
  }, 500);
989
1012
  test('producer.close() succeed', () => {
990
- var _a;
991
1013
  audioProducer.close();
992
1014
  expect(audioProducer.closed).toBe(true);
993
1015
  // Track will be still 'live' due to stopTracks: false.
994
- expect((_a = audioProducer.track) === null || _a === void 0 ? void 0 : _a.readyState).toBe('live');
1016
+ expect(audioProducer.track?.readyState).toBe('live');
995
1017
  });
996
1018
  test('producer.replaceTrack() rejects with InvalidStateError if closed', async () => {
997
1019
  const audioTrack = new fake_mediastreamtrack_1.FakeMediaStreamTrack({ kind: 'audio' });
@@ -1160,7 +1182,6 @@ test('connection state change does not fire "connectionstatechange" in closed Tr
1160
1182
  sendTransport.removeAllListeners('connectionstatechange');
1161
1183
  });
1162
1184
  test('RemoteSdp properly handles multiple streams of the same type in planB', async () => {
1163
- var _a, _b, _c;
1164
1185
  let sdp = undefined;
1165
1186
  let sdpObject = undefined;
1166
1187
  const remoteSdp = new RemoteSdp_1.RemoteSdp({ planB: true });
@@ -1180,7 +1201,7 @@ test('RemoteSdp properly handles multiple streams of the same type in planB', as
1180
1201
  expect(sdpObject.media[0].rtp[0].codec).toBe('VP8');
1181
1202
  expect(sdpObject.media[0].rtp[1].payload).toBe(102);
1182
1203
  expect(sdpObject.media[0].rtp[1].codec).toBe('rtx');
1183
- expect((_a = sdpObject.media[0].ssrcs) === null || _a === void 0 ? void 0 : _a.length).toBe(4);
1204
+ expect(sdpObject.media[0].ssrcs?.length).toBe(4);
1184
1205
  await remoteSdp.receive({
1185
1206
  mid: 'video',
1186
1207
  kind: 'video',
@@ -1201,7 +1222,7 @@ test('RemoteSdp properly handles multiple streams of the same type in planB', as
1201
1222
  expect(sdpObject.media[0].rtp[2].codec).toBe('H264');
1202
1223
  expect(sdpObject.media[0].rtp[3].payload).toBe(104);
1203
1224
  expect(sdpObject.media[0].rtp[3].codec).toBe('rtx');
1204
- expect((_b = sdpObject.media[0].ssrcs) === null || _b === void 0 ? void 0 : _b.length).toBe(8);
1225
+ expect(sdpObject.media[0].ssrcs?.length).toBe(8);
1205
1226
  await remoteSdp.planBStopReceiving({
1206
1227
  mid: 'video',
1207
1228
  offerRtpParameters: fakeParameters.generateConsumerRemoteParameters({ codecMimeType: 'video/H264' }).rtpParameters
@@ -1219,10 +1240,9 @@ test('RemoteSdp properly handles multiple streams of the same type in planB', as
1219
1240
  expect(sdpObject.media[0].rtp[2].codec).toBe('H264');
1220
1241
  expect(sdpObject.media[0].rtp[3].payload).toBe(104);
1221
1242
  expect(sdpObject.media[0].rtp[3].codec).toBe('rtx');
1222
- expect((_c = sdpObject.media[0].ssrcs) === null || _c === void 0 ? void 0 : _c.length).toBe(4);
1243
+ expect(sdpObject.media[0].ssrcs?.length).toBe(4);
1223
1244
  }, 500);
1224
1245
  test('RemoteSdp does not duplicate codec descriptions', async () => {
1225
- var _a, _b;
1226
1246
  let sdp = undefined;
1227
1247
  let sdpObject = undefined;
1228
1248
  const remoteSdp = new RemoteSdp_1.RemoteSdp({ planB: true });
@@ -1242,7 +1262,7 @@ test('RemoteSdp does not duplicate codec descriptions', async () => {
1242
1262
  expect(sdpObject.media[0].rtp[0].codec).toBe('VP8');
1243
1263
  expect(sdpObject.media[0].rtp[1].payload).toBe(102);
1244
1264
  expect(sdpObject.media[0].rtp[1].codec).toBe('rtx');
1245
- expect((_a = sdpObject.media[0].ssrcs) === null || _a === void 0 ? void 0 : _a.length).toBe(4);
1265
+ expect(sdpObject.media[0].ssrcs?.length).toBe(4);
1246
1266
  await remoteSdp.receive({
1247
1267
  mid: 'video',
1248
1268
  kind: 'video',
@@ -1259,7 +1279,7 @@ test('RemoteSdp does not duplicate codec descriptions', async () => {
1259
1279
  expect(sdpObject.media[0].rtp[0].codec).toBe('VP8');
1260
1280
  expect(sdpObject.media[0].rtp[1].payload).toBe(102);
1261
1281
  expect(sdpObject.media[0].rtp[1].codec).toBe('rtx');
1262
- expect((_b = sdpObject.media[0].ssrcs) === null || _b === void 0 ? void 0 : _b.length).toBe(8);
1282
+ expect(sdpObject.media[0].ssrcs?.length).toBe(8);
1263
1283
  }, 500);
1264
1284
  test('parseScalabilityMode() works', () => {
1265
1285
  expect(parseScalabilityMode('L1T3')).toEqual({ spatialLayers: 1, temporalLayers: 3 });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mediasoup-client",
3
- "version": "3.6.96",
3
+ "version": "3.6.98",
4
4
  "description": "mediasoup client side JavaScript library",
5
5
  "contributors": [
6
6
  "Iñaki Baz Castillo <ibc@aliax.net> (https://inakibaz.me)",
@@ -79,7 +79,7 @@
79
79
  "@types/ua-parser-js": "^0.7.36",
80
80
  "@typescript-eslint/eslint-plugin": "^6.0.0",
81
81
  "@typescript-eslint/parser": "^6.0.0",
82
- "eslint": "^8.44.0",
82
+ "eslint": "^8.45.0",
83
83
  "eslint-plugin-jest": "^27.2.3",
84
84
  "jest": "^29.6.1",
85
85
  "open-cli": "^7.2.0",