@webex/plugin-meetings 2.30.2 → 2.31.1

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.
@@ -1 +1 @@
1
- {"version":3,"names":["LocusInfo","updateMeeting","webex","meetingId","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","action","locus","meeting","loci","DESYNC","USE_CURRENT","USE_INCOMING","locusInfo","onDeltaLocus","locusDesync","needToGetFullLocus","meetingRequest","getFullLocus","desync","locusUrl","then","res","onFullLocus","body","resume","LoggerProxy","logger","info","onDeltaAction","parsedLoci","applyLocusDeltaData","onDeltaEvent","created","scheduledMeeting","participantsUrl","replaces","aclUrl","baseSequence","sequence","membership","identities","participants","deltaParticipants","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","updateLocusUrl","url","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","self","updateHostInfo","host","updateMediaShares","mediaShares","data","eventType","LOCUSEVENT","PARTICIPANT_JOIN","PARTICIPANT_LEFT","CONTROLS_UPDATED","PARTICIPANT_AUDIO_MUTED","PARTICIPANT_AUDIO_UNMUTED","PARTICIPANT_VIDEO_MUTED","PARTICIPANT_VIDEO_UNMUTED","SELF_CHANGED","PARTICIPANT_UPDATED","PARTICIPANT_CONTROLS_UPDATED","PARTICIPANT_ROLES_UPDATED","PARTICIPANT_DECLINED","FLOOR_GRANTED","FLOOR_RELEASED","DIFFERENCE","handleLocusDelta","scope","eventName","args","emit","error","updateParticipantDeltas","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","workingCopy","type","_CALL_","_SIP_BRIDGE_","emitScoped","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","updateCreated","updateParticipantsUrl","updateReplace","replace","updateAclUrl","updateBasequence","updateSequence","updateMemberShip","updateIdentifiers","compareAndUpdate","length","find","participant","identity","_USER_","removed","partner","getLocusPartner","state","LOCUS","STATE","INACTIVE","warn","Metrics","postEvent","event","REMOTE_ENDED","DESTROY_MEETING","reason","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_REMOVED_REASON","MEETING_INACTIVE_TERMINATING","FULLSTATE_REMOVED","SELF_REMOVED","compareSelfAndHost","compareHostAndSelf","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","findParticipant","collection","item","person","id","generateDelta","prevState","newState","deltas","audioStatus","videoSlidesStatus","videoStatus","forEach","key","reduce","existingParticipant","delta","status","changed","push","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","ControlsUtils","parse","getControls","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","current","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","LOCUSINFO","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_UPDATED","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","roles","SelfUtils","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","MEETING_INFO_UPDATED","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","internal","device","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","muted","remoteMuted","unmuteAllowed","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","isUserUnadmitted","SELF_UNADMITTED_GUEST","isUserAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","MEDIA_STATUS_CHANGE","currentMediaStatus","audio","video","shareStatus","share","isUserObserving","SELF_OBSERVING","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","LOCUS_INFO_UPDATE_URL","EventsScope"],"sources":["index.js"],"sourcesContent":["import {isEqual} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport InfoUtils from '../locus-info/infoUtils';\nimport FullState from '../locus-info/fullState';\nimport SelfUtils from '../locus-info/selfUtils';\nimport HostUtils from '../locus-info/hostUtils';\nimport ControlsUtils from '../locus-info/controlsUtils';\nimport EmbeddedAppsUtils from '../locus-info/embeddedAppsUtils';\nimport MediaSharesUtils from '../locus-info/mediaSharesUtils';\nimport LocusDeltaParser from '../locus-info/parser';\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action, locus, meeting) {\n const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n meeting.locusDesync = false;\n meeting.needToGetFullLocus = false;\n break;\n case DESYNC:\n meeting.meetingRequest\n .getFullLocus({\n desync: true,\n locusUrl: meeting.locusUrl,\n })\n .then((res) => {\n meeting.locusInfo.onFullLocus(res.body);\n // Notify parser to resume processing delta events\n // now that we have full locus from DESYNC.\n this.locusParser.resume();\n });\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus, meeting) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.participantsUrl = locus.participantsUrl || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.membership = locus.membership || null;\n this.identities = locus.identities || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n /**\n * Stored participant changes between the last event and the current event.\n * All previously stored events are overwritten between events.\n *\n * @instance\n * @type {Array<DeltaParticipant>}\n * @private\n * @member LocusInfo\n */\n this.deltaParticipants = [];\n\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls);\n this.updateLocusUrl(locus.url);\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self, locus.participants);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n initialSetup(locus) {\n this.onFullLocus(locus);\n\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting, data) {\n const {eventType} = data;\n\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n switch (eventType) {\n case LOCUSEVENT.PARTICIPANT_JOIN:\n case LOCUSEVENT.PARTICIPANT_LEFT:\n case LOCUSEVENT.CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_MUTED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_UNMUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_MUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_UNMUTED:\n case LOCUSEVENT.SELF_CHANGED:\n case LOCUSEVENT.PARTICIPANT_UPDATED:\n case LOCUSEVENT.PARTICIPANT_CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_ROLES_UPDATED:\n case LOCUSEVENT.PARTICIPANT_DECLINED:\n case LOCUSEVENT.FLOOR_GRANTED:\n case LOCUSEVENT.FLOOR_RELEASED:\n this.onFullLocus(data.locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(data.locus, meeting);\n break;\n\n default:\n // Why will there be a event with no eventType ????\n // we may not need this, we can get full locus\n this.handleLocusDelta(data.locus, meeting);\n }\n }\n\n /**\n * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope, eventName, args) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {sting} eventType particulat locus event\n * @returns {object} null\n * @memberof LocusInfo\n */\n onFullLocus(locus, eventType) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n this.updateParticipantDeltas(locus.participants);\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n handleOneOnOneEvent(eventType) {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus) {\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusInfo(locus) {\n this.updateControls(locus.controls);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateParticipantsUrl(locus.participantsUrl);\n this.updateReplace(locus.replace);\n this.updateSelf(locus.self, locus.participants);\n this.updateLocusUrl(locus.url);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateMemberShip(locus.membership);\n this.updateIdentifiers(locus.identities);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants, self) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n }\n else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n }\n else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n }\n else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n }\n else if (this.fullState && this.fullState.removed) {\n // user has been dropped from a meeting\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.FULLSTATE_REMOVED,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n }\n else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n }\n else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * Update the deltaParticipants property of this object based on a list of\n * provided participants.\n *\n * @param {Array} [participants] - The participants to update against.\n * @returns {void}\n */\n updateParticipantDeltas(participants = []) {\n // Used to find a participant within a participants collection.\n const findParticipant = (participant, collection) =>\n collection.find((item) => item.person.id === participant.person.id);\n\n // Generates an object that indicates which state properties have changed.\n const generateDelta = (prevState = {}, newState = {}) => {\n // Setup deltas.\n const deltas = {\n audioStatus: prevState.audioStatus !== newState.audioStatus,\n videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,\n videoStatus: prevState.videoStatus !== newState.videoStatus,\n };\n\n // Clean the object\n Object.keys(deltas).forEach((key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n });\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce((collection, participant) => {\n const existingParticipant = findParticipant(participant, this.participants || []) || {};\n\n const delta = generateDelta(existingParticipant.status, participant.status);\n\n const changed = Object.keys(delta).length > 0;\n\n if (changed) {\n collection.push({\n person: participant.person,\n delta,\n });\n }\n\n return collection;\n }, []);\n }\n\n /**\n *\n * @param {Object} participants new participants object\n * @param {boolen} deltaParticpantFlag delta event\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n }\n );\n }\n\n /**\n * @param {Object} controls\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasRecordingChanged || hasRecordingPausedChanged) {\n let state = null;\n\n if (hasRecordingPausedChanged) {\n if (current.record.paused) {\n state = RECORDING_STATE.PAUSED;\n }\n else {\n // state will be `IDLE` if the recording is not active, even when there is a `pause` status change.\n state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;\n }\n }\n else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl, info) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n }\n else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n }\n else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info, self) {\n if (info && !isEqual(this.info, info)) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {info: parsedInfo.current, self}\n );\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n }\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares) {\n if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n }\n );\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n }\n }\n\n /**\n * @param {String} participantsUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateParticipantsUrl(participantsUrl) {\n if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {\n this.participantsUrl = participantsUrl;\n }\n }\n\n /**\n * @param {Object} replace\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplace(replace) {\n if (replace && !isEqual(this.replace, replace)) {\n this.replace = replace;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the locus.mediaShares property\n * @param {Array} participants the locus.participants property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self, participants) {\n if (self && !isEqual(this.self, self)) {\n const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n }\n else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.isUserUnadmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.isUserAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n this.self = self;\n }\n else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n url\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * @param {Object} membership\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMemberShip(membership) {\n if (membership && !isEqual(this.membership, membership)) {\n this.membership = membership;\n }\n }\n\n /**\n * @param {Array} identities\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateIdentifiers(identities) {\n if (identities && !isEqual(this.identities, identities)) {\n this.identities = identities;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["LocusInfo","updateMeeting","webex","meetingId","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","action","locus","meeting","loci","DESYNC","USE_CURRENT","USE_INCOMING","locusInfo","onDeltaLocus","locusDesync","needToGetFullLocus","meetingRequest","getFullLocus","desync","locusUrl","then","res","onFullLocus","body","resume","LoggerProxy","logger","info","onDeltaAction","parsedLoci","applyLocusDeltaData","onDeltaEvent","created","scheduledMeeting","participantsUrl","replaces","aclUrl","baseSequence","sequence","membership","identities","participants","deltaParticipants","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","updateLocusUrl","url","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","self","updateHostInfo","host","updateMediaShares","mediaShares","data","eventType","LOCUSEVENT","PARTICIPANT_JOIN","PARTICIPANT_LEFT","CONTROLS_UPDATED","PARTICIPANT_AUDIO_MUTED","PARTICIPANT_AUDIO_UNMUTED","PARTICIPANT_VIDEO_MUTED","PARTICIPANT_VIDEO_UNMUTED","SELF_CHANGED","PARTICIPANT_UPDATED","PARTICIPANT_CONTROLS_UPDATED","PARTICIPANT_ROLES_UPDATED","PARTICIPANT_DECLINED","FLOOR_GRANTED","FLOOR_RELEASED","DIFFERENCE","handleLocusDelta","scope","eventName","args","emit","error","updateParticipantDeltas","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","workingCopy","type","_CALL_","_SIP_BRIDGE_","emitScoped","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","updateCreated","updateParticipantsUrl","updateReplace","replace","updateAclUrl","updateBasequence","updateSequence","updateMemberShip","updateIdentifiers","compareAndUpdate","length","find","participant","identity","_USER_","removed","partner","getLocusPartner","state","LOCUS","STATE","INACTIVE","warn","Metrics","postEvent","event","REMOTE_ENDED","DESTROY_MEETING","reason","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_REMOVED_REASON","MEETING_INACTIVE_TERMINATING","FULLSTATE_REMOVED","SELF_REMOVED","compareSelfAndHost","compareHostAndSelf","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","findParticipant","collection","item","person","id","generateDelta","prevState","newState","deltas","audioStatus","videoSlidesStatus","videoStatus","forEach","key","reduce","existingParticipant","delta","status","changed","push","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","ControlsUtils","parse","getControls","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasEntryExitToneChanged","current","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","LOCUSINFO","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_UPDATED","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","roles","SelfUtils","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","MEETING_INFO_UPDATED","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","internal","device","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","muted","remoteMuted","unmuteAllowed","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","isUserUnadmitted","SELF_UNADMITTED_GUEST","isUserAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","MEDIA_STATUS_CHANGE","currentMediaStatus","audio","video","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","LOCUS_INFO_UPDATE_URL","EventsScope"],"sources":["index.js"],"sourcesContent":["import {isEqual} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport InfoUtils from '../locus-info/infoUtils';\nimport FullState from '../locus-info/fullState';\nimport SelfUtils from '../locus-info/selfUtils';\nimport HostUtils from '../locus-info/hostUtils';\nimport ControlsUtils from '../locus-info/controlsUtils';\nimport EmbeddedAppsUtils from '../locus-info/embeddedAppsUtils';\nimport MediaSharesUtils from '../locus-info/mediaSharesUtils';\nimport LocusDeltaParser from '../locus-info/parser';\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action, locus, meeting) {\n const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n meeting.locusDesync = false;\n meeting.needToGetFullLocus = false;\n break;\n case DESYNC:\n meeting.meetingRequest\n .getFullLocus({\n desync: true,\n locusUrl: meeting.locusUrl,\n })\n .then((res) => {\n meeting.locusInfo.onFullLocus(res.body);\n // Notify parser to resume processing delta events\n // now that we have full locus from DESYNC.\n this.locusParser.resume();\n });\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus, meeting) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.participantsUrl = locus.participantsUrl || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.membership = locus.membership || null;\n this.identities = locus.identities || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n /**\n * Stored participant changes between the last event and the current event.\n * All previously stored events are overwritten between events.\n *\n * @instance\n * @type {Array<DeltaParticipant>}\n * @private\n * @member LocusInfo\n */\n this.deltaParticipants = [];\n\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls);\n this.updateLocusUrl(locus.url);\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self, locus.participants);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n initialSetup(locus) {\n this.onFullLocus(locus);\n\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting, data) {\n const {eventType} = data;\n\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n switch (eventType) {\n case LOCUSEVENT.PARTICIPANT_JOIN:\n case LOCUSEVENT.PARTICIPANT_LEFT:\n case LOCUSEVENT.CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_MUTED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_UNMUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_MUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_UNMUTED:\n case LOCUSEVENT.SELF_CHANGED:\n case LOCUSEVENT.PARTICIPANT_UPDATED:\n case LOCUSEVENT.PARTICIPANT_CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_ROLES_UPDATED:\n case LOCUSEVENT.PARTICIPANT_DECLINED:\n case LOCUSEVENT.FLOOR_GRANTED:\n case LOCUSEVENT.FLOOR_RELEASED:\n this.onFullLocus(data.locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(data.locus, meeting);\n break;\n\n default:\n // Why will there be a event with no eventType ????\n // we may not need this, we can get full locus\n this.handleLocusDelta(data.locus, meeting);\n }\n }\n\n /**\n * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope, eventName, args) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {sting} eventType particulat locus event\n * @returns {object} null\n * @memberof LocusInfo\n */\n onFullLocus(locus, eventType) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n this.updateParticipantDeltas(locus.participants);\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n handleOneOnOneEvent(eventType) {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus) {\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusInfo(locus) {\n this.updateControls(locus.controls);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateParticipantsUrl(locus.participantsUrl);\n this.updateReplace(locus.replace);\n this.updateSelf(locus.self, locus.participants);\n this.updateLocusUrl(locus.url);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateMemberShip(locus.membership);\n this.updateIdentifiers(locus.identities);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants, self) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n }\n else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n }\n else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n }\n else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n }\n else if (this.fullState && this.fullState.removed) {\n // user has been dropped from a meeting\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.FULLSTATE_REMOVED,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n }\n else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n }\n else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * Update the deltaParticipants property of this object based on a list of\n * provided participants.\n *\n * @param {Array} [participants] - The participants to update against.\n * @returns {void}\n */\n updateParticipantDeltas(participants = []) {\n // Used to find a participant within a participants collection.\n const findParticipant = (participant, collection) =>\n collection.find((item) => item.person.id === participant.person.id);\n\n // Generates an object that indicates which state properties have changed.\n const generateDelta = (prevState = {}, newState = {}) => {\n // Setup deltas.\n const deltas = {\n audioStatus: prevState.audioStatus !== newState.audioStatus,\n videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,\n videoStatus: prevState.videoStatus !== newState.videoStatus,\n };\n\n // Clean the object\n Object.keys(deltas).forEach((key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n });\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce((collection, participant) => {\n const existingParticipant = findParticipant(participant, this.participants || []) || {};\n\n const delta = generateDelta(existingParticipant.status, participant.status);\n\n const changed = Object.keys(delta).length > 0;\n\n if (changed) {\n collection.push({\n person: participant.person,\n delta,\n });\n }\n\n return collection;\n }, []);\n }\n\n /**\n *\n * @param {Object} participants new participants object\n * @param {boolen} deltaParticpantFlag delta event\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n }\n );\n }\n\n /**\n * @param {Object} controls\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n hasEntryExitToneChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasRecordingChanged || hasRecordingPausedChanged) {\n let state = null;\n\n if (hasRecordingPausedChanged) {\n if (current.record.paused) {\n state = RECORDING_STATE.PAUSED;\n }\n else {\n // state will be `IDLE` if the recording is not active, even when there is a `pause` status change.\n state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;\n }\n }\n else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n if (hasEntryExitToneChanged) {\n const {entryExitTone} = current;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,\n {\n entryExitTone\n }\n );\n\n this.updateMeeting({entryExitTone});\n }\n\n this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl, info) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n }\n else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n }\n else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info, self) {\n if (info && !isEqual(this.info, info)) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {info: parsedInfo.current, self}\n );\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n }\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares) {\n if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n }\n );\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n }\n }\n\n /**\n * @param {String} participantsUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateParticipantsUrl(participantsUrl) {\n if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {\n this.participantsUrl = participantsUrl;\n }\n }\n\n /**\n * @param {Object} replace\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplace(replace) {\n if (replace && !isEqual(this.replace, replace)) {\n this.replace = replace;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the locus.mediaShares property\n * @param {Array} participants the locus.participants property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self, participants) {\n if (self && !isEqual(this.self, self)) {\n const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n }\n else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.isUserUnadmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.isUserAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n this.self = self;\n }\n else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n url\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * @param {Object} membership\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMemberShip(membership) {\n if (membership && !isEqual(this.membership, membership)) {\n this.membership = membership;\n }\n }\n\n /**\n * @param {Array} identities\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateIdentifiers(identities) {\n if (identities && !isEqual(this.identities, identities)) {\n this.identities = identities;\n }\n }\n}\n"],"mappings":"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"}
@@ -63,7 +63,9 @@ SelfUtils.parse = function (self, deviceId) {
63
63
  removed: self.removed,
64
64
  roles: SelfUtils.getRoles(self),
65
65
  isUserUnadmitted: self.state === _constants._IDLE_ && (joinedWith === null || joinedWith === void 0 ? void 0 : (_joinedWith$intent = joinedWith.intent) === null || _joinedWith$intent === void 0 ? void 0 : _joinedWith$intent.type) === _constants._WAIT_,
66
- layout: SelfUtils.getLayout(self)
66
+ layout: SelfUtils.getLayout(self),
67
+ canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),
68
+ isSharingBlocked: SelfUtils.isSharingBlocked(self)
67
69
  };
68
70
  }
69
71
 
@@ -88,6 +90,14 @@ SelfUtils.getRoles = function (self) {
88
90
  }, []);
89
91
  };
90
92
 
93
+ SelfUtils.canNotViewTheParticipantList = function (self) {
94
+ return !!(self !== null && self !== void 0 && self.canNotViewTheParticipantList);
95
+ };
96
+
97
+ SelfUtils.isSharingBlocked = function (self) {
98
+ return !!(self !== null && self !== void 0 && self.isSharingBlocked);
99
+ };
100
+
91
101
  SelfUtils.getSelves = function (oldSelf, newSelf, deviceId) {
92
102
  var previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);
93
103
  var current = newSelf && SelfUtils.parse(newSelf, deviceId);
@@ -105,6 +115,8 @@ SelfUtils.getSelves = function (oldSelf, newSelf, deviceId) {
105
115
  updates.audioStateChange = (previous === null || previous === void 0 ? void 0 : previous.currentMediaStatus.audio) !== current.currentMediaStatus.audio;
106
116
  updates.videoStateChange = (previous === null || previous === void 0 ? void 0 : previous.currentMediaStatus.video) !== current.currentMediaStatus.video;
107
117
  updates.shareStateChange = (previous === null || previous === void 0 ? void 0 : previous.currentMediaStatus.share) !== current.currentMediaStatus.share;
118
+ updates.canNotViewTheParticipantListChanged = (previous === null || previous === void 0 ? void 0 : previous.canNotViewTheParticipantList) !== current.canNotViewTheParticipantList;
119
+ updates.isSharingBlockedChanged = (previous === null || previous === void 0 ? void 0 : previous.isSharingBlocked) !== current.isSharingBlocked;
108
120
  return {
109
121
  previous: previous,
110
122
  current: current,
@@ -1 +1 @@
1
- {"version":3,"names":["SelfUtils","PSTN_DEVICE_TYPE","parse","self","deviceId","joinedWith","devices","find","device","url","pstnDevices","filter","deviceType","remoteMuted","getRemoteMuted","unmuteAllowed","getUnmuteAllowed","localAudioUnmuteRequested","getLocalAudioUnmuteRequested","localAudioUnmuteRequired","getLocalAudioUnmuteRequired","lastModified","getLastModified","modifiedBy","getModifiedBy","guest","moderator","mediaStatus","getStatus","status","state","currentMediaStatus","getMediaStatus","mediaSessions","creator","isCreator","selfId","id","selfIdentity","getSelfIdentity","selfUrl","removed","roles","getRoles","isUserUnadmitted","_IDLE_","intent","type","_WAIT_","layout","getLayout","controls","layouts","undefined","role","reduce","hasRole","push","getSelves","oldSelf","newSelf","previous","current","updates","isUserAdmitted","isMutedByOthersChanged","mutedByOthersChanged","localAudioUnmuteRequestedByServer","localAudioUnmuteRequiredByServer","moderatorChanged","isMediaInactiveOrReleased","wasMediaInactiveOrReleased","isUserObserving","isDeviceObserving","layoutChanged","isMediaInactive","audioStateChange","audio","videoStateChange","video","shareStateChange","share","isJoined","_JOINED_","previousMediaStatus","MEDIA_STATE","inactive","direction","meta","person","muted","requestedToUnmute","disallowUnmute","audioStatus","videoStatus","slides","videoSlidesStatus","changedSelf","_LEFT_","reason","MEETING_END_REASON","INACTIVE","MEDIA_RELEASED","isLocusUserUnadmitted","check","isLocusUserAdmitted","ParameterError","_MOVE_MEDIA_","_OBSERVE_","getSipUrl","partner","sipUri","_CALL_","sipUrl","media","mediaType","AUDIO","mediaContent","MediaContent","main","VIDEO"],"sources":["selfUtils.js"],"sourcesContent":["\nimport {\n _IDLE_,\n _JOINED_,\n _CALL_,\n _WAIT_,\n _MOVE_MEDIA_,\n _OBSERVE_,\n _LEFT_,\n MEETING_END_REASON,\n MEDIA_STATE,\n AUDIO,\n VIDEO,\n MediaContent\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst SelfUtils = {};\nconst PSTN_DEVICE_TYPE = 'PROVISIONAL';\n\n/**\n * parses the relevant values for self: muted, guest, moderator, mediaStatus, state, joinedWith, pstnDevices, creator, id\n * @param {Object} self\n * @param {String} deviceId\n * @returns {undefined}\n */\nSelfUtils.parse = (self, deviceId) => {\n if (self) {\n const joinedWith = self.devices.find((device) => deviceId === device.url);\n const pstnDevices = self.devices.filter((device) => PSTN_DEVICE_TYPE === device.deviceType);\n\n return {\n remoteMuted: SelfUtils.getRemoteMuted(self),\n unmuteAllowed: SelfUtils.getUnmuteAllowed(self),\n localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),\n localAudioUnmuteRequired: SelfUtils.getLocalAudioUnmuteRequired(self),\n lastModified: SelfUtils.getLastModified(self),\n modifiedBy: SelfUtils.getModifiedBy(self),\n guest: self.guest,\n moderator: self.moderator,\n // cumulative media stats\n mediaStatus: SelfUtils.getStatus(self.status),\n // TODO: what should be the status if user has refreshed the page,\n // check the joinedWith parameter and communicate to the user\n state: self.state,\n // TODO: give a proper name . With same device as login or different login`\n // Some times we might have joined with both mobile and web\n joinedWith,\n pstnDevices,\n // current media stats is for the current device who has joined\n currentMediaStatus: SelfUtils.getMediaStatus(\n joinedWith?.mediaSessions\n ),\n creator: self.isCreator, // check if its used,\n selfId: self.id,\n selfIdentity: SelfUtils.getSelfIdentity(self),\n selfUrl: self.url,\n removed: self.removed,\n roles: SelfUtils.getRoles(self),\n isUserUnadmitted: self.state === _IDLE_ && joinedWith?.intent?.type === _WAIT_,\n layout: SelfUtils.getLayout(self)\n };\n }\n\n return null;\n};\n\nSelfUtils.getLayout = (self) => (Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined);\n\nSelfUtils.getRoles = (self) => (self?.controls?.role?.roles || []).reduce((roles, role) => {\n if (role.hasRole) {\n roles.push(role.type);\n }\n\n return roles;\n}, []);\n\nSelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {\n const previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);\n const current = newSelf && SelfUtils.parse(newSelf, deviceId);\n const updates = {};\n\n updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);\n updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);\n updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);\n updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(previous, current);\n updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(previous, current);\n updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);\n updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);\n updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);\n updates.layoutChanged = SelfUtils.layoutChanged(previous, current);\n\n updates.isMediaInactive = SelfUtils.isMediaInactive(previous, current);\n updates.audioStateChange = previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;\n updates.videoStateChange = previous?.currentMediaStatus.video !== current.currentMediaStatus.video;\n updates.shareStateChange = previous?.currentMediaStatus.share !== current.currentMediaStatus.share;\n\n return {\n previous,\n current,\n updates\n };\n};\n\n/**\n * Checks if user has joined the meeting\n * @param {Object} self\n * @returns {boolean} isJoined\n*/\nSelfUtils.isJoined = (self) => self?.state === _JOINED_;\n\n/**\n * Validate if the Meeting Layout Controls Layout has changed.\n *\n * @param {Self} previous - Previous self state\n * @param {Self} current - Current self state [per event]\n * @returns {boolean} - If the MEeting Layout Controls Layout has changed.\n */\nSelfUtils.layoutChanged = (previous, current) => current?.layout && previous?.layout !== current?.layout;\n\n\nSelfUtils.isMediaInactive = (previous, current) => {\n if (\n previous &&\n previous.joinedWith &&\n previous.joinedWith.mediaSessions &&\n current &&\n current.joinedWith &&\n current.joinedWith.mediaSessions\n ) {\n const previousMediaStatus = SelfUtils.getMediaStatus(\n previous.joinedWith.mediaSessions\n );\n const currentMediaStatus = SelfUtils.getMediaStatus(\n current.joinedWith.mediaSessions\n );\n\n if (\n previousMediaStatus.audio && currentMediaStatus.audio &&\n previousMediaStatus.audio.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.audio.state === MEDIA_STATE.inactive &&\n currentMediaStatus.audio.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.video && currentMediaStatus.video &&\n previousMediaStatus.video.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.video.state === MEDIA_STATE.inactive &&\n currentMediaStatus.video.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.share && currentMediaStatus.share &&\n previousMediaStatus.share.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.share.state === MEDIA_STATE.inactive &&\n currentMediaStatus.share.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n return false;\n }\n\n return false;\n};\n\nSelfUtils.getLastModified = (self) => {\n if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.lastModified) {\n return null;\n }\n\n return self.controls.audio.meta.lastModified;\n};\n\nSelfUtils.getModifiedBy = (self) => {\n if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.modifiedBy) {\n return null;\n }\n\n return self.controls.audio.meta.modifiedBy;\n};\n\n/**\n * get the id from the self object\n * @param {Object} self\n * @returns {String}\n */\nSelfUtils.getSelfIdentity = (self) => {\n if (!self && !self.person) {\n return null;\n }\n\n return self.person.id;\n};\n\n/**\n * get the \"remote mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\nSelfUtils.getRemoteMuted = (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return self.controls.audio.muted;\n};\n\nSelfUtils.getLocalAudioUnmuteRequested = (self) => !!self?.controls?.audio?.requestedToUnmute;\n\nSelfUtils.getUnmuteAllowed = (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return !self.controls.audio.disallowUnmute;\n};\n\n\nSelfUtils.getLocalAudioUnmuteRequired = (self) => !!self?.controls?.audio?.localAudioUnmuteRequired;\n\nSelfUtils.getStatus = (status) => ({\n audio: status.audioStatus,\n video: status.videoStatus,\n slides: status.videoSlidesStatus\n});\n\n\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\nSelfUtils.wasMediaInactiveOrReleased = (oldSelf = {}, changedSelf) => oldSelf.joinedWith && oldSelf.joinedWith.state === _JOINED_ && changedSelf.joinedWith.state === _LEFT_ &&\n (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE || changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED);\n\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusUserUnadmitted = (check) => check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusUserAdmitted = (check) => check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;\n\n/**\n * @param {Object} self\n * @returns {Boolean}\n * @throws {Error} when self is undefined\n */\nSelfUtils.isUserUnadmitted = (self) => {\n if (!self) {\n throw new ParameterError('self must be defined to determine if self is unadmitted as guest.');\n }\n\n return SelfUtils.isLocusUserUnadmitted(self);\n};\n\nSelfUtils.moderatorChanged = (oldSelf, changedSelf) => {\n if (!oldSelf) {\n return true;\n }\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self transitioned moderator status.');\n }\n\n return oldSelf.moderator !== changedSelf.moderator;\n};\n\n\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\nSelfUtils.isDeviceObserving = (oldSelf, changedSelf) => oldSelf && oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ && changedSelf && changedSelf.joinedWith?.intent?.type === _OBSERVE_;\n\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\nSelfUtils.isUserAdmitted = (oldSelf, changedSelf) => {\n if (!oldSelf) {\n // if there was no previous locus, it couldn't have been admitted yet\n return false;\n }\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self transitioned to admitted as guest.');\n }\n\n return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);\n};\n\nSelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self was muted by others.');\n }\n\n if (!oldSelf || (oldSelf.remoteMuted === null)) {\n if (changedSelf.remoteMuted) {\n return true; // this happens when mute on-entry is enabled\n }\n\n // we don't want to be sending the 'meeting:self:unmutedByOthers' notification on meeting join\n return false;\n }\n\n return (changedSelf.remoteMuted !== null) &&\n ((oldSelf.remoteMuted !== changedSelf.remoteMuted) || (changedSelf.remoteMuted && (oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed)));\n};\n\nSelfUtils.localAudioUnmuteRequestedByServer = (oldSelf = {}, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self received request to unmute.');\n }\n\n return changedSelf.localAudioUnmuteRequested && !oldSelf.localAudioUnmuteRequested;\n};\n\n\nSelfUtils.localAudioUnmuteRequiredByServer = (oldSelf = {}, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if localAudioUnmuteRequired changed.');\n }\n\n return !changedSelf.remoteMuted && changedSelf.localAudioUnmuteRequired && (oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired);\n};\n\n/**\n * extract the sipUrl from the partner\n * @param {Object} partner\n * @param {Object} info\n * @returns {Object}\n */\n\nSelfUtils.getSipUrl = (partner, type, sipUri) => {\n // For webex meeting the sipUrl gets updated in info parser\n if (partner && type === _CALL_) {\n return {sipUri: partner.person.sipUrl || partner.person.id};\n }\n\n return {sipUri};\n};\n\nSelfUtils.getMediaStatus = (mediaSessions = []) => {\n const mediaStatus = {\n audio: {},\n video: {},\n share: {}\n };\n\n mediaStatus.audio = mediaSessions.find((media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main);\n mediaStatus.video = mediaSessions.find((media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main);\n mediaStatus.share = mediaSessions.find((media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides);\n\n return mediaStatus;\n};\n\n\nexport default SelfUtils;\n"],"mappings":"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"}
1
+ {"version":3,"names":["SelfUtils","PSTN_DEVICE_TYPE","parse","self","deviceId","joinedWith","devices","find","device","url","pstnDevices","filter","deviceType","remoteMuted","getRemoteMuted","unmuteAllowed","getUnmuteAllowed","localAudioUnmuteRequested","getLocalAudioUnmuteRequested","localAudioUnmuteRequired","getLocalAudioUnmuteRequired","lastModified","getLastModified","modifiedBy","getModifiedBy","guest","moderator","mediaStatus","getStatus","status","state","currentMediaStatus","getMediaStatus","mediaSessions","creator","isCreator","selfId","id","selfIdentity","getSelfIdentity","selfUrl","removed","roles","getRoles","isUserUnadmitted","_IDLE_","intent","type","_WAIT_","layout","getLayout","canNotViewTheParticipantList","isSharingBlocked","controls","layouts","undefined","role","reduce","hasRole","push","getSelves","oldSelf","newSelf","previous","current","updates","isUserAdmitted","isMutedByOthersChanged","mutedByOthersChanged","localAudioUnmuteRequestedByServer","localAudioUnmuteRequiredByServer","moderatorChanged","isMediaInactiveOrReleased","wasMediaInactiveOrReleased","isUserObserving","isDeviceObserving","layoutChanged","isMediaInactive","audioStateChange","audio","videoStateChange","video","shareStateChange","share","canNotViewTheParticipantListChanged","isSharingBlockedChanged","isJoined","_JOINED_","previousMediaStatus","MEDIA_STATE","inactive","direction","meta","person","muted","requestedToUnmute","disallowUnmute","audioStatus","videoStatus","slides","videoSlidesStatus","changedSelf","_LEFT_","reason","MEETING_END_REASON","INACTIVE","MEDIA_RELEASED","isLocusUserUnadmitted","check","isLocusUserAdmitted","ParameterError","_MOVE_MEDIA_","_OBSERVE_","getSipUrl","partner","sipUri","_CALL_","sipUrl","media","mediaType","AUDIO","mediaContent","MediaContent","main","VIDEO"],"sources":["selfUtils.js"],"sourcesContent":["\nimport {\n _IDLE_,\n _JOINED_,\n _CALL_,\n _WAIT_,\n _MOVE_MEDIA_,\n _OBSERVE_,\n _LEFT_,\n MEETING_END_REASON,\n MEDIA_STATE,\n AUDIO,\n VIDEO,\n MediaContent\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst SelfUtils = {};\nconst PSTN_DEVICE_TYPE = 'PROVISIONAL';\n\n/**\n * parses the relevant values for self: muted, guest, moderator, mediaStatus, state, joinedWith, pstnDevices, creator, id\n * @param {Object} self\n * @param {String} deviceId\n * @returns {undefined}\n */\nSelfUtils.parse = (self, deviceId) => {\n if (self) {\n const joinedWith = self.devices.find((device) => deviceId === device.url);\n const pstnDevices = self.devices.filter((device) => PSTN_DEVICE_TYPE === device.deviceType);\n\n return {\n remoteMuted: SelfUtils.getRemoteMuted(self),\n unmuteAllowed: SelfUtils.getUnmuteAllowed(self),\n localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),\n localAudioUnmuteRequired: SelfUtils.getLocalAudioUnmuteRequired(self),\n lastModified: SelfUtils.getLastModified(self),\n modifiedBy: SelfUtils.getModifiedBy(self),\n guest: self.guest,\n moderator: self.moderator,\n // cumulative media stats\n mediaStatus: SelfUtils.getStatus(self.status),\n // TODO: what should be the status if user has refreshed the page,\n // check the joinedWith parameter and communicate to the user\n state: self.state,\n // TODO: give a proper name . With same device as login or different login`\n // Some times we might have joined with both mobile and web\n joinedWith,\n pstnDevices,\n // current media stats is for the current device who has joined\n currentMediaStatus: SelfUtils.getMediaStatus(\n joinedWith?.mediaSessions\n ),\n creator: self.isCreator, // check if its used,\n selfId: self.id,\n selfIdentity: SelfUtils.getSelfIdentity(self),\n selfUrl: self.url,\n removed: self.removed,\n roles: SelfUtils.getRoles(self),\n isUserUnadmitted: self.state === _IDLE_ && joinedWith?.intent?.type === _WAIT_,\n layout: SelfUtils.getLayout(self),\n canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),\n isSharingBlocked: SelfUtils.isSharingBlocked(self)\n };\n }\n\n return null;\n};\n\nSelfUtils.getLayout = (self) => (Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined);\n\nSelfUtils.getRoles = (self) => (self?.controls?.role?.roles || []).reduce((roles, role) => {\n if (role.hasRole) {\n roles.push(role.type);\n }\n\n return roles;\n}, []);\n\nSelfUtils.canNotViewTheParticipantList = (self) => !!self?.canNotViewTheParticipantList;\n\nSelfUtils.isSharingBlocked = (self) => !!self?.isSharingBlocked;\n\nSelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {\n const previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);\n const current = newSelf && SelfUtils.parse(newSelf, deviceId);\n const updates = {};\n\n updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);\n updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);\n updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);\n updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(previous, current);\n updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(previous, current);\n updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);\n updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);\n updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);\n updates.layoutChanged = SelfUtils.layoutChanged(previous, current);\n\n updates.isMediaInactive = SelfUtils.isMediaInactive(previous, current);\n updates.audioStateChange = previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;\n updates.videoStateChange = previous?.currentMediaStatus.video !== current.currentMediaStatus.video;\n updates.shareStateChange = previous?.currentMediaStatus.share !== current.currentMediaStatus.share;\n\n updates.canNotViewTheParticipantListChanged = previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;\n updates.isSharingBlockedChanged = previous?.isSharingBlocked !== current.isSharingBlocked;\n\n return {\n previous,\n current,\n updates\n };\n};\n\n/**\n * Checks if user has joined the meeting\n * @param {Object} self\n * @returns {boolean} isJoined\n*/\nSelfUtils.isJoined = (self) => self?.state === _JOINED_;\n\n/**\n * Validate if the Meeting Layout Controls Layout has changed.\n *\n * @param {Self} previous - Previous self state\n * @param {Self} current - Current self state [per event]\n * @returns {boolean} - If the MEeting Layout Controls Layout has changed.\n */\nSelfUtils.layoutChanged = (previous, current) => current?.layout && previous?.layout !== current?.layout;\n\n\nSelfUtils.isMediaInactive = (previous, current) => {\n if (\n previous &&\n previous.joinedWith &&\n previous.joinedWith.mediaSessions &&\n current &&\n current.joinedWith &&\n current.joinedWith.mediaSessions\n ) {\n const previousMediaStatus = SelfUtils.getMediaStatus(\n previous.joinedWith.mediaSessions\n );\n const currentMediaStatus = SelfUtils.getMediaStatus(\n current.joinedWith.mediaSessions\n );\n\n if (\n previousMediaStatus.audio && currentMediaStatus.audio &&\n previousMediaStatus.audio.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.audio.state === MEDIA_STATE.inactive &&\n currentMediaStatus.audio.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.video && currentMediaStatus.video &&\n previousMediaStatus.video.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.video.state === MEDIA_STATE.inactive &&\n currentMediaStatus.video.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.share && currentMediaStatus.share &&\n previousMediaStatus.share.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.share.state === MEDIA_STATE.inactive &&\n currentMediaStatus.share.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n return false;\n }\n\n return false;\n};\n\nSelfUtils.getLastModified = (self) => {\n if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.lastModified) {\n return null;\n }\n\n return self.controls.audio.meta.lastModified;\n};\n\nSelfUtils.getModifiedBy = (self) => {\n if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.modifiedBy) {\n return null;\n }\n\n return self.controls.audio.meta.modifiedBy;\n};\n\n/**\n * get the id from the self object\n * @param {Object} self\n * @returns {String}\n */\nSelfUtils.getSelfIdentity = (self) => {\n if (!self && !self.person) {\n return null;\n }\n\n return self.person.id;\n};\n\n/**\n * get the \"remote mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\nSelfUtils.getRemoteMuted = (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return self.controls.audio.muted;\n};\n\nSelfUtils.getLocalAudioUnmuteRequested = (self) => !!self?.controls?.audio?.requestedToUnmute;\n\nSelfUtils.getUnmuteAllowed = (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return !self.controls.audio.disallowUnmute;\n};\n\n\nSelfUtils.getLocalAudioUnmuteRequired = (self) => !!self?.controls?.audio?.localAudioUnmuteRequired;\n\nSelfUtils.getStatus = (status) => ({\n audio: status.audioStatus,\n video: status.videoStatus,\n slides: status.videoSlidesStatus\n});\n\n\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\nSelfUtils.wasMediaInactiveOrReleased = (oldSelf = {}, changedSelf) => oldSelf.joinedWith && oldSelf.joinedWith.state === _JOINED_ && changedSelf.joinedWith.state === _LEFT_ &&\n (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE || changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED);\n\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusUserUnadmitted = (check) => check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusUserAdmitted = (check) => check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;\n\n/**\n * @param {Object} self\n * @returns {Boolean}\n * @throws {Error} when self is undefined\n */\nSelfUtils.isUserUnadmitted = (self) => {\n if (!self) {\n throw new ParameterError('self must be defined to determine if self is unadmitted as guest.');\n }\n\n return SelfUtils.isLocusUserUnadmitted(self);\n};\n\nSelfUtils.moderatorChanged = (oldSelf, changedSelf) => {\n if (!oldSelf) {\n return true;\n }\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self transitioned moderator status.');\n }\n\n return oldSelf.moderator !== changedSelf.moderator;\n};\n\n\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\nSelfUtils.isDeviceObserving = (oldSelf, changedSelf) => oldSelf && oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ && changedSelf && changedSelf.joinedWith?.intent?.type === _OBSERVE_;\n\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\nSelfUtils.isUserAdmitted = (oldSelf, changedSelf) => {\n if (!oldSelf) {\n // if there was no previous locus, it couldn't have been admitted yet\n return false;\n }\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self transitioned to admitted as guest.');\n }\n\n return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);\n};\n\nSelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self was muted by others.');\n }\n\n if (!oldSelf || (oldSelf.remoteMuted === null)) {\n if (changedSelf.remoteMuted) {\n return true; // this happens when mute on-entry is enabled\n }\n\n // we don't want to be sending the 'meeting:self:unmutedByOthers' notification on meeting join\n return false;\n }\n\n return (changedSelf.remoteMuted !== null) &&\n ((oldSelf.remoteMuted !== changedSelf.remoteMuted) || (changedSelf.remoteMuted && (oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed)));\n};\n\nSelfUtils.localAudioUnmuteRequestedByServer = (oldSelf = {}, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self received request to unmute.');\n }\n\n return changedSelf.localAudioUnmuteRequested && !oldSelf.localAudioUnmuteRequested;\n};\n\n\nSelfUtils.localAudioUnmuteRequiredByServer = (oldSelf = {}, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if localAudioUnmuteRequired changed.');\n }\n\n return !changedSelf.remoteMuted && changedSelf.localAudioUnmuteRequired && (oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired);\n};\n\n/**\n * extract the sipUrl from the partner\n * @param {Object} partner\n * @param {Object} info\n * @returns {Object}\n */\n\nSelfUtils.getSipUrl = (partner, type, sipUri) => {\n // For webex meeting the sipUrl gets updated in info parser\n if (partner && type === _CALL_) {\n return {sipUri: partner.person.sipUrl || partner.person.id};\n }\n\n return {sipUri};\n};\n\nSelfUtils.getMediaStatus = (mediaSessions = []) => {\n const mediaStatus = {\n audio: {},\n video: {},\n share: {}\n };\n\n mediaStatus.audio = mediaSessions.find((media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main);\n mediaStatus.video = mediaSessions.find((media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main);\n mediaStatus.share = mediaSessions.find((media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides);\n\n return mediaStatus;\n};\n\n\nexport default SelfUtils;\n"],"mappings":"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"}
@@ -2043,6 +2043,16 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2043
2043
  });
2044
2044
  }
2045
2045
  });
2046
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, function (_ref8) {
2047
+ var entryExitTone = _ref8.entryExitTone;
2048
+
2049
+ _triggerProxy.default.trigger(_this11, {
2050
+ file: 'meeting/index',
2051
+ function: 'setupLocusControlsListener'
2052
+ }, _constants.EVENT_TRIGGERS.MEETING_ENTRY_EXIT_TONE_UPDATE, {
2053
+ entryExitTone: entryExitTone
2054
+ });
2055
+ });
2046
2056
  }
2047
2057
  /**
2048
2058
  * Set up the locus info media shares listener
@@ -2469,6 +2479,22 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2469
2479
  });
2470
2480
  }
2471
2481
  });
2482
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE, function (payload) {
2483
+ _triggerProxy.default.trigger(_this16, {
2484
+ file: 'meeting/index',
2485
+ function: 'setUpLocusInfoSelfListener'
2486
+ }, _constants.EVENT_TRIGGERS.MEETING_SELF_CANNOT_VIEW_PARTICIPANT_LIST, {
2487
+ payload: payload
2488
+ });
2489
+ });
2490
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE, function (payload) {
2491
+ _triggerProxy.default.trigger(_this16, {
2492
+ file: 'meeting/index',
2493
+ function: 'setUpLocusInfoSelfListener'
2494
+ }, _constants.EVENT_TRIGGERS.MEETING_SELF_IS_SHARING_BLOCKED, {
2495
+ payload: payload
2496
+ });
2497
+ });
2472
2498
  }
2473
2499
  /**
2474
2500
  * Add LocusInfo nested object listeners (from child to parent)
@@ -3667,10 +3693,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3667
3693
  joinOptions = options.joinOptions,
3668
3694
  audioVideoOptions = options.audioVideoOptions;
3669
3695
  return this.join(joinOptions).then(function (joinResponse) {
3670
- return _this29.getMediaStreams(mediaSettings, audioVideoOptions).then(function (_ref8) {
3671
- var _ref9 = (0, _slicedToArray2.default)(_ref8, 2),
3672
- localStream = _ref9[0],
3673
- localShare = _ref9[1];
3696
+ return _this29.getMediaStreams(mediaSettings, audioVideoOptions).then(function (_ref9) {
3697
+ var _ref10 = (0, _slicedToArray2.default)(_ref9, 2),
3698
+ localStream = _ref10[0],
3699
+ localShare = _ref10[1];
3674
3700
 
3675
3701
  return _this29.addMedia({
3676
3702
  mediaSettings: mediaSettings,
@@ -4074,7 +4100,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4074
4100
 
4075
4101
  return join;
4076
4102
  }).then( /*#__PURE__*/function () {
4077
- var _ref10 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(join) {
4103
+ var _ref11 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(join) {
4078
4104
  return _regenerator.default.wrap(function _callee3$(_context3) {
4079
4105
  while (1) {
4080
4106
  switch (_context3.prev = _context3.next) {
@@ -4119,7 +4145,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4119
4145
  }));
4120
4146
 
4121
4147
  return function (_x2) {
4122
- return _ref10.apply(this, arguments);
4148
+ return _ref11.apply(this, arguments);
4123
4149
  };
4124
4150
  }()).catch(function (error) {
4125
4151
  var _error$error;
@@ -5763,9 +5789,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5763
5789
  sendVideo: this.mediaProperties.mediaDirection.sendVideo,
5764
5790
  sendShare: this.mediaProperties.mediaDirection.sendShare
5765
5791
  };
5766
- return this.getMediaStreams(mediaDirection, _constants.VIDEO_RESOLUTIONS[level]).then(function (_ref12) {
5767
- var _ref13 = (0, _slicedToArray2.default)(_ref12, 1),
5768
- localStream = _ref13[0];
5792
+ return this.getMediaStreams(mediaDirection, _constants.VIDEO_RESOLUTIONS[level]).then(function (_ref13) {
5793
+ var _ref14 = (0, _slicedToArray2.default)(_ref13, 1),
5794
+ localStream = _ref14[0];
5769
5795
 
5770
5796
  return _this52.updateVideo({
5771
5797
  sendVideo: true,
@@ -5981,9 +6007,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5981
6007
 
5982
6008
  }, {
5983
6009
  key: "handleMediaLogging",
5984
- value: function handleMediaLogging(_ref14) {
5985
- var audioTrack = _ref14.audioTrack,
5986
- videoTrack = _ref14.videoTrack;
6010
+ value: function handleMediaLogging(_ref15) {
6011
+ var audioTrack = _ref15.audioTrack,
6012
+ videoTrack = _ref15.videoTrack;
5987
6013
 
5988
6014
  _util.default.handleVideoLogging(videoTrack);
5989
6015