@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,579 @@
1
+ import { getLogger } from '@jitsi/logger';
2
+ import { $pres, Strophe } from 'strophe.js';
3
+ import { MAX_CONNECTION_RETRIES } from '../../service/connectivity/Constants';
4
+ import Listenable from '../util/Listenable';
5
+ import ResumeTask from './ResumeTask';
6
+ import LastSuccessTracker from './StropheLastSuccess';
7
+ import './strophe.stream-management';
8
+ import PingConnectionPlugin from './strophe.ping';
9
+ const logger = getLogger('xmpp:XmppConnection');
10
+ /**
11
+ * The lib-jitsi-meet layer for {@link Strophe.Connection}.
12
+ * @internal
13
+ */
14
+ export default class XmppConnection extends Listenable {
15
+ /**
16
+ * The list of {@link XmppConnection} events.
17
+ *
18
+ * @returns {Object}
19
+ */
20
+ static get Events() {
21
+ return {
22
+ CONN_SHARD_CHANGED: 'CONN_SHARD_CHANGED',
23
+ CONN_STATUS_CHANGED: 'CONN_STATUS_CHANGED'
24
+ };
25
+ }
26
+ /**
27
+ * The list of Xmpp connection statuses.
28
+ *
29
+ * @returns {Strophe.Status}
30
+ */
31
+ static get Status() {
32
+ return Strophe.Status;
33
+ }
34
+ /**
35
+ * Initializes new connection instance.
36
+ *
37
+ * @param {Object} options
38
+ * @param {String} options.serviceUrl - The BOSH or WebSocket service URL.
39
+ * @param {String} options.shard - The BOSH or WebSocket is connecting to this shard.
40
+ * Useful for detecting when shard changes.
41
+ * @param {String} [options.enableWebsocketResume=true] - True/false to control the stream resumption functionality.
42
+ * It will enable automatically by default if supported by the XMPP server.
43
+ * @param {Number} [options.websocketKeepAlive=60000] - The websocket keep alive interval.
44
+ * It's the interval + a up to a minute of jitter. Pass -1 to disable.
45
+ * The keep alive is HTTP GET request to {@link options.serviceUrl} or to {@link options.websocketKeepAliveUrl}.
46
+ * @param {Number} [options.websocketKeepAliveUrl] - The websocket keep alive url to use if any,
47
+ * if missing the serviceUrl url will be used.
48
+ * @param {Object} [options.xmppPing] - The xmpp ping settings.
49
+ */
50
+ constructor({ enableWebsocketResume, websocketKeepAlive, websocketKeepAliveUrl, serviceUrl, shard, xmppPing }) {
51
+ super();
52
+ this._options = {
53
+ enableWebsocketResume: typeof enableWebsocketResume === 'undefined' ? true : enableWebsocketResume,
54
+ pingOptions: xmppPing,
55
+ shard,
56
+ websocketKeepAlive: typeof websocketKeepAlive === 'undefined' ? 60 * 1000 : Number(websocketKeepAlive),
57
+ websocketKeepAliveUrl
58
+ };
59
+ this._stropheConn = new Strophe.Connection(serviceUrl);
60
+ // The mechanisms priorities as defined by Strophe
61
+ // * Mechanism Priority
62
+ // * ------------------------
63
+ // * SCRAM-SHA-1 60
64
+ // * PLAIN 50
65
+ // * ANONYMOUS 20
66
+ this._stropheConn.registerSASLMechanisms([
67
+ Strophe.SASLAnonymous,
68
+ Strophe.SASLPlain,
69
+ Strophe.SASLSHA1
70
+ ]);
71
+ this._usesWebsocket = serviceUrl.startsWith('ws:') || serviceUrl.startsWith('wss:');
72
+ // The default maxRetries is 5, which is too long.
73
+ this._stropheConn.maxRetries = 3;
74
+ this._rawInputTracker = new LastSuccessTracker();
75
+ this._rawInputTracker.startTracking(this, this._stropheConn);
76
+ this._resumeTask = new ResumeTask(this._stropheConn);
77
+ /**
78
+ * @typedef DeferredSendIQ Object
79
+ * @property {Element} iq - The IQ to send.
80
+ * @property {function} resolve - The resolve method of the deferred Promise.
81
+ * @property {function} reject - The reject method of the deferred Promise.
82
+ * @property {number} timeout - The ID of the timeout task that needs to be cleared, before sending the IQ.
83
+ */
84
+ /**
85
+ * Deferred IQs to be sent upon reconnect.
86
+ * @type {Array<DeferredSendIQ>}
87
+ * @private
88
+ */
89
+ this._deferredIQs = [];
90
+ // Ping plugin is mandatory for the Websocket mode to work correctly. It's used to detect when the connection
91
+ // is broken (WebSocket/TCP connection not closed gracefully).
92
+ this.addConnectionPlugin('ping', new PingConnectionPlugin({
93
+ getTimeSinceLastServerResponse: () => this.getTimeSinceLastSuccess(),
94
+ onPingThresholdExceeded: () => this._onPingErrorThresholdExceeded(),
95
+ pingOptions: xmppPing
96
+ }));
97
+ // tracks whether this is the initial connection or a reconnect
98
+ this._oneSuccessfulConnect = false;
99
+ }
100
+ /**
101
+ * A getter for the connected state.
102
+ *
103
+ * @returns {boolean}
104
+ */
105
+ get connected() {
106
+ const websocket = this._stropheConn?._proto?.socket;
107
+ return (this._status === Strophe.Status.CONNECTED || this._status === Strophe.Status.ATTACHED)
108
+ && (!this.isUsingWebSocket || (websocket && websocket.readyState === WebSocket.OPEN));
109
+ }
110
+ /**
111
+ * Retrieves the feature discovery plugin instance.
112
+ *
113
+ * @returns {Strophe.Connection.disco}
114
+ */
115
+ get disco() {
116
+ return this._stropheConn.disco;
117
+ }
118
+ /**
119
+ * A getter for the disconnecting state.
120
+ *
121
+ * @returns {boolean}
122
+ */
123
+ get disconnecting() {
124
+ return this._stropheConn.disconnecting === true;
125
+ }
126
+ /**
127
+ * A getter for the domain.
128
+ *
129
+ * @returns {Nullable<string>}
130
+ */
131
+ get domain() {
132
+ return this._stropheConn.domain;
133
+ }
134
+ /**
135
+ * Tells if Websocket is used as the transport for the current XMPP connection. Returns true for Websocket or false
136
+ * for BOSH.
137
+ * @returns {boolean}
138
+ */
139
+ get isUsingWebSocket() {
140
+ return this._usesWebsocket;
141
+ }
142
+ /**
143
+ * A getter for the JID.
144
+ *
145
+ * @returns {string|null}
146
+ */
147
+ get jid() {
148
+ return this._stropheConn.jid;
149
+ }
150
+ /**
151
+ * Returns headers for the last BOSH response received.
152
+ *
153
+ * @returns {string}
154
+ */
155
+ get lastResponseHeaders() {
156
+ return this._stropheConn._proto?.lastResponseHeaders;
157
+ }
158
+ /**
159
+ * A getter for the logger plugin instance.
160
+ *
161
+ * @returns {*}
162
+ */
163
+ get logger() {
164
+ return this._stropheConn.logger;
165
+ }
166
+ /**
167
+ * A getter for the connection options.
168
+ *
169
+ * @returns {*}
170
+ */
171
+ get options() {
172
+ return this._stropheConn.options;
173
+ }
174
+ /**
175
+ * A getter for the domain to be used for ping.
176
+ */
177
+ get pingDomain() {
178
+ return this._options.pingOptions?.domain || this.domain;
179
+ }
180
+ /**
181
+ * A getter for the service URL.
182
+ *
183
+ * @returns {string}
184
+ */
185
+ get service() {
186
+ return this._stropheConn.service;
187
+ }
188
+ /**
189
+ * Sets new value for shard.
190
+ * @param value the new shard value.
191
+ */
192
+ set shard(value) {
193
+ this._options.shard = value;
194
+ // shard setting changed so let's schedule a new keep-alive check if connected
195
+ if (this._oneSuccessfulConnect) {
196
+ this._maybeStartWSKeepAlive();
197
+ }
198
+ }
199
+ /**
200
+ * Returns the current connection status.
201
+ *
202
+ * @returns {Strophe.Status}
203
+ */
204
+ get status() {
205
+ return this._status;
206
+ }
207
+ /**
208
+ * Adds a connection plugin to this instance.
209
+ *
210
+ * @param {string} name - The name of the plugin or rather a key under which it will be stored on this connection
211
+ * instance.
212
+ * @param {IConnectionPlugin} plugin - The plugin to add.
213
+ */
214
+ addConnectionPlugin(name, plugin) {
215
+ this[name] = plugin;
216
+ plugin.init(this);
217
+ }
218
+ /**
219
+ * See {@link Strophe.Connection.addHandler}
220
+ *
221
+ * @returns {Object} - handler for the connection.
222
+ */
223
+ addHandler(...args) {
224
+ return this._stropheConn.addHandler(...args);
225
+ }
226
+ /**
227
+ * See {@link Strophe.Connection.deleteHandler}
228
+ *
229
+ * @returns {void}
230
+ */
231
+ deleteHandler(...args) {
232
+ this._stropheConn.deleteHandler(...args);
233
+ }
234
+ /* eslint-disable max-params */
235
+ /**
236
+ * Wraps {@link Strophe.Connection.attach} method in order to intercept the connection status updates.
237
+ * See {@link Strophe.Connection.attach} for the params description.
238
+ *
239
+ * @returns {void}
240
+ */
241
+ attach(jid, sid, rid, callback, ...args) {
242
+ this._stropheConn.attach(jid, sid, rid, this._stropheConnectionCb.bind(this, callback), ...args);
243
+ }
244
+ /**
245
+ * Wraps Strophe.Connection.connect method in order to intercept the connection status updates.
246
+ * See {@link Strophe.Connection.connect} for the params description.
247
+ *
248
+ * @returns {void}
249
+ */
250
+ connect(jid, pass, callback, ...args) {
251
+ this._stropheConn.connect(jid, pass, this._stropheConnectionCb.bind(this, callback), ...args);
252
+ }
253
+ /* eslint-enable max-params */
254
+ /**
255
+ * Handles {@link Strophe.Status} updates for the current connection.
256
+ *
257
+ * @param {function} targetCallback - The callback passed by the {@link XmppConnection} consumer to one of
258
+ * the connect methods.
259
+ * @param {Strophe.Status} status - The new connection status.
260
+ * @param {*} args - The rest of the arguments passed by Strophe.
261
+ * @private
262
+ */
263
+ _stropheConnectionCb(targetCallback, status, condition, element) {
264
+ this._status = status;
265
+ let blockCallback = false;
266
+ if (status === Strophe.Status.CONNECTED || status === Strophe.Status.ATTACHED) {
267
+ this._maybeEnableStreamResume();
268
+ // after connecting - immediately check whether shard changed,
269
+ // we need this only when using websockets as bosh checks headers from every response
270
+ if (this._usesWebsocket) {
271
+ if (this._oneSuccessfulConnect) {
272
+ // on reconnect we do it immediately
273
+ this._keepAliveAndCheckShard();
274
+ }
275
+ else {
276
+ // delay it a bit to not interfere with the connection process
277
+ // and to allow backend to correct any possible split brain issues
278
+ setTimeout(() => this._keepAliveAndCheckShard(), 5000);
279
+ }
280
+ }
281
+ this._oneSuccessfulConnect = true;
282
+ this._maybeStartWSKeepAlive();
283
+ this._processDeferredIQs();
284
+ this._resumeTask.cancel();
285
+ this.ping.startInterval(this._options.pingOptions?.domain || this.domain);
286
+ }
287
+ else if (status === Strophe.Status.DISCONNECTED) {
288
+ this.ping.stopInterval();
289
+ // FIXME add RECONNECTING state instead of blocking the DISCONNECTED update
290
+ blockCallback = this._tryResumingConnection();
291
+ if (!blockCallback) {
292
+ clearTimeout(this._wsKeepAlive);
293
+ }
294
+ }
295
+ if (!blockCallback) {
296
+ targetCallback(status, condition, element);
297
+ this.eventEmitter.emit(XmppConnection.Events.CONN_STATUS_CHANGED, status);
298
+ }
299
+ }
300
+ /**
301
+ * Clears the list of IQs and rejects deferred Promises with an error.
302
+ *
303
+ * @private
304
+ */
305
+ _clearDeferredIQs() {
306
+ for (const deferred of this._deferredIQs) {
307
+ deferred.reject(new Error('disconnect'));
308
+ }
309
+ this._deferredIQs = [];
310
+ }
311
+ /**
312
+ * The method is meant to be used for testing. It's a shortcut for closing the WebSocket.
313
+ *
314
+ * @returns {void}
315
+ */
316
+ closeWebsocket() {
317
+ if (this._stropheConn?._proto) {
318
+ this._stropheConn._proto._closeSocket();
319
+ this._stropheConn._proto._onClose(null);
320
+ }
321
+ }
322
+ /**
323
+ * See {@link Strophe.Connection.disconnect}.
324
+ *
325
+ * @returns {void}
326
+ */
327
+ disconnect(...args) {
328
+ this._resumeTask.cancel();
329
+ clearTimeout(this._wsKeepAlive);
330
+ this._clearDeferredIQs();
331
+ this._stropheConn.disconnect(...args);
332
+ }
333
+ /**
334
+ * See {@link Strophe.Connection.flush}.
335
+ *
336
+ * @returns {void}
337
+ */
338
+ flush(...args) {
339
+ this._stropheConn.flush(...args);
340
+ }
341
+ /**
342
+ * See {@link LastRequestTracker.getTimeSinceLastSuccess}.
343
+ *
344
+ * @returns {number|null}
345
+ */
346
+ getTimeSinceLastSuccess() {
347
+ return this._rawInputTracker.getTimeSinceLastSuccess();
348
+ }
349
+ /**
350
+ * See {@link LastRequestTracker.getLastFailedMessage}.
351
+ *
352
+ * @returns {string|null}
353
+ */
354
+ getLastFailedMessage() {
355
+ return this._rawInputTracker.getLastFailedMessage();
356
+ }
357
+ /**
358
+ * Requests a resume token from the server if enabled and all requirements are met.
359
+ *
360
+ * @private
361
+ */
362
+ _maybeEnableStreamResume() {
363
+ if (!this._options.enableWebsocketResume) {
364
+ return;
365
+ }
366
+ const { streamManagement } = this._stropheConn;
367
+ if (!this.isUsingWebSocket) {
368
+ logger.warn('Stream resume enabled, but WebSockets are not enabled');
369
+ }
370
+ else if (!streamManagement) {
371
+ logger.warn('Stream resume enabled, but Strophe streamManagement plugin is not installed');
372
+ }
373
+ else if (!streamManagement.isSupported()) {
374
+ logger.warn('Stream resume enabled, but XEP-0198 is not supported by the server');
375
+ }
376
+ else if (!streamManagement.getResumeToken()) {
377
+ logger.info('Enabling XEP-0198 stream management');
378
+ streamManagement.enable(/* resume */ true);
379
+ }
380
+ }
381
+ /**
382
+ * Starts the Websocket keep alive if enabled.
383
+ *
384
+ * @private
385
+ * @returns {void}
386
+ */
387
+ _maybeStartWSKeepAlive() {
388
+ const { websocketKeepAlive } = this._options;
389
+ if (this._usesWebsocket && websocketKeepAlive > 0) {
390
+ this._wsKeepAlive || logger.info(`WebSocket keep alive interval: ${websocketKeepAlive}ms`);
391
+ clearTimeout(this._wsKeepAlive);
392
+ const intervalWithJitter = /* base */ websocketKeepAlive + /* jitter */ (Math.random() * 60 * 1000);
393
+ logger.debug(`Scheduling next WebSocket keep-alive in ${intervalWithJitter}ms`);
394
+ this._wsKeepAlive = setTimeout(() => this._keepAliveAndCheckShard()
395
+ .then(() => this._maybeStartWSKeepAlive()), intervalWithJitter);
396
+ }
397
+ }
398
+ /**
399
+ * Do a http GET to the shard and if shard change will throw an event.
400
+ *
401
+ * @private
402
+ * @returns {Promise}
403
+ */
404
+ _keepAliveAndCheckShard() {
405
+ const { shard, websocketKeepAliveUrl } = this._options;
406
+ const url = websocketKeepAliveUrl ? websocketKeepAliveUrl
407
+ : this.service.replace('wss://', 'https://').replace('ws://', 'http://');
408
+ return fetch(url)
409
+ .then(response => {
410
+ // skips header checking if there is no info in options
411
+ if (!shard) {
412
+ return;
413
+ }
414
+ const responseShard = response.headers.get('x-jitsi-shard');
415
+ if (responseShard !== shard) {
416
+ logger.error(`Detected that shard changed from ${shard} to ${responseShard}`);
417
+ this.eventEmitter.emit(XmppConnection.Events.CONN_SHARD_CHANGED);
418
+ }
419
+ })
420
+ .catch(error => {
421
+ logger.error(`Websocket Keep alive failed for url: ${url}`, { error });
422
+ });
423
+ }
424
+ /**
425
+ * Goes over the list of {@link DeferredSendIQ} tasks and sends them.
426
+ *
427
+ * @private
428
+ * @returns {void}
429
+ */
430
+ _processDeferredIQs() {
431
+ for (const deferred of this._deferredIQs) {
432
+ if (deferred.iq) {
433
+ clearTimeout(deferred.timeout);
434
+ const timeLeft = Date.now() - deferred.start;
435
+ this.sendIQ(deferred.iq, result => deferred.resolve(result), error => deferred.reject(error), timeLeft);
436
+ }
437
+ }
438
+ this._deferredIQs = [];
439
+ }
440
+ /**
441
+ * Send a stanza. This function is called to push data onto the send queue to go out over the wire.
442
+ *
443
+ * @param {Element|Strophe.Builder} stanza - The stanza to send.
444
+ * @returns {void}
445
+ */
446
+ send(stanza) {
447
+ if (!this.connected) {
448
+ logger.error(`Trying to send stanza while not connected. Status:${this._status} Proto:${this.isUsingWebSocket ? this._stropheConn?._proto?.socket?.readyState : 'bosh'}`);
449
+ throw new Error('Not connected');
450
+ }
451
+ this._stropheConn.send(stanza);
452
+ }
453
+ /**
454
+ * Helper function to send IQ stanzas.
455
+ *
456
+ * @param {Element} elem - The stanza to send.
457
+ * @param {Function} callback - The callback function for a successful request.
458
+ * @param {Function} errback - The callback function for a failed or timed out request. On timeout, the stanza will
459
+ * be null.
460
+ * @param {number} timeout - The time specified in milliseconds for a timeout to occur.
461
+ * @returns {number} - The id used to send the IQ.
462
+ */
463
+ sendIQ(elem, callback = undefined, errback = undefined, timeout = undefined) {
464
+ if (!this.connected) {
465
+ errback('Not connected');
466
+ return;
467
+ }
468
+ return this._stropheConn.sendIQ(elem, callback, errback, timeout);
469
+ }
470
+ /**
471
+ * Sends an IQ immediately if connected or puts it on the send queue otherwise(in contrary to other send methods
472
+ * which would fail immediately if disconnected).
473
+ *
474
+ * @param {Element} iq - The IQ to send.
475
+ * @param {Object} options - Options object
476
+ * @param {options.timeout} timeout - How long to wait for the response.
477
+ * The time when the connection is reconnecting is included, which means that
478
+ * the IQ may never be sent and still fail with a timeout.
479
+ */
480
+ sendIQ2(iq, { timeout }) {
481
+ return new Promise((resolve, reject) => {
482
+ if (this.connected) {
483
+ this.sendIQ(iq, result => resolve(result), error => reject(error), timeout);
484
+ }
485
+ else {
486
+ const deferred = {
487
+ iq,
488
+ reject,
489
+ resolve,
490
+ start: Date.now(),
491
+ timeout: setTimeout(() => {
492
+ // clears the IQ on timeout and invalidates the deferred task
493
+ deferred.iq = undefined;
494
+ // Strophe calls with undefined on timeout
495
+ reject(undefined);
496
+ }, timeout)
497
+ };
498
+ this._deferredIQs.push(deferred);
499
+ }
500
+ });
501
+ }
502
+ /**
503
+ * Called by the ping plugin when ping fails too many times.
504
+ *
505
+ * @returns {void}
506
+ */
507
+ _onPingErrorThresholdExceeded() {
508
+ if (this.isUsingWebSocket) {
509
+ logger.warn('Ping error threshold exceeded - killing the WebSocket');
510
+ this.closeWebsocket();
511
+ }
512
+ }
513
+ /**
514
+ * Helper function to send presence stanzas. The main benefit is for sending presence stanzas for which you expect
515
+ * a responding presence stanza with the same id (for example when leaving a chat room).
516
+ *
517
+ * @param {Element} elem - The stanza to send.
518
+ * @param {Function} callback - The callback function for a successful request.
519
+ * @param {Function} errback - The callback function for a failed or timed out request. On timeout, the stanza will
520
+ * be null.
521
+ * @param {number} timeout - The time specified in milliseconds for a timeout to occur.
522
+ * @returns {number} - The id used to send the presence.
523
+ */
524
+ sendPresence(elem, callback, errback, timeout) {
525
+ if (!this.connected) {
526
+ errback('Not connected');
527
+ return;
528
+ }
529
+ this._stropheConn.sendPresence(elem, callback, errback, timeout);
530
+ }
531
+ /**
532
+ * The method gracefully closes the BOSH connection by using 'navigator.sendBeacon'.
533
+ *
534
+ * @returns {boolean} - true if the beacon was sent.
535
+ */
536
+ sendUnavailableBeacon() {
537
+ if (!navigator.sendBeacon || this._stropheConn.disconnecting || !this._stropheConn.connected) {
538
+ return false;
539
+ }
540
+ this._stropheConn._changeConnectStatus(Strophe.Status.DISCONNECTING);
541
+ this._stropheConn.disconnecting = true;
542
+ const body = this._stropheConn._proto._buildBody()
543
+ .attrs({
544
+ type: 'terminate'
545
+ });
546
+ const pres = $pres({
547
+ type: 'unavailable',
548
+ xmlns: Strophe.NS.CLIENT
549
+ });
550
+ body.cnode(pres.tree());
551
+ const res = navigator.sendBeacon(this.service.indexOf('https://') === -1 ? `https:${this.service}` : this.service, Strophe.serialize(body.tree()));
552
+ logger.info(`Successfully send unavailable beacon ${res}`);
553
+ this._stropheConn._proto._abortAllRequests();
554
+ this._stropheConn._doDisconnect();
555
+ return true;
556
+ }
557
+ /**
558
+ * Tries to use stream management plugin to resume dropped XMPP connection. The streamManagement plugin clears
559
+ * the resume token if any connection error occurs which would put it in unrecoverable state, so as long as
560
+ * the token is present it means the connection can be resumed.
561
+ *
562
+ * @private
563
+ * @returns {boolean}
564
+ */
565
+ _tryResumingConnection() {
566
+ const { streamManagement } = this._stropheConn;
567
+ const resumeToken = streamManagement?.getResumeToken();
568
+ if (resumeToken) {
569
+ this._resumeTask.schedule();
570
+ const r = this._resumeTask.retryCount <= MAX_CONNECTION_RETRIES;
571
+ if (!r) {
572
+ logger.warn(`Maximum resume tries reached (${MAX_CONNECTION_RETRIES}), giving up.`);
573
+ }
574
+ return r;
575
+ }
576
+ return false;
577
+ }
578
+ }
579
+ //# sourceMappingURL=XmppConnection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XmppConnection.js","sourceRoot":"","sources":["../../../../modules/xmpp/XmppConnection.ts"],"names":[],"mappings":"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"}