agora-appbuilder-core 4.0.0 → 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 (475) 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 +29 -29
  5. package/template/_eslintrc.js +3 -3
  6. package/template/_gitignore +12 -11
  7. package/template/_package-lock.json +28491 -23647
  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 +79 -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 +45 -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 +138 -100
  45. package/template/agora-rn-uikit/src/Rtc/Join.tsx +55 -28
  46. package/template/agora-rn-uikit/src/RtcConfigure.tsx +177 -77
  47. package/template/agora-rn-uikit/src/Utils/isBotUser.ts +15 -0
  48. package/template/agora-rn-uikit/src/Utils/quality.tsx +8 -0
  49. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +56 -12
  50. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +47 -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 +19 -33
  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 +200 -70
  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 +34 -46
  84. package/template/customization-api/types.ts +26 -0
  85. package/template/customization-api/utils.ts +4 -0
  86. package/template/customization-implementation/createHook.ts +24 -6
  87. package/template/customization-implementation/index.ts +1 -2
  88. package/template/customization-implementation/useCustomization.tsx +5 -7
  89. package/template/defaultConfig.js +72 -0
  90. package/template/global.d.ts +14 -1
  91. package/template/index.js +1 -4
  92. package/template/index.web.js +0 -5
  93. package/template/index.wsdk.tsx +1 -12
  94. package/template/ios/.xcode.env +11 -0
  95. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  96. package/template/ios/HelloWorld/AppDelegate.mm +64 -0
  97. package/template/ios/HelloWorld/HelloWorldDebug.entitlements +10 -0
  98. package/template/ios/HelloWorld/Info.plist +8 -2
  99. package/template/ios/HelloWorld/main.m +2 -1
  100. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +533 -17
  101. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  102. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  103. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  104. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  105. package/template/ios/HelloWorldTests/Info.plist +2 -2
  106. package/template/ios/Podfile +54 -20
  107. package/template/ios/Podfile.lock +809 -0
  108. package/template/ios/ScreenSharing/Info.plist +15 -0
  109. package/template/ios/ScreenSharing/SampleHandler.h +9 -0
  110. package/template/ios/ScreenSharing/SampleHandler.m +70 -0
  111. package/template/jest.config.js +4 -0
  112. package/template/metro.config.js +7 -32
  113. package/template/package.json +53 -39
  114. package/template/react-native-toast-message/index.d.ts +3 -1
  115. package/template/react-native-toast-message/index.js +1 -0
  116. package/template/react-native-toast-message/src/components/base/index.js +20 -32
  117. package/template/react-native-toast-message/src/components/base/styles.js +18 -21
  118. package/template/react-native-toast-message/src/components/checkbox.js +24 -19
  119. package/template/react-native-toast-message/src/index.js +3 -1
  120. package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
  121. package/template/src/App.tsx +53 -69
  122. package/template/src/AppRoutes.tsx +90 -0
  123. package/template/src/AppWrapper.tsx +42 -25
  124. package/template/src/SDKAppWrapper.tsx +89 -57
  125. package/template/src/app-state/useLocalUserInfo.ts +3 -3
  126. package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
  127. package/template/src/app-state/useNoiseSupression.tsx +107 -0
  128. package/template/src/app-state/useVideoQuality.tsx +39 -0
  129. package/template/src/assets/font-styles.css +175 -3
  130. package/template/src/assets/fonts/icomoon.ttf +0 -0
  131. package/template/src/assets/selection.json +1 -1
  132. package/template/src/atoms/ActionMenu.tsx +50 -11
  133. package/template/src/atoms/Avatar.tsx +51 -0
  134. package/template/src/atoms/Card.tsx +21 -8
  135. package/template/src/atoms/Carousel.native.tsx +105 -0
  136. package/template/src/atoms/Carousel.tsx +103 -0
  137. package/template/src/atoms/Checkbox.tsx +98 -0
  138. package/template/src/atoms/CircularProgress.tsx +0 -1
  139. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  140. package/template/src/atoms/CustomIcon.tsx +46 -0
  141. package/template/src/atoms/DropDownMulti.tsx +349 -0
  142. package/template/src/atoms/Dropdown.tsx +3 -3
  143. package/template/src/atoms/IconButton.tsx +52 -9
  144. package/template/src/atoms/ImageIcon.tsx +18 -5
  145. package/template/src/atoms/InlineNotification.tsx +81 -0
  146. package/template/src/atoms/InviteInfo.tsx +4 -4
  147. package/template/src/atoms/MeetingLink.tsx +160 -0
  148. package/template/src/atoms/ParticipantsCount.tsx +20 -8
  149. package/template/src/atoms/Popup.tsx +49 -27
  150. package/template/src/atoms/PrimaryButton.tsx +19 -5
  151. package/template/src/atoms/RecordingInfo.tsx +8 -5
  152. package/template/src/atoms/SecondaryButton.tsx +2 -0
  153. package/template/src/atoms/Spacer.tsx +1 -0
  154. package/template/src/atoms/TertiaryButton.tsx +35 -5
  155. package/template/src/atoms/TextInput.tsx +2 -1
  156. package/template/src/atoms/Toolbar.tsx +102 -0
  157. package/template/src/atoms/ToolbarItem.tsx +85 -0
  158. package/template/src/atoms/ToolbarMenu.tsx +40 -0
  159. package/template/src/atoms/ToolbarMenuItem.tsx +104 -0
  160. package/template/src/atoms/ToolbarPreset.tsx +71 -0
  161. package/template/src/atoms/Tooltip.tsx +30 -13
  162. package/template/src/atoms/pagination/Pagination.tsx +127 -0
  163. package/template/src/atoms/pagination/usePagination.tsx +88 -0
  164. package/template/src/auth/AuthProvider.tsx +500 -0
  165. package/template/src/auth/AuthRoute.tsx +94 -0
  166. package/template/src/auth/IDPAuth.electron.tsx +31 -0
  167. package/template/src/auth/IDPAuth.tsx +67 -0
  168. package/template/src/auth/IDPLogoutComponent.tsx +158 -0
  169. package/template/src/auth/UserCancelPopup.tsx +115 -0
  170. package/template/src/auth/config.ts +52 -0
  171. package/template/src/auth/openIDPURL.electron.tsx +39 -0
  172. package/template/src/auth/openIDPURL.native.tsx +51 -0
  173. package/template/src/auth/openIDPURL.tsx +20 -0
  174. package/template/src/auth/useIDPAuth.electron.tsx +65 -0
  175. package/template/src/auth/useIDPAuth.native.tsx +70 -0
  176. package/template/src/auth/useIDPAuth.tsx +63 -0
  177. package/template/src/auth/useTokenAuth.tsx +194 -0
  178. package/template/src/components/Chat.tsx +92 -72
  179. package/template/src/components/ChatContext.ts +2 -0
  180. package/template/src/components/ColorConfigure.tsx +0 -1
  181. package/template/src/components/CommonStyles.ts +9 -2
  182. package/template/src/components/Controls.tsx +914 -182
  183. package/template/src/components/Controls1.native.tsx +9 -5
  184. package/template/src/components/DeviceConfigure.native.tsx +2 -2
  185. package/template/src/components/DeviceConfigure.tsx +400 -149
  186. package/template/src/components/DeviceContext.tsx +2 -0
  187. package/template/src/components/EventsConfigure.tsx +722 -82
  188. package/template/src/components/GraphQLProvider.tsx +82 -39
  189. package/template/src/components/GridVideo.tsx +30 -16
  190. package/template/src/components/HostControlView.tsx +11 -14
  191. package/template/src/components/JoinPhrase.tsx +0 -1
  192. package/template/src/components/Leftbar.tsx +110 -0
  193. package/template/src/components/Navbar.tsx +305 -147
  194. package/template/src/components/NavbarMobile.tsx +119 -0
  195. package/template/src/components/Navigation.native.tsx +1 -15
  196. package/template/src/components/{Settings.native.tsx → Navigation.sdk.tsx} +17 -6
  197. package/template/src/components/NetworkQualityContext.tsx +12 -6
  198. package/template/src/components/ParticipantsView.tsx +63 -56
  199. package/template/src/components/PinnedVideo.tsx +191 -119
  200. package/template/src/components/Precall.native.tsx +177 -72
  201. package/template/src/components/Precall.tsx +247 -78
  202. package/template/src/components/RTMConfigure.tsx +205 -67
  203. package/template/src/components/Rightbar.tsx +112 -0
  204. package/template/src/components/Router.electron.ts +1 -0
  205. package/template/src/components/Router.native.ts +1 -0
  206. package/template/src/components/Router.sdk.ts +1 -0
  207. package/template/src/components/Router.ts +1 -0
  208. package/template/src/components/SdkApiContext.tsx +313 -0
  209. package/template/src/components/SdkMuteToggleListener.tsx +88 -0
  210. package/template/src/components/SessionContext.tsx +0 -1
  211. package/template/src/components/Settings.tsx +33 -4
  212. package/template/src/components/SettingsView.tsx +44 -9
  213. package/template/src/components/Share.tsx +152 -74
  214. package/template/src/components/StorageContext.tsx +23 -6
  215. package/template/src/components/ToastComponent.tsx +10 -1
  216. package/template/src/components/WhiteboardLayout.tsx +291 -0
  217. package/template/src/components/chat-messages/useChatMessages.tsx +454 -239
  218. package/template/src/components/chat-ui/{useChatUIControl.tsx → useChatUIControls.tsx} +29 -29
  219. package/template/src/components/common/Error.tsx +2 -0
  220. package/template/src/components/common/Logo.tsx +2 -2
  221. package/template/src/components/contexts/LiveStreamDataContext.tsx +13 -12
  222. package/template/src/components/contexts/ScreenShareContext.tsx +15 -1
  223. package/template/src/components/contexts/VideoMeetingDataContext.tsx +6 -6
  224. package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
  225. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  226. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  227. package/template/src/components/livestream/LiveStreamContext.tsx +314 -220
  228. package/template/src/components/livestream/Types.ts +36 -20
  229. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  230. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -10
  231. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  232. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  233. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
  234. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  235. package/template/src/components/participants/AllAudienceParticipants.tsx +19 -20
  236. package/template/src/components/participants/AllHostParticipants.tsx +20 -19
  237. package/template/src/components/participants/Participant.tsx +45 -16
  238. package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
  239. package/template/src/components/participants/ScreenshareParticipants.tsx +17 -19
  240. package/template/src/components/participants/UserActionMenuOptions.tsx +173 -62
  241. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  242. package/template/src/components/popups/InvitePopup.tsx +110 -45
  243. package/template/src/components/popups/StartScreenSharePopup.native.tsx +182 -0
  244. package/template/src/components/popups/StartScreenSharePopup.tsx +6 -0
  245. package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
  246. package/template/src/components/popups/StopScreenSharePopup.native.tsx +135 -0
  247. package/template/src/components/popups/StopScreenSharePopup.tsx +6 -0
  248. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  249. package/template/src/components/precall/LocalMute.tsx +69 -45
  250. package/template/src/components/precall/PermissionHelper.tsx +56 -28
  251. package/template/src/components/precall/PreCallSettings.tsx +1 -0
  252. package/template/src/components/precall/VideoFallback.tsx +173 -0
  253. package/template/src/components/precall/VideoPreview.native.tsx +19 -53
  254. package/template/src/components/precall/VideoPreview.tsx +29 -164
  255. package/template/src/components/precall/index.tsx +2 -0
  256. package/template/src/components/precall/joinCallBtn.native.tsx +12 -5
  257. package/template/src/components/precall/joinCallBtn.tsx +13 -4
  258. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
  259. package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
  260. package/template/src/components/precall/meetingTitle.tsx +37 -11
  261. package/template/src/components/precall/selectDevice.tsx +5 -5
  262. package/template/src/components/precall/textInput.tsx +17 -19
  263. package/template/src/components/precall/usePreCall.tsx +33 -1
  264. package/template/src/components/recording-bot/RecordingBotRoute.tsx +42 -0
  265. package/template/src/components/recordings/RecordingsDateTable.tsx +62 -0
  266. package/template/src/components/recordings/RecordingsModal.tsx +135 -0
  267. package/template/src/components/recordings/ViewRecordingsModal.tsx +51 -0
  268. package/template/src/components/recordings/recording-table.tsx +154 -0
  269. package/template/src/components/recordings/style.ts +183 -0
  270. package/template/src/components/recordings/utils.ts +80 -0
  271. package/template/src/components/room-info/useRoomInfo.tsx +128 -0
  272. package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
  273. package/template/src/components/useShareLink.tsx +28 -63
  274. package/template/src/components/useUserPreference.tsx +82 -16
  275. package/template/src/components/useVideoCall.tsx +93 -1
  276. package/template/src/components/virtual-background/VBButton.tsx +64 -0
  277. package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
  278. package/template/src/components/virtual-background/VBCard.tsx +272 -0
  279. package/template/src/components/virtual-background/VBPanel.tsx +279 -0
  280. package/template/src/components/virtual-background/VButils.native.ts +37 -0
  281. package/template/src/components/virtual-background/VButils.ts +104 -0
  282. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  283. package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
  284. package/template/src/components/virtual-background/imagePaths.ts +87 -0
  285. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  286. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  287. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  288. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  289. package/template/src/components/virtual-background/images/index.ts +37 -0
  290. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  291. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  292. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  293. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  294. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  295. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  296. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  297. package/template/src/components/virtual-background/useVB.native.tsx +185 -0
  298. package/template/src/components/virtual-background/useVB.tsx +267 -0
  299. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  300. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  301. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  302. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +148 -0
  303. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +446 -0
  304. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  305. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
  306. package/template/src/components/whiteboard/WhiteboardView.native.tsx +188 -0
  307. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  308. package/template/src/components/whiteboard/WhiteboardWidget.tsx +685 -0
  309. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  310. package/template/src/language/default-labels/commonLabels.ts +51 -14
  311. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  312. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  313. package/template/src/language/default-labels/precallScreenLabels.ts +149 -25
  314. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  315. package/template/src/language/default-labels/videoCallScreenLabels.ts +1195 -158
  316. package/template/src/pages/Create.tsx +136 -106
  317. package/template/src/pages/Endcall.tsx +2 -2
  318. package/template/src/pages/Join.tsx +82 -40
  319. package/template/src/pages/Login.tsx +26 -0
  320. package/template/src/pages/VideoCall.tsx +329 -127
  321. package/template/src/pages/video-call/ActionSheet.native.tsx +54 -6
  322. package/template/src/pages/video-call/ActionSheet.tsx +55 -15
  323. package/template/src/pages/video-call/ActionSheetContent.tsx +498 -308
  324. package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
  325. package/template/src/pages/video-call/DefaultLayouts.ts +20 -8
  326. package/template/src/pages/video-call/NameWithMicIcon.tsx +41 -64
  327. package/template/src/pages/video-call/PinchableView.tsx +119 -0
  328. package/template/src/pages/video-call/RenderComponent.tsx +14 -30
  329. package/template/src/pages/video-call/SidePanelHeader.tsx +227 -29
  330. package/template/src/pages/video-call/VideoCallMobileView.tsx +231 -89
  331. package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
  332. package/template/src/pages/video-call/VideoCallScreen.tsx +233 -84
  333. package/template/src/pages/video-call/VideoCallScreenWrapper.tsx +41 -0
  334. package/template/src/pages/video-call/VideoComponent.tsx +60 -8
  335. package/template/src/pages/video-call/VideoRenderer.tsx +343 -57
  336. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  337. package/template/src/pages/video-call/ZoomableWrapper.native.tsx +34 -0
  338. package/template/src/pages/video-call/ZoomableWrapper.tsx +5 -0
  339. package/template/src/pages/video-call/index.ts +42 -8
  340. package/template/src/rtm/RTMEngine.ts +17 -4
  341. package/template/src/rtm-events/constants.ts +21 -3
  342. package/template/src/rtm-events-api/Events.ts +7 -4
  343. package/template/src/rtm-events-api/LocalEvents.ts +14 -0
  344. package/template/src/rtm-events-api/types.ts +5 -5
  345. package/template/src/selection.json +1 -0
  346. package/template/src/subComponents/ChatBubble.tsx +87 -67
  347. package/template/src/subComponents/ChatContainer.tsx +70 -49
  348. package/template/src/subComponents/ChatInput.ios.tsx +32 -85
  349. package/template/src/subComponents/ChatInput.tsx +31 -80
  350. package/template/src/subComponents/Checkbox.native.tsx +46 -46
  351. package/template/src/subComponents/Checkbox.tsx +7 -6
  352. package/template/src/subComponents/CopyJoinInfo.tsx +31 -11
  353. package/template/src/subComponents/EndcallPopup.tsx +83 -12
  354. package/template/src/subComponents/FallbackLogo.tsx +2 -2
  355. package/template/src/subComponents/LanguageSelector.tsx +34 -30
  356. package/template/src/subComponents/LayoutIconButton.tsx +34 -17
  357. package/template/src/subComponents/LayoutIconDropdown.tsx +21 -8
  358. package/template/src/subComponents/Loading.tsx +60 -0
  359. package/template/src/subComponents/LocalAudioMute.tsx +87 -34
  360. package/template/src/subComponents/LocalEndCall.tsx +61 -24
  361. package/template/src/subComponents/LocalSwitchCamera.tsx +57 -13
  362. package/template/src/subComponents/LocalVideoMute.tsx +105 -36
  363. package/template/src/subComponents/LogoutButton.tsx +1 -1
  364. package/template/src/subComponents/NetworkQualityPill.tsx +22 -38
  365. package/template/src/subComponents/Recording.tsx +29 -9
  366. package/template/src/subComponents/RemoteAudioMute.tsx +5 -5
  367. package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
  368. package/template/src/subComponents/RemoteVideoMute.tsx +5 -5
  369. package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
  370. package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
  371. package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
  372. package/template/src/subComponents/SelectDevice.tsx +103 -34
  373. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +9 -6
  374. package/template/src/subComponents/SidePanelButtons.ts +0 -3
  375. package/template/src/subComponents/SidePanelEnum.tsx +2 -0
  376. package/template/src/subComponents/SidePanelHeader.tsx +97 -63
  377. package/template/src/subComponents/ToastConfig.tsx +70 -61
  378. package/template/src/subComponents/caption/Caption.tsx +132 -0
  379. package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
  380. package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
  381. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  382. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  383. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  384. package/template/src/subComponents/caption/Transcript.tsx +452 -0
  385. package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
  386. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  387. package/template/src/subComponents/caption/index.ts +3 -0
  388. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  389. package/template/src/subComponents/caption/proto/test.proto +23 -0
  390. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  391. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  392. package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
  393. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  394. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  395. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +63 -0
  396. package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
  397. package/template/src/subComponents/caption/utils.ts +126 -0
  398. package/template/src/subComponents/chat/ChatParticipants.tsx +60 -24
  399. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +2 -2
  400. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +19 -20
  401. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +66 -35
  402. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +3 -2
  403. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
  404. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
  405. package/template/src/subComponents/recording/useIsRecordingBot.tsx +38 -0
  406. package/template/src/subComponents/recording/useRecording.tsx +251 -138
  407. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
  408. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +39 -15
  409. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +275 -69
  410. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +193 -124
  411. package/template/src/subComponents/screenshare/useScreenshare.tsx +2 -0
  412. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  413. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
  414. package/template/src/theme/index.ts +13 -0
  415. package/template/src/utils/SdkEvents.ts +37 -14
  416. package/template/src/utils/SdkMethodEvents.ts +101 -0
  417. package/template/src/utils/axiomLogger.ts +117 -0
  418. package/template/src/utils/book.jpg +0 -0
  419. package/template/src/utils/common.tsx +118 -6
  420. package/template/src/utils/constants.ts +4 -0
  421. package/template/src/utils/getCustomRoute.ts +7 -0
  422. package/template/src/utils/index.tsx +34 -0
  423. package/template/src/utils/useActionSheet.tsx +50 -0
  424. package/template/src/utils/useActiveSpeaker.ts +38 -0
  425. package/template/src/utils/useAppState.ts +17 -0
  426. package/template/src/utils/useAsyncEffect.ts +138 -0
  427. package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +27 -26
  428. package/template/src/utils/useEndCall.ts +65 -0
  429. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  430. package/template/src/utils/useFindActiveSpeaker.ts +335 -0
  431. package/template/src/utils/useGetMeetingPhrase.ts +10 -10
  432. package/template/src/utils/useIsAudioEnabled.ts +3 -3
  433. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  434. package/template/src/utils/useIsLocalUserSpeaking.ts +103 -0
  435. package/template/src/utils/useIsPSTN.ts +3 -3
  436. package/template/src/utils/useIsVideoEnabled.ts +3 -3
  437. package/template/src/utils/useJoinRoom.ts +199 -0
  438. package/template/src/utils/{useIsActiveSpeaker.ts → useLocalAudio.ts} +23 -12
  439. package/template/src/{components/OAuth.tsx → utils/useMenu.tsx} +16 -15
  440. package/template/src/utils/useModal.tsx +8 -0
  441. package/template/src/utils/useMutePSTN.ts +2 -2
  442. package/template/src/utils/useMuteToggleLocal.ts +121 -96
  443. package/template/src/utils/useRemoteEndCall.ts +4 -4
  444. package/template/src/utils/useRemoteEndScreenshare.ts +4 -4
  445. package/template/src/utils/useRemoteMute.ts +7 -7
  446. package/template/src/utils/useRemoteRequest.ts +7 -7
  447. package/template/src/utils/useSearchParams.tsx +18 -0
  448. package/template/src/utils/useString.ts +13 -3
  449. package/template/src/utils/useSwitchCamera.native.tsx +25 -0
  450. package/template/src/{subComponents/screenshare/ScreenshareButton.native.tsx → utils/useSwitchCamera.tsx} +12 -11
  451. package/template/src/utils/useToolbar.tsx +59 -0
  452. package/template/src/wasms/agora-virtual-background.wasm +0 -0
  453. package/template/static.d.ts +42 -0
  454. package/template/tsconfig_rsdk_index.json +3 -3
  455. package/template/tsconfig_wsdk_index.json +1 -1
  456. package/template/web/index.html +20 -0
  457. package/template/webpack.commons.js +21 -10
  458. package/template/webpack.rsdk.config.js +1 -2
  459. package/template/webpack.web.config.js +7 -3
  460. package/template/_buckconfig +0 -6
  461. package/template/_gitattributes +0 -1
  462. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
  463. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
  464. package/template/android/app/_BUCK +0 -55
  465. package/template/android/app/build_defs.bzl +0 -19
  466. package/template/bridge/rtc/webNg/LocalView.tsx +0 -20
  467. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  468. package/template/src/components/OAuth.electron.tsx +0 -41
  469. package/template/src/components/OAuth.native.tsx +0 -55
  470. package/template/src/components/OAuthConfig.ts +0 -77
  471. package/template/src/components/StoreToken.tsx +0 -39
  472. package/template/src/components/meeting-info/useMeetingInfo.tsx +0 -70
  473. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
  474. package/template/src/utils/useButtonTemplate.tsx +0 -44
  475. package/template/src/utils/useJoinMeeting.ts +0 -132
@@ -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,23 +220,27 @@ 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
229
  }
213
230
 
214
- static async create(appId: string): Promise<RtcEngine> {
215
- let engine = new RtcEngine(appId);
216
- window.engine = engine;
217
- return engine;
231
+ getRemoteVideoStats(id: string) {
232
+ try {
233
+ const data = this.client.getRemoteVideoStats();
234
+ return data && data[id] ? data[id] : null;
235
+ } catch (error) {
236
+ console.log(`ERROR: on getRemoteVideoStats - ` + error?.message);
237
+ return null;
238
+ }
218
239
  }
219
240
 
220
241
  async setVideoProfile(profile: VideoProfile): Promise<void> {
221
242
  this.videoProfile = profile;
243
+ this.localStream?.video?.setEncoderConfiguration(profile);
222
244
  }
223
245
 
224
246
  async enableAudio(): Promise<void> {
@@ -240,7 +262,10 @@ export default class RtcEngine {
240
262
  }
241
263
  }
242
264
 
243
- async enableVideo(): Promise<void> {
265
+ async enableVideo(
266
+ preferredCameraId?: string,
267
+ preferredMicrophoneId?: string,
268
+ ): Promise<void> {
244
269
  /**
245
270
  * Issue: Backgrounding the browser or app causes the audio streaming to be cut off.
246
271
  * Impact: All browsers and apps that use WKWebView on iOS 15.x, such as Safari and Chrome.
@@ -252,14 +277,16 @@ export default class RtcEngine {
252
277
 
253
278
  const audioConfig: MicrophoneAudioTrackInitConfig = {
254
279
  bypassWebAudio: Platform.OS == 'web' && isMobileOrTablet(),
255
- // microphoneId: this.audioDeviceId,
280
+ microphoneId: preferredMicrophoneId,
256
281
  };
257
282
  const videoConfig: CameraVideoTrackInitConfig = {
258
283
  encoderConfig: this.videoProfile,
259
- // cameraId: this.videoDeviceId,
284
+ cameraId: preferredCameraId,
260
285
  };
261
286
  try {
262
287
  let [localAudio, localVideo] =
288
+ // If preferred devices are not present, the createTrack call will fallover to
289
+ // the catch block below.
263
290
  await AgoraRTC.createMicrophoneAndCameraTracks(
264
291
  audioConfig,
265
292
  videoConfig,
@@ -277,9 +304,15 @@ export default class RtcEngine {
277
304
  } catch (e) {
278
305
  let audioError = false;
279
306
  let videoError = false;
280
- try {
281
- let localAudio = await AgoraRTC.createMicrophoneAudioTrack(audioConfig);
282
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
+ }
283
316
  this.localStream.audio = localAudio;
284
317
  this.audioDeviceId = localAudio
285
318
  ?.getMediaStreamTrack()
@@ -288,8 +321,41 @@ export default class RtcEngine {
288
321
  } catch (error) {
289
322
  audioError = error;
290
323
  }
324
+
291
325
  try {
292
- 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
+ }
293
359
  this.localStream.video = localVideo;
294
360
  this.videoDeviceId = localVideo
295
361
  ?.getMediaStreamTrack()
@@ -298,6 +364,7 @@ export default class RtcEngine {
298
364
  } catch (error) {
299
365
  videoError = error;
300
366
  }
367
+
301
368
  e.status = {audioError, videoError};
302
369
  throw e;
303
370
  // if (audioError && videoError) throw e;
@@ -340,7 +407,7 @@ export default class RtcEngine {
340
407
 
341
408
  if (this.isPublished === false) {
342
409
  this.isPublished = true;
343
- (this.eventsMap.get('JoinChannelSuccess') as callbackType)();
410
+ (this.eventsMap.get('onJoinChannelSuccess') as callbackType)();
344
411
  }
345
412
  }
346
413
  } catch (e) {
@@ -353,19 +420,21 @@ export default class RtcEngine {
353
420
  async joinChannel(
354
421
  token: string,
355
422
  channelName: string,
356
- optionalInfo: string,
357
423
  optionalUid: number,
424
+ _optionalInfo: {},
358
425
  ): Promise<void> {
359
426
  // TODO create agora client here
360
- this.client.on('user-joined', (user) => {
361
- (this.eventsMap.get('UserJoined') as callbackType)(user.uid);
362
- (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
+ {},
363
431
  user.uid,
364
432
  0,
365
433
  0,
366
434
  0,
367
435
  );
368
- (this.eventsMap.get('RemoteAudioStateChanged') as callbackType)(
436
+ (this.eventsMap.get('onRemoteAudioStateChanged') as callbackType)(
437
+ {},
369
438
  user.uid,
370
439
  0,
371
440
  0,
@@ -373,18 +442,19 @@ export default class RtcEngine {
373
442
  );
374
443
  });
375
444
 
376
- this.client.on('user-left', (user) => {
445
+ this.client.on('user-left', user => {
377
446
  const uid = user.uid;
378
447
  if (this.remoteStreams.has(uid)) {
379
448
  this.remoteStreams.delete(uid);
380
449
  }
381
- (this.eventsMap.get('UserOffline') as callbackType)(uid);
450
+ (this.eventsMap.get('onUserOffline') as callbackType)({}, uid);
382
451
  // (this.eventsMap.get('UserJoined') as callbackType)(uid);
383
452
  });
384
453
  this.client.on('user-published', async (user, mediaType) => {
385
454
  // Initiate the subscription
386
455
  if (this.inScreenshare && user.uid === this.screenClient.uid) {
387
- (this.eventsMap.get('RemoteVideoStateChanged') as callbackType)(
456
+ (this.eventsMap.get('onRemoteVideoStateChanged') as callbackType)(
457
+ {},
388
458
  user.uid,
389
459
  2,
390
460
  0,
@@ -408,7 +478,8 @@ export default class RtcEngine {
408
478
  .get(user.uid)
409
479
  ?.audio?.setPlaybackDevice(this.speakerDeviceId);
410
480
  }
411
- (this.eventsMap.get('RemoteAudioStateChanged') as callbackType)(
481
+ (this.eventsMap.get('onRemoteAudioStateChanged') as callbackType)(
482
+ {},
412
483
  user.uid,
413
484
  2,
414
485
  0,
@@ -422,7 +493,8 @@ export default class RtcEngine {
422
493
  ...this.remoteStreams.get(user.uid),
423
494
  video: videoTrack,
424
495
  });
425
- (this.eventsMap.get('RemoteVideoStateChanged') as callbackType)(
496
+ (this.eventsMap.get('onRemoteVideoStateChanged') as callbackType)(
497
+ {},
426
498
  user.uid,
427
499
  2,
428
500
  0,
@@ -434,7 +506,8 @@ export default class RtcEngine {
434
506
  if (mediaType === 'audio') {
435
507
  const {audio, ...rest} = this.remoteStreams.get(user.uid);
436
508
  this.remoteStreams.set(user.uid, rest);
437
- (this.eventsMap.get('RemoteAudioStateChanged') as callbackType)(
509
+ (this.eventsMap.get('onRemoteAudioStateChanged') as callbackType)(
510
+ {},
438
511
  user.uid,
439
512
  0,
440
513
  0,
@@ -443,7 +516,8 @@ export default class RtcEngine {
443
516
  } else {
444
517
  const {video, ...rest} = this.remoteStreams.get(user.uid);
445
518
  this.remoteStreams.set(user.uid, rest);
446
- (this.eventsMap.get('RemoteVideoStateChanged') as callbackType)(
519
+ (this.eventsMap.get('onRemoteVideoStateChanged') as callbackType)(
520
+ {},
447
521
  user.uid,
448
522
  0,
449
523
  0,
@@ -452,7 +526,10 @@ export default class RtcEngine {
452
526
  }
453
527
  });
454
528
 
455
- this.client.on('volume-indicator', (volumes) => {
529
+ this.client.on('volume-indicator', volumes => {
530
+ this.usersVolumeLevel = volumes;
531
+ /**
532
+ * old active speaker logic
456
533
  const highestvolumeObj = volumes.reduce(
457
534
  (highestVolume, volume, index) => {
458
535
  if (highestVolume === null) {
@@ -463,7 +540,7 @@ export default class RtcEngine {
463
540
  }
464
541
  return highestVolume;
465
542
  }
466
- // console.log(`${index} UID ${volume.uid} Level ${volume.level}`);
543
+ //console.log(`${index} UID ${volume.uid} Level ${volume.level}`);
467
544
  },
468
545
  null,
469
546
  );
@@ -480,6 +557,7 @@ export default class RtcEngine {
480
557
  activeSpeakerCallBack(activeSpeakerUid);
481
558
  this.activeSpeakerUid = activeSpeakerUid;
482
559
  }
560
+ */
483
561
  });
484
562
 
485
563
  // this.client.on('stream-fallback', (evt))
@@ -491,28 +569,38 @@ export default class RtcEngine {
491
569
  'network-quality',
492
570
  async ({downlinkNetworkQuality, uplinkNetworkQuality}) => {
493
571
  const networkQualityIndicatorCallback = this.eventsMap.get(
494
- 'NetworkQuality',
572
+ 'onNetworkQuality',
495
573
  ) as callbackType;
496
574
 
497
575
  networkQualityIndicatorCallback(
576
+ {},
498
577
  0,
499
- downlinkNetworkQuality,
500
578
  uplinkNetworkQuality,
579
+ downlinkNetworkQuality,
501
580
  );
502
581
 
503
582
  const remoteUserNetworkQualities =
504
583
  this.client.getRemoteNetworkQuality();
505
584
 
506
- Object.keys(remoteUserNetworkQualities).forEach((uid) => {
585
+ Object.keys(remoteUserNetworkQualities).forEach(uid => {
507
586
  networkQualityIndicatorCallback(
587
+ {},
508
588
  uid,
509
- remoteUserNetworkQualities[uid].downlinkNetworkQuality,
510
589
  remoteUserNetworkQualities[uid].uplinkNetworkQuality,
590
+ remoteUserNetworkQualities[uid].downlinkNetworkQuality,
511
591
  );
512
592
  });
513
593
  },
514
594
  );
515
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
+
516
604
  await this.client.join(
517
605
  this.appId,
518
606
  channelName,
@@ -525,6 +613,10 @@ export default class RtcEngine {
525
613
  console.log('enabling screen sleep');
526
614
  }
527
615
 
616
+ getUsersVolumeLevel() {
617
+ return this.usersVolumeLevel;
618
+ }
619
+
528
620
  async leaveChannel(): Promise<void> {
529
621
  this.client.leave();
530
622
  this.remoteStreams.forEach((stream, uid, map) => {
@@ -540,17 +632,19 @@ export default class RtcEngine {
540
632
  listener: RtcEngineEvents[EventType],
541
633
  ): Subscription {
542
634
  if (
543
- event === 'UserJoined' ||
544
- event === 'UserOffline' ||
545
- event === 'JoinChannelSuccess' ||
546
- event === 'ScreenshareStopped' ||
547
- event === 'RemoteAudioStateChanged' ||
548
- event === 'RemoteVideoStateChanged' ||
549
- event === 'NetworkQuality' ||
550
- 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'
551
644
  ) {
552
645
  this.eventsMap.set(event, listener as callbackType);
553
646
  }
647
+
554
648
  return {
555
649
  remove: () => {
556
650
  console.log(
@@ -651,17 +745,21 @@ export default class RtcEngine {
651
745
  return devices;
652
746
  }
653
747
 
654
- async setChannelProfile(profile: ChannelProfile): Promise<void> {
748
+ async setChannelProfile(profile: ChannelProfileType): Promise<void> {
655
749
  try {
656
750
  this.client = AgoraRTC.createClient({
657
- codec: 'vp8',
751
+ codec: 'vp9',
658
752
  mode:
659
- profile === ChannelProfile.LiveBroadcasting ? mode.live : mode.rtc,
753
+ profile === ChannelProfileType.ChannelProfileLiveBroadcasting
754
+ ? mode.live
755
+ : mode.rtc,
660
756
  });
661
757
  this.screenClient = AgoraRTC.createClient({
662
- codec: 'vp8',
758
+ codec: 'vp9',
663
759
  mode:
664
- profile === ChannelProfile.LiveBroadcasting ? mode.live : mode.rtc,
760
+ profile === ChannelProfileType.ChannelProfileLiveBroadcasting
761
+ ? mode.live
762
+ : mode.rtc,
665
763
  });
666
764
  } catch (e) {
667
765
  throw e;
@@ -669,11 +767,11 @@ export default class RtcEngine {
669
767
  }
670
768
 
671
769
  async setClientRole(
672
- clientRole: ClientRole,
770
+ clientRole: ClientRoleType,
673
771
  options?: ClientRoleOptions,
674
772
  ): Promise<void> {
675
773
  try {
676
- if (clientRole == ClientRole.Audience) {
774
+ if (clientRole == ClientRoleType.ClientRoleAudience) {
677
775
  if (this.isJoined) {
678
776
  // Unpublish the streams when role is changed to Audience
679
777
  await this.client.unpublish();
@@ -683,7 +781,7 @@ export default class RtcEngine {
683
781
  }
684
782
  await this.client.setClientRole(role.audience, options);
685
783
  await this.screenClient.setClientRole(role.audience, options);
686
- } else if (clientRole == ClientRole.Broadcaster) {
784
+ } else if (clientRole == ClientRoleType.ClientRoleBroadcaster) {
687
785
  await this.client.setClientRole(role.host);
688
786
  await this.screenClient.setClientRole(role.host);
689
787
  }
@@ -730,11 +828,11 @@ export default class RtcEngine {
730
828
 
731
829
  async changeSpeaker(speakerId, callback, error) {
732
830
  try {
733
- this.speakerDeviceId = speakerId;
734
831
  // setting sepeaker for all remote stream (previously joined users)
735
832
  this.remoteStreams?.forEach((stream, uid, map) => {
736
833
  stream?.audio?.setPlaybackDevice(speakerId);
737
834
  });
835
+ this.speakerDeviceId = speakerId;
738
836
  callback(speakerId);
739
837
  } catch (e) {
740
838
  error(e);
@@ -762,7 +860,7 @@ export default class RtcEngine {
762
860
 
763
861
  // Bug in implementation !!!
764
862
  async setRemoteSubscribeFallbackOption(option: 0 | 1 | 2) {
765
- this.streams.forEach((stream) => {
863
+ this.streams.forEach(stream => {
766
864
  this.client.setStreamFallbackOption(stream, option);
767
865
  });
768
866
  Promise.resolve();
@@ -787,6 +885,17 @@ export default class RtcEngine {
787
885
  break;
788
886
  case RnEncryptionEnum.SM4128ECB:
789
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
+
790
899
  default:
791
900
  mode = 'none';
792
901
  }
@@ -801,14 +910,25 @@ export default class RtcEngine {
801
910
  config: {
802
911
  encryptionMode: RnEncryptionEnum;
803
912
  encryptionKey: string;
913
+ encryptionKdfSalt: string;
804
914
  },
805
915
  ): Promise<void> {
806
916
  let mode: EncryptionMode;
807
917
  mode = this.getEncryptionMode(enabled, config?.encryptionMode);
808
918
  try {
809
919
  await Promise.all([
810
- this.client.setEncryptionConfig(mode, config.encryptionKey),
811
- 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
+ ),
812
932
  ]);
813
933
  } catch (e) {
814
934
  throw e;
@@ -835,13 +955,18 @@ export default class RtcEngine {
835
955
  console.error('Please use enableEncryption instead');
836
956
  }
837
957
 
838
- 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> {
839
963
  if (this.inScreenshare) {
840
- (this.eventsMap.get('UserOffline') as callbackType)(
964
+ (this.eventsMap.get('onUserOffline') as callbackType)(
965
+ {},
841
966
  this.screenClient.uid,
842
967
  );
843
968
  this.screenClient.leave();
844
- (this.eventsMap.get('ScreenshareStopped') as callbackType)();
969
+ (this.eventsMap.get('onScreenshareStopped') as callbackType)();
845
970
  }
846
971
  this.eventsMap.forEach((callback, event, map) => {
847
972
  this.client.off(event, callback);
@@ -892,6 +1017,7 @@ export default class RtcEngine {
892
1017
  encryption: {
893
1018
  screenKey: string;
894
1019
  mode: RnEncryptionEnum;
1020
+ salt: string;
895
1021
  },
896
1022
  config: ScreenVideoTrackInitConfig = {},
897
1023
  audio: 'enable' | 'disable' | 'auto' = 'auto',
@@ -912,6 +1038,8 @@ export default class RtcEngine {
912
1038
  await this.screenClient.setEncryptionConfig(
913
1039
  mode,
914
1040
  encryption.screenKey,
1041
+ encryption.salt,
1042
+ true, // encryptDataStream
915
1043
  );
916
1044
  } catch (e) {
917
1045
  console.log('e: Encryption for screenshare failed', e);
@@ -948,7 +1076,8 @@ export default class RtcEngine {
948
1076
  );
949
1077
 
950
1078
  this.screenStream.video.on('track-ended', () => {
951
- (this.eventsMap.get('UserOffline') as callbackType)(
1079
+ (this.eventsMap.get('onUserOffline') as callbackType)(
1080
+ {},
952
1081
  this.screenClient.uid,
953
1082
  );
954
1083
 
@@ -958,15 +1087,16 @@ export default class RtcEngine {
958
1087
  this.screenStream.video?.close();
959
1088
  this.screenStream = {};
960
1089
 
961
- (this.eventsMap.get('ScreenshareStopped') as callbackType)();
1090
+ (this.eventsMap.get('onScreenshareStopped') as callbackType)();
962
1091
  this.inScreenshare = false;
963
1092
  });
964
1093
  } else {
965
- (this.eventsMap.get('UserOffline') as callbackType)(
1094
+ (this.eventsMap.get('onUserOffline') as callbackType)(
1095
+ {},
966
1096
  this.screenClient.uid,
967
1097
  );
968
1098
  this.screenClient.leave();
969
- (this.eventsMap.get('ScreenshareStopped') as callbackType)();
1099
+ (this.eventsMap.get('onScreenshareStopped') as callbackType)();
970
1100
  try {
971
1101
  this.screenStream.audio?.close();
972
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;