@webex/plugin-meetings 3.0.0-beta.183 → 3.0.0-beta.185
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/util.js +1 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/member/util.js +25 -26
- package/dist/member/util.js.map +1 -1
- package/package.json +19 -19
- package/src/meeting/util.ts +1 -1
- package/src/member/util.ts +24 -25
- package/test/unit/spec/meeting/index.js +1 -1
- package/test/unit/spec/meeting/utils.js +2 -0
- package/test/unit/spec/meetings/index.js +1 -1
- package/test/unit/spec/member/util.js +195 -133
- package/test/unit/spec/members/index.js +1 -2
package/dist/breakouts/index.js
CHANGED
|
@@ -1041,7 +1041,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
1041
1041
|
this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
|
|
1042
1042
|
}
|
|
1043
1043
|
},
|
|
1044
|
-
version: "3.0.0-beta.
|
|
1044
|
+
version: "3.0.0-beta.185"
|
|
1045
1045
|
});
|
|
1046
1046
|
var _default = Breakouts;
|
|
1047
1047
|
exports.default = _default;
|
package/dist/meeting/util.js
CHANGED
|
@@ -30,7 +30,6 @@ var _permission = _interopRequireDefault(require("../common/errors/permission"))
|
|
|
30
30
|
var _passwordError = _interopRequireDefault(require("../common/errors/password-error"));
|
|
31
31
|
var _captchaError = _interopRequireDefault(require("../common/errors/captcha-error"));
|
|
32
32
|
var _triggerProxy = _interopRequireDefault(require("../common/events/trigger-proxy"));
|
|
33
|
-
var _this = void 0;
|
|
34
33
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && o[_Symbol$iterator] || o["@@iterator"]; if (!it) { if (_Array$isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
35
34
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
36
35
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
@@ -569,7 +568,7 @@ var MeetingUtil = {
|
|
|
569
568
|
meeting.simultaneousInterpretation.updateInterpretation(lanuagesInfo);
|
|
570
569
|
}
|
|
571
570
|
}
|
|
572
|
-
_triggerProxy.default.trigger(
|
|
571
|
+
_triggerProxy.default.trigger(meeting, {
|
|
573
572
|
file: 'meeting/util',
|
|
574
573
|
function: 'parseInterpretationInfo'
|
|
575
574
|
}, _constants.EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE);
|
package/dist/meeting/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","meeting","audioMuted","videoMuted","webex","getWebexObject","reject","ParameterError","locusMediaRequest","internal","newMetrics","submitClientEvent","name","options","meetingId","send","type","selfUrl","sequence","locusInfo","muteOptions","then","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","deviceUrl","correlationId","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","isMultistream","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","res","payload","trigger","identifiers","trackingId","headers","trackingid","cleanUp","breakouts","simultaneousInterpretation","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeRemoteTracks","closePeerConnections","cleanupLocalTracks","unsetRemoteTracks","unsetPeerConnections","reconnectionManager","stopKeepAlive","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","catch","LoggerProxy","logger","error","leaveMeeting","isUserInLeftState","UserNotJoinedError","defaultOptions","leaveOptions","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","CaptchaError","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","setLocus","IntentToJoinError","JoinMeetingError","getTrack","stream","audioTrack","videoTrack","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","userDisplayHints","canInviteNewParticipants","displayHints","DISPLAY_HINTS","ADD_GUEST","canAdmitParticipant","ROSTER_WAITING_TO_JOIN","canUserLock","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","canBroadcastMessageToBreakout","BROADCAST_MESSAGE_TO_BREAKOUT","isSuppressBreakoutSupport","UCF_SUPPRESS_BREAKOUTS_SUPPORT","canAdmitLobbyToBreakout","DISABLE_LOBBY_TO_BREAKOUT","isBreakoutPreassignmentsEnabled","DISABLE_BREAKOUT_PREASSIGNMENTS","canUserAskForHelp","DISABLE_ASK_FOR_HELP","lockMeeting","actions","request","canLock","lock","PermissionError","unlockMeeting","canUnlock","handleAudioLogging","LOG_HEADER","settings","underlyingTrack","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","isSaveTranscriptsEnabled","SAVE_TRANSCRIPTS_ENABLED","canStartTranscribing","TRANSCRIPTION_CONTROL_START","canStopTranscribing","TRANSCRIPTION_CONTROL_STOP","isClosedCaptionActive","CAPTION_STATUS_ACTIVE","isWebexAssistantActive","WEBEX_ASSISTANT_STATUS_ACTIVE","canViewCaptionPanel","ENABLE_CAPTION_PANEL","isRealTimeTranslationEnabled","DISPLAY_REAL_TIME_TRANSLATION","canSelectSpokenLanguages","DISPLAY_NON_ENGLISH_ASR","waitingForOthersToJoin","WAITING_FOR_OTHERS","canSendReactions","originalValue","REACTIONS_ACTIVE","REACTIONS_INACTIVE","canUserRenameSelfAndObserved","CAN_RENAME_SELF_AND_OBSERVED","canUserRenameOthers","CAN_RENAME_OTHERS","addSequence","requestBody","updateLocusWithDelta","onDeltaLocus","generateLocusDeltaRequest","originalMeeting","meetingRef","WeakRef","locusDeltaRequest","originalOptions","deref","selfSupportsFeature","feature","userPolicies","parseInterpretationInfo","meetingInfo","siInfo","updateMeetingSIEnabled","turnOnSimultaneousInterpretation","currentSIInterpreter","hostSIEnabled","meetingSiteSetting","enableHostInterpreterControlSI","updateHostSIEnabled","renameKey","obj","oldKey","newKey","lanuagesInfo","siLanguages","language","updateInterpretation","Trigger","file","function","EVENT_TRIGGERS","MEETING_INTERPRETATION_UPDATE"],"sources":["util.ts"],"sourcesContent":["import {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\nimport {cloneDeep} from 'lodash';\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\n SELF_POLICY,\n EVENT_TRIGGERS,\n} from '../constants';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\nimport Trigger from '../common/events/trigger-proxy';\n\nconst MeetingUtil = {\n parseLocusJoin: (response) => {\n const parsed: any = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n },\n\n remoteUpdateAudioVideo: (meeting, audioMuted?: boolean, videoMuted?: boolean) => {\n const webex = meeting.getWebexObject();\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n if (!meeting.locusMediaRequest) {\n return Promise.reject(\n new ParameterError(\n 'You need a meeting with a media connection, call Meeting.addMedia() first.'\n )\n );\n }\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.request',\n options: {meetingId: meeting.id},\n });\n\n return meeting.locusMediaRequest\n .send({\n type: 'LocalMute',\n selfUrl: meeting.selfUrl,\n mediaId: meeting.mediaId,\n sequence: meeting.locusInfo.sequence,\n muteOptions: {\n audioMuted,\n videoMuted,\n },\n })\n .then((response) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.response',\n options: {meetingId: meeting.id},\n });\n\n return response?.body?.locus;\n });\n },\n\n hasOwner: (info) => info && info.owner,\n\n isOwnerSelf: (owner, selfId) => owner === selfId,\n\n isPinOrGuest: (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode),\n\n joinMeeting: (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n const webex = meeting.getWebexObject();\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.request',\n options: {meetingId: meeting.id},\n });\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n permissionToken: meeting.permissionToken,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: !meeting.isMultistream,\n asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\n locale: options.locale,\n deviceCapabilities: options.deviceCapabilities,\n liveAnnotationSupported: options.liveAnnotationSupported,\n })\n .then((res) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.response',\n payload: {\n trigger: 'loci-update',\n identifiers: {\n trackingId: res.headers.trackingid,\n },\n },\n options: {\n meetingId: meeting.id,\n mediaConnections: res.body.mediaConnections,\n },\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n },\n\n cleanUp: (meeting) => {\n meeting.breakouts.cleanUp();\n meeting.simultaneousInterpretation.cleanUp();\n\n // make sure we send last metrics before we close the peerconnection\n const stopStatsAnalyzer = meeting.statsAnalyzer\n ? meeting.statsAnalyzer.stopAnalyzer()\n : Promise.resolve();\n\n return stopStatsAnalyzer\n .then(() => meeting.closeRemoteTracks())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.cleanupLocalTracks();\n meeting.unsetRemoteTracks();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => meeting.updateLLMConnection());\n },\n\n disconnectPhoneAudio: (meeting, phoneUrl) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const options = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n phoneUrl,\n };\n\n return meeting.meetingRequest.disconnectPhoneAudio(options).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n // by default will leave on meeting's resourceId\n // if you explicity want it not to leave on resource id, pass\n // {resourceId: null}\n // TODO: chris, you can modify this however you want\n leaveMeeting: (meeting, options: any = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const defaultOptions = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n resourceId: meeting.resourceId,\n deviceUrl: meeting.deviceUrl,\n };\n\n const leaveOptions = {...defaultOptions, ...options};\n\n return meeting.meetingRequest\n .leaveMeeting(leaveOptions)\n .then(() => {\n if (options.moveMeeting) {\n return Promise.resolve();\n }\n\n return MeetingUtil.cleanUp(meeting);\n })\n .catch((err) => {\n // TODO: If the meeting state comes as LEFT or INACTIVE as response then\n // 1) on leave clean up the meeting or simply do a sync on the meeting\n // 2) If the error says meeting is inactive then destroy the meeting object\n LoggerProxy.logger.error(\n `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n declineMeeting: (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason,\n }),\n\n isUserInLeftState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_,\n\n isUserInIdleState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_,\n\n isUserInJoinedState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_,\n\n isMediaEstablished: (currentMediaStatus) =>\n currentMediaStatus &&\n (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share),\n\n joinMeetingOptions: (meeting, options: any = {}) => {\n const webex = meeting.getWebexObject();\n\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (meeting.requiredCaptcha) {\n return Promise.reject(new CaptchaError());\n }\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n return Promise.reject(new PasswordError());\n }\n\n if (options.pin) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.collected',\n options: {\n meetingId: meeting.id,\n },\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.prompt',\n options: {\n meetingId: meeting.id,\n },\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error(\n 'Meeting:util#joinMeetingOptions --> Error joining the call, ',\n err\n );\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n },\n\n getTrack: (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n },\n\n getModeratorFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator,\n\n getPolicyFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy,\n\n getUserDisplayHintsFromLocusInfo: (locusInfo) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [],\n\n canInviteNewParticipants: (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST),\n\n canAdmitParticipant: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN),\n\n canUserLock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED),\n\n canUserUnlock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED),\n\n canUserRaiseHand: (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND),\n\n canUserLowerAllHands: (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS),\n\n canUserLowerSomeoneElsesHand: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND),\n\n bothLeaveAndEndMeetingAvailable: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING),\n\n canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),\n canBroadcastMessageToBreakout: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.BROADCAST_MESSAGE_TO_BREAKOUT),\n\n isSuppressBreakoutSupport: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT),\n\n canAdmitLobbyToBreakout: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT),\n\n isBreakoutPreassignmentsEnabled: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS),\n\n canUserAskForHelp: (displayHints) => !displayHints.includes(DISPLAY_HINTS.DISABLE_ASK_FOR_HELP),\n\n lockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canLock) {\n return request.lockMeeting({locusUrl, lock: true});\n }\n\n return Promise.reject(new PermissionError('Lock not allowed, due to joined property.'));\n },\n\n unlockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canUnlock) {\n return request.lockMeeting({locusUrl, lock: false});\n }\n\n return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));\n },\n\n handleAudioLogging: (audioTrack?: LocalMicrophoneTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleVideoLogging: (videoTrack?: LocalCameraTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleDeviceLogging: (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n },\n\n endMeetingForAll: (meeting) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const endOptions = {\n locusUrl: meeting.locusUrl,\n };\n\n return meeting.meetingRequest\n .endMeetingForAll(endOptions)\n .then(() => MeetingUtil.cleanUp(meeting))\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n canEnableClosedCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START),\n\n isSaveTranscriptsEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED),\n\n canStartTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START),\n\n canStopTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP),\n\n isClosedCaptionActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE),\n\n isWebexAssistantActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE),\n\n canViewCaptionPanel: (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL),\n\n isRealTimeTranslationEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION),\n\n canSelectSpokenLanguages: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR),\n\n waitingForOthersToJoin: (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS),\n\n canSendReactions: (originalValue, displayHints) => {\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {\n return true;\n }\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {\n return false;\n }\n\n return originalValue;\n },\n canUserRenameSelfAndObserved: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED),\n\n canUserRenameOthers: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS),\n\n /**\n * Adds the current locus sequence information to a request body\n * @param {Object} meeting The meeting object\n * @param {Object} requestBody The body of a request to locus\n * @returns {void}\n */\n addSequence: (meeting, requestBody) => {\n const sequence = meeting?.locusInfo?.sequence;\n\n if (!sequence) {\n return;\n }\n\n requestBody.sequence = sequence;\n },\n\n /**\n * Updates the locus info for the meeting with the delta locus\n * returned from requests that include the sequence information\n * Returns the original response object\n * @param {Object} meeting The meeting object\n * @param {Object} response The response of the http request\n * @returns {Object}\n */\n updateLocusWithDelta: (meeting, response) => {\n if (!meeting) {\n return response;\n }\n\n const locus = response?.body?.locus;\n\n if (locus) {\n meeting.locusInfo.onDeltaLocus(locus);\n }\n\n return response;\n },\n\n generateLocusDeltaRequest: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const locusDeltaRequest = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return Promise.resolve();\n }\n\n const options = cloneDeep(originalOptions);\n\n if (!options.body) {\n options.body = {};\n }\n\n MeetingUtil.addSequence(meeting, options.body);\n\n return meeting\n .request(options)\n .then((response) => MeetingUtil.updateLocusWithDelta(meeting, response));\n };\n\n return locusDeltaRequest;\n },\n\n selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record<SELF_POLICY, boolean>) => {\n if (!userPolicies) {\n return true;\n }\n\n return userPolicies[feature];\n },\n\n parseInterpretationInfo: (meeting, meetingInfo) => {\n if (!meeting || !meetingInfo) {\n return;\n }\n const siInfo = meetingInfo.simultaneousInterpretation;\n meeting.simultaneousInterpretation.updateMeetingSIEnabled(\n !!meetingInfo.turnOnSimultaneousInterpretation,\n !!siInfo?.currentSIInterpreter\n );\n const hostSIEnabled = !!(\n meetingInfo.turnOnSimultaneousInterpretation &&\n meetingInfo?.meetingSiteSetting?.enableHostInterpreterControlSI\n );\n meeting.simultaneousInterpretation.updateHostSIEnabled(hostSIEnabled);\n\n function renameKey(obj, oldKey, newKey) {\n if (oldKey in obj) {\n obj[newKey] = obj[oldKey];\n delete obj[oldKey];\n }\n }\n if (siInfo) {\n const lanuagesInfo = cloneDeep(siInfo.siLanguages);\n for (const language of lanuagesInfo) {\n renameKey(language, 'languageCode', 'languageName');\n renameKey(language, 'languageGroupId', 'languageCode');\n }\n if (!meeting.simultaneousInterpretation?.siLanguages?.length) {\n meeting.simultaneousInterpretation.updateInterpretation(lanuagesInfo);\n }\n }\n Trigger.trigger(\n this,\n {\n file: 'meeting/util',\n function: 'parseInterpretationInfo',\n },\n EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE\n );\n },\n};\n\nexport default MeetingUtil;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AAAqD;AAAA;AAAA;AAAA;AAAA;AAAA;AAErD,IAAMA,WAAW,GAAG;EAClBC,cAAc,EAAE,wBAACC,QAAQ,EAAK;IAC5B,IAAMC,MAAW,GAAG,CAAC,CAAC;;IAEtB;IACAA,MAAM,CAACC,KAAK,GAAGF,QAAQ,CAACG,IAAI,CAACD,KAAK;IAClCD,MAAM,CAACG,gBAAgB,GAAGJ,QAAQ,CAACG,IAAI,CAACC,gBAAgB;IACxDH,MAAM,CAACI,QAAQ,GAAGJ,MAAM,CAACC,KAAK,CAACI,GAAG;IAClCL,MAAM,CAACM,OAAO,GAAGN,MAAM,CAACC,KAAK,CAACI,GAAG,CAACE,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,EAAE;IAClDR,MAAM,CAACS,MAAM,GAAGT,MAAM,CAACC,KAAK,CAACS,IAAI,CAACC,EAAE;;IAEpC;IACAX,MAAM,CAACG,gBAAgB,CAACS,OAAO,CAAC,UAACC,eAAe,EAAK;MACnD,IAAIA,eAAe,CAACC,OAAO,EAAE;QAC3Bd,MAAM,CAACc,OAAO,GAAGD,eAAe,CAACC,OAAO;MAC1C;IACF,CAAC,CAAC;IAEF,OAAOd,MAAM;EACf,CAAC;EAEDe,sBAAsB,EAAE,gCAACC,OAAO,EAAEC,UAAoB,EAAEC,UAAoB,EAAK;IAC/E,IAAMC,KAAK,GAAGH,OAAO,CAACI,cAAc,EAAE;IACtC,IAAI,CAACJ,OAAO,EAAE;MACZ,OAAO,iBAAQK,MAAM,CAAC,IAAIC,kBAAc,CAAC,4BAA4B,CAAC,CAAC;IACzE;IAEA,IAAI,CAACN,OAAO,CAACO,iBAAiB,EAAE;MAC9B,OAAO,iBAAQF,MAAM,CACnB,IAAIC,kBAAc,CAChB,4EAA4E,CAC7E,CACF;IACH;;IAEA;IACAH,KAAK,CAACK,QAAQ,CAACC,UAAU,CAACC,iBAAiB,CAAC;MAC1CC,IAAI,EAAE,4BAA4B;MAClCC,OAAO,EAAE;QAACC,SAAS,EAAEb,OAAO,CAACL;MAAE;IACjC,CAAC,CAAC;IAEF,OAAOK,OAAO,CAACO,iBAAiB,CAC7BO,IAAI,CAAC;MACJC,IAAI,EAAE,WAAW;MACjBC,OAAO,EAAEhB,OAAO,CAACgB,OAAO;MACxBlB,OAAO,EAAEE,OAAO,CAACF,OAAO;MACxBmB,QAAQ,EAAEjB,OAAO,CAACkB,SAAS,CAACD,QAAQ;MACpCE,WAAW,EAAE;QACXlB,UAAU,EAAVA,UAAU;QACVC,UAAU,EAAVA;MACF;IACF,CAAC,CAAC,CACDkB,IAAI,CAAC,UAACrC,QAAQ,EAAK;MAAA;MAClB;MACAoB,KAAK,CAACK,QAAQ,CAACC,UAAU,CAACC,iBAAiB,CAAC;QAC1CC,IAAI,EAAE,6BAA6B;QACnCC,OAAO,EAAE;UAACC,SAAS,EAAEb,OAAO,CAACL;QAAE;MACjC,CAAC,CAAC;MAEF,OAAOZ,QAAQ,aAARA,QAAQ,yCAARA,QAAQ,CAAEG,IAAI,mDAAd,eAAgBD,KAAK;IAC9B,CAAC,CAAC;EACN,CAAC;EAEDoC,QAAQ,EAAE,kBAACC,IAAI;IAAA,OAAKA,IAAI,IAAIA,IAAI,CAACC,KAAK;EAAA;EAEtCC,WAAW,EAAE,qBAACD,KAAK,EAAE9B,MAAM;IAAA,OAAK8B,KAAK,KAAK9B,MAAM;EAAA;EAEhDgC,YAAY,EAAE,sBAACC,GAAG;IAAA;IAAA,OAAK,CAAAA,GAAG,aAAHA,GAAG,oCAAHA,GAAG,CAAExC,IAAI,8CAAT,UAAWyC,SAAS,KAAIC,yBAAc,CAACC,QAAQ,CAACH,GAAG,CAACxC,IAAI,CAACyC,SAAS,CAAC;EAAA;EAE1FG,WAAW,EAAE,qBAAC9B,OAAO,EAAEY,OAAO,EAAK;IACjC,IAAI,CAACZ,OAAO,EAAE;MACZ,OAAO,iBAAQK,MAAM,CAAC,IAAIC,kBAAc,CAAC,4BAA4B,CAAC,CAAC;IACzE;IACA,IAAMH,KAAK,GAAGH,OAAO,CAACI,cAAc,EAAE;;IAEtC;IACAD,KAAK,CAACK,QAAQ,CAACC,UAAU,CAACC,iBAAiB,CAAC;MAC1CC,IAAI,EAAE,2BAA2B;MACjCC,OAAO,EAAE;QAACC,SAAS,EAAEb,OAAO,CAACL;MAAE;IACjC,CAAC,CAAC;;IAEF;IACA;IACA;IACA,OAAOK,OAAO,CAAC+B,cAAc,CAC1BD,WAAW,CAAC;MACXE,cAAc,EAAEhC,OAAO,CAACiC,cAAc,IAAIjC,OAAO,CAACkC,MAAM;MACxDC,aAAa,EAAEnC,OAAO,CAACmC,aAAa;MACpCC,SAAS,EAAEpC,OAAO,CAACoC,SAAS;MAC5BhD,QAAQ,EAAEY,OAAO,CAACZ,QAAQ;MAC1BiD,aAAa,EAAErC,OAAO,CAACqC,aAAa;MACpCC,WAAW,EAAE1B,OAAO,CAAC0B,WAAW;MAChCC,eAAe,EAAEvC,OAAO,CAACuC,eAAe;MACxCC,UAAU,EAAE5B,OAAO,CAAC4B,UAAU,IAAI,IAAI;MACtCC,SAAS,EAAE7B,OAAO,CAAC6B,SAAS;MAC5BC,GAAG,EAAE9B,OAAO,CAAC8B,GAAG;MAChBC,cAAc,EAAE/B,OAAO,CAAC+B,cAAc;MACtCC,iBAAiB,EAAE,CAAC5C,OAAO,CAAC6C,aAAa;MACzCC,kBAAkB,EAAElC,OAAO,CAACkC,kBAAkB;MAC9CC,kBAAkB,EAAEnC,OAAO,CAACmC,kBAAkB;MAC9CC,MAAM,EAAEpC,OAAO,CAACoC,MAAM;MACtBC,kBAAkB,EAAErC,OAAO,CAACqC,kBAAkB;MAC9CC,uBAAuB,EAAEtC,OAAO,CAACsC;IACnC,CAAC,CAAC,CACD9B,IAAI,CAAC,UAAC+B,GAAG,EAAK;MACb;MACAhD,KAAK,CAACK,QAAQ,CAACC,UAAU,CAACC,iBAAiB,CAAC;QAC1CC,IAAI,EAAE,4BAA4B;QAClCyC,OAAO,EAAE;UACPC,OAAO,EAAE,aAAa;UACtBC,WAAW,EAAE;YACXC,UAAU,EAAEJ,GAAG,CAACK,OAAO,CAACC;UAC1B;QACF,CAAC;QACD7C,OAAO,EAAE;UACPC,SAAS,EAAEb,OAAO,CAACL,EAAE;UACrBR,gBAAgB,EAAEgE,GAAG,CAACjE,IAAI,CAACC;QAC7B;MACF,CAAC,CAAC;MAEF,OAAON,WAAW,CAACC,cAAc,CAACqE,GAAG,CAAC;IACxC,CAAC,CAAC;EACN,CAAC;EAEDO,OAAO,EAAE,iBAAC1D,OAAO,EAAK;IACpBA,OAAO,CAAC2D,SAAS,CAACD,OAAO,EAAE;IAC3B1D,OAAO,CAAC4D,0BAA0B,CAACF,OAAO,EAAE;;IAE5C;IACA,IAAMG,iBAAiB,GAAG7D,OAAO,CAAC8D,aAAa,GAC3C9D,OAAO,CAAC8D,aAAa,CAACC,YAAY,EAAE,GACpC,iBAAQC,OAAO,EAAE;IAErB,OAAOH,iBAAiB,CACrBzC,IAAI,CAAC;MAAA,OAAMpB,OAAO,CAACiE,iBAAiB,EAAE;IAAA,EAAC,CACvC7C,IAAI,CAAC;MAAA,OAAMpB,OAAO,CAACkE,oBAAoB,EAAE;IAAA,EAAC,CAC1C9C,IAAI,CAAC,YAAM;MACVpB,OAAO,CAACmE,kBAAkB,EAAE;MAC5BnE,OAAO,CAACoE,iBAAiB,EAAE;MAC3BpE,OAAO,CAACqE,oBAAoB,EAAE;MAC9BrE,OAAO,CAACsE,mBAAmB,CAACZ,OAAO,EAAE;IACvC,CAAC,CAAC,CACDtC,IAAI,CAAC;MAAA,OAAMpB,OAAO,CAACuE,aAAa,EAAE;IAAA,EAAC,CACnCnD,IAAI,CAAC;MAAA,OAAMpB,OAAO,CAACwE,mBAAmB,EAAE;IAAA,EAAC;EAC9C,CAAC;EAEDC,oBAAoB,EAAE,8BAACzE,OAAO,EAAE0E,QAAQ,EAAK;IAC3C,IAAI1E,OAAO,CAAC2E,YAAY,KAAKC,qBAAU,CAACC,QAAQ,EAAE;MAChD,OAAO,iBAAQxE,MAAM,CAAC,IAAIyE,kCAAqB,EAAE,CAAC;IACpD;IAEA,IAAMlE,OAAO,GAAG;MACdxB,QAAQ,EAAEY,OAAO,CAACZ,QAAQ;MAC1BK,MAAM,EAAEO,OAAO,CAACP,MAAM;MACtB4C,aAAa,EAAErC,OAAO,CAACqC,aAAa;MACpCqC,QAAQ,EAARA;IACF,CAAC;IAED,OAAO1E,OAAO,CAAC+B,cAAc,CAAC0C,oBAAoB,CAAC7D,OAAO,CAAC,CAACmE,KAAK,CAAC,UAACrD,GAAG,EAAK;MACzEsD,oBAAW,CAACC,MAAM,CAACC,KAAK,6GAC+ElF,OAAO,CAACL,EAAE,sBAAY+B,GAAG,EAC/H;MAED,OAAO,iBAAQrB,MAAM,CAACqB,GAAG,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC;EAED;EACA;EACA;EACA;EACAyD,YAAY,EAAE,sBAACnF,OAAO,EAAwB;IAAA,IAAtBY,OAAY,uEAAG,CAAC,CAAC;IACvC,IAAIZ,OAAO,CAAC2E,YAAY,KAAKC,qBAAU,CAACC,QAAQ,EAAE;MAChD;MACA,OAAO,iBAAQxE,MAAM,CAAC,IAAIyE,kCAAqB,EAAE,CAAC;IACpD;IAEA,IAAIjG,WAAW,CAACuG,iBAAiB,CAACpF,OAAO,CAACkB,SAAS,CAAC,EAAE;MACpD,OAAO,iBAAQb,MAAM,CAAC,IAAIgF,+BAAkB,EAAE,CAAC;IACjD;IAEA,IAAMC,cAAc,GAAG;MACrBlG,QAAQ,EAAEY,OAAO,CAACZ,QAAQ;MAC1BK,MAAM,EAAEO,OAAO,CAACP,MAAM;MACtB4C,aAAa,EAAErC,OAAO,CAACqC,aAAa;MACpCG,UAAU,EAAExC,OAAO,CAACwC,UAAU;MAC9BJ,SAAS,EAAEpC,OAAO,CAACoC;IACrB,CAAC;IAED,IAAMmD,YAAY,mCAAOD,cAAc,GAAK1E,OAAO,CAAC;IAEpD,OAAOZ,OAAO,CAAC+B,cAAc,CAC1BoD,YAAY,CAACI,YAAY,CAAC,CAC1BnE,IAAI,CAAC,YAAM;MACV,IAAIR,OAAO,CAAC4E,WAAW,EAAE;QACvB,OAAO,iBAAQxB,OAAO,EAAE;MAC1B;MAEA,OAAOnF,WAAW,CAAC6E,OAAO,CAAC1D,OAAO,CAAC;IACrC,CAAC,CAAC,CACD+E,KAAK,CAAC,UAACrD,GAAG,EAAK;MACd;MACA;MACA;MACAsD,oBAAW,CAACC,MAAM,CAACC,KAAK,sGACwElF,OAAO,CAACL,EAAE,sBAAY+B,GAAG,EACxH;MAED,OAAO,iBAAQrB,MAAM,CAACqB,GAAG,CAAC;IAC5B,CAAC,CAAC;EACN,CAAC;EACD+D,cAAc,EAAE,wBAACzF,OAAO,EAAE0F,MAAM;IAAA,OAC9B1F,OAAO,CAAC+B,cAAc,CAAC0D,cAAc,CAAC;MACpCrG,QAAQ,EAAEY,OAAO,CAACZ,QAAQ;MAC1BgD,SAAS,EAAEpC,OAAO,CAACoC,SAAS;MAC5BsD,MAAM,EAANA;IACF,CAAC,CAAC;EAAA;EAEJN,iBAAiB,EAAE,2BAAClE,SAAS;IAAA;IAAA,OAAK,0BAAAA,SAAS,CAACyE,WAAW,oFAArB,sBAAuBjG,IAAI,2DAA3B,uBAA6BkG,KAAK,MAAKC,iBAAM;EAAA;EAE/EC,iBAAiB,EAAE,2BAAC5E,SAAS;IAAA;IAAA,OAAK,2BAAAA,SAAS,CAACyE,WAAW,qFAArB,uBAAuBjG,IAAI,2DAA3B,uBAA6BkG,KAAK,MAAKG,iBAAM;EAAA;EAE/EC,mBAAmB,EAAE,6BAAC9E,SAAS;IAAA;IAAA,OAAK,2BAAAA,SAAS,CAACyE,WAAW,qFAArB,uBAAuBjG,IAAI,2DAA3B,uBAA6BkG,KAAK,MAAKK,mBAAQ;EAAA;EAEnFC,kBAAkB,EAAE,4BAACC,kBAAkB;IAAA,OACrCA,kBAAkB,KACjBA,kBAAkB,CAACC,KAAK,IAAID,kBAAkB,CAACE,KAAK,IAAIF,kBAAkB,CAACG,KAAK,CAAC;EAAA;EAEpFC,kBAAkB,EAAE,4BAACvG,OAAO,EAAwB;IAAA,IAAtBY,OAAY,uEAAG,CAAC,CAAC;IAC7C,IAAMT,KAAK,GAAGH,OAAO,CAACI,cAAc,EAAE;IAEtCJ,OAAO,CAACwC,UAAU,GAAGxC,OAAO,CAACwC,UAAU,IAAI5B,OAAO,CAAC4B,UAAU;IAE7D,IAAIxC,OAAO,CAACwG,eAAe,EAAE;MAC3B,OAAO,iBAAQnG,MAAM,CAAC,IAAIoG,qBAAY,EAAE,CAAC;IAC3C;IACA,IAAIzG,OAAO,CAAC0G,cAAc,KAAKC,0BAAe,CAACC,QAAQ,EAAE;MACvD,OAAO,iBAAQvG,MAAM,CAAC,IAAIwG,sBAAa,EAAE,CAAC;IAC5C;IAEA,IAAIjG,OAAO,CAAC8B,GAAG,EAAE;MACf;MACAvC,KAAK,CAACK,QAAQ,CAACC,UAAU,CAACC,iBAAiB,CAAC;QAC1CC,IAAI,EAAE,sBAAsB;QAC5BC,OAAO,EAAE;UACPC,SAAS,EAAEb,OAAO,CAACL;QACrB;MACF,CAAC,CAAC;IACJ;;IAEA;IACA,OAAOd,WAAW,CAACiD,WAAW,CAAC9B,OAAO,EAAEY,OAAO,CAAC,CAC7CQ,IAAI,CAAC,UAACrC,QAAQ,EAAK;MAClBiB,OAAO,CAAC8G,QAAQ,CAAC/H,QAAQ,CAAC;MAE1B,OAAO,iBAAQiF,OAAO,CAACjF,QAAQ,CAAC;IAClC,CAAC,CAAC,CACDgG,KAAK,CAAC,UAACrD,GAAG,EAAK;MACd;MACA,IAAI7C,WAAW,CAAC4C,YAAY,CAACC,GAAG,CAAC,EAAE;QACjC;QACAvB,KAAK,CAACK,QAAQ,CAACC,UAAU,CAACC,iBAAiB,CAAC;UAC1CC,IAAI,EAAE,mBAAmB;UACzBC,OAAO,EAAE;YACPC,SAAS,EAAEb,OAAO,CAACL;UACrB;QACF,CAAC,CAAC;;QAEF;QACA;QACA,OAAO,iBAAQU,MAAM,CAAC,IAAI0G,qBAAiB,CAAC,uBAAuB,EAAErF,GAAG,CAAC,CAAC;MAC5E;MACAsD,oBAAW,CAACC,MAAM,CAACC,KAAK,CACtB,8DAA8D,EAC9DxD,GAAG,CACJ;MAED,OAAO,iBAAQrB,MAAM,CAAC,IAAI2G,oBAAgB,CAACpG,OAAO,EAAE,uBAAuB,EAAEc,GAAG,CAAC,CAAC;IACpF,CAAC,CAAC;EACN,CAAC;EAEDuF,QAAQ,EAAE,kBAACC,MAAM,EAAK;IACpB,IAAIC,UAAU,GAAG,IAAI;IACrB,IAAIC,UAAU,GAAG,IAAI;IACrB,IAAIC,WAAW,GAAG,IAAI;IACtB,IAAIC,WAAW,GAAG,IAAI;IAEtB,IAAI,CAACJ,MAAM,EAAE;MACX,OAAO;QAACC,UAAU,EAAE,IAAI;QAAEC,UAAU,EAAE;MAAI,CAAC;IAC7C;IACA,IAAIF,MAAM,CAACK,cAAc,EAAE;MACzBF,WAAW,GAAGH,MAAM,CAACK,cAAc,EAAE;IACvC;IACA,IAAIL,MAAM,CAACM,cAAc,EAAE;MACzBF,WAAW,GAAGJ,MAAM,CAACM,cAAc,EAAE;IACvC;IAEA,IAAIH,WAAW,IAAIA,WAAW,CAACI,MAAM,GAAG,CAAC,EAAE;MAAA,mBAC1BJ,WAAW;MAAA;MAAzBF,UAAU;IACb;IAEA,IAAIG,WAAW,IAAIA,WAAW,CAACG,MAAM,GAAG,CAAC,EAAE;MAAA,mBAC1BH,WAAW;MAAA;MAAzBF,UAAU;IACb;IAEA,OAAO;MAACD,UAAU,EAAVA,UAAU;MAAEC,UAAU,EAAVA;IAAU,CAAC;EACjC,CAAC;EAEDM,yBAAyB,EAAE,mCAACxG,SAAS;IAAA,OACnCA,SAAS,IACTA,SAAS,CAACyE,WAAW,IACrBzE,SAAS,CAACyE,WAAW,CAACrE,IAAI,IAC1BJ,SAAS,CAACyE,WAAW,CAACrE,IAAI,IAC1BJ,SAAS,CAACyE,WAAW,CAACrE,IAAI,CAACmB,SAAS;EAAA;EAEtCkF,sBAAsB,EAAE,gCAACzG,SAAS;IAAA,OAChCA,SAAS,IACTA,SAAS,CAACyE,WAAW,IACrBzE,SAAS,CAACyE,WAAW,CAACrE,IAAI,IAC1BJ,SAAS,CAACyE,WAAW,CAACrE,IAAI,IAC1BJ,SAAS,CAACyE,WAAW,CAACrE,IAAI,CAACsG,MAAM;EAAA;EAEnCC,gCAAgC,EAAE,0CAAC3G,SAAS;IAAA;IAAA,OAC1C,CAAAA,SAAS,aAATA,SAAS,iDAATA,SAAS,CAAEyE,WAAW,qFAAtB,uBAAwBrE,IAAI,2DAA5B,uBAA8BwG,gBAAgB,KAAI,EAAE;EAAA;EAEtDC,wBAAwB,EAAE,kCAACC,YAAY;IAAA,OAAKA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACC,SAAS,CAAC;EAAA;EAE1FC,mBAAmB,EAAE,6BAACH,YAAY;IAAA,OAChCA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACG,sBAAsB,CAAC;EAAA;EAE7DC,WAAW,EAAE,qBAACL,YAAY;IAAA,OACxBA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACK,iBAAiB,CAAC,IACtDN,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACM,oBAAoB,CAAC;EAAA;EAE3DC,aAAa,EAAE,uBAACR,YAAY;IAAA,OAC1BA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACQ,mBAAmB,CAAC,IACxDT,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACS,kBAAkB,CAAC;EAAA;EAEzDC,gBAAgB,EAAE,0BAACX,YAAY;IAAA,OAAKA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACW,UAAU,CAAC;EAAA;EAEnFC,oBAAoB,EAAE,8BAACb,YAAY;IAAA,OAAKA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACa,eAAe,CAAC;EAAA;EAE5FC,4BAA4B,EAAE,sCAACf,YAAY;IAAA,OACzCA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACe,wBAAwB,CAAC;EAAA;EAE/DC,+BAA+B,EAAE,yCAACjB,YAAY;IAAA,OAC5CA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACiB,+BAA+B,CAAC,IACpElB,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACkB,iBAAiB,CAAC;EAAA;EAExDC,iBAAiB,EAAE,2BAACpB,YAAY;IAAA,OAAKA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACoB,mBAAmB,CAAC;EAAA;EAC7FC,6BAA6B,EAAE,uCAACtB,YAAY;IAAA,OAC1CA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACsB,6BAA6B,CAAC;EAAA;EAEpEC,yBAAyB,EAAE,mCAACxB,YAAY;IAAA,OACtCA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACwB,8BAA8B,CAAC;EAAA;EAErEC,uBAAuB,EAAE,iCAAC1B,YAAY;IAAA,OACpC,CAACA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAAC0B,yBAAyB,CAAC;EAAA;EAEjEC,+BAA+B,EAAE,yCAAC5B,YAAY;IAAA,OAC5C,CAACA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAAC4B,+BAA+B,CAAC;EAAA;EAEvEC,iBAAiB,EAAE,2BAAC9B,YAAY;IAAA,OAAK,CAACA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAAC8B,oBAAoB,CAAC;EAAA;EAE/FC,WAAW,EAAE,qBAACC,OAAO,EAAEC,OAAO,EAAE9K,QAAQ,EAAK;IAC3C,IAAI6K,OAAO,IAAIA,OAAO,CAACE,OAAO,EAAE;MAC9B,OAAOD,OAAO,CAACF,WAAW,CAAC;QAAC5K,QAAQ,EAARA,QAAQ;QAAEgL,IAAI,EAAE;MAAI,CAAC,CAAC;IACpD;IAEA,OAAO,iBAAQ/J,MAAM,CAAC,IAAIgK,mBAAe,CAAC,2CAA2C,CAAC,CAAC;EACzF,CAAC;EAEDC,aAAa,EAAE,uBAACL,OAAO,EAAEC,OAAO,EAAE9K,QAAQ,EAAK;IAC7C,IAAI6K,OAAO,IAAIA,OAAO,CAACM,SAAS,EAAE;MAChC,OAAOL,OAAO,CAACF,WAAW,CAAC;QAAC5K,QAAQ,EAARA,QAAQ;QAAEgL,IAAI,EAAE;MAAK,CAAC,CAAC;IACrD;IAEA,OAAO,iBAAQ/J,MAAM,CAAC,IAAIgK,mBAAe,CAAC,6CAA6C,CAAC,CAAC;EAC3F,CAAC;EAEDG,kBAAkB,EAAE,4BAACrD,UAAiC,EAAK;IACzD,IAAMsD,UAAU,GAAG,oCAAoC;IAEvD,IAAItD,UAAU,EAAE;MACd,IAAMuD,QAAQ,GAAGvD,UAAU,CAACwD,eAAe,CAACC,WAAW,EAAE;MACzD,IAAOC,QAAQ,GAAIH,QAAQ,CAApBG,QAAQ;MAEf7F,oBAAW,CAACC,MAAM,CAAC6F,GAAG,CAACL,UAAU,uBAAgBI,QAAQ,EAAG;MAC5D7F,oBAAW,CAACC,MAAM,CAAC6F,GAAG,CAACL,UAAU,EAAE,YAAY,EAAE,wBAAeC,QAAQ,CAAC,CAAC;IAC5E;EACF,CAAC;EAEDK,kBAAkB,EAAE,4BAAC3D,UAA6B,EAAK;IACrD,IAAMqD,UAAU,GAAG,oCAAoC;IAEvD,IAAIrD,UAAU,EAAE;MACd,IAAMsD,QAAQ,GAAGtD,UAAU,CAACuD,eAAe,CAACC,WAAW,EAAE;MACzD,IAAOC,QAAQ,GAAIH,QAAQ,CAApBG,QAAQ;MAEf7F,oBAAW,CAACC,MAAM,CAAC6F,GAAG,CAACL,UAAU,uBAAgBI,QAAQ,EAAG;MAC5D7F,oBAAW,CAACC,MAAM,CAAC6F,GAAG,CAACL,UAAU,EAAE,YAAY,EAAE,wBAAeC,QAAQ,CAAC,CAAC;IAC5E;EACF,CAAC;EAEDM,mBAAmB,EAAE,+BAAkB;IAAA,IAAjBC,OAAO,uEAAG,EAAE;IAChC,IAAMR,UAAU,GAAG,qCAAqC;IAExDQ,OAAO,CAACrL,OAAO,CAAC,UAACsL,MAAM,EAAK;MAC1BlG,oBAAW,CAACC,MAAM,CAAC6F,GAAG,CAACL,UAAU,uBAAgBS,MAAM,CAACL,QAAQ,EAAG;MACnE7F,oBAAW,CAACC,MAAM,CAAC6F,GAAG,CAACL,UAAU,EAAE,UAAU,EAAE,wBAAeS,MAAM,CAAC,CAAC;IACxE,CAAC,CAAC;EACJ,CAAC;EAEDC,gBAAgB,EAAE,0BAACnL,OAAO,EAAK;IAC7B,IAAIA,OAAO,CAAC2E,YAAY,KAAKC,qBAAU,CAACC,QAAQ,EAAE;MAChD,OAAO,iBAAQxE,MAAM,CAAC,IAAIyE,kCAAqB,EAAE,CAAC;IACpD;IAEA,IAAMsG,UAAU,GAAG;MACjBhM,QAAQ,EAAEY,OAAO,CAACZ;IACpB,CAAC;IAED,OAAOY,OAAO,CAAC+B,cAAc,CAC1BoJ,gBAAgB,CAACC,UAAU,CAAC,CAC5BhK,IAAI,CAAC;MAAA,OAAMvC,WAAW,CAAC6E,OAAO,CAAC1D,OAAO,CAAC;IAAA,EAAC,CACxC+E,KAAK,CAAC,UAACrD,GAAG,EAAK;MACdsD,oBAAW,CAACC,MAAM,CAACC,KAAK,4GAC8ElF,OAAO,CAACL,EAAE,sBAAY+B,GAAG,EAC9H;MAED,OAAO,iBAAQrB,MAAM,CAACqB,GAAG,CAAC;IAC5B,CAAC,CAAC;EACN,CAAC;EAED2J,sBAAsB,EAAE,gCAACrD,YAAY;IAAA,OAAKA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACqD,aAAa,CAAC;EAAA;EAE5FC,wBAAwB,EAAE,kCAACvD,YAAY;IAAA,OACrCA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACuD,wBAAwB,CAAC;EAAA;EAE/DC,oBAAoB,EAAE,8BAACzD,YAAY;IAAA,OACjCA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACyD,2BAA2B,CAAC;EAAA;EAElEC,mBAAmB,EAAE,6BAAC3D,YAAY;IAAA,OAChCA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAAC2D,0BAA0B,CAAC;EAAA;EAEjEC,qBAAqB,EAAE,+BAAC7D,YAAY;IAAA,OAClCA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAAC6D,qBAAqB,CAAC;EAAA;EAE5DC,sBAAsB,EAAE,gCAAC/D,YAAY;IAAA,OACnCA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAAC+D,6BAA6B,CAAC;EAAA;EAEpEC,mBAAmB,EAAE,6BAACjE,YAAY;IAAA,OAAKA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACiE,oBAAoB,CAAC;EAAA;EAEhGC,4BAA4B,EAAE,sCAACnE,YAAY;IAAA,OACzCA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACmE,6BAA6B,CAAC;EAAA;EAEpEC,wBAAwB,EAAE,kCAACrE,YAAY;IAAA,OACrCA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACqE,uBAAuB,CAAC;EAAA;EAE9DC,sBAAsB,EAAE,gCAACvE,YAAY;IAAA,OAAKA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAACuE,kBAAkB,CAAC;EAAA;EAEjGC,gBAAgB,EAAE,0BAACC,aAAa,EAAE1E,YAAY,EAAK;IACjD,IAAIA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAAC0E,gBAAgB,CAAC,EAAE;MACzD,OAAO,IAAI;IACb;IACA,IAAI3E,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAAC2E,kBAAkB,CAAC,EAAE;MAC3D,OAAO,KAAK;IACd;IAEA,OAAOF,aAAa;EACtB,CAAC;EACDG,4BAA4B,EAAE,sCAAC7E,YAAY;IAAA,OACzCA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAAC6E,4BAA4B,CAAC;EAAA;EAEnEC,mBAAmB,EAAE,6BAAC/E,YAAY;IAAA,OAAKA,YAAY,CAACnG,QAAQ,CAACoG,wBAAa,CAAC+E,iBAAiB,CAAC;EAAA;EAE7F;AACF;AACA;AACA;AACA;AACA;EACEC,WAAW,EAAE,qBAACjN,OAAO,EAAEkN,WAAW,EAAK;IAAA;IACrC,IAAMjM,QAAQ,GAAGjB,OAAO,aAAPA,OAAO,6CAAPA,OAAO,CAAEkB,SAAS,uDAAlB,mBAAoBD,QAAQ;IAE7C,IAAI,CAACA,QAAQ,EAAE;MACb;IACF;IAEAiM,WAAW,CAACjM,QAAQ,GAAGA,QAAQ;EACjC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEkM,oBAAoB,EAAE,8BAACnN,OAAO,EAAEjB,QAAQ,EAAK;IAAA;IAC3C,IAAI,CAACiB,OAAO,EAAE;MACZ,OAAOjB,QAAQ;IACjB;IAEA,IAAME,KAAK,GAAGF,QAAQ,aAARA,QAAQ,0CAARA,QAAQ,CAAEG,IAAI,oDAAd,gBAAgBD,KAAK;IAEnC,IAAIA,KAAK,EAAE;MACTe,OAAO,CAACkB,SAAS,CAACkM,YAAY,CAACnO,KAAK,CAAC;IACvC;IAEA,OAAOF,QAAQ;EACjB,CAAC;EAEDsO,yBAAyB,EAAE,mCAACC,eAAe,EAAK;IAC9C,IAAMC,UAAU,GAAG,IAAIC,OAAO,CAACF,eAAe,CAAC;IAE/C,IAAMG,iBAAiB,GAAG,SAApBA,iBAAiB,CAAIC,eAAe,EAAK;MAC7C,IAAM1N,OAAO,GAAGuN,UAAU,CAACI,KAAK,EAAE;MAElC,IAAI,CAAC3N,OAAO,EAAE;QACZ,OAAO,iBAAQgE,OAAO,EAAE;MAC1B;MAEA,IAAMpD,OAAO,GAAG,yBAAU8M,eAAe,CAAC;MAE1C,IAAI,CAAC9M,OAAO,CAAC1B,IAAI,EAAE;QACjB0B,OAAO,CAAC1B,IAAI,GAAG,CAAC,CAAC;MACnB;MAEAL,WAAW,CAACoO,WAAW,CAACjN,OAAO,EAAEY,OAAO,CAAC1B,IAAI,CAAC;MAE9C,OAAOc,OAAO,CACXkK,OAAO,CAACtJ,OAAO,CAAC,CAChBQ,IAAI,CAAC,UAACrC,QAAQ;QAAA,OAAKF,WAAW,CAACsO,oBAAoB,CAACnN,OAAO,EAAEjB,QAAQ,CAAC;MAAA,EAAC;IAC5E,CAAC;IAED,OAAO0O,iBAAiB;EAC1B,CAAC;EAEDG,mBAAmB,EAAE,6BAACC,OAAoB,EAAEC,YAA0C,EAAK;IACzF,IAAI,CAACA,YAAY,EAAE;MACjB,OAAO,IAAI;IACb;IAEA,OAAOA,YAAY,CAACD,OAAO,CAAC;EAC9B,CAAC;EAEDE,uBAAuB,EAAE,iCAAC/N,OAAO,EAAEgO,WAAW,EAAK;IAAA;IACjD,IAAI,CAAChO,OAAO,IAAI,CAACgO,WAAW,EAAE;MAC5B;IACF;IACA,IAAMC,MAAM,GAAGD,WAAW,CAACpK,0BAA0B;IACrD5D,OAAO,CAAC4D,0BAA0B,CAACsK,sBAAsB,CACvD,CAAC,CAACF,WAAW,CAACG,gCAAgC,EAC9C,CAAC,EAACF,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEG,oBAAoB,EAC/B;IACD,IAAMC,aAAa,GAAG,CAAC,EACrBL,WAAW,CAACG,gCAAgC,IAC5CH,WAAW,aAAXA,WAAW,wCAAXA,WAAW,CAAEM,kBAAkB,kDAA/B,sBAAiCC,8BAA8B,CAChE;IACDvO,OAAO,CAAC4D,0BAA0B,CAAC4K,mBAAmB,CAACH,aAAa,CAAC;IAErE,SAASI,SAAS,CAACC,GAAG,EAAEC,MAAM,EAAEC,MAAM,EAAE;MACtC,IAAID,MAAM,IAAID,GAAG,EAAE;QACjBA,GAAG,CAACE,MAAM,CAAC,GAAGF,GAAG,CAACC,MAAM,CAAC;QACzB,OAAOD,GAAG,CAACC,MAAM,CAAC;MACpB;IACF;IACA,IAAIV,MAAM,EAAE;MAAA;MACV,IAAMY,YAAY,GAAG,yBAAUZ,MAAM,CAACa,WAAW,CAAC;MAAC,2CAC5BD,YAAY;QAAA;MAAA;QAAnC,oDAAqC;UAAA,IAA1BE,QAAQ;UACjBN,SAAS,CAACM,QAAQ,EAAE,cAAc,EAAE,cAAc,CAAC;UACnDN,SAAS,CAACM,QAAQ,EAAE,iBAAiB,EAAE,cAAc,CAAC;QACxD;MAAC;QAAA;MAAA;QAAA;MAAA;MACD,IAAI,2BAAC/O,OAAO,CAAC4D,0BAA0B,4EAAlC,sBAAoCkL,WAAW,mDAA/C,uBAAiDrH,MAAM,GAAE;QAC5DzH,OAAO,CAAC4D,0BAA0B,CAACoL,oBAAoB,CAACH,YAAY,CAAC;MACvE;IACF;IACAI,qBAAO,CAAC5L,OAAO,CACb,KAAI,EACJ;MACE6L,IAAI,EAAE,cAAc;MACpBC,QAAQ,EAAE;IACZ,CAAC,EACDC,yBAAc,CAACC,6BAA6B,CAC7C;EACH;AACF,CAAC;AAAC,eAEaxQ,WAAW;AAAA"}
|
|
1
|
+
{"version":3,"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","meeting","audioMuted","videoMuted","webex","getWebexObject","reject","ParameterError","locusMediaRequest","internal","newMetrics","submitClientEvent","name","options","meetingId","send","type","selfUrl","sequence","locusInfo","muteOptions","then","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","deviceUrl","correlationId","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","isMultistream","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","res","payload","trigger","identifiers","trackingId","headers","trackingid","cleanUp","breakouts","simultaneousInterpretation","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeRemoteTracks","closePeerConnections","cleanupLocalTracks","unsetRemoteTracks","unsetPeerConnections","reconnectionManager","stopKeepAlive","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","catch","LoggerProxy","logger","error","leaveMeeting","isUserInLeftState","UserNotJoinedError","defaultOptions","leaveOptions","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","CaptchaError","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","setLocus","IntentToJoinError","JoinMeetingError","getTrack","stream","audioTrack","videoTrack","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","userDisplayHints","canInviteNewParticipants","displayHints","DISPLAY_HINTS","ADD_GUEST","canAdmitParticipant","ROSTER_WAITING_TO_JOIN","canUserLock","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","canBroadcastMessageToBreakout","BROADCAST_MESSAGE_TO_BREAKOUT","isSuppressBreakoutSupport","UCF_SUPPRESS_BREAKOUTS_SUPPORT","canAdmitLobbyToBreakout","DISABLE_LOBBY_TO_BREAKOUT","isBreakoutPreassignmentsEnabled","DISABLE_BREAKOUT_PREASSIGNMENTS","canUserAskForHelp","DISABLE_ASK_FOR_HELP","lockMeeting","actions","request","canLock","lock","PermissionError","unlockMeeting","canUnlock","handleAudioLogging","LOG_HEADER","settings","underlyingTrack","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","isSaveTranscriptsEnabled","SAVE_TRANSCRIPTS_ENABLED","canStartTranscribing","TRANSCRIPTION_CONTROL_START","canStopTranscribing","TRANSCRIPTION_CONTROL_STOP","isClosedCaptionActive","CAPTION_STATUS_ACTIVE","isWebexAssistantActive","WEBEX_ASSISTANT_STATUS_ACTIVE","canViewCaptionPanel","ENABLE_CAPTION_PANEL","isRealTimeTranslationEnabled","DISPLAY_REAL_TIME_TRANSLATION","canSelectSpokenLanguages","DISPLAY_NON_ENGLISH_ASR","waitingForOthersToJoin","WAITING_FOR_OTHERS","canSendReactions","originalValue","REACTIONS_ACTIVE","REACTIONS_INACTIVE","canUserRenameSelfAndObserved","CAN_RENAME_SELF_AND_OBSERVED","canUserRenameOthers","CAN_RENAME_OTHERS","addSequence","requestBody","updateLocusWithDelta","onDeltaLocus","generateLocusDeltaRequest","originalMeeting","meetingRef","WeakRef","locusDeltaRequest","originalOptions","deref","selfSupportsFeature","feature","userPolicies","parseInterpretationInfo","meetingInfo","siInfo","updateMeetingSIEnabled","turnOnSimultaneousInterpretation","currentSIInterpreter","hostSIEnabled","meetingSiteSetting","enableHostInterpreterControlSI","updateHostSIEnabled","renameKey","obj","oldKey","newKey","lanuagesInfo","siLanguages","language","updateInterpretation","Trigger","file","function","EVENT_TRIGGERS","MEETING_INTERPRETATION_UPDATE"],"sources":["util.ts"],"sourcesContent":["import {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\nimport {cloneDeep} from 'lodash';\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\n SELF_POLICY,\n EVENT_TRIGGERS,\n} from '../constants';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\nimport Trigger from '../common/events/trigger-proxy';\n\nconst MeetingUtil = {\n parseLocusJoin: (response) => {\n const parsed: any = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n },\n\n remoteUpdateAudioVideo: (meeting, audioMuted?: boolean, videoMuted?: boolean) => {\n const webex = meeting.getWebexObject();\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n if (!meeting.locusMediaRequest) {\n return Promise.reject(\n new ParameterError(\n 'You need a meeting with a media connection, call Meeting.addMedia() first.'\n )\n );\n }\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.request',\n options: {meetingId: meeting.id},\n });\n\n return meeting.locusMediaRequest\n .send({\n type: 'LocalMute',\n selfUrl: meeting.selfUrl,\n mediaId: meeting.mediaId,\n sequence: meeting.locusInfo.sequence,\n muteOptions: {\n audioMuted,\n videoMuted,\n },\n })\n .then((response) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.response',\n options: {meetingId: meeting.id},\n });\n\n return response?.body?.locus;\n });\n },\n\n hasOwner: (info) => info && info.owner,\n\n isOwnerSelf: (owner, selfId) => owner === selfId,\n\n isPinOrGuest: (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode),\n\n joinMeeting: (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n const webex = meeting.getWebexObject();\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.request',\n options: {meetingId: meeting.id},\n });\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n permissionToken: meeting.permissionToken,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: !meeting.isMultistream,\n asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\n locale: options.locale,\n deviceCapabilities: options.deviceCapabilities,\n liveAnnotationSupported: options.liveAnnotationSupported,\n })\n .then((res) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.response',\n payload: {\n trigger: 'loci-update',\n identifiers: {\n trackingId: res.headers.trackingid,\n },\n },\n options: {\n meetingId: meeting.id,\n mediaConnections: res.body.mediaConnections,\n },\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n },\n\n cleanUp: (meeting) => {\n meeting.breakouts.cleanUp();\n meeting.simultaneousInterpretation.cleanUp();\n\n // make sure we send last metrics before we close the peerconnection\n const stopStatsAnalyzer = meeting.statsAnalyzer\n ? meeting.statsAnalyzer.stopAnalyzer()\n : Promise.resolve();\n\n return stopStatsAnalyzer\n .then(() => meeting.closeRemoteTracks())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.cleanupLocalTracks();\n meeting.unsetRemoteTracks();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => meeting.updateLLMConnection());\n },\n\n disconnectPhoneAudio: (meeting, phoneUrl) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const options = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n phoneUrl,\n };\n\n return meeting.meetingRequest.disconnectPhoneAudio(options).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n // by default will leave on meeting's resourceId\n // if you explicity want it not to leave on resource id, pass\n // {resourceId: null}\n // TODO: chris, you can modify this however you want\n leaveMeeting: (meeting, options: any = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const defaultOptions = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n resourceId: meeting.resourceId,\n deviceUrl: meeting.deviceUrl,\n };\n\n const leaveOptions = {...defaultOptions, ...options};\n\n return meeting.meetingRequest\n .leaveMeeting(leaveOptions)\n .then(() => {\n if (options.moveMeeting) {\n return Promise.resolve();\n }\n\n return MeetingUtil.cleanUp(meeting);\n })\n .catch((err) => {\n // TODO: If the meeting state comes as LEFT or INACTIVE as response then\n // 1) on leave clean up the meeting or simply do a sync on the meeting\n // 2) If the error says meeting is inactive then destroy the meeting object\n LoggerProxy.logger.error(\n `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n declineMeeting: (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason,\n }),\n\n isUserInLeftState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_,\n\n isUserInIdleState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_,\n\n isUserInJoinedState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_,\n\n isMediaEstablished: (currentMediaStatus) =>\n currentMediaStatus &&\n (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share),\n\n joinMeetingOptions: (meeting, options: any = {}) => {\n const webex = meeting.getWebexObject();\n\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (meeting.requiredCaptcha) {\n return Promise.reject(new CaptchaError());\n }\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n return Promise.reject(new PasswordError());\n }\n\n if (options.pin) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.collected',\n options: {\n meetingId: meeting.id,\n },\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.prompt',\n options: {\n meetingId: meeting.id,\n },\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error(\n 'Meeting:util#joinMeetingOptions --> Error joining the call, ',\n err\n );\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n },\n\n getTrack: (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n },\n\n getModeratorFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator,\n\n getPolicyFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy,\n\n getUserDisplayHintsFromLocusInfo: (locusInfo) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [],\n\n canInviteNewParticipants: (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST),\n\n canAdmitParticipant: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN),\n\n canUserLock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED),\n\n canUserUnlock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED),\n\n canUserRaiseHand: (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND),\n\n canUserLowerAllHands: (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS),\n\n canUserLowerSomeoneElsesHand: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND),\n\n bothLeaveAndEndMeetingAvailable: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING),\n\n canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),\n canBroadcastMessageToBreakout: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.BROADCAST_MESSAGE_TO_BREAKOUT),\n\n isSuppressBreakoutSupport: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT),\n\n canAdmitLobbyToBreakout: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT),\n\n isBreakoutPreassignmentsEnabled: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS),\n\n canUserAskForHelp: (displayHints) => !displayHints.includes(DISPLAY_HINTS.DISABLE_ASK_FOR_HELP),\n\n lockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canLock) {\n return request.lockMeeting({locusUrl, lock: true});\n }\n\n return Promise.reject(new PermissionError('Lock not allowed, due to joined property.'));\n },\n\n unlockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canUnlock) {\n return request.lockMeeting({locusUrl, lock: false});\n }\n\n return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));\n },\n\n handleAudioLogging: (audioTrack?: LocalMicrophoneTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleVideoLogging: (videoTrack?: LocalCameraTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleDeviceLogging: (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n },\n\n endMeetingForAll: (meeting) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const endOptions = {\n locusUrl: meeting.locusUrl,\n };\n\n return meeting.meetingRequest\n .endMeetingForAll(endOptions)\n .then(() => MeetingUtil.cleanUp(meeting))\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n canEnableClosedCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START),\n\n isSaveTranscriptsEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED),\n\n canStartTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START),\n\n canStopTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP),\n\n isClosedCaptionActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE),\n\n isWebexAssistantActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE),\n\n canViewCaptionPanel: (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL),\n\n isRealTimeTranslationEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION),\n\n canSelectSpokenLanguages: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR),\n\n waitingForOthersToJoin: (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS),\n\n canSendReactions: (originalValue, displayHints) => {\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {\n return true;\n }\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {\n return false;\n }\n\n return originalValue;\n },\n canUserRenameSelfAndObserved: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED),\n\n canUserRenameOthers: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS),\n\n /**\n * Adds the current locus sequence information to a request body\n * @param {Object} meeting The meeting object\n * @param {Object} requestBody The body of a request to locus\n * @returns {void}\n */\n addSequence: (meeting, requestBody) => {\n const sequence = meeting?.locusInfo?.sequence;\n\n if (!sequence) {\n return;\n }\n\n requestBody.sequence = sequence;\n },\n\n /**\n * Updates the locus info for the meeting with the delta locus\n * returned from requests that include the sequence information\n * Returns the original response object\n * @param {Object} meeting The meeting object\n * @param {Object} response The response of the http request\n * @returns {Object}\n */\n updateLocusWithDelta: (meeting, response) => {\n if (!meeting) {\n return response;\n }\n\n const locus = response?.body?.locus;\n\n if (locus) {\n meeting.locusInfo.onDeltaLocus(locus);\n }\n\n return response;\n },\n\n generateLocusDeltaRequest: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const locusDeltaRequest = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return Promise.resolve();\n }\n\n const options = cloneDeep(originalOptions);\n\n if (!options.body) {\n options.body = {};\n }\n\n MeetingUtil.addSequence(meeting, options.body);\n\n return meeting\n .request(options)\n .then((response) => MeetingUtil.updateLocusWithDelta(meeting, response));\n };\n\n return locusDeltaRequest;\n },\n\n selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record<SELF_POLICY, boolean>) => {\n if (!userPolicies) {\n return true;\n }\n\n return userPolicies[feature];\n },\n\n parseInterpretationInfo: (meeting, meetingInfo) => {\n if (!meeting || !meetingInfo) {\n return;\n }\n const siInfo = meetingInfo.simultaneousInterpretation;\n meeting.simultaneousInterpretation.updateMeetingSIEnabled(\n !!meetingInfo.turnOnSimultaneousInterpretation,\n !!siInfo?.currentSIInterpreter\n );\n const hostSIEnabled = !!(\n meetingInfo.turnOnSimultaneousInterpretation &&\n meetingInfo?.meetingSiteSetting?.enableHostInterpreterControlSI\n );\n meeting.simultaneousInterpretation.updateHostSIEnabled(hostSIEnabled);\n\n function renameKey(obj, oldKey, newKey) {\n if (oldKey in obj) {\n obj[newKey] = obj[oldKey];\n delete obj[oldKey];\n }\n }\n if (siInfo) {\n const lanuagesInfo = cloneDeep(siInfo.siLanguages);\n for (const language of lanuagesInfo) {\n renameKey(language, 'languageCode', 'languageName');\n renameKey(language, 'languageGroupId', 'languageCode');\n }\n if (!meeting.simultaneousInterpretation?.siLanguages?.length) {\n meeting.simultaneousInterpretation.updateInterpretation(lanuagesInfo);\n }\n }\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'parseInterpretationInfo',\n },\n EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE\n );\n },\n};\n\nexport default MeetingUtil;\n"],"mappings":"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"}
|
package/dist/member/util.js
CHANGED
|
@@ -145,16 +145,7 @@ MemberUtil.isAudioMuted = function (participant) {
|
|
|
145
145
|
if (!participant) {
|
|
146
146
|
throw new _parameter.default('Audio could not be processed, participant is undefined.');
|
|
147
147
|
}
|
|
148
|
-
|
|
149
|
-
if (participant.controls && participant.controls.audio) {
|
|
150
|
-
if (participant.controls.audio.muted) {
|
|
151
|
-
return true;
|
|
152
|
-
}
|
|
153
|
-
if (mutedStatus) {
|
|
154
|
-
return true;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
return false;
|
|
148
|
+
return MemberUtil.isMuted(participant, _constants.AUDIO_STATUS, _constants.AUDIO);
|
|
158
149
|
};
|
|
159
150
|
|
|
160
151
|
/**
|
|
@@ -165,7 +156,7 @@ MemberUtil.isVideoMuted = function (participant) {
|
|
|
165
156
|
if (!participant) {
|
|
166
157
|
throw new _parameter.default('Video could not be processed, participant is undefined.');
|
|
167
158
|
}
|
|
168
|
-
return MemberUtil.isMuted(participant.
|
|
159
|
+
return MemberUtil.isMuted(participant, _constants.VIDEO_STATUS, _constants.VIDEO);
|
|
169
160
|
};
|
|
170
161
|
|
|
171
162
|
/**
|
|
@@ -215,20 +206,28 @@ MemberUtil.isLiveAnnotationSupported = function (participant) {
|
|
|
215
206
|
|
|
216
207
|
/**
|
|
217
208
|
* utility method for audio/video muted status
|
|
218
|
-
* @param {
|
|
219
|
-
* @param {String}
|
|
220
|
-
* @
|
|
209
|
+
* @param {any} participant
|
|
210
|
+
* @param {String} statusAccessor
|
|
211
|
+
* @param {String} controlsAccessor
|
|
212
|
+
* @returns {Boolean | undefined}
|
|
221
213
|
*/
|
|
222
|
-
MemberUtil.isMuted = function (
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
return false;
|
|
229
|
-
}
|
|
214
|
+
MemberUtil.isMuted = function (participant, statusAccessor, controlsAccessor) {
|
|
215
|
+
var _participant$controls5, _participant$controls6, _participant$status;
|
|
216
|
+
// check remote mute
|
|
217
|
+
var remoteMute = participant === null || participant === void 0 ? void 0 : (_participant$controls5 = participant.controls) === null || _participant$controls5 === void 0 ? void 0 : (_participant$controls6 = _participant$controls5[controlsAccessor]) === null || _participant$controls6 === void 0 ? void 0 : _participant$controls6.muted;
|
|
218
|
+
if (remoteMute === true) {
|
|
219
|
+
return true;
|
|
230
220
|
}
|
|
231
|
-
|
|
221
|
+
|
|
222
|
+
// check local mute
|
|
223
|
+
var localStatus = participant === null || participant === void 0 ? void 0 : (_participant$status = participant.status) === null || _participant$status === void 0 ? void 0 : _participant$status[statusAccessor];
|
|
224
|
+
if (localStatus === _constants._RECEIVE_ONLY_) {
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
if (localStatus === _constants._SEND_RECEIVE_) {
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
return remoteMute;
|
|
232
231
|
};
|
|
233
232
|
|
|
234
233
|
/**
|
|
@@ -330,13 +329,13 @@ MemberUtil.extractId = function (participant) {
|
|
|
330
329
|
* @returns {Object}
|
|
331
330
|
*/
|
|
332
331
|
MemberUtil.extractMediaStatus = function (participant) {
|
|
333
|
-
var _participant$
|
|
332
|
+
var _participant$status2, _participant$status3;
|
|
334
333
|
if (!participant) {
|
|
335
334
|
throw new _parameter.default('Media status could not be extracted, participant is undefined.');
|
|
336
335
|
}
|
|
337
336
|
return {
|
|
338
|
-
audio: (_participant$
|
|
339
|
-
video: (_participant$
|
|
337
|
+
audio: (_participant$status2 = participant.status) === null || _participant$status2 === void 0 ? void 0 : _participant$status2.audioStatus,
|
|
338
|
+
video: (_participant$status3 = participant.status) === null || _participant$status3 === void 0 ? void 0 : _participant$status3.videoStatus
|
|
340
339
|
};
|
|
341
340
|
};
|
|
342
341
|
|
package/dist/member/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MemberUtil","getControlsRoles","participant","controls","role","roles","hasRole","controlRole","some","type","hasCohost","ServerRoles","Cohost","hasModerator","Moderator","hasPresenter","Presenter","extractControlRoles","cohost","moderator","presenter","isUser","_USER_","isModerator","isGuest","guest","isDevice","_RESOURCE_ROOM_","isModeratorAssignmentProhibited","moderatorAssignmentNotAllowed","isSame","id","person","isAssociatedSame","associatedUsers","user","isNotAdmitted","status","devices","intent","_WAIT_","_IN_LOBBY_","_IN_MEETING_","isAudioMuted","ParameterError","mutedStatus","isMuted","AUDIO_STATUS","audio","muted","isVideoMuted","VIDEO_STATUS","isHandRaised","hand","raised","isBreakoutsSupported","doesNotSupportBreakouts","isInterpretationSupported","doesNotSupportSiInterpreter","isLiveAnnotationSupported","annotatorAssignmentNotAllowed","accessor","_RECEIVE_ONLY_","_SEND_RECEIVE_","getRecordingMember","record","recording","meta","modifiedBy","isRecording","localRecord","isRemovable","isSelf","isInMeeting","_CALL_","isMutable","extractStatus","length","_NOT_IN_MEETING_","state","_JOINED_","_IDLE_","foundDevice","find","device","_OBSERVE_","_LEFT_","extractId","extractMediaStatus","audioStatus","video","videoStatus","extractName","name"],"sources":["util.ts"],"sourcesContent":["import {\n IExternalRoles,\n ParticipantWithRoles,\n ServerRoles,\n ServerRoleShape,\n IMediaStatus,\n} from './types';\nimport {\n _USER_,\n _RESOURCE_ROOM_,\n _OBSERVE_,\n _WAIT_,\n _LEFT_,\n _JOINED_,\n _IDLE_,\n _IN_LOBBY_,\n _NOT_IN_MEETING_,\n _IN_MEETING_,\n AUDIO_STATUS,\n VIDEO_STATUS,\n _SEND_RECEIVE_,\n _RECEIVE_ONLY_,\n _CALL_,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst MemberUtil: any = {};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {[ServerRoleShape]}\n */\nMemberUtil.getControlsRoles = (participant: ParticipantWithRoles): Array<ServerRoleShape> =>\n participant?.controls?.role?.roles;\n\n/**\n * @param {Object} participant the locus participant\n * @param {ServerRoles} controlRole the search role\n * @returns {Boolean}\n */\nMemberUtil.hasRole = (participant: any, controlRole: ServerRoles): boolean =>\n MemberUtil.getControlsRoles(participant)?.some(\n (role) => role.type === controlRole && role.hasRole\n );\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasCohost = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Cohost) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasModerator = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Moderator) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasPresenter = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Presenter) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {IExternalRoles}\n */\nMemberUtil.extractControlRoles = (participant: ParticipantWithRoles): IExternalRoles => {\n const roles = {\n cohost: MemberUtil.hasCohost(participant),\n moderator: MemberUtil.hasModerator(participant),\n presenter: MemberUtil.hasPresenter(participant),\n };\n\n return roles;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isUser = (participant: any) => participant && participant.type === _USER_;\n\nMemberUtil.isModerator = (participant) => participant && participant.moderator;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isGuest = (participant: any) => participant && participant.guest;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isDevice = (participant: any) => participant && participant.type === _RESOURCE_ROOM_;\n\nMemberUtil.isModeratorAssignmentProhibited = (participant) =>\n participant && participant.moderatorAssignmentNotAllowed;\n\n/**\n * checks to see if the participant id is the same as the passed id\n * there are multiple ids that can be used\n * @param {Object} participant the locus participant\n * @param {String} id\n * @returns {Boolean}\n */\nMemberUtil.isSame = (participant: any, id: string) =>\n participant && (participant.id === id || (participant.person && participant.person.id === id));\n\n/**\n * checks to see if the participant id is the same as the passed id for associated devices\n * there are multiple ids that can be used\n * @param {Object} participant the locus participant\n * @param {String} id\n * @returns {Boolean}\n */\nMemberUtil.isAssociatedSame = (participant: any, id: string) =>\n participant &&\n participant.associatedUsers &&\n participant.associatedUsers.some(\n (user) => user.id === id || (user.person && user.person.id === id)\n );\n\n/**\n * @param {Object} participant the locus participant\n * @param {Boolean} isGuest\n * @param {String} status\n * @returns {Boolean}\n */\nMemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string): boolean =>\n participant &&\n participant.guest &&\n ((participant.devices &&\n participant.devices[0] &&\n participant.devices[0].intent &&\n participant.devices[0].intent.type === _WAIT_ &&\n // @ts-ignore\n isGuest &&\n status === _IN_LOBBY_) ||\n // @ts-ignore\n !status === _IN_MEETING_);\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isAudioMuted = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Audio could not be processed, participant is undefined.');\n }\n const mutedStatus = MemberUtil.isMuted(participant.status, AUDIO_STATUS);\n\n if (participant.controls && participant.controls.audio) {\n if (participant.controls.audio.muted) {\n return true;\n }\n if (mutedStatus) {\n return true;\n }\n }\n\n return false;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isVideoMuted = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Video could not be processed, participant is undefined.');\n }\n\n return MemberUtil.isMuted(participant.status, VIDEO_STATUS);\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isHandRaised = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Raise hand could not be processed, participant is undefined.');\n }\n\n return participant.controls?.hand?.raised || false;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isBreakoutsSupported = (participant) => {\n if (!participant) {\n throw new ParameterError('Breakout support could not be processed, participant is undefined.');\n }\n\n return !participant.doesNotSupportBreakouts;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isInterpretationSupported = (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'Interpretation support could not be processed, participant is undefined.'\n );\n }\n\n return !participant.doesNotSupportSiInterpreter;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isLiveAnnotationSupported = (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'LiveAnnotation support could not be processed, participant is undefined.'\n );\n }\n\n return !participant.annotatorAssignmentNotAllowed;\n};\n\n/**\n * utility method for audio/video muted status\n * @param {String} status\n * @param {String} accessor\n * @returns {Boolean}\n */\nMemberUtil.isMuted = (status: string, accessor: string) => {\n if (status) {\n if (status[accessor] === _RECEIVE_ONLY_) {\n return true;\n }\n if (status[accessor] === _SEND_RECEIVE_) {\n return false;\n }\n }\n\n return null;\n};\n\n/**\n * utility method for getting the recording member for later comparison\n * @param {Object} controls\n * @returns {String|null}\n */\nMemberUtil.getRecordingMember = (controls: any) => {\n if (!controls) {\n return null;\n }\n if (controls.record && controls.record.recording && controls.record.meta) {\n return controls.record.meta.modifiedBy;\n }\n\n return null;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isRecording = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Recording could not be processed, participant is undefined.');\n }\n if (participant.controls && participant.controls.localRecord) {\n return participant.controls.localRecord.recording;\n }\n\n return false;\n};\n\nMemberUtil.isRemovable = (isSelf, isGuest, isInMeeting, type) => {\n if (isGuest || isSelf) {\n return false;\n }\n if (type === _CALL_) {\n return false;\n }\n if (isInMeeting) {\n return true;\n }\n\n return false;\n};\n\nMemberUtil.isMutable = (isSelf, isDevice, isInMeeting, isMuted, type) => {\n if (!isInMeeting) {\n return false;\n }\n if (isMuted) {\n return false;\n }\n if (type === _CALL_) {\n return false;\n }\n if (isSelf || isDevice) {\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractStatus = (participant: any) => {\n if (!(participant && participant.devices && participant.devices.length)) {\n return _NOT_IN_MEETING_;\n }\n if (participant.state === _JOINED_) {\n return _IN_MEETING_;\n }\n if (participant.state === _IDLE_) {\n if (participant.devices && participant.devices.length > 0) {\n const foundDevice = participant.devices.find(\n (device) =>\n device.intent && (device.intent.type === _WAIT_ || device.intent.type === _OBSERVE_)\n );\n\n return foundDevice ? _IN_LOBBY_ : _NOT_IN_MEETING_;\n }\n\n return _NOT_IN_MEETING_;\n }\n if (participant.state === _LEFT_) {\n return _NOT_IN_MEETING_;\n }\n\n return _NOT_IN_MEETING_;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractId = (participant: any) => {\n if (participant) {\n return participant.id;\n }\n\n return null;\n};\n\n/**\n * extracts the media status from nested participant object\n * @param {Object} participant the locus participant\n * @returns {Object}\n */\nMemberUtil.extractMediaStatus = (participant: any): IMediaStatus => {\n if (!participant) {\n throw new ParameterError('Media status could not be extracted, participant is undefined.');\n }\n\n return {\n audio: participant.status?.audioStatus,\n video: participant.status?.videoStatus,\n };\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractName = (participant: any) => {\n if (participant && participant.person) {\n return participant.person.name;\n }\n\n return null;\n};\n\nexport default MemberUtil;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["MemberUtil","getControlsRoles","participant","controls","role","roles","hasRole","controlRole","some","type","hasCohost","ServerRoles","Cohost","hasModerator","Moderator","hasPresenter","Presenter","extractControlRoles","cohost","moderator","presenter","isUser","_USER_","isModerator","isGuest","guest","isDevice","_RESOURCE_ROOM_","isModeratorAssignmentProhibited","moderatorAssignmentNotAllowed","isSame","id","person","isAssociatedSame","associatedUsers","user","isNotAdmitted","status","devices","intent","_WAIT_","_IN_LOBBY_","_IN_MEETING_","isAudioMuted","ParameterError","isMuted","AUDIO_STATUS","AUDIO","isVideoMuted","VIDEO_STATUS","VIDEO","isHandRaised","hand","raised","isBreakoutsSupported","doesNotSupportBreakouts","isInterpretationSupported","doesNotSupportSiInterpreter","isLiveAnnotationSupported","annotatorAssignmentNotAllowed","statusAccessor","controlsAccessor","remoteMute","muted","localStatus","_RECEIVE_ONLY_","_SEND_RECEIVE_","getRecordingMember","record","recording","meta","modifiedBy","isRecording","localRecord","isRemovable","isSelf","isInMeeting","_CALL_","isMutable","extractStatus","length","_NOT_IN_MEETING_","state","_JOINED_","_IDLE_","foundDevice","find","device","_OBSERVE_","_LEFT_","extractId","extractMediaStatus","audio","audioStatus","video","videoStatus","extractName","name"],"sources":["util.ts"],"sourcesContent":["import {\n IExternalRoles,\n ParticipantWithRoles,\n ServerRoles,\n ServerRoleShape,\n IMediaStatus,\n} from './types';\nimport {\n _USER_,\n _RESOURCE_ROOM_,\n _OBSERVE_,\n _WAIT_,\n _LEFT_,\n _JOINED_,\n _IDLE_,\n _IN_LOBBY_,\n _NOT_IN_MEETING_,\n _IN_MEETING_,\n AUDIO_STATUS,\n VIDEO_STATUS,\n _SEND_RECEIVE_,\n _RECEIVE_ONLY_,\n _CALL_,\n VIDEO,\n AUDIO,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst MemberUtil: any = {};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {[ServerRoleShape]}\n */\nMemberUtil.getControlsRoles = (participant: ParticipantWithRoles): Array<ServerRoleShape> =>\n participant?.controls?.role?.roles;\n\n/**\n * @param {Object} participant the locus participant\n * @param {ServerRoles} controlRole the search role\n * @returns {Boolean}\n */\nMemberUtil.hasRole = (participant: any, controlRole: ServerRoles): boolean =>\n MemberUtil.getControlsRoles(participant)?.some(\n (role) => role.type === controlRole && role.hasRole\n );\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasCohost = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Cohost) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasModerator = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Moderator) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasPresenter = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Presenter) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {IExternalRoles}\n */\nMemberUtil.extractControlRoles = (participant: ParticipantWithRoles): IExternalRoles => {\n const roles = {\n cohost: MemberUtil.hasCohost(participant),\n moderator: MemberUtil.hasModerator(participant),\n presenter: MemberUtil.hasPresenter(participant),\n };\n\n return roles;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isUser = (participant: any) => participant && participant.type === _USER_;\n\nMemberUtil.isModerator = (participant) => participant && participant.moderator;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isGuest = (participant: any) => participant && participant.guest;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isDevice = (participant: any) => participant && participant.type === _RESOURCE_ROOM_;\n\nMemberUtil.isModeratorAssignmentProhibited = (participant) =>\n participant && participant.moderatorAssignmentNotAllowed;\n\n/**\n * checks to see if the participant id is the same as the passed id\n * there are multiple ids that can be used\n * @param {Object} participant the locus participant\n * @param {String} id\n * @returns {Boolean}\n */\nMemberUtil.isSame = (participant: any, id: string) =>\n participant && (participant.id === id || (participant.person && participant.person.id === id));\n\n/**\n * checks to see if the participant id is the same as the passed id for associated devices\n * there are multiple ids that can be used\n * @param {Object} participant the locus participant\n * @param {String} id\n * @returns {Boolean}\n */\nMemberUtil.isAssociatedSame = (participant: any, id: string) =>\n participant &&\n participant.associatedUsers &&\n participant.associatedUsers.some(\n (user) => user.id === id || (user.person && user.person.id === id)\n );\n\n/**\n * @param {Object} participant the locus participant\n * @param {Boolean} isGuest\n * @param {String} status\n * @returns {Boolean}\n */\nMemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string): boolean =>\n participant &&\n participant.guest &&\n ((participant.devices &&\n participant.devices[0] &&\n participant.devices[0].intent &&\n participant.devices[0].intent.type === _WAIT_ &&\n // @ts-ignore\n isGuest &&\n status === _IN_LOBBY_) ||\n // @ts-ignore\n !status === _IN_MEETING_);\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isAudioMuted = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Audio could not be processed, participant is undefined.');\n }\n\n return MemberUtil.isMuted(participant, AUDIO_STATUS, AUDIO);\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isVideoMuted = (participant: any): boolean => {\n if (!participant) {\n throw new ParameterError('Video could not be processed, participant is undefined.');\n }\n\n return MemberUtil.isMuted(participant, VIDEO_STATUS, VIDEO);\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isHandRaised = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Raise hand could not be processed, participant is undefined.');\n }\n\n return participant.controls?.hand?.raised || false;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isBreakoutsSupported = (participant) => {\n if (!participant) {\n throw new ParameterError('Breakout support could not be processed, participant is undefined.');\n }\n\n return !participant.doesNotSupportBreakouts;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isInterpretationSupported = (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'Interpretation support could not be processed, participant is undefined.'\n );\n }\n\n return !participant.doesNotSupportSiInterpreter;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isLiveAnnotationSupported = (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'LiveAnnotation support could not be processed, participant is undefined.'\n );\n }\n\n return !participant.annotatorAssignmentNotAllowed;\n};\n\n/**\n * utility method for audio/video muted status\n * @param {any} participant\n * @param {String} statusAccessor\n * @param {String} controlsAccessor\n * @returns {Boolean | undefined}\n */\nMemberUtil.isMuted = (participant: any, statusAccessor: string, controlsAccessor: string) => {\n // check remote mute\n const remoteMute = participant?.controls?.[controlsAccessor]?.muted;\n if (remoteMute === true) {\n return true;\n }\n\n // check local mute\n const localStatus = participant?.status?.[statusAccessor];\n if (localStatus === _RECEIVE_ONLY_) {\n return true;\n }\n if (localStatus === _SEND_RECEIVE_) {\n return false;\n }\n\n return remoteMute;\n};\n\n/**\n * utility method for getting the recording member for later comparison\n * @param {Object} controls\n * @returns {String|null}\n */\nMemberUtil.getRecordingMember = (controls: any) => {\n if (!controls) {\n return null;\n }\n if (controls.record && controls.record.recording && controls.record.meta) {\n return controls.record.meta.modifiedBy;\n }\n\n return null;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isRecording = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Recording could not be processed, participant is undefined.');\n }\n if (participant.controls && participant.controls.localRecord) {\n return participant.controls.localRecord.recording;\n }\n\n return false;\n};\n\nMemberUtil.isRemovable = (isSelf, isGuest, isInMeeting, type) => {\n if (isGuest || isSelf) {\n return false;\n }\n if (type === _CALL_) {\n return false;\n }\n if (isInMeeting) {\n return true;\n }\n\n return false;\n};\n\nMemberUtil.isMutable = (isSelf, isDevice, isInMeeting, isMuted, type) => {\n if (!isInMeeting) {\n return false;\n }\n if (isMuted) {\n return false;\n }\n if (type === _CALL_) {\n return false;\n }\n if (isSelf || isDevice) {\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractStatus = (participant: any) => {\n if (!(participant && participant.devices && participant.devices.length)) {\n return _NOT_IN_MEETING_;\n }\n if (participant.state === _JOINED_) {\n return _IN_MEETING_;\n }\n if (participant.state === _IDLE_) {\n if (participant.devices && participant.devices.length > 0) {\n const foundDevice = participant.devices.find(\n (device) =>\n device.intent && (device.intent.type === _WAIT_ || device.intent.type === _OBSERVE_)\n );\n\n return foundDevice ? _IN_LOBBY_ : _NOT_IN_MEETING_;\n }\n\n return _NOT_IN_MEETING_;\n }\n if (participant.state === _LEFT_) {\n return _NOT_IN_MEETING_;\n }\n\n return _NOT_IN_MEETING_;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractId = (participant: any) => {\n if (participant) {\n return participant.id;\n }\n\n return null;\n};\n\n/**\n * extracts the media status from nested participant object\n * @param {Object} participant the locus participant\n * @returns {Object}\n */\nMemberUtil.extractMediaStatus = (participant: any): IMediaStatus => {\n if (!participant) {\n throw new ParameterError('Media status could not be extracted, participant is undefined.');\n }\n\n return {\n audio: participant.status?.audioStatus,\n video: participant.status?.videoStatus,\n };\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractName = (participant: any) => {\n if (participant && participant.person) {\n return participant.person.name;\n }\n\n return null;\n};\n\nexport default MemberUtil;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/plugin-meetings",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.185",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
|
|
6
6
|
"contributors": [
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@webex/plugin-meetings": "3.0.0-beta.
|
|
36
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
37
|
-
"@webex/test-helper-mocha": "3.0.0-beta.
|
|
38
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
39
|
-
"@webex/test-helper-retry": "3.0.0-beta.
|
|
40
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
35
|
+
"@webex/plugin-meetings": "3.0.0-beta.185",
|
|
36
|
+
"@webex/test-helper-chai": "3.0.0-beta.185",
|
|
37
|
+
"@webex/test-helper-mocha": "3.0.0-beta.185",
|
|
38
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.185",
|
|
39
|
+
"@webex/test-helper-retry": "3.0.0-beta.185",
|
|
40
|
+
"@webex/test-helper-test-users": "3.0.0-beta.185",
|
|
41
41
|
"chai": "^4.3.4",
|
|
42
42
|
"chai-as-promised": "^7.1.1",
|
|
43
43
|
"jsdom-global": "3.0.2",
|
|
@@ -46,19 +46,19 @@
|
|
|
46
46
|
"typescript": "^4.7.4"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@webex/common": "3.0.0-beta.
|
|
49
|
+
"@webex/common": "3.0.0-beta.185",
|
|
50
50
|
"@webex/internal-media-core": "1.39.1",
|
|
51
|
-
"@webex/internal-plugin-conversation": "3.0.0-beta.
|
|
52
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
53
|
-
"@webex/internal-plugin-llm": "3.0.0-beta.
|
|
54
|
-
"@webex/internal-plugin-mercury": "3.0.0-beta.
|
|
55
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
56
|
-
"@webex/internal-plugin-support": "3.0.0-beta.
|
|
57
|
-
"@webex/internal-plugin-user": "3.0.0-beta.
|
|
58
|
-
"@webex/media-helpers": "3.0.0-beta.
|
|
59
|
-
"@webex/plugin-people": "3.0.0-beta.
|
|
60
|
-
"@webex/plugin-rooms": "3.0.0-beta.
|
|
61
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
51
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.185",
|
|
52
|
+
"@webex/internal-plugin-device": "3.0.0-beta.185",
|
|
53
|
+
"@webex/internal-plugin-llm": "3.0.0-beta.185",
|
|
54
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.185",
|
|
55
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.185",
|
|
56
|
+
"@webex/internal-plugin-support": "3.0.0-beta.185",
|
|
57
|
+
"@webex/internal-plugin-user": "3.0.0-beta.185",
|
|
58
|
+
"@webex/media-helpers": "3.0.0-beta.185",
|
|
59
|
+
"@webex/plugin-people": "3.0.0-beta.185",
|
|
60
|
+
"@webex/plugin-rooms": "3.0.0-beta.185",
|
|
61
|
+
"@webex/webex-core": "3.0.0-beta.185",
|
|
62
62
|
"ampersand-collection": "^2.0.2",
|
|
63
63
|
"bowser": "^2.11.0",
|
|
64
64
|
"btoa": "^1.2.1",
|
package/src/meeting/util.ts
CHANGED
package/src/member/util.ts
CHANGED
|
@@ -21,6 +21,8 @@ import {
|
|
|
21
21
|
_SEND_RECEIVE_,
|
|
22
22
|
_RECEIVE_ONLY_,
|
|
23
23
|
_CALL_,
|
|
24
|
+
VIDEO,
|
|
25
|
+
AUDIO,
|
|
24
26
|
} from '../constants';
|
|
25
27
|
import ParameterError from '../common/errors/parameter';
|
|
26
28
|
|
|
@@ -152,30 +154,20 @@ MemberUtil.isAudioMuted = (participant: any) => {
|
|
|
152
154
|
if (!participant) {
|
|
153
155
|
throw new ParameterError('Audio could not be processed, participant is undefined.');
|
|
154
156
|
}
|
|
155
|
-
const mutedStatus = MemberUtil.isMuted(participant.status, AUDIO_STATUS);
|
|
156
157
|
|
|
157
|
-
|
|
158
|
-
if (participant.controls.audio.muted) {
|
|
159
|
-
return true;
|
|
160
|
-
}
|
|
161
|
-
if (mutedStatus) {
|
|
162
|
-
return true;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
return false;
|
|
158
|
+
return MemberUtil.isMuted(participant, AUDIO_STATUS, AUDIO);
|
|
167
159
|
};
|
|
168
160
|
|
|
169
161
|
/**
|
|
170
162
|
* @param {Object} participant the locus participant
|
|
171
163
|
* @returns {Boolean}
|
|
172
164
|
*/
|
|
173
|
-
MemberUtil.isVideoMuted = (participant: any) => {
|
|
165
|
+
MemberUtil.isVideoMuted = (participant: any): boolean => {
|
|
174
166
|
if (!participant) {
|
|
175
167
|
throw new ParameterError('Video could not be processed, participant is undefined.');
|
|
176
168
|
}
|
|
177
169
|
|
|
178
|
-
return MemberUtil.isMuted(participant
|
|
170
|
+
return MemberUtil.isMuted(participant, VIDEO_STATUS, VIDEO);
|
|
179
171
|
};
|
|
180
172
|
|
|
181
173
|
/**
|
|
@@ -232,21 +224,28 @@ MemberUtil.isLiveAnnotationSupported = (participant) => {
|
|
|
232
224
|
|
|
233
225
|
/**
|
|
234
226
|
* utility method for audio/video muted status
|
|
235
|
-
* @param {
|
|
236
|
-
* @param {String}
|
|
237
|
-
* @
|
|
227
|
+
* @param {any} participant
|
|
228
|
+
* @param {String} statusAccessor
|
|
229
|
+
* @param {String} controlsAccessor
|
|
230
|
+
* @returns {Boolean | undefined}
|
|
238
231
|
*/
|
|
239
|
-
MemberUtil.isMuted = (
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
if (status[accessor] === _SEND_RECEIVE_) {
|
|
245
|
-
return false;
|
|
246
|
-
}
|
|
232
|
+
MemberUtil.isMuted = (participant: any, statusAccessor: string, controlsAccessor: string) => {
|
|
233
|
+
// check remote mute
|
|
234
|
+
const remoteMute = participant?.controls?.[controlsAccessor]?.muted;
|
|
235
|
+
if (remoteMute === true) {
|
|
236
|
+
return true;
|
|
247
237
|
}
|
|
248
238
|
|
|
249
|
-
|
|
239
|
+
// check local mute
|
|
240
|
+
const localStatus = participant?.status?.[statusAccessor];
|
|
241
|
+
if (localStatus === _RECEIVE_ONLY_) {
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
if (localStatus === _SEND_RECEIVE_) {
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
return remoteMute;
|
|
250
249
|
};
|
|
251
250
|
|
|
252
251
|
/**
|
|
@@ -226,7 +226,7 @@ describe('plugin-meetings', () => {
|
|
|
226
226
|
membersSpy = sinon.spy(MembersImport, 'default');
|
|
227
227
|
meetingRequestSpy = sinon.spy(MeetingRequestImport, 'default');
|
|
228
228
|
|
|
229
|
-
|
|
229
|
+
sinon.stub(TriggerProxy, 'trigger').returns(true);
|
|
230
230
|
Metrics.initialSetup(webex);
|
|
231
231
|
MediaUtil.createMediaStream = sinon.stub().callsFake((tracks) => {
|
|
232
232
|
return {
|
|
@@ -21,6 +21,7 @@ describe('plugin-meetings', () => {
|
|
|
21
21
|
log: sandbox.stub(),
|
|
22
22
|
error: sandbox.stub(),
|
|
23
23
|
warn: sandbox.stub(),
|
|
24
|
+
debug: sandbox.stub(),
|
|
24
25
|
};
|
|
25
26
|
|
|
26
27
|
LoggerConfig.set({
|
|
@@ -42,6 +43,7 @@ describe('plugin-meetings', () => {
|
|
|
42
43
|
meeting.annotaion = {cleanUp: sinon.stub()};
|
|
43
44
|
meeting.getWebexObject = sinon.stub().returns(webex);
|
|
44
45
|
meeting.simultaneousInterpretation = {cleanUp: sinon.stub()};
|
|
46
|
+
meeting.trigger = sinon.stub();
|
|
45
47
|
});
|
|
46
48
|
|
|
47
49
|
afterEach(() => {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {assert} from '@webex/test-helper-chai';
|
|
2
2
|
import MemberUtil from '@webex/plugin-meetings/src/member/util';
|
|
3
|
-
import {
|
|
3
|
+
import {ServerRoles} from '../../../../src/member/types';
|
|
4
|
+
import {_SEND_RECEIVE_, _RECEIVE_ONLY_} from '../../../../src/constants';
|
|
4
5
|
|
|
5
6
|
describe('plugin-meetings', () => {
|
|
6
7
|
describe('isHandRaised', () => {
|
|
@@ -58,12 +59,16 @@ describe('plugin-meetings', () => {
|
|
|
58
59
|
{type: 'PRESENTER', hasRole: true},
|
|
59
60
|
{type: 'COHOST', hasRole: true},
|
|
60
61
|
{type: 'MODERATOR', hasRole: true},
|
|
61
|
-
]
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
};
|
|
65
66
|
|
|
66
|
-
assert.deepEqual(MemberUtil.extractControlRoles(participant), {
|
|
67
|
+
assert.deepEqual(MemberUtil.extractControlRoles(participant), {
|
|
68
|
+
cohost: true,
|
|
69
|
+
moderator: true,
|
|
70
|
+
presenter: true,
|
|
71
|
+
});
|
|
67
72
|
});
|
|
68
73
|
});
|
|
69
74
|
|
|
@@ -72,14 +77,14 @@ describe('plugin-meetings', () => {
|
|
|
72
77
|
const participant = {
|
|
73
78
|
controls: {
|
|
74
79
|
role: {
|
|
75
|
-
roles: [
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
}
|
|
80
|
+
roles: [{type: 'PRESENTER', hasRole: true}],
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
};
|
|
81
84
|
|
|
82
|
-
assert.deepEqual(MemberUtil.getControlsRoles(participant), [
|
|
85
|
+
assert.deepEqual(MemberUtil.getControlsRoles(participant), [
|
|
86
|
+
{type: 'PRESENTER', hasRole: true},
|
|
87
|
+
]);
|
|
83
88
|
});
|
|
84
89
|
});
|
|
85
90
|
|
|
@@ -89,12 +94,10 @@ describe('plugin-meetings', () => {
|
|
|
89
94
|
const participant = {
|
|
90
95
|
controls: {
|
|
91
96
|
role: {
|
|
92
|
-
roles: [
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
}
|
|
97
|
+
roles: [{type: 'PRESENTER', hasRole: true}],
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
};
|
|
98
101
|
|
|
99
102
|
assert.isTrue(MemberUtil.hasRole(participant, ServerRoles.Presenter));
|
|
100
103
|
});
|
|
@@ -103,12 +106,10 @@ describe('plugin-meetings', () => {
|
|
|
103
106
|
const participant = {
|
|
104
107
|
controls: {
|
|
105
108
|
role: {
|
|
106
|
-
roles: [
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
}
|
|
109
|
+
roles: [{type: 'PRESENTER', hasRole: false}],
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
};
|
|
112
113
|
|
|
113
114
|
assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Presenter));
|
|
114
115
|
});
|
|
@@ -117,28 +118,24 @@ describe('plugin-meetings', () => {
|
|
|
117
118
|
const participant = {
|
|
118
119
|
controls: {
|
|
119
120
|
role: {
|
|
120
|
-
roles: [
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
}
|
|
121
|
+
roles: [{}],
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
};
|
|
126
125
|
|
|
127
126
|
assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Presenter));
|
|
128
127
|
});
|
|
129
|
-
})
|
|
128
|
+
});
|
|
130
129
|
|
|
131
130
|
describe('MODERATOR', () => {
|
|
132
131
|
it('getControlsRoles MODERATOR true', () => {
|
|
133
132
|
const participant = {
|
|
134
133
|
controls: {
|
|
135
134
|
role: {
|
|
136
|
-
roles: [
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
}
|
|
135
|
+
roles: [{type: 'MODERATOR', hasRole: true}],
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
};
|
|
142
139
|
|
|
143
140
|
assert.isTrue(MemberUtil.hasRole(participant, ServerRoles.Moderator));
|
|
144
141
|
});
|
|
@@ -147,12 +144,10 @@ describe('plugin-meetings', () => {
|
|
|
147
144
|
const participant = {
|
|
148
145
|
controls: {
|
|
149
146
|
role: {
|
|
150
|
-
roles: [
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
}
|
|
147
|
+
roles: [{type: 'MODERATOR', hasRole: false}],
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
};
|
|
156
151
|
|
|
157
152
|
assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Moderator));
|
|
158
153
|
});
|
|
@@ -161,28 +156,24 @@ describe('plugin-meetings', () => {
|
|
|
161
156
|
const participant = {
|
|
162
157
|
controls: {
|
|
163
158
|
role: {
|
|
164
|
-
roles: [
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
}
|
|
159
|
+
roles: [{}],
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
};
|
|
170
163
|
|
|
171
164
|
assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Moderator));
|
|
172
165
|
});
|
|
173
|
-
})
|
|
166
|
+
});
|
|
174
167
|
|
|
175
168
|
describe('COHOST', () => {
|
|
176
169
|
it('getControlsRoles COHOST true', () => {
|
|
177
170
|
const participant = {
|
|
178
171
|
controls: {
|
|
179
172
|
role: {
|
|
180
|
-
roles: [
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
}
|
|
173
|
+
roles: [{type: 'COHOST', hasRole: true}],
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
};
|
|
186
177
|
|
|
187
178
|
assert.isTrue(MemberUtil.hasRole(participant, ServerRoles.Cohost));
|
|
188
179
|
});
|
|
@@ -191,12 +182,10 @@ describe('plugin-meetings', () => {
|
|
|
191
182
|
const participant = {
|
|
192
183
|
controls: {
|
|
193
184
|
role: {
|
|
194
|
-
roles: [
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
}
|
|
185
|
+
roles: [{type: 'COHOST', hasRole: false}],
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
};
|
|
200
189
|
|
|
201
190
|
assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Cohost));
|
|
202
191
|
});
|
|
@@ -205,16 +194,14 @@ describe('plugin-meetings', () => {
|
|
|
205
194
|
const participant = {
|
|
206
195
|
controls: {
|
|
207
196
|
role: {
|
|
208
|
-
roles: [
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
}
|
|
213
|
-
}
|
|
197
|
+
roles: [{}],
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
};
|
|
214
201
|
|
|
215
202
|
assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Cohost));
|
|
216
203
|
});
|
|
217
|
-
})
|
|
204
|
+
});
|
|
218
205
|
});
|
|
219
206
|
|
|
220
207
|
describe('MemberUtil.is<Role>', () => {
|
|
@@ -223,12 +210,10 @@ describe('plugin-meetings', () => {
|
|
|
223
210
|
const participant = {
|
|
224
211
|
controls: {
|
|
225
212
|
role: {
|
|
226
|
-
roles: [
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
}
|
|
213
|
+
roles: [{type: 'PRESENTER', hasRole: true}],
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
};
|
|
232
217
|
|
|
233
218
|
assert.isTrue(MemberUtil.hasPresenter(participant, ServerRoles.Presenter));
|
|
234
219
|
});
|
|
@@ -237,12 +222,10 @@ describe('plugin-meetings', () => {
|
|
|
237
222
|
const participant = {
|
|
238
223
|
controls: {
|
|
239
224
|
role: {
|
|
240
|
-
roles: [
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
}
|
|
245
|
-
}
|
|
225
|
+
roles: [{type: 'PRESENTER', hasRole: false}],
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
};
|
|
246
229
|
|
|
247
230
|
assert.isFalse(MemberUtil.hasPresenter(participant));
|
|
248
231
|
});
|
|
@@ -251,28 +234,24 @@ describe('plugin-meetings', () => {
|
|
|
251
234
|
const participant = {
|
|
252
235
|
controls: {
|
|
253
236
|
role: {
|
|
254
|
-
roles: [
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
}
|
|
259
|
-
}
|
|
237
|
+
roles: [{}],
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
};
|
|
260
241
|
|
|
261
242
|
assert.isFalse(MemberUtil.hasPresenter(participant));
|
|
262
243
|
});
|
|
263
|
-
})
|
|
244
|
+
});
|
|
264
245
|
|
|
265
246
|
describe('MODERATOR', () => {
|
|
266
247
|
it('getControlsRoles MODERATOR true', () => {
|
|
267
248
|
const participant = {
|
|
268
249
|
controls: {
|
|
269
250
|
role: {
|
|
270
|
-
roles: [
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
}
|
|
275
|
-
}
|
|
251
|
+
roles: [{type: 'MODERATOR', hasRole: true}],
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
};
|
|
276
255
|
|
|
277
256
|
assert.isTrue(MemberUtil.hasModerator(participant));
|
|
278
257
|
});
|
|
@@ -281,12 +260,10 @@ describe('plugin-meetings', () => {
|
|
|
281
260
|
const participant = {
|
|
282
261
|
controls: {
|
|
283
262
|
role: {
|
|
284
|
-
roles: [
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
}
|
|
289
|
-
}
|
|
263
|
+
roles: [{type: 'MODERATOR', hasRole: false}],
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
};
|
|
290
267
|
|
|
291
268
|
assert.isFalse(MemberUtil.hasModerator(participant));
|
|
292
269
|
});
|
|
@@ -295,28 +272,24 @@ describe('plugin-meetings', () => {
|
|
|
295
272
|
const participant = {
|
|
296
273
|
controls: {
|
|
297
274
|
role: {
|
|
298
|
-
roles: [
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
}
|
|
303
|
-
}
|
|
275
|
+
roles: [{}],
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
};
|
|
304
279
|
|
|
305
280
|
assert.isFalse(MemberUtil.hasModerator(participant));
|
|
306
281
|
});
|
|
307
|
-
})
|
|
282
|
+
});
|
|
308
283
|
|
|
309
284
|
describe('COHOST', () => {
|
|
310
285
|
it('getControlsRoles COHOST true', () => {
|
|
311
286
|
const participant = {
|
|
312
287
|
controls: {
|
|
313
288
|
role: {
|
|
314
|
-
roles: [
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
}
|
|
319
|
-
}
|
|
289
|
+
roles: [{type: 'COHOST', hasRole: true}],
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
};
|
|
320
293
|
|
|
321
294
|
assert.isTrue(MemberUtil.hasCohost(participant));
|
|
322
295
|
});
|
|
@@ -325,12 +298,10 @@ describe('plugin-meetings', () => {
|
|
|
325
298
|
const participant = {
|
|
326
299
|
controls: {
|
|
327
300
|
role: {
|
|
328
|
-
roles: [
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
}
|
|
333
|
-
}
|
|
301
|
+
roles: [{type: 'COHOST', hasRole: false}],
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
};
|
|
334
305
|
|
|
335
306
|
assert.isFalse(MemberUtil.hasCohost(participant));
|
|
336
307
|
});
|
|
@@ -339,16 +310,14 @@ describe('plugin-meetings', () => {
|
|
|
339
310
|
const participant = {
|
|
340
311
|
controls: {
|
|
341
312
|
role: {
|
|
342
|
-
roles: [
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
}
|
|
347
|
-
}
|
|
313
|
+
roles: [{}],
|
|
314
|
+
},
|
|
315
|
+
},
|
|
316
|
+
};
|
|
348
317
|
|
|
349
318
|
assert.isFalse(MemberUtil.hasCohost(participant));
|
|
350
319
|
});
|
|
351
|
-
})
|
|
320
|
+
});
|
|
352
321
|
});
|
|
353
322
|
|
|
354
323
|
describe('MemberUtil.isBreakoutsSupported', () => {
|
|
@@ -360,7 +329,7 @@ describe('plugin-meetings', () => {
|
|
|
360
329
|
|
|
361
330
|
it('returns true when hand breakouts are supported', () => {
|
|
362
331
|
const participant = {
|
|
363
|
-
doesNotSupportBreakouts: false
|
|
332
|
+
doesNotSupportBreakouts: false,
|
|
364
333
|
};
|
|
365
334
|
|
|
366
335
|
assert.isTrue(MemberUtil.isBreakoutsSupported(participant));
|
|
@@ -368,7 +337,7 @@ describe('plugin-meetings', () => {
|
|
|
368
337
|
|
|
369
338
|
it('returns false when hand breakouts are not supported', () => {
|
|
370
339
|
const participant = {
|
|
371
|
-
doesNotSupportBreakouts: true
|
|
340
|
+
doesNotSupportBreakouts: true,
|
|
372
341
|
};
|
|
373
342
|
|
|
374
343
|
assert.isFalse(MemberUtil.isBreakoutsSupported(participant));
|
|
@@ -384,7 +353,7 @@ describe('plugin-meetings', () => {
|
|
|
384
353
|
|
|
385
354
|
it('returns true when hand live annotation are supported', () => {
|
|
386
355
|
const participant = {
|
|
387
|
-
annotatorAssignmentNotAllowed: false
|
|
356
|
+
annotatorAssignmentNotAllowed: false,
|
|
388
357
|
};
|
|
389
358
|
|
|
390
359
|
assert.isTrue(MemberUtil.isLiveAnnotationSupported(participant));
|
|
@@ -392,7 +361,7 @@ describe('plugin-meetings', () => {
|
|
|
392
361
|
|
|
393
362
|
it('returns false when hand live annotation are not supported', () => {
|
|
394
363
|
const participant = {
|
|
395
|
-
annotatorAssignmentNotAllowed: true
|
|
364
|
+
annotatorAssignmentNotAllowed: true,
|
|
396
365
|
};
|
|
397
366
|
|
|
398
367
|
assert.isFalse(MemberUtil.isLiveAnnotationSupported(participant));
|
|
@@ -408,7 +377,7 @@ describe('plugin-meetings', () => {
|
|
|
408
377
|
|
|
409
378
|
it('returns true when hand SiInterpreter are supported', () => {
|
|
410
379
|
const participant = {
|
|
411
|
-
doesNotSupportSiInterpreter: false
|
|
380
|
+
doesNotSupportSiInterpreter: false,
|
|
412
381
|
};
|
|
413
382
|
|
|
414
383
|
assert.isTrue(MemberUtil.isInterpretationSupported(participant));
|
|
@@ -416,12 +385,105 @@ describe('plugin-meetings', () => {
|
|
|
416
385
|
|
|
417
386
|
it('returns false when hand SiInterpreter are not supported', () => {
|
|
418
387
|
const participant = {
|
|
419
|
-
doesNotSupportSiInterpreter: true
|
|
388
|
+
doesNotSupportSiInterpreter: true,
|
|
420
389
|
};
|
|
421
390
|
|
|
422
391
|
assert.isFalse(MemberUtil.isInterpretationSupported(participant));
|
|
423
392
|
});
|
|
424
393
|
});
|
|
394
|
+
|
|
395
|
+
const getMuteStatus = (muted) => {
|
|
396
|
+
if (muted === undefined) {
|
|
397
|
+
return undefined;
|
|
398
|
+
}
|
|
399
|
+
return muted ? _RECEIVE_ONLY_ : _SEND_RECEIVE_;
|
|
400
|
+
};
|
|
401
|
+
|
|
402
|
+
describe('MemberUtil.isAudioMuted', () => {
|
|
403
|
+
it('throws error when there is no participant', () => {
|
|
404
|
+
assert.throws(() => {
|
|
405
|
+
MemberUtil.isAudioMuted();
|
|
406
|
+
}, 'Audio could not be processed, participant is undefined.');
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
// NOTE: participant.controls.audio.muted represents remote video mute
|
|
410
|
+
// participant.status.audioStatus represents local video mute
|
|
411
|
+
|
|
412
|
+
const testResult = (remoteMuted, localMuted, expected) => {
|
|
413
|
+
const participant = {
|
|
414
|
+
controls: {audio: {muted: remoteMuted}},
|
|
415
|
+
status: {audioStatus: getMuteStatus(localMuted)},
|
|
416
|
+
};
|
|
417
|
+
|
|
418
|
+
assert.equal(MemberUtil.isAudioMuted(participant), expected);
|
|
419
|
+
};
|
|
420
|
+
|
|
421
|
+
it('returns true when remote is muted and local is not', () => {
|
|
422
|
+
testResult(true, false, true);
|
|
423
|
+
});
|
|
424
|
+
|
|
425
|
+
it('returns true when remote is not muted and local is muted', () => {
|
|
426
|
+
testResult(false, true, true);
|
|
427
|
+
});
|
|
428
|
+
|
|
429
|
+
it('returns false when both are not muted', () => {
|
|
430
|
+
testResult(false, false, false);
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
it('returns undefined when both are undefined', () => {
|
|
434
|
+
testResult(undefined, undefined, undefined);
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
it('returns defined status when the other is undefined', () => {
|
|
438
|
+
testResult(undefined, true, true);
|
|
439
|
+
testResult(undefined, false, false);
|
|
440
|
+
testResult(true, undefined, true);
|
|
441
|
+
testResult(false, undefined, false);
|
|
442
|
+
});
|
|
443
|
+
});
|
|
444
|
+
|
|
445
|
+
describe('MemberUtil.isVideoMuted', () => {
|
|
446
|
+
it('throws error when there is no participant', () => {
|
|
447
|
+
assert.throws(() => {
|
|
448
|
+
MemberUtil.isVideoMuted();
|
|
449
|
+
}, 'Video could not be processed, participant is undefined.');
|
|
450
|
+
});
|
|
451
|
+
|
|
452
|
+
// NOTE: participant.controls.video.muted represents remote video mute
|
|
453
|
+
// participant.status.videoStatus represents local video mute
|
|
454
|
+
|
|
455
|
+
const testResult = (remoteMuted, localMuted, expected) => {
|
|
456
|
+
const participant = {
|
|
457
|
+
controls: {video: {muted: remoteMuted}},
|
|
458
|
+
status: {videoStatus: getMuteStatus(localMuted)},
|
|
459
|
+
};
|
|
460
|
+
|
|
461
|
+
assert.equal(MemberUtil.isVideoMuted(participant), expected);
|
|
462
|
+
};
|
|
463
|
+
|
|
464
|
+
it('returns true when remote is muted and local is not', () => {
|
|
465
|
+
testResult(true, false, true);
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
it('returns true when remote is not muted and local is muted', () => {
|
|
469
|
+
testResult(false, true, true);
|
|
470
|
+
});
|
|
471
|
+
|
|
472
|
+
it('returns false when both are not muted', () => {
|
|
473
|
+
testResult(false, false, false);
|
|
474
|
+
});
|
|
475
|
+
|
|
476
|
+
it('returns undefined when both are undefined', () => {
|
|
477
|
+
testResult(undefined, undefined, undefined);
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
it('returns defined status when the other is undefined', () => {
|
|
481
|
+
testResult(undefined, true, true);
|
|
482
|
+
testResult(undefined, false, false);
|
|
483
|
+
testResult(true, undefined, true);
|
|
484
|
+
testResult(false, undefined, false);
|
|
485
|
+
});
|
|
486
|
+
});
|
|
425
487
|
});
|
|
426
488
|
|
|
427
489
|
describe('extractMediaStatus', () => {
|
|
@@ -232,7 +232,7 @@ describe('plugin-meetings', () => {
|
|
|
232
232
|
it('should send clear event if clear members', () => {
|
|
233
233
|
const members = createMembers({url: url1});
|
|
234
234
|
members.membersCollection.setAll(fakeMembersCollection);
|
|
235
|
-
|
|
235
|
+
sinon.stub(Trigger, 'trigger');
|
|
236
236
|
members.clearMembers();
|
|
237
237
|
assert.deepEqual(members.membersCollection.members, {});
|
|
238
238
|
assert.calledWith(
|
|
@@ -250,7 +250,6 @@ describe('plugin-meetings', () => {
|
|
|
250
250
|
describe('#locusParticipantsUpdate', () => {
|
|
251
251
|
it('should send member update event with session info', () => {
|
|
252
252
|
const members = createMembers({url: url1});
|
|
253
|
-
Trigger.trigger = sinon.stub();
|
|
254
253
|
const fakePayload = {
|
|
255
254
|
participants: {
|
|
256
255
|
forEach: sinon.stub(),
|