@webex/plugin-meetings 3.0.0-beta.43 → 3.0.0-beta.44
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/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +10 -2
- package/dist/breakouts/index.js.map +1 -1
- package/dist/constants.js +6 -1
- package/dist/constants.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +6 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +35 -1
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/selfUtils.js +28 -0
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/meeting/index.js +38 -3
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +45 -20
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/members/index.js +15 -3
- package/dist/members/index.js.map +1 -1
- package/dist/members/util.js +33 -12
- package/dist/members/util.js.map +1 -1
- package/dist/types/constants.d.ts +5 -0
- package/dist/types/locus-info/index.d.ts +7 -0
- package/dist/types/meeting/index.d.ts +12 -2
- package/dist/types/meeting/muteState.d.ts +16 -0
- package/dist/types/members/index.d.ts +7 -2
- package/package.json +18 -18
- package/src/breakouts/index.ts +6 -0
- package/src/constants.ts +5 -0
- package/src/locus-info/controlsUtils.ts +8 -0
- package/src/locus-info/index.ts +42 -1
- package/src/locus-info/selfUtils.ts +34 -0
- package/src/meeting/index.ts +45 -4
- package/src/meeting/muteState.ts +49 -30
- package/src/members/index.ts +12 -4
- package/src/members/util.ts +21 -8
- package/test/unit/spec/breakouts/index.ts +2 -2
- package/test/unit/spec/locus-info/controlsUtils.js +104 -46
- package/test/unit/spec/locus-info/index.js +131 -16
- package/test/unit/spec/locus-info/selfConstant.js +9 -5
- package/test/unit/spec/locus-info/selfUtils.js +39 -16
- package/test/unit/spec/meeting/index.js +208 -79
- package/test/unit/spec/meeting/muteState.js +72 -6
- package/test/unit/spec/members/index.js +75 -0
- package/test/unit/spec/members/utils.js +112 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LocusInfo","updateMeeting","webex","meetingId","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","action","locus","meeting","loci","DESYNC","USE_CURRENT","USE_INCOMING","locusInfo","onDeltaLocus","locusDesync","needToGetFullLocus","meetingRequest","getFullLocus","desync","locusUrl","then","res","onFullLocus","body","resume","LoggerProxy","logger","info","onDeltaAction","parsedLoci","applyLocusDeltaData","onDeltaEvent","created","scheduledMeeting","participantsUrl","replaces","aclUrl","baseSequence","sequence","membership","identities","participants","deltaParticipants","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","updateLocusUrl","url","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","self","updateHostInfo","host","updateMediaShares","mediaShares","updateServices","links","services","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","reason","state","updateCreated","updateParticipantsUrl","updateReplace","replace","updateAclUrl","updateBasequence","updateSequence","updateMemberShip","updateIdentifiers","compareAndUpdate","length","find","participant","identity","_USER_","removed","partner","getLocusPartner","LOCUS","STATE","INACTIVE","warn","Metrics","postEvent","event","REMOTE_ENDED","DESTROY_MEETING","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_REMOVED_REASON","MEETING_INACTIVE_TERMINATING","FULLSTATE_REMOVED","SELF_REMOVED","compareSelfAndHost","compareHostAndSelf","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","findParticipant","collection","item","person","id","generateDelta","prevState","newState","deltas","audioStatus","videoSlidesStatus","videoStatus","forEach","key","reduce","existingParticipant","delta","status","changed","push","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","ControlsUtils","parse","getControls","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasEntryExitToneChanged","hasBreakoutChanged","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","breakout","CONTROLS_MEETING_BREAKOUT_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","LINKS_SERVICES","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","roles","SelfUtils","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","MEETING_INFO_UPDATED","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","internal","device","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","muted","remoteMuted","unmuteAllowed","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","isUserUnadmitted","SELF_UNADMITTED_GUEST","isUserAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","MEDIA_STATUS_CHANGE","currentMediaStatus","audio","video","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","LOCUS_INFO_UPDATE_URL","EventsScope"],"sources":["index.ts"],"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 './infoUtils';\nimport FullState from './fullState';\nimport SelfUtils from './selfUtils';\nimport HostUtils from './hostUtils';\nimport ControlsUtils from './controlsUtils';\nimport EmbeddedAppsUtils from './embeddedAppsUtils';\nimport MediaSharesUtils from './mediaSharesUtils';\nimport LocusDeltaParser from './parser';\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n compareAndUpdateFlags: any;\n emitChange: any;\n locusParser: any;\n meetingId: any;\n parsedLocus: any;\n updateMeeting: any;\n webex: any;\n aclUrl: any;\n baseSequence: any;\n created: any;\n deltaParticipants: any;\n identities: any;\n membership: any;\n participants: any;\n participantsUrl: any;\n replaces: any;\n scheduledMeeting: any;\n sequence: any;\n controls: any;\n conversationUrl: any;\n embeddedApps: any;\n fullState: any;\n host: any;\n info: any;\n mediaShares: any;\n replace: any;\n url: any;\n services: any;\n\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n meeting.locusDesync = false;\n meeting.needToGetFullLocus = false;\n break;\n case DESYNC:\n meeting.meetingRequest\n .getFullLocus({\n desync: true,\n locusUrl: meeting.locusUrl,\n })\n .then((res) => {\n meeting.locusInfo.onFullLocus(res.body);\n // Notify parser to resume processing delta events\n // now that we have full locus from DESYNC.\n this.locusParser.resume();\n });\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus: any, meeting: any) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus: any = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.participantsUrl = locus.participantsUrl || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.membership = locus.membership || null;\n this.identities = locus.identities || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n /**\n * Stored participant changes between the last event and the current event.\n * All previously stored events are overwritten between events.\n *\n * @instance\n * @type {Array<DeltaParticipant>}\n * @private\n * @member LocusInfo\n */\n this.deltaParticipants = [];\n\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls);\n this.updateLocusUrl(locus.url);\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self, locus.participants);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateServices(locus.links?.services);\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n initialSetup(locus: object) {\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: any, data: any) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\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?: any, eventName?: string, args?: any) {\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 {string} eventType particulat locus event\n * @returns {object} null\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onFullLocus(locus: any, eventType?: string) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n this.updateParticipantDeltas(locus.participants);\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n handleOneOnOneEvent(eventType: string) {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus: any) {\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 if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {\n // When moved to a breakout session locus sends a message for the previous locus\n // indicating that we have been moved. It isn't helpful to continue parsing this\n // as it gets interpreted as if we have left the call\n return;\n }\n\n this.updateControls(locus.controls);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateParticipantsUrl(locus.participantsUrl);\n this.updateReplace(locus.replace);\n this.updateSelf(locus.self, locus.participants);\n this.updateLocusUrl(locus.url);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateMemberShip(locus.membership);\n this.updateIdentifiers(locus.identities);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateServices(locus.links?.services);\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: Array<any>, self: any) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n // @ts-ignore\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // @ts-ignore\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n } else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n } else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n } else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n // @ts-ignore\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n } 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 } else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n } 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: Array<any> = []) {\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: any = {}, newState: any = {}) => {\n // Setup deltas.\n const deltas = {\n audioStatus: prevState.audioStatus !== newState.audioStatus,\n videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,\n videoStatus: prevState.videoStatus !== newState.videoStatus,\n };\n\n // Clean the object\n Object.keys(deltas).forEach((key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n });\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce((collection, participant) => {\n const existingParticipant = findParticipant(participant, this.participants || []) || {};\n\n const delta = generateDelta(existingParticipant.status, participant.status);\n\n const changed = Object.keys(delta).length > 0;\n\n if (changed) {\n collection.push({\n person: participant.person,\n delta,\n });\n }\n\n return collection;\n }, []);\n }\n\n /**\n *\n * @param {Object} participants new participants object\n * @param {boolen} deltaParticpantFlag delta event\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object) {\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: object) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n hasEntryExitToneChanged,\n hasBreakoutChanged,\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 } 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 } else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n if (hasBreakoutChanged) {\n const {breakout} = current;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,\n {\n breakout,\n }\n );\n }\n\n if (hasEntryExitToneChanged) {\n const {entryExitTone} = current;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,\n {\n entryExitTone,\n }\n );\n\n this.updateMeeting({entryExitTone});\n }\n\n this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl: string, info: any) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n } else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created: object) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * @param {Object} services\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateServices(services: Record<'breakout' | 'record', {url: string}>) {\n if (services && !isEqual(this.services, services)) {\n this.services = services;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateServices',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState: object) {\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: object) {\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 } 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: object, self?: object) {\n if (info && !isEqual(this.info, info)) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {info: parsedInfo.current, self}\n );\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n }\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps: object) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object) {\n if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\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 }\n }\n\n /**\n * @param {String} participantsUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateParticipantsUrl(participantsUrl: string) {\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: object) {\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: any, participants: Array<any>) {\n // @ts-ignore - check where this.self come from\n if (self && !isEqual(this.self, self)) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.breakoutsChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,\n {breakoutSessions: parsedSelves.current.breakoutSessions}\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.isUserUnadmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.isUserAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n // @ts-ignore\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n // @ts-ignore\n this.self = self;\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: string) {\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: string) {\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: number) {\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: number) {\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: object) {\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: Array<any>) {\n if (identities && !isEqual(this.identities, identities)) {\n this.identities = identities;\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["LocusInfo","updateMeeting","webex","meetingId","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","action","locus","meeting","loci","DESYNC","USE_CURRENT","USE_INCOMING","locusInfo","onDeltaLocus","locusDesync","needToGetFullLocus","meetingRequest","getFullLocus","desync","locusUrl","then","res","onFullLocus","body","resume","LoggerProxy","logger","info","onDeltaAction","parsedLoci","applyLocusDeltaData","onDeltaEvent","created","scheduledMeeting","participantsUrl","replaces","aclUrl","baseSequence","sequence","membership","identities","participants","deltaParticipants","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","updateLocusUrl","url","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","self","updateHostInfo","host","updateMediaShares","mediaShares","updateServices","links","services","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","reason","state","updateCreated","updateParticipantsUrl","updateReplace","replace","updateAclUrl","updateBasequence","updateSequence","updateMemberShip","updateIdentifiers","compareAndUpdate","length","find","participant","identity","_USER_","removed","partner","getLocusPartner","LOCUS","STATE","INACTIVE","warn","Metrics","postEvent","event","REMOTE_ENDED","DESTROY_MEETING","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_REMOVED_REASON","MEETING_INACTIVE_TERMINATING","FULLSTATE_REMOVED","SELF_REMOVED","compareSelfAndHost","compareHostAndSelf","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","findParticipant","collection","item","person","id","generateDelta","prevState","newState","deltas","audioStatus","videoSlidesStatus","videoStatus","forEach","key","reduce","existingParticipant","delta","status","changed","push","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","ControlsUtils","parse","getControls","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasEntryExitToneChanged","hasBreakoutChanged","hasVideoEnabledChanged","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","breakout","CONTROLS_MEETING_BREAKOUT_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","videoEnabled","unmuteVideoAllowed","CONTROLS_VIDEO_ENABLED_UPDATED","unmuteAllowed","LINKS_SERVICES","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","roles","SelfUtils","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","MEETING_INFO_UPDATED","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","internal","device","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","isVideoMutedByOthersChanged","SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED","muted","remoteVideoMuted","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","remoteMuted","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","isUserUnadmitted","SELF_UNADMITTED_GUEST","isUserAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","MEDIA_STATUS_CHANGE","currentMediaStatus","audio","video","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","LOCUS_INFO_UPDATE_URL","EventsScope"],"sources":["index.ts"],"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 './infoUtils';\nimport FullState from './fullState';\nimport SelfUtils from './selfUtils';\nimport HostUtils from './hostUtils';\nimport ControlsUtils from './controlsUtils';\nimport EmbeddedAppsUtils from './embeddedAppsUtils';\nimport MediaSharesUtils from './mediaSharesUtils';\nimport LocusDeltaParser from './parser';\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n compareAndUpdateFlags: any;\n emitChange: any;\n locusParser: any;\n meetingId: any;\n parsedLocus: any;\n updateMeeting: any;\n webex: any;\n aclUrl: any;\n baseSequence: any;\n created: any;\n deltaParticipants: any;\n identities: any;\n membership: any;\n participants: any;\n participantsUrl: any;\n replaces: any;\n scheduledMeeting: any;\n sequence: any;\n controls: any;\n conversationUrl: any;\n embeddedApps: any;\n fullState: any;\n host: any;\n info: any;\n mediaShares: any;\n replace: any;\n url: any;\n services: any;\n\n /**\n * Constructor\n * @param {boolean} updateMeeting true if the meeting should be updated\n * @param {object} webex\n * @param {string} meetingId\n * @returns {undefined}\n */\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n meeting.locusDesync = false;\n meeting.needToGetFullLocus = false;\n break;\n case DESYNC:\n meeting.meetingRequest\n .getFullLocus({\n desync: true,\n locusUrl: meeting.locusUrl,\n })\n .then((res) => {\n meeting.locusInfo.onFullLocus(res.body);\n // Notify parser to resume processing delta events\n // now that we have full locus from DESYNC.\n this.locusParser.resume();\n });\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus: any, meeting: any) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus: any = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.participantsUrl = locus.participantsUrl || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.membership = locus.membership || null;\n this.identities = locus.identities || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n /**\n * Stored participant changes between the last event and the current event.\n * All previously stored events are overwritten between events.\n *\n * @instance\n * @type {Array<DeltaParticipant>}\n * @private\n * @member LocusInfo\n */\n this.deltaParticipants = [];\n\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls);\n this.updateLocusUrl(locus.url);\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self, locus.participants);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateServices(locus.links?.services);\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n initialSetup(locus: object) {\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: any, data: any) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\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?: any, eventName?: string, args?: any) {\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 {string} eventType particulat locus event\n * @returns {object} null\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onFullLocus(locus: any, eventType?: string) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n this.updateParticipantDeltas(locus.participants);\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n handleOneOnOneEvent(eventType: string) {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus: any) {\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 if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {\n // When moved to a breakout session locus sends a message for the previous locus\n // indicating that we have been moved. It isn't helpful to continue parsing this\n // as it gets interpreted as if we have left the call\n return;\n }\n\n this.updateControls(locus.controls);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateParticipantsUrl(locus.participantsUrl);\n this.updateReplace(locus.replace);\n this.updateSelf(locus.self, locus.participants);\n this.updateLocusUrl(locus.url);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateMemberShip(locus.membership);\n this.updateIdentifiers(locus.identities);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateServices(locus.links?.services);\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: Array<any>, self: any) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n // @ts-ignore\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // @ts-ignore\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n } else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n } else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n } else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n // @ts-ignore\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n } 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 } else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n } 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: Array<any> = []) {\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: any = {}, newState: any = {}) => {\n // Setup deltas.\n const deltas = {\n audioStatus: prevState.audioStatus !== newState.audioStatus,\n videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,\n videoStatus: prevState.videoStatus !== newState.videoStatus,\n };\n\n // Clean the object\n Object.keys(deltas).forEach((key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n });\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce((collection, participant) => {\n const existingParticipant = findParticipant(participant, this.participants || []) || {};\n\n const delta = generateDelta(existingParticipant.status, participant.status);\n\n const changed = Object.keys(delta).length > 0;\n\n if (changed) {\n collection.push({\n person: participant.person,\n delta,\n });\n }\n\n return collection;\n }, []);\n }\n\n /**\n *\n * @param {Object} participants new participants object\n * @param {boolen} deltaParticpantFlag delta event\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object) {\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: object) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n hasEntryExitToneChanged,\n hasBreakoutChanged,\n hasVideoEnabledChanged,\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 } 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 } else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n if (hasBreakoutChanged) {\n const {breakout} = current;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,\n {\n breakout,\n }\n );\n }\n\n if (hasEntryExitToneChanged) {\n const {entryExitTone} = current;\n\n this.updateMeeting({entryExitTone});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,\n {\n entryExitTone,\n }\n );\n }\n\n // videoEnabled is handled differently than other controls,\n // to fit with audio mute status logic\n if (hasVideoEnabledChanged) {\n const {videoEnabled} = current;\n\n this.updateMeeting({unmuteVideoAllowed: videoEnabled});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_VIDEO_ENABLED_UPDATED,\n {\n // muted: not part of locus.controls\n unmuteAllowed: videoEnabled,\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: string, info: any) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n } else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created: object) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * @param {Object} services\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateServices(services: Record<'breakout' | 'record', {url: string}>) {\n if (services && !isEqual(this.services, services)) {\n this.services = services;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateServices',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState: object) {\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: object) {\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 } 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: object, self?: object) {\n if (info && !isEqual(this.info, info)) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {info: parsedInfo.current, self}\n );\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n }\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps: object) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object) {\n if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\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 }\n }\n\n /**\n * @param {String} participantsUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateParticipantsUrl(participantsUrl: string) {\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: object) {\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: any, participants: Array<any>) {\n // @ts-ignore - check where this.self come from\n if (self && !isEqual(this.self, self)) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.breakoutsChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,\n {breakoutSessions: parsedSelves.current.breakoutSessions}\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n if (parsedSelves.updates.isVideoMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteVideoMuted,\n // unmuteAllowed: not part of .self\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.isUserUnadmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.isUserAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n // @ts-ignore\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n // @ts-ignore\n this.self = self;\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: string) {\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: string) {\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: number) {\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: number) {\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: object) {\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: Array<any>) {\n if (identities && !isEqual(this.identities, identities)) {\n this.identities = identities;\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -29,6 +29,7 @@ SelfUtils.parse = function (self, deviceId) {
|
|
|
29
29
|
return PSTN_DEVICE_TYPE === device.deviceType;
|
|
30
30
|
});
|
|
31
31
|
return {
|
|
32
|
+
remoteVideoMuted: SelfUtils.getRemoteVideoMuted(self),
|
|
32
33
|
remoteMuted: SelfUtils.getRemoteMuted(self),
|
|
33
34
|
unmuteAllowed: SelfUtils.getUnmuteAllowed(self),
|
|
34
35
|
localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),
|
|
@@ -93,6 +94,7 @@ SelfUtils.getSelves = function (oldSelf, newSelf, deviceId) {
|
|
|
93
94
|
var updates = {};
|
|
94
95
|
updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);
|
|
95
96
|
updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);
|
|
97
|
+
updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);
|
|
96
98
|
updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);
|
|
97
99
|
updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(previous, current);
|
|
98
100
|
updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(previous, current);
|
|
@@ -178,6 +180,18 @@ SelfUtils.getSelfIdentity = function (self) {
|
|
|
178
180
|
return self.person.id;
|
|
179
181
|
};
|
|
180
182
|
|
|
183
|
+
/**
|
|
184
|
+
* get the "remote video mute" property from the self object
|
|
185
|
+
* @param {Object} self
|
|
186
|
+
* @returns {Boolean}
|
|
187
|
+
*/
|
|
188
|
+
SelfUtils.getRemoteVideoMuted = function (self) {
|
|
189
|
+
if (!self || !self.controls || !self.controls.video) {
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
return self.controls.video.muted;
|
|
193
|
+
};
|
|
194
|
+
|
|
181
195
|
/**
|
|
182
196
|
* get the "remote mute" property from the self object
|
|
183
197
|
* @param {Object} self
|
|
@@ -288,6 +302,20 @@ SelfUtils.isUserAdmitted = function (oldSelf, changedSelf) {
|
|
|
288
302
|
}
|
|
289
303
|
return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);
|
|
290
304
|
};
|
|
305
|
+
SelfUtils.videoMutedByOthersChanged = function (oldSelf, changedSelf) {
|
|
306
|
+
if (!changedSelf) {
|
|
307
|
+
throw new _parameter.default('New self must be defined to determine if self was video muted by others.');
|
|
308
|
+
}
|
|
309
|
+
if (!oldSelf || oldSelf.remoteVideoMuted === null) {
|
|
310
|
+
if (changedSelf.remoteVideoMuted) {
|
|
311
|
+
return true; // this happens when host disables "Allow start video"
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// we don't want to be sending the 'meeting:self:videoUnmutedByOthers' notification on meeting join
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
return oldSelf.remoteVideoMuted !== changedSelf.remoteVideoMuted;
|
|
318
|
+
};
|
|
291
319
|
SelfUtils.mutedByOthersChanged = function (oldSelf, changedSelf) {
|
|
292
320
|
if (!changedSelf) {
|
|
293
321
|
throw new _parameter.default('New self must be defined to determine if self was muted by others.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SelfUtils","PSTN_DEVICE_TYPE","parse","self","deviceId","joinedWith","devices","find","device","url","pstnDevices","filter","deviceType","remoteMuted","getRemoteMuted","unmuteAllowed","getUnmuteAllowed","localAudioUnmuteRequested","getLocalAudioUnmuteRequested","localAudioUnmuteRequired","getLocalAudioUnmuteRequired","lastModified","getLastModified","modifiedBy","getModifiedBy","guest","moderator","mediaStatus","getStatus","status","state","currentMediaStatus","getMediaStatus","mediaSessions","creator","isCreator","selfId","id","selfIdentity","getSelfIdentity","selfUrl","removed","roles","getRoles","isUserUnadmitted","_IDLE_","intent","type","_WAIT_","layout","getLayout","canNotViewTheParticipantList","isSharingBlocked","breakoutSessions","getBreakouts","controls","breakout","sessions","layouts","undefined","role","reduce","hasRole","push","getSelves","oldSelf","newSelf","previous","current","updates","isUserAdmitted","isMutedByOthersChanged","mutedByOthersChanged","localAudioUnmuteRequestedByServer","localAudioUnmuteRequiredByServer","moderatorChanged","isMediaInactiveOrReleased","wasMediaInactiveOrReleased","isUserObserving","isDeviceObserving","layoutChanged","isMediaInactive","audioStateChange","audio","videoStateChange","video","shareStateChange","share","canNotViewTheParticipantListChanged","isSharingBlockedChanged","breakoutsChanged","isJoined","_JOINED_","previousMediaStatus","MEDIA_STATE","inactive","direction","meta","person","muted","requestedToUnmute","disallowUnmute","audioStatus","videoStatus","slides","videoSlidesStatus","changedSelf","_LEFT_","reason","MEETING_END_REASON","INACTIVE","MEDIA_RELEASED","isLocusUserUnadmitted","check","isLocusUserAdmitted","ParameterError","_MOVE_MEDIA_","_OBSERVE_","getSipUrl","partner","sipUri","_CALL_","sipUrl","media","mediaType","AUDIO","mediaContent","MediaContent","main","VIDEO"],"sources":["selfUtils.ts"],"sourcesContent":["/* eslint-disable default-param-last */\n\nimport {isEqual} from 'lodash';\nimport {\n _IDLE_,\n _JOINED_,\n _CALL_,\n _WAIT_,\n _MOVE_MEDIA_,\n _OBSERVE_,\n _LEFT_,\n MEETING_END_REASON,\n MEDIA_STATE,\n AUDIO,\n VIDEO,\n MediaContent,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst SelfUtils: any = {};\nconst PSTN_DEVICE_TYPE = 'PROVISIONAL';\n\n/**\n * parses the relevant values for self: muted, guest, moderator, mediaStatus, state, joinedWith, pstnDevices, creator, id\n * @param {Object} self\n * @param {String} deviceId\n * @returns {undefined}\n */\nSelfUtils.parse = (self: any, deviceId: string) => {\n if (self) {\n const joinedWith = self.devices.find((device) => deviceId === device.url);\n const pstnDevices = self.devices.filter((device) => PSTN_DEVICE_TYPE === device.deviceType);\n\n return {\n remoteMuted: SelfUtils.getRemoteMuted(self),\n unmuteAllowed: SelfUtils.getUnmuteAllowed(self),\n localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),\n localAudioUnmuteRequired: SelfUtils.getLocalAudioUnmuteRequired(self),\n lastModified: SelfUtils.getLastModified(self),\n modifiedBy: SelfUtils.getModifiedBy(self),\n guest: self.guest,\n moderator: self.moderator,\n // cumulative media stats\n mediaStatus: SelfUtils.getStatus(self.status),\n // TODO: what should be the status if user has refreshed the page,\n // check the joinedWith parameter and communicate to the user\n state: self.state,\n // TODO: give a proper name . With same device as login or different login`\n // Some times we might have joined with both mobile and web\n joinedWith,\n pstnDevices,\n // current media stats is for the current device who has joined\n currentMediaStatus: SelfUtils.getMediaStatus(joinedWith?.mediaSessions),\n creator: self.isCreator, // check if its used,\n selfId: self.id,\n selfIdentity: SelfUtils.getSelfIdentity(self),\n selfUrl: self.url,\n removed: self.removed,\n roles: SelfUtils.getRoles(self),\n isUserUnadmitted: self.state === _IDLE_ && joinedWith?.intent?.type === _WAIT_,\n layout: SelfUtils.getLayout(self),\n canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),\n isSharingBlocked: SelfUtils.isSharingBlocked(self),\n breakoutSessions: SelfUtils.getBreakouts(self),\n };\n }\n\n return null;\n};\n\nSelfUtils.getBreakouts = (self) => self?.controls?.breakout?.sessions;\n\nSelfUtils.getLayout = (self) =>\n Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined;\n\nSelfUtils.getRoles = (self) =>\n (self?.controls?.role?.roles || []).reduce((roles, role) => {\n if (role.hasRole) {\n roles.push(role.type);\n }\n\n return roles;\n }, []);\n\nSelfUtils.canNotViewTheParticipantList = (self) => !!self?.canNotViewTheParticipantList;\n\nSelfUtils.isSharingBlocked = (self) => !!self?.isSharingBlocked;\n\nSelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {\n const previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);\n const current = newSelf && SelfUtils.parse(newSelf, deviceId);\n const updates: any = {};\n\n updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);\n updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);\n updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);\n updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(\n previous,\n current\n );\n updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(\n previous,\n current\n );\n updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);\n updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);\n updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);\n updates.layoutChanged = SelfUtils.layoutChanged(previous, current);\n\n updates.isMediaInactive = SelfUtils.isMediaInactive(previous, current);\n updates.audioStateChange =\n previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;\n updates.videoStateChange =\n previous?.currentMediaStatus.video !== current.currentMediaStatus.video;\n updates.shareStateChange =\n previous?.currentMediaStatus.share !== current.currentMediaStatus.share;\n\n updates.canNotViewTheParticipantListChanged =\n previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;\n updates.isSharingBlockedChanged = previous?.isSharingBlocked !== current.isSharingBlocked;\n updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);\n\n return {\n previous,\n current,\n updates,\n };\n};\n\n/**\n * Checks if user has joined the meeting\n * @param {Object} self\n * @returns {boolean} isJoined\n */\nSelfUtils.isJoined = (self: any) => self?.state === _JOINED_;\n\n/**\n * Validate if the Meeting Layout Controls Layout has changed.\n *\n * @param {Self} previous - Previous self state\n * @param {Self} current - Current self state [per event]\n * @returns {boolean} - If the MEeting Layout Controls Layout has changed.\n */\nSelfUtils.layoutChanged = (previous: any, current: any) =>\n current?.layout && previous?.layout !== current?.layout;\n\nSelfUtils.breakoutsChanged = (previous, current) =>\n !isEqual(previous?.breakoutSessions, current?.breakoutSessions);\n\nSelfUtils.isMediaInactive = (previous, current) => {\n if (\n previous &&\n previous.joinedWith &&\n previous.joinedWith.mediaSessions &&\n current &&\n current.joinedWith &&\n current.joinedWith.mediaSessions\n ) {\n const previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);\n const currentMediaStatus = SelfUtils.getMediaStatus(current.joinedWith.mediaSessions);\n\n if (\n previousMediaStatus.audio &&\n currentMediaStatus.audio &&\n previousMediaStatus.audio.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.audio.state === MEDIA_STATE.inactive &&\n currentMediaStatus.audio.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.video &&\n currentMediaStatus.video &&\n previousMediaStatus.video.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.video.state === MEDIA_STATE.inactive &&\n currentMediaStatus.video.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.share &&\n currentMediaStatus.share &&\n previousMediaStatus.share.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.share.state === MEDIA_STATE.inactive &&\n currentMediaStatus.share.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n return false;\n }\n\n return false;\n};\n\nSelfUtils.getLastModified = (self) => {\n if (\n !self ||\n !self.controls ||\n !self.controls.audio ||\n !self.controls.audio.meta ||\n !self.controls.audio.meta.lastModified\n ) {\n return null;\n }\n\n return self.controls.audio.meta.lastModified;\n};\n\nSelfUtils.getModifiedBy = (self) => {\n if (\n !self ||\n !self.controls ||\n !self.controls.audio ||\n !self.controls.audio.meta ||\n !self.controls.audio.meta.modifiedBy\n ) {\n return null;\n }\n\n return self.controls.audio.meta.modifiedBy;\n};\n\n/**\n * get the id from the self object\n * @param {Object} self\n * @returns {String}\n */\nSelfUtils.getSelfIdentity = (self: any) => {\n if (!self && !self.person) {\n return null;\n }\n\n return self.person.id;\n};\n\n/**\n * get the \"remote mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\nSelfUtils.getRemoteMuted = (self: any) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return self.controls.audio.muted;\n};\n\nSelfUtils.getLocalAudioUnmuteRequested = (self) => !!self?.controls?.audio?.requestedToUnmute;\n\nSelfUtils.getUnmuteAllowed = (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return !self.controls.audio.disallowUnmute;\n};\n\nSelfUtils.getLocalAudioUnmuteRequired = (self) => !!self?.controls?.audio?.localAudioUnmuteRequired;\n\nSelfUtils.getStatus = (status) => ({\n audio: status.audioStatus,\n video: status.videoStatus,\n slides: status.videoSlidesStatus,\n});\n\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\nSelfUtils.wasMediaInactiveOrReleased = (oldSelf: any = {}, changedSelf: any) =>\n oldSelf.joinedWith &&\n oldSelf.joinedWith.state === _JOINED_ &&\n changedSelf.joinedWith.state === _LEFT_ &&\n (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE ||\n changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED);\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusUserUnadmitted = (check: any) =>\n check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusUserAdmitted = (check: any) =>\n check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;\n\n/**\n * @param {Object} self\n * @returns {Boolean}\n * @throws {Error} when self is undefined\n */\nSelfUtils.isUserUnadmitted = (self: object) => {\n if (!self) {\n throw new ParameterError('self must be defined to determine if self is unadmitted as guest.');\n }\n\n return SelfUtils.isLocusUserUnadmitted(self);\n};\n\nSelfUtils.moderatorChanged = (oldSelf, changedSelf) => {\n if (!oldSelf) {\n return true;\n }\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self transitioned moderator status.'\n );\n }\n\n return oldSelf.moderator !== changedSelf.moderator;\n};\n\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\nSelfUtils.isDeviceObserving = (oldSelf: any, changedSelf: any) =>\n oldSelf &&\n oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ &&\n changedSelf &&\n changedSelf.joinedWith?.intent?.type === _OBSERVE_;\n\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\nSelfUtils.isUserAdmitted = (oldSelf: object, changedSelf: object) => {\n if (!oldSelf) {\n // if there was no previous locus, it couldn't have been admitted yet\n return false;\n }\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self transitioned to admitted as guest.'\n );\n }\n\n return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);\n};\n\nSelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self was muted by others.');\n }\n\n if (!oldSelf || oldSelf.remoteMuted === null) {\n if (changedSelf.remoteMuted) {\n return true; // this happens when mute on-entry is enabled\n }\n\n // we don't want to be sending the 'meeting:self:unmutedByOthers' notification on meeting join\n return false;\n }\n\n return (\n changedSelf.remoteMuted !== null &&\n (oldSelf.remoteMuted !== changedSelf.remoteMuted ||\n (changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed))\n );\n};\n\nSelfUtils.localAudioUnmuteRequestedByServer = (oldSelf: any = {}, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self received request to unmute.'\n );\n }\n\n return changedSelf.localAudioUnmuteRequested && !oldSelf.localAudioUnmuteRequested;\n};\n\nSelfUtils.localAudioUnmuteRequiredByServer = (oldSelf: any = {}, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if localAudioUnmuteRequired changed.'\n );\n }\n\n return (\n !changedSelf.remoteMuted &&\n changedSelf.localAudioUnmuteRequired &&\n oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired\n );\n};\n\n/**\n * extract the sipUrl from the partner\n * @param {Object} partner\n * @param {Object} info\n * @returns {Object}\n */\n\nSelfUtils.getSipUrl = (partner: any, type, sipUri) => {\n // For webex meeting the sipUrl gets updated in info parser\n if (partner && type === _CALL_) {\n return {sipUri: partner.person.sipUrl || partner.person.id};\n }\n\n return {sipUri};\n};\n\nSelfUtils.getMediaStatus = (mediaSessions = []) => {\n const mediaStatus = {\n audio: {},\n video: {},\n share: {},\n };\n\n mediaStatus.audio = mediaSessions.find(\n (media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main\n );\n mediaStatus.video = mediaSessions.find(\n (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main\n );\n mediaStatus.share = mediaSessions.find(\n (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides\n );\n\n return mediaStatus;\n};\n\nexport default SelfUtils;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["SelfUtils","PSTN_DEVICE_TYPE","parse","self","deviceId","joinedWith","devices","find","device","url","pstnDevices","filter","deviceType","remoteVideoMuted","getRemoteVideoMuted","remoteMuted","getRemoteMuted","unmuteAllowed","getUnmuteAllowed","localAudioUnmuteRequested","getLocalAudioUnmuteRequested","localAudioUnmuteRequired","getLocalAudioUnmuteRequired","lastModified","getLastModified","modifiedBy","getModifiedBy","guest","moderator","mediaStatus","getStatus","status","state","currentMediaStatus","getMediaStatus","mediaSessions","creator","isCreator","selfId","id","selfIdentity","getSelfIdentity","selfUrl","removed","roles","getRoles","isUserUnadmitted","_IDLE_","intent","type","_WAIT_","layout","getLayout","canNotViewTheParticipantList","isSharingBlocked","breakoutSessions","getBreakouts","controls","breakout","sessions","layouts","undefined","role","reduce","hasRole","push","getSelves","oldSelf","newSelf","previous","current","updates","isUserAdmitted","isVideoMutedByOthersChanged","videoMutedByOthersChanged","isMutedByOthersChanged","mutedByOthersChanged","localAudioUnmuteRequestedByServer","localAudioUnmuteRequiredByServer","moderatorChanged","isMediaInactiveOrReleased","wasMediaInactiveOrReleased","isUserObserving","isDeviceObserving","layoutChanged","isMediaInactive","audioStateChange","audio","videoStateChange","video","shareStateChange","share","canNotViewTheParticipantListChanged","isSharingBlockedChanged","breakoutsChanged","isJoined","_JOINED_","previousMediaStatus","MEDIA_STATE","inactive","direction","meta","person","muted","requestedToUnmute","disallowUnmute","audioStatus","videoStatus","slides","videoSlidesStatus","changedSelf","_LEFT_","reason","MEETING_END_REASON","INACTIVE","MEDIA_RELEASED","isLocusUserUnadmitted","check","isLocusUserAdmitted","ParameterError","_MOVE_MEDIA_","_OBSERVE_","getSipUrl","partner","sipUri","_CALL_","sipUrl","media","mediaType","AUDIO","mediaContent","MediaContent","main","VIDEO"],"sources":["selfUtils.ts"],"sourcesContent":["/* eslint-disable default-param-last */\n\nimport {isEqual} from 'lodash';\nimport {\n _IDLE_,\n _JOINED_,\n _CALL_,\n _WAIT_,\n _MOVE_MEDIA_,\n _OBSERVE_,\n _LEFT_,\n MEETING_END_REASON,\n MEDIA_STATE,\n AUDIO,\n VIDEO,\n MediaContent,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst SelfUtils: any = {};\nconst PSTN_DEVICE_TYPE = 'PROVISIONAL';\n\n/**\n * parses the relevant values for self: muted, guest, moderator, mediaStatus, state, joinedWith, pstnDevices, creator, id\n * @param {Object} self\n * @param {String} deviceId\n * @returns {undefined}\n */\nSelfUtils.parse = (self: any, deviceId: string) => {\n if (self) {\n const joinedWith = self.devices.find((device) => deviceId === device.url);\n const pstnDevices = self.devices.filter((device) => PSTN_DEVICE_TYPE === device.deviceType);\n\n return {\n remoteVideoMuted: SelfUtils.getRemoteVideoMuted(self),\n remoteMuted: SelfUtils.getRemoteMuted(self),\n unmuteAllowed: SelfUtils.getUnmuteAllowed(self),\n localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),\n localAudioUnmuteRequired: SelfUtils.getLocalAudioUnmuteRequired(self),\n lastModified: SelfUtils.getLastModified(self),\n modifiedBy: SelfUtils.getModifiedBy(self),\n guest: self.guest,\n moderator: self.moderator,\n // cumulative media stats\n mediaStatus: SelfUtils.getStatus(self.status),\n // TODO: what should be the status if user has refreshed the page,\n // check the joinedWith parameter and communicate to the user\n state: self.state,\n // TODO: give a proper name . With same device as login or different login`\n // Some times we might have joined with both mobile and web\n joinedWith,\n pstnDevices,\n // current media stats is for the current device who has joined\n currentMediaStatus: SelfUtils.getMediaStatus(joinedWith?.mediaSessions),\n creator: self.isCreator, // check if its used,\n selfId: self.id,\n selfIdentity: SelfUtils.getSelfIdentity(self),\n selfUrl: self.url,\n removed: self.removed,\n roles: SelfUtils.getRoles(self),\n isUserUnadmitted: self.state === _IDLE_ && joinedWith?.intent?.type === _WAIT_,\n layout: SelfUtils.getLayout(self),\n canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),\n isSharingBlocked: SelfUtils.isSharingBlocked(self),\n breakoutSessions: SelfUtils.getBreakouts(self),\n };\n }\n\n return null;\n};\n\nSelfUtils.getBreakouts = (self) => self?.controls?.breakout?.sessions;\n\nSelfUtils.getLayout = (self) =>\n Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined;\n\nSelfUtils.getRoles = (self) =>\n (self?.controls?.role?.roles || []).reduce((roles, role) => {\n if (role.hasRole) {\n roles.push(role.type);\n }\n\n return roles;\n }, []);\n\nSelfUtils.canNotViewTheParticipantList = (self) => !!self?.canNotViewTheParticipantList;\n\nSelfUtils.isSharingBlocked = (self) => !!self?.isSharingBlocked;\n\nSelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {\n const previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);\n const current = newSelf && SelfUtils.parse(newSelf, deviceId);\n const updates: any = {};\n\n updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);\n updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);\n updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);\n updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);\n updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(\n previous,\n current\n );\n updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(\n previous,\n current\n );\n updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);\n updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);\n updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);\n updates.layoutChanged = SelfUtils.layoutChanged(previous, current);\n\n updates.isMediaInactive = SelfUtils.isMediaInactive(previous, current);\n updates.audioStateChange =\n previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;\n updates.videoStateChange =\n previous?.currentMediaStatus.video !== current.currentMediaStatus.video;\n updates.shareStateChange =\n previous?.currentMediaStatus.share !== current.currentMediaStatus.share;\n\n updates.canNotViewTheParticipantListChanged =\n previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;\n updates.isSharingBlockedChanged = previous?.isSharingBlocked !== current.isSharingBlocked;\n updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);\n\n return {\n previous,\n current,\n updates,\n };\n};\n\n/**\n * Checks if user has joined the meeting\n * @param {Object} self\n * @returns {boolean} isJoined\n */\nSelfUtils.isJoined = (self: any) => self?.state === _JOINED_;\n\n/**\n * Validate if the Meeting Layout Controls Layout has changed.\n *\n * @param {Self} previous - Previous self state\n * @param {Self} current - Current self state [per event]\n * @returns {boolean} - If the MEeting Layout Controls Layout has changed.\n */\nSelfUtils.layoutChanged = (previous: any, current: any) =>\n current?.layout && previous?.layout !== current?.layout;\n\nSelfUtils.breakoutsChanged = (previous, current) =>\n !isEqual(previous?.breakoutSessions, current?.breakoutSessions);\n\nSelfUtils.isMediaInactive = (previous, current) => {\n if (\n previous &&\n previous.joinedWith &&\n previous.joinedWith.mediaSessions &&\n current &&\n current.joinedWith &&\n current.joinedWith.mediaSessions\n ) {\n const previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);\n const currentMediaStatus = SelfUtils.getMediaStatus(current.joinedWith.mediaSessions);\n\n if (\n previousMediaStatus.audio &&\n currentMediaStatus.audio &&\n previousMediaStatus.audio.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.audio.state === MEDIA_STATE.inactive &&\n currentMediaStatus.audio.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.video &&\n currentMediaStatus.video &&\n previousMediaStatus.video.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.video.state === MEDIA_STATE.inactive &&\n currentMediaStatus.video.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.share &&\n currentMediaStatus.share &&\n previousMediaStatus.share.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.share.state === MEDIA_STATE.inactive &&\n currentMediaStatus.share.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n return false;\n }\n\n return false;\n};\n\nSelfUtils.getLastModified = (self) => {\n if (\n !self ||\n !self.controls ||\n !self.controls.audio ||\n !self.controls.audio.meta ||\n !self.controls.audio.meta.lastModified\n ) {\n return null;\n }\n\n return self.controls.audio.meta.lastModified;\n};\n\nSelfUtils.getModifiedBy = (self) => {\n if (\n !self ||\n !self.controls ||\n !self.controls.audio ||\n !self.controls.audio.meta ||\n !self.controls.audio.meta.modifiedBy\n ) {\n return null;\n }\n\n return self.controls.audio.meta.modifiedBy;\n};\n\n/**\n * get the id from the self object\n * @param {Object} self\n * @returns {String}\n */\nSelfUtils.getSelfIdentity = (self: any) => {\n if (!self && !self.person) {\n return null;\n }\n\n return self.person.id;\n};\n\n/**\n * get the \"remote video mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\nSelfUtils.getRemoteVideoMuted = (self: any) => {\n if (!self || !self.controls || !self.controls.video) {\n return null;\n }\n\n return self.controls.video.muted;\n};\n\n/**\n * get the \"remote mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\nSelfUtils.getRemoteMuted = (self: any) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return self.controls.audio.muted;\n};\n\nSelfUtils.getLocalAudioUnmuteRequested = (self) => !!self?.controls?.audio?.requestedToUnmute;\n\nSelfUtils.getUnmuteAllowed = (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return !self.controls.audio.disallowUnmute;\n};\n\nSelfUtils.getLocalAudioUnmuteRequired = (self) => !!self?.controls?.audio?.localAudioUnmuteRequired;\n\nSelfUtils.getStatus = (status) => ({\n audio: status.audioStatus,\n video: status.videoStatus,\n slides: status.videoSlidesStatus,\n});\n\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\nSelfUtils.wasMediaInactiveOrReleased = (oldSelf: any = {}, changedSelf: any) =>\n oldSelf.joinedWith &&\n oldSelf.joinedWith.state === _JOINED_ &&\n changedSelf.joinedWith.state === _LEFT_ &&\n (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE ||\n changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED);\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusUserUnadmitted = (check: any) =>\n check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusUserAdmitted = (check: any) =>\n check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;\n\n/**\n * @param {Object} self\n * @returns {Boolean}\n * @throws {Error} when self is undefined\n */\nSelfUtils.isUserUnadmitted = (self: object) => {\n if (!self) {\n throw new ParameterError('self must be defined to determine if self is unadmitted as guest.');\n }\n\n return SelfUtils.isLocusUserUnadmitted(self);\n};\n\nSelfUtils.moderatorChanged = (oldSelf, changedSelf) => {\n if (!oldSelf) {\n return true;\n }\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self transitioned moderator status.'\n );\n }\n\n return oldSelf.moderator !== changedSelf.moderator;\n};\n\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\nSelfUtils.isDeviceObserving = (oldSelf: any, changedSelf: any) =>\n oldSelf &&\n oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ &&\n changedSelf &&\n changedSelf.joinedWith?.intent?.type === _OBSERVE_;\n\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\nSelfUtils.isUserAdmitted = (oldSelf: object, changedSelf: object) => {\n if (!oldSelf) {\n // if there was no previous locus, it couldn't have been admitted yet\n return false;\n }\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self transitioned to admitted as guest.'\n );\n }\n\n return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);\n};\n\nSelfUtils.videoMutedByOthersChanged = (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self was video muted by others.'\n );\n }\n\n if (!oldSelf || oldSelf.remoteVideoMuted === null) {\n if (changedSelf.remoteVideoMuted) {\n return true; // this happens when host disables \"Allow start video\"\n }\n\n // we don't want to be sending the 'meeting:self:videoUnmutedByOthers' notification on meeting join\n return false;\n }\n\n return oldSelf.remoteVideoMuted !== changedSelf.remoteVideoMuted;\n};\n\nSelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self was muted by others.');\n }\n\n if (!oldSelf || oldSelf.remoteMuted === null) {\n if (changedSelf.remoteMuted) {\n return true; // this happens when mute on-entry is enabled\n }\n\n // we don't want to be sending the 'meeting:self:unmutedByOthers' notification on meeting join\n return false;\n }\n\n return (\n changedSelf.remoteMuted !== null &&\n (oldSelf.remoteMuted !== changedSelf.remoteMuted ||\n (changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed))\n );\n};\n\nSelfUtils.localAudioUnmuteRequestedByServer = (oldSelf: any = {}, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self received request to unmute.'\n );\n }\n\n return changedSelf.localAudioUnmuteRequested && !oldSelf.localAudioUnmuteRequested;\n};\n\nSelfUtils.localAudioUnmuteRequiredByServer = (oldSelf: any = {}, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if localAudioUnmuteRequired changed.'\n );\n }\n\n return (\n !changedSelf.remoteMuted &&\n changedSelf.localAudioUnmuteRequired &&\n oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired\n );\n};\n\n/**\n * extract the sipUrl from the partner\n * @param {Object} partner\n * @param {Object} info\n * @returns {Object}\n */\n\nSelfUtils.getSipUrl = (partner: any, type, sipUri) => {\n // For webex meeting the sipUrl gets updated in info parser\n if (partner && type === _CALL_) {\n return {sipUri: partner.person.sipUrl || partner.person.id};\n }\n\n return {sipUri};\n};\n\nSelfUtils.getMediaStatus = (mediaSessions = []) => {\n const mediaStatus = {\n audio: {},\n video: {},\n share: {},\n };\n\n mediaStatus.audio = mediaSessions.find(\n (media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main\n );\n mediaStatus.video = mediaSessions.find(\n (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main\n );\n mediaStatus.share = mediaSessions.find(\n (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides\n );\n\n return mediaStatus;\n};\n\nexport default SelfUtils;\n"],"mappings":"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"}
|