mediasoup-client 3.7.14 → 3.7.15

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 (54) hide show
  1. package/lib/Consumer.js +1 -1
  2. package/lib/DataConsumer.js +1 -1
  3. package/lib/DataProducer.js +1 -1
  4. package/lib/Device.d.ts.map +1 -1
  5. package/lib/Device.js +1 -0
  6. package/lib/Producer.js +1 -1
  7. package/lib/Transport.js +4 -4
  8. package/lib/errors.d.ts.map +1 -1
  9. package/lib/errors.js +0 -3
  10. package/lib/handlers/Chrome111.d.ts.map +1 -1
  11. package/lib/handlers/Chrome111.js +7 -6
  12. package/lib/handlers/Chrome55.d.ts.map +1 -1
  13. package/lib/handlers/Chrome55.js +7 -6
  14. package/lib/handlers/Chrome67.d.ts.map +1 -1
  15. package/lib/handlers/Chrome67.js +7 -6
  16. package/lib/handlers/Chrome70.d.ts.map +1 -1
  17. package/lib/handlers/Chrome70.js +9 -8
  18. package/lib/handlers/Chrome74.d.ts.map +1 -1
  19. package/lib/handlers/Chrome74.js +8 -7
  20. package/lib/handlers/Edge11.d.ts.map +1 -1
  21. package/lib/handlers/Edge11.js +5 -4
  22. package/lib/handlers/FakeHandler.d.ts.map +1 -1
  23. package/lib/handlers/FakeHandler.js +4 -3
  24. package/lib/handlers/Firefox120.d.ts.map +1 -1
  25. package/lib/handlers/Firefox120.js +9 -12
  26. package/lib/handlers/Firefox60.d.ts.map +1 -1
  27. package/lib/handlers/Firefox60.js +15 -20
  28. package/lib/handlers/ReactNative.d.ts.map +1 -1
  29. package/lib/handlers/ReactNative.js +7 -6
  30. package/lib/handlers/ReactNativeUnifiedPlan.d.ts.map +1 -1
  31. package/lib/handlers/ReactNativeUnifiedPlan.js +9 -8
  32. package/lib/handlers/Safari11.d.ts.map +1 -1
  33. package/lib/handlers/Safari11.js +7 -6
  34. package/lib/handlers/Safari12.d.ts.map +1 -1
  35. package/lib/handlers/Safari12.js +8 -9
  36. package/lib/handlers/ortc/edgeUtils.js +10 -10
  37. package/lib/handlers/ortc/utils.js +1 -1
  38. package/lib/handlers/sdp/MediaSection.d.ts.map +1 -1
  39. package/lib/handlers/sdp/MediaSection.js +12 -13
  40. package/lib/handlers/sdp/RemoteSdp.js +1 -1
  41. package/lib/handlers/sdp/commonUtils.js +1 -1
  42. package/lib/handlers/sdp/planBUtils.d.ts.map +1 -1
  43. package/lib/handlers/sdp/planBUtils.js +1 -2
  44. package/lib/handlers/sdp/unifiedPlanUtils.d.ts.map +1 -1
  45. package/lib/handlers/sdp/unifiedPlanUtils.js +2 -3
  46. package/lib/index.d.ts +1 -1
  47. package/lib/index.js +1 -1
  48. package/lib/ortc.js +7 -7
  49. package/lib/scalabilityModes.js +1 -1
  50. package/lib/test/fakeParameters.d.ts.map +1 -1
  51. package/lib/test/fakeParameters.js +7 -8
  52. package/lib/test/test.js +50 -48
  53. package/npm-scripts.mjs +4 -3
  54. package/package.json +13 -9
package/lib/test/test.js CHANGED
@@ -69,14 +69,14 @@ beforeEach(async () => {
69
69
  setTimeout(callback);
70
70
  });
71
71
  ctx.connectedSendTransport.on('produce',
72
- // eslint-disable-next-line no-shadow, @typescript-eslint/no-unused-vars
72
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
73
73
  ({ kind, rtpParameters, appData }, callback /* errback */) => {
74
74
  // eslint-disable-next-line no-shadow
75
75
  const id = fakeParameters.generateProducerRemoteParameters().id;
76
76
  setTimeout(() => callback({ id }));
77
77
  });
78
78
  ctx.connectedSendTransport.on('producedata', (
79
- // eslint-disable-next-line no-shadow, @typescript-eslint/no-unused-vars
79
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
80
80
  { sctpStreamParameters, label, protocol, appData }, callback /* errback */) => {
81
81
  // eslint-disable-next-line no-shadow
82
82
  const id = fakeParameters.generateDataProducerRemoteParameters().id;
@@ -149,7 +149,7 @@ test('create a Device in Node without custom handlerName/handlerFactory throws U
149
149
  expect(() => new Device()).toThrow(errors_1.UnsupportedError);
150
150
  });
151
151
  test('create a Device with an unknown handlerName string throws TypeError', () => {
152
- // @ts-ignore
152
+ // @ts-expect-error --- On purpose.
153
153
  expect(() => new Device({ handlerName: 'FooBrowser666' })).toThrow(TypeError);
154
154
  });
155
155
  test('create a Device in Node with a valid handlerFactory succeeds', () => {
@@ -180,7 +180,7 @@ test('device.createSendTransport() throws InvalidStateError if not loaded', () =
180
180
  })).toThrow(errors_1.InvalidStateError);
181
181
  });
182
182
  test('device.load() without routerRtpCapabilities rejects with TypeError', async () => {
183
- // @ts-ignore
183
+ // @ts-expect-error --- On purpose.
184
184
  await expect(ctx.device.load({})).rejects.toThrow(TypeError);
185
185
  expect(ctx.device.loaded).toBe(false);
186
186
  }, 500);
@@ -188,7 +188,7 @@ test('device.load() with invalid routerRtpCapabilities rejects with TypeError',
188
188
  // Clone fake router RTP capabilities to make them invalid.
189
189
  const routerRtpCapabilities = utils.clone(fakeParameters.generateRouterRtpCapabilities());
190
190
  for (const codec of routerRtpCapabilities.codecs) {
191
- // @ts-ignore
191
+ // @ts-expect-error --- On purpose.
192
192
  delete codec.mimeType;
193
193
  }
194
194
  await expect(ctx.device.load({ routerRtpCapabilities })).rejects.toThrow(TypeError);
@@ -216,7 +216,7 @@ test('device.canProduce() with "audio"/"video" kind returns true', () => {
216
216
  expect(ctx.loadedDevice.canProduce('video')).toBe(true);
217
217
  });
218
218
  test('device.canProduce() with invalid kind throws TypeError', () => {
219
- // @ts-ignore
219
+ // @ts-expect-error --- On purpose.
220
220
  expect(() => ctx.loadedDevice.canProduce('chicken')).toThrow(TypeError);
221
221
  });
222
222
  test('device.createSendTransport() for sending media succeeds', () => {
@@ -259,14 +259,14 @@ test('device.createRecvTransport() for receiving media succeeds', () => {
259
259
  expect(recvTransport.appData).toEqual({});
260
260
  });
261
261
  test('device.createSendTransport() with missing remote Transport parameters throws TypeError', () => {
262
- // @ts-ignore
262
+ // @ts-expect-error --- On purpose.
263
263
  expect(() => ctx.loadedDevice.createSendTransport({ id: '1234' })).toThrow(TypeError);
264
264
  expect(() =>
265
- // @ts-ignore
265
+ // @ts-expect-error --- On purpose.
266
266
  ctx.loadedDevice.createSendTransport({ id: '1234', iceParameters: {} })).toThrow(TypeError);
267
267
  expect(() => ctx.loadedDevice.createSendTransport({
268
268
  id: '1234',
269
- // @ts-ignore
269
+ // @ts-expect-error --- On purpose.
270
270
  iceParameters: {},
271
271
  iceCandidates: [],
272
272
  })).toThrow(TypeError);
@@ -279,7 +279,7 @@ test('device.createRecvTransport() with a non object appData throws TypeError',
279
279
  iceCandidates,
280
280
  dtlsParameters,
281
281
  sctpParameters,
282
- // @ts-ignore
282
+ // @ts-expect-error --- On purpose.
283
283
  appData: 1234,
284
284
  })).toThrow(TypeError);
285
285
  });
@@ -472,7 +472,7 @@ test('transport.produce() with an ended track rejects with InvalidStateError', a
472
472
  test('transport.produce() with a non object appData rejects with TypeError', async () => {
473
473
  const track = new fake_mediastreamtrack_1.FakeMediaStreamTrack({ kind: 'audio' });
474
474
  await expect(
475
- // @ts-ignore
475
+ // @ts-expect-error --- On purpose.
476
476
  ctx.sendTransport.produce({ track, appData: true })).rejects.toThrow(TypeError);
477
477
  }, 500);
478
478
  test('transport.consume() succeeds', async () => {
@@ -647,7 +647,7 @@ test('transport.consume() batches consumers created in same macrotask into the s
647
647
  const videoConsumerRemoteParameters2 = fakeParameters.generateConsumerRemoteParameters({
648
648
  codecMimeType: 'video/VP8',
649
649
  });
650
- // @ts-ignore
650
+ // @ts-expect-error --- On purpose.
651
651
  const pushSpy = jest.spyOn(ctx.connectedRecvTransport._awaitQueue, 'push');
652
652
  const waitForConsumer = (id) => {
653
653
  return new Promise(resolve => {
@@ -677,27 +677,27 @@ test('transport.consume() batches consumers created in same macrotask into the s
677
677
  }),
678
678
  ]);
679
679
  await allConsumersCreated;
680
- expect(pushSpy).toBeCalledTimes(1);
680
+ expect(pushSpy).toHaveBeenCalledTimes(1);
681
681
  }, 500);
682
682
  test('transport.consume() without remote Consumer parameters rejects with TypeError', async () => {
683
- // @ts-ignore
683
+ // @ts-expect-error --- On purpose.
684
684
  await expect(ctx.recvTransport.consume({})).rejects.toThrow(TypeError);
685
685
  }, 500);
686
686
  test('transport.consume() with missing remote Consumer parameters rejects with TypeError', async () => {
687
- // @ts-ignore
687
+ // @ts-expect-error --- On purpose.
688
688
  await expect(ctx.recvTransport.consume({ id: '1234' })).rejects.toThrow(TypeError);
689
689
  await expect(
690
- // @ts-ignore
690
+ // @ts-expect-error --- On purpose.
691
691
  ctx.recvTransport.consume({ id: '1234', producerId: '4444' })).rejects.toThrow(TypeError);
692
692
  await expect(ctx.recvTransport.consume(
693
- // @ts-ignore
693
+ // @ts-expect-error --- On purpose.
694
694
  {
695
695
  id: '1234',
696
696
  producerId: '4444',
697
697
  kind: 'audio',
698
698
  })).rejects.toThrow(TypeError);
699
699
  await expect(ctx.recvTransport.consume(
700
- // @ts-ignore
700
+ // @ts-expect-error --- On purpose.
701
701
  {
702
702
  id: '1234',
703
703
  producerId: '4444',
@@ -731,7 +731,7 @@ test('transport.consume() with a non object appData rejects with TypeError', asy
731
731
  codecMimeType: 'audio/opus',
732
732
  });
733
733
  await expect(
734
- // @ts-ignore
734
+ // @ts-expect-error --- On purpose.
735
735
  ctx.recvTransport.consume({ consumerRemoteParameters, appData: true })).rejects.toThrow(TypeError);
736
736
  }, 500);
737
737
  test('transport.produceData() succeeds', async () => {
@@ -763,7 +763,7 @@ test('transport.produceData() in a receiving Transport rejects with UnsupportedE
763
763
  }, 500);
764
764
  test('transport.produceData() with a non object appData rejects with TypeError', async () => {
765
765
  await expect(
766
- // @ts-ignore
766
+ // @ts-expect-error --- On purpose.
767
767
  ctx.sendTransport.produceData({ appData: true })).rejects.toThrow(TypeError);
768
768
  }, 500);
769
769
  test('transport.consumeData() succeeds', async () => {
@@ -786,14 +786,14 @@ test('transport.consumeData() succeeds', async () => {
786
786
  expect(dataConsumer.protocol).toBe('BAR');
787
787
  }, 500);
788
788
  test('transport.consumeData() without remote DataConsumer parameters rejects with TypeError', async () => {
789
- // @ts-ignore
789
+ // @ts-expect-error --- On purpose.
790
790
  await expect(ctx.recvTransport.consumeData({})).rejects.toThrow(TypeError);
791
791
  }, 500);
792
792
  test('transport.consumeData() with missing remote DataConsumer parameters rejects with TypeError', async () => {
793
- // @ts-ignore
793
+ // @ts-expect-error --- On purpose.
794
794
  await expect(ctx.recvTransport.consumeData({ id: '1234' })).rejects.toThrow(TypeError);
795
795
  await expect(
796
- // @ts-ignore
796
+ // @ts-expect-error --- On purpose.
797
797
  ctx.recvTransport.consumeData({ id: '1234', dataProducerId: '4444' })).rejects.toThrow(TypeError);
798
798
  }, 500);
799
799
  test('transport.consumeData() in a sending Transport rejects with UnsupportedError', async () => {
@@ -808,7 +808,7 @@ test('transport.consumeData() with a non object appData rejects with TypeError',
808
808
  const dataConsumerRemoteParameters = fakeParameters.generateDataConsumerRemoteParameters();
809
809
  await expect(ctx.recvTransport.consumeData({
810
810
  dataConsumerRemoteParameters,
811
- // @ts-ignore
811
+ // @ts-expect-error --- On purpose.
812
812
  appData: true,
813
813
  })).rejects.toThrow(TypeError);
814
814
  }, 500);
@@ -825,7 +825,7 @@ test('transport.restartIce() succeeds', async () => {
825
825
  })).resolves.toBe(undefined);
826
826
  }, 500);
827
827
  test('transport.restartIce() without remote iceParameters rejects with TypeError', async () => {
828
- // @ts-ignore
828
+ // @ts-expect-error --- On purpose.
829
829
  await expect(ctx.sendTransport.restartIce({})).rejects.toThrow(TypeError);
830
830
  }, 500);
831
831
  test('transport.updateIceServers() succeeds', async () => {
@@ -839,9 +839,9 @@ test('ICE gathering state change fires "icegatheringstatechange" in live Transpo
839
839
  // emits '@connectionstatechange' with value 'connecting' as soon as its
840
840
  // private setupTransport() method is called (which has happens many times in
841
841
  // tests above already). So here we have to reset it manually to test things.
842
- // @ts-ignore
842
+ // @ts-expect-error --- On purpose.
843
843
  ctx.sendTransport.handler.setIceGatheringState('new');
844
- // @ts-ignore
844
+ // @ts-expect-error --- On purpose.
845
845
  ctx.sendTransport.handler.setConnectionState('new');
846
846
  let iceGatheringStateChangeEventNumTimesCalled = 0;
847
847
  let connectionStateChangeEventNumTimesCalled = 0;
@@ -855,7 +855,7 @@ test('ICE gathering state change fires "icegatheringstatechange" in live Transpo
855
855
  ctx.sendTransport.on('connectionstatechange', connectionState => {
856
856
  connectionStateChangeEventNumTimesCalled++;
857
857
  });
858
- // @ts-ignore
858
+ // @ts-expect-error --- On purpose.
859
859
  ctx.sendTransport.handler.setIceGatheringState('complete');
860
860
  expect(iceGatheringStateChangeEventNumTimesCalled).toBe(1);
861
861
  expect(connectionStateChangeEventNumTimesCalled).toBe(0);
@@ -868,7 +868,7 @@ test('connection state change fires "connectionstatechange" in live Transport',
868
868
  connectionStateChangeEventNumTimesCalled++;
869
869
  expect(connectionState).toBe('completed');
870
870
  });
871
- // @ts-ignore
871
+ // @ts-expect-error --- On purpose.
872
872
  ctx.sendTransport.handler.setConnectionState('completed');
873
873
  expect(connectionStateChangeEventNumTimesCalled).toBe(1);
874
874
  expect(ctx.sendTransport.connectionState).toBe('completed');
@@ -952,11 +952,11 @@ test('producer.setMaxSpatialLayer() in an audio Producer rejects with Unsupporte
952
952
  }, 500);
953
953
  test('producer.setMaxSpatialLayer() with invalid spatialLayer rejects with TypeError', async () => {
954
954
  await expect(
955
- // @ts-ignore
955
+ // @ts-expect-error --- On purpose.
956
956
  ctx.videoProducer.setMaxSpatialLayer('chicken')).rejects.toThrow(TypeError);
957
957
  }, 500);
958
958
  test('producer.setMaxSpatialLayer() without spatialLayer rejects with TypeError', async () => {
959
- // @ts-ignore
959
+ // @ts-expect-error --- On purpose.
960
960
  await expect(ctx.videoProducer.setMaxSpatialLayer()).rejects.toThrow(TypeError);
961
961
  }, 500);
962
962
  test('producer.setRtpEncodingParameters() succeeds', async () => {
@@ -1028,18 +1028,18 @@ test('remotetely stopped track fires "trackended" in live Producers/Consumers',
1028
1028
  ctx.videoConsumer.on('trackended', () => {
1029
1029
  videoConsumerTrackendedEventCalled = true;
1030
1030
  });
1031
- // @ts-ignore
1031
+ // @ts-expect-error --- On purpose.
1032
1032
  ctx.audioProducer.track.remoteStop();
1033
1033
  expect(audioProducerTrackendedEventCalled).toBe(true);
1034
1034
  // Let's close the video producer.
1035
1035
  ctx.videoProducer.close();
1036
- // @ts-ignore
1036
+ // @ts-expect-error --- On purpose.
1037
1037
  ctx.videoProducer.track.remoteStop();
1038
1038
  expect(videoProducerTrackendedEventCalled).toBe(false);
1039
- // @ts-ignore
1039
+ // @ts-expect-error --- On purpose.
1040
1040
  ctx.audioConsumer.track.remoteStop();
1041
1041
  expect(audiosConsumerTrackendedEventCalled).toBe(true);
1042
- // @ts-ignore
1042
+ // @ts-expect-error --- On purpose.
1043
1043
  ctx.videoConsumer.track.remoteStop();
1044
1044
  expect(videoConsumerTrackendedEventCalled).toBe(true);
1045
1045
  });
@@ -1082,7 +1082,7 @@ test('transport.produce() rejects with InvalidStateError if closed', async () =>
1082
1082
  }, 500);
1083
1083
  test('transport.consume() rejects with InvalidStateError if closed', async () => {
1084
1084
  ctx.connectedRecvTransport.close();
1085
- // @ts-ignore
1085
+ // @ts-expect-error --- On purpose.
1086
1086
  await expect(ctx.connectedRecvTransport.consume({})).rejects.toThrow(errors_1.InvalidStateError);
1087
1087
  }, 500);
1088
1088
  test('transport.produceData() rejects with InvalidStateError if closed', async () => {
@@ -1091,7 +1091,7 @@ test('transport.produceData() rejects with InvalidStateError if closed', async (
1091
1091
  }, 500);
1092
1092
  test('transport.consumeData() rejects with InvalidStateError if closed', async () => {
1093
1093
  ctx.connectedRecvTransport.close();
1094
- // @ts-ignore
1094
+ // @ts-expect-error --- On purpose.
1095
1095
  await expect(ctx.connectedRecvTransport.consumeData({})).rejects.toThrow(errors_1.InvalidStateError);
1096
1096
  }, 500);
1097
1097
  test('transport.getStats() rejects with InvalidStateError if closed', async () => {
@@ -1101,7 +1101,7 @@ test('transport.getStats() rejects with InvalidStateError if closed', async () =
1101
1101
  test('transport.restartIce() rejects with InvalidStateError if closed', async () => {
1102
1102
  ctx.connectedSendTransport.close();
1103
1103
  await expect(
1104
- // @ts-ignore
1104
+ // @ts-expect-error --- On purpose.
1105
1105
  ctx.connectedSendTransport.restartIce({ ieParameters: {} })).rejects.toThrow(errors_1.InvalidStateError);
1106
1106
  }, 500);
1107
1107
  test('transport.updateIceServers() rejects with InvalidStateError if closed', async () => {
@@ -1114,16 +1114,16 @@ test('connection state change does not fire "connectionstatechange" in closed Tr
1114
1114
  connectionStateChangeEventNumTimesCalled++;
1115
1115
  });
1116
1116
  ctx.connectedSendTransport.close();
1117
- // @ts-ignore
1117
+ // @ts-expect-error --- On purpose.
1118
1118
  ctx.connectedSendTransport.handler.setConnectionState('disconnected');
1119
1119
  expect(connectionStateChangeEventNumTimesCalled).toBe(0);
1120
1120
  expect(ctx.connectedSendTransport.connectionState).toBe('disconnected');
1121
1121
  });
1122
- test('RemoteSdp properly handles multiple streams of the same type in planB', async () => {
1122
+ test('RemoteSdp properly handles multiple streams of the same type in planB', () => {
1123
1123
  let sdp = undefined;
1124
1124
  let sdpObject = undefined;
1125
1125
  const remoteSdp = new RemoteSdp_1.RemoteSdp({ planB: true });
1126
- await remoteSdp.receive({
1126
+ remoteSdp.receive({
1127
1127
  mid: 'video',
1128
1128
  kind: 'video',
1129
1129
  offerRtpParameters: fakeParameters.generateConsumerRemoteParameters({
@@ -1142,7 +1142,7 @@ test('RemoteSdp properly handles multiple streams of the same type in planB', as
1142
1142
  expect(sdpObject.media[0].rtp[1].payload).toBe(102);
1143
1143
  expect(sdpObject.media[0].rtp[1].codec).toBe('rtx');
1144
1144
  expect(sdpObject.media[0].ssrcs?.length).toBe(4);
1145
- await remoteSdp.receive({
1145
+ remoteSdp.receive({
1146
1146
  mid: 'video',
1147
1147
  kind: 'video',
1148
1148
  offerRtpParameters: fakeParameters.generateConsumerRemoteParameters({
@@ -1165,7 +1165,7 @@ test('RemoteSdp properly handles multiple streams of the same type in planB', as
1165
1165
  expect(sdpObject.media[0].rtp[3].payload).toBe(104);
1166
1166
  expect(sdpObject.media[0].rtp[3].codec).toBe('rtx');
1167
1167
  expect(sdpObject.media[0].ssrcs?.length).toBe(8);
1168
- await remoteSdp.planBStopReceiving({
1168
+ remoteSdp.planBStopReceiving({
1169
1169
  mid: 'video',
1170
1170
  offerRtpParameters: fakeParameters.generateConsumerRemoteParameters({
1171
1171
  codecMimeType: 'video/H264',
@@ -1186,11 +1186,11 @@ test('RemoteSdp properly handles multiple streams of the same type in planB', as
1186
1186
  expect(sdpObject.media[0].rtp[3].codec).toBe('rtx');
1187
1187
  expect(sdpObject.media[0].ssrcs?.length).toBe(4);
1188
1188
  }, 500);
1189
- test('RemoteSdp does not duplicate codec descriptions', async () => {
1189
+ test('RemoteSdp does not duplicate codec descriptions', () => {
1190
1190
  let sdp = undefined;
1191
1191
  let sdpObject = undefined;
1192
1192
  const remoteSdp = new RemoteSdp_1.RemoteSdp({ planB: true });
1193
- await remoteSdp.receive({
1193
+ remoteSdp.receive({
1194
1194
  mid: 'video',
1195
1195
  kind: 'video',
1196
1196
  offerRtpParameters: fakeParameters.generateConsumerRemoteParameters({
@@ -1209,7 +1209,7 @@ test('RemoteSdp does not duplicate codec descriptions', async () => {
1209
1209
  expect(sdpObject.media[0].rtp[1].payload).toBe(102);
1210
1210
  expect(sdpObject.media[0].rtp[1].codec).toBe('rtx');
1211
1211
  expect(sdpObject.media[0].ssrcs?.length).toBe(4);
1212
- await remoteSdp.receive({
1212
+ remoteSdp.receive({
1213
1213
  mid: 'video',
1214
1214
  kind: 'video',
1215
1215
  offerRtpParameters: fakeParameters.generateConsumerRemoteParameters({
@@ -1270,8 +1270,10 @@ test('parseScalabilityMode() works', () => {
1270
1270
  describe('detectDevice() assigns proper handler based on UserAgent', () => {
1271
1271
  const originalNavigator = global.navigator;
1272
1272
  for (const uaTestCase of uaTestCases_1.uaTestCases) {
1273
- test(uaTestCase.desc, () => {
1274
- // @ts-ignore
1273
+ test(
1274
+ // eslint-disable-next-line jest/valid-title --- Jest is not that smart.
1275
+ uaTestCase.desc, () => {
1276
+ // @ts-expect-error --- On purpose.
1275
1277
  global.navigator = {
1276
1278
  userAgent: uaTestCase.ua,
1277
1279
  };
package/npm-scripts.mjs CHANGED
@@ -7,7 +7,7 @@ const PKG = JSON.parse(fs.readFileSync('./package.json').toString());
7
7
  const MAYOR_VERSION = PKG.version.split('.')[0];
8
8
 
9
9
  // Paths for ESLint to check. Converted to string for convenience.
10
- const ESLINT_PATHS = ['src', 'npm-scripts.mjs'].join(' ');
10
+ const ESLINT_PATHS = ['eslint.config.mjs', 'src', 'npm-scripts.mjs'].join(' ');
11
11
  // Paths for ESLint to ignore. Converted to string argument for convenience.
12
12
  const ESLINT_IGNORE_PATTERN_ARGS = []
13
13
  .map(entry => `--ignore-pattern ${entry}`)
@@ -17,6 +17,7 @@ const ESLINT_IGNORE_PATTERN_ARGS = []
17
17
  // node/src/fbs.
18
18
  const PRETTIER_PATHS = [
19
19
  'README.md',
20
+ 'eslint.config.mjs',
20
21
  'src',
21
22
  'npm-scripts.mjs',
22
23
  'package.json',
@@ -165,10 +166,10 @@ function lint() {
165
166
 
166
167
  // Ensure there are no rules that are unnecessary or conflict with Prettier
167
168
  // rules.
168
- executeCmd('eslint-config-prettier .eslintrc.js');
169
+ executeCmd('eslint-config-prettier eslint.config.mjs');
169
170
 
170
171
  executeCmd(
171
- `eslint -c .eslintrc.js --ext=ts,js,mjs --max-warnings 0 ${ESLINT_IGNORE_PATTERN_ARGS} ${ESLINT_PATHS}`
172
+ `eslint -c eslint.config.mjs --max-warnings 0 ${ESLINT_IGNORE_PATTERN_ARGS} ${ESLINT_PATHS}`
172
173
  );
173
174
 
174
175
  executeCmd(`prettier --check ${PRETTIER_PATHS}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mediasoup-client",
3
- "version": "3.7.14",
3
+ "version": "3.7.15",
4
4
  "description": "mediasoup client side TypeScript library",
5
5
  "contributors": [
6
6
  "Iñaki Baz Castillo <ibc@aliax.net> (https://inakibaz.me)",
@@ -23,7 +23,7 @@
23
23
  "lib"
24
24
  ],
25
25
  "engines": {
26
- "node": ">=16"
26
+ "node": ">=18"
27
27
  },
28
28
  "keywords": [
29
29
  "webrtc",
@@ -67,7 +67,7 @@
67
67
  "@types/debug": "^4.1.12",
68
68
  "@types/npm-events-package": "npm:@types/events@^3.0.3",
69
69
  "awaitqueue": "^3.0.2",
70
- "debug": "^4.3.5",
70
+ "debug": "^4.3.6",
71
71
  "npm-events-package": "npm:events@^3.3.0",
72
72
  "fake-mediastreamtrack": "^1.2.0",
73
73
  "h264-profile-level-id": "^2.0.0",
@@ -77,20 +77,24 @@
77
77
  "ua-parser-js": "^1.0.38"
78
78
  },
79
79
  "devDependencies": {
80
+ "@eslint/js": "^9.9.0",
80
81
  "@types/jest": "^29.5.12",
81
- "@types/node": "20",
82
+ "@types/node": "22",
82
83
  "@types/sdp-transform": "^2.4.9",
83
84
  "@types/ua-parser-js": "^0.7.39",
84
- "@typescript-eslint/eslint-plugin": "^7.17.0",
85
- "@typescript-eslint/parser": "^7.17.0",
85
+ "@typescript-eslint/eslint-plugin": "^8.0.1",
86
+ "@typescript-eslint/parser": "^8.0.1",
86
87
  "eslint": "^8.57.0",
88
+ "eslint": "^9.9.0",
87
89
  "eslint-config-prettier": "^9.1.0",
88
- "eslint-plugin-jest": "^28.6.0",
90
+ "eslint-plugin-jest": "^28.8.0",
89
91
  "eslint-plugin-prettier": "^5.2.1",
92
+ "globals": "^15.9.0",
90
93
  "jest": "^29.7.0",
91
94
  "open-cli": "^8.0.0",
92
95
  "prettier": "^3.3.3",
93
- "ts-jest": "^29.2.3",
94
- "typescript": "^5.5.4"
96
+ "ts-jest": "^29.2.4",
97
+ "typescript": "^5.5.4",
98
+ "typescript-eslint": "^8.0.1"
95
99
  }
96
100
  }