@webex/plugin-meetings 3.10.0-next.18 → 3.10.0-next.19

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.
@@ -209,7 +209,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
209
209
  sessionId: this.sessionId
210
210
  });
211
211
  },
212
- version: "3.10.0-next.18"
212
+ version: "3.10.0-next.19"
213
213
  });
214
214
  var _default = exports.default = Breakout;
215
215
  //# sourceMappingURL=breakout.js.map
@@ -1109,7 +1109,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
1109
1109
  this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
1110
1110
  }
1111
1111
  },
1112
- version: "3.10.0-next.18"
1112
+ version: "3.10.0-next.19"
1113
1113
  });
1114
1114
  var _default = exports.default = Breakouts;
1115
1115
  //# sourceMappingURL=index.js.map
@@ -372,7 +372,7 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
372
372
  throw error;
373
373
  });
374
374
  },
375
- version: "3.10.0-next.18"
375
+ version: "3.10.0-next.19"
376
376
  });
377
377
  var _default = exports.default = SimultaneousInterpretation;
378
378
  //# sourceMappingURL=index.js.map
@@ -18,7 +18,7 @@ var SILanguage = _webexCore.WebexPlugin.extend({
18
18
  languageCode: 'number',
19
19
  languageName: 'string'
20
20
  },
21
- version: "3.10.0-next.18"
21
+ version: "3.10.0-next.19"
22
22
  });
23
23
  var _default = exports.default = SILanguage;
24
24
  //# sourceMappingURL=siLanguage.js.map
@@ -92,10 +92,7 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
92
92
  (0, _defineProperty2.default)(_this, "aclUrl", void 0);
93
93
  (0, _defineProperty2.default)(_this, "baseSequence", void 0);
94
94
  (0, _defineProperty2.default)(_this, "created", void 0);
95
- (0, _defineProperty2.default)(_this, "identities", void 0);
96
- (0, _defineProperty2.default)(_this, "membership", void 0);
97
95
  (0, _defineProperty2.default)(_this, "participants", void 0);
98
- (0, _defineProperty2.default)(_this, "participantsUrl", void 0);
99
96
  (0, _defineProperty2.default)(_this, "replaces", void 0);
100
97
  (0, _defineProperty2.default)(_this, "scheduledMeeting", void 0);
101
98
  (0, _defineProperty2.default)(_this, "sequence", void 0);
@@ -107,7 +104,6 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
107
104
  (0, _defineProperty2.default)(_this, "info", void 0);
108
105
  (0, _defineProperty2.default)(_this, "roles", void 0);
109
106
  (0, _defineProperty2.default)(_this, "mediaShares", void 0);
110
- (0, _defineProperty2.default)(_this, "replace", void 0);
111
107
  (0, _defineProperty2.default)(_this, "url", void 0);
112
108
  (0, _defineProperty2.default)(_this, "links", void 0);
113
109
  (0, _defineProperty2.default)(_this, "mainSessionLocusCache", void 0);
@@ -301,13 +297,10 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
301
297
  var locus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
302
298
  this.created = locus.created || null;
303
299
  this.scheduledMeeting = locus.meeting || null;
304
- this.participantsUrl = locus.participantsUrl || null;
305
300
  this.replaces = locus.replaces || null;
306
301
  this.aclUrl = locus.aclUrl || null;
307
302
  this.baseSequence = locus.baseSequence || null;
308
303
  this.sequence = locus.sequence || null;
309
- this.membership = locus.membership || null;
310
- this.identities = locus.identities || null;
311
304
  this.participants = locus.participants || null;
312
305
 
313
306
  /**
@@ -970,14 +963,11 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
970
963
  this.updateLocusUrl(locus.url, _controlsUtils.default.isMainSessionDTO(locus));
971
964
  this.updateMeetingInfo(locus.info, locus.self);
972
965
  this.updateMediaShares(locus.mediaShares);
973
- this.updateParticipantsUrl(locus.participantsUrl);
974
- this.updateReplace(locus.replace);
966
+ this.updateReplaces(locus.replaces);
975
967
  this.updateSelf(locus.self);
976
968
  this.updateAclUrl(locus.aclUrl);
977
969
  this.updateBasequence(locus.baseSequence);
978
970
  this.updateSequence(locus.sequence);
979
- this.updateMemberShip(locus.membership);
980
- this.updateIdentifiers(locus.identities);
981
971
  this.updateEmbeddedApps(locus.embeddedApps);
982
972
  this.updateLinks(locus.links);
983
973
  this.compareAndUpdate();
@@ -1714,28 +1704,15 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
1714
1704
  }
1715
1705
 
1716
1706
  /**
1717
- * @param {String} participantsUrl
1707
+ * @param {Object} replaces
1718
1708
  * @returns {undefined}
1719
1709
  * @memberof LocusInfo
1720
1710
  */
1721
1711
  }, {
1722
- key: "updateParticipantsUrl",
1723
- value: function updateParticipantsUrl(participantsUrl) {
1724
- if (participantsUrl && !(0, _lodash.isEqual)(this.participantsUrl, participantsUrl)) {
1725
- this.participantsUrl = participantsUrl;
1726
- }
1727
- }
1728
-
1729
- /**
1730
- * @param {Object} replace
1731
- * @returns {undefined}
1732
- * @memberof LocusInfo
1733
- */
1734
- }, {
1735
- key: "updateReplace",
1736
- value: function updateReplace(replace) {
1737
- if (replace && !(0, _lodash.isEqual)(this.replace, replace)) {
1738
- this.replace = replace;
1712
+ key: "updateReplaces",
1713
+ value: function updateReplaces(replaces) {
1714
+ if (replaces && !(0, _lodash.isEqual)(this.replaces, replaces)) {
1715
+ this.replaces = replaces;
1739
1716
  }
1740
1717
  }
1741
1718
 
@@ -1994,32 +1971,6 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
1994
1971
  }
1995
1972
  }
1996
1973
 
1997
- /**
1998
- * @param {Object} membership
1999
- * @returns {undefined}
2000
- * @memberof LocusInfo
2001
- */
2002
- }, {
2003
- key: "updateMemberShip",
2004
- value: function updateMemberShip(membership) {
2005
- if (membership && !(0, _lodash.isEqual)(this.membership, membership)) {
2006
- this.membership = membership;
2007
- }
2008
- }
2009
-
2010
- /**
2011
- * @param {Array} identities
2012
- * @returns {undefined}
2013
- * @memberof LocusInfo
2014
- */
2015
- }, {
2016
- key: "updateIdentifiers",
2017
- value: function updateIdentifiers(identities) {
2018
- if (identities && !(0, _lodash.isEqual)(this.identities, identities)) {
2019
- this.identities = identities;
2020
- }
2021
- }
2022
-
2023
1974
  /**
2024
1975
  * check the locus is main session's one or not, if is main session's, update main session cache
2025
1976
  * @param {Object} locus
@@ -1 +1 @@
1
- {"version":3,"names":["_lodash","require","_loggerProxy","_interopRequireDefault","_eventsScope","_constants","_infoUtils","_fullState","_selfUtils","_hostUtils","_controlsUtils","_embeddedAppsUtils","_mediaSharesUtils","_parser","_metrics","_constants2","_hashTreeParser","_interopRequireWildcard","_types","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t2","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","_createForOfIteratorHelper","_Symbol","_Symbol$iterator","_Array$isArray2","_unsupportedIterableToArray","length","_n","F","s","done","value","TypeError","a","u","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","Boolean","prototype","valueOf","LocusDtoTopLevelKeys","LocusObjectStateAfterUpdates","unchanged","removed","updated","LocusInfo","exports","_EventsScope","updateMeeting","webex","meetingId","_this","_classCallCheck2","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","hashTreeObjectId2ParticipantId","_map","_inherits2","_createClass2","key","doLocusSync","meeting","isLocusUrlChanged","locus","_this$locusParser$wor","_this2","url","isDelta","meetingDestroyed","workingCopy","syncUrl","locusUrl","LoggerProxy","logger","info","concat","meetingRequest","getLocusDTO","catch","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","LOCUS_DELTA_SYNC_FAILED","correlationId","reason","message","errorName","stack","code","statusCode","err","meetings","destroy","MEETING_REMOVED_REASON","LOCUS_DTO_SYNC_FAILED","then","res","isEmpty","body","baseSequence","locusInfo","handleLocusDelta","onFullLocus","LOCUS_SYNC_HANDLING_FAILED","finally","resume","applyLocusDeltaData","action","_LocusDeltaParser$loc","loci","DESYNC","USE_CURRENT","USE_INCOMING","WAIT","LOCUS_URL_CHANGED","onDeltaLocus","_this3","onDeltaAction","parsedLoci","onDeltaEvent","init","undefined","created","scheduledMeeting","participantsUrl","replaces","aclUrl","sequence","membership","identities","participants","updateLocusCache","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","self","updateLocusUrl","ControlsUtils","isMainSessionDTO","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","updateHostInfo","host","updateMediaShares","mediaShares","updateLinks","links","createHashTreeParser","_ref","initialLocus","HashTreeParser","webexRequest","request","bind","locusInfoUpdateCallback","updateFromHashTree","debugId","substring","_initialSetup","_asyncToGenerator2","_regenerator","mark","_callee","data","_data$locus","_data$locus$links","_data$locus$links$res","_data$locus$links$res2","_data$hashTreeMessage","_selfObject$data","selfObject","_data$locus2","_data$locus2$self","_t","wrap","_context","prev","trigger","hashTreeMessage","locusStateElements","find","el","isSelf","visibleDataSets","warn","Error","hashTreeParser","dataSets","initializeFromMessage","abrupt","resources","initializeFromGetLociResponse","stop","initialSetup","_x","handleLocusAPIResponse","responseBody","sendClassicVsHashTreeMismatchMetric","handleLocusUpdate","updateLocusFromHashTreeObject","object","_this4","type","htMeta","elementId","toLowerCase","addParticipantObject","obj","id","ObjectType","version","locusObjectFromData","_values","ObjectTypeToLocusKeyMap","locusDtoKey","mediaShare","_object$data$floor","_object$data$floor2","_object$data$floor2$b","_locus$mediaShares","floor","disposition","beneficiary","existingMediaShare","ms","_assign","_locus$mediaShares2","participant","participantId","jsSdkMeta","removedParticipantIds","delete","_locus$info","_object$data$controls","_object$data$controls2","_object$data$controls3","isWebinar","role","roles","SELF_ROLES","ATTENDEE","hasRole","classicVsHashTreeMismatchMetricCounter","LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH","handleHashTreeMessage","eventType","LOCUSEVENT","HASH_TREE_DATA_UPDATED","handleMessage","updateType","_this5","LocusInfoUpdateType","OBJECTS_UPDATED","locusObjectStateAfterUpdates","updatedObjects","_object$data","LOCUS_HASH_TREE_UNSUPPORTED_OPERATION","cloneDeep","_stringify","map","hasData","MEETING_ENDED","meetingCollection","SELF_REMOVED","parse","stateElementsMessage","getTheLocusToUpdate","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","emitScoped","scope","eventName","args","emit","onFullLocusWithHashTrees","onFullLocusCommon","onFullLocusClassic","isNewFullLocus","error","_this$participants","_this6","_locus$jsSdkMeta","_participant$htMeta","isReplaceMembers","isNeedReplaceMembers","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","_CALL_","_SIP_BRIDGE_","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","_locus$jsSdkMeta2","mergeParticipants","_locus$self","_locus$self2","state","updateCreated","updateParticipantsUrl","updateReplace","replace","updateAclUrl","updateBasequence","updateSequence","updateMemberShip","updateIdentifiers","compareAndUpdate","getLocusPartner","identity","_USER_","partner","_SPACE_SHARE_","LOCUS","STATE","INACTIVE","internal","newMetrics","submitClientEvent","options","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_INACTIVE_TERMINATING","FULLSTATE_REMOVED","compareSelfAndHost","compareHostAndSelf","_this$parsedLocus$hos","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","isReplace","_this$parsedLocus$con","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","_isArray","_iterator","_step","_participant$person","LOCUSINFO","PARTICIPANT_REASON_CHANGED","displayName","person","primaryDisplayString","isEqual","_ControlsUtils$getCon","getControls","_ControlsUtils$getCon2","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasTranscribeSpokenLanguageChanged","hasManualCaptionChanged","hasEntryExitToneChanged","hasBreakoutChanged","hasVideoEnabledChanged","hasMuteOnEntryChanged","hasShareControlChanged","hasDisallowUnmuteChanged","hasReactionsChanged","hasReactionDisplayNamesChanged","hasViewTheParticipantListChanged","hasRaiseHandChanged","hasVideoChanged","hasInterpretationChanged","hasWebcastChanged","hasMeetingFullChanged","hasPracticeSessionEnabledChanged","hasStageViewChanged","hasAnnotationControlChanged","hasRemoteDesktopControlChanged","hasPollingQAControlChanged","hasAutoEndMeetingChanged","current","CONTROLS_MUTE_ON_ENTRY_CHANGED","muteOnEntry","CONTROLS_SHARE_CONTROL_CHANGED","shareControl","CONTROLS_DISALLOW_UNMUTE_CHANGED","disallowUnmute","CONTROLS_REACTIONS_CHANGED","reactions","CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED","viewTheParticipantList","CONTROLS_RAISE_HAND_CHANGED","raiseHand","CONTROLS_VIDEO_CHANGED","video","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_UPDATED","_current$transcribe","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","spokenLanguage","CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED","enabled","manualCaptionControl","CONTROLS_MEETING_MANUAL_CAPTION_UPDATED","breakout","breakoutMoveId","SelfUtils","getReplacedBreakoutMoveId","device","CONTROLS_MEETING_BREAKOUT_UPDATED","interpretation","CONTROLS_MEETING_INTERPRETATION_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","videoEnabled","unmuteVideoAllowed","SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED","unmuteAllowed","CONTROLS_WEBCAST_CHANGED","webcastControl","CONTROLS_MEETING_FULL_CHANGED","meetingFull","CONTROLS_PRACTICE_SESSION_STATUS_UPDATED","practiceSession","CONTROLS_STAGE_VIEW_UPDATED","videoLayout","CONTROLS_ANNOTATION_CHANGED","annotationControl","CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED","rdcControl","CONTROLS_POLLING_QA_CHANGED","pollingQAControl","CONTROLS_AUTO_END_MEETING_WARNING_CHANGED","autoEndMeetingWarning","_this$links","_this$links2","_ref2","services","LINKS_SERVICES","LINKS_RESOURCES","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","_this$parsedLocus$sel","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","MEETING_INFO_UPDATED","isInitializing","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","forceUpdate","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","brbChanged","SELF_MEETING_BRB_CHANGED","brb","interpretationChanged","SELF_MEETING_INTERPRETATION_CHANGED","selfParticipantId","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","isRolesChanged","_parsedSelves$previou","_parsedSelves$current","SELF_ROLES_CHANGED","oldRoles","newRoles","isVideoMutedByOthersChanged","muted","remoteVideoMuted","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","remoteMuted","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","hasUserEnteredLobby","SELF_UNADMITTED_GUEST","hasUserBeenAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","_parsedSelves$current2","_parsedSelves$current3","_parsedSelves$current4","MEDIA_STATUS_CHANGE","audioStatus","currentMediaStatus","audio","videoStatus","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","isMainLocus","LOCUS_INFO_UPDATE_URL","updateMainSessionLocusCache","newLocus","switchStatus","getSessionSwitchStatus","isReturnToMain","mainSessionLocusCache","_this$fullState","_this$mainSessionLocu","_this$mainSessionLocu2","isActive","ACTIVE","INITIALIZING","includes","clearMainSessionLocusCache","sourceParticipants","existIndex","findIndex","p","splice","mainLocus","_this7","locusClone","assignWith","objValue","srcValue","EventsScope"],"sources":["index.ts"],"sourcesContent":["import {isEqual, assignWith, cloneDeep, isEmpty} 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 _SPACE_SHARE_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n Enum,\n SELF_ROLES,\n} from '../constants';\n\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';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport HashTreeParser, {\n DataSet,\n HashTreeMessage,\n HashTreeObject,\n isSelf,\n LocusInfoUpdateType,\n} from '../hashTree/hashTreeParser';\nimport {ObjectType, ObjectTypeToLocusKeyMap} from '../hashTree/types';\nimport {Links, LocusDTO, LocusFullState} from './types';\n\nexport type LocusLLMEvent = {\n data: {\n eventType: typeof LOCUSEVENT.HASH_TREE_DATA_UPDATED;\n stateElementsMessage: HashTreeMessage;\n };\n};\n\n// list of top level keys in Locus DTO relevant for Hash Tree DTOs processing\n// it does not contain fields specific to classic Locus DTOs like sequence or baseSequence\nconst LocusDtoTopLevelKeys = [\n 'controls',\n 'fullState',\n 'host',\n 'info',\n 'links',\n 'mediaShares',\n 'meetings',\n 'participants',\n 'replaces',\n 'self',\n 'sequence',\n 'syncUrl',\n 'url',\n 'htMeta', // only exists when hash trees are used\n];\n\nexport type LocusApiResponseBody = {\n dataSets?: DataSet[];\n locus: LocusDTO; // this LocusDTO here might not be the full one (for example it won't have all the participants, but it should have self)\n};\n\nconst LocusObjectStateAfterUpdates = {\n unchanged: 'unchanged',\n removed: 'removed',\n updated: 'updated',\n} as const;\n\ntype LocusObjectStateAfterUpdates = Enum<typeof LocusObjectStateAfterUpdates>;\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 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 roles: any;\n mediaShares: any;\n replace: any;\n url: any;\n links?: Links;\n mainSessionLocusCache: any;\n self: any;\n hashTreeParser?: HashTreeParser;\n hashTreeObjectId2ParticipantId: Map<number, string>; // mapping of hash tree object ids to participant ids\n classicVsHashTreeMismatchMetricCounter = 0;\n\n /**\n * Constructor\n * @param {function} updateMeeting callback to update the meeting object from an object\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 this.hashTreeObjectId2ParticipantId = new Map();\n }\n\n /**\n * Does a Locus sync. It tries to get the latest delta DTO or if it can't, it falls back to getting the full Locus DTO.\n * WARNING: This function must not be used for hash tree based Locus meetings.\n *\n * @param {Meeting} meeting\n * @param {boolean} isLocusUrlChanged\n * @param {Locus} locus\n * @returns {undefined}\n */\n private doLocusSync(meeting: any, isLocusUrlChanged: boolean, locus: any) {\n let url;\n let isDelta = false;\n let meetingDestroyed = false;\n\n if (isLocusUrlChanged) {\n // for the locus url changed case from breakout to main session, we should always do a full sync, in this case, the url from locus is always on main session,\n // so use the main session locus url to get the full locus(full participants list in the response).\n // for the locus url changed case from main session to breakout, we don't need to care about it here,\n // because it is a USE_INCOMING case, it will not be executed here.\n url = locus.url;\n } else if (this.locusParser.workingCopy?.syncUrl) {\n url = this.locusParser.workingCopy.syncUrl;\n isDelta = true;\n } else {\n url = meeting.locusUrl;\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#doLocusSync --> doing Locus sync (getting ${\n isDelta ? 'delta' : 'full'\n } DTO)`\n );\n\n // return value ignored on purpose\n meeting.meetingRequest\n .getLocusDTO({url})\n .catch((e) => {\n if (isDelta) {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> delta sync failed, falling back to full sync'\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_DELTA_SYNC_FAILED, {\n correlationId: meeting.correlationId,\n url,\n reason: e.message,\n errorName: e.name,\n stack: e.stack,\n code: e.code,\n });\n\n isDelta = false;\n\n // Locus sometimes returns 403, for example if meeting has ended, no point trying the fallback to full sync in that case\n if (e.statusCode !== 403) {\n return meeting.meetingRequest.getLocusDTO({url: meeting.locusUrl}).catch((err) => {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n meetingDestroyed = true;\n throw err;\n });\n }\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> got 403 from Locus, skipping fallback to full sync, destroying the meeting'\n );\n } else {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n }\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n meetingDestroyed = true;\n throw e;\n })\n .then((res) => {\n if (isEmpty(res.body)) {\n if (isDelta) {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO'\n );\n } else {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> received empty body from full DTO sync request'\n );\n }\n\n return;\n }\n\n if (isDelta) {\n if (res.body.baseSequence) {\n meeting.locusInfo.handleLocusDelta(res.body, meeting);\n\n return;\n }\n // in some cases Locus might return us full DTO even when we asked for a delta\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> got full DTO when we asked for delta'\n );\n }\n meeting.locusInfo.onFullLocus(res.body);\n })\n .catch((e) => {\n LoggerProxy.logger.info(\n `Locus-info:index#doLocusSync --> getLocusDTO succeeded but failed to handle result, locus parser will resume but not all data may be synced (${e.toString()})`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_SYNC_HANDLING_FAILED, {\n correlationId: meeting.correlationId,\n url,\n reason: e.message,\n errorName: e.name,\n stack: e.stack,\n code: e.code,\n });\n })\n .finally(() => {\n if (!meetingDestroyed) {\n // Notify parser to resume processing delta events.\n // Any deltas in the queue that have now been superseded by this sync will simply be ignored\n this.locusParser.resume();\n }\n });\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING, WAIT, LOCUS_URL_CHANGED} = LocusDeltaParser.loci;\n const isLocusUrlChanged = action === LOCUS_URL_CHANGED;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n case WAIT:\n // do nothing\n break;\n case DESYNC:\n case LOCUS_URL_CHANGED:\n this.doLocusSync(meeting, isLocusUrlChanged, locus);\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 this.updateLocusCache(locus);\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, locus.self);\n this.updateLocusUrl(locus.url, ControlsUtils.isMainSessionDTO(locus));\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);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateLinks(locus.links);\n }\n\n /**\n * Creates the HashTreeParser instance.\n * @param {Object} initial locus data\n * @returns {void}\n */\n private createHashTreeParser({\n initialLocus,\n }: {\n initialLocus: {\n dataSets: Array<DataSet>;\n locus: any;\n };\n }) {\n return new HashTreeParser({\n initialLocus,\n webexRequest: this.webex.request.bind(this.webex),\n locusInfoUpdateCallback: this.updateFromHashTree.bind(this),\n debugId: `HT-${this.meetingId.substring(0, 4)}`,\n });\n }\n\n /**\n * @param {Object} data - data to initialize locus info with. It may be from a join or GET /loci response or from a Mercury event that triggers a creation of meeting object\n * @returns {undefined}\n * @memberof LocusInfo\n */\n async initialSetup(\n data:\n | {\n trigger: 'join-response';\n locus: LocusDTO;\n dataSets?: DataSet[];\n }\n | {\n trigger: 'locus-message';\n locus?: LocusDTO;\n hashTreeMessage?: HashTreeMessage;\n }\n | {\n trigger: 'get-loci-response';\n locus?: LocusDTO;\n }\n ) {\n switch (data.trigger) {\n case 'locus-message':\n if (data.hashTreeMessage) {\n // we need the SELF object to be in the received message, because it contains visibleDataSets\n // and these are needed to initialize all the hash trees\n const selfObject = data.hashTreeMessage.locusStateElements?.find((el) => isSelf(el));\n\n if (!selfObject?.data?.visibleDataSets) {\n LoggerProxy.logger.warn(\n `Locus-info:index#initialSetup --> cannot initialize HashTreeParser, SELF object with visibleDataSets is missing in the message`\n );\n\n throw new Error('SELF object with visibleDataSets is missing in the message');\n }\n\n LoggerProxy.logger.info(\n 'Locus-info:index#initialSetup --> creating HashTreeParser from message'\n );\n // first create the HashTreeParser, but don't initialize it with any data yet\n // pass just a fake locus that contains only the visibleDataSets\n this.hashTreeParser = this.createHashTreeParser({\n initialLocus: {\n locus: {self: {visibleDataSets: selfObject.data.visibleDataSets}},\n dataSets: [], // empty, because they will be populated in initializeFromMessage() call // dataSets: data.hashTreeMessage.dataSets,\n },\n });\n\n // now handle the message - that should populate all the visible datasets\n await this.hashTreeParser.initializeFromMessage(data.hashTreeMessage);\n } else {\n // \"classic\" Locus case, no hash trees involved\n this.updateLocusCache(data.locus);\n this.onFullLocus(data.locus, undefined);\n }\n break;\n case 'join-response':\n this.updateLocusCache(data.locus);\n this.onFullLocus(data.locus, undefined, data.dataSets);\n break;\n case 'get-loci-response':\n if (data.locus?.links?.resources?.visibleDataSets?.url) {\n LoggerProxy.logger.info(\n 'Locus-info:index#initialSetup --> creating HashTreeParser from get-loci-response'\n );\n // first create the HashTreeParser, but don't initialize it with any data yet\n // pass just a fake locus that contains only the visibleDataSets\n this.hashTreeParser = this.createHashTreeParser({\n initialLocus: {\n locus: {self: {visibleDataSets: data.locus?.self?.visibleDataSets}},\n dataSets: [], // empty, because we don't have them yet\n },\n });\n\n // now initialize all the data\n await this.hashTreeParser.initializeFromGetLociResponse(data.locus);\n } else {\n // \"classic\" Locus case, no hash trees involved\n this.updateLocusCache(data.locus);\n this.onFullLocus(data.locus, undefined);\n }\n }\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * Handles HTTP response from Locus API call.\n * @param {Meeting} meeting meeting object\n * @param {LocusApiResponseBody} responseBody body of the http response from Locus API call\n * @returns {void}\n */\n handleLocusAPIResponse(meeting, responseBody: LocusApiResponseBody): void {\n if (this.hashTreeParser) {\n if (!responseBody.dataSets) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `expected hash tree dataSets in API response but they are missing`\n );\n // continuing as we can still manage without responseBody.dataSets, but this is very suspicious\n }\n LoggerProxy.logger.info(\n 'Locus-info:index#handleLocusAPIResponse --> passing Locus API response to HashTreeParser: ',\n responseBody\n );\n // update the data in our hash trees\n this.hashTreeParser.handleLocusUpdate(responseBody);\n } else {\n if (responseBody.dataSets) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `unexpected hash tree dataSets in API response`\n );\n }\n // classic Locus delta\n this.handleLocusDelta(responseBody.locus, meeting);\n }\n }\n\n /**\n *\n * @param {HashTreeObject} object data set object\n * @param {any} locus\n * @returns {void}\n */\n updateLocusFromHashTreeObject(object: HashTreeObject, locus: LocusDTO): LocusDTO {\n const type = object.htMeta.elementId.type.toLowerCase();\n\n const addParticipantObject = (obj: HashTreeObject) => {\n if (!locus.participants) {\n locus.participants = [];\n }\n locus.participants.push(obj.data);\n this.hashTreeObjectId2ParticipantId.set(obj.htMeta.elementId.id, obj.data.id);\n };\n\n switch (type) {\n case ObjectType.locus: {\n if (!object.data) {\n // not doing anything here, as we need Locus to always be there (at least some fields)\n // and that's already taken care of in updateFromHashTree()\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> LOCUS object removed, version=${object.htMeta.elementId.version}`\n );\n\n return locus;\n }\n // replace the main locus\n\n // The Locus object we receive from backend has empty participants array,\n // and may have (although it shouldn't) other fields that are managed by other ObjectTypes\n // like \"fullState\" or \"info\", so we're making sure to delete them here\n const locusObjectFromData = object.data;\n\n Object.values(ObjectTypeToLocusKeyMap).forEach((locusDtoKey) => {\n delete locusObjectFromData[locusDtoKey];\n });\n\n locus = {...locus, ...locusObjectFromData};\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> LOCUS object updated to version=${object.htMeta.elementId.version}`\n );\n break;\n }\n case ObjectType.mediaShare:\n if (object.data) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> mediaShare id=${\n object.htMeta.elementId.id\n } name='${object.data.name}' updated ${\n object.data.name === 'content'\n ? `floor=${object.data.floor?.disposition}, ${object.data.floor?.beneficiary?.id}`\n : ''\n } version=${object.htMeta.elementId.version}`\n );\n const existingMediaShare = locus.mediaShares?.find(\n (ms) => ms.htMeta.elementId.id === object.htMeta.elementId.id\n );\n\n if (existingMediaShare) {\n Object.assign(existingMediaShare, object.data);\n } else {\n locus.mediaShares = locus.mediaShares || [];\n locus.mediaShares.push(object.data);\n }\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> mediaShare id=${object.htMeta.elementId.id} removed, version=${object.htMeta.elementId.version}`\n );\n locus.mediaShares = locus.mediaShares?.filter(\n (ms) => ms.htMeta.elementId.id !== object.htMeta.elementId.id\n );\n }\n break;\n case ObjectType.participant:\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> participant id=${\n object.htMeta.elementId.id\n } ${object.data ? 'updated' : 'removed'} version=${object.htMeta.elementId.version}`\n );\n if (object.data) {\n addParticipantObject(object);\n } else {\n const participantId = this.hashTreeObjectId2ParticipantId.get(object.htMeta.elementId.id);\n\n if (!locus.jsSdkMeta) {\n locus.jsSdkMeta = {removedParticipantIds: []};\n }\n locus.jsSdkMeta.removedParticipantIds.push(participantId);\n this.hashTreeObjectId2ParticipantId.delete(object.htMeta.elementId.id);\n }\n break;\n case ObjectType.links:\n case ObjectType.info:\n case ObjectType.fullState:\n case ObjectType.self:\n if (!object.data) {\n // self without data is handled inside HashTreeParser and results in LocusInfoUpdateType.MEETING_ENDED, so we should never get here\n // all other types info, fullstate, etc - Locus should never send them without data\n LoggerProxy.logger.warn(\n `Locus-info:index#updateLocusFromHashTreeObject --> received ${type} object without data, this is not expected! version=${object.htMeta.elementId.version}`\n );\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> ${type} object updated to version ${object.htMeta.elementId.version}`\n );\n const locusDtoKey = ObjectTypeToLocusKeyMap[type];\n locus[locusDtoKey] = object.data;\n\n /* Hash tree based webinar attendees don't receive a Participant object for themselves from Locus,\n but a lot of existing code in SDK and web app expects a member object for self to exist,\n so whenever SELF changes for a webinar attendee, we copy it into a participant object.\n We can do it, because SELF has always all the same properties as a participant object.\n */\n if (\n type === ObjectType.self &&\n locus.info?.isWebinar &&\n object.data.controls?.role?.roles?.find(\n (r) => r.type === SELF_ROLES.ATTENDEE && r.hasRole\n )\n ) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> webinar attendee: creating participant object from self`\n );\n addParticipantObject(object);\n }\n }\n break;\n default:\n LoggerProxy.logger.warn(\n `Locus-info:index#updateLocusFromHashTreeObject --> received unsupported object type ${type}`\n );\n break;\n }\n\n return locus;\n }\n\n /**\n * Sends a metric when we receive something from Locus that uses hash trees while we\n * expect classic deltas or the other way around.\n * @param {Meeting} meeting\n * @param {string} message\n * @returns {void}\n */\n sendClassicVsHashTreeMismatchMetric(meeting: any, message: string) {\n LoggerProxy.logger.warn(\n `Locus-info:index#sendClassicVsHashTreeMismatchMetric --> classic vs hash tree mismatch! ${message}`\n );\n\n // we don't want to flood the metrics system\n if (this.classicVsHashTreeMismatchMetricCounter < 5) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH, {\n correlationId: meeting.correlationId,\n message,\n });\n this.classicVsHashTreeMismatchMetricCounter += 1;\n }\n }\n\n /**\n * Handles a hash tree message received from Locus.\n *\n * @param {Meeting} meeting - The meeting object\n * @param {eventType} eventType - The event type\n * @param {HashTreeMessage} message incoming hash tree message\n * @returns {void}\n */\n private handleHashTreeMessage(meeting: any, eventType: LOCUSEVENT, message: HashTreeMessage) {\n if (eventType !== LOCUSEVENT.HASH_TREE_DATA_UPDATED) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `got ${eventType}, expected ${LOCUSEVENT.HASH_TREE_DATA_UPDATED}`\n );\n\n return;\n }\n\n this.hashTreeParser.handleMessage(message);\n }\n\n /**\n * Callback registered with HashTreeParser to receive locus info updates.\n * Updates our locus info based on the data parsed by the hash tree parser.\n *\n * @param {LocusInfoUpdateType} updateType - The type of update received.\n * @param {Object} [data] - Additional data for the update, if applicable.\n * @returns {void}\n */\n private updateFromHashTree(\n updateType: LocusInfoUpdateType,\n data?: {updatedObjects: HashTreeObject[]}\n ) {\n switch (updateType) {\n case LocusInfoUpdateType.OBJECTS_UPDATED: {\n // initialize our new locus\n let locus: LocusDTO = {\n participants: [],\n jsSdkMeta: {removedParticipantIds: []},\n };\n\n // first go over all the updates and check what happens with the main locus object\n let locusObjectStateAfterUpdates: LocusObjectStateAfterUpdates =\n LocusObjectStateAfterUpdates.unchanged;\n data.updatedObjects.forEach((object) => {\n if (object.htMeta.elementId.type.toLowerCase() === ObjectType.locus) {\n if (locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.updated) {\n // this code doesn't supported it right now,\n // cases for \"updated\" followed by \"removed\", or multiple \"updated\" would need more handling\n // but these should never happen\n LoggerProxy.logger.warn(\n `Locus-info:index#updateFromHashTree --> received multiple LOCUS objects in one update, this is unexpected!`\n );\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.LOCUS_HASH_TREE_UNSUPPORTED_OPERATION,\n {\n locusUrl: object.data?.url || this.url,\n message: object.data\n ? 'multiple LOCUS object updates'\n : 'LOCUS object update followed by removal',\n }\n );\n }\n if (object.data) {\n locusObjectStateAfterUpdates = LocusObjectStateAfterUpdates.updated;\n } else {\n locusObjectStateAfterUpdates = LocusObjectStateAfterUpdates.removed;\n }\n }\n });\n\n // if Locus object is unchanged or removed, we need to keep using the existing locus\n // because the rest of the locusInfo code expects locus to always be present (with at least some of the fields)\n // if it gets updated, we only need to have the fields that are not part of \"locus\" object (like \"info\" or \"mediaShares\")\n // so that when Locus object gets updated, if the new one is missing some field, that field will\n // be removed from our locusInfo\n if (\n locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.unchanged ||\n locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.removed\n ) {\n // copy over all of existing locus except participants\n LocusDtoTopLevelKeys.forEach((key) => {\n if (key !== 'participants') {\n locus[key] = cloneDeep(this[key]);\n }\n });\n } else {\n // initialize only the fields that are not part of main \"Locus\" object\n // (except participants, which need to stay empty - that means \"no participant changes\")\n Object.values(ObjectTypeToLocusKeyMap).forEach((locusDtoKey) => {\n if (locusDtoKey !== 'participants') {\n locus[locusDtoKey] = cloneDeep(this[locusDtoKey]);\n }\n });\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#updateFromHashTree --> LOCUS object is ${locusObjectStateAfterUpdates}, all updates: ${JSON.stringify(\n data.updatedObjects.map((o) => ({\n type: o.htMeta.elementId.type,\n id: o.htMeta.elementId.id,\n hasData: !!o.data,\n }))\n )}`\n );\n // now apply all the updates from the hash tree onto the locus\n data.updatedObjects.forEach((object) => {\n locus = this.updateLocusFromHashTreeObject(object, locus);\n });\n\n // update our locus info with the new locus\n this.onDeltaLocus(locus);\n\n break;\n }\n\n case LocusInfoUpdateType.MEETING_ENDED: {\n LoggerProxy.logger.info(\n `Locus-info:index#updateFromHashTree --> received signal that meeting ended, destroying meeting ${this.meetingId}`\n );\n const meeting = this.webex.meetings.meetingCollection.get(this.meetingId);\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.SELF_REMOVED);\n }\n }\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 if (this.hashTreeParser) {\n this.handleHashTreeMessage(\n meeting,\n data.eventType,\n data.stateElementsMessage as HashTreeMessage\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n const locus = this.getTheLocusToUpdate(data.locus);\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n locus.jsSdkMeta = {removedParticipantIds: []};\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(locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(locus, meeting);\n break;\n case LOCUSEVENT.HASH_TREE_DATA_UPDATED:\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `got ${eventType}, expected classic events`\n );\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(locus, meeting);\n }\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 * Function for handling full locus when it's using hash trees (so not the \"classic\" one).\n *\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @param {DataSet[]} dataSets\n * @returns {void}\n */\n private onFullLocusWithHashTrees(locus: any, eventType?: string, dataSets?: Array<DataSet>) {\n if (!this.hashTreeParser) {\n LoggerProxy.logger.info(`Locus-info:index#onFullLocus --> creating hash tree parser`);\n LoggerProxy.logger.info(\n 'Locus-info:index#onFullLocus --> dataSets:',\n dataSets,\n ' and locus:',\n locus\n );\n this.hashTreeParser = this.createHashTreeParser({\n initialLocus: {locus, dataSets},\n });\n this.onFullLocusCommon(locus, eventType);\n } else {\n // in this case the Locus we're getting is not necessarily the full one\n // so treat it like if we just got it in any api response\n\n LoggerProxy.logger.info(\n 'Locus-info:index#onFullLocus --> hash tree parser already exists, handling it like a normal API response'\n );\n this.handleLocusAPIResponse(undefined, {dataSets, locus});\n }\n }\n\n /**\n * Function for handling full locus when it's the \"classic\" one (not hash trees)\n *\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @returns {void}\n */\n private onFullLocusClassic(locus: any, eventType?: string) {\n if (!this.locusParser.isNewFullLocus(locus)) {\n LoggerProxy.logger.info(\n `Locus-info:index#onFullLocus --> ignoring old full locus DTO, eventType=${eventType}`\n );\n\n return;\n }\n this.onFullLocusCommon(locus, eventType);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @param {DataSet[]} dataSets\n * @returns {object} null\n * @memberof LocusInfo\n */\n onFullLocus(locus: any, eventType?: string, dataSets?: Array<DataSet>) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n\n if (dataSets) {\n // this is the new hashmap Locus DTO format (only applicable to webinars for now)\n this.onFullLocusWithHashTrees(locus, eventType, dataSets);\n } else {\n this.onFullLocusClassic(locus, eventType);\n }\n }\n\n /**\n * Common part of handling full locus, used by both classic and hash tree based locus handling\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @returns {void}\n */\n private onFullLocusCommon(locus: any, eventType?: string) {\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.participants?.forEach((participant) => {\n // participant.htMeta is set only for hash tree based locus\n if (participant.htMeta?.elementId.id) {\n this.hashTreeObjectId2ParticipantId.set(participant.htMeta.elementId.id, participant.id);\n }\n });\n const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.updateLocusInfo(locus);\n this.updateParticipants(\n locus.participants,\n locus.jsSdkMeta?.removedParticipantIds,\n isReplaceMembers\n );\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 const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.mergeParticipants(this.participants, locus.participants);\n this.updateLocusInfo(locus);\n this.updateParticipants(\n locus.participants,\n locus.jsSdkMeta?.removedParticipantIds,\n isReplaceMembers\n );\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, locus.self);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateLocusUrl(locus.url, ControlsUtils.isMainSessionDTO(locus));\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);\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.updateLinks(locus.links);\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 this.parsedLocus.fullState.type === _SPACE_SHARE_\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\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\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 // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\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 // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\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\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\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\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\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 meeting's members\n * @param {Object} participants new participants object\n * @param {Array} removedParticipantIds list of removed participants\n * @param {Boolean} isReplace is replace the whole members\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object, removedParticipantIds?: string[], isReplace?: boolean) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n removedParticipantIds,\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 isReplace,\n }\n );\n\n if (participants && Array.isArray(participants) && participants.length > 0) {\n for (const participant of participants) {\n if (participant && participant?.reason === 'FAILURE') {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n LOCUSINFO.EVENTS.PARTICIPANT_REASON_CHANGED,\n {\n displayName: participant?.person?.primaryDisplayString,\n }\n );\n }\n }\n }\n }\n\n /**\n * @param {Object} controls\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls: object, self: 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 hasTranscribeSpokenLanguageChanged,\n hasManualCaptionChanged,\n hasEntryExitToneChanged,\n hasBreakoutChanged,\n hasVideoEnabledChanged,\n hasMuteOnEntryChanged,\n hasShareControlChanged,\n hasDisallowUnmuteChanged,\n hasReactionsChanged,\n hasReactionDisplayNamesChanged,\n hasViewTheParticipantListChanged,\n hasRaiseHandChanged,\n hasVideoChanged,\n hasInterpretationChanged,\n hasWebcastChanged,\n hasMeetingFullChanged,\n hasPracticeSessionEnabledChanged,\n hasStageViewChanged,\n hasAnnotationControlChanged,\n hasRemoteDesktopControlChanged,\n hasPollingQAControlChanged,\n hasAutoEndMeetingChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasMuteOnEntryChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,\n {state: current.muteOnEntry}\n );\n }\n\n if (hasShareControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,\n {state: current.shareControl}\n );\n }\n\n if (hasDisallowUnmuteChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,\n {state: current.disallowUnmute}\n );\n }\n\n if (hasReactionsChanged || hasReactionDisplayNamesChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,\n {state: current.reactions}\n );\n }\n\n if (hasViewTheParticipantListChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,\n {state: current.viewTheParticipantList}\n );\n }\n\n if (hasRaiseHandChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,\n {state: current.raiseHand}\n );\n }\n\n if (hasVideoChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED,\n {state: current.video}\n );\n }\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 (hasTranscribeSpokenLanguageChanged) {\n const {spokenLanguage} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED,\n {\n spokenLanguage,\n }\n );\n }\n\n if (hasManualCaptionChanged) {\n const {enabled} = current.manualCaptionControl;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED,\n {\n enabled,\n }\n );\n }\n\n if (hasBreakoutChanged) {\n const {breakout} = current;\n breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(\n self,\n this.webex.internal.device.url\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 (hasInterpretationChanged) {\n const {interpretation} = current;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED,\n {\n interpretation,\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.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n // muted: not part of locus.controls\n unmuteAllowed: videoEnabled,\n }\n );\n }\n\n if (hasWebcastChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED,\n {state: current.webcastControl}\n );\n }\n\n if (hasMeetingFullChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED,\n {state: current.meetingFull}\n );\n }\n\n if (hasPracticeSessionEnabledChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED,\n {state: current.practiceSession}\n );\n }\n\n if (hasStageViewChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED,\n {state: current.videoLayout}\n );\n }\n\n if (hasAnnotationControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED,\n {state: current.annotationControl}\n );\n }\n\n if (hasRemoteDesktopControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED,\n {state: current.rdcControl}\n );\n }\n\n if (hasPollingQAControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_POLLING_QA_CHANGED,\n {state: current.pollingQAControl}\n );\n }\n\n if (hasAutoEndMeetingChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_AUTO_END_MEETING_WARNING_CHANGED,\n {state: current.autoEndMeetingWarning}\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 * Updates links and emits appropriate events if services or resources have changed\n * @param {Object} links\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLinks(links?: Links) {\n const {services, resources} = links || {};\n\n if (services && !isEqual(this.links?.services, services)) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLinks',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n\n if (resources && !isEqual(this.links?.resources, resources)) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLinks',\n },\n LOCUSINFO.EVENTS.LINKS_RESOURCES,\n {\n resources,\n }\n );\n }\n\n this.links = links;\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 const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n if ((info && !isEqual(this.info, info)) || (!isEqual(this.roles, roles) && info)) {\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\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 this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {\n isInitializing: !self, // if self is undefined, then the update is caused by locus init\n }\n );\n }\n this.roles = roles;\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 * @param {boolean} forceUpdate force to update the mediaShares\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object, forceUpdate = false) {\n if (mediaShares && (!isEqual(this.mediaShares, mediaShares) || forceUpdate)) {\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 forceUpdate,\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 new locus.self\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) {\n if (self) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(\n this.parsedLocus.self,\n self,\n this.webex.internal.device.url,\n this.participants // using this.participants instead of locus.participants here, because with delta DTOs locus.participants will only contain a small subset of participants\n );\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(this.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.brbChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BRB_CHANGED,\n {\n brb: parsedSelves.current.brb,\n }\n );\n }\n\n if (parsedSelves.updates.interpretationChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED,\n {\n interpretation: parsedSelves.current.interpretation,\n selfParticipantId: parsedSelves.current.selfId,\n }\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\n if (parsedSelves.updates.isRolesChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ROLES_CHANGED,\n {oldRoles: parsedSelves.previous?.roles, newRoles: parsedSelves.current?.roles}\n );\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.hasUserEnteredLobby) {\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.hasUserBeenAdmitted) {\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 * @param {Boolean} isMainLocus\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url: string, isMainLocus = true) {\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, isMainLocus}\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 /**\n * check the locus is main session's one or not, if is main session's, update main session cache\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusCache(locus: any) {\n const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);\n if (isMainSessionDTO) {\n this.updateMainSessionLocusCache(locus);\n }\n }\n\n /**\n * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)\n * if join breakout from main session, main session is not active for the attendee and remove main session locus cache\n * @param {Object} newLocus\n * @returns {Object}\n * @memberof LocusInfo\n */\n getTheLocusToUpdate(newLocus: any) {\n const switchStatus = ControlsUtils.getSessionSwitchStatus(this, newLocus);\n\n if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {\n return cloneDeep(this.mainSessionLocusCache);\n }\n const isMainSessionDTO =\n this.mainSessionLocusCache && ControlsUtils.isMainSessionDTO(this.mainSessionLocusCache);\n\n if (isMainSessionDTO) {\n const isActive =\n [LOCUS.STATE.ACTIVE, LOCUS.STATE.INITIALIZING, LOCUS.STATE.TERMINATING].includes(\n this.fullState?.state\n ) && !this.mainSessionLocusCache?.self?.removed;\n\n if (!isActive) {\n this.clearMainSessionLocusCache();\n }\n }\n\n return newLocus;\n }\n\n /**\n * merge participants by participant id\n * @param {Array} participants\n * @param {Array} sourceParticipants\n * @returns {Array} merged participants\n * @memberof LocusInfo\n */\n // eslint-disable-next-line class-methods-use-this\n mergeParticipants(participants, sourceParticipants) {\n if (!sourceParticipants || !sourceParticipants.length) return participants;\n if (!participants || !participants.length) {\n return sourceParticipants;\n }\n sourceParticipants.forEach((participant) => {\n const existIndex = participants.findIndex((p) => p.id === participant.id);\n if (existIndex > -1) {\n participants.splice(existIndex, 1, participant);\n } else {\n participants.push(participant);\n }\n });\n\n return participants;\n }\n\n /**\n * need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout\n * @param {Object} mainLocus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMainSessionLocusCache(mainLocus: any) {\n if (!mainLocus) {\n return;\n }\n const locusClone = cloneDeep(mainLocus);\n if (this.mainSessionLocusCache) {\n // shallow merge and do special merge for participants\n assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {\n if (key === 'participants') {\n return this.mergeParticipants(objValue, srcValue);\n }\n\n return srcValue || objValue;\n });\n } else {\n this.mainSessionLocusCache = locusClone;\n }\n }\n\n /**\n * clear main session cache\n * @returns {undefined}\n * @memberof LocusInfo\n */\n clearMainSessionLocusCache() {\n this.mainSessionLocusCache = null;\n }\n}\n"],"mappings":"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E,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAX2C;IAAA,IAAAtB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","ignoreList":[]}
1
+ {"version":3,"names":["_lodash","require","_loggerProxy","_interopRequireDefault","_eventsScope","_constants","_infoUtils","_fullState","_selfUtils","_hostUtils","_controlsUtils","_embeddedAppsUtils","_mediaSharesUtils","_parser","_metrics","_constants2","_hashTreeParser","_interopRequireWildcard","_types","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t2","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","_createForOfIteratorHelper","_Symbol","_Symbol$iterator","_Array$isArray2","_unsupportedIterableToArray","length","_n","F","s","done","value","TypeError","a","u","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","Boolean","prototype","valueOf","LocusDtoTopLevelKeys","LocusObjectStateAfterUpdates","unchanged","removed","updated","LocusInfo","exports","_EventsScope","updateMeeting","webex","meetingId","_this","_classCallCheck2","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","hashTreeObjectId2ParticipantId","_map","_inherits2","_createClass2","key","doLocusSync","meeting","isLocusUrlChanged","locus","_this$locusParser$wor","_this2","url","isDelta","meetingDestroyed","workingCopy","syncUrl","locusUrl","LoggerProxy","logger","info","concat","meetingRequest","getLocusDTO","catch","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","LOCUS_DELTA_SYNC_FAILED","correlationId","reason","message","errorName","stack","code","statusCode","err","meetings","destroy","MEETING_REMOVED_REASON","LOCUS_DTO_SYNC_FAILED","then","res","isEmpty","body","baseSequence","locusInfo","handleLocusDelta","onFullLocus","LOCUS_SYNC_HANDLING_FAILED","finally","resume","applyLocusDeltaData","action","_LocusDeltaParser$loc","loci","DESYNC","USE_CURRENT","USE_INCOMING","WAIT","LOCUS_URL_CHANGED","onDeltaLocus","_this3","onDeltaAction","parsedLoci","onDeltaEvent","init","undefined","created","scheduledMeeting","replaces","aclUrl","sequence","participants","updateLocusCache","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","self","updateLocusUrl","ControlsUtils","isMainSessionDTO","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","updateHostInfo","host","updateMediaShares","mediaShares","updateLinks","links","createHashTreeParser","_ref","initialLocus","HashTreeParser","webexRequest","request","bind","locusInfoUpdateCallback","updateFromHashTree","debugId","substring","_initialSetup","_asyncToGenerator2","_regenerator","mark","_callee","data","_data$locus","_data$locus$links","_data$locus$links$res","_data$locus$links$res2","_data$hashTreeMessage","_selfObject$data","selfObject","_data$locus2","_data$locus2$self","_t","wrap","_context","prev","trigger","hashTreeMessage","locusStateElements","find","el","isSelf","visibleDataSets","warn","Error","hashTreeParser","dataSets","initializeFromMessage","abrupt","resources","initializeFromGetLociResponse","stop","initialSetup","_x","handleLocusAPIResponse","responseBody","sendClassicVsHashTreeMismatchMetric","handleLocusUpdate","updateLocusFromHashTreeObject","object","_this4","type","htMeta","elementId","toLowerCase","addParticipantObject","obj","id","ObjectType","version","locusObjectFromData","_values","ObjectTypeToLocusKeyMap","locusDtoKey","mediaShare","_object$data$floor","_object$data$floor2","_object$data$floor2$b","_locus$mediaShares","floor","disposition","beneficiary","existingMediaShare","ms","_assign","_locus$mediaShares2","participant","participantId","jsSdkMeta","removedParticipantIds","delete","_locus$info","_object$data$controls","_object$data$controls2","_object$data$controls3","isWebinar","role","roles","SELF_ROLES","ATTENDEE","hasRole","classicVsHashTreeMismatchMetricCounter","LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH","handleHashTreeMessage","eventType","LOCUSEVENT","HASH_TREE_DATA_UPDATED","handleMessage","updateType","_this5","LocusInfoUpdateType","OBJECTS_UPDATED","locusObjectStateAfterUpdates","updatedObjects","_object$data","LOCUS_HASH_TREE_UNSUPPORTED_OPERATION","cloneDeep","_stringify","map","hasData","MEETING_ENDED","meetingCollection","SELF_REMOVED","parse","stateElementsMessage","getTheLocusToUpdate","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","emitScoped","scope","eventName","args","emit","onFullLocusWithHashTrees","onFullLocusCommon","onFullLocusClassic","isNewFullLocus","error","_this$participants","_this6","_locus$jsSdkMeta","_participant$htMeta","isReplaceMembers","isNeedReplaceMembers","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","_CALL_","_SIP_BRIDGE_","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","_locus$jsSdkMeta2","mergeParticipants","_locus$self","_locus$self2","state","updateCreated","updateReplaces","updateAclUrl","updateBasequence","updateSequence","compareAndUpdate","getLocusPartner","identity","_USER_","partner","_SPACE_SHARE_","LOCUS","STATE","INACTIVE","internal","newMetrics","submitClientEvent","options","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_INACTIVE_TERMINATING","FULLSTATE_REMOVED","compareSelfAndHost","compareHostAndSelf","_this$parsedLocus$hos","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","isReplace","_this$parsedLocus$con","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","_isArray","_iterator","_step","_participant$person","LOCUSINFO","PARTICIPANT_REASON_CHANGED","displayName","person","primaryDisplayString","isEqual","_ControlsUtils$getCon","getControls","_ControlsUtils$getCon2","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasTranscribeSpokenLanguageChanged","hasManualCaptionChanged","hasEntryExitToneChanged","hasBreakoutChanged","hasVideoEnabledChanged","hasMuteOnEntryChanged","hasShareControlChanged","hasDisallowUnmuteChanged","hasReactionsChanged","hasReactionDisplayNamesChanged","hasViewTheParticipantListChanged","hasRaiseHandChanged","hasVideoChanged","hasInterpretationChanged","hasWebcastChanged","hasMeetingFullChanged","hasPracticeSessionEnabledChanged","hasStageViewChanged","hasAnnotationControlChanged","hasRemoteDesktopControlChanged","hasPollingQAControlChanged","hasAutoEndMeetingChanged","current","CONTROLS_MUTE_ON_ENTRY_CHANGED","muteOnEntry","CONTROLS_SHARE_CONTROL_CHANGED","shareControl","CONTROLS_DISALLOW_UNMUTE_CHANGED","disallowUnmute","CONTROLS_REACTIONS_CHANGED","reactions","CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED","viewTheParticipantList","CONTROLS_RAISE_HAND_CHANGED","raiseHand","CONTROLS_VIDEO_CHANGED","video","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_UPDATED","_current$transcribe","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","spokenLanguage","CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED","enabled","manualCaptionControl","CONTROLS_MEETING_MANUAL_CAPTION_UPDATED","breakout","breakoutMoveId","SelfUtils","getReplacedBreakoutMoveId","device","CONTROLS_MEETING_BREAKOUT_UPDATED","interpretation","CONTROLS_MEETING_INTERPRETATION_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","videoEnabled","unmuteVideoAllowed","SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED","unmuteAllowed","CONTROLS_WEBCAST_CHANGED","webcastControl","CONTROLS_MEETING_FULL_CHANGED","meetingFull","CONTROLS_PRACTICE_SESSION_STATUS_UPDATED","practiceSession","CONTROLS_STAGE_VIEW_UPDATED","videoLayout","CONTROLS_ANNOTATION_CHANGED","annotationControl","CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED","rdcControl","CONTROLS_POLLING_QA_CHANGED","pollingQAControl","CONTROLS_AUTO_END_MEETING_WARNING_CHANGED","autoEndMeetingWarning","_this$links","_this$links2","_ref2","services","LINKS_SERVICES","LINKS_RESOURCES","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","_this$parsedLocus$sel","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","MEETING_INFO_UPDATED","isInitializing","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","forceUpdate","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","brbChanged","SELF_MEETING_BRB_CHANGED","brb","interpretationChanged","SELF_MEETING_INTERPRETATION_CHANGED","selfParticipantId","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","isRolesChanged","_parsedSelves$previou","_parsedSelves$current","SELF_ROLES_CHANGED","oldRoles","newRoles","isVideoMutedByOthersChanged","muted","remoteVideoMuted","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","remoteMuted","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","hasUserEnteredLobby","SELF_UNADMITTED_GUEST","hasUserBeenAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","_parsedSelves$current2","_parsedSelves$current3","_parsedSelves$current4","MEDIA_STATUS_CHANGE","audioStatus","currentMediaStatus","audio","videoStatus","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","isMainLocus","LOCUS_INFO_UPDATE_URL","updateMainSessionLocusCache","newLocus","switchStatus","getSessionSwitchStatus","isReturnToMain","mainSessionLocusCache","_this$fullState","_this$mainSessionLocu","_this$mainSessionLocu2","isActive","ACTIVE","INITIALIZING","includes","clearMainSessionLocusCache","sourceParticipants","existIndex","findIndex","p","splice","mainLocus","_this7","locusClone","assignWith","objValue","srcValue","EventsScope"],"sources":["index.ts"],"sourcesContent":["import {isEqual, assignWith, cloneDeep, isEmpty} 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 _SPACE_SHARE_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n Enum,\n SELF_ROLES,\n} from '../constants';\n\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';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport HashTreeParser, {\n DataSet,\n HashTreeMessage,\n HashTreeObject,\n isSelf,\n LocusInfoUpdateType,\n} from '../hashTree/hashTreeParser';\nimport {ObjectType, ObjectTypeToLocusKeyMap} from '../hashTree/types';\nimport {Links, LocusDTO, LocusFullState} from './types';\n\nexport type LocusLLMEvent = {\n data: {\n eventType: typeof LOCUSEVENT.HASH_TREE_DATA_UPDATED;\n stateElementsMessage: HashTreeMessage;\n };\n};\n\n// list of top level keys in Locus DTO relevant for Hash Tree DTOs processing\n// it does not contain fields specific to classic Locus DTOs like sequence or baseSequence\nconst LocusDtoTopLevelKeys = [\n 'controls',\n 'fullState',\n 'host',\n 'info',\n 'links',\n 'mediaShares',\n 'meetings',\n 'participants',\n 'replaces',\n 'self',\n 'sequence',\n 'syncUrl',\n 'url',\n 'htMeta', // only exists when hash trees are used\n];\n\nexport type LocusApiResponseBody = {\n dataSets?: DataSet[];\n locus: LocusDTO; // this LocusDTO here might not be the full one (for example it won't have all the participants, but it should have self)\n};\n\nconst LocusObjectStateAfterUpdates = {\n unchanged: 'unchanged',\n removed: 'removed',\n updated: 'updated',\n} as const;\n\ntype LocusObjectStateAfterUpdates = Enum<typeof LocusObjectStateAfterUpdates>;\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 participants: 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 roles: any;\n mediaShares: any;\n url: any;\n links?: Links;\n mainSessionLocusCache: any;\n self: any;\n hashTreeParser?: HashTreeParser;\n hashTreeObjectId2ParticipantId: Map<number, string>; // mapping of hash tree object ids to participant ids\n classicVsHashTreeMismatchMetricCounter = 0;\n\n /**\n * Constructor\n * @param {function} updateMeeting callback to update the meeting object from an object\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 this.hashTreeObjectId2ParticipantId = new Map();\n }\n\n /**\n * Does a Locus sync. It tries to get the latest delta DTO or if it can't, it falls back to getting the full Locus DTO.\n * WARNING: This function must not be used for hash tree based Locus meetings.\n *\n * @param {Meeting} meeting\n * @param {boolean} isLocusUrlChanged\n * @param {Locus} locus\n * @returns {undefined}\n */\n private doLocusSync(meeting: any, isLocusUrlChanged: boolean, locus: any) {\n let url;\n let isDelta = false;\n let meetingDestroyed = false;\n\n if (isLocusUrlChanged) {\n // for the locus url changed case from breakout to main session, we should always do a full sync, in this case, the url from locus is always on main session,\n // so use the main session locus url to get the full locus(full participants list in the response).\n // for the locus url changed case from main session to breakout, we don't need to care about it here,\n // because it is a USE_INCOMING case, it will not be executed here.\n url = locus.url;\n } else if (this.locusParser.workingCopy?.syncUrl) {\n url = this.locusParser.workingCopy.syncUrl;\n isDelta = true;\n } else {\n url = meeting.locusUrl;\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#doLocusSync --> doing Locus sync (getting ${\n isDelta ? 'delta' : 'full'\n } DTO)`\n );\n\n // return value ignored on purpose\n meeting.meetingRequest\n .getLocusDTO({url})\n .catch((e) => {\n if (isDelta) {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> delta sync failed, falling back to full sync'\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_DELTA_SYNC_FAILED, {\n correlationId: meeting.correlationId,\n url,\n reason: e.message,\n errorName: e.name,\n stack: e.stack,\n code: e.code,\n });\n\n isDelta = false;\n\n // Locus sometimes returns 403, for example if meeting has ended, no point trying the fallback to full sync in that case\n if (e.statusCode !== 403) {\n return meeting.meetingRequest.getLocusDTO({url: meeting.locusUrl}).catch((err) => {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n meetingDestroyed = true;\n throw err;\n });\n }\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> got 403 from Locus, skipping fallback to full sync, destroying the meeting'\n );\n } else {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n }\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n meetingDestroyed = true;\n throw e;\n })\n .then((res) => {\n if (isEmpty(res.body)) {\n if (isDelta) {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO'\n );\n } else {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> received empty body from full DTO sync request'\n );\n }\n\n return;\n }\n\n if (isDelta) {\n if (res.body.baseSequence) {\n meeting.locusInfo.handleLocusDelta(res.body, meeting);\n\n return;\n }\n // in some cases Locus might return us full DTO even when we asked for a delta\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> got full DTO when we asked for delta'\n );\n }\n meeting.locusInfo.onFullLocus(res.body);\n })\n .catch((e) => {\n LoggerProxy.logger.info(\n `Locus-info:index#doLocusSync --> getLocusDTO succeeded but failed to handle result, locus parser will resume but not all data may be synced (${e.toString()})`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_SYNC_HANDLING_FAILED, {\n correlationId: meeting.correlationId,\n url,\n reason: e.message,\n errorName: e.name,\n stack: e.stack,\n code: e.code,\n });\n })\n .finally(() => {\n if (!meetingDestroyed) {\n // Notify parser to resume processing delta events.\n // Any deltas in the queue that have now been superseded by this sync will simply be ignored\n this.locusParser.resume();\n }\n });\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING, WAIT, LOCUS_URL_CHANGED} = LocusDeltaParser.loci;\n const isLocusUrlChanged = action === LOCUS_URL_CHANGED;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n case WAIT:\n // do nothing\n break;\n case DESYNC:\n case LOCUS_URL_CHANGED:\n this.doLocusSync(meeting, isLocusUrlChanged, locus);\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.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || 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 this.updateLocusCache(locus);\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, locus.self);\n this.updateLocusUrl(locus.url, ControlsUtils.isMainSessionDTO(locus));\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);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateLinks(locus.links);\n }\n\n /**\n * Creates the HashTreeParser instance.\n * @param {Object} initial locus data\n * @returns {void}\n */\n private createHashTreeParser({\n initialLocus,\n }: {\n initialLocus: {\n dataSets: Array<DataSet>;\n locus: any;\n };\n }) {\n return new HashTreeParser({\n initialLocus,\n webexRequest: this.webex.request.bind(this.webex),\n locusInfoUpdateCallback: this.updateFromHashTree.bind(this),\n debugId: `HT-${this.meetingId.substring(0, 4)}`,\n });\n }\n\n /**\n * @param {Object} data - data to initialize locus info with. It may be from a join or GET /loci response or from a Mercury event that triggers a creation of meeting object\n * @returns {undefined}\n * @memberof LocusInfo\n */\n async initialSetup(\n data:\n | {\n trigger: 'join-response';\n locus: LocusDTO;\n dataSets?: DataSet[];\n }\n | {\n trigger: 'locus-message';\n locus?: LocusDTO;\n hashTreeMessage?: HashTreeMessage;\n }\n | {\n trigger: 'get-loci-response';\n locus?: LocusDTO;\n }\n ) {\n switch (data.trigger) {\n case 'locus-message':\n if (data.hashTreeMessage) {\n // we need the SELF object to be in the received message, because it contains visibleDataSets\n // and these are needed to initialize all the hash trees\n const selfObject = data.hashTreeMessage.locusStateElements?.find((el) => isSelf(el));\n\n if (!selfObject?.data?.visibleDataSets) {\n LoggerProxy.logger.warn(\n `Locus-info:index#initialSetup --> cannot initialize HashTreeParser, SELF object with visibleDataSets is missing in the message`\n );\n\n throw new Error('SELF object with visibleDataSets is missing in the message');\n }\n\n LoggerProxy.logger.info(\n 'Locus-info:index#initialSetup --> creating HashTreeParser from message'\n );\n // first create the HashTreeParser, but don't initialize it with any data yet\n // pass just a fake locus that contains only the visibleDataSets\n this.hashTreeParser = this.createHashTreeParser({\n initialLocus: {\n locus: {self: {visibleDataSets: selfObject.data.visibleDataSets}},\n dataSets: [], // empty, because they will be populated in initializeFromMessage() call // dataSets: data.hashTreeMessage.dataSets,\n },\n });\n\n // now handle the message - that should populate all the visible datasets\n await this.hashTreeParser.initializeFromMessage(data.hashTreeMessage);\n } else {\n // \"classic\" Locus case, no hash trees involved\n this.updateLocusCache(data.locus);\n this.onFullLocus(data.locus, undefined);\n }\n break;\n case 'join-response':\n this.updateLocusCache(data.locus);\n this.onFullLocus(data.locus, undefined, data.dataSets);\n break;\n case 'get-loci-response':\n if (data.locus?.links?.resources?.visibleDataSets?.url) {\n LoggerProxy.logger.info(\n 'Locus-info:index#initialSetup --> creating HashTreeParser from get-loci-response'\n );\n // first create the HashTreeParser, but don't initialize it with any data yet\n // pass just a fake locus that contains only the visibleDataSets\n this.hashTreeParser = this.createHashTreeParser({\n initialLocus: {\n locus: {self: {visibleDataSets: data.locus?.self?.visibleDataSets}},\n dataSets: [], // empty, because we don't have them yet\n },\n });\n\n // now initialize all the data\n await this.hashTreeParser.initializeFromGetLociResponse(data.locus);\n } else {\n // \"classic\" Locus case, no hash trees involved\n this.updateLocusCache(data.locus);\n this.onFullLocus(data.locus, undefined);\n }\n }\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * Handles HTTP response from Locus API call.\n * @param {Meeting} meeting meeting object\n * @param {LocusApiResponseBody} responseBody body of the http response from Locus API call\n * @returns {void}\n */\n handleLocusAPIResponse(meeting, responseBody: LocusApiResponseBody): void {\n if (this.hashTreeParser) {\n if (!responseBody.dataSets) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `expected hash tree dataSets in API response but they are missing`\n );\n // continuing as we can still manage without responseBody.dataSets, but this is very suspicious\n }\n LoggerProxy.logger.info(\n 'Locus-info:index#handleLocusAPIResponse --> passing Locus API response to HashTreeParser: ',\n responseBody\n );\n // update the data in our hash trees\n this.hashTreeParser.handleLocusUpdate(responseBody);\n } else {\n if (responseBody.dataSets) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `unexpected hash tree dataSets in API response`\n );\n }\n // classic Locus delta\n this.handleLocusDelta(responseBody.locus, meeting);\n }\n }\n\n /**\n *\n * @param {HashTreeObject} object data set object\n * @param {any} locus\n * @returns {void}\n */\n updateLocusFromHashTreeObject(object: HashTreeObject, locus: LocusDTO): LocusDTO {\n const type = object.htMeta.elementId.type.toLowerCase();\n\n const addParticipantObject = (obj: HashTreeObject) => {\n if (!locus.participants) {\n locus.participants = [];\n }\n locus.participants.push(obj.data);\n this.hashTreeObjectId2ParticipantId.set(obj.htMeta.elementId.id, obj.data.id);\n };\n\n switch (type) {\n case ObjectType.locus: {\n if (!object.data) {\n // not doing anything here, as we need Locus to always be there (at least some fields)\n // and that's already taken care of in updateFromHashTree()\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> LOCUS object removed, version=${object.htMeta.elementId.version}`\n );\n\n return locus;\n }\n // replace the main locus\n\n // The Locus object we receive from backend has empty participants array,\n // and may have (although it shouldn't) other fields that are managed by other ObjectTypes\n // like \"fullState\" or \"info\", so we're making sure to delete them here\n const locusObjectFromData = object.data;\n\n Object.values(ObjectTypeToLocusKeyMap).forEach((locusDtoKey) => {\n delete locusObjectFromData[locusDtoKey];\n });\n\n locus = {...locus, ...locusObjectFromData};\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> LOCUS object updated to version=${object.htMeta.elementId.version}`\n );\n break;\n }\n case ObjectType.mediaShare:\n if (object.data) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> mediaShare id=${\n object.htMeta.elementId.id\n } name='${object.data.name}' updated ${\n object.data.name === 'content'\n ? `floor=${object.data.floor?.disposition}, ${object.data.floor?.beneficiary?.id}`\n : ''\n } version=${object.htMeta.elementId.version}`\n );\n const existingMediaShare = locus.mediaShares?.find(\n (ms) => ms.htMeta.elementId.id === object.htMeta.elementId.id\n );\n\n if (existingMediaShare) {\n Object.assign(existingMediaShare, object.data);\n } else {\n locus.mediaShares = locus.mediaShares || [];\n locus.mediaShares.push(object.data);\n }\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> mediaShare id=${object.htMeta.elementId.id} removed, version=${object.htMeta.elementId.version}`\n );\n locus.mediaShares = locus.mediaShares?.filter(\n (ms) => ms.htMeta.elementId.id !== object.htMeta.elementId.id\n );\n }\n break;\n case ObjectType.participant:\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> participant id=${\n object.htMeta.elementId.id\n } ${object.data ? 'updated' : 'removed'} version=${object.htMeta.elementId.version}`\n );\n if (object.data) {\n addParticipantObject(object);\n } else {\n const participantId = this.hashTreeObjectId2ParticipantId.get(object.htMeta.elementId.id);\n\n if (!locus.jsSdkMeta) {\n locus.jsSdkMeta = {removedParticipantIds: []};\n }\n locus.jsSdkMeta.removedParticipantIds.push(participantId);\n this.hashTreeObjectId2ParticipantId.delete(object.htMeta.elementId.id);\n }\n break;\n case ObjectType.links:\n case ObjectType.info:\n case ObjectType.fullState:\n case ObjectType.self:\n if (!object.data) {\n // self without data is handled inside HashTreeParser and results in LocusInfoUpdateType.MEETING_ENDED, so we should never get here\n // all other types info, fullstate, etc - Locus should never send them without data\n LoggerProxy.logger.warn(\n `Locus-info:index#updateLocusFromHashTreeObject --> received ${type} object without data, this is not expected! version=${object.htMeta.elementId.version}`\n );\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> ${type} object updated to version ${object.htMeta.elementId.version}`\n );\n const locusDtoKey = ObjectTypeToLocusKeyMap[type];\n locus[locusDtoKey] = object.data;\n\n /* Hash tree based webinar attendees don't receive a Participant object for themselves from Locus,\n but a lot of existing code in SDK and web app expects a member object for self to exist,\n so whenever SELF changes for a webinar attendee, we copy it into a participant object.\n We can do it, because SELF has always all the same properties as a participant object.\n */\n if (\n type === ObjectType.self &&\n locus.info?.isWebinar &&\n object.data.controls?.role?.roles?.find(\n (r) => r.type === SELF_ROLES.ATTENDEE && r.hasRole\n )\n ) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> webinar attendee: creating participant object from self`\n );\n addParticipantObject(object);\n }\n }\n break;\n default:\n LoggerProxy.logger.warn(\n `Locus-info:index#updateLocusFromHashTreeObject --> received unsupported object type ${type}`\n );\n break;\n }\n\n return locus;\n }\n\n /**\n * Sends a metric when we receive something from Locus that uses hash trees while we\n * expect classic deltas or the other way around.\n * @param {Meeting} meeting\n * @param {string} message\n * @returns {void}\n */\n sendClassicVsHashTreeMismatchMetric(meeting: any, message: string) {\n LoggerProxy.logger.warn(\n `Locus-info:index#sendClassicVsHashTreeMismatchMetric --> classic vs hash tree mismatch! ${message}`\n );\n\n // we don't want to flood the metrics system\n if (this.classicVsHashTreeMismatchMetricCounter < 5) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH, {\n correlationId: meeting.correlationId,\n message,\n });\n this.classicVsHashTreeMismatchMetricCounter += 1;\n }\n }\n\n /**\n * Handles a hash tree message received from Locus.\n *\n * @param {Meeting} meeting - The meeting object\n * @param {eventType} eventType - The event type\n * @param {HashTreeMessage} message incoming hash tree message\n * @returns {void}\n */\n private handleHashTreeMessage(meeting: any, eventType: LOCUSEVENT, message: HashTreeMessage) {\n if (eventType !== LOCUSEVENT.HASH_TREE_DATA_UPDATED) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `got ${eventType}, expected ${LOCUSEVENT.HASH_TREE_DATA_UPDATED}`\n );\n\n return;\n }\n\n this.hashTreeParser.handleMessage(message);\n }\n\n /**\n * Callback registered with HashTreeParser to receive locus info updates.\n * Updates our locus info based on the data parsed by the hash tree parser.\n *\n * @param {LocusInfoUpdateType} updateType - The type of update received.\n * @param {Object} [data] - Additional data for the update, if applicable.\n * @returns {void}\n */\n private updateFromHashTree(\n updateType: LocusInfoUpdateType,\n data?: {updatedObjects: HashTreeObject[]}\n ) {\n switch (updateType) {\n case LocusInfoUpdateType.OBJECTS_UPDATED: {\n // initialize our new locus\n let locus: LocusDTO = {\n participants: [],\n jsSdkMeta: {removedParticipantIds: []},\n };\n\n // first go over all the updates and check what happens with the main locus object\n let locusObjectStateAfterUpdates: LocusObjectStateAfterUpdates =\n LocusObjectStateAfterUpdates.unchanged;\n data.updatedObjects.forEach((object) => {\n if (object.htMeta.elementId.type.toLowerCase() === ObjectType.locus) {\n if (locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.updated) {\n // this code doesn't supported it right now,\n // cases for \"updated\" followed by \"removed\", or multiple \"updated\" would need more handling\n // but these should never happen\n LoggerProxy.logger.warn(\n `Locus-info:index#updateFromHashTree --> received multiple LOCUS objects in one update, this is unexpected!`\n );\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.LOCUS_HASH_TREE_UNSUPPORTED_OPERATION,\n {\n locusUrl: object.data?.url || this.url,\n message: object.data\n ? 'multiple LOCUS object updates'\n : 'LOCUS object update followed by removal',\n }\n );\n }\n if (object.data) {\n locusObjectStateAfterUpdates = LocusObjectStateAfterUpdates.updated;\n } else {\n locusObjectStateAfterUpdates = LocusObjectStateAfterUpdates.removed;\n }\n }\n });\n\n // if Locus object is unchanged or removed, we need to keep using the existing locus\n // because the rest of the locusInfo code expects locus to always be present (with at least some of the fields)\n // if it gets updated, we only need to have the fields that are not part of \"locus\" object (like \"info\" or \"mediaShares\")\n // so that when Locus object gets updated, if the new one is missing some field, that field will\n // be removed from our locusInfo\n if (\n locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.unchanged ||\n locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.removed\n ) {\n // copy over all of existing locus except participants\n LocusDtoTopLevelKeys.forEach((key) => {\n if (key !== 'participants') {\n locus[key] = cloneDeep(this[key]);\n }\n });\n } else {\n // initialize only the fields that are not part of main \"Locus\" object\n // (except participants, which need to stay empty - that means \"no participant changes\")\n Object.values(ObjectTypeToLocusKeyMap).forEach((locusDtoKey) => {\n if (locusDtoKey !== 'participants') {\n locus[locusDtoKey] = cloneDeep(this[locusDtoKey]);\n }\n });\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#updateFromHashTree --> LOCUS object is ${locusObjectStateAfterUpdates}, all updates: ${JSON.stringify(\n data.updatedObjects.map((o) => ({\n type: o.htMeta.elementId.type,\n id: o.htMeta.elementId.id,\n hasData: !!o.data,\n }))\n )}`\n );\n // now apply all the updates from the hash tree onto the locus\n data.updatedObjects.forEach((object) => {\n locus = this.updateLocusFromHashTreeObject(object, locus);\n });\n\n // update our locus info with the new locus\n this.onDeltaLocus(locus);\n\n break;\n }\n\n case LocusInfoUpdateType.MEETING_ENDED: {\n LoggerProxy.logger.info(\n `Locus-info:index#updateFromHashTree --> received signal that meeting ended, destroying meeting ${this.meetingId}`\n );\n const meeting = this.webex.meetings.meetingCollection.get(this.meetingId);\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.SELF_REMOVED);\n }\n }\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 if (this.hashTreeParser) {\n this.handleHashTreeMessage(\n meeting,\n data.eventType,\n data.stateElementsMessage as HashTreeMessage\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n const locus = this.getTheLocusToUpdate(data.locus);\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n locus.jsSdkMeta = {removedParticipantIds: []};\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(locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(locus, meeting);\n break;\n case LOCUSEVENT.HASH_TREE_DATA_UPDATED:\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `got ${eventType}, expected classic events`\n );\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(locus, meeting);\n }\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 * Function for handling full locus when it's using hash trees (so not the \"classic\" one).\n *\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @param {DataSet[]} dataSets\n * @returns {void}\n */\n private onFullLocusWithHashTrees(locus: any, eventType?: string, dataSets?: Array<DataSet>) {\n if (!this.hashTreeParser) {\n LoggerProxy.logger.info(`Locus-info:index#onFullLocus --> creating hash tree parser`);\n LoggerProxy.logger.info(\n 'Locus-info:index#onFullLocus --> dataSets:',\n dataSets,\n ' and locus:',\n locus\n );\n this.hashTreeParser = this.createHashTreeParser({\n initialLocus: {locus, dataSets},\n });\n this.onFullLocusCommon(locus, eventType);\n } else {\n // in this case the Locus we're getting is not necessarily the full one\n // so treat it like if we just got it in any api response\n\n LoggerProxy.logger.info(\n 'Locus-info:index#onFullLocus --> hash tree parser already exists, handling it like a normal API response'\n );\n this.handleLocusAPIResponse(undefined, {dataSets, locus});\n }\n }\n\n /**\n * Function for handling full locus when it's the \"classic\" one (not hash trees)\n *\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @returns {void}\n */\n private onFullLocusClassic(locus: any, eventType?: string) {\n if (!this.locusParser.isNewFullLocus(locus)) {\n LoggerProxy.logger.info(\n `Locus-info:index#onFullLocus --> ignoring old full locus DTO, eventType=${eventType}`\n );\n\n return;\n }\n this.onFullLocusCommon(locus, eventType);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @param {DataSet[]} dataSets\n * @returns {object} null\n * @memberof LocusInfo\n */\n onFullLocus(locus: any, eventType?: string, dataSets?: Array<DataSet>) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n\n if (dataSets) {\n // this is the new hashmap Locus DTO format (only applicable to webinars for now)\n this.onFullLocusWithHashTrees(locus, eventType, dataSets);\n } else {\n this.onFullLocusClassic(locus, eventType);\n }\n }\n\n /**\n * Common part of handling full locus, used by both classic and hash tree based locus handling\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @returns {void}\n */\n private onFullLocusCommon(locus: any, eventType?: string) {\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.participants?.forEach((participant) => {\n // participant.htMeta is set only for hash tree based locus\n if (participant.htMeta?.elementId.id) {\n this.hashTreeObjectId2ParticipantId.set(participant.htMeta.elementId.id, participant.id);\n }\n });\n const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.updateLocusInfo(locus);\n this.updateParticipants(\n locus.participants,\n locus.jsSdkMeta?.removedParticipantIds,\n isReplaceMembers\n );\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 const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.mergeParticipants(this.participants, locus.participants);\n this.updateLocusInfo(locus);\n this.updateParticipants(\n locus.participants,\n locus.jsSdkMeta?.removedParticipantIds,\n isReplaceMembers\n );\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, locus.self);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateLocusUrl(locus.url, ControlsUtils.isMainSessionDTO(locus));\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateReplaces(locus.replaces);\n this.updateSelf(locus.self);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateLinks(locus.links);\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 this.parsedLocus.fullState.type === _SPACE_SHARE_\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\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\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 // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\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 // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\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\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\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\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\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 meeting's members\n * @param {Object} participants new participants object\n * @param {Array} removedParticipantIds list of removed participants\n * @param {Boolean} isReplace is replace the whole members\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object, removedParticipantIds?: string[], isReplace?: boolean) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n removedParticipantIds,\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 isReplace,\n }\n );\n\n if (participants && Array.isArray(participants) && participants.length > 0) {\n for (const participant of participants) {\n if (participant && participant?.reason === 'FAILURE') {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n LOCUSINFO.EVENTS.PARTICIPANT_REASON_CHANGED,\n {\n displayName: participant?.person?.primaryDisplayString,\n }\n );\n }\n }\n }\n }\n\n /**\n * @param {Object} controls\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls: object, self: 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 hasTranscribeSpokenLanguageChanged,\n hasManualCaptionChanged,\n hasEntryExitToneChanged,\n hasBreakoutChanged,\n hasVideoEnabledChanged,\n hasMuteOnEntryChanged,\n hasShareControlChanged,\n hasDisallowUnmuteChanged,\n hasReactionsChanged,\n hasReactionDisplayNamesChanged,\n hasViewTheParticipantListChanged,\n hasRaiseHandChanged,\n hasVideoChanged,\n hasInterpretationChanged,\n hasWebcastChanged,\n hasMeetingFullChanged,\n hasPracticeSessionEnabledChanged,\n hasStageViewChanged,\n hasAnnotationControlChanged,\n hasRemoteDesktopControlChanged,\n hasPollingQAControlChanged,\n hasAutoEndMeetingChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasMuteOnEntryChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,\n {state: current.muteOnEntry}\n );\n }\n\n if (hasShareControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,\n {state: current.shareControl}\n );\n }\n\n if (hasDisallowUnmuteChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,\n {state: current.disallowUnmute}\n );\n }\n\n if (hasReactionsChanged || hasReactionDisplayNamesChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,\n {state: current.reactions}\n );\n }\n\n if (hasViewTheParticipantListChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,\n {state: current.viewTheParticipantList}\n );\n }\n\n if (hasRaiseHandChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,\n {state: current.raiseHand}\n );\n }\n\n if (hasVideoChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED,\n {state: current.video}\n );\n }\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 (hasTranscribeSpokenLanguageChanged) {\n const {spokenLanguage} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED,\n {\n spokenLanguage,\n }\n );\n }\n\n if (hasManualCaptionChanged) {\n const {enabled} = current.manualCaptionControl;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED,\n {\n enabled,\n }\n );\n }\n\n if (hasBreakoutChanged) {\n const {breakout} = current;\n breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(\n self,\n this.webex.internal.device.url\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 (hasInterpretationChanged) {\n const {interpretation} = current;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED,\n {\n interpretation,\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.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n // muted: not part of locus.controls\n unmuteAllowed: videoEnabled,\n }\n );\n }\n\n if (hasWebcastChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED,\n {state: current.webcastControl}\n );\n }\n\n if (hasMeetingFullChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED,\n {state: current.meetingFull}\n );\n }\n\n if (hasPracticeSessionEnabledChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED,\n {state: current.practiceSession}\n );\n }\n\n if (hasStageViewChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED,\n {state: current.videoLayout}\n );\n }\n\n if (hasAnnotationControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED,\n {state: current.annotationControl}\n );\n }\n\n if (hasRemoteDesktopControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED,\n {state: current.rdcControl}\n );\n }\n\n if (hasPollingQAControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_POLLING_QA_CHANGED,\n {state: current.pollingQAControl}\n );\n }\n\n if (hasAutoEndMeetingChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_AUTO_END_MEETING_WARNING_CHANGED,\n {state: current.autoEndMeetingWarning}\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 * Updates links and emits appropriate events if services or resources have changed\n * @param {Object} links\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLinks(links?: Links) {\n const {services, resources} = links || {};\n\n if (services && !isEqual(this.links?.services, services)) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLinks',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n\n if (resources && !isEqual(this.links?.resources, resources)) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLinks',\n },\n LOCUSINFO.EVENTS.LINKS_RESOURCES,\n {\n resources,\n }\n );\n }\n\n this.links = links;\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 const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n if ((info && !isEqual(this.info, info)) || (!isEqual(this.roles, roles) && info)) {\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\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 this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {\n isInitializing: !self, // if self is undefined, then the update is caused by locus init\n }\n );\n }\n this.roles = roles;\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 * @param {boolean} forceUpdate force to update the mediaShares\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object, forceUpdate = false) {\n if (mediaShares && (!isEqual(this.mediaShares, mediaShares) || forceUpdate)) {\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 forceUpdate,\n }\n );\n }\n }\n\n /**\n * @param {Object} replaces\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplaces(replaces: object) {\n if (replaces && !isEqual(this.replaces, replaces)) {\n this.replaces = replaces;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the new locus.self\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) {\n if (self) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(\n this.parsedLocus.self,\n self,\n this.webex.internal.device.url,\n this.participants // using this.participants instead of locus.participants here, because with delta DTOs locus.participants will only contain a small subset of participants\n );\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(this.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.brbChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BRB_CHANGED,\n {\n brb: parsedSelves.current.brb,\n }\n );\n }\n\n if (parsedSelves.updates.interpretationChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED,\n {\n interpretation: parsedSelves.current.interpretation,\n selfParticipantId: parsedSelves.current.selfId,\n }\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\n if (parsedSelves.updates.isRolesChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ROLES_CHANGED,\n {oldRoles: parsedSelves.previous?.roles, newRoles: parsedSelves.current?.roles}\n );\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.hasUserEnteredLobby) {\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.hasUserBeenAdmitted) {\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 * @param {Boolean} isMainLocus\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url: string, isMainLocus = true) {\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, isMainLocus}\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 * check the locus is main session's one or not, if is main session's, update main session cache\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusCache(locus: any) {\n const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);\n if (isMainSessionDTO) {\n this.updateMainSessionLocusCache(locus);\n }\n }\n\n /**\n * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)\n * if join breakout from main session, main session is not active for the attendee and remove main session locus cache\n * @param {Object} newLocus\n * @returns {Object}\n * @memberof LocusInfo\n */\n getTheLocusToUpdate(newLocus: any) {\n const switchStatus = ControlsUtils.getSessionSwitchStatus(this, newLocus);\n\n if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {\n return cloneDeep(this.mainSessionLocusCache);\n }\n const isMainSessionDTO =\n this.mainSessionLocusCache && ControlsUtils.isMainSessionDTO(this.mainSessionLocusCache);\n\n if (isMainSessionDTO) {\n const isActive =\n [LOCUS.STATE.ACTIVE, LOCUS.STATE.INITIALIZING, LOCUS.STATE.TERMINATING].includes(\n this.fullState?.state\n ) && !this.mainSessionLocusCache?.self?.removed;\n\n if (!isActive) {\n this.clearMainSessionLocusCache();\n }\n }\n\n return newLocus;\n }\n\n /**\n * merge participants by participant id\n * @param {Array} participants\n * @param {Array} sourceParticipants\n * @returns {Array} merged participants\n * @memberof LocusInfo\n */\n // eslint-disable-next-line class-methods-use-this\n mergeParticipants(participants, sourceParticipants) {\n if (!sourceParticipants || !sourceParticipants.length) return participants;\n if (!participants || !participants.length) {\n return sourceParticipants;\n }\n sourceParticipants.forEach((participant) => {\n const existIndex = participants.findIndex((p) => p.id === participant.id);\n if (existIndex > -1) {\n participants.splice(existIndex, 1, participant);\n } else {\n participants.push(participant);\n }\n });\n\n return participants;\n }\n\n /**\n * need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout\n * @param {Object} mainLocus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMainSessionLocusCache(mainLocus: any) {\n if (!mainLocus) {\n return;\n }\n const locusClone = cloneDeep(mainLocus);\n if (this.mainSessionLocusCache) {\n // shallow merge and do special merge for participants\n assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {\n if (key === 'participants') {\n return this.mergeParticipants(objValue, srcValue);\n }\n\n return srcValue || objValue;\n });\n } else {\n this.mainSessionLocusCache = locusClone;\n }\n }\n\n /**\n * clear main session cache\n * @returns {undefined}\n * @memberof LocusInfo\n */\n clearMainSessionLocusCache() {\n this.mainSessionLocusCache = null;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -29,10 +29,7 @@ export default class LocusInfo extends EventsScope {
29
29
  aclUrl: any;
30
30
  baseSequence: any;
31
31
  created: any;
32
- identities: any;
33
- membership: any;
34
32
  participants: any;
35
- participantsUrl: any;
36
33
  replaces: any;
37
34
  scheduledMeeting: any;
38
35
  sequence: any;
@@ -44,7 +41,6 @@ export default class LocusInfo extends EventsScope {
44
41
  info: any;
45
42
  roles: any;
46
43
  mediaShares: any;
47
- replace: any;
48
44
  url: any;
49
45
  links?: Links;
50
46
  mainSessionLocusCache: any;
@@ -320,17 +316,11 @@ export default class LocusInfo extends EventsScope {
320
316
  */
321
317
  updateMediaShares(mediaShares: object, forceUpdate?: boolean): void;
322
318
  /**
323
- * @param {String} participantsUrl
319
+ * @param {Object} replaces
324
320
  * @returns {undefined}
325
321
  * @memberof LocusInfo
326
322
  */
327
- updateParticipantsUrl(participantsUrl: string): void;
328
- /**
329
- * @param {Object} replace
330
- * @returns {undefined}
331
- * @memberof LocusInfo
332
- */
333
- updateReplace(replace: object): void;
323
+ updateReplaces(replaces: object): void;
334
324
  /**
335
325
  * handles when the locus.self is updated
336
326
  * @param {Object} self the new locus.self
@@ -365,18 +355,6 @@ export default class LocusInfo extends EventsScope {
365
355
  * @memberof LocusInfo
366
356
  */
367
357
  updateSequence(sequence: number): void;
368
- /**
369
- * @param {Object} membership
370
- * @returns {undefined}
371
- * @memberof LocusInfo
372
- */
373
- updateMemberShip(membership: object): void;
374
- /**
375
- * @param {Array} identities
376
- * @returns {undefined}
377
- * @memberof LocusInfo
378
- */
379
- updateIdentifiers(identities: Array<any>): void;
380
358
  /**
381
359
  * check the locus is main session's one or not, if is main session's, update main session cache
382
360
  * @param {Object} locus
@@ -448,7 +448,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
448
448
  }, _callee7);
449
449
  }))();
450
450
  },
451
- version: "3.10.0-next.18"
451
+ version: "3.10.0-next.19"
452
452
  });
453
453
  var _default = exports.default = Webinar;
454
454
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -93,5 +93,5 @@
93
93
  "//": [
94
94
  "TODO: upgrade jwt-decode when moving to node 18"
95
95
  ],
96
- "version": "3.10.0-next.18"
96
+ "version": "3.10.0-next.19"
97
97
  }
@@ -97,10 +97,7 @@ export default class LocusInfo extends EventsScope {
97
97
  aclUrl: any;
98
98
  baseSequence: any;
99
99
  created: any;
100
- identities: any;
101
- membership: any;
102
100
  participants: any;
103
- participantsUrl: any;
104
101
  replaces: any;
105
102
  scheduledMeeting: any;
106
103
  sequence: any;
@@ -112,7 +109,6 @@ export default class LocusInfo extends EventsScope {
112
109
  info: any;
113
110
  roles: any;
114
111
  mediaShares: any;
115
- replace: any;
116
112
  url: any;
117
113
  links?: Links;
118
114
  mainSessionLocusCache: any;
@@ -328,13 +324,10 @@ export default class LocusInfo extends EventsScope {
328
324
  init(locus: any = {}) {
329
325
  this.created = locus.created || null;
330
326
  this.scheduledMeeting = locus.meeting || null;
331
- this.participantsUrl = locus.participantsUrl || null;
332
327
  this.replaces = locus.replaces || null;
333
328
  this.aclUrl = locus.aclUrl || null;
334
329
  this.baseSequence = locus.baseSequence || null;
335
330
  this.sequence = locus.sequence || null;
336
- this.membership = locus.membership || null;
337
- this.identities = locus.identities || null;
338
331
  this.participants = locus.participants || null;
339
332
 
340
333
  /**
@@ -1043,14 +1036,11 @@ export default class LocusInfo extends EventsScope {
1043
1036
  this.updateLocusUrl(locus.url, ControlsUtils.isMainSessionDTO(locus));
1044
1037
  this.updateMeetingInfo(locus.info, locus.self);
1045
1038
  this.updateMediaShares(locus.mediaShares);
1046
- this.updateParticipantsUrl(locus.participantsUrl);
1047
- this.updateReplace(locus.replace);
1039
+ this.updateReplaces(locus.replaces);
1048
1040
  this.updateSelf(locus.self);
1049
1041
  this.updateAclUrl(locus.aclUrl);
1050
1042
  this.updateBasequence(locus.baseSequence);
1051
1043
  this.updateSequence(locus.sequence);
1052
- this.updateMemberShip(locus.membership);
1053
- this.updateIdentifiers(locus.identities);
1054
1044
  this.updateEmbeddedApps(locus.embeddedApps);
1055
1045
  this.updateLinks(locus.links);
1056
1046
  this.compareAndUpdate();
@@ -1925,24 +1915,13 @@ export default class LocusInfo extends EventsScope {
1925
1915
  }
1926
1916
 
1927
1917
  /**
1928
- * @param {String} participantsUrl
1918
+ * @param {Object} replaces
1929
1919
  * @returns {undefined}
1930
1920
  * @memberof LocusInfo
1931
1921
  */
1932
- updateParticipantsUrl(participantsUrl: string) {
1933
- if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {
1934
- this.participantsUrl = participantsUrl;
1935
- }
1936
- }
1937
-
1938
- /**
1939
- * @param {Object} replace
1940
- * @returns {undefined}
1941
- * @memberof LocusInfo
1942
- */
1943
- updateReplace(replace: object) {
1944
- if (replace && !isEqual(this.replace, replace)) {
1945
- this.replace = replace;
1922
+ updateReplaces(replaces: object) {
1923
+ if (replaces && !isEqual(this.replaces, replaces)) {
1924
+ this.replaces = replaces;
1946
1925
  }
1947
1926
  }
1948
1927
 
@@ -2279,28 +2258,6 @@ export default class LocusInfo extends EventsScope {
2279
2258
  }
2280
2259
  }
2281
2260
 
2282
- /**
2283
- * @param {Object} membership
2284
- * @returns {undefined}
2285
- * @memberof LocusInfo
2286
- */
2287
- updateMemberShip(membership: object) {
2288
- if (membership && !isEqual(this.membership, membership)) {
2289
- this.membership = membership;
2290
- }
2291
- }
2292
-
2293
- /**
2294
- * @param {Array} identities
2295
- * @returns {undefined}
2296
- * @memberof LocusInfo
2297
- */
2298
- updateIdentifiers(identities: Array<any>) {
2299
- if (identities && !isEqual(this.identities, identities)) {
2300
- this.identities = identities;
2301
- }
2302
- }
2303
-
2304
2261
  /**
2305
2262
  * check the locus is main session's one or not, if is main session's, update main session cache
2306
2263
  * @param {Object} locus
@@ -2850,8 +2850,7 @@ describe('plugin-meetings', () => {
2850
2850
  callOrder.push("updateMeetingInfo");
2851
2851
  });
2852
2852
  sinon.stub(locusInfo, "updateMediaShares");
2853
- sinon.stub(locusInfo, "updateParticipantsUrl");
2854
- sinon.stub(locusInfo, "updateReplace");
2853
+ sinon.stub(locusInfo, "updateReplaces");
2855
2854
  sinon.stub(locusInfo, "updateSelf");
2856
2855
  sinon.stub(locusInfo, "updateLocusUrl").callsFake(() => {
2857
2856
  callOrder.push("updateLocusUrl");
@@ -2859,8 +2858,6 @@ describe('plugin-meetings', () => {
2859
2858
  sinon.stub(locusInfo, "updateAclUrl");
2860
2859
  sinon.stub(locusInfo, "updateBasequence");
2861
2860
  sinon.stub(locusInfo, "updateSequence");
2862
- sinon.stub(locusInfo, "updateMemberShip");
2863
- sinon.stub(locusInfo, "updateIdentifiers");
2864
2861
  sinon.stub(locusInfo, "updateEmbeddedApps");
2865
2862
  sinon.stub(locusInfo, "updateLinks");
2866
2863
  sinon.stub(locusInfo, "compareAndUpdate");
@@ -2886,15 +2883,12 @@ describe('plugin-meetings', () => {
2886
2883
  locusInfo.updateHostInfo = sinon.stub();
2887
2884
  locusInfo.updateMeetingInfo = sinon.stub();
2888
2885
  locusInfo.updateMediaShares = sinon.stub();
2889
- locusInfo.updateParticipantsUrl = sinon.stub();
2890
- locusInfo.updateReplace = sinon.stub();
2886
+ locusInfo.updateReplaces = sinon.stub();
2891
2887
  locusInfo.updateSelf = sinon.stub();
2892
2888
  locusInfo.updateLocusUrl = sinon.stub();
2893
2889
  locusInfo.updateAclUrl = sinon.stub();
2894
2890
  locusInfo.updateBasequence = sinon.stub();
2895
2891
  locusInfo.updateSequence = sinon.stub();
2896
- locusInfo.updateMemberShip = sinon.stub();
2897
- locusInfo.updateIdentifiers = sinon.stub();
2898
2892
  locusInfo.updateEmbeddedApps = sinon.stub();
2899
2893
  locusInfo.updateLinks = sinon.stub();
2900
2894
  locusInfo.compareAndUpdate = sinon.stub();
@@ -2908,15 +2902,12 @@ describe('plugin-meetings', () => {
2908
2902
  assert.notCalled(locusInfo.updateHostInfo);
2909
2903
  assert.notCalled(locusInfo.updateMeetingInfo);
2910
2904
  assert.notCalled(locusInfo.updateMediaShares);
2911
- assert.notCalled(locusInfo.updateParticipantsUrl);
2912
- assert.notCalled(locusInfo.updateReplace);
2905
+ assert.notCalled(locusInfo.updateReplaces);
2913
2906
  assert.notCalled(locusInfo.updateSelf);
2914
2907
  assert.notCalled(locusInfo.updateLocusUrl);
2915
2908
  assert.notCalled(locusInfo.updateAclUrl);
2916
2909
  assert.notCalled(locusInfo.updateBasequence);
2917
2910
  assert.notCalled(locusInfo.updateSequence);
2918
- assert.notCalled(locusInfo.updateMemberShip);
2919
- assert.notCalled(locusInfo.updateIdentifiers);
2920
2911
  assert.notCalled(locusInfo.updateEmbeddedApps);
2921
2912
  assert.notCalled(locusInfo.updateLinks);
2922
2913
  assert.notCalled(locusInfo.compareAndUpdate);