@webex/plugin-meetings 2.29.5 → 2.30.1
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/README.md +213 -143
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +2 -0
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +1 -0
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +4 -0
- package/dist/meeting/util.js.map +1 -1
- package/package.json +59 -59
- package/src/constants.ts +2 -0
- package/src/meeting/in-meeting-actions.ts +4 -0
- package/src/meeting/index.js +1 -0
- package/src/meeting/util.js +2 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
- package/test/unit/spec/meeting/index.js +3 -2
- package/test/unit/spec/meeting/utils.js +9 -1
package/dist/meeting/util.js
CHANGED
|
@@ -554,6 +554,10 @@ MeetingUtil.canUserLowerSomeoneElsesHand = function (displayHints) {
|
|
|
554
554
|
return displayHints.includes(_constants.DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
|
|
555
555
|
};
|
|
556
556
|
|
|
557
|
+
MeetingUtil.bothLeaveAndEndMeetingAvailable = function (displayHints) {
|
|
558
|
+
return displayHints.includes(_constants.DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) || displayHints.includes(_constants.DISPLAY_HINTS.LEAVE_END_MEETING);
|
|
559
|
+
};
|
|
560
|
+
|
|
557
561
|
MeetingUtil.lockMeeting = function (actions, request, locusUrl) {
|
|
558
562
|
if (actions && actions.canLock) {
|
|
559
563
|
return request.lockMeeting({
|
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","audioMuted","videoMuted","meeting","reject","ParameterError","localMedias","Media","generateLocalMedias","Metrics","postEvent","event","eventType","MEDIA_REQUEST","meetingRequest","remoteAudioVideoToggle","deviceUrl","correlationId","then","MEDIA_RESPONSE","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","options","LOCUS_JOIN_REQUEST","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","asResourceOccupant","res","LOCUS_JOIN_RESPONSE","data","trigger","LOCI_UPDATE","trackingId","headers","trackingid","cleanUp","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeLocalStream","closeLocalShare","closeRemoteTracks","closePeerConnections","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteTracks","unsetPeerConnections","reconnectionManager","roap","stop","roapSeq","stopKeepAlive","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","locusInfo","onFullLocus","catch","LoggerProxy","logger","error","leaveMeeting","isUserInLeftState","UserNotJoinedError","defaultOptions","leaveOptions","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","CaptchaError","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","PIN_COLLECTED","setLocus","PIN_PROMPT","IntentToJoinError","JoinMeetingError","updateTransceiver","meetingOptions","type","sendTrack","receiveTrack","track","transceiver","peerConnection","previousMediaDirection","undefined","meetingId","remoteQualityLevel","mediaProperties","enableRtx","config","enableExtmap","sendRoapMediaRequest","sdp","e","sender","replaceTrack","validateOptions","sendVideo","sendAudio","sendShare","localStream","localShare","getTrack","videoTrack","audioTrack","stream","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","userDisplayHints","canInviteNewParticipants","displayHints","DISPLAY_HINTS","ADD_GUEST","canAdmitParticipant","ROSTER_WAITING_TO_JOIN","canUserLock","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRecord","RECORDING_CONTROL_START","canUserPause","RECORDING_CONTROL_PAUSE","canUserResume","RECORDING_CONTROL_RESUME","canUserStop","RECORDING_CONTROL_STOP","startRecording","request","recordMeeting","recording","paused","PermissionError","pauseRecording","resumeRecording","stopRecording","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","lockMeeting","actions","canLock","lock","unlockMeeting","canUnlock","handleAudioLogging","LOG_HEADER","settings","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","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"],"sources":["util.js"],"sourcesContent":["import {isEmpty} from 'lodash';\n\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport Metrics from '../metrics';\nimport {eventType, trigger} from '../metrics/config';\nimport Media from '../media';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE} from '../constants';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\n\nconst MeetingUtil = {};\n\nMeetingUtil.parseLocusJoin = (response) => {\n const parsed = {};\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\nMeetingUtil.remoteUpdateAudioVideo = (audioMuted, videoMuted, meeting) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n const localMedias = Media.generateLocalMedias(meeting.mediaId, audioMuted, videoMuted);\n\n if (isEmpty(localMedias)) {\n return Promise.reject(new ParameterError('You need a media id on the meeting to change remote audio.'));\n }\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});\n\n return meeting.meetingRequest.remoteAudioVideoToggle({\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n localMedias,\n deviceUrl: meeting.deviceUrl,\n correlationId: meeting.correlationId\n }).then((response) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});\n\n return response.body.locus;\n });\n};\n\nMeetingUtil.hasOwner = (info) => info && info.owner;\n\nMeetingUtil.isOwnerSelf = (owner, selfId) => owner === selfId;\n\nMeetingUtil.isPinOrGuest = (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);\n\nMeetingUtil.joinMeeting = (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n Metrics.postEvent({event: eventType.LOCUS_JOIN_REQUEST, meeting});\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n permissionToken: meeting.permissionToken,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: options.preferTranscoding,\n asResourceOccupant: options.asResourceOccupant\n })\n .then((res) => {\n Metrics.postEvent({\n event: eventType.LOCUS_JOIN_RESPONSE,\n meeting,\n data: {\n trigger: trigger.LOCI_UPDATE,\n locus: res.body.locus,\n mediaConnections: res.body.mediaConnections,\n trackingId: res.headers.trackingid\n }\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n};\n\nMeetingUtil.cleanUp = (meeting) => {\n // make sure we send last metrics before we close the peerconnection\n const stopStatsAnalyzer = (meeting.statsAnalyzer) ? meeting.statsAnalyzer.stopAnalyzer() : Promise.resolve();\n\n return stopStatsAnalyzer\n .then(() => meeting.closeLocalStream())\n .then(() => meeting.closeLocalShare())\n .then(() => meeting.closeRemoteTracks())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.unsetLocalVideoTrack();\n meeting.unsetLocalShareTrack();\n meeting.unsetRemoteTracks();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.roap.stop(meeting.correlationId, meeting.roapSeq))\n .then(() => meeting.stopKeepAlive());\n};\n\nMeetingUtil.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\n .disconnectPhoneAudio(options)\n .then((response) => {\n if (response?.body?.locus) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${\n meeting.id\n }, 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\nMeetingUtil.leaveMeeting = (meeting, options = {}) => {\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((response) => {\n if (response && response.body && response.body.locus) { // && !options.moveMeeting) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n\n return Promise.resolve();\n })\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 ${\n meeting.id\n }, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\nMeetingUtil.declineMeeting = (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason\n });\n\nMeetingUtil.isUserInLeftState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _LEFT_;\n\nMeetingUtil.isUserInIdleState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _IDLE_;\n\nMeetingUtil.isUserInJoinedState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _JOINED_;\n\nMeetingUtil.isMediaEstablished = (currentMediaStatus) =>\n currentMediaStatus && (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);\n\n\nMeetingUtil.joinMeetingOptions = (meeting, options = {}) => {\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (meeting.requiredCaptcha) {\n return Promise.reject(new CaptchaError());\n }\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n return Promise.reject(new PasswordError());\n }\n\n if (options.pin) {\n Metrics.postEvent({\n event: eventType.PIN_COLLECTED,\n meeting\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n Metrics.postEvent({\n event: eventType.PIN_PROMPT,\n meeting\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error('Meeting:util#joinMeetingOptions --> Error joining the call, ', err);\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n};\n\nMeetingUtil.updateTransceiver = (options, meetingOptions) => {\n const {\n type,\n sendTrack,\n receiveTrack,\n track,\n transceiver,\n peerConnection,\n previousMediaDirection\n } = options;\n\n if ((sendTrack !== undefined && sendTrack !== previousMediaDirection.sendTrack) ||\n (receiveTrack !== undefined && receiveTrack !== previousMediaDirection.receiveTrack)) {\n return Media.updateTransceiver({\n meetingId: meetingOptions.meeting.id,\n remoteQualityLevel: meetingOptions.mediaProperties.remoteQualityLevel,\n enableRtx: meetingOptions.meeting.config.enableRtx,\n enableExtmap: meetingOptions.meeting.config.enableExtmap\n }, peerConnection, transceiver,\n {\n track,\n type,\n receiveTrack,\n sendTrack\n })\n .then(() => meetingOptions.meeting.roap\n .sendRoapMediaRequest({\n sdp: meetingOptions.mediaProperties.peerConnection.sdp,\n roapSeq: meetingOptions.meeting.roapSeq,\n meeting: meetingOptions.meeting // or can pass meeting ID\n }))\n .catch((e) => {\n LoggerProxy.logger.error(`Meeting:util#updateTransceiver --> Error updating the ${type} streams with error: ${e}`);\n });\n } if (track) {\n transceiver.sender.replaceTrack(track);\n\n return Promise.resolve();\n }\n\n return Promise.reject(new ParameterError('update Failed: please pass valid parameter'));\n};\n\nMeetingUtil.validateOptions = (options) => {\n const {\n sendVideo, sendAudio, sendShare, localStream, localShare\n } = options;\n\n if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid video streams'));\n }\n\n if (sendAudio && !MeetingUtil.getTrack(localStream).audioTrack) {\n return Promise.reject(new ParameterError('please pass valid audio streams'));\n }\n\n if (sendShare && !MeetingUtil.getTrack(localShare).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid share streams'));\n }\n\n return Promise.resolve();\n};\n\nMeetingUtil.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\nMeetingUtil.getModeratorFromLocusInfo = (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator;\n\nMeetingUtil.getPolicyFromLocusInfo = (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy;\n\nMeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) => locusInfo?.parsedLocus?.info?.userDisplayHints || [];\n\nMeetingUtil.canInviteNewParticipants = (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST);\n\nMeetingUtil.canAdmitParticipant = (displayHints) => displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);\n\nMeetingUtil.canUserLock = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) && displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);\n\nMeetingUtil.canUserUnlock = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) && displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);\n\nMeetingUtil.canUserRecord = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START);\n\nMeetingUtil.canUserPause = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE);\n\nMeetingUtil.canUserResume = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME);\n\nMeetingUtil.canUserStop = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP);\n\nMeetingUtil.startRecording = (request, locusUrl, locusInfo) => {\n const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);\n\n if (MeetingUtil.canUserRecord(displayHints)) {\n return request.recordMeeting({locusUrl, recording: true, paused: false});\n }\n\n return Promise.reject(new PermissionError('Start recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.pauseRecording = (request, locusUrl, locusInfo) => {\n const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);\n\n if (MeetingUtil.canUserPause(displayHints)) {\n return request.recordMeeting({locusUrl, recording: true, paused: true});\n }\n\n return Promise.reject(new PermissionError('Pause recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.resumeRecording = (request, locusUrl, locusInfo) => {\n const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);\n\n if (MeetingUtil.canUserResume(displayHints)) {\n return request.recordMeeting({locusUrl, recording: true, paused: false});\n }\n\n return Promise.reject(new PermissionError('Resume recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.stopRecording = (request, locusUrl, locusInfo) => {\n const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);\n\n if (MeetingUtil.canUserStop(displayHints)) {\n return request.recordMeeting({locusUrl, recording: false, paused: false});\n }\n\n return Promise.reject(new PermissionError('Stop recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);\n\nMeetingUtil.canUserLowerAllHands = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);\n\nMeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);\n\nMeetingUtil.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\nMeetingUtil.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\nMeetingUtil.handleAudioLogging = (audioTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.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\nMeetingUtil.handleVideoLogging = (videoTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.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\nMeetingUtil.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\nMeetingUtil.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((response) => {\n if (response && response.body && response.body.locus) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n\n return Promise.resolve();\n })\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 ${\n meeting.id\n }, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\n\nMeetingUtil.canEnableClosedCaption = (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START);\n\nMeetingUtil.canStartTranscribing = (displayHints) => displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);\n\nMeetingUtil.canStopTranscribing = (displayHints) => displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);\n\nMeetingUtil.isClosedCaptionActive = (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);\n\nMeetingUtil.isWebexAssistantActive = (displayHints) => displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);\n\nMeetingUtil.canViewCaptionPanel = (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);\n\nMeetingUtil.isRealTimeTranslationEnabled = (displayHints) => displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);\n\nMeetingUtil.canSelectSpokenLanguages = (displayHints) => displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);\n\nMeetingUtil.waitingForOthersToJoin = (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);\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","audioMuted","videoMuted","meeting","reject","ParameterError","localMedias","Media","generateLocalMedias","Metrics","postEvent","event","eventType","MEDIA_REQUEST","meetingRequest","remoteAudioVideoToggle","deviceUrl","correlationId","then","MEDIA_RESPONSE","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","options","LOCUS_JOIN_REQUEST","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","asResourceOccupant","res","LOCUS_JOIN_RESPONSE","data","trigger","LOCI_UPDATE","trackingId","headers","trackingid","cleanUp","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeLocalStream","closeLocalShare","closeRemoteTracks","closePeerConnections","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteTracks","unsetPeerConnections","reconnectionManager","roap","stop","roapSeq","stopKeepAlive","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","locusInfo","onFullLocus","catch","LoggerProxy","logger","error","leaveMeeting","isUserInLeftState","UserNotJoinedError","defaultOptions","leaveOptions","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","CaptchaError","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","PIN_COLLECTED","setLocus","PIN_PROMPT","IntentToJoinError","JoinMeetingError","updateTransceiver","meetingOptions","type","sendTrack","receiveTrack","track","transceiver","peerConnection","previousMediaDirection","undefined","meetingId","remoteQualityLevel","mediaProperties","enableRtx","config","enableExtmap","sendRoapMediaRequest","sdp","e","sender","replaceTrack","validateOptions","sendVideo","sendAudio","sendShare","localStream","localShare","getTrack","videoTrack","audioTrack","stream","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","userDisplayHints","canInviteNewParticipants","displayHints","DISPLAY_HINTS","ADD_GUEST","canAdmitParticipant","ROSTER_WAITING_TO_JOIN","canUserLock","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRecord","RECORDING_CONTROL_START","canUserPause","RECORDING_CONTROL_PAUSE","canUserResume","RECORDING_CONTROL_RESUME","canUserStop","RECORDING_CONTROL_STOP","startRecording","request","recordMeeting","recording","paused","PermissionError","pauseRecording","resumeRecording","stopRecording","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","lockMeeting","actions","canLock","lock","unlockMeeting","canUnlock","handleAudioLogging","LOG_HEADER","settings","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","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"],"sources":["util.js"],"sourcesContent":["import {isEmpty} from 'lodash';\n\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport Metrics from '../metrics';\nimport {eventType, trigger} from '../metrics/config';\nimport Media from '../media';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE} from '../constants';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\n\nconst MeetingUtil = {};\n\nMeetingUtil.parseLocusJoin = (response) => {\n const parsed = {};\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\nMeetingUtil.remoteUpdateAudioVideo = (audioMuted, videoMuted, meeting) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n const localMedias = Media.generateLocalMedias(meeting.mediaId, audioMuted, videoMuted);\n\n if (isEmpty(localMedias)) {\n return Promise.reject(new ParameterError('You need a media id on the meeting to change remote audio.'));\n }\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});\n\n return meeting.meetingRequest.remoteAudioVideoToggle({\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n localMedias,\n deviceUrl: meeting.deviceUrl,\n correlationId: meeting.correlationId\n }).then((response) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});\n\n return response.body.locus;\n });\n};\n\nMeetingUtil.hasOwner = (info) => info && info.owner;\n\nMeetingUtil.isOwnerSelf = (owner, selfId) => owner === selfId;\n\nMeetingUtil.isPinOrGuest = (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);\n\nMeetingUtil.joinMeeting = (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n Metrics.postEvent({event: eventType.LOCUS_JOIN_REQUEST, meeting});\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n permissionToken: meeting.permissionToken,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: options.preferTranscoding,\n asResourceOccupant: options.asResourceOccupant\n })\n .then((res) => {\n Metrics.postEvent({\n event: eventType.LOCUS_JOIN_RESPONSE,\n meeting,\n data: {\n trigger: trigger.LOCI_UPDATE,\n locus: res.body.locus,\n mediaConnections: res.body.mediaConnections,\n trackingId: res.headers.trackingid\n }\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n};\n\nMeetingUtil.cleanUp = (meeting) => {\n // make sure we send last metrics before we close the peerconnection\n const stopStatsAnalyzer = (meeting.statsAnalyzer) ? meeting.statsAnalyzer.stopAnalyzer() : Promise.resolve();\n\n return stopStatsAnalyzer\n .then(() => meeting.closeLocalStream())\n .then(() => meeting.closeLocalShare())\n .then(() => meeting.closeRemoteTracks())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.unsetLocalVideoTrack();\n meeting.unsetLocalShareTrack();\n meeting.unsetRemoteTracks();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.roap.stop(meeting.correlationId, meeting.roapSeq))\n .then(() => meeting.stopKeepAlive());\n};\n\nMeetingUtil.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\n .disconnectPhoneAudio(options)\n .then((response) => {\n if (response?.body?.locus) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${\n meeting.id\n }, 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\nMeetingUtil.leaveMeeting = (meeting, options = {}) => {\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((response) => {\n if (response && response.body && response.body.locus) { // && !options.moveMeeting) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n\n return Promise.resolve();\n })\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 ${\n meeting.id\n }, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\nMeetingUtil.declineMeeting = (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason\n });\n\nMeetingUtil.isUserInLeftState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _LEFT_;\n\nMeetingUtil.isUserInIdleState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _IDLE_;\n\nMeetingUtil.isUserInJoinedState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _JOINED_;\n\nMeetingUtil.isMediaEstablished = (currentMediaStatus) =>\n currentMediaStatus && (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);\n\n\nMeetingUtil.joinMeetingOptions = (meeting, options = {}) => {\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (meeting.requiredCaptcha) {\n return Promise.reject(new CaptchaError());\n }\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n return Promise.reject(new PasswordError());\n }\n\n if (options.pin) {\n Metrics.postEvent({\n event: eventType.PIN_COLLECTED,\n meeting\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n Metrics.postEvent({\n event: eventType.PIN_PROMPT,\n meeting\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error('Meeting:util#joinMeetingOptions --> Error joining the call, ', err);\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n};\n\nMeetingUtil.updateTransceiver = (options, meetingOptions) => {\n const {\n type,\n sendTrack,\n receiveTrack,\n track,\n transceiver,\n peerConnection,\n previousMediaDirection\n } = options;\n\n if ((sendTrack !== undefined && sendTrack !== previousMediaDirection.sendTrack) ||\n (receiveTrack !== undefined && receiveTrack !== previousMediaDirection.receiveTrack)) {\n return Media.updateTransceiver({\n meetingId: meetingOptions.meeting.id,\n remoteQualityLevel: meetingOptions.mediaProperties.remoteQualityLevel,\n enableRtx: meetingOptions.meeting.config.enableRtx,\n enableExtmap: meetingOptions.meeting.config.enableExtmap\n }, peerConnection, transceiver,\n {\n track,\n type,\n receiveTrack,\n sendTrack\n })\n .then(() => meetingOptions.meeting.roap\n .sendRoapMediaRequest({\n sdp: meetingOptions.mediaProperties.peerConnection.sdp,\n roapSeq: meetingOptions.meeting.roapSeq,\n meeting: meetingOptions.meeting // or can pass meeting ID\n }))\n .catch((e) => {\n LoggerProxy.logger.error(`Meeting:util#updateTransceiver --> Error updating the ${type} streams with error: ${e}`);\n });\n } if (track) {\n transceiver.sender.replaceTrack(track);\n\n return Promise.resolve();\n }\n\n return Promise.reject(new ParameterError('update Failed: please pass valid parameter'));\n};\n\nMeetingUtil.validateOptions = (options) => {\n const {\n sendVideo, sendAudio, sendShare, localStream, localShare\n } = options;\n\n if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid video streams'));\n }\n\n if (sendAudio && !MeetingUtil.getTrack(localStream).audioTrack) {\n return Promise.reject(new ParameterError('please pass valid audio streams'));\n }\n\n if (sendShare && !MeetingUtil.getTrack(localShare).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid share streams'));\n }\n\n return Promise.resolve();\n};\n\nMeetingUtil.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\nMeetingUtil.getModeratorFromLocusInfo = (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator;\n\nMeetingUtil.getPolicyFromLocusInfo = (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy;\n\nMeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) => locusInfo?.parsedLocus?.info?.userDisplayHints || [];\n\nMeetingUtil.canInviteNewParticipants = (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST);\n\nMeetingUtil.canAdmitParticipant = (displayHints) => displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);\n\nMeetingUtil.canUserLock = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) && displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);\n\nMeetingUtil.canUserUnlock = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) && displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);\n\nMeetingUtil.canUserRecord = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START);\n\nMeetingUtil.canUserPause = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE);\n\nMeetingUtil.canUserResume = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME);\n\nMeetingUtil.canUserStop = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP);\n\nMeetingUtil.startRecording = (request, locusUrl, locusInfo) => {\n const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);\n\n if (MeetingUtil.canUserRecord(displayHints)) {\n return request.recordMeeting({locusUrl, recording: true, paused: false});\n }\n\n return Promise.reject(new PermissionError('Start recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.pauseRecording = (request, locusUrl, locusInfo) => {\n const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);\n\n if (MeetingUtil.canUserPause(displayHints)) {\n return request.recordMeeting({locusUrl, recording: true, paused: true});\n }\n\n return Promise.reject(new PermissionError('Pause recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.resumeRecording = (request, locusUrl, locusInfo) => {\n const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);\n\n if (MeetingUtil.canUserResume(displayHints)) {\n return request.recordMeeting({locusUrl, recording: true, paused: false});\n }\n\n return Promise.reject(new PermissionError('Resume recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.stopRecording = (request, locusUrl, locusInfo) => {\n const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);\n\n if (MeetingUtil.canUserStop(displayHints)) {\n return request.recordMeeting({locusUrl, recording: false, paused: false});\n }\n\n return Promise.reject(new PermissionError('Stop recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);\n\nMeetingUtil.canUserLowerAllHands = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);\n\nMeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);\n\nMeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) => displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) || displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);\n\nMeetingUtil.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\nMeetingUtil.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\nMeetingUtil.handleAudioLogging = (audioTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.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\nMeetingUtil.handleVideoLogging = (videoTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.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\nMeetingUtil.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\nMeetingUtil.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((response) => {\n if (response && response.body && response.body.locus) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n\n return Promise.resolve();\n })\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 ${\n meeting.id\n }, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\n\nMeetingUtil.canEnableClosedCaption = (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START);\n\nMeetingUtil.canStartTranscribing = (displayHints) => displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);\n\nMeetingUtil.canStopTranscribing = (displayHints) => displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);\n\nMeetingUtil.isClosedCaptionActive = (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);\n\nMeetingUtil.isWebexAssistantActive = (displayHints) => displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);\n\nMeetingUtil.canViewCaptionPanel = (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);\n\nMeetingUtil.isRealTimeTranslationEnabled = (displayHints) => displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);\n\nMeetingUtil.canSelectSpokenLanguages = (displayHints) => displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);\n\nMeetingUtil.waitingForOthersToJoin = (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);\n\nexport default MeetingUtil;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,61 +1,61 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
2
|
+
"name": "@webex/plugin-meetings",
|
|
3
|
+
"version": "2.30.1",
|
|
4
|
+
"description": "",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"contributors": [
|
|
7
|
+
"Adam Weeks <adweeks@cisco.com> (https://adamweeks.com/)",
|
|
8
|
+
"Arun Ganeshan <arungane@cisco.com>",
|
|
9
|
+
"Christopher DuBois <chdubois@cisco.com> (https://chrisadubois.github.io/)",
|
|
10
|
+
"Matt Norris <matnorri@cisco.com> (http://mattnorris.me)",
|
|
11
|
+
"Moriah Maney <momaney@cisco.com>",
|
|
12
|
+
"Taymoor Khan <taykhan@cisco.com>"
|
|
13
|
+
],
|
|
14
|
+
"main": "dist/index.js",
|
|
15
|
+
"devMain": "src/index.js",
|
|
16
|
+
"repository": "https://github.com/webex/webex-js-sdk/tree/master/packages/@webex/plugin-meetings",
|
|
17
|
+
"engines": {
|
|
18
|
+
"node": ">=14"
|
|
19
|
+
},
|
|
20
|
+
"browserify": {
|
|
21
|
+
"transform": [
|
|
22
|
+
"babelify",
|
|
23
|
+
"envify"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@webex/plugin-meetings": "2.30.1",
|
|
28
|
+
"@webex/test-helper-chai": "2.30.1",
|
|
29
|
+
"@webex/test-helper-mocha": "2.30.1",
|
|
30
|
+
"@webex/test-helper-mock-webex": "2.30.1",
|
|
31
|
+
"@webex/test-helper-retry": "2.30.1",
|
|
32
|
+
"@webex/test-helper-test-users": "2.30.1",
|
|
33
|
+
"chai": "^4.3.4",
|
|
34
|
+
"chai-as-promised": "^7.1.1",
|
|
35
|
+
"jsdom-global": "3.0.2",
|
|
36
|
+
"sinon": "^9.2.4"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@webex/common": "2.30.1",
|
|
40
|
+
"@webex/internal-media-core": "^0.0.7-beta",
|
|
41
|
+
"@webex/internal-plugin-conversation": "2.30.1",
|
|
42
|
+
"@webex/internal-plugin-device": "2.30.1",
|
|
43
|
+
"@webex/internal-plugin-mercury": "2.30.1",
|
|
44
|
+
"@webex/internal-plugin-metrics": "2.30.1",
|
|
45
|
+
"@webex/internal-plugin-support": "2.30.1",
|
|
46
|
+
"@webex/internal-plugin-user": "2.30.1",
|
|
47
|
+
"@webex/plugin-people": "2.30.1",
|
|
48
|
+
"@webex/plugin-rooms": "2.30.1",
|
|
49
|
+
"@webex/webex-core": "2.30.1",
|
|
50
|
+
"bowser": "^2.11.0",
|
|
51
|
+
"btoa": "^1.2.1",
|
|
52
|
+
"dotenv": "^4.0.0",
|
|
53
|
+
"global": "^4.4.0",
|
|
54
|
+
"ip-anonymize": "^0.1.0",
|
|
55
|
+
"javascript-state-machine": "^3.1.0",
|
|
56
|
+
"lodash": "^4.17.21",
|
|
57
|
+
"sdp-transform": "^2.12.0",
|
|
58
|
+
"uuid": "^3.3.2",
|
|
59
|
+
"webrtc-adapter": "^7.7.0"
|
|
60
|
+
}
|
|
61
61
|
}
|
package/src/constants.ts
CHANGED
|
@@ -684,6 +684,8 @@ export const DISPLAY_HINTS = {
|
|
|
684
684
|
RAISE_HAND: 'RAISE_HAND',
|
|
685
685
|
LOWER_ALL_HANDS: 'LOWER_ALL_HANDS',
|
|
686
686
|
LOWER_SOMEONE_ELSES_HAND: 'LOWER_SOMEONE_ELSES_HAND',
|
|
687
|
+
LEAVE_TRANSFER_HOST_END_MEETING: 'LEAVE_TRANSFER_HOST_END_MEETING',
|
|
688
|
+
LEAVE_END_MEETING: 'LEAVE_END_MEETING',
|
|
687
689
|
CAPTION_START: 'CAPTION_START',
|
|
688
690
|
CAPTION_STATUS_ACTIVE: 'CAPTION_STATUS_ACTIVE',
|
|
689
691
|
DISPLAY_REAL_TIME_TRANSLATION: 'DISPLAY_REAL_TIME_TRANSLATION',
|
|
@@ -23,6 +23,7 @@ interface IInMeetingActions {
|
|
|
23
23
|
canRaiseHand?: boolean;
|
|
24
24
|
canLowerAllHands?: boolean;
|
|
25
25
|
canLowerSomeoneElsesHand?: boolean;
|
|
26
|
+
bothLeaveAndEndMeetingAvailable?: boolean;
|
|
26
27
|
canEnableClosedCaption?: boolean;
|
|
27
28
|
canStartTranscribing?: boolean;
|
|
28
29
|
canStopTranscribing?: boolean;
|
|
@@ -64,6 +65,8 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
64
65
|
|
|
65
66
|
canLowerSomeoneElsesHand = null;
|
|
66
67
|
|
|
68
|
+
bothLeaveAndEndMeetingAvailable = null;
|
|
69
|
+
|
|
67
70
|
canEnableClosedCaption = null;
|
|
68
71
|
|
|
69
72
|
canStartTranscribing = null;
|
|
@@ -99,6 +102,7 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
99
102
|
canRaiseHand: this.canRaiseHand,
|
|
100
103
|
canLowerAllHands: this.canLowerAllHands,
|
|
101
104
|
canLowerSomeoneElsesHand: this.canLowerSomeoneElsesHand,
|
|
105
|
+
bothLeaveAndEndMeetingAvailable: this.bothLeaveAndEndMeetingAvailable,
|
|
102
106
|
canEnableClosedCaption: this.canEnableClosedCaption,
|
|
103
107
|
canStartTranscribing: this.canStartTranscribing,
|
|
104
108
|
canStopTranscribing: this.canStopTranscribing,
|
package/src/meeting/index.js
CHANGED
|
@@ -1889,6 +1889,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1889
1889
|
canRaiseHand: MeetingUtil.canUserRaiseHand(payload.info.userDisplayHints),
|
|
1890
1890
|
canLowerAllHands: MeetingUtil.canUserLowerAllHands(payload.info.userDisplayHints),
|
|
1891
1891
|
canLowerSomeoneElsesHand: MeetingUtil.canUserLowerSomeoneElsesHand(payload.info.userDisplayHints),
|
|
1892
|
+
bothLeaveAndEndMeetingAvailable: MeetingUtil.bothLeaveAndEndMeetingAvailable(payload.info.userDisplayHints),
|
|
1892
1893
|
canEnableClosedCaption: MeetingUtil.canEnableClosedCaption(payload.info.userDisplayHints),
|
|
1893
1894
|
canStartTranscribing: MeetingUtil.canStartTranscribing(payload.info.userDisplayHints),
|
|
1894
1895
|
canStopTranscribing: MeetingUtil.canStopTranscribing(payload.info.userDisplayHints),
|
package/src/meeting/util.js
CHANGED
|
@@ -447,6 +447,8 @@ MeetingUtil.canUserLowerAllHands = (displayHints) => displayHints.includes(DISPL
|
|
|
447
447
|
|
|
448
448
|
MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
|
|
449
449
|
|
|
450
|
+
MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) => displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) || displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);
|
|
451
|
+
|
|
450
452
|
MeetingUtil.lockMeeting = (actions, request, locusUrl) => {
|
|
451
453
|
if (actions && actions.canLock) {
|
|
452
454
|
return request.lockMeeting({locusUrl, lock: true});
|
|
@@ -18,6 +18,7 @@ describe('plugin-meetings', () => {
|
|
|
18
18
|
canRaiseHand: null,
|
|
19
19
|
canLowerAllHands: null,
|
|
20
20
|
canLowerSomeoneElsesHand: null,
|
|
21
|
+
bothLeaveAndEndMeetingAvailable: null,
|
|
21
22
|
canEnableClosedCaption: null,
|
|
22
23
|
canStartTranscribing: null,
|
|
23
24
|
canStopTranscribing: null,
|
|
@@ -52,6 +53,7 @@ describe('plugin-meetings', () => {
|
|
|
52
53
|
'canRaiseHand',
|
|
53
54
|
'canLowerAllHands',
|
|
54
55
|
'canLowerSomeoneElsesHand',
|
|
56
|
+
'bothLeaveAndEndMeetingAvailable',
|
|
55
57
|
'canEnableClosedCaption',
|
|
56
58
|
'canStopTranscribing',
|
|
57
59
|
'isClosedCaptionActive',
|
|
@@ -21,7 +21,6 @@ import {
|
|
|
21
21
|
_MEETING_ID_,
|
|
22
22
|
LOCUSINFO,
|
|
23
23
|
} from '@webex/plugin-meetings/src/constants';
|
|
24
|
-
|
|
25
24
|
import * as StatsAnalyzerModule from '@webex/plugin-meetings/src/statsAnalyzer';
|
|
26
25
|
import EventsScope from '@webex/plugin-meetings/src/common/events/events-scope';
|
|
27
26
|
import Meetings, {CONSTANTS} from '@webex/plugin-meetings';
|
|
@@ -3664,11 +3663,11 @@ describe('plugin-meetings', () => {
|
|
|
3664
3663
|
let canUserPauseSpy;
|
|
3665
3664
|
let canUserResumeSpy;
|
|
3666
3665
|
let canUserRaiseHandSpy;
|
|
3666
|
+
let bothLeaveAndEndMeetingAvailableSpy;
|
|
3667
3667
|
let canUserLowerAllHandsSpy;
|
|
3668
3668
|
let canUserLowerSomeoneElsesHandSpy;
|
|
3669
3669
|
let waitingForOthersToJoinSpy;
|
|
3670
3670
|
|
|
3671
|
-
|
|
3672
3671
|
beforeEach(() => {
|
|
3673
3672
|
locusInfoOnSpy = sinon.spy(meeting.locusInfo, 'on');
|
|
3674
3673
|
canUserLockSpy = sinon.spy(MeetingUtil, 'canUserLock');
|
|
@@ -3680,6 +3679,7 @@ describe('plugin-meetings', () => {
|
|
|
3680
3679
|
inMeetingActionsSetSpy = sinon.spy(meeting.inMeetingActions, 'set');
|
|
3681
3680
|
canUserRaiseHandSpy = sinon.spy(MeetingUtil, 'canUserRaiseHand');
|
|
3682
3681
|
canUserLowerAllHandsSpy = sinon.spy(MeetingUtil, 'canUserLowerAllHands');
|
|
3682
|
+
bothLeaveAndEndMeetingAvailableSpy = sinon.spy(MeetingUtil, 'bothLeaveAndEndMeetingAvailable');
|
|
3683
3683
|
canUserLowerSomeoneElsesHandSpy = sinon.spy(MeetingUtil, 'canUserLowerSomeoneElsesHand');
|
|
3684
3684
|
waitingForOthersToJoinSpy = sinon.spy(MeetingUtil, 'waitingForOthersToJoin');
|
|
3685
3685
|
});
|
|
@@ -3716,6 +3716,7 @@ describe('plugin-meetings', () => {
|
|
|
3716
3716
|
assert.calledWith(canUserPauseSpy, payload.info.userDisplayHints);
|
|
3717
3717
|
assert.calledWith(canUserResumeSpy, payload.info.userDisplayHints);
|
|
3718
3718
|
assert.calledWith(canUserRaiseHandSpy, payload.info.userDisplayHints);
|
|
3719
|
+
assert.calledWith(bothLeaveAndEndMeetingAvailableSpy, payload.info.userDisplayHints);
|
|
3719
3720
|
assert.calledWith(canUserLowerAllHandsSpy, payload.info.userDisplayHints);
|
|
3720
3721
|
assert.calledWith(canUserLowerSomeoneElsesHandSpy, payload.info.userDisplayHints);
|
|
3721
3722
|
assert.calledWith(waitingForOthersToJoinSpy, payload.info.userDisplayHints);
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import sinon from 'sinon';
|
|
2
2
|
import {assert} from '@webex/test-helper-chai';
|
|
3
|
-
|
|
4
3
|
import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
|
|
5
4
|
import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
|
|
6
5
|
import LoggerConfig
|
|
@@ -250,6 +249,15 @@ describe('plugin-meetings', () => {
|
|
|
250
249
|
});
|
|
251
250
|
});
|
|
252
251
|
|
|
252
|
+
describe('bothLeaveAndEndMeetingAvailable', () => {
|
|
253
|
+
it('works as expected', () => {
|
|
254
|
+
assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_TRANSFER_HOST_END_MEETING']), true);
|
|
255
|
+
assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_END_MEETING']), true);
|
|
256
|
+
assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_TRANSFER_HOST_END_MEETING', 'LEAVE_END_MEETING']), true);
|
|
257
|
+
assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable([]), false);
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
|
|
253
261
|
describe('canUserLock', () => {
|
|
254
262
|
it('works as expected', () => {
|
|
255
263
|
assert.deepEqual(MeetingUtil.canUserLock(['LOCK_CONTROL_LOCK', 'LOCK_STATUS_UNLOCKED']), true);
|