@stream-io/video-client 1.44.2 → 1.44.3

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.44.3](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-1.44.2...@stream-io/video-client-1.44.3) (2026-03-06)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **client:** prevent concurrent SFU updateSubscriptions during reconnects ([#2155](https://github.com/GetStream/stream-video-js/issues/2155)) ([1ac32d2](https://github.com/GetStream/stream-video-js/commit/1ac32d261c9a54aa8e3636a60e3c8f3e1407ae16))
10
+
5
11
  ## [1.44.2](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-1.44.1...@stream-io/video-client-1.44.2) (2026-03-06)
6
12
 
7
13
  ### Bug Fixes
@@ -4005,6 +4005,8 @@ const retryable = async (rpc, signal, maxRetries = Number.POSITIVE_INFINITY) =>
4005
4005
  do {
4006
4006
  if (attempt > 0)
4007
4007
  await sleep(retryInterval(attempt));
4008
+ if (signal?.aborted)
4009
+ throw new Error(signal.reason);
4008
4010
  try {
4009
4011
  result = await rpc({ attempt });
4010
4012
  }
@@ -6281,7 +6283,7 @@ const getSdkVersion = (sdk) => {
6281
6283
  return sdk ? `${sdk.major}.${sdk.minor}.${sdk.patch}` : '0.0.0-development';
6282
6284
  };
6283
6285
 
6284
- const version = "1.44.2";
6286
+ const version = "1.44.3";
6285
6287
  const [major, minor, patch] = version.split('.');
6286
6288
  let sdkInfo = {
6287
6289
  type: SdkType.PLAIN_JAVASCRIPT,
@@ -8582,6 +8584,7 @@ class StreamSfuClient {
8582
8584
  this.isClosingClean = false;
8583
8585
  this.pingIntervalInMs = 5 * 1000;
8584
8586
  this.unhealthyTimeoutInMs = 15 * 1000;
8587
+ this.subscriptionsConcurrencyTag = Symbol('subscriptionsConcurrencyTag');
8585
8588
  /**
8586
8589
  * Promise that resolves when the JoinResponse is received.
8587
8590
  * Rejects after a certain threshold if the response is not received.
@@ -8689,8 +8692,10 @@ class StreamSfuClient {
8689
8692
  this.close(StreamSfuClient.NORMAL_CLOSURE, reason.substring(0, 115));
8690
8693
  };
8691
8694
  this.updateSubscriptions = async (tracks) => {
8692
- await this.joinTask;
8693
- return retryable((invocationMeta) => this.rpc.updateSubscriptions({ sessionId: this.sessionId, tracks }, { invocationMeta }), this.abortController.signal);
8695
+ return withoutConcurrency(this.subscriptionsConcurrencyTag, async () => {
8696
+ await this.joinTask;
8697
+ return retryable((invocationMeta) => this.rpc.updateSubscriptions({ sessionId: this.sessionId, tracks }, { invocationMeta }), this.abortController.signal);
8698
+ });
8694
8699
  };
8695
8700
  this.setPublisher = async (data) => {
8696
8701
  await this.joinTask;
@@ -15885,7 +15890,7 @@ class StreamClient {
15885
15890
  this.getUserAgent = () => {
15886
15891
  if (!this.cachedUserAgent) {
15887
15892
  const { clientAppIdentifier = {} } = this.options;
15888
- const { sdkName = 'js', sdkVersion = "1.44.2", ...extras } = clientAppIdentifier;
15893
+ const { sdkName = 'js', sdkVersion = "1.44.3", ...extras } = clientAppIdentifier;
15889
15894
  this.cachedUserAgent = [
15890
15895
  `stream-video-${sdkName}-v${sdkVersion}`,
15891
15896
  ...Object.entries(extras).map(([key, value]) => `${key}=${value}`),