@abrar71/lib-jitsi-meet 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +26 -0
  3. package/dist/esm/JitsiConference.js +3692 -0
  4. package/dist/esm/JitsiConference.js.map +1 -0
  5. package/dist/esm/JitsiConferenceErrors.js +126 -0
  6. package/dist/esm/JitsiConferenceErrors.js.map +1 -0
  7. package/dist/esm/JitsiConferenceEventManager.js +424 -0
  8. package/dist/esm/JitsiConferenceEventManager.js.map +1 -0
  9. package/dist/esm/JitsiConferenceEvents.js +431 -0
  10. package/dist/esm/JitsiConferenceEvents.js.map +1 -0
  11. package/dist/esm/JitsiConnection.js +187 -0
  12. package/dist/esm/JitsiConnection.js.map +1 -0
  13. package/dist/esm/JitsiConnectionErrors.js +52 -0
  14. package/dist/esm/JitsiConnectionErrors.js.map +1 -0
  15. package/dist/esm/JitsiConnectionEvents.js +57 -0
  16. package/dist/esm/JitsiConnectionEvents.js.map +1 -0
  17. package/dist/esm/JitsiMediaDevices.js +221 -0
  18. package/dist/esm/JitsiMediaDevices.js.map +1 -0
  19. package/dist/esm/JitsiMediaDevicesEvents.js +29 -0
  20. package/dist/esm/JitsiMediaDevicesEvents.js.map +1 -0
  21. package/dist/esm/JitsiMeetJS.js +499 -0
  22. package/dist/esm/JitsiMeetJS.js.map +1 -0
  23. package/dist/esm/JitsiParticipant.js +323 -0
  24. package/dist/esm/JitsiParticipant.js.map +1 -0
  25. package/dist/esm/JitsiTrackError.js +122 -0
  26. package/dist/esm/JitsiTrackError.js.map +1 -0
  27. package/dist/esm/JitsiTrackErrors.js +91 -0
  28. package/dist/esm/JitsiTrackErrors.js.map +1 -0
  29. package/dist/esm/JitsiTrackEvents.js +60 -0
  30. package/dist/esm/JitsiTrackEvents.js.map +1 -0
  31. package/dist/esm/JitsiTranscriptionStatus.js +15 -0
  32. package/dist/esm/JitsiTranscriptionStatus.js.map +1 -0
  33. package/dist/esm/modules/RTC/BridgeChannel.js +398 -0
  34. package/dist/esm/modules/RTC/BridgeChannel.js.map +1 -0
  35. package/dist/esm/modules/RTC/JitsiLocalTrack.js +896 -0
  36. package/dist/esm/modules/RTC/JitsiLocalTrack.js.map +1 -0
  37. package/dist/esm/modules/RTC/JitsiRemoteTrack.js +427 -0
  38. package/dist/esm/modules/RTC/JitsiRemoteTrack.js.map +1 -0
  39. package/dist/esm/modules/RTC/JitsiTrack.js +453 -0
  40. package/dist/esm/modules/RTC/JitsiTrack.js.map +1 -0
  41. package/dist/esm/modules/RTC/MockClasses.js +388 -0
  42. package/dist/esm/modules/RTC/MockClasses.js.map +1 -0
  43. package/dist/esm/modules/RTC/RTC.js +658 -0
  44. package/dist/esm/modules/RTC/RTC.js.map +1 -0
  45. package/dist/esm/modules/RTC/RTCUtils.js +762 -0
  46. package/dist/esm/modules/RTC/RTCUtils.js.map +1 -0
  47. package/dist/esm/modules/RTC/ScreenObtainer.js +380 -0
  48. package/dist/esm/modules/RTC/ScreenObtainer.js.map +1 -0
  49. package/dist/esm/modules/RTC/TPCUtils.js +803 -0
  50. package/dist/esm/modules/RTC/TPCUtils.js.map +1 -0
  51. package/dist/esm/modules/RTC/TraceablePeerConnection.js +2223 -0
  52. package/dist/esm/modules/RTC/TraceablePeerConnection.js.map +1 -0
  53. package/dist/esm/modules/RTCStats/DefaulLogStorage.js +35 -0
  54. package/dist/esm/modules/RTCStats/DefaulLogStorage.js.map +1 -0
  55. package/dist/esm/modules/RTCStats/RTCStats.js +219 -0
  56. package/dist/esm/modules/RTCStats/RTCStats.js.map +1 -0
  57. package/dist/esm/modules/RTCStats/RTCStatsEvents.js +92 -0
  58. package/dist/esm/modules/RTCStats/RTCStatsEvents.js.map +1 -0
  59. package/dist/esm/modules/RTCStats/interfaces.js +2 -0
  60. package/dist/esm/modules/RTCStats/interfaces.js.map +1 -0
  61. package/dist/esm/modules/browser/BrowserCapabilities.js +345 -0
  62. package/dist/esm/modules/browser/BrowserCapabilities.js.map +1 -0
  63. package/dist/esm/modules/browser/index.js +3 -0
  64. package/dist/esm/modules/browser/index.js.map +1 -0
  65. package/dist/esm/modules/connectivity/ConnectionQuality.js +389 -0
  66. package/dist/esm/modules/connectivity/ConnectionQuality.js.map +1 -0
  67. package/dist/esm/modules/connectivity/IceFailedHandling.js +84 -0
  68. package/dist/esm/modules/connectivity/IceFailedHandling.js.map +1 -0
  69. package/dist/esm/modules/connectivity/NetworkInfo.js +49 -0
  70. package/dist/esm/modules/connectivity/NetworkInfo.js.map +1 -0
  71. package/dist/esm/modules/connectivity/TrackStreamingStatus.js +453 -0
  72. package/dist/esm/modules/connectivity/TrackStreamingStatus.js.map +1 -0
  73. package/dist/esm/modules/detection/ActiveDeviceDetector.js +79 -0
  74. package/dist/esm/modules/detection/ActiveDeviceDetector.js.map +1 -0
  75. package/dist/esm/modules/detection/DetectionEvents.js +58 -0
  76. package/dist/esm/modules/detection/DetectionEvents.js.map +1 -0
  77. package/dist/esm/modules/detection/NoAudioSignalDetection.js +127 -0
  78. package/dist/esm/modules/detection/NoAudioSignalDetection.js.map +1 -0
  79. package/dist/esm/modules/detection/P2PDominantSpeakerDetection.js +47 -0
  80. package/dist/esm/modules/detection/P2PDominantSpeakerDetection.js.map +1 -0
  81. package/dist/esm/modules/detection/TrackVADEmitter.js +190 -0
  82. package/dist/esm/modules/detection/TrackVADEmitter.js.map +1 -0
  83. package/dist/esm/modules/detection/VADAudioAnalyser.js +199 -0
  84. package/dist/esm/modules/detection/VADAudioAnalyser.js.map +1 -0
  85. package/dist/esm/modules/detection/VADNoiseDetection.js +168 -0
  86. package/dist/esm/modules/detection/VADNoiseDetection.js.map +1 -0
  87. package/dist/esm/modules/detection/VADReportingService.js +203 -0
  88. package/dist/esm/modules/detection/VADReportingService.js.map +1 -0
  89. package/dist/esm/modules/detection/VADTalkMutedDetection.js +131 -0
  90. package/dist/esm/modules/detection/VADTalkMutedDetection.js.map +1 -0
  91. package/dist/esm/modules/e2ee/Context.js +274 -0
  92. package/dist/esm/modules/e2ee/Context.js.map +1 -0
  93. package/dist/esm/modules/e2ee/E2EEContext.js +158 -0
  94. package/dist/esm/modules/e2ee/E2EEContext.js.map +1 -0
  95. package/dist/esm/modules/e2ee/E2EEErrors.js +10 -0
  96. package/dist/esm/modules/e2ee/E2EEErrors.js.map +1 -0
  97. package/dist/esm/modules/e2ee/E2EEncryption.js +87 -0
  98. package/dist/esm/modules/e2ee/E2EEncryption.js.map +1 -0
  99. package/dist/esm/modules/e2ee/ExternallyManagedKeyHandler.js +24 -0
  100. package/dist/esm/modules/e2ee/ExternallyManagedKeyHandler.js.map +1 -0
  101. package/dist/esm/modules/e2ee/KeyHandler.js +137 -0
  102. package/dist/esm/modules/e2ee/KeyHandler.js.map +1 -0
  103. package/dist/esm/modules/e2ee/ManagedKeyHandler.js +182 -0
  104. package/dist/esm/modules/e2ee/ManagedKeyHandler.js.map +1 -0
  105. package/dist/esm/modules/e2ee/OlmAdapter.js +860 -0
  106. package/dist/esm/modules/e2ee/OlmAdapter.js.map +1 -0
  107. package/dist/esm/modules/e2ee/SAS.js +128 -0
  108. package/dist/esm/modules/e2ee/SAS.js.map +1 -0
  109. package/dist/esm/modules/e2ee/Worker.js +102 -0
  110. package/dist/esm/modules/e2ee/Worker.js.map +1 -0
  111. package/dist/esm/modules/e2ee/crypto-utils.js +53 -0
  112. package/dist/esm/modules/e2ee/crypto-utils.js.map +1 -0
  113. package/dist/esm/modules/e2ee/utils.js +15 -0
  114. package/dist/esm/modules/e2ee/utils.js.map +1 -0
  115. package/dist/esm/modules/e2eping/e2eping.js +314 -0
  116. package/dist/esm/modules/e2eping/e2eping.js.map +1 -0
  117. package/dist/esm/modules/flags/FeatureFlags.js +36 -0
  118. package/dist/esm/modules/flags/FeatureFlags.js.map +1 -0
  119. package/dist/esm/modules/litemode/LiteModeContext.js +50 -0
  120. package/dist/esm/modules/litemode/LiteModeContext.js.map +1 -0
  121. package/dist/esm/modules/proxyconnection/CustomSignalingLayer.js +98 -0
  122. package/dist/esm/modules/proxyconnection/CustomSignalingLayer.js.map +1 -0
  123. package/dist/esm/modules/proxyconnection/ProxyConnectionPC.js +348 -0
  124. package/dist/esm/modules/proxyconnection/ProxyConnectionPC.js.map +1 -0
  125. package/dist/esm/modules/proxyconnection/ProxyConnectionService.js +279 -0
  126. package/dist/esm/modules/proxyconnection/ProxyConnectionService.js.map +1 -0
  127. package/dist/esm/modules/proxyconnection/constants.js +14 -0
  128. package/dist/esm/modules/proxyconnection/constants.js.map +1 -0
  129. package/dist/esm/modules/qualitycontrol/CodecSelection.js +222 -0
  130. package/dist/esm/modules/qualitycontrol/CodecSelection.js.map +1 -0
  131. package/dist/esm/modules/qualitycontrol/MockClasses.js +120 -0
  132. package/dist/esm/modules/qualitycontrol/MockClasses.js.map +1 -0
  133. package/dist/esm/modules/qualitycontrol/QualityController.js +366 -0
  134. package/dist/esm/modules/qualitycontrol/QualityController.js.map +1 -0
  135. package/dist/esm/modules/qualitycontrol/ReceiveAudioController.js +73 -0
  136. package/dist/esm/modules/qualitycontrol/ReceiveAudioController.js.map +1 -0
  137. package/dist/esm/modules/qualitycontrol/ReceiveVideoController.js +216 -0
  138. package/dist/esm/modules/qualitycontrol/ReceiveVideoController.js.map +1 -0
  139. package/dist/esm/modules/qualitycontrol/SendVideoController.js +133 -0
  140. package/dist/esm/modules/qualitycontrol/SendVideoController.js.map +1 -0
  141. package/dist/esm/modules/recording/JibriSession.js +279 -0
  142. package/dist/esm/modules/recording/JibriSession.js.map +1 -0
  143. package/dist/esm/modules/recording/RecordingManager.js +257 -0
  144. package/dist/esm/modules/recording/RecordingManager.js.map +1 -0
  145. package/dist/esm/modules/recording/recordingConstants.js +21 -0
  146. package/dist/esm/modules/recording/recordingConstants.js.map +1 -0
  147. package/dist/esm/modules/recording/recordingXMLUtils.js +69 -0
  148. package/dist/esm/modules/recording/recordingXMLUtils.js.map +1 -0
  149. package/dist/esm/modules/red/red.js +108 -0
  150. package/dist/esm/modules/red/red.js.map +1 -0
  151. package/dist/esm/modules/sdp/LocalSdpMunger.js +143 -0
  152. package/dist/esm/modules/sdp/LocalSdpMunger.js.map +1 -0
  153. package/dist/esm/modules/sdp/RtxModifier.js +179 -0
  154. package/dist/esm/modules/sdp/RtxModifier.js.map +1 -0
  155. package/dist/esm/modules/sdp/SDP.js +848 -0
  156. package/dist/esm/modules/sdp/SDP.js.map +1 -0
  157. package/dist/esm/modules/sdp/SDPDiffer.js +96 -0
  158. package/dist/esm/modules/sdp/SDPDiffer.js.map +1 -0
  159. package/dist/esm/modules/sdp/SDPUtil.js +798 -0
  160. package/dist/esm/modules/sdp/SDPUtil.js.map +1 -0
  161. package/dist/esm/modules/sdp/SampleSdpStrings.js +589 -0
  162. package/dist/esm/modules/sdp/SampleSdpStrings.js.map +1 -0
  163. package/dist/esm/modules/sdp/SdpSimulcast.js +196 -0
  164. package/dist/esm/modules/sdp/SdpSimulcast.js.map +1 -0
  165. package/dist/esm/modules/sdp/SdpTransformUtil.js +337 -0
  166. package/dist/esm/modules/sdp/SdpTransformUtil.js.map +1 -0
  167. package/dist/esm/modules/sdp/constants.js +2 -0
  168. package/dist/esm/modules/sdp/constants.js.map +1 -0
  169. package/dist/esm/modules/settings/Settings.js +95 -0
  170. package/dist/esm/modules/settings/Settings.js.map +1 -0
  171. package/dist/esm/modules/statistics/AnalyticsAdapter.js +277 -0
  172. package/dist/esm/modules/statistics/AnalyticsAdapter.js.map +1 -0
  173. package/dist/esm/modules/statistics/AvgRTPStatsReporter.js +817 -0
  174. package/dist/esm/modules/statistics/AvgRTPStatsReporter.js.map +1 -0
  175. package/dist/esm/modules/statistics/LocalStatsCollector.js +149 -0
  176. package/dist/esm/modules/statistics/LocalStatsCollector.js.map +1 -0
  177. package/dist/esm/modules/statistics/PreCallTest.js +15 -0
  178. package/dist/esm/modules/statistics/PreCallTest.js.map +1 -0
  179. package/dist/esm/modules/statistics/RTPStatsCollector.js +601 -0
  180. package/dist/esm/modules/statistics/RTPStatsCollector.js.map +1 -0
  181. package/dist/esm/modules/statistics/SpeakerStats.js +163 -0
  182. package/dist/esm/modules/statistics/SpeakerStats.js.map +1 -0
  183. package/dist/esm/modules/statistics/SpeakerStatsCollector.js +161 -0
  184. package/dist/esm/modules/statistics/SpeakerStatsCollector.js.map +1 -0
  185. package/dist/esm/modules/statistics/constants.js +7 -0
  186. package/dist/esm/modules/statistics/constants.js.map +1 -0
  187. package/dist/esm/modules/statistics/statistics.js +362 -0
  188. package/dist/esm/modules/statistics/statistics.js.map +1 -0
  189. package/dist/esm/modules/util/AsyncQueue.js +102 -0
  190. package/dist/esm/modules/util/AsyncQueue.js.map +1 -0
  191. package/dist/esm/modules/util/Deferred.js +41 -0
  192. package/dist/esm/modules/util/Deferred.js.map +1 -0
  193. package/dist/esm/modules/util/EventEmitter.js +17 -0
  194. package/dist/esm/modules/util/EventEmitter.js.map +1 -0
  195. package/dist/esm/modules/util/EventEmitterForwarder.js +52 -0
  196. package/dist/esm/modules/util/EventEmitterForwarder.js.map +1 -0
  197. package/dist/esm/modules/util/Listenable.js +106 -0
  198. package/dist/esm/modules/util/Listenable.js.map +1 -0
  199. package/dist/esm/modules/util/MathUtil.js +103 -0
  200. package/dist/esm/modules/util/MathUtil.js.map +1 -0
  201. package/dist/esm/modules/util/RandomUtil.js +66 -0
  202. package/dist/esm/modules/util/RandomUtil.js.map +1 -0
  203. package/dist/esm/modules/util/Retry.js +15 -0
  204. package/dist/esm/modules/util/Retry.js.map +1 -0
  205. package/dist/esm/modules/util/ScriptUtil.js +58 -0
  206. package/dist/esm/modules/util/ScriptUtil.js.map +1 -0
  207. package/dist/esm/modules/util/StringUtils.js +21 -0
  208. package/dist/esm/modules/util/StringUtils.js.map +1 -0
  209. package/dist/esm/modules/util/TestUtils.js +14 -0
  210. package/dist/esm/modules/util/TestUtils.js.map +1 -0
  211. package/dist/esm/modules/util/UsernameGenerator.js +436 -0
  212. package/dist/esm/modules/util/UsernameGenerator.js.map +1 -0
  213. package/dist/esm/modules/util/XMLUtils.js +135 -0
  214. package/dist/esm/modules/util/XMLUtils.js.map +1 -0
  215. package/dist/esm/modules/version/ComponentsVersions.js +52 -0
  216. package/dist/esm/modules/version/ComponentsVersions.js.map +1 -0
  217. package/dist/esm/modules/videosipgw/JitsiVideoSIPGWSession.js +137 -0
  218. package/dist/esm/modules/videosipgw/JitsiVideoSIPGWSession.js.map +1 -0
  219. package/dist/esm/modules/videosipgw/VideoSIPGW.js +102 -0
  220. package/dist/esm/modules/videosipgw/VideoSIPGW.js.map +1 -0
  221. package/dist/esm/modules/videosipgw/VideoSIPGWConstants.js +65 -0
  222. package/dist/esm/modules/videosipgw/VideoSIPGWConstants.js.map +1 -0
  223. package/dist/esm/modules/watchRTC/WatchRTC.js +69 -0
  224. package/dist/esm/modules/watchRTC/WatchRTC.js.map +1 -0
  225. package/dist/esm/modules/watchRTC/functions.js +31 -0
  226. package/dist/esm/modules/watchRTC/functions.js.map +1 -0
  227. package/dist/esm/modules/watchRTC/interfaces.js +2 -0
  228. package/dist/esm/modules/watchRTC/interfaces.js.map +1 -0
  229. package/dist/esm/modules/webaudio/AudioMixer.js +74 -0
  230. package/dist/esm/modules/webaudio/AudioMixer.js.map +1 -0
  231. package/dist/esm/modules/webaudio/WebAudioUtils.js +13 -0
  232. package/dist/esm/modules/webaudio/WebAudioUtils.js.map +1 -0
  233. package/dist/esm/modules/xmpp/AVModeration.js +156 -0
  234. package/dist/esm/modules/xmpp/AVModeration.js.map +1 -0
  235. package/dist/esm/modules/xmpp/BreakoutRooms.js +230 -0
  236. package/dist/esm/modules/xmpp/BreakoutRooms.js.map +1 -0
  237. package/dist/esm/modules/xmpp/Caps.js +223 -0
  238. package/dist/esm/modules/xmpp/Caps.js.map +1 -0
  239. package/dist/esm/modules/xmpp/ChatRoom.js +1877 -0
  240. package/dist/esm/modules/xmpp/ChatRoom.js.map +1 -0
  241. package/dist/esm/modules/xmpp/ConnectionPlugin.js +37 -0
  242. package/dist/esm/modules/xmpp/ConnectionPlugin.js.map +1 -0
  243. package/dist/esm/modules/xmpp/FileSharing.js +95 -0
  244. package/dist/esm/modules/xmpp/FileSharing.js.map +1 -0
  245. package/dist/esm/modules/xmpp/JingleHelperFunctions.js +168 -0
  246. package/dist/esm/modules/xmpp/JingleHelperFunctions.js.map +1 -0
  247. package/dist/esm/modules/xmpp/JingleSession.js +166 -0
  248. package/dist/esm/modules/xmpp/JingleSession.js.map +1 -0
  249. package/dist/esm/modules/xmpp/JingleSessionPC.js +1969 -0
  250. package/dist/esm/modules/xmpp/JingleSessionPC.js.map +1 -0
  251. package/dist/esm/modules/xmpp/JingleSessionState.js +23 -0
  252. package/dist/esm/modules/xmpp/JingleSessionState.js.map +1 -0
  253. package/dist/esm/modules/xmpp/Lobby.js +384 -0
  254. package/dist/esm/modules/xmpp/Lobby.js.map +1 -0
  255. package/dist/esm/modules/xmpp/MediaSessionEvents.js +12 -0
  256. package/dist/esm/modules/xmpp/MediaSessionEvents.js.map +1 -0
  257. package/dist/esm/modules/xmpp/MockClasses.js +77 -0
  258. package/dist/esm/modules/xmpp/MockClasses.js.map +1 -0
  259. package/dist/esm/modules/xmpp/Polls.js +87 -0
  260. package/dist/esm/modules/xmpp/Polls.js.map +1 -0
  261. package/dist/esm/modules/xmpp/ResumeTask.js +149 -0
  262. package/dist/esm/modules/xmpp/ResumeTask.js.map +1 -0
  263. package/dist/esm/modules/xmpp/RoomMetadata.js +96 -0
  264. package/dist/esm/modules/xmpp/RoomMetadata.js.map +1 -0
  265. package/dist/esm/modules/xmpp/SignalingLayerImpl.js +313 -0
  266. package/dist/esm/modules/xmpp/SignalingLayerImpl.js.map +1 -0
  267. package/dist/esm/modules/xmpp/StropheErrorHandler.js +53 -0
  268. package/dist/esm/modules/xmpp/StropheErrorHandler.js.map +1 -0
  269. package/dist/esm/modules/xmpp/StropheLastSuccess.js +52 -0
  270. package/dist/esm/modules/xmpp/StropheLastSuccess.js.map +1 -0
  271. package/dist/esm/modules/xmpp/XmppConnection.js +579 -0
  272. package/dist/esm/modules/xmpp/XmppConnection.js.map +1 -0
  273. package/dist/esm/modules/xmpp/moderator.js +524 -0
  274. package/dist/esm/modules/xmpp/moderator.js.map +1 -0
  275. package/dist/esm/modules/xmpp/sha1.js +165 -0
  276. package/dist/esm/modules/xmpp/sha1.js.map +1 -0
  277. package/dist/esm/modules/xmpp/strophe.disco.js +222 -0
  278. package/dist/esm/modules/xmpp/strophe.disco.js.map +1 -0
  279. package/dist/esm/modules/xmpp/strophe.emuc.js +206 -0
  280. package/dist/esm/modules/xmpp/strophe.emuc.js.map +1 -0
  281. package/dist/esm/modules/xmpp/strophe.jingle.js +404 -0
  282. package/dist/esm/modules/xmpp/strophe.jingle.js.map +1 -0
  283. package/dist/esm/modules/xmpp/strophe.logger.js +44 -0
  284. package/dist/esm/modules/xmpp/strophe.logger.js.map +1 -0
  285. package/dist/esm/modules/xmpp/strophe.ping.js +170 -0
  286. package/dist/esm/modules/xmpp/strophe.ping.js.map +1 -0
  287. package/dist/esm/modules/xmpp/strophe.rayo.js +117 -0
  288. package/dist/esm/modules/xmpp/strophe.rayo.js.map +1 -0
  289. package/dist/esm/modules/xmpp/strophe.stream-management.js +365 -0
  290. package/dist/esm/modules/xmpp/strophe.stream-management.js.map +1 -0
  291. package/dist/esm/modules/xmpp/strophe.util.js +116 -0
  292. package/dist/esm/modules/xmpp/strophe.util.js.map +1 -0
  293. package/dist/esm/modules/xmpp/xmpp.js +973 -0
  294. package/dist/esm/modules/xmpp/xmpp.js.map +1 -0
  295. package/dist/esm/service/RTC/BridgeVideoType.js +24 -0
  296. package/dist/esm/service/RTC/BridgeVideoType.js.map +1 -0
  297. package/dist/esm/service/RTC/CameraFacingMode.js +21 -0
  298. package/dist/esm/service/RTC/CameraFacingMode.js.map +1 -0
  299. package/dist/esm/service/RTC/CodecMimeType.js +36 -0
  300. package/dist/esm/service/RTC/CodecMimeType.js.map +1 -0
  301. package/dist/esm/service/RTC/MediaDirection.js +23 -0
  302. package/dist/esm/service/RTC/MediaDirection.js.map +1 -0
  303. package/dist/esm/service/RTC/MediaType.js +20 -0
  304. package/dist/esm/service/RTC/MediaType.js.map +1 -0
  305. package/dist/esm/service/RTC/RTCEvents.js +111 -0
  306. package/dist/esm/service/RTC/RTCEvents.js.map +1 -0
  307. package/dist/esm/service/RTC/ReceiverAudioSubscription.js +27 -0
  308. package/dist/esm/service/RTC/ReceiverAudioSubscription.js.map +1 -0
  309. package/dist/esm/service/RTC/Resolutions.js +56 -0
  310. package/dist/esm/service/RTC/Resolutions.js.map +1 -0
  311. package/dist/esm/service/RTC/SignalingEvents.js +42 -0
  312. package/dist/esm/service/RTC/SignalingEvents.js.map +1 -0
  313. package/dist/esm/service/RTC/SignalingLayer.js +153 -0
  314. package/dist/esm/service/RTC/SignalingLayer.js.map +1 -0
  315. package/dist/esm/service/RTC/StandardVideoQualitySettings.js +180 -0
  316. package/dist/esm/service/RTC/StandardVideoQualitySettings.js.map +1 -0
  317. package/dist/esm/service/RTC/VideoEncoderScalabilityMode.js +36 -0
  318. package/dist/esm/service/RTC/VideoEncoderScalabilityMode.js.map +1 -0
  319. package/dist/esm/service/RTC/VideoType.js +19 -0
  320. package/dist/esm/service/RTC/VideoType.js.map +1 -0
  321. package/dist/esm/service/authentication/AuthenticationEvents.js +13 -0
  322. package/dist/esm/service/authentication/AuthenticationEvents.js.map +1 -0
  323. package/dist/esm/service/connectivity/ConnectionQualityEvents.js +13 -0
  324. package/dist/esm/service/connectivity/ConnectionQualityEvents.js.map +1 -0
  325. package/dist/esm/service/connectivity/Constants.js +3 -0
  326. package/dist/esm/service/connectivity/Constants.js.map +1 -0
  327. package/dist/esm/service/e2eping/E2ePingEvents.js +8 -0
  328. package/dist/esm/service/e2eping/E2ePingEvents.js.map +1 -0
  329. package/dist/esm/service/statistics/AnalyticsEvents.js +521 -0
  330. package/dist/esm/service/statistics/AnalyticsEvents.js.map +1 -0
  331. package/dist/esm/service/statistics/Events.js +36 -0
  332. package/dist/esm/service/statistics/Events.js.map +1 -0
  333. package/dist/esm/service/statistics/constants.js +2 -0
  334. package/dist/esm/service/statistics/constants.js.map +1 -0
  335. package/dist/esm/service/xmpp/XMPPEvents.js +359 -0
  336. package/dist/esm/service/xmpp/XMPPEvents.js.map +1 -0
  337. package/dist/esm/service/xmpp/XMPPExtensioProtocols.js +64 -0
  338. package/dist/esm/service/xmpp/XMPPExtensioProtocols.js.map +1 -0
  339. package/dist/esm/test-setup-polyfill.js +34 -0
  340. package/dist/esm/test-setup-polyfill.js.map +1 -0
  341. package/dist/esm/tools/gen-version.js +15 -0
  342. package/dist/esm/tools/gen-version.js.map +1 -0
  343. package/dist/esm/version.js +3 -0
  344. package/dist/esm/version.js.map +1 -0
  345. package/dist/umd/lib-jitsi-meet.e2ee-worker.js +484 -0
  346. package/dist/umd/lib-jitsi-meet.min.js +3 -0
  347. package/dist/umd/lib-jitsi-meet.min.js.LICENSE.txt +18 -0
  348. package/dist/umd/lib-jitsi-meet.min.map +1 -0
  349. package/package.json +93 -0
  350. package/types/index.d.ts +16180 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockClasses.js","sourceRoot":"","sources":["../../../../modules/xmpp/MockClasses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAE5C,sCAAsC;AAEtC;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,UAAU;IACxC;;OAEG;IACH,mBAAmB;QACf,yCAAyC;IAC7C,CAAC;CACJ;AASD,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IAKjD;;OAEG;IACH;QACI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG;YACV,MAAM,EAAE,SAAS;SACpB,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,IAAI,OAAO;QACP,OAAO,gCAAgC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,GAAW,EAAE,IAAY,EAAE,QAA0C;QACzE,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU;QACN,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC3D,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;OAKG;IACH,uBAAuB,CAAC,QAAwB;QAC5C,IAAI,QAAQ,KAAK,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,EAAe,CAAC;QACrE,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,EAAO,EAAE,QAAqB;QACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,QAAQ,IAAI,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,sBAAsB;QAClB,kDAAkD;IACtD,CAAC;CACJ;AACD,qCAAqC"}
@@ -0,0 +1,87 @@
1
+ import { XMPPEvents } from '../../service/xmpp/XMPPEvents';
2
+ export const COMMAND_ANSWER_POLL = 'answer-poll';
3
+ export const COMMAND_NEW_POLL = 'new-poll';
4
+ export const COMMAND_OLD_POLLS = 'old-polls';
5
+ export default class Polls {
6
+ /**
7
+ * Constructs polls for a room.
8
+ *
9
+ * @param {ChatRoom} room the main room.
10
+ */
11
+ constructor(room) {
12
+ this._mainRoom = room;
13
+ this._xmpp = room.xmpp;
14
+ this._handleMessages = this._handleMessages.bind(this);
15
+ this._mainRoom.xmpp.addListener(XMPPEvents.POLLS_EVENT, this._handleMessages);
16
+ }
17
+ /**
18
+ * Whether polls is supported on backend.
19
+ *
20
+ * @returns {boolean} whether polls is supported on backend.
21
+ */
22
+ isSupported() {
23
+ return Boolean(this._xmpp.pollsComponentAddress);
24
+ }
25
+ /**
26
+ * Stops listening for events.
27
+ */
28
+ dispose() {
29
+ this._mainRoom.xmpp.removeListener(XMPPEvents.POLLS_EVENT, this._handleMessages);
30
+ }
31
+ /**
32
+ * Creates and sends a new poll.
33
+ *
34
+ * @param pollId
35
+ * @param question
36
+ * @param answers
37
+ */
38
+ createPoll(pollId, question, answers) {
39
+ this._mainRoom.sendPrivateMessage(this._xmpp.pollsComponentAddress, JSON.stringify({
40
+ answers: answers,
41
+ command: COMMAND_NEW_POLL,
42
+ pollId,
43
+ question,
44
+ type: 'polls'
45
+ }), 'json-message', true);
46
+ }
47
+ /**
48
+ * Sends answers for a poll.
49
+ *
50
+ * @param pollId
51
+ * @param answers
52
+ */
53
+ answerPoll(pollId, answers) {
54
+ this._mainRoom.sendPrivateMessage(this._xmpp.pollsComponentAddress, JSON.stringify({
55
+ answers,
56
+ command: COMMAND_ANSWER_POLL,
57
+ pollId,
58
+ type: 'polls'
59
+ }), 'json-message', true);
60
+ }
61
+ /**
62
+ * Handles a message for polls.
63
+ *
64
+ * @param {object} payload - Arbitrary data.
65
+ */
66
+ _handleMessages(payload) {
67
+ switch (payload.command) {
68
+ case COMMAND_NEW_POLL:
69
+ this._mainRoom.eventEmitter.emit(XMPPEvents.POLLS_RECEIVE_EVENT, payload);
70
+ break;
71
+ case COMMAND_OLD_POLLS: {
72
+ payload?.polls?.forEach((poll) => {
73
+ this._mainRoom.eventEmitter.emit(XMPPEvents.POLLS_RECEIVE_EVENT, {
74
+ history: true,
75
+ ...poll
76
+ });
77
+ });
78
+ break;
79
+ }
80
+ case COMMAND_ANSWER_POLL: {
81
+ this._mainRoom.eventEmitter.emit(XMPPEvents.POLLS_ANSWER_EVENT, payload);
82
+ break;
83
+ }
84
+ }
85
+ }
86
+ }
87
+ //# sourceMappingURL=Polls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Polls.js","sourceRoot":"","sources":["../../../../modules/xmpp/Polls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAK3D,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAC;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,KAAK;IAItB;;;;OAIG;IACH,YAAY,IAAc;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAClF,CAAC;IAED;;;;OAIG;IACH,WAAW;QACP,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,OAAO;QACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACrF,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,MAAc,EAAE,QAAgB,EAAE,OAAiC;QAC1E,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAC7B,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAChC,IAAI,CAAC,SAAS,CAAC;YACX,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,gBAAgB;YACzB,MAAM;YACN,QAAQ;YACR,IAAI,EAAE,OAAO;SAChB,CAAC,EACF,cAAc,EACd,IAAI,CAAC,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,MAAc,EAAE,OAAuB;QAC9C,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAC7B,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAChC,IAAI,CAAC,SAAS,CAAC;YACX,OAAO;YACP,OAAO,EAAE,mBAAmB;YAC5B,MAAM;YACN,IAAI,EAAE,OAAO;SAChB,CAAC,EACF,cAAc,EACd,IAAI,CAAC,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,OAAO;QACnB,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1B,KAAK,gBAAgB;gBACjB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;gBAE1E,MAAM;YACV,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACrB,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;oBAClC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE;wBAC7D,OAAO,EAAE,IAAI;wBACb,GAAG,IAAI;qBACV,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBACH,MAAM;YACV,CAAC;YACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;gBACzE,MAAM;YACV,CAAC;QACD,CAAC;IACL,CAAC;CACJ"}
@@ -0,0 +1,149 @@
1
+ import { getLogger } from '@jitsi/logger';
2
+ import { NETWORK_INFO_EVENT, default as NetworkInfo } from '../connectivity/NetworkInfo';
3
+ import { getJitterDelay } from '../util/Retry';
4
+ const logger = getLogger('xmpp:ResumeTask');
5
+ /**
6
+ * The class contains the logic for triggering connection resume via XEP-0198 stream management.
7
+ * It does two things, the first one is it tracks the internet online/offline status and it makes sure that
8
+ * the reconnect is attempted only while online. The seconds thing is that it tracks the retry attempts and extends
9
+ * the retry interval using the full jitter pattern.
10
+ */
11
+ export default class ResumeTask {
12
+ /**
13
+ * Initializes new {@code RetryTask}.
14
+ * @param {Strophe.Connection} stropheConnection - The Strophe connection instance.
15
+ */
16
+ constructor(stropheConnection) {
17
+ this._stropheConn = stropheConnection;
18
+ this._resumeRetryN = 0;
19
+ this._retryDelay = undefined;
20
+ this._resumeTimeout = undefined;
21
+ this._networkOnlineListener = null;
22
+ }
23
+ /**
24
+ * @returns {number} - The amount of retries.
25
+ */
26
+ get retryCount() {
27
+ return this._resumeRetryN;
28
+ }
29
+ /**
30
+ * @returns {number|undefined} - How much the app will wait before trying to resume the XMPP connection. When
31
+ * 'undefined' it means that no resume task was not scheduled.
32
+ */
33
+ get retryDelay() {
34
+ return this._retryDelay;
35
+ }
36
+ /**
37
+ * Cancels the delayed resume task.
38
+ *
39
+ * @private
40
+ * @returns {void}
41
+ */
42
+ _cancelResume() {
43
+ if (this._resumeTimeout) {
44
+ logger.info('Canceling connection resume task');
45
+ clearTimeout(this._resumeTimeout);
46
+ this._resumeTimeout = undefined;
47
+ this._retryDelay = undefined;
48
+ }
49
+ }
50
+ /**
51
+ * Removes network online listener for the NETWORK_INFO_EVENT event.
52
+ *
53
+ * @private
54
+ * @returns {void}
55
+ */
56
+ _removeNetworkOnlineListener() {
57
+ if (this._networkOnlineListener) {
58
+ this._networkOnlineListener();
59
+ this._networkOnlineListener = null;
60
+ }
61
+ }
62
+ /**
63
+ * Resumes the XMPP connection using the stream management plugin.
64
+ *
65
+ * @private
66
+ * @returns {void}
67
+ */
68
+ _resumeConnection() {
69
+ this._resumeTimeout = undefined;
70
+ const { streamManagement } = this._stropheConn;
71
+ const resumeToken = streamManagement.getResumeToken();
72
+ // Things may have changed since when the task was scheduled
73
+ if (!resumeToken) {
74
+ return;
75
+ }
76
+ logger.info('Trying to resume the XMPP connection');
77
+ const url = new URL(this._stropheConn.service);
78
+ let { search } = url;
79
+ const pattern = /(previd=)([\w-]+)/;
80
+ const oldToken = search.match(pattern);
81
+ // Replace previd if the previd value has changed.
82
+ if (oldToken && oldToken.indexOf(resumeToken) === -1) {
83
+ search = search.replace(pattern, `$1${resumeToken}`);
84
+ // Append previd if it doesn't exist.
85
+ }
86
+ else if (!oldToken) {
87
+ search += search.indexOf('?') === -1 ? `?previd=${resumeToken}` : `&previd=${resumeToken}`;
88
+ }
89
+ url.search = search;
90
+ this._stropheConn.service = url.toString();
91
+ try {
92
+ streamManagement.resume();
93
+ }
94
+ catch (e) {
95
+ logger.error('Failed to resume XMPP connection', e);
96
+ }
97
+ }
98
+ /**
99
+ * Schedules a delayed timeout which will execute the resume action.
100
+ * @private
101
+ * @returns {void}
102
+ */
103
+ _scheduleResume() {
104
+ if (this._resumeTimeout) {
105
+ // NO-OP
106
+ return;
107
+ }
108
+ // The retry delay will be:
109
+ // 1st retry: 1.5s - 3s
110
+ // 2nd retry: 3s - 9s
111
+ // 3rd and next retry: 4.5s - 27s
112
+ this._retryDelay = getJitterDelay(
113
+ /* retry */ this._resumeRetryN,
114
+ /* minDelay */ this._resumeRetryN * 1500, 3);
115
+ logger.info(`Will try to resume the XMPP connection in ${this.retryDelay}ms`);
116
+ this._resumeTimeout = setTimeout(() => this._resumeConnection(), this.retryDelay);
117
+ }
118
+ /**
119
+ * Cancels the retry task. It's called by {@link XmppConnection} when it's no longer interested in reconnecting for
120
+ * example when the disconnect method is called.
121
+ *
122
+ * @returns {void}
123
+ */
124
+ cancel() {
125
+ this._cancelResume();
126
+ this._removeNetworkOnlineListener();
127
+ this._resumeRetryN = 0;
128
+ }
129
+ /**
130
+ * Called by {@link XmppConnection} when the connection drops and it's a signal it wants to schedule a reconnect.
131
+ *
132
+ * @returns {void}
133
+ */
134
+ schedule() {
135
+ this._cancelResume();
136
+ this._removeNetworkOnlineListener();
137
+ this._resumeRetryN += 1;
138
+ this._networkOnlineListener = NetworkInfo.addCancellableListener(NETWORK_INFO_EVENT, ({ isOnline }) => {
139
+ if (isOnline) {
140
+ this._scheduleResume();
141
+ }
142
+ else {
143
+ this._cancelResume();
144
+ }
145
+ });
146
+ NetworkInfo.isOnline() && this._scheduleResume();
147
+ }
148
+ }
149
+ //# sourceMappingURL=ResumeTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResumeTask.js","sourceRoot":"","sources":["../../../../modules/xmpp/ResumeTask.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import { getLogger } from '@jitsi/logger';
2
+ import { isEqual } from 'lodash-es';
3
+ import { $msg } from 'strophe.js';
4
+ import { XMPPEvents } from '../../service/xmpp/XMPPEvents';
5
+ import { JITSI_MEET_MUC_TYPE } from './xmpp';
6
+ const logger = getLogger('xmpp:RoomMetadata');
7
+ /**
8
+ * Helper class for handling room metadata.
9
+ */
10
+ export default class RoomMetadata {
11
+ /**
12
+ * Constructs lobby room.
13
+ *
14
+ * @param {ChatRoom} room the room we are in.
15
+ */
16
+ constructor(room) {
17
+ this.room = room;
18
+ this._handleMessages = this._handleMessages.bind(this);
19
+ this.room.xmpp.addListener(XMPPEvents.ROOM_METADATA_EVENT, this._handleMessages);
20
+ this._metadata = {};
21
+ }
22
+ /**
23
+ * Stops listening for events.
24
+ */
25
+ dispose() {
26
+ this.room.xmpp.removeListener(XMPPEvents.ROOM_METADATA_EVENT, this._handleMessages);
27
+ }
28
+ /**
29
+ * Sets metadata for the given key.
30
+ *
31
+ * @param {string} key - key under which the metadata will be stored.
32
+ * @param {object} data - data to be stored.
33
+ */
34
+ setMetadata(key, data) {
35
+ if (!this.isSupported()) {
36
+ logger.error(`Cannot set room metadata - supported:${this.isSupported()}`);
37
+ return;
38
+ }
39
+ const message = {
40
+ data,
41
+ key
42
+ };
43
+ this._sendMessage(message);
44
+ }
45
+ /**
46
+ * Gets the stored metadata (all of it).
47
+ *
48
+ * @returns The stored metadata.
49
+ */
50
+ getMetadata() {
51
+ return this._metadata;
52
+ }
53
+ /**
54
+ * Whether Breakout Rooms support is enabled in the backend or not.
55
+ */
56
+ isSupported() {
57
+ return Boolean(this.getComponentAddress());
58
+ }
59
+ /**
60
+ * Gets the address of the Breakout Rooms XMPP component.
61
+ *
62
+ * @returns The address of the component.
63
+ */
64
+ getComponentAddress() {
65
+ return this.room.xmpp.roomMetadataComponentAddress;
66
+ }
67
+ /**
68
+ * Handles a message with metadata updates.
69
+ *
70
+ * @param {object} payload - Arbitrary data.
71
+ */
72
+ _handleMessages(payload) {
73
+ const { metadata } = payload;
74
+ if (!metadata || isEqual(this._metadata, metadata)) {
75
+ return;
76
+ }
77
+ this._metadata = metadata;
78
+ logger.debug('Received metadata update', metadata);
79
+ this.room.eventEmitter.emit(XMPPEvents.ROOM_METADATA_UPDATED, metadata);
80
+ }
81
+ /**
82
+ * Helper to send a breakout rooms message to the component.
83
+ *
84
+ * @param {Object} message - Command that needs to be sent.
85
+ */
86
+ _sendMessage(message) {
87
+ message[JITSI_MEET_MUC_TYPE] = 'room_metadata';
88
+ const msg = $msg({ to: this.getComponentAddress() });
89
+ msg.c('room_metadata', {
90
+ room: this.room.roomjid,
91
+ xmlns: 'http://jitsi.org/jitmeet'
92
+ }, JSON.stringify(message)).up();
93
+ this.room.xmpp.connection.send(msg);
94
+ }
95
+ }
96
+ //# sourceMappingURL=RoomMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoomMetadata.js","sourceRoot":"","sources":["../../../../modules/xmpp/RoomMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAE7C,MAAM,MAAM,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAAC;AAE9C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY;IAI7B;;;;OAIG;IACH,YAAY,IAAI;QACZ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAEjF,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,OAAO;QACH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACxF,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,IAAI;QACjB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,wCAAwC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAE3E,OAAO;QACX,CAAC;QAED,MAAM,OAAO,GAAG;YACZ,IAAI;YACJ,GAAG;SACN,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,WAAW;QACP,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,WAAW;QACP,OAAO,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACH,mBAAmB;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,OAAO;QACnB,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAE7B,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;YACjD,OAAO;QACX,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;IAC5E,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,OAAO;QAChB,OAAO,CAAC,mBAAmB,CAAC,GAAG,eAAe,CAAC;QAE/C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAErD,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YACvB,KAAK,EAAE,0BAA0B;SACpC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAEjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;CACJ"}
@@ -0,0 +1,313 @@
1
+ import { safeJsonParse } from '@jitsi/js-utils/json';
2
+ import { getLogger } from '@jitsi/logger';
3
+ import { Strophe } from 'strophe.js';
4
+ import { MediaType } from '../../service/RTC/MediaType';
5
+ import { SignalingEvents } from '../../service/RTC/SignalingEvents';
6
+ import SignalingLayer, { getMediaTypeFromSourceName } from '../../service/RTC/SignalingLayer';
7
+ import { VideoType } from '../../service/RTC/VideoType';
8
+ import { XMPPEvents } from '../../service/xmpp/XMPPEvents';
9
+ import FeatureFlags from '../flags/FeatureFlags';
10
+ import { filterNodeFromPresenceJSON } from './ChatRoom';
11
+ const logger = getLogger('xmpp:SignalingLayerImpl');
12
+ export const SOURCE_INFO_PRESENCE_ELEMENT = 'SourceInfo';
13
+ /**
14
+ * Default XMPP implementation of the {@link SignalingLayer} interface. Obtains
15
+ * the data from the MUC presence.
16
+ */
17
+ export default class SignalingLayerImpl extends SignalingLayer {
18
+ /**
19
+ * Creates new instance.
20
+ */
21
+ constructor() {
22
+ super();
23
+ this._ssrcOwners = new Map();
24
+ this._chatRoom = null;
25
+ this._localSourceState = {};
26
+ this._remoteSourceState = {};
27
+ }
28
+ /**
29
+ * Adds <SourceInfo> element to the local presence.
30
+ *
31
+ * @returns {boolean}
32
+ * @private
33
+ */
34
+ _addLocalSourceInfoToPresence() {
35
+ if (this._chatRoom) {
36
+ return this._chatRoom.addOrReplaceInPresence(SOURCE_INFO_PRESENCE_ELEMENT, { value: JSON.stringify(this._localSourceState) });
37
+ }
38
+ return false;
39
+ }
40
+ /**
41
+ * Binds event listeners to the chat room instance.
42
+ * @param {ChatRoom} room
43
+ * @private
44
+ * @returns {void}
45
+ */
46
+ _bindChatRoomEventHandlers(room) {
47
+ // Add handlers for 'audiomuted', 'videomuted' and 'videoType' fields in presence in order to support interop
48
+ // with very old versions of mobile clients and jigasi that do not support source-name signaling.
49
+ const emitAudioMutedEvent = (endpointId, muted) => {
50
+ this.eventEmitter.emit(SignalingEvents.PEER_MUTED_CHANGED, endpointId, MediaType.AUDIO, muted);
51
+ };
52
+ this._audioMuteHandler = (node, from) => {
53
+ if (!this._doesEndpointSendNewSourceInfo(from)) {
54
+ emitAudioMutedEvent(from, node.value === 'true');
55
+ }
56
+ };
57
+ room.addPresenceListener('audiomuted', this._audioMuteHandler);
58
+ const emitVideoMutedEvent = (endpointId, muted) => {
59
+ this.eventEmitter.emit(SignalingEvents.PEER_MUTED_CHANGED, endpointId, MediaType.VIDEO, muted);
60
+ };
61
+ this._videoMuteHandler = (node, from) => {
62
+ if (!this._doesEndpointSendNewSourceInfo(from)) {
63
+ emitVideoMutedEvent(from, node.value === 'true');
64
+ }
65
+ };
66
+ room.addPresenceListener('videomuted', this._videoMuteHandler);
67
+ const emitVideoTypeEvent = (endpointId, videoType) => {
68
+ this.eventEmitter.emit(SignalingEvents.PEER_VIDEO_TYPE_CHANGED, endpointId, videoType);
69
+ };
70
+ this._videoTypeHandler = (node, from) => {
71
+ if (!this._doesEndpointSendNewSourceInfo(from)) {
72
+ emitVideoTypeEvent(from, node.value);
73
+ }
74
+ };
75
+ room.addPresenceListener('videoType', this._videoTypeHandler);
76
+ // Add handlers for presence in the new format.
77
+ this._sourceInfoHandler = (node, mucNick) => {
78
+ const endpointId = mucNick;
79
+ const { value } = node;
80
+ const sourceInfoJSON = safeJsonParse(value);
81
+ const emitEventsFromHere = this._doesEndpointSendNewSourceInfo(endpointId);
82
+ const endpointSourceState = this._remoteSourceState[endpointId] || (this._remoteSourceState[endpointId] = {});
83
+ for (const sourceName of Object.keys(sourceInfoJSON)) {
84
+ let sourceChanged = false;
85
+ const mediaType = getMediaTypeFromSourceName(sourceName);
86
+ const newMutedState = Boolean(sourceInfoJSON[sourceName].muted);
87
+ const oldSourceState = endpointSourceState[sourceName]
88
+ || (endpointSourceState[sourceName] = { sourceName });
89
+ if (oldSourceState.muted !== newMutedState) {
90
+ sourceChanged = true;
91
+ oldSourceState.muted = newMutedState;
92
+ if (emitEventsFromHere && !this._localSourceState[sourceName]) {
93
+ this.eventEmitter.emit(SignalingEvents.SOURCE_MUTED_CHANGED, sourceName, newMutedState);
94
+ }
95
+ }
96
+ // Assume a default videoType of 'camera' for video sources.
97
+ const newVideoType = mediaType === MediaType.VIDEO
98
+ ? sourceInfoJSON[sourceName].videoType ?? VideoType.CAMERA
99
+ : undefined;
100
+ if (oldSourceState.videoType !== newVideoType) {
101
+ oldSourceState.videoType = newVideoType;
102
+ sourceChanged = true;
103
+ // Since having a mix of eps that do/don't support multi-stream in the same call is supported, emit
104
+ // SOURCE_VIDEO_TYPE_CHANGED event when the remote source changes videoType.
105
+ if (emitEventsFromHere && !this._localSourceState[sourceName]) {
106
+ this.eventEmitter.emit(SignalingEvents.SOURCE_VIDEO_TYPE_CHANGED, sourceName, newVideoType);
107
+ }
108
+ }
109
+ if (sourceChanged && FeatureFlags.isSsrcRewritingSupported()) {
110
+ this.eventEmitter.emit(SignalingEvents.SOURCE_UPDATED, sourceName, mucNick, newMutedState, newVideoType);
111
+ }
112
+ }
113
+ // Cleanup removed source names
114
+ const newSourceNames = Object.keys(sourceInfoJSON);
115
+ for (const sourceName of Object.keys(endpointSourceState)) {
116
+ if (newSourceNames.indexOf(sourceName) === -1) {
117
+ delete endpointSourceState[sourceName];
118
+ }
119
+ }
120
+ };
121
+ room.addPresenceListener('SourceInfo', this._sourceInfoHandler);
122
+ // Cleanup when participant leaves
123
+ this._memberLeftHandler = (jid) => {
124
+ const endpointId = Strophe.getResourceFromJid(jid);
125
+ delete this._remoteSourceState[endpointId];
126
+ };
127
+ room.addEventListener(XMPPEvents.MUC_MEMBER_LEFT, this._memberLeftHandler);
128
+ }
129
+ /**
130
+ * Check is given endpoint has advertised <SourceInfo/> in it's presence which means that the source name signaling
131
+ * is used by this endpoint.
132
+ *
133
+ * @param {EndpointId} endpointId
134
+ * @returns {boolean}
135
+ */
136
+ _doesEndpointSendNewSourceInfo(endpointId) {
137
+ const presence = this._chatRoom?.getLastPresence(endpointId);
138
+ return Boolean(presence?.find((node) => node.tagName === SOURCE_INFO_PRESENCE_ELEMENT));
139
+ }
140
+ /**
141
+ * Logs a debug or error message to console depending on whether SSRC rewriting is enabled or not.
142
+ * Owner changes are permitted only when SSRC rewriting is enabled.
143
+ *
144
+ * @param {string} message - The message to be logged.
145
+ * @returns {void}
146
+ */
147
+ _logOwnerChangedMessage(message) {
148
+ if (FeatureFlags.isSsrcRewritingSupported()) {
149
+ logger.debug(message);
150
+ }
151
+ else {
152
+ logger.error(message);
153
+ }
154
+ }
155
+ /**
156
+ * @inheritDoc
157
+ */
158
+ getPeerMediaInfo(owner, mediaType, sourceName) {
159
+ const legacyGetPeerMediaInfo = () => {
160
+ if (this._chatRoom) {
161
+ return this._chatRoom.getMediaPresenceInfo(owner, mediaType);
162
+ }
163
+ logger.warn('Requested peer media info, before room was set');
164
+ };
165
+ const lastPresence = this._chatRoom?.getLastPresence(owner);
166
+ if (!lastPresence) {
167
+ logger.warn(`getPeerMediaInfo - no presence stored for: ${owner}`);
168
+ return;
169
+ }
170
+ if (!this._doesEndpointSendNewSourceInfo(owner)) {
171
+ return legacyGetPeerMediaInfo();
172
+ }
173
+ if (sourceName) {
174
+ return this.getPeerSourceInfo(owner, sourceName);
175
+ }
176
+ const mediaInfo = {
177
+ muted: true
178
+ };
179
+ if (mediaType === MediaType.VIDEO) {
180
+ mediaInfo.videoType = undefined;
181
+ const codecListNode = filterNodeFromPresenceJSON(lastPresence, 'jitsi_participant_codecList');
182
+ const codecTypeNode = filterNodeFromPresenceJSON(lastPresence, 'jitsi_participant_codecType');
183
+ if (codecListNode.length) {
184
+ mediaInfo.codecList = codecListNode[0].value?.split(',') ?? [];
185
+ }
186
+ else if (codecTypeNode.length > 0) {
187
+ mediaInfo.codecType = codecTypeNode[0].value;
188
+ }
189
+ }
190
+ return mediaInfo;
191
+ }
192
+ /**
193
+ * @inheritDoc
194
+ */
195
+ getPeerSourceInfo(owner, sourceName) {
196
+ const mediaType = getMediaTypeFromSourceName(sourceName);
197
+ const mediaInfo = mediaType === MediaType.VIDEO
198
+ ? { muted: true, sourceName, videoType: VideoType.CAMERA }
199
+ : { muted: true, sourceName };
200
+ return this._remoteSourceState[owner]
201
+ ? this._remoteSourceState[owner][sourceName] ?? mediaInfo
202
+ : undefined;
203
+ }
204
+ /**
205
+ * @inheritDoc
206
+ */
207
+ getSSRCOwner(ssrc) {
208
+ return this._ssrcOwners.get(ssrc)?.endpointId;
209
+ }
210
+ /**
211
+ * @inheritDoc
212
+ */
213
+ getTrackSourceName(ssrc) {
214
+ return this._ssrcOwners.get(ssrc)?.sourceName;
215
+ }
216
+ /**
217
+ * @inheritDoc
218
+ */
219
+ removeSSRCOwners(ssrcList) {
220
+ if (!ssrcList?.length) {
221
+ return;
222
+ }
223
+ for (const ssrc of ssrcList) {
224
+ this._ssrcOwners.delete(ssrc);
225
+ }
226
+ }
227
+ /**
228
+ * Sets the <tt>ChatRoom</tt> instance used and binds presence listeners.
229
+ * @param {ChatRoom} room
230
+ */
231
+ setChatRoom(room) {
232
+ const oldChatRoom = this._chatRoom;
233
+ this._chatRoom = room;
234
+ if (oldChatRoom) {
235
+ oldChatRoom.removePresenceListener('audiomuted', this._audioMuteHandler);
236
+ oldChatRoom.removePresenceListener('videomuted', this._videoMuteHandler);
237
+ oldChatRoom.removePresenceListener('videoType', this._videoTypeHandler);
238
+ this._sourceInfoHandler
239
+ && oldChatRoom.removePresenceListener(SOURCE_INFO_PRESENCE_ELEMENT, this._sourceInfoHandler);
240
+ this._memberLeftHandler
241
+ && oldChatRoom.removeEventListener(XMPPEvents.MUC_MEMBER_LEFT, this._memberLeftHandler);
242
+ }
243
+ if (room) {
244
+ this._bindChatRoomEventHandlers(room);
245
+ this._addLocalSourceInfoToPresence();
246
+ }
247
+ }
248
+ /**
249
+ * @inheritDoc
250
+ */
251
+ setSSRCOwner(ssrc, newEndpointId, newSourceName) {
252
+ if (typeof ssrc !== 'number') {
253
+ throw new TypeError(`SSRC(${ssrc}) must be a number`);
254
+ }
255
+ // Now signaling layer instance is shared between different JingleSessionPC instances, so although very unlikely
256
+ // an SSRC conflict could potentially occur. Log a message to make debugging easier.
257
+ const existingOwner = this._ssrcOwners.get(ssrc);
258
+ if (existingOwner) {
259
+ const { endpointId, sourceName } = existingOwner;
260
+ if (endpointId !== newEndpointId || sourceName !== newSourceName) {
261
+ this._logOwnerChangedMessage(`SSRC owner re-assigned from ${existingOwner}(source-name=${sourceName}) to ${newEndpointId}(source-name=${newSourceName})`);
262
+ }
263
+ }
264
+ this._ssrcOwners.set(ssrc, {
265
+ endpointId: newEndpointId,
266
+ sourceName: newSourceName
267
+ });
268
+ }
269
+ /**
270
+ * @inheritDoc
271
+ */
272
+ setTrackMuteStatus(sourceName, muted) {
273
+ if (!this._localSourceState[sourceName]) {
274
+ this._localSourceState[sourceName] = {};
275
+ }
276
+ this._localSourceState[sourceName].muted = muted;
277
+ logger.debug(`Mute state of ${sourceName} changed to muted=${muted}`);
278
+ if (this._chatRoom) {
279
+ return this._addLocalSourceInfoToPresence();
280
+ }
281
+ return false;
282
+ }
283
+ /**
284
+ * @inheritDoc
285
+ */
286
+ setTrackVideoType(sourceName, videoType) {
287
+ if (!this._localSourceState[sourceName]) {
288
+ this._localSourceState[sourceName] = {};
289
+ }
290
+ if (this._localSourceState[sourceName].videoType !== videoType) {
291
+ // Include only if not a camera (default)
292
+ this._localSourceState[sourceName].videoType = videoType === VideoType.CAMERA ? undefined : videoType;
293
+ return this._addLocalSourceInfoToPresence();
294
+ }
295
+ return false;
296
+ }
297
+ /**
298
+ * @inheritDoc
299
+ */
300
+ updateSsrcOwnersOnLeave(id) {
301
+ const ssrcs = [];
302
+ this._ssrcOwners.forEach(({ endpointId }, ssrc) => {
303
+ if (endpointId === id) {
304
+ ssrcs.push(ssrc);
305
+ }
306
+ });
307
+ if (!ssrcs?.length) {
308
+ return;
309
+ }
310
+ this.removeSSRCOwners(ssrcs);
311
+ }
312
+ }
313
+ //# sourceMappingURL=SignalingLayerImpl.js.map