@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,314 @@
1
+ import { getLogger } from '@jitsi/logger';
2
+ import { JitsiConferenceEvents } from '../../JitsiConferenceEvents';
3
+ import { E2ePingEvents } from '../../service/e2eping/E2ePingEvents';
4
+ const logger = getLogger('e2eping');
5
+ /**
6
+ * The 'type' of a message which designates an e2e ping request.
7
+ * @type {string}
8
+ */
9
+ const E2E_PING_REQUEST = 'e2e-ping-request';
10
+ /**
11
+ * The 'type' of a message which designates an e2e ping response.
12
+ * @type {string}
13
+ */
14
+ const E2E_PING_RESPONSE = 'e2e-ping-response';
15
+ /**
16
+ * The number of requests to wait for before emitting an RTT value.
17
+ */
18
+ const DEFAULT_NUM_REQUESTS = 5;
19
+ /**
20
+ * The maximum number of messages per second to aim for. This is for the entire
21
+ * conference, with the assumption that all endpoints join at once.
22
+ */
23
+ const DEFAULT_MAX_MESSAGES_PER_SECOND = 250;
24
+ /**
25
+ * The conference size beyond which e2e pings will be disabled.
26
+ */
27
+ const DEFAULT_MAX_CONFERENCE_SIZE = 200;
28
+ /**
29
+ * Saves e2e ping related state for a single JitsiParticipant.
30
+ */
31
+ class ParticipantWrapper {
32
+ /**
33
+ * Creates a ParticipantWrapper
34
+ * @param {JitsiParticipant} participant - The remote participant that this
35
+ * object wraps.
36
+ * @param {E2ePing} e2eping
37
+ */
38
+ constructor(participant, e2eping) {
39
+ // The JitsiParticipant
40
+ this.participant = participant;
41
+ // The E2ePing
42
+ this.e2eping = e2eping;
43
+ // Caches the ID
44
+ this.id = participant.getId();
45
+ // Recently sent requests
46
+ this.requests = {};
47
+ // The ID of the last sent request. We just increment it for each new
48
+ // request. Start at 1 so we can consider only thruthy values valid.
49
+ this.lastRequestId = 1;
50
+ this.sendRequest = this.sendRequest.bind(this);
51
+ this.handleResponse = this.handleResponse.bind(this);
52
+ this.maybeLogRttAndStop = this.maybeLogRttAndStop.bind(this);
53
+ this.scheduleNext = this.scheduleNext.bind(this);
54
+ this.stop = this.stop.bind(this);
55
+ this.getDelay = this.getDelay.bind(this);
56
+ this.timeout = this.scheduleNext();
57
+ }
58
+ /**
59
+ * Schedule the next ping to be sent.
60
+ */
61
+ scheduleNext() {
62
+ return window.setTimeout(this.sendRequest, this.getDelay());
63
+ }
64
+ /**
65
+ * Stop pinging this participant, canceling a scheduled ping, if any.
66
+ */
67
+ stop() {
68
+ if (this.timeout) {
69
+ window.clearTimeout(this.timeout);
70
+ }
71
+ this.e2eping.removeParticipant(this.id);
72
+ }
73
+ /**
74
+ * Get the delay until the next ping in milliseconds.
75
+ */
76
+ getDelay() {
77
+ const conferenceSize = this.e2eping.conference.getParticipants().length;
78
+ const endpointPairs = conferenceSize * (conferenceSize - 1) / 2;
79
+ const totalMessages = endpointPairs * this.e2eping.numRequests;
80
+ const totalSeconds = totalMessages / this.e2eping.maxMessagesPerSecond;
81
+ // Randomize between .5 and 1.5
82
+ const r = 1.5 - Math.random();
83
+ const delayBetweenMessages = r * Math.max(1000 * (totalSeconds / this.e2eping.numRequests), 1000);
84
+ return delayBetweenMessages;
85
+ }
86
+ /**
87
+ * Sends the next ping request.
88
+ * @type {*}
89
+ */
90
+ sendRequest() {
91
+ const requestId = this.lastRequestId++;
92
+ const requestMessage = {
93
+ id: requestId,
94
+ type: E2E_PING_REQUEST
95
+ };
96
+ this.e2eping.sendMessage(requestMessage, this.id);
97
+ this.requests[requestId] = {
98
+ id: requestId,
99
+ timeSent: window.performance.now()
100
+ };
101
+ }
102
+ /**
103
+ * Handles a response from this participant.
104
+ * @type {*}
105
+ */
106
+ handleResponse(response) {
107
+ const request = this.requests[response.id];
108
+ if (request) {
109
+ request.rtt = window.performance.now() - request.timeSent;
110
+ }
111
+ this.maybeLogRttAndStop();
112
+ }
113
+ /**
114
+ * Check if we've received the pre-configured number of responses, and if
115
+ * so log the measured RTT and stop sending requests.
116
+ * @type {*}
117
+ */
118
+ maybeLogRttAndStop() {
119
+ // The RTT we'll report is the minimum RTT measured
120
+ let rtt = Infinity;
121
+ let request, requestId;
122
+ let numRequestsWithResponses = 0;
123
+ let totalNumRequests = 0;
124
+ for (requestId in this.requests) {
125
+ if (this.requests.hasOwnProperty(requestId)) {
126
+ request = this.requests[requestId];
127
+ totalNumRequests++;
128
+ if (request.rtt) {
129
+ numRequestsWithResponses++;
130
+ rtt = Math.min(rtt, request.rtt);
131
+ }
132
+ }
133
+ }
134
+ if (numRequestsWithResponses >= this.e2eping.numRequests) {
135
+ logger.info(`Measured RTT=${rtt} ms to ${this.id} (in ${this.participant.getProperty('region')})`);
136
+ this.stop();
137
+ this.e2eping.conference.eventEmitter.emit(E2ePingEvents.E2E_RTT_CHANGED, this.participant, rtt);
138
+ return;
139
+ }
140
+ else if (totalNumRequests > 2 * this.e2eping.numRequests) {
141
+ logger.info(`Stopping e2eping for ${this.id} because we sent ${totalNumRequests} with only `
142
+ + `${numRequestsWithResponses} responses.`);
143
+ this.stop();
144
+ return;
145
+ }
146
+ this.timeout = this.scheduleNext();
147
+ }
148
+ }
149
+ /**
150
+ * Implements end-to-end ping (from one conference participant to another) via
151
+ * the jitsi-videobridge channel (either WebRTC data channel or web socket).
152
+ *
153
+ * TODO: use a broadcast message instead of individual pings to each remote
154
+ * participant.
155
+ *
156
+ * This class:
157
+ * 1. Sends periodic ping requests to all other participants in the
158
+ * conference.
159
+ * 2. Responds to ping requests from other participants.
160
+ * 3. Fires events with the end-to-end RTT to each participant whenever a
161
+ * response is received.
162
+ * 4. Fires analytics events with the end-to-end RTT periodically.
163
+ */
164
+ export default class E2ePing {
165
+ /**
166
+ * @param {JitsiConference} conference - The conference.
167
+ * @param {Function} sendMessage - The function to use to send a message.
168
+ * @param {Object} options
169
+ */
170
+ constructor(conference, options, sendMessage) {
171
+ this.conference = conference;
172
+ this.eventEmitter = conference.eventEmitter;
173
+ this.sendMessage = sendMessage;
174
+ // Maps a participant ID to its ParticipantWrapper
175
+ this.participants = {};
176
+ this.numRequests = DEFAULT_NUM_REQUESTS;
177
+ this.maxConferenceSize = DEFAULT_MAX_CONFERENCE_SIZE;
178
+ this.maxMessagesPerSecond = DEFAULT_MAX_MESSAGES_PER_SECOND;
179
+ if (options?.e2eping) {
180
+ if (typeof options.e2eping.numRequests === 'number') {
181
+ this.numRequests = options.e2eping.numRequests;
182
+ }
183
+ if (typeof options.e2eping.maxConferenceSize === 'number') {
184
+ this.maxConferenceSize = options.e2eping.maxConferenceSize;
185
+ }
186
+ if (typeof options.e2eping.maxMessagesPerSecond === 'number') {
187
+ this.maxMessagesPerSecond = options.e2eping.maxMessagesPerSecond;
188
+ }
189
+ }
190
+ logger.info(`Initializing e2e ping with numRequests=${this.numRequests}, maxConferenceSize=${this.maxConferenceSize}, `
191
+ + `maxMessagesPerSecond=${this.maxMessagesPerSecond}.`);
192
+ this.participantJoined = this.participantJoined.bind(this);
193
+ this.participantLeft = this.participantLeft.bind(this);
194
+ conference.on(JitsiConferenceEvents.USER_LEFT, this.participantLeft);
195
+ this.messageReceived = this.messageReceived.bind(this);
196
+ conference.on(JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED, this.messageReceived);
197
+ this.conferenceJoined = this.conferenceJoined.bind(this);
198
+ conference.on(JitsiConferenceEvents.CONFERENCE_JOINED, this.conferenceJoined);
199
+ }
200
+ /**
201
+ * Delay processing USER_JOINED events until the MUC is fully joined,
202
+ * otherwise the apparent conference size will be wrong.
203
+ */
204
+ conferenceJoined() {
205
+ this.conference.getParticipants().forEach(p => this.participantJoined(p.getId(), p));
206
+ this.conference.on(JitsiConferenceEvents.USER_JOINED, this.participantJoined);
207
+ }
208
+ /**
209
+ * Handles a message that was received.
210
+ *
211
+ * @param participant - The message sender.
212
+ * @param payload - The payload of the message.
213
+ */
214
+ messageReceived(participant, payload) {
215
+ // Listen to E2E PING requests and responses from other participants
216
+ // in the conference.
217
+ if (payload.type === E2E_PING_REQUEST) {
218
+ this.handleRequest(participant.getId(), payload);
219
+ }
220
+ else if (payload.type === E2E_PING_RESPONSE) {
221
+ this.handleResponse(participant.getId(), payload);
222
+ }
223
+ }
224
+ /**
225
+ * Handles a participant joining the conference. Starts to send ping
226
+ * requests to the participant.
227
+ *
228
+ * @param {String} id - The ID of the participant.
229
+ * @param {JitsiParticipant} participant - The participant that joined.
230
+ */
231
+ participantJoined(id, participant) {
232
+ if (this.participants[id]) {
233
+ logger.info(`Participant wrapper already exists for ${id}. Clearing.`);
234
+ this.participants[id].stop();
235
+ }
236
+ if (this.conference.getParticipants().length > this.maxConferenceSize) {
237
+ return;
238
+ }
239
+ // We don't need to send e2eping in both directions for a pair of
240
+ // endpoints. Force only one direction with just string comparison of
241
+ // the IDs.
242
+ if (this.conference.myUserId() > id) {
243
+ logger.info(`Starting e2eping for participant ${id}`);
244
+ this.participants[id] = new ParticipantWrapper(participant, this);
245
+ }
246
+ }
247
+ /**
248
+ * Remove a participant without calling "stop".
249
+ */
250
+ removeParticipant(id) {
251
+ if (this.participants[id]) {
252
+ delete this.participants[id];
253
+ }
254
+ }
255
+ /**
256
+ * Handles a participant leaving the conference. Stops sending requests.
257
+ *
258
+ * @param {String} id - The ID of the participant.
259
+ */
260
+ participantLeft(id) {
261
+ if (this.participants[id]) {
262
+ this.participants[id].stop();
263
+ delete this.participants[id];
264
+ }
265
+ }
266
+ /**
267
+ * Handles a ping request coming from another participant.
268
+ *
269
+ * @param {string} participantId - The ID of the participant who sent the
270
+ * request.
271
+ * @param {Object} request - The request.
272
+ */
273
+ handleRequest(participantId, request) {
274
+ // If it's a valid request, just send a response.
275
+ if (request?.id) {
276
+ const response = {
277
+ id: request.id,
278
+ type: E2E_PING_RESPONSE
279
+ };
280
+ this.sendMessage(response, participantId);
281
+ }
282
+ else {
283
+ logger.info(`Received an invalid e2e ping request from ${participantId}.`);
284
+ }
285
+ }
286
+ /**
287
+ * Handles a ping response coming from another participant
288
+ * @param {string} participantId - The ID of the participant who sent the
289
+ * response.
290
+ * @param {Object} response - The response.
291
+ */
292
+ handleResponse(participantId, response) {
293
+ const participantWrapper = this.participants[participantId];
294
+ if (participantWrapper) {
295
+ participantWrapper.handleResponse(response);
296
+ }
297
+ }
298
+ /**
299
+ * Stops this E2ePing (i.e. stop sending requests).
300
+ */
301
+ stop() {
302
+ logger.info('Stopping e2eping');
303
+ this.conference.off(JitsiConferenceEvents.USER_JOINED, this.participantJoined);
304
+ this.conference.off(JitsiConferenceEvents.USER_LEFT, this.participantLeft);
305
+ this.conference.off(JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED, this.messageReceived);
306
+ for (const id in this.participants) {
307
+ if (this.participants.hasOwnProperty(id)) {
308
+ this.participants[id].stop();
309
+ }
310
+ }
311
+ this.participants = {};
312
+ }
313
+ }
314
+ //# sourceMappingURL=e2eping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2eping.js","sourceRoot":"","sources":["../../../../modules/e2eping/e2eping.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import browser from '../browser';
2
+ /**
3
+ * A global module for accessing information about different feature flags state.
4
+ */
5
+ class FeatureFlags {
6
+ /**
7
+ * Configures the module.
8
+ *
9
+ * @param {object} flags - The feature flags.
10
+ * @param {Optional<boolean>} flags.runInLiteMode - Enables lite mode for testing to disable media decoding.
11
+ * @param {Optional<boolean>} flags.ssrcRewritingEnabled - Use SSRC rewriting.
12
+ */
13
+ init(flags) {
14
+ this._runInLiteMode = Boolean(flags.runInLiteMode);
15
+ this._ssrcRewriting = Boolean(flags.ssrcRewritingEnabled);
16
+ }
17
+ /**
18
+ * Checks if the run in lite mode is enabled.
19
+ * This will cause any media to be received and not decoded. (Insertable streams are used to discard
20
+ * all media before it is decoded). This can be used for various test scenarios.
21
+ *
22
+ * @returns {boolean}
23
+ */
24
+ isRunInLiteModeEnabled() {
25
+ return this._runInLiteMode && browser.supportsInsertableStreams();
26
+ }
27
+ /**
28
+ * Checks if the clients supports re-writing of the SSRCs on the media streams by the bridge.
29
+ * @returns {boolean}
30
+ */
31
+ isSsrcRewritingSupported() {
32
+ return this._ssrcRewriting;
33
+ }
34
+ }
35
+ export default new FeatureFlags();
36
+ //# sourceMappingURL=FeatureFlags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureFlags.js","sourceRoot":"","sources":["../../../../modules/flags/FeatureFlags.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AAEjC;;GAEG;AACH,MAAM,YAAY;IAId;;;;;;OAMG;IACH,IAAI,CAAC,KAAuF;QACxF,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACnD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;OAMG;IACH,sBAAsB;QAClB,OAAO,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,yBAAyB,EAAE,CAAC;IACtE,CAAC;IAED;;;OAGG;IACH,wBAAwB;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;CACJ;AAED,eAAe,IAAI,YAAY,EAAE,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { getLogger } from '@jitsi/logger';
2
+ import { RTCEvents } from '../../service/RTC/RTCEvents';
3
+ import FeatureFlags from '../flags/FeatureFlags';
4
+ // Flag to set on receivers to avoid setting up the lite mode
5
+ // more than once.
6
+ const kJitsiLiteMode = Symbol('kJitsiLiteMode');
7
+ const logger = getLogger('testing:LiteModeContext');
8
+ /**
9
+ * This module implements a discard-all insertable stream. Use to reduce decoder CPU load for testing.
10
+ */
11
+ export class LiteModeContext {
12
+ /**
13
+ * A constructor.
14
+ * @param {JitsiConference} conference - The conference instance for which lite mode is to be enabled.
15
+ */
16
+ constructor(conference) {
17
+ this.enabled = FeatureFlags.isRunInLiteModeEnabled();
18
+ if (!this.enabled) {
19
+ return;
20
+ }
21
+ conference.rtc.on(RTCEvents.REMOTE_TRACK_ADDED, (track, tpc) => this._setupLiteModeForTrack(tpc, track));
22
+ }
23
+ /**
24
+ * Setup Lite Mode for a track.
25
+ *
26
+ * @private
27
+ */
28
+ _setupLiteModeForTrack(tpc, track) {
29
+ if (!this.enabled) {
30
+ return;
31
+ }
32
+ const receiver = tpc.findReceiverForTrack(track.getTrack());
33
+ if (!receiver) {
34
+ logger.warn(`Could not set up lite mode for ${track}: receiver not found in: ${tpc}`);
35
+ return;
36
+ }
37
+ if (receiver[kJitsiLiteMode]) {
38
+ return;
39
+ }
40
+ receiver[kJitsiLiteMode] = true;
41
+ const receiverStreams = receiver.createEncodedStreams();
42
+ const transformStream = new TransformStream({
43
+ transform: () => {
44
+ // Don't call controller.enqueue(encodedFrame), and so drop everything
45
+ }
46
+ });
47
+ receiverStreams.readable.pipeThrough(transformStream).pipeTo(receiverStreams.writable);
48
+ }
49
+ }
50
+ //# sourceMappingURL=LiteModeContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiteModeContext.js","sourceRoot":"","sources":["../../../../modules/litemode/LiteModeContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAGxD,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAEjD,6DAA6D;AAC7D,kBAAkB;AAClB,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAEhD,MAAM,MAAM,GAAG,SAAS,CAAC,yBAAyB,CAAC,CAAC;AAEpD;;GAEG;AACH,MAAM,OAAO,eAAe;IAGxB;;;OAGG;IACH,YAAY,UAA2B;QACnC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,sBAAsB,EAAE,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QAED,UAAU,CAAC,GAAG,CAAC,EAAE,CACb,SAAS,CAAC,kBAAkB,EAC5B,CAAC,KAAuB,EAAE,GAA4B,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5G,CAAC;IAED;;;;OAIG;IACK,sBAAsB,CAAC,GAA4B,EAAE,KAAuB;QAChF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,kCAAkC,KAAK,4BAA4B,GAAG,EAAE,CAAC,CAAC;YAEtF,OAAO;QACX,CAAC;QAED,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QACD,QAAQ,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;QAEhC,MAAM,eAAe,GAAG,QAAQ,CAAC,oBAAoB,EAAE,CAAC;QAExD,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC;YACxC,SAAS,EAAE,GAAG,EAAE;gBACZ,sEAAsE;YAC1E,CAAC;SACJ,CAAC,CAAC;QAEH,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC3F,CAAC;CACJ"}
@@ -0,0 +1,98 @@
1
+ import { getLogger } from '@jitsi/logger';
2
+ import { default as SignalingLayer } from '../../service/RTC/SignalingLayer';
3
+ const logger = getLogger('proxyconnection:CustomSignalingLayer');
4
+ /**
5
+ * Custom semi-mock implementation for the Proxy connection service.
6
+ */
7
+ export default class CustomSignalingLayer extends SignalingLayer {
8
+ /**
9
+ * Creates new instance.
10
+ */
11
+ constructor() {
12
+ super();
13
+ this.ssrcOwners = new Map();
14
+ this.chatRoom = null;
15
+ }
16
+ /**
17
+ * @inheritDoc
18
+ */
19
+ getPeerMediaInfo(_owner, _mediaType, _sourceName) {
20
+ return {};
21
+ }
22
+ /**
23
+ * @inheritDoc
24
+ */
25
+ getPeerSourceInfo(_owner, _sourceName) {
26
+ return undefined;
27
+ }
28
+ /**
29
+ * @inheritDoc
30
+ */
31
+ getSSRCOwner(ssrc) {
32
+ return this.ssrcOwners.get(ssrc);
33
+ }
34
+ /**
35
+ * @inheritDoc
36
+ */
37
+ getTrackSourceName(_ssrc) {
38
+ return undefined;
39
+ }
40
+ /**
41
+ * @inheritDoc
42
+ */
43
+ removeSSRCOwners(ssrcList) {
44
+ if (!ssrcList?.length) {
45
+ return;
46
+ }
47
+ for (const ssrc of ssrcList) {
48
+ this.ssrcOwners.delete(ssrc);
49
+ }
50
+ }
51
+ /**
52
+ * Sets the <tt>ChatRoom</tt> instance used.
53
+ * @param {ChatRoom} room
54
+ */
55
+ setChatRoom(room) {
56
+ this.chatRoom = room;
57
+ }
58
+ /**
59
+ * @inheritDoc
60
+ */
61
+ setSSRCOwner(ssrc, endpointId) {
62
+ if (typeof ssrc !== 'number') {
63
+ throw new TypeError(`SSRC(${ssrc}) must be a number`);
64
+ }
65
+ // Now signaling layer instance is shared between different JingleSessionPC instances, so although very unlikely
66
+ // an SSRC conflict could potentially occur. Log a message to make debugging easier.
67
+ const existingOwner = this.ssrcOwners.get(ssrc);
68
+ if (existingOwner && existingOwner !== endpointId) {
69
+ logger.error(`SSRC owner re-assigned from ${existingOwner} to ${endpointId}`);
70
+ }
71
+ this.ssrcOwners.set(ssrc, endpointId);
72
+ }
73
+ /**
74
+ * @inheritDoc
75
+ */
76
+ setTrackMuteStatus(_sourceName, _muted) {
77
+ return false;
78
+ }
79
+ /**
80
+ * @inheritDoc
81
+ */
82
+ setTrackVideoType(_sourceName, _videoType) {
83
+ return false;
84
+ }
85
+ /**
86
+ * @inheritDoc
87
+ */
88
+ updateSsrcOwnersOnLeave(id) {
89
+ const ssrcs = Array.from(this.ssrcOwners)
90
+ .filter((entry) => entry[1] === id)
91
+ .map((entry) => entry[0]);
92
+ if (!ssrcs?.length) {
93
+ return;
94
+ }
95
+ this.removeSSRCOwners(ssrcs);
96
+ }
97
+ }
98
+ //# sourceMappingURL=CustomSignalingLayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomSignalingLayer.js","sourceRoot":"","sources":["../../../../modules/proxyconnection/CustomSignalingLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAuB,OAAO,IAAI,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAGlG,MAAM,MAAM,GAAG,SAAS,CAAC,sCAAsC,CAAC,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,cAAc;IAa5D;;OAEG;IACH;QACI,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACM,gBAAgB,CAAC,MAAc,EAAE,UAAqB,EAAE,WAAmB;QAChF,OAAO,EAAG,CAAC;IACf,CAAC;IAED;;OAEG;IACM,iBAAiB,CAAC,MAAc,EAAE,WAAmB;QAC1D,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;OAEG;IACM,YAAY,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACM,kBAAkB,CAAC,KAAa;QACrC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;OAEG;IACM,gBAAgB,CAAC,QAAkB;QACxC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,IAAc;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACM,YAAY,CAAC,IAAY,EAAE,UAAkB;QAClD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,SAAS,CAAC,QAAQ,IAAI,oBAAoB,CAAC,CAAC;QAC1D,CAAC;QAED,gHAAgH;QAChH,oFAAoF;QACpF,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,aAAa,IAAI,aAAa,KAAK,UAAU,EAAE,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,+BAA+B,aAAa,OAAO,UAAU,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACM,kBAAkB,CAAC,WAAmB,EAAE,MAAe;QAC5D,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACM,iBAAiB,CAAC,WAAmB,EAAE,UAAkB;QAC9D,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACM,uBAAuB,CAAC,EAAU;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;aACpC,MAAM,CAAC,CAAC,KAAuB,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;aACpD,GAAG,CAAC,CAAC,KAAuB,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;CACJ"}