@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.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/index.js +6 -55
- package/dist/locus-info/index.js.map +1 -1
- package/dist/types/locus-info/index.d.ts +2 -24
- package/dist/webinar/index.js +1 -1
- package/package.json +1 -1
- package/src/locus-info/index.ts +5 -48
- package/test/unit/spec/locus-info/index.js +3 -12
package/dist/breakouts/index.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
21
|
+
version: "3.10.0-next.19"
|
|
22
22
|
});
|
|
23
23
|
var _default = exports.default = SILanguage;
|
|
24
24
|
//# sourceMappingURL=siLanguage.js.map
|
package/dist/locus-info/index.js
CHANGED
|
@@ -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.
|
|
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 {
|
|
1707
|
+
* @param {Object} replaces
|
|
1718
1708
|
* @returns {undefined}
|
|
1719
1709
|
* @memberof LocusInfo
|
|
1720
1710
|
*/
|
|
1721
1711
|
}, {
|
|
1722
|
-
key: "
|
|
1723
|
-
value: function
|
|
1724
|
-
if (
|
|
1725
|
-
this.
|
|
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 {
|
|
319
|
+
* @param {Object} replaces
|
|
324
320
|
* @returns {undefined}
|
|
325
321
|
* @memberof LocusInfo
|
|
326
322
|
*/
|
|
327
|
-
|
|
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
|
package/dist/webinar/index.js
CHANGED
package/package.json
CHANGED
package/src/locus-info/index.ts
CHANGED
|
@@ -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.
|
|
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 {
|
|
1918
|
+
* @param {Object} replaces
|
|
1929
1919
|
* @returns {undefined}
|
|
1930
1920
|
* @memberof LocusInfo
|
|
1931
1921
|
*/
|
|
1932
|
-
|
|
1933
|
-
if (
|
|
1934
|
-
this.
|
|
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, "
|
|
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.
|
|
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.
|
|
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);
|