UNPKG

@videosdk.live/react-sdk

Version:

<h1 align="center"> <img src="https://static.videosdk.live/videosdk_logo_website_black.png"/><br/> <p align="center"> Video SDK React App<br/> <a href="https://videosdk.live/">videosdk.live</a> </p> </h1>

929 lines (923 loc) 111 kB
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var React = require('react'); var React__default = _interopDefault(React); var EventEmitter = _interopDefault(require('events')); var jsSdk = require('@videosdk.live/js-sdk'); function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } var eventPrifix = 'videosdk-live-react-sdk'; var events = { 'participant-joined': eventPrifix + "-participant-joined", 'participant-left': eventPrifix + "-participant-left", 'speaker-changed': eventPrifix + "-speaker-changed", 'presenter-changed': eventPrifix + "-presenter-changed", 'main-participant-changed': eventPrifix + "-main-participant-changed", 'entry-requested': eventPrifix + "-entry-requested", 'entry-responded': eventPrifix + "-entry-responded", 'recording-started': eventPrifix + "-recording-started", 'recording-stopped': eventPrifix + "-recording-stopped", 'chat-message': eventPrifix + "-chat-message", 'meeting-joined': eventPrifix + "-meeting-joined", 'meeting-left': eventPrifix + "-meeting-left", 'live-stream-started': eventPrifix + "-live-stream-started", 'live-stream-stopped': eventPrifix + "-live-stream-stopped", 'video-state-changed': eventPrifix + "-video-state-changed", 'video-seeked': eventPrifix + "-video-seeked", 'webcam-requested': eventPrifix + "-webcam-requested", 'mic-requested': eventPrifix + "-mic-requested", 'pin-state-changed': eventPrifix + "-pin-state-changed", 'connection-open': eventPrifix + "-connection-open", 'connection-close': eventPrifix + "-connection-close", 'switch-meeting': eventPrifix + "-switch-meeting", error: eventPrifix + "-error", 'hls-started': eventPrifix + "-hls-started", 'hls-stopped': eventPrifix + "-hls-stopped", 'hls-state-changed': eventPrifix + "-hls-state-changed", 'hls-playable-state-changed': eventPrifix + "-hls-playable-state-changed", 'recording-state-changed': eventPrifix + "-recording-state-changed", 'livestream-state-changed': eventPrifix + "-livestream-state-changed", 'meeting-state-changed': eventPrifix + "-meeting-state-changed", 'participant-mode-changed': eventPrifix + "-participant-mode-changed", 'transcription-state-changed': eventPrifix + "-transcription-state-changed", 'transcription-text': eventPrifix + "-transcription-text", 'character-joined': eventPrifix + "-character-joined", 'character-left': eventPrifix + "-character-left", 'whiteboard-started': eventPrifix + "-whiteboard-started", 'whiteboard-stopped': eventPrifix + "-whiteboard-stopped", 'paused-all-streams': eventPrifix + "-paused-all-streams", 'resumed-all-streams': eventPrifix + "-resumed-all-streams", 'media-relay-started': eventPrifix + "-media-relay-started", 'media-relay-stopped': eventPrifix + "-media-relay-stopped", 'media-relay-error': eventPrifix + "-media-relay-error", 'media-relay-request-response': eventPrifix + "-media-relay-request-response", 'media-relay-request-received': eventPrifix + "-media-relay-request-received" }; var eventEmitter = new EventEmitter(); eventEmitter.setMaxListeners(9999); function debounce(func, delay) { var timeout; return function () { var _this = this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } clearTimeout(timeout); timeout = setTimeout(function () { return func.apply(_this, args); }, delay); }; } var MeetingProviderContex = React.createContext(); var useMeeting = function useMeeting(_temp) { var _ref = _temp === void 0 ? {} : _temp, _ref$onParticipantJoi = _ref.onParticipantJoined, onParticipantJoined = _ref$onParticipantJoi === void 0 ? function () {} : _ref$onParticipantJoi, _ref$onParticipantLef = _ref.onParticipantLeft, onParticipantLeft = _ref$onParticipantLef === void 0 ? function () {} : _ref$onParticipantLef, _ref$onSpeakerChanged = _ref.onSpeakerChanged, onSpeakerChanged = _ref$onSpeakerChanged === void 0 ? function () {} : _ref$onSpeakerChanged, _ref$onPresenterChang = _ref.onPresenterChanged, onPresenterChanged = _ref$onPresenterChang === void 0 ? function () {} : _ref$onPresenterChang, _ref$onMainParticipan = _ref.onMainParticipantChanged, onMainParticipantChanged = _ref$onMainParticipan === void 0 ? function () {} : _ref$onMainParticipan, _ref$onEntryRequested = _ref.onEntryRequested, onEntryRequested = _ref$onEntryRequested === void 0 ? function () {} : _ref$onEntryRequested, _ref$onEntryResponded = _ref.onEntryResponded, onEntryResponded = _ref$onEntryResponded === void 0 ? function () {} : _ref$onEntryResponded, _ref$onPausedAllStrea = _ref.onPausedAllStreams, onPausedAllStreams = _ref$onPausedAllStrea === void 0 ? function () {} : _ref$onPausedAllStrea, _ref$onResumedAllStre = _ref.onResumedAllStreams, onResumedAllStreams = _ref$onResumedAllStre === void 0 ? function () {} : _ref$onResumedAllStre, _ref$onRecordingStart = _ref.onRecordingStarted, onRecordingStarted = _ref$onRecordingStart === void 0 ? function () {} : _ref$onRecordingStart, _ref$onRecordingStopp = _ref.onRecordingStopped, onRecordingStopped = _ref$onRecordingStopp === void 0 ? function () {} : _ref$onRecordingStopp, _ref$onChatMessage = _ref.onChatMessage, onChatMessage = _ref$onChatMessage === void 0 ? function () {} : _ref$onChatMessage, _ref$onMeetingJoined = _ref.onMeetingJoined, onMeetingJoined = _ref$onMeetingJoined === void 0 ? function () {} : _ref$onMeetingJoined, _ref$onMeetingLeft = _ref.onMeetingLeft, onMeetingLeft = _ref$onMeetingLeft === void 0 ? function () {} : _ref$onMeetingLeft, _ref$onLiveStreamStar = _ref.onLiveStreamStarted, onLiveStreamStarted = _ref$onLiveStreamStar === void 0 ? function () {} : _ref$onLiveStreamStar, _ref$onLiveStreamStop = _ref.onLiveStreamStopped, onLiveStreamStopped = _ref$onLiveStreamStop === void 0 ? function () {} : _ref$onLiveStreamStop, _ref$onVideoStateChan = _ref.onVideoStateChanged, onVideoStateChanged = _ref$onVideoStateChan === void 0 ? function () {} : _ref$onVideoStateChan, _ref$onVideoSeeked = _ref.onVideoSeeked, onVideoSeeked = _ref$onVideoSeeked === void 0 ? function () {} : _ref$onVideoSeeked, _ref$onWebcamRequeste = _ref.onWebcamRequested, onWebcamRequested = _ref$onWebcamRequeste === void 0 ? function () {} : _ref$onWebcamRequeste, _ref$onMicRequested = _ref.onMicRequested, onMicRequested = _ref$onMicRequested === void 0 ? function () {} : _ref$onMicRequested, _ref$onPinStateChange = _ref.onPinStateChanged, onPinStateChanged = _ref$onPinStateChange === void 0 ? function () {} : _ref$onPinStateChange, _ref$onConnectionOpen = _ref.onConnectionOpen, onConnectionOpen = _ref$onConnectionOpen === void 0 ? function () {} : _ref$onConnectionOpen, _ref$onConnetionClose = _ref.onConnetionClose, onConnetionClose = _ref$onConnetionClose === void 0 ? function () {} : _ref$onConnetionClose, _ref$onSwitchMeeting = _ref.onSwitchMeeting, onSwitchMeeting = _ref$onSwitchMeeting === void 0 ? function () {} : _ref$onSwitchMeeting, _ref$onError = _ref.onError, onError = _ref$onError === void 0 ? function () {} : _ref$onError, _ref$onHlsStarted = _ref.onHlsStarted, onHlsStarted = _ref$onHlsStarted === void 0 ? function () {} : _ref$onHlsStarted, _ref$onHlsStopped = _ref.onHlsStopped, onHlsStopped = _ref$onHlsStopped === void 0 ? function () {} : _ref$onHlsStopped, _ref$onHlsStateChange = _ref.onHlsStateChanged, onHlsStateChanged = _ref$onHlsStateChange === void 0 ? function () {} : _ref$onHlsStateChange, _ref$onRecordingState = _ref.onRecordingStateChanged, onRecordingStateChanged = _ref$onRecordingState === void 0 ? function () {} : _ref$onRecordingState, _ref$onLivestreamStat = _ref.onLivestreamStateChanged, onLivestreamStateChanged = _ref$onLivestreamStat === void 0 ? function () {} : _ref$onLivestreamStat, _ref$onMeetingStateCh = _ref.onMeetingStateChanged, onMeetingStateChanged = _ref$onMeetingStateCh === void 0 ? function () {} : _ref$onMeetingStateCh, _ref$onParticipantMod = _ref.onParticipantModeChanged, onParticipantModeChanged = _ref$onParticipantMod === void 0 ? function () {} : _ref$onParticipantMod, _ref$onCharacterJoine = _ref.onCharacterJoined, onCharacterJoined = _ref$onCharacterJoine === void 0 ? function () {} : _ref$onCharacterJoine, _ref$onCharacterLeft = _ref.onCharacterLeft, onCharacterLeft = _ref$onCharacterLeft === void 0 ? function () {} : _ref$onCharacterLeft, _ref$onMediaRelayStar = _ref.onMediaRelayStarted, onMediaRelayStarted = _ref$onMediaRelayStar === void 0 ? function () {} : _ref$onMediaRelayStar, _ref$onMediaRelayStop = _ref.onMediaRelayStopped, onMediaRelayStopped = _ref$onMediaRelayStop === void 0 ? function () {} : _ref$onMediaRelayStop, _ref$onMediaRelayErro = _ref.onMediaRelayError, onMediaRelayError = _ref$onMediaRelayErro === void 0 ? function () {} : _ref$onMediaRelayErro, _ref$onMediaRelayRequ = _ref.onMediaRelayRequestResponse, onMediaRelayRequestResponse = _ref$onMediaRelayRequ === void 0 ? function () {} : _ref$onMediaRelayRequ, _ref$onMediaRelayRequ2 = _ref.onMediaRelayRequestReceived, onMediaRelayRequestReceived = _ref$onMediaRelayRequ2 === void 0 ? function () {} : _ref$onMediaRelayRequ2; React.useEffect(function () { eventEmitter.on(events['participant-joined'], onParticipantJoined); eventEmitter.on(events['participant-left'], onParticipantLeft); eventEmitter.on(events['speaker-changed'], onSpeakerChanged); eventEmitter.on(events['presenter-changed'], onPresenterChanged); eventEmitter.on(events['main-participant-changed'], onMainParticipantChanged); eventEmitter.on(events['entry-requested'], onEntryRequested); eventEmitter.on(events['entry-responded'], onEntryResponded); eventEmitter.on(events['paused-all-streams'], onPausedAllStreams); eventEmitter.on(events['resumed-all-streams'], onResumedAllStreams); eventEmitter.on(events['recording-started'], onRecordingStarted); eventEmitter.on(events['recording-stopped'], onRecordingStopped); eventEmitter.on(events['chat-message'], onChatMessage); eventEmitter.on(events['meeting-joined'], onMeetingJoined); eventEmitter.on(events['meeting-left'], onMeetingLeft); eventEmitter.on(events['live-stream-started'], onLiveStreamStarted); eventEmitter.on(events['live-stream-stopped'], onLiveStreamStopped); eventEmitter.on(events['video-state-changed'], onVideoStateChanged); eventEmitter.on(events['video-seeked'], onVideoSeeked); eventEmitter.on(events['webcam-requested'], onWebcamRequested); eventEmitter.on(events['mic-requested'], onMicRequested); eventEmitter.on(events['pin-state-changed'], onPinStateChanged); eventEmitter.on(events['connection-open'], onConnectionOpen); eventEmitter.on(events['connection-close'], onConnetionClose); eventEmitter.on(events['switch-meeting'], onSwitchMeeting); eventEmitter.on(events['error'], onError); eventEmitter.on(events['hls-started'], onHlsStarted); eventEmitter.on(events['hls-stopped'], onHlsStopped); eventEmitter.on(events['hls-state-changed'], onHlsStateChanged); eventEmitter.on(events['recording-state-changed'], onRecordingStateChanged); eventEmitter.on(events['livestream-state-changed'], onLivestreamStateChanged); eventEmitter.on(events['meeting-state-changed'], onMeetingStateChanged); eventEmitter.on(events['participant-mode-changed'], onParticipantModeChanged); eventEmitter.on(events['character-joined'], onCharacterJoined); eventEmitter.on(events['character-left'], onCharacterLeft); eventEmitter.on(events['media-relay-started'], onMediaRelayStarted); eventEmitter.on(events['media-relay-stopped'], onMediaRelayStopped); eventEmitter.on(events['media-relay-error'], onMediaRelayError); eventEmitter.on(events['media-relay-request-response'], onMediaRelayRequestResponse); eventEmitter.on(events['media-relay-request-received'], onMediaRelayRequestReceived); return function () { eventEmitter.off(events['meeting-state-changed'], onMeetingStateChanged); eventEmitter.off(events['participant-joined'], onParticipantJoined); eventEmitter.off(events['participant-left'], onParticipantLeft); eventEmitter.off(events['speaker-changed'], onSpeakerChanged); eventEmitter.off(events['presenter-changed'], onPresenterChanged); eventEmitter.off(events['main-participant-changed'], onMainParticipantChanged); eventEmitter.off(events['entry-requested'], onEntryRequested); eventEmitter.off(events['entry-responded'], onEntryResponded); eventEmitter.off(events['paused-all-streams'], onPausedAllStreams); eventEmitter.off(events['resumed-all-streams'], onResumedAllStreams); eventEmitter.off(events['recording-started'], onRecordingStarted); eventEmitter.off(events['recording-stopped'], onRecordingStopped); eventEmitter.off(events['chat-message'], onChatMessage); eventEmitter.off(events['meeting-joined'], onMeetingJoined); eventEmitter.off(events['meeting-left'], onMeetingLeft); eventEmitter.off(events['live-stream-started'], onLiveStreamStarted); eventEmitter.off(events['live-stream-stopped'], onLiveStreamStopped); eventEmitter.off(events['video-state-changed'], onVideoStateChanged); eventEmitter.off(events['video-seeked'], onVideoSeeked); eventEmitter.off(events['webcam-requested'], onWebcamRequested); eventEmitter.off(events['mic-requested'], onMicRequested); eventEmitter.off(events['pin-state-changed'], onPinStateChanged); eventEmitter.off(events['connection-open'], onConnectionOpen); eventEmitter.off(events['connection-close'], onConnetionClose); eventEmitter.off(events['switch-meeting'], onSwitchMeeting); eventEmitter.off(events['error'], onError); eventEmitter.off(events['hls-started'], onHlsStarted); eventEmitter.off(events['hls-stopped'], onHlsStopped); eventEmitter.off(events['hls-state-changed'], onHlsStateChanged); eventEmitter.off(events['recording-state-changed'], onRecordingStateChanged); eventEmitter.off(events['livestream-state-changed'], onLivestreamStateChanged); eventEmitter.off(events['participant-mode-changed'], onParticipantModeChanged); eventEmitter.off(events['character-joined'], onCharacterJoined); eventEmitter.off(events['character-left'], onCharacterLeft); eventEmitter.off(events['media-relay-started'], onMediaRelayStarted); eventEmitter.off(events['media-relay-stopped'], onMediaRelayStopped); eventEmitter.off(events['media-relay-error'], onMediaRelayError); eventEmitter.off(events['media-relay-request-response'], onMediaRelayRequestResponse); eventEmitter.off(events['media-relay-request-received'], onMediaRelayRequestReceived); }; }, []); return React.useContext(MeetingProviderContex); }; var MeetingConsumer = function MeetingConsumer(_ref2) { var children = _ref2.children, _ref2$onParticipantJo = _ref2.onParticipantJoined, onParticipantJoined = _ref2$onParticipantJo === void 0 ? function () {} : _ref2$onParticipantJo, _ref2$onParticipantLe = _ref2.onParticipantLeft, onParticipantLeft = _ref2$onParticipantLe === void 0 ? function () {} : _ref2$onParticipantLe, _ref2$onSpeakerChange = _ref2.onSpeakerChanged, onSpeakerChanged = _ref2$onSpeakerChange === void 0 ? function () {} : _ref2$onSpeakerChange, _ref2$onPresenterChan = _ref2.onPresenterChanged, onPresenterChanged = _ref2$onPresenterChan === void 0 ? function () {} : _ref2$onPresenterChan, _ref2$onMainParticipa = _ref2.onMainParticipantChanged, onMainParticipantChanged = _ref2$onMainParticipa === void 0 ? function () {} : _ref2$onMainParticipa, _ref2$onEntryRequeste = _ref2.onEntryRequested, onEntryRequested = _ref2$onEntryRequeste === void 0 ? function () {} : _ref2$onEntryRequeste, _ref2$onEntryResponde = _ref2.onEntryResponded, onEntryResponded = _ref2$onEntryResponde === void 0 ? function () {} : _ref2$onEntryResponde, _ref2$onPausedAllStre = _ref2.onPausedAllStreams, onPausedAllStreams = _ref2$onPausedAllStre === void 0 ? function () {} : _ref2$onPausedAllStre, _ref2$onResumedAllStr = _ref2.onResumedAllStreams, onResumedAllStreams = _ref2$onResumedAllStr === void 0 ? function () {} : _ref2$onResumedAllStr, _ref2$onRecordingStar = _ref2.onRecordingStarted, onRecordingStarted = _ref2$onRecordingStar === void 0 ? function () {} : _ref2$onRecordingStar, _ref2$onRecordingStop = _ref2.onRecordingStopped, onRecordingStopped = _ref2$onRecordingStop === void 0 ? function () {} : _ref2$onRecordingStop, _ref2$onChatMessage = _ref2.onChatMessage, onChatMessage = _ref2$onChatMessage === void 0 ? function () {} : _ref2$onChatMessage, _ref2$onMeetingJoined = _ref2.onMeetingJoined, onMeetingJoined = _ref2$onMeetingJoined === void 0 ? function () {} : _ref2$onMeetingJoined, _ref2$onMeetingLeft = _ref2.onMeetingLeft, onMeetingLeft = _ref2$onMeetingLeft === void 0 ? function () {} : _ref2$onMeetingLeft, _ref2$onLiveStreamSta = _ref2.onLiveStreamStarted, onLiveStreamStarted = _ref2$onLiveStreamSta === void 0 ? function () {} : _ref2$onLiveStreamSta, _ref2$onLiveStreamSto = _ref2.onLiveStreamStopped, onLiveStreamStopped = _ref2$onLiveStreamSto === void 0 ? function () {} : _ref2$onLiveStreamSto, _ref2$onVideoStateCha = _ref2.onVideoStateChanged, onVideoStateChanged = _ref2$onVideoStateCha === void 0 ? function () {} : _ref2$onVideoStateCha, _ref2$onVideoSeeked = _ref2.onVideoSeeked, onVideoSeeked = _ref2$onVideoSeeked === void 0 ? function () {} : _ref2$onVideoSeeked, _ref2$onWebcamRequest = _ref2.onWebcamRequested, onWebcamRequested = _ref2$onWebcamRequest === void 0 ? function () {} : _ref2$onWebcamRequest, _ref2$onMicRequested = _ref2.onMicRequested, onMicRequested = _ref2$onMicRequested === void 0 ? function () {} : _ref2$onMicRequested, _ref2$onPinStateChang = _ref2.onPinStateChanged, onPinStateChanged = _ref2$onPinStateChang === void 0 ? function () {} : _ref2$onPinStateChang, _ref2$onConnectionOpe = _ref2.onConnectionOpen, onConnectionOpen = _ref2$onConnectionOpe === void 0 ? function () {} : _ref2$onConnectionOpe, _ref2$onConnetionClos = _ref2.onConnetionClose, onConnetionClose = _ref2$onConnetionClos === void 0 ? function () {} : _ref2$onConnetionClos, _ref2$onSwitchMeeting = _ref2.onSwitchMeeting, onSwitchMeeting = _ref2$onSwitchMeeting === void 0 ? function () {} : _ref2$onSwitchMeeting, _ref2$onError = _ref2.onError, onError = _ref2$onError === void 0 ? function () {} : _ref2$onError, _ref2$onHlsStarted = _ref2.onHlsStarted, onHlsStarted = _ref2$onHlsStarted === void 0 ? function () {} : _ref2$onHlsStarted, _ref2$onHlsStopped = _ref2.onHlsStopped, onHlsStopped = _ref2$onHlsStopped === void 0 ? function () {} : _ref2$onHlsStopped, _ref2$onHlsStateChang = _ref2.onHlsStateChanged, onHlsStateChanged = _ref2$onHlsStateChang === void 0 ? function () {} : _ref2$onHlsStateChang, _ref2$onRecordingStat = _ref2.onRecordingStateChanged, onRecordingStateChanged = _ref2$onRecordingStat === void 0 ? function () {} : _ref2$onRecordingStat, _ref2$onLivestreamSta = _ref2.onLivestreamStateChanged, onLivestreamStateChanged = _ref2$onLivestreamSta === void 0 ? function () {} : _ref2$onLivestreamSta, _ref2$onMeetingStateC = _ref2.onMeetingStateChanged, onMeetingStateChanged = _ref2$onMeetingStateC === void 0 ? function () {} : _ref2$onMeetingStateC, _ref2$onParticipantMo = _ref2.onParticipantModeChanged, onParticipantModeChanged = _ref2$onParticipantMo === void 0 ? function () {} : _ref2$onParticipantMo, _ref2$onCharacterJoin = _ref2.onCharacterJoined, onCharacterJoined = _ref2$onCharacterJoin === void 0 ? function () {} : _ref2$onCharacterJoin, _ref2$onCharacterLeft = _ref2.onCharacterLeft, onCharacterLeft = _ref2$onCharacterLeft === void 0 ? function () {} : _ref2$onCharacterLeft, _ref2$onMediaRelaySta = _ref2.onMediaRelayStarted, onMediaRelayStarted = _ref2$onMediaRelaySta === void 0 ? function () {} : _ref2$onMediaRelaySta, _ref2$onMediaRelaySto = _ref2.onMediaRelayStopped, onMediaRelayStopped = _ref2$onMediaRelaySto === void 0 ? function () {} : _ref2$onMediaRelaySto, _ref2$onMediaRelayErr = _ref2.onMediaRelayError, onMediaRelayError = _ref2$onMediaRelayErr === void 0 ? function () {} : _ref2$onMediaRelayErr, _ref2$onMediaRelayReq = _ref2.onMediaRelayRequestResponse, onMediaRelayRequestResponse = _ref2$onMediaRelayReq === void 0 ? function () {} : _ref2$onMediaRelayReq, _ref2$onMediaRelayReq2 = _ref2.onMediaRelayRequestReceived, onMediaRelayRequestReceived = _ref2$onMediaRelayReq2 === void 0 ? function () {} : _ref2$onMediaRelayReq2; React.useEffect(function () { eventEmitter.on(events['meeting-state-changed'], onMeetingStateChanged); eventEmitter.on(events['participant-joined'], onParticipantJoined); eventEmitter.on(events['participant-left'], onParticipantLeft); eventEmitter.on(events['speaker-changed'], onSpeakerChanged); eventEmitter.on(events['presenter-changed'], onPresenterChanged); eventEmitter.on(events['main-participant-changed'], onMainParticipantChanged); eventEmitter.on(events['entry-requested'], onEntryRequested); eventEmitter.on(events['entry-responded'], onEntryResponded); eventEmitter.on(events['paused-all-streams'], onPausedAllStreams); eventEmitter.on(events['resumed-all-streams'], onResumedAllStreams); eventEmitter.on(events['recording-started'], onRecordingStarted); eventEmitter.on(events['recording-stopped'], onRecordingStopped); eventEmitter.on(events['chat-message'], onChatMessage); eventEmitter.on(events['meeting-joined'], onMeetingJoined); eventEmitter.on(events['meeting-left'], onMeetingLeft); eventEmitter.on(events['live-stream-enabled'], onLiveStreamStarted); eventEmitter.on(events['live-stream-disabled'], onLiveStreamStopped); eventEmitter.on(events['video-state-changed'], onVideoStateChanged); eventEmitter.on(events['video-seeked'], onVideoSeeked); eventEmitter.on(events['webcam-requested'], onWebcamRequested); eventEmitter.on(events['mic-requested'], onMicRequested); eventEmitter.on(events['pin-state-changed'], onPinStateChanged); eventEmitter.on(events['connection-open'], onConnectionOpen); eventEmitter.on(events['connection-close'], onConnetionClose); eventEmitter.on(events['switch-meeting'], onSwitchMeeting); eventEmitter.on(events['error'], onError); eventEmitter.on(events['hls-started'], onHlsStarted); eventEmitter.on(events['hls-stopped'], onHlsStopped); eventEmitter.on(events['hls-state-changed'], onHlsStateChanged); eventEmitter.on(events['recording-state-changed'], onRecordingStateChanged); eventEmitter.on(events['livestream-state-changed'], onLivestreamStateChanged); eventEmitter.on(events['participant-mode-changed'], onParticipantModeChanged); eventEmitter.on(events['character-joined'], onCharacterJoined); eventEmitter.on(events['character-left'], onCharacterLeft); eventEmitter.on(events['media-relay-started'], onMediaRelayStarted); eventEmitter.on(events['media-relay-stopped'], onMediaRelayStopped); eventEmitter.on(events['media-relay-error'], onMediaRelayError); eventEmitter.on(events['media-relay-request-response'], onMediaRelayRequestResponse); eventEmitter.on(events['media-relay-request-received'], onMediaRelayRequestReceived); return function () { eventEmitter.off(events['meeting-state-changed'], onMeetingStateChanged); eventEmitter.off(events['participant-joined'], onParticipantJoined); eventEmitter.off(events['participant-left'], onParticipantLeft); eventEmitter.off(events['speaker-changed'], onSpeakerChanged); eventEmitter.off(events['presenter-changed'], onPresenterChanged); eventEmitter.off(events['main-participant-changed'], onMainParticipantChanged); eventEmitter.off(events['entry-requested'], onEntryRequested); eventEmitter.off(events['entry-responded'], onEntryResponded); eventEmitter.off(events['paused-all-streams'], onPausedAllStreams); eventEmitter.off(events['resumed-all-streams'], onResumedAllStreams); eventEmitter.off(events['recording-started'], onRecordingStarted); eventEmitter.off(events['recording-stopped'], onRecordingStopped); eventEmitter.off(events['chat-message'], onChatMessage); eventEmitter.off(events['meeting-joined'], onMeetingJoined); eventEmitter.off(events['meeting-left'], onMeetingLeft); eventEmitter.off(events['live-stream-enabled'], onLiveStreamStarted); eventEmitter.off(events['live-stream-disabled'], onLiveStreamStopped); eventEmitter.off(events['video-state-changed'], onVideoStateChanged); eventEmitter.off(events['video-seeked'], onVideoSeeked); eventEmitter.off(events['webcam-requested'], onWebcamRequested); eventEmitter.off(events['mic-requested'], onMicRequested); eventEmitter.off(events['pin-state-changed'], onPinStateChanged); eventEmitter.off(events['connection-open'], onConnectionOpen); eventEmitter.off(events['connection-close'], onConnetionClose); eventEmitter.off(events['switch-meeting'], onSwitchMeeting); eventEmitter.off(events['error'], onError); eventEmitter.off(events['hls-started'], onHlsStarted); eventEmitter.off(events['hls-stopped'], onHlsStopped); eventEmitter.off(events['hls-state-changed'], onHlsStateChanged); eventEmitter.off(events['recording-state-changed'], onRecordingStateChanged); eventEmitter.off(events['livestream-state-changed'], onLivestreamStateChanged); eventEmitter.off(events['participant-mode-changed'], onParticipantModeChanged); eventEmitter.off(events['character-joined'], onCharacterJoined); eventEmitter.off(events['character-left'], onCharacterLeft); eventEmitter.off(events['media-relay-started'], onMediaRelayStarted); eventEmitter.off(events['media-relay-stopped'], onMediaRelayStopped); eventEmitter.off(events['media-relay-error'], onMediaRelayError); eventEmitter.off(events['media-relay-request-response'], onMediaRelayRequestResponse); eventEmitter.off(events['media-relay-request-received'], onMediaRelayRequestReceived); }; }, []); return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(MeetingProviderContex.Consumer, null, children)); }; var version = "0.3.12"; var MeetingProvider = function MeetingProvider(_ref) { var children = _ref.children, config = _ref.config, token = _ref.token, joinWithoutUserInteraction = _ref.joinWithoutUserInteraction, _reinitialiseMeetingOnConfigChange = _ref.reinitialiseMeetingOnConfigChange, deviceInfo = _ref.deviceInfo, keyProvider = _ref.keyProvider; var _useState = React.useState(null), meeting = _useState[0], setMeeting = _useState[1]; var _useState2 = React.useState(null), localParticipant = _useState2[0], setLocalParticipant = _useState2[1]; var _useState3 = React.useState(null), mainParticipant = _useState3[0], setMainParticipant = _useState3[1]; var _useState4 = React.useState(null), activeSpeakerId = _useState4[0], setActiveSpeakerId = _useState4[1]; var _useState5 = React.useState(null), presenterId = _useState5[0], setPresenterId = _useState5[1]; var _useState6 = React.useState(false), localMicOn = _useState6[0], setLocalMicOn = _useState6[1]; var _useState7 = React.useState(false), localWebcamOn = _useState7[0], setLocalWebcamOn = _useState7[1]; var _useState8 = React.useState(false), localScreenShareOn = _useState8[0], setLocalScreenShareOn = _useState8[1]; var _useState9 = React.useState(false), isRecording = _useState9[0], setIsRecording = _useState9[1]; var _useState0 = React.useState([]), messages = _useState0[0], setMessages = _useState0[1]; var _useState1 = React.useState(new Map()), participants = _useState1[0], setParticipants = _useState1[1]; var _useState10 = React.useState(new Map()), characters = _useState10[0], setCharacters = _useState10[1]; var _useState11 = React.useState(new Map()), pinnedParticipants = _useState11[0], setPinnedParticipants = _useState11[1]; var _useState12 = React.useState(false), isLiveStreaming = _useState12[0], setIsLiveStreaming = _useState12[1]; var _useState13 = React.useState(new Map()), connections = _useState13[0], setConnections = _useState13[1]; var _useState14 = React.useState(false), isMeetingJoined = _useState14[0], setIsMeetingJoined = _useState14[1]; var _useState15 = React.useState(false), isHls = _useState15[0], setIsHls = _useState15[1]; var _useState16 = React.useState('RECORDING_STOPPED'), recordingState = _useState16[0], setRecordingState = _useState16[1]; var _useState17 = React.useState('LIVESTREAM_STOPPED'), livestreamState = _useState17[0], setLivestreamState = _useState17[1]; var _useState18 = React.useState('HLS_STOPPED'), hlsState = _useState18[0], setHlsState = _useState18[1]; var _useState19 = React.useState({ downstreamUrl: null, playbackHlsUrl: null, livestreamUrl: null }), hlsUrls = _useState19[0], setHlsUrls = _useState19[1]; var _useState20 = React.useState('TRANSCRIPTION_STOPPED'), transcriptionState = _useState20[0], setTranscriptionState = _useState20[1]; var meetingRef = React.useRef(); var localMicOnRef = React.useRef(); var localWebcamOnRef = React.useRef(); var localScreenShareOnRef = React.useRef(); var isRecordingRef = React.useRef(); var keyProviderRef = React.useRef(keyProvider); var configRef = React.useRef(config); var tokenRef = React.useRef(token); var joinedOnFirstRender = React.useRef(false); var isHlsRef = React.useRef(); var reinitialiseMeetingOnConfigChange = React.useMemo(function () { return _reinitialiseMeetingOnConfigChange; }, []); React.useEffect(function () { meetingRef.current = meeting; }, [meeting]); React.useEffect(function () { localMicOnRef.current = localMicOn; }, [localMicOn]); React.useEffect(function () { localWebcamOnRef.current = localWebcamOn; }, [localWebcamOn]); React.useEffect(function () { localScreenShareOnRef.current = localScreenShareOn; }, [localScreenShareOn]); React.useEffect(function () { isRecordingRef.current = isRecording; }, [isRecording]); React.useEffect(function () { configRef.current = config; }, [config]); React.useEffect(function () { tokenRef.current = token; }, [token]); React.useEffect(function () { isHlsRef.current = isHls; }, [isHls]); var resetStates = function resetStates() { setMeeting(null); setLocalParticipant(null); setMainParticipant(null); setActiveSpeakerId(null); setPresenterId(null); setLocalMicOn(false); setLocalWebcamOn(false); setLocalScreenShareOn(false); setIsRecording(false); setMessages([]); setIsLiveStreaming(false); setParticipants(new Map()); setCharacters(new Map()); setPinnedParticipants(new Map()); setConnections(new Map()); setIsMeetingJoined(false); setIsHls(false); setRecordingState('RECORDING_STOPPED'); setLivestreamState('LIVESTREAM_STOPPED'); setHlsState('HLS_STOPPED'); setTranscriptionState('TRANSCRIPTION_STOPPED'); setHlsUrls({ downstreamUrl: null, playbackHlsUrl: null, livestreamUrl: null }); }; var _handle_participant_joined = function _handle_participant_joined(participant) { setParticipants(function (participants) { participants.set(participant.id, participant); var participantsToSet = new Map(participants); return participantsToSet; }); eventEmitter.emit(events['participant-joined'], participant); }; var _handle_participant_left = function _handle_participant_left(participant) { setParticipants(function (participants) { participants["delete"](participant.id); var newParticipants = new Map(participants); return newParticipants; }); eventEmitter.emit(events['participant-left'], participant); }; var _handle_presenter_changed = function _handle_presenter_changed(presenterId) { var _meetingRef$current, _meetingRef$current$l; setPresenterId(presenterId); setLocalScreenShareOn(presenterId === (meetingRef === null || meetingRef === void 0 ? void 0 : (_meetingRef$current = meetingRef.current) === null || _meetingRef$current === void 0 ? void 0 : (_meetingRef$current$l = _meetingRef$current.localParticipant) === null || _meetingRef$current$l === void 0 ? void 0 : _meetingRef$current$l.id)); eventEmitter.emit(events['presenter-changed'], presenterId); }; var _handle_main_participant_changed = function _handle_main_participant_changed(participant) { setMainParticipant(participant); eventEmitter.emit(events['main-participant-changed'], participant); }; var _handle_speaker_changed = function _handle_speaker_changed(activeSpeakerId) { setActiveSpeakerId(activeSpeakerId); eventEmitter.emit(events['speaker-changed'], activeSpeakerId); }; var _handle_chat_message = function _handle_chat_message(data) { setMessages(function (s) { return [].concat(s, [data]); }); eventEmitter.emit(events['chat-message'], data); }; var _handle_entry_requested = function _handle_entry_requested(data) { eventEmitter.emit(events['entry-requested'], data); }; var _handle_entry_responded = function _handle_entry_responded(participantId, decision) { eventEmitter.emit(events['entry-responded'], participantId, decision); }; var _handle_recording_started = function _handle_recording_started() { setIsRecording(true); eventEmitter.emit(events['recording-started']); }; var _handle_recording_stopped = function _handle_recording_stopped() { setIsRecording(false); eventEmitter.emit(events['recording-stopped']); }; var _handle_localParticipant_stream_enabled = function _handle_localParticipant_stream_enabled(stream) { if (stream.track.readyState === 'live') { if (stream.kind === 'video') { setLocalWebcamOn(true); } else if (stream.kind === 'audio') { setLocalMicOn(true); } } }; var _handle_localParticipant_stream_disabled = function _handle_localParticipant_stream_disabled(stream) { if (stream.kind === 'video') { setLocalWebcamOn(false); } else if (stream.kind === 'audio') { setLocalMicOn(false); } }; var _handle_live_stream_started = function _handle_live_stream_started(data) { setIsLiveStreaming(true); eventEmitter.emit(events['live-stream-started'], data); }; var _handle_live_stream_stopped = function _handle_live_stream_stopped() { setIsLiveStreaming(false); eventEmitter.emit(events['live-stream-stopped']); }; var _handle_hls_started = function _handle_hls_started(data) { setIsHls(true); eventEmitter.emit(events['hls-started'], data); }; var _handle_hls_stopped = function _handle_hls_stopped() { setIsHls(false); eventEmitter.emit(events['hls-stopped']); }; var _handle_video_state_changed = function _handle_video_state_changed(data) { eventEmitter.emit(events['video-state-changed'], data); }; var _handle_video_seeked = function _handle_video_seeked(data) { eventEmitter.emit(events['video-seeked'], data); }; var _handle_webcam_requested = function _handle_webcam_requested(data) { eventEmitter.emit(events['webcam-requested'], data); }; var _handle_mic_requested = function _handle_mic_requested(data) { eventEmitter.emit(events['mic-requested'], data); }; var _handle_meeting_joined = function _handle_meeting_joined(data) { if (data.switchRoomId) { setMessages(function (s) { return [].concat(s, data.messages); }); eventEmitter.emit(events['meeting-joined'], data); } else { joinedOnFirstRender.current = true; setMessages(function (s) { return [].concat(s, data.messages); }); eventEmitter.emit(events['meeting-joined'], data); setIsMeetingJoined(true); } }; var _handle_meeting_left2 = function _handle_meeting_left() { eventEmitter.emit(events['meeting-left']); var meeting = meetingRef.current; if (meeting) { var _meeting$localPartici; if (typeof (meeting === null || meeting === void 0 ? void 0 : meeting.off) === 'function') { meeting.off('meeting-state-changed', _handle_meeting_state_changed); meeting.off('participant-joined', _handle_participant_joined); meeting.off('participant-left', _handle_participant_left); meeting.off('presenter-changed', _handle_presenter_changed); meeting.off('main-participant-changed', _handle_main_participant_changed); meeting.off('speaker-changed', _handle_speaker_changed); meeting.off('entry-requested', _handle_entry_requested); meeting.off('entry-responded', _handle_entry_responded); meeting.off('chat-message', _handle_chat_message); meeting.off('recording-started', _handle_recording_started); meeting.off('recording-stopped', _handle_recording_stopped); meeting.off('meeting-joined', _handle_meeting_joined); meeting.off('meeting-left', _handle_meeting_left2); meeting.off('livestream-started', _handle_live_stream_started); meeting.off('livestream-stopped', _handle_live_stream_stopped); meeting.off('video-state-changed', _handle_video_state_changed); meeting.off('video-seeked', _handle_video_seeked); meeting.off('webcam-requested', _handle_webcam_requested); meeting.off('mic-requested', _handle_mic_requested); meeting.off('pin-state-changed', _handle_pin_state_changed); meeting.off('paused-all-streams', _handle_streams_paused); meeting.off('resumed-all-streams', _handle_streams_resumed); meeting.off('connection-open', _handle_connection_open); meeting.off('connection-close', _handle_connection_close); meeting.off('switch-meeting', _handle_switch_meeting); meeting.off('error', _handle_error); meeting.off('hls-started', _handle_hls_started); meeting.off('hls-stopped', _handle_hls_stopped); meeting.off('recording-state-changed', _handle_recording_state_changed); meeting.off('livestream-state-changed', _handle_livestream_state_changed); meeting.off('hls-state-changed', _handle_hls_state_changed); meeting.off('participant-mode-changed', _handel_participant_mode_changed); meeting.off('whiteboard-stopped', _handle_whiteboard_stopped); meeting.off('whiteboard-started', _handle_whiteboard_started); meeting.off('transcription-state-changed', _handle_transcription_state_changed); meeting.off('character-joined', _handle_character_joined); meeting.off('character-left', _handle_character_left); } if (typeof (meeting === null || meeting === void 0 ? void 0 : (_meeting$localPartici = meeting.localParticipant) === null || _meeting$localPartici === void 0 ? void 0 : _meeting$localPartici.off) === 'function') { meeting.localParticipant.off('stream-enabled', _handle_localParticipant_stream_enabled); meeting.localParticipant.off('stream-disabled', _handle_localParticipant_stream_disabled); } resetStates(); } }; var _handle_pin_state_changed = function _handle_pin_state_changed(_ref2) { var participantId = _ref2.participantId, state = _ref2.state, pinnedBy = _ref2.pinnedBy; setPinnedParticipants(function (pinnedParticipants) { if (!state.cam && !state.share) { pinnedParticipants["delete"](participantId); } else { pinnedParticipants.set(participantId, state); } var pinnedParticipantsToSet = new Map(pinnedParticipants); return pinnedParticipantsToSet; }); eventEmitter.emit(events['pin-state-changed'], { participantId: participantId, state: state, pinnedBy: pinnedBy }); }; var _handle_streams_paused = function _handle_streams_paused(_ref3) { var kind = _ref3.kind; eventEmitter.emit(events['paused-all-streams'], { kind: kind }); }; var _handle_streams_resumed = function _handle_streams_resumed(_ref4) { var kind = _ref4.kind; eventEmitter.emit(events['resumed-all-streams'], { kind: kind }); }; var _handle_connection_open = function _handle_connection_open(connection) { setConnections(function (s) { s.set(connection.id, connection); var connectionsToSet = new Map(s); return connectionsToSet; }); eventEmitter.emit(events['connection-open'], connection); }; var _handle_connection_close = function _handle_connection_close(connectionId) { setConnections(function (s) { s["delete"](connectionId); var newConnections = new Map(s); return newConnections; }); eventEmitter.emit(events['connection-close'], connectionId); }; var _handle_switch_meeting = function _handle_switch_meeting(d) { eventEmitter.emit(events['switch-meeting'], d); }; var _handle_error = function _handle_error(data) { eventEmitter.emit(events['error'], data); }; var _handle_recording_state_changed = function _handle_recording_state_changed(data) { setRecordingState(data === null || data === void 0 ? void 0 : data.status); eventEmitter.emit(events['recording-state-changed'], data); }; var _handle_livestream_state_changed = function _handle_livestream_state_changed(data) { setLivestreamState(data === null || data === void 0 ? void 0 : data.status); eventEmitter.emit(events['livestream-state-changed'], data); }; var _handle_hls_state_changed = function _handle_hls_state_changed(data) { setHlsState(data === null || data === void 0 ? void 0 : data.status); if ((data === null || data === void 0 ? void 0 : data.status) == 'HLS_PLAYABLE') { setHlsUrls({ downstreamUrl: data === null || data === void 0 ? void 0 : data.downstreamUrl, playbackHlsUrl: data === null || data === void 0 ? void 0 : data.playbackHlsUrl, livestreamUrl: data === null || data === void 0 ? void 0 : data.livestreamUrl }); } else if ((data === null || data === void 0 ? void 0 : data.status) == 'HLS_STOPPED') { setHlsUrls({ downstreamUrl: null, playbackHlsUrl: null, livestreamUrl: null }); } eventEmitter.emit(events['hls-state-changed'], data); }; var _handle_meeting_state_changed = function _handle_meeting_state_changed(data) { eventEmitter.emit(events['meeting-state-changed'], data); }; var _handle_transcription_state_changed = function _handle_transcription_state_changed(data) { setTranscriptionState(data === null || data === void 0 ? void 0 : data.status); eventEmitter.emit(events['transcription-state-changed'], data); }; var _handle_transcription_text = function _handle_transcription_text(data) { eventEmitter.emit(events['transcription-text'], data); }; var _handle_whiteboard_started = function _handle_whiteboard_started(data) { eventEmitter.emit(events['whiteboard-started'], data); }; var _handle_whiteboard_stopped = function _handle_whiteboard_stopped(data) { eventEmitter.emit(events['whiteboard-stopped'], data); }; var _handle_character_joined = function _handle_character_joined(character) { setCharacters(function (characters) { characters.set(character.id, character); var charactersToSet = new Map(characters); return charactersToSet; }); eventEmitter.emit(events['character-joined'], character); }; var _handle_character_left = function _handle_character_left(character) { setCharacters(function (characters) { characters["delete"](character.id); var newCharacters = new Map(characters); return newCharacters; }); eventEmitter.emit(events['character-left'], character); }; var _handel_participant_mode_changed = function _handel_participant_mode_changed(data) { var _meetingRef$current2, _meetingRef$current2$; setParticipants(function (participants) { var part = participants.get(data.participantId); part.mode = data.mode; participants.set(part.id, part); var participantsToSet = new Map(participants); return participantsToSet; }); if (data.participantId === (meetingRef === null || meetingRef === void 0 ? void 0 : (_meetingRef$current2 = meetingRef.current) === null || _meetingRef$current2 === void 0 ? void 0 : (_meetingRef$current2$ = _meetingRef$current2.localParticipant) === null || _meetingRef$current2$ === void 0 ? void 0 : _meetingRef$current2$.id)) { setLocalParticipant(function (participant) { participant.mode = data.mode; return participant; }); } eventEmitter.emit(events['participant-mode-changed'], data); }; var _handle_media_relay_started = function _handle_media_relay_started(data) { eventEmitter.emit(events['media-relay-started'], data); }; var _handle_media_relay_stopped = function _handle_media_relay_stopped(data) { eventEmitter.emit(events['media-relay-stopped'], data); }; var _handle_media_relay_error = function _handle_media_relay_error(data) { eventEmitter.emit(events['media-relay-error'], data); }; var _handle_media_relay_request_response = function _handle_media_relay_request_response(data) { eventEmitter.emit(events['media-relay-request-response'], data); }; var _handle_media_relay_request_received = function _handle_media_relay_request_received(data) { eventEmitter.emit(events['media-relay-request-received'], data); }; var join = function join() { var meeting = jsSdk.VideoSDK && jsSdk.VideoSDK.initMeeting(configRef.current); setMeeting(meeting); var localParticipant = meeting.localParticipant, participants = meeting.participants, characters = meeting.characters; participants.set(localParticipant.id, localParticipant); setParticipants(participants); setCharacters(characters); setLocalParticipant(localParticipant); meeting.on('meeting-state-changed', _handle_meeting_state_changed); meeting.on('participant-joined', _handle_participant_joined); meeting.on('participant-left', _handle_participant_left); meeting.on('presenter-changed', _handle_presenter_changed); meeting.on('main-participant-changed', _handle_main_participant_changed); meeting.on('speaker-changed', _handle_speaker_changed); meeting.on('entry-requested', _handle_entry_requested); meeting.on('entry-responded', _handle_entry_responded); meeting.on('chat-message', _handle_chat_message); meeting.on('recording-started', _handle_recording_started); meeting.on('recording-stopped', _handle_recording_stopped); meeting.on('meeting-joined', _handle_meeting_joined); meeting.on('meeting-left', _handle_meeting_left2); meeting.on('livestream-started', _handle_live_stream_started); meeting.on('livestream-stopped', _handle_live_stream_stopped); meeting.on('video-state-changed', _handle_video_state_changed); meeting.on('video-seeked', _handle_video_seeked); meeting.on('webcam-requested', _handle_webcam_requested); meeting.on('mic-requested', _handle_mic_requested); meeting.on('pin-state-changed', _handle_pin_state_changed); meeting.on('paused-all-streams', _handle_streams_paused); meeting.on('resumed-all-streams', _handle_streams_resumed); meeting.on('connection-open', _handle_connection_open); meeting.on('connection-close', _handle_connection_cl