@stream-io/video-client 1.23.4 → 1.24.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [1.24.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-1.23.5...@stream-io/video-client-1.24.0) (2025-06-12)
6
+
7
+ ### Features
8
+
9
+ - moderation support ([#1822](https://github.com/GetStream/stream-video-js/issues/1822)) ([3948fae](https://github.com/GetStream/stream-video-js/commit/3948faeb2fa7ace8dd9c1df990f6e41e73fc0a26))
10
+
11
+ ### Bug Fixes
12
+
13
+ - configurable call stats reporting interval ([#1824](https://github.com/GetStream/stream-video-js/issues/1824)) ([74f72c0](https://github.com/GetStream/stream-video-js/commit/74f72c024d0cb34ae3e0fee4bd8f061fb51e4479))
14
+ - don't compute call stats report if no one subscribed to it ([#1825](https://github.com/GetStream/stream-video-js/issues/1825)) ([fb6a8c9](https://github.com/GetStream/stream-video-js/commit/fb6a8c9e19c80be313d73fadb68810e7f7c1f071))
15
+
16
+ ## [1.23.5](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-1.23.4...@stream-io/video-client-1.23.5) (2025-06-04)
17
+
18
+ ### Bug Fixes
19
+
20
+ - **react-native:** skip browser permission for react native ([#1818](https://github.com/GetStream/stream-video-js/issues/1818)) ([b18f418](https://github.com/GetStream/stream-video-js/commit/b18f418698e12b9804efb43e712ba813b0dbb056))
21
+
5
22
  ## [1.23.4](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-1.23.3...@stream-io/video-client-1.23.4) (2025-06-03)
6
23
 
7
24
  ### Bug Fixes
@@ -172,6 +172,90 @@ const RecordSettingsRequestQualityEnum = {
172
172
  PORTRAIT_1440X2560: 'portrait-1440x2560',
173
173
  PORTRAIT_2160X3840: 'portrait-2160x3840',
174
174
  };
175
+ /**
176
+ * @export
177
+ */
178
+ const StartClosedCaptionsRequestLanguageEnum = {
179
+ AUTO: 'auto',
180
+ EN: 'en',
181
+ FR: 'fr',
182
+ ES: 'es',
183
+ DE: 'de',
184
+ IT: 'it',
185
+ NL: 'nl',
186
+ PT: 'pt',
187
+ PL: 'pl',
188
+ CA: 'ca',
189
+ CS: 'cs',
190
+ DA: 'da',
191
+ EL: 'el',
192
+ FI: 'fi',
193
+ ID: 'id',
194
+ JA: 'ja',
195
+ RU: 'ru',
196
+ SV: 'sv',
197
+ TA: 'ta',
198
+ TH: 'th',
199
+ TR: 'tr',
200
+ HU: 'hu',
201
+ RO: 'ro',
202
+ ZH: 'zh',
203
+ AR: 'ar',
204
+ TL: 'tl',
205
+ HE: 'he',
206
+ HI: 'hi',
207
+ HR: 'hr',
208
+ KO: 'ko',
209
+ MS: 'ms',
210
+ NO: 'no',
211
+ UK: 'uk',
212
+ BG: 'bg',
213
+ ET: 'et',
214
+ SL: 'sl',
215
+ SK: 'sk',
216
+ };
217
+ /**
218
+ * @export
219
+ */
220
+ const StartTranscriptionRequestLanguageEnum = {
221
+ AUTO: 'auto',
222
+ EN: 'en',
223
+ FR: 'fr',
224
+ ES: 'es',
225
+ DE: 'de',
226
+ IT: 'it',
227
+ NL: 'nl',
228
+ PT: 'pt',
229
+ PL: 'pl',
230
+ CA: 'ca',
231
+ CS: 'cs',
232
+ DA: 'da',
233
+ EL: 'el',
234
+ FI: 'fi',
235
+ ID: 'id',
236
+ JA: 'ja',
237
+ RU: 'ru',
238
+ SV: 'sv',
239
+ TA: 'ta',
240
+ TH: 'th',
241
+ TR: 'tr',
242
+ HU: 'hu',
243
+ RO: 'ro',
244
+ ZH: 'zh',
245
+ AR: 'ar',
246
+ TL: 'tl',
247
+ HE: 'he',
248
+ HI: 'hi',
249
+ HR: 'hr',
250
+ KO: 'ko',
251
+ MS: 'ms',
252
+ NO: 'no',
253
+ UK: 'uk',
254
+ BG: 'bg',
255
+ ET: 'et',
256
+ SL: 'sl',
257
+ SK: 'sk',
258
+ };
175
259
  /**
176
260
  * @export
177
261
  */
@@ -217,6 +301,10 @@ const TranscriptionSettingsRequestLanguageEnum = {
217
301
  MS: 'ms',
218
302
  NO: 'no',
219
303
  UK: 'uk',
304
+ BG: 'bg',
305
+ ET: 'et',
306
+ SL: 'sl',
307
+ SK: 'sk',
220
308
  };
221
309
  /**
222
310
  * @export
@@ -271,6 +359,10 @@ const TranscriptionSettingsResponseLanguageEnum = {
271
359
  MS: 'ms',
272
360
  NO: 'no',
273
361
  UK: 'uk',
362
+ BG: 'bg',
363
+ ET: 'et',
364
+ SL: 'sl',
365
+ SK: 'sk',
274
366
  };
275
367
  /**
276
368
  * @export
@@ -5094,11 +5186,14 @@ class CallState {
5094
5186
  this.eventHandlers = {
5095
5187
  // these events are not updating the call state:
5096
5188
  'call.frame_recording_ready': undefined,
5189
+ 'call.moderation_blur': undefined,
5190
+ 'call.moderation_warning': undefined,
5097
5191
  'call.permission_request': undefined,
5098
5192
  'call.recording_ready': undefined,
5099
5193
  'call.rtmp_broadcast_failed': undefined,
5100
5194
  'call.rtmp_broadcast_started': undefined,
5101
5195
  'call.rtmp_broadcast_stopped': undefined,
5196
+ 'call.stats_report_ready': undefined,
5102
5197
  'call.transcription_ready': undefined,
5103
5198
  'call.user_muted': undefined,
5104
5199
  'connection.error': undefined,
@@ -5255,6 +5350,13 @@ class CallState {
5255
5350
  get callStatsReport() {
5256
5351
  return this.getCurrentValue(this.callStatsReport$);
5257
5352
  }
5353
+ /**
5354
+ * Returns whether the call stats report is being observed or not.
5355
+ * @internal
5356
+ */
5357
+ get isCallStatsReportObserved() {
5358
+ return this.callStatsReportSubject.observed;
5359
+ }
5258
5360
  /**
5259
5361
  * The members of the current call.
5260
5362
  */
@@ -5541,9 +5643,13 @@ const createStatsReporter = ({ subscriber, publisher, state, datacenter, polling
5541
5643
  let timeoutId;
5542
5644
  if (pollingIntervalInMs > 0) {
5543
5645
  const loop = async () => {
5544
- await run().catch((e) => {
5545
- logger('debug', 'Failed to collect stats', e);
5546
- });
5646
+ // bail out of the loop as we don't want to collect stats
5647
+ // (they are expensive) if no one is listening to them
5648
+ if (state.isCallStatsReportObserved) {
5649
+ await run().catch((e) => {
5650
+ logger('debug', 'Failed to collect stats', e);
5651
+ });
5652
+ }
5547
5653
  timeoutId = setTimeout(loop, pollingIntervalInMs);
5548
5654
  };
5549
5655
  void loop();
@@ -5685,7 +5791,7 @@ const aggregate = (stats) => {
5685
5791
  return report;
5686
5792
  };
5687
5793
 
5688
- const version = "1.23.4";
5794
+ const version = "1.24.0";
5689
5795
  const [major, minor, patch] = version.split('.');
5690
5796
  let sdkInfo = {
5691
5797
  type: SdkType.PLAIN_JAVASCRIPT,
@@ -9025,7 +9131,12 @@ class BrowserPermission {
9025
9131
  const signal = this.disposeController.signal;
9026
9132
  this.ready = (async () => {
9027
9133
  const assumeGranted = () => {
9028
- this.setState('prompt');
9134
+ if (isReactNative()) {
9135
+ this.setState('granted');
9136
+ }
9137
+ else {
9138
+ this.setState('prompt');
9139
+ }
9029
9140
  };
9030
9141
  if (!canQueryPermissions()) {
9031
9142
  return assumeGranted();
@@ -10908,6 +11019,7 @@ class Call {
10908
11019
  * @private
10909
11020
  */
10910
11021
  this.dispatcher = new Dispatcher();
11022
+ this.statsReportingIntervalInMs = 2000;
10911
11023
  this.sfuClientTag = 0;
10912
11024
  this.reconnectConcurrencyTag = Symbol('reconnectConcurrencyTag');
10913
11025
  this.reconnectAttempts = 0;
@@ -11634,12 +11746,15 @@ class Call {
11634
11746
  });
11635
11747
  }
11636
11748
  this.statsReporter?.stop();
11637
- this.statsReporter = createStatsReporter({
11638
- subscriber: this.subscriber,
11639
- publisher: this.publisher,
11640
- state: this.state,
11641
- datacenter: sfuClient.edgeName,
11642
- });
11749
+ if (this.statsReportingIntervalInMs > 0) {
11750
+ this.statsReporter = createStatsReporter({
11751
+ subscriber: this.subscriber,
11752
+ publisher: this.publisher,
11753
+ state: this.state,
11754
+ datacenter: sfuClient.edgeName,
11755
+ pollingIntervalInMs: this.statsReportingIntervalInMs,
11756
+ });
11757
+ }
11643
11758
  this.tracer.setEnabled(enableTracing);
11644
11759
  this.sfuStatsReporter?.stop();
11645
11760
  if (statsOptions?.reporting_interval_ms > 0) {
@@ -12129,6 +12244,14 @@ class Call {
12129
12244
  this.stopReportingStatsFor = (sessionId) => {
12130
12245
  return this.statsReporter?.stopReportingStatsFor(sessionId);
12131
12246
  };
12247
+ /**
12248
+ * Sets the frequency of the call stats reporting.
12249
+ *
12250
+ * @param intervalInMs the interval in milliseconds to report the stats.
12251
+ */
12252
+ this.setStatsReportingIntervalInMs = (intervalInMs) => {
12253
+ this.statsReportingIntervalInMs = intervalInMs;
12254
+ };
12132
12255
  /**
12133
12256
  * Resets the last sent reaction for the user holding the given `sessionId`. This is a local action, it won't reset the reaction on the backend.
12134
12257
  *
@@ -13894,7 +14017,7 @@ class StreamClient {
13894
14017
  this.getUserAgent = () => {
13895
14018
  if (!this.cachedUserAgent) {
13896
14019
  const { clientAppIdentifier = {} } = this.options;
13897
- const { sdkName = 'js', sdkVersion = "1.23.4", ...extras } = clientAppIdentifier;
14020
+ const { sdkName = 'js', sdkVersion = "1.24.0", ...extras } = clientAppIdentifier;
13898
14021
  this.cachedUserAgent = [
13899
14022
  `stream-video-${sdkName}-v${sdkVersion}`,
13900
14023
  ...Object.entries(extras).map(([key, value]) => `${key}=${value}`),
@@ -14443,5 +14566,5 @@ class StreamVideoClient {
14443
14566
  }
14444
14567
  StreamVideoClient._instances = new Map();
14445
14568
 
14446
- export { AudioSettingsRequestDefaultDeviceEnum, AudioSettingsResponseDefaultDeviceEnum, browsers as Browsers, Call, CallState, CallType, CallTypes, CallingState, CameraManager, CameraManagerState, CreateDeviceRequestPushProviderEnum, DebounceType, DynascaleManager, ErrorFromResponse, FrameRecordingSettingsRequestModeEnum, FrameRecordingSettingsRequestQualityEnum, FrameRecordingSettingsResponseModeEnum, InputMediaDeviceManager, InputMediaDeviceManagerState, LayoutSettingsRequestNameEnum, MicrophoneManager, MicrophoneManagerState, NoiseCancellationSettingsModeEnum, OwnCapability, RTMPBroadcastRequestQualityEnum, RTMPSettingsRequestQualityEnum, RecordSettingsRequestModeEnum, RecordSettingsRequestQualityEnum, rxUtils as RxUtils, ScreenShareManager, ScreenShareState, events as SfuEvents, models as SfuModels, SpeakerManager, SpeakerState, StreamSfuClient, StreamVideoClient, StreamVideoReadOnlyStateStore, StreamVideoWriteableStateStore, TranscriptionSettingsRequestClosedCaptionModeEnum, TranscriptionSettingsRequestLanguageEnum, TranscriptionSettingsRequestModeEnum, TranscriptionSettingsResponseClosedCaptionModeEnum, TranscriptionSettingsResponseLanguageEnum, TranscriptionSettingsResponseModeEnum, VideoSettingsRequestCameraFacingEnum, VideoSettingsResponseCameraFacingEnum, ViewportTracker, VisibilityState, checkIfAudioOutputChangeSupported, combineComparators, conditional, createSoundDetector, defaultSortPreset, descending, deviceIds$, disposeOfMediaStream, dominantSpeaker, getAudioBrowserPermission, getAudioDevices, getAudioOutputDevices, getAudioStream, getClientDetails, getDeviceState, getLogLevel, getLogger, getScreenShareStream, getSdkInfo, getVideoBrowserPermission, getVideoDevices, getVideoStream, getWebRTCInfo, hasAudio, hasScreenShare, hasScreenShareAudio, hasVideo, isPinned, livestreamOrAudioRoomSortPreset, logLevels, logToConsole, name, noopComparator, paginatedLayoutSortPreset, pinned, publishingAudio, publishingVideo, reactionType, role, screenSharing, setDeviceInfo, setLogLevel, setLogger, setOSInfo, setPowerState, setSdkInfo, setThermalState, setWebRTCInfo, speakerLayoutSortPreset, speaking };
14569
+ export { AudioSettingsRequestDefaultDeviceEnum, AudioSettingsResponseDefaultDeviceEnum, browsers as Browsers, Call, CallState, CallType, CallTypes, CallingState, CameraManager, CameraManagerState, CreateDeviceRequestPushProviderEnum, DebounceType, DynascaleManager, ErrorFromResponse, FrameRecordingSettingsRequestModeEnum, FrameRecordingSettingsRequestQualityEnum, FrameRecordingSettingsResponseModeEnum, InputMediaDeviceManager, InputMediaDeviceManagerState, LayoutSettingsRequestNameEnum, MicrophoneManager, MicrophoneManagerState, NoiseCancellationSettingsModeEnum, OwnCapability, RTMPBroadcastRequestQualityEnum, RTMPSettingsRequestQualityEnum, RecordSettingsRequestModeEnum, RecordSettingsRequestQualityEnum, rxUtils as RxUtils, ScreenShareManager, ScreenShareState, events as SfuEvents, models as SfuModels, SpeakerManager, SpeakerState, StartClosedCaptionsRequestLanguageEnum, StartTranscriptionRequestLanguageEnum, StreamSfuClient, StreamVideoClient, StreamVideoReadOnlyStateStore, StreamVideoWriteableStateStore, TranscriptionSettingsRequestClosedCaptionModeEnum, TranscriptionSettingsRequestLanguageEnum, TranscriptionSettingsRequestModeEnum, TranscriptionSettingsResponseClosedCaptionModeEnum, TranscriptionSettingsResponseLanguageEnum, TranscriptionSettingsResponseModeEnum, VideoSettingsRequestCameraFacingEnum, VideoSettingsResponseCameraFacingEnum, ViewportTracker, VisibilityState, checkIfAudioOutputChangeSupported, combineComparators, conditional, createSoundDetector, defaultSortPreset, descending, deviceIds$, disposeOfMediaStream, dominantSpeaker, getAudioBrowserPermission, getAudioDevices, getAudioOutputDevices, getAudioStream, getClientDetails, getDeviceState, getLogLevel, getLogger, getScreenShareStream, getSdkInfo, getVideoBrowserPermission, getVideoDevices, getVideoStream, getWebRTCInfo, hasAudio, hasScreenShare, hasScreenShareAudio, hasVideo, isPinned, livestreamOrAudioRoomSortPreset, logLevels, logToConsole, name, noopComparator, paginatedLayoutSortPreset, pinned, publishingAudio, publishingVideo, reactionType, role, screenSharing, setDeviceInfo, setLogLevel, setLogger, setOSInfo, setPowerState, setSdkInfo, setThermalState, setWebRTCInfo, speakerLayoutSortPreset, speaking };
14447
14570
  //# sourceMappingURL=index.browser.es.js.map