@webex/plugin-meetings 3.0.0-beta.360 → 3.0.0-beta.362
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/constants.js +12 -2
- package/dist/constants.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/index.js +71 -13
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +71 -0
- package/dist/meeting/util.js.map +1 -1
- package/dist/types/constants.d.ts +9 -0
- package/dist/types/meeting/index.d.ts +2 -0
- package/dist/types/meeting/util.d.ts +16 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +19 -19
- package/src/constants.ts +10 -0
- package/src/meeting/index.ts +73 -8
- package/src/meeting/util.ts +97 -0
- package/test/unit/spec/meeting/index.js +54 -6
- package/test/unit/spec/meeting/utils.js +93 -0
package/dist/meeting/util.js
CHANGED
|
@@ -644,6 +644,77 @@ var MeetingUtil = {
|
|
|
644
644
|
file: 'meeting/util',
|
|
645
645
|
function: 'parseInterpretationInfo'
|
|
646
646
|
}, _constants.EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE);
|
|
647
|
+
},
|
|
648
|
+
/**
|
|
649
|
+
* Returns a CA-recognized error payload for the specified raw error message/reason.
|
|
650
|
+
*
|
|
651
|
+
* New errors can be added to this function for handling in the future
|
|
652
|
+
*
|
|
653
|
+
* @param {String} reason the raw error message
|
|
654
|
+
* @returns {Array<object>} an array of payload objects
|
|
655
|
+
*/
|
|
656
|
+
getChangeMeetingFloorErrorPayload: function getChangeMeetingFloorErrorPayload(reason) {
|
|
657
|
+
var errorPayload = {
|
|
658
|
+
errorDescription: reason,
|
|
659
|
+
name: 'locus.response',
|
|
660
|
+
shownToUser: false
|
|
661
|
+
};
|
|
662
|
+
if (reason.includes(_constants.LOCAL_SHARE_ERRORS.UNDEFINED)) {
|
|
663
|
+
return [_objectSpread(_objectSpread({}, errorPayload), {}, {
|
|
664
|
+
fatal: true,
|
|
665
|
+
category: 'signaling',
|
|
666
|
+
errorCode: 1100
|
|
667
|
+
})];
|
|
668
|
+
}
|
|
669
|
+
if (reason.includes(_constants.LOCAL_SHARE_ERRORS.DEVICE_NOT_JOINED)) {
|
|
670
|
+
return [_objectSpread(_objectSpread({}, errorPayload), {}, {
|
|
671
|
+
fatal: true,
|
|
672
|
+
category: 'signaling',
|
|
673
|
+
errorCode: 4050
|
|
674
|
+
})];
|
|
675
|
+
}
|
|
676
|
+
if (reason.includes(_constants.LOCAL_SHARE_ERRORS.NO_MEDIA_FOR_DEVICE)) {
|
|
677
|
+
return [_objectSpread(_objectSpread({}, errorPayload), {}, {
|
|
678
|
+
fatal: true,
|
|
679
|
+
category: 'media',
|
|
680
|
+
errorCode: 2048
|
|
681
|
+
})];
|
|
682
|
+
}
|
|
683
|
+
if (reason.includes(_constants.LOCAL_SHARE_ERRORS.NO_CONFLUENCE_ID)) {
|
|
684
|
+
return [_objectSpread(_objectSpread({}, errorPayload), {}, {
|
|
685
|
+
fatal: true,
|
|
686
|
+
category: 'signaling',
|
|
687
|
+
errorCode: 4064
|
|
688
|
+
})];
|
|
689
|
+
}
|
|
690
|
+
if (reason.includes(_constants.LOCAL_SHARE_ERRORS.CONTENT_SHARING_DISABLED)) {
|
|
691
|
+
return [_objectSpread(_objectSpread({}, errorPayload), {}, {
|
|
692
|
+
fatal: true,
|
|
693
|
+
category: 'expected',
|
|
694
|
+
errorCode: 4065
|
|
695
|
+
})];
|
|
696
|
+
}
|
|
697
|
+
if (reason.includes(_constants.LOCAL_SHARE_ERRORS.LOCUS_PARTICIPANT_DNE)) {
|
|
698
|
+
return [_objectSpread(_objectSpread({}, errorPayload), {}, {
|
|
699
|
+
fatal: true,
|
|
700
|
+
category: 'signaling',
|
|
701
|
+
errorCode: 4066
|
|
702
|
+
})];
|
|
703
|
+
}
|
|
704
|
+
if (reason.includes(_constants.LOCAL_SHARE_ERRORS.CONTENT_REQUEST_WHILE_PENDING_WHITEBOARD)) {
|
|
705
|
+
return [_objectSpread(_objectSpread({}, errorPayload), {}, {
|
|
706
|
+
fatal: true,
|
|
707
|
+
category: 'expected',
|
|
708
|
+
errorCode: 4067
|
|
709
|
+
})];
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
// return unknown error
|
|
713
|
+
return [_objectSpread(_objectSpread({}, errorPayload), {}, {
|
|
714
|
+
fatal: true,
|
|
715
|
+
category: 'signaling',
|
|
716
|
+
errorCode: 1100
|
|
717
|
+
})];
|
|
647
718
|
}
|
|
648
719
|
};
|
|
649
720
|
var _default = MeetingUtil;
|
package/dist/meeting/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","meeting","audioMuted","videoMuted","webex","getWebexObject","reject","ParameterError","locusMediaRequest","internal","newMetrics","submitClientEvent","name","options","meetingId","send","type","selfUrl","sequence","locusInfo","muteOptions","then","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","getIpVersion","device","ipNetworkDetector","supportsIpV4","supportsIpV6","BrowserDetection","isBrowser","undefined","IP_VERSION","ipv4_and_ipv6","only_ipv4","only_ipv6","unknown","joinMeeting","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","deviceUrl","locusClusterUrl","meetingInfo","correlationId","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","isMultistream","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","ipVersion","res","payload","trigger","identifiers","trackingId","headers","trackingid","cleanUp","breakouts","simultaneousInterpretation","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeRemoteStreams","closePeerConnections","cleanupLocalStreams","unsetRemoteStreams","unsetPeerConnections","reconnectionManager","stopKeepAlive","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","catch","LoggerProxy","logger","error","prepareLeaveMeetingOptions","defaultOptions","leaveMeeting","isUserInLeftState","UserNotJoinedError","leaveOptions","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","CaptchaError","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","setLocus","IntentToJoinError","JoinMeetingError","buildLeaveFetchRequestOptions","buildLeaveMeetingRequestOptions","getTrack","stream","audioTrack","videoTrack","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","userDisplayHints","canInviteNewParticipants","displayHints","DISPLAY_HINTS","ADD_GUEST","canAdmitParticipant","ROSTER_WAITING_TO_JOIN","canUserLock","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","canBroadcastMessageToBreakout","policies","BROADCAST_MESSAGE_TO_BREAKOUT","SELF_POLICY","SUPPORT_BROADCAST_MESSAGE","isSuppressBreakoutSupport","UCF_SUPPRESS_BREAKOUTS_SUPPORT","canAdmitLobbyToBreakout","DISABLE_LOBBY_TO_BREAKOUT","isBreakoutPreassignmentsEnabled","DISABLE_BREAKOUT_PREASSIGNMENTS","canUserAskForHelp","DISABLE_ASK_FOR_HELP","lockMeeting","actions","request","canLock","lock","PermissionError","unlockMeeting","canUnlock","handleAudioLogging","audioStream","LOG_HEADER","settings","getSettings","deviceId","log","handleVideoLogging","videoStream","handleDeviceLogging","devices","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","isSaveTranscriptsEnabled","SAVE_TRANSCRIPTS_ENABLED","canStartTranscribing","TRANSCRIPTION_CONTROL_START","canStopTranscribing","TRANSCRIPTION_CONTROL_STOP","isClosedCaptionActive","CAPTION_STATUS_ACTIVE","isWebexAssistantActive","WEBEX_ASSISTANT_STATUS_ACTIVE","canViewCaptionPanel","ENABLE_CAPTION_PANEL","isRealTimeTranslationEnabled","DISPLAY_REAL_TIME_TRANSLATION","canSelectSpokenLanguages","DISPLAY_NON_ENGLISH_ASR","waitingForOthersToJoin","WAITING_FOR_OTHERS","canSendReactions","originalValue","REACTIONS_ACTIVE","REACTIONS_INACTIVE","canUserRenameSelfAndObserved","CAN_RENAME_SELF_AND_OBSERVED","canUserRenameOthers","CAN_RENAME_OTHERS","canShareWhiteBoard","SHARE_WHITEBOARD","addSequence","requestBody","updateLocusWithDelta","handleLocusDelta","generateBuildLocusDeltaRequestOptions","originalMeeting","meetingRef","WeakRef","buildLocusDeltaRequestOptions","originalOptions","deref","generateLocusDeltaRequest","locusDeltaRequest","selfSupportsFeature","feature","userPolicies","parseInterpretationInfo","siInfo","updateMeetingSIEnabled","turnOnSimultaneousInterpretation","currentSIInterpreter","hostSIEnabled","meetingSiteSetting","enableHostInterpreterControlSI","updateHostSIEnabled","renameKey","obj","oldKey","newKey","lanuagesInfo","siLanguages","language","updateInterpretation","Trigger","file","function","EVENT_TRIGGERS","MEETING_INTERPRETATION_UPDATE"],"sources":["util.ts"],"sourcesContent":["import {LocalCameraStream, LocalMicrophoneStream} from '@webex/media-helpers';\n\nimport {cloneDeep} from 'lodash';\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\n SELF_POLICY,\n EVENT_TRIGGERS,\n IP_VERSION,\n} from '../constants';\nimport BrowserDetection from '../common/browser-detection';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\nimport Trigger from '../common/events/trigger-proxy';\n\nconst MeetingUtil = {\n parseLocusJoin: (response) => {\n const parsed: any = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n },\n\n remoteUpdateAudioVideo: (meeting, audioMuted?: boolean, videoMuted?: boolean) => {\n const webex = meeting.getWebexObject();\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n if (!meeting.locusMediaRequest) {\n return Promise.reject(\n new ParameterError(\n 'You need a meeting with a media connection, call Meeting.addMedia() first.'\n )\n );\n }\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.request',\n options: {meetingId: meeting.id},\n });\n\n return meeting.locusMediaRequest\n .send({\n type: 'LocalMute',\n selfUrl: meeting.selfUrl,\n mediaId: meeting.mediaId,\n sequence: meeting.locusInfo.sequence,\n muteOptions: {\n audioMuted,\n videoMuted,\n },\n })\n .then((response) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.response',\n options: {meetingId: meeting.id},\n });\n\n return response?.body?.locus;\n });\n },\n\n hasOwner: (info) => info && info.owner,\n\n isOwnerSelf: (owner, selfId) => owner === selfId,\n\n isPinOrGuest: (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode),\n\n /**\n * Returns the current state of knowledge about whether we are on an ipv4-only or ipv6-only or mixed (ipv4 and ipv6) network.\n * The return value matches the possible values of \"ipver\" parameter used by the backend APIs.\n *\n * @param {Object} webex webex instance\n * @returns {IP_VERSION|undefined} ipver value to be passed to the backend APIs or undefined if we should not pass any value to the backend\n */\n getIpVersion(webex: any): IP_VERSION | undefined {\n const {supportsIpV4, supportsIpV6} = webex.internal.device.ipNetworkDetector;\n\n if (BrowserDetection().isBrowser('firefox')) {\n // our ipv6 solution relies on FQDN ICE candidates, but Firefox doesn't support them,\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=1713128\n // so for Firefox we don't want the backend to activate the \"ipv6 feature\"\n return undefined;\n }\n\n if (supportsIpV4 && supportsIpV6) {\n return IP_VERSION.ipv4_and_ipv6;\n }\n\n if (supportsIpV4) {\n return IP_VERSION.only_ipv4;\n }\n\n if (supportsIpV6) {\n return IP_VERSION.only_ipv6;\n }\n\n return IP_VERSION.unknown;\n },\n\n joinMeeting: (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n const webex = meeting.getWebexObject();\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.request',\n options: {meetingId: meeting.id},\n });\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n locusClusterUrl: meeting.meetingInfo?.locusClusterUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n permissionToken: meeting.permissionToken,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: !meeting.isMultistream,\n asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\n locale: options.locale,\n deviceCapabilities: options.deviceCapabilities,\n liveAnnotationSupported: options.liveAnnotationSupported,\n ipVersion: MeetingUtil.getIpVersion(meeting.getWebexObject()),\n })\n .then((res) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.response',\n payload: {\n trigger: 'loci-update',\n identifiers: {\n trackingId: res.headers.trackingid,\n },\n },\n options: {\n meetingId: meeting.id,\n mediaConnections: res.body.mediaConnections,\n },\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n },\n\n cleanUp: (meeting) => {\n meeting.breakouts.cleanUp();\n meeting.simultaneousInterpretation.cleanUp();\n\n // make sure we send last metrics before we close the peerconnection\n const stopStatsAnalyzer = meeting.statsAnalyzer\n ? meeting.statsAnalyzer.stopAnalyzer()\n : Promise.resolve();\n\n return stopStatsAnalyzer\n .then(() => meeting.closeRemoteStreams())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.cleanupLocalStreams();\n meeting.unsetRemoteStreams();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => meeting.updateLLMConnection());\n },\n\n disconnectPhoneAudio: (meeting, phoneUrl) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const options = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n phoneUrl,\n };\n\n return meeting.meetingRequest.disconnectPhoneAudio(options).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n /**\n * Returns options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} leave options\n */\n prepareLeaveMeetingOptions: (meeting, options: any = {}) => {\n const defaultOptions = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n resourceId: meeting.resourceId,\n deviceUrl: meeting.deviceUrl,\n };\n\n return {...defaultOptions, ...options};\n },\n\n // by default will leave on meeting's resourceId\n // if you explicity want it not to leave on resource id, pass\n // {resourceId: null}\n // TODO: chris, you can modify this however you want\n leaveMeeting: (meeting, options: any = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, options);\n\n return meeting.meetingRequest\n .leaveMeeting(leaveOptions)\n .then(() => {\n if (options.moveMeeting) {\n return Promise.resolve();\n }\n\n return MeetingUtil.cleanUp(meeting);\n })\n .catch((err) => {\n // TODO: If the meeting state comes as LEFT or INACTIVE as response then\n // 1) on leave clean up the meeting or simply do a sync on the meeting\n // 2) If the error says meeting is inactive then destroy the meeting object\n LoggerProxy.logger.error(\n `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n declineMeeting: (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason,\n }),\n\n isUserInLeftState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_,\n\n isUserInIdleState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_,\n\n isUserInJoinedState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_,\n\n isMediaEstablished: (currentMediaStatus) =>\n currentMediaStatus &&\n (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share),\n\n joinMeetingOptions: (meeting, options: any = {}) => {\n const webex = meeting.getWebexObject();\n\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (meeting.requiredCaptcha) {\n return Promise.reject(new CaptchaError());\n }\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n return Promise.reject(new PasswordError());\n }\n\n if (options.pin) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.collected',\n options: {\n meetingId: meeting.id,\n },\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.prompt',\n options: {\n meetingId: meeting.id,\n },\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error(\n 'Meeting:util#joinMeetingOptions --> Error joining the call, ',\n err\n );\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n },\n\n /**\n * Returns request options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} request options\n */\n buildLeaveFetchRequestOptions: (meeting, options: any = {}) => {\n const leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, options);\n\n return meeting.meetingRequest.buildLeaveMeetingRequestOptions(leaveOptions);\n },\n\n getTrack: (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n },\n\n getModeratorFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator,\n\n getPolicyFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy,\n\n getUserDisplayHintsFromLocusInfo: (locusInfo) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [],\n\n canInviteNewParticipants: (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST),\n\n canAdmitParticipant: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN),\n\n canUserLock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED),\n\n canUserUnlock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED),\n\n canUserRaiseHand: (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND),\n\n canUserLowerAllHands: (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS),\n\n canUserLowerSomeoneElsesHand: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND),\n\n bothLeaveAndEndMeetingAvailable: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING),\n\n canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),\n canBroadcastMessageToBreakout: (displayHints, policies = {}) =>\n displayHints.includes(DISPLAY_HINTS.BROADCAST_MESSAGE_TO_BREAKOUT) &&\n !!policies[SELF_POLICY.SUPPORT_BROADCAST_MESSAGE],\n\n isSuppressBreakoutSupport: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT),\n\n canAdmitLobbyToBreakout: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT),\n\n isBreakoutPreassignmentsEnabled: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS),\n\n canUserAskForHelp: (displayHints) => !displayHints.includes(DISPLAY_HINTS.DISABLE_ASK_FOR_HELP),\n\n lockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canLock) {\n return request.lockMeeting({locusUrl, lock: true});\n }\n\n return Promise.reject(new PermissionError('Lock not allowed, due to joined property.'));\n },\n\n unlockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canUnlock) {\n return request.lockMeeting({locusUrl, lock: false});\n }\n\n return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));\n },\n\n handleAudioLogging: (audioStream?: LocalMicrophoneStream) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioStream) {\n const settings = audioStream.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleVideoLogging: (videoStream?: LocalCameraStream) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoStream) {\n const settings = videoStream.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleDeviceLogging: (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n },\n\n endMeetingForAll: (meeting) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const endOptions = {\n locusUrl: meeting.locusUrl,\n };\n\n return meeting.meetingRequest\n .endMeetingForAll(endOptions)\n .then(() => MeetingUtil.cleanUp(meeting))\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n canEnableClosedCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START),\n\n isSaveTranscriptsEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED),\n\n canStartTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START),\n\n canStopTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP),\n\n isClosedCaptionActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE),\n\n isWebexAssistantActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE),\n\n canViewCaptionPanel: (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL),\n\n isRealTimeTranslationEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION),\n\n canSelectSpokenLanguages: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR),\n\n waitingForOthersToJoin: (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS),\n\n canSendReactions: (originalValue, displayHints) => {\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {\n return true;\n }\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {\n return false;\n }\n\n return originalValue;\n },\n canUserRenameSelfAndObserved: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED),\n\n canUserRenameOthers: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS),\n\n canShareWhiteBoard: (displayHints) => displayHints.includes(DISPLAY_HINTS.SHARE_WHITEBOARD),\n\n /**\n * Adds the current locus sequence information to a request body\n * @param {Object} meeting The meeting object\n * @param {Object} requestBody The body of a request to locus\n * @returns {void}\n */\n addSequence: (meeting, requestBody) => {\n const sequence = meeting?.locusInfo?.sequence;\n\n if (!sequence) {\n return;\n }\n\n requestBody.sequence = sequence;\n },\n\n /**\n * Updates the locus info for the meeting with the delta locus\n * returned from requests that include the sequence information\n * Returns the original response object\n * @param {Object} meeting The meeting object\n * @param {Object} response The response of the http request\n * @returns {Object}\n */\n updateLocusWithDelta: (meeting, response) => {\n if (!meeting) {\n return response;\n }\n\n const locus = response?.body?.locus;\n\n if (locus) {\n meeting.locusInfo.handleLocusDelta(locus, meeting);\n }\n\n return response;\n },\n\n generateBuildLocusDeltaRequestOptions: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const buildLocusDeltaRequestOptions = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return originalOptions;\n }\n\n const options = cloneDeep(originalOptions);\n\n if (!options.body) {\n options.body = {};\n }\n\n MeetingUtil.addSequence(meeting, options.body);\n\n return options;\n };\n\n return buildLocusDeltaRequestOptions;\n },\n\n generateLocusDeltaRequest: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const buildLocusDeltaRequestOptions =\n MeetingUtil.generateBuildLocusDeltaRequestOptions(originalMeeting);\n\n const locusDeltaRequest = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return Promise.resolve();\n }\n\n const options = buildLocusDeltaRequestOptions(originalOptions);\n\n return meeting\n .request(options)\n .then((response) => MeetingUtil.updateLocusWithDelta(meeting, response));\n };\n\n return locusDeltaRequest;\n },\n\n selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record<SELF_POLICY, boolean>) => {\n if (!userPolicies) {\n return true;\n }\n\n return userPolicies[feature];\n },\n\n parseInterpretationInfo: (meeting, meetingInfo) => {\n if (!meeting || !meetingInfo) {\n return;\n }\n const siInfo = meetingInfo.simultaneousInterpretation;\n meeting.simultaneousInterpretation.updateMeetingSIEnabled(\n !!meetingInfo.turnOnSimultaneousInterpretation,\n !!siInfo?.currentSIInterpreter\n );\n const hostSIEnabled = !!(\n meetingInfo.turnOnSimultaneousInterpretation &&\n meetingInfo?.meetingSiteSetting?.enableHostInterpreterControlSI\n );\n meeting.simultaneousInterpretation.updateHostSIEnabled(hostSIEnabled);\n\n function renameKey(obj, oldKey, newKey) {\n if (oldKey in obj) {\n obj[newKey] = obj[oldKey];\n delete obj[oldKey];\n }\n }\n if (siInfo) {\n const lanuagesInfo = cloneDeep(siInfo.siLanguages);\n for (const language of lanuagesInfo) {\n renameKey(language, 'languageCode', 'languageName');\n renameKey(language, 'languageGroupId', 'languageCode');\n }\n if (!meeting.simultaneousInterpretation?.siLanguages?.length) {\n meeting.simultaneousInterpretation.updateInterpretation({siLanguages: lanuagesInfo});\n }\n }\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'parseInterpretationInfo',\n },\n EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE\n );\n },\n};\n\nexport default MeetingUtil;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","meeting","audioMuted","videoMuted","webex","getWebexObject","reject","ParameterError","locusMediaRequest","internal","newMetrics","submitClientEvent","name","options","meetingId","send","type","selfUrl","sequence","locusInfo","muteOptions","then","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","getIpVersion","device","ipNetworkDetector","supportsIpV4","supportsIpV6","BrowserDetection","isBrowser","undefined","IP_VERSION","ipv4_and_ipv6","only_ipv4","only_ipv6","unknown","joinMeeting","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","deviceUrl","locusClusterUrl","meetingInfo","correlationId","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","isMultistream","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","ipVersion","res","payload","trigger","identifiers","trackingId","headers","trackingid","cleanUp","breakouts","simultaneousInterpretation","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeRemoteStreams","closePeerConnections","cleanupLocalStreams","unsetRemoteStreams","unsetPeerConnections","reconnectionManager","stopKeepAlive","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","catch","LoggerProxy","logger","error","prepareLeaveMeetingOptions","defaultOptions","leaveMeeting","isUserInLeftState","UserNotJoinedError","leaveOptions","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","CaptchaError","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","setLocus","IntentToJoinError","JoinMeetingError","buildLeaveFetchRequestOptions","buildLeaveMeetingRequestOptions","getTrack","stream","audioTrack","videoTrack","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","userDisplayHints","canInviteNewParticipants","displayHints","DISPLAY_HINTS","ADD_GUEST","canAdmitParticipant","ROSTER_WAITING_TO_JOIN","canUserLock","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","canBroadcastMessageToBreakout","policies","BROADCAST_MESSAGE_TO_BREAKOUT","SELF_POLICY","SUPPORT_BROADCAST_MESSAGE","isSuppressBreakoutSupport","UCF_SUPPRESS_BREAKOUTS_SUPPORT","canAdmitLobbyToBreakout","DISABLE_LOBBY_TO_BREAKOUT","isBreakoutPreassignmentsEnabled","DISABLE_BREAKOUT_PREASSIGNMENTS","canUserAskForHelp","DISABLE_ASK_FOR_HELP","lockMeeting","actions","request","canLock","lock","PermissionError","unlockMeeting","canUnlock","handleAudioLogging","audioStream","LOG_HEADER","settings","getSettings","deviceId","log","handleVideoLogging","videoStream","handleDeviceLogging","devices","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","isSaveTranscriptsEnabled","SAVE_TRANSCRIPTS_ENABLED","canStartTranscribing","TRANSCRIPTION_CONTROL_START","canStopTranscribing","TRANSCRIPTION_CONTROL_STOP","isClosedCaptionActive","CAPTION_STATUS_ACTIVE","isWebexAssistantActive","WEBEX_ASSISTANT_STATUS_ACTIVE","canViewCaptionPanel","ENABLE_CAPTION_PANEL","isRealTimeTranslationEnabled","DISPLAY_REAL_TIME_TRANSLATION","canSelectSpokenLanguages","DISPLAY_NON_ENGLISH_ASR","waitingForOthersToJoin","WAITING_FOR_OTHERS","canSendReactions","originalValue","REACTIONS_ACTIVE","REACTIONS_INACTIVE","canUserRenameSelfAndObserved","CAN_RENAME_SELF_AND_OBSERVED","canUserRenameOthers","CAN_RENAME_OTHERS","canShareWhiteBoard","SHARE_WHITEBOARD","addSequence","requestBody","updateLocusWithDelta","handleLocusDelta","generateBuildLocusDeltaRequestOptions","originalMeeting","meetingRef","WeakRef","buildLocusDeltaRequestOptions","originalOptions","deref","generateLocusDeltaRequest","locusDeltaRequest","selfSupportsFeature","feature","userPolicies","parseInterpretationInfo","siInfo","updateMeetingSIEnabled","turnOnSimultaneousInterpretation","currentSIInterpreter","hostSIEnabled","meetingSiteSetting","enableHostInterpreterControlSI","updateHostSIEnabled","renameKey","obj","oldKey","newKey","lanuagesInfo","siLanguages","language","updateInterpretation","Trigger","file","function","EVENT_TRIGGERS","MEETING_INTERPRETATION_UPDATE","getChangeMeetingFloorErrorPayload","errorPayload","errorDescription","shownToUser","LOCAL_SHARE_ERRORS","UNDEFINED","fatal","category","DEVICE_NOT_JOINED","NO_MEDIA_FOR_DEVICE","NO_CONFLUENCE_ID","CONTENT_SHARING_DISABLED","LOCUS_PARTICIPANT_DNE","CONTENT_REQUEST_WHILE_PENDING_WHITEBOARD"],"sources":["util.ts"],"sourcesContent":["import {LocalCameraStream, LocalMicrophoneStream} from '@webex/media-helpers';\n\nimport {cloneDeep} from 'lodash';\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\n SELF_POLICY,\n EVENT_TRIGGERS,\n LOCAL_SHARE_ERRORS,\n IP_VERSION,\n} from '../constants';\nimport BrowserDetection from '../common/browser-detection';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\nimport Trigger from '../common/events/trigger-proxy';\n\nconst MeetingUtil = {\n parseLocusJoin: (response) => {\n const parsed: any = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n },\n\n remoteUpdateAudioVideo: (meeting, audioMuted?: boolean, videoMuted?: boolean) => {\n const webex = meeting.getWebexObject();\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n if (!meeting.locusMediaRequest) {\n return Promise.reject(\n new ParameterError(\n 'You need a meeting with a media connection, call Meeting.addMedia() first.'\n )\n );\n }\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.request',\n options: {meetingId: meeting.id},\n });\n\n return meeting.locusMediaRequest\n .send({\n type: 'LocalMute',\n selfUrl: meeting.selfUrl,\n mediaId: meeting.mediaId,\n sequence: meeting.locusInfo.sequence,\n muteOptions: {\n audioMuted,\n videoMuted,\n },\n })\n .then((response) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.response',\n options: {meetingId: meeting.id},\n });\n\n return response?.body?.locus;\n });\n },\n\n hasOwner: (info) => info && info.owner,\n\n isOwnerSelf: (owner, selfId) => owner === selfId,\n\n isPinOrGuest: (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode),\n\n /**\n * Returns the current state of knowledge about whether we are on an ipv4-only or ipv6-only or mixed (ipv4 and ipv6) network.\n * The return value matches the possible values of \"ipver\" parameter used by the backend APIs.\n *\n * @param {Object} webex webex instance\n * @returns {IP_VERSION|undefined} ipver value to be passed to the backend APIs or undefined if we should not pass any value to the backend\n */\n getIpVersion(webex: any): IP_VERSION | undefined {\n const {supportsIpV4, supportsIpV6} = webex.internal.device.ipNetworkDetector;\n\n if (BrowserDetection().isBrowser('firefox')) {\n // our ipv6 solution relies on FQDN ICE candidates, but Firefox doesn't support them,\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=1713128\n // so for Firefox we don't want the backend to activate the \"ipv6 feature\"\n return undefined;\n }\n\n if (supportsIpV4 && supportsIpV6) {\n return IP_VERSION.ipv4_and_ipv6;\n }\n\n if (supportsIpV4) {\n return IP_VERSION.only_ipv4;\n }\n\n if (supportsIpV6) {\n return IP_VERSION.only_ipv6;\n }\n\n return IP_VERSION.unknown;\n },\n\n joinMeeting: (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n const webex = meeting.getWebexObject();\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.request',\n options: {meetingId: meeting.id},\n });\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n locusClusterUrl: meeting.meetingInfo?.locusClusterUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n permissionToken: meeting.permissionToken,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: !meeting.isMultistream,\n asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\n locale: options.locale,\n deviceCapabilities: options.deviceCapabilities,\n liveAnnotationSupported: options.liveAnnotationSupported,\n ipVersion: MeetingUtil.getIpVersion(meeting.getWebexObject()),\n })\n .then((res) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.response',\n payload: {\n trigger: 'loci-update',\n identifiers: {\n trackingId: res.headers.trackingid,\n },\n },\n options: {\n meetingId: meeting.id,\n mediaConnections: res.body.mediaConnections,\n },\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n },\n\n cleanUp: (meeting) => {\n meeting.breakouts.cleanUp();\n meeting.simultaneousInterpretation.cleanUp();\n\n // make sure we send last metrics before we close the peerconnection\n const stopStatsAnalyzer = meeting.statsAnalyzer\n ? meeting.statsAnalyzer.stopAnalyzer()\n : Promise.resolve();\n\n return stopStatsAnalyzer\n .then(() => meeting.closeRemoteStreams())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.cleanupLocalStreams();\n meeting.unsetRemoteStreams();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => meeting.updateLLMConnection());\n },\n\n disconnectPhoneAudio: (meeting, phoneUrl) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const options = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n phoneUrl,\n };\n\n return meeting.meetingRequest.disconnectPhoneAudio(options).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n /**\n * Returns options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} leave options\n */\n prepareLeaveMeetingOptions: (meeting, options: any = {}) => {\n const defaultOptions = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n resourceId: meeting.resourceId,\n deviceUrl: meeting.deviceUrl,\n };\n\n return {...defaultOptions, ...options};\n },\n\n // by default will leave on meeting's resourceId\n // if you explicity want it not to leave on resource id, pass\n // {resourceId: null}\n // TODO: chris, you can modify this however you want\n leaveMeeting: (meeting, options: any = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, options);\n\n return meeting.meetingRequest\n .leaveMeeting(leaveOptions)\n .then(() => {\n if (options.moveMeeting) {\n return Promise.resolve();\n }\n\n return MeetingUtil.cleanUp(meeting);\n })\n .catch((err) => {\n // TODO: If the meeting state comes as LEFT or INACTIVE as response then\n // 1) on leave clean up the meeting or simply do a sync on the meeting\n // 2) If the error says meeting is inactive then destroy the meeting object\n LoggerProxy.logger.error(\n `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n declineMeeting: (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason,\n }),\n\n isUserInLeftState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_,\n\n isUserInIdleState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_,\n\n isUserInJoinedState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_,\n\n isMediaEstablished: (currentMediaStatus) =>\n currentMediaStatus &&\n (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share),\n\n joinMeetingOptions: (meeting, options: any = {}) => {\n const webex = meeting.getWebexObject();\n\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (meeting.requiredCaptcha) {\n return Promise.reject(new CaptchaError());\n }\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n return Promise.reject(new PasswordError());\n }\n\n if (options.pin) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.collected',\n options: {\n meetingId: meeting.id,\n },\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.prompt',\n options: {\n meetingId: meeting.id,\n },\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error(\n 'Meeting:util#joinMeetingOptions --> Error joining the call, ',\n err\n );\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n },\n\n /**\n * Returns request options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} request options\n */\n buildLeaveFetchRequestOptions: (meeting, options: any = {}) => {\n const leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, options);\n\n return meeting.meetingRequest.buildLeaveMeetingRequestOptions(leaveOptions);\n },\n\n getTrack: (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n },\n\n getModeratorFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator,\n\n getPolicyFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy,\n\n getUserDisplayHintsFromLocusInfo: (locusInfo) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [],\n\n canInviteNewParticipants: (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST),\n\n canAdmitParticipant: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN),\n\n canUserLock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED),\n\n canUserUnlock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED),\n\n canUserRaiseHand: (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND),\n\n canUserLowerAllHands: (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS),\n\n canUserLowerSomeoneElsesHand: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND),\n\n bothLeaveAndEndMeetingAvailable: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING),\n\n canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),\n canBroadcastMessageToBreakout: (displayHints, policies = {}) =>\n displayHints.includes(DISPLAY_HINTS.BROADCAST_MESSAGE_TO_BREAKOUT) &&\n !!policies[SELF_POLICY.SUPPORT_BROADCAST_MESSAGE],\n\n isSuppressBreakoutSupport: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT),\n\n canAdmitLobbyToBreakout: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT),\n\n isBreakoutPreassignmentsEnabled: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS),\n\n canUserAskForHelp: (displayHints) => !displayHints.includes(DISPLAY_HINTS.DISABLE_ASK_FOR_HELP),\n\n lockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canLock) {\n return request.lockMeeting({locusUrl, lock: true});\n }\n\n return Promise.reject(new PermissionError('Lock not allowed, due to joined property.'));\n },\n\n unlockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canUnlock) {\n return request.lockMeeting({locusUrl, lock: false});\n }\n\n return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));\n },\n\n handleAudioLogging: (audioStream?: LocalMicrophoneStream) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioStream) {\n const settings = audioStream.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleVideoLogging: (videoStream?: LocalCameraStream) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoStream) {\n const settings = videoStream.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleDeviceLogging: (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n },\n\n endMeetingForAll: (meeting) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const endOptions = {\n locusUrl: meeting.locusUrl,\n };\n\n return meeting.meetingRequest\n .endMeetingForAll(endOptions)\n .then(() => MeetingUtil.cleanUp(meeting))\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n canEnableClosedCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START),\n\n isSaveTranscriptsEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED),\n\n canStartTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START),\n\n canStopTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP),\n\n isClosedCaptionActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE),\n\n isWebexAssistantActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE),\n\n canViewCaptionPanel: (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL),\n\n isRealTimeTranslationEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION),\n\n canSelectSpokenLanguages: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR),\n\n waitingForOthersToJoin: (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS),\n\n canSendReactions: (originalValue, displayHints) => {\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {\n return true;\n }\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {\n return false;\n }\n\n return originalValue;\n },\n canUserRenameSelfAndObserved: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED),\n\n canUserRenameOthers: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS),\n\n canShareWhiteBoard: (displayHints) => displayHints.includes(DISPLAY_HINTS.SHARE_WHITEBOARD),\n\n /**\n * Adds the current locus sequence information to a request body\n * @param {Object} meeting The meeting object\n * @param {Object} requestBody The body of a request to locus\n * @returns {void}\n */\n addSequence: (meeting, requestBody) => {\n const sequence = meeting?.locusInfo?.sequence;\n\n if (!sequence) {\n return;\n }\n\n requestBody.sequence = sequence;\n },\n\n /**\n * Updates the locus info for the meeting with the delta locus\n * returned from requests that include the sequence information\n * Returns the original response object\n * @param {Object} meeting The meeting object\n * @param {Object} response The response of the http request\n * @returns {Object}\n */\n updateLocusWithDelta: (meeting, response) => {\n if (!meeting) {\n return response;\n }\n\n const locus = response?.body?.locus;\n\n if (locus) {\n meeting.locusInfo.handleLocusDelta(locus, meeting);\n }\n\n return response;\n },\n\n generateBuildLocusDeltaRequestOptions: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const buildLocusDeltaRequestOptions = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return originalOptions;\n }\n\n const options = cloneDeep(originalOptions);\n\n if (!options.body) {\n options.body = {};\n }\n\n MeetingUtil.addSequence(meeting, options.body);\n\n return options;\n };\n\n return buildLocusDeltaRequestOptions;\n },\n\n generateLocusDeltaRequest: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const buildLocusDeltaRequestOptions =\n MeetingUtil.generateBuildLocusDeltaRequestOptions(originalMeeting);\n\n const locusDeltaRequest = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return Promise.resolve();\n }\n\n const options = buildLocusDeltaRequestOptions(originalOptions);\n\n return meeting\n .request(options)\n .then((response) => MeetingUtil.updateLocusWithDelta(meeting, response));\n };\n\n return locusDeltaRequest;\n },\n\n selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record<SELF_POLICY, boolean>) => {\n if (!userPolicies) {\n return true;\n }\n\n return userPolicies[feature];\n },\n\n parseInterpretationInfo: (meeting, meetingInfo) => {\n if (!meeting || !meetingInfo) {\n return;\n }\n const siInfo = meetingInfo.simultaneousInterpretation;\n meeting.simultaneousInterpretation.updateMeetingSIEnabled(\n !!meetingInfo.turnOnSimultaneousInterpretation,\n !!siInfo?.currentSIInterpreter\n );\n const hostSIEnabled = !!(\n meetingInfo.turnOnSimultaneousInterpretation &&\n meetingInfo?.meetingSiteSetting?.enableHostInterpreterControlSI\n );\n meeting.simultaneousInterpretation.updateHostSIEnabled(hostSIEnabled);\n\n function renameKey(obj, oldKey, newKey) {\n if (oldKey in obj) {\n obj[newKey] = obj[oldKey];\n delete obj[oldKey];\n }\n }\n if (siInfo) {\n const lanuagesInfo = cloneDeep(siInfo.siLanguages);\n for (const language of lanuagesInfo) {\n renameKey(language, 'languageCode', 'languageName');\n renameKey(language, 'languageGroupId', 'languageCode');\n }\n if (!meeting.simultaneousInterpretation?.siLanguages?.length) {\n meeting.simultaneousInterpretation.updateInterpretation({siLanguages: lanuagesInfo});\n }\n }\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'parseInterpretationInfo',\n },\n EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE\n );\n },\n\n /**\n * Returns a CA-recognized error payload for the specified raw error message/reason.\n *\n * New errors can be added to this function for handling in the future\n *\n * @param {String} reason the raw error message\n * @returns {Array<object>} an array of payload objects\n */\n getChangeMeetingFloorErrorPayload: (reason: string) => {\n const errorPayload = {\n errorDescription: reason,\n name: 'locus.response',\n shownToUser: false,\n };\n if (reason.includes(LOCAL_SHARE_ERRORS.UNDEFINED)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 1100,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.DEVICE_NOT_JOINED)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 4050,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.NO_MEDIA_FOR_DEVICE)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'media',\n errorCode: 2048,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.NO_CONFLUENCE_ID)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 4064,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.CONTENT_SHARING_DISABLED)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'expected',\n errorCode: 4065,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.LOCUS_PARTICIPANT_DNE)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 4066,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.CONTENT_REQUEST_WHILE_PENDING_WHITEBOARD)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'expected',\n errorCode: 4067,\n },\n ];\n }\n\n // return unknown error\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 1100,\n },\n ];\n },\n};\n\nexport default MeetingUtil;\n"],"mappings":"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"}
|
|
@@ -1065,6 +1065,15 @@ export declare const IP_VERSION: {
|
|
|
1065
1065
|
readonly only_ipv6: 6;
|
|
1066
1066
|
readonly ipv4_and_ipv6: 1;
|
|
1067
1067
|
};
|
|
1068
|
+
export declare const LOCAL_SHARE_ERRORS: {
|
|
1069
|
+
DEVICE_NOT_JOINED: string;
|
|
1070
|
+
UNDEFINED: string;
|
|
1071
|
+
NO_MEDIA_FOR_DEVICE: string;
|
|
1072
|
+
NO_CONFLUENCE_ID: string;
|
|
1073
|
+
CONTENT_SHARING_DISABLED: string;
|
|
1074
|
+
LOCUS_PARTICIPANT_DNE: string;
|
|
1075
|
+
CONTENT_REQUEST_WHILE_PENDING_WHITEBOARD: string;
|
|
1076
|
+
};
|
|
1068
1077
|
export type IP_VERSION = Enum<typeof IP_VERSION>;
|
|
1069
1078
|
export declare const MEETING_PERMISSION_TOKEN_REFRESH_THRESHOLD_IN_SEC = 30;
|
|
1070
1079
|
export declare const MEETING_PERMISSION_TOKEN_REFRESH_REASON = "ttl-join";
|
|
@@ -414,6 +414,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
414
414
|
environment: string;
|
|
415
415
|
namespace: string;
|
|
416
416
|
allowMediaInLobby: boolean;
|
|
417
|
+
localShareInstanceId: string;
|
|
418
|
+
remoteShareInstanceId: string;
|
|
417
419
|
turnDiscoverySkippedReason: string;
|
|
418
420
|
turnServerUsed: boolean;
|
|
419
421
|
private retriedWithTurnServer;
|
|
@@ -98,5 +98,21 @@ declare const MeetingUtil: {
|
|
|
98
98
|
generateLocusDeltaRequest: (originalMeeting: any) => (originalOptions: any) => any;
|
|
99
99
|
selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record<SELF_POLICY, boolean>) => boolean;
|
|
100
100
|
parseInterpretationInfo: (meeting: any, meetingInfo: any) => void;
|
|
101
|
+
/**
|
|
102
|
+
* Returns a CA-recognized error payload for the specified raw error message/reason.
|
|
103
|
+
*
|
|
104
|
+
* New errors can be added to this function for handling in the future
|
|
105
|
+
*
|
|
106
|
+
* @param {String} reason the raw error message
|
|
107
|
+
* @returns {Array<object>} an array of payload objects
|
|
108
|
+
*/
|
|
109
|
+
getChangeMeetingFloorErrorPayload: (reason: string) => {
|
|
110
|
+
fatal: boolean;
|
|
111
|
+
category: string;
|
|
112
|
+
errorCode: number;
|
|
113
|
+
errorDescription: string;
|
|
114
|
+
name: string;
|
|
115
|
+
shownToUser: boolean;
|
|
116
|
+
}[];
|
|
101
117
|
};
|
|
102
118
|
export default MeetingUtil;
|
package/dist/webinar/index.js
CHANGED
|
@@ -62,7 +62,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
62
62
|
updateCanManageWebcast: function updateCanManageWebcast(canManageWebcast) {
|
|
63
63
|
this.set('canManageWebcast', canManageWebcast);
|
|
64
64
|
},
|
|
65
|
-
version: "3.0.0-beta.
|
|
65
|
+
version: "3.0.0-beta.362"
|
|
66
66
|
});
|
|
67
67
|
var _default = Webinar;
|
|
68
68
|
exports.default = _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/plugin-meetings",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.362",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
|
|
6
6
|
"contributors": [
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@peculiar/webcrypto": "^1.4.3",
|
|
36
|
-
"@webex/plugin-meetings": "3.0.0-beta.
|
|
37
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
38
|
-
"@webex/test-helper-mocha": "3.0.0-beta.
|
|
39
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
40
|
-
"@webex/test-helper-retry": "3.0.0-beta.
|
|
41
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
36
|
+
"@webex/plugin-meetings": "3.0.0-beta.362",
|
|
37
|
+
"@webex/test-helper-chai": "3.0.0-beta.362",
|
|
38
|
+
"@webex/test-helper-mocha": "3.0.0-beta.362",
|
|
39
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.362",
|
|
40
|
+
"@webex/test-helper-retry": "3.0.0-beta.362",
|
|
41
|
+
"@webex/test-helper-test-users": "3.0.0-beta.362",
|
|
42
42
|
"chai": "^4.3.4",
|
|
43
43
|
"chai-as-promised": "^7.1.1",
|
|
44
44
|
"jsdom-global": "3.0.2",
|
|
@@ -47,19 +47,19 @@
|
|
|
47
47
|
"typescript": "^4.7.4"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@webex/common": "3.0.0-beta.
|
|
50
|
+
"@webex/common": "3.0.0-beta.362",
|
|
51
51
|
"@webex/internal-media-core": "2.2.7",
|
|
52
|
-
"@webex/internal-plugin-conversation": "3.0.0-beta.
|
|
53
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
54
|
-
"@webex/internal-plugin-llm": "3.0.0-beta.
|
|
55
|
-
"@webex/internal-plugin-mercury": "3.0.0-beta.
|
|
56
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
57
|
-
"@webex/internal-plugin-support": "3.0.0-beta.
|
|
58
|
-
"@webex/internal-plugin-user": "3.0.0-beta.
|
|
59
|
-
"@webex/media-helpers": "3.0.0-beta.
|
|
60
|
-
"@webex/plugin-people": "3.0.0-beta.
|
|
61
|
-
"@webex/plugin-rooms": "3.0.0-beta.
|
|
62
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
52
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.362",
|
|
53
|
+
"@webex/internal-plugin-device": "3.0.0-beta.362",
|
|
54
|
+
"@webex/internal-plugin-llm": "3.0.0-beta.362",
|
|
55
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.362",
|
|
56
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.362",
|
|
57
|
+
"@webex/internal-plugin-support": "3.0.0-beta.362",
|
|
58
|
+
"@webex/internal-plugin-user": "3.0.0-beta.362",
|
|
59
|
+
"@webex/media-helpers": "3.0.0-beta.362",
|
|
60
|
+
"@webex/plugin-people": "3.0.0-beta.362",
|
|
61
|
+
"@webex/plugin-rooms": "3.0.0-beta.362",
|
|
62
|
+
"@webex/webex-core": "3.0.0-beta.362",
|
|
63
63
|
"ampersand-collection": "^2.0.2",
|
|
64
64
|
"bowser": "^2.11.0",
|
|
65
65
|
"btoa": "^1.2.1",
|
package/src/constants.ts
CHANGED
|
@@ -1293,6 +1293,16 @@ export const IP_VERSION = {
|
|
|
1293
1293
|
ipv4_and_ipv6: 1,
|
|
1294
1294
|
} as const;
|
|
1295
1295
|
|
|
1296
|
+
export const LOCAL_SHARE_ERRORS = {
|
|
1297
|
+
DEVICE_NOT_JOINED: 'Floor requested but device not yet joined',
|
|
1298
|
+
UNDEFINED: 'undefined PUT',
|
|
1299
|
+
NO_MEDIA_FOR_DEVICE: 'No media session found for device',
|
|
1300
|
+
NO_CONFLUENCE_ID: 'Failed to request floor: 404 (null) could not find confluence id',
|
|
1301
|
+
CONTENT_SHARING_DISABLED: 'Content share policies are disabled',
|
|
1302
|
+
LOCUS_PARTICIPANT_DNE: 'does not exist in Locus',
|
|
1303
|
+
CONTENT_REQUEST_WHILE_PENDING_WHITEBOARD:
|
|
1304
|
+
'Content share request is not allowed while whiteboard floor request is pending',
|
|
1305
|
+
};
|
|
1296
1306
|
export type IP_VERSION = Enum<typeof IP_VERSION>;
|
|
1297
1307
|
|
|
1298
1308
|
// constant for if the permissionToken is about to expire in the next 30 seconds, refresh it
|
package/src/meeting/index.ts
CHANGED
|
@@ -585,6 +585,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
585
585
|
environment: string;
|
|
586
586
|
namespace = MEETINGS;
|
|
587
587
|
allowMediaInLobby: boolean;
|
|
588
|
+
localShareInstanceId: string;
|
|
589
|
+
remoteShareInstanceId: string;
|
|
588
590
|
turnDiscoverySkippedReason: string;
|
|
589
591
|
turnServerUsed: boolean;
|
|
590
592
|
private retriedWithTurnServer: boolean;
|
|
@@ -1239,6 +1241,24 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1239
1241
|
*/
|
|
1240
1242
|
this.keepAliveTimerId = null;
|
|
1241
1243
|
|
|
1244
|
+
/**
|
|
1245
|
+
* id for tracking Local Share instances in Call Analyzer
|
|
1246
|
+
* @instance
|
|
1247
|
+
* @type {String}
|
|
1248
|
+
* @private
|
|
1249
|
+
* @memberof Meeting
|
|
1250
|
+
*/
|
|
1251
|
+
this.localShareInstanceId = null;
|
|
1252
|
+
|
|
1253
|
+
/**
|
|
1254
|
+
* id for tracking Remote Share instances in Call Analyzer
|
|
1255
|
+
* @instance
|
|
1256
|
+
* @type {String}
|
|
1257
|
+
* @private
|
|
1258
|
+
* @memberof Meeting
|
|
1259
|
+
*/
|
|
1260
|
+
this.remoteShareInstanceId = null;
|
|
1261
|
+
|
|
1242
1262
|
/**
|
|
1243
1263
|
* The class that helps to control recording functions: start, stop, pause, resume, etc
|
|
1244
1264
|
* @instance
|
|
@@ -2508,6 +2528,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2508
2528
|
switch (newShareStatus) {
|
|
2509
2529
|
case SHARE_STATUS.REMOTE_SHARE_ACTIVE: {
|
|
2510
2530
|
const sendStartedSharingRemote = () => {
|
|
2531
|
+
this.remoteShareInstanceId = contentShare.shareInstanceId;
|
|
2532
|
+
|
|
2511
2533
|
Trigger.trigger(
|
|
2512
2534
|
this,
|
|
2513
2535
|
{
|
|
@@ -2518,7 +2540,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2518
2540
|
{
|
|
2519
2541
|
memberId: contentShare.beneficiaryId,
|
|
2520
2542
|
url: contentShare.url,
|
|
2521
|
-
shareInstanceId:
|
|
2543
|
+
shareInstanceId: this.remoteShareInstanceId,
|
|
2522
2544
|
annotationInfo: contentShare.annotation,
|
|
2523
2545
|
}
|
|
2524
2546
|
);
|
|
@@ -2555,6 +2577,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2555
2577
|
name: 'client.share.floor-granted.local',
|
|
2556
2578
|
payload: {
|
|
2557
2579
|
mediaType: 'share',
|
|
2580
|
+
shareInstanceId: this.localShareInstanceId,
|
|
2558
2581
|
},
|
|
2559
2582
|
options: {meetingId: this.id},
|
|
2560
2583
|
});
|
|
@@ -2597,6 +2620,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2597
2620
|
} else if (newShareStatus === SHARE_STATUS.REMOTE_SHARE_ACTIVE) {
|
|
2598
2621
|
// if we got here, then some remote participant has stolen
|
|
2599
2622
|
// the presentation from another remote participant
|
|
2623
|
+
this.remoteShareInstanceId = contentShare.shareInstanceId;
|
|
2624
|
+
|
|
2600
2625
|
Trigger.trigger(
|
|
2601
2626
|
this,
|
|
2602
2627
|
{
|
|
@@ -2607,7 +2632,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2607
2632
|
{
|
|
2608
2633
|
memberId: contentShare.beneficiaryId,
|
|
2609
2634
|
url: contentShare.url,
|
|
2610
|
-
shareInstanceId:
|
|
2635
|
+
shareInstanceId: this.remoteShareInstanceId,
|
|
2611
2636
|
annotationInfo: contentShare.annotation,
|
|
2612
2637
|
}
|
|
2613
2638
|
);
|
|
@@ -5706,7 +5731,10 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
5706
5731
|
// @ts-ignore
|
|
5707
5732
|
this.webex.internal.newMetrics.submitClientEvent({
|
|
5708
5733
|
name: 'client.media.tx.start',
|
|
5709
|
-
payload: {
|
|
5734
|
+
payload: {
|
|
5735
|
+
mediaType: data.type,
|
|
5736
|
+
shareInstanceId: data.type === 'share' ? this.localShareInstanceId : undefined,
|
|
5737
|
+
},
|
|
5710
5738
|
options: {
|
|
5711
5739
|
meetingId: this.id,
|
|
5712
5740
|
},
|
|
@@ -5716,7 +5744,10 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
5716
5744
|
// @ts-ignore
|
|
5717
5745
|
this.webex.internal.newMetrics.submitClientEvent({
|
|
5718
5746
|
name: 'client.media.tx.stop',
|
|
5719
|
-
payload: {
|
|
5747
|
+
payload: {
|
|
5748
|
+
mediaType: data.type,
|
|
5749
|
+
shareInstanceId: data.type === 'share' ? this.localShareInstanceId : undefined,
|
|
5750
|
+
},
|
|
5720
5751
|
options: {
|
|
5721
5752
|
meetingId: this.id,
|
|
5722
5753
|
},
|
|
@@ -5735,7 +5766,10 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
5735
5766
|
// @ts-ignore
|
|
5736
5767
|
this.webex.internal.newMetrics.submitClientEvent({
|
|
5737
5768
|
name: 'client.media.rx.start',
|
|
5738
|
-
payload: {
|
|
5769
|
+
payload: {
|
|
5770
|
+
mediaType: data.type,
|
|
5771
|
+
shareInstanceId: data.type === 'share' ? this.remoteShareInstanceId : undefined,
|
|
5772
|
+
},
|
|
5739
5773
|
options: {
|
|
5740
5774
|
meetingId: this.id,
|
|
5741
5775
|
},
|
|
@@ -5745,7 +5779,10 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
5745
5779
|
// @ts-ignore
|
|
5746
5780
|
this.webex.internal.newMetrics.submitClientEvent({
|
|
5747
5781
|
name: 'client.media.rx.stop',
|
|
5748
|
-
payload: {
|
|
5782
|
+
payload: {
|
|
5783
|
+
mediaType: data.type,
|
|
5784
|
+
shareInstanceId: data.type === 'share' ? this.remoteShareInstanceId : undefined,
|
|
5785
|
+
},
|
|
5749
5786
|
options: {
|
|
5750
5787
|
meetingId: this.id,
|
|
5751
5788
|
},
|
|
@@ -6991,11 +7028,14 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
6991
7028
|
if (content && this.shareStatus !== SHARE_STATUS.LOCAL_SHARE_ACTIVE) {
|
|
6992
7029
|
// @ts-ignore
|
|
6993
7030
|
this.webex.internal.newMetrics.submitClientEvent({
|
|
6994
|
-
name: 'client.share.
|
|
7031
|
+
name: 'client.share.floor-grant.request',
|
|
6995
7032
|
payload: {
|
|
6996
7033
|
mediaType: 'share',
|
|
7034
|
+
shareInstanceId: this.localShareInstanceId,
|
|
7035
|
+
},
|
|
7036
|
+
options: {
|
|
7037
|
+
meetingId: this.id,
|
|
6997
7038
|
},
|
|
6998
|
-
options: {meetingId: this.id},
|
|
6999
7039
|
});
|
|
7000
7040
|
|
|
7001
7041
|
return this.meetingRequest
|
|
@@ -7026,6 +7066,19 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
7026
7066
|
stack: error.stack,
|
|
7027
7067
|
});
|
|
7028
7068
|
|
|
7069
|
+
// @ts-ignore
|
|
7070
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
7071
|
+
name: 'client.share.floor-granted.local',
|
|
7072
|
+
payload: {
|
|
7073
|
+
mediaType: 'share',
|
|
7074
|
+
errors: MeetingUtil.getChangeMeetingFloorErrorPayload(error.message),
|
|
7075
|
+
shareInstanceId: this.localShareInstanceId,
|
|
7076
|
+
},
|
|
7077
|
+
options: {
|
|
7078
|
+
meetingId: this.id,
|
|
7079
|
+
},
|
|
7080
|
+
});
|
|
7081
|
+
|
|
7029
7082
|
this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
|
|
7030
7083
|
|
|
7031
7084
|
return Promise.reject(error);
|
|
@@ -7077,6 +7130,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
7077
7130
|
name: 'client.share.stopped',
|
|
7078
7131
|
payload: {
|
|
7079
7132
|
mediaType: 'share',
|
|
7133
|
+
shareInstanceId: this.localShareInstanceId,
|
|
7080
7134
|
},
|
|
7081
7135
|
options: {meetingId: this.id},
|
|
7082
7136
|
});
|
|
@@ -7957,6 +8011,17 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
7957
8011
|
}
|
|
7958
8012
|
|
|
7959
8013
|
if (floorRequestNeeded) {
|
|
8014
|
+
this.localShareInstanceId = uuid.v4();
|
|
8015
|
+
|
|
8016
|
+
// @ts-ignore
|
|
8017
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
8018
|
+
name: 'client.share.initiated',
|
|
8019
|
+
payload: {
|
|
8020
|
+
mediaType: 'share',
|
|
8021
|
+
shareInstanceId: this.localShareInstanceId,
|
|
8022
|
+
},
|
|
8023
|
+
options: {meetingId: this.id},
|
|
8024
|
+
});
|
|
7960
8025
|
// we're sending the http request to Locus to request the screen share floor
|
|
7961
8026
|
// only after the SDP update, because that's how it's always been done for transcoded meetings
|
|
7962
8027
|
// and also if sharing from the start, we need confluence to have been created
|