@stream-io/video-client 2.0.0-beta.0 → 2.0.0-beta.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 (90) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/index.browser.es.js +1126 -791
  3. package/dist/index.browser.es.js.map +1 -1
  4. package/dist/index.cjs.js +1126 -791
  5. package/dist/index.cjs.js.map +1 -1
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.es.js +1126 -791
  8. package/dist/index.es.js.map +1 -1
  9. package/dist/src/Call.d.ts +37 -11
  10. package/dist/src/StreamVideoClient.d.ts +15 -21
  11. package/dist/src/coordinator/connection/types.d.ts +16 -0
  12. package/dist/src/events/call.d.ts +0 -11
  13. package/dist/src/gen/coordinator/index.d.ts +73 -0
  14. package/dist/src/reporting/ClientEventReporter.d.ts +11 -1
  15. package/dist/src/ringing/RingStatePoller.d.ts +46 -0
  16. package/dist/src/ringing/RingTimeout.d.ts +27 -0
  17. package/dist/src/ringing/index.d.ts +4 -0
  18. package/dist/src/ringing/reconcileRingState.d.ts +18 -0
  19. package/dist/src/ringing/resolveOwnRingOutcome.d.ts +32 -0
  20. package/dist/src/rtc/Publisher.d.ts +18 -0
  21. package/dist/src/rtc/TransceiverCache.d.ts +10 -0
  22. package/dist/src/rtc/e2ee/E2EEManager.d.ts +10 -1
  23. package/dist/src/stats/utils.d.ts +6 -0
  24. package/dist/src/store/CallState.d.ts +118 -267
  25. package/dist/src/store/ClientState.d.ts +62 -0
  26. package/dist/src/store/index.d.ts +1 -1
  27. package/dist/src/store/subjects.d.ts +15 -0
  28. package/dist/src/store/types.d.ts +22 -0
  29. package/dist/src/types.d.ts +33 -4
  30. package/index.ts +1 -0
  31. package/package.json +2 -2
  32. package/src/Call.ts +285 -125
  33. package/src/StreamSfuClient.ts +6 -2
  34. package/src/StreamVideoClient.ts +40 -47
  35. package/src/__tests__/Call.autodrop.test.ts +118 -66
  36. package/src/__tests__/Call.getRingState.test.ts +87 -0
  37. package/src/__tests__/Call.lifecycle.test.ts +499 -6
  38. package/src/__tests__/Call.publishing.test.ts +2 -2
  39. package/src/__tests__/Call.ringSettled.test.ts +71 -0
  40. package/src/__tests__/Call.ringingLifecycle.test.ts +242 -0
  41. package/src/__tests__/StreamSfuClient.test.ts +48 -0
  42. package/src/__tests__/StreamVideoClient.disconnect.test.ts +62 -0
  43. package/src/coordinator/connection/types.ts +19 -0
  44. package/src/devices/__tests__/CameraManager.test.ts +2 -2
  45. package/src/devices/__tests__/DeviceManager.test.ts +2 -2
  46. package/src/devices/__tests__/DeviceManagerFilters.test.ts +2 -2
  47. package/src/devices/__tests__/MicrophoneManager.test.ts +2 -2
  48. package/src/devices/__tests__/MicrophoneManagerRN.test.ts +2 -2
  49. package/src/devices/__tests__/ScreenShareManager.test.ts +3 -3
  50. package/src/devices/__tests__/SpeakerManager.test.ts +4 -4
  51. package/src/events/__tests__/call.test.ts +5 -220
  52. package/src/events/call.ts +1 -73
  53. package/src/events/callEventHandlers.ts +12 -23
  54. package/src/gen/coordinator/index.ts +67 -0
  55. package/src/helpers/__tests__/AudioBindingsWatchdog.test.ts +2 -2
  56. package/src/helpers/__tests__/DynascaleManager.test.ts +2 -2
  57. package/src/helpers/__tests__/ViewportTracker.test.ts +2 -2
  58. package/src/reporting/ClientEventReporter.ts +30 -4
  59. package/src/reporting/__tests__/ClientEventReporter.test.ts +184 -7
  60. package/src/ringing/RingStatePoller.ts +177 -0
  61. package/src/ringing/RingTimeout.ts +90 -0
  62. package/src/ringing/__tests__/RingStatePoller.test.ts +462 -0
  63. package/src/ringing/__tests__/RingTimeout.test.ts +199 -0
  64. package/src/ringing/__tests__/reconcileRingState.test.ts +330 -0
  65. package/src/ringing/__tests__/resolveOwnRingOutcome.test.ts +103 -0
  66. package/src/ringing/index.ts +4 -0
  67. package/src/ringing/reconcileRingState.ts +108 -0
  68. package/src/ringing/resolveOwnRingOutcome.ts +58 -0
  69. package/src/rtc/Publisher.ts +66 -12
  70. package/src/rtc/TransceiverCache.ts +17 -0
  71. package/src/rtc/__tests__/Call.reconnect.test.ts +5 -5
  72. package/src/rtc/__tests__/Publisher.test.ts +209 -0
  73. package/src/rtc/__tests__/mocks/webrtc.mocks.ts +1 -0
  74. package/src/rtc/e2ee/E2EEManager.ts +10 -1
  75. package/src/rtc/e2ee/EncryptionManager.ts +1 -1
  76. package/src/rtc/e2ee/SPEC.md +1 -1
  77. package/src/stats/__tests__/utils.test.ts +33 -0
  78. package/src/stats/utils.ts +15 -0
  79. package/src/store/CallState.ts +305 -550
  80. package/src/store/ClientState.ts +101 -0
  81. package/src/store/__tests__/CallState.test.ts +60 -1
  82. package/src/store/__tests__/ClientState.test.ts +35 -0
  83. package/src/store/__tests__/rxUtils.test.ts +67 -1
  84. package/src/store/index.ts +1 -1
  85. package/src/store/rxUtils.ts +8 -4
  86. package/src/store/subjects.ts +30 -0
  87. package/src/store/types.ts +45 -0
  88. package/src/types.ts +40 -4
  89. package/dist/src/store/stateStore.d.ts +0 -84
  90. package/src/store/stateStore.ts +0 -156
@@ -1,156 +0,0 @@
1
- import { BehaviorSubject, Observable } from 'rxjs';
2
- import type { Patch } from './rxUtils';
3
- import * as RxUtils from './rxUtils';
4
- import { Call } from '../Call';
5
- import { CallingState } from './CallingState';
6
- import type { OwnUserResponse } from '../gen/coordinator';
7
- import { videoLoggerSystem } from '../logger';
8
-
9
- export class StreamVideoWriteableStateStore {
10
- /**
11
- * A store keeping data of a successfully connected user over WS to the coordinator server.
12
- */
13
- connectedUserSubject = new BehaviorSubject<OwnUserResponse | undefined>(
14
- undefined,
15
- );
16
-
17
- /**
18
- * A list of {@link Call} objects created/tracked by this client.
19
- */
20
- callsSubject = new BehaviorSubject<Call[]>([]);
21
-
22
- constructor() {
23
- this.connectedUserSubject.subscribe(async (user) => {
24
- // leave all calls when the user disconnects.
25
- if (!user) {
26
- const logger = videoLoggerSystem.getLogger('client-state');
27
- for (const call of this.calls) {
28
- if (call.state.callingState === CallingState.LEFT) continue;
29
-
30
- logger.info(`User disconnected, leaving call: ${call.cid}`);
31
- await call
32
- .leave({ message: 'client.disconnectUser() called' })
33
- .catch((err) => {
34
- logger.error(`Error leaving call: ${call.cid}`, err);
35
- });
36
- }
37
- }
38
- });
39
- }
40
-
41
- /**
42
- * The currently connected user.
43
- */
44
- get connectedUser(): OwnUserResponse | undefined {
45
- return this.connectedUserSubject.getValue();
46
- }
47
-
48
- /**
49
- * Sets the currently connected user.
50
- *
51
- * @internal
52
- * @param user the user to set as connected.
53
- */
54
- setConnectedUser = (user: Patch<OwnUserResponse | undefined>) => {
55
- return RxUtils.setCurrentValue(this.connectedUserSubject, user);
56
- };
57
-
58
- /**
59
- * A list of {@link Call} objects created/tracked by this client.
60
- */
61
- get calls(): Call[] {
62
- return RxUtils.getCurrentValue(this.callsSubject);
63
- }
64
-
65
- /**
66
- * Sets the list of {@link Call} objects created/tracked by this client.
67
- * @param calls
68
- */
69
- setCalls = (calls: Patch<Call[]>) => {
70
- return RxUtils.setCurrentValue(this.callsSubject, calls);
71
- };
72
-
73
- /**
74
- * Adds a {@link Call} object to the list of {@link Call} objects created/tracked by this client.
75
- *
76
- * @param call the call to add.
77
- */
78
- registerCall = (call: Call) => {
79
- if (!this.calls.find((c) => c.cid === call.cid)) {
80
- this.setCalls((calls) => [...calls, call]);
81
- }
82
- };
83
-
84
- /**
85
- * Registers a {@link Call} object if it doesn't exist, otherwise updates it.
86
- *
87
- * @param call the call to register or update.
88
- */
89
- registerOrUpdateCall = (call: Call) => {
90
- if (this.calls.find((c) => c.cid === call.cid)) {
91
- return this.setCalls((calls) =>
92
- calls.map((c) => (c.cid === call.cid ? call : c)),
93
- );
94
- } else {
95
- return this.registerCall(call);
96
- }
97
- };
98
-
99
- /**
100
- * Removes a {@link Call} object from the list of {@link Call} objects created/tracked by this client.
101
- *
102
- * @param call the call to remove
103
- */
104
- unregisterCall = (call: Call) => {
105
- const logger = videoLoggerSystem.getLogger('client-state');
106
- logger.trace(`Unregistering call: ${call.cid}`);
107
- return this.setCalls((calls) => calls.filter((c) => c !== call));
108
- };
109
-
110
- /**
111
- * Finds a {@link Call} object in the list of {@link Call} objects created/tracked by this client.
112
- *
113
- * @param type the type of call to find.
114
- * @param id the id of the call to find.
115
- */
116
- findCall = (type: string, id: string) => {
117
- return this.calls.find((c) => c.type === type && c.id === id);
118
- };
119
- }
120
-
121
- /**
122
- * A reactive store that exposes state variables in a reactive manner.
123
- * You can subscribe to changes of the different state variables.
124
- * This central store contains all the state variables related to [`StreamVideoClient`](./StreamVideClient.md) and [`Call`](./Call.md).
125
- */
126
- export class StreamVideoReadOnlyStateStore {
127
- /**
128
- * Data describing a user successfully connected over WS to coordinator server.
129
- */
130
- connectedUser$: Observable<OwnUserResponse | undefined>;
131
-
132
- /**
133
- * A list of {@link Call} objects created/tracked by this client.
134
- */
135
- calls$: Observable<Call[]>;
136
-
137
- constructor(store: StreamVideoWriteableStateStore) {
138
- // convert and expose subjects as observables
139
- this.connectedUser$ = store.connectedUserSubject.asObservable();
140
- this.calls$ = store.callsSubject.asObservable();
141
- }
142
-
143
- /**
144
- * The current user connected over WS to the backend.
145
- */
146
- get connectedUser(): OwnUserResponse | undefined {
147
- return RxUtils.getCurrentValue(this.connectedUser$);
148
- }
149
-
150
- /**
151
- * A list of {@link Call} objects created/tracked by this client.
152
- */
153
- get calls(): Call[] {
154
- return RxUtils.getCurrentValue(this.calls$);
155
- }
156
- }