agora-appbuilder-core 4.0.0-test.2 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. package/package.json +3 -3
  2. package/template/.bundle/config +2 -0
  3. package/template/Gemfile +4 -0
  4. package/template/Gulpfile.js +22 -22
  5. package/template/_eslintrc.js +3 -3
  6. package/template/_gitignore +12 -11
  7. package/template/_package-lock.json +20328 -20229
  8. package/template/_prettierrc.js +2 -2
  9. package/template/agora-rn-uikit/.eslintrc.js +5 -0
  10. package/template/agora-rn-uikit/package.json +14 -14
  11. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
  12. package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
  13. package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
  14. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +6 -6
  15. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +78 -38
  16. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +26 -17
  17. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +1 -0
  18. package/template/agora-rn-uikit/src/Controls/Icons.ts +39 -0
  19. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -4
  20. package/template/agora-rn-uikit/src/Controls/Local/FullScreen.tsx +3 -1
  21. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +5 -2
  22. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +5 -2
  23. package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
  24. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +7 -6
  25. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
  26. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +5 -4
  27. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
  28. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +5 -4
  29. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
  30. package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
  31. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +8 -7
  32. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +8 -7
  33. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +6 -7
  34. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +7 -8
  35. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +9 -9
  36. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -8
  37. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +14 -13
  38. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -7
  39. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -7
  40. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -6
  41. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +20 -3
  42. package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
  43. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -1
  44. package/template/agora-rn-uikit/src/Rtc/Create.tsx +117 -111
  45. package/template/agora-rn-uikit/src/Rtc/Join.tsx +46 -27
  46. package/template/agora-rn-uikit/src/RtcConfigure.tsx +174 -75
  47. package/template/agora-rn-uikit/src/Utils/isBotUser.ts +15 -0
  48. package/template/agora-rn-uikit/src/Utils/quality.tsx +2 -2
  49. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +41 -19
  50. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +37 -17
  51. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +19 -11
  52. package/template/agora-rn-uikit/src/index.ts +15 -9
  53. package/template/android/app/build.gradle +59 -156
  54. package/template/android/app/src/debug/AndroidManifest.xml +6 -1
  55. package/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +7 -4
  56. package/template/android/app/src/main/AndroidManifest.xml +6 -19
  57. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  58. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +17 -0
  59. package/template/android/app/src/main/java/com/helloworld/MainApplication.java +22 -36
  60. package/template/android/app/src/main/java/com/helloworld/SSLPinningFactory.java +30 -0
  61. package/template/android/app/src/main/res/values/strings.xml +3 -0
  62. package/template/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +20 -0
  63. package/template/android/build.gradle +17 -31
  64. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  65. package/template/android/gradle/wrapper/gradle-wrapper.properties +3 -2
  66. package/template/android/gradle.properties +18 -4
  67. package/template/android/gradlew +165 -104
  68. package/template/android/gradlew.bat +12 -23
  69. package/template/android/settings.gradle +1 -0
  70. package/template/bridge/rtc/webNg/RtcEngine.ts +191 -71
  71. package/template/bridge/rtc/webNg/{SurfaceView.tsx → RtcSurfaceView.tsx} +20 -26
  72. package/template/bridge/rtc/webNg/Types.ts +20 -5
  73. package/template/bridge/rtc/webNg/index.ts +81 -14
  74. package/template/bridge/rtm/web/index.ts +5 -3
  75. package/template/configTransform.js +16 -1
  76. package/template/customization-api/action-library.ts +4 -16
  77. package/template/customization-api/app-state.ts +15 -8
  78. package/template/customization-api/customEvents.ts +7 -2
  79. package/template/customization-api/customize.ts +1 -1
  80. package/template/customization-api/index.ts +4 -0
  81. package/template/customization-api/sub-components.ts +17 -16
  82. package/template/customization-api/temp.ts +52 -0
  83. package/template/customization-api/typeDefinition.ts +32 -45
  84. package/template/customization-api/types.ts +26 -0
  85. package/template/customization-api/utils.ts +4 -0
  86. package/template/customization-implementation/index.ts +0 -1
  87. package/template/defaultConfig.js +72 -0
  88. package/template/global.d.ts +9 -1
  89. package/template/index.js +1 -4
  90. package/template/index.web.js +0 -5
  91. package/template/ios/.xcode.env +11 -0
  92. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  93. package/template/ios/HelloWorld/AppDelegate.mm +64 -0
  94. package/template/ios/HelloWorld/HelloWorldDebug.entitlements +10 -0
  95. package/template/ios/HelloWorld/Info.plist +7 -1
  96. package/template/ios/HelloWorld/main.m +2 -1
  97. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +81 -119
  98. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  99. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  100. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  101. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  102. package/template/ios/HelloWorldTests/Info.plist +2 -2
  103. package/template/ios/Podfile +51 -21
  104. package/template/ios/Podfile.lock +553 -294
  105. package/template/jest.config.js +4 -0
  106. package/template/metro.config.js +7 -32
  107. package/template/package.json +48 -39
  108. package/template/react-native-toast-message/index.d.ts +3 -1
  109. package/template/react-native-toast-message/index.js +1 -0
  110. package/template/react-native-toast-message/src/components/base/index.js +20 -32
  111. package/template/react-native-toast-message/src/components/base/styles.js +18 -21
  112. package/template/react-native-toast-message/src/components/checkbox.js +24 -19
  113. package/template/react-native-toast-message/src/index.js +3 -1
  114. package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
  115. package/template/src/App.tsx +79 -22
  116. package/template/src/AppRoutes.tsx +48 -3
  117. package/template/src/AppWrapper.tsx +25 -21
  118. package/template/src/SDKAppWrapper.tsx +11 -11
  119. package/template/src/app-state/useLocalUserInfo.ts +3 -3
  120. package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
  121. package/template/src/app-state/useNoiseSupression.tsx +107 -0
  122. package/template/src/app-state/useVideoQuality.tsx +39 -0
  123. package/template/src/assets/font-styles.css +174 -3
  124. package/template/src/assets/fonts/icomoon.ttf +0 -0
  125. package/template/src/assets/selection.json +1 -1
  126. package/template/src/atoms/ActionMenu.tsx +50 -11
  127. package/template/src/atoms/Avatar.tsx +51 -0
  128. package/template/src/atoms/Card.tsx +21 -8
  129. package/template/src/atoms/Carousel.native.tsx +105 -0
  130. package/template/src/atoms/Carousel.tsx +103 -0
  131. package/template/src/atoms/Checkbox.tsx +98 -0
  132. package/template/src/atoms/CircularProgress.tsx +0 -1
  133. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  134. package/template/src/atoms/CustomIcon.tsx +46 -0
  135. package/template/src/atoms/DropDownMulti.tsx +349 -0
  136. package/template/src/atoms/Dropdown.tsx +3 -3
  137. package/template/src/atoms/IconButton.tsx +52 -9
  138. package/template/src/atoms/ImageIcon.tsx +18 -5
  139. package/template/src/atoms/InlineNotification.tsx +81 -0
  140. package/template/src/atoms/InviteInfo.tsx +4 -4
  141. package/template/src/atoms/MeetingLink.tsx +160 -0
  142. package/template/src/atoms/ParticipantsCount.tsx +20 -8
  143. package/template/src/atoms/Popup.tsx +46 -26
  144. package/template/src/atoms/PrimaryButton.tsx +19 -5
  145. package/template/src/atoms/RecordingInfo.tsx +8 -5
  146. package/template/src/atoms/SecondaryButton.tsx +2 -0
  147. package/template/src/atoms/Spacer.tsx +1 -0
  148. package/template/src/atoms/TertiaryButton.tsx +35 -5
  149. package/template/src/atoms/TextInput.tsx +2 -1
  150. package/template/src/atoms/Toolbar.tsx +102 -0
  151. package/template/src/atoms/ToolbarItem.tsx +85 -0
  152. package/template/src/atoms/ToolbarMenu.tsx +40 -0
  153. package/template/src/atoms/ToolbarMenuItem.tsx +104 -0
  154. package/template/src/atoms/ToolbarPreset.tsx +71 -0
  155. package/template/src/atoms/Tooltip.tsx +30 -13
  156. package/template/src/atoms/pagination/Pagination.tsx +127 -0
  157. package/template/src/atoms/pagination/usePagination.tsx +88 -0
  158. package/template/src/auth/AuthProvider.tsx +30 -32
  159. package/template/src/auth/AuthRoute.tsx +11 -3
  160. package/template/src/auth/IDPAuth.electron.tsx +4 -3
  161. package/template/src/auth/IDPAuth.tsx +10 -2
  162. package/template/src/auth/IDPLogoutComponent.tsx +14 -5
  163. package/template/src/auth/UserCancelPopup.tsx +11 -4
  164. package/template/src/auth/openIDPURL.electron.tsx +5 -4
  165. package/template/src/auth/openIDPURL.tsx +1 -1
  166. package/template/src/auth/useIDPAuth.electron.tsx +6 -3
  167. package/template/src/auth/useIDPAuth.tsx +0 -4
  168. package/template/src/auth/useTokenAuth.tsx +10 -8
  169. package/template/src/components/Chat.tsx +97 -78
  170. package/template/src/components/ChatContext.ts +2 -0
  171. package/template/src/components/ColorConfigure.tsx +0 -1
  172. package/template/src/components/CommonStyles.ts +9 -2
  173. package/template/src/components/Controls.tsx +914 -182
  174. package/template/src/components/Controls1.native.tsx +9 -5
  175. package/template/src/components/DeviceConfigure.native.tsx +2 -2
  176. package/template/src/components/DeviceConfigure.tsx +88 -43
  177. package/template/src/components/DeviceContext.tsx +2 -0
  178. package/template/src/components/EventsConfigure.tsx +685 -81
  179. package/template/src/components/GraphQLProvider.tsx +51 -33
  180. package/template/src/components/GridVideo.tsx +30 -16
  181. package/template/src/components/HostControlView.tsx +11 -14
  182. package/template/src/components/JoinPhrase.tsx +0 -1
  183. package/template/src/components/Leftbar.tsx +110 -0
  184. package/template/src/components/Navbar.tsx +296 -149
  185. package/template/src/components/NavbarMobile.tsx +119 -0
  186. package/template/src/components/NetworkQualityContext.tsx +12 -6
  187. package/template/src/components/ParticipantsView.tsx +62 -55
  188. package/template/src/components/PinnedVideo.tsx +191 -119
  189. package/template/src/components/Precall.native.tsx +155 -72
  190. package/template/src/components/Precall.tsx +225 -73
  191. package/template/src/components/RTMConfigure.tsx +180 -63
  192. package/template/src/components/Rightbar.tsx +112 -0
  193. package/template/src/components/SdkApiContext.tsx +26 -24
  194. package/template/src/components/SdkMuteToggleListener.tsx +8 -12
  195. package/template/src/components/SessionContext.tsx +0 -1
  196. package/template/src/components/Settings.tsx +33 -4
  197. package/template/src/components/SettingsView.tsx +42 -9
  198. package/template/src/components/Share.tsx +130 -72
  199. package/template/src/components/StorageContext.tsx +5 -4
  200. package/template/src/components/ToastComponent.tsx +7 -1
  201. package/template/src/components/WhiteboardLayout.tsx +291 -0
  202. package/template/src/components/chat-messages/useChatMessages.tsx +454 -239
  203. package/template/src/components/chat-ui/{useChatUIControl.tsx → useChatUIControls.tsx} +29 -29
  204. package/template/src/components/common/Error.tsx +2 -0
  205. package/template/src/components/common/Logo.tsx +2 -2
  206. package/template/src/components/contexts/LiveStreamDataContext.tsx +13 -12
  207. package/template/src/components/contexts/ScreenShareContext.tsx +1 -0
  208. package/template/src/components/contexts/VideoMeetingDataContext.tsx +6 -6
  209. package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
  210. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  211. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  212. package/template/src/components/livestream/LiveStreamContext.tsx +314 -220
  213. package/template/src/components/livestream/Types.ts +36 -20
  214. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  215. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -10
  216. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  217. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  218. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
  219. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  220. package/template/src/components/participants/AllAudienceParticipants.tsx +19 -20
  221. package/template/src/components/participants/AllHostParticipants.tsx +20 -19
  222. package/template/src/components/participants/Participant.tsx +45 -16
  223. package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
  224. package/template/src/components/participants/ScreenshareParticipants.tsx +17 -19
  225. package/template/src/components/participants/UserActionMenuOptions.tsx +173 -62
  226. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  227. package/template/src/components/popups/InvitePopup.tsx +105 -44
  228. package/template/src/components/popups/StartScreenSharePopup.native.tsx +26 -23
  229. package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
  230. package/template/src/components/popups/StopScreenSharePopup.native.tsx +17 -5
  231. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  232. package/template/src/components/precall/LocalMute.tsx +69 -45
  233. package/template/src/components/precall/PermissionHelper.tsx +31 -28
  234. package/template/src/components/precall/PreCallSettings.tsx +1 -0
  235. package/template/src/components/precall/VideoFallback.tsx +173 -0
  236. package/template/src/components/precall/VideoPreview.native.tsx +19 -53
  237. package/template/src/components/precall/VideoPreview.tsx +29 -164
  238. package/template/src/components/precall/index.tsx +2 -0
  239. package/template/src/components/precall/joinCallBtn.native.tsx +9 -4
  240. package/template/src/components/precall/joinCallBtn.tsx +9 -4
  241. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
  242. package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
  243. package/template/src/components/precall/meetingTitle.tsx +37 -11
  244. package/template/src/components/precall/selectDevice.tsx +5 -5
  245. package/template/src/components/precall/textInput.tsx +17 -19
  246. package/template/src/components/precall/usePreCall.tsx +4 -4
  247. package/template/src/components/recording-bot/RecordingBotRoute.tsx +42 -0
  248. package/template/src/components/recordings/RecordingsDateTable.tsx +62 -0
  249. package/template/src/components/recordings/RecordingsModal.tsx +135 -0
  250. package/template/src/components/recordings/ViewRecordingsModal.tsx +51 -0
  251. package/template/src/components/recordings/recording-table.tsx +154 -0
  252. package/template/src/components/recordings/style.ts +183 -0
  253. package/template/src/components/recordings/utils.ts +80 -0
  254. package/template/src/components/{meeting-info/useMeetingInfo.tsx → room-info/useRoomInfo.tsx} +46 -12
  255. package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
  256. package/template/src/components/useShareLink.tsx +23 -60
  257. package/template/src/components/useUserPreference.tsx +54 -17
  258. package/template/src/components/useVideoCall.tsx +52 -7
  259. package/template/src/components/virtual-background/VBButton.tsx +64 -0
  260. package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
  261. package/template/src/components/virtual-background/VBCard.tsx +272 -0
  262. package/template/src/components/virtual-background/VBPanel.tsx +279 -0
  263. package/template/src/components/virtual-background/VButils.native.ts +37 -0
  264. package/template/src/components/virtual-background/VButils.ts +104 -0
  265. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  266. package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
  267. package/template/src/components/virtual-background/imagePaths.ts +87 -0
  268. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  269. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  270. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  271. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  272. package/template/src/components/virtual-background/images/index.ts +37 -0
  273. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  274. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  275. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  276. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  277. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  278. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  279. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  280. package/template/src/components/virtual-background/useVB.native.tsx +185 -0
  281. package/template/src/components/virtual-background/useVB.tsx +267 -0
  282. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  283. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  284. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  285. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +148 -0
  286. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +446 -0
  287. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  288. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
  289. package/template/src/components/whiteboard/WhiteboardView.native.tsx +188 -0
  290. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  291. package/template/src/components/whiteboard/WhiteboardWidget.tsx +685 -0
  292. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  293. package/template/src/language/default-labels/commonLabels.ts +51 -14
  294. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  295. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  296. package/template/src/language/default-labels/precallScreenLabels.ts +149 -25
  297. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  298. package/template/src/language/default-labels/videoCallScreenLabels.ts +1195 -158
  299. package/template/src/pages/Create.tsx +118 -92
  300. package/template/src/pages/Endcall.tsx +2 -2
  301. package/template/src/pages/Join.tsx +67 -45
  302. package/template/src/pages/VideoCall.tsx +240 -132
  303. package/template/src/pages/video-call/ActionSheet.native.tsx +33 -3
  304. package/template/src/pages/video-call/ActionSheet.tsx +54 -15
  305. package/template/src/pages/video-call/ActionSheetContent.tsx +487 -313
  306. package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
  307. package/template/src/pages/video-call/DefaultLayouts.ts +20 -8
  308. package/template/src/pages/video-call/NameWithMicIcon.tsx +41 -64
  309. package/template/src/pages/video-call/RenderComponent.tsx +14 -30
  310. package/template/src/pages/video-call/SidePanelHeader.tsx +227 -29
  311. package/template/src/pages/video-call/VideoCallMobileView.tsx +199 -99
  312. package/template/src/pages/video-call/VideoCallScreen.native.tsx +2 -25
  313. package/template/src/pages/video-call/VideoCallScreen.tsx +233 -57
  314. package/template/src/pages/video-call/VideoCallScreenWrapper.tsx +41 -0
  315. package/template/src/pages/video-call/VideoComponent.tsx +60 -8
  316. package/template/src/pages/video-call/VideoRenderer.tsx +237 -98
  317. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  318. package/template/src/pages/video-call/index.ts +42 -8
  319. package/template/src/rtm/RTMEngine.ts +9 -4
  320. package/template/src/rtm-events/constants.ts +21 -3
  321. package/template/src/rtm-events-api/Events.ts +6 -4
  322. package/template/src/rtm-events-api/LocalEvents.ts +14 -0
  323. package/template/src/rtm-events-api/types.ts +5 -5
  324. package/template/src/selection.json +1 -0
  325. package/template/src/subComponents/ChatBubble.tsx +87 -67
  326. package/template/src/subComponents/ChatContainer.tsx +70 -49
  327. package/template/src/subComponents/ChatInput.ios.tsx +32 -85
  328. package/template/src/subComponents/ChatInput.tsx +31 -80
  329. package/template/src/subComponents/Checkbox.native.tsx +46 -46
  330. package/template/src/subComponents/Checkbox.tsx +7 -6
  331. package/template/src/subComponents/CopyJoinInfo.tsx +31 -11
  332. package/template/src/subComponents/EndcallPopup.tsx +83 -12
  333. package/template/src/subComponents/FallbackLogo.tsx +2 -2
  334. package/template/src/subComponents/LanguageSelector.tsx +34 -30
  335. package/template/src/subComponents/LayoutIconButton.tsx +34 -17
  336. package/template/src/subComponents/LayoutIconDropdown.tsx +21 -8
  337. package/template/src/subComponents/Loading.tsx +22 -9
  338. package/template/src/subComponents/LocalAudioMute.tsx +87 -34
  339. package/template/src/subComponents/LocalEndCall.tsx +48 -31
  340. package/template/src/subComponents/LocalSwitchCamera.tsx +49 -11
  341. package/template/src/subComponents/LocalVideoMute.tsx +87 -35
  342. package/template/src/subComponents/NetworkQualityPill.tsx +22 -38
  343. package/template/src/subComponents/Recording.tsx +29 -9
  344. package/template/src/subComponents/RemoteAudioMute.tsx +5 -5
  345. package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
  346. package/template/src/subComponents/RemoteVideoMute.tsx +5 -5
  347. package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
  348. package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
  349. package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
  350. package/template/src/subComponents/SelectDevice.tsx +103 -34
  351. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +9 -6
  352. package/template/src/subComponents/SidePanelButtons.ts +0 -3
  353. package/template/src/subComponents/SidePanelEnum.tsx +2 -0
  354. package/template/src/subComponents/SidePanelHeader.tsx +97 -63
  355. package/template/src/subComponents/ToastConfig.tsx +70 -61
  356. package/template/src/subComponents/caption/Caption.tsx +132 -0
  357. package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
  358. package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
  359. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  360. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  361. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  362. package/template/src/subComponents/caption/Transcript.tsx +452 -0
  363. package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
  364. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  365. package/template/src/subComponents/caption/index.ts +3 -0
  366. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  367. package/template/src/subComponents/caption/proto/test.proto +23 -0
  368. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  369. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  370. package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
  371. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  372. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  373. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +63 -0
  374. package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
  375. package/template/src/subComponents/caption/utils.ts +126 -0
  376. package/template/src/subComponents/chat/ChatParticipants.tsx +60 -24
  377. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +2 -2
  378. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +19 -20
  379. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +66 -35
  380. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +3 -2
  381. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
  382. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
  383. package/template/src/subComponents/recording/useIsRecordingBot.tsx +38 -0
  384. package/template/src/subComponents/recording/useRecording.tsx +251 -150
  385. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
  386. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +18 -13
  387. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +164 -93
  388. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +163 -108
  389. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  390. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
  391. package/template/src/theme/index.ts +13 -0
  392. package/template/src/utils/SdkMethodEvents.ts +5 -5
  393. package/template/src/utils/axiomLogger.ts +117 -0
  394. package/template/src/utils/book.jpg +0 -0
  395. package/template/src/utils/common.tsx +96 -1
  396. package/template/src/utils/constants.ts +4 -0
  397. package/template/src/utils/getCustomRoute.ts +7 -0
  398. package/template/src/utils/index.tsx +34 -0
  399. package/template/src/utils/useActionSheet.tsx +50 -0
  400. package/template/src/utils/useActiveSpeaker.ts +38 -0
  401. package/template/src/utils/useAppState.ts +17 -0
  402. package/template/src/utils/useAsyncEffect.ts +138 -0
  403. package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +19 -14
  404. package/template/src/utils/useEndCall.ts +65 -0
  405. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  406. package/template/src/utils/useFindActiveSpeaker.ts +335 -0
  407. package/template/src/utils/useGetMeetingPhrase.ts +10 -10
  408. package/template/src/utils/useIsAudioEnabled.ts +3 -3
  409. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  410. package/template/src/utils/useIsLocalUserSpeaking.ts +103 -0
  411. package/template/src/utils/useIsPSTN.ts +3 -3
  412. package/template/src/utils/useIsVideoEnabled.ts +3 -3
  413. package/template/src/utils/useJoinRoom.ts +199 -0
  414. package/template/src/utils/{useIsActiveSpeaker.ts → useLocalAudio.ts} +23 -12
  415. package/template/src/{components/Settings.native.tsx → utils/useMenu.tsx} +16 -6
  416. package/template/src/utils/useModal.tsx +8 -0
  417. package/template/src/utils/useMutePSTN.ts +2 -2
  418. package/template/src/utils/useMuteToggleLocal.ts +21 -9
  419. package/template/src/utils/useRemoteEndCall.ts +4 -4
  420. package/template/src/utils/useRemoteEndScreenshare.ts +4 -4
  421. package/template/src/utils/useRemoteMute.ts +7 -7
  422. package/template/src/utils/useRemoteRequest.ts +7 -7
  423. package/template/src/utils/useSearchParams.tsx +18 -0
  424. package/template/src/utils/useString.ts +13 -3
  425. package/template/src/utils/useSwitchCamera.native.tsx +25 -0
  426. package/template/src/utils/useSwitchCamera.tsx +19 -0
  427. package/template/src/utils/useToolbar.tsx +59 -0
  428. package/template/src/wasms/agora-virtual-background.wasm +0 -0
  429. package/template/static.d.ts +42 -0
  430. package/template/web/index.html +20 -0
  431. package/template/webpack.commons.js +21 -10
  432. package/template/_buckconfig +0 -6
  433. package/template/_gitattributes +0 -1
  434. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
  435. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
  436. package/template/android/app/_BUCK +0 -55
  437. package/template/android/app/build_defs.bzl +0 -19
  438. package/template/bridge/rtc/webNg/LocalView.tsx +0 -20
  439. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  440. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
  441. package/template/src/utils/useButtonTemplate.tsx +0 -44
  442. package/template/src/utils/useJoinMeeting.ts +0 -142
@@ -25,14 +25,17 @@ import AgoraRTC, {
25
25
  ClientRoleOptions,
26
26
  CameraVideoTrackInitConfig,
27
27
  MicrophoneAudioTrackInitConfig,
28
+ IMicrophoneAudioTrack,
28
29
  } from 'agora-rtc-sdk-ng';
29
30
  import type {
30
31
  RtcEngineEvents,
31
32
  Subscription,
32
33
  } from 'react-native-agora/lib/typescript/src/common/RtcEvents';
34
+
35
+ import {IRtcEngine} from 'react-native-agora';
33
36
  import {VideoProfile} from '../quality';
34
- import {ChannelProfile, ClientRole} from '../../../agora-rn-uikit';
35
- import {role, mode} from './Types';
37
+ import {ChannelProfileType, ClientRoleType} from '../../../agora-rn-uikit';
38
+ import {role, mode, RtcEngineContext} from './Types';
36
39
  import {LOG_ENABLED, GEO_FENCING} from '../../../config.json';
37
40
  import {Platform} from 'react-native';
38
41
  import isMobileOrTablet from '../../../src/utils/isMobileOrTablet';
@@ -137,6 +140,19 @@ export enum RnEncryptionEnum {
137
140
  * @since v3.3.1
138
141
  */
139
142
  AES256GCM = 6,
143
+ /**
144
+ * 7: 128-bit GCM encryption, GCM mode.
145
+ *
146
+ * @since v3.4.5
147
+ */
148
+
149
+ AES128GCM2 = 7,
150
+ /**
151
+ * 8: 256-bit AES encryption, GCM mode.
152
+ *
153
+ * @since v3.4.5
154
+ */
155
+ AES256GCM2 = 8,
140
156
  }
141
157
 
142
158
  export enum VideoStreamType {
@@ -156,6 +172,7 @@ interface RemoteStream {
156
172
  audio?: IRemoteAudioTrack;
157
173
  video?: IRemoteVideoTrack;
158
174
  }
175
+
159
176
  if ($config.GEO_FENCING) {
160
177
  AgoraRTC.setArea({
161
178
  areaCode: AREAS.GLOBAL,
@@ -177,14 +194,15 @@ export default class RtcEngine {
177
194
  public client: any | IAgoraRTCClient;
178
195
  public screenClient: any | IAgoraRTCClient;
179
196
  public eventsMap = new Map<string, callbackType>([
180
- ['UserJoined', () => null],
181
- ['UserOffline', () => null],
182
- ['JoinChannelSuccess', () => null],
183
- ['ScreenshareStopped', () => null],
184
- ['RemoteAudioStateChanged', () => null],
185
- ['RemoteVideoStateChanged', () => null],
186
- ['NetworkQuality', () => null],
187
- ['ActiveSpeaker', () => null],
197
+ ['onUserJoined', () => null],
198
+ ['onUserOffline', () => null],
199
+ ['onJoinChannelSuccess', () => null],
200
+ ['onScreenshareStopped', () => null],
201
+ ['onRemoteAudioStateChanged', () => null],
202
+ ['onRemoteVideoStateChanged', () => null],
203
+ ['onNetworkQuality', () => null],
204
+ ['onActiveSpeaker', () => null],
205
+ ['onStreamMessage', () => null],
188
206
  ]);
189
207
  public localStream: LocalStream = {};
190
208
  public screenStream: ScreenStream = {};
@@ -202,19 +220,12 @@ export default class RtcEngine {
202
220
  private muteLocalVideoMutex = false;
203
221
  private muteLocalAudioMutex = false;
204
222
  private speakerDeviceId = '';
223
+ private usersVolumeLevel = [];
205
224
  // Create channel profile and set it here
206
225
 
207
- // Create channel profile and set it here
208
-
209
- constructor(appId: string) {
226
+ initialize(context: RtcEngineContext) {
227
+ const {appId} = context;
210
228
  this.appId = appId;
211
- // this.AgoraRTC = AgoraRTC;
212
- }
213
-
214
- static async create(appId: string): Promise<RtcEngine> {
215
- let engine = new RtcEngine(appId);
216
- window.engine = engine;
217
- return engine;
218
229
  }
219
230
 
220
231
  getRemoteVideoStats(id: string) {
@@ -229,6 +240,7 @@ export default class RtcEngine {
229
240
 
230
241
  async setVideoProfile(profile: VideoProfile): Promise<void> {
231
242
  this.videoProfile = profile;
243
+ this.localStream?.video?.setEncoderConfiguration(profile);
232
244
  }
233
245
 
234
246
  async enableAudio(): Promise<void> {
@@ -250,7 +262,10 @@ export default class RtcEngine {
250
262
  }
251
263
  }
252
264
 
253
- async enableVideo(): Promise<void> {
265
+ async enableVideo(
266
+ preferredCameraId?: string,
267
+ preferredMicrophoneId?: string,
268
+ ): Promise<void> {
254
269
  /**
255
270
  * Issue: Backgrounding the browser or app causes the audio streaming to be cut off.
256
271
  * Impact: All browsers and apps that use WKWebView on iOS 15.x, such as Safari and Chrome.
@@ -262,14 +277,16 @@ export default class RtcEngine {
262
277
 
263
278
  const audioConfig: MicrophoneAudioTrackInitConfig = {
264
279
  bypassWebAudio: Platform.OS == 'web' && isMobileOrTablet(),
265
- // microphoneId: this.audioDeviceId,
280
+ microphoneId: preferredMicrophoneId,
266
281
  };
267
282
  const videoConfig: CameraVideoTrackInitConfig = {
268
283
  encoderConfig: this.videoProfile,
269
- // cameraId: this.videoDeviceId,
284
+ cameraId: preferredCameraId,
270
285
  };
271
286
  try {
272
287
  let [localAudio, localVideo] =
288
+ // If preferred devices are not present, the createTrack call will fallover to
289
+ // the catch block below.
273
290
  await AgoraRTC.createMicrophoneAndCameraTracks(
274
291
  audioConfig,
275
292
  videoConfig,
@@ -287,9 +304,15 @@ export default class RtcEngine {
287
304
  } catch (e) {
288
305
  let audioError = false;
289
306
  let videoError = false;
290
- try {
291
- let localAudio = await AgoraRTC.createMicrophoneAudioTrack(audioConfig);
292
307
 
308
+ try {
309
+ let localAudio: IMicrophoneAudioTrack;
310
+ try {
311
+ localAudio = await AgoraRTC.createMicrophoneAudioTrack(audioConfig);
312
+ } catch (e) {
313
+ videoConfig.microphoneId = '';
314
+ localAudio = await AgoraRTC.createMicrophoneAudioTrack(audioConfig);
315
+ }
293
316
  this.localStream.audio = localAudio;
294
317
  this.audioDeviceId = localAudio
295
318
  ?.getMediaStreamTrack()
@@ -298,8 +321,41 @@ export default class RtcEngine {
298
321
  } catch (error) {
299
322
  audioError = error;
300
323
  }
324
+
301
325
  try {
302
- let localVideo = await AgoraRTC.createCameraVideoTrack(videoConfig);
326
+ let localVideo: ICameraVideoTrack;
327
+ try {
328
+ localVideo = await AgoraRTC.createCameraVideoTrack(videoConfig);
329
+ } catch (e) {
330
+ videoConfig.cameraId = '';
331
+ try {
332
+ localVideo = await AgoraRTC.createCameraVideoTrack(videoConfig);
333
+ } catch (e) {
334
+ console.log(
335
+ '[RTCEngineBridge]: Provided cameraId and default camera failed, trying other available devices',
336
+ );
337
+ const devices = await navigator.mediaDevices.enumerateDevices();
338
+ for (let device of devices) {
339
+ if (device.kind === 'videoinput') {
340
+ videoConfig.cameraId = device.deviceId;
341
+ try {
342
+ localVideo = await AgoraRTC.createCameraVideoTrack(
343
+ videoConfig,
344
+ );
345
+ break;
346
+ } catch (e) {
347
+ videoError = e;
348
+ console.log(
349
+ '[RTCEngineBridge]:',
350
+ 'Camera not available with deviceId' + device,
351
+ 'Reason: ',
352
+ e,
353
+ );
354
+ }
355
+ }
356
+ }
357
+ }
358
+ }
303
359
  this.localStream.video = localVideo;
304
360
  this.videoDeviceId = localVideo
305
361
  ?.getMediaStreamTrack()
@@ -308,6 +364,7 @@ export default class RtcEngine {
308
364
  } catch (error) {
309
365
  videoError = error;
310
366
  }
367
+
311
368
  e.status = {audioError, videoError};
312
369
  throw e;
313
370
  // if (audioError && videoError) throw e;
@@ -350,7 +407,7 @@ export default class RtcEngine {
350
407
 
351
408
  if (this.isPublished === false) {
352
409
  this.isPublished = true;
353
- (this.eventsMap.get('JoinChannelSuccess') as callbackType)();
410
+ (this.eventsMap.get('onJoinChannelSuccess') as callbackType)();
354
411
  }
355
412
  }
356
413
  } catch (e) {
@@ -363,19 +420,21 @@ export default class RtcEngine {
363
420
  async joinChannel(
364
421
  token: string,
365
422
  channelName: string,
366
- optionalInfo: string,
367
423
  optionalUid: number,
424
+ _optionalInfo: {},
368
425
  ): Promise<void> {
369
426
  // TODO create agora client here
370
- this.client.on('user-joined', (user) => {
371
- (this.eventsMap.get('UserJoined') as callbackType)(user.uid);
372
- (this.eventsMap.get('RemoteVideoStateChanged') as callbackType)(
427
+ this.client.on('user-joined', user => {
428
+ (this.eventsMap.get('onUserJoined') as callbackType)({}, user.uid);
429
+ (this.eventsMap.get('onRemoteVideoStateChanged') as callbackType)(
430
+ {},
373
431
  user.uid,
374
432
  0,
375
433
  0,
376
434
  0,
377
435
  );
378
- (this.eventsMap.get('RemoteAudioStateChanged') as callbackType)(
436
+ (this.eventsMap.get('onRemoteAudioStateChanged') as callbackType)(
437
+ {},
379
438
  user.uid,
380
439
  0,
381
440
  0,
@@ -383,18 +442,19 @@ export default class RtcEngine {
383
442
  );
384
443
  });
385
444
 
386
- this.client.on('user-left', (user) => {
445
+ this.client.on('user-left', user => {
387
446
  const uid = user.uid;
388
447
  if (this.remoteStreams.has(uid)) {
389
448
  this.remoteStreams.delete(uid);
390
449
  }
391
- (this.eventsMap.get('UserOffline') as callbackType)(uid);
450
+ (this.eventsMap.get('onUserOffline') as callbackType)({}, uid);
392
451
  // (this.eventsMap.get('UserJoined') as callbackType)(uid);
393
452
  });
394
453
  this.client.on('user-published', async (user, mediaType) => {
395
454
  // Initiate the subscription
396
455
  if (this.inScreenshare && user.uid === this.screenClient.uid) {
397
- (this.eventsMap.get('RemoteVideoStateChanged') as callbackType)(
456
+ (this.eventsMap.get('onRemoteVideoStateChanged') as callbackType)(
457
+ {},
398
458
  user.uid,
399
459
  2,
400
460
  0,
@@ -418,7 +478,8 @@ export default class RtcEngine {
418
478
  .get(user.uid)
419
479
  ?.audio?.setPlaybackDevice(this.speakerDeviceId);
420
480
  }
421
- (this.eventsMap.get('RemoteAudioStateChanged') as callbackType)(
481
+ (this.eventsMap.get('onRemoteAudioStateChanged') as callbackType)(
482
+ {},
422
483
  user.uid,
423
484
  2,
424
485
  0,
@@ -432,7 +493,8 @@ export default class RtcEngine {
432
493
  ...this.remoteStreams.get(user.uid),
433
494
  video: videoTrack,
434
495
  });
435
- (this.eventsMap.get('RemoteVideoStateChanged') as callbackType)(
496
+ (this.eventsMap.get('onRemoteVideoStateChanged') as callbackType)(
497
+ {},
436
498
  user.uid,
437
499
  2,
438
500
  0,
@@ -444,7 +506,8 @@ export default class RtcEngine {
444
506
  if (mediaType === 'audio') {
445
507
  const {audio, ...rest} = this.remoteStreams.get(user.uid);
446
508
  this.remoteStreams.set(user.uid, rest);
447
- (this.eventsMap.get('RemoteAudioStateChanged') as callbackType)(
509
+ (this.eventsMap.get('onRemoteAudioStateChanged') as callbackType)(
510
+ {},
448
511
  user.uid,
449
512
  0,
450
513
  0,
@@ -453,7 +516,8 @@ export default class RtcEngine {
453
516
  } else {
454
517
  const {video, ...rest} = this.remoteStreams.get(user.uid);
455
518
  this.remoteStreams.set(user.uid, rest);
456
- (this.eventsMap.get('RemoteVideoStateChanged') as callbackType)(
519
+ (this.eventsMap.get('onRemoteVideoStateChanged') as callbackType)(
520
+ {},
457
521
  user.uid,
458
522
  0,
459
523
  0,
@@ -462,7 +526,10 @@ export default class RtcEngine {
462
526
  }
463
527
  });
464
528
 
465
- this.client.on('volume-indicator', (volumes) => {
529
+ this.client.on('volume-indicator', volumes => {
530
+ this.usersVolumeLevel = volumes;
531
+ /**
532
+ * old active speaker logic
466
533
  const highestvolumeObj = volumes.reduce(
467
534
  (highestVolume, volume, index) => {
468
535
  if (highestVolume === null) {
@@ -473,7 +540,7 @@ export default class RtcEngine {
473
540
  }
474
541
  return highestVolume;
475
542
  }
476
- // console.log(`${index} UID ${volume.uid} Level ${volume.level}`);
543
+ //console.log(`${index} UID ${volume.uid} Level ${volume.level}`);
477
544
  },
478
545
  null,
479
546
  );
@@ -490,6 +557,7 @@ export default class RtcEngine {
490
557
  activeSpeakerCallBack(activeSpeakerUid);
491
558
  this.activeSpeakerUid = activeSpeakerUid;
492
559
  }
560
+ */
493
561
  });
494
562
 
495
563
  // this.client.on('stream-fallback', (evt))
@@ -501,28 +569,38 @@ export default class RtcEngine {
501
569
  'network-quality',
502
570
  async ({downlinkNetworkQuality, uplinkNetworkQuality}) => {
503
571
  const networkQualityIndicatorCallback = this.eventsMap.get(
504
- 'NetworkQuality',
572
+ 'onNetworkQuality',
505
573
  ) as callbackType;
506
574
 
507
575
  networkQualityIndicatorCallback(
576
+ {},
508
577
  0,
509
- downlinkNetworkQuality,
510
578
  uplinkNetworkQuality,
579
+ downlinkNetworkQuality,
511
580
  );
512
581
 
513
582
  const remoteUserNetworkQualities =
514
583
  this.client.getRemoteNetworkQuality();
515
584
 
516
- Object.keys(remoteUserNetworkQualities).forEach((uid) => {
585
+ Object.keys(remoteUserNetworkQualities).forEach(uid => {
517
586
  networkQualityIndicatorCallback(
587
+ {},
518
588
  uid,
519
- remoteUserNetworkQualities[uid].downlinkNetworkQuality,
520
589
  remoteUserNetworkQualities[uid].uplinkNetworkQuality,
590
+ remoteUserNetworkQualities[uid].downlinkNetworkQuality,
521
591
  );
522
592
  });
523
593
  },
524
594
  );
525
595
 
596
+ /* Recieve Captions */
597
+ this.client.on('stream-message', (uid: UID, payload: UInt8Array) => {
598
+ console.log(
599
+ `stt-web: onStreamMessageCallback uid:${uid} , payload:${payload}`,
600
+ );
601
+ (this.eventsMap.get('onStreamMessage') as callbackType)(uid, payload);
602
+ });
603
+
526
604
  await this.client.join(
527
605
  this.appId,
528
606
  channelName,
@@ -535,6 +613,10 @@ export default class RtcEngine {
535
613
  console.log('enabling screen sleep');
536
614
  }
537
615
 
616
+ getUsersVolumeLevel() {
617
+ return this.usersVolumeLevel;
618
+ }
619
+
538
620
  async leaveChannel(): Promise<void> {
539
621
  this.client.leave();
540
622
  this.remoteStreams.forEach((stream, uid, map) => {
@@ -550,17 +632,19 @@ export default class RtcEngine {
550
632
  listener: RtcEngineEvents[EventType],
551
633
  ): Subscription {
552
634
  if (
553
- event === 'UserJoined' ||
554
- event === 'UserOffline' ||
555
- event === 'JoinChannelSuccess' ||
556
- event === 'ScreenshareStopped' ||
557
- event === 'RemoteAudioStateChanged' ||
558
- event === 'RemoteVideoStateChanged' ||
559
- event === 'NetworkQuality' ||
560
- event === 'ActiveSpeaker'
635
+ event === 'onUserJoined' ||
636
+ event === 'onUserOffline' ||
637
+ event === 'onJoinChannelSuccess' ||
638
+ event === 'onScreenshareStopped' ||
639
+ event === 'onRemoteAudioStateChanged' ||
640
+ event === 'onRemoteVideoStateChanged' ||
641
+ event === 'onNetworkQuality' ||
642
+ event === 'onActiveSpeaker' ||
643
+ event === 'onStreamMessage'
561
644
  ) {
562
645
  this.eventsMap.set(event, listener as callbackType);
563
646
  }
647
+
564
648
  return {
565
649
  remove: () => {
566
650
  console.log(
@@ -661,17 +745,21 @@ export default class RtcEngine {
661
745
  return devices;
662
746
  }
663
747
 
664
- async setChannelProfile(profile: ChannelProfile): Promise<void> {
748
+ async setChannelProfile(profile: ChannelProfileType): Promise<void> {
665
749
  try {
666
750
  this.client = AgoraRTC.createClient({
667
- codec: 'vp8',
751
+ codec: 'vp9',
668
752
  mode:
669
- profile === ChannelProfile.LiveBroadcasting ? mode.live : mode.rtc,
753
+ profile === ChannelProfileType.ChannelProfileLiveBroadcasting
754
+ ? mode.live
755
+ : mode.rtc,
670
756
  });
671
757
  this.screenClient = AgoraRTC.createClient({
672
- codec: 'vp8',
758
+ codec: 'vp9',
673
759
  mode:
674
- profile === ChannelProfile.LiveBroadcasting ? mode.live : mode.rtc,
760
+ profile === ChannelProfileType.ChannelProfileLiveBroadcasting
761
+ ? mode.live
762
+ : mode.rtc,
675
763
  });
676
764
  } catch (e) {
677
765
  throw e;
@@ -679,11 +767,11 @@ export default class RtcEngine {
679
767
  }
680
768
 
681
769
  async setClientRole(
682
- clientRole: ClientRole,
770
+ clientRole: ClientRoleType,
683
771
  options?: ClientRoleOptions,
684
772
  ): Promise<void> {
685
773
  try {
686
- if (clientRole == ClientRole.Audience) {
774
+ if (clientRole == ClientRoleType.ClientRoleAudience) {
687
775
  if (this.isJoined) {
688
776
  // Unpublish the streams when role is changed to Audience
689
777
  await this.client.unpublish();
@@ -693,7 +781,7 @@ export default class RtcEngine {
693
781
  }
694
782
  await this.client.setClientRole(role.audience, options);
695
783
  await this.screenClient.setClientRole(role.audience, options);
696
- } else if (clientRole == ClientRole.Broadcaster) {
784
+ } else if (clientRole == ClientRoleType.ClientRoleBroadcaster) {
697
785
  await this.client.setClientRole(role.host);
698
786
  await this.screenClient.setClientRole(role.host);
699
787
  }
@@ -772,7 +860,7 @@ export default class RtcEngine {
772
860
 
773
861
  // Bug in implementation !!!
774
862
  async setRemoteSubscribeFallbackOption(option: 0 | 1 | 2) {
775
- this.streams.forEach((stream) => {
863
+ this.streams.forEach(stream => {
776
864
  this.client.setStreamFallbackOption(stream, option);
777
865
  });
778
866
  Promise.resolve();
@@ -797,6 +885,17 @@ export default class RtcEngine {
797
885
  break;
798
886
  case RnEncryptionEnum.SM4128ECB:
799
887
  mode = 'sm4-128-ecb';
888
+ break;
889
+ case RnEncryptionEnum.AES256GCM:
890
+ mode = 'aes-256-gcm';
891
+ break;
892
+ case RnEncryptionEnum.AES128GCM2:
893
+ mode = 'aes-128-gcm2';
894
+ break;
895
+ case RnEncryptionEnum.AES256GCM2:
896
+ mode = 'aes-256-gcm2';
897
+ break;
898
+
800
899
  default:
801
900
  mode = 'none';
802
901
  }
@@ -811,14 +910,25 @@ export default class RtcEngine {
811
910
  config: {
812
911
  encryptionMode: RnEncryptionEnum;
813
912
  encryptionKey: string;
913
+ encryptionKdfSalt: string;
814
914
  },
815
915
  ): Promise<void> {
816
916
  let mode: EncryptionMode;
817
917
  mode = this.getEncryptionMode(enabled, config?.encryptionMode);
818
918
  try {
819
919
  await Promise.all([
820
- this.client.setEncryptionConfig(mode, config.encryptionKey),
821
- this.screenClient.setEncryptionConfig(mode, config.encryptionKey),
920
+ this.client.setEncryptionConfig(
921
+ mode,
922
+ config.encryptionKey,
923
+ config.encryptionKdfSalt,
924
+ true, // encryptDataStream
925
+ ),
926
+ this.screenClient.setEncryptionConfig(
927
+ mode,
928
+ config.encryptionKey,
929
+ config.encryptionKdfSalt,
930
+ true, // encryptDataStream
931
+ ),
822
932
  ]);
823
933
  } catch (e) {
824
934
  throw e;
@@ -845,13 +955,18 @@ export default class RtcEngine {
845
955
  console.error('Please use enableEncryption instead');
846
956
  }
847
957
 
848
- async destroy(): Promise<void> {
958
+ // async removeAllListeners<EventType extends keyof RtcEngineEvents>(event: EventType) {
959
+ // this.client.removeAllListeners(eventName);
960
+ // }
961
+
962
+ async release(): Promise<void> {
849
963
  if (this.inScreenshare) {
850
- (this.eventsMap.get('UserOffline') as callbackType)(
964
+ (this.eventsMap.get('onUserOffline') as callbackType)(
965
+ {},
851
966
  this.screenClient.uid,
852
967
  );
853
968
  this.screenClient.leave();
854
- (this.eventsMap.get('ScreenshareStopped') as callbackType)();
969
+ (this.eventsMap.get('onScreenshareStopped') as callbackType)();
855
970
  }
856
971
  this.eventsMap.forEach((callback, event, map) => {
857
972
  this.client.off(event, callback);
@@ -902,6 +1017,7 @@ export default class RtcEngine {
902
1017
  encryption: {
903
1018
  screenKey: string;
904
1019
  mode: RnEncryptionEnum;
1020
+ salt: string;
905
1021
  },
906
1022
  config: ScreenVideoTrackInitConfig = {},
907
1023
  audio: 'enable' | 'disable' | 'auto' = 'auto',
@@ -922,6 +1038,8 @@ export default class RtcEngine {
922
1038
  await this.screenClient.setEncryptionConfig(
923
1039
  mode,
924
1040
  encryption.screenKey,
1041
+ encryption.salt,
1042
+ true, // encryptDataStream
925
1043
  );
926
1044
  } catch (e) {
927
1045
  console.log('e: Encryption for screenshare failed', e);
@@ -958,7 +1076,8 @@ export default class RtcEngine {
958
1076
  );
959
1077
 
960
1078
  this.screenStream.video.on('track-ended', () => {
961
- (this.eventsMap.get('UserOffline') as callbackType)(
1079
+ (this.eventsMap.get('onUserOffline') as callbackType)(
1080
+ {},
962
1081
  this.screenClient.uid,
963
1082
  );
964
1083
 
@@ -968,15 +1087,16 @@ export default class RtcEngine {
968
1087
  this.screenStream.video?.close();
969
1088
  this.screenStream = {};
970
1089
 
971
- (this.eventsMap.get('ScreenshareStopped') as callbackType)();
1090
+ (this.eventsMap.get('onScreenshareStopped') as callbackType)();
972
1091
  this.inScreenshare = false;
973
1092
  });
974
1093
  } else {
975
- (this.eventsMap.get('UserOffline') as callbackType)(
1094
+ (this.eventsMap.get('onUserOffline') as callbackType)(
1095
+ {},
976
1096
  this.screenClient.uid,
977
1097
  );
978
1098
  this.screenClient.leave();
979
- (this.eventsMap.get('ScreenshareStopped') as callbackType)();
1099
+ (this.eventsMap.get('onScreenshareStopped') as callbackType)();
980
1100
  try {
981
1101
  this.screenStream.audio?.close();
982
1102
  this.screenStream.video?.close();
@@ -13,57 +13,51 @@
13
13
  import {ILocalVideoTrack, IRemoteVideoTrack} from 'agora-rtc-sdk-ng';
14
14
  import React, {useEffect} from 'react';
15
15
  import {StyleProp, StyleSheet, ViewProps, ViewStyle} from 'react-native';
16
- import {VideoMirrorMode, VideoRenderMode} from 'react-native-agora';
16
+ import {RenderModeType} from './Types';
17
17
 
18
18
  export interface RtcSurfaceViewProps extends ViewProps {
19
- zOrderMediaOverlay?: boolean;
20
- zOrderOnTop?: boolean;
21
- renderMode?: any;
22
- channelId?: string;
23
- mirrorMode?: any;
24
- }
25
- export interface RtcUidProps {
26
- uid: number;
19
+ canvas: {
20
+ renderMode?: RenderModeType;
21
+ uid?: number;
22
+ };
27
23
  }
24
+
28
25
  export interface StyleProps {
29
26
  style?: StyleProp<ViewStyle>;
30
27
  }
31
28
 
32
- interface SurfaceViewInterface
33
- extends RtcSurfaceViewProps,
34
- RtcUidProps,
35
- StyleProps {}
36
-
37
- const SurfaceView = (props: SurfaceViewInterface) => {
38
- // console.log('Surface View props', props);
29
+ interface SurfaceViewInterface extends RtcSurfaceViewProps, StyleProps {}
39
30
 
31
+ const RtcSurfaceView = (props: SurfaceViewInterface) => {
32
+ console.log('Rtc Surface View props', props);
33
+ const {uid, renderMode} = props.canvas;
40
34
  const stream: ILocalVideoTrack | IRemoteVideoTrack =
41
- props.uid === 0
35
+ uid === 0
42
36
  ? window.engine.localStream.video
43
- : props.uid === 1
37
+ : uid === 1
44
38
  ? window.engine.screenStream.video
45
- : window.engine.remoteStreams.get(props.uid)?.video;
39
+ : window.engine.remoteStreams.get(uid)?.video;
46
40
  // console.log(props, window.engine, stream);
47
41
  useEffect(
48
42
  function () {
49
43
  if (stream?.play) {
50
- if (props.renderMode === 2) {
51
- stream.play(String(props.uid), {fit: 'contain'});
44
+ if (renderMode === RenderModeType.RenderModeFit) {
45
+ stream.play(String(uid), {fit: 'contain'});
52
46
  } else {
53
- stream.play(String(props.uid));
47
+ stream.play(String(uid));
54
48
  }
55
49
  }
56
50
  return () => {
57
- console.log(`unmounting stream ${props.uid}`, stream);
51
+ console.log(`unmounting stream ${uid}`, stream);
58
52
  stream && stream.stop();
59
53
  };
60
54
  },
61
- [props.uid, props.renderMode, stream],
55
+ [uid, renderMode, stream],
62
56
  );
63
57
 
64
58
  return stream ? (
65
59
  <div
66
- id={String(props.uid)}
60
+ id={String(uid)}
67
61
  className={'video-container'}
68
62
  style={{...style.full, ...(props.style as Object), overflow: 'hidden'}}
69
63
  />
@@ -78,4 +72,4 @@ const style = StyleSheet.create({
78
72
  },
79
73
  });
80
74
 
81
- export default SurfaceView;
75
+ export default RtcSurfaceView;
@@ -9,11 +9,26 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- export enum VideoRenderMode {
13
- Hidden = 1,
14
- Fit,
15
- Adaptive,
12
+
13
+ export interface RtcEngineContext {
14
+ appId?: string;
16
15
  }
16
+
17
+ export enum RenderModeType {
18
+ /**
19
+ * 1: Hidden mode. Uniformly scale the video until one of its dimension fits the boundary (zoomed to fit). One dimension of the video may have clipped contents.
20
+ */
21
+ RenderModeHidden = 1,
22
+ /**
23
+ * 2: Fit mode. Uniformly scale the video until one of its dimension fits the boundary (zoomed to fit). Areas that are not filled due to disparity in the aspect ratio are filled with black.
24
+ */
25
+ RenderModeFit = 2,
26
+ /**
27
+ * @ignore
28
+ */
29
+ RenderModeAdaptive = 3,
30
+ }
31
+
17
32
  export enum VideoMirrorMode {
18
33
  /**
19
34
  * 0: (Default) The SDK determines the mirror mode.
@@ -26,7 +41,7 @@ export enum VideoMirrorMode {
26
41
  /**
27
42
  * 2: Disables mirror mode.
28
43
  */
29
- Disabled = 2
44
+ Disabled = 2,
30
45
  }
31
46
  /**
32
47
  *