@webex/plugin-meetings 3.11.0-next.37 → 3.11.0-next.39
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/aiEnableRequest/index.js +1 -1
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +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 +2 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
- package/dist/types/meeting/util.d.ts +1 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +9 -9
- package/src/constants.ts +2 -0
- package/src/meeting/in-meeting-actions.ts +4 -0
- package/src/meeting/index.ts +3 -0
- package/src/meeting/util.ts +5 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
- package/test/unit/spec/meeting/index.js +6 -0
- package/test/unit/spec/meeting/utils.js +40 -0
package/dist/meeting/util.js
CHANGED
|
@@ -622,6 +622,9 @@ var MeetingUtil = {
|
|
|
622
622
|
bothLeaveAndEndMeetingAvailable: function bothLeaveAndEndMeetingAvailable(displayHints) {
|
|
623
623
|
return displayHints.includes(_constants.DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) || displayHints.includes(_constants.DISPLAY_HINTS.LEAVE_END_MEETING);
|
|
624
624
|
},
|
|
625
|
+
requireHostEndMeetingBeforeLeave: function requireHostEndMeetingBeforeLeave(displayHints) {
|
|
626
|
+
return displayHints.includes(_constants.DISPLAY_HINTS.REQUIRE_HOST_END_MEETING_BEFORE_LEAVE) || !displayHints.includes(_constants.DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) && displayHints.includes(_constants.DISPLAY_HINTS.END_MEETING);
|
|
627
|
+
},
|
|
625
628
|
canManageBreakout: function canManageBreakout(displayHints) {
|
|
626
629
|
return displayHints.includes(_constants.DISPLAY_HINTS.BREAKOUT_MANAGEMENT);
|
|
627
630
|
},
|
package/dist/meeting/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_url","_interopRequireDefault","require","_lodash","_webexErrors","_loggerProxy","_constants","_browserDetection","_intentToJoin","_joinMeeting2","_parameter","_permission","_passwordError","_captchaError","_triggerProxy","_types","_createForOfIteratorHelper","r","e","t","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","MeetingUtil","parseLocusJoin","response","parsed","locus","body","dataSets","metadata","metaData","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","mediaConnection","mediaId","sanitizeWebSocketUrl","urlString","parsedUrl","parse","protocol","host","pathname","normalizedPathname","concat","error","LoggerProxy","logger","warn","_urlsPartiallyMatch","url1","url2","parsedUrl1","parsedUrl2","host1","host2","pathname1","pathname2","combined1","combined2","endsWith","getSocketUrlInfo","webex","_webex$internal","_webex$internal$mercu","_webex$internal$mercu2","_webex$internal2","_webex$internal2$devi","mercuryUrl","internal","mercury","socket","deviceUrl","device","webSocketUrl","sanitizedMercuryUrl","sanitizedDeviceUrl","hasMismatchedSocket","mercurySocketUrl","deviceSocketUrl","remoteUpdateAudioVideo","meeting","audioMuted","videoMuted","_promise","reject","ParameterError","locusMediaRequest","send","type","selfUrl","sequence","locusInfo","muteOptions","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","_err$body","errorCode","INTENT_TO_JOIN","includes","getIpVersion","_webex$internal$devic","ipNetworkDetector","supportsIpV4","supportsIpV6","config","meetings","backendIpv6NativeSupport","BrowserDetection","isBrowser","undefined","IP_VERSION","ipv4_and_ipv6","only_ipv4","only_ipv6","unknown","getCaEventLabelsForIpVersion","ipver","joinMeeting","_joinMeeting","_asyncToGenerator2","_regenerator","mark","_callee","options","_meeting$meetingInfo","reachability","clientMediaPreferences","_t","wrap","_context","prev","abrupt","getWebexObject","newMetrics","submitClientEvent","meetingId","joinCookie","preferTranscoding","isMultistream","getClientMediaPreferences","sent","roapMessage","getReachabilityReportToAttachToRoap","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","locusClusterUrl","meetingInfo","correlationId","permissionToken","resourceId","moderator","pin","moveToResource","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","alias","then","res","_res$headers","setLocus","isoLocalClientMeetingJoinTime","headers","date","socketUrlInfo","payload","trigger","identifiers","trackingId","trackingid","eventData","catch","_meeting$meetingInfo2","meetingLookupUrl","rawError","stop","_x","_x2","cleanUp","_meeting$webex","_meeting$webex$intern","_meeting$webex$intern2","_meeting$webex$intern3","meetingEnded","stopPeriodicLogUpload","breakouts","simultaneousInterpretation","callDiagnosticMetrics","clearEventLimitsForCorrelationId","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeRemoteStreams","closePeerConnections","cleanupLocalStreams","unsetRemoteStreams","unsetPeerConnections","reconnectionManager","stopKeepAlive","_meeting$config","enableAutomaticLLM","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","prepareLeaveMeetingOptions","defaultOptions","leaveMeeting","isUserInLeftState","UserNotJoinedError","leaveOptions","moveMeeting","declineMeeting","reason","_locusInfo$parsedLocu","_locusInfo$parsedLocu2","parsedLocus","state","_LEFT_","isUserInIdleState","_locusInfo$parsedLocu3","_locusInfo$parsedLocu4","_IDLE_","isUserInJoinedState","_locusInfo$parsedLocu5","_locusInfo$parsedLocu6","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","errorToThrow","CaptchaError","errors","fatal","category","shownToUser","code","errorDescription","rawErrorMessage","sdkMessage","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","IntentToJoinError","JoinMeetingError","buildLeaveFetchRequestOptions","buildLeaveMeetingRequestOptions","getTrack","stream","audioTrack","videoTrack","audioTracks","videoTracks","getAudioTracks","getVideoTracks","_audioTracks","_audioTracks2","_slicedToArray2","_videoTracks","_videoTracks2","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","_locusInfo$parsedLocu7","_locusInfo$parsedLocu8","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","canStartBreakout","DISABLE_BREAKOUT_START","canBroadcastMessageToBreakout","policies","BROADCAST_MESSAGE_TO_BREAKOUT","SELF_POLICY","SUPPORT_BROADCAST_MESSAGE","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","audioStream","LOG_HEADER","settings","getSettings","deviceId","log","_stringify","handleVideoLogging","videoStream","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","isSaveTranscriptsEnabled","SAVE_TRANSCRIPTS_ENABLED","canStartTranscribing","TRANSCRIPTION_CONTROL_START","canStopTranscribing","TRANSCRIPTION_CONTROL_STOP","isClosedCaptionActive","CAPTION_STATUS_ACTIVE","canStartManualCaption","MANUAL_CAPTION_START","isLocalRecordingStarted","LOCAL_RECORDING_STATUS_STARTED","isLocalRecordingStopped","LOCAL_RECORDING_STATUS_STOPPED","isLocalRecordingPaused","LOCAL_RECORDING_STATUS_PAUSED","isLocalStreamingStarted","STREAMING_STATUS_STARTED","isLocalStreamingStopped","STREAMING_STATUS_STOPPED","canStopManualCaption","MANUAL_CAPTION_STOP","isManualCaptionActive","MANUAL_CAPTION_STATUS_ACTIVE","isSpokenLanguageAutoDetectionEnabled","SPOKEN_LANGUAGE_AUTO_DETECTION_ENABLED","isWebexAssistantActive","WEBEX_ASSISTANT_STATUS_ACTIVE","canViewCaptionPanel","ENABLE_CAPTION_PANEL","isRealTimeTranslationEnabled","DISPLAY_REAL_TIME_TRANSLATION","canSelectSpokenLanguages","DISPLAY_NON_ENGLISH_ASR","waitingForOthersToJoin","WAITING_FOR_OTHERS","showAutoEndMeetingWarning","SHOW_AUTO_END_MEETING_WARNING","canSendReactions","originalValue","REACTIONS_ACTIVE","REACTIONS_INACTIVE","canUserRenameSelfAndObserved","CAN_RENAME_SELF_AND_OBSERVED","requiresPostMeetingDataConsentPrompt","SHOW_POST_MEETING_DATA_CONSENT_PROMPT","canUserRenameOthers","CAN_RENAME_OTHERS","canShareWhiteBoard","SHARE_WHITEBOARD","SUPPORT_WHITEBOARD","canMoveToLobby","MOVE_TO_LOBBY","addSequence","requestBody","_meeting$locusInfo","updateLocusFromApiResponse","_response$body","handleLocusAPIResponse","generateBuildLocusDeltaRequestOptions","originalMeeting","meetingRef","WeakRef","buildLocusDeltaRequestOptions","originalOptions","deref","cloneDeep","generateLocusDeltaRequest","locusDeltaRequest","canAttendeeRequestAiAssistantEnabled","roles","isHostOrCoHost","ServerRoles","Cohost","Moderator","ATTENDEE_REQUEST_AI_ASSISTANT_ENABLED","attendeeRequestAiAssistantDeclinedAll","ATTENDEE_REQUEST_AI_ASSISTANT_DECLINED_ALL","selfSupportsFeature","feature","userPolicies","parseInterpretationInfo","_meetingInfo$meetingS","siInfo","updateMeetingSIEnabled","turnOnSimultaneousInterpretation","currentSIInterpreter","hostSIEnabled","meetingSiteSetting","enableHostInterpreterControlSI","updateHostSIEnabled","renameKey","obj","oldKey","newKey","_meeting$simultaneous","_meeting$simultaneous2","lanuagesInfo","siLanguages","_iterator","_step","language","updateInterpretation","Trigger","file","function","EVENT_TRIGGERS","MEETING_INTERPRETATION_UPDATE","getChangeMeetingFloorErrorPayload","errorPayload","LOCAL_SHARE_ERRORS","UNDEFINED","DEVICE_NOT_JOINED","NO_MEDIA_FOR_DEVICE","NO_CONFLUENCE_ID","CONTENT_SHARING_DISABLED","LOCUS_PARTICIPANT_DNE","CONTENT_REQUEST_WHILE_PENDING_WHITEBOARD","_default","exports"],"sources":["util.ts"],"sourcesContent":["import {LocalCameraStream, LocalMicrophoneStream} from '@webex/media-helpers';\nimport url from 'url';\n\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 LOCAL_SHARE_ERRORS,\n IP_VERSION,\n} from '../constants';\nimport BrowserDetection from '../common/browser-detection';\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';\nimport {ServerRoles} from '../member/types';\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.dataSets = response.body.dataSets;\n parsed.metadata = response.body.metaData;\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 /**\n * Sanitizes a WebSocket URL by extracting only protocol, host, and pathname\n * Returns concatenated protocol + host + pathname for safe logging\n * Note: This is used for logging only; URL matching uses partial matching via _urlsPartiallyMatch\n * @param {string} urlString - The URL to sanitize\n * @returns {string} Sanitized URL or empty string if parsing fails\n */\n sanitizeWebSocketUrl: (urlString: string): string => {\n if (!urlString || typeof urlString !== 'string') {\n return '';\n }\n\n try {\n const parsedUrl = url.parse(urlString);\n const protocol = parsedUrl.protocol || '';\n const host = parsedUrl.host || '';\n\n // If we don't have at least protocol and host, it's not a valid URL\n if (!protocol || !host) {\n return '';\n }\n\n const pathname = parsedUrl.pathname || '';\n\n // Strip trailing slash if pathname is just '/'\n const normalizedPathname = pathname === '/' ? '' : pathname;\n\n return `${protocol}//${host}${normalizedPathname}`;\n } catch (error) {\n LoggerProxy.logger.warn(\n `Meeting:util#sanitizeWebSocketUrl --> unable to parse URL: ${error}`\n );\n\n return '';\n }\n },\n\n /**\n * Checks if two URLs partially match using an endsWith approach\n * Combines host and pathname, then checks if one ends with the other\n * This handles cases where one URL goes through a proxy (e.g., /webproxy/) while the other is direct\n * @param {string} url1 - First URL to compare\n * @param {string} url2 - Second URL to compare\n * @returns {boolean} True if one URL path ends with the other (partial match), false otherwise\n */\n _urlsPartiallyMatch: (url1: string, url2: string): boolean => {\n if (!url1 || !url2) {\n return false;\n }\n\n try {\n const parsedUrl1 = url.parse(url1);\n const parsedUrl2 = url.parse(url2);\n\n const host1 = parsedUrl1.host || '';\n const host2 = parsedUrl2.host || '';\n const pathname1 = parsedUrl1.pathname || '';\n const pathname2 = parsedUrl2.pathname || '';\n\n // If either failed to parse, they don't match\n if (!host1 || !host2 || !pathname1 || !pathname2) {\n return false;\n }\n\n // Combine host and pathname for comparison\n const combined1 = host1 + pathname1;\n const combined2 = host2 + pathname2;\n\n // Check if one combined path ends with the other (handles proxy URLs)\n return combined1.endsWith(combined2) || combined2.endsWith(combined1);\n } catch (e) {\n LoggerProxy.logger.warn('Meeting:util#_urlsPartiallyMatch --> error comparing URLs', e);\n\n return false;\n }\n },\n\n /**\n * Gets socket URL information for metrics, including whether the socket URLs match\n * Uses partial matching to handle proxy URLs (e.g., URLs with /webproxy/ prefix)\n * @param {Object} webex - The webex instance\n * @returns {Object} Object with hasMismatchedSocket, mercurySocketUrl, and deviceSocketUrl properties\n */\n getSocketUrlInfo: (\n webex: any\n ): {hasMismatchedSocket: boolean; mercurySocketUrl: string; deviceSocketUrl: string} => {\n try {\n const mercuryUrl = webex?.internal?.mercury?.socket?.url;\n const deviceUrl = webex?.internal?.device?.webSocketUrl;\n\n const sanitizedMercuryUrl = MeetingUtil.sanitizeWebSocketUrl(mercuryUrl);\n const sanitizedDeviceUrl = MeetingUtil.sanitizeWebSocketUrl(deviceUrl);\n\n // Only report a mismatch if both URLs are present and they don't match\n // If either URL is missing, we can't determine if there's a mismatch, so return false\n let hasMismatchedSocket = false;\n if (sanitizedMercuryUrl && sanitizedDeviceUrl) {\n hasMismatchedSocket = !MeetingUtil._urlsPartiallyMatch(mercuryUrl, deviceUrl);\n }\n\n return {\n hasMismatchedSocket,\n mercurySocketUrl: sanitizedMercuryUrl,\n deviceSocketUrl: sanitizedDeviceUrl,\n };\n } catch (error) {\n LoggerProxy.logger.warn(\n `Meeting:util#getSocketUrlInfo --> error getting socket URL info: ${error}`\n );\n\n return {\n hasMismatchedSocket: false,\n mercurySocketUrl: '',\n deviceSocketUrl: '',\n };\n }\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 return meeting.locusMediaRequest.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 },\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 /**\n * Returns the current state of knowledge about whether we are on an ipv4-only or ipv6-only or mixed (ipv4 and ipv6) network.\n * The return value matches the possible values of \"ipver\" parameter used by the backend APIs.\n *\n * @param {Object} webex webex instance\n * @returns {IP_VERSION|undefined} ipver value to be passed to the backend APIs or undefined if we should not pass any value to the backend\n */\n getIpVersion(webex: any): IP_VERSION | undefined {\n const {supportsIpV4, supportsIpV6} = webex.internal.device.ipNetworkDetector;\n\n if (\n !webex.config.meetings.backendIpv6NativeSupport &&\n BrowserDetection().isBrowser('firefox')\n ) {\n // when backend doesn't support native ipv6,\n // then our NAT64/DNS64 based solution relies on FQDN ICE candidates, but Firefox doesn't support them,\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=1713128\n // so for Firefox we don't want the backend to activate the \"ipv6 feature\"\n return undefined;\n }\n\n if (supportsIpV4 && supportsIpV6) {\n return IP_VERSION.ipv4_and_ipv6;\n }\n\n if (supportsIpV4) {\n return IP_VERSION.only_ipv4;\n }\n\n if (supportsIpV6) {\n return IP_VERSION.only_ipv6;\n }\n\n return IP_VERSION.unknown;\n },\n\n /**\n * Returns CA event labels related to Orpheus ipver parameter that can be sent to CA with any CA event\n * @param {any} webex instance\n * @returns {Array<string>|undefined} array of CA event labels or undefined if no labels should be sent\n */\n getCaEventLabelsForIpVersion(webex: any): Array<string> | undefined {\n const ipver = MeetingUtil.getIpVersion(webex);\n\n switch (ipver) {\n case IP_VERSION.unknown:\n return undefined;\n case IP_VERSION.only_ipv4:\n return ['hasIpv4_true'];\n case IP_VERSION.only_ipv6:\n return ['hasIpv6_true'];\n case IP_VERSION.ipv4_and_ipv6:\n return ['hasIpv4_true', 'hasIpv6_true'];\n default:\n return undefined;\n }\n },\n\n joinMeeting: async (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 let reachability;\n let clientMediaPreferences = {\n // bare minimum fallback value that should allow us to join\n ipver: IP_VERSION.unknown,\n joinCookie: undefined,\n preferTranscoding: !meeting.isMultistream,\n };\n\n try {\n clientMediaPreferences = await webex.meetings.reachability.getClientMediaPreferences(\n meeting.isMultistream,\n MeetingUtil.getIpVersion(webex)\n );\n if (options.roapMessage) {\n // we only need to attach reachability if we are sending a roap message\n // sending reachability on its own will cause Locus to reject our join request\n reachability = await webex.meetings.reachability.getReachabilityReportToAttachToRoap();\n }\n } catch (e) {\n LoggerProxy.logger.error(\n 'Meeting:util#joinMeeting --> Error getting reachability or clientMediaPreferences:',\n e\n );\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 locusClusterUrl: meeting.meetingInfo?.locusClusterUrl,\n correlationId: meeting.correlationId,\n reachability,\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 asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\n locale: options.locale,\n deviceCapabilities: options.deviceCapabilities,\n liveAnnotationSupported: options.liveAnnotationSupported,\n clientMediaPreferences,\n alias: options.alias,\n })\n .then((res) => {\n const parsed = MeetingUtil.parseLocusJoin(res);\n meeting.setLocus(parsed);\n meeting.isoLocalClientMeetingJoinTime = res?.headers?.date; // read from header if exist, else fall back to system clock : https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-555657\n const socketUrlInfo = MeetingUtil.getSocketUrlInfo(webex);\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 eventData: {\n ...socketUrlInfo,\n },\n },\n options: {\n meetingId: meeting.id,\n mediaConnections: parsed.mediaConnections,\n },\n });\n\n return parsed;\n })\n .catch((err) => {\n const socketUrlInfo = MeetingUtil.getSocketUrlInfo(webex);\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.response',\n payload: {\n identifiers: {meetingLookupUrl: meeting.meetingInfo?.meetingLookupUrl},\n eventData: {\n ...socketUrlInfo,\n },\n },\n options: {\n meetingId: meeting.id,\n rawError: err,\n },\n });\n\n throw err;\n });\n },\n\n cleanUp: (meeting) => {\n meeting.getWebexObject().internal.device.meetingEnded();\n meeting.stopPeriodicLogUpload();\n\n meeting.breakouts.cleanUp();\n meeting.simultaneousInterpretation.cleanUp();\n meeting.locusMediaRequest = undefined;\n\n meeting.webex?.internal?.newMetrics?.callDiagnosticMetrics?.clearEventLimitsForCorrelationId(\n meeting.correlationId\n );\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.closeRemoteStreams())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.cleanupLocalStreams();\n meeting.unsetRemoteStreams();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => {\n if (meeting.config?.enableAutomaticLLM) {\n meeting.updateLLMConnection();\n }\n });\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 /**\n * Returns options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} leave options\n */\n prepareLeaveMeetingOptions: (meeting, options: any = {}) => {\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 return {...defaultOptions, ...options};\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 leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, 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 const errorToThrow = new CaptchaError();\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.meetinginfo.response',\n options: {\n meetingId: meeting.id,\n },\n payload: {\n errors: [\n {\n fatal: false,\n category: 'expected',\n name: 'other',\n shownToUser: false,\n errorCode: errorToThrow.code,\n errorDescription: errorToThrow.name,\n rawErrorMessage: errorToThrow.sdkMessage,\n },\n ],\n },\n });\n\n return Promise.reject(errorToThrow);\n }\n\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n const errorToThrow = new PasswordError();\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.meetinginfo.response',\n options: {\n meetingId: meeting.id,\n },\n payload: {\n errors: [\n {\n fatal: false,\n category: 'expected',\n name: 'other',\n shownToUser: false,\n errorCode: errorToThrow.code,\n errorDescription: errorToThrow.name,\n rawErrorMessage: errorToThrow.sdkMessage,\n },\n ],\n },\n });\n\n return Promise.reject(errorToThrow);\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).catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\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('Meeting:util#joinMeetingOptions --> Error joining the call, ', err);\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n },\n\n /**\n * Returns request options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} request options\n */\n buildLeaveFetchRequestOptions: (meeting, options: any = {}) => {\n const leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, options);\n\n return meeting.meetingRequest.buildLeaveMeetingRequestOptions(leaveOptions);\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 canStartBreakout: (displayHints) => !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_START),\n\n canBroadcastMessageToBreakout: (displayHints, policies = {}) =>\n displayHints.includes(DISPLAY_HINTS.BROADCAST_MESSAGE_TO_BREAKOUT) &&\n !!policies[SELF_POLICY.SUPPORT_BROADCAST_MESSAGE],\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: (audioStream?: LocalMicrophoneStream) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioStream) {\n const settings = audioStream.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: (videoStream?: LocalCameraStream) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoStream) {\n const settings = videoStream.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 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 canStartManualCaption: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.MANUAL_CAPTION_START),\n\n isLocalRecordingStarted: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCAL_RECORDING_STATUS_STARTED),\n\n isLocalRecordingStopped: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCAL_RECORDING_STATUS_STOPPED),\n\n isLocalRecordingPaused: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCAL_RECORDING_STATUS_PAUSED),\n\n isLocalStreamingStarted: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.STREAMING_STATUS_STARTED),\n\n isLocalStreamingStopped: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.STREAMING_STATUS_STOPPED),\n\n canStopManualCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.MANUAL_CAPTION_STOP),\n\n isManualCaptionActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.MANUAL_CAPTION_STATUS_ACTIVE),\n\n isSpokenLanguageAutoDetectionEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SPOKEN_LANGUAGE_AUTO_DETECTION_ENABLED),\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 showAutoEndMeetingWarning: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SHOW_AUTO_END_MEETING_WARNING),\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 requiresPostMeetingDataConsentPrompt: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SHOW_POST_MEETING_DATA_CONSENT_PROMPT),\n\n canUserRenameOthers: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS),\n\n // Default empty value for policies if we get an undefined value (ie permissionToken is not available)\n canShareWhiteBoard: (displayHints, policies = {}) =>\n displayHints.includes(DISPLAY_HINTS.SHARE_WHITEBOARD) &&\n !!policies[SELF_POLICY.SUPPORT_WHITEBOARD],\n\n canMoveToLobby: (displayHints) => displayHints.includes(DISPLAY_HINTS.MOVE_TO_LOBBY),\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 locus\n * information returned from API requests made to Locus\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 updateLocusFromApiResponse: (meeting, response) => {\n if (!meeting) {\n return response;\n }\n\n if (response?.body?.locus) {\n meeting.locusInfo.handleLocusAPIResponse(meeting, response.body);\n }\n\n return response;\n },\n\n generateBuildLocusDeltaRequestOptions: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const buildLocusDeltaRequestOptions = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return originalOptions;\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 options;\n };\n\n return buildLocusDeltaRequestOptions;\n },\n\n generateLocusDeltaRequest: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const buildLocusDeltaRequestOptions =\n MeetingUtil.generateBuildLocusDeltaRequestOptions(originalMeeting);\n\n const locusDeltaRequest = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return Promise.resolve();\n }\n\n const options = buildLocusDeltaRequestOptions(originalOptions);\n\n return meeting\n .request(options)\n .then((response) => MeetingUtil.updateLocusFromApiResponse(meeting, response));\n };\n\n return locusDeltaRequest;\n },\n\n canAttendeeRequestAiAssistantEnabled: (displayHints = [], roles: any[] = []) => {\n const isHostOrCoHost =\n roles.includes(ServerRoles.Cohost) || roles.includes(ServerRoles.Moderator);\n\n if (isHostOrCoHost) {\n return false;\n }\n\n if (displayHints.includes(DISPLAY_HINTS.ATTENDEE_REQUEST_AI_ASSISTANT_ENABLED)) {\n return true;\n }\n\n return false;\n },\n\n attendeeRequestAiAssistantDeclinedAll: (displayHints = []) =>\n displayHints.includes(DISPLAY_HINTS.ATTENDEE_REQUEST_AI_ASSISTANT_DECLINED_ALL),\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({siLanguages: 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 /**\n * Returns a CA-recognized error payload for the specified raw error message/reason.\n *\n * New errors can be added to this function for handling in the future\n *\n * @param {String} reason the raw error message\n * @returns {Array<object>} an array of payload objects\n */\n getChangeMeetingFloorErrorPayload: (reason: string) => {\n const errorPayload = {\n errorDescription: reason,\n name: 'locus.response',\n shownToUser: false,\n };\n if (reason.includes(LOCAL_SHARE_ERRORS.UNDEFINED)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 1100,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.DEVICE_NOT_JOINED)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 4050,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.NO_MEDIA_FOR_DEVICE)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'media',\n errorCode: 2048,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.NO_CONFLUENCE_ID)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 4064,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.CONTENT_SHARING_DISABLED)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'expected',\n errorCode: 4065,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.LOCUS_PARTICIPANT_DNE)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 4066,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.CONTENT_REQUEST_WHILE_PENDING_WHITEBOARD)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'expected',\n errorCode: 4067,\n },\n ];\n }\n\n // return unknown error\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 1100,\n },\n ];\n },\n};\n\nexport default MeetingUtil;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_url","_interopRequireDefault","require","_lodash","_webexErrors","_loggerProxy","_constants","_browserDetection","_intentToJoin","_joinMeeting2","_parameter","_permission","_passwordError","_captchaError","_triggerProxy","_types","_createForOfIteratorHelper","r","e","t","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","MeetingUtil","parseLocusJoin","response","parsed","locus","body","dataSets","metadata","metaData","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","mediaConnection","mediaId","sanitizeWebSocketUrl","urlString","parsedUrl","parse","protocol","host","pathname","normalizedPathname","concat","error","LoggerProxy","logger","warn","_urlsPartiallyMatch","url1","url2","parsedUrl1","parsedUrl2","host1","host2","pathname1","pathname2","combined1","combined2","endsWith","getSocketUrlInfo","webex","_webex$internal","_webex$internal$mercu","_webex$internal$mercu2","_webex$internal2","_webex$internal2$devi","mercuryUrl","internal","mercury","socket","deviceUrl","device","webSocketUrl","sanitizedMercuryUrl","sanitizedDeviceUrl","hasMismatchedSocket","mercurySocketUrl","deviceSocketUrl","remoteUpdateAudioVideo","meeting","audioMuted","videoMuted","_promise","reject","ParameterError","locusMediaRequest","send","type","selfUrl","sequence","locusInfo","muteOptions","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","_err$body","errorCode","INTENT_TO_JOIN","includes","getIpVersion","_webex$internal$devic","ipNetworkDetector","supportsIpV4","supportsIpV6","config","meetings","backendIpv6NativeSupport","BrowserDetection","isBrowser","undefined","IP_VERSION","ipv4_and_ipv6","only_ipv4","only_ipv6","unknown","getCaEventLabelsForIpVersion","ipver","joinMeeting","_joinMeeting","_asyncToGenerator2","_regenerator","mark","_callee","options","_meeting$meetingInfo","reachability","clientMediaPreferences","_t","wrap","_context","prev","abrupt","getWebexObject","newMetrics","submitClientEvent","meetingId","joinCookie","preferTranscoding","isMultistream","getClientMediaPreferences","sent","roapMessage","getReachabilityReportToAttachToRoap","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","locusClusterUrl","meetingInfo","correlationId","permissionToken","resourceId","moderator","pin","moveToResource","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","alias","then","res","_res$headers","setLocus","isoLocalClientMeetingJoinTime","headers","date","socketUrlInfo","payload","trigger","identifiers","trackingId","trackingid","eventData","catch","_meeting$meetingInfo2","meetingLookupUrl","rawError","stop","_x","_x2","cleanUp","_meeting$webex","_meeting$webex$intern","_meeting$webex$intern2","_meeting$webex$intern3","meetingEnded","stopPeriodicLogUpload","breakouts","simultaneousInterpretation","callDiagnosticMetrics","clearEventLimitsForCorrelationId","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeRemoteStreams","closePeerConnections","cleanupLocalStreams","unsetRemoteStreams","unsetPeerConnections","reconnectionManager","stopKeepAlive","_meeting$config","enableAutomaticLLM","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","prepareLeaveMeetingOptions","defaultOptions","leaveMeeting","isUserInLeftState","UserNotJoinedError","leaveOptions","moveMeeting","declineMeeting","reason","_locusInfo$parsedLocu","_locusInfo$parsedLocu2","parsedLocus","state","_LEFT_","isUserInIdleState","_locusInfo$parsedLocu3","_locusInfo$parsedLocu4","_IDLE_","isUserInJoinedState","_locusInfo$parsedLocu5","_locusInfo$parsedLocu6","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","errorToThrow","CaptchaError","errors","fatal","category","shownToUser","code","errorDescription","rawErrorMessage","sdkMessage","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","IntentToJoinError","JoinMeetingError","buildLeaveFetchRequestOptions","buildLeaveMeetingRequestOptions","getTrack","stream","audioTrack","videoTrack","audioTracks","videoTracks","getAudioTracks","getVideoTracks","_audioTracks","_audioTracks2","_slicedToArray2","_videoTracks","_videoTracks2","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","_locusInfo$parsedLocu7","_locusInfo$parsedLocu8","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","requireHostEndMeetingBeforeLeave","REQUIRE_HOST_END_MEETING_BEFORE_LEAVE","END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","canStartBreakout","DISABLE_BREAKOUT_START","canBroadcastMessageToBreakout","policies","BROADCAST_MESSAGE_TO_BREAKOUT","SELF_POLICY","SUPPORT_BROADCAST_MESSAGE","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","audioStream","LOG_HEADER","settings","getSettings","deviceId","log","_stringify","handleVideoLogging","videoStream","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","isSaveTranscriptsEnabled","SAVE_TRANSCRIPTS_ENABLED","canStartTranscribing","TRANSCRIPTION_CONTROL_START","canStopTranscribing","TRANSCRIPTION_CONTROL_STOP","isClosedCaptionActive","CAPTION_STATUS_ACTIVE","canStartManualCaption","MANUAL_CAPTION_START","isLocalRecordingStarted","LOCAL_RECORDING_STATUS_STARTED","isLocalRecordingStopped","LOCAL_RECORDING_STATUS_STOPPED","isLocalRecordingPaused","LOCAL_RECORDING_STATUS_PAUSED","isLocalStreamingStarted","STREAMING_STATUS_STARTED","isLocalStreamingStopped","STREAMING_STATUS_STOPPED","canStopManualCaption","MANUAL_CAPTION_STOP","isManualCaptionActive","MANUAL_CAPTION_STATUS_ACTIVE","isSpokenLanguageAutoDetectionEnabled","SPOKEN_LANGUAGE_AUTO_DETECTION_ENABLED","isWebexAssistantActive","WEBEX_ASSISTANT_STATUS_ACTIVE","canViewCaptionPanel","ENABLE_CAPTION_PANEL","isRealTimeTranslationEnabled","DISPLAY_REAL_TIME_TRANSLATION","canSelectSpokenLanguages","DISPLAY_NON_ENGLISH_ASR","waitingForOthersToJoin","WAITING_FOR_OTHERS","showAutoEndMeetingWarning","SHOW_AUTO_END_MEETING_WARNING","canSendReactions","originalValue","REACTIONS_ACTIVE","REACTIONS_INACTIVE","canUserRenameSelfAndObserved","CAN_RENAME_SELF_AND_OBSERVED","requiresPostMeetingDataConsentPrompt","SHOW_POST_MEETING_DATA_CONSENT_PROMPT","canUserRenameOthers","CAN_RENAME_OTHERS","canShareWhiteBoard","SHARE_WHITEBOARD","SUPPORT_WHITEBOARD","canMoveToLobby","MOVE_TO_LOBBY","addSequence","requestBody","_meeting$locusInfo","updateLocusFromApiResponse","_response$body","handleLocusAPIResponse","generateBuildLocusDeltaRequestOptions","originalMeeting","meetingRef","WeakRef","buildLocusDeltaRequestOptions","originalOptions","deref","cloneDeep","generateLocusDeltaRequest","locusDeltaRequest","canAttendeeRequestAiAssistantEnabled","roles","isHostOrCoHost","ServerRoles","Cohost","Moderator","ATTENDEE_REQUEST_AI_ASSISTANT_ENABLED","attendeeRequestAiAssistantDeclinedAll","ATTENDEE_REQUEST_AI_ASSISTANT_DECLINED_ALL","selfSupportsFeature","feature","userPolicies","parseInterpretationInfo","_meetingInfo$meetingS","siInfo","updateMeetingSIEnabled","turnOnSimultaneousInterpretation","currentSIInterpreter","hostSIEnabled","meetingSiteSetting","enableHostInterpreterControlSI","updateHostSIEnabled","renameKey","obj","oldKey","newKey","_meeting$simultaneous","_meeting$simultaneous2","lanuagesInfo","siLanguages","_iterator","_step","language","updateInterpretation","Trigger","file","function","EVENT_TRIGGERS","MEETING_INTERPRETATION_UPDATE","getChangeMeetingFloorErrorPayload","errorPayload","LOCAL_SHARE_ERRORS","UNDEFINED","DEVICE_NOT_JOINED","NO_MEDIA_FOR_DEVICE","NO_CONFLUENCE_ID","CONTENT_SHARING_DISABLED","LOCUS_PARTICIPANT_DNE","CONTENT_REQUEST_WHILE_PENDING_WHITEBOARD","_default","exports"],"sources":["util.ts"],"sourcesContent":["import {LocalCameraStream, LocalMicrophoneStream} from '@webex/media-helpers';\nimport url from 'url';\n\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 LOCAL_SHARE_ERRORS,\n IP_VERSION,\n} from '../constants';\nimport BrowserDetection from '../common/browser-detection';\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';\nimport {ServerRoles} from '../member/types';\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.dataSets = response.body.dataSets;\n parsed.metadata = response.body.metaData;\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 /**\n * Sanitizes a WebSocket URL by extracting only protocol, host, and pathname\n * Returns concatenated protocol + host + pathname for safe logging\n * Note: This is used for logging only; URL matching uses partial matching via _urlsPartiallyMatch\n * @param {string} urlString - The URL to sanitize\n * @returns {string} Sanitized URL or empty string if parsing fails\n */\n sanitizeWebSocketUrl: (urlString: string): string => {\n if (!urlString || typeof urlString !== 'string') {\n return '';\n }\n\n try {\n const parsedUrl = url.parse(urlString);\n const protocol = parsedUrl.protocol || '';\n const host = parsedUrl.host || '';\n\n // If we don't have at least protocol and host, it's not a valid URL\n if (!protocol || !host) {\n return '';\n }\n\n const pathname = parsedUrl.pathname || '';\n\n // Strip trailing slash if pathname is just '/'\n const normalizedPathname = pathname === '/' ? '' : pathname;\n\n return `${protocol}//${host}${normalizedPathname}`;\n } catch (error) {\n LoggerProxy.logger.warn(\n `Meeting:util#sanitizeWebSocketUrl --> unable to parse URL: ${error}`\n );\n\n return '';\n }\n },\n\n /**\n * Checks if two URLs partially match using an endsWith approach\n * Combines host and pathname, then checks if one ends with the other\n * This handles cases where one URL goes through a proxy (e.g., /webproxy/) while the other is direct\n * @param {string} url1 - First URL to compare\n * @param {string} url2 - Second URL to compare\n * @returns {boolean} True if one URL path ends with the other (partial match), false otherwise\n */\n _urlsPartiallyMatch: (url1: string, url2: string): boolean => {\n if (!url1 || !url2) {\n return false;\n }\n\n try {\n const parsedUrl1 = url.parse(url1);\n const parsedUrl2 = url.parse(url2);\n\n const host1 = parsedUrl1.host || '';\n const host2 = parsedUrl2.host || '';\n const pathname1 = parsedUrl1.pathname || '';\n const pathname2 = parsedUrl2.pathname || '';\n\n // If either failed to parse, they don't match\n if (!host1 || !host2 || !pathname1 || !pathname2) {\n return false;\n }\n\n // Combine host and pathname for comparison\n const combined1 = host1 + pathname1;\n const combined2 = host2 + pathname2;\n\n // Check if one combined path ends with the other (handles proxy URLs)\n return combined1.endsWith(combined2) || combined2.endsWith(combined1);\n } catch (e) {\n LoggerProxy.logger.warn('Meeting:util#_urlsPartiallyMatch --> error comparing URLs', e);\n\n return false;\n }\n },\n\n /**\n * Gets socket URL information for metrics, including whether the socket URLs match\n * Uses partial matching to handle proxy URLs (e.g., URLs with /webproxy/ prefix)\n * @param {Object} webex - The webex instance\n * @returns {Object} Object with hasMismatchedSocket, mercurySocketUrl, and deviceSocketUrl properties\n */\n getSocketUrlInfo: (\n webex: any\n ): {hasMismatchedSocket: boolean; mercurySocketUrl: string; deviceSocketUrl: string} => {\n try {\n const mercuryUrl = webex?.internal?.mercury?.socket?.url;\n const deviceUrl = webex?.internal?.device?.webSocketUrl;\n\n const sanitizedMercuryUrl = MeetingUtil.sanitizeWebSocketUrl(mercuryUrl);\n const sanitizedDeviceUrl = MeetingUtil.sanitizeWebSocketUrl(deviceUrl);\n\n // Only report a mismatch if both URLs are present and they don't match\n // If either URL is missing, we can't determine if there's a mismatch, so return false\n let hasMismatchedSocket = false;\n if (sanitizedMercuryUrl && sanitizedDeviceUrl) {\n hasMismatchedSocket = !MeetingUtil._urlsPartiallyMatch(mercuryUrl, deviceUrl);\n }\n\n return {\n hasMismatchedSocket,\n mercurySocketUrl: sanitizedMercuryUrl,\n deviceSocketUrl: sanitizedDeviceUrl,\n };\n } catch (error) {\n LoggerProxy.logger.warn(\n `Meeting:util#getSocketUrlInfo --> error getting socket URL info: ${error}`\n );\n\n return {\n hasMismatchedSocket: false,\n mercurySocketUrl: '',\n deviceSocketUrl: '',\n };\n }\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 return meeting.locusMediaRequest.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 },\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 /**\n * Returns the current state of knowledge about whether we are on an ipv4-only or ipv6-only or mixed (ipv4 and ipv6) network.\n * The return value matches the possible values of \"ipver\" parameter used by the backend APIs.\n *\n * @param {Object} webex webex instance\n * @returns {IP_VERSION|undefined} ipver value to be passed to the backend APIs or undefined if we should not pass any value to the backend\n */\n getIpVersion(webex: any): IP_VERSION | undefined {\n const {supportsIpV4, supportsIpV6} = webex.internal.device.ipNetworkDetector;\n\n if (\n !webex.config.meetings.backendIpv6NativeSupport &&\n BrowserDetection().isBrowser('firefox')\n ) {\n // when backend doesn't support native ipv6,\n // then our NAT64/DNS64 based solution relies on FQDN ICE candidates, but Firefox doesn't support them,\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=1713128\n // so for Firefox we don't want the backend to activate the \"ipv6 feature\"\n return undefined;\n }\n\n if (supportsIpV4 && supportsIpV6) {\n return IP_VERSION.ipv4_and_ipv6;\n }\n\n if (supportsIpV4) {\n return IP_VERSION.only_ipv4;\n }\n\n if (supportsIpV6) {\n return IP_VERSION.only_ipv6;\n }\n\n return IP_VERSION.unknown;\n },\n\n /**\n * Returns CA event labels related to Orpheus ipver parameter that can be sent to CA with any CA event\n * @param {any} webex instance\n * @returns {Array<string>|undefined} array of CA event labels or undefined if no labels should be sent\n */\n getCaEventLabelsForIpVersion(webex: any): Array<string> | undefined {\n const ipver = MeetingUtil.getIpVersion(webex);\n\n switch (ipver) {\n case IP_VERSION.unknown:\n return undefined;\n case IP_VERSION.only_ipv4:\n return ['hasIpv4_true'];\n case IP_VERSION.only_ipv6:\n return ['hasIpv6_true'];\n case IP_VERSION.ipv4_and_ipv6:\n return ['hasIpv4_true', 'hasIpv6_true'];\n default:\n return undefined;\n }\n },\n\n joinMeeting: async (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 let reachability;\n let clientMediaPreferences = {\n // bare minimum fallback value that should allow us to join\n ipver: IP_VERSION.unknown,\n joinCookie: undefined,\n preferTranscoding: !meeting.isMultistream,\n };\n\n try {\n clientMediaPreferences = await webex.meetings.reachability.getClientMediaPreferences(\n meeting.isMultistream,\n MeetingUtil.getIpVersion(webex)\n );\n if (options.roapMessage) {\n // we only need to attach reachability if we are sending a roap message\n // sending reachability on its own will cause Locus to reject our join request\n reachability = await webex.meetings.reachability.getReachabilityReportToAttachToRoap();\n }\n } catch (e) {\n LoggerProxy.logger.error(\n 'Meeting:util#joinMeeting --> Error getting reachability or clientMediaPreferences:',\n e\n );\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 locusClusterUrl: meeting.meetingInfo?.locusClusterUrl,\n correlationId: meeting.correlationId,\n reachability,\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 asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\n locale: options.locale,\n deviceCapabilities: options.deviceCapabilities,\n liveAnnotationSupported: options.liveAnnotationSupported,\n clientMediaPreferences,\n alias: options.alias,\n })\n .then((res) => {\n const parsed = MeetingUtil.parseLocusJoin(res);\n meeting.setLocus(parsed);\n meeting.isoLocalClientMeetingJoinTime = res?.headers?.date; // read from header if exist, else fall back to system clock : https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-555657\n const socketUrlInfo = MeetingUtil.getSocketUrlInfo(webex);\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 eventData: {\n ...socketUrlInfo,\n },\n },\n options: {\n meetingId: meeting.id,\n mediaConnections: parsed.mediaConnections,\n },\n });\n\n return parsed;\n })\n .catch((err) => {\n const socketUrlInfo = MeetingUtil.getSocketUrlInfo(webex);\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.response',\n payload: {\n identifiers: {meetingLookupUrl: meeting.meetingInfo?.meetingLookupUrl},\n eventData: {\n ...socketUrlInfo,\n },\n },\n options: {\n meetingId: meeting.id,\n rawError: err,\n },\n });\n\n throw err;\n });\n },\n\n cleanUp: (meeting) => {\n meeting.getWebexObject().internal.device.meetingEnded();\n meeting.stopPeriodicLogUpload();\n\n meeting.breakouts.cleanUp();\n meeting.simultaneousInterpretation.cleanUp();\n meeting.locusMediaRequest = undefined;\n\n meeting.webex?.internal?.newMetrics?.callDiagnosticMetrics?.clearEventLimitsForCorrelationId(\n meeting.correlationId\n );\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.closeRemoteStreams())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.cleanupLocalStreams();\n meeting.unsetRemoteStreams();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => {\n if (meeting.config?.enableAutomaticLLM) {\n meeting.updateLLMConnection();\n }\n });\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 /**\n * Returns options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} leave options\n */\n prepareLeaveMeetingOptions: (meeting, options: any = {}) => {\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 return {...defaultOptions, ...options};\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 leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, 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 const errorToThrow = new CaptchaError();\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.meetinginfo.response',\n options: {\n meetingId: meeting.id,\n },\n payload: {\n errors: [\n {\n fatal: false,\n category: 'expected',\n name: 'other',\n shownToUser: false,\n errorCode: errorToThrow.code,\n errorDescription: errorToThrow.name,\n rawErrorMessage: errorToThrow.sdkMessage,\n },\n ],\n },\n });\n\n return Promise.reject(errorToThrow);\n }\n\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n const errorToThrow = new PasswordError();\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.meetinginfo.response',\n options: {\n meetingId: meeting.id,\n },\n payload: {\n errors: [\n {\n fatal: false,\n category: 'expected',\n name: 'other',\n shownToUser: false,\n errorCode: errorToThrow.code,\n errorDescription: errorToThrow.name,\n rawErrorMessage: errorToThrow.sdkMessage,\n },\n ],\n },\n });\n\n return Promise.reject(errorToThrow);\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).catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\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('Meeting:util#joinMeetingOptions --> Error joining the call, ', err);\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n },\n\n /**\n * Returns request options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} request options\n */\n buildLeaveFetchRequestOptions: (meeting, options: any = {}) => {\n const leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, options);\n\n return meeting.meetingRequest.buildLeaveMeetingRequestOptions(leaveOptions);\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 requireHostEndMeetingBeforeLeave: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.REQUIRE_HOST_END_MEETING_BEFORE_LEAVE) ||\n (!displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) &&\n displayHints.includes(DISPLAY_HINTS.END_MEETING)),\n\n canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),\n\n canStartBreakout: (displayHints) => !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_START),\n\n canBroadcastMessageToBreakout: (displayHints, policies = {}) =>\n displayHints.includes(DISPLAY_HINTS.BROADCAST_MESSAGE_TO_BREAKOUT) &&\n !!policies[SELF_POLICY.SUPPORT_BROADCAST_MESSAGE],\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: (audioStream?: LocalMicrophoneStream) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioStream) {\n const settings = audioStream.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: (videoStream?: LocalCameraStream) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoStream) {\n const settings = videoStream.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 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 canStartManualCaption: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.MANUAL_CAPTION_START),\n\n isLocalRecordingStarted: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCAL_RECORDING_STATUS_STARTED),\n\n isLocalRecordingStopped: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCAL_RECORDING_STATUS_STOPPED),\n\n isLocalRecordingPaused: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCAL_RECORDING_STATUS_PAUSED),\n\n isLocalStreamingStarted: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.STREAMING_STATUS_STARTED),\n\n isLocalStreamingStopped: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.STREAMING_STATUS_STOPPED),\n\n canStopManualCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.MANUAL_CAPTION_STOP),\n\n isManualCaptionActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.MANUAL_CAPTION_STATUS_ACTIVE),\n\n isSpokenLanguageAutoDetectionEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SPOKEN_LANGUAGE_AUTO_DETECTION_ENABLED),\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 showAutoEndMeetingWarning: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SHOW_AUTO_END_MEETING_WARNING),\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 requiresPostMeetingDataConsentPrompt: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SHOW_POST_MEETING_DATA_CONSENT_PROMPT),\n\n canUserRenameOthers: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS),\n\n // Default empty value for policies if we get an undefined value (ie permissionToken is not available)\n canShareWhiteBoard: (displayHints, policies = {}) =>\n displayHints.includes(DISPLAY_HINTS.SHARE_WHITEBOARD) &&\n !!policies[SELF_POLICY.SUPPORT_WHITEBOARD],\n\n canMoveToLobby: (displayHints) => displayHints.includes(DISPLAY_HINTS.MOVE_TO_LOBBY),\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 locus\n * information returned from API requests made to Locus\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 updateLocusFromApiResponse: (meeting, response) => {\n if (!meeting) {\n return response;\n }\n\n if (response?.body?.locus) {\n meeting.locusInfo.handleLocusAPIResponse(meeting, response.body);\n }\n\n return response;\n },\n\n generateBuildLocusDeltaRequestOptions: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const buildLocusDeltaRequestOptions = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return originalOptions;\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 options;\n };\n\n return buildLocusDeltaRequestOptions;\n },\n\n generateLocusDeltaRequest: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const buildLocusDeltaRequestOptions =\n MeetingUtil.generateBuildLocusDeltaRequestOptions(originalMeeting);\n\n const locusDeltaRequest = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return Promise.resolve();\n }\n\n const options = buildLocusDeltaRequestOptions(originalOptions);\n\n return meeting\n .request(options)\n .then((response) => MeetingUtil.updateLocusFromApiResponse(meeting, response));\n };\n\n return locusDeltaRequest;\n },\n\n canAttendeeRequestAiAssistantEnabled: (displayHints = [], roles: any[] = []) => {\n const isHostOrCoHost =\n roles.includes(ServerRoles.Cohost) || roles.includes(ServerRoles.Moderator);\n\n if (isHostOrCoHost) {\n return false;\n }\n\n if (displayHints.includes(DISPLAY_HINTS.ATTENDEE_REQUEST_AI_ASSISTANT_ENABLED)) {\n return true;\n }\n\n return false;\n },\n\n attendeeRequestAiAssistantDeclinedAll: (displayHints = []) =>\n displayHints.includes(DISPLAY_HINTS.ATTENDEE_REQUEST_AI_ASSISTANT_DECLINED_ALL),\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({siLanguages: 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 /**\n * Returns a CA-recognized error payload for the specified raw error message/reason.\n *\n * New errors can be added to this function for handling in the future\n *\n * @param {String} reason the raw error message\n * @returns {Array<object>} an array of payload objects\n */\n getChangeMeetingFloorErrorPayload: (reason: string) => {\n const errorPayload = {\n errorDescription: reason,\n name: 'locus.response',\n shownToUser: false,\n };\n if (reason.includes(LOCAL_SHARE_ERRORS.UNDEFINED)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 1100,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.DEVICE_NOT_JOINED)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 4050,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.NO_MEDIA_FOR_DEVICE)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'media',\n errorCode: 2048,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.NO_CONFLUENCE_ID)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 4064,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.CONTENT_SHARING_DISABLED)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'expected',\n errorCode: 4065,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.LOCUS_PARTICIPANT_DNE)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 4066,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.CONTENT_REQUEST_WHILE_PENDING_WHITEBOARD)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'expected',\n errorCode: 4067,\n },\n ];\n }\n\n // return unknown error\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 1100,\n },\n ];\n },\n};\n\nexport default MeetingUtil;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -802,6 +802,8 @@ export declare const DISPLAY_HINTS: {
|
|
|
802
802
|
LOWER_SOMEONE_ELSES_HAND: string;
|
|
803
803
|
LEAVE_TRANSFER_HOST_END_MEETING: string;
|
|
804
804
|
LEAVE_END_MEETING: string;
|
|
805
|
+
END_MEETING: string;
|
|
806
|
+
REQUIRE_HOST_END_MEETING_BEFORE_LEAVE: string;
|
|
805
807
|
STREAMING_STATUS_STARTED: string;
|
|
806
808
|
STREAMING_STATUS_STOPPED: string;
|
|
807
809
|
CAPTION_START: string;
|
|
@@ -28,6 +28,7 @@ interface IInMeetingActions {
|
|
|
28
28
|
canLowerAllHands?: boolean;
|
|
29
29
|
canLowerSomeoneElsesHand?: boolean;
|
|
30
30
|
bothLeaveAndEndMeetingAvailable?: boolean;
|
|
31
|
+
requireHostEndMeetingBeforeLeave?: boolean;
|
|
31
32
|
canEnableClosedCaption?: boolean;
|
|
32
33
|
canStartTranscribing?: boolean;
|
|
33
34
|
canStopTranscribing?: boolean;
|
|
@@ -142,6 +143,7 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
142
143
|
canLowerAllHands: any;
|
|
143
144
|
canLowerSomeoneElsesHand: any;
|
|
144
145
|
bothLeaveAndEndMeetingAvailable: any;
|
|
146
|
+
requireHostEndMeetingBeforeLeave: any;
|
|
145
147
|
canEnableClosedCaption: any;
|
|
146
148
|
canStartTranscribing: any;
|
|
147
149
|
canStopTranscribing: any;
|
|
@@ -87,6 +87,7 @@ declare const MeetingUtil: {
|
|
|
87
87
|
canUserLowerAllHands: (displayHints: any) => any;
|
|
88
88
|
canUserLowerSomeoneElsesHand: (displayHints: any) => any;
|
|
89
89
|
bothLeaveAndEndMeetingAvailable: (displayHints: any) => any;
|
|
90
|
+
requireHostEndMeetingBeforeLeave: (displayHints: any) => any;
|
|
90
91
|
canManageBreakout: (displayHints: any) => any;
|
|
91
92
|
canStartBreakout: (displayHints: any) => boolean;
|
|
92
93
|
canBroadcastMessageToBreakout: (displayHints: any, policies?: {}) => boolean;
|
package/dist/webinar/index.js
CHANGED
package/package.json
CHANGED
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@webex/event-dictionary-ts": "^1.0.2073",
|
|
45
45
|
"@webex/jest-config-legacy": "0.0.0",
|
|
46
46
|
"@webex/legacy-tools": "0.0.0",
|
|
47
|
-
"@webex/plugin-rooms": "3.11.0-next.
|
|
47
|
+
"@webex/plugin-rooms": "3.11.0-next.9",
|
|
48
48
|
"@webex/test-helper-chai": "3.11.0-next.1",
|
|
49
49
|
"@webex/test-helper-mocha": "3.11.0-next.1",
|
|
50
50
|
"@webex/test-helper-mock-webex": "3.11.0-next.1",
|
|
@@ -63,17 +63,17 @@
|
|
|
63
63
|
"dependencies": {
|
|
64
64
|
"@webex/common": "3.11.0-next.1",
|
|
65
65
|
"@webex/internal-media-core": "2.22.1",
|
|
66
|
-
"@webex/internal-plugin-conversation": "3.11.0-next.
|
|
66
|
+
"@webex/internal-plugin-conversation": "3.11.0-next.9",
|
|
67
67
|
"@webex/internal-plugin-device": "3.11.0-next.7",
|
|
68
|
-
"@webex/internal-plugin-llm": "3.11.0-next.
|
|
69
|
-
"@webex/internal-plugin-mercury": "3.11.0-next.
|
|
68
|
+
"@webex/internal-plugin-llm": "3.11.0-next.10",
|
|
69
|
+
"@webex/internal-plugin-mercury": "3.11.0-next.9",
|
|
70
70
|
"@webex/internal-plugin-metrics": "3.11.0-next.7",
|
|
71
|
-
"@webex/internal-plugin-support": "3.11.0-next.
|
|
71
|
+
"@webex/internal-plugin-support": "3.11.0-next.9",
|
|
72
72
|
"@webex/internal-plugin-user": "3.11.0-next.7",
|
|
73
|
-
"@webex/internal-plugin-voicea": "3.11.0-next.
|
|
73
|
+
"@webex/internal-plugin-voicea": "3.11.0-next.10",
|
|
74
74
|
"@webex/media-helpers": "3.11.0-next.3",
|
|
75
|
-
"@webex/plugin-people": "3.11.0-next.
|
|
76
|
-
"@webex/plugin-rooms": "3.11.0-next.
|
|
75
|
+
"@webex/plugin-people": "3.11.0-next.9",
|
|
76
|
+
"@webex/plugin-rooms": "3.11.0-next.9",
|
|
77
77
|
"@webex/ts-sdp": "^1.8.1",
|
|
78
78
|
"@webex/web-capabilities": "^1.9.0",
|
|
79
79
|
"@webex/webex-core": "3.11.0-next.7",
|
|
@@ -93,5 +93,5 @@
|
|
|
93
93
|
"//": [
|
|
94
94
|
"TODO: upgrade jwt-decode when moving to node 18"
|
|
95
95
|
],
|
|
96
|
-
"version": "3.11.0-next.
|
|
96
|
+
"version": "3.11.0-next.39"
|
|
97
97
|
}
|
package/src/constants.ts
CHANGED
|
@@ -980,6 +980,8 @@ export const DISPLAY_HINTS = {
|
|
|
980
980
|
LOWER_SOMEONE_ELSES_HAND: 'LOWER_SOMEONE_ELSES_HAND',
|
|
981
981
|
LEAVE_TRANSFER_HOST_END_MEETING: 'LEAVE_TRANSFER_HOST_END_MEETING',
|
|
982
982
|
LEAVE_END_MEETING: 'LEAVE_END_MEETING',
|
|
983
|
+
END_MEETING: 'END_MEETING',
|
|
984
|
+
REQUIRE_HOST_END_MEETING_BEFORE_LEAVE: 'REQUIRE_HOST_END_MEETING_BEFORE_LEAVE',
|
|
983
985
|
STREAMING_STATUS_STARTED: 'STREAMING_STATUS_STARTED',
|
|
984
986
|
STREAMING_STATUS_STOPPED: 'STREAMING_STATUS_STOPPED',
|
|
985
987
|
CAPTION_START: 'CAPTION_START',
|
|
@@ -32,6 +32,7 @@ interface IInMeetingActions {
|
|
|
32
32
|
canLowerAllHands?: boolean;
|
|
33
33
|
canLowerSomeoneElsesHand?: boolean;
|
|
34
34
|
bothLeaveAndEndMeetingAvailable?: boolean;
|
|
35
|
+
requireHostEndMeetingBeforeLeave?: boolean;
|
|
35
36
|
canEnableClosedCaption?: boolean;
|
|
36
37
|
canStartTranscribing?: boolean;
|
|
37
38
|
canStopTranscribing?: boolean;
|
|
@@ -171,6 +172,8 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
171
172
|
|
|
172
173
|
bothLeaveAndEndMeetingAvailable = null;
|
|
173
174
|
|
|
175
|
+
requireHostEndMeetingBeforeLeave = null;
|
|
176
|
+
|
|
174
177
|
canEnableClosedCaption = null;
|
|
175
178
|
|
|
176
179
|
canStartTranscribing = null;
|
|
@@ -370,6 +373,7 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
370
373
|
canLowerAllHands: this.canLowerAllHands,
|
|
371
374
|
canLowerSomeoneElsesHand: this.canLowerSomeoneElsesHand,
|
|
372
375
|
bothLeaveAndEndMeetingAvailable: this.bothLeaveAndEndMeetingAvailable,
|
|
376
|
+
requireHostEndMeetingBeforeLeave: this.requireHostEndMeetingBeforeLeave,
|
|
373
377
|
canEnableClosedCaption: this.canEnableClosedCaption,
|
|
374
378
|
canStartTranscribing: this.canStartTranscribing,
|
|
375
379
|
canStopTranscribing: this.canStopTranscribing,
|
package/src/meeting/index.ts
CHANGED
|
@@ -4291,6 +4291,9 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4291
4291
|
bothLeaveAndEndMeetingAvailable: MeetingUtil.bothLeaveAndEndMeetingAvailable(
|
|
4292
4292
|
this.userDisplayHints
|
|
4293
4293
|
),
|
|
4294
|
+
requireHostEndMeetingBeforeLeave: MeetingUtil.requireHostEndMeetingBeforeLeave(
|
|
4295
|
+
this.userDisplayHints
|
|
4296
|
+
),
|
|
4294
4297
|
canEnableClosedCaption: MeetingUtil.canEnableClosedCaption(this.userDisplayHints),
|
|
4295
4298
|
canStartTranscribing: MeetingUtil.canStartTranscribing(this.userDisplayHints),
|
|
4296
4299
|
canStopTranscribing: MeetingUtil.canStopTranscribing(this.userDisplayHints),
|
package/src/meeting/util.ts
CHANGED
|
@@ -660,6 +660,11 @@ const MeetingUtil = {
|
|
|
660
660
|
displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||
|
|
661
661
|
displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING),
|
|
662
662
|
|
|
663
|
+
requireHostEndMeetingBeforeLeave: (displayHints) =>
|
|
664
|
+
displayHints.includes(DISPLAY_HINTS.REQUIRE_HOST_END_MEETING_BEFORE_LEAVE) ||
|
|
665
|
+
(!displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) &&
|
|
666
|
+
displayHints.includes(DISPLAY_HINTS.END_MEETING)),
|
|
667
|
+
|
|
663
668
|
canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),
|
|
664
669
|
|
|
665
670
|
canStartBreakout: (displayHints) => !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_START),
|
|
@@ -26,6 +26,7 @@ describe('plugin-meetings', () => {
|
|
|
26
26
|
canLowerAllHands: null,
|
|
27
27
|
canLowerSomeoneElsesHand: null,
|
|
28
28
|
bothLeaveAndEndMeetingAvailable: null,
|
|
29
|
+
requireHostEndMeetingBeforeLeave: null,
|
|
29
30
|
canEnableClosedCaption: null,
|
|
30
31
|
canStartTranscribing: null,
|
|
31
32
|
canStopTranscribing: null,
|
|
@@ -151,6 +152,7 @@ describe('plugin-meetings', () => {
|
|
|
151
152
|
'canLowerAllHands',
|
|
152
153
|
'canLowerSomeoneElsesHand',
|
|
153
154
|
'bothLeaveAndEndMeetingAvailable',
|
|
155
|
+
'requireHostEndMeetingBeforeLeave',
|
|
154
156
|
'canEnableClosedCaption',
|
|
155
157
|
'canStopTranscribing',
|
|
156
158
|
'isClosedCaptionActive',
|
|
@@ -11887,6 +11887,7 @@ describe('plugin-meetings', () => {
|
|
|
11887
11887
|
let canUnsetDisallowUnmuteSpy;
|
|
11888
11888
|
let canUserRaiseHandSpy;
|
|
11889
11889
|
let bothLeaveAndEndMeetingAvailableSpy;
|
|
11890
|
+
let requireHostEndMeetingBeforeLeaveSpy;
|
|
11890
11891
|
let canUserLowerAllHandsSpy;
|
|
11891
11892
|
let canUserLowerSomeoneElsesHandSpy;
|
|
11892
11893
|
let waitingForOthersToJoinSpy;
|
|
@@ -11920,6 +11921,10 @@ describe('plugin-meetings', () => {
|
|
|
11920
11921
|
MeetingUtil,
|
|
11921
11922
|
'bothLeaveAndEndMeetingAvailable'
|
|
11922
11923
|
);
|
|
11924
|
+
requireHostEndMeetingBeforeLeaveSpy = sinon.spy(
|
|
11925
|
+
MeetingUtil,
|
|
11926
|
+
'requireHostEndMeetingBeforeLeave'
|
|
11927
|
+
);
|
|
11923
11928
|
canUserLowerSomeoneElsesHandSpy = sinon.spy(MeetingUtil, 'canUserLowerSomeoneElsesHand');
|
|
11924
11929
|
waitingForOthersToJoinSpy = sinon.spy(MeetingUtil, 'waitingForOthersToJoin');
|
|
11925
11930
|
canSendReactionsSpy = sinon.spy(MeetingUtil, 'canSendReactions');
|
|
@@ -12491,6 +12496,7 @@ describe('plugin-meetings', () => {
|
|
|
12491
12496
|
assert.calledWith(canUnsetDisallowUnmuteSpy, userDisplayHints);
|
|
12492
12497
|
assert.calledWith(canUserRaiseHandSpy, userDisplayHints);
|
|
12493
12498
|
assert.calledWith(bothLeaveAndEndMeetingAvailableSpy, userDisplayHints);
|
|
12499
|
+
assert.calledWith(requireHostEndMeetingBeforeLeaveSpy, userDisplayHints);
|
|
12494
12500
|
assert.calledWith(canUserLowerAllHandsSpy, userDisplayHints);
|
|
12495
12501
|
assert.calledWith(canUserLowerSomeoneElsesHandSpy, userDisplayHints);
|
|
12496
12502
|
assert.calledWith(waitingForOthersToJoinSpy, userDisplayHints);
|