@webex/plugin-meetings 1.147.1 → 1.149.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.js +17 -1
- package/dist/constants.js.map +1 -1
- package/dist/meeting/index.js +327 -181
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +79 -66
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +4 -4
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +1 -1
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/util.js +14 -0
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meetings/index.js +12 -13
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/util.js +0 -16
- package/dist/meetings/util.js.map +1 -1
- package/dist/metrics/index.js +6 -0
- package/dist/metrics/index.js.map +1 -1
- package/package.json +5 -5
- package/src/constants.js +10 -0
- package/src/meeting/index.js +156 -15
- package/src/meeting/request.js +91 -32
- package/src/meeting/util.js +4 -4
- package/src/meeting-info/index.js +4 -1
- package/src/meeting-info/util.js +13 -0
- package/src/meetings/index.js +10 -11
- package/src/meetings/util.js +0 -14
- package/src/metrics/index.js +5 -1
- package/test/integration/spec/journey.js +1 -4
- package/test/integration/spec/space-meeting.js +10 -1
- package/test/unit/spec/meeting/index.js +65 -1
- package/test/unit/spec/meeting/request.js +30 -5
package/dist/meeting/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["util.js"],"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","audioMuted","videoMuted","meeting","reject","ParameterError","localMedias","Media","generateLocalMedias","Metrics","postEvent","event","eventType","MEDIA_REQUEST","meetingRequest","remoteAudioVideoToggle","deviceUrl","correlationId","then","MEDIA_RESPONSE","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","options","LOCUS_JOIN_REQUEST","sipUri","meetingNumber","roapMessage","resourceId","moderator","pin","moveToResource","preferTranscoding","asResourceOccupant","res","LOCUS_JOIN_RESPONSE","data","trigger","LOCI_UPDATE","trackingId","headers","trackingid","cleanUp","statsAnalyzer","stopAnalyzer","closeLocalStream","closeLocalShare","closeRemoteTracks","closePeerConnections","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteTracks","unsetPeerConnections","cleanMQAInterval","reconnectionManager","roap","stop","roapSeq","leavePstn","dialInUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","locusInfo","onFullLocus","catch","LoggerProxy","logger","error","leaveMeeting","isUserInLeftState","UserNotJoinedError","defaultOptions","leaveOptions","resolve","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","PIN_COLLECTED","setLocus","PIN_PROMPT","IntentToJoinError","JoinMeetingError","updateTransceiver","meetingOptions","type","sendTrack","receiveTrack","track","transceiver","peerConnection","previousMediaDirection","undefined","meetingId","remoteQualityLevel","mediaProperties","enableRtx","config","enableExtmap","sendRoapMediaRequest","sdp","e","sender","replaceTrack","validateOptions","sendVideo","sendAudio","sendShare","localStream","localShare","getTrack","videoTrack","audioTrack","stream","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","canUserLock","joined","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRecord","RECORDING_CONTROL_START","canUserPause","RECORDING_CONTROL_PAUSE","canUserResume","RECORDING_CONTROL_RESUME","canUserStop","RECORDING_CONTROL_STOP","startRecording","request","recordMeeting","recording","paused","PermissionError","pauseRecording","resumeRecording","stopRecording","lockMeeting","actions","canLock","lock","unlockMeeting","canUnlock","startInternalStats","internalStats","useConfig","senders","correlate","history","onEvent","kind","stat","Trigger","file","function","EVENT_TRIGGERS","MEETING_MEDIA_LOCAL_STARTED","mediaType","AUDIO","SENDING_MEDIA_START","SENDING_MEDIA_STOP","onData","VIDEO","SHARE","SENDING_SHARE_START","SENDING_SHARE_STOP","receivers","MEETING_MEDIA_REMOTE_STARTED","RECEIVING_MEDIA_START","RECEIVING_MEDIA_STOP","StatsUtil","generateOptions","STATS","CONFIG","WebRTCStats","attrs","handleAudioLogging","LOG_HEADER","settings","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device"],"mappings":"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","sourcesContent":["import {isEmpty} from 'lodash';\n\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport StatsUtil from '../stats/util';\nimport Metrics from '../metrics';\nimport {eventType, trigger, mediaType} from '../metrics/config';\nimport Media from '../media';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport WebRTCStats from '../stats/index';\nimport {INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n STATS,\n EVENT_TRIGGERS\n , FULL_STATE} from '../constants';\nimport Trigger from '../common/events/trigger-proxy';\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';\n\n\nconst MeetingUtil = {};\n\nMeetingUtil.parseLocusJoin = (response) => {\n const parsed = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n};\n\nMeetingUtil.remoteUpdateAudioVideo = (audioMuted, videoMuted, meeting) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n const localMedias = Media.generateLocalMedias(meeting.mediaId, audioMuted, videoMuted);\n\n if (isEmpty(localMedias)) {\n return Promise.reject(new ParameterError('You need a media id on the meeting to change remote audio.'));\n }\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});\n\n return meeting.meetingRequest.remoteAudioVideoToggle({\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n localMedias,\n deviceUrl: meeting.deviceUrl,\n correlationId: meeting.correlationId\n }).then((response) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});\n\n return response.body.locus;\n });\n};\n\nMeetingUtil.hasOwner = (info) => info && info.owner;\n\nMeetingUtil.isOwnerSelf = (owner, selfId) => owner === selfId;\n\nMeetingUtil.isPinOrGuest = (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);\n\nMeetingUtil.joinMeeting = (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n Metrics.postEvent({event: eventType.LOCUS_JOIN_REQUEST, meeting});\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n sipUri: meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: options.preferTranscoding,\n asResourceOccupant: options.asResourceOccupant\n })\n .then((res) => {\n Metrics.postEvent({\n event: eventType.LOCUS_JOIN_RESPONSE,\n meeting,\n data: {\n trigger: trigger.LOCI_UPDATE,\n locus: res.body.locus,\n mediaConnections: res.body.mediaConnections,\n trackingId: res.headers.trackingid\n }\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n};\n\nMeetingUtil.cleanUp = (meeting) => {\n // make sure we send last metrics before we close the peerconnection\n if (meeting.statsAnalyzer) meeting.statsAnalyzer.stopAnalyzer();\n\n return 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.cleanMQAInterval();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.roap.stop(meeting.correlationId, meeting.roapSeq));\n};\n\nMeetingUtil.leavePstn = (meeting, dialInUrl) => {\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 dialInUrl\n };\n\n return meeting.meetingRequest\n .leavePstn(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#leavePstn --> An error occured while trying to leave pstn with an id of ${\n meeting.id\n }, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\n\n// by default will leave on meeting's resourceId\n// if you explicity want it not to leave on resource id, pass\n// {resourceId: null}\n// TODO: chris, you can modify this however you want\nMeetingUtil.leaveMeeting = (meeting, options = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const defaultOptions = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n resourceId: meeting.resourceId,\n deviceUrl: meeting.deviceUrl\n };\n\n const leaveOptions = {...defaultOptions, ...options};\n\n return meeting.meetingRequest\n .leaveMeeting(leaveOptions)\n .then((response) => {\n if (response && response.body && response.body.locus) { // && !options.moveMeeting) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n\n return Promise.resolve();\n })\n .then(() => {\n if (options.moveMeeting) {\n return Promise.resolve();\n }\n\n return MeetingUtil.cleanUp(meeting);\n })\n .catch((err) => {\n // TODO: If the meeting state comes as LEFT or INACTIVE as response then\n // 1) on leave clean up the meeting or simply do a sync on the meeting\n // 2) If the error says meeting is inactive then destroy the meeting object\n LoggerProxy.logger.error(\n `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${\n meeting.id\n }, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\nMeetingUtil.declineMeeting = (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason\n });\n\nMeetingUtil.isUserInLeftState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _LEFT_;\n\nMeetingUtil.isUserInIdleState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _IDLE_;\n\nMeetingUtil.isUserInJoinedState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _JOINED_;\n\nMeetingUtil.isMediaEstablished = (currentMediaStatus) =>\n currentMediaStatus && (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);\n\n\nMeetingUtil.joinMeetingOptions = (meeting, options = {}) => {\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (options.pin) {\n Metrics.postEvent({\n event: eventType.PIN_COLLECTED,\n meeting\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n Metrics.postEvent({\n event: eventType.PIN_PROMPT,\n meeting\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error('Meeting:util#joinMeetingOptions --> Error joining the call, ', err);\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n};\n\nMeetingUtil.updateTransceiver = (options, meetingOptions) => {\n const {\n type,\n sendTrack,\n receiveTrack,\n track,\n transceiver,\n peerConnection,\n previousMediaDirection\n } = options;\n\n if ((sendTrack !== undefined && sendTrack !== previousMediaDirection.sendTrack) ||\n (receiveTrack !== undefined && receiveTrack !== previousMediaDirection.receiveTrack)) {\n return Media.updateTransceiver({\n meetingId: meetingOptions.meeting.id,\n remoteQualityLevel: meetingOptions.mediaProperties.remoteQualityLevel,\n enableRtx: meetingOptions.meeting.config.enableRtx,\n enableExtmap: meetingOptions.meeting.config.enableExtmap\n }, peerConnection, transceiver,\n {\n track,\n type,\n receiveTrack,\n sendTrack\n })\n .then(() => meetingOptions.meeting.roap\n .sendRoapMediaRequest({\n sdp: meetingOptions.mediaProperties.peerConnection.sdp,\n roapSeq: meetingOptions.meeting.roapSeq,\n meeting: meetingOptions.meeting // or can pass meeting ID\n }))\n .catch((e) => {\n LoggerProxy.logger.error(`Meeting:util#updateTransceiver --> Error updating the ${type} streams with error: ${e}`);\n });\n } if (track) {\n transceiver.sender.replaceTrack(track);\n\n return Promise.resolve();\n }\n\n return Promise.reject(new ParameterError('update Failed: please pass valid parameter'));\n};\n\nMeetingUtil.validateOptions = (options) => {\n const {\n sendVideo, sendAudio, sendShare, localStream, localShare\n } = options;\n\n if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid video streams'));\n }\n\n if (sendAudio && !MeetingUtil.getTrack(localStream).audioTrack) {\n return Promise.reject(new ParameterError('please pass valid audio streams'));\n }\n\n if (sendShare && !MeetingUtil.getTrack(localShare).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid share streams'));\n }\n\n return Promise.resolve();\n};\n\nMeetingUtil.getTrack = (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n};\n\nMeetingUtil.getModeratorFromLocusInfo = (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator;\n\nMeetingUtil.getPolicyFromLocusInfo = (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy;\n\nMeetingUtil.canUserLock = (moderator, joined) => {\n if (moderator.LOCK_CONTROL_LOCK && joined.LOCK_STATUS_UNLOCKED) {\n return true;\n }\n\n return false;\n};\n\nMeetingUtil.canUserUnlock = (moderator, joined) => {\n if (moderator.LOCK_CONTROL_UNLOCK && joined.LOCK_STATUS_LOCKED) {\n return true;\n }\n\n return false;\n};\n\nMeetingUtil.canUserRecord = (moderator) => moderator.RECORDING_CONTROL_START;\n\nMeetingUtil.canUserPause = (moderator) => moderator.RECORDING_CONTROL_PAUSE;\n\nMeetingUtil.canUserResume = (moderator) => moderator.RECORDING_CONTROL_RESUME;\n\nMeetingUtil.canUserStop = (moderator) => moderator.RECORDING_CONTROL_STOP;\n\nMeetingUtil.startRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserRecord(moderator)) {\n return request.recordMeeting({locusUrl, recording: true, paused: false});\n }\n\n return Promise.reject(new PermissionError('Start recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.pauseRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserPause(moderator)) {\n return request.recordMeeting({locusUrl, recording: true, paused: true});\n }\n\n return Promise.reject(new PermissionError('Pause recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.resumeRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserResume(moderator)) {\n return request.recordMeeting({locusUrl, recording: true, paused: false});\n }\n\n return Promise.reject(new PermissionError('Resume recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.stopRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserStop(moderator)) {\n return request.recordMeeting({locusUrl, recording: false, paused: false});\n }\n\n return Promise.reject(new PermissionError('Stop recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.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.startInternalStats = (meeting) => {\n if (!meeting.internalStats) {\n const options = {\n useConfig: true,\n senders: [\n {\n id: 'mainAudio',\n correlate: 'audio',\n history: true,\n onEvent: (event) => {\n // TODO: we don't need checks like this since it comes from the transceiver\n // refactor event linkage to use callbacks instead of events\n if (event.kind === 'audio' && event.stat === 'bytesSent') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.AUDIO\n }\n );\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesSent') {\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainVideo',\n correlate: 'video',\n history: true,\n onEvent: (event) => {\n if (event.kind === 'video' && event.stat === 'bytesSent') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.VIDEO\n }\n );\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesSent') {\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainShare',\n correlate: 'video',\n onEvent: (event) => {\n if (event.kind === 'share' && event.stat === 'bytesSent') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.SHARE\n }\n );\n Metrics.postEvent({\n event: eventType.SENDING_SHARE_START,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n else if (event.stop && event.stat === 'bytesSent') {\n Metrics.postEvent({\n event: eventType.SENDING_SHARE_STOP,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n },\n onData: () => {}\n }\n ],\n receivers: [\n {\n id: 'mainAudio',\n correlate: 'audio',\n history: true,\n onEvent: (event) => {\n if (event.kind === 'audio' && event.stat === 'bytesReceived') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,\n {\n type: mediaType.AUDIO\n }\n );\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesReceived') {\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainVideo',\n correlate: 'video',\n history: true,\n onEvent: (event) => {\n if (event.kind === 'video' && event.stat === 'bytesReceived') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,\n {\n type: mediaType.VIDEO\n }\n );\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesReceived') {\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainShare',\n correlate: 'video',\n onEvent: (event) => {\n if (event.kind === 'share' && event.stat === 'bytesReceived') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,\n {\n type: mediaType.SHARE\n }\n );\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n else if (event.stop && event.stat === 'bytesReceived') {\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n },\n onData: () => {}\n }\n ]\n };\n\n StatsUtil.generateOptions(options, STATS.CONFIG, meeting);\n\n options.config = STATS.CONFIG;\n\n // pass the attrs and options for the webex instance\n meeting.internalStats = new WebRTCStats(meeting.attrs, meeting.options, options);\n }\n\n return meeting.internalStats;\n};\n\nMeetingUtil.handleAudioLogging = (audioTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n};\n\nMeetingUtil.handleVideoLogging = (videoTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n};\n\nMeetingUtil.handleDeviceLogging = (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n};\n\nexport default MeetingUtil;\n"]}
|
|
1
|
+
{"version":3,"sources":["util.js"],"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","audioMuted","videoMuted","meeting","reject","ParameterError","localMedias","Media","generateLocalMedias","Metrics","postEvent","event","eventType","MEDIA_REQUEST","meetingRequest","remoteAudioVideoToggle","deviceUrl","correlationId","then","MEDIA_RESPONSE","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","options","LOCUS_JOIN_REQUEST","sipUri","meetingNumber","roapMessage","resourceId","moderator","pin","moveToResource","preferTranscoding","asResourceOccupant","res","LOCUS_JOIN_RESPONSE","data","trigger","LOCI_UPDATE","trackingId","headers","trackingid","cleanUp","statsAnalyzer","stopAnalyzer","closeLocalStream","closeLocalShare","closeRemoteTracks","closePeerConnections","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteTracks","unsetPeerConnections","cleanMQAInterval","reconnectionManager","roap","stop","roapSeq","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","locusInfo","onFullLocus","catch","LoggerProxy","logger","error","leaveMeeting","isUserInLeftState","UserNotJoinedError","defaultOptions","leaveOptions","resolve","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","PIN_COLLECTED","setLocus","PIN_PROMPT","IntentToJoinError","JoinMeetingError","updateTransceiver","meetingOptions","type","sendTrack","receiveTrack","track","transceiver","peerConnection","previousMediaDirection","undefined","meetingId","remoteQualityLevel","mediaProperties","enableRtx","config","enableExtmap","sendRoapMediaRequest","sdp","e","sender","replaceTrack","validateOptions","sendVideo","sendAudio","sendShare","localStream","localShare","getTrack","videoTrack","audioTrack","stream","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","canUserLock","joined","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRecord","RECORDING_CONTROL_START","canUserPause","RECORDING_CONTROL_PAUSE","canUserResume","RECORDING_CONTROL_RESUME","canUserStop","RECORDING_CONTROL_STOP","startRecording","request","recordMeeting","recording","paused","PermissionError","pauseRecording","resumeRecording","stopRecording","lockMeeting","actions","canLock","lock","unlockMeeting","canUnlock","startInternalStats","internalStats","useConfig","senders","correlate","history","onEvent","kind","stat","Trigger","file","function","EVENT_TRIGGERS","MEETING_MEDIA_LOCAL_STARTED","mediaType","AUDIO","SENDING_MEDIA_START","SENDING_MEDIA_STOP","onData","VIDEO","SHARE","SENDING_SHARE_START","SENDING_SHARE_STOP","receivers","MEETING_MEDIA_REMOTE_STARTED","RECEIVING_MEDIA_START","RECEIVING_MEDIA_STOP","StatsUtil","generateOptions","STATS","CONFIG","WebRTCStats","attrs","handleAudioLogging","LOG_HEADER","settings","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device"],"mappings":"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","sourcesContent":["import {isEmpty} from 'lodash';\n\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport StatsUtil from '../stats/util';\nimport Metrics from '../metrics';\nimport {eventType, trigger, mediaType} from '../metrics/config';\nimport Media from '../media';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport WebRTCStats from '../stats/index';\nimport {INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n STATS,\n EVENT_TRIGGERS\n , FULL_STATE} from '../constants';\nimport Trigger from '../common/events/trigger-proxy';\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';\n\n\nconst MeetingUtil = {};\n\nMeetingUtil.parseLocusJoin = (response) => {\n const parsed = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n};\n\nMeetingUtil.remoteUpdateAudioVideo = (audioMuted, videoMuted, meeting) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n const localMedias = Media.generateLocalMedias(meeting.mediaId, audioMuted, videoMuted);\n\n if (isEmpty(localMedias)) {\n return Promise.reject(new ParameterError('You need a media id on the meeting to change remote audio.'));\n }\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});\n\n return meeting.meetingRequest.remoteAudioVideoToggle({\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n localMedias,\n deviceUrl: meeting.deviceUrl,\n correlationId: meeting.correlationId\n }).then((response) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});\n\n return response.body.locus;\n });\n};\n\nMeetingUtil.hasOwner = (info) => info && info.owner;\n\nMeetingUtil.isOwnerSelf = (owner, selfId) => owner === selfId;\n\nMeetingUtil.isPinOrGuest = (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);\n\nMeetingUtil.joinMeeting = (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n Metrics.postEvent({event: eventType.LOCUS_JOIN_REQUEST, meeting});\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n sipUri: meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: options.preferTranscoding,\n asResourceOccupant: options.asResourceOccupant\n })\n .then((res) => {\n Metrics.postEvent({\n event: eventType.LOCUS_JOIN_RESPONSE,\n meeting,\n data: {\n trigger: trigger.LOCI_UPDATE,\n locus: res.body.locus,\n mediaConnections: res.body.mediaConnections,\n trackingId: res.headers.trackingid\n }\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n};\n\nMeetingUtil.cleanUp = (meeting) => {\n // make sure we send last metrics before we close the peerconnection\n if (meeting.statsAnalyzer) meeting.statsAnalyzer.stopAnalyzer();\n\n return 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.cleanMQAInterval();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.roap.stop(meeting.correlationId, meeting.roapSeq));\n};\n\nMeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const options = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n phoneUrl\n };\n\n return meeting.meetingRequest\n .disconnectPhoneAudio(options)\n .then((response) => {\n if (response?.body?.locus) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${\n meeting.id\n }, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\n\n// by default will leave on meeting's resourceId\n// if you explicity want it not to leave on resource id, pass\n// {resourceId: null}\n// TODO: chris, you can modify this however you want\nMeetingUtil.leaveMeeting = (meeting, options = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const defaultOptions = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n resourceId: meeting.resourceId,\n deviceUrl: meeting.deviceUrl\n };\n\n const leaveOptions = {...defaultOptions, ...options};\n\n return meeting.meetingRequest\n .leaveMeeting(leaveOptions)\n .then((response) => {\n if (response && response.body && response.body.locus) { // && !options.moveMeeting) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n\n return Promise.resolve();\n })\n .then(() => {\n if (options.moveMeeting) {\n return Promise.resolve();\n }\n\n return MeetingUtil.cleanUp(meeting);\n })\n .catch((err) => {\n // TODO: If the meeting state comes as LEFT or INACTIVE as response then\n // 1) on leave clean up the meeting or simply do a sync on the meeting\n // 2) If the error says meeting is inactive then destroy the meeting object\n LoggerProxy.logger.error(\n `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${\n meeting.id\n }, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\nMeetingUtil.declineMeeting = (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason\n });\n\nMeetingUtil.isUserInLeftState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _LEFT_;\n\nMeetingUtil.isUserInIdleState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _IDLE_;\n\nMeetingUtil.isUserInJoinedState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _JOINED_;\n\nMeetingUtil.isMediaEstablished = (currentMediaStatus) =>\n currentMediaStatus && (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);\n\n\nMeetingUtil.joinMeetingOptions = (meeting, options = {}) => {\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (options.pin) {\n Metrics.postEvent({\n event: eventType.PIN_COLLECTED,\n meeting\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n Metrics.postEvent({\n event: eventType.PIN_PROMPT,\n meeting\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error('Meeting:util#joinMeetingOptions --> Error joining the call, ', err);\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n};\n\nMeetingUtil.updateTransceiver = (options, meetingOptions) => {\n const {\n type,\n sendTrack,\n receiveTrack,\n track,\n transceiver,\n peerConnection,\n previousMediaDirection\n } = options;\n\n if ((sendTrack !== undefined && sendTrack !== previousMediaDirection.sendTrack) ||\n (receiveTrack !== undefined && receiveTrack !== previousMediaDirection.receiveTrack)) {\n return Media.updateTransceiver({\n meetingId: meetingOptions.meeting.id,\n remoteQualityLevel: meetingOptions.mediaProperties.remoteQualityLevel,\n enableRtx: meetingOptions.meeting.config.enableRtx,\n enableExtmap: meetingOptions.meeting.config.enableExtmap\n }, peerConnection, transceiver,\n {\n track,\n type,\n receiveTrack,\n sendTrack\n })\n .then(() => meetingOptions.meeting.roap\n .sendRoapMediaRequest({\n sdp: meetingOptions.mediaProperties.peerConnection.sdp,\n roapSeq: meetingOptions.meeting.roapSeq,\n meeting: meetingOptions.meeting // or can pass meeting ID\n }))\n .catch((e) => {\n LoggerProxy.logger.error(`Meeting:util#updateTransceiver --> Error updating the ${type} streams with error: ${e}`);\n });\n } if (track) {\n transceiver.sender.replaceTrack(track);\n\n return Promise.resolve();\n }\n\n return Promise.reject(new ParameterError('update Failed: please pass valid parameter'));\n};\n\nMeetingUtil.validateOptions = (options) => {\n const {\n sendVideo, sendAudio, sendShare, localStream, localShare\n } = options;\n\n if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid video streams'));\n }\n\n if (sendAudio && !MeetingUtil.getTrack(localStream).audioTrack) {\n return Promise.reject(new ParameterError('please pass valid audio streams'));\n }\n\n if (sendShare && !MeetingUtil.getTrack(localShare).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid share streams'));\n }\n\n return Promise.resolve();\n};\n\nMeetingUtil.getTrack = (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n};\n\nMeetingUtil.getModeratorFromLocusInfo = (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator;\n\nMeetingUtil.getPolicyFromLocusInfo = (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy;\n\nMeetingUtil.canUserLock = (moderator, joined) => {\n if (moderator.LOCK_CONTROL_LOCK && joined.LOCK_STATUS_UNLOCKED) {\n return true;\n }\n\n return false;\n};\n\nMeetingUtil.canUserUnlock = (moderator, joined) => {\n if (moderator.LOCK_CONTROL_UNLOCK && joined.LOCK_STATUS_LOCKED) {\n return true;\n }\n\n return false;\n};\n\nMeetingUtil.canUserRecord = (moderator) => moderator.RECORDING_CONTROL_START;\n\nMeetingUtil.canUserPause = (moderator) => moderator.RECORDING_CONTROL_PAUSE;\n\nMeetingUtil.canUserResume = (moderator) => moderator.RECORDING_CONTROL_RESUME;\n\nMeetingUtil.canUserStop = (moderator) => moderator.RECORDING_CONTROL_STOP;\n\nMeetingUtil.startRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserRecord(moderator)) {\n return request.recordMeeting({locusUrl, recording: true, paused: false});\n }\n\n return Promise.reject(new PermissionError('Start recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.pauseRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserPause(moderator)) {\n return request.recordMeeting({locusUrl, recording: true, paused: true});\n }\n\n return Promise.reject(new PermissionError('Pause recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.resumeRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserResume(moderator)) {\n return request.recordMeeting({locusUrl, recording: true, paused: false});\n }\n\n return Promise.reject(new PermissionError('Resume recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.stopRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserStop(moderator)) {\n return request.recordMeeting({locusUrl, recording: false, paused: false});\n }\n\n return Promise.reject(new PermissionError('Stop recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.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.startInternalStats = (meeting) => {\n if (!meeting.internalStats) {\n const options = {\n useConfig: true,\n senders: [\n {\n id: 'mainAudio',\n correlate: 'audio',\n history: true,\n onEvent: (event) => {\n // TODO: we don't need checks like this since it comes from the transceiver\n // refactor event linkage to use callbacks instead of events\n if (event.kind === 'audio' && event.stat === 'bytesSent') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.AUDIO\n }\n );\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesSent') {\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainVideo',\n correlate: 'video',\n history: true,\n onEvent: (event) => {\n if (event.kind === 'video' && event.stat === 'bytesSent') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.VIDEO\n }\n );\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesSent') {\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainShare',\n correlate: 'video',\n onEvent: (event) => {\n if (event.kind === 'share' && event.stat === 'bytesSent') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.SHARE\n }\n );\n Metrics.postEvent({\n event: eventType.SENDING_SHARE_START,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n else if (event.stop && event.stat === 'bytesSent') {\n Metrics.postEvent({\n event: eventType.SENDING_SHARE_STOP,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n },\n onData: () => {}\n }\n ],\n receivers: [\n {\n id: 'mainAudio',\n correlate: 'audio',\n history: true,\n onEvent: (event) => {\n if (event.kind === 'audio' && event.stat === 'bytesReceived') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,\n {\n type: mediaType.AUDIO\n }\n );\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesReceived') {\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainVideo',\n correlate: 'video',\n history: true,\n onEvent: (event) => {\n if (event.kind === 'video' && event.stat === 'bytesReceived') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,\n {\n type: mediaType.VIDEO\n }\n );\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesReceived') {\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainShare',\n correlate: 'video',\n onEvent: (event) => {\n if (event.kind === 'share' && event.stat === 'bytesReceived') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,\n {\n type: mediaType.SHARE\n }\n );\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n else if (event.stop && event.stat === 'bytesReceived') {\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n },\n onData: () => {}\n }\n ]\n };\n\n StatsUtil.generateOptions(options, STATS.CONFIG, meeting);\n\n options.config = STATS.CONFIG;\n\n // pass the attrs and options for the webex instance\n meeting.internalStats = new WebRTCStats(meeting.attrs, meeting.options, options);\n }\n\n return meeting.internalStats;\n};\n\nMeetingUtil.handleAudioLogging = (audioTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n};\n\nMeetingUtil.handleVideoLogging = (videoTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n};\n\nMeetingUtil.handleDeviceLogging = (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n};\n\nexport default MeetingUtil;\n"]}
|
|
@@ -144,7 +144,7 @@ var MeetingInfo = /*#__PURE__*/function () {
|
|
|
144
144
|
var _this2 = this;
|
|
145
145
|
|
|
146
146
|
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
147
|
-
return this.fetchInfoOptions(destination, type).then(function (options) {
|
|
147
|
+
return this.fetchInfoOptions(_util.default.extractDestination(destination, type), type).then(function (options) {
|
|
148
148
|
return (// fetch meeting info
|
|
149
149
|
_this2.requestFetchInfo(options).catch(function (error) {
|
|
150
150
|
// if it failed the first time as meeting link
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.js"],"names":["MeetingInfo","webex","meetingInfoRequest","MeetingInfoRequest","meetingInfoCollection","MeetingInfoCollection","id","get","info","set","options","fetchMeetingInfo","then","body","setMeetingInfo","sipMeetingUri","meetingLink","catch","error","LoggerProxy","logger","reject","destination","type","MeetingInfoUtil","generateOptions","fetchInfoOptions","requestFetchInfo","_MEETING_LINK_","convertLinkToSip","_SIP_URI_"],"mappings":";;;;;;;;;;;;;;;;;;AAIA;;AAIA;;AAEA;;AACA;;AACA;;AAZA;AACA;AACA;;AAYA;AACA;AACA;IACqBA,W;AACnB;AACF;AACA;AACA;AACE,uBAAYC,KAAZ,EAAmB;AAAA;AACjB,SAAKA,KAAL,GAAaA,KAAb;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;;AACI,SAAKC,kBAAL,GAA0B,IAAIC,gBAAJ,CAAuB,KAAKF,KAA5B,CAA1B;AACA;AACJ;AACA;AACA;AACA;AACA;AACA;;AACI,SAAKG,qBAAL,GAA6B,IAAIC,mBAAJ,EAA7B;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;;;WACE,wBAAeC,EAAf,EAAmB;AACjB,aAAO,KAAKF,qBAAL,CAA2BG,GAA3B,CAA+BD,EAA/B,CAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,wBAAeA,EAAf,EAAmBE,IAAnB,EAAyB;AACvB,WAAKJ,qBAAL,CAA2BK,GAA3B,CAA+BH,EAA/B,EAAmCE,IAAnC;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,0BAAiBE,OAAjB,EAA0B;AAAA;;AACxB,aAAO,KAAKR,kBAAL,CAAwBS,gBAAxB,CAAyCD,OAAzC,EAAkDE,IAAlD,CAAuD,UAACJ,IAAD,EAAU;AACtE,YAAIA,IAAI,IAAIA,IAAI,CAACK,IAAjB,EAAuB;AACrB,UAAA,KAAI,CAACC,cAAL,CAAoBN,IAAI,CAACK,IAAL,CAAUE,aAAV,IAA2BP,IAAI,CAACK,IAAL,CAAUG,WAAzD,EAAsER,IAAI,CAACK,IAA3E;AACD;;AAED,eAAOL,IAAP;AACD,OANM,EAMJS,KANI,CAME,UAACC,KAAD,EAAW;AAClBC,6BAAYC,MAAZ,CAAmBF,KAAnB,oDAAqEA,KAArE;;AAEA,eAAO,iBAAQG,MAAR,CAAeH,KAAf,CAAP;AACD,OAVM,CAAP;AAWD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,0BAAiBI,WAAjB,EAA8BC,IAA9B,EAAoC;AAClC,aAAOC,cAAgBC,eAAhB,CAAgC;AACrCH,QAAAA,WAAW,EAAXA,WADqC;AAErCC,QAAAA,IAAI,EAAJA,IAFqC;AAGrCtB,QAAAA,KAAK,EAAE,KAAKA;AAHyB,OAAhC,CAAP;AAKD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,0BAAiBqB,WAAjB,EAA2C;AAAA;;AAAA,UAAbC,IAAa,uEAAN,IAAM;AACzC,aAAO,KAAKG,gBAAL,
|
|
1
|
+
{"version":3,"sources":["index.js"],"names":["MeetingInfo","webex","meetingInfoRequest","MeetingInfoRequest","meetingInfoCollection","MeetingInfoCollection","id","get","info","set","options","fetchMeetingInfo","then","body","setMeetingInfo","sipMeetingUri","meetingLink","catch","error","LoggerProxy","logger","reject","destination","type","MeetingInfoUtil","generateOptions","fetchInfoOptions","extractDestination","requestFetchInfo","_MEETING_LINK_","convertLinkToSip","_SIP_URI_"],"mappings":";;;;;;;;;;;;;;;;;;AAIA;;AAIA;;AAEA;;AACA;;AACA;;AAZA;AACA;AACA;;AAYA;AACA;AACA;IACqBA,W;AACnB;AACF;AACA;AACA;AACE,uBAAYC,KAAZ,EAAmB;AAAA;AACjB,SAAKA,KAAL,GAAaA,KAAb;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;;AACI,SAAKC,kBAAL,GAA0B,IAAIC,gBAAJ,CAAuB,KAAKF,KAA5B,CAA1B;AACA;AACJ;AACA;AACA;AACA;AACA;AACA;;AACI,SAAKG,qBAAL,GAA6B,IAAIC,mBAAJ,EAA7B;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;;;WACE,wBAAeC,EAAf,EAAmB;AACjB,aAAO,KAAKF,qBAAL,CAA2BG,GAA3B,CAA+BD,EAA/B,CAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,wBAAeA,EAAf,EAAmBE,IAAnB,EAAyB;AACvB,WAAKJ,qBAAL,CAA2BK,GAA3B,CAA+BH,EAA/B,EAAmCE,IAAnC;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,0BAAiBE,OAAjB,EAA0B;AAAA;;AACxB,aAAO,KAAKR,kBAAL,CAAwBS,gBAAxB,CAAyCD,OAAzC,EAAkDE,IAAlD,CAAuD,UAACJ,IAAD,EAAU;AACtE,YAAIA,IAAI,IAAIA,IAAI,CAACK,IAAjB,EAAuB;AACrB,UAAA,KAAI,CAACC,cAAL,CAAoBN,IAAI,CAACK,IAAL,CAAUE,aAAV,IAA2BP,IAAI,CAACK,IAAL,CAAUG,WAAzD,EAAsER,IAAI,CAACK,IAA3E;AACD;;AAED,eAAOL,IAAP;AACD,OANM,EAMJS,KANI,CAME,UAACC,KAAD,EAAW;AAClBC,6BAAYC,MAAZ,CAAmBF,KAAnB,oDAAqEA,KAArE;;AAEA,eAAO,iBAAQG,MAAR,CAAeH,KAAf,CAAP;AACD,OAVM,CAAP;AAWD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,0BAAiBI,WAAjB,EAA8BC,IAA9B,EAAoC;AAClC,aAAOC,cAAgBC,eAAhB,CAAgC;AACrCH,QAAAA,WAAW,EAAXA,WADqC;AAErCC,QAAAA,IAAI,EAAJA,IAFqC;AAGrCtB,QAAAA,KAAK,EAAE,KAAKA;AAHyB,OAAhC,CAAP;AAKD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,0BAAiBqB,WAAjB,EAA2C;AAAA;;AAAA,UAAbC,IAAa,uEAAN,IAAM;AACzC,aAAO,KAAKG,gBAAL,CACLF,cAAgBG,kBAAhB,CAAmCL,WAAnC,EAAgDC,IAAhD,CADK,EAELA,IAFK,EAGLX,IAHK,CAGA,UAACF,OAAD;AAAA,eACP;AACE,UAAA,MAAI,CAACkB,gBAAL,CAAsBlB,OAAtB,EAA+BO,KAA/B,CAAqC,UAACC,KAAD,EAAW;AAChD;AACE,gBAAIR,OAAO,CAACa,IAAR,KAAiBM,yBAArB,EAAqC;AACrC;AACE,qBAAO,MAAI,CAACD,gBAAL,CAAsB,MAAI,CAACF,gBAAL,CAAsBF,cAAgBM,gBAAhB,CAAiCR,WAAjC,CAAtB,EAAqES,oBAArE,CAAtB,CAAP;AACD;;AAED,mBAAO,iBAAQV,MAAR,CAAeH,KAAf,CAAP;AACD,WARD;AAFK;AAAA,OAHA,CAAP;AAcD","sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {\n _MEETING_LINK_,\n _SIP_URI_\n} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport MeetingInfoCollection from './collection';\nimport MeetingInfoRequest from './request';\nimport MeetingInfoUtil from './util';\n\n/**\n * @class MeetingInfo\n */\nexport default class MeetingInfo {\n /**\n *\n * @param {WebexSDK} webex\n */\n constructor(webex) {\n this.webex = webex;\n\n /**\n * The meeting info request server interface\n * @instance\n * @type {Object}\n * @private\n * @memberof MeetingInfo\n */\n this.meetingInfoRequest = new MeetingInfoRequest(this.webex);\n /**\n * The meeting information collection interface\n * @instance\n * @type {Object}\n * @private\n * @memberof MeetingInfo\n */\n this.meetingInfoCollection = new MeetingInfoCollection();\n }\n\n /**\n * @param {string} id\n * @returns {object}\n * @public\n * @memberof MeetingInfo\n */\n getMeetingInfo(id) {\n return this.meetingInfoCollection.get(id);\n }\n\n /**\n * @param {string} id\n * @param {object} info\n * @returns {null}\n * @public\n * @memberof MeetingInfo\n */\n setMeetingInfo(id, info) {\n this.meetingInfoCollection.set(id, info);\n }\n\n /**\n * Helper to make the actual MeetingInfo request and set the meetingInfo if successful, else reject\n * @param {Object} options\n * @returns {Promise}\n * @private\n * @memberof MeetingInfo\n */\n requestFetchInfo(options) {\n return this.meetingInfoRequest.fetchMeetingInfo(options).then((info) => {\n if (info && info.body) {\n this.setMeetingInfo(info.body.sipMeetingUri || info.body.meetingLink, info.body);\n }\n\n return info;\n }).catch((error) => {\n LoggerProxy.logger.error(`Meeting-info:index#requestFetchInfo --> ${error} fetch meetingInfo`);\n\n return Promise.reject(error);\n });\n }\n\n /**\n * Helper to generate the options for the MeetingInfo request\n * @param {String} destination\n * @param {String} type\n * @returns {Promise}\n * @private\n * @memberof MeetingInfo\n */\n fetchInfoOptions(destination, type) {\n return MeetingInfoUtil.generateOptions({\n destination,\n type,\n webex: this.webex\n });\n }\n\n /**\n * Fetches meeting info from the server\n * @param {String} destination one of many different types of destinations to look up info for\n * @param {String} [type] to match up with the destination value\n * @returns {Promise} returns a meeting info object\n * @public\n * @memberof MeetingInfo\n */\n fetchMeetingInfo(destination, type = null) {\n return this.fetchInfoOptions(\n MeetingInfoUtil.extractDestination(destination, type),\n type\n ).then((options) =>\n // fetch meeting info\n this.requestFetchInfo(options).catch((error) => {\n // if it failed the first time as meeting link\n if (options.type === _MEETING_LINK_) {\n // convert the meeting link to sip URI and retry\n return this.requestFetchInfo(this.fetchInfoOptions(MeetingInfoUtil.convertLinkToSip(destination), _SIP_URI_));\n }\n\n return Promise.reject(error);\n }));\n }\n}\n"]}
|
|
@@ -30,6 +30,20 @@ var _constants = require("../constants");
|
|
|
30
30
|
|
|
31
31
|
var MeetingInfoUtil = {};
|
|
32
32
|
|
|
33
|
+
MeetingInfoUtil.extractDestination = function (destination, type) {
|
|
34
|
+
var dest = destination;
|
|
35
|
+
|
|
36
|
+
if (type === _constants._LOCUS_ID_) {
|
|
37
|
+
if (!(destination && destination.url)) {
|
|
38
|
+
throw new _parameter.default('You cannot create a meeting by locus without a locus.url defined');
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
dest = destination.url;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return dest;
|
|
45
|
+
};
|
|
46
|
+
|
|
33
47
|
MeetingInfoUtil.getParsedUrl = function (link) {
|
|
34
48
|
try {
|
|
35
49
|
var parsedUrl = _url.default.parse(link);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["util.js"],"names":["MeetingInfoUtil","getParsedUrl","link","parsedUrl","url","parse","protocol","HTTPS_PROTOCOL","error","LoggerProxy","logger","warn","isMeetingLink","value","hostNameBool","hostname","includes","WEBEX_DOT_COM","pathNameBool","pathname","MEET","MEET_M","JOIN","isConversationUrl","webex","clusterId","internal","services","getClusterId","endsWith","CONVERSATION_SERVICE","convertLinkToSip","user","userIndex","lastIndexOf","substring","company","companyIndex","replace","WWW_DOT","isSipUri","sipString","sipUri","DIALER_REGEX","SIP_ADDRESS","exec","isPhoneNumber","phoneNumber","isValidNumber","PHONE_NUMBER","test","getHydraId","destination","type","id","cluster","UUID_REG","_ROOM_","room","_PEOPLE_","people","getSipUriFromHydraPersonId","get","then","res","emails","length","ParameterError","catch","err","generateOptions","from","options","hydraId","_MEETING_LINK_","_SIP_URI_","_CONVERSATION_URL_","wasHydraPerson","resolve","waitForCatalog","conversationUrl","conversation","getUrlFromClusterId","getResourceUrl","resource","LOCI","MEETINGINFO","method","HTTP_VERBS","GET","uri","_PERSONAL_ROOM_","_MEETING_ID_","encodeURIComponent","TYPE","USE_URI_LOOKUP_FALSE","PUT","_LOCUS_ID_","getRequestParams","resourceOptions","api","requestParams","concat","ALTERNATE_REDIRECT_TRUE","body","lookupType"],"mappings":"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","sourcesContent":["import url from 'url';\n\nimport btoa from 'btoa';\nimport {\n deconstructHydraId\n} from '@webex/common';\n\nimport ParameterError from '../common/errors/parameter';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n _SIP_URI_,\n _PERSONAL_ROOM_,\n _MEETING_ID_,\n _CONVERSATION_URL_,\n _LOCUS_ID_,\n _MEETING_LINK_,\n _PEOPLE_,\n _ROOM_,\n HTTP_VERBS,\n USE_URI_LOOKUP_FALSE,\n TYPE,\n LOCI,\n MEETINGINFO,\n ALTERNATE_REDIRECT_TRUE,\n DIALER_REGEX,\n WEBEX_DOT_COM,\n CONVERSATION_SERVICE,\n WWW_DOT,\n JOIN,\n MEET,\n MEET_M,\n HTTPS_PROTOCOL,\n UUID_REG\n} from '../constants';\n\nconst MeetingInfoUtil = {};\n\nMeetingInfoUtil.getParsedUrl = (link) => {\n try {\n let parsedUrl = url.parse(link);\n\n if (!parsedUrl) {\n return false;\n }\n // hack for links such as <company>.webex.com/meet/<user> without a protocol\n if (!parsedUrl.protocol) {\n parsedUrl = url.parse(`${HTTPS_PROTOCOL}${link}`);\n }\n\n return parsedUrl;\n }\n catch (error) {\n LoggerProxy.logger.warn(`Meeting-info:util#getParsedUrl --> unable to parse the URL, error: ${error}`);\n\n return null;\n }\n};\n\n/**\n * Helper function to check if a string matches a known meeting link pattern\n * @param {String} value string to parse and see if it matches a meeting link\n * @returns {Boolean}\n */\nMeetingInfoUtil.isMeetingLink = (value) => {\n const parsedUrl = MeetingInfoUtil.getParsedUrl(value);\n const hostNameBool = parsedUrl.hostname && parsedUrl.hostname.includes(WEBEX_DOT_COM);\n const pathNameBool = parsedUrl.pathname && (parsedUrl.pathname.includes(`/${MEET}`) || parsedUrl.pathname.includes(`/${MEET_M}`) || parsedUrl.pathname.includes(`/${JOIN}`));\n\n return hostNameBool && pathNameBool;\n};\n\nMeetingInfoUtil.isConversationUrl = (value, webex) => {\n const clusterId = webex.internal.services.getClusterId(value);\n\n if (clusterId) {\n return clusterId.endsWith(CONVERSATION_SERVICE);\n }\n\n return false;\n};\n\nMeetingInfoUtil.convertLinkToSip = (value) => {\n const parsedUrl = MeetingInfoUtil.getParsedUrl(value);\n\n if (!parsedUrl) {\n return null;\n }\n let user;\n\n if (parsedUrl.pathname) {\n const userIndex = parsedUrl.pathname.lastIndexOf('/');\n\n user = parsedUrl.pathname.substring(userIndex + 1);\n }\n if (!user) {\n return null;\n }\n let company;\n\n if (parsedUrl.hostname) {\n const companyIndex = parsedUrl.hostname.lastIndexOf(`.${WEBEX_DOT_COM}`);\n\n company = parsedUrl.hostname.substring(0, companyIndex).replace(WWW_DOT, '');\n }\n if (!company) {\n return null;\n }\n\n return `${user}@${company}.${WEBEX_DOT_COM}`;\n};\n\n\nMeetingInfoUtil.isSipUri = (sipString) => {\n // TODO: lets remove regex from this equation and user URI matchers and such\n // have not found a great sip uri parser library as of now\n const sipUri = DIALER_REGEX.SIP_ADDRESS.exec(sipString);\n\n return sipUri;\n};\n\nMeetingInfoUtil.isPhoneNumber = (phoneNumber) => {\n const isValidNumber = DIALER_REGEX.PHONE_NUMBER.test(phoneNumber);\n\n return isValidNumber;\n};\n\nMeetingInfoUtil.getHydraId = (destination) => {\n const {type, id, cluster} = deconstructHydraId(destination);\n\n if (id && UUID_REG.test(id)) {\n if (type === _ROOM_) {\n return {room: true, destination: id, cluster};\n }\n if (type === _PEOPLE_) {\n return {people: true, destination: id, cluster};\n }\n\n return {};\n }\n\n return {};\n};\n\nMeetingInfoUtil.getSipUriFromHydraPersonId = (destination, webex) => webex.people.get(destination).then((res) => {\n if (res.emails && res.emails.length) {\n return res.emails[0];\n }\n throw new ParameterError('Hydra Id Lookup was an invalid hydra person id.');\n}).catch((err) => {\n LoggerProxy.logger.error(`Meeting-info:util#MeetingInfoUtil.getSipUriFromHydraPersonId --> getSipUriFromHydraPersonId ${err} `);\n throw err;\n});\n\nMeetingInfoUtil.generateOptions = async (from) => {\n const {destination, type, webex} = from;\n\n if (type) {\n return {\n destination,\n type\n };\n }\n const options = {};\n const hydraId = MeetingInfoUtil.getHydraId(destination);\n\n if (MeetingInfoUtil.isMeetingLink(destination)) {\n LoggerProxy.logger.warn('Meeting-info:util#generateOptions --> WARN, use of Meeting Link is deprecated, please use a SIP URI instead');\n\n options.type = _MEETING_LINK_;\n options.destination = destination;\n }\n else if (MeetingInfoUtil.isSipUri(destination)) {\n options.type = _SIP_URI_;\n options.destination = destination;\n }\n else if (MeetingInfoUtil.isPhoneNumber(destination)) {\n options.type = _SIP_URI_;\n options.destination = destination;\n }\n else if (MeetingInfoUtil.isConversationUrl(destination, webex)) {\n options.type = _CONVERSATION_URL_;\n options.destination = destination;\n }\n else if (hydraId.people) {\n options.type = _SIP_URI_;\n\n return MeetingInfoUtil.getSipUriFromHydraPersonId(hydraId.destination, webex).then((res) => {\n options.destination = res;\n\n // Since hydra person ids require a unique case in which they are\n // entirely converted to a SIP URI, we need to set a flag for detecting\n // this type of destination.\n options.wasHydraPerson = true;\n\n return Promise.resolve(options);\n });\n }\n else if (hydraId.room) {\n options.type = _CONVERSATION_URL_;\n try {\n await webex.internal.services.waitForCatalog('postauth');\n\n const conversationUrl = webex.internal.conversation.getUrlFromClusterId({\n cluster: hydraId.cluster,\n id: hydraId.destination\n });\n\n options.destination = conversationUrl;\n }\n catch (e) {\n LoggerProxy.logger.error(`Meeting-info:util#generateOptions --> ${e}`);\n throw (e);\n }\n }\n else {\n throw new ParameterError('MeetingInfo is fetched with meeting link, sip uri, phone number, hydra room id, hydra people id, or a conversation url.');\n }\n\n return Promise.resolve(options);\n};\n\n/**\n * Helper function to build up a correct locus url depending on the value passed\n * @param {String} type One of [SIP_URI, PERSONAL_ROOM, MEETING_ID, CONVERSATION_URL, LOCUS_ID, MEETING_LINK]\n * @param {Object} value ?? value.value\n * @returns {Object} returns an object with {resource, method}\n */\nMeetingInfoUtil.getResourceUrl = (type, value) => {\n let resource = `/${LOCI}/${MEETINGINFO}`;\n let method = HTTP_VERBS.GET;\n let uri = null;\n\n switch (type) {\n case _SIP_URI_:\n case _PERSONAL_ROOM_:\n case _MEETING_ID_:\n resource = `/${LOCI}/${MEETINGINFO}/${encodeURIComponent(value)}?${TYPE}=${type}&${USE_URI_LOOKUP_FALSE}`;\n break;\n case _CONVERSATION_URL_:\n method = HTTP_VERBS.PUT;\n break;\n case _LOCUS_ID_:\n uri = `${value}/${MEETINGINFO}`;\n method = HTTP_VERBS.PUT;\n break;\n case _MEETING_LINK_:\n resource = `$/${LOCI}/${MEETINGINFO}/${btoa(value)}?${TYPE}=${_MEETING_LINK_}&${USE_URI_LOOKUP_FALSE}`;\n break;\n default:\n }\n\n return {\n uri,\n resource,\n method\n };\n};\n\nMeetingInfoUtil.getRequestParams = (resourceOptions, type, value, api) => {\n let requestParams = {\n method: resourceOptions.method,\n api,\n resource: resourceOptions.resource\n };\n\n if (resourceOptions.method === HTTP_VERBS.GET) {\n // for handling URL redirections\n requestParams.resource = requestParams.resource.concat(`&${ALTERNATE_REDIRECT_TRUE}`);\n }\n else\n if (type !== _LOCUS_ID_) {\n // locus id check is a PUT not sure why\n requestParams.resource = requestParams.resource.concat(`?${ALTERNATE_REDIRECT_TRUE}`);\n requestParams.body = {\n value,\n lookupType: type\n };\n }\n else if (type === _LOCUS_ID_) {\n requestParams = {\n method: resourceOptions.method,\n uri: resourceOptions.uri\n };\n }\n\n return requestParams;\n};\n\nexport default MeetingInfoUtil;\n"]}
|
|
1
|
+
{"version":3,"sources":["util.js"],"names":["MeetingInfoUtil","extractDestination","destination","type","dest","_LOCUS_ID_","url","ParameterError","getParsedUrl","link","parsedUrl","parse","protocol","HTTPS_PROTOCOL","error","LoggerProxy","logger","warn","isMeetingLink","value","hostNameBool","hostname","includes","WEBEX_DOT_COM","pathNameBool","pathname","MEET","MEET_M","JOIN","isConversationUrl","webex","clusterId","internal","services","getClusterId","endsWith","CONVERSATION_SERVICE","convertLinkToSip","user","userIndex","lastIndexOf","substring","company","companyIndex","replace","WWW_DOT","isSipUri","sipString","sipUri","DIALER_REGEX","SIP_ADDRESS","exec","isPhoneNumber","phoneNumber","isValidNumber","PHONE_NUMBER","test","getHydraId","id","cluster","UUID_REG","_ROOM_","room","_PEOPLE_","people","getSipUriFromHydraPersonId","get","then","res","emails","length","catch","err","generateOptions","from","options","hydraId","_MEETING_LINK_","_SIP_URI_","_CONVERSATION_URL_","wasHydraPerson","resolve","waitForCatalog","conversationUrl","conversation","getUrlFromClusterId","getResourceUrl","resource","LOCI","MEETINGINFO","method","HTTP_VERBS","GET","uri","_PERSONAL_ROOM_","_MEETING_ID_","encodeURIComponent","TYPE","USE_URI_LOOKUP_FALSE","PUT","getRequestParams","resourceOptions","api","requestParams","concat","ALTERNATE_REDIRECT_TRUE","body","lookupType"],"mappings":"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","sourcesContent":["import url from 'url';\n\nimport btoa from 'btoa';\nimport {\n deconstructHydraId\n} from '@webex/common';\n\nimport ParameterError from '../common/errors/parameter';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n _SIP_URI_,\n _PERSONAL_ROOM_,\n _MEETING_ID_,\n _CONVERSATION_URL_,\n _LOCUS_ID_,\n _MEETING_LINK_,\n _PEOPLE_,\n _ROOM_,\n HTTP_VERBS,\n USE_URI_LOOKUP_FALSE,\n TYPE,\n LOCI,\n MEETINGINFO,\n ALTERNATE_REDIRECT_TRUE,\n DIALER_REGEX,\n WEBEX_DOT_COM,\n CONVERSATION_SERVICE,\n WWW_DOT,\n JOIN,\n MEET,\n MEET_M,\n HTTPS_PROTOCOL,\n UUID_REG\n} from '../constants';\n\nconst MeetingInfoUtil = {};\n\nMeetingInfoUtil.extractDestination = (destination, type) => {\n let dest = destination;\n\n if (type === _LOCUS_ID_) {\n if (!(destination && destination.url)) {\n throw new ParameterError('You cannot create a meeting by locus without a locus.url defined');\n }\n dest = destination.url;\n }\n\n return dest;\n};\n\nMeetingInfoUtil.getParsedUrl = (link) => {\n try {\n let parsedUrl = url.parse(link);\n\n if (!parsedUrl) {\n return false;\n }\n // hack for links such as <company>.webex.com/meet/<user> without a protocol\n if (!parsedUrl.protocol) {\n parsedUrl = url.parse(`${HTTPS_PROTOCOL}${link}`);\n }\n\n return parsedUrl;\n }\n catch (error) {\n LoggerProxy.logger.warn(`Meeting-info:util#getParsedUrl --> unable to parse the URL, error: ${error}`);\n\n return null;\n }\n};\n\n/**\n * Helper function to check if a string matches a known meeting link pattern\n * @param {String} value string to parse and see if it matches a meeting link\n * @returns {Boolean}\n */\nMeetingInfoUtil.isMeetingLink = (value) => {\n const parsedUrl = MeetingInfoUtil.getParsedUrl(value);\n const hostNameBool = parsedUrl.hostname && parsedUrl.hostname.includes(WEBEX_DOT_COM);\n const pathNameBool = parsedUrl.pathname && (parsedUrl.pathname.includes(`/${MEET}`) || parsedUrl.pathname.includes(`/${MEET_M}`) || parsedUrl.pathname.includes(`/${JOIN}`));\n\n return hostNameBool && pathNameBool;\n};\n\nMeetingInfoUtil.isConversationUrl = (value, webex) => {\n const clusterId = webex.internal.services.getClusterId(value);\n\n if (clusterId) {\n return clusterId.endsWith(CONVERSATION_SERVICE);\n }\n\n return false;\n};\n\nMeetingInfoUtil.convertLinkToSip = (value) => {\n const parsedUrl = MeetingInfoUtil.getParsedUrl(value);\n\n if (!parsedUrl) {\n return null;\n }\n let user;\n\n if (parsedUrl.pathname) {\n const userIndex = parsedUrl.pathname.lastIndexOf('/');\n\n user = parsedUrl.pathname.substring(userIndex + 1);\n }\n if (!user) {\n return null;\n }\n let company;\n\n if (parsedUrl.hostname) {\n const companyIndex = parsedUrl.hostname.lastIndexOf(`.${WEBEX_DOT_COM}`);\n\n company = parsedUrl.hostname.substring(0, companyIndex).replace(WWW_DOT, '');\n }\n if (!company) {\n return null;\n }\n\n return `${user}@${company}.${WEBEX_DOT_COM}`;\n};\n\n\nMeetingInfoUtil.isSipUri = (sipString) => {\n // TODO: lets remove regex from this equation and user URI matchers and such\n // have not found a great sip uri parser library as of now\n const sipUri = DIALER_REGEX.SIP_ADDRESS.exec(sipString);\n\n return sipUri;\n};\n\nMeetingInfoUtil.isPhoneNumber = (phoneNumber) => {\n const isValidNumber = DIALER_REGEX.PHONE_NUMBER.test(phoneNumber);\n\n return isValidNumber;\n};\n\nMeetingInfoUtil.getHydraId = (destination) => {\n const {type, id, cluster} = deconstructHydraId(destination);\n\n if (id && UUID_REG.test(id)) {\n if (type === _ROOM_) {\n return {room: true, destination: id, cluster};\n }\n if (type === _PEOPLE_) {\n return {people: true, destination: id, cluster};\n }\n\n return {};\n }\n\n return {};\n};\n\nMeetingInfoUtil.getSipUriFromHydraPersonId = (destination, webex) => webex.people.get(destination).then((res) => {\n if (res.emails && res.emails.length) {\n return res.emails[0];\n }\n throw new ParameterError('Hydra Id Lookup was an invalid hydra person id.');\n}).catch((err) => {\n LoggerProxy.logger.error(`Meeting-info:util#MeetingInfoUtil.getSipUriFromHydraPersonId --> getSipUriFromHydraPersonId ${err} `);\n throw err;\n});\n\nMeetingInfoUtil.generateOptions = async (from) => {\n const {destination, type, webex} = from;\n\n if (type) {\n return {\n destination,\n type\n };\n }\n const options = {};\n const hydraId = MeetingInfoUtil.getHydraId(destination);\n\n if (MeetingInfoUtil.isMeetingLink(destination)) {\n LoggerProxy.logger.warn('Meeting-info:util#generateOptions --> WARN, use of Meeting Link is deprecated, please use a SIP URI instead');\n\n options.type = _MEETING_LINK_;\n options.destination = destination;\n }\n else if (MeetingInfoUtil.isSipUri(destination)) {\n options.type = _SIP_URI_;\n options.destination = destination;\n }\n else if (MeetingInfoUtil.isPhoneNumber(destination)) {\n options.type = _SIP_URI_;\n options.destination = destination;\n }\n else if (MeetingInfoUtil.isConversationUrl(destination, webex)) {\n options.type = _CONVERSATION_URL_;\n options.destination = destination;\n }\n else if (hydraId.people) {\n options.type = _SIP_URI_;\n\n return MeetingInfoUtil.getSipUriFromHydraPersonId(hydraId.destination, webex).then((res) => {\n options.destination = res;\n\n // Since hydra person ids require a unique case in which they are\n // entirely converted to a SIP URI, we need to set a flag for detecting\n // this type of destination.\n options.wasHydraPerson = true;\n\n return Promise.resolve(options);\n });\n }\n else if (hydraId.room) {\n options.type = _CONVERSATION_URL_;\n try {\n await webex.internal.services.waitForCatalog('postauth');\n\n const conversationUrl = webex.internal.conversation.getUrlFromClusterId({\n cluster: hydraId.cluster,\n id: hydraId.destination\n });\n\n options.destination = conversationUrl;\n }\n catch (e) {\n LoggerProxy.logger.error(`Meeting-info:util#generateOptions --> ${e}`);\n throw (e);\n }\n }\n else {\n throw new ParameterError('MeetingInfo is fetched with meeting link, sip uri, phone number, hydra room id, hydra people id, or a conversation url.');\n }\n\n return Promise.resolve(options);\n};\n\n/**\n * Helper function to build up a correct locus url depending on the value passed\n * @param {String} type One of [SIP_URI, PERSONAL_ROOM, MEETING_ID, CONVERSATION_URL, LOCUS_ID, MEETING_LINK]\n * @param {Object} value ?? value.value\n * @returns {Object} returns an object with {resource, method}\n */\nMeetingInfoUtil.getResourceUrl = (type, value) => {\n let resource = `/${LOCI}/${MEETINGINFO}`;\n let method = HTTP_VERBS.GET;\n let uri = null;\n\n switch (type) {\n case _SIP_URI_:\n case _PERSONAL_ROOM_:\n case _MEETING_ID_:\n resource = `/${LOCI}/${MEETINGINFO}/${encodeURIComponent(value)}?${TYPE}=${type}&${USE_URI_LOOKUP_FALSE}`;\n break;\n case _CONVERSATION_URL_:\n method = HTTP_VERBS.PUT;\n break;\n case _LOCUS_ID_:\n uri = `${value}/${MEETINGINFO}`;\n method = HTTP_VERBS.PUT;\n break;\n case _MEETING_LINK_:\n resource = `$/${LOCI}/${MEETINGINFO}/${btoa(value)}?${TYPE}=${_MEETING_LINK_}&${USE_URI_LOOKUP_FALSE}`;\n break;\n default:\n }\n\n return {\n uri,\n resource,\n method\n };\n};\n\nMeetingInfoUtil.getRequestParams = (resourceOptions, type, value, api) => {\n let requestParams = {\n method: resourceOptions.method,\n api,\n resource: resourceOptions.resource\n };\n\n if (resourceOptions.method === HTTP_VERBS.GET) {\n // for handling URL redirections\n requestParams.resource = requestParams.resource.concat(`&${ALTERNATE_REDIRECT_TRUE}`);\n }\n else\n if (type !== _LOCUS_ID_) {\n // locus id check is a PUT not sure why\n requestParams.resource = requestParams.resource.concat(`?${ALTERNATE_REDIRECT_TRUE}`);\n requestParams.body = {\n value,\n lookupType: type\n };\n }\n else if (type === _LOCUS_ID_) {\n requestParams = {\n method: resourceOptions.method,\n uri: resourceOptions.uri\n };\n }\n\n return requestParams;\n};\n\nexport default MeetingInfoUtil;\n"]}
|
package/dist/meetings/index.js
CHANGED
|
@@ -159,16 +159,6 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
162
|
-
/**
|
|
163
|
-
* The MeetingInfo object to interact with server
|
|
164
|
-
* @instance
|
|
165
|
-
* @type {Object}
|
|
166
|
-
* @private
|
|
167
|
-
* @memberof Meetings
|
|
168
|
-
*/
|
|
169
|
-
|
|
170
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "namespace", _constants.MEETINGS);
|
|
171
|
-
_this.meetingInfo = null;
|
|
172
162
|
/**
|
|
173
163
|
* The Meetings request to interact with server
|
|
174
164
|
* @instance
|
|
@@ -177,6 +167,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
177
167
|
* @memberof Meetings
|
|
178
168
|
*/
|
|
179
169
|
|
|
170
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "namespace", _constants.MEETINGS);
|
|
180
171
|
_this.request = new _request2.default({}, {
|
|
181
172
|
parent: _this.webex
|
|
182
173
|
});
|
|
@@ -440,6 +431,16 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
440
431
|
_loggerConfig.default.set(_this4.config.logging);
|
|
441
432
|
|
|
442
433
|
_loggerProxy.default.set(_this4.webex.logger);
|
|
434
|
+
/**
|
|
435
|
+
* The MeetingInfo object to interact with server
|
|
436
|
+
* @instance
|
|
437
|
+
* @type {Object}
|
|
438
|
+
* @private
|
|
439
|
+
* @memberof Meetings
|
|
440
|
+
*/
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
_this4.meetingInfo = _this4.config.experimental.enableUnifiedMeetings ? new _meetingInfoV.default(_this4.webex) : new _meetingInfo.default(_this4.webex);
|
|
443
444
|
|
|
444
445
|
_triggerProxy.default.trigger(_this4, {
|
|
445
446
|
file: 'meetings',
|
|
@@ -467,8 +468,6 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
467
468
|
return _promise.default.reject(new Error('SDK cannot authorize'));
|
|
468
469
|
}
|
|
469
470
|
|
|
470
|
-
this.meetingInfo = this.config.experimental.enableUnifiedMeetings ? new _meetingInfoV.default(this.webex) : new _meetingInfo.default(this.webex);
|
|
471
|
-
|
|
472
471
|
if (this.registered) {
|
|
473
472
|
_loggerProxy.default.logger.info('Meetings:index#register --> INFO, Meetings plugin already registered');
|
|
474
473
|
|
|
@@ -795,7 +794,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
795
794
|
this.meetingCollection.set(meeting);
|
|
796
795
|
_context.prev = 3;
|
|
797
796
|
_context.next = 6;
|
|
798
|
-
return this.meetingInfo.fetchMeetingInfo(
|
|
797
|
+
return this.meetingInfo.fetchMeetingInfo(destination, type);
|
|
799
798
|
|
|
800
799
|
case 6:
|
|
801
800
|
info = _context.sent;
|