@stream-io/video-react-native-sdk 1.41.0 → 1.42.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 +26 -0
- package/android/src/main/java/com/streamvideo/reactnative/audio/AudioDeviceManager.kt +79 -54
- package/android/src/main/java/com/streamvideo/reactnative/audio/utils/AudioManagerUtil.kt +6 -2
- package/android/src/main/java/com/streamvideo/reactnative/callmanager/StreamInCallManagerModule.kt +3 -3
- package/dist/commonjs/hooks/index.js +11 -0
- package/dist/commonjs/hooks/index.js.map +1 -1
- package/dist/commonjs/hooks/push/useCallingExpWithCallingStateEffect.js +73 -0
- package/dist/commonjs/hooks/push/useCallingExpWithCallingStateEffect.js.map +1 -1
- package/dist/commonjs/hooks/useAudioDeviceStatus.js +76 -0
- package/dist/commonjs/hooks/useAudioDeviceStatus.js.map +1 -0
- package/dist/commonjs/modules/call-manager/CallManager.js +94 -47
- package/dist/commonjs/modules/call-manager/CallManager.js.map +1 -1
- package/dist/commonjs/utils/internal/callingx/callingx.js +0 -7
- package/dist/commonjs/utils/internal/callingx/callingx.js.map +1 -1
- package/dist/commonjs/utils/push/setupCallingExpEvents.js +0 -2
- package/dist/commonjs/utils/push/setupCallingExpEvents.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/module/hooks/index.js +1 -0
- package/dist/module/hooks/index.js.map +1 -1
- package/dist/module/hooks/push/useCallingExpWithCallingStateEffect.js +73 -0
- package/dist/module/hooks/push/useCallingExpWithCallingStateEffect.js.map +1 -1
- package/dist/module/hooks/useAudioDeviceStatus.js +71 -0
- package/dist/module/hooks/useAudioDeviceStatus.js.map +1 -0
- package/dist/module/modules/call-manager/CallManager.js +94 -47
- package/dist/module/modules/call-manager/CallManager.js.map +1 -1
- package/dist/module/utils/internal/callingx/callingx.js +0 -7
- package/dist/module/utils/internal/callingx/callingx.js.map +1 -1
- package/dist/module/utils/push/setupCallingExpEvents.js +0 -2
- package/dist/module/utils/push/setupCallingExpEvents.js.map +1 -1
- package/dist/module/version.js +1 -1
- package/dist/typescript/hooks/index.d.ts +1 -0
- package/dist/typescript/hooks/index.d.ts.map +1 -1
- package/dist/typescript/hooks/push/useCallingExpWithCallingStateEffect.d.ts.map +1 -1
- package/dist/typescript/hooks/useAudioDeviceStatus.d.ts +21 -0
- package/dist/typescript/hooks/useAudioDeviceStatus.d.ts.map +1 -0
- package/dist/typescript/modules/call-manager/CallManager.d.ts +25 -11
- package/dist/typescript/modules/call-manager/CallManager.d.ts.map +1 -1
- package/dist/typescript/modules/call-manager/types.d.ts +29 -3
- package/dist/typescript/modules/call-manager/types.d.ts.map +1 -1
- package/dist/typescript/utils/internal/callingx/callingx.d.ts.map +1 -1
- package/dist/typescript/utils/push/setupCallingExpEvents.d.ts.map +1 -1
- package/dist/typescript/version.d.ts +1 -1
- package/expo-config-plugin/dist/index.js +2 -0
- package/expo-config-plugin/dist/withAndroidMessagingService.js +287 -0
- package/ios/StreamInCallManager.m +7 -0
- package/ios/StreamInCallManager.swift +257 -14
- package/package.json +8 -8
- package/src/hooks/index.ts +1 -0
- package/src/hooks/push/useCallingExpWithCallingStateEffect.ts +95 -0
- package/src/hooks/useAudioDeviceStatus.ts +90 -0
- package/src/modules/call-manager/CallManager.ts +122 -64
- package/src/modules/call-manager/native-module.d.ts +14 -7
- package/src/modules/call-manager/types.ts +30 -3
- package/src/utils/internal/callingx/callingx.ts +0 -8
- package/src/utils/push/setupCallingExpEvents.ts +0 -2
- package/src/version.ts +1 -1
- package/dist/commonjs/utils/internal/callingx/audioSessionPromise.js +0 -68
- package/dist/commonjs/utils/internal/callingx/audioSessionPromise.js.map +0 -1
- package/dist/module/utils/internal/callingx/audioSessionPromise.js +0 -63
- package/dist/module/utils/internal/callingx/audioSessionPromise.js.map +0 -1
- package/dist/typescript/utils/internal/callingx/audioSessionPromise.d.ts +0 -16
- package/dist/typescript/utils/internal/callingx/audioSessionPromise.d.ts.map +0 -1
- package/src/utils/internal/callingx/audioSessionPromise.ts +0 -65
|
@@ -10,10 +10,23 @@ var _videoClient = require("@stream-io/video-client");
|
|
|
10
10
|
const NativeManager = _reactNative.NativeModules.StreamInCallManager;
|
|
11
11
|
const CallingxModule = (0, _callingx.getCallingxLibIfAvailable)();
|
|
12
12
|
const AUDIO_INTERRUPTION_EVENT = 'StreamInCallManagerAudioInterruption';
|
|
13
|
+
const AUDIO_DEVICE_CHANGED_EVENT = 'onAudioDeviceChanged';
|
|
13
14
|
const invariant = (condition, message) => {
|
|
14
15
|
if (!condition) throw new Error(message);
|
|
15
16
|
};
|
|
16
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Runs a fire-and-forget native call, logging instead of throwing on a bridge
|
|
20
|
+
* error so it can't crash the caller or an event-dispatch loop.
|
|
21
|
+
*/
|
|
22
|
+
const safeNativeCall = (label, fn) => {
|
|
23
|
+
try {
|
|
24
|
+
fn();
|
|
25
|
+
} catch (error) {
|
|
26
|
+
_videoClient.videoLoggerSystem.getLogger('CallManager').warn(`${label} failed`, error);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
17
30
|
/**
|
|
18
31
|
* On Android, whether the current call is managed by Telecom (via callingx).
|
|
19
32
|
* In that mode, audio routing/mode is owned by Telecom and StreamInCallManager audio methods should not be used
|
|
@@ -45,7 +58,7 @@ const getTelecomContext = () => {
|
|
|
45
58
|
};
|
|
46
59
|
};
|
|
47
60
|
|
|
48
|
-
/** Map a generic Telecom endpoint type to the SDK's endpoint
|
|
61
|
+
/** Map a generic Telecom endpoint type to the SDK's endpoint type. */
|
|
49
62
|
const endpointTypeToDisplayName = type => {
|
|
50
63
|
switch (type) {
|
|
51
64
|
case 'earpiece':
|
|
@@ -61,76 +74,111 @@ const endpointTypeToDisplayName = type => {
|
|
|
61
74
|
}
|
|
62
75
|
};
|
|
63
76
|
|
|
64
|
-
/** Adapt a callingx endpoints snapshot to the SDK's {@link
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
77
|
+
/** Adapt a callingx endpoints snapshot to the SDK's {@link AudioDevicesState}. */
|
|
78
|
+
const snapshotToState = snapshot => ({
|
|
79
|
+
// callingx endpoint ids are stable and unique — use them directly as the
|
|
80
|
+
// device id, so `select(device.id)` maps straight back to a Telecom endpoint.
|
|
81
|
+
devices: snapshot.endpoints.map(e => ({
|
|
82
|
+
id: e.id,
|
|
83
|
+
name: e.name,
|
|
84
|
+
type: endpointTypeToDisplayName(e.type)
|
|
85
|
+
})),
|
|
86
|
+
selectedDeviceId: snapshot.currentEndpoint?.id,
|
|
87
|
+
currentEndpointType: snapshot.currentEndpoint ? endpointTypeToDisplayName(snapshot.currentEndpoint.type) : 'Unknown'
|
|
69
88
|
});
|
|
70
|
-
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Cross-platform audio output device picker.
|
|
92
|
+
*/
|
|
93
|
+
class AudioDevicesManager {
|
|
94
|
+
interruptionReassertSetup = false;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* iOS + CallKit only: re-assert the user's output pick after an interruption ends.
|
|
98
|
+
*
|
|
99
|
+
* On interruption-end iOS clears the ephemeral route override (`setPreferredInput` /
|
|
100
|
+
* `overrideOutputAudioPort`) and doesn't restore it, and callingx re-applies its config
|
|
101
|
+
* only on engine-enable — not the engine-restart of interruption recovery.
|
|
102
|
+
*/
|
|
103
|
+
ensureInterruptionReassert = () => {
|
|
104
|
+
if (this.interruptionReassertSetup) return; // subscibed once per app lifetime
|
|
105
|
+
if (_reactNative.Platform.OS !== 'ios' || !CallingxModule) return;
|
|
106
|
+
this.interruptionReassertSetup = true;
|
|
107
|
+
CallingxModule.addEventListener('didAudioInterruption', event => {
|
|
108
|
+
if (event.phase === 'ended') {
|
|
109
|
+
safeNativeCall('reapplyAudioRoute', () => NativeManager.reapplyAudioRoute());
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
|
|
71
114
|
/**
|
|
72
|
-
* Get the current audio device
|
|
115
|
+
* Get the current audio device state (available devices + the selected one).
|
|
116
|
+
* Read directly from the audio session, so it works on every path.
|
|
73
117
|
*/
|
|
74
|
-
|
|
75
|
-
|
|
118
|
+
getStatus = async () => {
|
|
119
|
+
// Android Telecom owns routing: read the endpoint snapshot from callingx.
|
|
76
120
|
const tc = getTelecomContext();
|
|
77
121
|
if (tc) {
|
|
78
122
|
const snapshot = await tc.cx.getAvailableAudioEndpoints(tc.callId);
|
|
79
|
-
return
|
|
123
|
+
return snapshotToState(snapshot);
|
|
80
124
|
}
|
|
81
125
|
return NativeManager.getAudioDeviceStatus();
|
|
82
126
|
};
|
|
83
127
|
|
|
84
128
|
/**
|
|
85
|
-
*
|
|
129
|
+
* Switch the audio output to the device with the given id.
|
|
86
130
|
*
|
|
87
|
-
* @param
|
|
131
|
+
* @param deviceId the stable {@link AudioDevice.id} (not the display name).
|
|
88
132
|
*/
|
|
89
|
-
|
|
90
|
-
|
|
133
|
+
select = deviceId => {
|
|
134
|
+
// Android Telecom owns routing: the device id is the callingx endpoint id,
|
|
135
|
+
// so route by it directly (no name lookup needed).
|
|
91
136
|
const tc = getTelecomContext();
|
|
92
137
|
if (tc) {
|
|
93
138
|
const {
|
|
94
139
|
cx,
|
|
95
140
|
callId
|
|
96
141
|
} = tc;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const target = snapshot.endpoints.find(e => e.name === endpointName);
|
|
100
|
-
if (target) {
|
|
101
|
-
return cx.requestAudioEndpointChange(callId, target.id);
|
|
102
|
-
}
|
|
103
|
-
return undefined;
|
|
104
|
-
}).catch(error => {
|
|
105
|
-
_videoClient.videoLoggerSystem.getLogger('CallManager').warn(`selectAudioDevice: failed to route to "${endpointName}" for call ${callId} via Telecom`, error);
|
|
142
|
+
cx.requestAudioEndpointChange(callId, deviceId).catch(error => {
|
|
143
|
+
_videoClient.videoLoggerSystem.getLogger('CallManager').warn(`select: failed to route to "${deviceId}" for call ${callId} via Telecom`, error);
|
|
106
144
|
});
|
|
107
145
|
return;
|
|
108
146
|
}
|
|
109
|
-
|
|
147
|
+
this.ensureInterruptionReassert();
|
|
148
|
+
safeNativeCall('chooseAudioDeviceEndpoint', () => NativeManager.chooseAudioDeviceEndpoint(deviceId));
|
|
110
149
|
};
|
|
111
150
|
|
|
112
151
|
/**
|
|
113
|
-
* Register a listener for audio device changes.
|
|
114
|
-
*
|
|
152
|
+
* Register a listener for audio device changes. Returns an unsubscribe fn.
|
|
153
|
+
*
|
|
154
|
+
* @param onChange called with the latest {@link AudioDevicesState} on change.
|
|
115
155
|
*/
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const
|
|
156
|
+
addChangeListener = onChange => {
|
|
157
|
+
let active = true;
|
|
158
|
+
const unsubscribes = [];
|
|
119
159
|
|
|
120
|
-
//
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
160
|
+
// callingx-owned route changes (Android Telecom + iOS CallKit). The event is
|
|
161
|
+
// signal-only, so re-read the current state — ignoring a resolve that lands
|
|
162
|
+
// after unsubscribe, and swallowing bridge rejections.
|
|
163
|
+
if (CallingxModule) {
|
|
164
|
+
const cxSub = CallingxModule.addEventListener('didChangeAudioRoute', () => {
|
|
165
|
+
this.getStatus().then(state => {
|
|
166
|
+
if (active) onChange(state);
|
|
167
|
+
}).catch(error => {
|
|
168
|
+
_videoClient.videoLoggerSystem.getLogger('CallManager').warn('addChangeListener: getStatus failed', error);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
unsubscribes.push(() => cxSub.remove());
|
|
124
172
|
}
|
|
125
173
|
|
|
126
|
-
//
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
174
|
+
// SDK-managed route changes (non-callingx calls).
|
|
175
|
+
this.eventEmitter = this.eventEmitter ?? new _reactNative.NativeEventEmitter(NativeManager);
|
|
176
|
+
const sdkSub = this.eventEmitter.addListener(AUDIO_DEVICE_CHANGED_EVENT, onChange);
|
|
177
|
+
unsubscribes.push(() => sdkSub.remove());
|
|
178
|
+
return () => {
|
|
179
|
+
active = false;
|
|
180
|
+
unsubscribes.forEach(unsubscribe => unsubscribe());
|
|
181
|
+
};
|
|
134
182
|
};
|
|
135
183
|
}
|
|
136
184
|
class IOSCallManager {
|
|
@@ -211,7 +259,7 @@ const shouldBypassForCallKit = () => {
|
|
|
211
259
|
return CallingxModule.isSetup && (CallingxModule.hasRegisteredCall() || CallingxModule.isOngoingCallsEnabled);
|
|
212
260
|
};
|
|
213
261
|
class CallManager {
|
|
214
|
-
|
|
262
|
+
audioDevices = new AudioDevicesManager();
|
|
215
263
|
ios = new IOSCallManager();
|
|
216
264
|
speaker = new SpeakerManager();
|
|
217
265
|
|
|
@@ -234,11 +282,10 @@ class CallManager {
|
|
|
234
282
|
*/
|
|
235
283
|
start = config => {
|
|
236
284
|
if (shouldBypassForCallKit()) {
|
|
237
|
-
// Forward only the passive endpoint preference; callingx reads it when
|
|
238
|
-
// CallKit drives session activation.
|
|
239
285
|
if (config?.audioRole === 'communicator' && CallingxModule) {
|
|
240
286
|
const type = config.deviceEndpointType ?? 'speaker';
|
|
241
|
-
CallingxModule.setDefaultAudioDeviceEndpointType(type);
|
|
287
|
+
safeNativeCall('setDefaultAudioDeviceEndpointType (callingx)', () => CallingxModule.setDefaultAudioDeviceEndpointType(type));
|
|
288
|
+
safeNativeCall('setDefaultAudioDeviceEndpointType', () => NativeManager.setDefaultAudioDeviceEndpointType(type));
|
|
242
289
|
}
|
|
243
290
|
_videoClient.videoLoggerSystem.getLogger('CallManager').debug('start: skipping start as callkit is handling the audio session');
|
|
244
291
|
return;
|
|
@@ -247,7 +294,7 @@ class CallManager {
|
|
|
247
294
|
// Telecom owns routing/focus; forward the sticky preference to callingx and run in
|
|
248
295
|
// telecom-managed mode (StreamInCallManager keeps proximity/keep-screen-on only).
|
|
249
296
|
if (config?.audioRole !== 'listener' && CallingxModule) {
|
|
250
|
-
CallingxModule.setDefaultAudioDeviceEndpointType(config?.deviceEndpointType ?? 'speaker');
|
|
297
|
+
safeNativeCall('setDefaultAudioDeviceEndpointType (callingx)', () => CallingxModule.setDefaultAudioDeviceEndpointType(config?.deviceEndpointType ?? 'speaker'));
|
|
251
298
|
}
|
|
252
299
|
NativeManager.setTelecomManagedMode(true);
|
|
253
300
|
NativeManager.setAudioRole(config?.audioRole ?? 'communicator');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_callingx","_videoClient","NativeManager","NativeModules","StreamInCallManager","CallingxModule","getCallingxLibIfAvailable","AUDIO_INTERRUPTION_EVENT","invariant","condition","message","Error","isAndroidTelecomManaged","Platform","OS","isSetup","isTelecomBacked","hasRegisteredCall","isOngoingCallsEnabled","getTelecomContext","undefined","callId","getRegisteredCallIds","cx","endpointTypeToDisplayName","type","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_callingx","_videoClient","NativeManager","NativeModules","StreamInCallManager","CallingxModule","getCallingxLibIfAvailable","AUDIO_INTERRUPTION_EVENT","AUDIO_DEVICE_CHANGED_EVENT","invariant","condition","message","Error","safeNativeCall","label","fn","error","videoLoggerSystem","getLogger","warn","isAndroidTelecomManaged","Platform","OS","isSetup","isTelecomBacked","hasRegisteredCall","isOngoingCallsEnabled","getTelecomContext","undefined","callId","getRegisteredCallIds","cx","endpointTypeToDisplayName","type","snapshotToState","snapshot","devices","endpoints","map","e","id","name","selectedDeviceId","currentEndpoint","currentEndpointType","AudioDevicesManager","interruptionReassertSetup","ensureInterruptionReassert","addEventListener","event","phase","reapplyAudioRoute","getStatus","tc","getAvailableAudioEndpoints","getAudioDeviceStatus","select","deviceId","requestAudioEndpointChange","catch","chooseAudioDeviceEndpoint","addChangeListener","onChange","active","unsubscribes","cxSub","then","state","push","remove","eventEmitter","NativeEventEmitter","sdkSub","addListener","forEach","unsubscribe","IOSCallManager","showDeviceSelector","showAudioRoutePicker","addAudioInterruptionListener","onInterruption","s","SpeakerManager","setMute","mute","muteAudioOutput","unmuteAudioOutput","setForceSpeakerphoneOn","force","target","find","shouldBypassForCallKit","CallManager","audioDevices","ios","speaker","start","config","audioRole","deviceEndpointType","setDefaultAudioDeviceEndpointType","debug","setTelecomManagedMode","setAudioRole","enableStereoAudioOutput","setEnableStereoAudioOutput","stop","logAudioState","getAudioStateLog","exports"],"sourceRoot":"../../../../src","sources":["modules/call-manager/CallManager.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,7 +9,6 @@ exports.joinCallingxCall = joinCallingxCall;
|
|
|
9
9
|
exports.registerOutgoingCall = registerOutgoingCall;
|
|
10
10
|
var _reactNative = require("react-native");
|
|
11
11
|
var _callingx = require("../../push/libs/callingx");
|
|
12
|
-
var _audioSessionPromise = require("./audioSessionPromise");
|
|
13
12
|
var _videoClient = require("@stream-io/video-client");
|
|
14
13
|
/***
|
|
15
14
|
* Internal utils for callingx library usage from video-client.
|
|
@@ -129,9 +128,6 @@ async function joinCallingxCall(call, activeCalls) {
|
|
|
129
128
|
// display name for display in call screen
|
|
130
129
|
call.state.settings?.video?.enabled ?? false // is video call?
|
|
131
130
|
);
|
|
132
|
-
if (_reactNative.Platform.OS === 'ios') {
|
|
133
|
-
await (0, _audioSessionPromise.waitForAudioSessionActivation)();
|
|
134
|
-
}
|
|
135
131
|
};
|
|
136
132
|
if (isOutcomingCall || !call.ringing && CallingxModule.isOngoingCallsEnabled) {
|
|
137
133
|
try {
|
|
@@ -166,9 +162,6 @@ async function joinCallingxCall(call, activeCalls) {
|
|
|
166
162
|
call.state.settings?.video?.enabled ?? false // is video call?
|
|
167
163
|
);
|
|
168
164
|
await CallingxModule.answerIncomingCall(call.cid);
|
|
169
|
-
if (_reactNative.Platform.OS === 'ios') {
|
|
170
|
-
await (0, _audioSessionPromise.waitForAudioSessionActivation)();
|
|
171
|
-
}
|
|
172
165
|
} catch (error) {
|
|
173
166
|
logger.error(`Error joining incoming call in callingx: ${call.cid}`, error);
|
|
174
167
|
recoverAudioToClassicMode();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_callingx","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_callingx","_videoClient","CallingxModule","getCallingxLibIfAvailable","recoverAudioToClassicMode","Platform","OS","isSetup","isTelecomBacked","hasRegisteredCall","videoLoggerSystem","getLogger","debug","StreamInCallManagerNativeModule","NativeModules","StreamInCallManager","logger","warn","stop","setTelecomManagedMode","start","error","getCallDisplayName","callMembers","participants","currentUserId","names","length","flatMap","member","user","id","name","participant","userId","find","sort","join","getCallDisplayNameFromCall","call","state","custom","display_name","members","registerOutgoingCall","isOwnTracksLoopbackAllowed","isOutcomingCall","ringing","isCreatedByMe","cid","callDisplayName","startCall","createdBy","settings","video","enabled","joinCallingxCall","activeCalls","isIncomingCall","startCallInCallingx","isOngoingCallsEnabled","activeCallsToLeave","filter","c","callingState","CallingState","LEFT","activeCall","leave","reason","catch","e","displayIncomingCall","answerIncomingCall","endCallingxCall","isCallTracked","endCallWithReason"],"sourceRoot":"../../../../../src","sources":["utils/internal/callingx/callingx.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.setupCallingExpEvents = setupCallingExpEvents;
|
|
7
7
|
var _videoClient = require("@stream-io/video-client");
|
|
8
8
|
var _utils = require("./internal/utils");
|
|
9
|
-
var _audioSessionPromise = require("../internal/callingx/audioSessionPromise");
|
|
10
9
|
var _callingx = require("./libs/callingx");
|
|
11
10
|
var _reactNative = require("react-native");
|
|
12
11
|
const logger = _videoClient.videoLoggerSystem.getLogger('callingx');
|
|
@@ -58,7 +57,6 @@ function setupCallingExpEvents(pushConfig) {
|
|
|
58
57
|
}
|
|
59
58
|
const onDidActivateAudioSession = () => {
|
|
60
59
|
logger.debug('callingExpDidActivateAudioSession');
|
|
61
|
-
(0, _audioSessionPromise.resolvePendingAudioSession)();
|
|
62
60
|
};
|
|
63
61
|
const onDidDeactivateAudioSession = () => {
|
|
64
62
|
logger.debug('callingExpDidDeactivateAudioSession');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_videoClient","require","_utils","
|
|
1
|
+
{"version":3,"names":["_videoClient","require","_utils","_callingx","_reactNative","logger","videoLoggerSystem","getLogger","setupCallingExpEvents","pushConfig","hasPushProvider","Platform","OS","android","pushProviderName","ios","hasOngoingCalls","enableOngoingCalls","callingx","getCallingxLib","addEventListener","params","onAcceptCall","onEndCall","onDidActivateAudioSession","onDidDeactivateAudioSession","onProviderReset","events","getInitialEvents","forEach","event","eventName","debug","callId","callCids","join","length","videoClient","createStreamVideoClient","e","error","cid","call","state","calls","find","c","callingState","CallingState","LEFT","leave","catch","call_cid","source","clearPushWSEventSubscriptions","processCallFromPushInBackground","didFail","fulfillAnswerCallAction","fulfillEndCallAction"],"sourceRoot":"../../../../src","sources":["utils/push/setupCallingExpEvents.ts"],"mappings":"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","ignoreList":[]}
|
package/dist/commonjs/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":";;AAAA,cAAc,wBAAwB;AACtC,cAAc,6BAA6B;AAC3C,cAAc,QAAQ;AACtB,cAAc,iCAAiC;AAC/C,cAAc,uCAAuC;AACrD,cAAc,kBAAkB;AAChC,cAAc,yBAAyB;AACvC,cAAc,wBAAwB;AACtC,cAAc,6BAA6B;AAC3C,cAAc,wBAAwB;AACtC,cAAc,sBAAsB;AACpC,cAAc,iBAAiB;AAC/B,cAAc,iBAAiB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":";;AAAA,cAAc,wBAAwB;AACtC,cAAc,6BAA6B;AAC3C,cAAc,QAAQ;AACtB,cAAc,iCAAiC;AAC/C,cAAc,uCAAuC;AACrD,cAAc,kBAAkB;AAChC,cAAc,yBAAyB;AACvC,cAAc,wBAAwB;AACtC,cAAc,6BAA6B;AAC3C,cAAc,wBAAwB;AACtC,cAAc,sBAAsB;AACpC,cAAc,iBAAiB;AAC/B,cAAc,iBAAiB;AAC/B,cAAc,wBAAwB","ignoreList":[]}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
import { CallingState, videoLoggerSystem } from '@stream-io/video-client';
|
|
4
4
|
import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
|
|
5
5
|
import { useEffect, useMemo } from 'react';
|
|
6
|
+
import { Platform } from 'react-native';
|
|
7
|
+
import { AudioDeviceModule } from '@stream-io/react-native-webrtc';
|
|
6
8
|
import { filter, take } from 'rxjs/operators';
|
|
7
9
|
import { getCallDisplayName } from '../../utils/internal/callingx/callingx';
|
|
8
10
|
import { getCallingxLibIfAvailable } from '../../utils/push/libs/callingx';
|
|
@@ -137,5 +139,76 @@ export const useCallingExpWithCallingStateEffect = () => {
|
|
|
137
139
|
subscription.remove();
|
|
138
140
|
};
|
|
139
141
|
}, [activeCallCid, microphone]);
|
|
142
|
+
|
|
143
|
+
// Trace CallKit audio session activation/deactivation onto the call's tracer.
|
|
144
|
+
useEffect(() => {
|
|
145
|
+
const callingx = getCallingxLibIfAvailable();
|
|
146
|
+
if (!callingx?.isSetup || !activeCall) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const activateSubscription = callingx.addEventListener('didActivateAudioSession', () => {
|
|
150
|
+
activeCall.tracer.trace('callingx.didActivateAudioSession', null);
|
|
151
|
+
});
|
|
152
|
+
const deactivateSubscription = callingx.addEventListener('didDeactivateAudioSession', () => {
|
|
153
|
+
activeCall.tracer.trace('callingx.didDeactivateAudioSession', null);
|
|
154
|
+
});
|
|
155
|
+
return () => {
|
|
156
|
+
activateSubscription.remove();
|
|
157
|
+
deactivateSubscription.remove();
|
|
158
|
+
};
|
|
159
|
+
}, [activeCall]);
|
|
160
|
+
|
|
161
|
+
// Trace the iOS ADM recording state to detect silent-mic calls: the engine's
|
|
162
|
+
// input bring-up racing the CallKit audio-session activation could leave
|
|
163
|
+
// recording silently never started (mic track live, zero audio RTP sent).
|
|
164
|
+
// Samples shortly after JOINED and after every didActivateAudioSession, and
|
|
165
|
+
// traces healthy calls too so the failure rate is measurable. Detection only;
|
|
166
|
+
// the engine-availability gate in callingx owns prevention.
|
|
167
|
+
useEffect(() => {
|
|
168
|
+
const callingx = getCallingxLibIfAvailable();
|
|
169
|
+
if (Platform.OS !== 'ios' || !callingx?.isSetup || !activeCall) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const timeouts = new Set();
|
|
173
|
+
const traceRecordingState = trigger => {
|
|
174
|
+
if (activeCall.state.callingState !== CallingState.JOINED) return;
|
|
175
|
+
if (activeCall.microphone.state.status !== 'enabled') return;
|
|
176
|
+
let state;
|
|
177
|
+
try {
|
|
178
|
+
state = {
|
|
179
|
+
trigger,
|
|
180
|
+
isRecording: AudioDeviceModule.isRecording(),
|
|
181
|
+
isEngineRunning: AudioDeviceModule.isEngineRunning(),
|
|
182
|
+
isMicrophoneMuted: AudioDeviceModule.isMicrophoneMuted()
|
|
183
|
+
};
|
|
184
|
+
} catch (error) {
|
|
185
|
+
logger.warn('failed to read the ADM recording state', error);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
activeCall.tracer.trace('ios.audioRecording.state', state);
|
|
189
|
+
if (!state.isRecording) {
|
|
190
|
+
logger.warn('mic is enabled but ADM is not recording', state);
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
const scheduleCheck = (trigger, delayMs) => {
|
|
194
|
+
const timeout = setTimeout(() => {
|
|
195
|
+
timeouts.delete(timeout);
|
|
196
|
+
traceRecordingState(trigger);
|
|
197
|
+
}, delayMs);
|
|
198
|
+
timeouts.add(timeout);
|
|
199
|
+
};
|
|
200
|
+
const joinedSubscription = activeCall.state.callingState$.pipe(filter(callingState => callingState === CallingState.JOINED), take(1))
|
|
201
|
+
// delayed so the normal engine bring-up can complete on its own
|
|
202
|
+
.subscribe(() => scheduleCheck('joined', 3000));
|
|
203
|
+
const activationSubscription = callingx.addEventListener('didActivateAudioSession',
|
|
204
|
+
// delayed so the activation-driven engine start can run first
|
|
205
|
+
() => scheduleCheck('audioSessionActivated', 1000));
|
|
206
|
+
return () => {
|
|
207
|
+
joinedSubscription.unsubscribe();
|
|
208
|
+
activationSubscription.remove();
|
|
209
|
+
timeouts.forEach(clearTimeout);
|
|
210
|
+
timeouts.clear();
|
|
211
|
+
};
|
|
212
|
+
}, [activeCall]);
|
|
140
213
|
};
|
|
141
214
|
//# sourceMappingURL=useCallingExpWithCallingStateEffect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CallingState","videoLoggerSystem","useCall","useCallStateHooks","useEffect","useMemo","filter","take","getCallDisplayName","getCallingxLibIfAvailable","logger","getLogger","useCallingExpWithCallingStateEffect","useMicrophoneState","useParticipants","useCallMembers","activeCall","isMute","microphone","callMembers","participants","activeCallCid","cid","createdByUserId","state","createdBy","id","callCustomDisplayName","custom","display_name","currentUserId","isIncoming","ringing","isCreatedByMe","callDisplayName","callingx","isSetup","shouldMakeCallActive","call","isOngoingCallsEnabled","subscription","callingState$","pipe","callingState","JOINED","isCallTracked","subscribe","setCurrentCallActive","unsubscribe","debug","endCallWithReason","catch","error","updateDisplay","setMutedCall","addEventListener","event","callId","muted","isCurrentlyMuted","status","disable","enable","remove"],"sourceRoot":"../../../../src","sources":["hooks/push/useCallingExpWithCallingStateEffect.ts"],"mappings":";;AAAA,SAAeA,YAAY,EAAEC,iBAAiB,QAAQ,yBAAyB;AAC/E,SAASC,OAAO,EAAEC,iBAAiB,QAAQ,iCAAiC;AAC5E,SAASC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAC1C,SAASC,MAAM,EAAEC,IAAI,QAAQ,gBAAgB;AAC7C,SAASC,kBAAkB,QAAQ,wCAAwC;AAC3E,SAASC,yBAAyB,QAAQ,gCAAgC;AAE1E,MAAMC,MAAM,
|
|
1
|
+
{"version":3,"names":["CallingState","videoLoggerSystem","useCall","useCallStateHooks","useEffect","useMemo","Platform","AudioDeviceModule","filter","take","getCallDisplayName","getCallingxLibIfAvailable","logger","getLogger","useCallingExpWithCallingStateEffect","useMicrophoneState","useParticipants","useCallMembers","activeCall","isMute","microphone","callMembers","participants","activeCallCid","cid","createdByUserId","state","createdBy","id","callCustomDisplayName","custom","display_name","currentUserId","isIncoming","ringing","isCreatedByMe","callDisplayName","callingx","isSetup","shouldMakeCallActive","call","isOngoingCallsEnabled","subscription","callingState$","pipe","callingState","JOINED","isCallTracked","subscribe","setCurrentCallActive","unsubscribe","debug","endCallWithReason","catch","error","updateDisplay","setMutedCall","addEventListener","event","callId","muted","isCurrentlyMuted","status","disable","enable","remove","activateSubscription","tracer","trace","deactivateSubscription","OS","timeouts","Set","traceRecordingState","trigger","isRecording","isEngineRunning","isMicrophoneMuted","warn","scheduleCheck","delayMs","timeout","setTimeout","delete","add","joinedSubscription","activationSubscription","forEach","clearTimeout","clear"],"sourceRoot":"../../../../src","sources":["hooks/push/useCallingExpWithCallingStateEffect.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { callManager } from '../modules/call-manager';
|
|
5
|
+
/**
|
|
6
|
+
* Structural equality for two audio device states to avoid redundant re-renders.
|
|
7
|
+
*/
|
|
8
|
+
const areStatesEqual = (a, b) => {
|
|
9
|
+
if (!a) return false;
|
|
10
|
+
if (a.selectedDeviceId !== b.selectedDeviceId || a.currentEndpointType !== b.currentEndpointType || a.devices.length !== b.devices.length) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
return a.devices.every((device, i) => {
|
|
14
|
+
const other = b.devices[i];
|
|
15
|
+
return other !== undefined && device.id === other.id && device.name === other.name && device.type === other.type;
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Subscribes to the current audio output device state and keeps it in sync.
|
|
21
|
+
*
|
|
22
|
+
* Works on Android, iOS, and iOS with CallKit
|
|
23
|
+
* (`@stream-io/react-native-callingx`) — the underlying source is selected
|
|
24
|
+
* automatically. Pair with `callManager.audioDevices.select(device.id)` to
|
|
25
|
+
* build a custom audio route picker.
|
|
26
|
+
*
|
|
27
|
+
* @returns the latest {@link AudioDevicesState}, or `undefined` until the
|
|
28
|
+
* initial status resolves.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* const status = useAudioDeviceStatus();
|
|
33
|
+
* const { devices, selectedDeviceId } = status ?? {};
|
|
34
|
+
* // callManager.audioDevices.select(devices[0].id);
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export const useAudioDeviceStatus = () => {
|
|
38
|
+
const [state, setState] = useState();
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
let active = true;
|
|
41
|
+
let receivedUpdate = false;
|
|
42
|
+
let unsubscribe = () => {};
|
|
43
|
+
const applyIfChanged = next => {
|
|
44
|
+
setState(prev => areStatesEqual(prev, next) ? prev : next);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// Live change events take precedence over the initial fetch.
|
|
48
|
+
const onChange = next => {
|
|
49
|
+
if (!active) return;
|
|
50
|
+
receivedUpdate = true;
|
|
51
|
+
applyIfChanged(next);
|
|
52
|
+
};
|
|
53
|
+
try {
|
|
54
|
+
// Subscribe before fetching so no change between the two is missed.
|
|
55
|
+
unsubscribe = callManager.audioDevices.addChangeListener(onChange);
|
|
56
|
+
callManager.audioDevices.getStatus().then(initial => {
|
|
57
|
+
// Don't let the initial snapshot clobber newer event-driven state,
|
|
58
|
+
// and ignore it entirely after unmount.
|
|
59
|
+
if (active && !receivedUpdate) applyIfChanged(initial);
|
|
60
|
+
}).catch(() => {});
|
|
61
|
+
} catch {
|
|
62
|
+
// Native/bridge error during setup — leave state undefined.
|
|
63
|
+
}
|
|
64
|
+
return () => {
|
|
65
|
+
active = false;
|
|
66
|
+
unsubscribe();
|
|
67
|
+
};
|
|
68
|
+
}, []);
|
|
69
|
+
return state;
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=useAudioDeviceStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useState","callManager","areStatesEqual","a","b","selectedDeviceId","currentEndpointType","devices","length","every","device","i","other","undefined","id","name","type","useAudioDeviceStatus","state","setState","active","receivedUpdate","unsubscribe","applyIfChanged","next","prev","onChange","audioDevices","addChangeListener","getStatus","then","initial","catch"],"sourceRoot":"../../../src","sources":["hooks/useAudioDeviceStatus.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,WAAW,QAAQ,yBAAyB;AAGrD;AACA;AACA;AACA,MAAMC,cAAc,GAAGA,CACrBC,CAAgC,EAChCC,CAAoB,KACR;EACZ,IAAI,CAACD,CAAC,EAAE,OAAO,KAAK;EACpB,IACEA,CAAC,CAACE,gBAAgB,KAAKD,CAAC,CAACC,gBAAgB,IACzCF,CAAC,CAACG,mBAAmB,KAAKF,CAAC,CAACE,mBAAmB,IAC/CH,CAAC,CAACI,OAAO,CAACC,MAAM,KAAKJ,CAAC,CAACG,OAAO,CAACC,MAAM,EACrC;IACA,OAAO,KAAK;EACd;EACA,OAAOL,CAAC,CAACI,OAAO,CAACE,KAAK,CAAC,CAACC,MAAM,EAAEC,CAAC,KAAK;IACpC,MAAMC,KAAK,GAAGR,CAAC,CAACG,OAAO,CAACI,CAAC,CAAC;IAC1B,OACEC,KAAK,KAAKC,SAAS,IACnBH,MAAM,CAACI,EAAE,KAAKF,KAAK,CAACE,EAAE,IACtBJ,MAAM,CAACK,IAAI,KAAKH,KAAK,CAACG,IAAI,IAC1BL,MAAM,CAACM,IAAI,KAAKJ,KAAK,CAACI,IAAI;EAE9B,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,GAAGA,CAAA,KAAqC;EACvE,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGnB,QAAQ,CAAoB,CAAC;EAEvDD,SAAS,CAAC,MAAM;IACd,IAAIqB,MAAM,GAAG,IAAI;IACjB,IAAIC,cAAc,GAAG,KAAK;IAC1B,IAAIC,WAAW,GAAGA,CAAA,KAAM,CAAC,CAAC;IAE1B,MAAMC,cAAc,GAAIC,IAAuB,IAAK;MAClDL,QAAQ,CAAEM,IAAI,IAAMvB,cAAc,CAACuB,IAAI,EAAED,IAAI,CAAC,GAAGC,IAAI,GAAGD,IAAK,CAAC;IAChE,CAAC;;IAED;IACA,MAAME,QAAQ,GAAIF,IAAuB,IAAK;MAC5C,IAAI,CAACJ,MAAM,EAAE;MACbC,cAAc,GAAG,IAAI;MACrBE,cAAc,CAACC,IAAI,CAAC;IACtB,CAAC;IAED,IAAI;MACF;MACAF,WAAW,GAAGrB,WAAW,CAAC0B,YAAY,CAACC,iBAAiB,CAACF,QAAQ,CAAC;MAClEzB,WAAW,CAAC0B,YAAY,CACrBE,SAAS,CAAC,CAAC,CACXC,IAAI,CAAEC,OAAO,IAAK;QACjB;QACA;QACA,IAAIX,MAAM,IAAI,CAACC,cAAc,EAAEE,cAAc,CAACQ,OAAO,CAAC;MACxD,CAAC,CAAC,CACDC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,MAAM;MACN;IAAA;IAGF,OAAO,MAAM;MACXZ,MAAM,GAAG,KAAK;MACdE,WAAW,CAAC,CAAC;IACf,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOJ,KAAK;AACd,CAAC","ignoreList":[]}
|