@webex/plugin-meetings 3.12.0-next.44 → 3.12.0-next.46

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.
Files changed (33) hide show
  1. package/dist/aiEnableRequest/index.js +1 -1
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/controls-options-manager/index.js +17 -5
  5. package/dist/controls-options-manager/index.js.map +1 -1
  6. package/dist/interpretation/index.js +10 -1
  7. package/dist/interpretation/index.js.map +1 -1
  8. package/dist/interpretation/siLanguage.js +1 -1
  9. package/dist/meeting/index.js +94 -20
  10. package/dist/meeting/index.js.map +1 -1
  11. package/dist/meeting/util.js +15 -2
  12. package/dist/meeting/util.js.map +1 -1
  13. package/dist/recording-controller/index.js +1 -3
  14. package/dist/recording-controller/index.js.map +1 -1
  15. package/dist/types/controls-options-manager/index.d.ts +10 -0
  16. package/dist/types/meeting/index.d.ts +6 -0
  17. package/dist/types/meeting/util.d.ts +7 -0
  18. package/dist/webinar/index.js +68 -17
  19. package/dist/webinar/index.js.map +1 -1
  20. package/package.json +3 -3
  21. package/src/controls-options-manager/index.ts +22 -6
  22. package/src/interpretation/index.ts +25 -8
  23. package/src/meeting/index.ts +79 -6
  24. package/src/meeting/util.ts +16 -2
  25. package/src/recording-controller/index.ts +1 -2
  26. package/src/webinar/index.ts +88 -21
  27. package/test/unit/spec/controls-options-manager/index.js +35 -32
  28. package/test/unit/spec/interpretation/index.ts +26 -4
  29. package/test/unit/spec/meeting/index.js +183 -0
  30. package/test/unit/spec/meeting/muteState.js +3 -0
  31. package/test/unit/spec/meeting/utils.js +25 -0
  32. package/test/unit/spec/recording-controller/index.js +9 -8
  33. package/test/unit/spec/webinar/index.ts +81 -16
@@ -802,6 +802,18 @@ var MeetingUtil = {
802
802
  }
803
803
  requestBody.sequence = sequence;
804
804
  },
805
+ /**
806
+ * Checks if Locus API response contains a Locus DTO
807
+ *
808
+ * @param {any} response http response from Locus API call
809
+ * @returns {boolean} true if response contains a Locus DTO
810
+ */
811
+ isLocusDtoInAPIResponse: function isLocusDtoInAPIResponse(response) {
812
+ var _response$body, _response$body2;
813
+ return (response === null || response === void 0 ? void 0 : (_response$body = response.body) === null || _response$body === void 0 ? void 0 : _response$body.locus) || (// for APIs called on our participant - locus is one of props in the response body
814
+ response === null || response === void 0 ? void 0 : (_response$body2 = response.body) === null || _response$body2 === void 0 ? void 0 : _response$body2.url) // for APIs that act on locus itself (like mute all), the body is the locus
815
+ ;
816
+ },
805
817
  /**
806
818
  * Updates the locus info for the meeting with the locus
807
819
  * information returned from API requests made to Locus
@@ -811,11 +823,12 @@ var MeetingUtil = {
811
823
  * @returns {Object}
812
824
  */
813
825
  updateLocusFromApiResponse: function updateLocusFromApiResponse(meeting, response) {
814
- var _response$body;
815
826
  if (!meeting) {
816
827
  return response;
817
828
  }
818
- if (response !== null && response !== void 0 && (_response$body = response.body) !== null && _response$body !== void 0 && _response$body.locus) {
829
+
830
+ // locus API responses can come in different shapes:
831
+ if (MeetingUtil.isLocusDtoInAPIResponse(response)) {
819
832
  meeting.locusInfo.handleLocusAPIResponse(meeting, response.body);
820
833
  }
821
834
  return response;
@@ -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","webinar","simultaneousInterpretation","callDiagnosticMetrics","clearEventLimitsForCorrelationId","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeRemoteStreams","closePeerConnections","cleanupLocalStreams","unsetRemoteStreams","unsetPeerConnections","reconnectionManager","stopKeepAlive","_meeting$config","enableAutomaticLLM","cleanupLLMConneciton","throwOnError","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.webinar.cleanUp();\n meeting.simultaneousInterpretation.cleanUp();\n meeting.locusInfo.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 return meeting.cleanupLLMConneciton({throwOnError: false});\n }\n\n return undefined;\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":[]}
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","webinar","simultaneousInterpretation","callDiagnosticMetrics","clearEventLimitsForCorrelationId","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeRemoteStreams","closePeerConnections","cleanupLocalStreams","unsetRemoteStreams","unsetPeerConnections","reconnectionManager","stopKeepAlive","_meeting$config","enableAutomaticLLM","cleanupLLMConneciton","throwOnError","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","isLocusDtoInAPIResponse","_response$body","_response$body2","updateLocusFromApiResponse","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.webinar.cleanUp();\n meeting.simultaneousInterpretation.cleanUp();\n meeting.locusInfo.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 return meeting.cleanupLLMConneciton({throwOnError: false});\n }\n\n return undefined;\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 * Checks if Locus API response contains a Locus DTO\n *\n * @param {any} response http response from Locus API call\n * @returns {boolean} true if response contains a Locus DTO\n */\n isLocusDtoInAPIResponse(response: any) {\n return (\n response?.body?.locus || // for APIs called on our participant - locus is one of props in the response body\n response?.body?.url // for APIs that act on locus itself (like mute all), the body is the locus\n );\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: any, response: any) => {\n if (!meeting) {\n return response;\n }\n\n // locus API responses can come in different shapes:\n if (MeetingUtil.isLocusDtoInAPIResponse(response)) {\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":[]}
@@ -275,9 +275,7 @@ var RecordingController = exports.default = /*#__PURE__*/function () {
275
275
  value: function recordingControls(action) {
276
276
  var record = _util.default.deriveRecordingStates(action);
277
277
  _loggerProxy.default.logger.log("RecordingController:index#recordingControls --> ".concat(record));
278
-
279
- // @ts-ignore
280
- return this.request.request({
278
+ return this.request.locusDeltaRequest({
281
279
  uri: "".concat(this.locusUrl, "/").concat(_constants.CONTROLS),
282
280
  body: {
283
281
  record: record
@@ -1 +1 @@
1
- {"version":3,"names":["_permission","_interopRequireDefault","require","_loggerProxy","_constants","_enums","_util","RecordingController","exports","default","request","options","_classCallCheck2","_defineProperty2","initialize","set","_createClass2","key","value","extract","setLocusUrl","url","locusUrl","locusId","Util","extractLocusId","setDisplayHints","hints","displayHints","setUserPolicy","selfUserPolicies","setSessionId","id","sessionId","setServiceUrl","serviceUrl","getLocusUrl","getLocusId","getSessionId","getServiceUrl","getDisplayHints","recordingService","action","recordingType","body","meetingInfo","locusSessionId","recording","toLowerCase","uri","concat","method","HTTP_VERBS","PUT","recordingControls","record","deriveRecordingStates","LoggerProxy","logger","log","CONTROLS","PATCH","recordingFacade","isPremiseRecordingEnabled","RecordingType","Premise","Cloud","_promise","reject","PermissionError","startRecording","RecordingAction","Start","stopRecording","Stop","pauseRecording","Pause","resumeRecording","Resume"],"sources":["index.ts"],"sourcesContent":["import PermissionError from '../common/errors/permission';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {CONTROLS, HTTP_VERBS, SELF_POLICY} from '../constants';\nimport MeetingRequest from '../meeting/request';\nimport {RecordingAction, RecordingType} from './enums';\nimport Util from './util';\n\n/**\n * @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting\n * @export\n * @private\n * @class Recording\n */\nexport default class RecordingController {\n /**\n * @instance\n * @type {MeetingRequest}\n * @private\n * @memberof RecordingController\n */\n private request: MeetingRequest;\n\n /**\n * @instance\n * @type {Array}\n * @private\n * @memberof RecordingInfo\n */\n private displayHints: Array<string> = [];\n\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof RecordingInfo\n */\n private selfUserPolicies: Record<SELF_POLICY, boolean>;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private serviceUrl: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private sessionId: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private locusUrl: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private locusId: string;\n\n /**\n * @param {MeetingRequest} request\n * @param {Object} options\n * @constructor\n * @memberof RecordingController\n */\n constructor(\n request: MeetingRequest,\n options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }\n ) {\n this.initialize(request);\n this.set(options);\n }\n\n /**\n * @param {MeetingRequest} request\n * @returns {void}\n * @private\n * @memberof RecordingController\n */\n private initialize(request: MeetingRequest) {\n this.request = request;\n }\n\n /**\n * @param {Object} options\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public set(options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }) {\n this.extract(options);\n }\n\n /**\n * @param {string} url\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setLocusUrl(url: string) {\n this.locusUrl = url;\n this.locusId = Util.extractLocusId(this.locusUrl);\n }\n\n /**\n * @param {Array} hints\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setDisplayHints(hints: Array<string>) {\n this.displayHints = hints;\n }\n\n /**\n * @param {Object} selfUserPolicies\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setUserPolicy(selfUserPolicies: Record<SELF_POLICY, boolean>) {\n this.selfUserPolicies = selfUserPolicies;\n }\n\n /**\n * @param {string} id\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setSessionId(id: string) {\n this.sessionId = id;\n }\n\n /**\n * @param {string} url\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setServiceUrl(url: string) {\n this.serviceUrl = url;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getLocusUrl() {\n return this.locusUrl;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getLocusId() {\n return this.locusId;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getSessionId() {\n return this.sessionId;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getServiceUrl() {\n return this.serviceUrl;\n }\n\n /**\n * @returns {Array}\n * @public\n * @memberof RecordingController\n */\n public getDisplayHints() {\n return this.displayHints;\n }\n\n /**\n * @param {Object} options\n * @returns {void}\n * @private\n * @memberof RecordingController\n */\n private extract(options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }) {\n this.setServiceUrl(options?.serviceUrl);\n this.setSessionId(options?.sessionId);\n this.setDisplayHints(options?.displayHints);\n this.setLocusUrl(options?.locusUrl);\n }\n\n /**\n * @param {RecordingAction} action\n * @param {RecordingType} recordingType\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingService(action: RecordingAction, recordingType: RecordingType): Promise<any> {\n // @ts-ignore\n return this.request.request({\n body: {\n meetingInfo: {\n locusSessionId: this.sessionId,\n },\n recording: {\n action: action.toLowerCase(),\n },\n recordingType,\n },\n uri: `${this.serviceUrl}/loci/${this.locusId}/recording`,\n method: HTTP_VERBS.PUT,\n });\n }\n\n /**\n * @param {RecordingAction} action\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingControls(action: RecordingAction): Promise<any> {\n const record = Util.deriveRecordingStates(action);\n\n LoggerProxy.logger.log(`RecordingController:index#recordingControls --> ${record}`);\n\n // @ts-ignore\n return this.request.request({\n uri: `${this.locusUrl}/${CONTROLS}`,\n body: {\n record,\n },\n method: HTTP_VERBS.PATCH,\n });\n }\n\n /**\n * @param {RecordingAction} action\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingFacade(action: RecordingAction): Promise<any> {\n const isPremiseRecordingEnabled = Util.isPremiseRecordingEnabled(\n this.displayHints,\n this.selfUserPolicies\n );\n LoggerProxy.logger.log(\n `RecordingController:index#recordingFacade --> recording action [${action}]`\n );\n\n let recordingType: RecordingType;\n if (isPremiseRecordingEnabled) {\n recordingType = RecordingType.Premise;\n } else {\n recordingType = RecordingType.Cloud;\n }\n\n // assumes action is proper cased (i.e., Example)\n if (Util?.[`canUser${action}`](this.displayHints, this.selfUserPolicies)) {\n if (this.serviceUrl) {\n return this.recordingService(action, recordingType);\n }\n\n return this.recordingControls(action);\n }\n\n return Promise.reject(\n new PermissionError(`${action} recording not allowed, due to moderator property.`)\n );\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public startRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Start);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public stopRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Stop);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public pauseRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Pause);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public resumeRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Resume);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_permission","_interopRequireDefault","require","_loggerProxy","_constants","_enums","_util","RecordingController","exports","default","request","options","_classCallCheck2","_defineProperty2","initialize","set","_createClass2","key","value","extract","setLocusUrl","url","locusUrl","locusId","Util","extractLocusId","setDisplayHints","hints","displayHints","setUserPolicy","selfUserPolicies","setSessionId","id","sessionId","setServiceUrl","serviceUrl","getLocusUrl","getLocusId","getSessionId","getServiceUrl","getDisplayHints","recordingService","action","recordingType","body","meetingInfo","locusSessionId","recording","toLowerCase","uri","concat","method","HTTP_VERBS","PUT","recordingControls","record","deriveRecordingStates","LoggerProxy","logger","log","locusDeltaRequest","CONTROLS","PATCH","recordingFacade","isPremiseRecordingEnabled","RecordingType","Premise","Cloud","_promise","reject","PermissionError","startRecording","RecordingAction","Start","stopRecording","Stop","pauseRecording","Pause","resumeRecording","Resume"],"sources":["index.ts"],"sourcesContent":["import PermissionError from '../common/errors/permission';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {CONTROLS, HTTP_VERBS, SELF_POLICY} from '../constants';\nimport MeetingRequest from '../meeting/request';\nimport {RecordingAction, RecordingType} from './enums';\nimport Util from './util';\n\n/**\n * @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting\n * @export\n * @private\n * @class Recording\n */\nexport default class RecordingController {\n /**\n * @instance\n * @type {MeetingRequest}\n * @private\n * @memberof RecordingController\n */\n private request: MeetingRequest;\n\n /**\n * @instance\n * @type {Array}\n * @private\n * @memberof RecordingInfo\n */\n private displayHints: Array<string> = [];\n\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof RecordingInfo\n */\n private selfUserPolicies: Record<SELF_POLICY, boolean>;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private serviceUrl: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private sessionId: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private locusUrl: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private locusId: string;\n\n /**\n * @param {MeetingRequest} request\n * @param {Object} options\n * @constructor\n * @memberof RecordingController\n */\n constructor(\n request: MeetingRequest,\n options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }\n ) {\n this.initialize(request);\n this.set(options);\n }\n\n /**\n * @param {MeetingRequest} request\n * @returns {void}\n * @private\n * @memberof RecordingController\n */\n private initialize(request: MeetingRequest) {\n this.request = request;\n }\n\n /**\n * @param {Object} options\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public set(options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }) {\n this.extract(options);\n }\n\n /**\n * @param {string} url\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setLocusUrl(url: string) {\n this.locusUrl = url;\n this.locusId = Util.extractLocusId(this.locusUrl);\n }\n\n /**\n * @param {Array} hints\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setDisplayHints(hints: Array<string>) {\n this.displayHints = hints;\n }\n\n /**\n * @param {Object} selfUserPolicies\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setUserPolicy(selfUserPolicies: Record<SELF_POLICY, boolean>) {\n this.selfUserPolicies = selfUserPolicies;\n }\n\n /**\n * @param {string} id\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setSessionId(id: string) {\n this.sessionId = id;\n }\n\n /**\n * @param {string} url\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setServiceUrl(url: string) {\n this.serviceUrl = url;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getLocusUrl() {\n return this.locusUrl;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getLocusId() {\n return this.locusId;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getSessionId() {\n return this.sessionId;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getServiceUrl() {\n return this.serviceUrl;\n }\n\n /**\n * @returns {Array}\n * @public\n * @memberof RecordingController\n */\n public getDisplayHints() {\n return this.displayHints;\n }\n\n /**\n * @param {Object} options\n * @returns {void}\n * @private\n * @memberof RecordingController\n */\n private extract(options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }) {\n this.setServiceUrl(options?.serviceUrl);\n this.setSessionId(options?.sessionId);\n this.setDisplayHints(options?.displayHints);\n this.setLocusUrl(options?.locusUrl);\n }\n\n /**\n * @param {RecordingAction} action\n * @param {RecordingType} recordingType\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingService(action: RecordingAction, recordingType: RecordingType): Promise<any> {\n // @ts-ignore\n return this.request.request({\n body: {\n meetingInfo: {\n locusSessionId: this.sessionId,\n },\n recording: {\n action: action.toLowerCase(),\n },\n recordingType,\n },\n uri: `${this.serviceUrl}/loci/${this.locusId}/recording`,\n method: HTTP_VERBS.PUT,\n });\n }\n\n /**\n * @param {RecordingAction} action\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingControls(action: RecordingAction): Promise<any> {\n const record = Util.deriveRecordingStates(action);\n\n LoggerProxy.logger.log(`RecordingController:index#recordingControls --> ${record}`);\n\n return this.request.locusDeltaRequest({\n uri: `${this.locusUrl}/${CONTROLS}`,\n body: {\n record,\n },\n method: HTTP_VERBS.PATCH,\n });\n }\n\n /**\n * @param {RecordingAction} action\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingFacade(action: RecordingAction): Promise<any> {\n const isPremiseRecordingEnabled = Util.isPremiseRecordingEnabled(\n this.displayHints,\n this.selfUserPolicies\n );\n LoggerProxy.logger.log(\n `RecordingController:index#recordingFacade --> recording action [${action}]`\n );\n\n let recordingType: RecordingType;\n if (isPremiseRecordingEnabled) {\n recordingType = RecordingType.Premise;\n } else {\n recordingType = RecordingType.Cloud;\n }\n\n // assumes action is proper cased (i.e., Example)\n if (Util?.[`canUser${action}`](this.displayHints, this.selfUserPolicies)) {\n if (this.serviceUrl) {\n return this.recordingService(action, recordingType);\n }\n\n return this.recordingControls(action);\n }\n\n return Promise.reject(\n new PermissionError(`${action} recording not allowed, due to moderator property.`)\n );\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public startRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Start);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public stopRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Stop);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public pauseRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Pause);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public resumeRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Resume);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -118,6 +118,16 @@ export default class ControlsOptionsManager {
118
118
  * @returns {Promise}
119
119
  */
120
120
  private setControls;
121
+ /**
122
+ * Sends a controls request to Locus. When authorizingLocusUrl is present in the body,
123
+ * we use a plain request() because the response contains the main session Locus DTO
124
+ * instead of the breakout we're in, so we don't want to parse it as a delta.
125
+ * Otherwise we use locusDeltaRequest() for normal delta processing.
126
+ *
127
+ * @param {Object} requestParams - The request parameters from getControlsRequestParams.
128
+ * @returns {Promise<any>}
129
+ */
130
+ private sendControlsRequest;
121
131
  /**
122
132
  * @public
123
133
  * @param {boolean} enabled
@@ -1410,6 +1410,12 @@ export default class Meeting extends StatelessWebexPlugin {
1410
1410
  private stopListeningForMeetingEvents;
1411
1411
  /**
1412
1412
  * Disconnects and cleans up the default LLM session listeners/timers.
1413
+ *
1414
+ * Ownership-aware: only calls `disconnectLLM` when this meeting is the
1415
+ * current owner of the default LLM session (or when no owner is recorded).
1416
+ * Event listeners belonging to this meeting instance are always detached
1417
+ * so they do not receive another meeting's relay events.
1418
+ *
1413
1419
  * @param {Object} options
1414
1420
  * @param {boolean} [options.removeOnlineListener=true] removes the one-time online listener
1415
1421
  * @param {boolean} [options.throwOnError=true] rethrows disconnect errors when true
@@ -133,6 +133,13 @@ declare const MeetingUtil: {
133
133
  * @returns {void}
134
134
  */
135
135
  addSequence: (meeting: any, requestBody: any) => void;
136
+ /**
137
+ * Checks if Locus API response contains a Locus DTO
138
+ *
139
+ * @param {any} response http response from Locus API call
140
+ * @returns {boolean} true if response contains a Locus DTO
141
+ */
142
+ isLocusDtoInAPIResponse(response: any): any;
136
143
  /**
137
144
  * Updates the locus info for the meeting with the locus
138
145
  * information returned from API requests made to Locus