@stream-io/video-client 1.37.1 → 1.37.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 +14 -0
- package/dist/index.browser.es.js +36 -8
- package/dist/index.browser.es.js.map +1 -1
- package/dist/index.cjs.js +36 -8
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +36 -8
- package/dist/index.es.js.map +1 -1
- package/package.json +2 -2
- package/src/devices/MicrophoneManager.ts +15 -4
- package/src/devices/__tests__/NoiseCancellationStub.ts +6 -2
- package/src/store/CallState.ts +25 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [1.37.3](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-1.37.2...@stream-io/video-client-1.37.3) (2025-11-25)
|
|
6
|
+
|
|
7
|
+
- instructions for Claude and other coding agents ([#2012](https://github.com/GetStream/stream-video-js/issues/2012)) ([08a3459](https://github.com/GetStream/stream-video-js/commit/08a345954f7cb5b1fae5a4b39b5b585bf1f631ec))
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
- **noise cancellation:** delay toggling until initialization is finished ([#2014](https://github.com/GetStream/stream-video-js/issues/2014)) ([d28b8ea](https://github.com/GetStream/stream-video-js/commit/d28b8ea282322a25688ff48966b0dc10dd7e60bd))
|
|
12
|
+
|
|
13
|
+
## [1.37.2](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-1.37.1...@stream-io/video-client-1.37.2) (2025-11-20)
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- **react-bindings:** getSnapshot caching ([#2008](https://github.com/GetStream/stream-video-js/issues/2008)) ([ed0983c](https://github.com/GetStream/stream-video-js/commit/ed0983cf2d1525a2faaa0b9e9387ac448b35c8e1)), closes [#2006](https://github.com/GetStream/stream-video-js/issues/2006) [#1953](https://github.com/GetStream/stream-video-js/issues/1953)
|
|
18
|
+
|
|
5
19
|
## [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
20
|
|
|
7
21
|
### Bug Fixes
|
package/dist/index.browser.es.js
CHANGED
|
@@ -4867,6 +4867,26 @@ const defaultEgress = {
|
|
|
4867
4867
|
hls: { playlist_url: '', status: '' },
|
|
4868
4868
|
rtmps: [],
|
|
4869
4869
|
};
|
|
4870
|
+
/**
|
|
4871
|
+
* Creates a stable participant filter function, ready to be used in combination
|
|
4872
|
+
* with the `useSyncExternalStore` hook.
|
|
4873
|
+
*
|
|
4874
|
+
* @param predicate the predicate to use.
|
|
4875
|
+
*/
|
|
4876
|
+
const createStableParticipantsFilter = (predicate) => {
|
|
4877
|
+
const empty = [];
|
|
4878
|
+
return (participants) => {
|
|
4879
|
+
// no need to filter if there are no participants
|
|
4880
|
+
if (!participants.length)
|
|
4881
|
+
return participants;
|
|
4882
|
+
// return a stable empty array if there are no remote participants
|
|
4883
|
+
// instead of creating an empty one
|
|
4884
|
+
const filteredParticipants = participants.filter(predicate);
|
|
4885
|
+
if (!filteredParticipants.length)
|
|
4886
|
+
return empty;
|
|
4887
|
+
return filteredParticipants;
|
|
4888
|
+
};
|
|
4889
|
+
};
|
|
4870
4890
|
/**
|
|
4871
4891
|
* Holds the state of the current call.
|
|
4872
4892
|
* @react You don't have to use this class directly, as we are exposing the state through Hooks.
|
|
@@ -5546,8 +5566,8 @@ class CallState {
|
|
|
5546
5566
|
// in the original subject
|
|
5547
5567
|
map((ps) => ps.sort(this.sortParticipantsBy)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
5548
5568
|
this.localParticipant$ = this.participants$.pipe(map((participants) => participants.find((p) => p.isLocalParticipant)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
5549
|
-
this.remoteParticipants$ = this.participants$.pipe(map((
|
|
5550
|
-
this.pinnedParticipants$ = this.participants$.pipe(map((
|
|
5569
|
+
this.remoteParticipants$ = this.participants$.pipe(map(createStableParticipantsFilter((p) => !p.isLocalParticipant)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
5570
|
+
this.pinnedParticipants$ = this.participants$.pipe(map(createStableParticipantsFilter((p) => !!p.pin)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
5551
5571
|
this.dominantSpeaker$ = this.participants$.pipe(map((participants) => participants.find((p) => p.isDominantSpeaker)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
5552
5572
|
this.hasOngoingScreenShare$ = this.participants$.pipe(map((participants) => participants.some((p) => hasScreenShare(p))), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
|
|
5553
5573
|
// dates
|
|
@@ -5980,7 +6000,7 @@ const getSdkVersion = (sdk) => {
|
|
|
5980
6000
|
return sdk ? `${sdk.major}.${sdk.minor}.${sdk.patch}` : '0.0.0-development';
|
|
5981
6001
|
};
|
|
5982
6002
|
|
|
5983
|
-
const version = "1.37.
|
|
6003
|
+
const version = "1.37.3";
|
|
5984
6004
|
const [major, minor, patch] = version.split('.');
|
|
5985
6005
|
let sdkInfo = {
|
|
5986
6006
|
type: SdkType.PLAIN_JAVASCRIPT,
|
|
@@ -11245,7 +11265,9 @@ class MicrophoneManager extends AudioDeviceManager {
|
|
|
11245
11265
|
})
|
|
11246
11266
|
.then((canAutoEnable) => {
|
|
11247
11267
|
if (canAutoEnable) {
|
|
11248
|
-
this.noiseCancellation?.enable()
|
|
11268
|
+
this.noiseCancellation?.enable().catch((err) => {
|
|
11269
|
+
this.logger.warn('Failed to enable noise cancellation', err);
|
|
11270
|
+
});
|
|
11249
11271
|
}
|
|
11250
11272
|
})
|
|
11251
11273
|
.catch((err) => {
|
|
@@ -11315,7 +11337,9 @@ class MicrophoneManager extends AudioDeviceManager {
|
|
|
11315
11337
|
canAutoEnable = await noiseCancellation.canAutoEnable();
|
|
11316
11338
|
}
|
|
11317
11339
|
if (canAutoEnable) {
|
|
11318
|
-
noiseCancellation.enable()
|
|
11340
|
+
noiseCancellation.enable().catch((err) => {
|
|
11341
|
+
this.logger.warn('Failed to enable noise cancellation', err);
|
|
11342
|
+
});
|
|
11319
11343
|
}
|
|
11320
11344
|
}
|
|
11321
11345
|
}
|
|
@@ -11395,10 +11419,14 @@ class MicrophoneManager extends AudioDeviceManager {
|
|
|
11395
11419
|
if (this.noiseCancellation) {
|
|
11396
11420
|
const disableAudioProcessing = profile === AudioBitrateProfile.MUSIC_HIGH_QUALITY;
|
|
11397
11421
|
if (disableAudioProcessing) {
|
|
11398
|
-
this.noiseCancellation.disable()
|
|
11422
|
+
this.noiseCancellation.disable().catch((err) => {
|
|
11423
|
+
this.logger.warn('Failed to disable noise cancellation for music mode', err);
|
|
11424
|
+
}); // disable for high quality music mode
|
|
11399
11425
|
}
|
|
11400
11426
|
else {
|
|
11401
|
-
this.noiseCancellation.enable()
|
|
11427
|
+
this.noiseCancellation.enable().catch((err) => {
|
|
11428
|
+
this.logger.warn('Failed to enable noise cancellation', err);
|
|
11429
|
+
}); // restore it for other modes if available
|
|
11402
11430
|
}
|
|
11403
11431
|
}
|
|
11404
11432
|
}
|
|
@@ -14890,7 +14918,7 @@ class StreamClient {
|
|
|
14890
14918
|
this.getUserAgent = () => {
|
|
14891
14919
|
if (!this.cachedUserAgent) {
|
|
14892
14920
|
const { clientAppIdentifier = {} } = this.options;
|
|
14893
|
-
const { sdkName = 'js', sdkVersion = "1.37.
|
|
14921
|
+
const { sdkName = 'js', sdkVersion = "1.37.3", ...extras } = clientAppIdentifier;
|
|
14894
14922
|
this.cachedUserAgent = [
|
|
14895
14923
|
`stream-video-${sdkName}-v${sdkVersion}`,
|
|
14896
14924
|
...Object.entries(extras).map(([key, value]) => `${key}=${value}`),
|