@stream-io/video-client 1.37.0 → 1.37.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.37.1](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-1.37.0...@stream-io/video-client-1.37.1) (2025-11-17)
6
+
7
+ ### Bug Fixes
8
+
9
+ - dynascale manager doesnt pick up updated dimensions all the time ([#2001](https://github.com/GetStream/stream-video-js/issues/2001)) ([d91e008](https://github.com/GetStream/stream-video-js/commit/d91e008f27fa2a4324f22555fbe0a59afe702bbb))
10
+
5
11
  ## [1.37.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-1.36.1...@stream-io/video-client-1.37.0) (2025-11-14)
6
12
 
7
13
  ### Features
@@ -4990,6 +4990,17 @@ class CallState {
4990
4990
  this.setAnonymousParticipantCount = (count) => {
4991
4991
  return this.setCurrentValue(this.anonymousParticipantCountSubject, count);
4992
4992
  };
4993
+ /**
4994
+ * Returns the current participants array directly from the BehaviorSubject.
4995
+ * This bypasses the observable pipeline and is guaranteed to be synchronous.
4996
+ * Use this when you need the absolute latest value without any potential
4997
+ * timing issues from shareReplay/refCount.
4998
+ *
4999
+ * @internal
5000
+ */
5001
+ this.getParticipantsSnapshot = () => {
5002
+ return this.participantsSubject.getValue();
5003
+ };
4993
5004
  /**
4994
5005
  * Sets the list of participants in the current call.
4995
5006
  *
@@ -5969,7 +5980,7 @@ const getSdkVersion = (sdk) => {
5969
5980
  return sdk ? `${sdk.major}.${sdk.minor}.${sdk.patch}` : '0.0.0-development';
5970
5981
  };
5971
5982
 
5972
- const version = "1.37.0";
5983
+ const version = "1.37.1";
5973
5984
  const [major, minor, patch] = version.split('.');
5974
5985
  let sdkInfo = {
5975
5986
  type: SdkType.PLAIN_JAVASCRIPT,
@@ -9446,13 +9457,19 @@ class DynascaleManager {
9446
9457
  }
9447
9458
  get trackSubscriptions() {
9448
9459
  const subscriptions = [];
9449
- for (const p of this.callState.remoteParticipants) {
9460
+ // Use getParticipantsSnapshot() to bypass the observable pipeline
9461
+ // and avoid stale data caused by shareReplay with no active subscribers
9462
+ const participants = this.callState.getParticipantsSnapshot();
9463
+ const videoTrackSubscriptionOverrides = this.videoTrackSubscriptionOverridesSubject.getValue();
9464
+ for (const p of participants) {
9465
+ if (p.isLocalParticipant)
9466
+ continue;
9450
9467
  // NOTE: audio tracks don't have to be requested explicitly
9451
9468
  // as the SFU will implicitly subscribe us to all of them,
9452
9469
  // once they become available.
9453
9470
  if (p.videoDimension && hasVideo(p)) {
9454
- const override = this.videoTrackSubscriptionOverrides[p.sessionId] ??
9455
- this.videoTrackSubscriptionOverrides[globalOverrideKey];
9471
+ const override = videoTrackSubscriptionOverrides[p.sessionId] ??
9472
+ videoTrackSubscriptionOverrides[globalOverrideKey];
9456
9473
  if (override?.enabled !== false) {
9457
9474
  subscriptions.push({
9458
9475
  userId: p.userId,
@@ -14873,7 +14890,7 @@ class StreamClient {
14873
14890
  this.getUserAgent = () => {
14874
14891
  if (!this.cachedUserAgent) {
14875
14892
  const { clientAppIdentifier = {} } = this.options;
14876
- const { sdkName = 'js', sdkVersion = "1.37.0", ...extras } = clientAppIdentifier;
14893
+ const { sdkName = 'js', sdkVersion = "1.37.1", ...extras } = clientAppIdentifier;
14877
14894
  this.cachedUserAgent = [
14878
14895
  `stream-video-${sdkName}-v${sdkVersion}`,
14879
14896
  ...Object.entries(extras).map(([key, value]) => `${key}=${value}`),