@stream-io/video-react-native-sdk 1.44.0 → 1.45.1

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 (108) hide show
  1. package/CHANGELOG.md +35 -3
  2. package/android/src/main/java/com/streamvideo/reactnative/audio/AudioDeviceManager.kt +110 -58
  3. package/android/src/main/java/com/streamvideo/reactnative/audio/CommunicationModeKeepAlive.kt +247 -0
  4. package/android/src/main/java/com/streamvideo/reactnative/callmanager/StreamInCallManagerModule.kt +16 -5
  5. package/android/src/main/java/com/streamvideo/reactnative/keepalive/StreamCallKeepAliveHeadlessService.kt +112 -26
  6. package/android/src/main/java/com/streamvideo/reactnative/util/CallAlivePermissionsHelper.kt +68 -37
  7. package/dist/commonjs/hooks/push/useCallingExpWithCallingStateEffect.js +12 -6
  8. package/dist/commonjs/hooks/push/useCallingExpWithCallingStateEffect.js.map +1 -1
  9. package/dist/commonjs/hooks/useAndroidKeepCallAliveEffect.js +38 -11
  10. package/dist/commonjs/hooks/useAndroidKeepCallAliveEffect.js.map +1 -1
  11. package/dist/commonjs/hooks/useLoopbackRecording.js +10 -127
  12. package/dist/commonjs/hooks/useLoopbackRecording.js.map +1 -1
  13. package/dist/commonjs/utils/StreamVideoRN/index.js +25 -0
  14. package/dist/commonjs/utils/StreamVideoRN/index.js.map +1 -1
  15. package/dist/commonjs/utils/internal/callingx/callingx.js +38 -56
  16. package/dist/commonjs/utils/internal/callingx/callingx.js.map +1 -1
  17. package/dist/commonjs/utils/keepCallAliveHeadlessTask.js +43 -4
  18. package/dist/commonjs/utils/keepCallAliveHeadlessTask.js.map +1 -1
  19. package/dist/commonjs/utils/push/android.js +7 -167
  20. package/dist/commonjs/utils/push/android.js.map +1 -1
  21. package/dist/commonjs/utils/push/internal/android.js +204 -0
  22. package/dist/commonjs/utils/push/internal/android.js.map +1 -0
  23. package/dist/commonjs/utils/push/libs/firebaseMessaging/index.js +9 -1
  24. package/dist/commonjs/utils/push/libs/firebaseMessaging/index.js.map +1 -1
  25. package/dist/commonjs/utils/push/libs/firebaseMessaging/lib.js +1 -1
  26. package/dist/commonjs/utils/push/libs/firebaseMessaging/lib.js.map +1 -1
  27. package/dist/commonjs/utils/push/setupAndroidPushEvents.js +25 -0
  28. package/dist/commonjs/utils/push/setupAndroidPushEvents.js.map +1 -0
  29. package/dist/commonjs/utils/push/setupCallingExpEvents.js +6 -2
  30. package/dist/commonjs/utils/push/setupCallingExpEvents.js.map +1 -1
  31. package/dist/commonjs/utils/push/setupIosVoipPushEvents.js +6 -7
  32. package/dist/commonjs/utils/push/setupIosVoipPushEvents.js.map +1 -1
  33. package/dist/commonjs/utils/push/utils.js.map +1 -1
  34. package/dist/commonjs/version.js +1 -1
  35. package/dist/module/hooks/push/useCallingExpWithCallingStateEffect.js +12 -6
  36. package/dist/module/hooks/push/useCallingExpWithCallingStateEffect.js.map +1 -1
  37. package/dist/module/hooks/useAndroidKeepCallAliveEffect.js +39 -12
  38. package/dist/module/hooks/useAndroidKeepCallAliveEffect.js.map +1 -1
  39. package/dist/module/hooks/useLoopbackRecording.js +10 -127
  40. package/dist/module/hooks/useLoopbackRecording.js.map +1 -1
  41. package/dist/module/utils/StreamVideoRN/index.js +25 -0
  42. package/dist/module/utils/StreamVideoRN/index.js.map +1 -1
  43. package/dist/module/utils/internal/callingx/callingx.js +38 -56
  44. package/dist/module/utils/internal/callingx/callingx.js.map +1 -1
  45. package/dist/module/utils/keepCallAliveHeadlessTask.js +41 -3
  46. package/dist/module/utils/keepCallAliveHeadlessTask.js.map +1 -1
  47. package/dist/module/utils/push/android.js +9 -169
  48. package/dist/module/utils/push/android.js.map +1 -1
  49. package/dist/module/utils/push/internal/android.js +200 -0
  50. package/dist/module/utils/push/internal/android.js.map +1 -0
  51. package/dist/module/utils/push/libs/firebaseMessaging/index.js +9 -1
  52. package/dist/module/utils/push/libs/firebaseMessaging/index.js.map +1 -1
  53. package/dist/module/utils/push/libs/firebaseMessaging/lib.js +1 -1
  54. package/dist/module/utils/push/libs/firebaseMessaging/lib.js.map +1 -1
  55. package/dist/module/utils/push/setupAndroidPushEvents.js +21 -0
  56. package/dist/module/utils/push/setupAndroidPushEvents.js.map +1 -0
  57. package/dist/module/utils/push/setupCallingExpEvents.js +6 -2
  58. package/dist/module/utils/push/setupCallingExpEvents.js.map +1 -1
  59. package/dist/module/utils/push/setupIosVoipPushEvents.js +6 -7
  60. package/dist/module/utils/push/setupIosVoipPushEvents.js.map +1 -1
  61. package/dist/module/utils/push/utils.js.map +1 -1
  62. package/dist/module/version.js +1 -1
  63. package/dist/typescript/hooks/push/useCallingExpWithCallingStateEffect.d.ts.map +1 -1
  64. package/dist/typescript/hooks/useAndroidKeepCallAliveEffect.d.ts.map +1 -1
  65. package/dist/typescript/hooks/useLoopbackRecording.d.ts +12 -69
  66. package/dist/typescript/hooks/useLoopbackRecording.d.ts.map +1 -1
  67. package/dist/typescript/utils/StreamVideoRN/index.d.ts +13 -0
  68. package/dist/typescript/utils/StreamVideoRN/index.d.ts.map +1 -1
  69. package/dist/typescript/utils/StreamVideoRN/types.d.ts +1 -2
  70. package/dist/typescript/utils/StreamVideoRN/types.d.ts.map +1 -1
  71. package/dist/typescript/utils/internal/callingx/callingx.d.ts.map +1 -1
  72. package/dist/typescript/utils/keepCallAliveHeadlessTask.d.ts +9 -0
  73. package/dist/typescript/utils/keepCallAliveHeadlessTask.d.ts.map +1 -1
  74. package/dist/typescript/utils/push/android.d.ts +3 -4
  75. package/dist/typescript/utils/push/android.d.ts.map +1 -1
  76. package/dist/typescript/utils/push/internal/android.d.ts +8 -0
  77. package/dist/typescript/utils/push/internal/android.d.ts.map +1 -0
  78. package/dist/typescript/utils/push/libs/firebaseMessaging/index.d.ts +6 -4
  79. package/dist/typescript/utils/push/libs/firebaseMessaging/index.d.ts.map +1 -1
  80. package/dist/typescript/utils/push/libs/firebaseMessaging/lib.d.ts +2 -2
  81. package/dist/typescript/utils/push/libs/firebaseMessaging/lib.d.ts.map +1 -1
  82. package/dist/typescript/utils/push/setupAndroidPushEvents.d.ts +3 -0
  83. package/dist/typescript/utils/push/setupAndroidPushEvents.d.ts.map +1 -0
  84. package/dist/typescript/utils/push/setupCallingExpEvents.d.ts.map +1 -1
  85. package/dist/typescript/utils/push/setupIosVoipPushEvents.d.ts.map +1 -1
  86. package/dist/typescript/utils/push/utils.d.ts +2 -2
  87. package/dist/typescript/utils/push/utils.d.ts.map +1 -1
  88. package/dist/typescript/version.d.ts +1 -1
  89. package/expo-config-plugin/dist/withAndroidPermissions.js +1 -1
  90. package/ios/TracksRecorder/RecorderVideoSink.swift +92 -5
  91. package/package.json +4 -4
  92. package/src/hooks/push/useCallingExpWithCallingStateEffect.ts +25 -11
  93. package/src/hooks/useAndroidKeepCallAliveEffect.ts +59 -21
  94. package/src/hooks/useLoopbackRecording.ts +36 -248
  95. package/src/modules/call-manager/native-module.d.ts +14 -0
  96. package/src/utils/StreamVideoRN/index.ts +29 -0
  97. package/src/utils/StreamVideoRN/types.ts +1 -2
  98. package/src/utils/internal/callingx/callingx.ts +49 -68
  99. package/src/utils/keepCallAliveHeadlessTask.ts +45 -3
  100. package/src/utils/push/android.ts +12 -237
  101. package/src/utils/push/internal/android.ts +273 -0
  102. package/src/utils/push/libs/firebaseMessaging/index.ts +16 -5
  103. package/src/utils/push/libs/firebaseMessaging/lib.ts +3 -3
  104. package/src/utils/push/setupAndroidPushEvents.ts +25 -0
  105. package/src/utils/push/setupCallingExpEvents.ts +6 -3
  106. package/src/utils/push/setupIosVoipPushEvents.ts +8 -7
  107. package/src/utils/push/utils.ts +2 -4
  108. package/src/version.ts +1 -1
@@ -6,55 +6,28 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.useLoopbackRecording = useLoopbackRecording;
7
7
  var _react = require("react");
8
8
  var _reactNative = require("react-native");
9
- var _rxjs = require("rxjs");
10
9
  var _videoClient = require("@stream-io/video-client");
11
10
  var _videoReactBindings = require("@stream-io/video-react-bindings");
12
11
  /** @internal */
13
12
  const {
14
13
  StreamVideoReactNative
15
14
  } = _reactNative.NativeModules;
16
-
17
- // Upper bound on how long `startRecording` will wait for the SFU to
18
- // echo loopback tracks back via the Subscriber. Tuned generously since
19
- // this includes connection setup; consumers that want shorter feedback
20
- // should call `stopRecording` to cancel the wait early.
21
- const STREAMS_WAIT_TIMEOUT_MS = 10 * 1000;
22
- const DEFAULT_RECORDING_DURATION = 10 * 1000;
23
- const MIN_RECORDING_DURATION = 5 * 1000;
24
- const MAX_RECORDING_DURATION = 2 * 60 * 1000;
25
- /**
26
- * Records the SFU loopback streams (audio + video) on the local participant
27
- * to a local MP4 file. Designed for the `allowOwnTracksLoopback` pre-call test mode:
28
- * the SFU echoes the caller's published tracks back through the Subscriber
29
- * peer connection. The hook identifies the loopback streams on the local
30
- * participant by reference inequality against
31
- * `call.camera.state.mediaStream` / `call.microphone.state.mediaStream` —
32
- * the canonical references to the local capture — and captures them.
33
- */
15
+ /** Records SFU loopback streams to a local MP4 file. */
34
16
  function useLoopbackRecording() {
35
17
  const call = (0, _videoReactBindings.useCall)();
36
18
  const {
37
19
  useCallCallingState,
38
20
  useParticipantCount,
39
- useLocalParticipant,
40
- useCameraState,
41
- useMicrophoneState
21
+ useLocalParticipant
42
22
  } = (0, _videoReactBindings.useCallStateHooks)();
43
23
  const callingState = useCallCallingState();
44
24
  const participantCount = useParticipantCount();
45
25
  const localParticipant = useLocalParticipant();
46
- const {
47
- mediaStream: cameraStream
48
- } = useCameraState();
49
- const {
50
- mediaStream: microphoneStream
51
- } = useMicrophoneState();
52
26
  const [recordingState, setRecordingState] = (0, _react.useState)('idle');
53
27
  const recordingStateRef = (0, _react.useRef)('idle');
54
28
  const isMountedRef = (0, _react.useRef)(true);
55
- // Used to abort the awaiting-streams wait on stop / leave / unmount.
56
29
  const awaitAbortRef = (0, _react.useRef)(null);
57
- const loopbackStreams = (0, _react.useMemo)(() => getLoopbackStreamsFor(localParticipant, cameraStream, microphoneStream), [localParticipant, cameraStream, microphoneStream]);
30
+ const loopbackStreams = (0, _react.useMemo)(() => (0, _videoClient.getLoopbackStreams)(call, localParticipant), [call, localParticipant]);
58
31
  const updateState = (0, _react.useCallback)(next => {
59
32
  recordingStateRef.current = next;
60
33
  if (isMountedRef.current) {
@@ -80,7 +53,7 @@ function useLoopbackRecording() {
80
53
  }, []);
81
54
  const startRecording = (0, _react.useCallback)(async ({
82
55
  includeVideo = true,
83
- maxDurationMs = DEFAULT_RECORDING_DURATION
56
+ maxDurationMs = _videoClient.DEFAULT_LOOPBACK_RECORDING_DURATION_MS
84
57
  } = {}) => {
85
58
  if (!call) {
86
59
  return null;
@@ -95,51 +68,30 @@ function useLoopbackRecording() {
95
68
  }
96
69
  awaitAbortRef.current = new AbortController();
97
70
  updateState('awaiting-streams');
98
- let audioTrack;
99
71
  try {
100
- const streams = await waitForLoopbackStreams(call, {
72
+ const streams = await (0, _videoClient.waitForLoopbackStreams)(call, {
101
73
  includeVideo,
102
74
  signal: awaitAbortRef.current.signal,
103
- timeoutMs: STREAMS_WAIT_TIMEOUT_MS
75
+ timeoutMs: _videoClient.LOOPBACK_STREAMS_WAIT_TIMEOUT_MS
104
76
  });
105
77
  if (streams === null) {
106
78
  _videoClient.videoLoggerSystem.getLogger('useLoopbackRecording').warn('timed out waiting for loopback streams');
107
79
  return null;
108
80
  }
109
- audioTrack = streams.audioTrack;
110
- const videoTrackId = streams.videoTrack?.id;
111
-
112
- // The loopback audio track lands disabled (the SDK default-mutes
113
- // it to prevent echo). Enable it so the native recording
114
- // pipeline receives PCM; `finally` returns it to muted.
115
- if (audioTrack) {
116
- audioTrack.enabled = true;
117
- }
118
81
  updateState('recording');
119
- const clampedDuration = Math.min(MAX_RECORDING_DURATION, Math.max(MIN_RECORDING_DURATION, maxDurationMs));
120
-
121
- // Pre-size the native encoder to the publisher's max video
122
- // publish-option dimension. Without this, the encoder locks to
123
- // whatever the SFU happens to echo *first* and stays there for the
124
- // rest of the recording even after the network improves and
125
- // higher layers arrive.
126
82
  const publishMaxDim = call.getMaxVideoPublishDimension();
127
83
  try {
128
- const uri = await StreamVideoReactNative.startTrackRecording({
129
- videoTrackId,
130
- maxDurationMs: Math.round(clampedDuration),
84
+ return await (0, _videoClient.withLoopbackAudioEnabled)(streams, () => StreamVideoReactNative.startTrackRecording({
85
+ videoTrackId: streams.videoTrack?.id,
86
+ maxDurationMs: (0, _videoClient.clampLoopbackRecordingDuration)(maxDurationMs),
131
87
  targetWidth: publishMaxDim?.width,
132
88
  targetHeight: publishMaxDim?.height
133
- });
134
- return uri;
89
+ }));
135
90
  } catch (error) {
136
91
  _videoClient.videoLoggerSystem.getLogger('useLoopbackRecording').error('failed to start recording', error);
137
92
  throw new Error('failed to start recording');
138
93
  }
139
94
  } finally {
140
- if (audioTrack) {
141
- audioTrack.enabled = false;
142
- }
143
95
  awaitAbortRef.current = null;
144
96
  updateState('idle');
145
97
  }
@@ -161,21 +113,12 @@ function useLoopbackRecording() {
161
113
  throw new Error('failed to get recordings');
162
114
  }
163
115
  }, []);
164
-
165
- // Auto-stop on call leave / end. Aborts an awaiting-streams wait or
166
- // signals native finalisation depending on which phase we're in.
167
- // Without this, leaving the call mid-recording would leave native
168
- // encoders mid-write while the SFU subscriber tracks end under their
169
- // feet — undefined final file state.
170
116
  (0, _react.useEffect)(() => {
171
117
  if (callingState === _videoClient.CallingState.LEFT || callingState === _videoClient.CallingState.IDLE) {
172
118
  _videoClient.videoLoggerSystem.getLogger('useLoopbackRecording').debug('auto-stopping recording on call leave / end');
173
119
  stopRecording().catch(() => {});
174
120
  }
175
121
  }, [callingState, stopRecording]);
176
-
177
- // Auto-stop if another participant joins. Loopback recording is a
178
- // single-user pre-call test.
179
122
  (0, _react.useEffect)(() => {
180
123
  if (recordingState !== 'idle' && participantCount > 1) {
181
124
  stopRecording().catch(() => {});
@@ -200,64 +143,4 @@ function useLoopbackRecording() {
200
143
  loopbackAudioStream: loopbackStreams.loopbackAudioStream
201
144
  };
202
145
  }
203
- function getLoopbackStreamsFor(participant, cameraStream, microphoneStream) {
204
- return {
205
- loopbackVideoStream: participant?.videoStream && participant.videoStream !== cameraStream ? participant.videoStream : undefined,
206
- loopbackAudioStream: participant?.audioStream && participant.audioStream !== microphoneStream ? participant.audioStream : undefined
207
- };
208
- }
209
-
210
- /**
211
- * Subscribe to `localParticipant$` and resolve once the requested loopback
212
- * streams are present on the participant. Aborts cleanly on `signal`
213
- * (resolves `null`) and rejects on timeout.
214
- */
215
- function waitForLoopbackStreams(call, opts) {
216
- return new Promise((resolve, reject) => {
217
- const initial = getLoopbackStreams(call.state.localParticipant, call.camera.state.mediaStream, call.microphone.state.mediaStream, opts.includeVideo);
218
- if (initial) {
219
- resolve(initial);
220
- return;
221
- }
222
- const cleanup = () => {
223
- subscription.unsubscribe();
224
- if (timeoutId !== undefined) {
225
- clearTimeout(timeoutId);
226
- }
227
- opts.signal.removeEventListener('abort', onAbort);
228
- };
229
- const onAbort = () => {
230
- cleanup();
231
- resolve(null);
232
- };
233
- opts.signal.addEventListener('abort', onAbort);
234
- const timeoutId = setTimeout(() => {
235
- cleanup();
236
- reject(new Error('useLoopbackRecording: timed out waiting for loopback streams. ' + 'Ensure the call was joined with `allowOwnTracksLoopback: true` and ' + 'that the SFU is configured to echo self-sub tracks.'));
237
- }, opts.timeoutMs);
238
- const subscription = (0, _rxjs.combineLatest)([call.state.localParticipant$, call.camera.state.mediaStream$, call.microphone.state.mediaStream$]).subscribe(([participant, cameraStream, microphoneStream]) => {
239
- const ready = getLoopbackStreams(participant, cameraStream, microphoneStream, opts.includeVideo);
240
- if (ready) {
241
- cleanup();
242
- resolve(ready);
243
- }
244
- });
245
- });
246
- }
247
- function getLoopbackStreams(participant, cameraStream, microphoneStream, includeVideo) {
248
- if (!participant) return undefined;
249
- const {
250
- loopbackAudioStream,
251
- loopbackVideoStream
252
- } = getLoopbackStreamsFor(participant, cameraStream, microphoneStream);
253
- const audioTrack = loopbackAudioStream?.getAudioTracks()[0];
254
- const videoTrack = includeVideo ? loopbackVideoStream?.getVideoTracks()[0] : undefined;
255
- if (!audioTrack || includeVideo && !videoTrack) {
256
- return undefined;
257
- }
258
- return {
259
- audioTrack,
260
- videoTrack
261
- };
262
- }
263
146
  //# sourceMappingURL=useLoopbackRecording.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_rxjs","_videoClient","_videoReactBindings","StreamVideoReactNative","NativeModules","STREAMS_WAIT_TIMEOUT_MS","DEFAULT_RECORDING_DURATION","MIN_RECORDING_DURATION","MAX_RECORDING_DURATION","useLoopbackRecording","call","useCall","useCallCallingState","useParticipantCount","useLocalParticipant","useCameraState","useMicrophoneState","useCallStateHooks","callingState","participantCount","localParticipant","mediaStream","cameraStream","microphoneStream","recordingState","setRecordingState","useState","recordingStateRef","useRef","isMountedRef","awaitAbortRef","loopbackStreams","useMemo","getLoopbackStreamsFor","updateState","useCallback","next","current","stopRecording","videoLoggerSystem","getLogger","debug","abort","stopTrackRecording","error","Error","startRecording","includeVideo","maxDurationMs","warn","state","AbortController","audioTrack","streams","waitForLoopbackStreams","signal","timeoutMs","videoTrackId","videoTrack","id","enabled","clampedDuration","Math","min","max","publishMaxDim","getMaxVideoPublishDimension","uri","startTrackRecording","round","targetWidth","width","targetHeight","height","clearRecordings","clearStreamRecordings","getRecordings","list","getStreamRecordings","useEffect","CallingState","LEFT","IDLE","catch","loopbackVideoStream","loopbackAudioStream","participant","videoStream","undefined","audioStream","opts","Promise","resolve","reject","initial","getLoopbackStreams","camera","microphone","cleanup","subscription","unsubscribe","timeoutId","clearTimeout","removeEventListener","onAbort","addEventListener","setTimeout","combineLatest","localParticipant$","mediaStream$","subscribe","ready","getAudioTracks","getVideoTracks"],"sourceRoot":"../../../src","sources":["hooks/useLoopbackRecording.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_videoClient","_videoReactBindings","StreamVideoReactNative","NativeModules","useLoopbackRecording","call","useCall","useCallCallingState","useParticipantCount","useLocalParticipant","useCallStateHooks","callingState","participantCount","localParticipant","recordingState","setRecordingState","useState","recordingStateRef","useRef","isMountedRef","awaitAbortRef","loopbackStreams","useMemo","getLoopbackStreams","updateState","useCallback","next","current","stopRecording","videoLoggerSystem","getLogger","debug","abort","stopTrackRecording","error","Error","startRecording","includeVideo","maxDurationMs","DEFAULT_LOOPBACK_RECORDING_DURATION_MS","warn","state","AbortController","streams","waitForLoopbackStreams","signal","timeoutMs","LOOPBACK_STREAMS_WAIT_TIMEOUT_MS","publishMaxDim","getMaxVideoPublishDimension","withLoopbackAudioEnabled","startTrackRecording","videoTrackId","videoTrack","id","clampLoopbackRecordingDuration","targetWidth","width","targetHeight","height","clearRecordings","clearStreamRecordings","getRecordings","list","getStreamRecordings","useEffect","CallingState","LEFT","IDLE","catch","loopbackVideoStream","loopbackAudioStream"],"sourceRoot":"../../../src","sources":["hooks/useLoopbackRecording.ts"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.StreamVideoRN = void 0;
7
7
  var _pushLogoutCallback = _interopRequireDefault(require("../internal/pushLogoutCallback"));
8
8
  var _setupIosVoipPushEvents = require("../push/setupIosVoipPushEvents");
9
+ var _setupAndroidPushEvents = require("../push/setupAndroidPushEvents");
9
10
  var _setupCallingExpEvents = require("../push/setupCallingExpEvents");
10
11
  var _callingx = require("../push/libs/callingx");
11
12
  var _reactNative = require("react-native");
@@ -108,6 +109,7 @@ class StreamVideoRN {
108
109
  }
109
110
  (0, _setupCallingExpEvents.setupCallingExpEvents)(pushConfig);
110
111
  (0, _setupIosVoipPushEvents.setupIosVoipPushEvents)(pushConfig);
112
+ (0, _setupAndroidPushEvents.setupAndroidPushEvents)(pushConfig);
111
113
  }
112
114
  static getConfig() {
113
115
  return this.config;
@@ -129,6 +131,29 @@ class StreamVideoRN {
129
131
  _pushLogoutCallback.default.current = [];
130
132
  }
131
133
 
134
+ /**
135
+ * Android only. Opt out of the Android 11+ communication-mode keep-alive.
136
+ *
137
+ * By default the SDK plays a silent voice-communication track for the duration of a
138
+ * communicator-role call, so Android does not reset `MODE_IN_COMMUNICATION` ~6s after it is
139
+ * set (which breaks audio routing and echo cancellation).
140
+ * See {@link https://issuetracker.google.com/issues/209493718}
141
+ *
142
+ * Call this at app start, alongside {@link setPushConfig} — the native audio manager
143
+ * rejects the change once it has been activated for a call. No-op on iOS and on
144
+ * Android below API 30.
145
+ */
146
+ static setDisableCommunicationModeWorkaround(disabled) {
147
+ if (_reactNative.Platform.OS !== 'android') {
148
+ return;
149
+ }
150
+ try {
151
+ _reactNative.NativeModules.StreamInCallManager?.setDisableCommunicationModeWorkaround(disabled);
152
+ } catch (error) {
153
+ _videoClient.videoLoggerSystem.getLogger('StreamVideoRN').warn('setDisableCommunicationModeWorkaround failed', error);
154
+ }
155
+ }
156
+
132
157
  /**
133
158
  * Play native busy tone for call rejection
134
159
  */
@@ -1 +1 @@
1
- {"version":3,"names":["_pushLogoutCallback","_interopRequireDefault","require","_setupIosVoipPushEvents","_setupCallingExpEvents","_callingx","_reactNative","_videoClient","e","__esModule","default","deepMerge","target","source","result","key","undefined","Array","isArray","DEFAULT_STREAM_VIDEO_CONFIG","foregroundService","android","channel","id","name","notificationTexts","title","body","taskToRun","Promise","StreamVideoRN","config","updateConfig","setPushConfig","pushConfig","push","callingx","getCallingxLib","videoLoggerSystem","getLogger","info","JSON","stringify","options","extractCallingExpOptions","setup","Error","setupCallingExpEvents","setupIosVoipPushEvents","getConfig","onPushLogout","callbacks","pushLogoutCallbacks","current","resolve","all","map","callback","then","clearPushLogoutCallbacks","playBusyTone","NativeModules","StreamVideoReactNative","stopBusyTone","androidHasAudioOutputHardware","Platform","OS","hasAudioOutputHardware","androidHasMicrophoneHardware","hasMicrophoneHardware","androidHasCameraHardware","hasCameraHardware","exports"],"sourceRoot":"../../../../src","sources":["utils/StreamVideoRN/index.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_pushLogoutCallback","_interopRequireDefault","require","_setupIosVoipPushEvents","_setupAndroidPushEvents","_setupCallingExpEvents","_callingx","_reactNative","_videoClient","e","__esModule","default","deepMerge","target","source","result","key","undefined","Array","isArray","DEFAULT_STREAM_VIDEO_CONFIG","foregroundService","android","channel","id","name","notificationTexts","title","body","taskToRun","Promise","StreamVideoRN","config","updateConfig","setPushConfig","pushConfig","push","callingx","getCallingxLib","videoLoggerSystem","getLogger","info","JSON","stringify","options","extractCallingExpOptions","setup","Error","setupCallingExpEvents","setupIosVoipPushEvents","setupAndroidPushEvents","getConfig","onPushLogout","callbacks","pushLogoutCallbacks","current","resolve","all","map","callback","then","clearPushLogoutCallbacks","setDisableCommunicationModeWorkaround","disabled","Platform","OS","NativeModules","StreamInCallManager","error","warn","playBusyTone","StreamVideoReactNative","stopBusyTone","androidHasAudioOutputHardware","hasAudioOutputHardware","androidHasMicrophoneHardware","hasMicrophoneHardware","androidHasCameraHardware","hasCameraHardware","exports"],"sourceRoot":"../../../../src","sources":["utils/StreamVideoRN/index.ts"],"mappings":"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","ignoreList":[]}
@@ -37,12 +37,25 @@ function getCallDisplayName(callMembers, participants, currentUserId) {
37
37
 
38
38
  // if no names are found, we use the name of the current user
39
39
  if (names.length === 0) {
40
- names = [participants.find(participant => participant.userId === currentUserId)?.name ?? 'Call'];
40
+ names = [participants.find(participant => participant.userId === currentUserId)?.name || 'Call'];
41
41
  }
42
42
  return names.sort().join(', ');
43
43
  }
44
- function getCallDisplayNameFromCall(call) {
45
- return call.state.custom?.display_name ?? getCallDisplayName(call.state.members, call.state.participants, call.currentUserId);
44
+
45
+ /**
46
+ * Args shared by the callingx call registration APIs:
47
+ * `(callId, phoneNumber, callerName, hasVideo)`.
48
+ */
49
+ function getCallingxCallArgs(call) {
50
+ const callDisplayName = call.state.custom?.display_name || getCallDisplayName(call.state.members, call.state.participants, call.currentUserId);
51
+ return [call.cid,
52
+ // unique id for call
53
+ call.state.createdBy?.id ?? callDisplayName,
54
+ // handle for native call UI (prefer createdBy user id, fallback to call display name)
55
+ callDisplayName,
56
+ // display name for display in call screen
57
+ call.state.settings?.video?.enabled ?? false // is video call?
58
+ ];
46
59
  }
47
60
  async function registerOutgoingCall(call) {
48
61
  if (!CallingxModule || !CallingxModule.isSetup || call.isOwnTracksLoopbackAllowed) {
@@ -55,15 +68,7 @@ async function registerOutgoingCall(call) {
55
68
  const logger = _videoClient.videoLoggerSystem.getLogger('callingx');
56
69
  try {
57
70
  logger.debug(`registerOutgoingCall: Registering outgoing call ${call.cid}`);
58
- const callDisplayName = getCallDisplayNameFromCall(call);
59
- await CallingxModule.startCall(call.cid,
60
- // unique id for call
61
- call.state.createdBy?.id ?? callDisplayName,
62
- // handle for native call UI (prefer createdBy user id, fallback to call display name)
63
- callDisplayName,
64
- // display name for display in call screen
65
- call.state.settings?.video?.enabled ?? false // is video call?
66
- );
71
+ await CallingxModule.startCall(...getCallingxCallArgs(call));
67
72
  } catch (error) {
68
73
  logger.error(`registerOutgoingCall: Error registering outgoing call in callingx: ${call.cid}`, error);
69
74
  }
@@ -84,53 +89,30 @@ async function joinCallingxCall(call, activeCalls) {
84
89
  const logger = _videoClient.videoLoggerSystem.getLogger('callingx');
85
90
  const isOutcomingCall = call.ringing && call.isCreatedByMe;
86
91
  const isIncomingCall = call.ringing && !call.isCreatedByMe;
87
- const startCallInCallingx = async () => {
88
- logger.debug(`joinCallingxCall: Joining call ${call.cid}`);
89
- const callDisplayName = getCallDisplayNameFromCall(call);
90
- await CallingxModule.startCall(call.cid,
91
- // unique id for call
92
- call.state.createdBy?.id ?? callDisplayName,
93
- // handle for native call UI (prefer createdBy user id, fallback to call display name)
94
- callDisplayName,
95
- // display name for display in call screen
96
- call.state.settings?.video?.enabled ?? false // is video call?
97
- );
98
- };
99
- if (isOutcomingCall || !call.ringing && CallingxModule.isOngoingCallsEnabled) {
100
- try {
101
- await startCallInCallingx();
102
- } catch (error) {
103
- logger.error(`startCallingxCall: Error starting call in callingx: ${call.cid}`, error);
92
+ const isOngoingCall = c => !c.ringing && CallingxModule.isOngoingCallsEnabled && !c.isOwnTracksLoopbackAllowed;
93
+ if (!isIncomingCall && !isOutcomingCall && !isOngoingCall(call)) {
94
+ return;
95
+ }
96
+ try {
97
+ const activeCallsToLeave = activeCalls.filter(c => c.cid !== call.cid && (c.ringing || isOngoingCall(c)) && c.state.callingState !== _videoClient.CallingState.LEFT);
98
+ for (const activeCall of activeCallsToLeave) {
99
+ logger.debug(`leaving currently-active-call:${activeCall.cid} before joining the call:${call.cid}`);
100
+ await activeCall.leave({
101
+ reason: 'cancel'
102
+ }).catch(e => {
103
+ logger.error(`failed to leave active call ${activeCall.cid}`, e);
104
+ });
104
105
  }
105
- } else if (isIncomingCall) {
106
- logger.debug(`joinCallingxCall: Joining incoming call ${call.cid}`);
107
- try {
108
- // Leave any existing active ringing calls before joining a new ringing call
109
- const activeCallsToLeave = activeCalls.filter(c => c.cid !== call.cid && c.ringing && c.state.callingState !== _videoClient.CallingState.LEFT);
110
- for (const activeCall of activeCallsToLeave) {
111
- logger.debug(`leaving active call ${activeCall.cid} before joining ${call.cid}`);
112
- await activeCall.leave({
113
- reason: 'cancel'
114
- }).catch(e => {
115
- logger.error(`failed to leave active call ${activeCall.cid}`, e);
116
- });
117
- }
118
- // Awaits native CallKit/Telecom registration before answering.
119
- // Safe to call even if the call is already registered (e.g. from VoIP push) --
120
- // iOS early-returns with no error, Android sends the registered broadcast.
121
- const callDisplayName = getCallDisplayNameFromCall(call);
122
- await CallingxModule.displayIncomingCall(call.cid,
123
- // unique id for call
124
- call.state.createdBy?.id ?? callDisplayName,
125
- // handle for native call UI (prefer createdBy user id, fallback to call display name)
126
- callDisplayName,
127
- // display name for display in call screen
128
- call.state.settings?.video?.enabled ?? false // is video call?
129
- );
106
+ logger.debug(`joinCallingxCall: Joining call ${call.cid} isIncoming: ${isIncomingCall} isOutgoing: ${isOutcomingCall}`);
107
+ const callArgs = getCallingxCallArgs(call);
108
+ if (isIncomingCall) {
109
+ await CallingxModule.displayIncomingCall(...callArgs);
130
110
  await CallingxModule.answerIncomingCall(call.cid);
131
- } catch (error) {
132
- logger.error(`Error joining incoming call in callingx: ${call.cid}`, error);
111
+ } else {
112
+ await CallingxModule.startCall(...callArgs);
133
113
  }
114
+ } catch (error) {
115
+ logger.error(`startCallingxCall: Error starting call in callingx: ${call.cid} isIncoming: ${isIncomingCall} isOutgoing: ${isOutcomingCall}`, error);
134
116
  }
135
117
  }
136
118
  async function endCallingxCall(call, reason) {
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_callingx","_videoClient","CallingxModule","getCallingxLibIfAvailable","getCallDisplayName","callMembers","participants","currentUserId","names","length","flatMap","member","user","id","name","participant","userId","find","sort","join","getCallDisplayNameFromCall","call","state","custom","display_name","members","registerOutgoingCall","isSetup","isOwnTracksLoopbackAllowed","isOutcomingCall","ringing","isCreatedByMe","logger","videoLoggerSystem","getLogger","debug","cid","callDisplayName","startCall","createdBy","settings","video","enabled","error","joinCallingxCall","activeCalls","isIncomingCall","startCallInCallingx","isOngoingCallsEnabled","activeCallsToLeave","filter","c","callingState","CallingState","LEFT","activeCall","leave","reason","catch","e","displayIncomingCall","answerIncomingCall","endCallingxCall","isCallTracked","endCallWithReason","wireAudioEngineSubscription","Platform","OS","unwireAudioEngineSubscription"],"sourceRoot":"../../../../../src","sources":["utils/internal/callingx/callingx.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_callingx","_videoClient","CallingxModule","getCallingxLibIfAvailable","getCallDisplayName","callMembers","participants","currentUserId","names","length","flatMap","member","user","id","name","participant","userId","find","sort","join","getCallingxCallArgs","call","callDisplayName","state","custom","display_name","members","cid","createdBy","settings","video","enabled","registerOutgoingCall","isSetup","isOwnTracksLoopbackAllowed","isOutcomingCall","ringing","isCreatedByMe","logger","videoLoggerSystem","getLogger","debug","startCall","error","joinCallingxCall","activeCalls","isIncomingCall","isOngoingCall","c","isOngoingCallsEnabled","activeCallsToLeave","filter","callingState","CallingState","LEFT","activeCall","leave","reason","catch","e","callArgs","displayIncomingCall","answerIncomingCall","endCallingxCall","isCallTracked","endCallWithReason","wireAudioEngineSubscription","Platform","OS","unwireAudioEngineSubscription"],"sourceRoot":"../../../../../src","sources":["utils/internal/callingx/callingx.ts"],"mappings":"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","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.keepCallAliveCallRef = exports.KEEP_CALL_ALIVE_HEADLESS_TASK_NAME = void 0;
6
+ exports.keepCallAliveCallRef = exports.endKeepCallAliveHeadlessTask = exports.KEEP_CALL_ALIVE_HEADLESS_TASK_NAME = void 0;
7
7
  var _reactNative = require("react-native");
8
8
  var _videoClient = require("@stream-io/video-client");
9
9
  var _StreamVideoRN = require("./StreamVideoRN");
@@ -16,6 +16,21 @@ const KEEP_CALL_ALIVE_HEADLESS_TASK_NAME = exports.KEEP_CALL_ALIVE_HEADLESS_TASK
16
16
  const keepCallAliveCallRef = exports.keepCallAliveCallRef = {
17
17
  current: undefined
18
18
  };
19
+ let resolveRunningTask;
20
+
21
+ /**
22
+ * Ends the currently running keep-alive headless task.
23
+ *
24
+ * The task's promise is app-provided (`foregroundService.android.taskToRun`) and by default never
25
+ * resolves, so stopping the native service alone would leave the task registered in
26
+ * `HeadlessJsTaskContext` forever - which keeps RN's timer choreographer callback posted for the
27
+ * rest of the process lifetime. Resolving it here lets React Native unwind the task properly.
28
+ */
29
+ const endKeepCallAliveHeadlessTask = () => {
30
+ resolveRunningTask?.();
31
+ resolveRunningTask = undefined;
32
+ };
33
+ exports.endKeepCallAliveHeadlessTask = endKeepCallAliveHeadlessTask;
19
34
  function registerKeepCallAliveHeadlessTaskOnce() {
20
35
  if (_reactNative.Platform.OS !== 'android') return;
21
36
  _reactNative.AppRegistry.registerHeadlessTask(KEEP_CALL_ALIVE_HEADLESS_TASK_NAME, () => async data => {
@@ -37,10 +52,34 @@ function registerKeepCallAliveHeadlessTaskOnce() {
37
52
  }
38
53
  const config = _StreamVideoRN.StreamVideoRN.getConfig();
39
54
  const taskToRun = config.foregroundService.android.taskToRun;
55
+ // A previous task (if any) must not keep hanging around.
56
+ endKeepCallAliveHeadlessTask();
57
+ const taskEnded = new Promise(resolve => {
58
+ resolveRunningTask = resolve;
59
+ });
60
+ const ownResolver = resolveRunningTask;
61
+
62
+ // React Native stops the foreground service as soon as the promise returned from here
63
+ // settles. `taskToRun` is app-provided and may resolve early - or immediately - so its
64
+ // completion must not end the keep-alive: that would drop the call's background protection
65
+ // while the call is still ongoing. The task's lifetime is owned by the SDK instead, and ends
66
+ // via endKeepCallAliveHeadlessTask() when the call is left.
67
+ (async () => {
68
+ try {
69
+ await taskToRun(call);
70
+ logger.debug('Keep-alive taskToRun completed, keeping the call alive until the call ends');
71
+ } catch (e) {
72
+ logger.error('Keep-alive headless task failed', e);
73
+ }
74
+ })();
40
75
  try {
41
- await taskToRun(call);
42
- } catch (e) {
43
- logger.error('Keep-alive headless task failed', e);
76
+ await taskEnded;
77
+ } finally {
78
+ // a newer task may already have installed its own resolver - clearing it here would leave
79
+ // that task with no way to be ended.
80
+ if (resolveRunningTask === ownResolver) {
81
+ resolveRunningTask = undefined;
82
+ }
44
83
  }
45
84
  });
46
85
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_videoClient","_StreamVideoRN","KEEP_CALL_ALIVE_HEADLESS_TASK_NAME","exports","keepCallAliveCallRef","current","undefined","registerKeepCallAliveHeadlessTaskOnce","Platform","OS","AppRegistry","registerHeadlessTask","data","logger","videoLoggerSystem","getLogger","callCid","call","warn","cid","activeCallCid","config","StreamVideoRN","getConfig","taskToRun","foregroundService","android","e","error"],"sourceRoot":"../../../src","sources":["utils/keepCallAliveHeadlessTask.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AAEO,MAAMG,kCAAkC,GAAAC,OAAA,CAAAD,kCAAA,GAAG,0BAA0B;;AAE5E;AACA;AACA;AACA;AACO,MAAME,oBAAmD,GAAAD,OAAA,CAAAC,oBAAA,GAAG;EACjEC,OAAO,EAAEC;AACX,CAAC;AAED,SAASC,qCAAqCA,CAAA,EAAG;EAC/C,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;EAE/BC,wBAAW,CAACC,oBAAoB,CAC9BT,kCAAkC,EAClC,MAAM,MAAOU,IAAsC,IAAK;IACtD,MAAMC,MAAM,GAAGC,8BAAiB,CAACC,SAAS,CACxC,+BACF,CAAC;IACD,MAAMC,OAAO,GAAGJ,IAAI,EAAEI,OAAO;IAE7B,MAAMC,IAAI,GAAGb,oBAAoB,CAACC,OAAO;IACzC,IAAI,CAACY,IAAI,EAAE;MACTJ,MAAM,CAACK,IAAI,CACT,kEAAkE,EAClE;QAAEF;MAAQ,CACZ,CAAC;MACD;IACF;IACA,IAAIA,OAAO,IAAIC,IAAI,CAACE,GAAG,IAAIF,IAAI,CAACE,GAAG,KAAKH,OAAO,EAAE;MAC/CH,MAAM,CAACK,IAAI,CACT,+DAA+D,EAC/D;QAAEF,OAAO;QAAEI,aAAa,EAAEH,IAAI,CAACE;MAAI,CACrC,CAAC;MACD;IACF;IAEA,MAAME,MAAM,GAAGC,4BAAa,CAACC,SAAS,CAAC,CAAC;IACxC,MAAMC,SAAS,GAAGH,MAAM,CAACI,iBAAiB,CAACC,OAAO,CAACF,SAAS;IAC5D,IAAI;MACF,MAAMA,SAAS,CAACP,IAAI,CAAC;IACvB,CAAC,CAAC,OAAOU,CAAC,EAAE;MACVd,MAAM,CAACe,KAAK,CAAC,iCAAiC,EAAED,CAAC,CAAC;IACpD;EACF,CACF,CAAC;AACH;AAEApB,qCAAqC,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_videoClient","_StreamVideoRN","KEEP_CALL_ALIVE_HEADLESS_TASK_NAME","exports","keepCallAliveCallRef","current","undefined","resolveRunningTask","endKeepCallAliveHeadlessTask","registerKeepCallAliveHeadlessTaskOnce","Platform","OS","AppRegistry","registerHeadlessTask","data","logger","videoLoggerSystem","getLogger","callCid","call","warn","cid","activeCallCid","config","StreamVideoRN","getConfig","taskToRun","foregroundService","android","taskEnded","Promise","resolve","ownResolver","debug","e","error"],"sourceRoot":"../../../src","sources":["utils/keepCallAliveHeadlessTask.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AAEO,MAAMG,kCAAkC,GAAAC,OAAA,CAAAD,kCAAA,GAAG,0BAA0B;;AAE5E;AACA;AACA;AACA;AACO,MAAME,oBAAmD,GAAAD,OAAA,CAAAC,oBAAA,GAAG;EACjEC,OAAO,EAAEC;AACX,CAAC;AAED,IAAIC,kBAA4C;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,4BAA4B,GAAGA,CAAA,KAAM;EAChDD,kBAAkB,GAAG,CAAC;EACtBA,kBAAkB,GAAGD,SAAS;AAChC,CAAC;AAACH,OAAA,CAAAK,4BAAA,GAAAA,4BAAA;AAEF,SAASC,qCAAqCA,CAAA,EAAG;EAC/C,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;EAE/BC,wBAAW,CAACC,oBAAoB,CAC9BX,kCAAkC,EAClC,MAAM,MAAOY,IAAsC,IAAK;IACtD,MAAMC,MAAM,GAAGC,8BAAiB,CAACC,SAAS,CACxC,+BACF,CAAC;IACD,MAAMC,OAAO,GAAGJ,IAAI,EAAEI,OAAO;IAE7B,MAAMC,IAAI,GAAGf,oBAAoB,CAACC,OAAO;IACzC,IAAI,CAACc,IAAI,EAAE;MACTJ,MAAM,CAACK,IAAI,CACT,kEAAkE,EAClE;QAAEF;MAAQ,CACZ,CAAC;MACD;IACF;IACA,IAAIA,OAAO,IAAIC,IAAI,CAACE,GAAG,IAAIF,IAAI,CAACE,GAAG,KAAKH,OAAO,EAAE;MAC/CH,MAAM,CAACK,IAAI,CACT,+DAA+D,EAC/D;QAAEF,OAAO;QAAEI,aAAa,EAAEH,IAAI,CAACE;MAAI,CACrC,CAAC;MACD;IACF;IAEA,MAAME,MAAM,GAAGC,4BAAa,CAACC,SAAS,CAAC,CAAC;IACxC,MAAMC,SAAS,GAAGH,MAAM,CAACI,iBAAiB,CAACC,OAAO,CAACF,SAAS;IAC5D;IACAlB,4BAA4B,CAAC,CAAC;IAC9B,MAAMqB,SAAS,GAAG,IAAIC,OAAO,CAAQC,OAAO,IAAK;MAC/CxB,kBAAkB,GAAGwB,OAAO;IAC9B,CAAC,CAAC;IACF,MAAMC,WAAW,GAAGzB,kBAAkB;;IAEtC;IACA;IACA;IACA;IACA;IACA,CAAC,YAAY;MACX,IAAI;QACF,MAAMmB,SAAS,CAACP,IAAI,CAAC;QACrBJ,MAAM,CAACkB,KAAK,CACV,4EACF,CAAC;MACH,CAAC,CAAC,OAAOC,CAAC,EAAE;QACVnB,MAAM,CAACoB,KAAK,CAAC,iCAAiC,EAAED,CAAC,CAAC;MACpD;IACF,CAAC,EAAE,CAAC;IAEJ,IAAI;MACF,MAAML,SAAS;IACjB,CAAC,SAAS;MACR;MACA;MACA,IAAItB,kBAAkB,KAAKyB,WAAW,EAAE;QACtCzB,kBAAkB,GAAGD,SAAS;MAChC;IACF;EACF,CACF,CAAC;AACH;AAEAG,qCAAqC,CAAC,CAAC","ignoreList":[]}