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