@stream-io/video-client 1.40.2 → 1.41.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 +18 -0
- package/dist/index.browser.es.js +165 -30
- package/dist/index.browser.es.js.map +1 -1
- package/dist/index.cjs.js +172 -29
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +165 -30
- package/dist/index.es.js.map +1 -1
- package/dist/src/Call.d.ts +4 -4
- package/dist/src/devices/SpeakerManager.d.ts +0 -2
- package/dist/src/gen/coordinator/index.d.ts +269 -0
- package/dist/src/rtc/helpers/sdp.d.ts +8 -0
- package/dist/src/store/CallState.d.ts +21 -2
- package/dist/src/types.d.ts +29 -1
- package/package.json +1 -1
- package/src/Call.ts +27 -6
- package/src/__tests__/StreamVideoClient.ringing.test.ts +26 -0
- package/src/devices/SpeakerManager.ts +0 -2
- package/src/devices/__tests__/MicrophoneManager.test.ts +34 -23
- package/src/devices/__tests__/mocks.ts +14 -12
- package/src/events/__tests__/call.test.ts +4 -5
- package/src/gen/coordinator/index.ts +293 -0
- package/src/rtc/Publisher.ts +1 -1
- package/src/rtc/helpers/__tests__/sdp.startBitrate.test.ts +105 -0
- package/src/rtc/helpers/sdp.ts +30 -12
- package/src/store/CallState.ts +72 -9
- package/src/store/__tests__/CallState.test.ts +462 -106
- package/src/types.ts +42 -0
package/dist/index.es.js
CHANGED
|
@@ -27,6 +27,38 @@ const AudioSettingsResponseDefaultDeviceEnum = {
|
|
|
27
27
|
SPEAKER: 'speaker',
|
|
28
28
|
EARPIECE: 'earpiece',
|
|
29
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* @export
|
|
32
|
+
*/
|
|
33
|
+
const CallRecordingFailedEventRecordingTypeEnum = {
|
|
34
|
+
COMPOSITE: 'composite',
|
|
35
|
+
INDIVIDUAL: 'individual',
|
|
36
|
+
RAW: 'raw',
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* @export
|
|
40
|
+
*/
|
|
41
|
+
const CallRecordingReadyEventRecordingTypeEnum = {
|
|
42
|
+
COMPOSITE: 'composite',
|
|
43
|
+
INDIVIDUAL: 'individual',
|
|
44
|
+
RAW: 'raw',
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* @export
|
|
48
|
+
*/
|
|
49
|
+
const CallRecordingStartedEventRecordingTypeEnum = {
|
|
50
|
+
COMPOSITE: 'composite',
|
|
51
|
+
INDIVIDUAL: 'individual',
|
|
52
|
+
RAW: 'raw',
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* @export
|
|
56
|
+
*/
|
|
57
|
+
const CallRecordingStoppedEventRecordingTypeEnum = {
|
|
58
|
+
COMPOSITE: 'composite',
|
|
59
|
+
INDIVIDUAL: 'individual',
|
|
60
|
+
RAW: 'raw',
|
|
61
|
+
};
|
|
30
62
|
/**
|
|
31
63
|
* @export
|
|
32
64
|
*/
|
|
@@ -62,6 +94,22 @@ const FrameRecordingSettingsResponseModeEnum = {
|
|
|
62
94
|
DISABLED: 'disabled',
|
|
63
95
|
AUTO_ON: 'auto-on',
|
|
64
96
|
};
|
|
97
|
+
/**
|
|
98
|
+
* @export
|
|
99
|
+
*/
|
|
100
|
+
const IndividualRecordingSettingsRequestModeEnum = {
|
|
101
|
+
AVAILABLE: 'available',
|
|
102
|
+
DISABLED: 'disabled',
|
|
103
|
+
AUTO_ON: 'auto-on',
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* @export
|
|
107
|
+
*/
|
|
108
|
+
const IndividualRecordingSettingsResponseModeEnum = {
|
|
109
|
+
AVAILABLE: 'available',
|
|
110
|
+
DISABLED: 'disabled',
|
|
111
|
+
AUTO_ON: 'auto-on',
|
|
112
|
+
};
|
|
65
113
|
/**
|
|
66
114
|
* @export
|
|
67
115
|
*/
|
|
@@ -127,11 +175,15 @@ const OwnCapability = {
|
|
|
127
175
|
START_BROADCAST_CALL: 'start-broadcast-call',
|
|
128
176
|
START_CLOSED_CAPTIONS_CALL: 'start-closed-captions-call',
|
|
129
177
|
START_FRAME_RECORD_CALL: 'start-frame-record-call',
|
|
178
|
+
START_INDIVIDUAL_RECORD_CALL: 'start-individual-record-call',
|
|
179
|
+
START_RAW_RECORD_CALL: 'start-raw-record-call',
|
|
130
180
|
START_RECORD_CALL: 'start-record-call',
|
|
131
181
|
START_TRANSCRIPTION_CALL: 'start-transcription-call',
|
|
132
182
|
STOP_BROADCAST_CALL: 'stop-broadcast-call',
|
|
133
183
|
STOP_CLOSED_CAPTIONS_CALL: 'stop-closed-captions-call',
|
|
134
184
|
STOP_FRAME_RECORD_CALL: 'stop-frame-record-call',
|
|
185
|
+
STOP_INDIVIDUAL_RECORD_CALL: 'stop-individual-record-call',
|
|
186
|
+
STOP_RAW_RECORD_CALL: 'stop-raw-record-call',
|
|
135
187
|
STOP_RECORD_CALL: 'stop-record-call',
|
|
136
188
|
STOP_TRANSCRIPTION_CALL: 'stop-transcription-call',
|
|
137
189
|
UPDATE_CALL: 'update-call',
|
|
@@ -169,6 +221,22 @@ const RTMPSettingsRequestQualityEnum = {
|
|
|
169
221
|
PORTRAIT_1080X1920: 'portrait-1080x1920',
|
|
170
222
|
PORTRAIT_1440X2560: 'portrait-1440x2560',
|
|
171
223
|
};
|
|
224
|
+
/**
|
|
225
|
+
* @export
|
|
226
|
+
*/
|
|
227
|
+
const RawRecordingSettingsRequestModeEnum = {
|
|
228
|
+
AVAILABLE: 'available',
|
|
229
|
+
DISABLED: 'disabled',
|
|
230
|
+
AUTO_ON: 'auto-on',
|
|
231
|
+
};
|
|
232
|
+
/**
|
|
233
|
+
* @export
|
|
234
|
+
*/
|
|
235
|
+
const RawRecordingSettingsResponseModeEnum = {
|
|
236
|
+
AVAILABLE: 'available',
|
|
237
|
+
DISABLED: 'disabled',
|
|
238
|
+
AUTO_ON: 'auto-on',
|
|
239
|
+
};
|
|
172
240
|
/**
|
|
173
241
|
* @export
|
|
174
242
|
*/
|
|
@@ -3984,15 +4052,18 @@ const extractMid = (transceiver, transceiverInitIndex, sdp) => {
|
|
|
3984
4052
|
return '';
|
|
3985
4053
|
return String(transceiverInitIndex);
|
|
3986
4054
|
};
|
|
3987
|
-
|
|
3988
|
-
* Sets the start bitrate for the VP9 and
|
|
4055
|
+
/**
|
|
4056
|
+
* Sets the start bitrate for the VP9, H264, and AV1 codecs in the SDP.
|
|
3989
4057
|
*
|
|
3990
4058
|
* @param offerSdp the offer SDP to modify.
|
|
3991
|
-
* @param
|
|
4059
|
+
* @param maxBitrateKbps the maximum bitrate in kbps.
|
|
4060
|
+
* @param startBitrateFactor the factor (0-1) to multiply with maxBitrateKbps to get the start bitrate.
|
|
4061
|
+
* @param targetMid the media ID to target.
|
|
3992
4062
|
*/
|
|
3993
4063
|
const setStartBitrate = (offerSdp, maxBitrateKbps, startBitrateFactor, targetMid) => {
|
|
3994
4064
|
// start bitrate should be between 300kbps and max-bitrate-kbps
|
|
3995
|
-
|
|
4065
|
+
// Clamp to max first, then ensure minimum of 300 (but never exceed max)
|
|
4066
|
+
const startBitrate = Math.min(maxBitrateKbps, Math.max(300, startBitrateFactor * maxBitrateKbps));
|
|
3996
4067
|
const parsedSdp = parse(offerSdp);
|
|
3997
4068
|
const targetCodecs = new Set(['av1', 'vp9', 'h264']);
|
|
3998
4069
|
for (const media of parsedSdp.media) {
|
|
@@ -4003,14 +4074,27 @@ const setStartBitrate = (offerSdp, maxBitrateKbps, startBitrateFactor, targetMid
|
|
|
4003
4074
|
for (const rtp of media.rtp) {
|
|
4004
4075
|
if (!targetCodecs.has(rtp.codec.toLowerCase()))
|
|
4005
4076
|
continue;
|
|
4006
|
-
|
|
4007
|
-
|
|
4008
|
-
|
|
4009
|
-
|
|
4010
|
-
|
|
4011
|
-
|
|
4077
|
+
// Find existing fmtp entry for this payload
|
|
4078
|
+
// Guard against media.fmtp being undefined when SDP has no a=fmtp lines
|
|
4079
|
+
const fmtpList = media.fmtp ?? (media.fmtp = []);
|
|
4080
|
+
const existingFmtp = fmtpList.find((fmtp) => fmtp.payload === rtp.payload);
|
|
4081
|
+
if (existingFmtp) {
|
|
4082
|
+
// Append to existing fmtp if not already present
|
|
4083
|
+
// Guard against undefined or empty config from malformed SDP
|
|
4084
|
+
const config = existingFmtp.config ?? '';
|
|
4085
|
+
if (!config.includes('x-google-start-bitrate')) {
|
|
4086
|
+
existingFmtp.config = config
|
|
4087
|
+
? `${config};x-google-start-bitrate=${startBitrate}`
|
|
4088
|
+
: `x-google-start-bitrate=${startBitrate}`;
|
|
4012
4089
|
}
|
|
4013
4090
|
}
|
|
4091
|
+
else {
|
|
4092
|
+
// Create new fmtp entry if none exists
|
|
4093
|
+
fmtpList.push({
|
|
4094
|
+
payload: rtp.payload,
|
|
4095
|
+
config: `x-google-start-bitrate=${startBitrate}`,
|
|
4096
|
+
});
|
|
4097
|
+
}
|
|
4014
4098
|
}
|
|
4015
4099
|
}
|
|
4016
4100
|
return write(parsedSdp);
|
|
@@ -4940,6 +5024,10 @@ const paginatedLayoutSortPreset = combineComparators(pinned, ifInvisibleOrUnknow
|
|
|
4940
5024
|
*/
|
|
4941
5025
|
const livestreamOrAudioRoomSortPreset = combineComparators(ifInvisibleBy(combineComparators(dominantSpeaker, speaking, reactionType('raised-hand'), withVideoIngressSource, publishingVideo, publishingAudio)), role('admin', 'host', 'speaker'));
|
|
4942
5026
|
|
|
5027
|
+
const ensureExhausted = (x, message) => {
|
|
5028
|
+
videoLoggerSystem.getLogger('helpers').warn(message, x);
|
|
5029
|
+
};
|
|
5030
|
+
|
|
4943
5031
|
/**
|
|
4944
5032
|
* Returns the default egress object - when no egress data is available.
|
|
4945
5033
|
*/
|
|
@@ -4969,6 +5057,8 @@ class CallState {
|
|
|
4969
5057
|
this.egressSubject = new BehaviorSubject(undefined);
|
|
4970
5058
|
this.ingressSubject = new BehaviorSubject(undefined);
|
|
4971
5059
|
this.recordingSubject = new BehaviorSubject(false);
|
|
5060
|
+
this.individualRecordingSubject = new BehaviorSubject(false);
|
|
5061
|
+
this.rawRecordingSubject = new BehaviorSubject(false);
|
|
4972
5062
|
this.sessionSubject = new BehaviorSubject(undefined);
|
|
4973
5063
|
this.settingsSubject = new BehaviorSubject(undefined);
|
|
4974
5064
|
this.transcribingSubject = new BehaviorSubject(false);
|
|
@@ -5395,7 +5485,10 @@ class CallState {
|
|
|
5395
5485
|
this.setCurrentValue(this.customSubject, call.custom);
|
|
5396
5486
|
this.setCurrentValue(this.egressSubject, call.egress);
|
|
5397
5487
|
this.setCurrentValue(this.ingressSubject, call.ingress);
|
|
5398
|
-
|
|
5488
|
+
const { individual_recording, composite_recording, raw_recording } = call.egress;
|
|
5489
|
+
this.setCurrentValue(this.recordingSubject, call.recording || composite_recording?.status === 'running');
|
|
5490
|
+
this.setCurrentValue(this.individualRecordingSubject, individual_recording?.status === 'running');
|
|
5491
|
+
this.setCurrentValue(this.rawRecordingSubject, raw_recording?.status === 'running');
|
|
5399
5492
|
const s = this.setCurrentValue(this.sessionSubject, call.session);
|
|
5400
5493
|
this.updateParticipantCountFromSession(s);
|
|
5401
5494
|
this.setCurrentValue(this.settingsSubject, call.settings);
|
|
@@ -5471,6 +5564,21 @@ class CallState {
|
|
|
5471
5564
|
},
|
|
5472
5565
|
}));
|
|
5473
5566
|
};
|
|
5567
|
+
this.updateFromRecordingEvent = (type, running) => {
|
|
5568
|
+
// handle the legacy format, where `type` is absent in the emitted events
|
|
5569
|
+
if (type === undefined || type === 'composite') {
|
|
5570
|
+
this.setCurrentValue(this.recordingSubject, running);
|
|
5571
|
+
}
|
|
5572
|
+
else if (type === 'individual') {
|
|
5573
|
+
this.setCurrentValue(this.individualRecordingSubject, running);
|
|
5574
|
+
}
|
|
5575
|
+
else if (type === 'raw') {
|
|
5576
|
+
this.setCurrentValue(this.rawRecordingSubject, running);
|
|
5577
|
+
}
|
|
5578
|
+
else {
|
|
5579
|
+
ensureExhausted(type, 'Unknown recording type');
|
|
5580
|
+
}
|
|
5581
|
+
};
|
|
5474
5582
|
this.updateParticipantCountFromSession = (session) => {
|
|
5475
5583
|
// when in JOINED state, we should use the participant count coming through
|
|
5476
5584
|
// the SFU healthcheck event, as it's more accurate.
|
|
@@ -5705,6 +5813,8 @@ class CallState {
|
|
|
5705
5813
|
}), distinctUntilChanged(isShallowEqual), shareReplay({ bufferSize: 1, refCount: true }));
|
|
5706
5814
|
this.participantCount$ = duc(this.participantCountSubject);
|
|
5707
5815
|
this.recording$ = duc(this.recordingSubject);
|
|
5816
|
+
this.individualRecording$ = duc(this.individualRecordingSubject);
|
|
5817
|
+
this.rawRecording$ = duc(this.rawRecordingSubject);
|
|
5708
5818
|
this.transcribing$ = duc(this.transcribingSubject);
|
|
5709
5819
|
this.captioning$ = duc(this.captioningSubject);
|
|
5710
5820
|
this.eventHandlers = {
|
|
@@ -5771,9 +5881,15 @@ class CallState {
|
|
|
5771
5881
|
},
|
|
5772
5882
|
'call.permissions_updated': this.updateOwnCapabilities,
|
|
5773
5883
|
'call.reaction_new': this.updateParticipantReaction,
|
|
5774
|
-
'call.recording_started': () =>
|
|
5775
|
-
|
|
5776
|
-
|
|
5884
|
+
'call.recording_started': (e) => {
|
|
5885
|
+
this.updateFromRecordingEvent(e.recording_type, true);
|
|
5886
|
+
},
|
|
5887
|
+
'call.recording_stopped': (e) => {
|
|
5888
|
+
this.updateFromRecordingEvent(e.recording_type, false);
|
|
5889
|
+
},
|
|
5890
|
+
'call.recording_failed': (e) => {
|
|
5891
|
+
this.updateFromRecordingEvent(e.recording_type, false);
|
|
5892
|
+
},
|
|
5777
5893
|
'call.rejected': (e) => this.updateFromCallResponse(e.call),
|
|
5778
5894
|
'call.ring': (e) => this.updateFromCallResponse(e.call),
|
|
5779
5895
|
'call.missed': (e) => this.updateFromCallResponse(e.call),
|
|
@@ -5956,11 +6072,23 @@ class CallState {
|
|
|
5956
6072
|
return this.getCurrentValue(this.ingress$);
|
|
5957
6073
|
}
|
|
5958
6074
|
/**
|
|
5959
|
-
* Will provide the recording state of this call.
|
|
6075
|
+
* Will provide the composite recording state of this call.
|
|
5960
6076
|
*/
|
|
5961
6077
|
get recording() {
|
|
5962
6078
|
return this.getCurrentValue(this.recording$);
|
|
5963
6079
|
}
|
|
6080
|
+
/**
|
|
6081
|
+
* Will provide the individual recording state of this call.
|
|
6082
|
+
*/
|
|
6083
|
+
get individualRecording() {
|
|
6084
|
+
return this.getCurrentValue(this.individualRecording$);
|
|
6085
|
+
}
|
|
6086
|
+
/**
|
|
6087
|
+
* Will provide the raw recording state of this call.
|
|
6088
|
+
*/
|
|
6089
|
+
get rawRecording() {
|
|
6090
|
+
return this.getCurrentValue(this.rawRecording$);
|
|
6091
|
+
}
|
|
5964
6092
|
/**
|
|
5965
6093
|
* Will provide the session data of this call.
|
|
5966
6094
|
*/
|
|
@@ -6061,7 +6189,7 @@ const getSdkVersion = (sdk) => {
|
|
|
6061
6189
|
return sdk ? `${sdk.major}.${sdk.minor}.${sdk.patch}` : '0.0.0-development';
|
|
6062
6190
|
};
|
|
6063
6191
|
|
|
6064
|
-
const version = "1.
|
|
6192
|
+
const version = "1.41.0";
|
|
6065
6193
|
const [major, minor, patch] = version.split('.');
|
|
6066
6194
|
let sdkInfo = {
|
|
6067
6195
|
type: SdkType.PLAIN_JAVASCRIPT,
|
|
@@ -7409,10 +7537,6 @@ class TransceiverCache {
|
|
|
7409
7537
|
}
|
|
7410
7538
|
}
|
|
7411
7539
|
|
|
7412
|
-
const ensureExhausted = (x, message) => {
|
|
7413
|
-
videoLoggerSystem.getLogger('helpers').warn(message, x);
|
|
7414
|
-
};
|
|
7415
|
-
|
|
7416
7540
|
const trackTypeToParticipantStreamKey = (trackType) => {
|
|
7417
7541
|
switch (trackType) {
|
|
7418
7542
|
case TrackType.SCREEN_SHARE:
|
|
@@ -7893,7 +8017,7 @@ class Publisher extends BasePeerConnection {
|
|
|
7893
8017
|
let sdp = dangerouslyForceCodec
|
|
7894
8018
|
? removeCodecsExcept(baseSdp, dangerouslyForceCodec, fmtpLine)
|
|
7895
8019
|
: baseSdp;
|
|
7896
|
-
if (dangerouslySetStartBitrateFactor) {
|
|
8020
|
+
if (dangerouslySetStartBitrateFactor !== undefined) {
|
|
7897
8021
|
this.transceiverCache.items().forEach((t) => {
|
|
7898
8022
|
if (t.publishOption.trackType !== TrackType.VIDEO)
|
|
7899
8023
|
return;
|
|
@@ -11931,8 +12055,6 @@ class SpeakerManager {
|
|
|
11931
12055
|
/**
|
|
11932
12056
|
* Set the volume of a participant.
|
|
11933
12057
|
*
|
|
11934
|
-
* Note: This method is not supported in React Native.
|
|
11935
|
-
*
|
|
11936
12058
|
* @param sessionId the participant's session id.
|
|
11937
12059
|
* @param volume a number between 0 and 1. Set it to `undefined` to use the default volume.
|
|
11938
12060
|
*/
|
|
@@ -12275,6 +12397,7 @@ class Call {
|
|
|
12275
12397
|
this.ringingSubject.next(false);
|
|
12276
12398
|
this.cancelAutoDrop();
|
|
12277
12399
|
this.clientStore.unregisterCall(this);
|
|
12400
|
+
globalThis.streamRNVideoSDK?.callManager.stop();
|
|
12278
12401
|
this.camera.dispose();
|
|
12279
12402
|
this.microphone.dispose();
|
|
12280
12403
|
this.screenShare.dispose();
|
|
@@ -12607,6 +12730,7 @@ class Call {
|
|
|
12607
12730
|
// re-apply them on later reconnections or server-side data fetches
|
|
12608
12731
|
if (!this.deviceSettingsAppliedOnce && this.state.settings) {
|
|
12609
12732
|
await this.applyDeviceConfig(this.state.settings, true);
|
|
12733
|
+
globalThis.streamRNVideoSDK?.callManager.start();
|
|
12610
12734
|
this.deviceSettingsAppliedOnce = true;
|
|
12611
12735
|
}
|
|
12612
12736
|
// We shouldn't persist the `ring` and `notify` state after joining the call
|
|
@@ -12798,7 +12922,7 @@ class Call {
|
|
|
12798
12922
|
}
|
|
12799
12923
|
if (this.streamClient._hasConnectionID()) {
|
|
12800
12924
|
this.watching = true;
|
|
12801
|
-
this.clientStore.
|
|
12925
|
+
this.clientStore.registerOrUpdateCall(this);
|
|
12802
12926
|
}
|
|
12803
12927
|
return joinResponse;
|
|
12804
12928
|
};
|
|
@@ -13398,14 +13522,22 @@ class Call {
|
|
|
13398
13522
|
/**
|
|
13399
13523
|
* Starts recording the call
|
|
13400
13524
|
*/
|
|
13401
|
-
this.startRecording = async (
|
|
13402
|
-
|
|
13525
|
+
this.startRecording = async (dataOrType, type) => {
|
|
13526
|
+
type = typeof dataOrType === 'string' ? dataOrType : type;
|
|
13527
|
+
dataOrType = typeof dataOrType === 'string' ? undefined : dataOrType;
|
|
13528
|
+
const endpoint = !type
|
|
13529
|
+
? `/start_recording`
|
|
13530
|
+
: `/recordings/${encodeURIComponent(type)}/start`;
|
|
13531
|
+
return this.streamClient.post(`${this.streamClientBasePath}${endpoint}`, dataOrType);
|
|
13403
13532
|
};
|
|
13404
13533
|
/**
|
|
13405
13534
|
* Stops recording the call
|
|
13406
13535
|
*/
|
|
13407
|
-
this.stopRecording = async () => {
|
|
13408
|
-
|
|
13536
|
+
this.stopRecording = async (type) => {
|
|
13537
|
+
const endpoint = !type
|
|
13538
|
+
? `/stop_recording`
|
|
13539
|
+
: `/recordings/${encodeURIComponent(type)}/stop`;
|
|
13540
|
+
return this.streamClient.post(`${this.streamClientBasePath}${endpoint}`);
|
|
13409
13541
|
};
|
|
13410
13542
|
/**
|
|
13411
13543
|
* Starts the transcription of the call.
|
|
@@ -13802,6 +13934,9 @@ class Call {
|
|
|
13802
13934
|
* @internal
|
|
13803
13935
|
*/
|
|
13804
13936
|
this.applyDeviceConfig = async (settings, publish) => {
|
|
13937
|
+
globalThis.streamRNVideoSDK?.callManager.setup({
|
|
13938
|
+
default_device: settings.audio.default_device,
|
|
13939
|
+
});
|
|
13805
13940
|
await this.camera.apply(settings.video, publish).catch((err) => {
|
|
13806
13941
|
this.logger.warn('Camera init failed', err);
|
|
13807
13942
|
});
|
|
@@ -15113,7 +15248,7 @@ class StreamClient {
|
|
|
15113
15248
|
this.getUserAgent = () => {
|
|
15114
15249
|
if (!this.cachedUserAgent) {
|
|
15115
15250
|
const { clientAppIdentifier = {} } = this.options;
|
|
15116
|
-
const { sdkName = 'js', sdkVersion = "1.
|
|
15251
|
+
const { sdkName = 'js', sdkVersion = "1.41.0", ...extras } = clientAppIdentifier;
|
|
15117
15252
|
this.cachedUserAgent = [
|
|
15118
15253
|
`stream-video-${sdkName}-v${sdkVersion}`,
|
|
15119
15254
|
...Object.entries(extras).map(([key, value]) => `${key}=${value}`),
|
|
@@ -15749,5 +15884,5 @@ const humanize = (n) => {
|
|
|
15749
15884
|
return String(n);
|
|
15750
15885
|
};
|
|
15751
15886
|
|
|
15752
|
-
export { AudioSettingsRequestDefaultDeviceEnum, AudioSettingsResponseDefaultDeviceEnum, browsers as Browsers, Call, CallState, CallType, CallTypes, CallingState, CameraManager, CameraManagerState, CreateDeviceRequestPushProviderEnum, DebounceType, DeviceManager, DeviceManagerState, DynascaleManager, ErrorFromResponse, FrameRecordingSettingsRequestModeEnum, FrameRecordingSettingsRequestQualityEnum, FrameRecordingSettingsResponseModeEnum, IngressAudioEncodingOptionsRequestChannelsEnum, IngressSourceRequestFpsEnum, IngressVideoLayerRequestCodecEnum, LayoutSettingsRequestNameEnum, MicrophoneManager, MicrophoneManagerState, NoiseCancellationSettingsModeEnum, OwnCapability, RNSpeechDetector, RTMPBroadcastRequestQualityEnum, RTMPSettingsRequestQualityEnum, RecordSettingsRequestModeEnum, RecordSettingsRequestQualityEnum, rxUtils as RxUtils, ScreenShareManager, ScreenShareState, events as SfuEvents, SfuJoinError, 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, getScreenShareStream, getSdkInfo, getVideoBrowserPermission, getVideoDevices, getVideoStream, getWebRTCInfo, hasAudio, hasPausedTrack, hasScreenShare, hasScreenShareAudio, hasVideo, humanize, isPinned, livestreamOrAudioRoomSortPreset, logToConsole, name, noopComparator, paginatedLayoutSortPreset, pinned, publishingAudio, publishingVideo, reactionType, resolveDeviceId, role, screenSharing, setDeviceInfo, setOSInfo, setPowerState, setSdkInfo, setThermalState, setWebRTCInfo, speakerLayoutSortPreset, speaking, videoLoggerSystem, withParticipantSource };
|
|
15887
|
+
export { AudioSettingsRequestDefaultDeviceEnum, AudioSettingsResponseDefaultDeviceEnum, browsers as Browsers, Call, CallRecordingFailedEventRecordingTypeEnum, CallRecordingReadyEventRecordingTypeEnum, CallRecordingStartedEventRecordingTypeEnum, CallRecordingStoppedEventRecordingTypeEnum, CallState, CallType, CallTypes, CallingState, CameraManager, CameraManagerState, CreateDeviceRequestPushProviderEnum, DebounceType, DeviceManager, DeviceManagerState, DynascaleManager, ErrorFromResponse, FrameRecordingSettingsRequestModeEnum, FrameRecordingSettingsRequestQualityEnum, FrameRecordingSettingsResponseModeEnum, IndividualRecordingSettingsRequestModeEnum, IndividualRecordingSettingsResponseModeEnum, IngressAudioEncodingOptionsRequestChannelsEnum, IngressSourceRequestFpsEnum, IngressVideoLayerRequestCodecEnum, LayoutSettingsRequestNameEnum, MicrophoneManager, MicrophoneManagerState, NoiseCancellationSettingsModeEnum, OwnCapability, RNSpeechDetector, RTMPBroadcastRequestQualityEnum, RTMPSettingsRequestQualityEnum, RawRecordingSettingsRequestModeEnum, RawRecordingSettingsResponseModeEnum, RecordSettingsRequestModeEnum, RecordSettingsRequestQualityEnum, rxUtils as RxUtils, ScreenShareManager, ScreenShareState, events as SfuEvents, SfuJoinError, 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, getScreenShareStream, getSdkInfo, getVideoBrowserPermission, getVideoDevices, getVideoStream, getWebRTCInfo, hasAudio, hasPausedTrack, hasScreenShare, hasScreenShareAudio, hasVideo, humanize, isPinned, livestreamOrAudioRoomSortPreset, logToConsole, name, noopComparator, paginatedLayoutSortPreset, pinned, publishingAudio, publishingVideo, reactionType, resolveDeviceId, role, screenSharing, setDeviceInfo, setOSInfo, setPowerState, setSdkInfo, setThermalState, setWebRTCInfo, speakerLayoutSortPreset, speaking, videoLoggerSystem, withParticipantSource };
|
|
15753
15888
|
//# sourceMappingURL=index.es.js.map
|