@webex/plugin-meetings 3.0.0-beta.144 → 3.0.0-beta.145
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +2 -0
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +1 -0
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +3 -0
- package/dist/meeting/util.js.map +1 -1
- package/dist/types/constants.d.ts +1 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
- package/dist/types/meeting/util.d.ts +1 -0
- package/package.json +19 -19
- package/src/constants.ts +1 -0
- package/src/meeting/in-meeting-actions.ts +4 -0
- package/src/meeting/index.ts +3 -0
- package/src/meeting/util.ts +2 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
- package/test/unit/spec/meeting/utils.js +7 -0
package/dist/meeting/util.js
CHANGED
|
@@ -349,6 +349,9 @@ var MeetingUtil = {
|
|
|
349
349
|
canManageBreakout: function canManageBreakout(displayHints) {
|
|
350
350
|
return displayHints.includes(_constants.DISPLAY_HINTS.BREAKOUT_MANAGEMENT);
|
|
351
351
|
},
|
|
352
|
+
canBroadcastMessageToBreakout: function canBroadcastMessageToBreakout(displayHints) {
|
|
353
|
+
return displayHints.includes(_constants.DISPLAY_HINTS.BROADCAST_MESSAGE_TO_BREAKOUT);
|
|
354
|
+
},
|
|
352
355
|
isSuppressBreakoutSupport: function isSuppressBreakoutSupport(displayHints) {
|
|
353
356
|
return displayHints.includes(_constants.DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT);
|
|
354
357
|
},
|
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","reject","ParameterError","locusMediaRequest","Metrics","postEvent","event","eventType","MEDIA_REQUEST","send","type","selfUrl","sequence","locusInfo","muteOptions","then","MEDIA_RESPONSE","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","options","LOCUS_JOIN_REQUEST","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","deviceUrl","correlationId","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","isMultistream","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","res","LOCUS_JOIN_RESPONSE","data","trigger","LOCI_UPDATE","trackingId","headers","trackingid","cleanUp","breakouts","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeLocalStream","closeLocalShare","closeRemoteTracks","closePeerConnections","unsetLocalVideoTrack","unsetLocalShareTrack","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","PIN_COLLECTED","setLocus","PIN_PROMPT","IntentToJoinError","JoinMeetingError","validateOptions","sendVideo","sendAudio","sendShare","localStream","localShare","getTrack","videoTrack","audioTrack","stream","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","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"],"sources":["util.ts"],"sourcesContent":["import {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\n\nimport {cloneDeep} from 'lodash';\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport Metrics from '../metrics';\nimport {eventType, trigger} from '../metrics/config';\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} 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';\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 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 Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});\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 Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});\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\n Metrics.postEvent({event: eventType.LOCUS_JOIN_REQUEST, meeting});\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 Metrics.postEvent({\n event: eventType.LOCUS_JOIN_RESPONSE,\n meeting,\n data: {\n trigger: trigger.LOCI_UPDATE,\n locus: res.body.locus,\n mediaConnections: res.body.mediaConnections,\n trackingId: res.headers.trackingid,\n },\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n },\n\n cleanUp: (meeting) => {\n meeting.breakouts.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.closeLocalStream())\n .then(() => meeting.closeLocalShare())\n .then(() => meeting.closeRemoteTracks())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.unsetLocalVideoTrack();\n meeting.unsetLocalShareTrack();\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 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 Metrics.postEvent({\n event: eventType.PIN_COLLECTED,\n meeting,\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 Metrics.postEvent({\n event: eventType.PIN_PROMPT,\n meeting,\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 validateOptions: (options) => {\n const {sendVideo, sendAudio, sendShare, localStream, localShare} = options;\n\n if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid video streams'));\n }\n\n if (sendAudio && !MeetingUtil.getTrack(localStream).audioTrack) {\n return Promise.reject(new ParameterError('please pass valid audio streams'));\n }\n\n if (sendShare && !MeetingUtil.getTrack(localShare).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid share streams'));\n }\n\n return Promise.resolve();\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\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 | null) => {\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 | null) => {\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\nexport default MeetingUtil;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AAA0D;AAAA;AAE1D,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,IAAI,CAACF,OAAO,EAAE;MACZ,OAAO,iBAAQG,MAAM,CAAC,IAAIC,kBAAc,CAAC,4BAA4B,CAAC,CAAC;IACzE;IAEA,IAAI,CAACJ,OAAO,CAACK,iBAAiB,EAAE;MAC9B,OAAO,iBAAQF,MAAM,CACnB,IAAIC,kBAAc,CAChB,4EAA4E,CAC7E,CACF;IACH;IAEAE,gBAAO,CAACC,SAAS,CAAC;MAACC,KAAK,EAAEC,iBAAS,CAACC,aAAa;MAAEV,OAAO,EAAPA;IAAO,CAAC,CAAC;IAE5D,OAAOA,OAAO,CAACK,iBAAiB,CAC7BM,IAAI,CAAC;MACJC,IAAI,EAAE,WAAW;MACjBC,OAAO,EAAEb,OAAO,CAACa,OAAO;MACxBf,OAAO,EAAEE,OAAO,CAACF,OAAO;MACxBgB,QAAQ,EAAEd,OAAO,CAACe,SAAS,CAACD,QAAQ;MACpCE,WAAW,EAAE;QACXf,UAAU,EAAVA,UAAU;QACVC,UAAU,EAAVA;MACF;IACF,CAAC,CAAC,CACDe,IAAI,CAAC,UAAClC,QAAQ,EAAK;MAAA;MAClBuB,gBAAO,CAACC,SAAS,CAAC;QAACC,KAAK,EAAEC,iBAAS,CAACS,cAAc;QAAElB,OAAO,EAAPA;MAAO,CAAC,CAAC;MAE7D,OAAOjB,QAAQ,aAARA,QAAQ,yCAARA,QAAQ,CAAEG,IAAI,mDAAd,eAAgBD,KAAK;IAC9B,CAAC,CAAC;EACN,CAAC;EAEDkC,QAAQ,EAAE,kBAACC,IAAI;IAAA,OAAKA,IAAI,IAAIA,IAAI,CAACC,KAAK;EAAA;EAEtCC,WAAW,EAAE,qBAACD,KAAK,EAAE5B,MAAM;IAAA,OAAK4B,KAAK,KAAK5B,MAAM;EAAA;EAEhD8B,YAAY,EAAE,sBAACC,GAAG;IAAA;IAAA,OAAK,CAAAA,GAAG,aAAHA,GAAG,oCAAHA,GAAG,CAAEtC,IAAI,8CAAT,UAAWuC,SAAS,KAAIC,yBAAc,CAACC,QAAQ,CAACH,GAAG,CAACtC,IAAI,CAACuC,SAAS,CAAC;EAAA;EAE1FG,WAAW,EAAE,qBAAC5B,OAAO,EAAE6B,OAAO,EAAK;IACjC,IAAI,CAAC7B,OAAO,EAAE;MACZ,OAAO,iBAAQG,MAAM,CAAC,IAAIC,kBAAc,CAAC,4BAA4B,CAAC,CAAC;IACzE;IAEAE,gBAAO,CAACC,SAAS,CAAC;MAACC,KAAK,EAAEC,iBAAS,CAACqB,kBAAkB;MAAE9B,OAAO,EAAPA;IAAO,CAAC,CAAC;;IAEjE;IACA;IACA;IACA,OAAOA,OAAO,CAAC+B,cAAc,CAC1BH,WAAW,CAAC;MACXI,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,EAAET,OAAO,CAACS,WAAW;MAChCC,eAAe,EAAEvC,OAAO,CAACuC,eAAe;MACxCC,UAAU,EAAEX,OAAO,CAACW,UAAU,IAAI,IAAI;MACtCC,SAAS,EAAEZ,OAAO,CAACY,SAAS;MAC5BC,GAAG,EAAEb,OAAO,CAACa,GAAG;MAChBC,cAAc,EAAEd,OAAO,CAACc,cAAc;MACtCC,iBAAiB,EAAE,CAAC5C,OAAO,CAAC6C,aAAa;MACzCC,kBAAkB,EAAEjB,OAAO,CAACiB,kBAAkB;MAC9CC,kBAAkB,EAAElB,OAAO,CAACkB,kBAAkB;MAC9CC,MAAM,EAAEnB,OAAO,CAACmB,MAAM;MACtBC,kBAAkB,EAAEpB,OAAO,CAACoB,kBAAkB;MAC9CC,uBAAuB,EAAErB,OAAO,CAACqB;IACnC,CAAC,CAAC,CACDjC,IAAI,CAAC,UAACkC,GAAG,EAAK;MACb7C,gBAAO,CAACC,SAAS,CAAC;QAChBC,KAAK,EAAEC,iBAAS,CAAC2C,mBAAmB;QACpCpD,OAAO,EAAPA,OAAO;QACPqD,IAAI,EAAE;UACJC,OAAO,EAAEA,eAAO,CAACC,WAAW;UAC5BtE,KAAK,EAAEkE,GAAG,CAACjE,IAAI,CAACD,KAAK;UACrBE,gBAAgB,EAAEgE,GAAG,CAACjE,IAAI,CAACC,gBAAgB;UAC3CqE,UAAU,EAAEL,GAAG,CAACM,OAAO,CAACC;QAC1B;MACF,CAAC,CAAC;MAEF,OAAO7E,WAAW,CAACC,cAAc,CAACqE,GAAG,CAAC;IACxC,CAAC,CAAC;EACN,CAAC;EAEDQ,OAAO,EAAE,iBAAC3D,OAAO,EAAK;IACpBA,OAAO,CAAC4D,SAAS,CAACD,OAAO,EAAE;;IAE3B;IACA,IAAME,iBAAiB,GAAG7D,OAAO,CAAC8D,aAAa,GAC3C9D,OAAO,CAAC8D,aAAa,CAACC,YAAY,EAAE,GACpC,iBAAQC,OAAO,EAAE;IAErB,OAAOH,iBAAiB,CACrB5C,IAAI,CAAC;MAAA,OAAMjB,OAAO,CAACiE,gBAAgB,EAAE;IAAA,EAAC,CACtChD,IAAI,CAAC;MAAA,OAAMjB,OAAO,CAACkE,eAAe,EAAE;IAAA,EAAC,CACrCjD,IAAI,CAAC;MAAA,OAAMjB,OAAO,CAACmE,iBAAiB,EAAE;IAAA,EAAC,CACvClD,IAAI,CAAC;MAAA,OAAMjB,OAAO,CAACoE,oBAAoB,EAAE;IAAA,EAAC,CAC1CnD,IAAI,CAAC,YAAM;MACVjB,OAAO,CAACqE,oBAAoB,EAAE;MAC9BrE,OAAO,CAACsE,oBAAoB,EAAE;MAC9BtE,OAAO,CAACuE,iBAAiB,EAAE;MAC3BvE,OAAO,CAACwE,oBAAoB,EAAE;MAC9BxE,OAAO,CAACyE,mBAAmB,CAACd,OAAO,EAAE;IACvC,CAAC,CAAC,CACD1C,IAAI,CAAC;MAAA,OAAMjB,OAAO,CAAC0E,aAAa,EAAE;IAAA,EAAC,CACnCzD,IAAI,CAAC;MAAA,OAAMjB,OAAO,CAAC2E,mBAAmB,EAAE;IAAA,EAAC;EAC9C,CAAC;EAEDC,oBAAoB,EAAE,8BAAC5E,OAAO,EAAE6E,QAAQ,EAAK;IAC3C,IAAI7E,OAAO,CAAC8E,YAAY,KAAKC,qBAAU,CAACC,QAAQ,EAAE;MAChD,OAAO,iBAAQ7E,MAAM,CAAC,IAAI8E,kCAAqB,EAAE,CAAC;IACpD;IAEA,IAAMpD,OAAO,GAAG;MACdzC,QAAQ,EAAEY,OAAO,CAACZ,QAAQ;MAC1BK,MAAM,EAAEO,OAAO,CAACP,MAAM;MACtB4C,aAAa,EAAErC,OAAO,CAACqC,aAAa;MACpCwC,QAAQ,EAARA;IACF,CAAC;IAED,OAAO7E,OAAO,CAAC+B,cAAc,CAAC6C,oBAAoB,CAAC/C,OAAO,CAAC,CAACqD,KAAK,CAAC,UAAC1D,GAAG,EAAK;MACzE2D,oBAAW,CAACC,MAAM,CAACC,KAAK,6GAC+ErF,OAAO,CAACL,EAAE,sBAAY6B,GAAG,EAC/H;MAED,OAAO,iBAAQrB,MAAM,CAACqB,GAAG,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC;EAED;EACA;EACA;EACA;EACA8D,YAAY,EAAE,sBAACtF,OAAO,EAAwB;IAAA,IAAtB6B,OAAY,uEAAG,CAAC,CAAC;IACvC,IAAI7B,OAAO,CAAC8E,YAAY,KAAKC,qBAAU,CAACC,QAAQ,EAAE;MAChD;MACA,OAAO,iBAAQ7E,MAAM,CAAC,IAAI8E,kCAAqB,EAAE,CAAC;IACpD;IAEA,IAAIpG,WAAW,CAAC0G,iBAAiB,CAACvF,OAAO,CAACe,SAAS,CAAC,EAAE;MACpD,OAAO,iBAAQZ,MAAM,CAAC,IAAIqF,+BAAkB,EAAE,CAAC;IACjD;IAEA,IAAMC,cAAc,GAAG;MACrBrG,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,IAAMsD,YAAY,mCAAOD,cAAc,GAAK5D,OAAO,CAAC;IAEpD,OAAO7B,OAAO,CAAC+B,cAAc,CAC1BuD,YAAY,CAACI,YAAY,CAAC,CAC1BzE,IAAI,CAAC,YAAM;MACV,IAAIY,OAAO,CAAC8D,WAAW,EAAE;QACvB,OAAO,iBAAQ3B,OAAO,EAAE;MAC1B;MAEA,OAAOnF,WAAW,CAAC8E,OAAO,CAAC3D,OAAO,CAAC;IACrC,CAAC,CAAC,CACDkF,KAAK,CAAC,UAAC1D,GAAG,EAAK;MACd;MACA;MACA;MACA2D,oBAAW,CAACC,MAAM,CAACC,KAAK,sGACwErF,OAAO,CAACL,EAAE,sBAAY6B,GAAG,EACxH;MAED,OAAO,iBAAQrB,MAAM,CAACqB,GAAG,CAAC;IAC5B,CAAC,CAAC;EACN,CAAC;EACDoE,cAAc,EAAE,wBAAC5F,OAAO,EAAE6F,MAAM;IAAA,OAC9B7F,OAAO,CAAC+B,cAAc,CAAC6D,cAAc,CAAC;MACpCxG,QAAQ,EAAEY,OAAO,CAACZ,QAAQ;MAC1BgD,SAAS,EAAEpC,OAAO,CAACoC,SAAS;MAC5ByD,MAAM,EAANA;IACF,CAAC,CAAC;EAAA;EAEJN,iBAAiB,EAAE,2BAACxE,SAAS;IAAA;IAAA,OAAK,0BAAAA,SAAS,CAAC+E,WAAW,oFAArB,sBAAuBpG,IAAI,2DAA3B,uBAA6BqG,KAAK,MAAKC,iBAAM;EAAA;EAE/EC,iBAAiB,EAAE,2BAAClF,SAAS;IAAA;IAAA,OAAK,2BAAAA,SAAS,CAAC+E,WAAW,qFAArB,uBAAuBpG,IAAI,2DAA3B,uBAA6BqG,KAAK,MAAKG,iBAAM;EAAA;EAE/EC,mBAAmB,EAAE,6BAACpF,SAAS;IAAA;IAAA,OAAK,2BAAAA,SAAS,CAAC+E,WAAW,qFAArB,uBAAuBpG,IAAI,2DAA3B,uBAA6BqG,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,4BAAC1G,OAAO,EAAwB;IAAA,IAAtB6B,OAAY,uEAAG,CAAC,CAAC;IAC7C7B,OAAO,CAACwC,UAAU,GAAGxC,OAAO,CAACwC,UAAU,IAAIX,OAAO,CAACW,UAAU;IAE7D,IAAIxC,OAAO,CAAC2G,eAAe,EAAE;MAC3B,OAAO,iBAAQxG,MAAM,CAAC,IAAIyG,qBAAY,EAAE,CAAC;IAC3C;IACA,IAAI5G,OAAO,CAAC6G,cAAc,KAAKC,0BAAe,CAACC,QAAQ,EAAE;MACvD,OAAO,iBAAQ5G,MAAM,CAAC,IAAI6G,sBAAa,EAAE,CAAC;IAC5C;IAEA,IAAInF,OAAO,CAACa,GAAG,EAAE;MACfpC,gBAAO,CAACC,SAAS,CAAC;QAChBC,KAAK,EAAEC,iBAAS,CAACwG,aAAa;QAC9BjH,OAAO,EAAPA;MACF,CAAC,CAAC;IACJ;;IAEA;IACA,OAAOnB,WAAW,CAAC+C,WAAW,CAAC5B,OAAO,EAAE6B,OAAO,CAAC,CAC7CZ,IAAI,CAAC,UAAClC,QAAQ,EAAK;MAClBiB,OAAO,CAACkH,QAAQ,CAACnI,QAAQ,CAAC;MAE1B,OAAO,iBAAQiF,OAAO,CAACjF,QAAQ,CAAC;IAClC,CAAC,CAAC,CACDmG,KAAK,CAAC,UAAC1D,GAAG,EAAK;MACd;MACA,IAAI3C,WAAW,CAAC0C,YAAY,CAACC,GAAG,CAAC,EAAE;QACjClB,gBAAO,CAACC,SAAS,CAAC;UAChBC,KAAK,EAAEC,iBAAS,CAAC0G,UAAU;UAC3BnH,OAAO,EAAPA;QACF,CAAC,CAAC;;QAEF;QACA;QACA,OAAO,iBAAQG,MAAM,CAAC,IAAIiH,qBAAiB,CAAC,uBAAuB,EAAE5F,GAAG,CAAC,CAAC;MAC5E;MACA2D,oBAAW,CAACC,MAAM,CAACC,KAAK,CACtB,8DAA8D,EAC9D7D,GAAG,CACJ;MAED,OAAO,iBAAQrB,MAAM,CAAC,IAAIkH,oBAAgB,CAACxF,OAAO,EAAE,uBAAuB,EAAEL,GAAG,CAAC,CAAC;IACpF,CAAC,CAAC;EACN,CAAC;EAED8F,eAAe,EAAE,yBAACzF,OAAO,EAAK;IAC5B,IAAO0F,SAAS,GAAmD1F,OAAO,CAAnE0F,SAAS;MAAEC,SAAS,GAAwC3F,OAAO,CAAxD2F,SAAS;MAAEC,SAAS,GAA6B5F,OAAO,CAA7C4F,SAAS;MAAEC,WAAW,GAAgB7F,OAAO,CAAlC6F,WAAW;MAAEC,UAAU,GAAI9F,OAAO,CAArB8F,UAAU;IAE/D,IAAIJ,SAAS,IAAI,CAAC1I,WAAW,CAAC+I,QAAQ,CAACF,WAAW,CAAC,CAACG,UAAU,EAAE;MAC9D,OAAO,iBAAQ1H,MAAM,CAAC,IAAIC,kBAAc,CAAC,iCAAiC,CAAC,CAAC;IAC9E;IAEA,IAAIoH,SAAS,IAAI,CAAC3I,WAAW,CAAC+I,QAAQ,CAACF,WAAW,CAAC,CAACI,UAAU,EAAE;MAC9D,OAAO,iBAAQ3H,MAAM,CAAC,IAAIC,kBAAc,CAAC,iCAAiC,CAAC,CAAC;IAC9E;IAEA,IAAIqH,SAAS,IAAI,CAAC5I,WAAW,CAAC+I,QAAQ,CAACD,UAAU,CAAC,CAACE,UAAU,EAAE;MAC7D,OAAO,iBAAQ1H,MAAM,CAAC,IAAIC,kBAAc,CAAC,iCAAiC,CAAC,CAAC;IAC9E;IAEA,OAAO,iBAAQ4D,OAAO,EAAE;EAC1B,CAAC;EAED4D,QAAQ,EAAE,kBAACG,MAAM,EAAK;IACpB,IAAID,UAAU,GAAG,IAAI;IACrB,IAAID,UAAU,GAAG,IAAI;IACrB,IAAIG,WAAW,GAAG,IAAI;IACtB,IAAIC,WAAW,GAAG,IAAI;IAEtB,IAAI,CAACF,MAAM,EAAE;MACX,OAAO;QAACD,UAAU,EAAE,IAAI;QAAED,UAAU,EAAE;MAAI,CAAC;IAC7C;IACA,IAAIE,MAAM,CAACG,cAAc,EAAE;MACzBF,WAAW,GAAGD,MAAM,CAACG,cAAc,EAAE;IACvC;IACA,IAAIH,MAAM,CAACI,cAAc,EAAE;MACzBF,WAAW,GAAGF,MAAM,CAACI,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;MAAzBJ,UAAU;IACb;IAEA,OAAO;MAACC,UAAU,EAAVA,UAAU;MAAED,UAAU,EAAVA;IAAU,CAAC;EACjC,CAAC;EAEDQ,yBAAyB,EAAE,mCAACtH,SAAS;IAAA,OACnCA,SAAS,IACTA,SAAS,CAAC+E,WAAW,IACrB/E,SAAS,CAAC+E,WAAW,CAAC1E,IAAI,IAC1BL,SAAS,CAAC+E,WAAW,CAAC1E,IAAI,IAC1BL,SAAS,CAAC+E,WAAW,CAAC1E,IAAI,CAACqB,SAAS;EAAA;EAEtC6F,sBAAsB,EAAE,gCAACvH,SAAS;IAAA,OAChCA,SAAS,IACTA,SAAS,CAAC+E,WAAW,IACrB/E,SAAS,CAAC+E,WAAW,CAAC1E,IAAI,IAC1BL,SAAS,CAAC+E,WAAW,CAAC1E,IAAI,IAC1BL,SAAS,CAAC+E,WAAW,CAAC1E,IAAI,CAACmH,MAAM;EAAA;EAEnCC,gCAAgC,EAAE,0CAACzH,SAAS;IAAA;IAAA,OAC1C,CAAAA,SAAS,aAATA,SAAS,iDAATA,SAAS,CAAE+E,WAAW,qFAAtB,uBAAwB1E,IAAI,2DAA5B,uBAA8BqH,gBAAgB,KAAI,EAAE;EAAA;EAEtDC,wBAAwB,EAAE,kCAACC,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACC,SAAS,CAAC;EAAA;EAE1FC,mBAAmB,EAAE,6BAACH,YAAY;IAAA,OAChCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACG,sBAAsB,CAAC;EAAA;EAE7DC,WAAW,EAAE,qBAACL,YAAY;IAAA,OACxBA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACK,iBAAiB,CAAC,IACtDN,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACM,oBAAoB,CAAC;EAAA;EAE3DC,aAAa,EAAE,uBAACR,YAAY;IAAA,OAC1BA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACQ,mBAAmB,CAAC,IACxDT,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACS,kBAAkB,CAAC;EAAA;EAEzDC,gBAAgB,EAAE,0BAACX,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACW,UAAU,CAAC;EAAA;EAEnFC,oBAAoB,EAAE,8BAACb,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACa,eAAe,CAAC;EAAA;EAE5FC,4BAA4B,EAAE,sCAACf,YAAY;IAAA,OACzCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACe,wBAAwB,CAAC;EAAA;EAE/DC,+BAA+B,EAAE,yCAACjB,YAAY;IAAA,OAC5CA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACiB,+BAA+B,CAAC,IACpElB,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACkB,iBAAiB,CAAC;EAAA;EAExDC,iBAAiB,EAAE,2BAACpB,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACoB,mBAAmB,CAAC;EAAA;EAE7FC,yBAAyB,EAAE,mCAACtB,YAAY;IAAA,OACtCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACsB,8BAA8B,CAAC;EAAA;EAErEC,uBAAuB,EAAE,iCAACxB,YAAY;IAAA,OACpC,CAACA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACwB,yBAAyB,CAAC;EAAA;EAEjEC,+BAA+B,EAAE,yCAAC1B,YAAY;IAAA,OAC5C,CAACA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC0B,+BAA+B,CAAC;EAAA;EAEvEC,iBAAiB,EAAE,2BAAC5B,YAAY;IAAA,OAAK,CAACA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC4B,oBAAoB,CAAC;EAAA;EAE/FC,WAAW,EAAE,qBAACC,OAAO,EAAEC,OAAO,EAAEvL,QAAQ,EAAK;IAC3C,IAAIsL,OAAO,IAAIA,OAAO,CAACE,OAAO,EAAE;MAC9B,OAAOD,OAAO,CAACF,WAAW,CAAC;QAACrL,QAAQ,EAARA,QAAQ;QAAEyL,IAAI,EAAE;MAAI,CAAC,CAAC;IACpD;IAEA,OAAO,iBAAQ1K,MAAM,CAAC,IAAI2K,mBAAe,CAAC,2CAA2C,CAAC,CAAC;EACzF,CAAC;EAEDC,aAAa,EAAE,uBAACL,OAAO,EAAEC,OAAO,EAAEvL,QAAQ,EAAK;IAC7C,IAAIsL,OAAO,IAAIA,OAAO,CAACM,SAAS,EAAE;MAChC,OAAOL,OAAO,CAACF,WAAW,CAAC;QAACrL,QAAQ,EAARA,QAAQ;QAAEyL,IAAI,EAAE;MAAK,CAAC,CAAC;IACrD;IAEA,OAAO,iBAAQ1K,MAAM,CAAC,IAAI2K,mBAAe,CAAC,6CAA6C,CAAC,CAAC;EAC3F,CAAC;EAEDG,kBAAkB,EAAE,4BAACnD,UAAuC,EAAK;IAC/D,IAAMoD,UAAU,GAAG,oCAAoC;IAEvD,IAAIpD,UAAU,EAAE;MACd,IAAMqD,QAAQ,GAAGrD,UAAU,CAACsD,eAAe,CAACC,WAAW,EAAE;MACzD,IAAOC,QAAQ,GAAIH,QAAQ,CAApBG,QAAQ;MAEfnG,oBAAW,CAACC,MAAM,CAACmG,GAAG,CAACL,UAAU,uBAAgBI,QAAQ,EAAG;MAC5DnG,oBAAW,CAACC,MAAM,CAACmG,GAAG,CAACL,UAAU,EAAE,YAAY,EAAE,wBAAeC,QAAQ,CAAC,CAAC;IAC5E;EACF,CAAC;EAEDK,kBAAkB,EAAE,4BAAC3D,UAAmC,EAAK;IAC3D,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;MAEfnG,oBAAW,CAACC,MAAM,CAACmG,GAAG,CAACL,UAAU,uBAAgBI,QAAQ,EAAG;MAC5DnG,oBAAW,CAACC,MAAM,CAACmG,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,CAAC9L,OAAO,CAAC,UAAC+L,MAAM,EAAK;MAC1BxG,oBAAW,CAACC,MAAM,CAACmG,GAAG,CAACL,UAAU,uBAAgBS,MAAM,CAACL,QAAQ,EAAG;MACnEnG,oBAAW,CAACC,MAAM,CAACmG,GAAG,CAACL,UAAU,EAAE,UAAU,EAAE,wBAAeS,MAAM,CAAC,CAAC;IACxE,CAAC,CAAC;EACJ,CAAC;EAEDC,gBAAgB,EAAE,0BAAC5L,OAAO,EAAK;IAC7B,IAAIA,OAAO,CAAC8E,YAAY,KAAKC,qBAAU,CAACC,QAAQ,EAAE;MAChD,OAAO,iBAAQ7E,MAAM,CAAC,IAAI8E,kCAAqB,EAAE,CAAC;IACpD;IAEA,IAAM4G,UAAU,GAAG;MACjBzM,QAAQ,EAAEY,OAAO,CAACZ;IACpB,CAAC;IAED,OAAOY,OAAO,CAAC+B,cAAc,CAC1B6J,gBAAgB,CAACC,UAAU,CAAC,CAC5B5K,IAAI,CAAC;MAAA,OAAMpC,WAAW,CAAC8E,OAAO,CAAC3D,OAAO,CAAC;IAAA,EAAC,CACxCkF,KAAK,CAAC,UAAC1D,GAAG,EAAK;MACd2D,oBAAW,CAACC,MAAM,CAACC,KAAK,4GAC8ErF,OAAO,CAACL,EAAE,sBAAY6B,GAAG,EAC9H;MAED,OAAO,iBAAQrB,MAAM,CAACqB,GAAG,CAAC;IAC5B,CAAC,CAAC;EACN,CAAC;EAEDsK,sBAAsB,EAAE,gCAACnD,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACmD,aAAa,CAAC;EAAA;EAE5FC,wBAAwB,EAAE,kCAACrD,YAAY;IAAA,OACrCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACqD,wBAAwB,CAAC;EAAA;EAE/DC,oBAAoB,EAAE,8BAACvD,YAAY;IAAA,OACjCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACuD,2BAA2B,CAAC;EAAA;EAElEC,mBAAmB,EAAE,6BAACzD,YAAY;IAAA,OAChCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACyD,0BAA0B,CAAC;EAAA;EAEjEC,qBAAqB,EAAE,+BAAC3D,YAAY;IAAA,OAClCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC2D,qBAAqB,CAAC;EAAA;EAE5DC,sBAAsB,EAAE,gCAAC7D,YAAY;IAAA,OACnCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC6D,6BAA6B,CAAC;EAAA;EAEpEC,mBAAmB,EAAE,6BAAC/D,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC+D,oBAAoB,CAAC;EAAA;EAEhGC,4BAA4B,EAAE,sCAACjE,YAAY;IAAA,OACzCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACiE,6BAA6B,CAAC;EAAA;EAEpEC,wBAAwB,EAAE,kCAACnE,YAAY;IAAA,OACrCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACmE,uBAAuB,CAAC;EAAA;EAE9DC,sBAAsB,EAAE,gCAACrE,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACqE,kBAAkB,CAAC;EAAA;EAEjGC,gBAAgB,EAAE,0BAACC,aAAa,EAAExE,YAAY,EAAK;IACjD,IAAIA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACwE,gBAAgB,CAAC,EAAE;MACzD,OAAO,IAAI;IACb;IACA,IAAIzE,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACyE,kBAAkB,CAAC,EAAE;MAC3D,OAAO,KAAK;IACd;IAEA,OAAOF,aAAa;EACtB,CAAC;EACDG,4BAA4B,EAAE,sCAAC3E,YAAY;IAAA,OACzCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC2E,4BAA4B,CAAC;EAAA;EAEnEC,mBAAmB,EAAE,6BAAC7E,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC6E,iBAAiB,CAAC;EAAA;EAE7F;AACF;AACA;AACA;AACA;AACA;EACEC,WAAW,EAAE,qBAAC1N,OAAO,EAAE2N,WAAW,EAAK;IAAA;IACrC,IAAM7M,QAAQ,GAAGd,OAAO,aAAPA,OAAO,6CAAPA,OAAO,CAAEe,SAAS,uDAAlB,mBAAoBD,QAAQ;IAE7C,IAAI,CAACA,QAAQ,EAAE;MACb;IACF;IAEA6M,WAAW,CAAC7M,QAAQ,GAAGA,QAAQ;EACjC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE8M,oBAAoB,EAAE,8BAAC5N,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,CAACe,SAAS,CAAC8M,YAAY,CAAC5O,KAAK,CAAC;IACvC;IAEA,OAAOF,QAAQ;EACjB,CAAC;EAED+O,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,IAAMnO,OAAO,GAAGgO,UAAU,CAACI,KAAK,EAAE;MAElC,IAAI,CAACpO,OAAO,EAAE;QACZ,OAAO,iBAAQgE,OAAO,EAAE;MAC1B;MAEA,IAAMnC,OAAO,GAAG,yBAAUsM,eAAe,CAAC;MAE1C,IAAI,CAACtM,OAAO,CAAC3C,IAAI,EAAE;QACjB2C,OAAO,CAAC3C,IAAI,GAAG,CAAC,CAAC;MACnB;MAEAL,WAAW,CAAC6O,WAAW,CAAC1N,OAAO,EAAE6B,OAAO,CAAC3C,IAAI,CAAC;MAE9C,OAAOc,OAAO,CACX2K,OAAO,CAAC9I,OAAO,CAAC,CAChBZ,IAAI,CAAC,UAAClC,QAAQ;QAAA,OAAKF,WAAW,CAAC+O,oBAAoB,CAAC5N,OAAO,EAAEjB,QAAQ,CAAC;MAAA,EAAC;IAC5E,CAAC;IAED,OAAOmP,iBAAiB;EAC1B;AACF,CAAC;AAAC,eAEarP,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","reject","ParameterError","locusMediaRequest","Metrics","postEvent","event","eventType","MEDIA_REQUEST","send","type","selfUrl","sequence","locusInfo","muteOptions","then","MEDIA_RESPONSE","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","options","LOCUS_JOIN_REQUEST","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","deviceUrl","correlationId","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","isMultistream","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","res","LOCUS_JOIN_RESPONSE","data","trigger","LOCI_UPDATE","trackingId","headers","trackingid","cleanUp","breakouts","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeLocalStream","closeLocalShare","closeRemoteTracks","closePeerConnections","unsetLocalVideoTrack","unsetLocalShareTrack","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","PIN_COLLECTED","setLocus","PIN_PROMPT","IntentToJoinError","JoinMeetingError","validateOptions","sendVideo","sendAudio","sendShare","localStream","localShare","getTrack","videoTrack","audioTrack","stream","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"],"sources":["util.ts"],"sourcesContent":["import {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\n\nimport {cloneDeep} from 'lodash';\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport Metrics from '../metrics';\nimport {eventType, trigger} from '../metrics/config';\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} 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';\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 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 Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});\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 Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});\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\n Metrics.postEvent({event: eventType.LOCUS_JOIN_REQUEST, meeting});\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 Metrics.postEvent({\n event: eventType.LOCUS_JOIN_RESPONSE,\n meeting,\n data: {\n trigger: trigger.LOCI_UPDATE,\n locus: res.body.locus,\n mediaConnections: res.body.mediaConnections,\n trackingId: res.headers.trackingid,\n },\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n },\n\n cleanUp: (meeting) => {\n meeting.breakouts.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.closeLocalStream())\n .then(() => meeting.closeLocalShare())\n .then(() => meeting.closeRemoteTracks())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.unsetLocalVideoTrack();\n meeting.unsetLocalShareTrack();\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 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 Metrics.postEvent({\n event: eventType.PIN_COLLECTED,\n meeting,\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 Metrics.postEvent({\n event: eventType.PIN_PROMPT,\n meeting,\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 validateOptions: (options) => {\n const {sendVideo, sendAudio, sendShare, localStream, localShare} = options;\n\n if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid video streams'));\n }\n\n if (sendAudio && !MeetingUtil.getTrack(localStream).audioTrack) {\n return Promise.reject(new ParameterError('please pass valid audio streams'));\n }\n\n if (sendShare && !MeetingUtil.getTrack(localShare).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid share streams'));\n }\n\n return Promise.resolve();\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 | null) => {\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 | null) => {\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\nexport default MeetingUtil;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AAA0D;AAAA;AAE1D,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,IAAI,CAACF,OAAO,EAAE;MACZ,OAAO,iBAAQG,MAAM,CAAC,IAAIC,kBAAc,CAAC,4BAA4B,CAAC,CAAC;IACzE;IAEA,IAAI,CAACJ,OAAO,CAACK,iBAAiB,EAAE;MAC9B,OAAO,iBAAQF,MAAM,CACnB,IAAIC,kBAAc,CAChB,4EAA4E,CAC7E,CACF;IACH;IAEAE,gBAAO,CAACC,SAAS,CAAC;MAACC,KAAK,EAAEC,iBAAS,CAACC,aAAa;MAAEV,OAAO,EAAPA;IAAO,CAAC,CAAC;IAE5D,OAAOA,OAAO,CAACK,iBAAiB,CAC7BM,IAAI,CAAC;MACJC,IAAI,EAAE,WAAW;MACjBC,OAAO,EAAEb,OAAO,CAACa,OAAO;MACxBf,OAAO,EAAEE,OAAO,CAACF,OAAO;MACxBgB,QAAQ,EAAEd,OAAO,CAACe,SAAS,CAACD,QAAQ;MACpCE,WAAW,EAAE;QACXf,UAAU,EAAVA,UAAU;QACVC,UAAU,EAAVA;MACF;IACF,CAAC,CAAC,CACDe,IAAI,CAAC,UAAClC,QAAQ,EAAK;MAAA;MAClBuB,gBAAO,CAACC,SAAS,CAAC;QAACC,KAAK,EAAEC,iBAAS,CAACS,cAAc;QAAElB,OAAO,EAAPA;MAAO,CAAC,CAAC;MAE7D,OAAOjB,QAAQ,aAARA,QAAQ,yCAARA,QAAQ,CAAEG,IAAI,mDAAd,eAAgBD,KAAK;IAC9B,CAAC,CAAC;EACN,CAAC;EAEDkC,QAAQ,EAAE,kBAACC,IAAI;IAAA,OAAKA,IAAI,IAAIA,IAAI,CAACC,KAAK;EAAA;EAEtCC,WAAW,EAAE,qBAACD,KAAK,EAAE5B,MAAM;IAAA,OAAK4B,KAAK,KAAK5B,MAAM;EAAA;EAEhD8B,YAAY,EAAE,sBAACC,GAAG;IAAA;IAAA,OAAK,CAAAA,GAAG,aAAHA,GAAG,oCAAHA,GAAG,CAAEtC,IAAI,8CAAT,UAAWuC,SAAS,KAAIC,yBAAc,CAACC,QAAQ,CAACH,GAAG,CAACtC,IAAI,CAACuC,SAAS,CAAC;EAAA;EAE1FG,WAAW,EAAE,qBAAC5B,OAAO,EAAE6B,OAAO,EAAK;IACjC,IAAI,CAAC7B,OAAO,EAAE;MACZ,OAAO,iBAAQG,MAAM,CAAC,IAAIC,kBAAc,CAAC,4BAA4B,CAAC,CAAC;IACzE;IAEAE,gBAAO,CAACC,SAAS,CAAC;MAACC,KAAK,EAAEC,iBAAS,CAACqB,kBAAkB;MAAE9B,OAAO,EAAPA;IAAO,CAAC,CAAC;;IAEjE;IACA;IACA;IACA,OAAOA,OAAO,CAAC+B,cAAc,CAC1BH,WAAW,CAAC;MACXI,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,EAAET,OAAO,CAACS,WAAW;MAChCC,eAAe,EAAEvC,OAAO,CAACuC,eAAe;MACxCC,UAAU,EAAEX,OAAO,CAACW,UAAU,IAAI,IAAI;MACtCC,SAAS,EAAEZ,OAAO,CAACY,SAAS;MAC5BC,GAAG,EAAEb,OAAO,CAACa,GAAG;MAChBC,cAAc,EAAEd,OAAO,CAACc,cAAc;MACtCC,iBAAiB,EAAE,CAAC5C,OAAO,CAAC6C,aAAa;MACzCC,kBAAkB,EAAEjB,OAAO,CAACiB,kBAAkB;MAC9CC,kBAAkB,EAAElB,OAAO,CAACkB,kBAAkB;MAC9CC,MAAM,EAAEnB,OAAO,CAACmB,MAAM;MACtBC,kBAAkB,EAAEpB,OAAO,CAACoB,kBAAkB;MAC9CC,uBAAuB,EAAErB,OAAO,CAACqB;IACnC,CAAC,CAAC,CACDjC,IAAI,CAAC,UAACkC,GAAG,EAAK;MACb7C,gBAAO,CAACC,SAAS,CAAC;QAChBC,KAAK,EAAEC,iBAAS,CAAC2C,mBAAmB;QACpCpD,OAAO,EAAPA,OAAO;QACPqD,IAAI,EAAE;UACJC,OAAO,EAAEA,eAAO,CAACC,WAAW;UAC5BtE,KAAK,EAAEkE,GAAG,CAACjE,IAAI,CAACD,KAAK;UACrBE,gBAAgB,EAAEgE,GAAG,CAACjE,IAAI,CAACC,gBAAgB;UAC3CqE,UAAU,EAAEL,GAAG,CAACM,OAAO,CAACC;QAC1B;MACF,CAAC,CAAC;MAEF,OAAO7E,WAAW,CAACC,cAAc,CAACqE,GAAG,CAAC;IACxC,CAAC,CAAC;EACN,CAAC;EAEDQ,OAAO,EAAE,iBAAC3D,OAAO,EAAK;IACpBA,OAAO,CAAC4D,SAAS,CAACD,OAAO,EAAE;;IAE3B;IACA,IAAME,iBAAiB,GAAG7D,OAAO,CAAC8D,aAAa,GAC3C9D,OAAO,CAAC8D,aAAa,CAACC,YAAY,EAAE,GACpC,iBAAQC,OAAO,EAAE;IAErB,OAAOH,iBAAiB,CACrB5C,IAAI,CAAC;MAAA,OAAMjB,OAAO,CAACiE,gBAAgB,EAAE;IAAA,EAAC,CACtChD,IAAI,CAAC;MAAA,OAAMjB,OAAO,CAACkE,eAAe,EAAE;IAAA,EAAC,CACrCjD,IAAI,CAAC;MAAA,OAAMjB,OAAO,CAACmE,iBAAiB,EAAE;IAAA,EAAC,CACvClD,IAAI,CAAC;MAAA,OAAMjB,OAAO,CAACoE,oBAAoB,EAAE;IAAA,EAAC,CAC1CnD,IAAI,CAAC,YAAM;MACVjB,OAAO,CAACqE,oBAAoB,EAAE;MAC9BrE,OAAO,CAACsE,oBAAoB,EAAE;MAC9BtE,OAAO,CAACuE,iBAAiB,EAAE;MAC3BvE,OAAO,CAACwE,oBAAoB,EAAE;MAC9BxE,OAAO,CAACyE,mBAAmB,CAACd,OAAO,EAAE;IACvC,CAAC,CAAC,CACD1C,IAAI,CAAC;MAAA,OAAMjB,OAAO,CAAC0E,aAAa,EAAE;IAAA,EAAC,CACnCzD,IAAI,CAAC;MAAA,OAAMjB,OAAO,CAAC2E,mBAAmB,EAAE;IAAA,EAAC;EAC9C,CAAC;EAEDC,oBAAoB,EAAE,8BAAC5E,OAAO,EAAE6E,QAAQ,EAAK;IAC3C,IAAI7E,OAAO,CAAC8E,YAAY,KAAKC,qBAAU,CAACC,QAAQ,EAAE;MAChD,OAAO,iBAAQ7E,MAAM,CAAC,IAAI8E,kCAAqB,EAAE,CAAC;IACpD;IAEA,IAAMpD,OAAO,GAAG;MACdzC,QAAQ,EAAEY,OAAO,CAACZ,QAAQ;MAC1BK,MAAM,EAAEO,OAAO,CAACP,MAAM;MACtB4C,aAAa,EAAErC,OAAO,CAACqC,aAAa;MACpCwC,QAAQ,EAARA;IACF,CAAC;IAED,OAAO7E,OAAO,CAAC+B,cAAc,CAAC6C,oBAAoB,CAAC/C,OAAO,CAAC,CAACqD,KAAK,CAAC,UAAC1D,GAAG,EAAK;MACzE2D,oBAAW,CAACC,MAAM,CAACC,KAAK,6GAC+ErF,OAAO,CAACL,EAAE,sBAAY6B,GAAG,EAC/H;MAED,OAAO,iBAAQrB,MAAM,CAACqB,GAAG,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC;EAED;EACA;EACA;EACA;EACA8D,YAAY,EAAE,sBAACtF,OAAO,EAAwB;IAAA,IAAtB6B,OAAY,uEAAG,CAAC,CAAC;IACvC,IAAI7B,OAAO,CAAC8E,YAAY,KAAKC,qBAAU,CAACC,QAAQ,EAAE;MAChD;MACA,OAAO,iBAAQ7E,MAAM,CAAC,IAAI8E,kCAAqB,EAAE,CAAC;IACpD;IAEA,IAAIpG,WAAW,CAAC0G,iBAAiB,CAACvF,OAAO,CAACe,SAAS,CAAC,EAAE;MACpD,OAAO,iBAAQZ,MAAM,CAAC,IAAIqF,+BAAkB,EAAE,CAAC;IACjD;IAEA,IAAMC,cAAc,GAAG;MACrBrG,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,IAAMsD,YAAY,mCAAOD,cAAc,GAAK5D,OAAO,CAAC;IAEpD,OAAO7B,OAAO,CAAC+B,cAAc,CAC1BuD,YAAY,CAACI,YAAY,CAAC,CAC1BzE,IAAI,CAAC,YAAM;MACV,IAAIY,OAAO,CAAC8D,WAAW,EAAE;QACvB,OAAO,iBAAQ3B,OAAO,EAAE;MAC1B;MAEA,OAAOnF,WAAW,CAAC8E,OAAO,CAAC3D,OAAO,CAAC;IACrC,CAAC,CAAC,CACDkF,KAAK,CAAC,UAAC1D,GAAG,EAAK;MACd;MACA;MACA;MACA2D,oBAAW,CAACC,MAAM,CAACC,KAAK,sGACwErF,OAAO,CAACL,EAAE,sBAAY6B,GAAG,EACxH;MAED,OAAO,iBAAQrB,MAAM,CAACqB,GAAG,CAAC;IAC5B,CAAC,CAAC;EACN,CAAC;EACDoE,cAAc,EAAE,wBAAC5F,OAAO,EAAE6F,MAAM;IAAA,OAC9B7F,OAAO,CAAC+B,cAAc,CAAC6D,cAAc,CAAC;MACpCxG,QAAQ,EAAEY,OAAO,CAACZ,QAAQ;MAC1BgD,SAAS,EAAEpC,OAAO,CAACoC,SAAS;MAC5ByD,MAAM,EAANA;IACF,CAAC,CAAC;EAAA;EAEJN,iBAAiB,EAAE,2BAACxE,SAAS;IAAA;IAAA,OAAK,0BAAAA,SAAS,CAAC+E,WAAW,oFAArB,sBAAuBpG,IAAI,2DAA3B,uBAA6BqG,KAAK,MAAKC,iBAAM;EAAA;EAE/EC,iBAAiB,EAAE,2BAAClF,SAAS;IAAA;IAAA,OAAK,2BAAAA,SAAS,CAAC+E,WAAW,qFAArB,uBAAuBpG,IAAI,2DAA3B,uBAA6BqG,KAAK,MAAKG,iBAAM;EAAA;EAE/EC,mBAAmB,EAAE,6BAACpF,SAAS;IAAA;IAAA,OAAK,2BAAAA,SAAS,CAAC+E,WAAW,qFAArB,uBAAuBpG,IAAI,2DAA3B,uBAA6BqG,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,4BAAC1G,OAAO,EAAwB;IAAA,IAAtB6B,OAAY,uEAAG,CAAC,CAAC;IAC7C7B,OAAO,CAACwC,UAAU,GAAGxC,OAAO,CAACwC,UAAU,IAAIX,OAAO,CAACW,UAAU;IAE7D,IAAIxC,OAAO,CAAC2G,eAAe,EAAE;MAC3B,OAAO,iBAAQxG,MAAM,CAAC,IAAIyG,qBAAY,EAAE,CAAC;IAC3C;IACA,IAAI5G,OAAO,CAAC6G,cAAc,KAAKC,0BAAe,CAACC,QAAQ,EAAE;MACvD,OAAO,iBAAQ5G,MAAM,CAAC,IAAI6G,sBAAa,EAAE,CAAC;IAC5C;IAEA,IAAInF,OAAO,CAACa,GAAG,EAAE;MACfpC,gBAAO,CAACC,SAAS,CAAC;QAChBC,KAAK,EAAEC,iBAAS,CAACwG,aAAa;QAC9BjH,OAAO,EAAPA;MACF,CAAC,CAAC;IACJ;;IAEA;IACA,OAAOnB,WAAW,CAAC+C,WAAW,CAAC5B,OAAO,EAAE6B,OAAO,CAAC,CAC7CZ,IAAI,CAAC,UAAClC,QAAQ,EAAK;MAClBiB,OAAO,CAACkH,QAAQ,CAACnI,QAAQ,CAAC;MAE1B,OAAO,iBAAQiF,OAAO,CAACjF,QAAQ,CAAC;IAClC,CAAC,CAAC,CACDmG,KAAK,CAAC,UAAC1D,GAAG,EAAK;MACd;MACA,IAAI3C,WAAW,CAAC0C,YAAY,CAACC,GAAG,CAAC,EAAE;QACjClB,gBAAO,CAACC,SAAS,CAAC;UAChBC,KAAK,EAAEC,iBAAS,CAAC0G,UAAU;UAC3BnH,OAAO,EAAPA;QACF,CAAC,CAAC;;QAEF;QACA;QACA,OAAO,iBAAQG,MAAM,CAAC,IAAIiH,qBAAiB,CAAC,uBAAuB,EAAE5F,GAAG,CAAC,CAAC;MAC5E;MACA2D,oBAAW,CAACC,MAAM,CAACC,KAAK,CACtB,8DAA8D,EAC9D7D,GAAG,CACJ;MAED,OAAO,iBAAQrB,MAAM,CAAC,IAAIkH,oBAAgB,CAACxF,OAAO,EAAE,uBAAuB,EAAEL,GAAG,CAAC,CAAC;IACpF,CAAC,CAAC;EACN,CAAC;EAED8F,eAAe,EAAE,yBAACzF,OAAO,EAAK;IAC5B,IAAO0F,SAAS,GAAmD1F,OAAO,CAAnE0F,SAAS;MAAEC,SAAS,GAAwC3F,OAAO,CAAxD2F,SAAS;MAAEC,SAAS,GAA6B5F,OAAO,CAA7C4F,SAAS;MAAEC,WAAW,GAAgB7F,OAAO,CAAlC6F,WAAW;MAAEC,UAAU,GAAI9F,OAAO,CAArB8F,UAAU;IAE/D,IAAIJ,SAAS,IAAI,CAAC1I,WAAW,CAAC+I,QAAQ,CAACF,WAAW,CAAC,CAACG,UAAU,EAAE;MAC9D,OAAO,iBAAQ1H,MAAM,CAAC,IAAIC,kBAAc,CAAC,iCAAiC,CAAC,CAAC;IAC9E;IAEA,IAAIoH,SAAS,IAAI,CAAC3I,WAAW,CAAC+I,QAAQ,CAACF,WAAW,CAAC,CAACI,UAAU,EAAE;MAC9D,OAAO,iBAAQ3H,MAAM,CAAC,IAAIC,kBAAc,CAAC,iCAAiC,CAAC,CAAC;IAC9E;IAEA,IAAIqH,SAAS,IAAI,CAAC5I,WAAW,CAAC+I,QAAQ,CAACD,UAAU,CAAC,CAACE,UAAU,EAAE;MAC7D,OAAO,iBAAQ1H,MAAM,CAAC,IAAIC,kBAAc,CAAC,iCAAiC,CAAC,CAAC;IAC9E;IAEA,OAAO,iBAAQ4D,OAAO,EAAE;EAC1B,CAAC;EAED4D,QAAQ,EAAE,kBAACG,MAAM,EAAK;IACpB,IAAID,UAAU,GAAG,IAAI;IACrB,IAAID,UAAU,GAAG,IAAI;IACrB,IAAIG,WAAW,GAAG,IAAI;IACtB,IAAIC,WAAW,GAAG,IAAI;IAEtB,IAAI,CAACF,MAAM,EAAE;MACX,OAAO;QAACD,UAAU,EAAE,IAAI;QAAED,UAAU,EAAE;MAAI,CAAC;IAC7C;IACA,IAAIE,MAAM,CAACG,cAAc,EAAE;MACzBF,WAAW,GAAGD,MAAM,CAACG,cAAc,EAAE;IACvC;IACA,IAAIH,MAAM,CAACI,cAAc,EAAE;MACzBF,WAAW,GAAGF,MAAM,CAACI,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;MAAzBJ,UAAU;IACb;IAEA,OAAO;MAACC,UAAU,EAAVA,UAAU;MAAED,UAAU,EAAVA;IAAU,CAAC;EACjC,CAAC;EAEDQ,yBAAyB,EAAE,mCAACtH,SAAS;IAAA,OACnCA,SAAS,IACTA,SAAS,CAAC+E,WAAW,IACrB/E,SAAS,CAAC+E,WAAW,CAAC1E,IAAI,IAC1BL,SAAS,CAAC+E,WAAW,CAAC1E,IAAI,IAC1BL,SAAS,CAAC+E,WAAW,CAAC1E,IAAI,CAACqB,SAAS;EAAA;EAEtC6F,sBAAsB,EAAE,gCAACvH,SAAS;IAAA,OAChCA,SAAS,IACTA,SAAS,CAAC+E,WAAW,IACrB/E,SAAS,CAAC+E,WAAW,CAAC1E,IAAI,IAC1BL,SAAS,CAAC+E,WAAW,CAAC1E,IAAI,IAC1BL,SAAS,CAAC+E,WAAW,CAAC1E,IAAI,CAACmH,MAAM;EAAA;EAEnCC,gCAAgC,EAAE,0CAACzH,SAAS;IAAA;IAAA,OAC1C,CAAAA,SAAS,aAATA,SAAS,iDAATA,SAAS,CAAE+E,WAAW,qFAAtB,uBAAwB1E,IAAI,2DAA5B,uBAA8BqH,gBAAgB,KAAI,EAAE;EAAA;EAEtDC,wBAAwB,EAAE,kCAACC,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACC,SAAS,CAAC;EAAA;EAE1FC,mBAAmB,EAAE,6BAACH,YAAY;IAAA,OAChCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACG,sBAAsB,CAAC;EAAA;EAE7DC,WAAW,EAAE,qBAACL,YAAY;IAAA,OACxBA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACK,iBAAiB,CAAC,IACtDN,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACM,oBAAoB,CAAC;EAAA;EAE3DC,aAAa,EAAE,uBAACR,YAAY;IAAA,OAC1BA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACQ,mBAAmB,CAAC,IACxDT,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACS,kBAAkB,CAAC;EAAA;EAEzDC,gBAAgB,EAAE,0BAACX,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACW,UAAU,CAAC;EAAA;EAEnFC,oBAAoB,EAAE,8BAACb,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACa,eAAe,CAAC;EAAA;EAE5FC,4BAA4B,EAAE,sCAACf,YAAY;IAAA,OACzCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACe,wBAAwB,CAAC;EAAA;EAE/DC,+BAA+B,EAAE,yCAACjB,YAAY;IAAA,OAC5CA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACiB,+BAA+B,CAAC,IACpElB,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACkB,iBAAiB,CAAC;EAAA;EAExDC,iBAAiB,EAAE,2BAACpB,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACoB,mBAAmB,CAAC;EAAA;EAC7FC,6BAA6B,EAAE,uCAACtB,YAAY;IAAA,OAC1CA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACsB,6BAA6B,CAAC;EAAA;EAEpEC,yBAAyB,EAAE,mCAACxB,YAAY;IAAA,OACtCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACwB,8BAA8B,CAAC;EAAA;EAErEC,uBAAuB,EAAE,iCAAC1B,YAAY;IAAA,OACpC,CAACA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC0B,yBAAyB,CAAC;EAAA;EAEjEC,+BAA+B,EAAE,yCAAC5B,YAAY;IAAA,OAC5C,CAACA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC4B,+BAA+B,CAAC;EAAA;EAEvEC,iBAAiB,EAAE,2BAAC9B,YAAY;IAAA,OAAK,CAACA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC8B,oBAAoB,CAAC;EAAA;EAE/FC,WAAW,EAAE,qBAACC,OAAO,EAAEC,OAAO,EAAEzL,QAAQ,EAAK;IAC3C,IAAIwL,OAAO,IAAIA,OAAO,CAACE,OAAO,EAAE;MAC9B,OAAOD,OAAO,CAACF,WAAW,CAAC;QAACvL,QAAQ,EAARA,QAAQ;QAAE2L,IAAI,EAAE;MAAI,CAAC,CAAC;IACpD;IAEA,OAAO,iBAAQ5K,MAAM,CAAC,IAAI6K,mBAAe,CAAC,2CAA2C,CAAC,CAAC;EACzF,CAAC;EAEDC,aAAa,EAAE,uBAACL,OAAO,EAAEC,OAAO,EAAEzL,QAAQ,EAAK;IAC7C,IAAIwL,OAAO,IAAIA,OAAO,CAACM,SAAS,EAAE;MAChC,OAAOL,OAAO,CAACF,WAAW,CAAC;QAACvL,QAAQ,EAARA,QAAQ;QAAE2L,IAAI,EAAE;MAAK,CAAC,CAAC;IACrD;IAEA,OAAO,iBAAQ5K,MAAM,CAAC,IAAI6K,mBAAe,CAAC,6CAA6C,CAAC,CAAC;EAC3F,CAAC;EAEDG,kBAAkB,EAAE,4BAACrD,UAAuC,EAAK;IAC/D,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;MAEfrG,oBAAW,CAACC,MAAM,CAACqG,GAAG,CAACL,UAAU,uBAAgBI,QAAQ,EAAG;MAC5DrG,oBAAW,CAACC,MAAM,CAACqG,GAAG,CAACL,UAAU,EAAE,YAAY,EAAE,wBAAeC,QAAQ,CAAC,CAAC;IAC5E;EACF,CAAC;EAEDK,kBAAkB,EAAE,4BAAC7D,UAAmC,EAAK;IAC3D,IAAMuD,UAAU,GAAG,oCAAoC;IAEvD,IAAIvD,UAAU,EAAE;MACd,IAAMwD,QAAQ,GAAGxD,UAAU,CAACyD,eAAe,CAACC,WAAW,EAAE;MACzD,IAAOC,QAAQ,GAAIH,QAAQ,CAApBG,QAAQ;MAEfrG,oBAAW,CAACC,MAAM,CAACqG,GAAG,CAACL,UAAU,uBAAgBI,QAAQ,EAAG;MAC5DrG,oBAAW,CAACC,MAAM,CAACqG,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,CAAChM,OAAO,CAAC,UAACiM,MAAM,EAAK;MAC1B1G,oBAAW,CAACC,MAAM,CAACqG,GAAG,CAACL,UAAU,uBAAgBS,MAAM,CAACL,QAAQ,EAAG;MACnErG,oBAAW,CAACC,MAAM,CAACqG,GAAG,CAACL,UAAU,EAAE,UAAU,EAAE,wBAAeS,MAAM,CAAC,CAAC;IACxE,CAAC,CAAC;EACJ,CAAC;EAEDC,gBAAgB,EAAE,0BAAC9L,OAAO,EAAK;IAC7B,IAAIA,OAAO,CAAC8E,YAAY,KAAKC,qBAAU,CAACC,QAAQ,EAAE;MAChD,OAAO,iBAAQ7E,MAAM,CAAC,IAAI8E,kCAAqB,EAAE,CAAC;IACpD;IAEA,IAAM8G,UAAU,GAAG;MACjB3M,QAAQ,EAAEY,OAAO,CAACZ;IACpB,CAAC;IAED,OAAOY,OAAO,CAAC+B,cAAc,CAC1B+J,gBAAgB,CAACC,UAAU,CAAC,CAC5B9K,IAAI,CAAC;MAAA,OAAMpC,WAAW,CAAC8E,OAAO,CAAC3D,OAAO,CAAC;IAAA,EAAC,CACxCkF,KAAK,CAAC,UAAC1D,GAAG,EAAK;MACd2D,oBAAW,CAACC,MAAM,CAACC,KAAK,4GAC8ErF,OAAO,CAACL,EAAE,sBAAY6B,GAAG,EAC9H;MAED,OAAO,iBAAQrB,MAAM,CAACqB,GAAG,CAAC;IAC5B,CAAC,CAAC;EACN,CAAC;EAEDwK,sBAAsB,EAAE,gCAACrD,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACqD,aAAa,CAAC;EAAA;EAE5FC,wBAAwB,EAAE,kCAACvD,YAAY;IAAA,OACrCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACuD,wBAAwB,CAAC;EAAA;EAE/DC,oBAAoB,EAAE,8BAACzD,YAAY;IAAA,OACjCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACyD,2BAA2B,CAAC;EAAA;EAElEC,mBAAmB,EAAE,6BAAC3D,YAAY;IAAA,OAChCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC2D,0BAA0B,CAAC;EAAA;EAEjEC,qBAAqB,EAAE,+BAAC7D,YAAY;IAAA,OAClCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC6D,qBAAqB,CAAC;EAAA;EAE5DC,sBAAsB,EAAE,gCAAC/D,YAAY;IAAA,OACnCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC+D,6BAA6B,CAAC;EAAA;EAEpEC,mBAAmB,EAAE,6BAACjE,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACiE,oBAAoB,CAAC;EAAA;EAEhGC,4BAA4B,EAAE,sCAACnE,YAAY;IAAA,OACzCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACmE,6BAA6B,CAAC;EAAA;EAEpEC,wBAAwB,EAAE,kCAACrE,YAAY;IAAA,OACrCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACqE,uBAAuB,CAAC;EAAA;EAE9DC,sBAAsB,EAAE,gCAACvE,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAACuE,kBAAkB,CAAC;EAAA;EAEjGC,gBAAgB,EAAE,0BAACC,aAAa,EAAE1E,YAAY,EAAK;IACjD,IAAIA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC0E,gBAAgB,CAAC,EAAE;MACzD,OAAO,IAAI;IACb;IACA,IAAI3E,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC2E,kBAAkB,CAAC,EAAE;MAC3D,OAAO,KAAK;IACd;IAEA,OAAOF,aAAa;EACtB,CAAC;EACDG,4BAA4B,EAAE,sCAAC7E,YAAY;IAAA,OACzCA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC6E,4BAA4B,CAAC;EAAA;EAEnEC,mBAAmB,EAAE,6BAAC/E,YAAY;IAAA,OAAKA,YAAY,CAAChH,QAAQ,CAACiH,wBAAa,CAAC+E,iBAAiB,CAAC;EAAA;EAE7F;AACF;AACA;AACA;AACA;AACA;EACEC,WAAW,EAAE,qBAAC5N,OAAO,EAAE6N,WAAW,EAAK;IAAA;IACrC,IAAM/M,QAAQ,GAAGd,OAAO,aAAPA,OAAO,6CAAPA,OAAO,CAAEe,SAAS,uDAAlB,mBAAoBD,QAAQ;IAE7C,IAAI,CAACA,QAAQ,EAAE;MACb;IACF;IAEA+M,WAAW,CAAC/M,QAAQ,GAAGA,QAAQ;EACjC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEgN,oBAAoB,EAAE,8BAAC9N,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,CAACe,SAAS,CAACgN,YAAY,CAAC9O,KAAK,CAAC;IACvC;IAEA,OAAOF,QAAQ;EACjB,CAAC;EAEDiP,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,IAAMrO,OAAO,GAAGkO,UAAU,CAACI,KAAK,EAAE;MAElC,IAAI,CAACtO,OAAO,EAAE;QACZ,OAAO,iBAAQgE,OAAO,EAAE;MAC1B;MAEA,IAAMnC,OAAO,GAAG,yBAAUwM,eAAe,CAAC;MAE1C,IAAI,CAACxM,OAAO,CAAC3C,IAAI,EAAE;QACjB2C,OAAO,CAAC3C,IAAI,GAAG,CAAC,CAAC;MACnB;MAEAL,WAAW,CAAC+O,WAAW,CAAC5N,OAAO,EAAE6B,OAAO,CAAC3C,IAAI,CAAC;MAE9C,OAAOc,OAAO,CACX6K,OAAO,CAAChJ,OAAO,CAAC,CAChBZ,IAAI,CAAC,UAAClC,QAAQ;QAAA,OAAKF,WAAW,CAACiP,oBAAoB,CAAC9N,OAAO,EAAEjB,QAAQ,CAAC;MAAA,EAAC;IAC5E,CAAC;IAED,OAAOqP,iBAAiB;EAC1B;AACF,CAAC;AAAC,eAEavP,WAAW;AAAA"}
|
|
@@ -672,6 +672,7 @@ export declare const DISPLAY_HINTS: {
|
|
|
672
672
|
CAN_RENAME_SELF_AND_OBSERVED: string;
|
|
673
673
|
CAN_RENAME_OTHERS: string;
|
|
674
674
|
BREAKOUT_MANAGEMENT: string;
|
|
675
|
+
BROADCAST_MESSAGE_TO_BREAKOUT: string;
|
|
675
676
|
UCF_SUPPRESS_BREAKOUTS_SUPPORT: string;
|
|
676
677
|
DISABLE_ASK_FOR_HELP: string;
|
|
677
678
|
DISABLE_BREAKOUT_PREASSIGNMENTS: string;
|
|
@@ -39,6 +39,7 @@ interface IInMeetingActions {
|
|
|
39
39
|
waitingForOthersToJoin?: boolean;
|
|
40
40
|
canSendReactions?: boolean;
|
|
41
41
|
canManageBreakout?: boolean;
|
|
42
|
+
canBroadcastMessageToBreakout?: boolean;
|
|
42
43
|
canAdmitLobbyToBreakout?: boolean;
|
|
43
44
|
isBreakoutPreassignmentsEnabled?: boolean;
|
|
44
45
|
canUserAskForHelp?: boolean;
|
|
@@ -105,6 +106,7 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
105
106
|
waitingForOthersToJoin: any;
|
|
106
107
|
canSendReactions: any;
|
|
107
108
|
canManageBreakout: any;
|
|
109
|
+
canBroadcastMessageToBreakout: any;
|
|
108
110
|
canAdmitLobbyToBreakout: any;
|
|
109
111
|
isBreakoutPreassignmentsEnabled: any;
|
|
110
112
|
canUserAskForHelp: any;
|
|
@@ -32,6 +32,7 @@ declare const MeetingUtil: {
|
|
|
32
32
|
canUserLowerSomeoneElsesHand: (displayHints: any) => any;
|
|
33
33
|
bothLeaveAndEndMeetingAvailable: (displayHints: any) => any;
|
|
34
34
|
canManageBreakout: (displayHints: any) => any;
|
|
35
|
+
canBroadcastMessageToBreakout: (displayHints: any) => any;
|
|
35
36
|
isSuppressBreakoutSupport: (displayHints: any) => any;
|
|
36
37
|
canAdmitLobbyToBreakout: (displayHints: any) => boolean;
|
|
37
38
|
isBreakoutPreassignmentsEnabled: (displayHints: any) => boolean;
|
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.145",
|
|
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.145",
|
|
36
|
+
"@webex/test-helper-chai": "3.0.0-beta.145",
|
|
37
|
+
"@webex/test-helper-mocha": "3.0.0-beta.145",
|
|
38
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.145",
|
|
39
|
+
"@webex/test-helper-retry": "3.0.0-beta.145",
|
|
40
|
+
"@webex/test-helper-test-users": "3.0.0-beta.145",
|
|
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.145",
|
|
50
50
|
"@webex/internal-media-core": "1.38.3",
|
|
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.145",
|
|
52
|
+
"@webex/internal-plugin-device": "3.0.0-beta.145",
|
|
53
|
+
"@webex/internal-plugin-llm": "3.0.0-beta.145",
|
|
54
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.145",
|
|
55
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.145",
|
|
56
|
+
"@webex/internal-plugin-support": "3.0.0-beta.145",
|
|
57
|
+
"@webex/internal-plugin-user": "3.0.0-beta.145",
|
|
58
|
+
"@webex/media-helpers": "3.0.0-beta.145",
|
|
59
|
+
"@webex/plugin-people": "3.0.0-beta.145",
|
|
60
|
+
"@webex/plugin-rooms": "3.0.0-beta.145",
|
|
61
|
+
"@webex/webex-core": "3.0.0-beta.145",
|
|
62
62
|
"ampersand-collection": "^2.0.2",
|
|
63
63
|
"bowser": "^2.11.0",
|
|
64
64
|
"btoa": "^1.2.1",
|
package/src/constants.ts
CHANGED
|
@@ -842,6 +842,7 @@ export const DISPLAY_HINTS = {
|
|
|
842
842
|
|
|
843
843
|
// breakout session
|
|
844
844
|
BREAKOUT_MANAGEMENT: 'BREAKOUT_MANAGEMENT',
|
|
845
|
+
BROADCAST_MESSAGE_TO_BREAKOUT: 'BROADCAST_MESSAGE_TO_BREAKOUT',
|
|
845
846
|
UCF_SUPPRESS_BREAKOUTS_SUPPORT: 'UCF_SUPPRESS_BREAKOUTS_SUPPORT',
|
|
846
847
|
DISABLE_ASK_FOR_HELP: 'DISABLE_ASK_FOR_HELP',
|
|
847
848
|
DISABLE_BREAKOUT_PREASSIGNMENTS: 'DISABLE_BREAKOUT_PREASSIGNMENTS',
|
|
@@ -42,6 +42,7 @@ interface IInMeetingActions {
|
|
|
42
42
|
waitingForOthersToJoin?: boolean;
|
|
43
43
|
canSendReactions?: boolean;
|
|
44
44
|
canManageBreakout?: boolean;
|
|
45
|
+
canBroadcastMessageToBreakout?: boolean;
|
|
45
46
|
canAdmitLobbyToBreakout?: boolean;
|
|
46
47
|
isBreakoutPreassignmentsEnabled?: boolean;
|
|
47
48
|
canUserAskForHelp?: boolean;
|
|
@@ -143,6 +144,8 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
143
144
|
|
|
144
145
|
canManageBreakout = null;
|
|
145
146
|
|
|
147
|
+
canBroadcastMessageToBreakout = null;
|
|
148
|
+
|
|
146
149
|
canAdmitLobbyToBreakout = null;
|
|
147
150
|
|
|
148
151
|
isBreakoutPreassignmentsEnabled = null;
|
|
@@ -235,6 +238,7 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
235
238
|
waitingForOthersToJoin: this.waitingForOthersToJoin,
|
|
236
239
|
canSendReactions: this.canSendReactions,
|
|
237
240
|
canManageBreakout: this.canManageBreakout,
|
|
241
|
+
canBroadcastMessageToBreakout: this.canBroadcastMessageToBreakout,
|
|
238
242
|
canAdmitLobbyToBreakout: this.canAdmitLobbyToBreakout,
|
|
239
243
|
isBreakoutPreassignmentsEnabled: this.isBreakoutPreassignmentsEnabled,
|
|
240
244
|
canUserAskForHelp: this.canUserAskForHelp,
|
package/src/meeting/index.ts
CHANGED
|
@@ -2588,6 +2588,9 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2588
2588
|
payload.info.userDisplayHints
|
|
2589
2589
|
),
|
|
2590
2590
|
canManageBreakout: MeetingUtil.canManageBreakout(payload.info.userDisplayHints),
|
|
2591
|
+
canBroadcastMessageToBreakout: MeetingUtil.canBroadcastMessageToBreakout(
|
|
2592
|
+
payload.info.userDisplayHints
|
|
2593
|
+
),
|
|
2591
2594
|
canAdmitLobbyToBreakout: MeetingUtil.canAdmitLobbyToBreakout(
|
|
2592
2595
|
payload.info.userDisplayHints
|
|
2593
2596
|
),
|
package/src/meeting/util.ts
CHANGED
|
@@ -365,6 +365,8 @@ const MeetingUtil = {
|
|
|
365
365
|
displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING),
|
|
366
366
|
|
|
367
367
|
canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),
|
|
368
|
+
canBroadcastMessageToBreakout: (displayHints) =>
|
|
369
|
+
displayHints.includes(DISPLAY_HINTS.BROADCAST_MESSAGE_TO_BREAKOUT),
|
|
368
370
|
|
|
369
371
|
isSuppressBreakoutSupport: (displayHints) =>
|
|
370
372
|
displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT),
|
|
@@ -38,6 +38,7 @@ describe('plugin-meetings', () => {
|
|
|
38
38
|
waitingForOthersToJoin: null,
|
|
39
39
|
canSendReactions: null,
|
|
40
40
|
canManageBreakout: null,
|
|
41
|
+
canBroadcastMessageToBreakout: null,
|
|
41
42
|
canAdmitLobbyToBreakout: null,
|
|
42
43
|
canUserAskForHelp: null,
|
|
43
44
|
canUserRenameSelfAndObserved: null,
|
|
@@ -108,6 +109,7 @@ describe('plugin-meetings', () => {
|
|
|
108
109
|
'waitingForOthersToJoin',
|
|
109
110
|
'canSendReactions',
|
|
110
111
|
'canManageBreakout',
|
|
112
|
+
'canBroadcastMessageToBreakout',
|
|
111
113
|
'canAdmitLobbyToBreakout',
|
|
112
114
|
'canUserAskForHelp',
|
|
113
115
|
'canUserRenameSelfAndObserved',
|
|
@@ -590,6 +590,13 @@ describe('plugin-meetings', () => {
|
|
|
590
590
|
});
|
|
591
591
|
});
|
|
592
592
|
|
|
593
|
+
describe('canBroadcastMessageToBreakout', () => {
|
|
594
|
+
it('works as expected', () => {
|
|
595
|
+
assert.deepEqual(MeetingUtil.canBroadcastMessageToBreakout(['BROADCAST_MESSAGE_TO_BREAKOUT']), true);
|
|
596
|
+
assert.deepEqual(MeetingUtil.canBroadcastMessageToBreakout([]), false);
|
|
597
|
+
});
|
|
598
|
+
});
|
|
599
|
+
|
|
593
600
|
describe('isSuppressBreakoutSupport', () => {
|
|
594
601
|
it('works as expected', () => {
|
|
595
602
|
assert.deepEqual(
|