@webex/plugin-meetings 2.13.0 → 2.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +12 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +14 -0
- package/dist/locus-info/index.js.map +1 -1
- package/dist/meeting/effectsState.js +328 -0
- package/dist/meeting/effectsState.js.map +1 -0
- package/dist/meeting/index.js +102 -195
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +6 -10
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/package.json +6 -6
- package/src/constants.js +1 -0
- package/src/locus-info/controlsUtils.js +11 -0
- package/src/locus-info/index.js +16 -0
- package/src/meeting/effectsState.js +206 -0
- package/src/meeting/index.js +83 -98
- package/src/meeting-info/meeting-info-v2.js +1 -4
- package/test/unit/spec/locus-info/index.js +34 -0
- package/test/unit/spec/meeting/effectsState.js +292 -0
- package/test/unit/spec/meeting/index.js +42 -200
- package/test/unit/spec/meeting-info/meetinginfov2.js +13 -2
|
@@ -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","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","current","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","LOCUSINFO","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_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","parsedInfo","InfoUtils","getInfos","MEETING_INFO_UPDATED","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","internal","device","element","getSipUrl","sipUri","moderatorChanged","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","isUnadmittedGuest","SELF_UNADMITTED_GUEST","isAdmittedGuest","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","MEDIA_STATUS_CHANGE","currentMediaStatus","audio","video","shareStatus","share","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 MediaSharesUtils from '../locus-info/mediaSharesUtils';\nimport LocusDeltaParser from '../locus-info/parser';\n\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 /**\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.getFullLocus({\n desync: true,\n locusUrl: meeting.locusUrl\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(`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 /**\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 // 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('Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.');\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 // 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 (this.parsedLocus.fullState.type === _CALL_ || this.parsedLocus.fullState.type === _SIP_BRIDGE_) {\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.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 participants.find((participant) =>\n (self && participant.identity !== self.identity) &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))) || this.partner;\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if ((this.parsedLocus.fullState.type === _CALL_) || (this.parsedLocus.fullState.type === _SIP_BRIDGE_)) {\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('Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.');\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\n if (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 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: this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_\n }\n );\n }\n else\n if (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 (this.fullState && (this.fullState.state === LOCUS.STATE.INACTIVE || this.fullState.state === LOCUS.STATE.TERMINATING)) {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating');\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 (this.compareAndUpdateFlags.compareSelfAndHost || this.compareAndUpdateFlags.compareHostAndSelf) {\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 ((this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId) && this.parsedLocus.self.moderator) {\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(\n (key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n }\n );\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce(\n (collection, participant) => {\n const existingParticipant = findParticipant(\n participant,\n this.participants || []\n ) || {};\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 *\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 },\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 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 (info && info.conversationUrl && !isEqual(this.conversationUrl, info.conversationUrl)) {\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 /**\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\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles);\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 * 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(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri);\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.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.isUnadmittedGuest) {\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.isAdmittedGuest) {\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 (parsedSelves.updates.audioStateChange || parsedSelves.updates.videoStateChange || parsedSelves.updates.shareStateChange) {\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\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;;AACA;;AACA;;AAeA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;IACqBA,S;;;;;EACnB,mBAAYC,aAAZ,EAA2BC,KAA3B,EAAkCC,SAAlC,EAA6C;IAAA;;IAAA;IAC3C;IACA,MAAKC,WAAL,GAAmB;MACjBC,MAAM,EAAE;IADS,CAAnB;IAGA,MAAKH,KAAL,GAAaA,KAAb;IACA,MAAKI,UAAL,GAAkB,KAAlB;IACA,MAAKC,qBAAL,GAA6B,EAA7B;IACA,MAAKJ,SAAL,GAAiBA,SAAjB;IACA,MAAKF,aAAL,GAAqBA,aAArB;IACA,MAAKO,WAAL,GAAmB,IAAIC,eAAJ,EAAnB;IAV2C;EAW5C;EAGD;AACF;AACA;AACA;AACA;AACA;AACA;;;;;WACE,6BAAoBC,MAApB,EAA4BC,KAA5B,EAAmCC,OAAnC,EAA4C;MAAA;;MAC1C,4BAA4CH,gBAAiBI,IAA7D;MAAA,IAAOC,MAAP,yBAAOA,MAAP;MAAA,IAAeC,WAAf,yBAAeA,WAAf;MAAA,IAA4BC,YAA5B,yBAA4BA,YAA5B;;MAEA,QAAQN,MAAR;QACE,KAAKM,YAAL;UACEJ,OAAO,CAACK,SAAR,CAAkBC,YAAlB,CAA+BP,KAA/B;UACA;;QACF,KAAKI,WAAL;UACEH,OAAO,CAACO,WAAR,GAAsB,KAAtB;UACAP,OAAO,CAACQ,kBAAR,GAA6B,KAA7B;UACA;;QACF,KAAKN,MAAL;UACEF,OAAO,CAACS,cAAR,CAAuBC,YAAvB,CAAoC;YAClCC,MAAM,EAAE,IAD0B;YAElCC,QAAQ,EAAEZ,OAAO,CAACY;UAFgB,CAApC,EAGGC,IAHH,CAGQ,UAACC,GAAD,EAAS;YACfd,OAAO,CAACK,SAAR,CAAkBU,WAAlB,CAA8BD,GAAG,CAACE,IAAlC,EADe,CAEf;YACA;;YACA,MAAI,CAACpB,WAAL,CAAiBqB,MAAjB;UACD,CARD;UASA;;QACF;UACEC,qBAAYC,MAAZ,CAAmBC,IAAnB,gFAAgGtB,MAAhG;;MApBJ;IAsBD;IAGD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,0BAAiBC,KAAjB,EAAwBC,OAAxB,EAAiC;MAAA;;MAC/B;MACA,IAAI,CAAC,KAAKJ,WAAL,CAAiByB,aAAtB,EAAqC;QACnC;QACA;QACA,KAAKzB,WAAL,CAAiByB,aAAjB,GAAiC,UAACvB,MAAD,EAASwB,UAAT,EAAwB;UACvD,MAAI,CAACC,mBAAL,CAAyBzB,MAAzB,EAAiCwB,UAAjC,EAA6CtB,OAA7C;QACD,CAFD;MAGD,CAR8B,CAS/B;;;MACA,KAAKJ,WAAL,CAAiB4B,YAAjB,CAA8BzB,KAA9B;IACD;IAGD;AACF;AACA;AACA;AACA;;;;WACE,gBAAiB;MAAA,IAAZA,KAAY,uEAAJ,EAAI;MACf,KAAK0B,OAAL,GAAe1B,KAAK,CAAC0B,OAAN,IAAiB,IAAhC;MACA,KAAKC,gBAAL,GAAwB3B,KAAK,CAACC,OAAN,IAAiB,IAAzC;MACA,KAAK2B,eAAL,GAAuB5B,KAAK,CAAC4B,eAAN,IAAyB,IAAhD;MACA,KAAKC,QAAL,GAAgB7B,KAAK,CAAC6B,QAAN,IAAkB,IAAlC;MACA,KAAKC,MAAL,GAAc9B,KAAK,CAAC8B,MAAN,IAAgB,IAA9B;MACA,KAAKC,YAAL,GAAoB/B,KAAK,CAAC+B,YAAN,IAAsB,IAA1C;MACA,KAAKC,QAAL,GAAgBhC,KAAK,CAACgC,QAAN,IAAkB,IAAlC;MACA,KAAKC,UAAL,GAAkBjC,KAAK,CAACiC,UAAN,IAAoB,IAAtC;MACA,KAAKC,UAAL,GAAkBlC,KAAK,CAACkC,UAAN,IAAoB,IAAtC;MACA,KAAKC,YAAL,GAAoBnC,KAAK,CAACmC,YAAN,IAAsB,IAA1C;MAEA;AACJ;AACA;AACA;AACA;AACA;AACA;;MAEI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;MACI,KAAKC,iBAAL,GAAyB,EAAzB,CA7Be,CA+Bf;MACA;;MACA,KAAKC,kBAAL,CAAwBrC,KAAK,CAACmC,YAA9B,EAjCe,CAkCf;;MACA,KAAKG,qBAAL,CAA2BtC,KAAK,CAACuC,eAAjC,EAAkDvC,KAAK,CAACqB,IAAxD;MACA,KAAKmB,cAAL,CAAoBxC,KAAK,CAACyC,QAA1B;MACA,KAAKC,cAAL,CAAoB1C,KAAK,CAAC2C,GAA1B;MACA,KAAKC,eAAL,CAAqB5C,KAAK,CAAC6C,SAA3B;MACA,KAAKC,iBAAL,CAAuB9C,KAAK,CAACqB,IAA7B,EAvCe,CAwCf;;MACA,KAAK0B,UAAL,CAAgB/C,KAAK,CAACgD,IAAtB,EAA4BhD,KAAK,CAACmC,YAAlC;MACA,KAAKc,cAAL,CAAoBjD,KAAK,CAACkD,IAA1B;MACA,KAAKC,iBAAL,CAAuBnD,KAAK,CAACoD,WAA7B;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,sBAAapD,KAAb,EAAoB;MAClB,KAAKgB,WAAL,CAAiBhB,KAAjB,EADkB,CAGlB;;MACA,KAAKL,UAAL,GAAkB,IAAlB;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,eAAMM,OAAN,EAAeoD,IAAf,EAAqB;MACnB,IAAOC,SAAP,GAAoBD,IAApB,CAAOC,SAAP;;MAEAnC,qBAAYC,MAAZ,CAAmBC,IAAnB,2DAA2EiC,SAA3E;;MAEA,QAAQA,SAAR;QACE,KAAKC,sBAAWC,gBAAhB;QACA,KAAKD,sBAAWE,gBAAhB;QACA,KAAKF,sBAAWG,gBAAhB;QACA,KAAKH,sBAAWI,uBAAhB;QACA,KAAKJ,sBAAWK,yBAAhB;QACA,KAAKL,sBAAWM,uBAAhB;QACA,KAAKN,sBAAWO,yBAAhB;QACA,KAAKP,sBAAWQ,YAAhB;QACA,KAAKR,sBAAWS,mBAAhB;QACA,KAAKT,sBAAWU,4BAAhB;QACA,KAAKV,sBAAWW,yBAAhB;QACA,KAAKX,sBAAWY,oBAAhB;QACA,KAAKZ,sBAAWa,aAAhB;QACA,KAAKb,sBAAWc,cAAhB;UACE,KAAKrD,WAAL,CAAiBqC,IAAI,CAACrD,KAAtB,EAA6BsD,SAA7B;UACA;;QACF,KAAKC,sBAAWe,UAAhB;UACE,KAAKC,gBAAL,CAAsBlB,IAAI,CAACrD,KAA3B,EAAkCC,OAAlC;UACA;;QAEF;UACE;UACA;UACA,KAAKsE,gBAAL,CAAsBlB,IAAI,CAACrD,KAA3B,EAAkCC,OAAlC;MAxBJ;IA0BD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,oBAAWuE,KAAX,EAAkBC,SAAlB,EAA6BC,IAA7B,EAAmC;MACjC,OAAO,KAAKC,IAAL,CAAUH,KAAV,EAAiBC,SAAjB,EAA4BC,IAA5B,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,qBAAY1E,KAAZ,EAAmBsD,SAAnB,EAA8B;MAC5B,IAAI,CAACtD,KAAL,EAAY;QACVmB,qBAAYC,MAAZ,CAAmBwD,KAAnB,CAAyB,qFAAzB;MACD;;MACD,KAAKC,uBAAL,CAA6B7E,KAAK,CAACmC,YAAnC;MACA,KAAKR,gBAAL,GAAwB3B,KAAK,CAACC,OAAN,IAAiB,IAAzC;MACA,KAAKkC,YAAL,GAAoBnC,KAAK,CAACmC,YAA1B;MACA,KAAK2C,eAAL,CAAqB9E,KAArB;MACA,KAAKqC,kBAAL,CAAwBrC,KAAK,CAACmC,YAA9B;MACA,KAAK4C,eAAL;MACA,KAAKC,mBAAL,CAAyB1B,SAAzB,EAV4B,CAW5B;;MACA,KAAKzD,WAAL,CAAiBoF,WAAjB,GAA+BjF,KAA/B;IACD,C,CAED;;IACA;AACF;AACA;AACA;AACA;;;;WACE,6BAAoBsD,SAApB,EAA+B;MAC7B,IAAI,KAAK7D,WAAL,CAAiBoD,SAAjB,CAA2BqC,IAA3B,KAAoCC,iBAApC,IAA8C,KAAK1F,WAAL,CAAiBoD,SAAjB,CAA2BqC,IAA3B,KAAoCE,uBAAtF,EAAoG;QACpG;QACE,IAAI9B,SAAS,KAAKC,sBAAWY,oBAA7B,EAAmD;UACnD;UACE,KAAKkB,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEC,kBAAOC,eALT,EAME;YACEC,cAAc,EAAE,IADlB;YAEEC,cAAc,EAAE;UAFlB,CANF;QAWD,CAfiG,CAgBlG;;;QACA,IAAIrC,SAAS,KAAKC,sBAAWC,gBAA7B,EAA+C;UAC/C;UACE,KAAK6B,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEC,kBAAOC,eALT,EAME;YACEC,cAAc,EAAE,KADlB;YAEEC,cAAc,EAAE;UAFlB,CANF;QAWD;MACF;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,sBAAa3F,KAAb,EAAoB;MAClB,KAAK8E,eAAL,CAAqB9E,KAArB;MACA,KAAKqC,kBAAL,CAAwBrC,KAAK,CAACmC,YAA9B;MACA,KAAK4C,eAAL;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,yBAAgB/E,KAAhB,EAAuB;MACrB,KAAKwC,cAAL,CAAoBxC,KAAK,CAACyC,QAA1B;MACA,KAAKH,qBAAL,CAA2BtC,KAAK,CAACuC,eAAjC,EAAkDvC,KAAK,CAACqB,IAAxD;MACA,KAAKuE,aAAL,CAAmB5F,KAAK,CAAC0B,OAAzB;MACA,KAAKkB,eAAL,CAAqB5C,KAAK,CAAC6C,SAA3B;MACA,KAAKI,cAAL,CAAoBjD,KAAK,CAACkD,IAA1B;MACA,KAAKJ,iBAAL,CAAuB9C,KAAK,CAACqB,IAA7B,EAAmCrB,KAAK,CAACgD,IAAzC;MACA,KAAKG,iBAAL,CAAuBnD,KAAK,CAACoD,WAA7B;MACA,KAAKyC,qBAAL,CAA2B7F,KAAK,CAAC4B,eAAjC;MACA,KAAKkE,aAAL,CAAmB9F,KAAK,CAAC+F,OAAzB;MACA,KAAKhD,UAAL,CAAgB/C,KAAK,CAACgD,IAAtB,EAA4BhD,KAAK,CAACmC,YAAlC;MACA,KAAKO,cAAL,CAAoB1C,KAAK,CAAC2C,GAA1B;MACA,KAAKqD,YAAL,CAAkBhG,KAAK,CAAC8B,MAAxB;MACA,KAAKmE,gBAAL,CAAsBjG,KAAK,CAAC+B,YAA5B;MACA,KAAKmE,cAAL,CAAoBlG,KAAK,CAACgC,QAA1B;MACA,KAAKmE,gBAAL,CAAsBnG,KAAK,CAACiC,UAA5B;MACA,KAAKmE,iBAAL,CAAuBpG,KAAK,CAACkC,UAA7B;MACA,KAAKmE,gBAAL,GAjBqB,CAkBrB;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,yBAAgBlE,YAAhB,EAA8Ba,IAA9B,EAAoC;MAClC,IAAI,CAACb,YAAD,IAAiBA,YAAY,CAACmE,MAAb,KAAwB,CAA7C,EAAgD;QAC9C,OAAO,IAAP;MACD;;MAED,OAAOnE,YAAY,CAACoE,IAAb,CAAkB,UAACC,WAAD;QAAA,OACtBxD,IAAI,IAAIwD,WAAW,CAACC,QAAZ,KAAyBzD,IAAI,CAACyD,QAAvC,KACHtE,YAAY,CAACmE,MAAb,IAAuB,CAAvB,IAA6BE,WAAW,CAACtB,IAAZ,KAAqBwB,iBAArB,IAA+B,CAACF,WAAW,CAACG,OADtE,CADuB;MAAA,CAAlB,KAE+E,KAAKC,OAF3F;IAGD,C,CAED;;IACA;AACF;AACA;AACA;;;;WACE,2BAAkB;MAChB,IAAK,KAAKnH,WAAL,CAAiBoD,SAAjB,CAA2BqC,IAA3B,KAAoCC,iBAArC,IAAiD,KAAK1F,WAAL,CAAiBoD,SAAjB,CAA2BqC,IAA3B,KAAoCE,uBAAzF,EAAwG;QACtG,IAAMwB,OAAO,GAAG,KAAKC,eAAL,CAAqB,KAAK1E,YAA1B,EAAwC,KAAKa,IAA7C,CAAhB;QAEA,KAAK1D,aAAL,CAAmB;UAACsH,OAAO,EAAPA;QAAD,CAAnB,EAHsG,CAKtG;QAEA;QACA;QAEA;;QAEA,IAAI,KAAK/D,SAAL,IAAkB,KAAKA,SAAL,CAAeiE,KAAf,KAAyBC,iBAAMC,KAAN,CAAYC,QAA3D,EAAqE;UACnE;UACA9F,qBAAYC,MAAZ,CAAmB8F,IAAnB,CAAwB,2EAAxB;;UACAC,iBAAQC,SAAR,CAAkB;YAChBC,KAAK,EAAE/D,kBAAUgE,YADD;YAEhB9H,SAAS,EAAE,KAAKA;UAFA,CAAlB;;UAIA,KAAK6F,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEC,kBAAO+B,eALT,EAME;YACEC,MAAM,EAAEC,+BAAoBC,aAD9B;YAEEC,WAAW,EAAE;UAFf,CANF;QAWD,CAlBD,MAoBA,IAAIf,OAAO,CAACE,KAAR,KAAkBc,yBAAcC,MAAd,CAAqBC,IAAvC,IACF,KAAKrI,WAAL,CAAiBuD,IADf,KAED,KAAKvD,WAAL,CAAiBuD,IAAjB,CAAsB8D,KAAtB,KAAgCc,yBAAcC,MAAd,CAAqBE,QAArD,IACD,KAAKtI,WAAL,CAAiBuD,IAAjB,CAAsB8D,KAAtB,KAAgCc,yBAAcC,MAAd,CAAqBG,QADpD,IAED,KAAKvI,WAAL,CAAiBuD,IAAjB,CAAsB8D,KAAtB,KAAgCc,yBAAcC,MAAd,CAAqBI,MAJnD,CAAJ,EAIgE;UAC9Dd,iBAAQC,SAAR,CAAkB;YAChBC,KAAK,EAAE/D,kBAAUgE,YADD;YAEhB9H,SAAS,EAAE,KAAKA;UAFA,CAAlB;;UAIA,KAAK6F,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEC,kBAAO+B,eALT,EAME;YACEC,MAAM,EAAEC,+BAAoBS,YAD9B;YAEEP,WAAW,EAAE,KAAKlI,WAAL,CAAiBuD,IAAjB,CAAsBmF,UAAtB,IAAoC,KAAK1I,WAAL,CAAiBuD,IAAjB,CAAsBmF,UAAtB,CAAiCrB,KAAjC,KAA2CsB;UAF9F,CANF;QAWD,CApBD,MAsBA,IAAI,KAAK3I,WAAL,CAAiBuD,IAAjB,IACF,KAAKvD,WAAL,CAAiBuD,IAAjB,CAAsB8D,KAAtB,KAAgCc,yBAAcC,MAAd,CAAqBC,IADnD,KAEHlB,OAAO,CAACE,KAAR,KAAkBc,yBAAcC,MAAd,CAAqBC,IAAvC,IACDlB,OAAO,CAACE,KAAR,KAAkBc,yBAAcC,MAAd,CAAqBE,QADtC,IAEDnB,OAAO,CAACE,KAAR,KAAkBc,yBAAcC,MAAd,CAAqBG,QAFtC,IAGDpB,OAAO,CAACE,KAAR,KAAkBc,yBAAcC,MAAd,CAAqBQ,IALnC,CAAJ,CAK6C;QAL7C,EAME;UACAlB,iBAAQC,SAAR,CAAkB;YAChBC,KAAK,EAAE/D,kBAAUgE,YADD;YAEhB9H,SAAS,EAAE,KAAKA;UAFA,CAAlB;;UAIA,KAAK6F,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEC,kBAAO+B,eALT,EAME;YACEC,MAAM,EAAEC,+BAAoBa,SAD9B;YAEEX,WAAW,EAAE;UAFf,CANF;QAWD;MACF,CA7ED,MA8EK,IAAI,KAAKlI,WAAL,CAAiBoD,SAAjB,CAA2BqC,IAA3B,KAAoCqD,oBAAxC,EAAmD;QACtD,IAAI,KAAK1F,SAAL,KAAmB,KAAKA,SAAL,CAAeiE,KAAf,KAAyBC,iBAAMC,KAAN,CAAYC,QAArC,IAAiD,KAAKpE,SAAL,CAAeiE,KAAf,KAAyBC,iBAAMC,KAAN,CAAYwB,WAAzG,CAAJ,EAA2H;UACzHrH,qBAAYC,MAAZ,CAAmB8F,IAAnB,CAAwB,uFAAxB;;UACAC,iBAAQC,SAAR,CAAkB;YAChBC,KAAK,EAAE/D,kBAAUgE,YADD;YAEhB9H,SAAS,EAAE,KAAKA;UAFA,CAAlB;;UAIA,KAAK6F,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEC,kBAAO+B,eALT,EAME;YACEC,MAAM,EAAEiB,kCAAuBC,4BADjC;YAEEf,WAAW,EAAE;UAFf,CANF;QAWD,CAjBD,MAkBK,IAAI,KAAK9E,SAAL,IAAkB,KAAKA,SAAL,CAAe8D,OAArC,EAA8C;UACjD;UACAQ,iBAAQC,SAAR,CAAkB;YAChBC,KAAK,EAAE/D,kBAAUgE,YADD;YAEhB9H,SAAS,EAAE,KAAKA;UAFA,CAAlB;;UAIA,KAAK6F,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEC,kBAAO+B,eALT,EAME;YACEC,MAAM,EAAEiB,kCAAuBE,iBADjC;YAEEhB,WAAW,EAAE;UAFf,CANF;QAWD,CAjBI,CAkBL;QACA;QAnBK,KAoBA,IAAI,KAAKlI,WAAL,CAAiBuD,IAAjB,IAAyB,KAAKvD,WAAL,CAAiBuD,IAAjB,CAAsB2D,OAAnD,EAA4D;UAC/D;UACA,KAAKtB,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEC,kBAAO+B,eALT,EAME;YACEC,MAAM,EAAEiB,kCAAuBG,YADjC;YAEEjB,WAAW,EAAE;UAFf,CANF;QAWD;MACF,CArDI,MAsDA;QACHxG,qBAAYC,MAAZ,CAAmB8F,IAAnB,CAAwB,+DAAxB;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,4BAAmB;MACjB;MACA;MACA,IAAI,KAAKtH,qBAAL,CAA2BiJ,kBAA3B,IAAiD,KAAKjJ,qBAAL,CAA2BkJ,kBAAhF,EAAoG;QAClG,KAAKD,kBAAL;MACD;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,8BAAqB;MAAA;;MACnB;MACA,IAAK,KAAKpJ,WAAL,CAAiBuD,IAAjB,CAAsB+F,YAAtB,+BAAuC,KAAKtJ,WAAL,CAAiByD,IAAxD,0DAAuC,sBAAuB8F,MAA9D,CAAD,IAA0E,KAAKvJ,WAAL,CAAiBuD,IAAjB,CAAsBiG,SAApG,EAA+G;QAC7G,KAAK5D,UAAL,CACE;UACEC,IAAI,EAAE,YADR;UAEEC,QAAQ,EAAE;QAFZ,CADF,EAKEC,kBAAO0D,0BALT,EAME;UACEC,aAAa,EAAE;QADjB,CANF;MAUD,CAXD,MAYK;QACH,KAAK9D,UAAL,CACE;UACEC,IAAI,EAAE,YADR;UAEEC,QAAQ,EAAE;QAFZ,CADF,EAKEC,kBAAO0D,0BALT,EAME;UACEC,aAAa,EAAE;QADjB,CANF;MAUD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,mCAA2C;MAAA;;MAAA,IAAnBhH,YAAmB,uEAAJ,EAAI;;MACzC;MACA,IAAMiH,eAAe,GAAG,SAAlBA,eAAkB,CAAC5C,WAAD,EAAc6C,UAAd;QAAA,OACtBA,UAAU,CAAC9C,IAAX,CAAgB,UAAC+C,IAAD;UAAA,OAAUA,IAAI,CAACC,MAAL,CAAYC,EAAZ,KAAmBhD,WAAW,CAAC+C,MAAZ,CAAmBC,EAAhD;QAAA,CAAhB,CADsB;MAAA,CAAxB,CAFyC,CAKzC;;;MACA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,GAAmC;QAAA,IAAlCC,SAAkC,uEAAtB,EAAsB;QAAA,IAAlBC,QAAkB,uEAAP,EAAO;QACvD;QACA,IAAMC,MAAM,GAAG;UACbC,WAAW,EAAEH,SAAS,CAACG,WAAV,KAA0BF,QAAQ,CAACE,WADnC;UAEbC,iBAAiB,EAAEJ,SAAS,CAACI,iBAAV,KAAgCH,QAAQ,CAACG,iBAF/C;UAGbC,WAAW,EAAEL,SAAS,CAACK,WAAV,KAA0BJ,QAAQ,CAACI;QAHnC,CAAf,CAFuD,CAQvD;;QACA,mBAAYH,MAAZ,EAAoBI,OAApB,CACE,UAACC,GAAD,EAAS;UACP,IAAIL,MAAM,CAACK,GAAD,CAAN,KAAgB,IAApB,EAA0B;YACxB,OAAOL,MAAM,CAACK,GAAD,CAAb;UACD;QACF,CALH;QAQA,OAAOL,MAAP;MACD,CAlBD;;MAoBA,KAAKxH,iBAAL,GAAyBD,YAAY,CAAC+H,MAAb,CACvB,UAACb,UAAD,EAAa7C,WAAb,EAA6B;QAC3B,IAAM2D,mBAAmB,GAAGf,eAAe,CACzC5C,WADyC,EAEzC,MAAI,CAACrE,YAAL,IAAqB,EAFoB,CAAf,IAGvB,EAHL;QAKA,IAAMiI,KAAK,GAAGX,aAAa,CAACU,mBAAmB,CAACE,MAArB,EAA6B7D,WAAW,CAAC6D,MAAzC,CAA3B;QAEA,IAAMC,OAAO,GAAI,mBAAYF,KAAZ,EAAmB9D,MAAnB,GAA4B,CAA7C;;QAEA,IAAIgE,OAAJ,EAAa;UACXjB,UAAU,CAACkB,IAAX,CAAgB;YACdhB,MAAM,EAAE/C,WAAW,CAAC+C,MADN;YAEda,KAAK,EAALA;UAFc,CAAhB;QAID;;QAED,OAAOf,UAAP;MACD,CAnBsB,EAmBpB,EAnBoB,CAAzB;IAqBD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,4BAAmBlH,YAAnB,EAAiC;MAAA;;MAC/B,KAAKkD,UAAL,CACE;QACEC,IAAI,EAAE,YADR;QAEEC,QAAQ,EAAE;MAFZ,CADF,EAKEC,kBAAOgF,8BALT,EAME;QACErI,YAAY,EAAZA,YADF;QAEEsI,WAAW,EAAE,KAAKhL,WAAL,CAAiBgD,QAAjB,8BAA6B,KAAKhD,WAAL,CAAiBgD,QAAjB,CAA0BiI,MAAvD,0DAA6B,sBAAkCC,UAA/D,CAFf;QAGE5B,YAAY,EAAE,KAAKtJ,WAAL,CAAiBuD,IAAjB,IAAyB,KAAKvD,WAAL,CAAiBuD,IAAjB,CAAsB+F,YAH/D;QAIE6B,MAAM,EAAE,KAAKnL,WAAL,CAAiBuD,IAAjB,IAAyB,KAAKvD,WAAL,CAAiBuD,IAAjB,CAAsB4H,MAJzD;QAKE5B,MAAM,EAAE,KAAKvJ,WAAL,CAAiByD,IAAjB,IAAyB,KAAKzD,WAAL,CAAiByD,IAAjB,CAAsB8F;MALzD,CANF;IAcD;IAED;AACF;AACA;AACA;AACA;;;;WACE,wBAAevG,QAAf,EAAyB;MACvB,IAAIA,QAAQ,IAAI,CAAC,uBAAQ,KAAKA,QAAb,EAAuBA,QAAvB,CAAjB,EAAmD;QACjD,KAAKhD,WAAL,CAAiBgD,QAAjB,GAA4BoI,uBAAcC,KAAd,CAAoBrI,QAApB,CAA5B;;QACA,4BAOIoI,uBAAcE,WAAd,CAA0B,KAAKtI,QAA/B,EAAyCA,QAAzC,CAPJ;QAAA,mDACEuI,OADF;QAAA,IAEIC,mBAFJ,0BAEIA,mBAFJ;QAAA,IAGIC,yBAHJ,0BAGIA,yBAHJ;QAAA,IAIIC,0BAJJ,0BAIIA,0BAJJ;QAAA,IAMEC,OANF,yBAMEA,OANF;;QASA,IAAIH,mBAAmB,IAAIC,yBAA3B,EAAsD;UACpD,IAAIpE,KAAK,GAAG,IAAZ;;UAEA,IAAIoE,yBAAJ,EAA+B;YAC7B,IAAIE,OAAO,CAACV,MAAR,CAAeW,MAAnB,EAA2B;cACzBvE,KAAK,GAAGwE,2BAAgBC,MAAxB;YACD,CAFD,MAGK;cACH;cACAzE,KAAK,GAAGsE,OAAO,CAACV,MAAR,CAAec,SAAf,GAA2BF,2BAAgBG,OAA3C,GAAqDH,2BAAgBjD,IAA7E;YACD;UACF,CARD,MASK,IAAI4C,mBAAJ,EAAyB;YAC5BnE,KAAK,GAAGsE,OAAO,CAACV,MAAR,CAAec,SAAf,GAA2BF,2BAAgBI,SAA3C,GAAuDJ,2BAAgBjD,IAA/E;UACD;;UAED,KAAKhD,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiBoG,0BALnB,EAME;YACE9E,KAAK,EAALA,KADF;YAEE6D,UAAU,EAAES,OAAO,CAACV,MAAR,CAAeC,UAF7B;YAGEkB,YAAY,EAAET,OAAO,CAACV,MAAR,CAAemB;UAH/B,CANF;QAYD;;QAED,IAAIV,0BAAJ,EAAgC;UAC9B,IAAOW,mBAAP,GAA8BV,OAAO,CAACW,gBAAtC,CAAOD,mBAAP;UAEA,KAAKzG,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiBwG,kCALnB,EAME;YACEF,mBAAmB,EAAnBA;UADF,CANF;QAUD;;QAED,KAAKrJ,QAAL,GAAgBA,QAAhB;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,+BAAsBF,eAAtB,EAAuClB,IAAvC,EAA6C;MAC3C,IAAIkB,eAAe,IAAI,CAAC,uBAAQ,KAAKA,eAAb,EAA8BA,eAA9B,CAAxB,EAAwE;QACtE,KAAKA,eAAL,GAAuBA,eAAvB;QACA,KAAKjD,aAAL,CAAmB;UAACiD,eAAe,EAAfA;QAAD,CAAnB;MACD,CAHD,MAIK,IAAIlB,IAAI,IAAIA,IAAI,CAACkB,eAAb,IAAgC,CAAC,uBAAQ,KAAKA,eAAb,EAA8BlB,IAAI,CAACkB,eAAnC,CAArC,EAA0F;QAC7F,KAAKA,eAAL,GAAuBlB,IAAI,CAACkB,eAA5B;QACA,KAAKjD,aAAL,CAAmB;UAACiD,eAAe,EAAElB,IAAI,CAACkB;QAAvB,CAAnB;MACD;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,uBAAcb,OAAd,EAAuB;MACrB,IAAIA,OAAO,IAAI,CAAC,uBAAQ,KAAKA,OAAb,EAAsBA,OAAtB,CAAhB,EAAgD;QAC9C,KAAKA,OAAL,GAAeA,OAAf;MACD;IACF;IAGD;AACF;AACA;AACA;AACA;;;;WACE,yBAAgBmB,SAAhB,EAA2B;MACzB,IAAIA,SAAS,IAAI,CAAC,uBAAQ,KAAKA,SAAb,EAAwBA,SAAxB,CAAlB,EAAsD;QACpD,IAAMoJ,MAAM,GAAGC,mBAAUC,YAAV,CAAuB,KAAKtJ,SAA5B,EAAuCA,SAAvC,CAAf;;QAEA,KAAKvD,aAAL,CAAmB2M,MAAM,CAACb,OAA1B;;QAEA,IAAIa,MAAM,CAACjB,OAAP,CAAeoB,qBAAnB,EAA0C;UACxC,KAAK/G,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiB6G,+BALnB,EAME;YACEC,aAAa,EAAEL,MAAM,CAACM,QAAP,IAAmBN,MAAM,CAACM,QAAP,CAAgBC,YADpD;YAEEC,YAAY,EAAER,MAAM,CAACb,OAAP,CAAeoB;UAF/B,CANF;QAWD;;QAED,IAAIP,MAAM,CAACjB,OAAP,CAAe0B,oBAAnB,EAAyC;UACvC,KAAKrH,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiBmH,sBALnB,EAME;YACEzH,IAAI,EAAE+G,MAAM,CAACb,OAAP,CAAelG;UADvB,CANF;QAUD;;QACD,KAAKzF,WAAL,CAAiBoD,SAAjB,GAA6BoJ,MAAM,CAACb,OAApC;QACA,KAAKvI,SAAL,GAAiBA,SAAjB;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,wBAAeK,IAAf,EAAqB;MACnB,IAAIA,IAAI,IAAI,CAAC,uBAAQ,KAAKA,IAAb,EAAmBA,IAAnB,CAAb,EAAuC;QACrC,IAAM0J,WAAW,GAAGC,mBAAUC,QAAV,CAAmB,KAAK5J,IAAxB,EAA8BA,IAA9B,CAApB;;QAEA,KAAK5D,aAAL,CAAmBsN,WAAW,CAACxB,OAA/B;QACA,KAAK3L,WAAL,CAAiByD,IAAjB,GAAwB0J,WAAW,CAACxB,OAApC;;QACA,IAAIwB,WAAW,CAAC5B,OAAZ,CAAoB+B,SAAxB,EAAmC;UACjC,KAAKnN,qBAAL,CAA2BiJ,kBAA3B,GAAgD,IAAhD;UACA,KAAKxD,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEC,kBAAOwH,sBALT,EAME;YACEC,OAAO,EAAEL,WAAW,CAACxB,OADvB;YAEE8B,OAAO,EAAEN,WAAW,CAACL;UAFvB,CANF;QAWD;;QACD,KAAKrJ,IAAL,GAAYA,IAAZ;MACD,CApBD,MAqBK;QACH,KAAKtD,qBAAL,CAA2BiJ,kBAA3B,GAAgD,KAAhD;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,2BAAkBxH,IAAlB,EAAwB2B,IAAxB,EAA8B;MAC5B,IAAI3B,IAAI,IAAK,CAAC,uBAAQ,KAAKA,IAAb,EAAmBA,IAAnB,CAAd,EAAyC;QAAA;;QACvC,IAAM8L,KAAK,GAAGnK,IAAI,GAAGoK,mBAAUC,QAAV,CAAmBrK,IAAnB,CAAH,GAA8B,+BAAKvD,WAAL,CAAiBuD,IAAjB,gFAAuBmK,KAAvB,KAAgC,EAAhF;;QAEA,IAAMG,UAAU,GAAGC,mBAAUC,QAAV,CAAmB,KAAK/N,WAAL,CAAiB4B,IAApC,EAA0CA,IAA1C,EAAgD8L,KAAhD,CAAnB;;QAEA,KAAK9H,UAAL,CACE;UACEC,IAAI,EAAE,YADR;UAEEC,QAAQ,EAAE;QAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiBiI,oBALnB,EAME;UAACpM,IAAI,EAAEiM,UAAU,CAAClC,OAAlB;UAA2BpI,IAAI,EAAJA;QAA3B,CANF;;QASA,IAAIsK,UAAU,CAACtC,OAAX,CAAmB0C,QAAvB,EAAiC;UAC/B,KAAKrI,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiBmI,cALnB,EAMEtM,IANF;QAQD;;QACD,IAAIiM,UAAU,CAACtC,OAAX,CAAmB4C,UAAvB,EAAmC;UACjC,KAAKvI,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiBqI,gBALnB,EAMExM,IANF;QAQD;;QAED,KAAKA,IAAL,GAAYA,IAAZ;QACA,KAAK5B,WAAL,CAAiB4B,IAAjB,GAAwBiM,UAAU,CAAClC,OAAnC,CApCuC,CAqCvC;;QACA,KAAK9L,aAAL,CAAmBgO,UAAU,CAAClC,OAA9B;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,2BAAkBhI,WAAlB,EAA+B;MAC7B,IAAIA,WAAW,IAAI,CAAC,uBAAQ,KAAKA,WAAb,EAA0BA,WAA1B,CAApB,EAA4D;QAC1D,IAAM0K,iBAAiB,GAAGC,0BAAiBC,cAAjB,CAAgC,KAAK5K,WAArC,EAAkDA,WAAlD,CAA1B;;QAEA,KAAK9D,aAAL,CAAmBwO,iBAAiB,CAAC1C,OAArC;QACA,KAAK/F,UAAL,CACE;UACEC,IAAI,EAAE,YADR;UAEEC,QAAQ,EAAE;QAFZ,CADF,EAKEC,kBAAOyI,8BALT,EAME;UACE7C,OAAO,EAAE0C,iBAAiB,CAAC1C,OAD7B;UAEEmB,QAAQ,EAAEuB,iBAAiB,CAACvB;QAF9B,CANF;QAWA,KAAK9M,WAAL,CAAiB2D,WAAjB,GAA+B0K,iBAAiB,CAAC1C,OAAjD;QACA,KAAKhI,WAAL,GAAmBA,WAAnB;MACD;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,+BAAsBxB,eAAtB,EAAuC;MACrC,IAAIA,eAAe,IAAI,CAAC,uBAAQ,KAAKA,eAAb,EAA8BA,eAA9B,CAAxB,EAAwE;QACtE,KAAKA,eAAL,GAAuBA,eAAvB;MACD;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,uBAAcmE,OAAd,EAAuB;MACrB,IAAIA,OAAO,IAAI,CAAC,uBAAQ,KAAKA,OAAb,EAAsBA,OAAtB,CAAhB,EAAgD;QAC9C,KAAKA,OAAL,GAAeA,OAAf;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,oBAAW/C,IAAX,EAAiBb,YAAjB,EAA+B;MAC7B,IAAIa,IAAI,IAAI,CAAC,uBAAQ,KAAKA,IAAb,EAAmBA,IAAnB,CAAb,EAAuC;QACrC,IAAMkL,YAAY,GAAGd,mBAAUe,SAAV,CAAoB,KAAKnL,IAAzB,EAA+BA,IAA/B,EAAqC,KAAKzD,KAAL,CAAW6O,QAAX,CAAoBC,MAApB,CAA2B1L,GAAhE,CAArB;;QAEA,KAAKrD,aAAL,CAAmB4O,YAAY,CAAC9C,OAAhC;QACA,KAAK3L,WAAL,CAAiBuD,IAAjB,GAAwBkL,YAAY,CAAC9C,OAArC;QAEA,IAAMkD,OAAO,GAAG,KAAK7O,WAAL,CAAiBC,MAAjB,CAAwB,KAAKD,WAAL,CAAiBC,MAAjB,CAAwB4G,MAAxB,GAAiC,CAAzD,CAAhB;;QAEA,IAAIgI,OAAO,KAAKJ,YAAY,CAAC9C,OAAb,CAAqBtE,KAArC,EAA4C;UAC1C,KAAKrH,WAAL,CAAiBC,MAAjB,CAAwB6K,IAAxB,CAA6B2D,YAAY,CAAC9C,OAAb,CAAqBtE,KAAlD;QACD,CAVoC,CAYrC;QACA;;;QACA,IAAMmF,MAAM,GAAGmB,mBAAUmB,SAAV,CAAoB,KAAK1H,eAAL,CAAqB1E,YAArB,EAAmCa,IAAnC,CAApB,EAA8D,KAAKvD,WAAL,CAAiBoD,SAAjB,CAA2BqC,IAAzF,EAA+F,KAAKzF,WAAL,CAAiB4B,IAAjB,CAAsBmN,MAArH,CAAf;;QAEA,IAAIvC,MAAM,CAACuC,MAAX,EAAmB;UACjB,KAAKlP,aAAL,CAAmB2M,MAAnB;QACD;;QAED,IAAIiC,YAAY,CAAClD,OAAb,CAAqByD,gBAAzB,EAA2C;UACzC,KAAK7O,qBAAL,CAA2BkJ,kBAA3B,GAAgD,IAAhD;QACD,CAFD,MAGK;UACH,KAAKlJ,qBAAL,CAA2BkJ,kBAA3B,GAAgD,KAAhD;QACD;;QAED,IAAIoF,YAAY,CAAClD,OAAb,CAAqB0D,yBAAzB,EAAoD;UAClD,KAAKrJ,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiBmJ,4BALnB,EAME;YAACnH,MAAM,EAAExE,IAAI,CAACwE;UAAd,CANF;QAQD;;QAED,IAAI0G,YAAY,CAAClD,OAAb,CAAqByD,gBAAzB,EAA2C;UACzC,KAAKpJ,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiBoJ,sBALnB,EAME5L,IANF;QAQD;;QACD,IAAIkL,YAAY,CAAClD,OAAb,CAAqB6D,gCAAzB,EAA2D;UACzD,KAAKxJ,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiBsJ,qBALnB,EAME;YACEC,KAAK,EAAEb,YAAY,CAAC9C,OAAb,CAAqB4D,WAD9B;YAEEC,aAAa,EAAEf,YAAY,CAAC9C,OAAb,CAAqB6D;UAFtC,CANF;QAWD;;QACD,IAAIf,YAAY,CAAClD,OAAb,CAAqBkE,sBAAzB,EAAiD;UAC/C,KAAK7J,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiB2J,+BALnB,EAME;YACEJ,KAAK,EAAEb,YAAY,CAAC9C,OAAb,CAAqB4D,WAD9B;YAEEC,aAAa,EAAEf,YAAY,CAAC9C,OAAb,CAAqB6D;UAFtC,CANF;QAWD;;QACD,IAAIf,YAAY,CAAClD,OAAb,CAAqBoE,iCAAzB,EAA4D;UAC1D,KAAK/J,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiB6J,sBALnB,EAME,EANF;QAQD;;QACD,IAAInB,YAAY,CAAClD,OAAb,CAAqBsE,iBAAzB,EAA4C;UAC1C,KAAKjK,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiB+J,qBALnB,EAMEvM,IANF;QAQD;;QACD,IAAIkL,YAAY,CAAClD,OAAb,CAAqBwE,eAAzB,EAA0C;UACxC,KAAKnK,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiBiK,mBALnB,EAMEzM,IANF;QAQD;;QAED,IAAIkL,YAAY,CAAClD,OAAb,CAAqB0E,eAAzB,EAA0C;UACxC,KAAKrK,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiBmK,gBALnB,EAMEvC,mBAAUwC,cAAV,CAAyB5M,IAAI,CAAC6M,aAA9B,CANF;QAQD;;QAED,IAAI3B,YAAY,CAAClD,OAAb,CAAqB8E,gBAArB,IAAyC5B,YAAY,CAAClD,OAAb,CAAqB+E,gBAA9D,IAAkF7B,YAAY,CAAClD,OAAb,CAAqBgF,gBAA3G,EAA6H;UAAA;;UAC3H,KAAK3K,UAAL,CACE;YACEC,IAAI,EAAE,YADR;YAEEC,QAAQ,EAAE;UAFZ,CADF,EAKEoG,qBAAUnG,MAAV,CAAiByK,mBALnB,EAME;YACEpG,WAAW,2BAAEqE,YAAY,CAAC9C,OAAb,CAAqB8E,kBAAvB,0DAAE,sBAAyCC,KADxD;YAEEpG,WAAW,4BAAEmE,YAAY,CAAC9C,OAAb,CAAqB8E,kBAAvB,2DAAE,uBAAyCE,KAFxD;YAGEC,WAAW,4BAAEnC,YAAY,CAAC9C,OAAb,CAAqB8E,kBAAvB,2DAAE,uBAAyCI;UAHxD,CANF;QAYD;;QAGD,KAAKjL,UAAL,CACE;UACEC,IAAI,EAAE,YADR;UAEEC,QAAQ,EAAE;QAFZ,CADF,EAKEC,kBAAO+K,sBALT,EAME;UACEC,OAAO,EAAEtC,YAAY,CAAC3B,QADxB;UAEEkE,OAAO,EAAEvC,YAAY,CAAC9C;QAFxB,CANF;QAWA,KAAK3L,WAAL,CAAiBuD,IAAjB,GAAwBkL,YAAY,CAAC9C,OAArC;QACA,KAAKpI,IAAL,GAAYA,IAAZ;MACD,CAjJD,MAkJK;QACH,KAAKpD,qBAAL,CAA2BkJ,kBAA3B,GAAgD,KAAhD;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,wBAAenG,GAAf,EAAoB;MAClB,IAAIA,GAAG,IAAI,KAAKA,GAAL,KAAaA,GAAxB,EAA6B;QAC3B,KAAKA,GAAL,GAAWA,GAAX;QACA,KAAKrD,aAAL,CAAmB;UAACuB,QAAQ,EAAE8B;QAAX,CAAnB;QACA,KAAK0C,UAAL,CACE;UACEC,IAAI,EAAE,YADR;UAEEC,QAAQ,EAAE;QAFZ,CADF,EAKEC,kBAAOkL,qBALT,EAME/N,GANF;MAQD;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,sBAAab,MAAb,EAAqB;MACnB,IAAIA,MAAM,IAAI,CAAC,uBAAQ,KAAKA,MAAb,EAAqBA,MAArB,CAAf,EAA6C;QAC3C,KAAKA,MAAL,GAAcA,MAAd;MACD;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,0BAAiBC,YAAjB,EAA+B;MAC7B,IAAIA,YAAY,IAAI,CAAC,uBAAQ,KAAKA,YAAb,EAA2BA,YAA3B,CAArB,EAA+D;QAC7D,KAAKA,YAAL,GAAoBA,YAApB;MACD;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,wBAAeC,QAAf,EAAyB;MACvB,IAAIA,QAAQ,IAAI,CAAC,uBAAQ,KAAKA,QAAb,EAAuBA,QAAvB,CAAjB,EAAmD;QACjD,KAAKA,QAAL,GAAgBA,QAAhB;MACD;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,0BAAiBC,UAAjB,EAA6B;MAC3B,IAAIA,UAAU,IAAI,CAAC,uBAAQ,KAAKA,UAAb,EAAyBA,UAAzB,CAAnB,EAAyD;QACvD,KAAKA,UAAL,GAAkBA,UAAlB;MACD;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,2BAAkBC,UAAlB,EAA8B;MAC5B,IAAIA,UAAU,IAAI,CAAC,uBAAQ,KAAKA,UAAb,EAAyBA,UAAzB,CAAnB,EAAyD;QACvD,KAAKA,UAAL,GAAkBA,UAAlB;MACD;IACF;;;EAnjCoCyO,oB"}
|
|
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","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","parsedInfo","InfoUtils","getInfos","MEETING_INFO_UPDATED","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","internal","device","element","getSipUrl","sipUri","moderatorChanged","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","isUnadmittedGuest","SELF_UNADMITTED_GUEST","isAdmittedGuest","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","MEDIA_STATUS_CHANGE","currentMediaStatus","audio","video","shareStatus","share","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 MediaSharesUtils from '../locus-info/mediaSharesUtils';\nimport LocusDeltaParser from '../locus-info/parser';\n\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 /**\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.getFullLocus({\n desync: true,\n locusUrl: meeting.locusUrl\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(`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 /**\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 // 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('Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.');\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 // 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 (this.parsedLocus.fullState.type === _CALL_ || this.parsedLocus.fullState.type === _SIP_BRIDGE_) {\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.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 participants.find((participant) =>\n (self && participant.identity !== self.identity) &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))) || this.partner;\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if ((this.parsedLocus.fullState.type === _CALL_) || (this.parsedLocus.fullState.type === _SIP_BRIDGE_)) {\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('Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.');\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\n if (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 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: this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_\n }\n );\n }\n else\n if (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 (this.fullState && (this.fullState.state === LOCUS.STATE.INACTIVE || this.fullState.state === LOCUS.STATE.TERMINATING)) {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating');\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 (this.compareAndUpdateFlags.compareSelfAndHost || this.compareAndUpdateFlags.compareHostAndSelf) {\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 ((this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId) && this.parsedLocus.self.moderator) {\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(\n (key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n }\n );\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce(\n (collection, participant) => {\n const existingParticipant = findParticipant(\n participant,\n this.participants || []\n ) || {};\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 *\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, 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 (info && info.conversationUrl && !isEqual(this.conversationUrl, info.conversationUrl)) {\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 /**\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\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles);\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 * 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(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri);\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.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.isUnadmittedGuest) {\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.isAdmittedGuest) {\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 (parsedSelves.updates.audioStateChange || parsedSelves.updates.videoStateChange || parsedSelves.updates.shareStateChange) {\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\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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"}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
+
|
|
7
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
exports.default = void 0;
|
|
12
|
+
|
|
13
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
14
|
+
|
|
15
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
16
|
+
|
|
17
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
18
|
+
|
|
19
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
20
|
+
|
|
21
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
22
|
+
|
|
23
|
+
var _internalMediaCore = require("@webex/internal-media-core");
|
|
24
|
+
|
|
25
|
+
var _constants = _interopRequireDefault(require("../metrics/constants"));
|
|
26
|
+
|
|
27
|
+
var _metrics = _interopRequireDefault(require("../metrics"));
|
|
28
|
+
|
|
29
|
+
var _util = _interopRequireDefault(require("../media/util"));
|
|
30
|
+
|
|
31
|
+
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
32
|
+
|
|
33
|
+
var _constants2 = require("../constants");
|
|
34
|
+
|
|
35
|
+
/* eslint-disable no-param-reassign */
|
|
36
|
+
var createEffectsState = function createEffectsState(type) {
|
|
37
|
+
_loggerProxy.default.logger.info("Meeting:effectState#createEffectsState --> creating effectsState for effect ".concat(type));
|
|
38
|
+
|
|
39
|
+
return new EffectsState(type);
|
|
40
|
+
};
|
|
41
|
+
/* The purpose of this class is to manage the effects state(for eg., BNR).
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
var EffectsState = /*#__PURE__*/function () {
|
|
46
|
+
function EffectsState(type) {
|
|
47
|
+
(0, _classCallCheck2.default)(this, EffectsState);
|
|
48
|
+
this.effectType = type;
|
|
49
|
+
this.state = {
|
|
50
|
+
bnr: {
|
|
51
|
+
enabled: _constants2.BNR_STATUS.NOT_ENABLED
|
|
52
|
+
},
|
|
53
|
+
callToWebrtcBNRInProgress: false
|
|
54
|
+
}; // these 2 hold the resolve, reject methods for the promise we returned to the client in last handleClientRequest() call
|
|
55
|
+
|
|
56
|
+
this.pendingPromiseResolve = null;
|
|
57
|
+
this.pendingPromiseReject = null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* @memberof EffectsState
|
|
61
|
+
* @param {Boolean} [isEnable] true for enableBNR, false for disableBNR request
|
|
62
|
+
* @param {Object} [meeting] the meeting object
|
|
63
|
+
* @returns {Promise}
|
|
64
|
+
*/
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
(0, _createClass2.default)(EffectsState, [{
|
|
68
|
+
key: "handleClientRequest",
|
|
69
|
+
value: function () {
|
|
70
|
+
var _handleClientRequest = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(isEnable, meeting) {
|
|
71
|
+
var _this = this;
|
|
72
|
+
|
|
73
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
74
|
+
while (1) {
|
|
75
|
+
switch (_context.prev = _context.next) {
|
|
76
|
+
case 0:
|
|
77
|
+
return _context.abrupt("return", new _promise.default(function (resolve, reject) {
|
|
78
|
+
if (_this.pendingPromiseResolve) {
|
|
79
|
+
// resolve the last promise we returned to the client as the client has issued a new request that has superseded the previous one
|
|
80
|
+
_this.pendingPromiseResolve();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
_this.pendingPromiseResolve = resolve;
|
|
84
|
+
_this.pendingPromiseReject = reject;
|
|
85
|
+
if (isEnable) _this.enableBNR(meeting);else _this.disableBNR(meeting);
|
|
86
|
+
}));
|
|
87
|
+
|
|
88
|
+
case 1:
|
|
89
|
+
case "end":
|
|
90
|
+
return _context.stop();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}, _callee);
|
|
94
|
+
}));
|
|
95
|
+
|
|
96
|
+
function handleClientRequest(_x, _x2) {
|
|
97
|
+
return _handleClientRequest.apply(this, arguments);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return handleClientRequest;
|
|
101
|
+
}()
|
|
102
|
+
/**
|
|
103
|
+
* Internal API to return status of BNR
|
|
104
|
+
* @memberof EffectsState
|
|
105
|
+
* @returns {Boolean}
|
|
106
|
+
* @public
|
|
107
|
+
* @memberof Meeting
|
|
108
|
+
*/
|
|
109
|
+
|
|
110
|
+
}, {
|
|
111
|
+
key: "isBnrEnabled",
|
|
112
|
+
value: function isBnrEnabled() {
|
|
113
|
+
return this.state.bnr.enabled === _constants2.BNR_STATUS.ENABLED;
|
|
114
|
+
}
|
|
115
|
+
}, {
|
|
116
|
+
key: "resolvePromise",
|
|
117
|
+
value: function resolvePromise() {
|
|
118
|
+
if (this.pendingPromiseResolve) {
|
|
119
|
+
this.pendingPromiseResolve(true);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
this.pendingPromiseResolve = null;
|
|
123
|
+
this.pendingPromiseReject = null;
|
|
124
|
+
}
|
|
125
|
+
}, {
|
|
126
|
+
key: "rejectPromise",
|
|
127
|
+
value: function rejectPromise(e) {
|
|
128
|
+
if (this.pendingPromiseReject) {
|
|
129
|
+
this.pendingPromiseReject(e);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
this.pendingPromiseResolve = null;
|
|
133
|
+
this.pendingPromiseReject = null;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* enableBNR API
|
|
137
|
+
* @param {Object} meeting the meeting object
|
|
138
|
+
* @returns {Promise<Boolean>}
|
|
139
|
+
* @public
|
|
140
|
+
* @memberof EffectsState
|
|
141
|
+
*/
|
|
142
|
+
|
|
143
|
+
}, {
|
|
144
|
+
key: "enableBNR",
|
|
145
|
+
value: function () {
|
|
146
|
+
var _enableBNR = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(meeting) {
|
|
147
|
+
var bnr, audioStream;
|
|
148
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
149
|
+
while (1) {
|
|
150
|
+
switch (_context2.prev = _context2.next) {
|
|
151
|
+
case 0:
|
|
152
|
+
_loggerProxy.default.logger.info('Meeting:effectState#enableBNR. Enable BNR called');
|
|
153
|
+
|
|
154
|
+
if (!this.isBnrEnabled()) {
|
|
155
|
+
_context2.next = 4;
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
_loggerProxy.default.logger.warn('Meeting:index#enableBNR. BNR is already enabled');
|
|
160
|
+
|
|
161
|
+
return _context2.abrupt("return", this.resolvePromise());
|
|
162
|
+
|
|
163
|
+
case 4:
|
|
164
|
+
if (!this.state.callToWebrtcBNRInProgress) {
|
|
165
|
+
_context2.next = 7;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
_loggerProxy.default.logger.warn('Meeting:effectState#enableBNR. Call to WebRTC in progress, we need to wait for it to complete');
|
|
170
|
+
|
|
171
|
+
return _context2.abrupt("return", this.resolvePromise());
|
|
172
|
+
|
|
173
|
+
case 7:
|
|
174
|
+
bnr = this.state.bnr;
|
|
175
|
+
_context2.prev = 8;
|
|
176
|
+
bnr.enabled = _constants2.BNR_STATUS.SHOULD_ENABLE;
|
|
177
|
+
this.state.callToWebrtcBNRInProgress = true;
|
|
178
|
+
audioStream = _util.default.createMediaStream([meeting.mediaProperties.audioTrack]);
|
|
179
|
+
|
|
180
|
+
_loggerProxy.default.logger.info('Meeting:effectState#enableBNR. MediaStream created from meeting & sent to updateAudio');
|
|
181
|
+
|
|
182
|
+
_context2.next = 15;
|
|
183
|
+
return meeting.updateAudio({
|
|
184
|
+
sendAudio: true,
|
|
185
|
+
receiveAudio: meeting.mediaProperties.mediaDirection.receiveAudio,
|
|
186
|
+
stream: audioStream,
|
|
187
|
+
bnrEnabled: bnr.enabled
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
case 15:
|
|
191
|
+
_loggerProxy.default.logger.info('Meeting:effectState#enableBNR. Updated meeting audio with bnr enabled track');
|
|
192
|
+
|
|
193
|
+
bnr.enabled = _constants2.BNR_STATUS.ENABLED;
|
|
194
|
+
this.state.callToWebrtcBNRInProgress = false;
|
|
195
|
+
|
|
196
|
+
_metrics.default.sendBehavioralMetric(_constants.default.ENABLE_BNR_SUCCESS);
|
|
197
|
+
|
|
198
|
+
_context2.next = 29;
|
|
199
|
+
break;
|
|
200
|
+
|
|
201
|
+
case 21:
|
|
202
|
+
_context2.prev = 21;
|
|
203
|
+
_context2.t0 = _context2["catch"](8);
|
|
204
|
+
bnr.enabled = _constants2.BNR_STATUS.NOT_ENABLED;
|
|
205
|
+
this.state.callToWebrtcBNRInProgress = false;
|
|
206
|
+
|
|
207
|
+
_loggerProxy.default.logger.error('Meeting:index#enableBNR.', _context2.t0);
|
|
208
|
+
|
|
209
|
+
_metrics.default.sendBehavioralMetric(_constants.default.ENABLE_BNR_FAILURE, {
|
|
210
|
+
reason: _context2.t0.message,
|
|
211
|
+
stack: _context2.t0.stack
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
this.rejectPromise(_context2.t0);
|
|
215
|
+
throw _context2.t0;
|
|
216
|
+
|
|
217
|
+
case 29:
|
|
218
|
+
return _context2.abrupt("return", this.resolvePromise());
|
|
219
|
+
|
|
220
|
+
case 30:
|
|
221
|
+
case "end":
|
|
222
|
+
return _context2.stop();
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}, _callee2, this, [[8, 21]]);
|
|
226
|
+
}));
|
|
227
|
+
|
|
228
|
+
function enableBNR(_x3) {
|
|
229
|
+
return _enableBNR.apply(this, arguments);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return enableBNR;
|
|
233
|
+
}()
|
|
234
|
+
/**
|
|
235
|
+
* disableBNR API
|
|
236
|
+
* @param {Object} meeting the meeting object
|
|
237
|
+
* @returns {Promise<Boolean>}
|
|
238
|
+
* @public
|
|
239
|
+
* @memberof EffectsState
|
|
240
|
+
*/
|
|
241
|
+
|
|
242
|
+
}, {
|
|
243
|
+
key: "disableBNR",
|
|
244
|
+
value: function () {
|
|
245
|
+
var _disableBNR = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(meeting) {
|
|
246
|
+
var bnr, audioTrack, audioStream;
|
|
247
|
+
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
248
|
+
while (1) {
|
|
249
|
+
switch (_context3.prev = _context3.next) {
|
|
250
|
+
case 0:
|
|
251
|
+
_loggerProxy.default.logger.info('Meeting:effectState#disableBNR. Disable BNR called');
|
|
252
|
+
|
|
253
|
+
bnr = this.state.bnr;
|
|
254
|
+
_context3.prev = 2;
|
|
255
|
+
|
|
256
|
+
if (!this.state.callToWebrtcBNRInProgress) {
|
|
257
|
+
_context3.next = 6;
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
_loggerProxy.default.logger.info('Meeting:effectState#disableBNR. Call to WebRTC in progress, we need to wait for it to complete');
|
|
262
|
+
|
|
263
|
+
return _context3.abrupt("return", this.resolvePromise());
|
|
264
|
+
|
|
265
|
+
case 6:
|
|
266
|
+
bnr.enabled = _constants2.BNR_STATUS.SHOULD_DISABLE;
|
|
267
|
+
this.state.callToWebrtcBNRInProgress = true;
|
|
268
|
+
audioTrack = _internalMediaCore.Media.Effects.BNR.disableBNR(meeting.mediaProperties.audioTrack);
|
|
269
|
+
audioStream = _util.default.createMediaStream([audioTrack]);
|
|
270
|
+
|
|
271
|
+
_loggerProxy.default.logger.info('Meeting:effectState#disableBNR. Raw media track obtained from WebRTC & sent to updateAudio');
|
|
272
|
+
|
|
273
|
+
_context3.next = 13;
|
|
274
|
+
return meeting.updateAudio({
|
|
275
|
+
sendAudio: true,
|
|
276
|
+
receiveAudio: meeting.mediaProperties.mediaDirection.receiveAudio,
|
|
277
|
+
stream: audioStream
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
case 13:
|
|
281
|
+
bnr.enabled = _constants2.BNR_STATUS.NOT_ENABLED;
|
|
282
|
+
this.state.callToWebrtcBNRInProgress = false;
|
|
283
|
+
|
|
284
|
+
_metrics.default.sendBehavioralMetric(_constants.default.DISABLE_BNR_SUCCESS);
|
|
285
|
+
|
|
286
|
+
_context3.next = 26;
|
|
287
|
+
break;
|
|
288
|
+
|
|
289
|
+
case 18:
|
|
290
|
+
_context3.prev = 18;
|
|
291
|
+
_context3.t0 = _context3["catch"](2);
|
|
292
|
+
bnr.enabled = _constants2.BNR_STATUS.ENABLED;
|
|
293
|
+
this.state.callToWebrtcBNRInProgress = false;
|
|
294
|
+
|
|
295
|
+
_loggerProxy.default.logger.error("Meeting:index#disableBNR. ".concat(_context3.t0));
|
|
296
|
+
|
|
297
|
+
_metrics.default.sendBehavioralMetric(_constants.default.DISABLE_BNR_FAILURE, {
|
|
298
|
+
reason: _context3.t0.message,
|
|
299
|
+
stack: _context3.t0.stack
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
this.rejectPromise(_context3.t0);
|
|
303
|
+
throw _context3.t0;
|
|
304
|
+
|
|
305
|
+
case 26:
|
|
306
|
+
return _context3.abrupt("return", this.resolvePromise());
|
|
307
|
+
|
|
308
|
+
case 27:
|
|
309
|
+
case "end":
|
|
310
|
+
return _context3.stop();
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}, _callee3, this, [[2, 18]]);
|
|
314
|
+
}));
|
|
315
|
+
|
|
316
|
+
function disableBNR(_x4) {
|
|
317
|
+
return _disableBNR.apply(this, arguments);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
return disableBNR;
|
|
321
|
+
}()
|
|
322
|
+
}]);
|
|
323
|
+
return EffectsState;
|
|
324
|
+
}();
|
|
325
|
+
|
|
326
|
+
var _default = createEffectsState;
|
|
327
|
+
exports.default = _default;
|
|
328
|
+
//# sourceMappingURL=effectsState.js.map
|