@stream-io/video-client 1.50.0 → 1.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/index.browser.es.js +288 -58
  3. package/dist/index.browser.es.js.map +1 -1
  4. package/dist/index.cjs.js +288 -58
  5. package/dist/index.cjs.js.map +1 -1
  6. package/dist/index.es.js +288 -58
  7. package/dist/index.es.js.map +1 -1
  8. package/dist/src/Call.d.ts +1 -0
  9. package/dist/src/devices/CameraManager.d.ts +1 -0
  10. package/dist/src/devices/DeviceManager.d.ts +20 -0
  11. package/dist/src/devices/VirtualDevice.d.ts +59 -0
  12. package/dist/src/devices/devicePersistence.d.ts +1 -1
  13. package/dist/src/devices/index.d.ts +1 -0
  14. package/dist/src/rtc/BasePeerConnection.d.ts +7 -2
  15. package/dist/src/rtc/Publisher.d.ts +21 -3
  16. package/dist/src/rtc/TransceiverCache.d.ts +5 -1
  17. package/dist/src/rtc/helpers/degradationPreference.d.ts +1 -0
  18. package/dist/src/rtc/types.d.ts +2 -0
  19. package/package.json +2 -2
  20. package/src/Call.ts +22 -11
  21. package/src/devices/CameraManager.ts +9 -2
  22. package/src/devices/DeviceManager.ts +148 -8
  23. package/src/devices/DeviceManagerState.ts +4 -1
  24. package/src/devices/VirtualDevice.ts +69 -0
  25. package/src/devices/__tests__/CameraManager.test.ts +19 -0
  26. package/src/devices/__tests__/DeviceManager.test.ts +121 -1
  27. package/src/devices/devicePersistence.ts +2 -1
  28. package/src/devices/index.ts +1 -0
  29. package/src/rtc/BasePeerConnection.ts +15 -3
  30. package/src/rtc/Publisher.ts +140 -41
  31. package/src/rtc/TransceiverCache.ts +10 -3
  32. package/src/rtc/__tests__/Call.reconnect.test.ts +121 -2
  33. package/src/rtc/__tests__/Publisher.test.ts +659 -112
  34. package/src/rtc/__tests__/Subscriber.test.ts +2 -2
  35. package/src/rtc/helpers/__tests__/degradationPreference.test.ts +33 -1
  36. package/src/rtc/helpers/degradationPreference.ts +18 -0
  37. package/src/rtc/types.ts +2 -0
@@ -64,11 +64,11 @@ describe('Subscriber', () => {
64
64
  });
65
65
  });
66
66
 
67
- afterEach(() => {
67
+ afterEach(async () => {
68
68
  vi.useRealTimers();
69
69
  vi.clearAllMocks();
70
70
  vi.resetModules();
71
- subscriber.dispose();
71
+ await subscriber.dispose();
72
72
  });
73
73
 
74
74
  describe('Subscriber ICE restart', () => {
@@ -1,6 +1,9 @@
1
1
  import { describe, expect, it } from 'vitest';
2
2
  import { DegradationPreference } from '../../../gen/video/sfu/models/models';
3
- import { toRTCDegradationPreference } from '../degradationPreference';
3
+ import {
4
+ fromRTCDegradationPreference,
5
+ toRTCDegradationPreference,
6
+ } from '../degradationPreference';
4
7
 
5
8
  describe('toRTCDegradationPreference', () => {
6
9
  it.each([
@@ -21,3 +24,32 @@ describe('toRTCDegradationPreference', () => {
21
24
  ).toBeUndefined();
22
25
  });
23
26
  });
27
+
28
+ describe('fromRTCDegradationPreference', () => {
29
+ it.each([
30
+ ['balanced', DegradationPreference.BALANCED],
31
+ ['maintain-framerate', DegradationPreference.MAINTAIN_FRAMERATE],
32
+ ['maintain-resolution', DegradationPreference.MAINTAIN_RESOLUTION],
33
+ [
34
+ 'maintain-framerate-and-resolution',
35
+ DegradationPreference.MAINTAIN_FRAMERATE_AND_RESOLUTION,
36
+ ],
37
+ ] as const)('maps "%s" to %s', (preference, expected) => {
38
+ // @ts-expect-error not in the lib types yet
39
+ expect(fromRTCDegradationPreference(preference)).toBe(expected);
40
+ });
41
+
42
+ it('returns UNSPECIFIED for undefined', () => {
43
+ expect(fromRTCDegradationPreference(undefined)).toBe(
44
+ DegradationPreference.UNSPECIFIED,
45
+ );
46
+ });
47
+
48
+ it('returns UNSPECIFIED for an unknown value', () => {
49
+ expect(
50
+ fromRTCDegradationPreference(
51
+ 'something-else' as unknown as RTCDegradationPreference,
52
+ ),
53
+ ).toBe(DegradationPreference.UNSPECIFIED);
54
+ });
55
+ });
@@ -20,3 +20,21 @@ export const toRTCDegradationPreference = (
20
20
  ensureExhausted(preference, 'Unknown degradation preference');
21
21
  }
22
22
  };
23
+
24
+ export const fromRTCDegradationPreference = (
25
+ preference: RTCDegradationPreference | undefined,
26
+ ): DegradationPreference => {
27
+ switch (preference) {
28
+ case 'balanced':
29
+ return DegradationPreference.BALANCED;
30
+ case 'maintain-framerate':
31
+ return DegradationPreference.MAINTAIN_FRAMERATE;
32
+ case 'maintain-resolution':
33
+ return DegradationPreference.MAINTAIN_RESOLUTION;
34
+ // @ts-expect-error not in the typedefs yet
35
+ case 'maintain-framerate-and-resolution':
36
+ return DegradationPreference.MAINTAIN_FRAMERATE_AND_RESOLUTION;
37
+ default:
38
+ return DegradationPreference.UNSPECIFIED;
39
+ }
40
+ };
package/src/rtc/types.ts CHANGED
@@ -9,6 +9,7 @@ import { CallState } from '../store';
9
9
  import { Dispatcher } from './Dispatcher';
10
10
  import type { OptimalVideoLayer } from './layers';
11
11
  import type { ClientPublishOptions } from '../types';
12
+ import type { VideoSender } from '../gen/video/sfu/event/events';
12
13
 
13
14
  /**
14
15
  * Canonical reasons the SDK uses to trigger a reconnection. Free-form strings
@@ -73,6 +74,7 @@ export type PublishBundle = {
73
74
  publishOption: PublishOption;
74
75
  transceiver: RTCRtpTransceiver;
75
76
  options: TrackPublishOptions;
77
+ videoSender?: VideoSender;
76
78
  };
77
79
 
78
80
  export type TrackLayersCache = {