@stream-io/video-react-native-sdk 1.27.3 → 1.28.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.
Files changed (45) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/android/build.gradle +1 -0
  3. package/android/src/main/java/com/streamvideo/reactnative/StreamVideoAppLifecycleModule.kt +86 -0
  4. package/android/src/main/java/com/streamvideo/reactnative/StreamVideoReactNativePackage.kt +5 -1
  5. package/android/src/main/java/com/streamvideo/reactnative/audio/AudioDeviceManager.kt +19 -11
  6. package/android/src/main/java/com/streamvideo/reactnative/audio/utils/AudioFocusUtil.kt +23 -9
  7. package/android/src/main/java/com/streamvideo/reactnative/callmanager/StreamInCallManagerModule.kt +48 -14
  8. package/dist/commonjs/index.js +2 -0
  9. package/dist/commonjs/index.js.map +1 -1
  10. package/dist/commonjs/modules/call-manager/CallManager.js +5 -0
  11. package/dist/commonjs/modules/call-manager/CallManager.js.map +1 -1
  12. package/dist/commonjs/providers/StreamCall/AppStateListener.js +74 -16
  13. package/dist/commonjs/providers/StreamCall/AppStateListener.js.map +1 -1
  14. package/dist/commonjs/utils/internal/registerSDKGlobals.js +34 -0
  15. package/dist/commonjs/utils/internal/registerSDKGlobals.js.map +1 -0
  16. package/dist/commonjs/version.js +1 -1
  17. package/dist/module/index.js +2 -0
  18. package/dist/module/index.js.map +1 -1
  19. package/dist/module/modules/call-manager/CallManager.js +5 -0
  20. package/dist/module/modules/call-manager/CallManager.js.map +1 -1
  21. package/dist/module/providers/StreamCall/AppStateListener.js +74 -16
  22. package/dist/module/providers/StreamCall/AppStateListener.js.map +1 -1
  23. package/dist/module/utils/internal/registerSDKGlobals.js +28 -0
  24. package/dist/module/utils/internal/registerSDKGlobals.js.map +1 -0
  25. package/dist/module/version.js +1 -1
  26. package/dist/typescript/index.d.ts.map +1 -1
  27. package/dist/typescript/modules/call-manager/CallManager.d.ts +2 -0
  28. package/dist/typescript/modules/call-manager/CallManager.d.ts.map +1 -1
  29. package/dist/typescript/modules/call-manager/types.d.ts +1 -0
  30. package/dist/typescript/modules/call-manager/types.d.ts.map +1 -1
  31. package/dist/typescript/providers/StreamCall/AppStateListener.d.ts.map +1 -1
  32. package/dist/typescript/utils/internal/registerSDKGlobals.d.ts +2 -0
  33. package/dist/typescript/utils/internal/registerSDKGlobals.d.ts.map +1 -0
  34. package/dist/typescript/version.d.ts +1 -1
  35. package/ios/StreamInCallManager.m +4 -0
  36. package/ios/StreamInCallManager.swift +213 -88
  37. package/package.json +7 -7
  38. package/src/index.ts +2 -0
  39. package/src/modules/call-manager/CallManager.ts +5 -0
  40. package/src/modules/call-manager/native-module.d.ts +11 -0
  41. package/src/modules/call-manager/types.ts +1 -0
  42. package/src/providers/StreamCall/AppStateListener.tsx +116 -17
  43. package/src/utils/internal/registerSDKGlobals.ts +30 -0
  44. package/src/version.ts +1 -1
  45. package/android/src/main/java/com/streamvideo/reactnative/audio/utils/AudioSetupStoreUtil.kt +0 -41
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.registerSDKGlobals = registerSDKGlobals;
7
+ var _reactNative = require("react-native");
8
+ const StreamInCallManagerNativeModule = _reactNative.NativeModules.StreamInCallManager;
9
+ const streamRNVideoSDKGlobals = {
10
+ callManager: {
11
+ setup: ({
12
+ default_device
13
+ }) => {
14
+ StreamInCallManagerNativeModule.setDefaultAudioDeviceEndpointType(default_device);
15
+ StreamInCallManagerNativeModule.setup();
16
+ },
17
+ start: () => {
18
+ StreamInCallManagerNativeModule.start();
19
+ },
20
+ stop: () => {
21
+ StreamInCallManagerNativeModule.stop();
22
+ }
23
+ }
24
+ };
25
+
26
+ // Note: The global type declaration for `streamRNVideoSDK` is defined in
27
+ // @stream-io/video-client/src/types.ts and is automatically available when
28
+ // importing from the client package.
29
+ function registerSDKGlobals() {
30
+ if (!global.streamRNVideoSDK) {
31
+ global.streamRNVideoSDK = streamRNVideoSDKGlobals;
32
+ }
33
+ }
34
+ //# sourceMappingURL=registerSDKGlobals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","StreamInCallManagerNativeModule","NativeModules","StreamInCallManager","streamRNVideoSDKGlobals","callManager","setup","default_device","setDefaultAudioDeviceEndpointType","start","stop","registerSDKGlobals","global","streamRNVideoSDK"],"sourceRoot":"../../../../src","sources":["utils/internal/registerSDKGlobals.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAEA,MAAMC,+BAA+B,GAAGC,0BAAa,CAACC,mBAAmB;AAEzE,MAAMC,uBAAgD,GAAG;EACvDC,WAAW,EAAE;IACXC,KAAK,EAAEA,CAAC;MAAEC;IAAe,CAAC,KAAK;MAC7BN,+BAA+B,CAACO,iCAAiC,CAC/DD,cACF,CAAC;MACDN,+BAA+B,CAACK,KAAK,CAAC,CAAC;IACzC,CAAC;IACDG,KAAK,EAAEA,CAAA,KAAM;MACXR,+BAA+B,CAACQ,KAAK,CAAC,CAAC;IACzC,CAAC;IACDC,IAAI,EAAEA,CAAA,KAAM;MACVT,+BAA+B,CAACS,IAAI,CAAC,CAAC;IACxC;EACF;AACF,CAAC;;AAED;AACA;AACA;AACO,SAASC,kBAAkBA,CAAA,EAAG;EACnC,IAAI,CAACC,MAAM,CAACC,gBAAgB,EAAE;IAC5BD,MAAM,CAACC,gBAAgB,GAAGT,uBAAuB;EACnD;AACF","ignoreList":[]}
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- const version = exports.version = '1.27.3';
7
+ const version = exports.version = '1.28.0';
8
8
  //# sourceMappingURL=version.js.map
@@ -8,12 +8,14 @@ import 'intl-pluralrules';
8
8
  import { registerGlobals } from '@stream-io/react-native-webrtc';
9
9
  import Logger from '@stream-io/react-native-webrtc/src/Logger';
10
10
  import { Platform } from 'react-native';
11
+ import { registerSDKGlobals } from './utils/internal/registerSDKGlobals';
11
12
 
12
13
  // We're registering globals, because our video JS client is serving SDKs that use browser based webRTC functions.
13
14
  // This will result in creation of 2 global objects: `window` and `navigator`
14
15
  // Reference: https://github.com/react-native-webrtc/react-native-webrtc/blob/16cff1523da457dbcc27bb0744ee2bad3a987c41/Documentation/BasicUsage.md#registering-globals
15
16
  if (Platform.OS !== 'web') {
16
17
  registerGlobals();
18
+ registerSDKGlobals();
17
19
  }
18
20
 
19
21
  // only enable warning and error logs from webrtc library
@@ -1 +1 @@
1
- {"version":3,"names":["setClientDetails","registerGlobals","Logger","Platform","OS","enable","ROOT_PREFIX","StreamVideo","StreamCall"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,0BAA0B;AAC3D;AACA,OAAO,wBAAwB;AAC/B;AACA,OAAO,gCAAgC;AACvC;AACA,OAAO,kBAAkB;AACzB,SAASC,eAAe,QAAQ,gCAAgC;AAChE,OAAOC,MAAM,MAAM,2CAA2C;AAC9D,SAASC,QAAQ,QAAQ,cAAc;;AAEvC;AACA;AACA;AACA,IAAIA,QAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;EACzBH,eAAe,CAAC,CAAC;AACnB;;AAEA;AACAC,MAAM,CAACG,MAAM,CAAC,GAAGH,MAAM,CAACI,WAAW,eAAe,CAAC;AAEnD,cAAc,yBAAyB;AACvC,cAAc,iCAAiC;AAC/C,cAAc,cAAc;AAC5B,cAAc,YAAY;AAC1B,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB,cAAc,gBAAgB;AAC9B,cAAc,wBAAwB;;AAEtC;AACA;AACA,SAASC,WAAW,QAAQ,yBAAyB;AACrD,SAASC,UAAU,QAAQ,wBAAwB;AACnD,cAAc,+BAA+B;AAE7CR,gBAAgB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["setClientDetails","registerGlobals","Logger","Platform","registerSDKGlobals","OS","enable","ROOT_PREFIX","StreamVideo","StreamCall"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,0BAA0B;AAC3D;AACA,OAAO,wBAAwB;AAC/B;AACA,OAAO,gCAAgC;AACvC;AACA,OAAO,kBAAkB;AACzB,SAASC,eAAe,QAAQ,gCAAgC;AAChE,OAAOC,MAAM,MAAM,2CAA2C;AAC9D,SAASC,QAAQ,QAAQ,cAAc;AACvC,SAASC,kBAAkB,QAAQ,qCAAqC;;AAExE;AACA;AACA;AACA,IAAID,QAAQ,CAACE,EAAE,KAAK,KAAK,EAAE;EACzBJ,eAAe,CAAC,CAAC;EACjBG,kBAAkB,CAAC,CAAC;AACtB;;AAEA;AACAF,MAAM,CAACI,MAAM,CAAC,GAAGJ,MAAM,CAACK,WAAW,eAAe,CAAC;AAEnD,cAAc,yBAAyB;AACvC,cAAc,iCAAiC;AAC/C,cAAc,cAAc;AAC5B,cAAc,YAAY;AAC1B,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB,cAAc,gBAAgB;AAC9B,cAAc,wBAAwB;;AAEtC;AACA;AACA,SAASC,WAAW,QAAQ,yBAAyB;AACrD,SAASC,UAAU,QAAQ,wBAAwB;AACnD,cAAc,+BAA+B;AAE7CT,gBAAgB,CAAC,CAAC","ignoreList":[]}
@@ -80,6 +80,8 @@ export class CallManager {
80
80
  * @param config.deviceEndpointType The default audio device endpoint type to set. It can be one of the following:
81
81
  * - `'speaker'`: (Default) For normal video or voice calls.
82
82
  * - `'earpiece'`: For voice-only mobile call type scenarios.
83
+ *
84
+ * @param config.enableStereoAudioOutput Whether to enable stereo audio output. Only supported for listener audio role.
83
85
  */
84
86
  start = config => {
85
87
  NativeManager.setAudioRole(config?.audioRole ?? 'communicator');
@@ -87,6 +89,9 @@ export class CallManager {
87
89
  const type = config.deviceEndpointType ?? 'speaker';
88
90
  NativeManager.setDefaultAudioDeviceEndpointType(type);
89
91
  }
92
+ if (config?.audioRole === 'listener' && config.enableStereoAudioOutput) {
93
+ NativeManager.setEnableStereoAudioOutput(true);
94
+ }
90
95
  NativeManager.start();
91
96
  };
92
97
 
@@ -1 +1 @@
1
- {"version":3,"names":["NativeEventEmitter","NativeModules","Platform","NativeManager","StreamInCallManager","invariant","condition","message","Error","AndroidCallManager","getAudioDeviceStatus","OS","selectAudioDevice","endpointName","chooseAudioDeviceEndpoint","addAudioDeviceChangeListener","onChange","eventEmitter","s","addListener","remove","IOSCallManager","showDeviceSelector","showAudioRoutePicker","SpeakerManager","setMute","mute","muteAudioOutput","unmuteAudioOutput","setForceSpeakerphoneOn","force","CallManager","android","ios","speaker","start","config","setAudioRole","audioRole","type","deviceEndpointType","setDefaultAudioDeviceEndpointType","stop","logAudioState"],"sourceRoot":"../../../../src","sources":["modules/call-manager/CallManager.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["NativeEventEmitter","NativeModules","Platform","NativeManager","StreamInCallManager","invariant","condition","message","Error","AndroidCallManager","getAudioDeviceStatus","OS","selectAudioDevice","endpointName","chooseAudioDeviceEndpoint","addAudioDeviceChangeListener","onChange","eventEmitter","s","addListener","remove","IOSCallManager","showDeviceSelector","showAudioRoutePicker","SpeakerManager","setMute","mute","muteAudioOutput","unmuteAudioOutput","setForceSpeakerphoneOn","force","CallManager","android","ios","speaker","start","config","setAudioRole","audioRole","type","deviceEndpointType","setDefaultAudioDeviceEndpointType","enableStereoAudioOutput","setEnableStereoAudioOutput","stop","logAudioState"],"sourceRoot":"../../../../src","sources":["modules/call-manager/CallManager.ts"],"mappings":"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","ignoreList":[]}
@@ -5,6 +5,7 @@ import { shouldDisableIOSLocalVideoOnBackgroundRef } from '../../utils/internal/
5
5
  import { disablePiPMode$, isInPiPMode$ } from '../../utils/internal/rxSubjects';
6
6
  import { RxUtils, videoLoggerSystem } from '@stream-io/video-client';
7
7
  const PIP_CHANGE_EVENT = 'StreamVideoReactNative_PIP_CHANGE_EVENT';
8
+ const ANDROID_APP_STATE_CHANGED_EVENT = 'StreamVideoAppLifecycle_APP_STATE_CHANGED';
8
9
  const isAndroid8OrAbove = Platform.OS === 'android' && Platform.Version >= 26;
9
10
 
10
11
  // Does 2 functionalities:
@@ -38,34 +39,55 @@ export const AppStateListener = () => {
38
39
  };
39
40
  }, []);
40
41
  useEffect(() => {
41
- // due to strange behavior in iOS when app goes to "inactive" state
42
- // we dont check for inactive states
43
- // ref: https://www.reddit.com/r/reactnative/comments/15kib42/appstate_behavior_in_ios_when_swiping_down_to/
44
- const subscription = AppState.addEventListener('change', nextAppState => {
45
- const logger = videoLoggerSystem.getLogger('AppStateListener');
42
+ const logger = videoLoggerSystem.getLogger('AppStateListener');
43
+ const handleAppStateChange = nextAppState => {
44
+ logger.debug('AppState changed to ', nextAppState, ' from ', appState.current);
45
+
46
+ // due to strange behavior in iOS when app goes to "inactive" state
47
+ // we dont check for inactive states
48
+ // ref: https://www.reddit.com/r/reactnative/comments/15kib42/appstate_behavior_in_ios_when_swiping_down_to/
46
49
  if (appState.current.match(/background/) && nextAppState === 'active') {
47
50
  if (call?.camera?.state.status === 'enabled') {
51
+ logger.debug('attempt to Disable and reenable camera as app came to foreground');
48
52
  // Android: when device is locked and resumed, the status isnt made disabled but stays enabled
49
53
  // iOS PiP: when local track was replaced by remote track, the local track shown is blank
50
54
  // as a workaround we stop the track and enable again if its already in enabled state
51
- call?.camera?.disable(true).then(() => {
52
- call?.camera?.enable();
53
- });
54
- logger.debug('Disable and reenable camera as app came to foreground');
55
+ const renableCamera = () => {
56
+ const camera = call?.camera;
57
+ if (!camera) return Promise.resolve();
58
+ return camera.disable(true).then(() => camera.enable()).catch(e => {
59
+ logger.warn('Failed to disable+reenable camera as app came to foreground', e);
60
+ });
61
+ };
62
+ if (Platform.OS === 'android') {
63
+ NativeModules.StreamVideoReactNative.isCallAliveConfigured().then(isCallAliveConfigured => {
64
+ if (!isCallAliveConfigured) {
65
+ renableCamera();
66
+ }
67
+ });
68
+ } else {
69
+ renableCamera();
70
+ }
55
71
  } else {
56
72
  if (cameraDisabledByAppState.current) {
57
- call?.camera?.resume();
58
- cameraDisabledByAppState.current = false;
59
- logger.debug('Resume camera as app came to foreground');
73
+ call?.camera?.resume().then(() => {
74
+ cameraDisabledByAppState.current = false;
75
+ logger.debug('Camera resumed as app came to foreground');
76
+ }).catch(e => {
77
+ logger.warn('Failed to resume camera as app came to foreground', e);
78
+ });
60
79
  }
61
80
  }
62
81
  appState.current = nextAppState;
63
82
  } else if (appState.current === 'active' && nextAppState.match(/background/)) {
64
83
  const disableCameraIfNeeded = () => {
65
84
  if (call?.camera?.state.status === 'enabled') {
66
- cameraDisabledByAppState.current = true;
67
- call?.camera?.disable();
68
- logger.debug('Camera disabled by app going to background');
85
+ call?.camera?.disable().then(() => {
86
+ cameraDisabledByAppState.current = true;
87
+ logger.debug('Camera disabled by app going to background');
88
+ }).catch(e => {
89
+ logger.warn('Failed to disable camera as app went to background', e);
90
+ });
69
91
  }
70
92
  };
71
93
  if (Platform.OS === 'android') {
@@ -85,7 +107,13 @@ export const AppStateListener = () => {
85
107
  // this happens on foreground push notifications
86
108
  return;
87
109
  }
88
- disableCameraIfNeeded();
110
+ // check if keep call alive is configured
111
+ // if not, then disable the camera as we are not able to keep the call alive in the background
112
+ NativeModules.StreamVideoReactNative.isCallAliveConfigured().then(isCallAliveConfigured => {
113
+ if (!isCallAliveConfigured) {
114
+ disableCameraIfNeeded();
115
+ }
116
+ });
89
117
  }
90
118
  });
91
119
  } else {
@@ -99,6 +127,36 @@ export const AppStateListener = () => {
99
127
  }
100
128
  appState.current = nextAppState;
101
129
  }
130
+ };
131
+
132
+ // for Android use our custom native module to listen to app state changes
133
+ // because the default react-native AppState listener works for activity and ours works for application process
134
+ if (Platform.OS === 'android') {
135
+ const nativeModule = NativeModules.StreamVideoAppLifecycle;
136
+ const eventEmitter = new NativeEventEmitter(nativeModule);
137
+ let cancelled = false;
138
+ nativeModule.getCurrentAppState().then(initialState => {
139
+ if (cancelled) return;
140
+ if (initialState === 'active' || initialState === 'background') {
141
+ appState.current = initialState;
142
+ }
143
+ }).catch(() => {
144
+ logger.warn('Failed to get current app state from native module');
145
+ });
146
+ const subscription = eventEmitter.addListener(ANDROID_APP_STATE_CHANGED_EVENT, nextAppState => {
147
+ if (nextAppState === 'active' || nextAppState === 'background') {
148
+ handleAppStateChange(nextAppState);
149
+ }
150
+ });
151
+ return () => {
152
+ cancelled = true;
153
+ subscription.remove();
154
+ };
155
+ }
156
+
157
+ // for iOS use the default react-native AppState listener
158
+ const subscription = AppState.addEventListener('change', nextAppState => {
159
+ handleAppStateChange(nextAppState);
102
160
  });
103
161
  return () => {
104
162
  subscription.remove();
@@ -1 +1 @@
1
- {"version":3,"names":["useCall","useEffect","useRef","AppState","NativeEventEmitter","NativeModules","Platform","shouldDisableIOSLocalVideoOnBackgroundRef","disablePiPMode$","isInPiPMode$","RxUtils","videoLoggerSystem","PIP_CHANGE_EVENT","isAndroid8OrAbove","OS","Version","AppStateListener","call","appState","currentState","cameraDisabledByAppState","disablePiP","getCurrentValue","logger","getLogger","initialPipMode","next","debug","StreamVideoReactNative","isInPiPMode","then","isInPiP","eventEmitter","subscriptionPiPChange","addListener","remove","subscription","addEventListener","nextAppState","current","match","camera","state","status","disable","enable","resume","disableCameraIfNeeded"],"sourceRoot":"../../../../src","sources":["providers/StreamCall/AppStateListener.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCall","useEffect","useRef","AppState","NativeEventEmitter","NativeModules","Platform","shouldDisableIOSLocalVideoOnBackgroundRef","disablePiPMode$","isInPiPMode$","RxUtils","videoLoggerSystem","PIP_CHANGE_EVENT","ANDROID_APP_STATE_CHANGED_EVENT","isAndroid8OrAbove","OS","Version","AppStateListener","call","appState","currentState","cameraDisabledByAppState","disablePiP","getCurrentValue","logger","getLogger","initialPipMode","next","debug","StreamVideoReactNative","isInPiPMode","then","isInPiP","eventEmitter","subscriptionPiPChange","addListener","remove","handleAppStateChange","nextAppState","current","match","camera","state","status","renableCamera","Promise","resolve","disable","enable","catch","e","warn","isCallAliveConfigured","resume","disableCameraIfNeeded","nativeModule","StreamVideoAppLifecycle","cancelled","getCurrentAppState","initialState","subscription","addEventListener"],"sourceRoot":"../../../../src","sources":["providers/StreamCall/AppStateListener.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,28 @@
1
+ import { NativeModules } from 'react-native';
2
+ const StreamInCallManagerNativeModule = NativeModules.StreamInCallManager;
3
+ const streamRNVideoSDKGlobals = {
4
+ callManager: {
5
+ setup: ({
6
+ default_device
7
+ }) => {
8
+ StreamInCallManagerNativeModule.setDefaultAudioDeviceEndpointType(default_device);
9
+ StreamInCallManagerNativeModule.setup();
10
+ },
11
+ start: () => {
12
+ StreamInCallManagerNativeModule.start();
13
+ },
14
+ stop: () => {
15
+ StreamInCallManagerNativeModule.stop();
16
+ }
17
+ }
18
+ };
19
+
20
+ // Note: The global type declaration for `streamRNVideoSDK` is defined in
21
+ // @stream-io/video-client/src/types.ts and is automatically available when
22
+ // importing from the client package.
23
+ export function registerSDKGlobals() {
24
+ if (!global.streamRNVideoSDK) {
25
+ global.streamRNVideoSDK = streamRNVideoSDKGlobals;
26
+ }
27
+ }
28
+ //# sourceMappingURL=registerSDKGlobals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeModules","StreamInCallManagerNativeModule","StreamInCallManager","streamRNVideoSDKGlobals","callManager","setup","default_device","setDefaultAudioDeviceEndpointType","start","stop","registerSDKGlobals","global","streamRNVideoSDK"],"sourceRoot":"../../../../src","sources":["utils/internal/registerSDKGlobals.ts"],"mappings":"AACA,SAASA,aAAa,QAAQ,cAAc;AAE5C,MAAMC,+BAA+B,GAAGD,aAAa,CAACE,mBAAmB;AAEzE,MAAMC,uBAAgD,GAAG;EACvDC,WAAW,EAAE;IACXC,KAAK,EAAEA,CAAC;MAAEC;IAAe,CAAC,KAAK;MAC7BL,+BAA+B,CAACM,iCAAiC,CAC/DD,cACF,CAAC;MACDL,+BAA+B,CAACI,KAAK,CAAC,CAAC;IACzC,CAAC;IACDG,KAAK,EAAEA,CAAA,KAAM;MACXP,+BAA+B,CAACO,KAAK,CAAC,CAAC;IACzC,CAAC;IACDC,IAAI,EAAEA,CAAA,KAAM;MACVR,+BAA+B,CAACQ,IAAI,CAAC,CAAC;IACxC;EACF;AACF,CAAC;;AAED;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAA,EAAG;EACnC,IAAI,CAACC,MAAM,CAACC,gBAAgB,EAAE;IAC5BD,MAAM,CAACC,gBAAgB,GAAGT,uBAAuB;EACnD;AACF","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- export const version = '1.27.3';
1
+ export const version = '1.28.0';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,+CAA+C;AAC/C,OAAO,wBAAwB,CAAC;AAChC,8BAA8B;AAC9B,OAAO,gCAAgC,CAAC;AACxC,6IAA6I;AAC7I,OAAO,kBAAkB,CAAC;AAe1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AAIvC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,cAAc,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,+CAA+C;AAC/C,OAAO,wBAAwB,CAAC;AAChC,8BAA8B;AAC9B,OAAO,gCAAgC,CAAC;AACxC,6IAA6I;AAC7I,OAAO,kBAAkB,CAAC;AAiB1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AAIvC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,cAAc,+BAA+B,CAAC"}
@@ -51,6 +51,8 @@ export declare class CallManager {
51
51
  * @param config.deviceEndpointType The default audio device endpoint type to set. It can be one of the following:
52
52
  * - `'speaker'`: (Default) For normal video or voice calls.
53
53
  * - `'earpiece'`: For voice-only mobile call type scenarios.
54
+ *
55
+ * @param config.enableStereoAudioOutput Whether to enable stereo audio output. Only supported for listener audio role.
54
56
  */
55
57
  start: (config?: StreamInCallManagerConfig) => void;
56
58
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"CallManager.d.ts","sourceRoot":"","sources":["../../../../src/modules/call-manager/CallManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAQvE,cAAM,kBAAkB;IACtB,OAAO,CAAC,YAAY,CAAC,CAAqB;IAE1C;;OAEG;IACH,oBAAoB,QAAa,OAAO,CAAC,iBAAiB,CAAC,CAGzD;IAEF;;;;OAIG;IACH,iBAAiB,GAAI,cAAc,MAAM,KAAG,IAAI,CAG9C;IAEF;;;OAGG;IACH,4BAA4B,GAC1B,UAAU,CAAC,iBAAiB,EAAE,iBAAiB,KAAK,IAAI,KACvD,CAAC,MAAM,IAAI,CAAC,CAKb;CACH;AAED,cAAM,cAAc;IAClB;;OAEG;IACH,kBAAkB,QAAO,IAAI,CAG3B;CACH;AAED,cAAM,cAAc;IAClB;;OAEG;IACH,OAAO,GAAI,MAAM,OAAO,KAAG,IAAI,CAM7B;IAEF;;OAEG;IACH,sBAAsB,GAAI,OAAO,OAAO,KAAG,IAAI,CAE7C;CACH;AAED,qBAAa,WAAW;IACtB,OAAO,qBAA4B;IACnC,GAAG,iBAAwB;IAC3B,OAAO,iBAAwB;IAE/B;;;;;;;;;;;;;;OAcG;IACH,KAAK,GAAI,SAAS,yBAAyB,KAAG,IAAI,CAOhD;IAEF;;OAEG;IACH,IAAI,QAAO,IAAI,CAEb;IAEF;;;OAGG;IACH,aAAa,QAAO,IAAI,CAAkC;CAC3D"}
1
+ {"version":3,"file":"CallManager.d.ts","sourceRoot":"","sources":["../../../../src/modules/call-manager/CallManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAQvE,cAAM,kBAAkB;IACtB,OAAO,CAAC,YAAY,CAAC,CAAqB;IAE1C;;OAEG;IACH,oBAAoB,QAAa,OAAO,CAAC,iBAAiB,CAAC,CAGzD;IAEF;;;;OAIG;IACH,iBAAiB,GAAI,cAAc,MAAM,KAAG,IAAI,CAG9C;IAEF;;;OAGG;IACH,4BAA4B,GAC1B,UAAU,CAAC,iBAAiB,EAAE,iBAAiB,KAAK,IAAI,KACvD,CAAC,MAAM,IAAI,CAAC,CAKb;CACH;AAED,cAAM,cAAc;IAClB;;OAEG;IACH,kBAAkB,QAAO,IAAI,CAG3B;CACH;AAED,cAAM,cAAc;IAClB;;OAEG;IACH,OAAO,GAAI,MAAM,OAAO,KAAG,IAAI,CAM7B;IAEF;;OAEG;IACH,sBAAsB,GAAI,OAAO,OAAO,KAAG,IAAI,CAE7C;CACH;AAED,qBAAa,WAAW;IACtB,OAAO,qBAA4B;IACnC,GAAG,iBAAwB;IAC3B,OAAO,iBAAwB;IAE/B;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,GAAI,SAAS,yBAAyB,KAAG,IAAI,CAUhD;IAEF;;OAEG;IACH,IAAI,QAAO,IAAI,CAEb;IAEF;;;OAGG;IACH,aAAa,QAAO,IAAI,CAAkC;CAC3D"}
@@ -11,5 +11,6 @@ export type StreamInCallManagerConfig = {
11
11
  deviceEndpointType?: DeviceEndpointType;
12
12
  } | {
13
13
  audioRole: 'listener';
14
+ enableStereoAudioOutput?: boolean;
14
15
  };
15
16
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/modules/call-manager/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAC/B,kBAAkB,GAClB,UAAU,GACV,SAAS,GACT,eAAe,GACf,SAAS,GACT,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mBAAmB,EAAE,uBAAuB,CAAC;IAC7C,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,UAAU,CAAC;AACpD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,UAAU,CAAC;AAExD,MAAM,MAAM,yBAAyB,GACjC;IACE,SAAS,EAAE,cAAc,CAAC;IAC1B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC,GACD;IACE,SAAS,EAAE,UAAU,CAAC;CACvB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/modules/call-manager/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAC/B,kBAAkB,GAClB,UAAU,GACV,SAAS,GACT,eAAe,GACf,SAAS,GACT,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mBAAmB,EAAE,uBAAuB,CAAC;IAC7C,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,UAAU,CAAC;AACpD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,UAAU,CAAC;AAExD,MAAM,MAAM,yBAAyB,GACjC;IACE,SAAS,EAAE,cAAc,CAAC;IAC1B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC,GACD;IACE,SAAS,EAAE,UAAU,CAAC;IACtB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AppStateListener.d.ts","sourceRoot":"","sources":["../../../../src/providers/StreamCall/AppStateListener.tsx"],"names":[],"mappings":"AAmBA,eAAO,MAAM,gBAAgB,YAuH5B,CAAC"}
1
+ {"version":3,"file":"AppStateListener.d.ts","sourceRoot":"","sources":["../../../../src/providers/StreamCall/AppStateListener.tsx"],"names":[],"mappings":"AAsBA,eAAO,MAAM,gBAAgB,YAuN5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function registerSDKGlobals(): void;
2
+ //# sourceMappingURL=registerSDKGlobals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registerSDKGlobals.d.ts","sourceRoot":"","sources":["../../../../src/utils/internal/registerSDKGlobals.ts"],"names":[],"mappings":"AAyBA,wBAAgB,kBAAkB,SAIjC"}
@@ -1,2 +1,2 @@
1
- export declare const version = "1.27.3";
1
+ export declare const version = "1.28.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -7,6 +7,10 @@ RCT_EXTERN_METHOD(setAudioRole:(NSString *)audioRole)
7
7
 
8
8
  RCT_EXTERN_METHOD(setDefaultAudioDeviceEndpointType:(NSString *)endpointType)
9
9
 
10
+ RCT_EXTERN_METHOD(setEnableStereoAudioOutput:(BOOL)enable)
11
+
12
+ RCT_EXTERN_METHOD(setup)
13
+
10
14
  RCT_EXTERN_METHOD(start)
11
15
 
12
16
  RCT_EXTERN_METHOD(stop)