@stream-io/video-react-native-sdk 1.29.1-beta.0 → 1.29.2

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 (211) hide show
  1. package/CHANGELOG.md +3133 -0
  2. package/android/src/main/AndroidManifest.xml +1 -8
  3. package/android/src/main/AndroidManifestNew.xml +0 -11
  4. package/android/src/main/java/com/streamvideo/reactnative/StreamVideoReactNativeModule.kt +5 -42
  5. package/android/src/main/java/com/streamvideo/reactnative/audio/utils/WebRtcAudioUtils.kt +6 -70
  6. package/android/src/main/java/com/streamvideo/reactnative/callmanager/StreamInCallManagerModule.kt +4 -6
  7. package/android/src/main/java/com/streamvideo/reactnative/util/CallAliveServiceChecker.kt +95 -0
  8. package/dist/commonjs/hooks/push/index.js +2 -0
  9. package/dist/commonjs/hooks/push/index.js.map +1 -1
  10. package/dist/commonjs/hooks/push/useIosCallkeepWithCallingStateEffect.js +160 -0
  11. package/dist/commonjs/hooks/push/useIosCallkeepWithCallingStateEffect.js.map +1 -0
  12. package/dist/commonjs/hooks/push/useIosVoipPushEventsSetupEffect.js +31 -18
  13. package/dist/commonjs/hooks/push/useIosVoipPushEventsSetupEffect.js.map +1 -1
  14. package/dist/commonjs/hooks/push/useProcessPushCallEffect.js +67 -0
  15. package/dist/commonjs/hooks/push/useProcessPushCallEffect.js.map +1 -0
  16. package/dist/commonjs/hooks/useAndroidKeepCallAliveEffect.js +97 -64
  17. package/dist/commonjs/hooks/useAndroidKeepCallAliveEffect.js.map +1 -1
  18. package/dist/commonjs/index.js +0 -1
  19. package/dist/commonjs/index.js.map +1 -1
  20. package/dist/commonjs/modules/call-manager/CallManager.js +0 -26
  21. package/dist/commonjs/modules/call-manager/CallManager.js.map +1 -1
  22. package/dist/commonjs/providers/StreamCall/index.js +6 -6
  23. package/dist/commonjs/providers/StreamCall/index.js.map +1 -1
  24. package/dist/commonjs/utils/StreamVideoRN/index.js +21 -33
  25. package/dist/commonjs/utils/StreamVideoRN/index.js.map +1 -1
  26. package/dist/commonjs/utils/internal/registerSDKGlobals.js +3 -52
  27. package/dist/commonjs/utils/internal/registerSDKGlobals.js.map +1 -1
  28. package/dist/commonjs/utils/push/android.js +202 -155
  29. package/dist/commonjs/utils/push/android.js.map +1 -1
  30. package/dist/commonjs/utils/push/internal/ios.js +34 -17
  31. package/dist/commonjs/utils/push/internal/ios.js.map +1 -1
  32. package/dist/commonjs/utils/push/internal/rxSubjects.js +45 -1
  33. package/dist/commonjs/utils/push/internal/rxSubjects.js.map +1 -1
  34. package/dist/commonjs/utils/push/internal/utils.js +20 -32
  35. package/dist/commonjs/utils/push/internal/utils.js.map +1 -1
  36. package/dist/commonjs/utils/push/ios.js.map +1 -1
  37. package/dist/commonjs/utils/push/libs/callkeep.js +17 -0
  38. package/dist/commonjs/utils/push/libs/callkeep.js.map +1 -0
  39. package/dist/commonjs/utils/push/libs/index.js +19 -8
  40. package/dist/commonjs/utils/push/libs/index.js.map +1 -1
  41. package/dist/commonjs/utils/push/libs/notifee/index.js +19 -0
  42. package/dist/commonjs/utils/push/libs/notifee/index.js.map +1 -1
  43. package/dist/commonjs/utils/push/libs/voipPushNotification.js +17 -0
  44. package/dist/commonjs/utils/push/libs/voipPushNotification.js.map +1 -0
  45. package/dist/commonjs/utils/push/setupIosCallKeepEvents.js +205 -0
  46. package/dist/commonjs/utils/push/setupIosCallKeepEvents.js.map +1 -0
  47. package/dist/commonjs/utils/push/setupIosVoipPushEvents.js +6 -7
  48. package/dist/commonjs/utils/push/setupIosVoipPushEvents.js.map +1 -1
  49. package/dist/commonjs/version.js +1 -1
  50. package/dist/commonjs/version.js.map +1 -1
  51. package/dist/module/hooks/push/index.js +2 -0
  52. package/dist/module/hooks/push/index.js.map +1 -1
  53. package/dist/module/hooks/push/useIosCallkeepWithCallingStateEffect.js +153 -0
  54. package/dist/module/hooks/push/useIosCallkeepWithCallingStateEffect.js.map +1 -0
  55. package/dist/module/hooks/push/useIosVoipPushEventsSetupEffect.js +31 -18
  56. package/dist/module/hooks/push/useIosVoipPushEventsSetupEffect.js.map +1 -1
  57. package/dist/module/hooks/push/useProcessPushCallEffect.js +60 -0
  58. package/dist/module/hooks/push/useProcessPushCallEffect.js.map +1 -0
  59. package/dist/module/hooks/useAndroidKeepCallAliveEffect.js +99 -66
  60. package/dist/module/hooks/useAndroidKeepCallAliveEffect.js.map +1 -1
  61. package/dist/module/index.js +0 -1
  62. package/dist/module/index.js.map +1 -1
  63. package/dist/module/modules/call-manager/CallManager.js +0 -26
  64. package/dist/module/modules/call-manager/CallManager.js.map +1 -1
  65. package/dist/module/providers/StreamCall/index.js +6 -6
  66. package/dist/module/providers/StreamCall/index.js.map +1 -1
  67. package/dist/module/utils/StreamVideoRN/index.js +21 -33
  68. package/dist/module/utils/StreamVideoRN/index.js.map +1 -1
  69. package/dist/module/utils/internal/registerSDKGlobals.js +3 -52
  70. package/dist/module/utils/internal/registerSDKGlobals.js.map +1 -1
  71. package/dist/module/utils/push/android.js +204 -157
  72. package/dist/module/utils/push/android.js.map +1 -1
  73. package/dist/module/utils/push/internal/ios.js +34 -17
  74. package/dist/module/utils/push/internal/ios.js.map +1 -1
  75. package/dist/module/utils/push/internal/rxSubjects.js +44 -0
  76. package/dist/module/utils/push/internal/rxSubjects.js.map +1 -1
  77. package/dist/module/utils/push/internal/utils.js +19 -29
  78. package/dist/module/utils/push/internal/utils.js.map +1 -1
  79. package/dist/module/utils/push/ios.js.map +1 -1
  80. package/dist/module/utils/push/libs/callkeep.js +11 -0
  81. package/dist/module/utils/push/libs/callkeep.js.map +1 -0
  82. package/dist/module/utils/push/libs/index.js +2 -1
  83. package/dist/module/utils/push/libs/index.js.map +1 -1
  84. package/dist/module/utils/push/libs/notifee/index.js +18 -0
  85. package/dist/module/utils/push/libs/notifee/index.js.map +1 -1
  86. package/dist/module/utils/push/libs/voipPushNotification.js +11 -0
  87. package/dist/module/utils/push/libs/voipPushNotification.js.map +1 -0
  88. package/dist/module/utils/push/setupIosCallKeepEvents.js +199 -0
  89. package/dist/module/utils/push/setupIosCallKeepEvents.js.map +1 -0
  90. package/dist/module/utils/push/setupIosVoipPushEvents.js +6 -7
  91. package/dist/module/utils/push/setupIosVoipPushEvents.js.map +1 -1
  92. package/dist/module/version.js +1 -1
  93. package/dist/module/version.js.map +1 -1
  94. package/dist/typescript/hooks/push/index.d.ts.map +1 -1
  95. package/dist/typescript/hooks/push/useIosCallkeepWithCallingStateEffect.d.ts +5 -0
  96. package/dist/typescript/hooks/push/useIosCallkeepWithCallingStateEffect.d.ts.map +1 -0
  97. package/dist/typescript/hooks/push/useIosVoipPushEventsSetupEffect.d.ts.map +1 -1
  98. package/dist/typescript/hooks/push/useProcessPushCallEffect.d.ts +8 -0
  99. package/dist/typescript/hooks/push/useProcessPushCallEffect.d.ts.map +1 -0
  100. package/dist/typescript/hooks/useAndroidKeepCallAliveEffect.d.ts.map +1 -1
  101. package/dist/typescript/index.d.ts +0 -1
  102. package/dist/typescript/index.d.ts.map +1 -1
  103. package/dist/typescript/modules/call-manager/CallManager.d.ts +0 -5
  104. package/dist/typescript/modules/call-manager/CallManager.d.ts.map +1 -1
  105. package/dist/typescript/utils/StreamVideoRN/index.d.ts +2 -20
  106. package/dist/typescript/utils/StreamVideoRN/index.d.ts.map +1 -1
  107. package/dist/typescript/utils/StreamVideoRN/types.d.ts +29 -54
  108. package/dist/typescript/utils/StreamVideoRN/types.d.ts.map +1 -1
  109. package/dist/typescript/utils/internal/registerSDKGlobals.d.ts.map +1 -1
  110. package/dist/typescript/utils/push/android.d.ts +2 -1
  111. package/dist/typescript/utils/push/android.d.ts.map +1 -1
  112. package/dist/typescript/utils/push/internal/ios.d.ts.map +1 -1
  113. package/dist/typescript/utils/push/internal/rxSubjects.d.ts +33 -0
  114. package/dist/typescript/utils/push/internal/rxSubjects.d.ts.map +1 -1
  115. package/dist/typescript/utils/push/internal/utils.d.ts +1 -8
  116. package/dist/typescript/utils/push/internal/utils.d.ts.map +1 -1
  117. package/dist/typescript/utils/push/ios.d.ts +2 -1
  118. package/dist/typescript/utils/push/ios.d.ts.map +1 -1
  119. package/dist/typescript/utils/push/libs/callkeep.d.ts +3 -0
  120. package/dist/typescript/utils/push/libs/callkeep.d.ts.map +1 -0
  121. package/dist/typescript/utils/push/libs/firebaseMessaging/index.d.ts +2 -16
  122. package/dist/typescript/utils/push/libs/firebaseMessaging/index.d.ts.map +1 -1
  123. package/dist/typescript/utils/push/libs/index.d.ts +2 -1
  124. package/dist/typescript/utils/push/libs/index.d.ts.map +1 -1
  125. package/dist/typescript/utils/push/libs/notifee/index.d.ts +1 -0
  126. package/dist/typescript/utils/push/libs/notifee/index.d.ts.map +1 -1
  127. package/dist/typescript/utils/push/libs/voipPushNotification.d.ts +3 -0
  128. package/dist/typescript/utils/push/libs/voipPushNotification.d.ts.map +1 -0
  129. package/dist/typescript/utils/push/setupIosCallKeepEvents.d.ts +6 -0
  130. package/dist/typescript/utils/push/setupIosCallKeepEvents.d.ts.map +1 -0
  131. package/dist/typescript/utils/push/setupIosVoipPushEvents.d.ts.map +1 -1
  132. package/dist/typescript/version.d.ts +1 -1
  133. package/dist/typescript/version.d.ts.map +1 -1
  134. package/expo-config-plugin/dist/withAndroidManifest.js +33 -1
  135. package/expo-config-plugin/dist/withAndroidPermissions.js +7 -2
  136. package/expo-config-plugin/dist/withAppDelegate.js +197 -19
  137. package/expo-config-plugin/dist/withMainActivity.js +1 -1
  138. package/expo-config-plugin/dist/withiOSInfoPlist.js +3 -2
  139. package/ios/StreamInCallManager.m +0 -2
  140. package/ios/StreamInCallManager.swift +7 -19
  141. package/ios/StreamVideoReactNative.h +4 -7
  142. package/ios/StreamVideoReactNative.m +82 -189
  143. package/package.json +19 -14
  144. package/src/hooks/push/index.ts +2 -0
  145. package/src/hooks/push/useIosCallkeepWithCallingStateEffect.ts +235 -0
  146. package/src/hooks/push/useIosVoipPushEventsSetupEffect.ts +34 -21
  147. package/src/hooks/push/useProcessPushCallEffect.ts +108 -0
  148. package/src/hooks/useAndroidKeepCallAliveEffect.ts +120 -94
  149. package/src/index.ts +0 -1
  150. package/src/modules/call-manager/CallManager.ts +0 -36
  151. package/src/modules/call-manager/native-module.d.ts +0 -7
  152. package/src/providers/StreamCall/index.tsx +6 -6
  153. package/src/utils/StreamVideoRN/index.ts +30 -40
  154. package/src/utils/StreamVideoRN/types.ts +29 -56
  155. package/src/utils/internal/registerSDKGlobals.ts +4 -47
  156. package/src/utils/push/android.ts +309 -231
  157. package/src/utils/push/internal/ios.ts +44 -28
  158. package/src/utils/push/internal/rxSubjects.ts +61 -0
  159. package/src/utils/push/internal/utils.ts +26 -45
  160. package/src/utils/push/ios.ts +6 -1
  161. package/src/utils/push/libs/callkeep.ts +16 -0
  162. package/src/utils/push/libs/index.ts +2 -1
  163. package/src/utils/push/libs/notifee/index.ts +27 -0
  164. package/src/utils/push/libs/voipPushNotification.ts +17 -0
  165. package/src/utils/push/setupIosCallKeepEvents.ts +252 -0
  166. package/src/utils/push/setupIosVoipPushEvents.ts +7 -11
  167. package/src/version.ts +1 -1
  168. package/android/src/main/java/com/streamvideo/reactnative/keepalive/KeepAliveNotification.kt +0 -83
  169. package/android/src/main/java/com/streamvideo/reactnative/keepalive/StreamCallKeepAliveHeadlessService.kt +0 -149
  170. package/dist/commonjs/hooks/push/useCallingExpWithCallingStateEffect.js +0 -121
  171. package/dist/commonjs/hooks/push/useCallingExpWithCallingStateEffect.js.map +0 -1
  172. package/dist/commonjs/utils/internal/callingx/audioSessionPromise.js +0 -58
  173. package/dist/commonjs/utils/internal/callingx/audioSessionPromise.js.map +0 -1
  174. package/dist/commonjs/utils/internal/callingx/callingx.js +0 -109
  175. package/dist/commonjs/utils/internal/callingx/callingx.js.map +0 -1
  176. package/dist/commonjs/utils/keepCallAliveHeadlessTask.js +0 -48
  177. package/dist/commonjs/utils/keepCallAliveHeadlessTask.js.map +0 -1
  178. package/dist/commonjs/utils/push/libs/callingx.js +0 -75
  179. package/dist/commonjs/utils/push/libs/callingx.js.map +0 -1
  180. package/dist/commonjs/utils/push/setupCallingExpEvents.js +0 -108
  181. package/dist/commonjs/utils/push/setupCallingExpEvents.js.map +0 -1
  182. package/dist/module/hooks/push/useCallingExpWithCallingStateEffect.js +0 -114
  183. package/dist/module/hooks/push/useCallingExpWithCallingStateEffect.js.map +0 -1
  184. package/dist/module/utils/internal/callingx/audioSessionPromise.js +0 -51
  185. package/dist/module/utils/internal/callingx/audioSessionPromise.js.map +0 -1
  186. package/dist/module/utils/internal/callingx/callingx.js +0 -100
  187. package/dist/module/utils/internal/callingx/callingx.js.map +0 -1
  188. package/dist/module/utils/keepCallAliveHeadlessTask.js +0 -42
  189. package/dist/module/utils/keepCallAliveHeadlessTask.js.map +0 -1
  190. package/dist/module/utils/push/libs/callingx.js +0 -67
  191. package/dist/module/utils/push/libs/callingx.js.map +0 -1
  192. package/dist/module/utils/push/setupCallingExpEvents.js +0 -102
  193. package/dist/module/utils/push/setupCallingExpEvents.js.map +0 -1
  194. package/dist/typescript/hooks/push/useCallingExpWithCallingStateEffect.d.ts +0 -5
  195. package/dist/typescript/hooks/push/useCallingExpWithCallingStateEffect.d.ts.map +0 -1
  196. package/dist/typescript/utils/internal/callingx/audioSessionPromise.d.ts +0 -16
  197. package/dist/typescript/utils/internal/callingx/audioSessionPromise.d.ts.map +0 -1
  198. package/dist/typescript/utils/internal/callingx/callingx.d.ts +0 -13
  199. package/dist/typescript/utils/internal/callingx/callingx.d.ts.map +0 -1
  200. package/dist/typescript/utils/keepCallAliveHeadlessTask.d.ts +0 -10
  201. package/dist/typescript/utils/keepCallAliveHeadlessTask.d.ts.map +0 -1
  202. package/dist/typescript/utils/push/libs/callingx.d.ts +0 -9
  203. package/dist/typescript/utils/push/libs/callingx.d.ts.map +0 -1
  204. package/dist/typescript/utils/push/setupCallingExpEvents.d.ts +0 -8
  205. package/dist/typescript/utils/push/setupCallingExpEvents.d.ts.map +0 -1
  206. package/src/hooks/push/useCallingExpWithCallingStateEffect.ts +0 -147
  207. package/src/utils/internal/callingx/audioSessionPromise.ts +0 -53
  208. package/src/utils/internal/callingx/callingx.ts +0 -146
  209. package/src/utils/keepCallAliveHeadlessTask.ts +0 -54
  210. package/src/utils/push/libs/callingx.ts +0 -90
  211. package/src/utils/push/setupCallingExpEvents.ts +0 -130
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.setupIosCallKeepEvents = setupIosCallKeepEvents;
7
+ var _rxSubjects = require("./internal/rxSubjects");
8
+ var _videoClient = require("@stream-io/video-client");
9
+ var _libs = require("./libs");
10
+ var _utils = require("./internal/utils");
11
+ var _reactNative = require("react-native");
12
+ var _reactNativeWebrtc = require("@stream-io/react-native-webrtc");
13
+ var _pushLogoutCallback = require("../internal/pushLogoutCallback");
14
+ /**
15
+ * This hook is used to listen to callkeep events and do the necessary actions
16
+ */
17
+ function setupIosCallKeepEvents(pushConfig) {
18
+ if (_reactNative.Platform.OS !== 'ios' || !pushConfig.ios.pushProviderName) {
19
+ return;
20
+ }
21
+ if (!pushConfig.android.incomingCallChannel) {
22
+ // TODO: remove this check and find a better way once we have telecom integration for android
23
+ _videoClient.videoLoggerSystem.getLogger('setupIosCallKeepEvents').debug('android incomingCallChannel is not defined, so skipping the setupIosCallKeepEvents');
24
+ return;
25
+ }
26
+ const logger = _videoClient.videoLoggerSystem.getLogger('setupIosCallKeepEvents');
27
+ const callkeep = (0, _libs.getCallKeepLib)();
28
+ async function getCallCid(callUUID) {
29
+ try {
30
+ const call_cid = await _reactNative.NativeModules.StreamVideoReactNative.getIncomingCallCid(callUUID);
31
+ // in a case that voipPushNotificationCallCId$ is empty (this should not happen as voipPushNotificationCallCId$ is updated in push reception)]
32
+ // update it with this call_cid
33
+ const voipPushNotificationCallCId = _videoClient.RxUtils.getCurrentValue(_rxSubjects.voipPushNotificationCallCId$);
34
+ if (!voipPushNotificationCallCId) {
35
+ logger.debug(`voipPushNotificationCallCId$ is empty, updating it with the call_cid: ${call_cid} for callUUID: ${callUUID}`);
36
+ _rxSubjects.voipPushNotificationCallCId$.next(call_cid);
37
+ }
38
+ return call_cid;
39
+ } catch {
40
+ logger.debug(`Error in getting call cid from native module for callUUID: ${callUUID} - probably the call was already processed, so ignoring this callkeep event`);
41
+ }
42
+ return undefined;
43
+ }
44
+ function answerCall(callUUID) {
45
+ getCallCid(callUUID).then(call_cid => {
46
+ logger.debug(`answerCall event with call_cid: ${call_cid}`);
47
+ iosCallkeepAcceptCall(call_cid, callUUID);
48
+ });
49
+ }
50
+ function endCall(callUUID) {
51
+ getCallCid(callUUID).then(call_cid => {
52
+ logger.debug(`endCall event with call_cid: ${call_cid}`);
53
+ iosCallkeepRejectCall(call_cid, callUUID, pushConfig);
54
+ });
55
+ }
56
+
57
+ /**
58
+ * CallKeep / CallKit audio-session events -> WebRTC (iOS)
59
+ *
60
+ * iOS CallKit is the authority that *activates* and *deactivates* the underlying `AVAudioSession`
61
+ * when a call is answered/ended from the system UI (lock screen, Call UI, Bluetooth, etc).
62
+ *
63
+ * WebRTC on iOS wraps `AVAudioSession` with `RTCAudioSession` and its AudioDeviceModule relies on
64
+ * being notified of those lifecycle transitions to correctly start/stop audio I/O and keep its
65
+ * internal activation state consistent (e.g. activation count, playout/recording start).
66
+ *
67
+ * If these callbacks don’t reach WebRTC, answering via the native dialer UI can result in:
68
+ * - no microphone capture / one-way audio
69
+ * - silent playout until the app forces an audio reconfiguration
70
+ * - flaky audio routing (speaker/earpiece/Bluetooth) across subsequent calls
71
+ *
72
+ * We forward CallKeep’s `didActivateAudioSession` / `didDeactivateAudioSession` events to WebRTC’s
73
+ * `RTCAudioSession.audioSessionDidActivate()` / `audioSessionDidDeactivate()` methods.
74
+ */
75
+ function didActivateAudioSession() {
76
+ logger.debug('didActivateAudioSession');
77
+ _reactNativeWebrtc.RTCAudioSession.audioSessionDidActivate();
78
+ }
79
+ function didDeactivateAudioSession() {
80
+ logger.debug('didDeactivateAudioSession');
81
+ _reactNativeWebrtc.RTCAudioSession.audioSessionDidDeactivate();
82
+ }
83
+ function didDisplayIncomingCall(callUUID, payload) {
84
+ const voipPushNotification = (0, _libs.getVoipPushNotificationLib)();
85
+ // @ts-expect-error - call_cid is not part of RNCallKeepEventPayload
86
+ const call_cid = payload?.call_cid;
87
+ logger.debug(`didDisplayIncomingCall event with callUUID: ${callUUID} call_cid: ${call_cid}`);
88
+ if (call_cid) {
89
+ if (_reactNative.AppState.currentState === 'background') {
90
+ (0, _utils.processCallFromPushInBackground)(pushConfig, call_cid, 'backgroundDelivered');
91
+ }
92
+ _rxSubjects.voipCallkeepCallOnForegroundMap$.next({
93
+ uuid: callUUID,
94
+ cid: call_cid
95
+ });
96
+ }
97
+ voipPushNotification.onVoipNotificationCompleted(callUUID);
98
+ }
99
+ const {
100
+ remove: removeAnswerCall
101
+ } = callkeep.addEventListener('answerCall', ({
102
+ callUUID
103
+ }) => {
104
+ answerCall(callUUID);
105
+ });
106
+ const {
107
+ remove: removeEndCall
108
+ } = callkeep.addEventListener('endCall', ({
109
+ callUUID
110
+ }) => {
111
+ endCall(callUUID);
112
+ });
113
+ const {
114
+ remove: removeDisplayIncomingCall
115
+ } = callkeep.addEventListener('didDisplayIncomingCall', ({
116
+ callUUID,
117
+ payload
118
+ }) => {
119
+ didDisplayIncomingCall(callUUID, payload);
120
+ });
121
+ const {
122
+ remove: removeDidActivateAudioSession
123
+ } = callkeep.addEventListener('didActivateAudioSession', () => {
124
+ didActivateAudioSession();
125
+ });
126
+ const {
127
+ remove: removeDidDeactivateAudioSession
128
+ } = callkeep.addEventListener('didDeactivateAudioSession', () => {
129
+ didDeactivateAudioSession();
130
+ });
131
+ const {
132
+ remove: removeDidLoadWithEvents
133
+ } = callkeep.addEventListener('didLoadWithEvents', events => {
134
+ if (!events || !Array.isArray(events) || events.length < 1) {
135
+ return;
136
+ }
137
+ events.forEach(event => {
138
+ const {
139
+ name,
140
+ data
141
+ } = event;
142
+ if (name === 'RNCallKeepDidDisplayIncomingCall') {
143
+ didDisplayIncomingCall(data.callUUID, data.payload);
144
+ } else if (name === 'RNCallKeepPerformAnswerCallAction') {
145
+ answerCall(data.callUUID);
146
+ } else if (name === 'RNCallKeepPerformEndCallAction') {
147
+ endCall(data.callUUID);
148
+ } else if (name === 'RNCallKeepDidActivateAudioSession') {
149
+ didActivateAudioSession();
150
+ } else if (name === 'RNCallKeepDidDeactivateAudioSession') {
151
+ didDeactivateAudioSession();
152
+ }
153
+ });
154
+ });
155
+ (0, _pushLogoutCallback.setPushLogoutCallback)(async () => {
156
+ removeAnswerCall();
157
+ removeEndCall();
158
+ removeDisplayIncomingCall();
159
+ removeDidActivateAudioSession();
160
+ removeDidDeactivateAudioSession();
161
+ removeDidLoadWithEvents();
162
+ });
163
+ }
164
+ const iosCallkeepAcceptCall = (call_cid, callUUIDFromCallkeep) => {
165
+ if (!shouldProcessCallFromCallkeep(call_cid, callUUIDFromCallkeep)) {
166
+ return;
167
+ }
168
+ (0, _utils.clearPushWSEventSubscriptions)(call_cid);
169
+ // to call end callkeep later if ended in app and not through callkeep
170
+ _rxSubjects.voipCallkeepAcceptedCallOnNativeDialerMap$.next({
171
+ uuid: callUUIDFromCallkeep,
172
+ cid: call_cid
173
+ });
174
+ // to process the call in the app
175
+ _rxSubjects.pushAcceptedIncomingCallCId$.next(call_cid);
176
+ // no need to keep these references anymore
177
+ _rxSubjects.voipCallkeepCallOnForegroundMap$.next(undefined);
178
+ };
179
+ const iosCallkeepRejectCall = async (call_cid, callUUIDFromCallkeep, pushConfig) => {
180
+ if (!shouldProcessCallFromCallkeep(call_cid, callUUIDFromCallkeep)) {
181
+ return;
182
+ }
183
+ (0, _utils.clearPushWSEventSubscriptions)(call_cid);
184
+ // remove the references if the call_cid matches
185
+ const voipPushNotificationCallCId = _videoClient.RxUtils.getCurrentValue(_rxSubjects.voipPushNotificationCallCId$);
186
+ if (voipPushNotificationCallCId === call_cid) {
187
+ _rxSubjects.voipCallkeepAcceptedCallOnNativeDialerMap$.next(undefined);
188
+ _rxSubjects.voipCallkeepCallOnForegroundMap$.next(undefined);
189
+ _rxSubjects.voipPushNotificationCallCId$.next(undefined);
190
+ }
191
+ await (0, _utils.processCallFromPushInBackground)(pushConfig, call_cid, 'decline');
192
+ await _reactNative.NativeModules.StreamVideoReactNative?.removeIncomingCall(call_cid);
193
+ };
194
+
195
+ /**
196
+ * Helper function to determine if the answer/end call event from callkeep must be processed
197
+ * Just checks if we have a valid call_cid and acts as a type guard for call_cid
198
+ */
199
+ const shouldProcessCallFromCallkeep = (call_cid, callUUIDFromCallkeep) => {
200
+ if (!call_cid || !callUUIDFromCallkeep) {
201
+ return false;
202
+ }
203
+ return true;
204
+ };
205
+ //# sourceMappingURL=setupIosCallKeepEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_rxSubjects","require","_videoClient","_libs","_utils","_reactNative","_reactNativeWebrtc","_pushLogoutCallback","setupIosCallKeepEvents","pushConfig","Platform","OS","ios","pushProviderName","android","incomingCallChannel","videoLoggerSystem","getLogger","debug","logger","callkeep","getCallKeepLib","getCallCid","callUUID","call_cid","NativeModules","StreamVideoReactNative","getIncomingCallCid","voipPushNotificationCallCId","RxUtils","getCurrentValue","voipPushNotificationCallCId$","next","undefined","answerCall","then","iosCallkeepAcceptCall","endCall","iosCallkeepRejectCall","didActivateAudioSession","RTCAudioSession","audioSessionDidActivate","didDeactivateAudioSession","audioSessionDidDeactivate","didDisplayIncomingCall","payload","voipPushNotification","getVoipPushNotificationLib","AppState","currentState","processCallFromPushInBackground","voipCallkeepCallOnForegroundMap$","uuid","cid","onVoipNotificationCompleted","remove","removeAnswerCall","addEventListener","removeEndCall","removeDisplayIncomingCall","removeDidActivateAudioSession","removeDidDeactivateAudioSession","removeDidLoadWithEvents","events","Array","isArray","length","forEach","event","name","data","setPushLogoutCallback","callUUIDFromCallkeep","shouldProcessCallFromCallkeep","clearPushWSEventSubscriptions","voipCallkeepAcceptedCallOnNativeDialerMap$","pushAcceptedIncomingCallCId$","removeIncomingCall"],"sourceRoot":"../../../../src","sources":["utils/push/setupIosCallKeepEvents.ts"],"mappings":"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","ignoreList":[]}
@@ -4,13 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.setupIosVoipPushEvents = setupIosVoipPushEvents;
7
+ var _libs = require("./libs");
7
8
  var _reactNative = require("react-native");
8
9
  var _ios = require("./internal/ios");
9
10
  var _pushLogoutCallback = require("../internal/pushLogoutCallback");
10
11
  var _videoClient = require("@stream-io/video-client");
11
- var _libs = require("./libs");
12
- // import { getVoipPushNotificationLib } from './libs';
13
-
14
12
  function setupIosVoipPushEvents(pushConfig) {
15
13
  if (_reactNative.Platform.OS !== 'ios' || !pushConfig.ios?.pushProviderName) {
16
14
  return;
@@ -21,13 +19,14 @@ function setupIosVoipPushEvents(pushConfig) {
21
19
  logger.debug('ios pushProviderName is not defined, so skipping the setupIosVoipPushEvents');
22
20
  return;
23
21
  }
24
- const callingx = (0, _libs.getCallingxLib)();
25
- const voipNotificationReceivedListener = callingx.addEventListener('voipNotificationReceived', params => {
26
- (0, _ios.onVoipNotificationReceived)(params, pushConfig);
22
+ const voipPushNotification = (0, _libs.getVoipPushNotificationLib)();
23
+ logger.debug('notification event listener added');
24
+ voipPushNotification.addEventListener('notification', notification => {
25
+ (0, _ios.onVoipNotificationReceived)(notification, pushConfig);
27
26
  });
28
27
  (0, _pushLogoutCallback.setPushLogoutCallback)(async () => {
29
28
  _videoClient.videoLoggerSystem.getLogger('setPushLogoutCallback').debug('notification event listener removed');
30
- voipNotificationReceivedListener.remove();
29
+ voipPushNotification.removeEventListener('notification');
31
30
  });
32
31
  }
33
32
  //# sourceMappingURL=setupIosVoipPushEvents.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_ios","_pushLogoutCallback","_videoClient","_libs","setupIosVoipPushEvents","pushConfig","Platform","OS","ios","pushProviderName","logger","videoLoggerSystem","getLogger","debug","callingx","getCallingxLib","voipNotificationReceivedListener","addEventListener","params","onVoipNotificationReceived","setPushLogoutCallback","remove"],"sourceRoot":"../../../../src","sources":["utils/push/setupIosVoipPushEvents.ts"],"mappings":";;;;;;AAEA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,IAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AAEA,IAAAG,YAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AAPA;;AASO,SAASK,sBAAsBA,CACpCC,UAAkD,EAClD;EACA,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,IAAI,CAACF,UAAU,CAACG,GAAG,EAAEC,gBAAgB,EAAE;IAC9D;EACF;EACA,MAAMC,MAAM,GAAGC,8BAAiB,CAACC,SAAS,CAAC,wBAAwB,CAAC;EACpE,IAAI,CAACP,UAAU,CAACG,GAAG,CAACC,gBAAgB,EAAE;IACpC;IACAC,MAAM,CAACG,KAAK,CACV,6EACF,CAAC;IACD;EACF;EAEA,MAAMC,QAAQ,GAAG,IAAAC,oBAAc,EAAC,CAAC;EACjC,MAAMC,gCAAgC,GAAGF,QAAQ,CAACG,gBAAgB,CAChE,0BAA0B,EACzBC,MAAM,IAAK;IACV,IAAAC,+BAA0B,EAACD,MAAM,EAAEb,UAAU,CAAC;EAChD,CACF,CAAC;EAED,IAAAe,yCAAqB,EAAC,YAAY;IAChCT,8BAAiB,CACdC,SAAS,CAAC,uBAAuB,CAAC,CAClCC,KAAK,CAAC,qCAAqC,CAAC;IAC/CG,gCAAgC,CAACK,MAAM,CAAC,CAAC;EAC3C,CAAC,CAAC;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["_libs","require","_reactNative","_ios","_pushLogoutCallback","_videoClient","setupIosVoipPushEvents","pushConfig","Platform","OS","ios","pushProviderName","logger","videoLoggerSystem","getLogger","debug","voipPushNotification","getVoipPushNotificationLib","addEventListener","notification","onVoipNotificationReceived","setPushLogoutCallback","removeEventListener"],"sourceRoot":"../../../../src","sources":["utils/push/setupIosVoipPushEvents.ts"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,IAAA,GAAAF,OAAA;AACA,IAAAG,mBAAA,GAAAH,OAAA;AAEA,IAAAI,YAAA,GAAAJ,OAAA;AAEO,SAASK,sBAAsBA,CACpCC,UAAkD,EAClD;EACA,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,IAAI,CAACF,UAAU,CAACG,GAAG,EAAEC,gBAAgB,EAAE;IAC9D;EACF;EACA,MAAMC,MAAM,GAAGC,8BAAiB,CAACC,SAAS,CAAC,wBAAwB,CAAC;EACpE,IAAI,CAACP,UAAU,CAACG,GAAG,CAACC,gBAAgB,EAAE;IACpC;IACAC,MAAM,CAACG,KAAK,CACV,6EACF,CAAC;IACD;EACF;EACA,MAAMC,oBAAoB,GAAG,IAAAC,gCAA0B,EAAC,CAAC;EAEzDL,MAAM,CAACG,KAAK,CAAC,mCAAmC,CAAC;EACjDC,oBAAoB,CAACE,gBAAgB,CAAC,cAAc,EAAGC,YAAY,IAAK;IACtE,IAAAC,+BAA0B,EAACD,YAAY,EAAEZ,UAAU,CAAC;EACtD,CAAC,CAAC;EACF,IAAAc,yCAAqB,EAAC,YAAY;IAChCR,8BAAiB,CACdC,SAAS,CAAC,uBAAuB,CAAC,CAClCC,KAAK,CAAC,qCAAqC,CAAC;IAC/CC,oBAAoB,CAACM,mBAAmB,CAAC,cAAc,CAAC;EAC1D,CAAC,CAAC;AACJ","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.29.1-beta.0';
7
+ const version = exports.version = '1.29.2';
8
8
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["version","exports"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":";;;;;;AAAO,MAAMA,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAG,eAAe","ignoreList":[]}
1
+ {"version":3,"names":["version","exports"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":";;;;;;AAAO,MAAMA,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAG,QAAQ","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  import { useIosVoipPushEventsSetupEffect } from './useIosVoipPushEventsSetupEffect';
2
+ import { useProcessPushCallEffect } from './useProcessPushCallEffect';
2
3
  import { useInitAndroidTokenAndRest } from './useInitAndroidTokenAndRest';
3
4
  import { useIosInitRemoteNotifications } from './useIosInitRemoteNotifications';
4
5
  import { useProcessPushNonRingingCallEffect } from './useProcessPushNonRingingCallEffect';
@@ -11,6 +12,7 @@ export const usePushRegisterEffect = () => {
11
12
  useIosInitRemoteNotifications();
12
13
  useIosVoipPushEventsSetupEffect();
13
14
  useProcessPushNonRingingCallEffect();
15
+ useProcessPushCallEffect();
14
16
  useInitAndroidTokenAndRest();
15
17
  };
16
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useIosVoipPushEventsSetupEffect","useInitAndroidTokenAndRest","useIosInitRemoteNotifications","useProcessPushNonRingingCallEffect","usePushRegisterEffect"],"sourceRoot":"../../../../src","sources":["hooks/push/index.ts"],"mappings":"AAAA,SAASA,+BAA+B,QAAQ,mCAAmC;AACnF,SAASC,0BAA0B,QAAQ,8BAA8B;AACzE,SAASC,6BAA6B,QAAQ,iCAAiC;AAC/E,SAASC,kCAAkC,QAAQ,sCAAsC;;AAEzF;AACA;AACA;AACA;AACA,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;EACzCF,6BAA6B,CAAC,CAAC;EAC/BF,+BAA+B,CAAC,CAAC;EACjCG,kCAAkC,CAAC,CAAC;EACpCF,0BAA0B,CAAC,CAAC;AAC9B,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useIosVoipPushEventsSetupEffect","useProcessPushCallEffect","useInitAndroidTokenAndRest","useIosInitRemoteNotifications","useProcessPushNonRingingCallEffect","usePushRegisterEffect"],"sourceRoot":"../../../../src","sources":["hooks/push/index.ts"],"mappings":"AAAA,SAASA,+BAA+B,QAAQ,mCAAmC;AACnF,SAASC,wBAAwB,QAAQ,4BAA4B;AACrE,SAASC,0BAA0B,QAAQ,8BAA8B;AACzE,SAASC,6BAA6B,QAAQ,iCAAiC;AAC/E,SAASC,kCAAkC,QAAQ,sCAAsC;;AAEzF;AACA;AACA;AACA;AACA,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;EACzCF,6BAA6B,CAAC,CAAC;EAC/BH,+BAA+B,CAAC,CAAC;EACjCI,kCAAkC,CAAC,CAAC;EACpCH,wBAAwB,CAAC,CAAC;EAC1BC,0BAA0B,CAAC,CAAC;AAC9B,CAAC","ignoreList":[]}
@@ -0,0 +1,153 @@
1
+ import { CallingState, RxUtils, videoLoggerSystem } from '@stream-io/video-client';
2
+ import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
3
+ import { NativeModules, Platform } from 'react-native';
4
+ import { useEffect, useState } from 'react';
5
+ import { StreamVideoRN } from '../../utils';
6
+ import { getCallKeepLib } from '../../utils/push/libs';
7
+ import { voipCallkeepAcceptedCallOnNativeDialerMap$, voipCallkeepCallOnForegroundMap$, voipPushNotificationCallCId$ } from '../../utils/push/internal/rxSubjects';
8
+ const isNonActiveCallingState = callingState => {
9
+ return callingState === CallingState.IDLE || callingState === CallingState.UNKNOWN || callingState === CallingState.LEFT;
10
+ };
11
+ const isAcceptedCallingState = callingState => {
12
+ return callingState === CallingState.JOINING || callingState === CallingState.JOINED;
13
+ };
14
+ const unsubscribeCallkeepEvents = async activeCallCid => {
15
+ const voipPushNotificationCallCId = RxUtils.getCurrentValue(voipPushNotificationCallCId$);
16
+ if (activeCallCid && activeCallCid === voipPushNotificationCallCId) {
17
+ // callkeep events should not be listened anymore so clear the call cid
18
+ voipPushNotificationCallCId$.next(undefined);
19
+ }
20
+ return await NativeModules.StreamVideoReactNative?.removeIncomingCall(activeCallCid);
21
+ };
22
+ const logger = videoLoggerSystem.getLogger('useIosCallkeepWithCallingStateEffect');
23
+ const log = message => {
24
+ logger.warn(message);
25
+ };
26
+
27
+ /**
28
+ * This hook is used to inform the callkeep library that the call has been joined or ended.
29
+ */
30
+ export const useIosCallkeepWithCallingStateEffect = () => {
31
+ const activeCall = useCall();
32
+ const {
33
+ useCallCallingState
34
+ } = useCallStateHooks();
35
+ const callingState = useCallCallingState();
36
+ const [acceptedForegroundCallkeepMap, setAcceptedForegroundCallkeepMap] = useState();
37
+ useEffect(() => {
38
+ return () => {
39
+ const pushConfig = StreamVideoRN.getConfig().push;
40
+ if (Platform.OS !== 'ios' || !pushConfig || !pushConfig.ios?.pushProviderName) {
41
+ return;
42
+ }
43
+ if (!pushConfig.android.incomingCallChannel) {
44
+ // TODO: remove this check and find a better way once we have telecom integration for android
45
+ return;
46
+ }
47
+ const callkeep = getCallKeepLib();
48
+ // if the component is unmounted and the callID was not reported to callkeep, then report it now
49
+ if (acceptedForegroundCallkeepMap) {
50
+ log(`Ending call in callkeep: ${acceptedForegroundCallkeepMap.cid}, reason: component unmounted and call was present in acceptedForegroundCallkeepMap`);
51
+ unsubscribeCallkeepEvents(acceptedForegroundCallkeepMap.cid).then(() => callkeep.endCall(acceptedForegroundCallkeepMap.uuid));
52
+ }
53
+ };
54
+ }, [acceptedForegroundCallkeepMap]);
55
+ const activeCallCid = activeCall?.cid;
56
+ useEffect(() => {
57
+ return () => {
58
+ const pushConfig = StreamVideoRN.getConfig().push;
59
+ if (Platform.OS !== 'ios' || !pushConfig || !pushConfig.ios?.pushProviderName || !activeCallCid) {
60
+ return;
61
+ }
62
+ if (!pushConfig.android.incomingCallChannel) {
63
+ // TODO: remove this check and find a better way once we have telecom integration for android
64
+ return;
65
+ }
66
+ const nativeDialerAcceptedCallMap = RxUtils.getCurrentValue(voipCallkeepAcceptedCallOnNativeDialerMap$);
67
+ const foregroundIncomingCallkeepMap = RxUtils.getCurrentValue(voipCallkeepCallOnForegroundMap$);
68
+ const callkeep = getCallKeepLib();
69
+ if (activeCallCid === nativeDialerAcceptedCallMap?.cid) {
70
+ log(`Ending call in callkeep: ${activeCallCid}, reason: activeCallCid changed or was removed and call was present in nativeDialerAcceptedCallMap`);
71
+ unsubscribeCallkeepEvents(activeCallCid).then(() => callkeep.endCall(nativeDialerAcceptedCallMap.uuid));
72
+ // no need to keep this reference anymore
73
+ voipCallkeepAcceptedCallOnNativeDialerMap$.next(undefined);
74
+ } else if (activeCallCid === foregroundIncomingCallkeepMap?.cid) {
75
+ log(`Ending call in callkeep: ${activeCallCid}, reason: activeCallCid changed or was removed and call was present in foregroundIncomingCallkeepMap`);
76
+ unsubscribeCallkeepEvents(activeCallCid).then(() => callkeep.endCall(foregroundIncomingCallkeepMap.uuid));
77
+ }
78
+ };
79
+ }, [activeCallCid]);
80
+ const pushConfig = StreamVideoRN.getConfig().push;
81
+ if (Platform.OS !== 'ios' || !pushConfig || !pushConfig.ios.pushProviderName || !activeCallCid) {
82
+ return;
83
+ }
84
+ if (!pushConfig.android.incomingCallChannel) {
85
+ // TODO: remove this check and find a better way once we have telecom integration for android
86
+ return;
87
+ }
88
+
89
+ /**
90
+ * Check if current call is still needed to be accepted in callkeep
91
+ */
92
+ if (isAcceptedCallingState(callingState) && acceptedForegroundCallkeepMap?.cid !== activeCallCid) {
93
+ const callkeep = getCallKeepLib();
94
+ // push notification was displayed
95
+ // but the call has been accepted through the app and not through the native dialer
96
+ const foregroundCallkeepMap = RxUtils.getCurrentValue(voipCallkeepCallOnForegroundMap$);
97
+ if (foregroundCallkeepMap && foregroundCallkeepMap.cid === activeCallCid) {
98
+ log(
99
+ // @ts-expect-error - types issue
100
+ `Accepting call in callkeep: ${activeCallCid}, reason: callingstate went to ${CallingState[callingState]} and call was present in foregroundCallkeepMap`);
101
+ // no need to keep this reference anymore
102
+ voipCallkeepCallOnForegroundMap$.next(undefined);
103
+ NativeModules.StreamVideoReactNative?.removeIncomingCall(activeCallCid).then(() => callkeep.answerIncomingCall(foregroundCallkeepMap.uuid));
104
+ // this call should be accepted in callkeep
105
+ setAcceptedForegroundCallkeepMap(foregroundCallkeepMap);
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Check if current call is still needed to be ended in callkeep
111
+ */
112
+ if (isNonActiveCallingState(callingState)) {
113
+ const callkeep = getCallKeepLib();
114
+
115
+ // this was a previously joined call which had push notification displayed
116
+ // the call was accepted through the app and not through native dialer
117
+ // the call was left using the leave button in the app and not through native dialer
118
+ if (activeCallCid === acceptedForegroundCallkeepMap?.cid) {
119
+ log(
120
+ // @ts-expect-error - types issue
121
+ `Ending call in callkeep: ${activeCallCid}, reason: callingstate went to ${CallingState[callingState]} and call was present in acceptedForegroundCallkeepMap`);
122
+ unsubscribeCallkeepEvents(activeCallCid).then(() => callkeep.endCall(acceptedForegroundCallkeepMap.uuid));
123
+ setAcceptedForegroundCallkeepMap(undefined);
124
+ return;
125
+ }
126
+ // this was a call which had push notification displayed but never joined
127
+ // the user rejected in the app and not from native dialer
128
+ const foregroundIncomingCallkeepMap = RxUtils.getCurrentValue(voipCallkeepCallOnForegroundMap$);
129
+ if (activeCallCid === foregroundIncomingCallkeepMap?.cid) {
130
+ log(
131
+ // @ts-expect-error - types issue
132
+ `Ending call in callkeep: ${activeCallCid}, reason: callingstate went to ${CallingState[callingState]} and call was present in foregroundIncomingCallkeepMap`);
133
+ unsubscribeCallkeepEvents(activeCallCid).then(() => callkeep.endCall(foregroundIncomingCallkeepMap.uuid));
134
+ // no need to keep this reference anymore
135
+ voipCallkeepCallOnForegroundMap$.next(undefined);
136
+ return;
137
+ }
138
+ // this was a previously joined call
139
+ // it was an accepted call from native dialer and not from the app
140
+ // the user left using the leave button in the app
141
+ const nativeDialerAcceptedCallMap = RxUtils.getCurrentValue(voipCallkeepAcceptedCallOnNativeDialerMap$);
142
+ if (activeCallCid === nativeDialerAcceptedCallMap?.cid) {
143
+ log(
144
+ // @ts-expect-error - types issue
145
+ `Ending call in callkeep: ${activeCallCid}, reason: callingstate went to ${CallingState[callingState]} and call was present in nativeDialerAcceptedCallMap`);
146
+ unsubscribeCallkeepEvents(activeCallCid).then(() => callkeep.endCall(nativeDialerAcceptedCallMap.uuid));
147
+ // no need to keep this reference anymore
148
+ voipCallkeepAcceptedCallOnNativeDialerMap$.next(undefined);
149
+ return;
150
+ }
151
+ }
152
+ };
153
+ //# sourceMappingURL=useIosCallkeepWithCallingStateEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CallingState","RxUtils","videoLoggerSystem","useCall","useCallStateHooks","NativeModules","Platform","useEffect","useState","StreamVideoRN","getCallKeepLib","voipCallkeepAcceptedCallOnNativeDialerMap$","voipCallkeepCallOnForegroundMap$","voipPushNotificationCallCId$","isNonActiveCallingState","callingState","IDLE","UNKNOWN","LEFT","isAcceptedCallingState","JOINING","JOINED","unsubscribeCallkeepEvents","activeCallCid","voipPushNotificationCallCId","getCurrentValue","next","undefined","StreamVideoReactNative","removeIncomingCall","logger","getLogger","log","message","warn","useIosCallkeepWithCallingStateEffect","activeCall","useCallCallingState","acceptedForegroundCallkeepMap","setAcceptedForegroundCallkeepMap","pushConfig","getConfig","push","OS","ios","pushProviderName","android","incomingCallChannel","callkeep","cid","then","endCall","uuid","nativeDialerAcceptedCallMap","foregroundIncomingCallkeepMap","foregroundCallkeepMap","answerIncomingCall"],"sourceRoot":"../../../../src","sources":["hooks/push/useIosCallkeepWithCallingStateEffect.ts"],"mappings":"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","ignoreList":[]}
@@ -1,11 +1,11 @@
1
1
  import { useEffect, useRef, useState } from 'react';
2
+ import { getVoipPushNotificationLib } from '../../utils/push/libs';
2
3
  import { Platform } from 'react-native';
3
4
  import { StreamVideoRN } from '../../utils';
4
5
  import { onVoipNotificationReceived } from '../../utils/push/internal/ios';
5
6
  import { useConnectedUser, useStreamVideoClient } from '@stream-io/video-react-bindings';
6
7
  import { setPushLogoutCallback } from '../../utils/internal/pushLogoutCallback';
7
8
  import { videoLoggerSystem } from '@stream-io/video-client';
8
- import { getCallingxLibIfAvailable } from '../../utils/push/libs';
9
9
  const logger = videoLoggerSystem.getLogger('useIosVoipPushEventsSetupEffect');
10
10
 
11
11
  /* VoipPushNotificationLib has support for only one listener type at a time
@@ -23,7 +23,6 @@ function setLogoutCallback(client, token, lastVoipTokenRef) {
23
23
  };
24
24
  try {
25
25
  await client.removeDevice(token);
26
- logger.debug('PushLogoutCallback - Removed voip token', token);
27
26
  } catch (err) {
28
27
  logger.warn('PushLogoutCallback - Failed to remove voip token', err);
29
28
  }
@@ -78,10 +77,20 @@ export const useIosVoipPushEventsSetupEffect = () => {
78
77
  useEffect(() => {
79
78
  const pushConfig = StreamVideoRN.getConfig().push;
80
79
  const pushProviderName = pushConfig?.ios.pushProviderName;
81
- const callingx = getCallingxLibIfAvailable();
82
- if (Platform.OS !== 'ios' || !client || !pushProviderName || !callingx) {
80
+ if (Platform.OS !== 'ios' || !client || !pushProviderName) {
83
81
  return;
84
82
  }
83
+ if (!pushConfig.android.incomingCallChannel) {
84
+ // TODO: remove this check and find a better way once we have telecom integration for android
85
+ logger.debug('android incomingCallChannel is not defined, so skipping the useIosVoipPushEventsSetupEffect');
86
+ return;
87
+ }
88
+ const voipPushNotification = getVoipPushNotificationLib();
89
+
90
+ // even though we do this natively, we have to still register here again
91
+ // natively this will make sure "register" event for JS is sent with the last push token
92
+ // Necessary if client changed before we got the event here or user logged out and logged in again
93
+ voipPushNotification.registerVoipToken();
85
94
  const onTokenReceived = token => {
86
95
  const userId = client.streamClient._user?.id ?? '';
87
96
  if (client.streamClient.anonymous || !token || !userId) {
@@ -109,24 +118,27 @@ export const useIosVoipPushEventsSetupEffect = () => {
109
118
  });
110
119
  };
111
120
  // fired when PushKit give us the latest token
112
- const voipRegisterListener = callingx.addEventListener('voipNotificationsRegistered', ({
113
- token
114
- }) => {
121
+ voipPushNotification.addEventListener('register', token => {
115
122
  onTokenReceived(token);
116
123
  });
117
124
 
118
- // this will return events that were fired before js bridge initialized
119
- callingx.getInitialVoipEvents().forEach(({
120
- eventName,
121
- params
122
- }) => {
123
- if (eventName === 'voipNotificationsRegistered' && 'token' in params) {
124
- onTokenReceived(params.token);
125
- } else if (eventName === 'voipNotificationReceived') {
126
- onVoipNotificationReceived(params, pushConfig);
125
+ // this will fire when there are events occured before js bridge initialized
126
+ voipPushNotification.addEventListener('didLoadWithEvents', events => {
127
+ if (!events || !Array.isArray(events) || events.length < 1) {
128
+ return;
129
+ }
130
+ for (const voipPushEvent of events) {
131
+ const {
132
+ name,
133
+ data
134
+ } = voipPushEvent;
135
+ if (name === 'RNVoipPushRemoteNotificationsRegisteredEvent') {
136
+ onTokenReceived(data);
137
+ } else if (name === 'RNVoipPushRemoteNotificationReceivedEvent') {
138
+ onVoipNotificationReceived(data, pushConfig);
139
+ }
127
140
  }
128
141
  });
129
- callingx.registerVoipToken();
130
142
  lastListener.count += 1;
131
143
  const currentListenerCount = lastListener.count;
132
144
  return () => {
@@ -136,7 +148,8 @@ export const useIosVoipPushEventsSetupEffect = () => {
136
148
  return;
137
149
  }
138
150
  logger.debug(`Voip event listeners are removed for user: ${userId}`);
139
- voipRegisterListener.remove();
151
+ voipPushNotification.removeEventListener('didLoadWithEvents');
152
+ voipPushNotification.removeEventListener('register');
140
153
  };
141
154
  }, [client]);
142
155
  };
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","useState","Platform","StreamVideoRN","onVoipNotificationReceived","useConnectedUser","useStreamVideoClient","setPushLogoutCallback","videoLoggerSystem","getCallingxLibIfAvailable","logger","getLogger","lastListener","count","setLogoutCallback","client","token","lastVoipTokenRef","current","userId","removeDevice","debug","err","warn","useIosVoipPushEventsSetupEffect","connectedUserId","id","unsentToken","setUnsentToken","pushProviderName","getConfig","push","ios","tokenToSend","addVoipDevice","then","undefined","catch","error","pushConfig","callingx","OS","onTokenReceived","streamClient","_user","anonymous","reason","lastVoipToken","voipRegisterListener","addEventListener","getInitialVoipEvents","forEach","eventName","params","registerVoipToken","currentListenerCount","remove"],"sourceRoot":"../../../../src","sources":["hooks/push/useIosVoipPushEventsSetupEffect.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useRef","useState","getVoipPushNotificationLib","Platform","StreamVideoRN","onVoipNotificationReceived","useConnectedUser","useStreamVideoClient","setPushLogoutCallback","videoLoggerSystem","logger","getLogger","lastListener","count","setLogoutCallback","client","token","lastVoipTokenRef","current","userId","removeDevice","err","warn","useIosVoipPushEventsSetupEffect","connectedUserId","id","unsentToken","setUnsentToken","pushProviderName","getConfig","push","ios","tokenToSend","debug","addVoipDevice","then","undefined","catch","error","pushConfig","OS","android","incomingCallChannel","voipPushNotification","registerVoipToken","onTokenReceived","streamClient","_user","anonymous","reason","lastVoipToken","addEventListener","events","Array","isArray","length","voipPushEvent","name","data","currentListenerCount","removeEventListener"],"sourceRoot":"../../../../src","sources":["hooks/push/useIosVoipPushEventsSetupEffect.ts"],"mappings":"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","ignoreList":[]}