@webex/plugin-meetings 3.0.0-beta.20 → 3.0.0-beta.22
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/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/locus-info/index.js +2 -2
- package/dist/locus-info/index.js.map +1 -1
- package/dist/media/index.js +0 -29
- package/dist/media/index.js.map +1 -1
- package/dist/meeting/index.js +847 -618
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +3 -3
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/reactions/reactions.js +2 -2
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +18 -18
- package/dist/reactions/reactions.type.js.map +1 -1
- package/package.json +20 -20
- package/src/index.js +1 -0
- package/src/locus-info/index.ts +2 -2
- package/src/media/index.ts +0 -31
- package/src/meeting/index.ts +183 -53
- package/src/meeting/muteState.ts +2 -3
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +3 -3
- package/test/unit/spec/meeting/index.js +190 -12
- package/test/unit/spec/meeting/muteState.js +1 -1
- package/dist/multistream/multistreamMedia.js +0 -110
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/src/multistream/multistreamMedia.ts +0 -97
|
@@ -109,7 +109,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
|
|
|
109
109
|
parseRoster: function parseRoster(locus) {
|
|
110
110
|
this.members.locusParticipantsUpdate(locus);
|
|
111
111
|
},
|
|
112
|
-
version: "3.0.0-beta.
|
|
112
|
+
version: "3.0.0-beta.22"
|
|
113
113
|
});
|
|
114
114
|
var _default = Breakout;
|
|
115
115
|
exports.default = _default;
|
package/dist/breakouts/index.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequ
|
|
|
8
8
|
_Object$defineProperty(exports, "__esModule", {
|
|
9
9
|
value: true
|
|
10
10
|
});
|
|
11
|
-
exports.CONSTANTS = void 0;
|
|
11
|
+
exports.REACTIONS = exports.CONSTANTS = void 0;
|
|
12
12
|
_Object$defineProperty(exports, "TriggerProxy", {
|
|
13
13
|
enumerable: true,
|
|
14
14
|
get: function get() {
|
|
@@ -21,6 +21,8 @@ var _meetings = _interopRequireDefault(require("./meetings"));
|
|
|
21
21
|
var _config = _interopRequireDefault(require("./config"));
|
|
22
22
|
var _CONSTANTS = _interopRequireWildcard(require("./constants"));
|
|
23
23
|
exports.CONSTANTS = _CONSTANTS;
|
|
24
|
+
var _REACTIONS = _interopRequireWildcard(require("./reactions/reactions"));
|
|
25
|
+
exports.REACTIONS = _REACTIONS;
|
|
24
26
|
var _triggerProxy = _interopRequireDefault(require("./common/events/trigger-proxy"));
|
|
25
27
|
function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
26
28
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["registerPlugin","Meetings","config"],"sources":["index.js"],"sourcesContent":["/* eslint-env browser */\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Meetings from './meetings';\nimport config from './config';\n\nregisterPlugin('meetings', Meetings, {\n config,\n});\n\nexport default Meetings;\n\nexport * as CONSTANTS from './constants';\n\nexport {default as TriggerProxy} from './common/events/trigger-proxy';\n"],"mappings":";;;;;;;;;;;;;;;;;;AACA;AAEA;AACA;AAA8B;AAAA;
|
|
1
|
+
{"version":3,"names":["registerPlugin","Meetings","config"],"sources":["index.js"],"sourcesContent":["/* eslint-env browser */\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Meetings from './meetings';\nimport config from './config';\n\nregisterPlugin('meetings', Meetings, {\n config,\n});\n\nexport default Meetings;\n\nexport * as CONSTANTS from './constants';\nexport * as REACTIONS from './reactions/reactions';\n\nexport {default as TriggerProxy} from './common/events/trigger-proxy';\n"],"mappings":";;;;;;;;;;;;;;;;;;AACA;AAEA;AACA;AAA8B;AAAA;AAAA;AAAA;AAW9B;AAAsE;AAAA;AAftE;;AAMA,IAAAA,yBAAc,EAAC,UAAU,EAAEC,iBAAQ,EAAE;EACnCC,MAAM,EAANA;AACF,CAAC,CAAC;AAAC,eAEYD,iBAAQ;AAAA"}
|
package/dist/locus-info/index.js
CHANGED
|
@@ -907,6 +907,8 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
|
|
|
907
907
|
if (mediaShares && !(0, _isEqual2.default)(this.mediaShares, mediaShares)) {
|
|
908
908
|
var parsedMediaShares = _mediaSharesUtils.default.getMediaShares(this.mediaShares, mediaShares);
|
|
909
909
|
this.updateMeeting(parsedMediaShares.current);
|
|
910
|
+
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
911
|
+
this.mediaShares = mediaShares;
|
|
910
912
|
this.emitScoped({
|
|
911
913
|
file: 'locus-info',
|
|
912
914
|
function: 'updateMediaShares'
|
|
@@ -914,8 +916,6 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
|
|
|
914
916
|
current: parsedMediaShares.current,
|
|
915
917
|
previous: parsedMediaShares.previous
|
|
916
918
|
});
|
|
917
|
-
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
918
|
-
this.mediaShares = mediaShares;
|
|
919
919
|
}
|
|
920
920
|
}
|
|
921
921
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LocusInfo","updateMeeting","webex","meetingId","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","action","locus","meeting","loci","DESYNC","USE_CURRENT","USE_INCOMING","locusInfo","onDeltaLocus","locusDesync","needToGetFullLocus","meetingRequest","getFullLocus","desync","locusUrl","then","res","onFullLocus","body","resume","LoggerProxy","logger","info","onDeltaAction","parsedLoci","applyLocusDeltaData","onDeltaEvent","created","scheduledMeeting","participantsUrl","replaces","aclUrl","baseSequence","sequence","membership","identities","participants","deltaParticipants","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","updateLocusUrl","url","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","self","updateHostInfo","host","updateMediaShares","mediaShares","updateServices","links","services","data","eventType","LOCUSEVENT","PARTICIPANT_JOIN","PARTICIPANT_LEFT","CONTROLS_UPDATED","PARTICIPANT_AUDIO_MUTED","PARTICIPANT_AUDIO_UNMUTED","PARTICIPANT_VIDEO_MUTED","PARTICIPANT_VIDEO_UNMUTED","SELF_CHANGED","PARTICIPANT_UPDATED","PARTICIPANT_CONTROLS_UPDATED","PARTICIPANT_ROLES_UPDATED","PARTICIPANT_DECLINED","FLOOR_GRANTED","FLOOR_RELEASED","DIFFERENCE","handleLocusDelta","scope","eventName","args","emit","error","updateParticipantDeltas","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","workingCopy","type","_CALL_","_SIP_BRIDGE_","emitScoped","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","reason","state","updateCreated","updateParticipantsUrl","updateReplace","replace","updateAclUrl","updateBasequence","updateSequence","updateMemberShip","updateIdentifiers","compareAndUpdate","length","find","participant","identity","_USER_","removed","partner","getLocusPartner","LOCUS","STATE","INACTIVE","warn","Metrics","postEvent","event","REMOTE_ENDED","DESTROY_MEETING","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_REMOVED_REASON","MEETING_INACTIVE_TERMINATING","FULLSTATE_REMOVED","SELF_REMOVED","compareSelfAndHost","compareHostAndSelf","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","findParticipant","collection","item","person","id","generateDelta","prevState","newState","deltas","audioStatus","videoSlidesStatus","videoStatus","forEach","key","reduce","existingParticipant","delta","status","changed","push","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","ControlsUtils","parse","getControls","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasEntryExitToneChanged","hasBreakoutChanged","current","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","LOCUSINFO","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_UPDATED","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","breakout","CONTROLS_MEETING_BREAKOUT_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","LINKS_SERVICES","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","roles","SelfUtils","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","MEETING_INFO_UPDATED","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","internal","device","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","muted","remoteMuted","unmuteAllowed","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","isUserUnadmitted","SELF_UNADMITTED_GUEST","isUserAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","MEDIA_STATUS_CHANGE","currentMediaStatus","audio","video","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","LOCUS_INFO_UPDATE_URL","EventsScope"],"sources":["index.ts"],"sourcesContent":["import {isEqual} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport InfoUtils from './infoUtils';\nimport FullState from './fullState';\nimport SelfUtils from './selfUtils';\nimport HostUtils from './hostUtils';\nimport ControlsUtils from './controlsUtils';\nimport EmbeddedAppsUtils from './embeddedAppsUtils';\nimport MediaSharesUtils from './mediaSharesUtils';\nimport LocusDeltaParser from './parser';\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n compareAndUpdateFlags: any;\n emitChange: any;\n locusParser: any;\n meetingId: any;\n parsedLocus: any;\n updateMeeting: any;\n webex: any;\n aclUrl: any;\n baseSequence: any;\n created: any;\n deltaParticipants: any;\n identities: any;\n membership: any;\n participants: any;\n participantsUrl: any;\n replaces: any;\n scheduledMeeting: any;\n sequence: any;\n controls: any;\n conversationUrl: any;\n embeddedApps: any;\n fullState: any;\n host: any;\n info: any;\n mediaShares: any;\n replace: any;\n url: any;\n services: any;\n\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n meeting.locusDesync = false;\n meeting.needToGetFullLocus = false;\n break;\n case DESYNC:\n meeting.meetingRequest\n .getFullLocus({\n desync: true,\n locusUrl: meeting.locusUrl,\n })\n .then((res) => {\n meeting.locusInfo.onFullLocus(res.body);\n // Notify parser to resume processing delta events\n // now that we have full locus from DESYNC.\n this.locusParser.resume();\n });\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus: any, meeting: any) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus: any = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.participantsUrl = locus.participantsUrl || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.membership = locus.membership || null;\n this.identities = locus.identities || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n /**\n * Stored participant changes between the last event and the current event.\n * All previously stored events are overwritten between events.\n *\n * @instance\n * @type {Array<DeltaParticipant>}\n * @private\n * @member LocusInfo\n */\n this.deltaParticipants = [];\n\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls);\n this.updateLocusUrl(locus.url);\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self, locus.participants);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateServices(locus.links?.services);\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n initialSetup(locus: object) {\n this.onFullLocus(locus);\n\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting: any, data: any) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n switch (eventType) {\n case LOCUSEVENT.PARTICIPANT_JOIN:\n case LOCUSEVENT.PARTICIPANT_LEFT:\n case LOCUSEVENT.CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_MUTED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_UNMUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_MUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_UNMUTED:\n case LOCUSEVENT.SELF_CHANGED:\n case LOCUSEVENT.PARTICIPANT_UPDATED:\n case LOCUSEVENT.PARTICIPANT_CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_ROLES_UPDATED:\n case LOCUSEVENT.PARTICIPANT_DECLINED:\n case LOCUSEVENT.FLOOR_GRANTED:\n case LOCUSEVENT.FLOOR_RELEASED:\n this.onFullLocus(data.locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(data.locus, meeting);\n break;\n\n default:\n // Why will there be a event with no eventType ????\n // we may not need this, we can get full locus\n this.handleLocusDelta(data.locus, meeting);\n }\n }\n\n /**\n * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope?: any, eventName?: string, args?: any) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {string} eventType particulat locus event\n * @returns {object} null\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onFullLocus(locus: any, eventType?: string) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n this.updateParticipantDeltas(locus.participants);\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n handleOneOnOneEvent(eventType: string) {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus: any) {\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusInfo(locus) {\n if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {\n // When moved to a breakout session locus sends a message for the previous locus\n // indicating that we have been moved. It isn't helpful to continue parsing this\n // as it gets interpreted as if we have left the call\n return;\n }\n\n this.updateControls(locus.controls);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateParticipantsUrl(locus.participantsUrl);\n this.updateReplace(locus.replace);\n this.updateSelf(locus.self, locus.participants);\n this.updateLocusUrl(locus.url);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateMemberShip(locus.membership);\n this.updateIdentifiers(locus.identities);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateServices(locus.links?.services);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants: Array<any>, self: any) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n // @ts-ignore\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // @ts-ignore\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n } else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n } else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n } else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n // @ts-ignore\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n } else if (this.fullState && this.fullState.removed) {\n // user has been dropped from a meeting\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.FULLSTATE_REMOVED,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n } else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n } else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * Update the deltaParticipants property of this object based on a list of\n * provided participants.\n *\n * @param {Array} [participants] - The participants to update against.\n * @returns {void}\n */\n updateParticipantDeltas(participants: Array<any> = []) {\n // Used to find a participant within a participants collection.\n const findParticipant = (participant, collection) =>\n collection.find((item) => item.person.id === participant.person.id);\n\n // Generates an object that indicates which state properties have changed.\n const generateDelta = (prevState: any = {}, newState: any = {}) => {\n // Setup deltas.\n const deltas = {\n audioStatus: prevState.audioStatus !== newState.audioStatus,\n videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,\n videoStatus: prevState.videoStatus !== newState.videoStatus,\n };\n\n // Clean the object\n Object.keys(deltas).forEach((key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n });\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce((collection, participant) => {\n const existingParticipant = findParticipant(participant, this.participants || []) || {};\n\n const delta = generateDelta(existingParticipant.status, participant.status);\n\n const changed = Object.keys(delta).length > 0;\n\n if (changed) {\n collection.push({\n person: participant.person,\n delta,\n });\n }\n\n return collection;\n }, []);\n }\n\n /**\n *\n * @param {Object} participants new participants object\n * @param {boolen} deltaParticpantFlag delta event\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n }\n );\n }\n\n /**\n * @param {Object} controls\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls: object) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n hasEntryExitToneChanged,\n hasBreakoutChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasRecordingChanged || hasRecordingPausedChanged) {\n let state = null;\n\n if (hasRecordingPausedChanged) {\n if (current.record.paused) {\n state = RECORDING_STATE.PAUSED;\n } else {\n // state will be `IDLE` if the recording is not active, even when there is a `pause` status change.\n state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;\n }\n } else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n if (hasBreakoutChanged) {\n const {breakout} = current;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,\n {\n breakout,\n }\n );\n }\n\n if (hasEntryExitToneChanged) {\n const {entryExitTone} = current;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,\n {\n entryExitTone,\n }\n );\n\n this.updateMeeting({entryExitTone});\n }\n\n this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl: string, info: any) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n } else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created: object) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * @param {Object} services\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateServices(services: Record<'breakout' | 'record', {url: string}>) {\n if (services && !isEqual(this.services, services)) {\n this.services = services;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateServices',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState: object) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host: object) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n } else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info: object, self?: object) {\n if (info && !isEqual(this.info, info)) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {info: parsedInfo.current, self}\n );\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n }\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps: object) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object) {\n if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n }\n );\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n }\n }\n\n /**\n * @param {String} participantsUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateParticipantsUrl(participantsUrl: string) {\n if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {\n this.participantsUrl = participantsUrl;\n }\n }\n\n /**\n * @param {Object} replace\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplace(replace: object) {\n if (replace && !isEqual(this.replace, replace)) {\n this.replace = replace;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the locus.mediaShares property\n * @param {Array} participants the locus.participants property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self: any, participants: Array<any>) {\n // @ts-ignore - check where this.self come from\n if (self && !isEqual(this.self, self)) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.breakoutsChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,\n {breakoutSessions: parsedSelves.current.breakoutSessions}\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.isUserUnadmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.isUserAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n // @ts-ignore\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n // @ts-ignore\n this.self = self;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url: string) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n url\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl: string) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence: number) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence: number) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * @param {Object} membership\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMemberShip(membership: object) {\n if (membership && !isEqual(this.membership, membership)) {\n this.membership = membership;\n }\n }\n\n /**\n * @param {Array} identities\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateIdentifiers(identities: Array<any>) {\n if (identities && !isEqual(this.identities, identities)) {\n this.identities = identities;\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAwC;AAAA;AAExC;AACA;AACA;AACA;AACA;AACA;AALA,IAMqBA,SAAS;EAAA;EAAA;EA8B5B,mBAAYC,aAAa,EAAEC,KAAK,EAAEC,SAAS,EAAE;IAAA;IAAA;IAC3C;IAAQ;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IACR,MAAKC,WAAW,GAAG;MACjBC,MAAM,EAAE;IACV,CAAC;IACD,MAAKH,KAAK,GAAGA,KAAK;IAClB,MAAKI,UAAU,GAAG,KAAK;IACvB,MAAKC,qBAAqB,GAAG,CAAC,CAAC;IAC/B,MAAKJ,SAAS,GAAGA,SAAS;IAC1B,MAAKF,aAAa,GAAGA,aAAa;IAClC,MAAKO,WAAW,GAAG,IAAIC,eAAgB,EAAE;IAAC;EAC5C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,6BAAoBC,MAAc,EAAEC,KAAU,EAAEC,OAAY,EAAE;MAAA;MAC5D,4BAA4CH,eAAgB,CAACI,IAAI;QAA1DC,MAAM,yBAANA,MAAM;QAAEC,WAAW,yBAAXA,WAAW;QAAEC,YAAY,yBAAZA,YAAY;MAExC,QAAQN,MAAM;QACZ,KAAKM,YAAY;UACfJ,OAAO,CAACK,SAAS,CAACC,YAAY,CAACP,KAAK,CAAC;UACrC;QACF,KAAKI,WAAW;UACdH,OAAO,CAACO,WAAW,GAAG,KAAK;UAC3BP,OAAO,CAACQ,kBAAkB,GAAG,KAAK;UAClC;QACF,KAAKN,MAAM;UACTF,OAAO,CAACS,cAAc,CACnBC,YAAY,CAAC;YACZC,MAAM,EAAE,IAAI;YACZC,QAAQ,EAAEZ,OAAO,CAACY;UACpB,CAAC,CAAC,CACDC,IAAI,CAAC,UAACC,GAAG,EAAK;YACbd,OAAO,CAACK,SAAS,CAACU,WAAW,CAACD,GAAG,CAACE,IAAI,CAAC;YACvC;YACA;YACA,MAAI,CAACpB,WAAW,CAACqB,MAAM,EAAE;UAC3B,CAAC,CAAC;UACJ;QACF;UACEC,oBAAW,CAACC,MAAM,CAACC,IAAI,gFACmDtB,MAAM,EAC/E;MAAC;IAER;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA;IAAA,OAQA,0BAAiBC,KAAU,EAAEC,OAAY,EAAE;MAAA;MACzC;MACA,IAAI,CAAC,IAAI,CAACJ,WAAW,CAACyB,aAAa,EAAE;QACnC;QACA;QACA,IAAI,CAACzB,WAAW,CAACyB,aAAa,GAAG,UAACvB,MAAM,EAAEwB,UAAU,EAAK;UACvD,MAAI,CAACC,mBAAmB,CAACzB,MAAM,EAAEwB,UAAU,EAAEtB,OAAO,CAAC;QACvD,CAAC;MACH;MACA;MACA,IAAI,CAACJ,WAAW,CAAC4B,YAAY,CAACzB,KAAK,CAAC;IACtC;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,gBAAsB;MAAA;MAAA,IAAjBA,KAAU,uEAAG,CAAC,CAAC;MAClB,IAAI,CAAC0B,OAAO,GAAG1B,KAAK,CAAC0B,OAAO,IAAI,IAAI;MACpC,IAAI,CAACC,gBAAgB,GAAG3B,KAAK,CAACC,OAAO,IAAI,IAAI;MAC7C,IAAI,CAAC2B,eAAe,GAAG5B,KAAK,CAAC4B,eAAe,IAAI,IAAI;MACpD,IAAI,CAACC,QAAQ,GAAG7B,KAAK,CAAC6B,QAAQ,IAAI,IAAI;MACtC,IAAI,CAACC,MAAM,GAAG9B,KAAK,CAAC8B,MAAM,IAAI,IAAI;MAClC,IAAI,CAACC,YAAY,GAAG/B,KAAK,CAAC+B,YAAY,IAAI,IAAI;MAC9C,IAAI,CAACC,QAAQ,GAAGhC,KAAK,CAACgC,QAAQ,IAAI,IAAI;MACtC,IAAI,CAACC,UAAU,GAAGjC,KAAK,CAACiC,UAAU,IAAI,IAAI;MAC1C,IAAI,CAACC,UAAU,GAAGlC,KAAK,CAACkC,UAAU,IAAI,IAAI;MAC1C,IAAI,CAACC,YAAY,GAAGnC,KAAK,CAACmC,YAAY,IAAI,IAAI;;MAE9C;AACJ;AACA;AACA;AACA;AACA;AACA;;MAEI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MACI,IAAI,CAACC,iBAAiB,GAAG,EAAE;;MAE3B;MACA;MACA,IAAI,CAACC,kBAAkB,CAACrC,KAAK,CAACmC,YAAY,CAAC;MAC3C;MACA,IAAI,CAACG,qBAAqB,CAACtC,KAAK,CAACuC,eAAe,EAAEvC,KAAK,CAACqB,IAAI,CAAC;MAC7D,IAAI,CAACmB,cAAc,CAACxC,KAAK,CAACyC,QAAQ,CAAC;MACnC,IAAI,CAACC,cAAc,CAAC1C,KAAK,CAAC2C,GAAG,CAAC;MAC9B,IAAI,CAACC,eAAe,CAAC5C,KAAK,CAAC6C,SAAS,CAAC;MACrC,IAAI,CAACC,iBAAiB,CAAC9C,KAAK,CAACqB,IAAI,CAAC;MAClC,IAAI,CAAC0B,kBAAkB,CAAC/C,KAAK,CAACgD,YAAY,CAAC;MAC3C;MACA,IAAI,CAACC,UAAU,CAACjD,KAAK,CAACkD,IAAI,EAAElD,KAAK,CAACmC,YAAY,CAAC;MAC/C,IAAI,CAACgB,cAAc,CAACnD,KAAK,CAACoD,IAAI,CAAC;MAC/B,IAAI,CAACC,iBAAiB,CAACrD,KAAK,CAACsD,WAAW,CAAC;MACzC,IAAI,CAACC,cAAc,iBAACvD,KAAK,CAACwD,KAAK,iDAAX,aAAaC,QAAQ,CAAC;IAC5C;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,sBAAazD,KAAa,EAAE;MAC1B,IAAI,CAACgB,WAAW,CAAChB,KAAK,CAAC;;MAEvB;MACA,IAAI,CAACL,UAAU,GAAG,IAAI;IACxB;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA;IAAA,OAMA,eAAMM,OAAY,EAAEyD,IAAS,EAAE;MAC7B;MACA,IAAOC,SAAS,GAAID,IAAI,CAAjBC,SAAS;MAEhBxC,oBAAW,CAACC,MAAM,CAACC,IAAI,2DAAoDsC,SAAS,EAAG;MAEvF,QAAQA,SAAS;QACf,KAAKC,qBAAU,CAACC,gBAAgB;QAChC,KAAKD,qBAAU,CAACE,gBAAgB;QAChC,KAAKF,qBAAU,CAACG,gBAAgB;QAChC,KAAKH,qBAAU,CAACI,uBAAuB;QACvC,KAAKJ,qBAAU,CAACK,yBAAyB;QACzC,KAAKL,qBAAU,CAACM,uBAAuB;QACvC,KAAKN,qBAAU,CAACO,yBAAyB;QACzC,KAAKP,qBAAU,CAACQ,YAAY;QAC5B,KAAKR,qBAAU,CAACS,mBAAmB;QACnC,KAAKT,qBAAU,CAACU,4BAA4B;QAC5C,KAAKV,qBAAU,CAACW,yBAAyB;QACzC,KAAKX,qBAAU,CAACY,oBAAoB;QACpC,KAAKZ,qBAAU,CAACa,aAAa;QAC7B,KAAKb,qBAAU,CAACc,cAAc;UAC5B,IAAI,CAAC1D,WAAW,CAAC0C,IAAI,CAAC1D,KAAK,EAAE2D,SAAS,CAAC;UACvC;QACF,KAAKC,qBAAU,CAACe,UAAU;UACxB,IAAI,CAACC,gBAAgB,CAAClB,IAAI,CAAC1D,KAAK,EAAEC,OAAO,CAAC;UAC1C;QAEF;UACE;UACA;UACA,IAAI,CAAC2E,gBAAgB,CAAClB,IAAI,CAAC1D,KAAK,EAAEC,OAAO,CAAC;MAAC;IAEjD;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,oBAAW4E,KAAW,EAAEC,SAAkB,EAAEC,IAAU,EAAE;MACtD,OAAO,IAAI,CAACC,IAAI,CAACH,KAAK,EAAEC,SAAS,EAAEC,IAAI,CAAC;IAC1C;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;IACE;EAAA;IAAA;IAAA,OACA,qBAAY/E,KAAU,EAAE2D,SAAkB,EAAE;MAC1C,IAAI,CAAC3D,KAAK,EAAE;QACVmB,oBAAW,CAACC,MAAM,CAAC6D,KAAK,CACtB,qFAAqF,CACtF;MACH;MACA,IAAI,CAACC,uBAAuB,CAAClF,KAAK,CAACmC,YAAY,CAAC;MAChD,IAAI,CAACR,gBAAgB,GAAG3B,KAAK,CAACC,OAAO,IAAI,IAAI;MAC7C,IAAI,CAACkC,YAAY,GAAGnC,KAAK,CAACmC,YAAY;MACtC,IAAI,CAACgD,eAAe,CAACnF,KAAK,CAAC;MAC3B,IAAI,CAACqC,kBAAkB,CAACrC,KAAK,CAACmC,YAAY,CAAC;MAC3C,IAAI,CAACiD,eAAe,EAAE;MACtB,IAAI,CAACC,mBAAmB,CAAC1B,SAAS,CAAC;MACnC,IAAI,CAACZ,kBAAkB,CAAC/C,KAAK,CAACgD,YAAY,CAAC;MAC3C;MACA,IAAI,CAACnD,WAAW,CAACyF,WAAW,GAAGtF,KAAK;IACtC;;IAEA;IACA;AACF;AACA;AACA;AACA;IACE;EAAA;IAAA;IAAA,OACA,6BAAoB2D,SAAiB,EAAE;MACrC,IACE,IAAI,CAAClE,WAAW,CAACoD,SAAS,CAAC0C,IAAI,KAAKC,iBAAM,IAC1C,IAAI,CAAC/F,WAAW,CAACoD,SAAS,CAAC0C,IAAI,KAAKE,uBAAY,EAChD;QACA;QACA,IAAI9B,SAAS,KAAKC,qBAAU,CAACY,oBAAoB,EAAE;UACjD;UACA,IAAI,CAACkB,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACC,eAAe,EACtB;YACEC,cAAc,EAAE,IAAI;YACpBC,cAAc,EAAE;UAClB,CAAC,CACF;QACH;QACA;QACA,IAAIrC,SAAS,KAAKC,qBAAU,CAACC,gBAAgB,EAAE;UAC7C;UACA,IAAI,CAAC6B,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACC,eAAe,EACtB;YACEC,cAAc,EAAE,KAAK;YACrBC,cAAc,EAAE;UAClB,CAAC,CACF;QACH;MACF;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,sBAAahG,KAAU,EAAE;MACvB,IAAI,CAACmF,eAAe,CAACnF,KAAK,CAAC;MAC3B,IAAI,CAACqC,kBAAkB,CAACrC,KAAK,CAACmC,YAAY,CAAC;MAC3C,IAAI,CAACiD,eAAe,EAAE;IACxB;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,yBAAgBpF,KAAK,EAAE;MAAA;MACrB,IAAI,gBAAAA,KAAK,CAACkD,IAAI,gDAAV,YAAY+C,MAAM,MAAK,OAAO,IAAI,iBAAAjG,KAAK,CAACkD,IAAI,iDAAV,aAAYgD,KAAK,MAAK,MAAM,EAAE;QAClE;QACA;QACA;QACA;MACF;MAEA,IAAI,CAAC1D,cAAc,CAACxC,KAAK,CAACyC,QAAQ,CAAC;MACnC,IAAI,CAACH,qBAAqB,CAACtC,KAAK,CAACuC,eAAe,EAAEvC,KAAK,CAACqB,IAAI,CAAC;MAC7D,IAAI,CAAC8E,aAAa,CAACnG,KAAK,CAAC0B,OAAO,CAAC;MACjC,IAAI,CAACkB,eAAe,CAAC5C,KAAK,CAAC6C,SAAS,CAAC;MACrC,IAAI,CAACM,cAAc,CAACnD,KAAK,CAACoD,IAAI,CAAC;MAC/B,IAAI,CAACN,iBAAiB,CAAC9C,KAAK,CAACqB,IAAI,EAAErB,KAAK,CAACkD,IAAI,CAAC;MAC9C,IAAI,CAACG,iBAAiB,CAACrD,KAAK,CAACsD,WAAW,CAAC;MACzC,IAAI,CAAC8C,qBAAqB,CAACpG,KAAK,CAAC4B,eAAe,CAAC;MACjD,IAAI,CAACyE,aAAa,CAACrG,KAAK,CAACsG,OAAO,CAAC;MACjC,IAAI,CAACrD,UAAU,CAACjD,KAAK,CAACkD,IAAI,EAAElD,KAAK,CAACmC,YAAY,CAAC;MAC/C,IAAI,CAACO,cAAc,CAAC1C,KAAK,CAAC2C,GAAG,CAAC;MAC9B,IAAI,CAAC4D,YAAY,CAACvG,KAAK,CAAC8B,MAAM,CAAC;MAC/B,IAAI,CAAC0E,gBAAgB,CAACxG,KAAK,CAAC+B,YAAY,CAAC;MACzC,IAAI,CAAC0E,cAAc,CAACzG,KAAK,CAACgC,QAAQ,CAAC;MACnC,IAAI,CAAC0E,gBAAgB,CAAC1G,KAAK,CAACiC,UAAU,CAAC;MACvC,IAAI,CAAC0E,iBAAiB,CAAC3G,KAAK,CAACkC,UAAU,CAAC;MACxC,IAAI,CAACa,kBAAkB,CAAC/C,KAAK,CAACgD,YAAY,CAAC;MAC3C,IAAI,CAACO,cAAc,kBAACvD,KAAK,CAACwD,KAAK,kDAAX,cAAaC,QAAQ,CAAC;MAC1C,IAAI,CAACmD,gBAAgB,EAAE;MACvB;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA;IAAA,OAMA,yBAAgBzE,YAAwB,EAAEe,IAAS,EAAE;MACnD,IAAI,CAACf,YAAY,IAAIA,YAAY,CAAC0E,MAAM,KAAK,CAAC,EAAE;QAC9C,OAAO,IAAI;MACb;MAEA,OACE1E,YAAY,CAAC2E,IAAI,CACf,UAACC,WAAW;QAAA,OACV7D,IAAI,IACJ6D,WAAW,CAACC,QAAQ,KAAK9D,IAAI,CAAC8D,QAAQ,KACrC7E,YAAY,CAAC0E,MAAM,IAAI,CAAC,IAAKE,WAAW,CAACxB,IAAI,KAAK0B,iBAAM,IAAI,CAACF,WAAW,CAACG,OAAQ,CAAC;MAAA;MACrF;MAAA,CACD,IAAI,IAAI,CAACC,OAAO;IAErB;;IAEA;IACA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAIA,2BAAkB;MAChB,IACE,IAAI,CAAC1H,WAAW,CAACoD,SAAS,CAAC0C,IAAI,KAAKC,iBAAM,IAC1C,IAAI,CAAC/F,WAAW,CAACoD,SAAS,CAAC0C,IAAI,KAAKE,uBAAY,EAChD;QACA;QACA,IAAM0B,OAAO,GAAG,IAAI,CAACC,eAAe,CAAC,IAAI,CAACjF,YAAY,EAAE,IAAI,CAACe,IAAI,CAAC;QAElE,IAAI,CAAC5D,aAAa,CAAC;UAAC6H,OAAO,EAAPA;QAAO,CAAC,CAAC;;QAE7B;;QAEA;QACA;;QAEA;;QAEA,IAAI,IAAI,CAACtE,SAAS,IAAI,IAAI,CAACA,SAAS,CAACqD,KAAK,KAAKmB,gBAAK,CAACC,KAAK,CAACC,QAAQ,EAAE;UACnE;UACApG,oBAAW,CAACC,MAAM,CAACoG,IAAI,CACrB,2EAA2E,CAC5E;UACDC,gBAAO,CAACC,SAAS,CAAC;YAChBC,KAAK,EAAEhE,iBAAS,CAACiE,YAAY;YAC7BpI,SAAS,EAAE,IAAI,CAACA;UAClB,CAAC,CAAC;UACF,IAAI,CAACkG,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACgC,eAAe,EACtB;YACE5B,MAAM,EAAE6B,8BAAmB,CAACC,aAAa;YACzCC,WAAW,EAAE;UACf,CAAC,CACF;QACH,CAAC,MAAM,IACLb,OAAO,CAACjB,KAAK,KAAK+B,wBAAa,CAACC,MAAM,CAACC,IAAI,IAC3C,IAAI,CAAC1I,WAAW,CAACyD,IAAI,KACpB,IAAI,CAACzD,WAAW,CAACyD,IAAI,CAACgD,KAAK,KAAK+B,wBAAa,CAACC,MAAM,CAACE,QAAQ,IAC5D,IAAI,CAAC3I,WAAW,CAACyD,IAAI,CAACgD,KAAK,KAAK+B,wBAAa,CAACC,MAAM,CAACG,QAAQ,IAC7D,IAAI,CAAC5I,WAAW,CAACyD,IAAI,CAACgD,KAAK,KAAK+B,wBAAa,CAACC,MAAM,CAACI,MAAM,CAAC,EAC9D;UACAb,gBAAO,CAACC,SAAS,CAAC;YAChBC,KAAK,EAAEhE,iBAAS,CAACiE,YAAY;YAC7BpI,SAAS,EAAE,IAAI,CAACA;UAClB,CAAC,CAAC;UACF,IAAI,CAACkG,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACgC,eAAe,EACtB;YACE5B,MAAM,EAAE6B,8BAAmB,CAACS,YAAY;YACxCP,WAAW,EACT,IAAI,CAACvI,WAAW,CAACyD,IAAI,CAACsF,UAAU,IAAI,IAAI,CAAC/I,WAAW,CAACyD,IAAI,CAACsF,UAAU,CAACtC,KAAK,KAAKuC;UACnF,CAAC,CACF;QACH,CAAC,MAAM,IACL,IAAI,CAAChJ,WAAW,CAACyD,IAAI,IACrB,IAAI,CAACzD,WAAW,CAACyD,IAAI,CAACgD,KAAK,KAAK+B,wBAAa,CAACC,MAAM,CAACC,IAAI,KACxDhB,OAAO,CAACjB,KAAK,KAAK+B,wBAAa,CAACC,MAAM,CAACC,IAAI,IAC1ChB,OAAO,CAACjB,KAAK,KAAK+B,wBAAa,CAACC,MAAM,CAACE,QAAQ,IAC/CjB,OAAO,CAACjB,KAAK,KAAK+B,wBAAa,CAACC,MAAM,CAACG,QAAQ,IAC/ClB,OAAO,CAACjB,KAAK,KAAK+B,wBAAa,CAACC,MAAM,CAACQ,IAAI,CAAC,CAAC;QAAA,EAC/C;UACAjB,gBAAO,CAACC,SAAS,CAAC;YAChBC,KAAK,EAAEhE,iBAAS,CAACiE,YAAY;YAC7BpI,SAAS,EAAE,IAAI,CAACA;UAClB,CAAC,CAAC;UACF,IAAI,CAACkG,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACgC,eAAe,EACtB;YACE5B,MAAM,EAAE6B,8BAAmB,CAACa,SAAS;YACrCX,WAAW,EAAE;UACf,CAAC,CACF;QACH;MACF,CAAC,MAAM,IAAI,IAAI,CAACvI,WAAW,CAACoD,SAAS,CAAC0C,IAAI,KAAKqD,oBAAS,EAAE;QACxD,IACE,IAAI,CAAC/F,SAAS,KACb,IAAI,CAACA,SAAS,CAACqD,KAAK,KAAKmB,gBAAK,CAACC,KAAK,CAACC,QAAQ;QAC5C;QACA,IAAI,CAAC1E,SAAS,CAACqD,KAAK,KAAKmB,gBAAK,CAACC,KAAK,CAACuB,WAAW,CAAC,EACnD;UACA1H,oBAAW,CAACC,MAAM,CAACoG,IAAI,CACrB,uFAAuF,CACxF;UACDC,gBAAO,CAACC,SAAS,CAAC;YAChBC,KAAK,EAAEhE,iBAAS,CAACiE,YAAY;YAC7BpI,SAAS,EAAE,IAAI,CAACA;UAClB,CAAC,CAAC;UACF,IAAI,CAACkG,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACgC,eAAe,EACtB;YACE5B,MAAM,EAAE6C,iCAAsB,CAACC,4BAA4B;YAC3Df,WAAW,EAAE;UACf,CAAC,CACF;QACH,CAAC,MAAM,IAAI,IAAI,CAACnF,SAAS,IAAI,IAAI,CAACA,SAAS,CAACqE,OAAO,EAAE;UACnD;UACAO,gBAAO,CAACC,SAAS,CAAC;YAChBC,KAAK,EAAEhE,iBAAS,CAACiE,YAAY;YAC7BpI,SAAS,EAAE,IAAI,CAACA;UAClB,CAAC,CAAC;UACF,IAAI,CAACkG,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACgC,eAAe,EACtB;YACE5B,MAAM,EAAE6C,iCAAsB,CAACE,iBAAiB;YAChDhB,WAAW,EAAE;UACf,CAAC,CACF;QACH;QACA;QACA;QAAA,KACK,IAAI,IAAI,CAACvI,WAAW,CAACyD,IAAI,IAAI,IAAI,CAACzD,WAAW,CAACyD,IAAI,CAACgE,OAAO,EAAE;UAC/D;UACA,IAAI,CAACxB,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACgC,eAAe,EACtB;YACE5B,MAAM,EAAE6C,iCAAsB,CAACG,YAAY;YAC3CjB,WAAW,EAAE;UACf,CAAC,CACF;QACH;MACF,CAAC,MAAM;QACL7G,oBAAW,CAACC,MAAM,CAACoG,IAAI,CAAC,+DAA+D,CAAC;MAC1F;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA;IAAA,OAMA,4BAAmB;MACjB;MACA;MACA,IACE,IAAI,CAAC5H,qBAAqB,CAACsJ,kBAAkB,IAC7C,IAAI,CAACtJ,qBAAqB,CAACuJ,kBAAkB,EAC7C;QACA,IAAI,CAACD,kBAAkB,EAAE;MAC3B;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,8BAAqB;MAAA;MACnB;MACA,IACE,IAAI,CAACzJ,WAAW,CAACyD,IAAI,CAACkG,YAAY,+BAAK,IAAI,CAAC3J,WAAW,CAAC2D,IAAI,0DAArB,sBAAuBiG,MAAM,KACpE,IAAI,CAAC5J,WAAW,CAACyD,IAAI,CAACoG,SAAS,EAC/B;QACA,IAAI,CAAC5D,UAAU,CACb;UACEC,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAAC0D,0BAA0B,EACjC;UACEC,aAAa,EAAE;QACjB,CAAC,CACF;MACH,CAAC,MAAM;QACL,IAAI,CAAC9D,UAAU,CACb;UACEC,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAAC0D,0BAA0B,EACjC;UACEC,aAAa,EAAE;QACjB,CAAC,CACF;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,mCAAuD;MAAA;MAAA,IAA/BrH,YAAwB,uEAAG,EAAE;MACnD;MACA,IAAMsH,eAAe,GAAG,SAAlBA,eAAe,CAAI1C,WAAW,EAAE2C,UAAU;QAAA,OAC9CA,UAAU,CAAC5C,IAAI,CAAC,UAAC6C,IAAI;UAAA,OAAKA,IAAI,CAACC,MAAM,CAACC,EAAE,KAAK9C,WAAW,CAAC6C,MAAM,CAACC,EAAE;QAAA,EAAC;MAAA;;MAErE;MACA,IAAMC,aAAa,GAAG,SAAhBA,aAAa,GAAgD;QAAA,IAA5CC,SAAc,uEAAG,CAAC,CAAC;QAAA,IAAEC,QAAa,uEAAG,CAAC,CAAC;QAC5D;QACA,IAAMC,MAAM,GAAG;UACbC,WAAW,EAAEH,SAAS,CAACG,WAAW,KAAKF,QAAQ,CAACE,WAAW;UAC3DC,iBAAiB,EAAEJ,SAAS,CAACI,iBAAiB,KAAKH,QAAQ,CAACG,iBAAiB;UAC7EC,WAAW,EAAEL,SAAS,CAACK,WAAW,KAAKJ,QAAQ,CAACI;QAClD,CAAC;;QAED;QACA,mBAAYH,MAAM,CAAC,CAACI,OAAO,CAAC,UAACC,GAAG,EAAK;UACnC,IAAIL,MAAM,CAACK,GAAG,CAAC,KAAK,IAAI,EAAE;YACxB,OAAOL,MAAM,CAACK,GAAG,CAAC;UACpB;QACF,CAAC,CAAC;QAEF,OAAOL,MAAM;MACf,CAAC;MAED,IAAI,CAAC7H,iBAAiB,GAAGD,YAAY,CAACoI,MAAM,CAAC,UAACb,UAAU,EAAE3C,WAAW,EAAK;QACxE,IAAMyD,mBAAmB,GAAGf,eAAe,CAAC1C,WAAW,EAAE,MAAI,CAAC5E,YAAY,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QAEvF,IAAMsI,KAAK,GAAGX,aAAa,CAACU,mBAAmB,CAACE,MAAM,EAAE3D,WAAW,CAAC2D,MAAM,CAAC;QAE3E,IAAMC,OAAO,GAAG,mBAAYF,KAAK,CAAC,CAAC5D,MAAM,GAAG,CAAC;QAE7C,IAAI8D,OAAO,EAAE;UACXjB,UAAU,CAACkB,IAAI,CAAC;YACdhB,MAAM,EAAE7C,WAAW,CAAC6C,MAAM;YAC1Ba,KAAK,EAALA;UACF,CAAC,CAAC;QACJ;QAEA,OAAOf,UAAU;MACnB,CAAC,EAAE,EAAE,CAAC;IACR;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,4BAAmBvH,YAAoB,EAAE;MAAA;MACvC,IAAI,CAACuD,UAAU,CACb;QACEC,IAAI,EAAE,YAAY;QAClBC,QAAQ,EAAE;MACZ,CAAC,EACDC,iBAAM,CAACgF,8BAA8B,EACrC;QACE1I,YAAY,EAAZA,YAAY;QACZ2I,WAAW,EAAE,IAAI,CAACrL,WAAW,CAACgD,QAAQ,8BAAI,IAAI,CAAChD,WAAW,CAACgD,QAAQ,CAACsI,MAAM,0DAAhC,sBAAkCC,UAAU;QACtF5B,YAAY,EAAE,IAAI,CAAC3J,WAAW,CAACyD,IAAI,IAAI,IAAI,CAACzD,WAAW,CAACyD,IAAI,CAACkG,YAAY;QACzE6B,MAAM,EAAE,IAAI,CAACxL,WAAW,CAACyD,IAAI,IAAI,IAAI,CAACzD,WAAW,CAACyD,IAAI,CAAC+H,MAAM;QAC7D5B,MAAM,EAAE,IAAI,CAAC5J,WAAW,CAAC2D,IAAI,IAAI,IAAI,CAAC3D,WAAW,CAAC2D,IAAI,CAACiG;MACzD,CAAC,CACF;IACH;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,wBAAe5G,QAAgB,EAAE;MAC/B,IAAIA,QAAQ,IAAI,CAAC,uBAAQ,IAAI,CAACA,QAAQ,EAAEA,QAAQ,CAAC,EAAE;QACjD,IAAI,CAAChD,WAAW,CAACgD,QAAQ,GAAGyI,sBAAa,CAACC,KAAK,CAAC1I,QAAQ,CAAC;QACzD,4BAUIyI,sBAAa,CAACE,WAAW,CAAC,IAAI,CAAC3I,QAAQ,EAAEA,QAAQ,CAAC;UAAA,+CATpD4I,OAAO;UACLC,mBAAmB,0BAAnBA,mBAAmB;UACnBC,yBAAyB,0BAAzBA,yBAAyB;UACzBC,0BAA0B,0BAA1BA,0BAA0B;UAC1BC,oBAAoB,0BAApBA,oBAAoB;UACpBC,uBAAuB,0BAAvBA,uBAAuB;UACvBC,kBAAkB,0BAAlBA,kBAAkB;UAEpBC,OAAO,yBAAPA,OAAO;QAGT,IAAIN,mBAAmB,IAAIC,yBAAyB,EAAE;UACpD,IAAIrF,KAAK,GAAG,IAAI;UAEhB,IAAIqF,yBAAyB,EAAE;YAC7B,IAAIK,OAAO,CAACb,MAAM,CAACc,MAAM,EAAE;cACzB3F,KAAK,GAAG4F,0BAAe,CAACC,MAAM;YAChC,CAAC,MAAM;cACL;cACA7F,KAAK,GAAG0F,OAAO,CAACb,MAAM,CAACiB,SAAS,GAAGF,0BAAe,CAACG,OAAO,GAAGH,0BAAe,CAACpD,IAAI;YACnF;UACF,CAAC,MAAM,IAAI4C,mBAAmB,EAAE;YAC9BpF,KAAK,GAAG0F,OAAO,CAACb,MAAM,CAACiB,SAAS,GAAGF,0BAAe,CAACI,SAAS,GAAGJ,0BAAe,CAACpD,IAAI;UACrF;UAEA,IAAI,CAAChD,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACuG,0BAA0B,EAC3C;YACElG,KAAK,EAALA,KAAK;YACL8E,UAAU,EAAEY,OAAO,CAACb,MAAM,CAACC,UAAU;YACrCqB,YAAY,EAAET,OAAO,CAACb,MAAM,CAACsB;UAC/B,CAAC,CACF;QACH;QAEA,IAAIb,0BAA0B,EAAE;UAC9B,IAAOc,mBAAmB,GAAIV,OAAO,CAACW,gBAAgB,CAA/CD,mBAAmB;UAE1B,IAAI,CAAC5G,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAAC2G,kCAAkC,EACnD;YACEF,mBAAmB,EAAnBA;UACF,CAAC,CACF;QACH;QAEA,IAAIb,oBAAoB,EAAE;UACxB,0BAAgCG,OAAO,CAACa,UAAU;YAA3CC,YAAY,uBAAZA,YAAY;YAAEC,OAAO,uBAAPA,OAAO;UAE5B,IAAI,CAACjH,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAAC+G,mCAAmC,EACpD;YACEF,YAAY,EAAZA,YAAY;YACZC,OAAO,EAAPA;UACF,CAAC,CACF;QACH;QAEA,IAAIhB,kBAAkB,EAAE;UACtB,IAAOkB,QAAQ,GAAIjB,OAAO,CAAnBiB,QAAQ;UAEf,IAAI,CAACnH,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACiH,iCAAiC,EAClD;YACED,QAAQ,EAARA;UACF,CAAC,CACF;QACH;QAEA,IAAInB,uBAAuB,EAAE;UAC3B,IAAOqB,aAAa,GAAInB,OAAO,CAAxBmB,aAAa;UAEpB,IAAI,CAACrH,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACmH,gCAAgC,EACjD;YACED,aAAa,EAAbA;UACF,CAAC,CACF;UAED,IAAI,CAACzN,aAAa,CAAC;YAACyN,aAAa,EAAbA;UAAa,CAAC,CAAC;QACrC;QAEA,IAAI,CAACtK,QAAQ,GAAGA,QAAQ;MAC1B;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA;IAAA,OAMA,+BAAsBF,eAAuB,EAAElB,IAAS,EAAE;MACxD,IAAIkB,eAAe,IAAI,CAAC,uBAAQ,IAAI,CAACA,eAAe,EAAEA,eAAe,CAAC,EAAE;QACtE,IAAI,CAACA,eAAe,GAAGA,eAAe;QACtC,IAAI,CAACjD,aAAa,CAAC;UAACiD,eAAe,EAAfA;QAAe,CAAC,CAAC;MACvC,CAAC,MAAM,IACLlB,IAAI,IACJA,IAAI,CAACkB,eAAe,IACpB,CAAC,uBAAQ,IAAI,CAACA,eAAe,EAAElB,IAAI,CAACkB,eAAe,CAAC,EACpD;QACA,IAAI,CAACA,eAAe,GAAGlB,IAAI,CAACkB,eAAe;QAC3C,IAAI,CAACjD,aAAa,CAAC;UAACiD,eAAe,EAAElB,IAAI,CAACkB;QAAe,CAAC,CAAC;MAC7D;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,uBAAcb,OAAe,EAAE;MAC7B,IAAIA,OAAO,IAAI,CAAC,uBAAQ,IAAI,CAACA,OAAO,EAAEA,OAAO,CAAC,EAAE;QAC9C,IAAI,CAACA,OAAO,GAAGA,OAAO;MACxB;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,wBAAe+B,QAAsD,EAAE;MACrE,IAAIA,QAAQ,IAAI,CAAC,uBAAQ,IAAI,CAACA,QAAQ,EAAEA,QAAQ,CAAC,EAAE;QACjD,IAAI,CAACA,QAAQ,GAAGA,QAAQ;QACxB,IAAI,CAACiC,UAAU,CACb;UACEC,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACoH,cAAc,EAC/B;UACExJ,QAAQ,EAARA;QACF,CAAC,CACF;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,yBAAgBZ,SAAiB,EAAE;MACjC,IAAIA,SAAS,IAAI,CAAC,uBAAQ,IAAI,CAACA,SAAS,EAAEA,SAAS,CAAC,EAAE;QACpD,IAAMqK,MAAM,GAAGC,kBAAS,CAACC,YAAY,CAAC,IAAI,CAACvK,SAAS,EAAEA,SAAS,CAAC;QAEhE,IAAI,CAACvD,aAAa,CAAC4N,MAAM,CAACtB,OAAO,CAAC;QAElC,IAAIsB,MAAM,CAAC7B,OAAO,CAACgC,qBAAqB,EAAE;UACxC,IAAI,CAAC3H,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACyH,+BAA+B,EAChD;YACEC,aAAa,EAAEL,MAAM,CAACM,QAAQ,IAAIN,MAAM,CAACM,QAAQ,CAACC,YAAY;YAC9DC,YAAY,EAAER,MAAM,CAACtB,OAAO,CAAC6B;UAC/B,CAAC,CACF;QACH;QAEA,IAAIP,MAAM,CAAC7B,OAAO,CAACsC,oBAAoB,EAAE;UACvC,IAAI,CAACjI,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAAC+H,sBAAsB,EACvC;YACErI,IAAI,EAAE2H,MAAM,CAACtB,OAAO,CAACrG;UACvB,CAAC,CACF;QACH;QACA,IAAI,CAAC9F,WAAW,CAACoD,SAAS,GAAGqK,MAAM,CAACtB,OAAO;QAC3C,IAAI,CAAC/I,SAAS,GAAGA,SAAS;MAC5B;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,wBAAeO,IAAY,EAAE;MAC3B,IAAIA,IAAI,IAAI,CAAC,uBAAQ,IAAI,CAACA,IAAI,EAAEA,IAAI,CAAC,EAAE;QACrC,IAAMyK,WAAW,GAAGC,kBAAS,CAACC,QAAQ,CAAC,IAAI,CAAC3K,IAAI,EAAEA,IAAI,CAAC;QAEvD,IAAI,CAAC9D,aAAa,CAACuO,WAAW,CAACjC,OAAO,CAAC;QACvC,IAAI,CAACnM,WAAW,CAAC2D,IAAI,GAAGyK,WAAW,CAACjC,OAAO;QAC3C,IAAIiC,WAAW,CAACxC,OAAO,CAAC2C,SAAS,EAAE;UACjC,IAAI,CAACpO,qBAAqB,CAACsJ,kBAAkB,GAAG,IAAI;UACpD,IAAI,CAACxD,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACoI,sBAAsB,EAC7B;YACEC,OAAO,EAAEL,WAAW,CAACjC,OAAO;YAC5BuC,OAAO,EAAEN,WAAW,CAACL;UACvB,CAAC,CACF;QACH;QACA,IAAI,CAACpK,IAAI,GAAGA,IAAI;MAClB,CAAC,MAAM;QACL,IAAI,CAACxD,qBAAqB,CAACsJ,kBAAkB,GAAG,KAAK;MACvD;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA;IAAA,OAMA,2BAAkB7H,IAAY,EAAE6B,IAAa,EAAE;MAC7C,IAAI7B,IAAI,IAAI,CAAC,uBAAQ,IAAI,CAACA,IAAI,EAAEA,IAAI,CAAC,EAAE;QAAA;QACrC,IAAM+M,KAAK,GAAGlL,IAAI,GAAGmL,kBAAS,CAACC,QAAQ,CAACpL,IAAI,CAAC,GAAG,8BAAI,CAACzD,WAAW,CAACyD,IAAI,0DAArB,sBAAuBkL,KAAK,KAAI,EAAE;QAClF,IAAMG,QAAQ,GAAGF,kBAAS,CAACE,QAAQ,CAACrL,IAAI,IAAI,IAAI,CAACzD,WAAW,CAACyD,IAAI,CAAC;QAClE,IAAMsL,UAAU,GAAGC,kBAAS,CAACC,QAAQ,CAAC,IAAI,CAACjP,WAAW,CAAC4B,IAAI,EAAEA,IAAI,EAAE+M,KAAK,EAAEG,QAAQ,CAAC;QAEnF,IAAI,CAAC7I,UAAU,CACb;UACEC,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAAC8I,oBAAoB,EACrC;UAACtN,IAAI,EAAEmN,UAAU,CAAC5C,OAAO;UAAE1I,IAAI,EAAJA;QAAI,CAAC,CACjC;QAED,IAAIsL,UAAU,CAACnD,OAAO,CAACuD,QAAQ,EAAE;UAC/B,IAAI,CAAClJ,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACgJ,cAAc,EAC/BxN,IAAI,CACL;QACH;QACA,IAAImN,UAAU,CAACnD,OAAO,CAACyD,UAAU,EAAE;UACjC,IAAI,CAACpJ,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACkJ,gBAAgB,EACjC1N,IAAI,CACL;QACH;QAEA,IAAI,CAACA,IAAI,GAAGA,IAAI;QAChB,IAAI,CAAC5B,WAAW,CAAC4B,IAAI,GAAGmN,UAAU,CAAC5C,OAAO;QAC1C;QACA,IAAI,CAACtM,aAAa,CAACkP,UAAU,CAAC5C,OAAO,CAAC;MACxC;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,4BAAmB5I,YAAoB,EAAE;MACvC;MACA,IAAIgM,0BAAiB,CAACC,UAAU,CAAC,IAAI,CAACjM,YAAY,EAAEA,YAAY,CAAC,EAAE;QACjE;MACF;MAEA,IAAMkM,kBAAkB,GAAGF,0BAAiB,CAAC7D,KAAK,CAACnI,YAAY,CAAC;MAEhE,IAAI,CAAC1D,aAAa,CAAC;QAAC0D,YAAY,EAAEkM;MAAkB,CAAC,CAAC;MAEtD,IAAI,CAACxJ,UAAU,CACb;QACEC,IAAI,EAAE,YAAY;QAClBC,QAAQ,EAAE;MACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACsJ,qBAAqB,EACtCD,kBAAkB,CACnB;MACD,IAAI,CAAClM,YAAY,GAAGA,YAAY;IAClC;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,2BAAkBM,WAAmB,EAAE;MACrC,IAAIA,WAAW,IAAI,CAAC,uBAAQ,IAAI,CAACA,WAAW,EAAEA,WAAW,CAAC,EAAE;QAC1D,IAAM8L,iBAAiB,GAAGC,yBAAgB,CAACC,cAAc,CAAC,IAAI,CAAChM,WAAW,EAAEA,WAAW,CAAC;QAExF,IAAI,CAAChE,aAAa,CAAC8P,iBAAiB,CAACxD,OAAO,CAAC;QAC7C,IAAI,CAAClG,UAAU,CACb;UACEC,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAAC0J,8BAA8B,EACrC;UACE3D,OAAO,EAAEwD,iBAAiB,CAACxD,OAAO;UAClC4B,QAAQ,EAAE4B,iBAAiB,CAAC5B;QAC9B,CAAC,CACF;QACD,IAAI,CAAC/N,WAAW,CAAC6D,WAAW,GAAG8L,iBAAiB,CAACxD,OAAO;QACxD,IAAI,CAACtI,WAAW,GAAGA,WAAW;MAChC;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,+BAAsB1B,eAAuB,EAAE;MAC7C,IAAIA,eAAe,IAAI,CAAC,uBAAQ,IAAI,CAACA,eAAe,EAAEA,eAAe,CAAC,EAAE;QACtE,IAAI,CAACA,eAAe,GAAGA,eAAe;MACxC;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,uBAAc0E,OAAe,EAAE;MAC7B,IAAIA,OAAO,IAAI,CAAC,uBAAQ,IAAI,CAACA,OAAO,EAAEA,OAAO,CAAC,EAAE;QAC9C,IAAI,CAACA,OAAO,GAAGA,OAAO;MACxB;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA;IAAA,OAQA,oBAAWpD,IAAS,EAAEf,YAAwB,EAAE;MAC9C;MACA,IAAIe,IAAI,IAAI,CAAC,uBAAQ,IAAI,CAACA,IAAI,EAAEA,IAAI,CAAC,EAAE;QACrC;QACA,IAAMsM,YAAY,GAAGnB,kBAAS,CAACoB,SAAS,CAAC,IAAI,CAACvM,IAAI,EAAEA,IAAI,EAAE,IAAI,CAAC3D,KAAK,CAACmQ,QAAQ,CAACC,MAAM,CAAChN,GAAG,CAAC;QAEzF,IAAI,CAACrD,aAAa,CAACkQ,YAAY,CAAC5D,OAAO,CAAC;QACxC,IAAI,CAACnM,WAAW,CAACyD,IAAI,GAAGsM,YAAY,CAAC5D,OAAO;QAE5C,IAAMgE,OAAO,GAAG,IAAI,CAACnQ,WAAW,CAACC,MAAM,CAAC,IAAI,CAACD,WAAW,CAACC,MAAM,CAACmH,MAAM,GAAG,CAAC,CAAC;QAE3E,IAAI+I,OAAO,KAAKJ,YAAY,CAAC5D,OAAO,CAAC1F,KAAK,EAAE;UAC1C,IAAI,CAACzG,WAAW,CAACC,MAAM,CAACkL,IAAI,CAAC4E,YAAY,CAAC5D,OAAO,CAAC1F,KAAK,CAAC;QAC1D;;QAEA;QACA;QACA,IAAMgH,MAAM,GAAGmB,kBAAS,CAACwB,SAAS,CAChC,IAAI,CAACzI,eAAe,CAACjF,YAAY,EAAEe,IAAI,CAAC,EACxC,IAAI,CAACzD,WAAW,CAACoD,SAAS,CAAC0C,IAAI,EAC/B,IAAI,CAAC9F,WAAW,CAAC4B,IAAI,CAACyO,MAAM,CAC7B;QAED,IAAI5C,MAAM,CAAC4C,MAAM,EAAE;UACjB,IAAI,CAACxQ,aAAa,CAAC4N,MAAM,CAAC;QAC5B;QAEA,IAAIsC,YAAY,CAACnE,OAAO,CAAC0E,gBAAgB,EAAE;UACzC,IAAI,CAACnQ,qBAAqB,CAACuJ,kBAAkB,GAAG,IAAI;QACtD,CAAC,MAAM;UACL,IAAI,CAACvJ,qBAAqB,CAACuJ,kBAAkB,GAAG,KAAK;QACvD;QAEA,IAAIqG,YAAY,CAACnE,OAAO,CAAC2E,aAAa,EAAE;UACtC,IAAI,CAACtK,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACoK,+BAA+B,EAChD;YAACC,MAAM,EAAEV,YAAY,CAAC5D,OAAO,CAACsE;UAAM,CAAC,CACtC;QACH;QAEA,IAAIV,YAAY,CAACnE,OAAO,CAAC8E,gBAAgB,EAAE;UACzC,IAAI,CAACzK,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACuK,8BAA8B,EAC/C;YAACC,gBAAgB,EAAEb,YAAY,CAAC5D,OAAO,CAACyE;UAAgB,CAAC,CAC1D;QACH;QAEA,IAAIb,YAAY,CAACnE,OAAO,CAACiF,yBAAyB,EAAE;UAClD,IAAI,CAAC5K,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAAC0K,4BAA4B,EAC7C;YAACtK,MAAM,EAAE/C,IAAI,CAAC+C;UAAM,CAAC,CACtB;QACH;QAEA,IAAIuJ,YAAY,CAACnE,OAAO,CAAC0E,gBAAgB,EAAE;UACzC,IAAI,CAACrK,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAAC2K,sBAAsB,EACvCtN,IAAI,CACL;QACH;QACA,IAAIsM,YAAY,CAACnE,OAAO,CAACoF,gCAAgC,EAAE;UACzD,IAAI,CAAC/K,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAAC6K,qBAAqB,EACtC;YACEC,KAAK,EAAEnB,YAAY,CAAC5D,OAAO,CAACgF,WAAW;YACvCC,aAAa,EAAErB,YAAY,CAAC5D,OAAO,CAACiF;UACtC,CAAC,CACF;QACH;QACA,IAAIrB,YAAY,CAACnE,OAAO,CAACyF,sBAAsB,EAAE;UAC/C,IAAI,CAACpL,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACkL,+BAA+B,EAChD;YACEJ,KAAK,EAAEnB,YAAY,CAAC5D,OAAO,CAACgF,WAAW;YACvCC,aAAa,EAAErB,YAAY,CAAC5D,OAAO,CAACiF;UACtC,CAAC,CACF;QACH;QACA,IAAIrB,YAAY,CAACnE,OAAO,CAAC2F,iCAAiC,EAAE;UAC1D,IAAI,CAACtL,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACoL,sBAAsB,EACvC,CAAC,CAAC,CACH;QACH;QACA,IAAIzB,YAAY,CAACnE,OAAO,CAAC6F,gBAAgB,EAAE;UACzC,IAAI,CAACxL,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACsL,qBAAqB,EACtCjO,IAAI,CACL;QACH;QACA,IAAIsM,YAAY,CAACnE,OAAO,CAAC+F,cAAc,EAAE;UACvC,IAAI,CAAC1L,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACwL,mBAAmB,EACpCnO,IAAI,CACL;QACH;QAEA,IAAIsM,YAAY,CAACnE,OAAO,CAACiG,eAAe,EAAE;UACxC,IAAI,CAAC5L,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC;UACD;UACAuG,oBAAS,CAACtG,MAAM,CAAC0L,gBAAgB,EACjClD,kBAAS,CAACmD,cAAc,CAACtO,IAAI,CAACuO,aAAa,CAAC,CAC7C;QACH;QAEA,IACEjC,YAAY,CAACnE,OAAO,CAACqG,gBAAgB,IACrClC,YAAY,CAACnE,OAAO,CAACsG,gBAAgB,IACrCnC,YAAY,CAACnE,OAAO,CAACuG,gBAAgB,EACrC;UAAA;UACA,IAAI,CAAClM,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACgM,mBAAmB,EACpC;YACE3H,WAAW,2BAAEsF,YAAY,CAAC5D,OAAO,CAACkG,kBAAkB,0DAAvC,sBAAyCC,KAAK;YAC3D3H,WAAW,4BAAEoF,YAAY,CAAC5D,OAAO,CAACkG,kBAAkB,2DAAvC,uBAAyCE,KAAK;YAC3DC,WAAW,4BAAEzC,YAAY,CAAC5D,OAAO,CAACkG,kBAAkB,2DAAvC,uBAAyCI;UACxD,CAAC,CACF;QACH;QAEA,IAAI1C,YAAY,CAACnE,OAAO,CAAC8G,eAAe,EAAE;UACxC,IAAI,CAACzM,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACuM,cAAc,CAChC;QACH;QAEA,IAAI5C,YAAY,CAACnE,OAAO,CAACgH,mCAAmC,EAAE;UAC5D,IAAI,CAAC3M,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAACyM,wCAAwC,EACzD;YAACC,4BAA4B,EAAE/C,YAAY,CAAC5D,OAAO,CAAC2G;UAA4B,CAAC,CAClF;QACH;QAEA,IAAI/C,YAAY,CAACnE,OAAO,CAACmH,uBAAuB,EAAE;UAChD,IAAI,CAAC9M,UAAU,CACb;YACEC,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDuG,oBAAS,CAACtG,MAAM,CAAC4M,8BAA8B,EAC/C;YAACC,gBAAgB,EAAElD,YAAY,CAAC5D,OAAO,CAAC8G;UAAgB,CAAC,CAC1D;QACH;QAEA,IAAI,CAAChN,UAAU,CACb;UACEC,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAAC8M,sBAAsB,EAC7B;UACEC,OAAO,EAAEpD,YAAY,CAAChC,QAAQ;UAC9BqF,OAAO,EAAErD,YAAY,CAAC5D;QACxB,CAAC,CACF;QACD,IAAI,CAACnM,WAAW,CAACyD,IAAI,GAAGsM,YAAY,CAAC5D,OAAO;QAC5C;QACA,IAAI,CAAC1I,IAAI,GAAGA,IAAI;MAClB,CAAC,MAAM;QACL,IAAI,CAACtD,qBAAqB,CAACuJ,kBAAkB,GAAG,KAAK;MACvD;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA;IAAA,OAMA,wBAAexG,GAAW,EAAE;MAC1B,IAAIA,GAAG,IAAI,IAAI,CAACA,GAAG,KAAKA,GAAG,EAAE;QAC3B,IAAI,CAACA,GAAG,GAAGA,GAAG;QACd,IAAI,CAACrD,aAAa,CAAC;UAACuB,QAAQ,EAAE8B;QAAG,CAAC,CAAC;QACnC,IAAI,CAAC+C,UAAU,CACb;UACEC,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAACiN,qBAAqB,EAC5BnQ,GAAG,CACJ;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,sBAAab,MAAc,EAAE;MAC3B,IAAIA,MAAM,IAAI,CAAC,uBAAQ,IAAI,CAACA,MAAM,EAAEA,MAAM,CAAC,EAAE;QAC3C,IAAI,CAACA,MAAM,GAAGA,MAAM;MACtB;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,0BAAiBC,YAAoB,EAAE;MACrC,IAAIA,YAAY,IAAI,CAAC,uBAAQ,IAAI,CAACA,YAAY,EAAEA,YAAY,CAAC,EAAE;QAC7D,IAAI,CAACA,YAAY,GAAGA,YAAY;MAClC;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,wBAAeC,QAAgB,EAAE;MAC/B,IAAIA,QAAQ,IAAI,CAAC,uBAAQ,IAAI,CAACA,QAAQ,EAAEA,QAAQ,CAAC,EAAE;QACjD,IAAI,CAACA,QAAQ,GAAGA,QAAQ;MAC1B;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,0BAAiBC,UAAkB,EAAE;MACnC,IAAIA,UAAU,IAAI,CAAC,uBAAQ,IAAI,CAACA,UAAU,EAAEA,UAAU,CAAC,EAAE;QACvD,IAAI,CAACA,UAAU,GAAGA,UAAU;MAC9B;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,2BAAkBC,UAAsB,EAAE;MACxC,IAAIA,UAAU,IAAI,CAAC,uBAAQ,IAAI,CAACA,UAAU,EAAEA,UAAU,CAAC,EAAE;QACvD,IAAI,CAACA,UAAU,GAAGA,UAAU;MAC9B;IACF;EAAC;EAAA;AAAA,EAnxCoC6Q,oBAAW;AAAA"}
|
|
1
|
+
{"version":3,"names":["LocusInfo","updateMeeting","webex","meetingId","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","action","locus","meeting","loci","DESYNC","USE_CURRENT","USE_INCOMING","locusInfo","onDeltaLocus","locusDesync","needToGetFullLocus","meetingRequest","getFullLocus","desync","locusUrl","then","res","onFullLocus","body","resume","LoggerProxy","logger","info","onDeltaAction","parsedLoci","applyLocusDeltaData","onDeltaEvent","created","scheduledMeeting","participantsUrl","replaces","aclUrl","baseSequence","sequence","membership","identities","participants","deltaParticipants","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","updateLocusUrl","url","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","self","updateHostInfo","host","updateMediaShares","mediaShares","updateServices","links","services","data","eventType","LOCUSEVENT","PARTICIPANT_JOIN","PARTICIPANT_LEFT","CONTROLS_UPDATED","PARTICIPANT_AUDIO_MUTED","PARTICIPANT_AUDIO_UNMUTED","PARTICIPANT_VIDEO_MUTED","PARTICIPANT_VIDEO_UNMUTED","SELF_CHANGED","PARTICIPANT_UPDATED","PARTICIPANT_CONTROLS_UPDATED","PARTICIPANT_ROLES_UPDATED","PARTICIPANT_DECLINED","FLOOR_GRANTED","FLOOR_RELEASED","DIFFERENCE","handleLocusDelta","scope","eventName","args","emit","error","updateParticipantDeltas","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","workingCopy","type","_CALL_","_SIP_BRIDGE_","emitScoped","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","reason","state","updateCreated","updateParticipantsUrl","updateReplace","replace","updateAclUrl","updateBasequence","updateSequence","updateMemberShip","updateIdentifiers","compareAndUpdate","length","find","participant","identity","_USER_","removed","partner","getLocusPartner","LOCUS","STATE","INACTIVE","warn","Metrics","postEvent","event","REMOTE_ENDED","DESTROY_MEETING","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_REMOVED_REASON","MEETING_INACTIVE_TERMINATING","FULLSTATE_REMOVED","SELF_REMOVED","compareSelfAndHost","compareHostAndSelf","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","findParticipant","collection","item","person","id","generateDelta","prevState","newState","deltas","audioStatus","videoSlidesStatus","videoStatus","forEach","key","reduce","existingParticipant","delta","status","changed","push","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","ControlsUtils","parse","getControls","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasEntryExitToneChanged","hasBreakoutChanged","current","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","LOCUSINFO","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_UPDATED","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","breakout","CONTROLS_MEETING_BREAKOUT_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","LINKS_SERVICES","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","roles","SelfUtils","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","MEETING_INFO_UPDATED","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","internal","device","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","muted","remoteMuted","unmuteAllowed","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","isUserUnadmitted","SELF_UNADMITTED_GUEST","isUserAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","MEDIA_STATUS_CHANGE","currentMediaStatus","audio","video","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","LOCUS_INFO_UPDATE_URL","EventsScope"],"sources":["index.ts"],"sourcesContent":["import {isEqual} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport InfoUtils from './infoUtils';\nimport FullState from './fullState';\nimport SelfUtils from './selfUtils';\nimport HostUtils from './hostUtils';\nimport ControlsUtils from './controlsUtils';\nimport EmbeddedAppsUtils from './embeddedAppsUtils';\nimport MediaSharesUtils from './mediaSharesUtils';\nimport LocusDeltaParser from './parser';\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n compareAndUpdateFlags: any;\n emitChange: any;\n locusParser: any;\n meetingId: any;\n parsedLocus: any;\n updateMeeting: any;\n webex: any;\n aclUrl: any;\n baseSequence: any;\n created: any;\n deltaParticipants: any;\n identities: any;\n membership: any;\n participants: any;\n participantsUrl: any;\n replaces: any;\n scheduledMeeting: any;\n sequence: any;\n controls: any;\n conversationUrl: any;\n embeddedApps: any;\n fullState: any;\n host: any;\n info: any;\n mediaShares: any;\n replace: any;\n url: any;\n services: any;\n\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n meeting.locusDesync = false;\n meeting.needToGetFullLocus = false;\n break;\n case DESYNC:\n meeting.meetingRequest\n .getFullLocus({\n desync: true,\n locusUrl: meeting.locusUrl,\n })\n .then((res) => {\n meeting.locusInfo.onFullLocus(res.body);\n // Notify parser to resume processing delta events\n // now that we have full locus from DESYNC.\n this.locusParser.resume();\n });\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus: any, meeting: any) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus: any = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.participantsUrl = locus.participantsUrl || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.membership = locus.membership || null;\n this.identities = locus.identities || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n /**\n * Stored participant changes between the last event and the current event.\n * All previously stored events are overwritten between events.\n *\n * @instance\n * @type {Array<DeltaParticipant>}\n * @private\n * @member LocusInfo\n */\n this.deltaParticipants = [];\n\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls);\n this.updateLocusUrl(locus.url);\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self, locus.participants);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateServices(locus.links?.services);\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n initialSetup(locus: object) {\n this.onFullLocus(locus);\n\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting: any, data: any) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n switch (eventType) {\n case LOCUSEVENT.PARTICIPANT_JOIN:\n case LOCUSEVENT.PARTICIPANT_LEFT:\n case LOCUSEVENT.CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_MUTED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_UNMUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_MUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_UNMUTED:\n case LOCUSEVENT.SELF_CHANGED:\n case LOCUSEVENT.PARTICIPANT_UPDATED:\n case LOCUSEVENT.PARTICIPANT_CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_ROLES_UPDATED:\n case LOCUSEVENT.PARTICIPANT_DECLINED:\n case LOCUSEVENT.FLOOR_GRANTED:\n case LOCUSEVENT.FLOOR_RELEASED:\n this.onFullLocus(data.locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(data.locus, meeting);\n break;\n\n default:\n // Why will there be a event with no eventType ????\n // we may not need this, we can get full locus\n this.handleLocusDelta(data.locus, meeting);\n }\n }\n\n /**\n * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope?: any, eventName?: string, args?: any) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {string} eventType particulat locus event\n * @returns {object} null\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onFullLocus(locus: any, eventType?: string) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n this.updateParticipantDeltas(locus.participants);\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n handleOneOnOneEvent(eventType: string) {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus: any) {\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusInfo(locus) {\n if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {\n // When moved to a breakout session locus sends a message for the previous locus\n // indicating that we have been moved. It isn't helpful to continue parsing this\n // as it gets interpreted as if we have left the call\n return;\n }\n\n this.updateControls(locus.controls);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateParticipantsUrl(locus.participantsUrl);\n this.updateReplace(locus.replace);\n this.updateSelf(locus.self, locus.participants);\n this.updateLocusUrl(locus.url);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateMemberShip(locus.membership);\n this.updateIdentifiers(locus.identities);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateServices(locus.links?.services);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants: Array<any>, self: any) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n // @ts-ignore\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // @ts-ignore\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n } else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n } else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n } else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n // @ts-ignore\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n } else if (this.fullState && this.fullState.removed) {\n // user has been dropped from a meeting\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.FULLSTATE_REMOVED,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n } else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n } else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * Update the deltaParticipants property of this object based on a list of\n * provided participants.\n *\n * @param {Array} [participants] - The participants to update against.\n * @returns {void}\n */\n updateParticipantDeltas(participants: Array<any> = []) {\n // Used to find a participant within a participants collection.\n const findParticipant = (participant, collection) =>\n collection.find((item) => item.person.id === participant.person.id);\n\n // Generates an object that indicates which state properties have changed.\n const generateDelta = (prevState: any = {}, newState: any = {}) => {\n // Setup deltas.\n const deltas = {\n audioStatus: prevState.audioStatus !== newState.audioStatus,\n videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,\n videoStatus: prevState.videoStatus !== newState.videoStatus,\n };\n\n // Clean the object\n Object.keys(deltas).forEach((key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n });\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce((collection, participant) => {\n const existingParticipant = findParticipant(participant, this.participants || []) || {};\n\n const delta = generateDelta(existingParticipant.status, participant.status);\n\n const changed = Object.keys(delta).length > 0;\n\n if (changed) {\n collection.push({\n person: participant.person,\n delta,\n });\n }\n\n return collection;\n }, []);\n }\n\n /**\n *\n * @param {Object} participants new participants object\n * @param {boolen} deltaParticpantFlag delta event\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n }\n );\n }\n\n /**\n * @param {Object} controls\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls: object) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n hasEntryExitToneChanged,\n hasBreakoutChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasRecordingChanged || hasRecordingPausedChanged) {\n let state = null;\n\n if (hasRecordingPausedChanged) {\n if (current.record.paused) {\n state = RECORDING_STATE.PAUSED;\n } else {\n // state will be `IDLE` if the recording is not active, even when there is a `pause` status change.\n state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;\n }\n } else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n if (hasBreakoutChanged) {\n const {breakout} = current;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,\n {\n breakout,\n }\n );\n }\n\n if (hasEntryExitToneChanged) {\n const {entryExitTone} = current;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,\n {\n entryExitTone,\n }\n );\n\n this.updateMeeting({entryExitTone});\n }\n\n this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl: string, info: any) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n } else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created: object) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * @param {Object} services\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateServices(services: Record<'breakout' | 'record', {url: string}>) {\n if (services && !isEqual(this.services, services)) {\n this.services = services;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateServices',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState: object) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host: object) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n } else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info: object, self?: object) {\n if (info && !isEqual(this.info, info)) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {info: parsedInfo.current, self}\n );\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n }\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps: object) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object) {\n if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n }\n );\n }\n }\n\n /**\n * @param {String} participantsUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateParticipantsUrl(participantsUrl: string) {\n if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {\n this.participantsUrl = participantsUrl;\n }\n }\n\n /**\n * @param {Object} replace\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplace(replace: object) {\n if (replace && !isEqual(this.replace, replace)) {\n this.replace = replace;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the locus.mediaShares property\n * @param {Array} participants the locus.participants property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self: any, participants: Array<any>) {\n // @ts-ignore - check where this.self come from\n if (self && !isEqual(this.self, self)) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.breakoutsChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,\n {breakoutSessions: parsedSelves.current.breakoutSessions}\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.isUserUnadmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.isUserAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n // @ts-ignore\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n // @ts-ignore\n this.self = self;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url: string) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n url\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl: string) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence: number) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence: number) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * @param {Object} membership\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMemberShip(membership: object) {\n if (membership && !isEqual(this.membership, membership)) {\n this.membership = membership;\n }\n }\n\n /**\n * @param {Array} identities\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateIdentifiers(identities: Array<any>) {\n if (identities && !isEqual(this.identities, identities)) {\n this.identities = identities;\n }\n }\n}\n"],"mappings":"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"}
|
package/dist/media/index.js
CHANGED
|
@@ -393,35 +393,6 @@ Media.stopTracks = function (track) {
|
|
|
393
393
|
});
|
|
394
394
|
};
|
|
395
395
|
|
|
396
|
-
/**
|
|
397
|
-
*
|
|
398
|
-
* Stop input stream
|
|
399
|
-
* @param {Stream} stream A media stream
|
|
400
|
-
* @returns {null}
|
|
401
|
-
* @deprecated after v1.89.3
|
|
402
|
-
*/
|
|
403
|
-
Media.stopStream = function (stream) {
|
|
404
|
-
_loggerProxy.default.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');
|
|
405
|
-
if (!stream) {
|
|
406
|
-
return _promise.default.resolve();
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
/*
|
|
410
|
-
* To release local media
|
|
411
|
-
* 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)
|
|
412
|
-
* 2) Firefox requires the stream to be stopped
|
|
413
|
-
*/
|
|
414
|
-
return _promise.default.resolve().then(function () {
|
|
415
|
-
if (stream.getTracks) {
|
|
416
|
-
stream.getTracks().forEach(function (track) {
|
|
417
|
-
track.stop();
|
|
418
|
-
});
|
|
419
|
-
} else if (stream.stop) {
|
|
420
|
-
stream.stop();
|
|
421
|
-
}
|
|
422
|
-
});
|
|
423
|
-
};
|
|
424
|
-
|
|
425
396
|
/**
|
|
426
397
|
* generates streams for audio video and share
|
|
427
398
|
* @param {object} mediaSetting parameter
|
package/dist/media/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BrowserDetection","isBrowser","Media","setLocalTrack","enabled","track","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","createMediaConnection","isMultistream","debugId","mediaProperties","remoteQualityLevel","enableRtx","enableExtmap","turnServerInfo","iceServers","push","urls","url","username","credential","password","MultistreamRoapMediaConnection","Error","mediaDirection","audioTrack","videoTrack","shareTrack","RoapMediaConnection","skipInactiveTransceivers","requireH264","sdpMunging","convertPort9to0","addContentSlides","bandwidthLimits","audio","StaticConfig","meetings","bandwidth","video","startBitrate","periodicKeyframes","disableExtmap","disableRtx","send","screenShareVideo","receive","receiveAudio","receiveVideo","receiveShare","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","Config","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","navigator","mediaDevices","then","stream","getVideoTracks","length","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","facingMode","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","LoggerProxy","logger","error","constraint","getSupportedDevice","enumerateDevices","devices","supported","filter","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","reject","MediaError","toggleStream","stopTracks","stop","e","readyState","stopStream","warn","getTracks","forEach","mediaSetting","audioVideo","localStream","shareStream"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport {RoapMediaConnection, MultistreamRoapMediaConnection} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {AUDIO_INPUT, VIDEO_INPUT, MEDIA_TRACK_CONSTRAINT} from '../constants';\nimport Config from '../config';\nimport StaticConfig from '../common/config';\nimport MediaError from '../common/errors/media';\nimport BrowserDetection from '../common/browser-detection';\n\nconst {isBrowser} = BrowserDetection();\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media: any = {};\n\n/**\n * @param {boolean} enabled\n * @param {MediaStreamTrack} track\n * @returns {Boolean}\n * @public\n */\nMedia.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {\n if (track) {\n track.enabled = enabled;\n\n return true;\n }\n\n return false;\n};\n\n/**\n * format the media array for send\n * @param {String} mediaId\n * @param {Boolean} audioMuted\n * @param {Boolean} videoMuted\n * @returns {Array} medias\n */\nMedia.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {\n if (mediaId) {\n return [\n {\n localSdp: JSON.stringify({\n audioMuted,\n videoMuted,\n }),\n mediaId,\n },\n ];\n }\n\n return [];\n};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options: any, config: object) => {\n const {sendAudio, sendVideo, sendShare, sharePreferences, isSharing} = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences,\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n\n/**\n * creates a webrtc media connection with provided tracks and mediaDirection configuration\n *\n * @param {boolean} isMultistream\n * @param {string} debugId string useful for debugging (will appear in media connection logs)\n * @param {Object} options\n * @param {Object} [options.mediaProperties] only applicable to non-multistream connections, contains mediaDirection and local tracks:\n * audioTrack, videoTrack and shareTrack\n * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections\n * @param {boolean} [options.enableRtx] applicable only to non-multistream connections\n * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections\n * @param {Object} [options.turnServerInfo]\n * @returns {RoapMediaConnection}\n */\nMedia.createMediaConnection = (\n isMultistream: boolean,\n debugId: string,\n options: {\n mediaProperties?: {\n mediaDirection?: {\n receiveAudio: boolean;\n receiveVideo: boolean;\n receiveShare: boolean;\n };\n audioTrack?: MediaStreamTrack;\n videoTrack?: MediaStreamTrack;\n shareTrack?: MediaStreamTrack;\n };\n remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';\n enableRtx?: boolean;\n enableExtmap?: boolean;\n turnServerInfo?: {\n url: string;\n username: string;\n password: string;\n };\n }\n) => {\n const {mediaProperties, remoteQualityLevel, enableRtx, enableExtmap, turnServerInfo} = options;\n\n const iceServers = [];\n\n if (turnServerInfo) {\n iceServers.push({\n urls: turnServerInfo.url,\n username: turnServerInfo.username || '',\n credential: turnServerInfo.password || '',\n });\n }\n\n if (isMultistream) {\n return new MultistreamRoapMediaConnection(\n {\n iceServers,\n },\n debugId\n );\n }\n\n if (!mediaProperties) {\n throw new Error('mediaProperties have to be provided for non-multistream media connections');\n }\n\n const {mediaDirection, audioTrack, videoTrack, shareTrack} = mediaProperties;\n\n return new RoapMediaConnection(\n {\n iceServers,\n skipInactiveTransceivers: false,\n requireH264: true,\n sdpMunging: {\n convertPort9to0: false,\n addContentSlides: true,\n bandwidthLimits: {\n audio: StaticConfig.meetings.bandwidth.audio,\n video: StaticConfig.meetings.bandwidth.video,\n },\n startBitrate: StaticConfig.meetings.bandwidth.startBitrate,\n periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way\n disableExtmap: !enableExtmap,\n disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP\n },\n },\n {\n send: {\n audio: audioTrack,\n video: videoTrack,\n screenShareVideo: shareTrack,\n },\n receive: {\n audio: mediaDirection.receiveAudio,\n video: mediaDirection.receiveVideo,\n screenShareVideo: mediaDirection.receiveShare,\n remoteQualityLevel,\n },\n },\n debugId\n );\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (\n options: {\n sendAudio: boolean;\n sendShare: boolean;\n sharePreferences: {\n shareConstraints: MediaTrackConstraints;\n highFrameRate: any;\n };\n },\n config: any = {}\n) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {screenResolution, resolution, videoShareFrameRate, screenFrameRate, aspectRatio} =\n Config.meetings;\n\n let shareConstraints: any = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio,\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n } else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution,\n };\n } else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution,\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n if (isBrowser('firefox')) {\n const mediaConfig: any = {\n audio: options.sendAudio,\n video: options.sendShare,\n };\n\n return navigator.mediaDevices\n .getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n return stream;\n });\n }\n\n const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video\n ? isBrowser('firefox') && video.width && video.width.max === 320\n ? {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : false,\n fake: process.env.NODE_ENV === 'test', // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices.getUserMedia(mediaConfig).catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n * Checks if the machine has at least one audio or video device (Dont use this for screen share)\n * @param {object} [options]\n * {\n * sendAudio: true/false,\n * sendVideo: true/false\n * }\n * @returns {Object} {\n * sendAudio: true/false,\n * sendVideo: true/false\n *}\n */\nMedia.getSupportedDevice = ({sendAudio, sendVideo}: {sendAudio: boolean; sendVideo: boolean}) =>\n Promise.resolve().then(() => {\n if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {\n return {\n sendAudio: false,\n sendVideo: false,\n };\n }\n\n return navigator.mediaDevices.enumerateDevices().then((devices) => {\n const supported = {\n audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,\n video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0,\n };\n\n return {\n sendAudio: supported.audio && sendAudio,\n sendVideo: supported.video && sendVideo,\n };\n });\n });\n\n/**\n * proxy to browser navigator.mediaDevices.enumerateDevices()\n * @returns {Promise}\n */\nMedia.getDevices = () => {\n if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices();\n }\n\n return Promise.reject(new MediaError('enumerateDevices not supported.'));\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {MediaTrack} track A media stream\n * @returns {null}\n */\nMedia.stopTracks = (track: any) => {\n if (!track) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n if (track && track.stop) {\n try {\n track.stop();\n } catch (e) {\n LoggerProxy.logger.error(\n `Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`\n );\n }\n }\n });\n};\n\n/**\n *\n * Stop input stream\n * @param {Stream} stream A media stream\n * @returns {null}\n * @deprecated after v1.89.3\n */\nMedia.stopStream = (stream: any) => {\n LoggerProxy.logger.warn(\n 'Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3'\n );\n if (!stream) {\n return Promise.resolve();\n }\n\n /*\n * To release local media\n * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)\n * 2) Firefox requires the stream to be stopped\n */\n return Promise.resolve().then(() => {\n if (stream.getTracks) {\n stream.getTracks().forEach((track) => {\n track.stop();\n });\n } else if (stream.stop) {\n stream.stop();\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (\n mediaSetting: {\n sendAudio: object;\n sendVideo: object;\n sendShare: object;\n isSharing: object;\n },\n audioVideo: {\n audio: object;\n video: object;\n },\n sharePreferences: {\n shareConstraints: object;\n highFrameRate: boolean;\n },\n config: object\n) =>\n Media.getLocalMedia(\n {\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false,\n },\n config\n ).then((localStream) =>\n Media.getLocalMedia(\n {\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences,\n },\n config\n ).then((shareStream) => [localStream, shareStream])\n );\n\nexport default Media;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["BrowserDetection","isBrowser","Media","setLocalTrack","enabled","track","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","createMediaConnection","isMultistream","debugId","mediaProperties","remoteQualityLevel","enableRtx","enableExtmap","turnServerInfo","iceServers","push","urls","url","username","credential","password","MultistreamRoapMediaConnection","Error","mediaDirection","audioTrack","videoTrack","shareTrack","RoapMediaConnection","skipInactiveTransceivers","requireH264","sdpMunging","convertPort9to0","addContentSlides","bandwidthLimits","audio","StaticConfig","meetings","bandwidth","video","startBitrate","periodicKeyframes","disableExtmap","disableRtx","send","screenShareVideo","receive","receiveAudio","receiveVideo","receiveShare","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","Config","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","navigator","mediaDevices","then","stream","getVideoTracks","length","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","facingMode","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","LoggerProxy","logger","error","constraint","getSupportedDevice","enumerateDevices","devices","supported","filter","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","reject","MediaError","toggleStream","stopTracks","stop","e","readyState","mediaSetting","audioVideo","localStream","shareStream"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport {RoapMediaConnection, MultistreamRoapMediaConnection} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {AUDIO_INPUT, VIDEO_INPUT, MEDIA_TRACK_CONSTRAINT} from '../constants';\nimport Config from '../config';\nimport StaticConfig from '../common/config';\nimport MediaError from '../common/errors/media';\nimport BrowserDetection from '../common/browser-detection';\n\nconst {isBrowser} = BrowserDetection();\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media: any = {};\n\n/**\n * @param {boolean} enabled\n * @param {MediaStreamTrack} track\n * @returns {Boolean}\n * @public\n */\nMedia.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {\n if (track) {\n track.enabled = enabled;\n\n return true;\n }\n\n return false;\n};\n\n/**\n * format the media array for send\n * @param {String} mediaId\n * @param {Boolean} audioMuted\n * @param {Boolean} videoMuted\n * @returns {Array} medias\n */\nMedia.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {\n if (mediaId) {\n return [\n {\n localSdp: JSON.stringify({\n audioMuted,\n videoMuted,\n }),\n mediaId,\n },\n ];\n }\n\n return [];\n};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options: any, config: object) => {\n const {sendAudio, sendVideo, sendShare, sharePreferences, isSharing} = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences,\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n\n/**\n * creates a webrtc media connection with provided tracks and mediaDirection configuration\n *\n * @param {boolean} isMultistream\n * @param {string} debugId string useful for debugging (will appear in media connection logs)\n * @param {Object} options\n * @param {Object} [options.mediaProperties] only applicable to non-multistream connections, contains mediaDirection and local tracks:\n * audioTrack, videoTrack and shareTrack\n * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections\n * @param {boolean} [options.enableRtx] applicable only to non-multistream connections\n * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections\n * @param {Object} [options.turnServerInfo]\n * @returns {RoapMediaConnection}\n */\nMedia.createMediaConnection = (\n isMultistream: boolean,\n debugId: string,\n options: {\n mediaProperties?: {\n mediaDirection?: {\n receiveAudio: boolean;\n receiveVideo: boolean;\n receiveShare: boolean;\n };\n audioTrack?: MediaStreamTrack;\n videoTrack?: MediaStreamTrack;\n shareTrack?: MediaStreamTrack;\n };\n remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';\n enableRtx?: boolean;\n enableExtmap?: boolean;\n turnServerInfo?: {\n url: string;\n username: string;\n password: string;\n };\n }\n) => {\n const {mediaProperties, remoteQualityLevel, enableRtx, enableExtmap, turnServerInfo} = options;\n\n const iceServers = [];\n\n if (turnServerInfo) {\n iceServers.push({\n urls: turnServerInfo.url,\n username: turnServerInfo.username || '',\n credential: turnServerInfo.password || '',\n });\n }\n\n if (isMultistream) {\n return new MultistreamRoapMediaConnection(\n {\n iceServers,\n },\n debugId\n );\n }\n\n if (!mediaProperties) {\n throw new Error('mediaProperties have to be provided for non-multistream media connections');\n }\n\n const {mediaDirection, audioTrack, videoTrack, shareTrack} = mediaProperties;\n\n return new RoapMediaConnection(\n {\n iceServers,\n skipInactiveTransceivers: false,\n requireH264: true,\n sdpMunging: {\n convertPort9to0: false,\n addContentSlides: true,\n bandwidthLimits: {\n audio: StaticConfig.meetings.bandwidth.audio,\n video: StaticConfig.meetings.bandwidth.video,\n },\n startBitrate: StaticConfig.meetings.bandwidth.startBitrate,\n periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way\n disableExtmap: !enableExtmap,\n disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP\n },\n },\n {\n send: {\n audio: audioTrack,\n video: videoTrack,\n screenShareVideo: shareTrack,\n },\n receive: {\n audio: mediaDirection.receiveAudio,\n video: mediaDirection.receiveVideo,\n screenShareVideo: mediaDirection.receiveShare,\n remoteQualityLevel,\n },\n },\n debugId\n );\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (\n options: {\n sendAudio: boolean;\n sendShare: boolean;\n sharePreferences: {\n shareConstraints: MediaTrackConstraints;\n highFrameRate: any;\n };\n },\n config: any = {}\n) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {screenResolution, resolution, videoShareFrameRate, screenFrameRate, aspectRatio} =\n Config.meetings;\n\n let shareConstraints: any = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio,\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n } else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution,\n };\n } else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution,\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n if (isBrowser('firefox')) {\n const mediaConfig: any = {\n audio: options.sendAudio,\n video: options.sendShare,\n };\n\n return navigator.mediaDevices\n .getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n return stream;\n });\n }\n\n const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video\n ? isBrowser('firefox') && video.width && video.width.max === 320\n ? {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : false,\n fake: process.env.NODE_ENV === 'test', // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices.getUserMedia(mediaConfig).catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n * Checks if the machine has at least one audio or video device (Dont use this for screen share)\n * @param {object} [options]\n * {\n * sendAudio: true/false,\n * sendVideo: true/false\n * }\n * @returns {Object} {\n * sendAudio: true/false,\n * sendVideo: true/false\n *}\n */\nMedia.getSupportedDevice = ({sendAudio, sendVideo}: {sendAudio: boolean; sendVideo: boolean}) =>\n Promise.resolve().then(() => {\n if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {\n return {\n sendAudio: false,\n sendVideo: false,\n };\n }\n\n return navigator.mediaDevices.enumerateDevices().then((devices) => {\n const supported = {\n audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,\n video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0,\n };\n\n return {\n sendAudio: supported.audio && sendAudio,\n sendVideo: supported.video && sendVideo,\n };\n });\n });\n\n/**\n * proxy to browser navigator.mediaDevices.enumerateDevices()\n * @returns {Promise}\n */\nMedia.getDevices = () => {\n if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices();\n }\n\n return Promise.reject(new MediaError('enumerateDevices not supported.'));\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {MediaTrack} track A media stream\n * @returns {null}\n */\nMedia.stopTracks = (track: any) => {\n if (!track) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n if (track && track.stop) {\n try {\n track.stop();\n } catch (e) {\n LoggerProxy.logger.error(\n `Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`\n );\n }\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (\n mediaSetting: {\n sendAudio: object;\n sendVideo: object;\n sendShare: object;\n isSharing: object;\n },\n audioVideo: {\n audio: object;\n video: object;\n },\n sharePreferences: {\n shareConstraints: object;\n highFrameRate: boolean;\n },\n config: object\n) =>\n Media.getLocalMedia(\n {\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false,\n },\n config\n ).then((localStream) =>\n Media.getLocalMedia(\n {\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences,\n },\n config\n ).then((shareStream) => [localStream, shareStream])\n );\n\nexport default Media;\n"],"mappings":"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"}
|