@webex/plugin-meetings 3.0.0-beta.132 → 3.0.0-beta.134
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/common/logs/logger-proxy.js +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/controls-options-manager/util.js +17 -11
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/parser.js +1 -1
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/meeting/index.js +198 -196
- package/dist/meeting/index.js.map +1 -1
- package/dist/meetings/index.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +1 -0
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/request.js.map +1 -1
- package/package.json +19 -19
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/controls-options-manager/util.ts +16 -11
- package/src/locus-info/index.ts +1 -1
- package/src/locus-info/parser.ts +1 -1
- package/src/meeting/index.ts +11 -5
- package/src/meetings/index.ts +0 -1
- package/src/multistream/remoteMediaManager.ts +1 -0
- package/src/reconnection-manager/index.ts +0 -1
- package/src/roap/request.ts +0 -1
- package/test/unit/spec/controls-options-manager/util.js +16 -2
- package/test/unit/spec/meeting/index.js +23 -9
package/dist/breakouts/index.js
CHANGED
|
@@ -987,7 +987,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
987
987
|
this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
|
|
988
988
|
}
|
|
989
989
|
},
|
|
990
|
-
version: "3.0.0-beta.
|
|
990
|
+
version: "3.0.0-beta.134"
|
|
991
991
|
});
|
|
992
992
|
var _default = Breakouts;
|
|
993
993
|
exports.default = _default;
|
|
@@ -7,7 +7,7 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
var _loggerConfig = _interopRequireDefault(require("./logger-config"));
|
|
10
|
-
/* eslint-disable no-unused-vars */
|
|
10
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
11
11
|
|
|
12
12
|
var LoggerProxy = {
|
|
13
13
|
logger: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LoggerProxy","logger","info","args","console","error","log","warn","trace","debug","set","LoggerConfig","enable","get"],"sources":["logger-proxy.ts"],"sourcesContent":["/* eslint-disable no-unused-vars */\nimport LoggerConfig from './logger-config';\n\nconst LoggerProxy: any = {\n logger: {\n info: (args) => {\n console.error('LoggerProxy->info#NO LOGGER DEFINED');\n },\n log: (args) => {\n console.error('LoggerProxy->log#NO LOGGER DEFINED');\n },\n error: (args) => {\n console.error('LoggerProxy->error#NO LOGGER DEFINED');\n },\n warn: (args) => {\n console.error('LoggerProxy->warn#NO LOGGER DEFINED');\n },\n trace: (args) => {\n console.error('LoggerProxy->trace#NO LOGGER DEFINED');\n },\n debug: (args) => {\n console.error('LoggerProxy->debug#NO LOGGER DEFINED');\n },\n },\n};\n\nLoggerProxy.set = (logger) => {\n if (!LoggerConfig.enable) {\n LoggerProxy.logger = {\n info: () => {},\n log: () => {},\n error: () => {},\n warn: () => {},\n trace: () => {},\n debug: () => {},\n };\n } else {\n LoggerProxy.logger = logger;\n }\n};\n\nLoggerProxy.get = () => LoggerProxy.logger;\n\nexport default LoggerProxy;\n"],"mappings":";;;;;;;;AACA;AADA;;AAGA,IAAMA,WAAgB,GAAG;EACvBC,MAAM,EAAE;IACNC,IAAI,EAAE,cAACC,IAAI,EAAK;MACdC,OAAO,CAACC,KAAK,CAAC,qCAAqC,CAAC;IACtD,CAAC;IACDC,GAAG,EAAE,aAACH,IAAI,EAAK;MACbC,OAAO,CAACC,KAAK,CAAC,oCAAoC,CAAC;IACrD,CAAC;IACDA,KAAK,EAAE,eAACF,IAAI,EAAK;MACfC,OAAO,CAACC,KAAK,CAAC,sCAAsC,CAAC;IACvD,CAAC;IACDE,IAAI,EAAE,cAACJ,IAAI,EAAK;MACdC,OAAO,CAACC,KAAK,CAAC,qCAAqC,CAAC;IACtD,CAAC;IACDG,KAAK,EAAE,eAACL,IAAI,EAAK;MACfC,OAAO,CAACC,KAAK,CAAC,sCAAsC,CAAC;IACvD,CAAC;IACDI,KAAK,EAAE,eAACN,IAAI,EAAK;MACfC,OAAO,CAACC,KAAK,CAAC,sCAAsC,CAAC;IACvD;EACF;AACF,CAAC;AAEDL,WAAW,CAACU,GAAG,GAAG,UAACT,MAAM,EAAK;EAC5B,IAAI,CAACU,qBAAY,CAACC,MAAM,EAAE;IACxBZ,WAAW,CAACC,MAAM,GAAG;MACnBC,IAAI,EAAE,gBAAM,CAAC,CAAC;MACdI,GAAG,EAAE,eAAM,CAAC,CAAC;MACbD,KAAK,EAAE,iBAAM,CAAC,CAAC;MACfE,IAAI,EAAE,gBAAM,CAAC,CAAC;MACdC,KAAK,EAAE,iBAAM,CAAC,CAAC;MACfC,KAAK,EAAE,iBAAM,CAAC;IAChB,CAAC;EACH,CAAC,MAAM;IACLT,WAAW,CAACC,MAAM,GAAGA,MAAM;EAC7B;AACF,CAAC;AAEDD,WAAW,CAACa,GAAG,GAAG;EAAA,OAAMb,WAAW,CAACC,MAAM;AAAA;AAAC,eAE5BD,WAAW;AAAA"}
|
|
1
|
+
{"version":3,"names":["LoggerProxy","logger","info","args","console","error","log","warn","trace","debug","set","LoggerConfig","enable","get"],"sources":["logger-proxy.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport LoggerConfig from './logger-config';\n\nconst LoggerProxy: any = {\n logger: {\n info: (args) => {\n console.error('LoggerProxy->info#NO LOGGER DEFINED');\n },\n log: (args) => {\n console.error('LoggerProxy->log#NO LOGGER DEFINED');\n },\n error: (args) => {\n console.error('LoggerProxy->error#NO LOGGER DEFINED');\n },\n warn: (args) => {\n console.error('LoggerProxy->warn#NO LOGGER DEFINED');\n },\n trace: (args) => {\n console.error('LoggerProxy->trace#NO LOGGER DEFINED');\n },\n debug: (args) => {\n console.error('LoggerProxy->debug#NO LOGGER DEFINED');\n },\n },\n};\n\nLoggerProxy.set = (logger) => {\n if (!LoggerConfig.enable) {\n LoggerProxy.logger = {\n info: () => {},\n log: () => {},\n error: () => {},\n warn: () => {},\n trace: () => {},\n debug: () => {},\n };\n } else {\n LoggerProxy.logger = logger;\n }\n};\n\nLoggerProxy.get = () => LoggerProxy.logger;\n\nexport default LoggerProxy;\n"],"mappings":";;;;;;;;AACA;AADA;;AAGA,IAAMA,WAAgB,GAAG;EACvBC,MAAM,EAAE;IACNC,IAAI,EAAE,cAACC,IAAI,EAAK;MACdC,OAAO,CAACC,KAAK,CAAC,qCAAqC,CAAC;IACtD,CAAC;IACDC,GAAG,EAAE,aAACH,IAAI,EAAK;MACbC,OAAO,CAACC,KAAK,CAAC,oCAAoC,CAAC;IACrD,CAAC;IACDA,KAAK,EAAE,eAACF,IAAI,EAAK;MACfC,OAAO,CAACC,KAAK,CAAC,sCAAsC,CAAC;IACvD,CAAC;IACDE,IAAI,EAAE,cAACJ,IAAI,EAAK;MACdC,OAAO,CAACC,KAAK,CAAC,qCAAqC,CAAC;IACtD,CAAC;IACDG,KAAK,EAAE,eAACL,IAAI,EAAK;MACfC,OAAO,CAACC,KAAK,CAAC,sCAAsC,CAAC;IACvD,CAAC;IACDI,KAAK,EAAE,eAACN,IAAI,EAAK;MACfC,OAAO,CAACC,KAAK,CAAC,sCAAsC,CAAC;IACvD;EACF;AACF,CAAC;AAEDL,WAAW,CAACU,GAAG,GAAG,UAACT,MAAM,EAAK;EAC5B,IAAI,CAACU,qBAAY,CAACC,MAAM,EAAE;IACxBZ,WAAW,CAACC,MAAM,GAAG;MACnBC,IAAI,EAAE,gBAAM,CAAC,CAAC;MACdI,GAAG,EAAE,eAAM,CAAC,CAAC;MACbD,KAAK,EAAE,iBAAM,CAAC,CAAC;MACfE,IAAI,EAAE,gBAAM,CAAC,CAAC;MACdC,KAAK,EAAE,iBAAM,CAAC,CAAC;MACfC,KAAK,EAAE,iBAAM,CAAC;IAChB,CAAC;EACH,CAAC,MAAM;IACLT,WAAW,CAACC,MAAM,GAAGA,MAAM;EAC7B;AACF,CAAC;AAEDD,WAAW,CAACa,GAAG,GAAG;EAAA,OAAMb,WAAW,CAACC,MAAM;AAAA;AAAC,eAE5BD,WAAW;AAAA"}
|
|
@@ -171,17 +171,23 @@ var Utils = /*#__PURE__*/function () {
|
|
|
171
171
|
key: "canUpdateReactions",
|
|
172
172
|
value: function canUpdateReactions(control, displayHints) {
|
|
173
173
|
var requiredHints = [];
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
if (control.properties.
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
174
|
+
|
|
175
|
+
// This additional if statement avoids the display hint discrepency due to
|
|
176
|
+
// the service blocking partial requests with this property only.
|
|
177
|
+
if (control.properties.showDisplayNameWithReactions !== undefined) {
|
|
178
|
+
if (control.properties.showDisplayNameWithReactions === true) {
|
|
179
|
+
requiredHints.push(_constants.DISPLAY_HINTS.ENABLE_SHOW_DISPLAY_NAME);
|
|
180
|
+
}
|
|
181
|
+
if (control.properties.showDisplayNameWithReactions === false) {
|
|
182
|
+
requiredHints.push(_constants.DISPLAY_HINTS.DISABLE_SHOW_DISPLAY_NAME);
|
|
183
|
+
}
|
|
184
|
+
} else {
|
|
185
|
+
if (control.properties.enabled === true) {
|
|
186
|
+
requiredHints.push(_constants.DISPLAY_HINTS.ENABLE_REACTIONS);
|
|
187
|
+
}
|
|
188
|
+
if (control.properties.enabled === false) {
|
|
189
|
+
requiredHints.push(_constants.DISPLAY_HINTS.DISABLE_REACTIONS);
|
|
190
|
+
}
|
|
185
191
|
}
|
|
186
192
|
return Utils.hasHints({
|
|
187
193
|
requiredHints: requiredHints,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Utils","displayHints","includes","DISPLAY_HINTS","ENABLE_MUTE_ON_ENTRY","ENABLE_HARD_MUTE","DISABLE_MUTE_ON_ENTRY","DISABLE_HARD_MUTE","MUTE_ALL","UNMUTE_ALL","config","requiredHints","every","hint","control","properties","muted","push","disallowUnmute","muteOnEntry","hasHints","enabled","ENABLE_RAISE_HAND","DISABLE_RAISE_HAND","ENABLE_REACTIONS","DISABLE_REACTIONS","showDisplayNameWithReactions","ENABLE_SHOW_DISPLAY_NAME","DISABLE_SHOW_DISPLAY_NAME","SHARE_CONTROL","ENABLE_VIEW_THE_PARTICIPANT_LIST","DISABLE_VIEW_THE_PARTICIPANT_LIST","ENABLE_VIDEO","DISABLE_VIDEO","determinant","scope","Control","audio","canUpdateAudio","raiseHand","canUpdateRaiseHand","reactions","canUpdateReactions","shareControl","canUpdateShareControl","video","canUpdateVideo","viewTheParticipantList","canUpdateViewTheParticipantsList"],"sources":["util.ts"],"sourcesContent":["import {DISPLAY_HINTS} from '../constants';\nimport {Control} from './enums';\nimport {\n ControlConfig,\n AudioProperties,\n RaiseHandProperties,\n ReactionsProperties,\n ViewTheParticipantListProperties,\n VideoProperties,\n} from './types';\n\n/**\n * The Controls Options Manager utilities\n *\n * @internal\n */\nclass Utils {\n /**\n * Validate if enabling mute on entry can be set.\n *\n * @param {Array<string>} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canSetMuteOnEntry(displayHints: Array<string>): boolean {\n return displayHints.includes(DISPLAY_HINTS.ENABLE_MUTE_ON_ENTRY);\n }\n\n /**\n * Validate if allowing unmuting can be set.\n *\n * @param {Array<string>} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canSetDisallowUnmute(displayHints: Array<string>): boolean {\n return displayHints.includes(DISPLAY_HINTS.ENABLE_HARD_MUTE);\n }\n\n /**\n * Validate if disabling mute on entry can be set.\n *\n * @param {Array<string>} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canUnsetMuteOnEntry(displayHints: Array<string>): boolean {\n return displayHints.includes(DISPLAY_HINTS.DISABLE_MUTE_ON_ENTRY);\n }\n\n /**\n * Validate if enabling muting can be set.\n *\n * @param {Array<string>} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canUnsetDisallowUnmute(displayHints: Array<string>): boolean {\n return displayHints.includes(DISPLAY_HINTS.DISABLE_HARD_MUTE);\n }\n\n /**\n * Validate if muting all can be set.\n *\n * @param {Array<string>} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canSetMuted(displayHints: Array<string>): boolean {\n return displayHints.includes(DISPLAY_HINTS.MUTE_ALL);\n }\n\n /**\n * Validate if unmuting all can be set.\n *\n * @param {Array<string>} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canUnsetMuted(displayHints: Array<string>): boolean {\n return displayHints.includes(DISPLAY_HINTS.UNMUTE_ALL);\n }\n\n /**\n * Validate an array of hints are allowed based on a full collection of hints.\n *\n * @param {Object} config - Configuration Object.\n * @param {Array<string>} config.requiredHints - Hints required for validation.\n * @param {Array<string>} config.displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static hasHints(config: {requiredHints: Array<string>; displayHints: Array<string>}) {\n const {requiredHints, displayHints} = config;\n\n return requiredHints.every((hint) => displayHints.includes(hint));\n }\n\n /**\n * Validate if an audio-scoped control is allowed to be sent to the service.\n *\n * @param {ControlConfig<AudioProperties>} control - Audio control config to validate.\n * @param {Array<string>} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateAudio(\n control: ControlConfig<AudioProperties>,\n displayHints: Array<string>\n ) {\n const requiredHints = [];\n\n if (control.properties.muted === true) {\n requiredHints.push(DISPLAY_HINTS.MUTE_ALL);\n }\n if (control.properties.muted === false) {\n requiredHints.push(DISPLAY_HINTS.UNMUTE_ALL);\n }\n if (control.properties.disallowUnmute === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_HARD_MUTE);\n }\n if (control.properties.disallowUnmute === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_HARD_MUTE);\n }\n if (control.properties.muteOnEntry === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_MUTE_ON_ENTRY);\n }\n if (control.properties.muteOnEntry === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_MUTE_ON_ENTRY);\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n public static canUpdateRaiseHand(\n control: ControlConfig<RaiseHandProperties>,\n displayHints: Array<string>\n ) {\n const requiredHints = [];\n\n if (control.properties.enabled === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_RAISE_HAND);\n }\n if (control.properties.enabled === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_RAISE_HAND);\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n /**\n * Validate if an reactions-scoped control is allowed to be sent to the service.\n *\n * @param {ControlConfig<ReactionsProperties>} control - Reaction control config to validate.\n * @param {Array<string>} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateReactions(\n control: ControlConfig<ReactionsProperties>,\n displayHints: Array<string>\n ) {\n const requiredHints = [];\n\n if (control.properties.enabled === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_REACTIONS);\n }\n if (control.properties.enabled === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_REACTIONS);\n }\n if (control.properties.showDisplayNameWithReactions === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_SHOW_DISPLAY_NAME);\n }\n if (control.properties.showDisplayNameWithReactions === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_SHOW_DISPLAY_NAME);\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n /**\n * Validate if an share-control-scoped control is allowed to be sent to the service.\n *\n * @param {Array<string>} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateShareControl(displayHints: Array<string>) {\n return Utils.hasHints({requiredHints: [DISPLAY_HINTS.SHARE_CONTROL], displayHints});\n }\n\n /**\n * Validate if an view-the-participants-list-scoped control is allowed to be sent to the service.\n *\n * @param {ControlConfig<ViewTheParticipantListProperties>} control - View Participants List control config to validate.\n * @param {Array<string>} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateViewTheParticipantsList(\n control: ControlConfig<ViewTheParticipantListProperties>,\n displayHints: Array<string>\n ) {\n const requiredHints = [];\n\n if (control.properties.enabled === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST);\n }\n if (control.properties.enabled === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST);\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n /**\n * Validate if a video-scoped control is allowed to be sent to the service.\n *\n * @param {ControlConfig<VideoProperties>} control - Video control config to validate.\n * @param {Array<string>} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateVideo(\n control: ControlConfig<VideoProperties>,\n displayHints: Array<string>\n ) {\n const requiredHints = [];\n\n if (control.properties.enabled === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_VIDEO);\n }\n if (control.properties.enabled === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_VIDEO);\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n /**\n * Validate that a control can be sent to the service based on the provided\n * display hints.\n *\n * @param {ControlConfig} control - Control to validate.\n * @param {Array<string>} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdate(control: ControlConfig, displayHints: Array<string>) {\n let determinant: boolean;\n\n switch (control.scope) {\n case Control.audio:\n determinant = Utils.canUpdateAudio(control as ControlConfig<AudioProperties>, displayHints);\n break;\n\n case Control.raiseHand:\n determinant = Utils.canUpdateRaiseHand(\n control as ControlConfig<RaiseHandProperties>,\n displayHints\n );\n break;\n\n case Control.reactions:\n determinant = Utils.canUpdateReactions(\n control as ControlConfig<ReactionsProperties>,\n displayHints\n );\n break;\n\n case Control.shareControl:\n determinant = Utils.canUpdateShareControl(displayHints);\n break;\n\n case Control.video:\n determinant = Utils.canUpdateVideo(control as ControlConfig<VideoProperties>, displayHints);\n break;\n\n case Control.viewTheParticipantList:\n determinant = Utils.canUpdateViewTheParticipantsList(\n control as ControlConfig<ViewTheParticipantListProperties>,\n displayHints\n );\n break;\n\n default:\n determinant = false;\n }\n\n return determinant;\n }\n}\n\nexport default Utils;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Utils","displayHints","includes","DISPLAY_HINTS","ENABLE_MUTE_ON_ENTRY","ENABLE_HARD_MUTE","DISABLE_MUTE_ON_ENTRY","DISABLE_HARD_MUTE","MUTE_ALL","UNMUTE_ALL","config","requiredHints","every","hint","control","properties","muted","push","disallowUnmute","muteOnEntry","hasHints","enabled","ENABLE_RAISE_HAND","DISABLE_RAISE_HAND","showDisplayNameWithReactions","undefined","ENABLE_SHOW_DISPLAY_NAME","DISABLE_SHOW_DISPLAY_NAME","ENABLE_REACTIONS","DISABLE_REACTIONS","SHARE_CONTROL","ENABLE_VIEW_THE_PARTICIPANT_LIST","DISABLE_VIEW_THE_PARTICIPANT_LIST","ENABLE_VIDEO","DISABLE_VIDEO","determinant","scope","Control","audio","canUpdateAudio","raiseHand","canUpdateRaiseHand","reactions","canUpdateReactions","shareControl","canUpdateShareControl","video","canUpdateVideo","viewTheParticipantList","canUpdateViewTheParticipantsList"],"sources":["util.ts"],"sourcesContent":["import {DISPLAY_HINTS} from '../constants';\nimport {Control} from './enums';\nimport {\n ControlConfig,\n AudioProperties,\n RaiseHandProperties,\n ReactionsProperties,\n ViewTheParticipantListProperties,\n VideoProperties,\n} from './types';\n\n/**\n * The Controls Options Manager utilities\n *\n * @internal\n */\nclass Utils {\n /**\n * Validate if enabling mute on entry can be set.\n *\n * @param {Array<string>} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canSetMuteOnEntry(displayHints: Array<string>): boolean {\n return displayHints.includes(DISPLAY_HINTS.ENABLE_MUTE_ON_ENTRY);\n }\n\n /**\n * Validate if allowing unmuting can be set.\n *\n * @param {Array<string>} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canSetDisallowUnmute(displayHints: Array<string>): boolean {\n return displayHints.includes(DISPLAY_HINTS.ENABLE_HARD_MUTE);\n }\n\n /**\n * Validate if disabling mute on entry can be set.\n *\n * @param {Array<string>} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canUnsetMuteOnEntry(displayHints: Array<string>): boolean {\n return displayHints.includes(DISPLAY_HINTS.DISABLE_MUTE_ON_ENTRY);\n }\n\n /**\n * Validate if enabling muting can be set.\n *\n * @param {Array<string>} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canUnsetDisallowUnmute(displayHints: Array<string>): boolean {\n return displayHints.includes(DISPLAY_HINTS.DISABLE_HARD_MUTE);\n }\n\n /**\n * Validate if muting all can be set.\n *\n * @param {Array<string>} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canSetMuted(displayHints: Array<string>): boolean {\n return displayHints.includes(DISPLAY_HINTS.MUTE_ALL);\n }\n\n /**\n * Validate if unmuting all can be set.\n *\n * @param {Array<string>} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canUnsetMuted(displayHints: Array<string>): boolean {\n return displayHints.includes(DISPLAY_HINTS.UNMUTE_ALL);\n }\n\n /**\n * Validate an array of hints are allowed based on a full collection of hints.\n *\n * @param {Object} config - Configuration Object.\n * @param {Array<string>} config.requiredHints - Hints required for validation.\n * @param {Array<string>} config.displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static hasHints(config: {requiredHints: Array<string>; displayHints: Array<string>}) {\n const {requiredHints, displayHints} = config;\n\n return requiredHints.every((hint) => displayHints.includes(hint));\n }\n\n /**\n * Validate if an audio-scoped control is allowed to be sent to the service.\n *\n * @param {ControlConfig<AudioProperties>} control - Audio control config to validate.\n * @param {Array<string>} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateAudio(\n control: ControlConfig<AudioProperties>,\n displayHints: Array<string>\n ) {\n const requiredHints = [];\n\n if (control.properties.muted === true) {\n requiredHints.push(DISPLAY_HINTS.MUTE_ALL);\n }\n if (control.properties.muted === false) {\n requiredHints.push(DISPLAY_HINTS.UNMUTE_ALL);\n }\n if (control.properties.disallowUnmute === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_HARD_MUTE);\n }\n if (control.properties.disallowUnmute === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_HARD_MUTE);\n }\n if (control.properties.muteOnEntry === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_MUTE_ON_ENTRY);\n }\n if (control.properties.muteOnEntry === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_MUTE_ON_ENTRY);\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n public static canUpdateRaiseHand(\n control: ControlConfig<RaiseHandProperties>,\n displayHints: Array<string>\n ) {\n const requiredHints = [];\n\n if (control.properties.enabled === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_RAISE_HAND);\n }\n if (control.properties.enabled === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_RAISE_HAND);\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n /**\n * Validate if an reactions-scoped control is allowed to be sent to the service.\n *\n * @param {ControlConfig<ReactionsProperties>} control - Reaction control config to validate.\n * @param {Array<string>} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateReactions(\n control: ControlConfig<ReactionsProperties>,\n displayHints: Array<string>\n ) {\n const requiredHints = [];\n\n // This additional if statement avoids the display hint discrepency due to\n // the service blocking partial requests with this property only.\n if (control.properties.showDisplayNameWithReactions !== undefined) {\n if (control.properties.showDisplayNameWithReactions === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_SHOW_DISPLAY_NAME);\n }\n if (control.properties.showDisplayNameWithReactions === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_SHOW_DISPLAY_NAME);\n }\n } else {\n if (control.properties.enabled === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_REACTIONS);\n }\n if (control.properties.enabled === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_REACTIONS);\n }\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n /**\n * Validate if an share-control-scoped control is allowed to be sent to the service.\n *\n * @param {Array<string>} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateShareControl(displayHints: Array<string>) {\n return Utils.hasHints({requiredHints: [DISPLAY_HINTS.SHARE_CONTROL], displayHints});\n }\n\n /**\n * Validate if an view-the-participants-list-scoped control is allowed to be sent to the service.\n *\n * @param {ControlConfig<ViewTheParticipantListProperties>} control - View Participants List control config to validate.\n * @param {Array<string>} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateViewTheParticipantsList(\n control: ControlConfig<ViewTheParticipantListProperties>,\n displayHints: Array<string>\n ) {\n const requiredHints = [];\n\n if (control.properties.enabled === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST);\n }\n if (control.properties.enabled === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST);\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n /**\n * Validate if a video-scoped control is allowed to be sent to the service.\n *\n * @param {ControlConfig<VideoProperties>} control - Video control config to validate.\n * @param {Array<string>} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateVideo(\n control: ControlConfig<VideoProperties>,\n displayHints: Array<string>\n ) {\n const requiredHints = [];\n\n if (control.properties.enabled === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_VIDEO);\n }\n if (control.properties.enabled === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_VIDEO);\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n /**\n * Validate that a control can be sent to the service based on the provided\n * display hints.\n *\n * @param {ControlConfig} control - Control to validate.\n * @param {Array<string>} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdate(control: ControlConfig, displayHints: Array<string>) {\n let determinant: boolean;\n\n switch (control.scope) {\n case Control.audio:\n determinant = Utils.canUpdateAudio(control as ControlConfig<AudioProperties>, displayHints);\n break;\n\n case Control.raiseHand:\n determinant = Utils.canUpdateRaiseHand(\n control as ControlConfig<RaiseHandProperties>,\n displayHints\n );\n break;\n\n case Control.reactions:\n determinant = Utils.canUpdateReactions(\n control as ControlConfig<ReactionsProperties>,\n displayHints\n );\n break;\n\n case Control.shareControl:\n determinant = Utils.canUpdateShareControl(displayHints);\n break;\n\n case Control.video:\n determinant = Utils.canUpdateVideo(control as ControlConfig<VideoProperties>, displayHints);\n break;\n\n case Control.viewTheParticipantList:\n determinant = Utils.canUpdateViewTheParticipantsList(\n control as ControlConfig<ViewTheParticipantListProperties>,\n displayHints\n );\n break;\n\n default:\n determinant = false;\n }\n\n return determinant;\n }\n}\n\nexport default Utils;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LocusInfo","updateMeeting","webex","meetingId","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","action","locus","meeting","loci","DESYNC","USE_CURRENT","USE_INCOMING","locusInfo","onDeltaLocus","locusDesync","needToGetFullLocus","meetingRequest","getFullLocus","desync","locusUrl","url","then","res","onFullLocus","body","resume","LoggerProxy","logger","info","onDeltaAction","parsedLoci","applyLocusDeltaData","onDeltaEvent","created","scheduledMeeting","participantsUrl","replaces","aclUrl","baseSequence","sequence","membership","identities","participants","deltaParticipants","updateLocusCache","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","self","updateLocusUrl","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","updateHostInfo","host","updateMediaShares","mediaShares","updateServices","links","services","data","eventType","getTheLocusToUpdate","LOCUSEVENT","PARTICIPANT_JOIN","PARTICIPANT_LEFT","CONTROLS_UPDATED","PARTICIPANT_AUDIO_MUTED","PARTICIPANT_AUDIO_UNMUTED","PARTICIPANT_VIDEO_MUTED","PARTICIPANT_VIDEO_UNMUTED","SELF_CHANGED","PARTICIPANT_UPDATED","PARTICIPANT_CONTROLS_UPDATED","PARTICIPANT_ROLES_UPDATED","PARTICIPANT_DECLINED","FLOOR_GRANTED","FLOOR_RELEASED","DIFFERENCE","handleLocusDelta","scope","eventName","args","emit","error","updateParticipantDeltas","isReplaceMembers","ControlsUtils","isNeedReplaceMembers","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","workingCopy","type","_CALL_","_SIP_BRIDGE_","emitScoped","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","reason","state","updateCreated","updateParticipantsUrl","updateReplace","replace","updateAclUrl","updateBasequence","updateSequence","updateMemberShip","updateIdentifiers","compareAndUpdate","length","find","participant","identity","_USER_","removed","partner","getLocusPartner","LOCUS","STATE","INACTIVE","warn","Metrics","postEvent","event","REMOTE_ENDED","DESTROY_MEETING","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_REMOVED_REASON","MEETING_INACTIVE_TERMINATING","FULLSTATE_REMOVED","SELF_REMOVED","compareSelfAndHost","compareHostAndSelf","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","findParticipant","collection","item","person","id","generateDelta","prevState","newState","deltas","audioStatus","videoSlidesStatus","videoStatus","forEach","key","reduce","existingParticipant","delta","status","changed","push","isReplace","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","parse","getControls","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasEntryExitToneChanged","hasBreakoutChanged","hasVideoEnabledChanged","hasMuteOnEntryChanged","hasShareControlChanged","hasDisallowUnmuteChanged","hasReactionsChanged","hasReactionDisplayNamesChanged","hasViewTheParticipantListChanged","hasRaiseHandChanged","hasVideoChanged","current","LOCUSINFO","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","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","breakout","breakoutMoveId","SelfUtils","getReplacedBreakoutMoveId","internal","device","CONTROLS_MEETING_BREAKOUT_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","videoEnabled","unmuteVideoAllowed","SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED","unmuteAllowed","LINKS_SERVICES","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","roles","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","MEETING_INFO_UPDATED","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","isRolesChanged","SELF_ROLES_CHANGED","oldRoles","newRoles","isUpgradeToModeratorOrCohost","SELF_MODERATOR_OR_COHOST_UPGRADE","isVideoMutedByOthersChanged","muted","remoteVideoMuted","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","remoteMuted","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","isUserUnadmitted","SELF_UNADMITTED_GUEST","isUserAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","MEDIA_STATUS_CHANGE","currentMediaStatus","audio","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","LOCUS_INFO_UPDATE_URL","isMainSessionDTO","updateMainSessionLocusCache","newLocus","switchStatus","getSessionSwitchStatus","isReturnToMain","mainSessionLocusCache","isJoinToBreakout","CONTROLS_JOIN_BREAKOUT_FROM_MAIN","mainLocusUrl","sourceParticipants","existIndex","findIndex","p","splice","mainLocus","locusClone","objValue","srcValue","mergeParticipants","EventsScope"],"sources":["index.ts"],"sourcesContent":["import {isArray, isEqual, assignWith, cloneDeep} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport InfoUtils from './infoUtils';\nimport FullState from './fullState';\nimport SelfUtils from './selfUtils';\nimport HostUtils from './hostUtils';\nimport ControlsUtils from './controlsUtils';\nimport EmbeddedAppsUtils from './embeddedAppsUtils';\nimport MediaSharesUtils from './mediaSharesUtils';\nimport LocusDeltaParser from './parser';\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n compareAndUpdateFlags: any;\n emitChange: any;\n locusParser: any;\n meetingId: any;\n parsedLocus: any;\n updateMeeting: any;\n webex: any;\n aclUrl: any;\n baseSequence: any;\n created: any;\n deltaParticipants: any;\n identities: any;\n membership: any;\n participants: any;\n participantsUrl: any;\n replaces: any;\n scheduledMeeting: any;\n sequence: any;\n controls: any;\n conversationUrl: any;\n embeddedApps: any;\n fullState: any;\n host: any;\n info: any;\n roles: any;\n mediaShares: any;\n replace: any;\n url: any;\n services: any;\n mainSessionLocusCache: any;\n /**\n * Constructor\n * @param {boolean} updateMeeting true if the meeting should be updated\n * @param {object} webex\n * @param {string} meetingId\n * @returns {undefined}\n */\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n meeting.locusDesync = false;\n meeting.needToGetFullLocus = false;\n break;\n case DESYNC:\n meeting.meetingRequest\n .getFullLocus({\n desync: true,\n locusUrl: locus.url ? locus.url : meeting.locusUrl,\n })\n .then((res) => {\n meeting.locusInfo.onFullLocus(res.body);\n // Notify parser to resume processing delta events\n // now that we have full locus from DESYNC.\n this.locusParser.resume();\n });\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus: any, meeting: any) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus: any = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.participantsUrl = locus.participantsUrl || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.membership = locus.membership || null;\n this.identities = locus.identities || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n /**\n * Stored participant changes between the last event and the current event.\n * All previously stored events are overwritten between events.\n *\n * @instance\n * @type {Array<DeltaParticipant>}\n * @private\n * @member LocusInfo\n */\n this.deltaParticipants = [];\n\n 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);\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self, locus.participants);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateServices(locus.links?.services);\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n initialSetup(locus: object) {\n this.updateLocusCache(locus);\n this.onFullLocus(locus);\n\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting: any, data: any) {\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 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\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 * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope?: any, eventName?: string, args?: any) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {string} eventType particulat locus event\n * @returns {object} null\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onFullLocus(locus: any, eventType?: string) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n this.updateParticipantDeltas(locus.participants);\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants, isReplaceMembers);\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.updateLocusInfo(locus);\n this.updateParticipants(locus.participants, isReplaceMembers);\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.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateParticipantsUrl(locus.participantsUrl);\n this.updateReplace(locus.replace);\n this.updateSelf(locus.self, locus.participants);\n this.updateLocusUrl(locus.url);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateMemberShip(locus.membership);\n this.updateIdentifiers(locus.identities);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateServices(locus.links?.services);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants: Array<any>, self: any) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n // @ts-ignore\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // @ts-ignore\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n } else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n } else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n } else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n // @ts-ignore\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n } else if (this.fullState && this.fullState.removed) {\n // user has been dropped from a meeting\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.FULLSTATE_REMOVED,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n } else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n } else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * Update the deltaParticipants property of this object based on a list of\n * provided participants.\n *\n * @param {Array} [participants] - The participants to update against.\n * @returns {void}\n */\n updateParticipantDeltas(participants: Array<any> = []) {\n // Used to find a participant within a participants collection.\n const findParticipant = (participant, collection) =>\n collection.find((item) => item.person.id === participant.person.id);\n\n // Generates an object that indicates which state properties have changed.\n const generateDelta = (prevState: any = {}, newState: any = {}) => {\n // Setup deltas.\n const deltas = {\n audioStatus: prevState.audioStatus !== newState.audioStatus,\n videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,\n videoStatus: prevState.videoStatus !== newState.videoStatus,\n };\n\n // Clean the object\n Object.keys(deltas).forEach((key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n });\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce((collection, participant) => {\n const existingParticipant = findParticipant(participant, this.participants || []) || {};\n\n const delta = generateDelta(existingParticipant.status, participant.status);\n\n const changed = Object.keys(delta).length > 0;\n\n if (changed) {\n collection.push({\n person: participant.person,\n delta,\n });\n }\n\n return collection;\n }, []);\n }\n\n /**\n * update meeting's members\n * @param {Object} participants new participants object\n * @param {Boolean} isReplace is replace the whole members\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object, isReplace?: boolean) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n isReplace,\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 hasEntryExitToneChanged,\n hasBreakoutChanged,\n hasVideoEnabledChanged,\n hasMuteOnEntryChanged,\n hasShareControlChanged,\n hasDisallowUnmuteChanged,\n hasReactionsChanged,\n hasReactionDisplayNamesChanged,\n hasViewTheParticipantListChanged,\n hasRaiseHandChanged,\n hasVideoChanged,\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 (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 (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 this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl: string, info: any) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n } else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created: object) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * @param {Object} services\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateServices(services: Record<'breakout' | 'record', {url: string}>) {\n if (services && !isEqual(this.services, services)) {\n this.services = services;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateServices',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState: object) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host: object) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n } else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info: object, self?: object) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n if (\n (info && !isEqual(this.info, info)) ||\n (roles.length && !isEqual(this.roles, roles) && info)\n ) {\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {info: parsedInfo.current, self}\n );\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n }\n 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 * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object) {\n if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n }\n );\n }\n }\n\n /**\n * @param {String} participantsUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateParticipantsUrl(participantsUrl: string) {\n if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {\n this.participantsUrl = participantsUrl;\n }\n }\n\n /**\n * @param {Object} replace\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplace(replace: object) {\n if (replace && !isEqual(this.replace, replace)) {\n this.replace = replace;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the locus.mediaShares property\n * @param {Array} participants the locus.participants property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self: any, participants: Array<any>) {\n // @ts-ignore - check where this.self come from\n if (self && !isEqual(this.self, self)) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.breakoutsChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,\n {breakoutSessions: parsedSelves.current.breakoutSessions}\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n\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 // When the user upgrades to moderator or cohost\n if (parsedSelves.updates.isUpgradeToModeratorOrCohost) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_OR_COHOST_UPGRADE,\n self\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.isUserUnadmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.isUserAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n // @ts-ignore\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n // @ts-ignore\n this.self = self;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url: string) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n url\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl: string) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence: number) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence: number) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * @param {Object} membership\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMemberShip(membership: object) {\n if (membership && !isEqual(this.membership, membership)) {\n this.membership = membership;\n }\n }\n\n /**\n * @param {Array} identities\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateIdentifiers(identities: Array<any>) {\n if (identities && !isEqual(this.identities, identities)) {\n this.identities = identities;\n }\n }\n\n /**\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, need to query main locus url (if response with 403 means no privilege, need to clear the cache)\n * @param {Object} newLocus\n * @returns {Object}\n * @memberof LocusInfo\n */\n getTheLocusToUpdate(newLocus: any) {\n const switchStatus = ControlsUtils.getSessionSwitchStatus(this.controls, newLocus.controls);\n if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {\n return cloneDeep(this.mainSessionLocusCache);\n }\n if (switchStatus.isJoinToBreakout) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN,\n {\n mainLocusUrl: this.url,\n }\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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"}
|
|
1
|
+
{"version":3,"names":["LocusInfo","updateMeeting","webex","meetingId","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","action","locus","meeting","loci","DESYNC","USE_CURRENT","USE_INCOMING","locusInfo","onDeltaLocus","locusDesync","needToGetFullLocus","meetingRequest","getFullLocus","desync","locusUrl","url","then","res","onFullLocus","body","resume","LoggerProxy","logger","info","onDeltaAction","parsedLoci","applyLocusDeltaData","onDeltaEvent","created","scheduledMeeting","participantsUrl","replaces","aclUrl","baseSequence","sequence","membership","identities","participants","deltaParticipants","updateLocusCache","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","self","updateLocusUrl","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","updateHostInfo","host","updateMediaShares","mediaShares","updateServices","links","services","data","eventType","getTheLocusToUpdate","LOCUSEVENT","PARTICIPANT_JOIN","PARTICIPANT_LEFT","CONTROLS_UPDATED","PARTICIPANT_AUDIO_MUTED","PARTICIPANT_AUDIO_UNMUTED","PARTICIPANT_VIDEO_MUTED","PARTICIPANT_VIDEO_UNMUTED","SELF_CHANGED","PARTICIPANT_UPDATED","PARTICIPANT_CONTROLS_UPDATED","PARTICIPANT_ROLES_UPDATED","PARTICIPANT_DECLINED","FLOOR_GRANTED","FLOOR_RELEASED","DIFFERENCE","handleLocusDelta","scope","eventName","args","emit","error","updateParticipantDeltas","isReplaceMembers","ControlsUtils","isNeedReplaceMembers","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","workingCopy","type","_CALL_","_SIP_BRIDGE_","emitScoped","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","reason","state","updateCreated","updateParticipantsUrl","updateReplace","replace","updateAclUrl","updateBasequence","updateSequence","updateMemberShip","updateIdentifiers","compareAndUpdate","length","find","participant","identity","_USER_","removed","partner","getLocusPartner","LOCUS","STATE","INACTIVE","warn","Metrics","postEvent","event","REMOTE_ENDED","DESTROY_MEETING","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_REMOVED_REASON","MEETING_INACTIVE_TERMINATING","FULLSTATE_REMOVED","SELF_REMOVED","compareSelfAndHost","compareHostAndSelf","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","findParticipant","collection","item","person","id","generateDelta","prevState","newState","deltas","audioStatus","videoSlidesStatus","videoStatus","forEach","key","reduce","existingParticipant","delta","status","changed","push","isReplace","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","parse","getControls","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasEntryExitToneChanged","hasBreakoutChanged","hasVideoEnabledChanged","hasMuteOnEntryChanged","hasShareControlChanged","hasDisallowUnmuteChanged","hasReactionsChanged","hasReactionDisplayNamesChanged","hasViewTheParticipantListChanged","hasRaiseHandChanged","hasVideoChanged","current","LOCUSINFO","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","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","breakout","breakoutMoveId","SelfUtils","getReplacedBreakoutMoveId","internal","device","CONTROLS_MEETING_BREAKOUT_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","videoEnabled","unmuteVideoAllowed","SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED","unmuteAllowed","LINKS_SERVICES","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","roles","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","MEETING_INFO_UPDATED","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","isRolesChanged","SELF_ROLES_CHANGED","oldRoles","newRoles","isUpgradeToModeratorOrCohost","SELF_MODERATOR_OR_COHOST_UPGRADE","isVideoMutedByOthersChanged","muted","remoteVideoMuted","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","remoteMuted","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","isUserUnadmitted","SELF_UNADMITTED_GUEST","isUserAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","MEDIA_STATUS_CHANGE","currentMediaStatus","audio","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","LOCUS_INFO_UPDATE_URL","isMainSessionDTO","updateMainSessionLocusCache","newLocus","switchStatus","getSessionSwitchStatus","isReturnToMain","mainSessionLocusCache","isJoinToBreakout","CONTROLS_JOIN_BREAKOUT_FROM_MAIN","mainLocusUrl","sourceParticipants","existIndex","findIndex","p","splice","mainLocus","locusClone","objValue","srcValue","mergeParticipants","EventsScope"],"sources":["index.ts"],"sourcesContent":["import {isEqual, assignWith, cloneDeep} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport InfoUtils from './infoUtils';\nimport FullState from './fullState';\nimport SelfUtils from './selfUtils';\nimport HostUtils from './hostUtils';\nimport ControlsUtils from './controlsUtils';\nimport EmbeddedAppsUtils from './embeddedAppsUtils';\nimport MediaSharesUtils from './mediaSharesUtils';\nimport LocusDeltaParser from './parser';\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n compareAndUpdateFlags: any;\n emitChange: any;\n locusParser: any;\n meetingId: any;\n parsedLocus: any;\n updateMeeting: any;\n webex: any;\n aclUrl: any;\n baseSequence: any;\n created: any;\n deltaParticipants: any;\n identities: any;\n membership: any;\n participants: any;\n participantsUrl: any;\n replaces: any;\n scheduledMeeting: any;\n sequence: any;\n controls: any;\n conversationUrl: any;\n embeddedApps: any;\n fullState: any;\n host: any;\n info: any;\n roles: any;\n mediaShares: any;\n replace: any;\n url: any;\n services: any;\n mainSessionLocusCache: any;\n /**\n * Constructor\n * @param {boolean} updateMeeting true if the meeting should be updated\n * @param {object} webex\n * @param {string} meetingId\n * @returns {undefined}\n */\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n meeting.locusDesync = false;\n meeting.needToGetFullLocus = false;\n break;\n case DESYNC:\n meeting.meetingRequest\n .getFullLocus({\n desync: true,\n locusUrl: locus.url ? locus.url : meeting.locusUrl,\n })\n .then((res) => {\n meeting.locusInfo.onFullLocus(res.body);\n // Notify parser to resume processing delta events\n // now that we have full locus from DESYNC.\n this.locusParser.resume();\n });\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus: any, meeting: any) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus: any = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.participantsUrl = locus.participantsUrl || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.membership = locus.membership || null;\n this.identities = locus.identities || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n /**\n * Stored participant changes between the last event and the current event.\n * All previously stored events are overwritten between events.\n *\n * @instance\n * @type {Array<DeltaParticipant>}\n * @private\n * @member LocusInfo\n */\n this.deltaParticipants = [];\n\n 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);\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self, locus.participants);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateServices(locus.links?.services);\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n initialSetup(locus: object) {\n this.updateLocusCache(locus);\n this.onFullLocus(locus);\n\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting: any, data: any) {\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 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\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 * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope?: any, eventName?: string, args?: any) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {string} eventType particulat locus event\n * @returns {object} null\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onFullLocus(locus: any, eventType?: string) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n this.updateParticipantDeltas(locus.participants);\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants, isReplaceMembers);\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.updateLocusInfo(locus);\n this.updateParticipants(locus.participants, isReplaceMembers);\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.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateParticipantsUrl(locus.participantsUrl);\n this.updateReplace(locus.replace);\n this.updateSelf(locus.self, locus.participants);\n this.updateLocusUrl(locus.url);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateMemberShip(locus.membership);\n this.updateIdentifiers(locus.identities);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateServices(locus.links?.services);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants: Array<any>, self: any) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n // @ts-ignore\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // @ts-ignore\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n } else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n } else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n } else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n // @ts-ignore\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n } else if (this.fullState && this.fullState.removed) {\n // user has been dropped from a meeting\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.FULLSTATE_REMOVED,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n } else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n } else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * Update the deltaParticipants property of this object based on a list of\n * provided participants.\n *\n * @param {Array} [participants] - The participants to update against.\n * @returns {void}\n */\n updateParticipantDeltas(participants: Array<any> = []) {\n // Used to find a participant within a participants collection.\n const findParticipant = (participant, collection) =>\n collection.find((item) => item.person.id === participant.person.id);\n\n // Generates an object that indicates which state properties have changed.\n const generateDelta = (prevState: any = {}, newState: any = {}) => {\n // Setup deltas.\n const deltas = {\n audioStatus: prevState.audioStatus !== newState.audioStatus,\n videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,\n videoStatus: prevState.videoStatus !== newState.videoStatus,\n };\n\n // Clean the object\n Object.keys(deltas).forEach((key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n });\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce((collection, participant) => {\n const existingParticipant = findParticipant(participant, this.participants || []) || {};\n\n const delta = generateDelta(existingParticipant.status, participant.status);\n\n const changed = Object.keys(delta).length > 0;\n\n if (changed) {\n collection.push({\n person: participant.person,\n delta,\n });\n }\n\n return collection;\n }, []);\n }\n\n /**\n * update meeting's members\n * @param {Object} participants new participants object\n * @param {Boolean} isReplace is replace the whole members\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object, isReplace?: boolean) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n isReplace,\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 hasEntryExitToneChanged,\n hasBreakoutChanged,\n hasVideoEnabledChanged,\n hasMuteOnEntryChanged,\n hasShareControlChanged,\n hasDisallowUnmuteChanged,\n hasReactionsChanged,\n hasReactionDisplayNamesChanged,\n hasViewTheParticipantListChanged,\n hasRaiseHandChanged,\n hasVideoChanged,\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 (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 (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 this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl: string, info: any) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n } else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created: object) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * @param {Object} services\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateServices(services: Record<'breakout' | 'record', {url: string}>) {\n if (services && !isEqual(this.services, services)) {\n this.services = services;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateServices',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState: object) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host: object) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n } else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info: object, self?: object) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n if (\n (info && !isEqual(this.info, info)) ||\n (roles.length && !isEqual(this.roles, roles) && info)\n ) {\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {info: parsedInfo.current, self}\n );\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n }\n 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 * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object) {\n if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n }\n );\n }\n }\n\n /**\n * @param {String} participantsUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateParticipantsUrl(participantsUrl: string) {\n if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {\n this.participantsUrl = participantsUrl;\n }\n }\n\n /**\n * @param {Object} replace\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplace(replace: object) {\n if (replace && !isEqual(this.replace, replace)) {\n this.replace = replace;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the locus.mediaShares property\n * @param {Array} participants the locus.participants property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self: any, participants: Array<any>) {\n // @ts-ignore - check where this.self come from\n if (self && !isEqual(this.self, self)) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.breakoutsChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,\n {breakoutSessions: parsedSelves.current.breakoutSessions}\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n\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 // When the user upgrades to moderator or cohost\n if (parsedSelves.updates.isUpgradeToModeratorOrCohost) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_OR_COHOST_UPGRADE,\n self\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.isUserUnadmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.isUserAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n // @ts-ignore\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n // @ts-ignore\n this.self = self;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url: string) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n url\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl: string) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence: number) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence: number) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * @param {Object} membership\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMemberShip(membership: object) {\n if (membership && !isEqual(this.membership, membership)) {\n this.membership = membership;\n }\n }\n\n /**\n * @param {Array} identities\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateIdentifiers(identities: Array<any>) {\n if (identities && !isEqual(this.identities, identities)) {\n this.identities = identities;\n }\n }\n\n /**\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, need to query main locus url (if response with 403 means no privilege, need to clear the cache)\n * @param {Object} newLocus\n * @returns {Object}\n * @memberof LocusInfo\n */\n getTheLocusToUpdate(newLocus: any) {\n const switchStatus = ControlsUtils.getSessionSwitchStatus(this.controls, newLocus.controls);\n if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {\n return cloneDeep(this.mainSessionLocusCache);\n }\n if (switchStatus.isJoinToBreakout) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN,\n {\n mainLocusUrl: this.url,\n }\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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"}
|