@webex/plugin-meetings 3.0.0-beta.212 → 3.0.0-beta.214
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/index.js +38 -2
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +69 -26
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +45 -11
- package/dist/meeting/util.js.map +1 -1
- package/dist/types/meeting/index.d.ts +32 -2
- package/dist/types/meeting/request.d.ts +31 -1
- package/dist/types/meeting/util.d.ts +15 -0
- package/package.json +19 -19
- package/src/meeting/index.ts +47 -4
- package/src/meeting/request.ts +48 -1
- package/src/meeting/util.ts +55 -12
- package/test/unit/spec/meeting/index.js +40 -3
- package/test/unit/spec/meeting/request.js +114 -41
- package/test/unit/spec/meeting/utils.js +186 -47
package/dist/meeting/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","meeting","audioMuted","videoMuted","webex","getWebexObject","reject","ParameterError","locusMediaRequest","internal","newMetrics","submitClientEvent","name","options","meetingId","send","type","selfUrl","sequence","locusInfo","muteOptions","then","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","deviceUrl","correlationId","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","isMultistream","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","res","payload","trigger","identifiers","trackingId","headers","trackingid","cleanUp","breakouts","simultaneousInterpretation","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeRemoteTracks","closePeerConnections","cleanupLocalTracks","unsetRemoteTracks","unsetPeerConnections","reconnectionManager","stopKeepAlive","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","catch","LoggerProxy","logger","error","leaveMeeting","isUserInLeftState","UserNotJoinedError","defaultOptions","leaveOptions","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","CaptchaError","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","setLocus","IntentToJoinError","JoinMeetingError","getTrack","stream","audioTrack","videoTrack","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","userDisplayHints","canInviteNewParticipants","displayHints","DISPLAY_HINTS","ADD_GUEST","canAdmitParticipant","ROSTER_WAITING_TO_JOIN","canUserLock","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","canBroadcastMessageToBreakout","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","LOG_HEADER","settings","underlyingTrack","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","isSaveTranscriptsEnabled","SAVE_TRANSCRIPTS_ENABLED","canStartTranscribing","TRANSCRIPTION_CONTROL_START","canStopTranscribing","TRANSCRIPTION_CONTROL_STOP","isClosedCaptionActive","CAPTION_STATUS_ACTIVE","isWebexAssistantActive","WEBEX_ASSISTANT_STATUS_ACTIVE","canViewCaptionPanel","ENABLE_CAPTION_PANEL","isRealTimeTranslationEnabled","DISPLAY_REAL_TIME_TRANSLATION","canSelectSpokenLanguages","DISPLAY_NON_ENGLISH_ASR","waitingForOthersToJoin","WAITING_FOR_OTHERS","canSendReactions","originalValue","REACTIONS_ACTIVE","REACTIONS_INACTIVE","canUserRenameSelfAndObserved","CAN_RENAME_SELF_AND_OBSERVED","canUserRenameOthers","CAN_RENAME_OTHERS","canShareWhiteBoard","SHARE_WHITEBOARD","addSequence","requestBody","updateLocusWithDelta","handleLocusDelta","generateLocusDeltaRequest","originalMeeting","meetingRef","WeakRef","locusDeltaRequest","originalOptions","deref","selfSupportsFeature","feature","userPolicies","parseInterpretationInfo","meetingInfo","siInfo","updateMeetingSIEnabled","turnOnSimultaneousInterpretation","currentSIInterpreter","hostSIEnabled","meetingSiteSetting","enableHostInterpreterControlSI","updateHostSIEnabled","renameKey","obj","oldKey","newKey","lanuagesInfo","siLanguages","language","updateInterpretation","Trigger","file","function","EVENT_TRIGGERS","MEETING_INTERPRETATION_UPDATE"],"sources":["util.ts"],"sourcesContent":["import {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\nimport {cloneDeep} from 'lodash';\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\n SELF_POLICY,\n EVENT_TRIGGERS,\n} from '../constants';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\nimport Trigger from '../common/events/trigger-proxy';\n\nconst MeetingUtil = {\n parseLocusJoin: (response) => {\n const parsed: any = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n },\n\n remoteUpdateAudioVideo: (meeting, audioMuted?: boolean, videoMuted?: boolean) => {\n const webex = meeting.getWebexObject();\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n if (!meeting.locusMediaRequest) {\n return Promise.reject(\n new ParameterError(\n 'You need a meeting with a media connection, call Meeting.addMedia() first.'\n )\n );\n }\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.request',\n options: {meetingId: meeting.id},\n });\n\n return meeting.locusMediaRequest\n .send({\n type: 'LocalMute',\n selfUrl: meeting.selfUrl,\n mediaId: meeting.mediaId,\n sequence: meeting.locusInfo.sequence,\n muteOptions: {\n audioMuted,\n videoMuted,\n },\n })\n .then((response) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.response',\n options: {meetingId: meeting.id},\n });\n\n return response?.body?.locus;\n });\n },\n\n hasOwner: (info) => info && info.owner,\n\n isOwnerSelf: (owner, selfId) => owner === selfId,\n\n isPinOrGuest: (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode),\n\n joinMeeting: (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n const webex = meeting.getWebexObject();\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.request',\n options: {meetingId: meeting.id},\n });\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n permissionToken: meeting.permissionToken,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: !meeting.isMultistream,\n asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\n locale: options.locale,\n deviceCapabilities: options.deviceCapabilities,\n liveAnnotationSupported: options.liveAnnotationSupported,\n })\n .then((res) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.response',\n payload: {\n trigger: 'loci-update',\n identifiers: {\n trackingId: res.headers.trackingid,\n },\n },\n options: {\n meetingId: meeting.id,\n mediaConnections: res.body.mediaConnections,\n },\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n },\n\n cleanUp: (meeting) => {\n meeting.breakouts.cleanUp();\n meeting.simultaneousInterpretation.cleanUp();\n\n // make sure we send last metrics before we close the peerconnection\n const stopStatsAnalyzer = meeting.statsAnalyzer\n ? meeting.statsAnalyzer.stopAnalyzer()\n : Promise.resolve();\n\n return stopStatsAnalyzer\n .then(() => meeting.closeRemoteTracks())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.cleanupLocalTracks();\n meeting.unsetRemoteTracks();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => meeting.updateLLMConnection());\n },\n\n disconnectPhoneAudio: (meeting, phoneUrl) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const options = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n phoneUrl,\n };\n\n return meeting.meetingRequest.disconnectPhoneAudio(options).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n // by default will leave on meeting's resourceId\n // if you explicity want it not to leave on resource id, pass\n // {resourceId: null}\n // TODO: chris, you can modify this however you want\n leaveMeeting: (meeting, options: any = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const defaultOptions = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n resourceId: meeting.resourceId,\n deviceUrl: meeting.deviceUrl,\n };\n\n const leaveOptions = {...defaultOptions, ...options};\n\n return meeting.meetingRequest\n .leaveMeeting(leaveOptions)\n .then(() => {\n if (options.moveMeeting) {\n return Promise.resolve();\n }\n\n return MeetingUtil.cleanUp(meeting);\n })\n .catch((err) => {\n // TODO: If the meeting state comes as LEFT or INACTIVE as response then\n // 1) on leave clean up the meeting or simply do a sync on the meeting\n // 2) If the error says meeting is inactive then destroy the meeting object\n LoggerProxy.logger.error(\n `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n declineMeeting: (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason,\n }),\n\n isUserInLeftState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_,\n\n isUserInIdleState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_,\n\n isUserInJoinedState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_,\n\n isMediaEstablished: (currentMediaStatus) =>\n currentMediaStatus &&\n (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share),\n\n joinMeetingOptions: (meeting, options: any = {}) => {\n const webex = meeting.getWebexObject();\n\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (meeting.requiredCaptcha) {\n return Promise.reject(new CaptchaError());\n }\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n return Promise.reject(new PasswordError());\n }\n\n if (options.pin) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.collected',\n options: {\n meetingId: meeting.id,\n },\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.prompt',\n options: {\n meetingId: meeting.id,\n },\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error(\n 'Meeting:util#joinMeetingOptions --> Error joining the call, ',\n err\n );\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n },\n\n getTrack: (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n },\n\n getModeratorFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator,\n\n getPolicyFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy,\n\n getUserDisplayHintsFromLocusInfo: (locusInfo) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [],\n\n canInviteNewParticipants: (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST),\n\n canAdmitParticipant: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN),\n\n canUserLock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED),\n\n canUserUnlock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED),\n\n canUserRaiseHand: (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND),\n\n canUserLowerAllHands: (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS),\n\n canUserLowerSomeoneElsesHand: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND),\n\n bothLeaveAndEndMeetingAvailable: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING),\n\n canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),\n canBroadcastMessageToBreakout: (displayHints, 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: (audioTrack?: LocalMicrophoneTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleVideoLogging: (videoTrack?: LocalCameraTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleDeviceLogging: (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n },\n\n endMeetingForAll: (meeting) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const endOptions = {\n locusUrl: meeting.locusUrl,\n };\n\n return meeting.meetingRequest\n .endMeetingForAll(endOptions)\n .then(() => MeetingUtil.cleanUp(meeting))\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n canEnableClosedCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START),\n\n isSaveTranscriptsEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED),\n\n canStartTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START),\n\n canStopTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP),\n\n isClosedCaptionActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE),\n\n isWebexAssistantActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE),\n\n canViewCaptionPanel: (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL),\n\n isRealTimeTranslationEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION),\n\n canSelectSpokenLanguages: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR),\n\n waitingForOthersToJoin: (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS),\n\n canSendReactions: (originalValue, displayHints) => {\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {\n return true;\n }\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {\n return false;\n }\n\n return originalValue;\n },\n canUserRenameSelfAndObserved: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED),\n\n canUserRenameOthers: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS),\n\n canShareWhiteBoard: (displayHints) => displayHints.includes(DISPLAY_HINTS.SHARE_WHITEBOARD),\n\n /**\n * Adds the current locus sequence information to a request body\n * @param {Object} meeting The meeting object\n * @param {Object} requestBody The body of a request to locus\n * @returns {void}\n */\n addSequence: (meeting, requestBody) => {\n const sequence = meeting?.locusInfo?.sequence;\n\n if (!sequence) {\n return;\n }\n\n requestBody.sequence = sequence;\n },\n\n /**\n * Updates the locus info for the meeting with the delta locus\n * returned from requests that include the sequence information\n * Returns the original response object\n * @param {Object} meeting The meeting object\n * @param {Object} response The response of the http request\n * @returns {Object}\n */\n updateLocusWithDelta: (meeting, response) => {\n if (!meeting) {\n return response;\n }\n\n const locus = response?.body?.locus;\n\n if (locus) {\n meeting.locusInfo.handleLocusDelta(locus, meeting);\n }\n\n return response;\n },\n\n generateLocusDeltaRequest: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const locusDeltaRequest = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return Promise.resolve();\n }\n\n const options = cloneDeep(originalOptions);\n\n if (!options.body) {\n options.body = {};\n }\n\n MeetingUtil.addSequence(meeting, options.body);\n\n return meeting\n .request(options)\n .then((response) => MeetingUtil.updateLocusWithDelta(meeting, response));\n };\n\n return locusDeltaRequest;\n },\n\n selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record<SELF_POLICY, boolean>) => {\n if (!userPolicies) {\n return true;\n }\n\n return userPolicies[feature];\n },\n\n parseInterpretationInfo: (meeting, meetingInfo) => {\n if (!meeting || !meetingInfo) {\n return;\n }\n const siInfo = meetingInfo.simultaneousInterpretation;\n meeting.simultaneousInterpretation.updateMeetingSIEnabled(\n !!meetingInfo.turnOnSimultaneousInterpretation,\n !!siInfo?.currentSIInterpreter\n );\n const hostSIEnabled = !!(\n meetingInfo.turnOnSimultaneousInterpretation &&\n meetingInfo?.meetingSiteSetting?.enableHostInterpreterControlSI\n );\n meeting.simultaneousInterpretation.updateHostSIEnabled(hostSIEnabled);\n\n function renameKey(obj, oldKey, newKey) {\n if (oldKey in obj) {\n obj[newKey] = obj[oldKey];\n delete obj[oldKey];\n }\n }\n if (siInfo) {\n const lanuagesInfo = cloneDeep(siInfo.siLanguages);\n for (const language of lanuagesInfo) {\n renameKey(language, 'languageCode', 'languageName');\n renameKey(language, 'languageGroupId', 'languageCode');\n }\n if (!meeting.simultaneousInterpretation?.siLanguages?.length) {\n meeting.simultaneousInterpretation.updateInterpretation({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\nexport default MeetingUtil;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","meeting","audioMuted","videoMuted","webex","getWebexObject","reject","ParameterError","locusMediaRequest","internal","newMetrics","submitClientEvent","name","options","meetingId","send","type","selfUrl","sequence","locusInfo","muteOptions","then","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","deviceUrl","correlationId","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","isMultistream","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","res","payload","trigger","identifiers","trackingId","headers","trackingid","cleanUp","breakouts","simultaneousInterpretation","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeRemoteTracks","closePeerConnections","cleanupLocalTracks","unsetRemoteTracks","unsetPeerConnections","reconnectionManager","stopKeepAlive","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","catch","LoggerProxy","logger","error","prepareLeaveMeetingOptions","defaultOptions","leaveMeeting","isUserInLeftState","UserNotJoinedError","leaveOptions","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","CaptchaError","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","setLocus","IntentToJoinError","JoinMeetingError","buildLeaveFetchRequestOptions","buildLeaveMeetingRequestOptions","getTrack","stream","audioTrack","videoTrack","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","userDisplayHints","canInviteNewParticipants","displayHints","DISPLAY_HINTS","ADD_GUEST","canAdmitParticipant","ROSTER_WAITING_TO_JOIN","canUserLock","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","canBroadcastMessageToBreakout","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","LOG_HEADER","settings","underlyingTrack","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","isSaveTranscriptsEnabled","SAVE_TRANSCRIPTS_ENABLED","canStartTranscribing","TRANSCRIPTION_CONTROL_START","canStopTranscribing","TRANSCRIPTION_CONTROL_STOP","isClosedCaptionActive","CAPTION_STATUS_ACTIVE","isWebexAssistantActive","WEBEX_ASSISTANT_STATUS_ACTIVE","canViewCaptionPanel","ENABLE_CAPTION_PANEL","isRealTimeTranslationEnabled","DISPLAY_REAL_TIME_TRANSLATION","canSelectSpokenLanguages","DISPLAY_NON_ENGLISH_ASR","waitingForOthersToJoin","WAITING_FOR_OTHERS","canSendReactions","originalValue","REACTIONS_ACTIVE","REACTIONS_INACTIVE","canUserRenameSelfAndObserved","CAN_RENAME_SELF_AND_OBSERVED","canUserRenameOthers","CAN_RENAME_OTHERS","canShareWhiteBoard","SHARE_WHITEBOARD","addSequence","requestBody","updateLocusWithDelta","handleLocusDelta","generateBuildLocusDeltaRequestOptions","originalMeeting","meetingRef","WeakRef","buildLocusDeltaRequestOptions","originalOptions","deref","generateLocusDeltaRequest","locusDeltaRequest","selfSupportsFeature","feature","userPolicies","parseInterpretationInfo","meetingInfo","siInfo","updateMeetingSIEnabled","turnOnSimultaneousInterpretation","currentSIInterpreter","hostSIEnabled","meetingSiteSetting","enableHostInterpreterControlSI","updateHostSIEnabled","renameKey","obj","oldKey","newKey","lanuagesInfo","siLanguages","language","updateInterpretation","Trigger","file","function","EVENT_TRIGGERS","MEETING_INTERPRETATION_UPDATE"],"sources":["util.ts"],"sourcesContent":["import {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\nimport {cloneDeep} from 'lodash';\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\n SELF_POLICY,\n EVENT_TRIGGERS,\n} from '../constants';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\nimport Trigger from '../common/events/trigger-proxy';\n\nconst MeetingUtil = {\n parseLocusJoin: (response) => {\n const parsed: any = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n },\n\n remoteUpdateAudioVideo: (meeting, audioMuted?: boolean, videoMuted?: boolean) => {\n const webex = meeting.getWebexObject();\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n if (!meeting.locusMediaRequest) {\n return Promise.reject(\n new ParameterError(\n 'You need a meeting with a media connection, call Meeting.addMedia() first.'\n )\n );\n }\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.request',\n options: {meetingId: meeting.id},\n });\n\n return meeting.locusMediaRequest\n .send({\n type: 'LocalMute',\n selfUrl: meeting.selfUrl,\n mediaId: meeting.mediaId,\n sequence: meeting.locusInfo.sequence,\n muteOptions: {\n audioMuted,\n videoMuted,\n },\n })\n .then((response) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.response',\n options: {meetingId: meeting.id},\n });\n\n return response?.body?.locus;\n });\n },\n\n hasOwner: (info) => info && info.owner,\n\n isOwnerSelf: (owner, selfId) => owner === selfId,\n\n isPinOrGuest: (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode),\n\n joinMeeting: (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n const webex = meeting.getWebexObject();\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.request',\n options: {meetingId: meeting.id},\n });\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n permissionToken: meeting.permissionToken,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: !meeting.isMultistream,\n asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\n locale: options.locale,\n deviceCapabilities: options.deviceCapabilities,\n liveAnnotationSupported: options.liveAnnotationSupported,\n })\n .then((res) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.response',\n payload: {\n trigger: 'loci-update',\n identifiers: {\n trackingId: res.headers.trackingid,\n },\n },\n options: {\n meetingId: meeting.id,\n mediaConnections: res.body.mediaConnections,\n },\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n },\n\n cleanUp: (meeting) => {\n meeting.breakouts.cleanUp();\n meeting.simultaneousInterpretation.cleanUp();\n\n // make sure we send last metrics before we close the peerconnection\n const stopStatsAnalyzer = meeting.statsAnalyzer\n ? meeting.statsAnalyzer.stopAnalyzer()\n : Promise.resolve();\n\n return stopStatsAnalyzer\n .then(() => meeting.closeRemoteTracks())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.cleanupLocalTracks();\n meeting.unsetRemoteTracks();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => meeting.updateLLMConnection());\n },\n\n disconnectPhoneAudio: (meeting, phoneUrl) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const options = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n phoneUrl,\n };\n\n return meeting.meetingRequest.disconnectPhoneAudio(options).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n /**\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 return Promise.reject(new CaptchaError());\n }\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n return Promise.reject(new PasswordError());\n }\n\n if (options.pin) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.collected',\n options: {\n meetingId: meeting.id,\n },\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.prompt',\n options: {\n meetingId: meeting.id,\n },\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error(\n 'Meeting:util#joinMeetingOptions --> Error joining the call, ',\n err\n );\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n },\n\n /**\n * Returns request options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} request options\n */\n buildLeaveFetchRequestOptions: (meeting, options: any = {}) => {\n const leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, options);\n\n return meeting.meetingRequest.buildLeaveMeetingRequestOptions(leaveOptions);\n },\n\n getTrack: (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n },\n\n getModeratorFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator,\n\n getPolicyFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy,\n\n getUserDisplayHintsFromLocusInfo: (locusInfo) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [],\n\n canInviteNewParticipants: (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST),\n\n canAdmitParticipant: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN),\n\n canUserLock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED),\n\n canUserUnlock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED),\n\n canUserRaiseHand: (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND),\n\n canUserLowerAllHands: (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS),\n\n canUserLowerSomeoneElsesHand: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND),\n\n bothLeaveAndEndMeetingAvailable: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING),\n\n canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),\n 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: (audioTrack?: LocalMicrophoneTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleVideoLogging: (videoTrack?: LocalCameraTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleDeviceLogging: (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n },\n\n endMeetingForAll: (meeting) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const endOptions = {\n locusUrl: meeting.locusUrl,\n };\n\n return meeting.meetingRequest\n .endMeetingForAll(endOptions)\n .then(() => MeetingUtil.cleanUp(meeting))\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n canEnableClosedCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START),\n\n isSaveTranscriptsEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED),\n\n canStartTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START),\n\n canStopTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP),\n\n isClosedCaptionActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE),\n\n isWebexAssistantActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE),\n\n canViewCaptionPanel: (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL),\n\n isRealTimeTranslationEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION),\n\n canSelectSpokenLanguages: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR),\n\n waitingForOthersToJoin: (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS),\n\n canSendReactions: (originalValue, displayHints) => {\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {\n return true;\n }\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {\n return false;\n }\n\n return originalValue;\n },\n canUserRenameSelfAndObserved: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED),\n\n canUserRenameOthers: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS),\n\n canShareWhiteBoard: (displayHints) => displayHints.includes(DISPLAY_HINTS.SHARE_WHITEBOARD),\n\n /**\n * Adds the current locus sequence information to a request body\n * @param {Object} meeting The meeting object\n * @param {Object} requestBody The body of a request to locus\n * @returns {void}\n */\n addSequence: (meeting, requestBody) => {\n const sequence = meeting?.locusInfo?.sequence;\n\n if (!sequence) {\n return;\n }\n\n requestBody.sequence = sequence;\n },\n\n /**\n * Updates the locus info for the meeting with the delta locus\n * returned from requests that include the sequence information\n * Returns the original response object\n * @param {Object} meeting The meeting object\n * @param {Object} response The response of the http request\n * @returns {Object}\n */\n updateLocusWithDelta: (meeting, response) => {\n if (!meeting) {\n return response;\n }\n\n const locus = response?.body?.locus;\n\n if (locus) {\n meeting.locusInfo.handleLocusDelta(locus, meeting);\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.updateLocusWithDelta(meeting, response));\n };\n\n return locusDeltaRequest;\n },\n\n selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record<SELF_POLICY, boolean>) => {\n if (!userPolicies) {\n return true;\n }\n\n return userPolicies[feature];\n },\n\n parseInterpretationInfo: (meeting, meetingInfo) => {\n if (!meeting || !meetingInfo) {\n return;\n }\n const siInfo = meetingInfo.simultaneousInterpretation;\n meeting.simultaneousInterpretation.updateMeetingSIEnabled(\n !!meetingInfo.turnOnSimultaneousInterpretation,\n !!siInfo?.currentSIInterpreter\n );\n const hostSIEnabled = !!(\n meetingInfo.turnOnSimultaneousInterpretation &&\n meetingInfo?.meetingSiteSetting?.enableHostInterpreterControlSI\n );\n meeting.simultaneousInterpretation.updateHostSIEnabled(hostSIEnabled);\n\n function renameKey(obj, oldKey, newKey) {\n if (oldKey in obj) {\n obj[newKey] = obj[oldKey];\n delete obj[oldKey];\n }\n }\n if (siInfo) {\n const lanuagesInfo = cloneDeep(siInfo.siLanguages);\n for (const language of lanuagesInfo) {\n renameKey(language, 'languageCode', 'languageName');\n renameKey(language, 'languageGroupId', 'languageCode');\n }\n if (!meeting.simultaneousInterpretation?.siLanguages?.length) {\n meeting.simultaneousInterpretation.updateInterpretation({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\nexport default MeetingUtil;\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { StatelessWebexPlugin } from '@webex/webex-core';
|
|
3
|
-
import { ClientEvent } from '@webex/internal-plugin-metrics';
|
|
3
|
+
import { ClientEvent, ClientEventLeaveReason } from '@webex/internal-plugin-metrics';
|
|
4
4
|
import { LocalTrack, LocalCameraTrack, LocalDisplayTrack, LocalSystemAudioTrack, LocalMicrophoneTrack, TrackMuteEvent } from '@webex/media-helpers';
|
|
5
5
|
import { StatsAnalyzer } from '../statsAnalyzer';
|
|
6
6
|
import NetworkQualityMonitor from '../networkQualityMonitor';
|
|
@@ -1178,15 +1178,45 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1178
1178
|
*/
|
|
1179
1179
|
decline(reason: string): any;
|
|
1180
1180
|
/**
|
|
1181
|
-
*
|
|
1181
|
+
* Returns a promise that will resolve to fetch options for leaving a meeting.
|
|
1182
|
+
*
|
|
1183
|
+
* This is to support quickly submitting a leave request when the browser/tab is closing.
|
|
1184
|
+
* Calling meeting.leave will not work because there are some async steps that will
|
|
1185
|
+
* not complete before the browser is closed. Instead, we pre-gather all the
|
|
1186
|
+
* information/options needed for the request(s), and then simply and quickly
|
|
1187
|
+
* fire the fetch(es) when pagehide is triggered.
|
|
1188
|
+
*
|
|
1189
|
+
* We must use fetch instead of request because fetch has a keepalive option that
|
|
1190
|
+
* allows the request it to outlive the page.
|
|
1191
|
+
*
|
|
1192
|
+
* Note: the $timings values will be wrong, but setRequestTimingsAndFetch() will
|
|
1193
|
+
* properly adjust them before submitting.
|
|
1194
|
+
*
|
|
1195
|
+
* @public
|
|
1182
1196
|
* @param {Object} options leave options
|
|
1183
1197
|
* @param {String} options.resourceId the device with which to leave from, empty if just the computer
|
|
1198
|
+
* @param {any} options.reason the reason for leaving
|
|
1199
|
+
* @returns {Promise} resolves to options to be used with fetch
|
|
1200
|
+
*/
|
|
1201
|
+
buildLeaveFetchRequestOptions(options?: {
|
|
1202
|
+
resourceId?: string;
|
|
1203
|
+
reason?: any;
|
|
1204
|
+
}): any;
|
|
1205
|
+
/**
|
|
1206
|
+
* Leave the current meeting
|
|
1207
|
+
* @param {Object} options - leave options
|
|
1208
|
+
* @param {String} [options.resourceId] - the device with which to leave from, empty if just the computer
|
|
1209
|
+
* @param {String} [options.clientEventLeaveReason] - the leaveReason to include in the Call Analyzer event.
|
|
1210
|
+
* Must be one of: 'paired-leave' | 'one-to-one' | 'ended-by-locus' (defaults to no reason)
|
|
1211
|
+
* https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/main/diagnostic-events.raml#L796
|
|
1212
|
+
* @param {String} [options.reason] - only used for logging
|
|
1184
1213
|
* @returns {Promise}
|
|
1185
1214
|
* @public
|
|
1186
1215
|
* @memberof Meeting
|
|
1187
1216
|
*/
|
|
1188
1217
|
leave(options?: {
|
|
1189
1218
|
resourceId?: string;
|
|
1219
|
+
clientEventLeaveReason?: ClientEventLeaveReason;
|
|
1190
1220
|
reason?: any;
|
|
1191
1221
|
}): any;
|
|
1192
1222
|
/**
|
|
@@ -8,6 +8,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
8
8
|
changeVideoLayoutDebounced: any;
|
|
9
9
|
meetingRef: WeakRef<any>;
|
|
10
10
|
locusDeltaRequest: (options: object) => Promise<any>;
|
|
11
|
+
buildLocusDeltaRequestOptions: (options: object) => Promise<any>;
|
|
11
12
|
/**
|
|
12
13
|
* Constructor
|
|
13
14
|
* @param {Object} attrs
|
|
@@ -112,13 +113,36 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
112
113
|
*/
|
|
113
114
|
private disconnectPhoneAudio;
|
|
114
115
|
/**
|
|
115
|
-
*
|
|
116
|
+
* Prepares request options to to leave a meeting
|
|
116
117
|
* @param {Object} options
|
|
117
118
|
* @param {Url} options.locusUrl
|
|
118
119
|
* @param {String} options.selfId
|
|
119
120
|
* @param {Url} options.deviceUrl
|
|
120
121
|
* @param {String} options.resourceId,
|
|
121
122
|
* @param {String} options.correlationId
|
|
123
|
+
* @returns {Object} request options
|
|
124
|
+
*/
|
|
125
|
+
prepareLeaveMeetingRequestOptions({ locusUrl, selfId, deviceUrl: url, resourceId, correlationId, }: {
|
|
126
|
+
locusUrl: string;
|
|
127
|
+
selfId: string;
|
|
128
|
+
deviceUrl: string;
|
|
129
|
+
resourceId: string;
|
|
130
|
+
correlationId: string;
|
|
131
|
+
}): {
|
|
132
|
+
method: string;
|
|
133
|
+
uri: string;
|
|
134
|
+
body: {
|
|
135
|
+
device: {
|
|
136
|
+
deviceType: any;
|
|
137
|
+
url: string;
|
|
138
|
+
};
|
|
139
|
+
usingResource: string;
|
|
140
|
+
correlationId: string;
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* Make a network request to leave a meeting
|
|
145
|
+
* @param {Object} options
|
|
122
146
|
* @returns {Promise}
|
|
123
147
|
*/
|
|
124
148
|
leaveMeeting({ locusUrl, selfId, deviceUrl: url, resourceId, correlationId, }: {
|
|
@@ -128,6 +152,12 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
128
152
|
resourceId: string;
|
|
129
153
|
correlationId: string;
|
|
130
154
|
}): Promise<any>;
|
|
155
|
+
/**
|
|
156
|
+
* Builds request options to leave a meeting
|
|
157
|
+
* @param {Object} options
|
|
158
|
+
* @returns {Object} request options
|
|
159
|
+
*/
|
|
160
|
+
buildLeaveMeetingRequestOptions(options: any): Promise<any>;
|
|
131
161
|
/**
|
|
132
162
|
* Make a network request to acknowledge a meeting
|
|
133
163
|
* @param {Object} options
|
|
@@ -8,6 +8,13 @@ declare const MeetingUtil: {
|
|
|
8
8
|
joinMeeting: (meeting: any, options: any) => any;
|
|
9
9
|
cleanUp: (meeting: any) => any;
|
|
10
10
|
disconnectPhoneAudio: (meeting: any, phoneUrl: any) => any;
|
|
11
|
+
/**
|
|
12
|
+
* Returns options for leaving a meeting.
|
|
13
|
+
* @param {any} meeting
|
|
14
|
+
* @param {any} options
|
|
15
|
+
* @returns {any} leave options
|
|
16
|
+
*/
|
|
17
|
+
prepareLeaveMeetingOptions: (meeting: any, options?: any) => any;
|
|
11
18
|
leaveMeeting: (meeting: any, options?: any) => any;
|
|
12
19
|
declineMeeting: (meeting: any, reason: any) => any;
|
|
13
20
|
isUserInLeftState: (locusInfo: any) => boolean;
|
|
@@ -15,6 +22,13 @@ declare const MeetingUtil: {
|
|
|
15
22
|
isUserInJoinedState: (locusInfo: any) => boolean;
|
|
16
23
|
isMediaEstablished: (currentMediaStatus: any) => any;
|
|
17
24
|
joinMeetingOptions: (meeting: any, options?: any) => any;
|
|
25
|
+
/**
|
|
26
|
+
* Returns request options for leaving a meeting.
|
|
27
|
+
* @param {any} meeting
|
|
28
|
+
* @param {any} options
|
|
29
|
+
* @returns {any} request options
|
|
30
|
+
*/
|
|
31
|
+
buildLeaveFetchRequestOptions: (meeting: any, options?: any) => any;
|
|
18
32
|
getTrack: (stream: any) => {
|
|
19
33
|
audioTrack: any;
|
|
20
34
|
videoTrack: any;
|
|
@@ -72,6 +86,7 @@ declare const MeetingUtil: {
|
|
|
72
86
|
* @returns {Object}
|
|
73
87
|
*/
|
|
74
88
|
updateLocusWithDelta: (meeting: any, response: any) => any;
|
|
89
|
+
generateBuildLocusDeltaRequestOptions: (originalMeeting: any) => (originalOptions: any) => any;
|
|
75
90
|
generateLocusDeltaRequest: (originalMeeting: any) => (originalOptions: any) => any;
|
|
76
91
|
selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record<SELF_POLICY, boolean>) => boolean;
|
|
77
92
|
parseInterpretationInfo: (meeting: any, meetingInfo: any) => void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/plugin-meetings",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.214",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
|
|
6
6
|
"contributors": [
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@webex/plugin-meetings": "3.0.0-beta.
|
|
36
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
37
|
-
"@webex/test-helper-mocha": "3.0.0-beta.
|
|
38
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
39
|
-
"@webex/test-helper-retry": "3.0.0-beta.
|
|
40
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
35
|
+
"@webex/plugin-meetings": "3.0.0-beta.214",
|
|
36
|
+
"@webex/test-helper-chai": "3.0.0-beta.214",
|
|
37
|
+
"@webex/test-helper-mocha": "3.0.0-beta.214",
|
|
38
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.214",
|
|
39
|
+
"@webex/test-helper-retry": "3.0.0-beta.214",
|
|
40
|
+
"@webex/test-helper-test-users": "3.0.0-beta.214",
|
|
41
41
|
"chai": "^4.3.4",
|
|
42
42
|
"chai-as-promised": "^7.1.1",
|
|
43
43
|
"jsdom-global": "3.0.2",
|
|
@@ -46,19 +46,19 @@
|
|
|
46
46
|
"typescript": "^4.7.4"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@webex/common": "3.0.0-beta.
|
|
49
|
+
"@webex/common": "3.0.0-beta.214",
|
|
50
50
|
"@webex/internal-media-core": "1.39.1",
|
|
51
|
-
"@webex/internal-plugin-conversation": "3.0.0-beta.
|
|
52
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
53
|
-
"@webex/internal-plugin-llm": "3.0.0-beta.
|
|
54
|
-
"@webex/internal-plugin-mercury": "3.0.0-beta.
|
|
55
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
56
|
-
"@webex/internal-plugin-support": "3.0.0-beta.
|
|
57
|
-
"@webex/internal-plugin-user": "3.0.0-beta.
|
|
58
|
-
"@webex/media-helpers": "3.0.0-beta.
|
|
59
|
-
"@webex/plugin-people": "3.0.0-beta.
|
|
60
|
-
"@webex/plugin-rooms": "3.0.0-beta.
|
|
61
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
51
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.214",
|
|
52
|
+
"@webex/internal-plugin-device": "3.0.0-beta.214",
|
|
53
|
+
"@webex/internal-plugin-llm": "3.0.0-beta.214",
|
|
54
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.214",
|
|
55
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.214",
|
|
56
|
+
"@webex/internal-plugin-support": "3.0.0-beta.214",
|
|
57
|
+
"@webex/internal-plugin-user": "3.0.0-beta.214",
|
|
58
|
+
"@webex/media-helpers": "3.0.0-beta.214",
|
|
59
|
+
"@webex/plugin-people": "3.0.0-beta.214",
|
|
60
|
+
"@webex/plugin-rooms": "3.0.0-beta.214",
|
|
61
|
+
"@webex/webex-core": "3.0.0-beta.214",
|
|
62
62
|
"ampersand-collection": "^2.0.2",
|
|
63
63
|
"bowser": "^2.11.0",
|
|
64
64
|
"btoa": "^1.2.1",
|
package/src/meeting/index.ts
CHANGED
|
@@ -3,7 +3,11 @@ import {cloneDeep, isEqual, isEmpty} from 'lodash';
|
|
|
3
3
|
import jwt from 'jsonwebtoken';
|
|
4
4
|
// @ts-ignore - Fix this
|
|
5
5
|
import {StatelessWebexPlugin} from '@webex/webex-core';
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
ClientEvent,
|
|
8
|
+
ClientEventLeaveReason,
|
|
9
|
+
CALL_DIAGNOSTIC_CONFIG,
|
|
10
|
+
} from '@webex/internal-plugin-metrics';
|
|
7
11
|
import {
|
|
8
12
|
ConnectionState,
|
|
9
13
|
Errors,
|
|
@@ -5903,15 +5907,54 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
5903
5907
|
}
|
|
5904
5908
|
|
|
5905
5909
|
/**
|
|
5906
|
-
*
|
|
5910
|
+
* Returns a promise that will resolve to fetch options for leaving a meeting.
|
|
5911
|
+
*
|
|
5912
|
+
* This is to support quickly submitting a leave request when the browser/tab is closing.
|
|
5913
|
+
* Calling meeting.leave will not work because there are some async steps that will
|
|
5914
|
+
* not complete before the browser is closed. Instead, we pre-gather all the
|
|
5915
|
+
* information/options needed for the request(s), and then simply and quickly
|
|
5916
|
+
* fire the fetch(es) when pagehide is triggered.
|
|
5917
|
+
*
|
|
5918
|
+
* We must use fetch instead of request because fetch has a keepalive option that
|
|
5919
|
+
* allows the request it to outlive the page.
|
|
5920
|
+
*
|
|
5921
|
+
* Note: the $timings values will be wrong, but setRequestTimingsAndFetch() will
|
|
5922
|
+
* properly adjust them before submitting.
|
|
5923
|
+
*
|
|
5924
|
+
* @public
|
|
5907
5925
|
* @param {Object} options leave options
|
|
5908
5926
|
* @param {String} options.resourceId the device with which to leave from, empty if just the computer
|
|
5927
|
+
* @param {any} options.reason the reason for leaving
|
|
5928
|
+
* @returns {Promise} resolves to options to be used with fetch
|
|
5929
|
+
*/
|
|
5930
|
+
public buildLeaveFetchRequestOptions(options: {resourceId?: string; reason?: any} = {} as any) {
|
|
5931
|
+
const requestOptions = MeetingUtil.buildLeaveFetchRequestOptions(this, options);
|
|
5932
|
+
|
|
5933
|
+
// @ts-ignore
|
|
5934
|
+
return this.webex.prepareFetchOptions(requestOptions);
|
|
5935
|
+
}
|
|
5936
|
+
|
|
5937
|
+
/**
|
|
5938
|
+
* Leave the current meeting
|
|
5939
|
+
* @param {Object} options - leave options
|
|
5940
|
+
* @param {String} [options.resourceId] - the device with which to leave from, empty if just the computer
|
|
5941
|
+
* @param {String} [options.clientEventLeaveReason] - the leaveReason to include in the Call Analyzer event.
|
|
5942
|
+
* Must be one of: 'paired-leave' | 'one-to-one' | 'ended-by-locus' (defaults to no reason)
|
|
5943
|
+
* https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/main/diagnostic-events.raml#L796
|
|
5944
|
+
* @param {String} [options.reason] - only used for logging
|
|
5909
5945
|
* @returns {Promise}
|
|
5910
5946
|
* @public
|
|
5911
5947
|
* @memberof Meeting
|
|
5912
5948
|
*/
|
|
5913
|
-
public leave(
|
|
5949
|
+
public leave(
|
|
5950
|
+
options: {
|
|
5951
|
+
resourceId?: string;
|
|
5952
|
+
clientEventLeaveReason?: ClientEventLeaveReason;
|
|
5953
|
+
reason?: any;
|
|
5954
|
+
} = {} as any
|
|
5955
|
+
) {
|
|
5914
5956
|
const leaveReason = options.reason || MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
|
|
5957
|
+
|
|
5915
5958
|
/// @ts-ignore
|
|
5916
5959
|
this.webex.internal.newMetrics.submitInternalEvent({name: 'internal.reset.join.latencies'});
|
|
5917
5960
|
|
|
@@ -5922,7 +5965,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
5922
5965
|
payload: {
|
|
5923
5966
|
trigger: 'user-interaction',
|
|
5924
5967
|
canProceed: false,
|
|
5925
|
-
leaveReason,
|
|
5968
|
+
leaveReason: options.clientEventLeaveReason,
|
|
5926
5969
|
...payload,
|
|
5927
5970
|
},
|
|
5928
5971
|
options: {meetingId: this.id},
|
package/src/meeting/request.ts
CHANGED
|
@@ -37,6 +37,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
37
37
|
changeVideoLayoutDebounced: any;
|
|
38
38
|
meetingRef: WeakRef<any>;
|
|
39
39
|
locusDeltaRequest: (options: object) => Promise<any>;
|
|
40
|
+
buildLocusDeltaRequestOptions: (options: object) => Promise<any>;
|
|
40
41
|
|
|
41
42
|
/**
|
|
42
43
|
* Constructor
|
|
@@ -49,6 +50,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
49
50
|
super(otherAttrs, options);
|
|
50
51
|
|
|
51
52
|
this.locusDeltaRequest = MeetingUtil.generateLocusDeltaRequest(meeting);
|
|
53
|
+
this.buildLocusDeltaRequestOptions = MeetingUtil.generateBuildLocusDeltaRequestOptions(meeting);
|
|
52
54
|
|
|
53
55
|
this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {
|
|
54
56
|
leading: true,
|
|
@@ -457,13 +459,49 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
457
459
|
}
|
|
458
460
|
|
|
459
461
|
/**
|
|
460
|
-
*
|
|
462
|
+
* Prepares request options to to leave a meeting
|
|
461
463
|
* @param {Object} options
|
|
462
464
|
* @param {Url} options.locusUrl
|
|
463
465
|
* @param {String} options.selfId
|
|
464
466
|
* @param {Url} options.deviceUrl
|
|
465
467
|
* @param {String} options.resourceId,
|
|
466
468
|
* @param {String} options.correlationId
|
|
469
|
+
* @returns {Object} request options
|
|
470
|
+
*/
|
|
471
|
+
prepareLeaveMeetingRequestOptions({
|
|
472
|
+
locusUrl,
|
|
473
|
+
selfId,
|
|
474
|
+
deviceUrl: url,
|
|
475
|
+
resourceId,
|
|
476
|
+
correlationId,
|
|
477
|
+
}: {
|
|
478
|
+
locusUrl: string;
|
|
479
|
+
selfId: string;
|
|
480
|
+
deviceUrl: string;
|
|
481
|
+
resourceId: string;
|
|
482
|
+
correlationId: string;
|
|
483
|
+
}) {
|
|
484
|
+
const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;
|
|
485
|
+
const body = {
|
|
486
|
+
device: {
|
|
487
|
+
// @ts-ignore
|
|
488
|
+
deviceType: this.config.meetings.deviceType,
|
|
489
|
+
url,
|
|
490
|
+
},
|
|
491
|
+
usingResource: resourceId || null,
|
|
492
|
+
correlationId,
|
|
493
|
+
};
|
|
494
|
+
|
|
495
|
+
return {
|
|
496
|
+
method: HTTP_VERBS.PUT,
|
|
497
|
+
uri,
|
|
498
|
+
body,
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* Make a network request to leave a meeting
|
|
504
|
+
* @param {Object} options
|
|
467
505
|
* @returns {Promise}
|
|
468
506
|
*/
|
|
469
507
|
leaveMeeting({
|
|
@@ -499,6 +537,15 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
499
537
|
});
|
|
500
538
|
}
|
|
501
539
|
|
|
540
|
+
/**
|
|
541
|
+
* Builds request options to leave a meeting
|
|
542
|
+
* @param {Object} options
|
|
543
|
+
* @returns {Object} request options
|
|
544
|
+
*/
|
|
545
|
+
buildLeaveMeetingRequestOptions(options: any) {
|
|
546
|
+
return this.buildLocusDeltaRequestOptions(this.prepareLeaveMeetingRequestOptions(options));
|
|
547
|
+
}
|
|
548
|
+
|
|
502
549
|
/**
|
|
503
550
|
* Make a network request to acknowledge a meeting
|
|
504
551
|
* @param {Object} options
|