mediasoup-client 3.7.13 → 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.
- package/lib/Consumer.d.ts +1 -1
- package/lib/Consumer.d.ts.map +1 -1
- package/lib/Consumer.js +1 -1
- package/lib/DataConsumer.d.ts +1 -1
- package/lib/DataConsumer.js +1 -1
- package/lib/DataProducer.d.ts +1 -1
- package/lib/DataProducer.js +1 -1
- package/lib/Device.d.ts +1 -1
- package/lib/Device.d.ts.map +1 -1
- package/lib/Device.js +1 -0
- package/lib/Producer.d.ts +1 -1
- package/lib/Producer.d.ts.map +1 -1
- package/lib/Producer.js +1 -1
- package/lib/Transport.d.ts +1 -1
- package/lib/Transport.d.ts.map +1 -1
- package/lib/Transport.js +4 -4
- package/lib/errors.d.ts.map +1 -1
- package/lib/errors.js +0 -3
- package/lib/handlers/Chrome111.d.ts.map +1 -1
- package/lib/handlers/Chrome111.js +7 -6
- package/lib/handlers/Chrome55.d.ts.map +1 -1
- package/lib/handlers/Chrome55.js +7 -6
- package/lib/handlers/Chrome67.d.ts.map +1 -1
- package/lib/handlers/Chrome67.js +7 -6
- package/lib/handlers/Chrome70.d.ts.map +1 -1
- package/lib/handlers/Chrome70.js +9 -8
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +8 -7
- package/lib/handlers/Edge11.d.ts.map +1 -1
- package/lib/handlers/Edge11.js +5 -4
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +4 -3
- package/lib/handlers/Firefox120.d.ts.map +1 -1
- package/lib/handlers/Firefox120.js +9 -12
- package/lib/handlers/Firefox60.d.ts.map +1 -1
- package/lib/handlers/Firefox60.js +15 -20
- package/lib/handlers/ReactNative.d.ts.map +1 -1
- package/lib/handlers/ReactNative.js +7 -6
- package/lib/handlers/ReactNativeUnifiedPlan.d.ts.map +1 -1
- package/lib/handlers/ReactNativeUnifiedPlan.js +9 -8
- package/lib/handlers/Safari11.d.ts.map +1 -1
- package/lib/handlers/Safari11.js +7 -6
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +8 -9
- package/lib/handlers/ortc/edgeUtils.js +10 -10
- package/lib/handlers/ortc/utils.js +1 -1
- package/lib/handlers/sdp/MediaSection.d.ts.map +1 -1
- package/lib/handlers/sdp/MediaSection.js +12 -13
- package/lib/handlers/sdp/RemoteSdp.js +1 -1
- package/lib/handlers/sdp/commonUtils.js +1 -1
- package/lib/handlers/sdp/planBUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/planBUtils.js +1 -2
- package/lib/handlers/sdp/unifiedPlanUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/unifiedPlanUtils.js +2 -3
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/ortc.js +7 -7
- package/lib/scalabilityModes.js +1 -1
- package/lib/test/fakeParameters.d.ts.map +1 -1
- package/lib/test/fakeParameters.js +7 -8
- package/lib/test/test.js +50 -48
- package/npm-scripts.mjs +4 -3
- 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
|
|
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
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
262
|
+
// @ts-expect-error --- On purpose.
|
|
263
263
|
expect(() => ctx.loadedDevice.createSendTransport({ id: '1234' })).toThrow(TypeError);
|
|
264
264
|
expect(() =>
|
|
265
|
-
// @ts-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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).
|
|
680
|
+
expect(pushSpy).toHaveBeenCalledTimes(1);
|
|
681
681
|
}, 500);
|
|
682
682
|
test('transport.consume() without remote Consumer parameters rejects with TypeError', async () => {
|
|
683
|
-
// @ts-
|
|
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-
|
|
687
|
+
// @ts-expect-error --- On purpose.
|
|
688
688
|
await expect(ctx.recvTransport.consume({ id: '1234' })).rejects.toThrow(TypeError);
|
|
689
689
|
await expect(
|
|
690
|
-
// @ts-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
793
|
+
// @ts-expect-error --- On purpose.
|
|
794
794
|
await expect(ctx.recvTransport.consumeData({ id: '1234' })).rejects.toThrow(TypeError);
|
|
795
795
|
await expect(
|
|
796
|
-
// @ts-
|
|
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-
|
|
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-
|
|
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-
|
|
842
|
+
// @ts-expect-error --- On purpose.
|
|
843
843
|
ctx.sendTransport.handler.setIceGatheringState('new');
|
|
844
|
-
// @ts-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
1036
|
+
// @ts-expect-error --- On purpose.
|
|
1037
1037
|
ctx.videoProducer.track.remoteStop();
|
|
1038
1038
|
expect(videoProducerTrackendedEventCalled).toBe(false);
|
|
1039
|
-
// @ts-
|
|
1039
|
+
// @ts-expect-error --- On purpose.
|
|
1040
1040
|
ctx.audioConsumer.track.remoteStop();
|
|
1041
1041
|
expect(audiosConsumerTrackendedEventCalled).toBe(true);
|
|
1042
|
-
// @ts-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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',
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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',
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
1274
|
-
|
|
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 .
|
|
169
|
+
executeCmd('eslint-config-prettier eslint.config.mjs');
|
|
169
170
|
|
|
170
171
|
executeCmd(
|
|
171
|
-
`eslint -c .
|
|
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.
|
|
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": ">=
|
|
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.
|
|
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": "
|
|
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": "^
|
|
85
|
-
"@typescript-eslint/parser": "^
|
|
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.
|
|
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.
|
|
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
|
}
|