@webex/plugin-meetings 3.0.0-beta.111 → 3.0.0-beta.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +45 -1
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/media/index.js +0 -21
  5. package/dist/media/index.js.map +1 -1
  6. package/dist/meeting/index.js +19 -0
  7. package/dist/meeting/index.js.map +1 -1
  8. package/dist/meeting/locusMediaRequest.js +288 -0
  9. package/dist/meeting/locusMediaRequest.js.map +1 -0
  10. package/dist/meeting/muteState.js +49 -34
  11. package/dist/meeting/muteState.js.map +1 -1
  12. package/dist/meeting/request.js +12 -47
  13. package/dist/meeting/request.js.map +1 -1
  14. package/dist/meeting/util.js +20 -19
  15. package/dist/meeting/util.js.map +1 -1
  16. package/dist/roap/index.js +4 -19
  17. package/dist/roap/index.js.map +1 -1
  18. package/dist/roap/request.js +23 -39
  19. package/dist/roap/request.js.map +1 -1
  20. package/dist/roap/turnDiscovery.js +2 -10
  21. package/dist/roap/turnDiscovery.js.map +1 -1
  22. package/dist/types/meeting/index.d.ts +3 -0
  23. package/dist/types/meeting/locusMediaRequest.d.ts +68 -0
  24. package/dist/types/meeting/muteState.d.ts +3 -2
  25. package/dist/types/meeting/request.d.ts +4 -18
  26. package/dist/types/roap/request.d.ts +6 -8
  27. package/dist/types/roap/turnDiscovery.d.ts +4 -1
  28. package/package.json +19 -19
  29. package/src/media/index.ts +0 -23
  30. package/src/meeting/index.ts +22 -0
  31. package/src/meeting/locusMediaRequest.ts +303 -0
  32. package/src/meeting/muteState.ts +24 -9
  33. package/src/meeting/request.ts +15 -51
  34. package/src/meeting/util.ts +17 -13
  35. package/src/roap/index.ts +4 -16
  36. package/src/roap/request.ts +22 -42
  37. package/src/roap/turnDiscovery.ts +2 -8
  38. package/test/unit/spec/meeting/locusMediaRequest.ts +414 -0
  39. package/test/unit/spec/meeting/muteState.js +97 -71
  40. package/test/unit/spec/meeting/request.js +19 -0
  41. package/test/unit/spec/meeting/utils.js +31 -37
  42. package/test/unit/spec/roap/index.ts +2 -37
  43. package/test/unit/spec/roap/request.ts +27 -57
  44. package/test/unit/spec/roap/turnDiscovery.ts +3 -5
@@ -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","preferTranscoding","isMultistream","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","asResourceOccupant","breakoutsSupported","res","LOCUS_JOIN_RESPONSE","data","trigger","LOCI_UPDATE","trackingId","headers","trackingid","cleanUp","breakouts","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeLocalStream","closeLocalShare","closeRemoteTracks","closePeerConnections","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteTracks","unsetPeerConnections","reconnectionManager","stopKeepAlive","updateLLMConnection","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","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","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","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"],"sources":["util.ts"],"sourcesContent":["import {isEmpty} from 'lodash';\nimport {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\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 {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\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';\n\nconst MeetingUtil: any = {};\n\nMeetingUtil.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\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(\n new ParameterError('You need a media id on the meeting to change remote audio.')\n );\n }\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});\n\n return meeting.meetingRequest\n .remoteAudioVideoToggle({\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n localMedias,\n deviceUrl: meeting.deviceUrl,\n correlationId: meeting.correlationId,\n preferTranscoding: !meeting.isMultistream,\n })\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) =>\n 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: !meeting.isMultistream,\n asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\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 meeting.breakouts.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.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.stopKeepAlive())\n .then(() => meeting.updateLLMConnection());\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 ${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\nMeetingUtil.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((response) => {\n if (response && response.body && response.body.locus) {\n // && !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 ${meeting.id}, 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) => locusInfo.parsedLocus?.self?.state === _LEFT_;\n\nMeetingUtil.isUserInIdleState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_;\n\nMeetingUtil.isUserInJoinedState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_;\n\nMeetingUtil.isMediaEstablished = (currentMediaStatus) =>\n currentMediaStatus &&\n (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);\n\nMeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {\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.validateOptions = (options) => {\n const {sendVideo, sendAudio, sendShare, localStream, localShare} = 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) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [];\n\nMeetingUtil.canInviteNewParticipants = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ADD_GUEST);\n\nMeetingUtil.canAdmitParticipant = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);\n\nMeetingUtil.canUserLock = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);\n\nMeetingUtil.canUserUnlock = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);\n\nMeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);\n\nMeetingUtil.canUserLowerAllHands = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);\n\nMeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);\n\nMeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);\n\nMeetingUtil.canManageBreakout = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT);\n\nMeetingUtil.isSuppressBreakoutSupport = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT);\n\nMeetingUtil.canAdmitLobbyToBreakout = (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT);\n\nMeetingUtil.isBreakoutPreassignmentsEnabled = (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS);\n\nMeetingUtil.canUserAskForHelp = (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_ASK_FOR_HELP);\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: LocalMicrophoneTrack | null) => {\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\nMeetingUtil.handleVideoLogging = (videoTrack: LocalCameraTrack | null) => {\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\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 ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\n\nMeetingUtil.canEnableClosedCaption = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_START);\n\nMeetingUtil.isSaveTranscriptsEnabled = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED);\n\nMeetingUtil.canStartTranscribing = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);\n\nMeetingUtil.canStopTranscribing = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);\n\nMeetingUtil.isClosedCaptionActive = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);\n\nMeetingUtil.isWebexAssistantActive = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);\n\nMeetingUtil.canViewCaptionPanel = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);\n\nMeetingUtil.isRealTimeTranslationEnabled = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);\n\nMeetingUtil.canSelectSpokenLanguages = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);\n\nMeetingUtil.waitingForOthersToJoin = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);\n\nMeetingUtil.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};\nMeetingUtil.canUserRenameSelfAndObserved = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED);\n\nMeetingUtil.canUserRenameOthers = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_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","meeting","audioMuted","videoMuted","reject","ParameterError","locusMediaRequest","Metrics","postEvent","event","eventType","MEDIA_REQUEST","send","type","selfUrl","muteOptions","then","MEDIA_RESPONSE","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","options","LOCUS_JOIN_REQUEST","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","deviceUrl","correlationId","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","isMultistream","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","res","LOCUS_JOIN_RESPONSE","data","trigger","LOCI_UPDATE","trackingId","headers","trackingid","cleanUp","breakouts","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeLocalStream","closeLocalShare","closeRemoteTracks","closePeerConnections","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteTracks","unsetPeerConnections","reconnectionManager","stopKeepAlive","updateLLMConnection","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","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","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","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"],"sources":["util.ts"],"sourcesContent":["import {isEmpty} from 'lodash';\nimport {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\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 {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\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';\n\nconst MeetingUtil: any = {};\n\nMeetingUtil.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\nMeetingUtil.remoteUpdateAudioVideo = (meeting, audioMuted?: boolean, videoMuted?: boolean) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n if (!meeting.locusMediaRequest) {\n return Promise.reject(\n new ParameterError(\n 'You need a meeting with a media connection, call Meeting.addMedia() first.'\n )\n );\n }\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});\n\n return meeting.locusMediaRequest\n .send({\n type: 'LocalMute',\n selfUrl: meeting.selfUrl,\n mediaId: meeting.mediaId,\n muteOptions: {\n audioMuted,\n videoMuted,\n },\n })\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) =>\n 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: !meeting.isMultistream,\n asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\n locale: options.locale,\n deviceCapabilities: options.deviceCapabilities,\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 meeting.breakouts.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.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.stopKeepAlive())\n .then(() => meeting.updateLLMConnection());\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 ${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\nMeetingUtil.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((response) => {\n if (response && response.body && response.body.locus) {\n // && !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 ${meeting.id}, 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) => locusInfo.parsedLocus?.self?.state === _LEFT_;\n\nMeetingUtil.isUserInIdleState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_;\n\nMeetingUtil.isUserInJoinedState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_;\n\nMeetingUtil.isMediaEstablished = (currentMediaStatus) =>\n currentMediaStatus &&\n (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);\n\nMeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {\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.validateOptions = (options) => {\n const {sendVideo, sendAudio, sendShare, localStream, localShare} = 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) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [];\n\nMeetingUtil.canInviteNewParticipants = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ADD_GUEST);\n\nMeetingUtil.canAdmitParticipant = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);\n\nMeetingUtil.canUserLock = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);\n\nMeetingUtil.canUserUnlock = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);\n\nMeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);\n\nMeetingUtil.canUserLowerAllHands = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);\n\nMeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);\n\nMeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);\n\nMeetingUtil.canManageBreakout = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT);\n\nMeetingUtil.isSuppressBreakoutSupport = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT);\n\nMeetingUtil.canAdmitLobbyToBreakout = (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT);\n\nMeetingUtil.isBreakoutPreassignmentsEnabled = (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS);\n\nMeetingUtil.canUserAskForHelp = (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_ASK_FOR_HELP);\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: LocalMicrophoneTrack | null) => {\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\nMeetingUtil.handleVideoLogging = (videoTrack: LocalCameraTrack | null) => {\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\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 ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\n\nMeetingUtil.canEnableClosedCaption = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_START);\n\nMeetingUtil.isSaveTranscriptsEnabled = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED);\n\nMeetingUtil.canStartTranscribing = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);\n\nMeetingUtil.canStopTranscribing = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);\n\nMeetingUtil.isClosedCaptionActive = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);\n\nMeetingUtil.isWebexAssistantActive = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);\n\nMeetingUtil.canViewCaptionPanel = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);\n\nMeetingUtil.isRealTimeTranslationEnabled = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);\n\nMeetingUtil.canSelectSpokenLanguages = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);\n\nMeetingUtil.waitingForOthersToJoin = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);\n\nMeetingUtil.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};\nMeetingUtil.canUserRenameSelfAndObserved = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED);\n\nMeetingUtil.canUserRenameOthers = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS);\n\nexport default MeetingUtil;\n"],"mappings":";;;;;;;;;;;;;;;;;AAGA;AACA;AACA;AAEA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AAA0D;AAAA;AAE1D,IAAMA,WAAgB,GAAG,CAAC,CAAC;AAE3BA,WAAW,CAACC,cAAc,GAAG,UAACC,QAAQ,EAAK;EACzC,IAAMC,MAAW,GAAG,CAAC,CAAC;;EAEtB;EACAA,MAAM,CAACC,KAAK,GAAGF,QAAQ,CAACG,IAAI,CAACD,KAAK;EAClCD,MAAM,CAACG,gBAAgB,GAAGJ,QAAQ,CAACG,IAAI,CAACC,gBAAgB;EACxDH,MAAM,CAACI,QAAQ,GAAGJ,MAAM,CAACC,KAAK,CAACI,GAAG;EAClCL,MAAM,CAACM,OAAO,GAAGN,MAAM,CAACC,KAAK,CAACI,GAAG,CAACE,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,EAAE;EAClDR,MAAM,CAACS,MAAM,GAAGT,MAAM,CAACC,KAAK,CAACS,IAAI,CAACC,EAAE;;EAEpC;EACAX,MAAM,CAACG,gBAAgB,CAACS,OAAO,CAAC,UAACC,eAAe,EAAK;IACnD,IAAIA,eAAe,CAACC,OAAO,EAAE;MAC3Bd,MAAM,CAACc,OAAO,GAAGD,eAAe,CAACC,OAAO;IAC1C;EACF,CAAC,CAAC;EAEF,OAAOd,MAAM;AACf,CAAC;AAEDH,WAAW,CAACkB,sBAAsB,GAAG,UAACC,OAAO,EAAEC,UAAoB,EAAEC,UAAoB,EAAK;EAC5F,IAAI,CAACF,OAAO,EAAE;IACZ,OAAO,iBAAQG,MAAM,CAAC,IAAIC,kBAAc,CAAC,4BAA4B,CAAC,CAAC;EACzE;EAEA,IAAI,CAACJ,OAAO,CAACK,iBAAiB,EAAE;IAC9B,OAAO,iBAAQF,MAAM,CACnB,IAAIC,kBAAc,CAChB,4EAA4E,CAC7E,CACF;EACH;EAEAE,gBAAO,CAACC,SAAS,CAAC;IAACC,KAAK,EAAEC,iBAAS,CAACC,aAAa;IAAEV,OAAO,EAAPA;EAAO,CAAC,CAAC;EAE5D,OAAOA,OAAO,CAACK,iBAAiB,CAC7BM,IAAI,CAAC;IACJC,IAAI,EAAE,WAAW;IACjBC,OAAO,EAAEb,OAAO,CAACa,OAAO;IACxBf,OAAO,EAAEE,OAAO,CAACF,OAAO;IACxBgB,WAAW,EAAE;MACXb,UAAU,EAAVA,UAAU;MACVC,UAAU,EAAVA;IACF;EACF,CAAC,CAAC,CACDa,IAAI,CAAC,UAAChC,QAAQ,EAAK;IAAA;IAClBuB,gBAAO,CAACC,SAAS,CAAC;MAACC,KAAK,EAAEC,iBAAS,CAACO,cAAc;MAAEhB,OAAO,EAAPA;IAAO,CAAC,CAAC;IAE7D,OAAOjB,QAAQ,aAARA,QAAQ,yCAARA,QAAQ,CAAEG,IAAI,mDAAd,eAAgBD,KAAK;EAC9B,CAAC,CAAC;AACN,CAAC;AAEDJ,WAAW,CAACoC,QAAQ,GAAG,UAACC,IAAI;EAAA,OAAKA,IAAI,IAAIA,IAAI,CAACC,KAAK;AAAA;AAEnDtC,WAAW,CAACuC,WAAW,GAAG,UAACD,KAAK,EAAE1B,MAAM;EAAA,OAAK0B,KAAK,KAAK1B,MAAM;AAAA;AAE7DZ,WAAW,CAACwC,YAAY,GAAG,UAACC,GAAG;EAAA;EAAA,OAC7B,CAAAA,GAAG,aAAHA,GAAG,oCAAHA,GAAG,CAAEpC,IAAI,8CAAT,UAAWqC,SAAS,KAAIC,yBAAc,CAACC,QAAQ,CAACH,GAAG,CAACpC,IAAI,CAACqC,SAAS,CAAC;AAAA;AAErE1C,WAAW,CAAC6C,WAAW,GAAG,UAAC1B,OAAO,EAAE2B,OAAO,EAAK;EAC9C,IAAI,CAAC3B,OAAO,EAAE;IACZ,OAAO,iBAAQG,MAAM,CAAC,IAAIC,kBAAc,CAAC,4BAA4B,CAAC,CAAC;EACzE;EAEAE,gBAAO,CAACC,SAAS,CAAC;IAACC,KAAK,EAAEC,iBAAS,CAACmB,kBAAkB;IAAE5B,OAAO,EAAPA;EAAO,CAAC,CAAC;;EAEjE;EACA;EACA;EACA,OAAOA,OAAO,CAAC6B,cAAc,CAC1BH,WAAW,CAAC;IACXI,cAAc,EAAE9B,OAAO,CAAC+B,cAAc,IAAI/B,OAAO,CAACgC,MAAM;IACxDC,aAAa,EAAEjC,OAAO,CAACiC,aAAa;IACpCC,SAAS,EAAElC,OAAO,CAACkC,SAAS;IAC5B9C,QAAQ,EAAEY,OAAO,CAACZ,QAAQ;IAC1B+C,aAAa,EAAEnC,OAAO,CAACmC,aAAa;IACpCC,WAAW,EAAET,OAAO,CAACS,WAAW;IAChCC,eAAe,EAAErC,OAAO,CAACqC,eAAe;IACxCC,UAAU,EAAEX,OAAO,CAACW,UAAU,IAAI,IAAI;IACtCC,SAAS,EAAEZ,OAAO,CAACY,SAAS;IAC5BC,GAAG,EAAEb,OAAO,CAACa,GAAG;IAChBC,cAAc,EAAEd,OAAO,CAACc,cAAc;IACtCC,iBAAiB,EAAE,CAAC1C,OAAO,CAAC2C,aAAa;IACzCC,kBAAkB,EAAEjB,OAAO,CAACiB,kBAAkB;IAC9CC,kBAAkB,EAAElB,OAAO,CAACkB,kBAAkB;IAC9CC,MAAM,EAAEnB,OAAO,CAACmB,MAAM;IACtBC,kBAAkB,EAAEpB,OAAO,CAACoB;EAC9B,CAAC,CAAC,CACDhC,IAAI,CAAC,UAACiC,GAAG,EAAK;IACb1C,gBAAO,CAACC,SAAS,CAAC;MAChBC,KAAK,EAAEC,iBAAS,CAACwC,mBAAmB;MACpCjD,OAAO,EAAPA,OAAO;MACPkD,IAAI,EAAE;QACJC,OAAO,EAAEA,eAAO,CAACC,WAAW;QAC5BnE,KAAK,EAAE+D,GAAG,CAAC9D,IAAI,CAACD,KAAK;QACrBE,gBAAgB,EAAE6D,GAAG,CAAC9D,IAAI,CAACC,gBAAgB;QAC3CkE,UAAU,EAAEL,GAAG,CAACM,OAAO,CAACC;MAC1B;IACF,CAAC,CAAC;IAEF,OAAO1E,WAAW,CAACC,cAAc,CAACkE,GAAG,CAAC;EACxC,CAAC,CAAC;AACN,CAAC;AAEDnE,WAAW,CAAC2E,OAAO,GAAG,UAACxD,OAAO,EAAK;EACjCA,OAAO,CAACyD,SAAS,CAACD,OAAO,EAAE;;EAE3B;EACA,IAAME,iBAAiB,GAAG1D,OAAO,CAAC2D,aAAa,GAC3C3D,OAAO,CAAC2D,aAAa,CAACC,YAAY,EAAE,GACpC,iBAAQC,OAAO,EAAE;EAErB,OAAOH,iBAAiB,CACrB3C,IAAI,CAAC;IAAA,OAAMf,OAAO,CAAC8D,gBAAgB,EAAE;EAAA,EAAC,CACtC/C,IAAI,CAAC;IAAA,OAAMf,OAAO,CAAC+D,eAAe,EAAE;EAAA,EAAC,CACrChD,IAAI,CAAC;IAAA,OAAMf,OAAO,CAACgE,iBAAiB,EAAE;EAAA,EAAC,CACvCjD,IAAI,CAAC;IAAA,OAAMf,OAAO,CAACiE,oBAAoB,EAAE;EAAA,EAAC,CAC1ClD,IAAI,CAAC,YAAM;IACVf,OAAO,CAACkE,oBAAoB,EAAE;IAC9BlE,OAAO,CAACmE,oBAAoB,EAAE;IAC9BnE,OAAO,CAACoE,iBAAiB,EAAE;IAC3BpE,OAAO,CAACqE,oBAAoB,EAAE;IAC9BrE,OAAO,CAACsE,mBAAmB,CAACd,OAAO,EAAE;EACvC,CAAC,CAAC,CACDzC,IAAI,CAAC;IAAA,OAAMf,OAAO,CAACuE,aAAa,EAAE;EAAA,EAAC,CACnCxD,IAAI,CAAC;IAAA,OAAMf,OAAO,CAACwE,mBAAmB,EAAE;EAAA,EAAC;AAC9C,CAAC;AAED3F,WAAW,CAAC4F,oBAAoB,GAAG,UAACzE,OAAO,EAAE0E,QAAQ,EAAK;EACxD,IAAI1E,OAAO,CAAC2E,YAAY,KAAKC,qBAAU,CAACC,QAAQ,EAAE;IAChD,OAAO,iBAAQ1E,MAAM,CAAC,IAAI2E,kCAAqB,EAAE,CAAC;EACpD;EAEA,IAAMnD,OAAO,GAAG;IACdvC,QAAQ,EAAEY,OAAO,CAACZ,QAAQ;IAC1BK,MAAM,EAAEO,OAAO,CAACP,MAAM;IACtB0C,aAAa,EAAEnC,OAAO,CAACmC,aAAa;IACpCuC,QAAQ,EAARA;EACF,CAAC;EAED,OAAO1E,OAAO,CAAC6B,cAAc,CAC1B4C,oBAAoB,CAAC9C,OAAO,CAAC,CAC7BZ,IAAI,CAAC,UAAChC,QAAQ,EAAK;IAAA;IAClB,IAAIA,QAAQ,aAARA,QAAQ,kCAARA,QAAQ,CAAEG,IAAI,4CAAd,gBAAgBD,KAAK,EAAE;MACzBe,OAAO,CAAC+E,SAAS,CAACC,WAAW,CAACjG,QAAQ,CAACG,IAAI,CAACD,KAAK,CAAC;IACpD;EACF,CAAC,CAAC,CACDgG,KAAK,CAAC,UAAC3D,GAAG,EAAK;IACd4D,oBAAW,CAACC,MAAM,CAACC,KAAK,6GAC+EpF,OAAO,CAACL,EAAE,sBAAY2B,GAAG,EAC/H;IAED,OAAO,iBAAQnB,MAAM,CAACmB,GAAG,CAAC;EAC5B,CAAC,CAAC;AACN,CAAC;;AAED;AACA;AACA;AACA;AACAzC,WAAW,CAACwG,YAAY,GAAG,UAACrF,OAAO,EAAwB;EAAA,IAAtB2B,OAAY,uEAAG,CAAC,CAAC;EACpD,IAAI3B,OAAO,CAAC2E,YAAY,KAAKC,qBAAU,CAACC,QAAQ,EAAE;IAChD;IACA,OAAO,iBAAQ1E,MAAM,CAAC,IAAI2E,kCAAqB,EAAE,CAAC;EACpD;EAEA,IAAIjG,WAAW,CAACyG,iBAAiB,CAACtF,OAAO,CAAC+E,SAAS,CAAC,EAAE;IACpD,OAAO,iBAAQ5E,MAAM,CAAC,IAAIoF,+BAAkB,EAAE,CAAC;EACjD;EAEA,IAAMC,cAAc,GAAG;IACrBpG,QAAQ,EAAEY,OAAO,CAACZ,QAAQ;IAC1BK,MAAM,EAAEO,OAAO,CAACP,MAAM;IACtB0C,aAAa,EAAEnC,OAAO,CAACmC,aAAa;IACpCG,UAAU,EAAEtC,OAAO,CAACsC,UAAU;IAC9BJ,SAAS,EAAElC,OAAO,CAACkC;EACrB,CAAC;EAED,IAAMuD,YAAY,mCAAOD,cAAc,GAAK7D,OAAO,CAAC;EAEpD,OAAO3B,OAAO,CAAC6B,cAAc,CAC1BwD,YAAY,CAACI,YAAY,CAAC,CAC1B1E,IAAI,CAAC,UAAChC,QAAQ,EAAK;IAClB,IAAIA,QAAQ,IAAIA,QAAQ,CAACG,IAAI,IAAIH,QAAQ,CAACG,IAAI,CAACD,KAAK,EAAE;MACpD;MACAe,OAAO,CAAC+E,SAAS,CAACC,WAAW,CAACjG,QAAQ,CAACG,IAAI,CAACD,KAAK,CAAC;IACpD;IAEA,OAAO,iBAAQ4E,OAAO,EAAE;EAC1B,CAAC,CAAC,CACD9C,IAAI,CAAC,YAAM;IACV,IAAIY,OAAO,CAAC+D,WAAW,EAAE;MACvB,OAAO,iBAAQ7B,OAAO,EAAE;IAC1B;IAEA,OAAOhF,WAAW,CAAC2E,OAAO,CAACxD,OAAO,CAAC;EACrC,CAAC,CAAC,CACDiF,KAAK,CAAC,UAAC3D,GAAG,EAAK;IACd;IACA;IACA;IACA4D,oBAAW,CAACC,MAAM,CAACC,KAAK,sGACwEpF,OAAO,CAACL,EAAE,sBAAY2B,GAAG,EACxH;IAED,OAAO,iBAAQnB,MAAM,CAACmB,GAAG,CAAC;EAC5B,CAAC,CAAC;AACN,CAAC;AACDzC,WAAW,CAAC8G,cAAc,GAAG,UAAC3F,OAAO,EAAE4F,MAAM;EAAA,OAC3C5F,OAAO,CAAC6B,cAAc,CAAC8D,cAAc,CAAC;IACpCvG,QAAQ,EAAEY,OAAO,CAACZ,QAAQ;IAC1B8C,SAAS,EAAElC,OAAO,CAACkC,SAAS;IAC5B0D,MAAM,EAANA;EACF,CAAC,CAAC;AAAA;AAEJ/G,WAAW,CAACyG,iBAAiB,GAAG,UAACP,SAAS;EAAA;EAAA,OAAK,0BAAAA,SAAS,CAACc,WAAW,oFAArB,sBAAuBnG,IAAI,2DAA3B,uBAA6BoG,KAAK,MAAKC,iBAAM;AAAA;AAE5FlH,WAAW,CAACmH,iBAAiB,GAAG,UAACjB,SAAS;EAAA;EAAA,OAAK,2BAAAA,SAAS,CAACc,WAAW,qFAArB,uBAAuBnG,IAAI,2DAA3B,uBAA6BoG,KAAK,MAAKG,iBAAM;AAAA;AAE5FpH,WAAW,CAACqH,mBAAmB,GAAG,UAACnB,SAAS;EAAA;EAAA,OAAK,2BAAAA,SAAS,CAACc,WAAW,qFAArB,uBAAuBnG,IAAI,2DAA3B,uBAA6BoG,KAAK,MAAKK,mBAAQ;AAAA;AAEhGtH,WAAW,CAACuH,kBAAkB,GAAG,UAACC,kBAAkB;EAAA,OAClDA,kBAAkB,KACjBA,kBAAkB,CAACC,KAAK,IAAID,kBAAkB,CAACE,KAAK,IAAIF,kBAAkB,CAACG,KAAK,CAAC;AAAA;AAEpF3H,WAAW,CAAC4H,kBAAkB,GAAG,UAACzG,OAAO,EAAwB;EAAA,IAAtB2B,OAAY,uEAAG,CAAC,CAAC;EAC1D3B,OAAO,CAACsC,UAAU,GAAGtC,OAAO,CAACsC,UAAU,IAAIX,OAAO,CAACW,UAAU;EAE7D,IAAItC,OAAO,CAAC0G,eAAe,EAAE;IAC3B,OAAO,iBAAQvG,MAAM,CAAC,IAAIwG,qBAAY,EAAE,CAAC;EAC3C;EACA,IAAI3G,OAAO,CAAC4G,cAAc,KAAKC,0BAAe,CAACC,QAAQ,EAAE;IACvD,OAAO,iBAAQ3G,MAAM,CAAC,IAAI4G,sBAAa,EAAE,CAAC;EAC5C;EAEA,IAAIpF,OAAO,CAACa,GAAG,EAAE;IACflC,gBAAO,CAACC,SAAS,CAAC;MAChBC,KAAK,EAAEC,iBAAS,CAACuG,aAAa;MAC9BhH,OAAO,EAAPA;IACF,CAAC,CAAC;EACJ;;EAEA;EACA,OAAOnB,WAAW,CAAC6C,WAAW,CAAC1B,OAAO,EAAE2B,OAAO,CAAC,CAC7CZ,IAAI,CAAC,UAAChC,QAAQ,EAAK;IAClBiB,OAAO,CAACiH,QAAQ,CAAClI,QAAQ,CAAC;IAE1B,OAAO,iBAAQ8E,OAAO,CAAC9E,QAAQ,CAAC;EAClC,CAAC,CAAC,CACDkG,KAAK,CAAC,UAAC3D,GAAG,EAAK;IACd;IACA,IAAIzC,WAAW,CAACwC,YAAY,CAACC,GAAG,CAAC,EAAE;MACjChB,gBAAO,CAACC,SAAS,CAAC;QAChBC,KAAK,EAAEC,iBAAS,CAACyG,UAAU;QAC3BlH,OAAO,EAAPA;MACF,CAAC,CAAC;;MAEF;MACA;MACA,OAAO,iBAAQG,MAAM,CAAC,IAAIgH,qBAAiB,CAAC,uBAAuB,EAAE7F,GAAG,CAAC,CAAC;IAC5E;IACA4D,oBAAW,CAACC,MAAM,CAACC,KAAK,CAAC,8DAA8D,EAAE9D,GAAG,CAAC;IAE7F,OAAO,iBAAQnB,MAAM,CAAC,IAAIiH,oBAAgB,CAACzF,OAAO,EAAE,uBAAuB,EAAEL,GAAG,CAAC,CAAC;EACpF,CAAC,CAAC;AACN,CAAC;AAEDzC,WAAW,CAACwI,eAAe,GAAG,UAAC1F,OAAO,EAAK;EACzC,IAAO2F,SAAS,GAAmD3F,OAAO,CAAnE2F,SAAS;IAAEC,SAAS,GAAwC5F,OAAO,CAAxD4F,SAAS;IAAEC,SAAS,GAA6B7F,OAAO,CAA7C6F,SAAS;IAAEC,WAAW,GAAgB9F,OAAO,CAAlC8F,WAAW;IAAEC,UAAU,GAAI/F,OAAO,CAArB+F,UAAU;EAE/D,IAAIJ,SAAS,IAAI,CAACzI,WAAW,CAAC8I,QAAQ,CAACF,WAAW,CAAC,CAACG,UAAU,EAAE;IAC9D,OAAO,iBAAQzH,MAAM,CAAC,IAAIC,kBAAc,CAAC,iCAAiC,CAAC,CAAC;EAC9E;EAEA,IAAImH,SAAS,IAAI,CAAC1I,WAAW,CAAC8I,QAAQ,CAACF,WAAW,CAAC,CAACI,UAAU,EAAE;IAC9D,OAAO,iBAAQ1H,MAAM,CAAC,IAAIC,kBAAc,CAAC,iCAAiC,CAAC,CAAC;EAC9E;EAEA,IAAIoH,SAAS,IAAI,CAAC3I,WAAW,CAAC8I,QAAQ,CAACD,UAAU,CAAC,CAACE,UAAU,EAAE;IAC7D,OAAO,iBAAQzH,MAAM,CAAC,IAAIC,kBAAc,CAAC,iCAAiC,CAAC,CAAC;EAC9E;EAEA,OAAO,iBAAQyD,OAAO,EAAE;AAC1B,CAAC;AAEDhF,WAAW,CAAC8I,QAAQ,GAAG,UAACG,MAAM,EAAK;EACjC,IAAID,UAAU,GAAG,IAAI;EACrB,IAAID,UAAU,GAAG,IAAI;EACrB,IAAIG,WAAW,GAAG,IAAI;EACtB,IAAIC,WAAW,GAAG,IAAI;EAEtB,IAAI,CAACF,MAAM,EAAE;IACX,OAAO;MAACD,UAAU,EAAE,IAAI;MAAED,UAAU,EAAE;IAAI,CAAC;EAC7C;EACA,IAAIE,MAAM,CAACG,cAAc,EAAE;IACzBF,WAAW,GAAGD,MAAM,CAACG,cAAc,EAAE;EACvC;EACA,IAAIH,MAAM,CAACI,cAAc,EAAE;IACzBF,WAAW,GAAGF,MAAM,CAACI,cAAc,EAAE;EACvC;EAEA,IAAIH,WAAW,IAAIA,WAAW,CAACI,MAAM,GAAG,CAAC,EAAE;IAAA,mBAC1BJ,WAAW;IAAA;IAAzBF,UAAU;EACb;EAEA,IAAIG,WAAW,IAAIA,WAAW,CAACG,MAAM,GAAG,CAAC,EAAE;IAAA,mBAC1BH,WAAW;IAAA;IAAzBJ,UAAU;EACb;EAEA,OAAO;IAACC,UAAU,EAAVA,UAAU;IAAED,UAAU,EAAVA;EAAU,CAAC;AACjC,CAAC;AAED/I,WAAW,CAACuJ,yBAAyB,GAAG,UAACrD,SAAS;EAAA,OAChDA,SAAS,IACTA,SAAS,CAACc,WAAW,IACrBd,SAAS,CAACc,WAAW,CAAC3E,IAAI,IAC1B6D,SAAS,CAACc,WAAW,CAAC3E,IAAI,IAC1B6D,SAAS,CAACc,WAAW,CAAC3E,IAAI,CAACqB,SAAS;AAAA;AAEtC1D,WAAW,CAACwJ,sBAAsB,GAAG,UAACtD,SAAS;EAAA,OAC7CA,SAAS,IACTA,SAAS,CAACc,WAAW,IACrBd,SAAS,CAACc,WAAW,CAAC3E,IAAI,IAC1B6D,SAAS,CAACc,WAAW,CAAC3E,IAAI,IAC1B6D,SAAS,CAACc,WAAW,CAAC3E,IAAI,CAACoH,MAAM;AAAA;AAEnCzJ,WAAW,CAAC0J,gCAAgC,GAAG,UAACxD,SAAS;EAAA;EAAA,OACvD,CAAAA,SAAS,aAATA,SAAS,iDAATA,SAAS,CAAEc,WAAW,qFAAtB,uBAAwB3E,IAAI,2DAA5B,uBAA8BsH,gBAAgB,KAAI,EAAE;AAAA;AAEtD3J,WAAW,CAAC4J,wBAAwB,GAAG,UAACC,YAAY;EAAA,OAClDA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACC,SAAS,CAAC;AAAA;AAEhD/J,WAAW,CAACgK,mBAAmB,GAAG,UAACH,YAAY;EAAA,OAC7CA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACG,sBAAsB,CAAC;AAAA;AAE7DjK,WAAW,CAACkK,WAAW,GAAG,UAACL,YAAY;EAAA,OACrCA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACK,iBAAiB,CAAC,IACtDN,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACM,oBAAoB,CAAC;AAAA;AAE3DpK,WAAW,CAACqK,aAAa,GAAG,UAACR,YAAY;EAAA,OACvCA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACQ,mBAAmB,CAAC,IACxDT,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACS,kBAAkB,CAAC;AAAA;AAEzDvK,WAAW,CAACwK,gBAAgB,GAAG,UAACX,YAAY;EAAA,OAAKA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACW,UAAU,CAAC;AAAA;AAEhGzK,WAAW,CAAC0K,oBAAoB,GAAG,UAACb,YAAY;EAAA,OAC9CA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACa,eAAe,CAAC;AAAA;AAEtD3K,WAAW,CAAC4K,4BAA4B,GAAG,UAACf,YAAY;EAAA,OACtDA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACe,wBAAwB,CAAC;AAAA;AAE/D7K,WAAW,CAAC8K,+BAA+B,GAAG,UAACjB,YAAY;EAAA,OACzDA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACiB,+BAA+B,CAAC,IACpElB,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACkB,iBAAiB,CAAC;AAAA;AAExDhL,WAAW,CAACiL,iBAAiB,GAAG,UAACpB,YAAY;EAAA,OAC3CA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACoB,mBAAmB,CAAC;AAAA;AAE1DlL,WAAW,CAACmL,yBAAyB,GAAG,UAACtB,YAAY;EAAA,OACnDA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACsB,8BAA8B,CAAC;AAAA;AAErEpL,WAAW,CAACqL,uBAAuB,GAAG,UAACxB,YAAY;EAAA,OACjD,CAACA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACwB,yBAAyB,CAAC;AAAA;AAEjEtL,WAAW,CAACuL,+BAA+B,GAAG,UAAC1B,YAAY;EAAA,OACzD,CAACA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAAC0B,+BAA+B,CAAC;AAAA;AAEvExL,WAAW,CAACyL,iBAAiB,GAAG,UAAC5B,YAAY;EAAA,OAC3C,CAACA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAAC4B,oBAAoB,CAAC;AAAA;AAE5D1L,WAAW,CAAC2L,WAAW,GAAG,UAACC,OAAO,EAAEC,OAAO,EAAEtL,QAAQ,EAAK;EACxD,IAAIqL,OAAO,IAAIA,OAAO,CAACE,OAAO,EAAE;IAC9B,OAAOD,OAAO,CAACF,WAAW,CAAC;MAACpL,QAAQ,EAARA,QAAQ;MAAEwL,IAAI,EAAE;IAAI,CAAC,CAAC;EACpD;EAEA,OAAO,iBAAQzK,MAAM,CAAC,IAAI0K,mBAAe,CAAC,2CAA2C,CAAC,CAAC;AACzF,CAAC;AAEDhM,WAAW,CAACiM,aAAa,GAAG,UAACL,OAAO,EAAEC,OAAO,EAAEtL,QAAQ,EAAK;EAC1D,IAAIqL,OAAO,IAAIA,OAAO,CAACM,SAAS,EAAE;IAChC,OAAOL,OAAO,CAACF,WAAW,CAAC;MAACpL,QAAQ,EAARA,QAAQ;MAAEwL,IAAI,EAAE;IAAK,CAAC,CAAC;EACrD;EAEA,OAAO,iBAAQzK,MAAM,CAAC,IAAI0K,mBAAe,CAAC,6CAA6C,CAAC,CAAC;AAC3F,CAAC;AAEDhM,WAAW,CAACmM,kBAAkB,GAAG,UAACnD,UAAuC,EAAK;EAC5E,IAAMoD,UAAU,GAAG,oCAAoC;EAEvD,IAAIpD,UAAU,EAAE;IACd,IAAMqD,QAAQ,GAAGrD,UAAU,CAACsD,eAAe,CAACC,WAAW,EAAE;IACzD,IAAOC,QAAQ,GAAIH,QAAQ,CAApBG,QAAQ;IAEfnG,oBAAW,CAACC,MAAM,CAACmG,GAAG,CAACL,UAAU,uBAAgBI,QAAQ,EAAG;IAC5DnG,oBAAW,CAACC,MAAM,CAACmG,GAAG,CAACL,UAAU,EAAE,YAAY,EAAE,wBAAeC,QAAQ,CAAC,CAAC;EAC5E;AACF,CAAC;AAEDrM,WAAW,CAAC0M,kBAAkB,GAAG,UAAC3D,UAAmC,EAAK;EACxE,IAAMqD,UAAU,GAAG,oCAAoC;EAEvD,IAAIrD,UAAU,EAAE;IACd,IAAMsD,QAAQ,GAAGtD,UAAU,CAACuD,eAAe,CAACC,WAAW,EAAE;IACzD,IAAOC,QAAQ,GAAIH,QAAQ,CAApBG,QAAQ;IAEfnG,oBAAW,CAACC,MAAM,CAACmG,GAAG,CAACL,UAAU,uBAAgBI,QAAQ,EAAG;IAC5DnG,oBAAW,CAACC,MAAM,CAACmG,GAAG,CAACL,UAAU,EAAE,YAAY,EAAE,wBAAeC,QAAQ,CAAC,CAAC;EAC5E;AACF,CAAC;AAEDrM,WAAW,CAAC2M,mBAAmB,GAAG,YAAkB;EAAA,IAAjBC,OAAO,uEAAG,EAAE;EAC7C,IAAMR,UAAU,GAAG,qCAAqC;EAExDQ,OAAO,CAAC7L,OAAO,CAAC,UAAC8L,MAAM,EAAK;IAC1BxG,oBAAW,CAACC,MAAM,CAACmG,GAAG,CAACL,UAAU,uBAAgBS,MAAM,CAACL,QAAQ,EAAG;IACnEnG,oBAAW,CAACC,MAAM,CAACmG,GAAG,CAACL,UAAU,EAAE,UAAU,EAAE,wBAAeS,MAAM,CAAC,CAAC;EACxE,CAAC,CAAC;AACJ,CAAC;AAED7M,WAAW,CAAC8M,gBAAgB,GAAG,UAAC3L,OAAO,EAAK;EAC1C,IAAIA,OAAO,CAAC2E,YAAY,KAAKC,qBAAU,CAACC,QAAQ,EAAE;IAChD,OAAO,iBAAQ1E,MAAM,CAAC,IAAI2E,kCAAqB,EAAE,CAAC;EACpD;EAEA,IAAM8G,UAAU,GAAG;IACjBxM,QAAQ,EAAEY,OAAO,CAACZ;EACpB,CAAC;EAED,OAAOY,OAAO,CAAC6B,cAAc,CAC1B8J,gBAAgB,CAACC,UAAU,CAAC,CAC5B7K,IAAI,CAAC,UAAChC,QAAQ,EAAK;IAClB,IAAIA,QAAQ,IAAIA,QAAQ,CAACG,IAAI,IAAIH,QAAQ,CAACG,IAAI,CAACD,KAAK,EAAE;MACpDe,OAAO,CAAC+E,SAAS,CAACC,WAAW,CAACjG,QAAQ,CAACG,IAAI,CAACD,KAAK,CAAC;IACpD;IAEA,OAAO,iBAAQ4E,OAAO,EAAE;EAC1B,CAAC,CAAC,CACD9C,IAAI,CAAC;IAAA,OAAMlC,WAAW,CAAC2E,OAAO,CAACxD,OAAO,CAAC;EAAA,EAAC,CACxCiF,KAAK,CAAC,UAAC3D,GAAG,EAAK;IACd4D,oBAAW,CAACC,MAAM,CAACC,KAAK,4GAC8EpF,OAAO,CAACL,EAAE,sBAAY2B,GAAG,EAC9H;IAED,OAAO,iBAAQnB,MAAM,CAACmB,GAAG,CAAC;EAC5B,CAAC,CAAC;AACN,CAAC;AAEDzC,WAAW,CAACgN,sBAAsB,GAAG,UAACnD,YAAY;EAAA,OAChDA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACmD,aAAa,CAAC;AAAA;AAEpDjN,WAAW,CAACkN,wBAAwB,GAAG,UAACrD,YAAY;EAAA,OAClDA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACqD,wBAAwB,CAAC;AAAA;AAE/DnN,WAAW,CAACoN,oBAAoB,GAAG,UAACvD,YAAY;EAAA,OAC9CA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACuD,2BAA2B,CAAC;AAAA;AAElErN,WAAW,CAACsN,mBAAmB,GAAG,UAACzD,YAAY;EAAA,OAC7CA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACyD,0BAA0B,CAAC;AAAA;AAEjEvN,WAAW,CAACwN,qBAAqB,GAAG,UAAC3D,YAAY;EAAA,OAC/CA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAAC2D,qBAAqB,CAAC;AAAA;AAE5DzN,WAAW,CAAC0N,sBAAsB,GAAG,UAAC7D,YAAY;EAAA,OAChDA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAAC6D,6BAA6B,CAAC;AAAA;AAEpE3N,WAAW,CAAC4N,mBAAmB,GAAG,UAAC/D,YAAY;EAAA,OAC7CA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAAC+D,oBAAoB,CAAC;AAAA;AAE3D7N,WAAW,CAAC8N,4BAA4B,GAAG,UAACjE,YAAY;EAAA,OACtDA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACiE,6BAA6B,CAAC;AAAA;AAEpE/N,WAAW,CAACgO,wBAAwB,GAAG,UAACnE,YAAY;EAAA,OAClDA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACmE,uBAAuB,CAAC;AAAA;AAE9DjO,WAAW,CAACkO,sBAAsB,GAAG,UAACrE,YAAY;EAAA,OAChDA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACqE,kBAAkB,CAAC;AAAA;AAEzDnO,WAAW,CAACoO,gBAAgB,GAAG,UAACC,aAAa,EAAExE,YAAY,EAAK;EAC9D,IAAIA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACwE,gBAAgB,CAAC,EAAE;IACzD,OAAO,IAAI;EACb;EACA,IAAIzE,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAACyE,kBAAkB,CAAC,EAAE;IAC3D,OAAO,KAAK;EACd;EAEA,OAAOF,aAAa;AACtB,CAAC;AACDrO,WAAW,CAACwO,4BAA4B,GAAG,UAAC3E,YAAY;EAAA,OACtDA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAAC2E,4BAA4B,CAAC;AAAA;AAEnEzO,WAAW,CAAC0O,mBAAmB,GAAG,UAAC7E,YAAY;EAAA,OAC7CA,YAAY,CAACjH,QAAQ,CAACkH,wBAAa,CAAC6E,iBAAiB,CAAC;AAAA;AAAC,eAE1C3O,WAAW;AAAA"}
@@ -98,7 +98,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
98
98
  value: function sendRoapOK(options) {
99
99
  var _this2 = this;
100
100
  return _promise.default.resolve().then(function () {
101
- var _meeting$audio, _meeting$video;
102
101
  // @ts-ignore
103
102
  var meeting = _this2.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);
104
103
  var roapMessage = {
@@ -111,11 +110,8 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
111
110
  roapMessage: roapMessage,
112
111
  locusSelfUrl: meeting.selfUrl,
113
112
  mediaId: options.mediaId,
114
- correlationId: options.correlationId,
115
- audioMuted: (_meeting$audio = meeting.audio) === null || _meeting$audio === void 0 ? void 0 : _meeting$audio.isLocallyMuted(),
116
- videoMuted: (_meeting$video = meeting.video) === null || _meeting$video === void 0 ? void 0 : _meeting$video.isLocallyMuted(),
117
113
  meetingId: meeting.id,
118
- preferTranscoding: !meeting.isMultistream
114
+ locusMediaRequest: meeting.locusMediaRequest
119
115
  }).then(function () {
120
116
  _loggerProxy.default.logger.log("Roap:index#sendRoapOK --> ROAP OK sent with seq ".concat(options.seq));
121
117
  });
@@ -145,11 +141,8 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
145
141
  roapMessage: roapMessage,
146
142
  locusSelfUrl: meeting.selfUrl,
147
143
  mediaId: options.mediaId,
148
- correlationId: options.correlationId,
149
- audioMuted: meeting.isAudioMuted(),
150
- videoMuted: meeting.isVideoMuted(),
151
144
  meetingId: meeting.id,
152
- preferTranscoding: !meeting.isMultistream
145
+ locusMediaRequest: meeting.locusMediaRequest
153
146
  });
154
147
  }
155
148
 
@@ -162,7 +155,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
162
155
  }, {
163
156
  key: "sendRoapError",
164
157
  value: function sendRoapError(options) {
165
- var _meeting$audio2, _meeting$video2;
166
158
  // @ts-ignore
167
159
  var meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);
168
160
  var roapMessage = {
@@ -175,11 +167,8 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
175
167
  roapMessage: roapMessage,
176
168
  locusSelfUrl: meeting.selfUrl,
177
169
  mediaId: options.mediaId,
178
- correlationId: options.correlationId,
179
- audioMuted: (_meeting$audio2 = meeting.audio) === null || _meeting$audio2 === void 0 ? void 0 : _meeting$audio2.isLocallyMuted(),
180
- videoMuted: (_meeting$video2 = meeting.video) === null || _meeting$video2 === void 0 ? void 0 : _meeting$video2.isLocallyMuted(),
181
170
  meetingId: meeting.id,
182
- preferTranscoding: !meeting.isMultistream
171
+ locusMediaRequest: meeting.locusMediaRequest
183
172
  }).then(function () {
184
173
  _loggerProxy.default.logger.log("Roap:index#sendRoapError --> ROAP ERROR sent with seq ".concat(options.seq));
185
174
  });
@@ -212,17 +201,13 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
212
201
  // Normally this is the roap offer, but when TURN discovery is enabled,
213
202
  // then this is the TURN discovery request message
214
203
  return this.turnDiscovery.isSkipped(meeting).then(function (isTurnDiscoverySkipped) {
215
- var _meeting$audio3, _meeting$video3;
216
204
  var sendEmptyMediaId = reconnect && isTurnDiscoverySkipped;
217
205
  return _this3.roapRequest.sendRoap({
218
206
  roapMessage: roapMessage,
219
- correlationId: meeting.correlationId,
220
207
  locusSelfUrl: meeting.selfUrl,
221
208
  mediaId: sendEmptyMediaId ? '' : meeting.mediaId,
222
- audioMuted: (_meeting$audio3 = meeting.audio) === null || _meeting$audio3 === void 0 ? void 0 : _meeting$audio3.isLocallyMuted(),
223
- videoMuted: (_meeting$video3 = meeting.video) === null || _meeting$video3 === void 0 ? void 0 : _meeting$video3.isLocallyMuted(),
224
209
  meetingId: meeting.id,
225
- preferTranscoding: !meeting.isMultistream
210
+ locusMediaRequest: meeting.locusMediaRequest
226
211
  });
227
212
  }).then(function (_ref) {
228
213
  var locus = _ref.locus,
@@ -1 +1 @@
1
- {"version":3,"names":["Roap","attrs","options","roapRequest","RoapRequest","turnDiscovery","TurnDiscovery","resolve","then","meeting","webex","meetings","meetingCollection","getByKey","correlationId","roapMessage","messageType","ROAP","ROAP_TYPES","OK","version","ROAP_VERSION","seq","LoggerProxy","logger","log","sendRoap","locusSelfUrl","selfUrl","mediaId","audioMuted","audio","isLocallyMuted","videoMuted","video","meetingId","id","preferTranscoding","isMultistream","ANSWER","sdps","sdp","isAudioMuted","isVideoMuted","ERROR","errorType","reconnect","tieBreaker","OFFER","isSkipped","isTurnDiscoverySkipped","sendEmptyMediaId","locus","mediaConnections","updateMediaConnections","isReconnecting","doTurnDiscovery","StatelessWebexPlugin"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport RoapRequest from './request';\nimport TurnDiscovery from './turnDiscovery';\nimport Meeting from '../meeting';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} seq\n * @property {Number} tieBreaker\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n attrs: any;\n lastRoapOffer: any;\n options: any;\n roapHandler: any;\n roapRequest: any;\n turnDiscovery: any;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n // @ts-ignore\n this.roapRequest = new RoapRequest({}, options);\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @memberof Roap\n */\n public sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\n })\n .then(() => {\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n });\n });\n }\n\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @memberof Roap\n */\n public sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n return this.roapRequest.sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapError(options) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType: options.errorType,\n seq: options.seq,\n };\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\n })\n .then(() => {\n LoggerProxy.logger.log(\n `Roap:index#sendRoapError --> ROAP ERROR sent with seq ${options.seq}`\n );\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, seq, sdp, reconnect, tieBreaker} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [sdp],\n version: ROAP.ROAP_VERSION,\n seq,\n tieBreaker,\n };\n\n // When reconnecting, it's important that the first roap message being sent out has empty media id.\n // Normally this is the roap offer, but when TURN discovery is enabled,\n // then this is the TURN discovery request message\n return this.turnDiscovery\n .isSkipped(meeting)\n .then((isTurnDiscoverySkipped) => {\n const sendEmptyMediaId = reconnect && isTurnDiscoverySkipped;\n\n return this.roapRequest.sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\n });\n })\n\n .then(({locus, mediaConnections}) => {\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n return locus;\n });\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["Roap","attrs","options","roapRequest","RoapRequest","turnDiscovery","TurnDiscovery","resolve","then","meeting","webex","meetings","meetingCollection","getByKey","correlationId","roapMessage","messageType","ROAP","ROAP_TYPES","OK","version","ROAP_VERSION","seq","LoggerProxy","logger","log","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","locusMediaRequest","ANSWER","sdps","sdp","ERROR","errorType","reconnect","tieBreaker","OFFER","isSkipped","isTurnDiscoverySkipped","sendEmptyMediaId","locus","mediaConnections","updateMediaConnections","isReconnecting","doTurnDiscovery","StatelessWebexPlugin"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport RoapRequest from './request';\nimport TurnDiscovery from './turnDiscovery';\nimport Meeting from '../meeting';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} seq\n * @property {Number} tieBreaker\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n attrs: any;\n lastRoapOffer: any;\n options: any;\n roapHandler: any;\n roapRequest: any;\n turnDiscovery: any;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n // @ts-ignore\n this.roapRequest = new RoapRequest({}, options);\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @memberof Roap\n */\n public sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n });\n });\n }\n\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @memberof Roap\n */\n public sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n return this.roapRequest.sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapError(options) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType: options.errorType,\n seq: options.seq,\n };\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(\n `Roap:index#sendRoapError --> ROAP ERROR sent with seq ${options.seq}`\n );\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, seq, sdp, reconnect, tieBreaker} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [sdp],\n version: ROAP.ROAP_VERSION,\n seq,\n tieBreaker,\n };\n\n // When reconnecting, it's important that the first roap message being sent out has empty media id.\n // Normally this is the roap offer, but when TURN discovery is enabled,\n // then this is the TURN discovery request message\n return this.turnDiscovery\n .isSkipped(meeting)\n .then((isTurnDiscoverySkipped) => {\n const sendEmptyMediaId = reconnect && isTurnDiscoverySkipped;\n\n return this.roapRequest.sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n });\n })\n\n .then(({locus, mediaConnections}) => {\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n return locus;\n });\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":"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"}
@@ -14,6 +14,7 @@ _Object$defineProperty(exports, "__esModule", {
14
14
  exports.default = void 0;
15
15
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
16
16
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
17
+ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
17
18
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
18
19
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
19
20
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
@@ -105,65 +106,48 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
105
106
  * @param {String} options.locusSelfUrl
106
107
  * @param {String} options.mediaId
107
108
  * @param {String} options.correlationId
108
- * @param {Boolean} options.audioMuted
109
- * @param {Boolean} options.videoMuted
110
109
  * @param {String} options.meetingId
111
- * @param {Boolean} options.preferTranscoding
112
110
  * @returns {Promise} returns the response/failure of the request
113
111
  */
114
112
  }, {
115
113
  key: "sendRoap",
116
114
  value: function () {
117
115
  var _sendRoap = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(options) {
118
- var _options$preferTransc;
119
- var roapMessage, locusSelfUrl, mediaId, correlationId, meetingId, _yield$this$attachRea, localSdpWithReachabilityData, joinCookie, mediaUrl, deviceUrl;
116
+ var roapMessage, locusSelfUrl, mediaId, meetingId, locusMediaRequest, _yield$this$attachRea, localSdpWithReachabilityData, joinCookie;
120
117
  return _regenerator.default.wrap(function _callee2$(_context2) {
121
118
  while (1) switch (_context2.prev = _context2.next) {
122
119
  case 0:
123
- roapMessage = options.roapMessage, locusSelfUrl = options.locusSelfUrl, mediaId = options.mediaId, correlationId = options.correlationId, meetingId = options.meetingId;
120
+ roapMessage = options.roapMessage, locusSelfUrl = options.locusSelfUrl, mediaId = options.mediaId, meetingId = options.meetingId, locusMediaRequest = options.locusMediaRequest;
124
121
  if (!mediaId) {
125
- _loggerProxy.default.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
122
+ _loggerProxy.default.logger.info('Roap:request#sendRoap --> sending empty mediaID');
126
123
  }
127
- _context2.next = 4;
124
+ if (locusMediaRequest) {
125
+ _context2.next = 5;
126
+ break;
127
+ }
128
+ _loggerProxy.default.logger.warn('Roap:request#sendRoap --> locusMediaRequest unavailable, not sending roap');
129
+ return _context2.abrupt("return", _promise.default.reject(new Error('sendRoap called when locusMediaRequest is undefined')));
130
+ case 5:
131
+ _context2.next = 7;
128
132
  return this.attachReachabilityData({
129
- roapMessage: roapMessage,
130
- // eslint-disable-next-line no-warning-comments
131
- // TODO: check whats the need for video and audiomute
132
- audioMuted: !!options.audioMuted,
133
- videoMuted: !!options.videoMuted
133
+ roapMessage: roapMessage
134
134
  });
135
- case 4:
135
+ case 7:
136
136
  _yield$this$attachRea = _context2.sent;
137
137
  localSdpWithReachabilityData = _yield$this$attachRea.localSdp;
138
138
  joinCookie = _yield$this$attachRea.joinCookie;
139
- mediaUrl = "".concat(locusSelfUrl, "/").concat(_constants.MEDIA); // @ts-ignore
140
- deviceUrl = this.webex.internal.device.url;
141
- _loggerProxy.default.logger.info("Roap:request#sendRoap --> ".concat(mediaUrl, " \n ").concat(roapMessage.messageType, " \n seq:").concat(roapMessage.seq));
139
+ _loggerProxy.default.logger.info("Roap:request#sendRoap --> ".concat(locusSelfUrl, " \n ").concat(roapMessage.messageType, " \n seq:").concat(roapMessage.seq));
142
140
  _metrics.default.postEvent({
143
141
  event: _config.eventType.MEDIA_REQUEST,
144
142
  meetingId: meetingId
145
143
  });
146
-
147
- // @ts-ignore
148
- return _context2.abrupt("return", this.request({
149
- uri: mediaUrl,
150
- method: _constants.HTTP_VERBS.PUT,
151
- body: {
152
- device: {
153
- url: deviceUrl,
154
- // @ts-ignore
155
- deviceType: this.config.meetings.deviceType
156
- },
157
- correlationId: correlationId,
158
- localMedias: [{
159
- localSdp: (0, _stringify.default)(localSdpWithReachabilityData),
160
- mediaId: options.mediaId
161
- }],
162
- clientMediaPreferences: {
163
- preferTranscoding: (_options$preferTransc = options.preferTranscoding) !== null && _options$preferTransc !== void 0 ? _options$preferTransc : true,
164
- joinCookie: joinCookie
165
- }
166
- }
144
+ return _context2.abrupt("return", locusMediaRequest.send({
145
+ type: 'RoapMessage',
146
+ selfUrl: locusSelfUrl,
147
+ joinCookie: joinCookie,
148
+ mediaId: mediaId,
149
+ roapMessage: roapMessage,
150
+ reachability: localSdpWithReachabilityData.reachability
167
151
  }).then(function (res) {
168
152
  _metrics.default.postEvent({
169
153
  event: _config.eventType.MEDIA_RESPONSE,
@@ -192,7 +176,7 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
192
176
  _loggerProxy.default.logger.error("Roap:request#sendRoapRequest --> errorBody:".concat((0, _stringify.default)(roapMessage, null, 2), " + '\\n mediaId:'").concat(options.mediaId));
193
177
  throw err;
194
178
  }));
195
- case 12:
179
+ case 13:
196
180
  case "end":
197
181
  return _context2.stop();
198
182
  }
@@ -1 +1 @@
1
- {"version":3,"names":["RoapRequest","localSdp","webex","boundedStorage","get","REACHABILITY","namespace","localStorageResult","catch","reachabilityData","reachabilityResult","JSON","parse","length","reachability","e","LoggerProxy","logger","error","localStorageJoinCookie","joinCookieRaw","joinCookie","options","roapMessage","locusSelfUrl","mediaId","correlationId","meetingId","info","attachReachabilityData","audioMuted","videoMuted","localSdpWithReachabilityData","mediaUrl","MEDIA","deviceUrl","internal","device","url","messageType","seq","Metrics","postEvent","event","eventType","MEDIA_REQUEST","request","uri","method","HTTP_VERBS","PUT","body","deviceType","config","meetings","localMedias","clientMediaPreferences","preferTranscoding","then","res","MEDIA_RESPONSE","mediaConnections","debug","statusCode","locus","roapSeq","err","data","parseLocusError","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["/* global window */\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEDIA, HTTP_VERBS, REACHABILITY} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\n\n/**\n * @class RoapRequest\n */\nexport default class RoapRequest extends StatelessWebexPlugin {\n /**\n * Returns reachability data.\n * @param {Object} localSdp\n * @returns {Object}\n */\n async attachReachabilityData(localSdp) {\n let joinCookie;\n\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResult = JSON.parse(reachabilityData);\n\n /* istanbul ignore else */\n if (reachabilityResult && Object.keys(reachabilityResult).length) {\n localSdp.reachability = reachabilityResult;\n }\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n joinCookie = JSON.parse(joinCookieRaw);\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return {localSdp, joinCookie};\n }\n\n /**\n * Sends a ROAP message\n * @param {Object} options\n * @param {Object} options.roapMessage\n * @param {String} options.locusSelfUrl\n * @param {String} options.mediaId\n * @param {String} options.correlationId\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @param {String} options.meetingId\n * @param {Boolean} options.preferTranscoding\n * @returns {Promise} returns the response/failure of the request\n */\n async sendRoap(options: {\n roapMessage: any;\n locusSelfUrl: string;\n mediaId: string;\n correlationId: string;\n audioMuted: boolean;\n videoMuted: boolean;\n meetingId: string;\n preferTranscoding?: boolean;\n }) {\n const {roapMessage, locusSelfUrl, mediaId, correlationId, meetingId} = options;\n\n if (!mediaId) {\n LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');\n }\n\n const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!options.audioMuted,\n videoMuted: !!options.videoMuted,\n });\n\n const mediaUrl = `${locusSelfUrl}/${MEDIA}`;\n // @ts-ignore\n const deviceUrl = this.webex.internal.device.url;\n\n LoggerProxy.logger.info(\n `Roap:request#sendRoap --> ${mediaUrl} \\n ${roapMessage.messageType} \\n seq:${roapMessage.seq}`\n );\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});\n\n // @ts-ignore\n return this.request({\n uri: mediaUrl,\n method: HTTP_VERBS.PUT,\n body: {\n device: {\n url: deviceUrl,\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n },\n correlationId,\n localMedias: [\n {\n localSdp: JSON.stringify(localSdpWithReachabilityData),\n mediaId: options.mediaId,\n },\n ],\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true,\n joinCookie,\n },\n },\n })\n .then((res) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});\n\n // always it will be the first mediaConnection Object\n const mediaConnections =\n res.body.mediaConnections &&\n res.body.mediaConnections.length > 0 &&\n res.body.mediaConnections[0];\n\n LoggerProxy.logger.debug(\n `Roap:request#sendRoap --> response:${JSON.stringify(\n mediaConnections,\n null,\n 2\n )}'\\n StatusCode:'${res.statusCode}`\n );\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n\n return {\n locus,\n ...(mediaConnections && {mediaConnections: res.body.mediaConnections}),\n };\n })\n .catch((err) => {\n Metrics.postEvent({\n event: eventType.MEDIA_RESPONSE,\n meetingId,\n data: {error: Metrics.parseLocusError(err, true)},\n });\n LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);\n LoggerProxy.logger.error(\n `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(\n roapMessage,\n null,\n 2\n )} + '\\\\n mediaId:'${options.mediaId}`\n );\n throw err;\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["RoapRequest","localSdp","webex","boundedStorage","get","REACHABILITY","namespace","localStorageResult","catch","reachabilityData","reachabilityResult","JSON","parse","length","reachability","e","LoggerProxy","logger","error","localStorageJoinCookie","joinCookieRaw","joinCookie","options","roapMessage","locusSelfUrl","mediaId","meetingId","locusMediaRequest","info","warn","reject","Error","attachReachabilityData","localSdpWithReachabilityData","messageType","seq","Metrics","postEvent","event","eventType","MEDIA_REQUEST","send","type","selfUrl","then","res","MEDIA_RESPONSE","mediaConnections","body","debug","statusCode","locus","roapSeq","err","data","parseLocusError","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["/* global window */\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {REACHABILITY} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport {LocusMediaRequest} from '../meeting/locusMediaRequest';\n\n/**\n * @class RoapRequest\n */\nexport default class RoapRequest extends StatelessWebexPlugin {\n /**\n * Returns reachability data.\n * @param {Object} localSdp\n * @returns {Object}\n */\n async attachReachabilityData(localSdp) {\n let joinCookie;\n\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResult = JSON.parse(reachabilityData);\n\n /* istanbul ignore else */\n if (reachabilityResult && Object.keys(reachabilityResult).length) {\n localSdp.reachability = reachabilityResult;\n }\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n joinCookie = JSON.parse(joinCookieRaw);\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return {localSdp, joinCookie};\n }\n\n /**\n * Sends a ROAP message\n * @param {Object} options\n * @param {Object} options.roapMessage\n * @param {String} options.locusSelfUrl\n * @param {String} options.mediaId\n * @param {String} options.correlationId\n * @param {String} options.meetingId\n * @returns {Promise} returns the response/failure of the request\n */\n async sendRoap(options: {\n roapMessage: any;\n locusSelfUrl: string;\n mediaId: string;\n meetingId: string;\n locusMediaRequest?: LocusMediaRequest;\n }) {\n const {roapMessage, locusSelfUrl, mediaId, meetingId, locusMediaRequest} = options;\n\n if (!mediaId) {\n LoggerProxy.logger.info('Roap:request#sendRoap --> sending empty mediaID');\n }\n\n if (!locusMediaRequest) {\n LoggerProxy.logger.warn(\n 'Roap:request#sendRoap --> locusMediaRequest unavailable, not sending roap'\n );\n\n return Promise.reject(new Error('sendRoap called when locusMediaRequest is undefined'));\n }\n const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({\n roapMessage,\n });\n\n LoggerProxy.logger.info(\n `Roap:request#sendRoap --> ${locusSelfUrl} \\n ${roapMessage.messageType} \\n seq:${roapMessage.seq}`\n );\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});\n\n return locusMediaRequest\n .send({\n type: 'RoapMessage',\n selfUrl: locusSelfUrl,\n joinCookie,\n mediaId,\n roapMessage,\n reachability: localSdpWithReachabilityData.reachability,\n })\n .then((res) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});\n\n // always it will be the first mediaConnection Object\n const mediaConnections =\n res.body.mediaConnections &&\n res.body.mediaConnections.length > 0 &&\n res.body.mediaConnections[0];\n\n LoggerProxy.logger.debug(\n `Roap:request#sendRoap --> response:${JSON.stringify(\n mediaConnections,\n null,\n 2\n )}'\\n StatusCode:'${res.statusCode}`\n );\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n\n return {\n locus,\n ...(mediaConnections && {mediaConnections: res.body.mediaConnections}),\n };\n })\n .catch((err) => {\n Metrics.postEvent({\n event: eventType.MEDIA_RESPONSE,\n meetingId,\n data: {error: Metrics.parseLocusError(err, true)},\n });\n LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);\n LoggerProxy.logger.error(\n `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(\n roapMessage,\n null,\n 2\n )} + '\\\\n mediaId:'${options.mediaId}`\n );\n throw err;\n });\n }\n}\n"],"mappings":"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"}
@@ -138,7 +138,6 @@ var TurnDiscovery = /*#__PURE__*/function () {
138
138
  }, {
139
139
  key: "sendRoapTurnDiscoveryRequest",
140
140
  value: function sendRoapTurnDiscoveryRequest(meeting, isReconnecting) {
141
- var _meeting$audio, _meeting$video;
142
141
  if (this.defer) {
143
142
  _loggerProxy.default.logger.warn('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress');
144
143
  return _promise.default.resolve();
@@ -152,15 +151,12 @@ var TurnDiscovery = /*#__PURE__*/function () {
152
151
  _loggerProxy.default.logger.info('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST');
153
152
  return this.roapRequest.sendRoap({
154
153
  roapMessage: roapMessage,
155
- correlationId: meeting.correlationId,
156
154
  // @ts-ignore - Fix missing type
157
155
  locusSelfUrl: meeting.selfUrl,
158
156
  // @ts-ignore - Fix missing type
159
157
  mediaId: isReconnecting ? '' : meeting.mediaId,
160
- audioMuted: (_meeting$audio = meeting.audio) === null || _meeting$audio === void 0 ? void 0 : _meeting$audio.isLocallyMuted(),
161
- videoMuted: (_meeting$video = meeting.video) === null || _meeting$video === void 0 ? void 0 : _meeting$video.isLocallyMuted(),
162
158
  meetingId: meeting.id,
163
- preferTranscoding: !meeting.isMultistream
159
+ locusMediaRequest: meeting.locusMediaRequest
164
160
  }).then(function (_ref) {
165
161
  var mediaConnections = _ref.mediaConnections;
166
162
  if (mediaConnections) {
@@ -179,7 +175,6 @@ var TurnDiscovery = /*#__PURE__*/function () {
179
175
  }, {
180
176
  key: "sendRoapOK",
181
177
  value: function sendRoapOK(meeting) {
182
- var _meeting$audio2, _meeting$video2;
183
178
  _loggerProxy.default.logger.info('Roap:turnDiscovery#sendRoapOK --> sending OK');
184
179
  return this.roapRequest.sendRoap({
185
180
  roapMessage: {
@@ -191,11 +186,8 @@ var TurnDiscovery = /*#__PURE__*/function () {
191
186
  locusSelfUrl: meeting.selfUrl,
192
187
  // @ts-ignore - fix type
193
188
  mediaId: meeting.mediaId,
194
- correlationId: meeting.correlationId,
195
- audioMuted: (_meeting$audio2 = meeting.audio) === null || _meeting$audio2 === void 0 ? void 0 : _meeting$audio2.isLocallyMuted(),
196
- videoMuted: (_meeting$video2 = meeting.video) === null || _meeting$video2 === void 0 ? void 0 : _meeting$video2.isLocallyMuted(),
197
189
  meetingId: meeting.id,
198
- preferTranscoding: !meeting.isMultistream
190
+ locusMediaRequest: meeting.locusMediaRequest
199
191
  });
200
192
  }
201
193