import { LocalCameraStream, LocalMicrophoneStream } from '@webex/media-helpers'; import { SELF_POLICY, IP_VERSION } from '../constants'; declare const MeetingUtil: { parseLocusJoin: (response: any) => any; /** * Sanitizes a WebSocket URL by extracting only protocol, host, and pathname * Returns concatenated protocol + host + pathname for safe logging * Note: This is used for logging only; URL matching uses partial matching via _urlsPartiallyMatch * @param {string} urlString - The URL to sanitize * @returns {string} Sanitized URL or empty string if parsing fails */ sanitizeWebSocketUrl: (urlString: string) => string; /** * Checks if two URLs partially match using an endsWith approach * Combines host and pathname, then checks if one ends with the other * This handles cases where one URL goes through a proxy (e.g., /webproxy/) while the other is direct * @param {string} url1 - First URL to compare * @param {string} url2 - Second URL to compare * @returns {boolean} True if one URL path ends with the other (partial match), false otherwise */ _urlsPartiallyMatch: (url1: string, url2: string) => boolean; /** * Gets socket URL information for metrics, including whether the socket URLs match * Uses partial matching to handle proxy URLs (e.g., URLs with /webproxy/ prefix) * @param {Object} webex - The webex instance * @returns {Object} Object with hasMismatchedSocket, mercurySocketUrl, and deviceSocketUrl properties */ getSocketUrlInfo: (webex: any) => { hasMismatchedSocket: boolean; mercurySocketUrl: string; deviceSocketUrl: string; }; remoteUpdateAudioVideo: (meeting: any, audioMuted?: boolean, videoMuted?: boolean) => any; hasOwner: (info: any) => any; isOwnerSelf: (owner: any, selfId: any) => boolean; isPinOrGuest: (err: any) => boolean; /** * Returns the current state of knowledge about whether we are on an ipv4-only or ipv6-only or mixed (ipv4 and ipv6) network. * The return value matches the possible values of "ipver" parameter used by the backend APIs. * * @param {Object} webex webex instance * @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 */ getIpVersion(webex: any): IP_VERSION | undefined; /** * Returns CA event labels related to Orpheus ipver parameter that can be sent to CA with any CA event * @param {any} webex instance * @returns {Array|undefined} array of CA event labels or undefined if no labels should be sent */ getCaEventLabelsForIpVersion(webex: any): Array | undefined; joinMeeting: (meeting: any, options: any) => Promise; cleanUp: (meeting: any) => any; disconnectPhoneAudio: (meeting: any, phoneUrl: any) => any; /** * Returns options for leaving a meeting. * @param {any} meeting * @param {any} options * @returns {any} leave options */ prepareLeaveMeetingOptions: (meeting: any, options?: any) => any; leaveMeeting: (meeting: any, options?: any) => any; declineMeeting: (meeting: any, reason: any) => any; isUserInLeftState: (locusInfo: any) => boolean; isUserInIdleState: (locusInfo: any) => boolean; isUserInJoinedState: (locusInfo: any) => boolean; isMediaEstablished: (currentMediaStatus: any) => any; joinMeetingOptions: (meeting: any, options?: any) => Promise; /** * Returns request options for leaving a meeting. * @param {any} meeting * @param {any} options * @returns {any} request options */ buildLeaveFetchRequestOptions: (meeting: any, options?: any) => any; getTrack: (stream: any) => { audioTrack: any; videoTrack: any; }; getModeratorFromLocusInfo: (locusInfo: any) => any; getPolicyFromLocusInfo: (locusInfo: any) => any; getUserDisplayHintsFromLocusInfo: (locusInfo: any) => any; canInviteNewParticipants: (displayHints: any) => any; canAdmitParticipant: (displayHints: any) => any; canUserLock: (displayHints: any) => any; canUserUnlock: (displayHints: any) => any; canUserRaiseHand: (displayHints: any) => any; canUserLowerAllHands: (displayHints: any) => any; canUserLowerSomeoneElsesHand: (displayHints: any) => any; bothLeaveAndEndMeetingAvailable: (displayHints: any) => any; requireHostEndMeetingBeforeLeave: (displayHints: any) => any; canManageBreakout: (displayHints: any) => any; canStartBreakout: (displayHints: any) => boolean; canBroadcastMessageToBreakout: (displayHints: any, policies?: {}) => boolean; isSuppressBreakoutSupport: (displayHints: any) => any; canAdmitLobbyToBreakout: (displayHints: any) => boolean; isBreakoutPreassignmentsEnabled: (displayHints: any) => boolean; canUserAskForHelp: (displayHints: any) => boolean; lockMeeting: (actions: any, request: any, locusUrl: any) => any; unlockMeeting: (actions: any, request: any, locusUrl: any) => any; handleAudioLogging: (audioStream?: LocalMicrophoneStream) => void; handleVideoLogging: (videoStream?: LocalCameraStream) => void; endMeetingForAll: (meeting: any) => any; canEnableClosedCaption: (displayHints: any) => any; isSaveTranscriptsEnabled: (displayHints: any) => any; canStartTranscribing: (displayHints: any) => any; canStopTranscribing: (displayHints: any) => any; isClosedCaptionActive: (displayHints: any) => any; canStartManualCaption: (displayHints: any) => any; isLocalRecordingStarted: (displayHints: any) => any; isLocalRecordingStopped: (displayHints: any) => any; isLocalRecordingPaused: (displayHints: any) => any; isLocalStreamingStarted: (displayHints: any) => any; isLocalStreamingStopped: (displayHints: any) => any; canStopManualCaption: (displayHints: any) => any; isManualCaptionActive: (displayHints: any) => any; isSpokenLanguageAutoDetectionEnabled: (displayHints: any) => any; isWebexAssistantActive: (displayHints: any) => any; canViewCaptionPanel: (displayHints: any) => any; isRealTimeTranslationEnabled: (displayHints: any) => any; canSelectSpokenLanguages: (displayHints: any) => any; waitingForOthersToJoin: (displayHints: any) => any; showAutoEndMeetingWarning: (displayHints: any) => any; canSendReactions: (originalValue: any, displayHints: any) => any; canUserRenameSelfAndObserved: (displayHints: any) => any; requiresPostMeetingDataConsentPrompt: (displayHints: any) => any; canUserRenameOthers: (displayHints: any) => any; canShareWhiteBoard: (displayHints: any, policies?: {}) => boolean; canMoveToLobby: (displayHints: any) => any; /** * Adds the current locus sequence information to a request body * @param {Object} meeting The meeting object * @param {Object} requestBody The body of a request to locus * @returns {void} */ addSequence: (meeting: any, requestBody: any) => void; /** * Updates the locus info for the meeting with the locus * information returned from API requests made to Locus * Returns the original response object * @param {Object} meeting The meeting object * @param {Object} response The response of the http request * @returns {Object} */ updateLocusFromApiResponse: (meeting: any, response: any) => any; generateBuildLocusDeltaRequestOptions: (originalMeeting: any) => (originalOptions: any) => any; generateLocusDeltaRequest: (originalMeeting: any) => (originalOptions: any) => any; canAttendeeRequestAiAssistantEnabled: (displayHints?: any[], roles?: any[]) => boolean; attendeeRequestAiAssistantDeclinedAll: (displayHints?: any[]) => boolean; selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record) => boolean; parseInterpretationInfo: (meeting: any, meetingInfo: any) => void; /** * Returns a CA-recognized error payload for the specified raw error message/reason. * * New errors can be added to this function for handling in the future * * @param {String} reason the raw error message * @returns {Array} an array of payload objects */ getChangeMeetingFloorErrorPayload: (reason: string) => { fatal: boolean; category: string; errorCode: number; errorDescription: string; name: string; shownToUser: boolean; }[]; }; export default MeetingUtil;