@stream-io/video-react-native-sdk 1.39.0 → 1.40.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 (692) hide show
  1. package/CHANGELOG.md +24 -6
  2. package/android/src/main/java/com/streamvideo/reactnative/StreamVideoReactNativeModule.kt +81 -0
  3. package/android/src/main/java/com/streamvideo/reactnative/recorder/AudioPipeline.kt +436 -0
  4. package/android/src/main/java/com/streamvideo/reactnative/recorder/EncoderConstants.kt +17 -0
  5. package/android/src/main/java/com/streamvideo/reactnative/recorder/PipelineHost.kt +36 -0
  6. package/android/src/main/java/com/streamvideo/reactnative/recorder/RecorderPlaybackSamplesSink.kt +60 -0
  7. package/android/src/main/java/com/streamvideo/reactnative/recorder/RecorderVideoSink.kt +31 -0
  8. package/android/src/main/java/com/streamvideo/reactnative/recorder/TracksRecorderManager.kt +338 -0
  9. package/android/src/main/java/com/streamvideo/reactnative/recorder/VideoPipeline.kt +472 -0
  10. package/dist/commonjs/components/Call/CallContent/CallContent.js +93 -48
  11. package/dist/commonjs/components/Call/CallContent/CallContent.js.map +1 -1
  12. package/dist/commonjs/components/Call/CallContent/RTCViewPipIOS.js +22 -20
  13. package/dist/commonjs/components/Call/CallContent/RTCViewPipIOS.js.map +1 -1
  14. package/dist/commonjs/components/Call/CallContent/RTCViewPipNative.js +2 -1
  15. package/dist/commonjs/components/Call/CallContent/RTCViewPipNative.js.map +1 -1
  16. package/dist/commonjs/components/Call/CallControls/AcceptCallButton.js +10 -6
  17. package/dist/commonjs/components/Call/CallControls/AcceptCallButton.js.map +1 -1
  18. package/dist/commonjs/components/Call/CallControls/CallControls.js +7 -5
  19. package/dist/commonjs/components/Call/CallControls/CallControls.js.map +1 -1
  20. package/dist/commonjs/components/Call/CallControls/CallControlsButton.js +11 -8
  21. package/dist/commonjs/components/Call/CallControls/CallControlsButton.js.map +1 -1
  22. package/dist/commonjs/components/Call/CallControls/HangupCallButton.js +10 -6
  23. package/dist/commonjs/components/Call/CallControls/HangupCallButton.js.map +1 -1
  24. package/dist/commonjs/components/Call/CallControls/IncomingCallControls.js +11 -9
  25. package/dist/commonjs/components/Call/CallControls/IncomingCallControls.js.map +1 -1
  26. package/dist/commonjs/components/Call/CallControls/LobbyControls.js +5 -3
  27. package/dist/commonjs/components/Call/CallControls/LobbyControls.js.map +1 -1
  28. package/dist/commonjs/components/Call/CallControls/OutgoingCallControls.js +12 -9
  29. package/dist/commonjs/components/Call/CallControls/OutgoingCallControls.js.map +1 -1
  30. package/dist/commonjs/components/Call/CallControls/ReactionsButton.js +22 -15
  31. package/dist/commonjs/components/Call/CallControls/ReactionsButton.js.map +1 -1
  32. package/dist/commonjs/components/Call/CallControls/RejectCallButton.js +10 -6
  33. package/dist/commonjs/components/Call/CallControls/RejectCallButton.js.map +1 -1
  34. package/dist/commonjs/components/Call/CallControls/ScreenShareToggleButton.js +15 -11
  35. package/dist/commonjs/components/Call/CallControls/ScreenShareToggleButton.js.map +1 -1
  36. package/dist/commonjs/components/Call/CallControls/ToggleAudioPreviewButton.js +13 -9
  37. package/dist/commonjs/components/Call/CallControls/ToggleAudioPreviewButton.js.map +1 -1
  38. package/dist/commonjs/components/Call/CallControls/ToggleAudioPublishingButton.js +18 -13
  39. package/dist/commonjs/components/Call/CallControls/ToggleAudioPublishingButton.js.map +1 -1
  40. package/dist/commonjs/components/Call/CallControls/ToggleCameraFaceButton.js +17 -12
  41. package/dist/commonjs/components/Call/CallControls/ToggleCameraFaceButton.js.map +1 -1
  42. package/dist/commonjs/components/Call/CallControls/ToggleVideoPreviewButton.js +13 -9
  43. package/dist/commonjs/components/Call/CallControls/ToggleVideoPreviewButton.js.map +1 -1
  44. package/dist/commonjs/components/Call/CallControls/ToggleVideoPublishingButton.js +17 -12
  45. package/dist/commonjs/components/Call/CallControls/ToggleVideoPublishingButton.js.map +1 -1
  46. package/dist/commonjs/components/Call/CallControls/internal/ReactionsPicker.js +39 -34
  47. package/dist/commonjs/components/Call/CallControls/internal/ReactionsPicker.js.map +1 -1
  48. package/dist/commonjs/components/Call/CallLayout/CallParticipantsGrid.js +17 -12
  49. package/dist/commonjs/components/Call/CallLayout/CallParticipantsGrid.js.map +1 -1
  50. package/dist/commonjs/components/Call/CallLayout/CallParticipantsSpotlight.js +36 -24
  51. package/dist/commonjs/components/Call/CallLayout/CallParticipantsSpotlight.js.map +1 -1
  52. package/dist/commonjs/components/Call/CallParticipantsList/CallParticipantsList.js +30 -28
  53. package/dist/commonjs/components/Call/CallParticipantsList/CallParticipantsList.js.map +1 -1
  54. package/dist/commonjs/components/Call/Lobby/JoinCallButton.js +10 -7
  55. package/dist/commonjs/components/Call/Lobby/JoinCallButton.js.map +1 -1
  56. package/dist/commonjs/components/Call/Lobby/Lobby.js +45 -35
  57. package/dist/commonjs/components/Call/Lobby/Lobby.js.map +1 -1
  58. package/dist/commonjs/components/Call/Lobby/LobbyFooter.js +21 -16
  59. package/dist/commonjs/components/Call/Lobby/LobbyFooter.js.map +1 -1
  60. package/dist/commonjs/components/Call/RingingCallContent/CallLeftIndicator.js +2 -1
  61. package/dist/commonjs/components/Call/RingingCallContent/CallLeftIndicator.js.map +1 -1
  62. package/dist/commonjs/components/Call/RingingCallContent/CallPreparingIndicator.js +2 -1
  63. package/dist/commonjs/components/Call/RingingCallContent/CallPreparingIndicator.js.map +1 -1
  64. package/dist/commonjs/components/Call/RingingCallContent/IncomingCall.js +32 -22
  65. package/dist/commonjs/components/Call/RingingCallContent/IncomingCall.js.map +1 -1
  66. package/dist/commonjs/components/Call/RingingCallContent/OutgoingCall.js +37 -27
  67. package/dist/commonjs/components/Call/RingingCallContent/OutgoingCall.js.map +1 -1
  68. package/dist/commonjs/components/Call/RingingCallContent/RingingCallContent.js +13 -11
  69. package/dist/commonjs/components/Call/RingingCallContent/RingingCallContent.js.map +1 -1
  70. package/dist/commonjs/components/Call/RingingCallContent/TextBasedIndicator.js +28 -22
  71. package/dist/commonjs/components/Call/RingingCallContent/TextBasedIndicator.js.map +1 -1
  72. package/dist/commonjs/components/Call/RingingCallContent/UserInfo.js +25 -22
  73. package/dist/commonjs/components/Call/RingingCallContent/UserInfo.js.map +1 -1
  74. package/dist/commonjs/components/Livestream/HostLivestream/HostLivestream.js +38 -34
  75. package/dist/commonjs/components/Livestream/HostLivestream/HostLivestream.js.map +1 -1
  76. package/dist/commonjs/components/Livestream/LivestreamControls/HostLivestreamControls.js +16 -12
  77. package/dist/commonjs/components/Livestream/LivestreamControls/HostLivestreamControls.js.map +1 -1
  78. package/dist/commonjs/components/Livestream/LivestreamControls/HostStartStreamButton.js +16 -12
  79. package/dist/commonjs/components/Livestream/LivestreamControls/HostStartStreamButton.js.map +1 -1
  80. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js +19 -14
  81. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js.map +1 -1
  82. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamMediaControls.js +5 -3
  83. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamMediaControls.js.map +1 -1
  84. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamScreenShareToggleButton.js +19 -16
  85. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamScreenShareToggleButton.js.map +1 -1
  86. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js +19 -14
  87. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js.map +1 -1
  88. package/dist/commonjs/components/Livestream/LivestreamControls/ViewerLeaveStreamButton.js +11 -8
  89. package/dist/commonjs/components/Livestream/LivestreamControls/ViewerLeaveStreamButton.js.map +1 -1
  90. package/dist/commonjs/components/Livestream/LivestreamControls/ViewerLivestreamControls.js +78 -57
  91. package/dist/commonjs/components/Livestream/LivestreamControls/ViewerLivestreamControls.js.map +1 -1
  92. package/dist/commonjs/components/Livestream/LivestreamLayout/LivestreamLayout.js +13 -46
  93. package/dist/commonjs/components/Livestream/LivestreamLayout/LivestreamLayout.js.map +1 -1
  94. package/dist/commonjs/components/Livestream/LivestreamPlayer/LivestreamEnded.js +48 -22
  95. package/dist/commonjs/components/Livestream/LivestreamPlayer/LivestreamEnded.js.map +1 -1
  96. package/dist/commonjs/components/Livestream/LivestreamPlayer/LivestreamPlayer.js +7 -5
  97. package/dist/commonjs/components/Livestream/LivestreamPlayer/LivestreamPlayer.js.map +1 -1
  98. package/dist/commonjs/components/Livestream/LivestreamTopView/DurationBadge.js +12 -9
  99. package/dist/commonjs/components/Livestream/LivestreamTopView/DurationBadge.js.map +1 -1
  100. package/dist/commonjs/components/Livestream/LivestreamTopView/FollowerCount.js +11 -7
  101. package/dist/commonjs/components/Livestream/LivestreamTopView/FollowerCount.js.map +1 -1
  102. package/dist/commonjs/components/Livestream/LivestreamTopView/HostLivestreamTopView.js +18 -13
  103. package/dist/commonjs/components/Livestream/LivestreamTopView/HostLivestreamTopView.js.map +1 -1
  104. package/dist/commonjs/components/Livestream/LivestreamTopView/LiveIndicator.js +10 -7
  105. package/dist/commonjs/components/Livestream/LivestreamTopView/LiveIndicator.js.map +1 -1
  106. package/dist/commonjs/components/Livestream/LivestreamTopView/ViewerLivestreamTopView.js +18 -13
  107. package/dist/commonjs/components/Livestream/LivestreamTopView/ViewerLivestreamTopView.js.map +1 -1
  108. package/dist/commonjs/components/Livestream/ViewerLivestream/ViewerLivestream.js +41 -37
  109. package/dist/commonjs/components/Livestream/ViewerLivestream/ViewerLivestream.js.map +1 -1
  110. package/dist/commonjs/components/Livestream/ViewerLivestream/ViewerLobby.js +33 -23
  111. package/dist/commonjs/components/Livestream/ViewerLivestream/ViewerLobby.js.map +1 -1
  112. package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js +18 -15
  113. package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js.map +1 -1
  114. package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js +20 -16
  115. package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js.map +1 -1
  116. package/dist/commonjs/components/Participant/FloatingParticipantView/index.js +55 -48
  117. package/dist/commonjs/components/Participant/FloatingParticipantView/index.js.map +1 -1
  118. package/dist/commonjs/components/Participant/ParticipantView/ParticipantLabel.js +64 -52
  119. package/dist/commonjs/components/Participant/ParticipantView/ParticipantLabel.js.map +1 -1
  120. package/dist/commonjs/components/Participant/ParticipantView/ParticipantNetworkQualityIndicator.js +30 -27
  121. package/dist/commonjs/components/Participant/ParticipantView/ParticipantNetworkQualityIndicator.js.map +1 -1
  122. package/dist/commonjs/components/Participant/ParticipantView/ParticipantReaction.js +11 -7
  123. package/dist/commonjs/components/Participant/ParticipantView/ParticipantReaction.js.map +1 -1
  124. package/dist/commonjs/components/Participant/ParticipantView/ParticipantVideoFallback.js +17 -14
  125. package/dist/commonjs/components/Participant/ParticipantView/ParticipantVideoFallback.js.map +1 -1
  126. package/dist/commonjs/components/Participant/ParticipantView/ParticipantView.js +27 -24
  127. package/dist/commonjs/components/Participant/ParticipantView/ParticipantView.js.map +1 -1
  128. package/dist/commonjs/components/Participant/ParticipantView/SpeechIndicator.js +8 -7
  129. package/dist/commonjs/components/Participant/ParticipantView/SpeechIndicator.js.map +1 -1
  130. package/dist/commonjs/components/Participant/ParticipantView/VideoRenderer/index.js +35 -32
  131. package/dist/commonjs/components/Participant/ParticipantView/VideoRenderer/index.js.map +1 -1
  132. package/dist/commonjs/components/utility/Avatar.js +18 -15
  133. package/dist/commonjs/components/utility/Avatar.js.map +1 -1
  134. package/dist/commonjs/components/utility/ScreenShareOverlay.js +35 -29
  135. package/dist/commonjs/components/utility/ScreenShareOverlay.js.map +1 -1
  136. package/dist/commonjs/contexts/BackgroundFilters.js +5 -3
  137. package/dist/commonjs/contexts/BackgroundFilters.js.map +1 -1
  138. package/dist/commonjs/contexts/ThemeContext.js +5 -3
  139. package/dist/commonjs/contexts/ThemeContext.js.map +1 -1
  140. package/dist/commonjs/contexts/internal/ScreenshotIosContext.js +5 -3
  141. package/dist/commonjs/contexts/internal/ScreenshotIosContext.js.map +1 -1
  142. package/dist/commonjs/hooks/index.js +11 -0
  143. package/dist/commonjs/hooks/index.js.map +1 -1
  144. package/dist/commonjs/hooks/useAutoEnterPiPEffect.js +5 -10
  145. package/dist/commonjs/hooks/useAutoEnterPiPEffect.js.map +1 -1
  146. package/dist/commonjs/hooks/useLoopbackRecording.js +263 -0
  147. package/dist/commonjs/hooks/useLoopbackRecording.js.map +1 -0
  148. package/dist/commonjs/hooks/useModeration.js +4 -1
  149. package/dist/commonjs/hooks/useModeration.js.map +1 -1
  150. package/dist/commonjs/icons/Back.js +8 -6
  151. package/dist/commonjs/icons/Back.js.map +1 -1
  152. package/dist/commonjs/icons/BadNetwork.js +11 -9
  153. package/dist/commonjs/icons/BadNetwork.js.map +1 -1
  154. package/dist/commonjs/icons/CameraSwitch.js +8 -6
  155. package/dist/commonjs/icons/CameraSwitch.js.map +1 -1
  156. package/dist/commonjs/icons/EndStreamIcon.js +8 -6
  157. package/dist/commonjs/icons/EndStreamIcon.js.map +1 -1
  158. package/dist/commonjs/icons/Eye.js +8 -6
  159. package/dist/commonjs/icons/Eye.js.map +1 -1
  160. package/dist/commonjs/icons/IconWrapper.js +5 -3
  161. package/dist/commonjs/icons/IconWrapper.js.map +1 -1
  162. package/dist/commonjs/icons/LivestreamControls.js +44 -39
  163. package/dist/commonjs/icons/LivestreamControls.js.map +1 -1
  164. package/dist/commonjs/icons/Lock.js +8 -6
  165. package/dist/commonjs/icons/Lock.js.map +1 -1
  166. package/dist/commonjs/icons/Maximize.js +33 -31
  167. package/dist/commonjs/icons/Maximize.js.map +1 -1
  168. package/dist/commonjs/icons/Mic.js +8 -6
  169. package/dist/commonjs/icons/Mic.js.map +1 -1
  170. package/dist/commonjs/icons/MicOff.js +8 -6
  171. package/dist/commonjs/icons/MicOff.js.map +1 -1
  172. package/dist/commonjs/icons/Phone.js +8 -6
  173. package/dist/commonjs/icons/Phone.js.map +1 -1
  174. package/dist/commonjs/icons/PhoneDown.js +8 -6
  175. package/dist/commonjs/icons/PhoneDown.js.map +1 -1
  176. package/dist/commonjs/icons/PinVertical.js +8 -6
  177. package/dist/commonjs/icons/PinVertical.js.map +1 -1
  178. package/dist/commonjs/icons/Reaction.js +8 -6
  179. package/dist/commonjs/icons/Reaction.js.map +1 -1
  180. package/dist/commonjs/icons/ScreenShare.js +8 -6
  181. package/dist/commonjs/icons/ScreenShare.js.map +1 -1
  182. package/dist/commonjs/icons/ScreenShareIndicator.js +21 -18
  183. package/dist/commonjs/icons/ScreenShareIndicator.js.map +1 -1
  184. package/dist/commonjs/icons/StartStreamIcon.js +8 -6
  185. package/dist/commonjs/icons/StartStreamIcon.js.map +1 -1
  186. package/dist/commonjs/icons/StopScreenShare.js +11 -9
  187. package/dist/commonjs/icons/StopScreenShare.js.map +1 -1
  188. package/dist/commonjs/icons/Video.js +8 -6
  189. package/dist/commonjs/icons/Video.js.map +1 -1
  190. package/dist/commonjs/icons/VideoSlash.js +8 -6
  191. package/dist/commonjs/icons/VideoSlash.js.map +1 -1
  192. package/dist/commonjs/icons/index.js +0 -66
  193. package/dist/commonjs/icons/index.js.map +1 -1
  194. package/dist/commonjs/package.json +1 -0
  195. package/dist/commonjs/providers/BusyTonePlayer.js +7 -7
  196. package/dist/commonjs/providers/BusyTonePlayer.js.map +1 -1
  197. package/dist/commonjs/providers/NoiseCancellation/NoiseCancellationProvider.js +5 -3
  198. package/dist/commonjs/providers/NoiseCancellation/NoiseCancellationProvider.js.map +1 -1
  199. package/dist/commonjs/providers/StreamCall/AppStateListener.js +3 -0
  200. package/dist/commonjs/providers/StreamCall/AppStateListener.js.map +1 -1
  201. package/dist/commonjs/providers/StreamCall/DeviceStats.js +1 -1
  202. package/dist/commonjs/providers/StreamCall/DeviceStats.js.map +1 -1
  203. package/dist/commonjs/providers/StreamCall/index.js +5 -3
  204. package/dist/commonjs/providers/StreamCall/index.js.map +1 -1
  205. package/dist/commonjs/providers/StreamVideo.js +10 -5
  206. package/dist/commonjs/providers/StreamVideo.js.map +1 -1
  207. package/dist/commonjs/utils/StreamVideoRN/index.js +0 -1
  208. package/dist/commonjs/utils/StreamVideoRN/index.js.map +1 -1
  209. package/dist/commonjs/utils/internal/callingx/callingx.js +4 -4
  210. package/dist/commonjs/utils/internal/callingx/callingx.js.map +1 -1
  211. package/dist/commonjs/utils/internal/registerSDKGlobals.js +2 -2
  212. package/dist/commonjs/utils/internal/registerSDKGlobals.js.map +1 -1
  213. package/dist/commonjs/utils/push/libs/firebaseMessaging/index.js.map +1 -1
  214. package/dist/commonjs/version.js +1 -1
  215. package/dist/module/components/Call/CallContent/CallContent.js +95 -48
  216. package/dist/module/components/Call/CallContent/CallContent.js.map +1 -1
  217. package/dist/module/components/Call/CallContent/RTCViewPipIOS.js +24 -20
  218. package/dist/module/components/Call/CallContent/RTCViewPipIOS.js.map +1 -1
  219. package/dist/module/components/Call/CallContent/RTCViewPipNative.js +4 -1
  220. package/dist/module/components/Call/CallContent/RTCViewPipNative.js.map +1 -1
  221. package/dist/module/components/Call/CallContent/index.js +2 -0
  222. package/dist/module/components/Call/CallContent/index.js.map +1 -1
  223. package/dist/module/components/Call/CallControls/AcceptCallButton.js +12 -7
  224. package/dist/module/components/Call/CallControls/AcceptCallButton.js.map +1 -1
  225. package/dist/module/components/Call/CallControls/CallControls.js +9 -6
  226. package/dist/module/components/Call/CallControls/CallControls.js.map +1 -1
  227. package/dist/module/components/Call/CallControls/CallControlsButton.js +13 -8
  228. package/dist/module/components/Call/CallControls/CallControlsButton.js.map +1 -1
  229. package/dist/module/components/Call/CallControls/HangupCallButton.js +12 -7
  230. package/dist/module/components/Call/CallControls/HangupCallButton.js.map +1 -1
  231. package/dist/module/components/Call/CallControls/IncomingCallControls.js +13 -10
  232. package/dist/module/components/Call/CallControls/IncomingCallControls.js.map +1 -1
  233. package/dist/module/components/Call/CallControls/LobbyControls.js +7 -3
  234. package/dist/module/components/Call/CallControls/LobbyControls.js.map +1 -1
  235. package/dist/module/components/Call/CallControls/OutgoingCallControls.js +14 -10
  236. package/dist/module/components/Call/CallControls/OutgoingCallControls.js.map +1 -1
  237. package/dist/module/components/Call/CallControls/ReactionsButton.js +24 -16
  238. package/dist/module/components/Call/CallControls/ReactionsButton.js.map +1 -1
  239. package/dist/module/components/Call/CallControls/RejectCallButton.js +12 -7
  240. package/dist/module/components/Call/CallControls/RejectCallButton.js.map +1 -1
  241. package/dist/module/components/Call/CallControls/ScreenShareToggleButton.js +17 -12
  242. package/dist/module/components/Call/CallControls/ScreenShareToggleButton.js.map +1 -1
  243. package/dist/module/components/Call/CallControls/ToggleAudioPreviewButton.js +15 -10
  244. package/dist/module/components/Call/CallControls/ToggleAudioPreviewButton.js.map +1 -1
  245. package/dist/module/components/Call/CallControls/ToggleAudioPublishingButton.js +20 -14
  246. package/dist/module/components/Call/CallControls/ToggleAudioPublishingButton.js.map +1 -1
  247. package/dist/module/components/Call/CallControls/ToggleCameraFaceButton.js +19 -13
  248. package/dist/module/components/Call/CallControls/ToggleCameraFaceButton.js.map +1 -1
  249. package/dist/module/components/Call/CallControls/ToggleVideoPreviewButton.js +15 -10
  250. package/dist/module/components/Call/CallControls/ToggleVideoPreviewButton.js.map +1 -1
  251. package/dist/module/components/Call/CallControls/ToggleVideoPublishingButton.js +19 -13
  252. package/dist/module/components/Call/CallControls/ToggleVideoPublishingButton.js.map +1 -1
  253. package/dist/module/components/Call/CallControls/index.js +2 -0
  254. package/dist/module/components/Call/CallControls/index.js.map +1 -1
  255. package/dist/module/components/Call/CallControls/internal/ReactionsPicker.js +41 -34
  256. package/dist/module/components/Call/CallControls/internal/ReactionsPicker.js.map +1 -1
  257. package/dist/module/components/Call/CallLayout/CallParticipantsGrid.js +19 -13
  258. package/dist/module/components/Call/CallLayout/CallParticipantsGrid.js.map +1 -1
  259. package/dist/module/components/Call/CallLayout/CallParticipantsSpotlight.js +38 -25
  260. package/dist/module/components/Call/CallLayout/CallParticipantsSpotlight.js.map +1 -1
  261. package/dist/module/components/Call/CallLayout/index.js +2 -0
  262. package/dist/module/components/Call/CallLayout/index.js.map +1 -1
  263. package/dist/module/components/Call/CallParticipantsList/CallParticipantsList.js +32 -28
  264. package/dist/module/components/Call/CallParticipantsList/CallParticipantsList.js.map +1 -1
  265. package/dist/module/components/Call/CallParticipantsList/index.js +2 -0
  266. package/dist/module/components/Call/CallParticipantsList/index.js.map +1 -1
  267. package/dist/module/components/Call/Lobby/JoinCallButton.js +12 -8
  268. package/dist/module/components/Call/Lobby/JoinCallButton.js.map +1 -1
  269. package/dist/module/components/Call/Lobby/Lobby.js +47 -36
  270. package/dist/module/components/Call/Lobby/Lobby.js.map +1 -1
  271. package/dist/module/components/Call/Lobby/LobbyFooter.js +23 -17
  272. package/dist/module/components/Call/Lobby/LobbyFooter.js.map +1 -1
  273. package/dist/module/components/Call/Lobby/index.js +2 -0
  274. package/dist/module/components/Call/Lobby/index.js.map +1 -1
  275. package/dist/module/components/Call/RingingCallContent/CallLeftIndicator.js +4 -1
  276. package/dist/module/components/Call/RingingCallContent/CallLeftIndicator.js.map +1 -1
  277. package/dist/module/components/Call/RingingCallContent/CallPreparingIndicator.js +4 -1
  278. package/dist/module/components/Call/RingingCallContent/CallPreparingIndicator.js.map +1 -1
  279. package/dist/module/components/Call/RingingCallContent/IncomingCall.js +34 -23
  280. package/dist/module/components/Call/RingingCallContent/IncomingCall.js.map +1 -1
  281. package/dist/module/components/Call/RingingCallContent/OutgoingCall.js +39 -28
  282. package/dist/module/components/Call/RingingCallContent/OutgoingCall.js.map +1 -1
  283. package/dist/module/components/Call/RingingCallContent/RingingCallContent.js +15 -12
  284. package/dist/module/components/Call/RingingCallContent/RingingCallContent.js.map +1 -1
  285. package/dist/module/components/Call/RingingCallContent/TextBasedIndicator.js +30 -22
  286. package/dist/module/components/Call/RingingCallContent/TextBasedIndicator.js.map +1 -1
  287. package/dist/module/components/Call/RingingCallContent/UserInfo.js +27 -22
  288. package/dist/module/components/Call/RingingCallContent/UserInfo.js.map +1 -1
  289. package/dist/module/components/Call/RingingCallContent/index.js +2 -0
  290. package/dist/module/components/Call/RingingCallContent/index.js.map +1 -1
  291. package/dist/module/components/Call/index.js +2 -0
  292. package/dist/module/components/Call/index.js.map +1 -1
  293. package/dist/module/components/Livestream/HostLivestream/HostLivestream.js +40 -35
  294. package/dist/module/components/Livestream/HostLivestream/HostLivestream.js.map +1 -1
  295. package/dist/module/components/Livestream/HostLivestream/index.js +2 -0
  296. package/dist/module/components/Livestream/HostLivestream/index.js.map +1 -1
  297. package/dist/module/components/Livestream/LivestreamControls/HostLivestreamControls.js +18 -13
  298. package/dist/module/components/Livestream/LivestreamControls/HostLivestreamControls.js.map +1 -1
  299. package/dist/module/components/Livestream/LivestreamControls/HostStartStreamButton.js +18 -13
  300. package/dist/module/components/Livestream/LivestreamControls/HostStartStreamButton.js.map +1 -1
  301. package/dist/module/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js +21 -14
  302. package/dist/module/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js.map +1 -1
  303. package/dist/module/components/Livestream/LivestreamControls/LivestreamMediaControls.js +7 -4
  304. package/dist/module/components/Livestream/LivestreamControls/LivestreamMediaControls.js.map +1 -1
  305. package/dist/module/components/Livestream/LivestreamControls/LivestreamScreenShareToggleButton.js +21 -16
  306. package/dist/module/components/Livestream/LivestreamControls/LivestreamScreenShareToggleButton.js.map +1 -1
  307. package/dist/module/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js +21 -14
  308. package/dist/module/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js.map +1 -1
  309. package/dist/module/components/Livestream/LivestreamControls/ViewerLeaveStreamButton.js +13 -9
  310. package/dist/module/components/Livestream/LivestreamControls/ViewerLeaveStreamButton.js.map +1 -1
  311. package/dist/module/components/Livestream/LivestreamControls/ViewerLivestreamControls.js +80 -58
  312. package/dist/module/components/Livestream/LivestreamControls/ViewerLivestreamControls.js.map +1 -1
  313. package/dist/module/components/Livestream/LivestreamControls/index.js +2 -0
  314. package/dist/module/components/Livestream/LivestreamControls/index.js.map +1 -1
  315. package/dist/module/components/Livestream/LivestreamLayout/LivestreamLayout.js +14 -46
  316. package/dist/module/components/Livestream/LivestreamLayout/LivestreamLayout.js.map +1 -1
  317. package/dist/module/components/Livestream/LivestreamLayout/index.js +2 -0
  318. package/dist/module/components/Livestream/LivestreamLayout/index.js.map +1 -1
  319. package/dist/module/components/Livestream/LivestreamPlayer/LivestreamEnded.js +52 -25
  320. package/dist/module/components/Livestream/LivestreamPlayer/LivestreamEnded.js.map +1 -1
  321. package/dist/module/components/Livestream/LivestreamPlayer/LivestreamPlayer.js +9 -5
  322. package/dist/module/components/Livestream/LivestreamPlayer/LivestreamPlayer.js.map +1 -1
  323. package/dist/module/components/Livestream/LivestreamPlayer/index.js +2 -0
  324. package/dist/module/components/Livestream/LivestreamPlayer/index.js.map +1 -1
  325. package/dist/module/components/Livestream/LivestreamTopView/DurationBadge.js +14 -10
  326. package/dist/module/components/Livestream/LivestreamTopView/DurationBadge.js.map +1 -1
  327. package/dist/module/components/Livestream/LivestreamTopView/FollowerCount.js +13 -8
  328. package/dist/module/components/Livestream/LivestreamTopView/FollowerCount.js.map +1 -1
  329. package/dist/module/components/Livestream/LivestreamTopView/HostLivestreamTopView.js +20 -14
  330. package/dist/module/components/Livestream/LivestreamTopView/HostLivestreamTopView.js.map +1 -1
  331. package/dist/module/components/Livestream/LivestreamTopView/LiveIndicator.js +12 -8
  332. package/dist/module/components/Livestream/LivestreamTopView/LiveIndicator.js.map +1 -1
  333. package/dist/module/components/Livestream/LivestreamTopView/ViewerLivestreamTopView.js +20 -14
  334. package/dist/module/components/Livestream/LivestreamTopView/ViewerLivestreamTopView.js.map +1 -1
  335. package/dist/module/components/Livestream/LivestreamTopView/index.js +2 -0
  336. package/dist/module/components/Livestream/LivestreamTopView/index.js.map +1 -1
  337. package/dist/module/components/Livestream/ViewerLivestream/ViewerLivestream.js +43 -38
  338. package/dist/module/components/Livestream/ViewerLivestream/ViewerLivestream.js.map +1 -1
  339. package/dist/module/components/Livestream/ViewerLivestream/ViewerLobby.js +35 -23
  340. package/dist/module/components/Livestream/ViewerLivestream/ViewerLobby.js.map +1 -1
  341. package/dist/module/components/Livestream/ViewerLivestream/index.js +2 -0
  342. package/dist/module/components/Livestream/ViewerLivestream/index.js.map +1 -1
  343. package/dist/module/components/Livestream/index.js +2 -0
  344. package/dist/module/components/Livestream/index.js.map +1 -1
  345. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js +20 -15
  346. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js.map +1 -1
  347. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js +22 -16
  348. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js.map +1 -1
  349. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/common.js +2 -0
  350. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/common.js.map +1 -1
  351. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/index.js +2 -0
  352. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/index.js.map +1 -1
  353. package/dist/module/components/Participant/FloatingParticipantView/index.js +56 -49
  354. package/dist/module/components/Participant/FloatingParticipantView/index.js.map +1 -1
  355. package/dist/module/components/Participant/FloatingParticipantView/useFloatingVideoDimensions.js +2 -0
  356. package/dist/module/components/Participant/FloatingParticipantView/useFloatingVideoDimensions.js.map +1 -1
  357. package/dist/module/components/Participant/ParticipantView/ParticipantLabel.js +66 -53
  358. package/dist/module/components/Participant/ParticipantView/ParticipantLabel.js.map +1 -1
  359. package/dist/module/components/Participant/ParticipantView/ParticipantNetworkQualityIndicator.js +32 -28
  360. package/dist/module/components/Participant/ParticipantView/ParticipantNetworkQualityIndicator.js.map +1 -1
  361. package/dist/module/components/Participant/ParticipantView/ParticipantReaction.js +13 -8
  362. package/dist/module/components/Participant/ParticipantView/ParticipantReaction.js.map +1 -1
  363. package/dist/module/components/Participant/ParticipantView/ParticipantVideoFallback.js +19 -15
  364. package/dist/module/components/Participant/ParticipantView/ParticipantVideoFallback.js.map +1 -1
  365. package/dist/module/components/Participant/ParticipantView/ParticipantView.js +29 -24
  366. package/dist/module/components/Participant/ParticipantView/ParticipantView.js.map +1 -1
  367. package/dist/module/components/Participant/ParticipantView/SpeechIndicator.js +10 -8
  368. package/dist/module/components/Participant/ParticipantView/SpeechIndicator.js.map +1 -1
  369. package/dist/module/components/Participant/ParticipantView/VideoRenderer/TrackSubscriber.js +2 -0
  370. package/dist/module/components/Participant/ParticipantView/VideoRenderer/TrackSubscriber.js.map +1 -1
  371. package/dist/module/components/Participant/ParticipantView/VideoRenderer/index.js +37 -31
  372. package/dist/module/components/Participant/ParticipantView/VideoRenderer/index.js.map +1 -1
  373. package/dist/module/components/Participant/ParticipantView/index.js +2 -0
  374. package/dist/module/components/Participant/ParticipantView/index.js.map +1 -1
  375. package/dist/module/components/Participant/index.js +2 -0
  376. package/dist/module/components/Participant/index.js.map +1 -1
  377. package/dist/module/components/index.js +2 -0
  378. package/dist/module/components/index.js.map +1 -1
  379. package/dist/module/components/utility/Avatar.js +20 -16
  380. package/dist/module/components/utility/Avatar.js.map +1 -1
  381. package/dist/module/components/utility/ScreenShareOverlay.js +37 -30
  382. package/dist/module/components/utility/ScreenShareOverlay.js.map +1 -1
  383. package/dist/module/components/utility/index.js +2 -0
  384. package/dist/module/components/utility/index.js.map +1 -1
  385. package/dist/module/constants/TestIds.js +2 -0
  386. package/dist/module/constants/TestIds.js.map +1 -1
  387. package/dist/module/constants/index.js +2 -0
  388. package/dist/module/constants/index.js.map +1 -1
  389. package/dist/module/contexts/BackgroundFilters.js +7 -4
  390. package/dist/module/contexts/BackgroundFilters.js.map +1 -1
  391. package/dist/module/contexts/ThemeContext.js +7 -4
  392. package/dist/module/contexts/ThemeContext.js.map +1 -1
  393. package/dist/module/contexts/index.js +2 -0
  394. package/dist/module/contexts/index.js.map +1 -1
  395. package/dist/module/contexts/internal/BackgroundFiltersContext.js +2 -0
  396. package/dist/module/contexts/internal/BackgroundFiltersContext.js.map +1 -1
  397. package/dist/module/contexts/internal/ScreenshotIosContext.js +7 -3
  398. package/dist/module/contexts/internal/ScreenshotIosContext.js.map +1 -1
  399. package/dist/module/hooks/index.js +3 -0
  400. package/dist/module/hooks/index.js.map +1 -1
  401. package/dist/module/hooks/push/index.js +2 -0
  402. package/dist/module/hooks/push/index.js.map +1 -1
  403. package/dist/module/hooks/push/useCallingExpWithCallingStateEffect.js +2 -0
  404. package/dist/module/hooks/push/useCallingExpWithCallingStateEffect.js.map +1 -1
  405. package/dist/module/hooks/push/useInitAndroidTokenAndRest.js +2 -0
  406. package/dist/module/hooks/push/useInitAndroidTokenAndRest.js.map +1 -1
  407. package/dist/module/hooks/push/useIosVoipPushEventsSetupEffect.js +2 -0
  408. package/dist/module/hooks/push/useIosVoipPushEventsSetupEffect.js.map +1 -1
  409. package/dist/module/hooks/useAndroidKeepCallAliveEffect.js +2 -0
  410. package/dist/module/hooks/useAndroidKeepCallAliveEffect.js.map +1 -1
  411. package/dist/module/hooks/useAutoEnterPiPEffect.js +7 -10
  412. package/dist/module/hooks/useAutoEnterPiPEffect.js.map +1 -1
  413. package/dist/module/hooks/useIsInPiPMode.js +2 -0
  414. package/dist/module/hooks/useIsInPiPMode.js.map +1 -1
  415. package/dist/module/hooks/useIsIosScreenshareBroadcastStarted.js +2 -0
  416. package/dist/module/hooks/useIsIosScreenshareBroadcastStarted.js.map +1 -1
  417. package/dist/module/hooks/useLoopbackRecording.js +260 -0
  418. package/dist/module/hooks/useLoopbackRecording.js.map +1 -0
  419. package/dist/module/hooks/useModeration.js +6 -1
  420. package/dist/module/hooks/useModeration.js.map +1 -1
  421. package/dist/module/hooks/usePaginatedLayoutSortPreset.js +2 -0
  422. package/dist/module/hooks/usePaginatedLayoutSortPreset.js.map +1 -1
  423. package/dist/module/hooks/usePermissionNotification.js +2 -0
  424. package/dist/module/hooks/usePermissionNotification.js.map +1 -1
  425. package/dist/module/hooks/usePermissionRequest.js +2 -0
  426. package/dist/module/hooks/usePermissionRequest.js.map +1 -1
  427. package/dist/module/hooks/useScreenShareAudioMixing.js +2 -0
  428. package/dist/module/hooks/useScreenShareAudioMixing.js.map +1 -1
  429. package/dist/module/hooks/useScreenShareButton.js +2 -0
  430. package/dist/module/hooks/useScreenShareButton.js.map +1 -1
  431. package/dist/module/hooks/useScreenshot.js +2 -0
  432. package/dist/module/hooks/useScreenshot.js.map +1 -1
  433. package/dist/module/hooks/useTrackDimensions.js +2 -0
  434. package/dist/module/hooks/useTrackDimensions.js.map +1 -1
  435. package/dist/module/icons/Back.js +10 -6
  436. package/dist/module/icons/Back.js.map +1 -1
  437. package/dist/module/icons/BadNetwork.js +13 -9
  438. package/dist/module/icons/BadNetwork.js.map +1 -1
  439. package/dist/module/icons/CameraSwitch.js +10 -6
  440. package/dist/module/icons/CameraSwitch.js.map +1 -1
  441. package/dist/module/icons/EndStreamIcon.js +10 -6
  442. package/dist/module/icons/EndStreamIcon.js.map +1 -1
  443. package/dist/module/icons/Eye.js +10 -6
  444. package/dist/module/icons/Eye.js.map +1 -1
  445. package/dist/module/icons/IconWrapper.js +7 -3
  446. package/dist/module/icons/IconWrapper.js.map +1 -1
  447. package/dist/module/icons/LivestreamControls.js +46 -39
  448. package/dist/module/icons/LivestreamControls.js.map +1 -1
  449. package/dist/module/icons/Lock.js +10 -6
  450. package/dist/module/icons/Lock.js.map +1 -1
  451. package/dist/module/icons/Maximize.js +35 -31
  452. package/dist/module/icons/Maximize.js.map +1 -1
  453. package/dist/module/icons/Mic.js +10 -6
  454. package/dist/module/icons/Mic.js.map +1 -1
  455. package/dist/module/icons/MicOff.js +10 -6
  456. package/dist/module/icons/MicOff.js.map +1 -1
  457. package/dist/module/icons/Phone.js +10 -6
  458. package/dist/module/icons/Phone.js.map +1 -1
  459. package/dist/module/icons/PhoneDown.js +10 -6
  460. package/dist/module/icons/PhoneDown.js.map +1 -1
  461. package/dist/module/icons/PinVertical.js +10 -6
  462. package/dist/module/icons/PinVertical.js.map +1 -1
  463. package/dist/module/icons/Reaction.js +10 -6
  464. package/dist/module/icons/Reaction.js.map +1 -1
  465. package/dist/module/icons/ScreenShare.js +10 -6
  466. package/dist/module/icons/ScreenShare.js.map +1 -1
  467. package/dist/module/icons/ScreenShareIndicator.js +23 -18
  468. package/dist/module/icons/ScreenShareIndicator.js.map +1 -1
  469. package/dist/module/icons/StartStreamIcon.js +10 -6
  470. package/dist/module/icons/StartStreamIcon.js.map +1 -1
  471. package/dist/module/icons/StopScreenShare.js +13 -9
  472. package/dist/module/icons/StopScreenShare.js.map +1 -1
  473. package/dist/module/icons/Video.js +10 -6
  474. package/dist/module/icons/Video.js.map +1 -1
  475. package/dist/module/icons/VideoSlash.js +10 -6
  476. package/dist/module/icons/VideoSlash.js.map +1 -1
  477. package/dist/module/icons/index.js +2 -6
  478. package/dist/module/icons/index.js.map +1 -1
  479. package/dist/module/index.js +2 -0
  480. package/dist/module/index.js.map +1 -1
  481. package/dist/module/modules/ScreenShareAudioManager.js +2 -0
  482. package/dist/module/modules/ScreenShareAudioManager.js.map +1 -1
  483. package/dist/module/modules/call-manager/CallManager.js +2 -0
  484. package/dist/module/modules/call-manager/CallManager.js.map +1 -1
  485. package/dist/module/modules/call-manager/PrevLibDetection.js +2 -0
  486. package/dist/module/modules/call-manager/PrevLibDetection.js.map +1 -1
  487. package/dist/module/modules/call-manager/index.js +2 -0
  488. package/dist/module/modules/call-manager/index.js.map +1 -1
  489. package/dist/module/modules/call-manager/native-module.d.js +2 -0
  490. package/dist/module/modules/call-manager/native-module.d.js.map +1 -1
  491. package/dist/module/modules/call-manager/types.js +1 -1
  492. package/dist/module/providers/BusyTonePlayer.js +9 -7
  493. package/dist/module/providers/BusyTonePlayer.js.map +1 -1
  494. package/dist/module/providers/NoiseCancellation/NoiseCancellationProvider.js +7 -4
  495. package/dist/module/providers/NoiseCancellation/NoiseCancellationProvider.js.map +1 -1
  496. package/dist/module/providers/NoiseCancellation/index.js +2 -0
  497. package/dist/module/providers/NoiseCancellation/index.js.map +1 -1
  498. package/dist/module/providers/NoiseCancellation/lib.js +2 -0
  499. package/dist/module/providers/NoiseCancellation/lib.js.map +1 -1
  500. package/dist/module/providers/StreamCall/AppStateListener.js +5 -0
  501. package/dist/module/providers/StreamCall/AppStateListener.js.map +1 -1
  502. package/dist/module/providers/StreamCall/AudioInterruptionTracer.js +2 -0
  503. package/dist/module/providers/StreamCall/AudioInterruptionTracer.js.map +1 -1
  504. package/dist/module/providers/StreamCall/DeviceStats.js +3 -1
  505. package/dist/module/providers/StreamCall/DeviceStats.js.map +1 -1
  506. package/dist/module/providers/StreamCall/index.js +7 -4
  507. package/dist/module/providers/StreamCall/index.js.map +1 -1
  508. package/dist/module/providers/StreamVideo.js +12 -5
  509. package/dist/module/providers/StreamVideo.js.map +1 -1
  510. package/dist/module/theme/colors.js +2 -0
  511. package/dist/module/theme/colors.js.map +1 -1
  512. package/dist/module/theme/constants.js +2 -0
  513. package/dist/module/theme/constants.js.map +1 -1
  514. package/dist/module/theme/index.js +2 -0
  515. package/dist/module/theme/index.js.map +1 -1
  516. package/dist/module/theme/theme.js +2 -0
  517. package/dist/module/theme/theme.js.map +1 -1
  518. package/dist/module/theme/types.js +2 -0
  519. package/dist/module/translations/index.js +2 -0
  520. package/dist/module/translations/index.js.map +1 -1
  521. package/dist/module/utils/StreamVideoRN/index.js +2 -1
  522. package/dist/module/utils/StreamVideoRN/index.js.map +1 -1
  523. package/dist/module/utils/StreamVideoRN/types.js +2 -0
  524. package/dist/module/utils/enterPiPAndroid.js +2 -0
  525. package/dist/module/utils/enterPiPAndroid.js.map +1 -1
  526. package/dist/module/utils/getAndroidDefaultRingtoneUrl.js +2 -0
  527. package/dist/module/utils/getAndroidDefaultRingtoneUrl.js.map +1 -1
  528. package/dist/module/utils/hooks/index.js +2 -0
  529. package/dist/module/utils/hooks/index.js.map +1 -1
  530. package/dist/module/utils/hooks/usePrevious.js +2 -0
  531. package/dist/module/utils/hooks/usePrevious.js.map +1 -1
  532. package/dist/module/utils/index.js +2 -0
  533. package/dist/module/utils/index.js.map +1 -1
  534. package/dist/module/utils/internal/callingx/audioSessionPromise.js +2 -0
  535. package/dist/module/utils/internal/callingx/audioSessionPromise.js.map +1 -1
  536. package/dist/module/utils/internal/callingx/callingx.js +6 -4
  537. package/dist/module/utils/internal/callingx/callingx.js.map +1 -1
  538. package/dist/module/utils/internal/optionallibs/gestureHandler.js +2 -0
  539. package/dist/module/utils/internal/optionallibs/gestureHandler.js.map +1 -1
  540. package/dist/module/utils/internal/optionallibs/index.js +2 -0
  541. package/dist/module/utils/internal/optionallibs/index.js.map +1 -1
  542. package/dist/module/utils/internal/optionallibs/reanimated.js +2 -0
  543. package/dist/module/utils/internal/optionallibs/reanimated.js.map +1 -1
  544. package/dist/module/utils/internal/pushLogoutCallback.js +2 -0
  545. package/dist/module/utils/internal/pushLogoutCallback.js.map +1 -1
  546. package/dist/module/utils/internal/registerSDKGlobals.js +4 -2
  547. package/dist/module/utils/internal/registerSDKGlobals.js.map +1 -1
  548. package/dist/module/utils/internal/rxSubjects.js +2 -0
  549. package/dist/module/utils/internal/rxSubjects.js.map +1 -1
  550. package/dist/module/utils/internal/shouldDisableIOSLocalVideoOnBackground.js +2 -0
  551. package/dist/module/utils/internal/shouldDisableIOSLocalVideoOnBackground.js.map +1 -1
  552. package/dist/module/utils/keepCallAliveHeadlessTask.js +2 -0
  553. package/dist/module/utils/keepCallAliveHeadlessTask.js.map +1 -1
  554. package/dist/module/utils/push/android.js +2 -0
  555. package/dist/module/utils/push/android.js.map +1 -1
  556. package/dist/module/utils/push/index.js +2 -0
  557. package/dist/module/utils/push/index.js.map +1 -1
  558. package/dist/module/utils/push/internal/constants.js +2 -0
  559. package/dist/module/utils/push/internal/constants.js.map +1 -1
  560. package/dist/module/utils/push/internal/ios.js +2 -0
  561. package/dist/module/utils/push/internal/ios.js.map +1 -1
  562. package/dist/module/utils/push/internal/utils.js +2 -0
  563. package/dist/module/utils/push/internal/utils.js.map +1 -1
  564. package/dist/module/utils/push/libs/callingx.js +2 -0
  565. package/dist/module/utils/push/libs/callingx.js.map +1 -1
  566. package/dist/module/utils/push/libs/firebaseMessaging/index.js +2 -0
  567. package/dist/module/utils/push/libs/firebaseMessaging/index.js.map +1 -1
  568. package/dist/module/utils/push/libs/firebaseMessaging/lib.js +2 -0
  569. package/dist/module/utils/push/libs/firebaseMessaging/lib.js.map +1 -1
  570. package/dist/module/utils/push/libs/index.js +2 -0
  571. package/dist/module/utils/push/libs/index.js.map +1 -1
  572. package/dist/module/utils/push/setupCallingExpEvents.js +2 -0
  573. package/dist/module/utils/push/setupCallingExpEvents.js.map +1 -1
  574. package/dist/module/utils/push/setupIosVoipPushEvents.js +2 -0
  575. package/dist/module/utils/push/setupIosVoipPushEvents.js.map +1 -1
  576. package/dist/module/utils/push/utils.js +2 -0
  577. package/dist/module/utils/push/utils.js.map +1 -1
  578. package/dist/module/utils/setClientDetails.js +2 -0
  579. package/dist/module/utils/setClientDetails.js.map +1 -1
  580. package/dist/module/version.js +3 -1
  581. package/dist/module/version.js.map +1 -1
  582. package/dist/typescript/components/Call/CallContent/CallContent.d.ts.map +1 -1
  583. package/dist/typescript/components/Call/CallLayout/CallParticipantsGrid.d.ts.map +1 -1
  584. package/dist/typescript/components/Call/CallLayout/CallParticipantsSpotlight.d.ts.map +1 -1
  585. package/dist/typescript/components/Call/CallParticipantsList/CallParticipantsList.d.ts.map +1 -1
  586. package/dist/typescript/components/Call/Lobby/Lobby.d.ts.map +1 -1
  587. package/dist/typescript/components/Livestream/HostLivestream/HostLivestream.d.ts.map +1 -1
  588. package/dist/typescript/components/Livestream/LivestreamLayout/LivestreamLayout.d.ts.map +1 -1
  589. package/dist/typescript/components/Livestream/LivestreamPlayer/LivestreamEnded.d.ts.map +1 -1
  590. package/dist/typescript/components/Livestream/ViewerLivestream/ViewerLivestream.d.ts.map +1 -1
  591. package/dist/typescript/components/Participant/FloatingParticipantView/index.d.ts.map +1 -1
  592. package/dist/typescript/components/Participant/ParticipantView/ParticipantView.d.ts +1 -1
  593. package/dist/typescript/components/Participant/ParticipantView/ParticipantView.d.ts.map +1 -1
  594. package/dist/typescript/components/Participant/ParticipantView/VideoRenderer/index.d.ts +1 -1
  595. package/dist/typescript/components/Participant/ParticipantView/VideoRenderer/index.d.ts.map +1 -1
  596. package/dist/typescript/contexts/BackgroundFilters.d.ts +1 -1
  597. package/dist/typescript/contexts/BackgroundFilters.d.ts.map +1 -1
  598. package/dist/typescript/hooks/index.d.ts +1 -0
  599. package/dist/typescript/hooks/index.d.ts.map +1 -1
  600. package/dist/typescript/hooks/useAutoEnterPiPEffect.d.ts.map +1 -1
  601. package/dist/typescript/hooks/useLoopbackRecording.d.ts +85 -0
  602. package/dist/typescript/hooks/useLoopbackRecording.d.ts.map +1 -0
  603. package/dist/typescript/hooks/useModeration.d.ts.map +1 -1
  604. package/dist/typescript/icons/index.d.ts +0 -6
  605. package/dist/typescript/icons/index.d.ts.map +1 -1
  606. package/dist/typescript/providers/StreamCall/AppStateListener.d.ts.map +1 -1
  607. package/dist/typescript/providers/StreamCall/DeviceStats.d.ts.map +1 -1
  608. package/dist/typescript/utils/StreamVideoRN/index.d.ts +0 -1
  609. package/dist/typescript/utils/StreamVideoRN/index.d.ts.map +1 -1
  610. package/dist/typescript/utils/internal/callingx/callingx.d.ts.map +1 -1
  611. package/dist/typescript/utils/push/libs/firebaseMessaging/index.d.ts +2 -16
  612. package/dist/typescript/utils/push/libs/firebaseMessaging/index.d.ts.map +1 -1
  613. package/dist/typescript/version.d.ts +1 -1
  614. package/ios/StreamVideoReactNative-Bridging-Header.h +2 -0
  615. package/ios/StreamVideoReactNative.m +81 -0
  616. package/ios/TracksRecorder/AudioPipeline.swift +270 -0
  617. package/ios/TracksRecorder/PipelineHost.swift +56 -0
  618. package/ios/TracksRecorder/RecorderAudioRenderTap.swift +144 -0
  619. package/ios/TracksRecorder/RecorderVideoSink.swift +137 -0
  620. package/ios/TracksRecorder/TracksRecorderManager.swift +333 -0
  621. package/ios/TracksRecorder/VideoPipeline.swift +297 -0
  622. package/package.json +10 -8
  623. package/src/components/Call/CallContent/CallContent.tsx +69 -39
  624. package/src/components/Call/CallLayout/CallParticipantsGrid.tsx +4 -6
  625. package/src/components/Call/CallLayout/CallParticipantsSpotlight.tsx +30 -21
  626. package/src/components/Call/CallParticipantsList/CallParticipantsList.tsx +23 -9
  627. package/src/components/Call/Lobby/Lobby.tsx +9 -5
  628. package/src/components/Livestream/HostLivestream/HostLivestream.tsx +5 -6
  629. package/src/components/Livestream/LivestreamControls/ViewerLivestreamControls.tsx +1 -1
  630. package/src/components/Livestream/LivestreamLayout/LivestreamLayout.tsx +4 -64
  631. package/src/components/Livestream/LivestreamPlayer/LivestreamEnded.tsx +54 -18
  632. package/src/components/Livestream/LivestreamTopView/DurationBadge.tsx +2 -2
  633. package/src/components/Livestream/ViewerLivestream/ViewerLivestream.tsx +10 -12
  634. package/src/components/Participant/FloatingParticipantView/index.tsx +26 -18
  635. package/src/components/Participant/ParticipantView/ParticipantReaction.tsx +1 -1
  636. package/src/components/Participant/ParticipantView/ParticipantView.tsx +68 -64
  637. package/src/components/Participant/ParticipantView/VideoRenderer/index.tsx +192 -179
  638. package/src/hooks/index.ts +1 -0
  639. package/src/hooks/useAutoEnterPiPEffect.tsx +5 -11
  640. package/src/hooks/useLoopbackRecording.ts +448 -0
  641. package/src/hooks/useModeration.ts +4 -1
  642. package/src/icons/index.tsx +0 -6
  643. package/src/providers/BusyTonePlayer.tsx +11 -11
  644. package/src/providers/StreamCall/AppStateListener.tsx +3 -0
  645. package/src/providers/StreamCall/DeviceStats.tsx +2 -1
  646. package/src/utils/StreamVideoRN/index.ts +0 -1
  647. package/src/utils/internal/callingx/callingx.ts +20 -10
  648. package/src/utils/internal/registerSDKGlobals.ts +2 -2
  649. package/src/utils/push/libs/firebaseMessaging/index.ts +4 -2
  650. package/src/version.ts +1 -1
  651. package/dist/commonjs/icons/LeaveStreamIcon.js +0 -20
  652. package/dist/commonjs/icons/LeaveStreamIcon.js.map +0 -1
  653. package/dist/commonjs/icons/Settings.js +0 -22
  654. package/dist/commonjs/icons/Settings.js.map +0 -1
  655. package/dist/commonjs/icons/ShieldBadge.js +0 -20
  656. package/dist/commonjs/icons/ShieldBadge.js.map +0 -1
  657. package/dist/commonjs/icons/Spotlight.js +0 -21
  658. package/dist/commonjs/icons/Spotlight.js.map +0 -1
  659. package/dist/commonjs/icons/ThreeDots.js +0 -31
  660. package/dist/commonjs/icons/ThreeDots.js.map +0 -1
  661. package/dist/commonjs/icons/TopViewBackground.js +0 -35
  662. package/dist/commonjs/icons/TopViewBackground.js.map +0 -1
  663. package/dist/module/icons/LeaveStreamIcon.js +0 -12
  664. package/dist/module/icons/LeaveStreamIcon.js.map +0 -1
  665. package/dist/module/icons/Settings.js +0 -13
  666. package/dist/module/icons/Settings.js.map +0 -1
  667. package/dist/module/icons/ShieldBadge.js +0 -12
  668. package/dist/module/icons/ShieldBadge.js.map +0 -1
  669. package/dist/module/icons/Spotlight.js +0 -13
  670. package/dist/module/icons/Spotlight.js.map +0 -1
  671. package/dist/module/icons/ThreeDots.js +0 -23
  672. package/dist/module/icons/ThreeDots.js.map +0 -1
  673. package/dist/module/icons/TopViewBackground.js +0 -27
  674. package/dist/module/icons/TopViewBackground.js.map +0 -1
  675. package/dist/typescript/icons/LeaveStreamIcon.d.ts +0 -3
  676. package/dist/typescript/icons/LeaveStreamIcon.d.ts.map +0 -1
  677. package/dist/typescript/icons/Settings.d.ts +0 -7
  678. package/dist/typescript/icons/Settings.d.ts.map +0 -1
  679. package/dist/typescript/icons/ShieldBadge.d.ts +0 -3
  680. package/dist/typescript/icons/ShieldBadge.d.ts.map +0 -1
  681. package/dist/typescript/icons/Spotlight.d.ts +0 -8
  682. package/dist/typescript/icons/Spotlight.d.ts.map +0 -1
  683. package/dist/typescript/icons/ThreeDots.d.ts +0 -7
  684. package/dist/typescript/icons/ThreeDots.d.ts.map +0 -1
  685. package/dist/typescript/icons/TopViewBackground.d.ts +0 -15
  686. package/dist/typescript/icons/TopViewBackground.d.ts.map +0 -1
  687. package/src/icons/LeaveStreamIcon.tsx +0 -13
  688. package/src/icons/Settings.tsx +0 -14
  689. package/src/icons/ShieldBadge.tsx +0 -13
  690. package/src/icons/Spotlight.tsx +0 -18
  691. package/src/icons/ThreeDots.tsx +0 -14
  692. package/src/icons/TopViewBackground.tsx +0 -43
@@ -0,0 +1,448 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
+ import { NativeModules } from 'react-native';
3
+ import { combineLatest } from 'rxjs';
4
+ import {
5
+ Call,
6
+ CallingState,
7
+ videoLoggerSystem,
8
+ type StreamVideoParticipant,
9
+ } from '@stream-io/video-client';
10
+ import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
11
+
12
+ /** @internal */
13
+ const { StreamVideoReactNative } = NativeModules;
14
+
15
+ // Upper bound on how long `startRecording` will wait for the SFU to
16
+ // echo loopback tracks back via the Subscriber. Tuned generously since
17
+ // this includes connection setup; consumers that want shorter feedback
18
+ // should call `stopRecording` to cancel the wait early.
19
+ const STREAMS_WAIT_TIMEOUT_MS = 10 * 1000;
20
+ const DEFAULT_RECORDING_DURATION = 10 * 1000;
21
+ const MIN_RECORDING_DURATION = 5 * 1000;
22
+ const MAX_RECORDING_DURATION = 2 * 60 * 1000;
23
+
24
+ type LoopbackStreams = {
25
+ loopbackVideoStream?: MediaStream;
26
+ loopbackAudioStream?: MediaStream;
27
+ };
28
+
29
+ export type LoopbackRecordingState = 'idle' | 'awaiting-streams' | 'recording';
30
+
31
+ export type ResolvedStreams = {
32
+ audioTrack?: MediaStreamTrack;
33
+ videoTrack?: MediaStreamTrack;
34
+ };
35
+
36
+ export interface StartLoopbackRecordingOptions {
37
+ /**
38
+ * Whether to include the loopback video track in the recording.
39
+ * Defaults to `true`. Set to `false` for an audio-only recording.
40
+ * Audio is always recorded — there is no video-only mode.
41
+ */
42
+ includeVideo?: boolean;
43
+ /**
44
+ * Maximum recording duration in milliseconds, after which the
45
+ * recording auto-stops and finalises the file.
46
+ *
47
+ * Defaults to `10_000` (10 seconds). Clamped to
48
+ * `[5_000, 120_000]` (5 seconds — 2 minutes).
49
+ */
50
+ maxDurationMs?: number;
51
+ }
52
+
53
+ export interface UseLoopbackRecordingResult {
54
+ /**
55
+ * Start a recording. The hook waits internally for the SFU loopback
56
+ * streams to arrive on `localParticipant`, then begins recording.
57
+ *
58
+ * The returned promise resolves with the produced `file://` URI **at
59
+ * the recording's terminal moment** — whether that is the auto-stop
60
+ * timer expiring, an explicit `stopRecording` call, or a cleanup-
61
+ * driven stop on unmount/leave. Resolves with `null` if no file was
62
+ * produced (writer torn down before any buffer arrived, or
63
+ * `stopRecording` was called while still awaiting streams). Rejects
64
+ * on a fatal error, if a recording is already running, or if the
65
+ * stream-wait times out.
66
+ */
67
+ startRecording: (
68
+ options?: StartLoopbackRecordingOptions,
69
+ ) => Promise<string | null>;
70
+ /**
71
+ * Signal an early termination. While `awaiting-streams` this aborts
72
+ * the wait and the pending `startRecording` resolves with `null`.
73
+ * While `recording` this signals native finalisation and resolves
74
+ * once it completes.
75
+ */
76
+ stopRecording: () => Promise<void>;
77
+ /**
78
+ * Recursively delete every file under the SDK's recordings directory.
79
+ */
80
+ clearRecordings: () => Promise<void>;
81
+ /**
82
+ * List every `file://` URI in the SDK's recordings directory, sorted
83
+ * most-recent first. Returns an empty array if the directory doesn't
84
+ * exist yet.
85
+ */
86
+ getRecordings: () => Promise<string[]>;
87
+ /**
88
+ * Lifecycle phase of the recording, owned by the hook:
89
+ * - `'idle'`: no recording in progress.
90
+ * - `'awaiting-streams'`: `startRecording` was called but the SFU
91
+ * has not yet echoed the loopback tracks back.
92
+ * - `'recording'`: native pipeline is actively writing.
93
+ */
94
+ recordingState: LoopbackRecordingState;
95
+ /**
96
+ * The SFU loopback video stream on the local participant, when
97
+ * present. Identified by reference inequality against
98
+ * `call.camera.state.mediaStream`.
99
+ */
100
+ loopbackVideoStream?: MediaStream;
101
+ /**
102
+ * The SFU loopback audio stream on the local participant, when
103
+ * present. Identified by reference inequality against
104
+ * `call.microphone.state.mediaStream`.
105
+ */
106
+ loopbackAudioStream?: MediaStream;
107
+ }
108
+
109
+ /**
110
+ * Records the SFU loopback streams (audio + video) on the local participant
111
+ * to a local MP4 file. Designed for the `allowOwnTracksLoopback` pre-call test mode:
112
+ * the SFU echoes the caller's published tracks back through the Subscriber
113
+ * peer connection. The hook identifies the loopback streams on the local
114
+ * participant by reference inequality against
115
+ * `call.camera.state.mediaStream` / `call.microphone.state.mediaStream` —
116
+ * the canonical references to the local capture — and captures them.
117
+ */
118
+ export function useLoopbackRecording(): UseLoopbackRecordingResult {
119
+ const call = useCall();
120
+ const {
121
+ useCallCallingState,
122
+ useParticipantCount,
123
+ useLocalParticipant,
124
+ useCameraState,
125
+ useMicrophoneState,
126
+ } = useCallStateHooks();
127
+ const callingState = useCallCallingState();
128
+ const participantCount = useParticipantCount();
129
+ const localParticipant = useLocalParticipant();
130
+ const { mediaStream: cameraStream } = useCameraState();
131
+ const { mediaStream: microphoneStream } = useMicrophoneState();
132
+
133
+ const [recordingState, setRecordingState] =
134
+ useState<LoopbackRecordingState>('idle');
135
+ const recordingStateRef = useRef<LoopbackRecordingState>('idle');
136
+ const isMountedRef = useRef(true);
137
+ // Used to abort the awaiting-streams wait on stop / leave / unmount.
138
+ const awaitAbortRef = useRef<AbortController | null>(null);
139
+
140
+ const loopbackStreams = useMemo<LoopbackStreams>(
141
+ () =>
142
+ getLoopbackStreamsFor(localParticipant, cameraStream, microphoneStream),
143
+ [localParticipant, cameraStream, microphoneStream],
144
+ );
145
+
146
+ const updateState = useCallback((next: LoopbackRecordingState) => {
147
+ recordingStateRef.current = next;
148
+ if (isMountedRef.current) {
149
+ setRecordingState(next);
150
+ }
151
+ }, []);
152
+
153
+ const stopRecording = useCallback(async (): Promise<void> => {
154
+ const current = recordingStateRef.current;
155
+ if (current === 'idle') {
156
+ return;
157
+ }
158
+
159
+ if (current === 'awaiting-streams') {
160
+ videoLoggerSystem
161
+ .getLogger('useLoopbackRecording')
162
+ .debug('aborting awaiting-streams wait');
163
+ awaitAbortRef.current?.abort();
164
+ return;
165
+ }
166
+
167
+ try {
168
+ await StreamVideoReactNative.stopTrackRecording();
169
+ } catch (error) {
170
+ videoLoggerSystem
171
+ .getLogger('useLoopbackRecording')
172
+ .error('failed to stop recording', error);
173
+ throw new Error('failed to stop recording');
174
+ }
175
+ }, []);
176
+
177
+ const startRecording = useCallback(
178
+ async ({
179
+ includeVideo = true,
180
+ maxDurationMs = DEFAULT_RECORDING_DURATION,
181
+ }: StartLoopbackRecordingOptions = {}): Promise<string | null> => {
182
+ if (!call) {
183
+ return null;
184
+ }
185
+
186
+ if (recordingStateRef.current !== 'idle') {
187
+ videoLoggerSystem
188
+ .getLogger('useLoopbackRecording')
189
+ .warn('a recording is already running');
190
+ return null;
191
+ }
192
+
193
+ if (call.state.participantCount > 1) {
194
+ videoLoggerSystem
195
+ .getLogger('useLoopbackRecording')
196
+ .warn('cannot start recording with other participants present');
197
+ return null;
198
+ }
199
+
200
+ awaitAbortRef.current = new AbortController();
201
+ updateState('awaiting-streams');
202
+
203
+ let audioTrack: MediaStreamTrack | undefined;
204
+ try {
205
+ const streams = await waitForLoopbackStreams(call, {
206
+ includeVideo,
207
+ signal: awaitAbortRef.current.signal,
208
+ timeoutMs: STREAMS_WAIT_TIMEOUT_MS,
209
+ });
210
+
211
+ if (streams === null) {
212
+ videoLoggerSystem
213
+ .getLogger('useLoopbackRecording')
214
+ .warn('timed out waiting for loopback streams');
215
+ return null;
216
+ }
217
+
218
+ audioTrack = streams.audioTrack;
219
+ const videoTrackId = streams.videoTrack?.id;
220
+
221
+ // The loopback audio track lands disabled (the SDK default-mutes
222
+ // it to prevent echo). Enable it so the native recording
223
+ // pipeline receives PCM; `finally` returns it to muted.
224
+ if (audioTrack) {
225
+ audioTrack.enabled = true;
226
+ }
227
+ updateState('recording');
228
+
229
+ const clampedDuration = Math.min(
230
+ MAX_RECORDING_DURATION,
231
+ Math.max(MIN_RECORDING_DURATION, maxDurationMs),
232
+ );
233
+
234
+ // Pre-size the native encoder to the publisher's max video
235
+ // publish-option dimension. Without this, the encoder locks to
236
+ // whatever the SFU happens to echo *first* and stays there for the
237
+ // rest of the recording even after the network improves and
238
+ // higher layers arrive.
239
+ const publishMaxDim = call.getMaxVideoPublishDimension();
240
+
241
+ try {
242
+ const uri: string | null =
243
+ await StreamVideoReactNative.startTrackRecording({
244
+ videoTrackId,
245
+ maxDurationMs: Math.round(clampedDuration),
246
+ targetWidth: publishMaxDim?.width,
247
+ targetHeight: publishMaxDim?.height,
248
+ });
249
+ return uri;
250
+ } catch (error) {
251
+ videoLoggerSystem
252
+ .getLogger('useLoopbackRecording')
253
+ .error('failed to start recording', error);
254
+ throw new Error('failed to start recording');
255
+ }
256
+ } finally {
257
+ if (audioTrack) {
258
+ audioTrack.enabled = false;
259
+ }
260
+ awaitAbortRef.current = null;
261
+ updateState('idle');
262
+ }
263
+ },
264
+ [call, updateState],
265
+ );
266
+
267
+ const clearRecordings = useCallback(async (): Promise<void> => {
268
+ try {
269
+ await StreamVideoReactNative.clearStreamRecordings();
270
+ } catch (error) {
271
+ videoLoggerSystem
272
+ .getLogger('useLoopbackRecording')
273
+ .error('failed to clear recordings', error);
274
+ throw new Error('failed to clear recordings');
275
+ }
276
+ }, []);
277
+
278
+ const getRecordings = useCallback(async (): Promise<string[]> => {
279
+ try {
280
+ const list: string[] | null | undefined =
281
+ await StreamVideoReactNative.getStreamRecordings();
282
+ return list ?? [];
283
+ } catch (error) {
284
+ videoLoggerSystem
285
+ .getLogger('useLoopbackRecording')
286
+ .error('failed to get recordings', error);
287
+ throw new Error('failed to get recordings');
288
+ }
289
+ }, []);
290
+
291
+ // Auto-stop on call leave / end. Aborts an awaiting-streams wait or
292
+ // signals native finalisation depending on which phase we're in.
293
+ // Without this, leaving the call mid-recording would leave native
294
+ // encoders mid-write while the SFU subscriber tracks end under their
295
+ // feet — undefined final file state.
296
+ useEffect(() => {
297
+ if (
298
+ callingState === CallingState.LEFT ||
299
+ callingState === CallingState.IDLE
300
+ ) {
301
+ videoLoggerSystem
302
+ .getLogger('useLoopbackRecording')
303
+ .debug('auto-stopping recording on call leave / end');
304
+ stopRecording().catch(() => {});
305
+ }
306
+ }, [callingState, stopRecording]);
307
+
308
+ // Auto-stop if another participant joins. Loopback recording is a
309
+ // single-user pre-call test.
310
+ useEffect(() => {
311
+ if (recordingState !== 'idle' && participantCount > 1) {
312
+ stopRecording().catch(() => {});
313
+ videoLoggerSystem
314
+ .getLogger('useLoopbackRecording')
315
+ .debug('auto-stopping recording on participant count change');
316
+ }
317
+ }, [participantCount, recordingState, stopRecording]);
318
+
319
+ useEffect(() => {
320
+ isMountedRef.current = true;
321
+ return () => {
322
+ isMountedRef.current = false;
323
+ videoLoggerSystem
324
+ .getLogger('useLoopbackRecording')
325
+ .debug('auto-stopping recording on unmount');
326
+ stopRecording().catch(() => {});
327
+ };
328
+ }, [stopRecording]);
329
+
330
+ return {
331
+ startRecording,
332
+ stopRecording,
333
+ clearRecordings,
334
+ getRecordings,
335
+ recordingState,
336
+ loopbackVideoStream: loopbackStreams.loopbackVideoStream,
337
+ loopbackAudioStream: loopbackStreams.loopbackAudioStream,
338
+ };
339
+ }
340
+
341
+ function getLoopbackStreamsFor(
342
+ participant: StreamVideoParticipant | undefined,
343
+ cameraStream: MediaStream | undefined,
344
+ microphoneStream: MediaStream | undefined,
345
+ ): LoopbackStreams {
346
+ return {
347
+ loopbackVideoStream:
348
+ participant?.videoStream && participant.videoStream !== cameraStream
349
+ ? participant.videoStream
350
+ : undefined,
351
+ loopbackAudioStream:
352
+ participant?.audioStream && participant.audioStream !== microphoneStream
353
+ ? participant.audioStream
354
+ : undefined,
355
+ };
356
+ }
357
+
358
+ /**
359
+ * Subscribe to `localParticipant$` and resolve once the requested loopback
360
+ * streams are present on the participant. Aborts cleanly on `signal`
361
+ * (resolves `null`) and rejects on timeout.
362
+ */
363
+ function waitForLoopbackStreams(
364
+ call: Call,
365
+ opts: { includeVideo: boolean; signal: AbortSignal; timeoutMs: number },
366
+ ): Promise<ResolvedStreams | null> {
367
+ return new Promise((resolve, reject) => {
368
+ const initial = getLoopbackStreams(
369
+ call.state.localParticipant,
370
+ call.camera.state.mediaStream,
371
+ call.microphone.state.mediaStream,
372
+ opts.includeVideo,
373
+ );
374
+ if (initial) {
375
+ resolve(initial);
376
+ return;
377
+ }
378
+
379
+ const cleanup = () => {
380
+ subscription.unsubscribe();
381
+ if (timeoutId !== undefined) {
382
+ clearTimeout(timeoutId);
383
+ }
384
+ opts.signal.removeEventListener('abort', onAbort);
385
+ };
386
+
387
+ const onAbort = () => {
388
+ cleanup();
389
+ resolve(null);
390
+ };
391
+
392
+ opts.signal.addEventListener('abort', onAbort);
393
+
394
+ const timeoutId = setTimeout(() => {
395
+ cleanup();
396
+ reject(
397
+ new Error(
398
+ 'useLoopbackRecording: timed out waiting for loopback streams. ' +
399
+ 'Ensure the call was joined with `allowOwnTracksLoopback: true` and ' +
400
+ 'that the SFU is configured to echo self-sub tracks.',
401
+ ),
402
+ );
403
+ }, opts.timeoutMs);
404
+
405
+ const subscription = combineLatest([
406
+ call.state.localParticipant$,
407
+ call.camera.state.mediaStream$,
408
+ call.microphone.state.mediaStream$,
409
+ ]).subscribe(([participant, cameraStream, microphoneStream]) => {
410
+ const ready = getLoopbackStreams(
411
+ participant,
412
+ cameraStream,
413
+ microphoneStream,
414
+ opts.includeVideo,
415
+ );
416
+ if (ready) {
417
+ cleanup();
418
+ resolve(ready);
419
+ }
420
+ });
421
+ });
422
+ }
423
+
424
+ function getLoopbackStreams(
425
+ participant: StreamVideoParticipant | undefined,
426
+ cameraStream: MediaStream | undefined,
427
+ microphoneStream: MediaStream | undefined,
428
+ includeVideo: boolean,
429
+ ): ResolvedStreams | undefined {
430
+ if (!participant) return undefined;
431
+
432
+ const { loopbackAudioStream, loopbackVideoStream } = getLoopbackStreamsFor(
433
+ participant,
434
+ cameraStream,
435
+ microphoneStream,
436
+ );
437
+
438
+ const audioTrack = loopbackAudioStream?.getAudioTracks()[0];
439
+ const videoTrack = includeVideo
440
+ ? loopbackVideoStream?.getVideoTracks()[0]
441
+ : undefined;
442
+
443
+ if (!audioTrack || (includeVideo && !videoTrack)) {
444
+ return undefined;
445
+ }
446
+
447
+ return { audioTrack, videoTrack };
448
+ }
@@ -37,7 +37,10 @@ export const useModeration = (options?: ModerationOptions) => {
37
37
 
38
38
  // not scheduling a timeout to enable the camera
39
39
  clearTimeout(blurTimeoutRef.current);
40
- if (!isSupported) return turnCameraOff();
40
+ if (!isSupported) {
41
+ void turnCameraOff();
42
+ return;
43
+ }
41
44
 
42
45
  restoreRef.current = (restoreRef.current || Promise.resolve()).then(() =>
43
46
  applyVideoBlurFilter?.('heavy').then(() => {
@@ -4,21 +4,15 @@ export * from './Mic';
4
4
  export * from './MicOff';
5
5
  export * from './Phone';
6
6
  export * from './PhoneDown';
7
- export * from './Settings';
8
7
  export * from './Video';
9
8
  export * from './VideoSlash';
10
- export * from './ThreeDots';
11
9
  export * from './PinVertical';
12
- export * from './Spotlight';
13
10
  export * from './ScreenShareIndicator';
14
11
  export * from './ScreenShare';
15
12
  export * from './Reaction';
16
- export * from './TopViewBackground';
17
13
  export * from './Eye';
18
- export * from './ShieldBadge';
19
14
  export * from './StartStreamIcon';
20
15
  export * from './StopScreenShare';
21
16
  export * from './EndStreamIcon';
22
- export * from './LeaveStreamIcon';
23
17
  export * from './IconWrapper';
24
18
  export * from './Maximize';
@@ -16,15 +16,14 @@ const BusyTonePlayer = () => {
16
16
  return;
17
17
  }
18
18
 
19
+ const logger = videoLoggerSystem.getLogger('RejectCallWhenBusy');
20
+ let busyToneTimeout: ReturnType<typeof setTimeout> | undefined;
21
+
19
22
  const unsubscribe = client.on('call.rejected', async (event) => {
20
23
  const isCallCreatedByMe =
21
24
  event.call.created_by.id === client.state.connectedUser?.id;
22
25
  const isCalleeBusy = isCallCreatedByMe && event.reason === 'busy';
23
26
 
24
- let busyToneTimeout: ReturnType<typeof setTimeout> | undefined;
25
-
26
- const logger = videoLoggerSystem.getLogger('RejectCallWhenBusy');
27
-
28
27
  if (isCalleeBusy) {
29
28
  if (busyToneTimeout) {
30
29
  clearTimeout(busyToneTimeout);
@@ -51,14 +50,15 @@ const BusyTonePlayer = () => {
51
50
  logger.error('playBusyTone failed:', error);
52
51
  });
53
52
  }
54
- return () => {
55
- StreamVideoRN.stopBusyTone().catch((err) =>
56
- logger.error('stopBusyTone on cleanup failed:', err),
57
- );
58
- clearTimeout(busyToneTimeout);
59
- unsubscribe();
60
- };
61
53
  });
54
+
55
+ return () => {
56
+ clearTimeout(busyToneTimeout);
57
+ StreamVideoRN.stopBusyTone().catch((err) =>
58
+ logger.error('stopBusyTone on cleanup failed:', err),
59
+ );
60
+ unsubscribe();
61
+ };
62
62
  }, [client]);
63
63
 
64
64
  return null;
@@ -31,6 +31,7 @@ export const AppStateListener = () => {
31
31
  return;
32
32
  }
33
33
 
34
+ let cancelled = false;
34
35
  const disablePiP = RxUtils.getCurrentValue(disablePiPMode$);
35
36
  const logger = videoLoggerSystem.getLogger('AppStateListener');
36
37
  const initialPipMode =
@@ -40,6 +41,7 @@ export const AppStateListener = () => {
40
41
 
41
42
  NativeModules?.StreamVideoReactNative?.isInPiPMode().then(
42
43
  (isInPiP: boolean | null | undefined) => {
44
+ if (cancelled) return;
43
45
  isInPiPMode$.next(!!isInPiP);
44
46
  logger.debug(
45
47
  'Initial PiP mode on mount (after asking native module) set to ',
@@ -60,6 +62,7 @@ export const AppStateListener = () => {
60
62
  );
61
63
 
62
64
  return () => {
65
+ cancelled = true;
63
66
  subscriptionPiPChange.remove();
64
67
  };
65
68
  }, []);
@@ -8,7 +8,6 @@ import {
8
8
  import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
9
9
 
10
10
  const { StreamVideoReactNative } = NativeModules;
11
- const eventEmitter = new NativeEventEmitter(StreamVideoReactNative);
12
11
  /**
13
12
  * This is a renderless component to get the device stats like thermal state and power saver mode.
14
13
  */
@@ -20,6 +19,8 @@ export const DeviceStats = () => {
20
19
  useEffect(() => {
21
20
  if (!call || callingState !== CallingState.JOINED) return;
22
21
 
22
+ const eventEmitter = new NativeEventEmitter(StreamVideoReactNative);
23
+
23
24
  StreamVideoReactNative.isLowPowerModeEnabled().then(
24
25
  (initialPowerMode: boolean) => {
25
26
  setPowerState(initialPowerMode);
@@ -62,7 +62,6 @@ const DEFAULT_STREAM_VIDEO_CONFIG: StreamVideoConfig = {
62
62
 
63
63
  export class StreamVideoRN {
64
64
  private static config = DEFAULT_STREAM_VIDEO_CONFIG;
65
- private static busyToneTimeout: NodeJS.Timeout | null = null;
66
65
 
67
66
  /**
68
67
  * Update the global config for StreamVideoRN except for push config.
@@ -31,16 +31,18 @@ export function getCallDisplayName(
31
31
 
32
32
  if (callMembers.length > 0) {
33
33
  // for ringing calls, members array contains all call members from the very early state and participants array is empty in the beginning
34
- names = callMembers
35
- .filter((member) => member.user.id !== currentUserId)
36
- .map((member) => member.user.name)
37
- .filter((name): name is string => name !== undefined);
34
+ names = callMembers.flatMap((member) =>
35
+ member.user.id !== currentUserId && member.user.name
36
+ ? [member.user.name]
37
+ : [],
38
+ );
38
39
  } else if (participants.length > 0) {
39
40
  // for non-ringing calls, members array is empty and we rely on participants array there
40
- names = participants
41
- .filter((participant) => participant.userId !== currentUserId)
42
- .map((participant) => participant.name)
43
- .filter(Boolean);
41
+ names = participants.flatMap((participant) =>
42
+ participant.userId !== currentUserId && participant.name
43
+ ? [participant.name]
44
+ : [],
45
+ );
44
46
  }
45
47
 
46
48
  // if no names are found, we use the name of the current user
@@ -66,7 +68,11 @@ function getCallDisplayNameFromCall(call: Call): string {
66
68
  }
67
69
 
68
70
  export async function registerOutgoingCall(call: Call) {
69
- if (!CallingxModule || !CallingxModule.isSetup) {
71
+ if (
72
+ !CallingxModule ||
73
+ !CallingxModule.isSetup ||
74
+ call.isOwnTracksLoopbackAllowed
75
+ ) {
70
76
  return;
71
77
  }
72
78
 
@@ -103,7 +109,11 @@ export async function registerOutgoingCall(call: Call) {
103
109
  * 3. Optionally for non-ringing calls also when ongoing calls are enabled.
104
110
  */
105
111
  export async function joinCallingxCall(call: Call, activeCalls: Call[]) {
106
- if (!CallingxModule || !CallingxModule.isSetup) {
112
+ if (
113
+ !CallingxModule ||
114
+ !CallingxModule.isSetup ||
115
+ call.isOwnTracksLoopbackAllowed
116
+ ) {
107
117
  return;
108
118
  }
109
119
 
@@ -128,7 +128,7 @@ const streamRNVideoSDKGlobals: StreamRNVideoSDKGlobals = {
128
128
  // @stream-io/video-client/src/types.ts and is automatically available when
129
129
  // importing from the client package.
130
130
  export function registerSDKGlobals() {
131
- if (!global.streamRNVideoSDK) {
132
- global.streamRNVideoSDK = streamRNVideoSDKGlobals;
131
+ if (!globalThis.streamRNVideoSDK) {
132
+ globalThis.streamRNVideoSDK = streamRNVideoSDKGlobals;
133
133
  }
134
134
  }
@@ -7,7 +7,7 @@ export type FirebaseMessagingType = Type;
7
7
  const INSTALLATION_INSTRUCTION =
8
8
  'Please see https://rnfirebase.io/messaging/usage#installation for installation instructions';
9
9
 
10
- export function getFirebaseMessagingLib() {
10
+ export function getFirebaseMessagingLib(): FirebaseMessagingType {
11
11
  if (!lib) {
12
12
  throw Error(
13
13
  '@react-native-firebase/messaging is not installed. ' +
@@ -17,7 +17,9 @@ export function getFirebaseMessagingLib() {
17
17
  return lib;
18
18
  }
19
19
 
20
- export function getFirebaseMessagingLibNoThrow(isExpo: boolean) {
20
+ export function getFirebaseMessagingLibNoThrow(
21
+ isExpo: boolean,
22
+ ): FirebaseMessagingType | undefined {
21
23
  if (!lib) {
22
24
  const logger = videoLoggerSystem.getLogger(
23
25
  'getFirebaseMessagingLibNoThrow',
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '1.39.0';
1
+ export const version = '1.40.0';
@@ -1,20 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.LeaveStreamIcon = void 0;
7
- var _react = _interopRequireDefault(require("react"));
8
- var _reactNativeSvg = require("react-native-svg");
9
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
- const LeaveStreamIcon = () => {
11
- return /*#__PURE__*/_react.default.createElement(_reactNativeSvg.Svg, {
12
- viewBox: "0 0 25 24",
13
- fill: "none"
14
- }, /*#__PURE__*/_react.default.createElement(_reactNativeSvg.Path, {
15
- d: "M18.75 5.75L16.9875 7.5125L20.2125 10.75H7.5V13.25H20.2125L16.9875 16.475L18.75 18.25L25 12L18.75 5.75ZM2.5 3.25H12.5V0.75H2.5C1.125 0.75 0 1.875 0 3.25V20.75C0 22.125 1.125 23.25 2.5 23.25H12.5V20.75H2.5V3.25Z",
16
- fill: "#FCFCFC"
17
- }));
18
- };
19
- exports.LeaveStreamIcon = LeaveStreamIcon;
20
- //# sourceMappingURL=LeaveStreamIcon.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNativeSvg","e","__esModule","default","LeaveStreamIcon","createElement","Svg","viewBox","fill","Path","d","exports"],"sourceRoot":"../../../src","sources":["icons/LeaveStreamIcon.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAA6C,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtC,MAAMG,eAAe,GAAGA,CAAA,KAAM;EACnC,oBACEP,MAAA,CAAAM,OAAA,CAAAE,aAAA,CAACL,eAAA,CAAAM,GAAG;IAACC,OAAO,EAAC,WAAW;IAACC,IAAI,EAAC;EAAM,gBAClCX,MAAA,CAAAM,OAAA,CAAAE,aAAA,CAACL,eAAA,CAAAS,IAAI;IACHC,CAAC,EAAC,oNAAoN;IACtNF,IAAI,EAAC;EAAS,CACf,CACE,CAAC;AAEV,CAAC;AAACG,OAAA,CAAAP,eAAA,GAAAA,eAAA","ignoreList":[]}