@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,389 @@
1
+ import { getLogger } from '@jitsi/logger';
2
+ import { JitsiConferenceEvents as ConferenceEvents } from '../../JitsiConferenceEvents';
3
+ import { RTCEvents } from '../../service/RTC/RTCEvents';
4
+ import Resolutions from '../../service/RTC/Resolutions';
5
+ import { VIDEO_QUALITY_LEVELS } from '../../service/RTC/StandardVideoQualitySettings';
6
+ import { VideoType } from '../../service/RTC/VideoType';
7
+ import { ConnectionQualityEvents } from '../../service/connectivity/ConnectionQualityEvents';
8
+ import { XMPPEvents } from '../../service/xmpp/XMPPEvents';
9
+ const logger = getLogger('connectivity:ConnectionQuality');
10
+ /**
11
+ * The value to use for the "type" field for messages sent by ConnectionQuality
12
+ * over the data channel.
13
+ */
14
+ const STATS_MESSAGE_TYPE = 'stats';
15
+ /**
16
+ * The maximum bitrate to use as a measurement against the participant's current
17
+ * bitrate. This cap helps in the cases where the participant's bitrate is high
18
+ * but not enough to fulfill high targets, such as with 1080p.
19
+ */
20
+ const MAX_TARGET_BITRATE = 2500;
21
+ /**
22
+ * The initial bitrate for video in kbps.
23
+ */
24
+ const startBitrate = 800;
25
+ /**
26
+ * Gets the expected bitrate (in kbps) in perfect network conditions.
27
+ * @param simulcast {boolean} whether simulcast is enabled or not.
28
+ * @param resolution {Resolution} the resolution.
29
+ * @param millisSinceStart {number} the number of milliseconds since sending video started.
30
+ * @param bitrates {Object} the bitrates for the local video source.
31
+ */
32
+ function getTarget(simulcast, resolution, millisSinceStart, bitrates) {
33
+ let target = 0;
34
+ let height = Math.min(resolution.height, resolution.width);
35
+ // Find the first format with height no bigger than ours.
36
+ let qualityLevel = VIDEO_QUALITY_LEVELS.find(f => f.height <= height);
37
+ if (qualityLevel && simulcast) {
38
+ // Sum the target fields from all simulcast layers for the given
39
+ // resolution (e.g. 720p + 360p + 180p) for VP8 simulcast.
40
+ for (height = qualityLevel.height; height >= 180; height /= 2) {
41
+ const targetHeight = height;
42
+ qualityLevel = VIDEO_QUALITY_LEVELS.find(f => f.height === targetHeight);
43
+ if (qualityLevel) {
44
+ target += bitrates[qualityLevel.level];
45
+ }
46
+ else {
47
+ break;
48
+ }
49
+ }
50
+ }
51
+ else if (qualityLevel) {
52
+ // For VP9 SVC, H.264 (simulcast automatically disabled) and p2p, target bitrate will be
53
+ // same as that of the individual stream bitrate.
54
+ target = bitrates[qualityLevel.level];
55
+ }
56
+ // Allow for an additional 1 second for ramp up -- delay any initial drop
57
+ // of connection quality by 1 second. Convert target from bps to kbps.
58
+ return Math.min(target / 1000, rampUp(Math.max(0, millisSinceStart - 1000)));
59
+ }
60
+ /**
61
+ * Gets the bitrate to which GCC would have ramped up in perfect network
62
+ * conditions after millisSinceStart milliseconds.
63
+ * @param millisSinceStart {number} the number of milliseconds since sending
64
+ * video was enabled.
65
+ */
66
+ function rampUp(millisSinceStart) {
67
+ if (millisSinceStart > 60000) {
68
+ return Number.MAX_SAFE_INTEGER;
69
+ }
70
+ // According to GCC the send side bandwidth estimation grows with at most
71
+ // 8% per second.
72
+ // https://tools.ietf.org/html/draft-ietf-rmcat-gcc-02#section-5.5
73
+ return startBitrate * Math.pow(1.08, millisSinceStart / 1000);
74
+ }
75
+ /**
76
+ * A class which monitors the local statistics coming from the RTC modules, and
77
+ * calculates a "connection quality" value, in percent, for the media
78
+ * connection. A value of 100% indicates a very good network connection, and a
79
+ * value of 0% indicates a poor connection.
80
+ */
81
+ export default class ConnectionQuality {
82
+ /**
83
+ *
84
+ * @param conference
85
+ * @param eventEmitter
86
+ * @param options
87
+ */
88
+ constructor(conference, eventEmitter, options) {
89
+ this.eventEmitter = eventEmitter;
90
+ /**
91
+ * The owning JitsiConference.
92
+ */
93
+ this._conference = conference;
94
+ /**
95
+ * Holds statistics about the local connection quality.
96
+ */
97
+ this._localStats = {
98
+ connectionQuality: 100,
99
+ jvbRTT: undefined
100
+ };
101
+ /**
102
+ * The time this._localStats.connectionQuality was last updated.
103
+ */
104
+ this._lastConnectionQualityUpdate = -1;
105
+ /**
106
+ * Conference options.
107
+ */
108
+ this._options = options;
109
+ /**
110
+ * Maps a participant ID to an object holding connection quality
111
+ * statistics received from this participant.
112
+ */
113
+ this._remoteStats = {};
114
+ /**
115
+ * The time that the ICE state last changed to CONNECTED. We use this
116
+ * to calculate how much time we as a sender have had to ramp-up.
117
+ */
118
+ this._timeIceConnected = -1;
119
+ /**
120
+ * The time that local video was unmuted. We use this to calculate how
121
+ * much time we as a sender have had to ramp-up.
122
+ */
123
+ this._timeVideoUnmuted = -1;
124
+ conference.on(ConferenceEvents.BRIDGE_BWE_STATS_RECEIVED, bwe => {
125
+ if (bwe && this._localStats?.bandwidth) {
126
+ this._localStats.bandwidth.download = Math.floor(bwe / 1000);
127
+ }
128
+ });
129
+ // TODO: consider ignoring these events and letting the user of
130
+ // lib-jitsi-meet handle these separately.
131
+ conference.on(ConferenceEvents.CONNECTION_INTERRUPTED, () => {
132
+ this._updateLocalConnectionQuality(0);
133
+ this.eventEmitter.emit(ConnectionQualityEvents.LOCAL_STATS_UPDATED, this._localStats);
134
+ this._broadcastLocalStats();
135
+ });
136
+ conference.room.addListener(XMPPEvents.ICE_CONNECTION_STATE_CHANGED, (jingleSession, newState) => {
137
+ if (!jingleSession.isP2P && newState === 'connected') {
138
+ this._timeIceConnected = window.performance.now();
139
+ }
140
+ });
141
+ // Listen to DataChannel message from other participants in the
142
+ // conference, and update the _remoteStats field accordingly.
143
+ // TODO - Delete this when all the mobile endpoints switch to using the new Colibri
144
+ // message format for sending the endpoint stats.
145
+ conference.on(ConferenceEvents.ENDPOINT_MESSAGE_RECEIVED, (participant, payload) => {
146
+ if (payload.type === STATS_MESSAGE_TYPE) {
147
+ this._updateRemoteStats(participant.getId(), payload.values);
148
+ }
149
+ });
150
+ conference.on(ConferenceEvents.ENDPOINT_STATS_RECEIVED, (participant, payload) => {
151
+ this._updateRemoteStats(participant.getId(), payload);
152
+ });
153
+ if (!this._options.config.disableLocalStats) {
154
+ // Listen to local statistics events originating from the RTC module and update the _localStats field.
155
+ conference.statistics.addConnectionStatsListener(this._updateLocalStats.bind(this));
156
+ }
157
+ // Save the last time we were unmuted.
158
+ conference.on(ConferenceEvents.TRACK_MUTE_CHANGED, track => {
159
+ if (track.isVideoTrack()) {
160
+ if (track.isMuted()) {
161
+ this._timeVideoUnmuted = -1;
162
+ }
163
+ else {
164
+ this._maybeUpdateUnmuteTime();
165
+ }
166
+ }
167
+ });
168
+ conference.on(ConferenceEvents.TRACK_ADDED, track => {
169
+ if (track.isVideoTrack() && !track.isMuted()) {
170
+ this._maybeUpdateUnmuteTime();
171
+ }
172
+ });
173
+ conference.on(ConferenceEvents.VIDEO_CODEC_CHANGED, this._resetVideoUnmuteTime.bind(this));
174
+ conference.on(ConferenceEvents._MEDIA_SESSION_ACTIVE_CHANGED, this._resetVideoUnmuteTime.bind(this));
175
+ conference.rtc.on(RTCEvents.LOCAL_TRACK_MAX_ENABLED_RESOLUTION_CHANGED, track => {
176
+ this._localStats.maxEnabledResolution = track.maxEnabledResolution;
177
+ });
178
+ conference.on(ConferenceEvents.SERVER_REGION_CHANGED, serverRegion => {
179
+ this._localStats.serverRegion = serverRegion;
180
+ });
181
+ conference.on(ConferenceEvents.PROPERTIES_CHANGED, properties => {
182
+ this._localStats.bridgeCount
183
+ = Number(properties?.['bridge-count']);
184
+ });
185
+ }
186
+ /**
187
+ * Broadcasts the local statistics to all other participants in the
188
+ * conference.
189
+ */
190
+ _broadcastLocalStats() {
191
+ // broadcasting local stats is disabled
192
+ if (this._options.config.disableLocalStatsBroadcast) {
193
+ return;
194
+ }
195
+ // Send only the data that remote participants care about.
196
+ const data = {
197
+ bitrate: this._localStats.bitrate,
198
+ connectionQuality: this._localStats.connectionQuality,
199
+ jvbRTT: this._localStats.jvbRTT,
200
+ maxEnabledResolution: this._localStats.maxEnabledResolution,
201
+ packetLoss: this._localStats.packetLoss,
202
+ serverRegion: this._localStats.serverRegion
203
+ };
204
+ try {
205
+ this._conference.sendEndpointStatsMessage(data);
206
+ }
207
+ catch (err) {
208
+ // Ignore the error as we might hit it in the beginning of the call before the channel is ready.
209
+ // The statistics will be sent again after few seconds and error is logged elseware as well.
210
+ }
211
+ }
212
+ /**
213
+ * Calculates a new "connection quality" value.
214
+ * @param videoType {VideoType} the type of the video source (camera or a screen capture).
215
+ * @param isMuted {boolean} whether the local video is muted.
216
+ * @param resolutionName {Resolution} the input resolution used by the camera.
217
+ * @returns {*} the newly calculated connection quality.
218
+ */
219
+ _calculateConnectionQuality(videoType, isMuted, resolutionName) {
220
+ // resolutionName is an index into Resolutions (where "720" is
221
+ // "1280x720" and "960" is "960x720" ...).
222
+ const resolution = Resolutions[resolutionName];
223
+ let quality = 100;
224
+ let packetLoss;
225
+ // TODO: take into account packet loss for received streams
226
+ if (this._localStats.packetLoss) {
227
+ packetLoss = this._localStats.packetLoss.upload;
228
+ }
229
+ if (isMuted || !resolution || videoType === VideoType.DESKTOP
230
+ || this._timeIceConnected < 0
231
+ || this._timeVideoUnmuted < 0) {
232
+ // Calculate a value based on packet loss only.
233
+ if (packetLoss === undefined) {
234
+ logger.error('Cannot calculate connection quality, unknown '
235
+ + 'packet loss.');
236
+ quality = 100;
237
+ }
238
+ else if (packetLoss <= 2) {
239
+ quality = 100; // Full 5 bars.
240
+ }
241
+ else if (packetLoss <= 4) {
242
+ quality = 70; // 4 bars
243
+ }
244
+ else if (packetLoss <= 6) {
245
+ quality = 50; // 3 bars
246
+ }
247
+ else if (packetLoss <= 8) {
248
+ quality = 30; // 2 bars
249
+ }
250
+ else if (packetLoss <= 12) {
251
+ quality = 10; // 1 bars
252
+ }
253
+ else {
254
+ quality = 0; // Still 1 bar, but slower climb-up.
255
+ }
256
+ }
257
+ else {
258
+ // Calculate a value based on the send video bitrate on the active TPC.
259
+ const activeTPC = this._conference.getActivePeerConnection();
260
+ if (activeTPC) {
261
+ // Time since sending of video was enabled.
262
+ const millisSinceStart = window.performance.now()
263
+ - Math.max(this._timeVideoUnmuted, this._timeIceConnected);
264
+ const statsInterval = this._options.config?.pcStatsInterval ?? 10000;
265
+ // Expected sending bitrate in perfect conditions.
266
+ let target = getTarget(activeTPC.doesTrueSimulcast(undefined), resolution, millisSinceStart, activeTPC.getTargetVideoBitrates(undefined));
267
+ target = Math.min(target, MAX_TARGET_BITRATE);
268
+ // Calculate the quality only after the stats are available (after video was enabled).
269
+ if (millisSinceStart > statsInterval) {
270
+ quality = 100 * this._localStats.bitrate.upload / target;
271
+ }
272
+ }
273
+ // Whatever the bitrate, drop early if there is significant loss
274
+ if (packetLoss && packetLoss >= 10) {
275
+ quality = Math.min(quality, 30);
276
+ }
277
+ }
278
+ // Make sure that the quality doesn't climb quickly
279
+ if (this._lastConnectionQualityUpdate > 0) {
280
+ const maxIncreasePerSecond = 2;
281
+ const prevConnectionQuality = this._localStats.connectionQuality;
282
+ const diffSeconds = (window.performance.now() - this._lastConnectionQualityUpdate) / 1000;
283
+ quality = Math.min(quality, prevConnectionQuality + (diffSeconds * maxIncreasePerSecond));
284
+ }
285
+ return Math.min(100, quality);
286
+ }
287
+ /**
288
+ * Sets _timeVideoUnmuted if it was previously unset. If it was already set,
289
+ * doesn't change it.
290
+ */
291
+ _maybeUpdateUnmuteTime() {
292
+ if (this._timeVideoUnmuted < 0) {
293
+ this._timeVideoUnmuted = window.performance.now();
294
+ }
295
+ }
296
+ /**
297
+ * Resets the time video was unmuted and triggers a new ramp-up.
298
+ *
299
+ * @private
300
+ * @returns {void}
301
+ */
302
+ _resetVideoUnmuteTime() {
303
+ this._timeVideoUnmuted = -1;
304
+ this._maybeUpdateUnmuteTime();
305
+ }
306
+ /**
307
+ * Updates the localConnectionQuality value
308
+ * @param values {number} the new value. Should be in [0, 100].
309
+ */
310
+ _updateLocalConnectionQuality(value) {
311
+ this._localStats.connectionQuality = value;
312
+ this._lastConnectionQualityUpdate = window.performance.now();
313
+ }
314
+ /**
315
+ * Updates the local statistics
316
+ * @param {TraceablePeerConnection} tpc the peerconnection which emitted
317
+ * the stats
318
+ * @param data new statistics
319
+ */
320
+ _updateLocalStats(tpc, data) {
321
+ // Update jvbRTT
322
+ if (!tpc.isP2P) {
323
+ const jvbRTT = data.transport?.length && data.transport[0].rtt;
324
+ this._localStats.jvbRTT = jvbRTT ? jvbRTT : undefined;
325
+ }
326
+ // Do not continue with processing of other stats if they do not
327
+ // originate from the active peerconnection
328
+ if (tpc !== this._conference.getActivePeerConnection()) {
329
+ return;
330
+ }
331
+ let key;
332
+ const updateLocalConnectionQuality = !this._conference.isConnectionInterrupted();
333
+ const localVideoTrack = this._conference.getLocalVideoTrack();
334
+ const videoType = localVideoTrack?.videoType;
335
+ const isMuted = localVideoTrack ? localVideoTrack.isMuted() : true;
336
+ const resolutionName = localVideoTrack
337
+ ? Math.min(localVideoTrack.resolution, localVideoTrack.maxEnabledResolution).toString() : null;
338
+ if (!isMuted) {
339
+ this._maybeUpdateUnmuteTime();
340
+ }
341
+ // Copy the fields already in 'data'.
342
+ for (key in data) {
343
+ if (data.hasOwnProperty(key)) {
344
+ // Prevent overwriting available download bandwidth as this statistic is provided by the bridge.
345
+ if (key === 'bandwidth' && data[key].hasOwnProperty('download') && !tpc.isP2P) {
346
+ if (!this._localStats[key]) {
347
+ this._localStats[key] = {};
348
+ }
349
+ this._localStats[key].download = this._localStats[key].download || data[key].download;
350
+ this._localStats[key].upload = data[key].upload;
351
+ }
352
+ else {
353
+ this._localStats[key] = data[key];
354
+ }
355
+ }
356
+ }
357
+ // And re-calculate the connectionQuality field.
358
+ if (updateLocalConnectionQuality) {
359
+ this._updateLocalConnectionQuality(this._calculateConnectionQuality(videoType, isMuted, resolutionName));
360
+ }
361
+ this.eventEmitter.emit(ConnectionQualityEvents.LOCAL_STATS_UPDATED, this._localStats);
362
+ this._broadcastLocalStats();
363
+ }
364
+ /**
365
+ * Updates remote statistics
366
+ * @param id the id of the remote participant
367
+ * @param data the statistics received
368
+ */
369
+ _updateRemoteStats(id, data) {
370
+ // Use only the fields we need
371
+ this._remoteStats[id] = {
372
+ bitrate: data.bitrate,
373
+ connectionQuality: data.connectionQuality,
374
+ jvbRTT: data.jvbRTT,
375
+ maxEnabledResolution: data.maxEnabledResolution,
376
+ packetLoss: data.packetLoss,
377
+ serverRegion: data.serverRegion
378
+ };
379
+ this.eventEmitter.emit(ConnectionQualityEvents.REMOTE_STATS_UPDATED, id, this._remoteStats[id]);
380
+ }
381
+ /**
382
+ * Returns the local statistics.
383
+ * Exported only for use in jitsi-meet-torture.
384
+ */
385
+ getStats() {
386
+ return this._localStats;
387
+ }
388
+ }
389
+ //# sourceMappingURL=ConnectionQuality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionQuality.js","sourceRoot":"","sources":["../../../../modules/connectivity/ConnectionQuality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import { getLogger } from '@jitsi/logger';
2
+ import RTCStats from '../RTCStats/RTCStats';
3
+ import { RTCStatsEvents } from '../RTCStats/RTCStatsEvents';
4
+ const logger = getLogger('connectivity:IceFailedHandling');
5
+ /**
6
+ * This class deals with shenanigans around JVB media session's ICE failed status handling.
7
+ *
8
+ * If ICE connection is not re-established within 2 secs after the internet comes back online, the client will initiate
9
+ * a session restart via 'session-terminate'. This results in Jicofo re-inviting the participant into the conference by
10
+ * recreating the jvb media session so that there is minimla disruption to the user by default.
11
+ */
12
+ export default class IceFailedHandling {
13
+ /**
14
+ * Creates new {@code DelayedIceFailed} task.
15
+ * @param {JitsiConference} conference
16
+ */
17
+ constructor(conference) {
18
+ this._canceled = false;
19
+ this._conference = conference;
20
+ }
21
+ /**
22
+ * After making sure there's no way for the ICE connection to recover this method either sends ICE failed
23
+ * notification to Jicofo or emits the ice failed conference event.
24
+ * @private
25
+ * @returns {void}
26
+ */
27
+ _actOnIceFailed() {
28
+ if (!this._conference.room) {
29
+ return;
30
+ }
31
+ const jvbConnection = this._conference.jvbJingleSession;
32
+ const jvbConnIceState = jvbConnection?.getIceConnectionState();
33
+ if (!jvbConnection) {
34
+ logger.warn('Not sending ICE failed - no JVB connection');
35
+ }
36
+ else if (jvbConnIceState === 'connected') {
37
+ logger.info('ICE connection restored - not sending ICE failed');
38
+ }
39
+ else {
40
+ logger.info(`Sending ICE failed - the connection did not recover, ICE state: ${jvbConnIceState}`);
41
+ RTCStats.sendStatsEntry(RTCStatsEvents.JVB_ICE_RESTARTED_EVENT);
42
+ this._conference._stopJvbSession({
43
+ reason: 'connectivity-error',
44
+ reasonDescription: 'ICE FAILED',
45
+ requestRestart: true,
46
+ sendSessionTerminate: true
47
+ });
48
+ }
49
+ }
50
+ /**
51
+ * Starts the task.
52
+ * @returns {void}
53
+ */
54
+ start() {
55
+ // Using xmpp.ping allows to handle both XMPP being disconnected and internet offline cases. The ping function
56
+ // uses sendIQ2 method which is resilient to XMPP connection disconnected state and will patiently wait until it
57
+ // gets reconnected.
58
+ // This also handles the case about waiting for the internet to come back online, because ping
59
+ // will only succeed when the internet is online and then there's a chance for the ICE to recover from FAILED to
60
+ // CONNECTED which is the extra 2 second timeout after ping.
61
+ // The 65 second timeout is given on purpose as there's no chance for XMPP to recover after 65 seconds of no
62
+ // communication with the server. Such resume attempt will result in unrecoverable conference failed event due
63
+ // to 'item-not-found' error returned by the server.
64
+ this._conference.xmpp.ping(65000).then(() => {
65
+ if (!this._canceled) {
66
+ this._iceFailedTimeout = window.setTimeout(() => {
67
+ this._iceFailedTimeout = undefined;
68
+ this._actOnIceFailed();
69
+ }, 2000);
70
+ }
71
+ }, error => {
72
+ logger.error('PING error/timeout - not sending ICE failed', error);
73
+ });
74
+ }
75
+ /**
76
+ * Cancels the task.
77
+ * @returns {void}
78
+ */
79
+ cancel() {
80
+ this._canceled = true;
81
+ window.clearTimeout(this._iceFailedTimeout);
82
+ }
83
+ }
84
+ //# sourceMappingURL=IceFailedHandling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IceFailedHandling.js","sourceRoot":"","sources":["../../../../modules/connectivity/IceFailedHandling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,MAAM,MAAM,GAAG,SAAS,CAAC,gCAAgC,CAAC,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAKlC;;;OAGG;IACH,YAAY,UAA2B;QAP/B,cAAS,GAAY,KAAK,CAAC;QAQ/B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,eAAe;QACX,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACzB,OAAO;QACX,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;QACxD,MAAM,eAAe,GAAG,aAAa,EAAE,qBAAqB,EAAE,CAAC;QAE/D,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,eAAe,KAAK,WAAW,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC,mEAAmE,eAAe,EAAE,CAAC,CAAC;YAClG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;YAChE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;gBAC7B,MAAM,EAAE,oBAAoB;gBAC5B,iBAAiB,EAAE,YAAY;gBAC/B,cAAc,EAAE,IAAI;gBACpB,oBAAoB,EAAE,IAAI;aAC7B,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK;QACD,+GAA+G;QAC/G,gHAAgH;QAChH,oBAAoB;QACpB,+FAA+F;QAC/F,gHAAgH;QAChH,4DAA4D;QAC5D,6GAA6G;QAC7G,8GAA8G;QAC9G,oDAAoD;QACpD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAClC,GAAG,EAAE;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClB,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;oBAC5C,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;oBACnC,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC3B,CAAC,EAAE,IAAI,CAAC,CAAC;YACb,CAAC;QACL,CAAC,EACD,KAAK,CAAC,EAAE;YACJ,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACX,CAAC;IAED;;;OAGG;IACH,MAAM;QACF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;CACJ"}
@@ -0,0 +1,49 @@
1
+ import { getLogger } from '@jitsi/logger';
2
+ import Listenable from '../util/Listenable';
3
+ export const NETWORK_INFO_EVENT = 'NETWORK_INFO_CHANGED';
4
+ const logger = getLogger('connectivity:NetworkInfo');
5
+ /**
6
+ * Module provides information about the current status of the internet
7
+ * connection. Lib-jitsi-meet doesn't have any logic for detecting internet
8
+ * online/offline, but rather it relies on the information supplied by the app
9
+ * that uses it. By default the online state is assumed and the lib acts as if
10
+ * it was connected. See {@link JitsiMeetJS.setNetworkInfo}.
11
+ */
12
+ export class NetworkInfo extends Listenable {
13
+ /**
14
+ * Creates new {@link NetworkInfo} instance.
15
+ */
16
+ constructor() {
17
+ super();
18
+ this._current = {
19
+ isOnline: true
20
+ };
21
+ }
22
+ /**
23
+ * Updates the network info state.
24
+ *
25
+ * @param {object} state - The network info state.
26
+ * @param {boolean} state.isOnline - {@code true} if the internet connectivity is online or {@code false}
27
+ * otherwise.
28
+ */
29
+ updateNetworkInfo({ isOnline }) {
30
+ logger.debug('updateNetworkInfo', { isOnline });
31
+ this._current = {
32
+ isOnline: isOnline === true
33
+ };
34
+ this.eventEmitter.emit(NETWORK_INFO_EVENT, this._current);
35
+ }
36
+ /**
37
+ * Returns the online/offline internet status. By default the value is {@code true} and changes only if
38
+ * the lib's user wires the state through {@link JitsiMeetJS.setNetworkInfo} like the jitsi-meet does. Because of
39
+ * that any logic should still assume that the internet may be offline and should handle the failure gracefully.
40
+ * It's only a good hint in the other way around: to pause internet operations until it comes back online.
41
+ * @returns {boolean}
42
+ */
43
+ isOnline() {
44
+ return this._current.isOnline === true;
45
+ }
46
+ }
47
+ const networkInfo = new NetworkInfo();
48
+ export default networkInfo;
49
+ //# sourceMappingURL=NetworkInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkInfo.js","sourceRoot":"","sources":["../../../../modules/connectivity/NetworkInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAEzD,MAAM,MAAM,GAAG,SAAS,CAAC,0BAA0B,CAAC,CAAC;AAMrD;;;;;;GAMG;AACH,MAAM,OAAO,WAAY,SAAQ,UAAU;IAGvC;;OAEG;IACH;QACI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG;YACZ,QAAQ,EAAE,IAAI;SACjB,CAAC;IACN,CAAC;IAED;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,QAAQ,EAA0B;QAClD,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG;YACZ,QAAQ,EAAE,QAAQ,KAAK,IAAI;SAC9B,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;OAMG;IACH,QAAQ;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC;IAC3C,CAAC;CACJ;AAED,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC,eAAe,WAAW,CAAC"}