@webex/plugin-meetings 3.0.0-beta.48 → 3.0.0-beta.49
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/constants.js +0 -1
- package/dist/constants.js.map +1 -1
- package/dist/locus-info/index.js +1 -1
- package/dist/locus-info/index.js.map +1 -1
- package/dist/media/index.js +5 -2
- package/dist/media/index.js.map +1 -1
- package/dist/meeting/index.js +5 -3
- package/dist/meeting/index.js.map +1 -1
- package/dist/types/constants.d.ts +0 -1
- package/package.json +19 -19
- package/src/constants.ts +0 -1
- package/src/locus-info/index.ts +1 -1
- package/src/media/index.ts +9 -2
- package/src/meeting/index.ts +7 -5
- package/test/unit/spec/locus-info/index.js +3 -3
- package/test/unit/spec/media/index.ts +63 -1
- package/test/unit/spec/meeting/index.js +38 -1
|
@@ -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","hasVideoEnabledChanged","current","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","LOCUSINFO","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_UPDATED","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","breakout","CONTROLS_MEETING_BREAKOUT_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","videoEnabled","unmuteVideoAllowed","CONTROLS_VIDEO_ENABLED_UPDATED","unmuteAllowed","LINKS_SERVICES","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","roles","SelfUtils","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","MEETING_INFO_UPDATED","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","internal","device","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","isVideoMutedByOthersChanged","SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED","muted","remoteVideoMuted","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","remoteMuted","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","isUserUnadmitted","SELF_UNADMITTED_GUEST","isUserAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","MEDIA_STATUS_CHANGE","currentMediaStatus","audio","video","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","LOCUS_INFO_UPDATE_URL","EventsScope"],"sources":["index.ts"],"sourcesContent":["import {isEqual} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport InfoUtils from './infoUtils';\nimport FullState from './fullState';\nimport SelfUtils from './selfUtils';\nimport HostUtils from './hostUtils';\nimport ControlsUtils from './controlsUtils';\nimport EmbeddedAppsUtils from './embeddedAppsUtils';\nimport MediaSharesUtils from './mediaSharesUtils';\nimport LocusDeltaParser from './parser';\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n compareAndUpdateFlags: any;\n emitChange: any;\n locusParser: any;\n meetingId: any;\n parsedLocus: any;\n updateMeeting: any;\n webex: any;\n aclUrl: any;\n baseSequence: any;\n created: any;\n deltaParticipants: any;\n identities: any;\n membership: any;\n participants: any;\n participantsUrl: any;\n replaces: any;\n scheduledMeeting: any;\n sequence: any;\n controls: any;\n conversationUrl: any;\n embeddedApps: any;\n fullState: any;\n host: any;\n info: any;\n mediaShares: any;\n replace: any;\n url: any;\n services: any;\n\n /**\n * Constructor\n * @param {boolean} updateMeeting true if the meeting should be updated\n * @param {object} webex\n * @param {string} meetingId\n * @returns {undefined}\n */\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n meeting.locusDesync = false;\n meeting.needToGetFullLocus = false;\n break;\n case DESYNC:\n meeting.meetingRequest\n .getFullLocus({\n desync: true,\n locusUrl: meeting.locusUrl,\n })\n .then((res) => {\n meeting.locusInfo.onFullLocus(res.body);\n // Notify parser to resume processing delta events\n // now that we have full locus from DESYNC.\n this.locusParser.resume();\n });\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus: any, meeting: any) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus: any = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.participantsUrl = locus.participantsUrl || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.membership = locus.membership || null;\n this.identities = locus.identities || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n /**\n * Stored participant changes between the last event and the current event.\n * All previously stored events are overwritten between events.\n *\n * @instance\n * @type {Array<DeltaParticipant>}\n * @private\n * @member LocusInfo\n */\n this.deltaParticipants = [];\n\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls);\n this.updateLocusUrl(locus.url);\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self, locus.participants);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateServices(locus.links?.services);\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n initialSetup(locus: object) {\n this.onFullLocus(locus);\n\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting: any, data: any) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n switch (eventType) {\n case LOCUSEVENT.PARTICIPANT_JOIN:\n case LOCUSEVENT.PARTICIPANT_LEFT:\n case LOCUSEVENT.CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_MUTED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_UNMUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_MUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_UNMUTED:\n case LOCUSEVENT.SELF_CHANGED:\n case LOCUSEVENT.PARTICIPANT_UPDATED:\n case LOCUSEVENT.PARTICIPANT_CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_ROLES_UPDATED:\n case LOCUSEVENT.PARTICIPANT_DECLINED:\n case LOCUSEVENT.FLOOR_GRANTED:\n case LOCUSEVENT.FLOOR_RELEASED:\n this.onFullLocus(data.locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(data.locus, meeting);\n break;\n\n default:\n // Why will there be a event with no eventType ????\n // we may not need this, we can get full locus\n this.handleLocusDelta(data.locus, meeting);\n }\n }\n\n /**\n * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope?: any, eventName?: string, args?: any) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {string} eventType particulat locus event\n * @returns {object} null\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onFullLocus(locus: any, eventType?: string) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n this.updateParticipantDeltas(locus.participants);\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n handleOneOnOneEvent(eventType: string) {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus: any) {\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusInfo(locus) {\n if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {\n // When moved to a breakout session locus sends a message for the previous locus\n // indicating that we have been moved. It isn't helpful to continue parsing this\n // as it gets interpreted as if we have left the call\n return;\n }\n\n this.updateControls(locus.controls);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateParticipantsUrl(locus.participantsUrl);\n this.updateReplace(locus.replace);\n this.updateSelf(locus.self, locus.participants);\n this.updateLocusUrl(locus.url);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateMemberShip(locus.membership);\n this.updateIdentifiers(locus.identities);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateServices(locus.links?.services);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants: Array<any>, self: any) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n // @ts-ignore\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // @ts-ignore\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n } else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n } else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n } else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n // @ts-ignore\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n } else if (this.fullState && this.fullState.removed) {\n // user has been dropped from a meeting\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.FULLSTATE_REMOVED,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n } else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n } else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * Update the deltaParticipants property of this object based on a list of\n * provided participants.\n *\n * @param {Array} [participants] - The participants to update against.\n * @returns {void}\n */\n updateParticipantDeltas(participants: Array<any> = []) {\n // Used to find a participant within a participants collection.\n const findParticipant = (participant, collection) =>\n collection.find((item) => item.person.id === participant.person.id);\n\n // Generates an object that indicates which state properties have changed.\n const generateDelta = (prevState: any = {}, newState: any = {}) => {\n // Setup deltas.\n const deltas = {\n audioStatus: prevState.audioStatus !== newState.audioStatus,\n videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,\n videoStatus: prevState.videoStatus !== newState.videoStatus,\n };\n\n // Clean the object\n Object.keys(deltas).forEach((key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n });\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce((collection, participant) => {\n const existingParticipant = findParticipant(participant, this.participants || []) || {};\n\n const delta = generateDelta(existingParticipant.status, participant.status);\n\n const changed = Object.keys(delta).length > 0;\n\n if (changed) {\n collection.push({\n person: participant.person,\n delta,\n });\n }\n\n return collection;\n }, []);\n }\n\n /**\n *\n * @param {Object} participants new participants object\n * @param {boolen} deltaParticpantFlag delta event\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n }\n );\n }\n\n /**\n * @param {Object} controls\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls: object) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n hasEntryExitToneChanged,\n hasBreakoutChanged,\n hasVideoEnabledChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasRecordingChanged || hasRecordingPausedChanged) {\n let state = null;\n\n if (hasRecordingPausedChanged) {\n if (current.record.paused) {\n state = RECORDING_STATE.PAUSED;\n } else {\n // state will be `IDLE` if the recording is not active, even when there is a `pause` status change.\n state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;\n }\n } else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n if (hasBreakoutChanged) {\n const {breakout} = current;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,\n {\n breakout,\n }\n );\n }\n\n if (hasEntryExitToneChanged) {\n const {entryExitTone} = current;\n\n this.updateMeeting({entryExitTone});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,\n {\n entryExitTone,\n }\n );\n }\n\n // videoEnabled is handled differently than other controls,\n // to fit with audio mute status logic\n if (hasVideoEnabledChanged) {\n const {videoEnabled} = current;\n\n this.updateMeeting({unmuteVideoAllowed: videoEnabled});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_VIDEO_ENABLED_UPDATED,\n {\n // muted: not part of locus.controls\n unmuteAllowed: videoEnabled,\n }\n );\n }\n\n this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl: string, info: any) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n } else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created: object) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * @param {Object} services\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateServices(services: Record<'breakout' | 'record', {url: string}>) {\n if (services && !isEqual(this.services, services)) {\n this.services = services;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateServices',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState: object) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host: object) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n } else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info: object, self?: object) {\n if (info && !isEqual(this.info, info)) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {info: parsedInfo.current, self}\n );\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n }\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps: object) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object) {\n if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n }\n );\n }\n }\n\n /**\n * @param {String} participantsUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateParticipantsUrl(participantsUrl: string) {\n if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {\n this.participantsUrl = participantsUrl;\n }\n }\n\n /**\n * @param {Object} replace\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplace(replace: object) {\n if (replace && !isEqual(this.replace, replace)) {\n this.replace = replace;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the locus.mediaShares property\n * @param {Array} participants the locus.participants property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self: any, participants: Array<any>) {\n // @ts-ignore - check where this.self come from\n if (self && !isEqual(this.self, self)) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.breakoutsChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,\n {breakoutSessions: parsedSelves.current.breakoutSessions}\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n if (parsedSelves.updates.isVideoMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteVideoMuted,\n // unmuteAllowed: not part of .self\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.isUserUnadmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.isUserAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n // @ts-ignore\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n // @ts-ignore\n this.self = self;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url: string) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n url\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl: string) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence: number) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence: number) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * @param {Object} membership\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMemberShip(membership: object) {\n if (membership && !isEqual(this.membership, membership)) {\n this.membership = membership;\n }\n }\n\n /**\n * @param {Array} identities\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateIdentifiers(identities: Array<any>) {\n if (identities && !isEqual(this.identities, identities)) {\n this.identities = identities;\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["LocusInfo","updateMeeting","webex","meetingId","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","action","locus","meeting","loci","DESYNC","USE_CURRENT","USE_INCOMING","locusInfo","onDeltaLocus","locusDesync","needToGetFullLocus","meetingRequest","getFullLocus","desync","locusUrl","then","res","onFullLocus","body","resume","LoggerProxy","logger","info","onDeltaAction","parsedLoci","applyLocusDeltaData","onDeltaEvent","created","scheduledMeeting","participantsUrl","replaces","aclUrl","baseSequence","sequence","membership","identities","participants","deltaParticipants","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","updateLocusUrl","url","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","self","updateHostInfo","host","updateMediaShares","mediaShares","updateServices","links","services","data","eventType","LOCUSEVENT","PARTICIPANT_JOIN","PARTICIPANT_LEFT","CONTROLS_UPDATED","PARTICIPANT_AUDIO_MUTED","PARTICIPANT_AUDIO_UNMUTED","PARTICIPANT_VIDEO_MUTED","PARTICIPANT_VIDEO_UNMUTED","SELF_CHANGED","PARTICIPANT_UPDATED","PARTICIPANT_CONTROLS_UPDATED","PARTICIPANT_ROLES_UPDATED","PARTICIPANT_DECLINED","FLOOR_GRANTED","FLOOR_RELEASED","DIFFERENCE","handleLocusDelta","scope","eventName","args","emit","error","updateParticipantDeltas","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","workingCopy","type","_CALL_","_SIP_BRIDGE_","emitScoped","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","reason","state","updateCreated","updateParticipantsUrl","updateReplace","replace","updateAclUrl","updateBasequence","updateSequence","updateMemberShip","updateIdentifiers","compareAndUpdate","length","find","participant","identity","_USER_","removed","partner","getLocusPartner","LOCUS","STATE","INACTIVE","warn","Metrics","postEvent","event","REMOTE_ENDED","DESTROY_MEETING","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_REMOVED_REASON","MEETING_INACTIVE_TERMINATING","FULLSTATE_REMOVED","SELF_REMOVED","compareSelfAndHost","compareHostAndSelf","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","findParticipant","collection","item","person","id","generateDelta","prevState","newState","deltas","audioStatus","videoSlidesStatus","videoStatus","forEach","key","reduce","existingParticipant","delta","status","changed","push","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","ControlsUtils","parse","getControls","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasEntryExitToneChanged","hasBreakoutChanged","hasVideoEnabledChanged","current","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","LOCUSINFO","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_UPDATED","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","breakout","CONTROLS_MEETING_BREAKOUT_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","videoEnabled","unmuteVideoAllowed","SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED","unmuteAllowed","LINKS_SERVICES","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","roles","SelfUtils","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","MEETING_INFO_UPDATED","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","internal","device","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","isVideoMutedByOthersChanged","muted","remoteVideoMuted","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","remoteMuted","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","isUserUnadmitted","SELF_UNADMITTED_GUEST","isUserAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","MEDIA_STATUS_CHANGE","currentMediaStatus","audio","video","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","LOCUS_INFO_UPDATE_URL","EventsScope"],"sources":["index.ts"],"sourcesContent":["import {isEqual} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport InfoUtils from './infoUtils';\nimport FullState from './fullState';\nimport SelfUtils from './selfUtils';\nimport HostUtils from './hostUtils';\nimport ControlsUtils from './controlsUtils';\nimport EmbeddedAppsUtils from './embeddedAppsUtils';\nimport MediaSharesUtils from './mediaSharesUtils';\nimport LocusDeltaParser from './parser';\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n compareAndUpdateFlags: any;\n emitChange: any;\n locusParser: any;\n meetingId: any;\n parsedLocus: any;\n updateMeeting: any;\n webex: any;\n aclUrl: any;\n baseSequence: any;\n created: any;\n deltaParticipants: any;\n identities: any;\n membership: any;\n participants: any;\n participantsUrl: any;\n replaces: any;\n scheduledMeeting: any;\n sequence: any;\n controls: any;\n conversationUrl: any;\n embeddedApps: any;\n fullState: any;\n host: any;\n info: any;\n mediaShares: any;\n replace: any;\n url: any;\n services: any;\n\n /**\n * Constructor\n * @param {boolean} updateMeeting true if the meeting should be updated\n * @param {object} webex\n * @param {string} meetingId\n * @returns {undefined}\n */\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n meeting.locusDesync = false;\n meeting.needToGetFullLocus = false;\n break;\n case DESYNC:\n meeting.meetingRequest\n .getFullLocus({\n desync: true,\n locusUrl: meeting.locusUrl,\n })\n .then((res) => {\n meeting.locusInfo.onFullLocus(res.body);\n // Notify parser to resume processing delta events\n // now that we have full locus from DESYNC.\n this.locusParser.resume();\n });\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus: any, meeting: any) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus: any = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.participantsUrl = locus.participantsUrl || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.membership = locus.membership || null;\n this.identities = locus.identities || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n /**\n * Stored participant changes between the last event and the current event.\n * All previously stored events are overwritten between events.\n *\n * @instance\n * @type {Array<DeltaParticipant>}\n * @private\n * @member LocusInfo\n */\n this.deltaParticipants = [];\n\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls);\n this.updateLocusUrl(locus.url);\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self, locus.participants);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateServices(locus.links?.services);\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n initialSetup(locus: object) {\n this.onFullLocus(locus);\n\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting: any, data: any) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n switch (eventType) {\n case LOCUSEVENT.PARTICIPANT_JOIN:\n case LOCUSEVENT.PARTICIPANT_LEFT:\n case LOCUSEVENT.CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_MUTED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_UNMUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_MUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_UNMUTED:\n case LOCUSEVENT.SELF_CHANGED:\n case LOCUSEVENT.PARTICIPANT_UPDATED:\n case LOCUSEVENT.PARTICIPANT_CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_ROLES_UPDATED:\n case LOCUSEVENT.PARTICIPANT_DECLINED:\n case LOCUSEVENT.FLOOR_GRANTED:\n case LOCUSEVENT.FLOOR_RELEASED:\n this.onFullLocus(data.locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(data.locus, meeting);\n break;\n\n default:\n // Why will there be a event with no eventType ????\n // we may not need this, we can get full locus\n this.handleLocusDelta(data.locus, meeting);\n }\n }\n\n /**\n * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope?: any, eventName?: string, args?: any) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {string} eventType particulat locus event\n * @returns {object} null\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onFullLocus(locus: any, eventType?: string) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n this.updateParticipantDeltas(locus.participants);\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n handleOneOnOneEvent(eventType: string) {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus: any) {\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusInfo(locus) {\n if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {\n // When moved to a breakout session locus sends a message for the previous locus\n // indicating that we have been moved. It isn't helpful to continue parsing this\n // as it gets interpreted as if we have left the call\n return;\n }\n\n this.updateControls(locus.controls);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateParticipantsUrl(locus.participantsUrl);\n this.updateReplace(locus.replace);\n this.updateSelf(locus.self, locus.participants);\n this.updateLocusUrl(locus.url);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateMemberShip(locus.membership);\n this.updateIdentifiers(locus.identities);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateServices(locus.links?.services);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants: Array<any>, self: any) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n // @ts-ignore\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // @ts-ignore\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n } else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n } else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n } else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n // @ts-ignore\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n } else if (this.fullState && this.fullState.removed) {\n // user has been dropped from a meeting\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.FULLSTATE_REMOVED,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n } else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n } else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * Update the deltaParticipants property of this object based on a list of\n * provided participants.\n *\n * @param {Array} [participants] - The participants to update against.\n * @returns {void}\n */\n updateParticipantDeltas(participants: Array<any> = []) {\n // Used to find a participant within a participants collection.\n const findParticipant = (participant, collection) =>\n collection.find((item) => item.person.id === participant.person.id);\n\n // Generates an object that indicates which state properties have changed.\n const generateDelta = (prevState: any = {}, newState: any = {}) => {\n // Setup deltas.\n const deltas = {\n audioStatus: prevState.audioStatus !== newState.audioStatus,\n videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,\n videoStatus: prevState.videoStatus !== newState.videoStatus,\n };\n\n // Clean the object\n Object.keys(deltas).forEach((key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n });\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce((collection, participant) => {\n const existingParticipant = findParticipant(participant, this.participants || []) || {};\n\n const delta = generateDelta(existingParticipant.status, participant.status);\n\n const changed = Object.keys(delta).length > 0;\n\n if (changed) {\n collection.push({\n person: participant.person,\n delta,\n });\n }\n\n return collection;\n }, []);\n }\n\n /**\n *\n * @param {Object} participants new participants object\n * @param {boolen} deltaParticpantFlag delta event\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n }\n );\n }\n\n /**\n * @param {Object} controls\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls: object) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n hasEntryExitToneChanged,\n hasBreakoutChanged,\n hasVideoEnabledChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasRecordingChanged || hasRecordingPausedChanged) {\n let state = null;\n\n if (hasRecordingPausedChanged) {\n if (current.record.paused) {\n state = RECORDING_STATE.PAUSED;\n } else {\n // state will be `IDLE` if the recording is not active, even when there is a `pause` status change.\n state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;\n }\n } else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n if (hasBreakoutChanged) {\n const {breakout} = current;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,\n {\n breakout,\n }\n );\n }\n\n if (hasEntryExitToneChanged) {\n const {entryExitTone} = current;\n\n this.updateMeeting({entryExitTone});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,\n {\n entryExitTone,\n }\n );\n }\n\n // videoEnabled is handled differently than other controls,\n // to fit with audio mute status logic\n if (hasVideoEnabledChanged) {\n const {videoEnabled} = current;\n\n this.updateMeeting({unmuteVideoAllowed: videoEnabled});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n // muted: not part of locus.controls\n unmuteAllowed: videoEnabled,\n }\n );\n }\n\n this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl: string, info: any) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n } else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created: object) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * @param {Object} services\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateServices(services: Record<'breakout' | 'record', {url: string}>) {\n if (services && !isEqual(this.services, services)) {\n this.services = services;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateServices',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState: object) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host: object) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n } else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info: object, self?: object) {\n if (info && !isEqual(this.info, info)) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {info: parsedInfo.current, self}\n );\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n }\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps: object) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object) {\n if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n }\n );\n }\n }\n\n /**\n * @param {String} participantsUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateParticipantsUrl(participantsUrl: string) {\n if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {\n this.participantsUrl = participantsUrl;\n }\n }\n\n /**\n * @param {Object} replace\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplace(replace: object) {\n if (replace && !isEqual(this.replace, replace)) {\n this.replace = replace;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the locus.mediaShares property\n * @param {Array} participants the locus.participants property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self: any, participants: Array<any>) {\n // @ts-ignore - check where this.self come from\n if (self && !isEqual(this.self, self)) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.breakoutsChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,\n {breakoutSessions: parsedSelves.current.breakoutSessions}\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n if (parsedSelves.updates.isVideoMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteVideoMuted,\n // unmuteAllowed: not part of .self\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.isUserUnadmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.isUserAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n // @ts-ignore\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n // @ts-ignore\n this.self = self;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url: string) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n url\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl: string) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence: number) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence: number) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * @param {Object} membership\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMemberShip(membership: object) {\n if (membership && !isEqual(this.membership, membership)) {\n this.membership = membership;\n }\n }\n\n /**\n * @param {Array} identities\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateIdentifiers(identities: Array<any>) {\n if (identities && !isEqual(this.identities, identities)) {\n this.identities = identities;\n }\n }\n}\n"],"mappings":"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"}
|
package/dist/media/index.js
CHANGED
|
@@ -107,7 +107,7 @@ Media.getLocalMedia = function (options, config) {
|
|
|
107
107
|
* @param {boolean} isMultistream
|
|
108
108
|
* @param {string} debugId string useful for debugging (will appear in media connection logs)
|
|
109
109
|
* @param {Object} options
|
|
110
|
-
* @param {Object} [options.mediaProperties]
|
|
110
|
+
* @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:
|
|
111
111
|
* audioTrack, videoTrack and shareTrack
|
|
112
112
|
* @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
|
|
113
113
|
* @param {boolean} [options.enableRtx] applicable only to non-multistream connections
|
|
@@ -130,8 +130,11 @@ Media.createMediaConnection = function (isMultistream, debugId, options) {
|
|
|
130
130
|
});
|
|
131
131
|
}
|
|
132
132
|
if (isMultistream) {
|
|
133
|
+
var _mediaProperties$medi, _mediaProperties$medi2, _mediaProperties$medi3, _mediaProperties$medi4;
|
|
133
134
|
return new _internalMediaCore.MultistreamRoapMediaConnection({
|
|
134
|
-
iceServers: iceServers
|
|
135
|
+
iceServers: iceServers,
|
|
136
|
+
enableMainAudio: ((_mediaProperties$medi = mediaProperties.mediaDirection) === null || _mediaProperties$medi === void 0 ? void 0 : _mediaProperties$medi.sendAudio) || ((_mediaProperties$medi2 = mediaProperties.mediaDirection) === null || _mediaProperties$medi2 === void 0 ? void 0 : _mediaProperties$medi2.receiveAudio),
|
|
137
|
+
enableMainVideo: ((_mediaProperties$medi3 = mediaProperties.mediaDirection) === null || _mediaProperties$medi3 === void 0 ? void 0 : _mediaProperties$medi3.sendVideo) || ((_mediaProperties$medi4 = mediaProperties.mediaDirection) === null || _mediaProperties$medi4 === void 0 ? void 0 : _mediaProperties$medi4.receiveVideo)
|
|
135
138
|
}, debugId);
|
|
136
139
|
}
|
|
137
140
|
if (!mediaProperties) {
|
package/dist/media/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BrowserDetection","isBrowser","Media","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","underlyingTrack","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","track","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 {\n LocalCameraTrack,\n LocalDisplayTrack,\n LocalMicrophoneTrack,\n RoapMediaConnection,\n MultistreamRoapMediaConnection,\n} 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 * 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 | MultistreamRoapMediaConnection}\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?: LocalMicrophoneTrack;\n videoTrack?: LocalCameraTrack;\n shareTrack?: LocalDisplayTrack;\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?.underlyingTrack,\n video: videoTrack?.underlyingTrack,\n screenShareVideo: shareTrack?.underlyingTrack,\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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"}
|
|
1
|
+
{"version":3,"names":["BrowserDetection","isBrowser","Media","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","enableMainAudio","mediaDirection","receiveAudio","enableMainVideo","receiveVideo","Error","audioTrack","videoTrack","shareTrack","RoapMediaConnection","skipInactiveTransceivers","requireH264","sdpMunging","convertPort9to0","addContentSlides","bandwidthLimits","audio","StaticConfig","meetings","bandwidth","video","startBitrate","periodicKeyframes","disableExtmap","disableRtx","send","underlyingTrack","screenShareVideo","receive","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","track","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 {\n LocalCameraTrack,\n LocalDisplayTrack,\n LocalMicrophoneTrack,\n RoapMediaConnection,\n MultistreamRoapMediaConnection,\n} 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 * 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] 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 | MultistreamRoapMediaConnection}\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 sendAudio: boolean;\n sendVideo: boolean;\n sendShare: boolean;\n };\n audioTrack?: LocalMicrophoneTrack;\n videoTrack?: LocalCameraTrack;\n shareTrack?: LocalDisplayTrack;\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 enableMainAudio:\n mediaProperties.mediaDirection?.sendAudio || mediaProperties.mediaDirection?.receiveAudio,\n enableMainVideo:\n mediaProperties.mediaDirection?.sendVideo || mediaProperties.mediaDirection?.receiveVideo,\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?.underlyingTrack,\n video: videoTrack?.underlyingTrack,\n screenShareVideo: shareTrack?.underlyingTrack,\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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"}
|
package/dist/meeting/index.js
CHANGED
|
@@ -5127,12 +5127,14 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
5127
5127
|
var _this42 = this;
|
|
5128
5128
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
5129
5129
|
var LOG_HEADER = 'Meeting:index#updateMedia -->';
|
|
5130
|
-
if (this.isMultistream) {
|
|
5131
|
-
throw new Error('updateMedia() is not supported with multistream, use publishTracks/unpublishTracks instead');
|
|
5132
|
-
}
|
|
5133
5130
|
if (!this.canUpdateMedia()) {
|
|
5134
5131
|
return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.ALL, options);
|
|
5135
5132
|
}
|
|
5133
|
+
if (this.isMultistream) {
|
|
5134
|
+
var _options$mediaSetting, _options$mediaSetting2;
|
|
5135
|
+
var audioEnabled = ((_options$mediaSetting = options.mediaSettings) === null || _options$mediaSetting === void 0 ? void 0 : _options$mediaSetting.sendAudio) || ((_options$mediaSetting2 = options.mediaSettings) === null || _options$mediaSetting2 === void 0 ? void 0 : _options$mediaSetting2.receiveAudio);
|
|
5136
|
+
return this.mediaProperties.webrtcMediaConnection.enableMultistreamAudio(audioEnabled);
|
|
5137
|
+
}
|
|
5136
5138
|
var localStream = options.localStream,
|
|
5137
5139
|
localShare = options.localShare,
|
|
5138
5140
|
mediaSettings = options.mediaSettings;
|