@stream-io/video-client 1.25.0 → 1.25.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [1.25.1](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-1.25.0...@stream-io/video-client-1.25.1) (2025-06-30)
6
+
7
+ ### Bug Fixes
8
+
9
+ - correctly setup and dispose device managers ([#1836](https://github.com/GetStream/stream-video-js/issues/1836)) ([92fbe6c](https://github.com/GetStream/stream-video-js/commit/92fbe6c1da3bf06847244f430652bdc9433533bf))
10
+
5
11
  ## [1.25.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-1.24.0...@stream-io/video-client-1.25.0) (2025-06-20)
6
12
 
7
13
  - upgrade stream deps and improve API error code logging ([#1827](https://github.com/GetStream/stream-video-js/issues/1827)) ([8c30fef](https://github.com/GetStream/stream-video-js/commit/8c30fef80d78055f5adeae02f7347c1c3fe49b72)), closes [#1826](https://github.com/GetStream/stream-video-js/issues/1826)
@@ -5810,7 +5810,7 @@ const aggregate = (stats) => {
5810
5810
  return report;
5811
5811
  };
5812
5812
 
5813
- const version = "1.25.0";
5813
+ const version = "1.25.1";
5814
5814
  const [major, minor, patch] = version.split('.');
5815
5815
  let sdkInfo = {
5816
5816
  type: SdkType.PLAIN_JAVASCRIPT,
@@ -9683,6 +9683,7 @@ class InputMediaDeviceManager {
9683
9683
  */
9684
9684
  this.stopOnLeave = true;
9685
9685
  this.subscriptions = [];
9686
+ this.areSubscriptionsSetUp = false;
9686
9687
  this.isTrackStoppedDueToTrackEnd = false;
9687
9688
  this.filters = [];
9688
9689
  this.statusChangeConcurrencyTag = Symbol('statusChangeConcurrencyTag');
@@ -9694,11 +9695,20 @@ class InputMediaDeviceManager {
9694
9695
  */
9695
9696
  this.dispose = () => {
9696
9697
  this.subscriptions.forEach((s) => s());
9698
+ this.subscriptions = [];
9699
+ this.areSubscriptionsSetUp = false;
9697
9700
  };
9698
9701
  this.call = call;
9699
9702
  this.state = state;
9700
9703
  this.trackType = trackType;
9701
9704
  this.logger = getLogger([`${TrackType[trackType].toLowerCase()} manager`]);
9705
+ this.setup();
9706
+ }
9707
+ setup() {
9708
+ if (this.areSubscriptionsSetUp) {
9709
+ return;
9710
+ }
9711
+ this.areSubscriptionsSetUp = true;
9702
9712
  if (deviceIds$ &&
9703
9713
  !isReactNative() &&
9704
9714
  (this.trackType === TrackType.AUDIO || this.trackType === TrackType.VIDEO)) {
@@ -10659,6 +10669,9 @@ class MicrophoneManager extends InputMediaDeviceManager {
10659
10669
  super(call, new MicrophoneManagerState(disableMode), TrackType.AUDIO);
10660
10670
  this.speakingWhileMutedNotificationEnabled = true;
10661
10671
  this.soundDetectorConcurrencyTag = Symbol('soundDetectorConcurrencyTag');
10672
+ }
10673
+ setup() {
10674
+ super.setup();
10662
10675
  this.subscriptions.push(createSafeAsyncSubscription(combineLatest([
10663
10676
  this.call.state.callingState$,
10664
10677
  this.call.state.ownCapabilities$,
@@ -10936,7 +10949,10 @@ class ScreenShareState extends InputMediaDeviceManagerState {
10936
10949
  class ScreenShareManager extends InputMediaDeviceManager {
10937
10950
  constructor(call) {
10938
10951
  super(call, new ScreenShareState(), TrackType.SCREEN_SHARE);
10939
- this.subscriptions.push(createSubscription(call.state.settings$, (settings) => {
10952
+ }
10953
+ setup() {
10954
+ super.setup();
10955
+ this.subscriptions.push(createSubscription(this.call.state.settings$, (settings) => {
10940
10956
  const maybeTargetResolution = settings?.screensharing.target_resolution;
10941
10957
  if (maybeTargetResolution) {
10942
10958
  this.setDefaultConstraints({
@@ -11059,6 +11075,7 @@ class SpeakerState {
11059
11075
  class SpeakerManager {
11060
11076
  constructor(call) {
11061
11077
  this.subscriptions = [];
11078
+ this.areSubscriptionsSetUp = false;
11062
11079
  /**
11063
11080
  * Disposes the manager.
11064
11081
  *
@@ -11066,9 +11083,18 @@ class SpeakerManager {
11066
11083
  */
11067
11084
  this.dispose = () => {
11068
11085
  this.subscriptions.forEach((s) => s.unsubscribe());
11086
+ this.subscriptions = [];
11087
+ this.areSubscriptionsSetUp = false;
11069
11088
  };
11070
11089
  this.call = call;
11071
11090
  this.state = new SpeakerState(call.tracer);
11091
+ this.setup();
11092
+ }
11093
+ setup() {
11094
+ if (this.areSubscriptionsSetUp) {
11095
+ return;
11096
+ }
11097
+ this.areSubscriptionsSetUp = true;
11072
11098
  if (deviceIds$ && !isReactNative()) {
11073
11099
  this.subscriptions.push(combineLatest([deviceIds$, this.state.selectedDevice$]).subscribe(([devices, deviceId]) => {
11074
11100
  if (!deviceId) {
@@ -11210,6 +11236,10 @@ class Call {
11210
11236
  this.leaveCallHooks.add(registerEventHandlers(this, this.dispatcher));
11211
11237
  this.registerEffects();
11212
11238
  this.registerReconnectHandlers();
11239
+ this.camera.setup();
11240
+ this.microphone.setup();
11241
+ this.screenShare.setup();
11242
+ this.speaker.setup();
11213
11243
  if (this.state.callingState === CallingState.LEFT) {
11214
11244
  this.state.setCallingState(CallingState.IDLE);
11215
11245
  }
@@ -11448,6 +11478,7 @@ class Call {
11448
11478
  this.microphone.dispose();
11449
11479
  this.screenShare.dispose();
11450
11480
  this.speaker.dispose();
11481
+ this.deviceSettingsAppliedOnce = false;
11451
11482
  const stopOnLeavePromises = [];
11452
11483
  if (this.camera.stopOnLeave) {
11453
11484
  stopOnLeavePromises.push(this.camera.disable(true));
@@ -14221,7 +14252,7 @@ class StreamClient {
14221
14252
  this.getUserAgent = () => {
14222
14253
  if (!this.cachedUserAgent) {
14223
14254
  const { clientAppIdentifier = {} } = this.options;
14224
- const { sdkName = 'js', sdkVersion = "1.25.0", ...extras } = clientAppIdentifier;
14255
+ const { sdkName = 'js', sdkVersion = "1.25.1", ...extras } = clientAppIdentifier;
14225
14256
  this.cachedUserAgent = [
14226
14257
  `stream-video-${sdkName}-v${sdkVersion}`,
14227
14258
  ...Object.entries(extras).map(([key, value]) => `${key}=${value}`),