@webex/plugin-meetings 3.0.0-beta.236 → 3.0.0-beta.237
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 +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +30 -1
- package/dist/meeting/util.js.map +1 -1
- package/dist/reachability/index.js +2 -11
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js.map +1 -1
- package/dist/roap/index.js +2 -1
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/turnDiscovery.js +2 -1
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/types/meeting/request.d.ts +1 -1
- package/dist/types/meeting/util.d.ts +9 -1
- package/dist/types/reachability/index.d.ts +0 -6
- package/dist/types/reachability/request.d.ts +1 -1
- package/package.json +19 -19
- package/src/constants.ts +2 -2
- package/src/meeting/request.ts +1 -1
- package/src/meeting/util.ts +35 -1
- package/src/reachability/index.ts +4 -10
- package/src/reachability/request.ts +1 -1
- package/src/roap/index.ts +2 -1
- package/src/roap/turnDiscovery.ts +2 -1
- package/test/unit/spec/meeting/index.js +3 -1
- package/test/unit/spec/meeting/utils.js +53 -3
- package/test/unit/spec/reachability/index.ts +8 -8
- package/test/unit/spec/roap/index.ts +5 -1
- package/test/unit/spec/roap/turnDiscovery.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MeetingRequest","attrs","options","meeting","otherAttrs","webex","boundedStorage","get","REACHABILITY","namespace","localStorageJoinCookie","catch","joinCookieRaw","joinCookie","JSON","parse","LoggerProxy","logger","error","locusDeltaRequest","MeetingUtil","generateLocusDeltaRequest","buildLocusDeltaRequestOptions","generateBuildLocusDeltaRequestOptions","changeVideoLayoutDebounced","changeVideoLayout","leading","trailing","asResourceOccupant","inviteeAddress","meetingNumber","permissionToken","deviceUrl","locusUrl","locusClusterUrl","resourceId","correlationId","ensureConversation","moderator","pin","moveToResource","roapMessage","preferTranscoding","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","ipVersion","info","url","getJoinCookie","body","device","deviceType","config","meetings","usingResource","moveMediaToResource","respOnlySdp","allowMultiDevice","supportsNativeLobby","clientMediaPreferences","ipver","push","BREAKOUTS","BREAKOUTS_SUPPORTED","ANNOTATION","ANNOTATION_ON_SHARE_SUPPORTED","length","geoHintInfo","countryCode","regionCode","undefined","PARTICIPANT","clusterUrl","internal","services","waitForCatalog","LOCI","CALL","invitee","address","concat","ALTERNATE_REDIRECT_TRUE","callPreferences","requestedMedia","_SLIDES_","localMedias","request","method","HTTP_VERBS","POST","uri","captchaRefreshUrl","captchaId","err","dialInUrl","clientUrl","PROVISIONAL","provisionalType","PROVISIONAL_TYPE_DIAL_IN","dialOutUrl","phoneNumber","PROVISIONAL_TYPE_DIAL_OUT","dialoutAddress","GET","reject","phoneUrl","selfId","LEAVE","PUT","prepareLeaveMeetingRequestOptions","ALERT","CONTROLS","lock","locked","PATCH","DECLINE","reason","floorReq","disposition","FLOOR_ACTION","GRANTED","beneficiary","personUrl","devices","requester","floor","resourceUrl","resourceToken","annotationInfo","annotation","tones","SEND_DTMF_ENDPOINT","dtmf","uuid","v4","layoutType","main","content","width","height","Error","renderInfoMain","renderInfoContent","layoutParams","renderInfo","layout","type","END","keepAliveUrl","reactionChannelUrl","reaction","participantId","sender","enable","requestingParticipantId","reactions","enabled","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {debounce} from 'lodash';\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n// @ts-ignore\nimport {deviceType} from '@webex/common';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n ALERT,\n ALTERNATE_REDIRECT_TRUE,\n BREAKOUTS,\n CALL,\n CONTROLS,\n DECLINE,\n END,\n FLOOR_ACTION,\n HTTP_VERBS,\n LEAVE,\n LOCI,\n PARTICIPANT,\n PROVISIONAL_TYPE_DIAL_IN,\n PROVISIONAL_TYPE_DIAL_OUT,\n REACHABILITY,\n SEND_DTMF_ENDPOINT,\n _SLIDES_,\n ANNOTATION,\n IP_VERSION,\n} from '../constants';\nimport {SendReactionOptions, ToggleReactionsOptions} from './request.type';\nimport MeetingUtil from './util';\nimport {AnnotationInfo} from '../annotation/annotation.types';\n\n/**\n * @class MeetingRequest\n */\nexport default class MeetingRequest extends StatelessWebexPlugin {\n changeVideoLayoutDebounced: any;\n meetingRef: WeakRef<any>;\n locusDeltaRequest: (options: object) => Promise<any>;\n buildLocusDeltaRequestOptions: (options: object) => Promise<any>;\n\n /**\n * Constructor\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n const {meeting, ...otherAttrs} = attrs;\n\n super(otherAttrs, options);\n\n this.locusDeltaRequest = MeetingUtil.generateLocusDeltaRequest(meeting);\n this.buildLocusDeltaRequestOptions = MeetingUtil.generateBuildLocusDeltaRequestOptions(meeting);\n\n this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {\n leading: true,\n trailing: true,\n });\n }\n\n /**\n * Returns joinCookie from boundedStorage if present.\n * @returns {Object} joinCookie\n */\n private getJoinCookie = async () => {\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n const joinCookie = JSON.parse(joinCookieRaw);\n if (joinCookie) {\n return joinCookie;\n }\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return null;\n };\n\n /**\n * Make a network request to join a meeting\n * @param {Object} options\n * @param {String} options.sipUri\n * @param {String} options.deviceUrl\n * @param {String} options.locusUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @param {boolean} options.ensureConversation\n * @param {boolean} options.moderator\n * @param {boolean} options.pin\n * @param {boolean} options.moveToResource\n * @param {Object} options.roapMessage\n * @param {boolean} options.breakoutsSupported\n * @param {String} options.locale,\n * @param {Array} options.deviceCapabilities\n * @param {boolean} options.liveAnnotationSupported\n * @returns {Promise}\n */\n async joinMeeting(options: {\n sipUri: string;\n deviceUrl: string;\n locusUrl: string;\n locusClusterUrl: string;\n resourceId: string;\n correlationId: string;\n ensureConversation: boolean;\n moderator: boolean;\n pin: boolean;\n moveToResource: boolean;\n roapMessage: any;\n asResourceOccupant: any;\n inviteeAddress: any;\n meetingNumber: any;\n permissionToken: any;\n preferTranscoding: any;\n breakoutsSupported: boolean;\n locale?: string;\n deviceCapabilities?: Array<string>;\n liveAnnotationSupported: boolean;\n ipVersion: IP_VERSION;\n }) {\n const {\n asResourceOccupant,\n inviteeAddress,\n meetingNumber,\n permissionToken,\n deviceUrl,\n locusUrl,\n locusClusterUrl,\n resourceId,\n correlationId,\n ensureConversation,\n moderator,\n pin,\n moveToResource,\n roapMessage,\n preferTranscoding,\n breakoutsSupported,\n locale,\n deviceCapabilities = [],\n liveAnnotationSupported,\n ipVersion,\n } = options;\n\n LoggerProxy.logger.info('Meeting:request#joinMeeting --> Joining a meeting', correlationId);\n\n let url = '';\n\n const joinCookie = await this.getJoinCookie();\n\n const body: any = {\n asResourceOccupant,\n device: {\n url: deviceUrl,\n // @ts-ignore - config comes from registerPlugin\n deviceType: this.config.meetings.deviceType,\n },\n usingResource: resourceId || null,\n moveMediaToResource: (resourceId && moveToResource) || false,\n correlationId,\n respOnlySdp: true,\n allowMultiDevice: true,\n ensureConversation: ensureConversation || false,\n supportsNativeLobby: 1,\n clientMediaPreferences: {\n preferTranscoding: preferTranscoding ?? true,\n joinCookie,\n ipver: ipVersion,\n },\n };\n\n if (breakoutsSupported) {\n deviceCapabilities.push(BREAKOUTS.BREAKOUTS_SUPPORTED);\n }\n if (liveAnnotationSupported) {\n deviceCapabilities.push(ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED);\n }\n\n if (locale) {\n body.locale = locale;\n }\n\n // add deviceCapabilities prop\n if (deviceCapabilities.length) {\n body.deviceCapabilities = deviceCapabilities;\n }\n // @ts-ignore\n if (this.webex.meetings.geoHintInfo) {\n // @ts-ignore\n body.device.countryCode = this.webex.meetings.geoHintInfo.countryCode;\n // @ts-ignore\n body.device.regionCode = this.webex.meetings.geoHintInfo.regionCode;\n }\n\n if (moderator !== undefined) {\n body.moderator = moderator;\n }\n\n if (permissionToken) {\n body.permissionToken = permissionToken;\n }\n\n if (pin !== undefined) {\n body.pin = pin;\n }\n\n if (locusUrl) {\n url = `${locusUrl}/${PARTICIPANT}`;\n } else if (inviteeAddress || meetingNumber) {\n try {\n let clusterUrl;\n\n if (locusClusterUrl) {\n clusterUrl = `https://${locusClusterUrl}/locus/api/v1`;\n } else {\n // @ts-ignore\n await this.webex.internal.services.waitForCatalog('postauth');\n // @ts-ignore\n clusterUrl = this.webex.internal.services.get('locus');\n }\n\n url = `${clusterUrl}/${LOCI}/${CALL}`;\n body.invitee = {\n address: inviteeAddress || `wbxmn:${meetingNumber}`,\n };\n } catch (e) {\n LoggerProxy.logger.error(\n `Meeting:request#joinMeeting Error Joining ${inviteeAddress || meetingNumber} --> ${e}`\n );\n throw e;\n }\n }\n\n // TODO: -- this will be resolved in SDK request\n url = url.concat(`?${ALTERNATE_REDIRECT_TRUE}`);\n\n if (resourceId === inviteeAddress) {\n body.callPreferences = {\n requestedMedia: [_SLIDES_],\n };\n }\n\n if (roapMessage) {\n body.localMedias = roapMessage.localMedias;\n }\n\n /// @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: url,\n body,\n });\n }\n\n /**\n * Send a request to refresh the captcha\n * @param {Object} options\n * @param {String} options.captchaRefreshUrl\n * @param {String} options.captchaId\n * @returns {Promise}\n * @private\n */\n private refreshCaptcha({\n captchaRefreshUrl,\n captchaId,\n }: {\n captchaRefreshUrl: string;\n captchaId: string;\n }) {\n const body = {\n captchaId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: captchaRefreshUrl,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(`Meeting:request#refreshCaptcha --> Error: ${err}`);\n\n throw err;\n });\n }\n\n /**\n * Make a network request to add a dial in device\n * @param {Object} options\n * @param {String} options.correlationId\n * @param {String} options.locusUrl url for the meeting\n * @param {String} options.dialInUrl identifier for the to-be provisioned device\n * @param {String} options.clientUrl identifier for the web device\n * @returns {Promise}\n * @private\n */\n private dialIn({\n locusUrl,\n dialInUrl,\n clientUrl,\n correlationId,\n }: {\n correlationId: string;\n locusUrl: string;\n dialInUrl: string;\n clientUrl: string;\n }) {\n LoggerProxy.logger.info(\n 'Meeting:request#dialIn --> Provisioning a dial in device',\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n provisionalType: PROVISIONAL_TYPE_DIAL_IN,\n url: dialInUrl,\n clientUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#dialIn --> Error provisioning a dial in device, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Make a network request to add a dial out device\n * @param {Object} options\n * @param {String} options.correlationId\n * @param {String} options.locusUrl url for the meeting\n * @param {String} options.dialOutUrl identifier for the to-be provisioned device\n * @param {String} options.phoneNumber phone number to dial out to\n * @param {String} options.clientUrl identifier for the web device\n * @returns {Promise}\n * @private\n */\n private dialOut({\n locusUrl,\n dialOutUrl,\n phoneNumber,\n clientUrl,\n correlationId,\n }: {\n correlationId: string;\n locusUrl: string;\n dialOutUrl: string;\n phoneNumber: string;\n clientUrl: string;\n }) {\n LoggerProxy.logger.info(\n 'Meeting:request#dialOut --> Provisioning a dial out device',\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n provisionalType: PROVISIONAL_TYPE_DIAL_OUT,\n url: dialOutUrl,\n dialoutAddress: phoneNumber,\n clientUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#dialOut --> Error provisioning a dial out device, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Sends a requests to get the latest locus DTO, it might be a full Locus or a delta, depending on the url provided\n * @param {Object} options\n * @param {String} options.locusUrl sync url to get ht elatest locus delta\n * @returns {Promise}\n */\n getLocusDTO(options: {url: string}) {\n const {url} = options;\n\n if (url) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: url,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#getLocusDTO --> Error getting latest locus, error ${err}`\n );\n\n return err;\n });\n }\n\n return Promise.reject();\n }\n\n /**\n * Make a network request to make a provisioned phone leave the meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.phoneUrl\n * @param {String} options.correlationId\n * @param {String} options.selfId\n * @returns {Promise}\n * @private\n */\n private disconnectPhoneAudio({\n locusUrl,\n phoneUrl,\n correlationId,\n selfId,\n }: {\n locusUrl: string;\n phoneUrl: string;\n correlationId: string;\n selfId: string;\n }) {\n LoggerProxy.logger.info(\n `Meeting:request#disconnectPhoneAudio --> request phone ${phoneUrl} to leave`,\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n url: phoneUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#disconnectPhoneAudio --> Error when requesting phone ${phoneUrl} to leave, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Prepares request options to to leave a meeting\n * @param {Object} options\n * @param {Url} options.locusUrl\n * @param {String} options.selfId\n * @param {Url} options.deviceUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @returns {Object} request options\n */\n prepareLeaveMeetingRequestOptions({\n locusUrl,\n selfId,\n deviceUrl: url,\n resourceId,\n correlationId,\n }: {\n locusUrl: string;\n selfId: string;\n deviceUrl: string;\n resourceId: string;\n correlationId: string;\n }) {\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url,\n },\n usingResource: resourceId || null,\n correlationId,\n };\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n }\n\n /**\n * Make a network request to leave a meeting\n * @param {Object} options\n * @returns {Promise}\n */\n leaveMeeting({\n locusUrl,\n selfId,\n deviceUrl: url,\n resourceId,\n correlationId,\n }: {\n locusUrl: string;\n selfId: string;\n deviceUrl: string;\n resourceId: string;\n correlationId: string;\n }) {\n LoggerProxy.logger.info('Meeting:request#leaveMeeting --> Leaving a meeting', correlationId);\n\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url,\n },\n usingResource: resourceId || null,\n correlationId,\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * Builds request options to leave a meeting\n * @param {Object} options\n * @returns {Object} request options\n */\n buildLeaveMeetingRequestOptions(options: any) {\n return this.buildLocusDeltaRequestOptions(this.prepareLeaveMeetingRequestOptions(options));\n }\n\n /**\n * Make a network request to acknowledge a meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.correlationId\n * @returns {Promise}\n */\n acknowledgeMeeting(options: {locusUrl: string; deviceUrl: string; correlationId: string}) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${ALERT}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n correlationId: options.correlationId,\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * Makes a network request to lock the meeting\n * @param {Object} options\n * @param {Boolean} options.lock Whether it is locked or not\n * @returns {Promise}\n */\n lockMeeting(options) {\n const uri = `${options.locusUrl}/${CONTROLS}`;\n const body = {\n lock: {\n locked: options.lock,\n },\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n });\n }\n\n /**\n * Make a network request to decline a meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.reason\n * @returns {Promise}\n */\n declineMeeting(options: {locusUrl: string; deviceUrl: string; reason: string}) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${DECLINE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n ...(options.reason && {reason: options.reason}),\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * change the content floor grant\n * @param {Object} options options for floor grant\n * @param {String} options.disposition floor action (granted/released)\n * @param {String} options.personUrl personUrl who is requesting floor\n * @param {String} options.deviceUrl Url of a device\n * @param {String} options.resourceId Populated if you are paired to a device\n * @param {String} options.uri floor grant uri\n * @returns {Promise}\n */\n changeMeetingFloor(\n options:\n | {\n disposition: string;\n personUrl: string;\n deviceUrl: string;\n resourceId: string;\n uri: string;\n annotationInfo: AnnotationInfo;\n }\n | any\n ) {\n let floorReq: any = {disposition: options.disposition};\n\n /* istanbul ignore else */\n if (options.disposition === FLOOR_ACTION.GRANTED) {\n floorReq = {\n beneficiary: {\n url: options.personUrl,\n devices: [\n {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n ],\n },\n disposition: options.disposition,\n requester: {\n url: options.personUrl,\n },\n };\n }\n\n const body: any = {\n floor: floorReq,\n resourceUrl: options.resourceUrl,\n };\n\n if (options?.resourceToken) {\n body.resourceToken = options?.resourceToken;\n }\n if (options?.annotationInfo) {\n body.annotation = options?.annotationInfo;\n }\n\n // @ts-ignore\n return this.request({\n uri: options.uri,\n method: HTTP_VERBS.PUT,\n body,\n });\n }\n\n /**\n * Sends a request to the DTMF endpoint to send tones\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.tones a string of one or more DTMF tones to send\n * @returns {Promise}\n */\n sendDTMF({locusUrl, deviceUrl, tones}: {locusUrl: string; deviceUrl: string; tones: string}) {\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri: `${locusUrl}/${SEND_DTMF_ENDPOINT}`,\n body: {\n deviceUrl,\n dtmf: {\n correlationId: uuid.v4(),\n tones,\n },\n },\n });\n }\n\n /**\n * Sends a request to the controls endpoint to set the video layout\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.layoutType a layout type that should be available in meeting constants {@link #layout_types}\n * @param {Object} options.main preferred dimensions for the remote main video stream\n * @param {Number} options.main.width preferred width of main video stream\n * @param {Number} options.main.height preferred height of main video stream\n * @param {Object} options.content preferred dimensions for the remote content share stream\n * @param {Number} options.content.width preferred width of content share stream\n * @param {Number} options.content.height preferred height of content share stream\n * @returns {Promise}\n */\n changeVideoLayout({\n locusUrl,\n deviceUrl,\n layoutType,\n main,\n content,\n }: {\n locusUrl: string;\n deviceUrl: string;\n layoutType: string;\n main: {\n width: number;\n height: number;\n };\n content: {\n width: number;\n height: number;\n };\n }) {\n // send main/content renderInfo only if both width and height are specified\n if (main && (!main.width || !main.height)) {\n return Promise.reject(\n new Error(\n `Both width and height must be specified. One of them is missing for main: ${JSON.stringify(\n main\n )}`\n )\n );\n }\n\n if (content && (!content.width || !content.height)) {\n return Promise.reject(\n new Error(\n `Both width and height must be specified. One of them is missing for content: ${JSON.stringify(\n content\n )}`\n )\n );\n }\n\n const renderInfoMain = main ? {width: main.width, height: main.height} : undefined;\n const renderInfoContent = content ? {width: content.width, height: content.height} : undefined;\n\n const layoutParams =\n renderInfoMain || renderInfoContent\n ? {\n renderInfo: {\n main: renderInfoMain,\n content: renderInfoContent,\n },\n }\n : undefined;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri: `${locusUrl}/${CONTROLS}`,\n body: {\n layout: {\n deviceUrl,\n type: layoutType,\n layoutParams,\n },\n },\n });\n }\n\n /**\n * Make a network request to end meeting for all\n * @param {Object} options\n * @param {Url} options.locusUrl\n * @returns {Promise}\n */\n endMeetingForAll({locusUrl}: {locusUrl: string}) {\n const uri = `${locusUrl}/${END}`;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n });\n }\n\n /**\n * Send a locus keepAlive (used in lobby)\n * @param {Object} options\n * @param {Url} options.keepAliveUrl\n * @returns {Promise}\n */\n keepAlive({keepAliveUrl}: {keepAliveUrl: string}) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: keepAliveUrl,\n });\n }\n\n /**\n * Make a network request to send a reaction.\n * @param {Object} options\n * @param {Url} options.reactionChannelUrl\n * @param {Reaction} options.reaction\n * @param {string} options.senderID\n * @returns {Promise}\n */\n sendReaction({reactionChannelUrl, reaction, participantId}: SendReactionOptions) {\n const uri = reactionChannelUrl;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n body: {\n sender: {participantId},\n reaction,\n },\n });\n }\n\n /**\n * Make a network request to enable or disable reactions.\n * @param {boolean} options.enable - determines if we need to enable or disable.\n * @param {locusUrl} options.locusUrl\n * @returns {Promise}\n */\n toggleReactions({enable, locusUrl, requestingParticipantId}: ToggleReactionsOptions) {\n const uri = `${locusUrl}/${CONTROLS}`;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body: {\n reactions: {\n enabled: enable,\n },\n requestingParticipantId,\n },\n });\n }\n\n getLocusStatusByUrl(locusUrl: string) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: locusUrl,\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["MeetingRequest","attrs","options","meeting","otherAttrs","webex","boundedStorage","get","REACHABILITY","namespace","localStorageJoinCookie","catch","joinCookieRaw","joinCookie","JSON","parse","LoggerProxy","logger","error","locusDeltaRequest","MeetingUtil","generateLocusDeltaRequest","buildLocusDeltaRequestOptions","generateBuildLocusDeltaRequestOptions","changeVideoLayoutDebounced","changeVideoLayout","leading","trailing","asResourceOccupant","inviteeAddress","meetingNumber","permissionToken","deviceUrl","locusUrl","locusClusterUrl","resourceId","correlationId","ensureConversation","moderator","pin","moveToResource","roapMessage","preferTranscoding","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","ipVersion","info","url","getJoinCookie","body","device","deviceType","config","meetings","usingResource","moveMediaToResource","respOnlySdp","allowMultiDevice","supportsNativeLobby","clientMediaPreferences","ipver","push","BREAKOUTS","BREAKOUTS_SUPPORTED","ANNOTATION","ANNOTATION_ON_SHARE_SUPPORTED","length","geoHintInfo","countryCode","regionCode","undefined","PARTICIPANT","clusterUrl","internal","services","waitForCatalog","LOCI","CALL","invitee","address","concat","ALTERNATE_REDIRECT_TRUE","callPreferences","requestedMedia","_SLIDES_","localMedias","request","method","HTTP_VERBS","POST","uri","captchaRefreshUrl","captchaId","err","dialInUrl","clientUrl","PROVISIONAL","provisionalType","PROVISIONAL_TYPE_DIAL_IN","dialOutUrl","phoneNumber","PROVISIONAL_TYPE_DIAL_OUT","dialoutAddress","GET","reject","phoneUrl","selfId","LEAVE","PUT","prepareLeaveMeetingRequestOptions","ALERT","CONTROLS","lock","locked","PATCH","DECLINE","reason","floorReq","disposition","FLOOR_ACTION","GRANTED","beneficiary","personUrl","devices","requester","floor","resourceUrl","resourceToken","annotationInfo","annotation","tones","SEND_DTMF_ENDPOINT","dtmf","uuid","v4","layoutType","main","content","width","height","Error","renderInfoMain","renderInfoContent","layoutParams","renderInfo","layout","type","END","keepAliveUrl","reactionChannelUrl","reaction","participantId","sender","enable","requestingParticipantId","reactions","enabled","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {debounce} from 'lodash';\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n// @ts-ignore\nimport {deviceType} from '@webex/common';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n ALERT,\n ALTERNATE_REDIRECT_TRUE,\n BREAKOUTS,\n CALL,\n CONTROLS,\n DECLINE,\n END,\n FLOOR_ACTION,\n HTTP_VERBS,\n LEAVE,\n LOCI,\n PARTICIPANT,\n PROVISIONAL_TYPE_DIAL_IN,\n PROVISIONAL_TYPE_DIAL_OUT,\n REACHABILITY,\n SEND_DTMF_ENDPOINT,\n _SLIDES_,\n ANNOTATION,\n IP_VERSION,\n} from '../constants';\nimport {SendReactionOptions, ToggleReactionsOptions} from './request.type';\nimport MeetingUtil from './util';\nimport {AnnotationInfo} from '../annotation/annotation.types';\n\n/**\n * @class MeetingRequest\n */\nexport default class MeetingRequest extends StatelessWebexPlugin {\n changeVideoLayoutDebounced: any;\n meetingRef: WeakRef<any>;\n locusDeltaRequest: (options: object) => Promise<any>;\n buildLocusDeltaRequestOptions: (options: object) => Promise<any>;\n\n /**\n * Constructor\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n const {meeting, ...otherAttrs} = attrs;\n\n super(otherAttrs, options);\n\n this.locusDeltaRequest = MeetingUtil.generateLocusDeltaRequest(meeting);\n this.buildLocusDeltaRequestOptions = MeetingUtil.generateBuildLocusDeltaRequestOptions(meeting);\n\n this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {\n leading: true,\n trailing: true,\n });\n }\n\n /**\n * Returns joinCookie from boundedStorage if present.\n * @returns {Object} joinCookie\n */\n private getJoinCookie = async () => {\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n const joinCookie = JSON.parse(joinCookieRaw);\n if (joinCookie) {\n return joinCookie;\n }\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return null;\n };\n\n /**\n * Make a network request to join a meeting\n * @param {Object} options\n * @param {String} options.sipUri\n * @param {String} options.deviceUrl\n * @param {String} options.locusUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @param {boolean} options.ensureConversation\n * @param {boolean} options.moderator\n * @param {boolean} options.pin\n * @param {boolean} options.moveToResource\n * @param {Object} options.roapMessage\n * @param {boolean} options.breakoutsSupported\n * @param {String} options.locale,\n * @param {Array} options.deviceCapabilities\n * @param {boolean} options.liveAnnotationSupported\n * @returns {Promise}\n */\n async joinMeeting(options: {\n sipUri: string;\n deviceUrl: string;\n locusUrl: string;\n locusClusterUrl: string;\n resourceId: string;\n correlationId: string;\n ensureConversation: boolean;\n moderator: boolean;\n pin: boolean;\n moveToResource: boolean;\n roapMessage: any;\n asResourceOccupant: any;\n inviteeAddress: any;\n meetingNumber: any;\n permissionToken: any;\n preferTranscoding: any;\n breakoutsSupported: boolean;\n locale?: string;\n deviceCapabilities?: Array<string>;\n liveAnnotationSupported: boolean;\n ipVersion?: IP_VERSION;\n }) {\n const {\n asResourceOccupant,\n inviteeAddress,\n meetingNumber,\n permissionToken,\n deviceUrl,\n locusUrl,\n locusClusterUrl,\n resourceId,\n correlationId,\n ensureConversation,\n moderator,\n pin,\n moveToResource,\n roapMessage,\n preferTranscoding,\n breakoutsSupported,\n locale,\n deviceCapabilities = [],\n liveAnnotationSupported,\n ipVersion,\n } = options;\n\n LoggerProxy.logger.info('Meeting:request#joinMeeting --> Joining a meeting', correlationId);\n\n let url = '';\n\n const joinCookie = await this.getJoinCookie();\n\n const body: any = {\n asResourceOccupant,\n device: {\n url: deviceUrl,\n // @ts-ignore - config comes from registerPlugin\n deviceType: this.config.meetings.deviceType,\n },\n usingResource: resourceId || null,\n moveMediaToResource: (resourceId && moveToResource) || false,\n correlationId,\n respOnlySdp: true,\n allowMultiDevice: true,\n ensureConversation: ensureConversation || false,\n supportsNativeLobby: 1,\n clientMediaPreferences: {\n preferTranscoding: preferTranscoding ?? true,\n joinCookie,\n ipver: ipVersion,\n },\n };\n\n if (breakoutsSupported) {\n deviceCapabilities.push(BREAKOUTS.BREAKOUTS_SUPPORTED);\n }\n if (liveAnnotationSupported) {\n deviceCapabilities.push(ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED);\n }\n\n if (locale) {\n body.locale = locale;\n }\n\n // add deviceCapabilities prop\n if (deviceCapabilities.length) {\n body.deviceCapabilities = deviceCapabilities;\n }\n // @ts-ignore\n if (this.webex.meetings.geoHintInfo) {\n // @ts-ignore\n body.device.countryCode = this.webex.meetings.geoHintInfo.countryCode;\n // @ts-ignore\n body.device.regionCode = this.webex.meetings.geoHintInfo.regionCode;\n }\n\n if (moderator !== undefined) {\n body.moderator = moderator;\n }\n\n if (permissionToken) {\n body.permissionToken = permissionToken;\n }\n\n if (pin !== undefined) {\n body.pin = pin;\n }\n\n if (locusUrl) {\n url = `${locusUrl}/${PARTICIPANT}`;\n } else if (inviteeAddress || meetingNumber) {\n try {\n let clusterUrl;\n\n if (locusClusterUrl) {\n clusterUrl = `https://${locusClusterUrl}/locus/api/v1`;\n } else {\n // @ts-ignore\n await this.webex.internal.services.waitForCatalog('postauth');\n // @ts-ignore\n clusterUrl = this.webex.internal.services.get('locus');\n }\n\n url = `${clusterUrl}/${LOCI}/${CALL}`;\n body.invitee = {\n address: inviteeAddress || `wbxmn:${meetingNumber}`,\n };\n } catch (e) {\n LoggerProxy.logger.error(\n `Meeting:request#joinMeeting Error Joining ${inviteeAddress || meetingNumber} --> ${e}`\n );\n throw e;\n }\n }\n\n // TODO: -- this will be resolved in SDK request\n url = url.concat(`?${ALTERNATE_REDIRECT_TRUE}`);\n\n if (resourceId === inviteeAddress) {\n body.callPreferences = {\n requestedMedia: [_SLIDES_],\n };\n }\n\n if (roapMessage) {\n body.localMedias = roapMessage.localMedias;\n }\n\n /// @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: url,\n body,\n });\n }\n\n /**\n * Send a request to refresh the captcha\n * @param {Object} options\n * @param {String} options.captchaRefreshUrl\n * @param {String} options.captchaId\n * @returns {Promise}\n * @private\n */\n private refreshCaptcha({\n captchaRefreshUrl,\n captchaId,\n }: {\n captchaRefreshUrl: string;\n captchaId: string;\n }) {\n const body = {\n captchaId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: captchaRefreshUrl,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(`Meeting:request#refreshCaptcha --> Error: ${err}`);\n\n throw err;\n });\n }\n\n /**\n * Make a network request to add a dial in device\n * @param {Object} options\n * @param {String} options.correlationId\n * @param {String} options.locusUrl url for the meeting\n * @param {String} options.dialInUrl identifier for the to-be provisioned device\n * @param {String} options.clientUrl identifier for the web device\n * @returns {Promise}\n * @private\n */\n private dialIn({\n locusUrl,\n dialInUrl,\n clientUrl,\n correlationId,\n }: {\n correlationId: string;\n locusUrl: string;\n dialInUrl: string;\n clientUrl: string;\n }) {\n LoggerProxy.logger.info(\n 'Meeting:request#dialIn --> Provisioning a dial in device',\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n provisionalType: PROVISIONAL_TYPE_DIAL_IN,\n url: dialInUrl,\n clientUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#dialIn --> Error provisioning a dial in device, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Make a network request to add a dial out device\n * @param {Object} options\n * @param {String} options.correlationId\n * @param {String} options.locusUrl url for the meeting\n * @param {String} options.dialOutUrl identifier for the to-be provisioned device\n * @param {String} options.phoneNumber phone number to dial out to\n * @param {String} options.clientUrl identifier for the web device\n * @returns {Promise}\n * @private\n */\n private dialOut({\n locusUrl,\n dialOutUrl,\n phoneNumber,\n clientUrl,\n correlationId,\n }: {\n correlationId: string;\n locusUrl: string;\n dialOutUrl: string;\n phoneNumber: string;\n clientUrl: string;\n }) {\n LoggerProxy.logger.info(\n 'Meeting:request#dialOut --> Provisioning a dial out device',\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n provisionalType: PROVISIONAL_TYPE_DIAL_OUT,\n url: dialOutUrl,\n dialoutAddress: phoneNumber,\n clientUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#dialOut --> Error provisioning a dial out device, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Sends a requests to get the latest locus DTO, it might be a full Locus or a delta, depending on the url provided\n * @param {Object} options\n * @param {String} options.locusUrl sync url to get ht elatest locus delta\n * @returns {Promise}\n */\n getLocusDTO(options: {url: string}) {\n const {url} = options;\n\n if (url) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: url,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#getLocusDTO --> Error getting latest locus, error ${err}`\n );\n\n return err;\n });\n }\n\n return Promise.reject();\n }\n\n /**\n * Make a network request to make a provisioned phone leave the meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.phoneUrl\n * @param {String} options.correlationId\n * @param {String} options.selfId\n * @returns {Promise}\n * @private\n */\n private disconnectPhoneAudio({\n locusUrl,\n phoneUrl,\n correlationId,\n selfId,\n }: {\n locusUrl: string;\n phoneUrl: string;\n correlationId: string;\n selfId: string;\n }) {\n LoggerProxy.logger.info(\n `Meeting:request#disconnectPhoneAudio --> request phone ${phoneUrl} to leave`,\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n url: phoneUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#disconnectPhoneAudio --> Error when requesting phone ${phoneUrl} to leave, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Prepares request options to to leave a meeting\n * @param {Object} options\n * @param {Url} options.locusUrl\n * @param {String} options.selfId\n * @param {Url} options.deviceUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @returns {Object} request options\n */\n prepareLeaveMeetingRequestOptions({\n locusUrl,\n selfId,\n deviceUrl: url,\n resourceId,\n correlationId,\n }: {\n locusUrl: string;\n selfId: string;\n deviceUrl: string;\n resourceId: string;\n correlationId: string;\n }) {\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url,\n },\n usingResource: resourceId || null,\n correlationId,\n };\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n }\n\n /**\n * Make a network request to leave a meeting\n * @param {Object} options\n * @returns {Promise}\n */\n leaveMeeting({\n locusUrl,\n selfId,\n deviceUrl: url,\n resourceId,\n correlationId,\n }: {\n locusUrl: string;\n selfId: string;\n deviceUrl: string;\n resourceId: string;\n correlationId: string;\n }) {\n LoggerProxy.logger.info('Meeting:request#leaveMeeting --> Leaving a meeting', correlationId);\n\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url,\n },\n usingResource: resourceId || null,\n correlationId,\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * Builds request options to leave a meeting\n * @param {Object} options\n * @returns {Object} request options\n */\n buildLeaveMeetingRequestOptions(options: any) {\n return this.buildLocusDeltaRequestOptions(this.prepareLeaveMeetingRequestOptions(options));\n }\n\n /**\n * Make a network request to acknowledge a meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.correlationId\n * @returns {Promise}\n */\n acknowledgeMeeting(options: {locusUrl: string; deviceUrl: string; correlationId: string}) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${ALERT}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n correlationId: options.correlationId,\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * Makes a network request to lock the meeting\n * @param {Object} options\n * @param {Boolean} options.lock Whether it is locked or not\n * @returns {Promise}\n */\n lockMeeting(options) {\n const uri = `${options.locusUrl}/${CONTROLS}`;\n const body = {\n lock: {\n locked: options.lock,\n },\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n });\n }\n\n /**\n * Make a network request to decline a meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.reason\n * @returns {Promise}\n */\n declineMeeting(options: {locusUrl: string; deviceUrl: string; reason: string}) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${DECLINE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n ...(options.reason && {reason: options.reason}),\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * change the content floor grant\n * @param {Object} options options for floor grant\n * @param {String} options.disposition floor action (granted/released)\n * @param {String} options.personUrl personUrl who is requesting floor\n * @param {String} options.deviceUrl Url of a device\n * @param {String} options.resourceId Populated if you are paired to a device\n * @param {String} options.uri floor grant uri\n * @returns {Promise}\n */\n changeMeetingFloor(\n options:\n | {\n disposition: string;\n personUrl: string;\n deviceUrl: string;\n resourceId: string;\n uri: string;\n annotationInfo: AnnotationInfo;\n }\n | any\n ) {\n let floorReq: any = {disposition: options.disposition};\n\n /* istanbul ignore else */\n if (options.disposition === FLOOR_ACTION.GRANTED) {\n floorReq = {\n beneficiary: {\n url: options.personUrl,\n devices: [\n {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n ],\n },\n disposition: options.disposition,\n requester: {\n url: options.personUrl,\n },\n };\n }\n\n const body: any = {\n floor: floorReq,\n resourceUrl: options.resourceUrl,\n };\n\n if (options?.resourceToken) {\n body.resourceToken = options?.resourceToken;\n }\n if (options?.annotationInfo) {\n body.annotation = options?.annotationInfo;\n }\n\n // @ts-ignore\n return this.request({\n uri: options.uri,\n method: HTTP_VERBS.PUT,\n body,\n });\n }\n\n /**\n * Sends a request to the DTMF endpoint to send tones\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.tones a string of one or more DTMF tones to send\n * @returns {Promise}\n */\n sendDTMF({locusUrl, deviceUrl, tones}: {locusUrl: string; deviceUrl: string; tones: string}) {\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri: `${locusUrl}/${SEND_DTMF_ENDPOINT}`,\n body: {\n deviceUrl,\n dtmf: {\n correlationId: uuid.v4(),\n tones,\n },\n },\n });\n }\n\n /**\n * Sends a request to the controls endpoint to set the video layout\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.layoutType a layout type that should be available in meeting constants {@link #layout_types}\n * @param {Object} options.main preferred dimensions for the remote main video stream\n * @param {Number} options.main.width preferred width of main video stream\n * @param {Number} options.main.height preferred height of main video stream\n * @param {Object} options.content preferred dimensions for the remote content share stream\n * @param {Number} options.content.width preferred width of content share stream\n * @param {Number} options.content.height preferred height of content share stream\n * @returns {Promise}\n */\n changeVideoLayout({\n locusUrl,\n deviceUrl,\n layoutType,\n main,\n content,\n }: {\n locusUrl: string;\n deviceUrl: string;\n layoutType: string;\n main: {\n width: number;\n height: number;\n };\n content: {\n width: number;\n height: number;\n };\n }) {\n // send main/content renderInfo only if both width and height are specified\n if (main && (!main.width || !main.height)) {\n return Promise.reject(\n new Error(\n `Both width and height must be specified. One of them is missing for main: ${JSON.stringify(\n main\n )}`\n )\n );\n }\n\n if (content && (!content.width || !content.height)) {\n return Promise.reject(\n new Error(\n `Both width and height must be specified. One of them is missing for content: ${JSON.stringify(\n content\n )}`\n )\n );\n }\n\n const renderInfoMain = main ? {width: main.width, height: main.height} : undefined;\n const renderInfoContent = content ? {width: content.width, height: content.height} : undefined;\n\n const layoutParams =\n renderInfoMain || renderInfoContent\n ? {\n renderInfo: {\n main: renderInfoMain,\n content: renderInfoContent,\n },\n }\n : undefined;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri: `${locusUrl}/${CONTROLS}`,\n body: {\n layout: {\n deviceUrl,\n type: layoutType,\n layoutParams,\n },\n },\n });\n }\n\n /**\n * Make a network request to end meeting for all\n * @param {Object} options\n * @param {Url} options.locusUrl\n * @returns {Promise}\n */\n endMeetingForAll({locusUrl}: {locusUrl: string}) {\n const uri = `${locusUrl}/${END}`;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n });\n }\n\n /**\n * Send a locus keepAlive (used in lobby)\n * @param {Object} options\n * @param {Url} options.keepAliveUrl\n * @returns {Promise}\n */\n keepAlive({keepAliveUrl}: {keepAliveUrl: string}) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: keepAliveUrl,\n });\n }\n\n /**\n * Make a network request to send a reaction.\n * @param {Object} options\n * @param {Url} options.reactionChannelUrl\n * @param {Reaction} options.reaction\n * @param {string} options.senderID\n * @returns {Promise}\n */\n sendReaction({reactionChannelUrl, reaction, participantId}: SendReactionOptions) {\n const uri = reactionChannelUrl;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n body: {\n sender: {participantId},\n reaction,\n },\n });\n }\n\n /**\n * Make a network request to enable or disable reactions.\n * @param {boolean} options.enable - determines if we need to enable or disable.\n * @param {locusUrl} options.locusUrl\n * @returns {Promise}\n */\n toggleReactions({enable, locusUrl, requestingParticipantId}: ToggleReactionsOptions) {\n const uri = `${locusUrl}/${CONTROLS}`;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body: {\n reactions: {\n enabled: enable,\n },\n requestingParticipantId,\n },\n });\n }\n\n getLocusStatusByUrl(locusUrl: string) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: locusUrl,\n });\n }\n}\n"],"mappings":"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"}
|
package/dist/meeting/util.js
CHANGED
|
@@ -23,6 +23,7 @@ var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
|
23
23
|
var _webexErrors = require("../common/errors/webex-errors");
|
|
24
24
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
25
25
|
var _constants = require("../constants");
|
|
26
|
+
var _browserDetection = _interopRequireDefault(require("../common/browser-detection"));
|
|
26
27
|
var _intentToJoin = _interopRequireDefault(require("../common/errors/intent-to-join"));
|
|
27
28
|
var _joinMeeting = _interopRequireDefault(require("../common/errors/join-meeting"));
|
|
28
29
|
var _parameter = _interopRequireDefault(require("../common/errors/parameter"));
|
|
@@ -101,6 +102,34 @@ var MeetingUtil = {
|
|
|
101
102
|
var _err$body;
|
|
102
103
|
return (err === null || err === void 0 ? void 0 : (_err$body = err.body) === null || _err$body === void 0 ? void 0 : _err$body.errorCode) && _constants.INTENT_TO_JOIN.includes(err.body.errorCode);
|
|
103
104
|
},
|
|
105
|
+
/**
|
|
106
|
+
* Returns the current state of knowledge about whether we are on an ipv4-only or ipv6-only or mixed (ipv4 and ipv6) network.
|
|
107
|
+
* The return value matches the possible values of "ipver" parameter used by the backend APIs.
|
|
108
|
+
*
|
|
109
|
+
* @param {Object} webex webex instance
|
|
110
|
+
* @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
|
|
111
|
+
*/
|
|
112
|
+
getIpVersion: function getIpVersion(webex) {
|
|
113
|
+
var _webex$internal$devic = webex.internal.device.ipNetworkDetector,
|
|
114
|
+
supportsIpV4 = _webex$internal$devic.supportsIpV4,
|
|
115
|
+
supportsIpV6 = _webex$internal$devic.supportsIpV6;
|
|
116
|
+
if ((0, _browserDetection.default)().isBrowser('firefox')) {
|
|
117
|
+
// our ipv6 solution relies on FQDN ICE candidates, but Firefox doesn't support them,
|
|
118
|
+
// see https://bugzilla.mozilla.org/show_bug.cgi?id=1713128
|
|
119
|
+
// so for Firefox we don't want the backend to activate the "ipv6 feature"
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
if (supportsIpV4 && supportsIpV6) {
|
|
123
|
+
return _constants.IP_VERSION.ipv4_and_ipv6;
|
|
124
|
+
}
|
|
125
|
+
if (supportsIpV4) {
|
|
126
|
+
return _constants.IP_VERSION.only_ipv4;
|
|
127
|
+
}
|
|
128
|
+
if (supportsIpV6) {
|
|
129
|
+
return _constants.IP_VERSION.only_ipv6;
|
|
130
|
+
}
|
|
131
|
+
return _constants.IP_VERSION.unknown;
|
|
132
|
+
},
|
|
104
133
|
joinMeeting: function joinMeeting(meeting, options) {
|
|
105
134
|
var _meeting$meetingInfo;
|
|
106
135
|
if (!meeting) {
|
|
@@ -138,7 +167,7 @@ var MeetingUtil = {
|
|
|
138
167
|
locale: options.locale,
|
|
139
168
|
deviceCapabilities: options.deviceCapabilities,
|
|
140
169
|
liveAnnotationSupported: options.liveAnnotationSupported,
|
|
141
|
-
ipVersion: meeting.getWebexObject()
|
|
170
|
+
ipVersion: MeetingUtil.getIpVersion(meeting.getWebexObject())
|
|
142
171
|
}).then(function (res) {
|
|
143
172
|
// @ts-ignore
|
|
144
173
|
webex.internal.newMetrics.submitClientEvent({
|
package/dist/meeting/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","meeting","audioMuted","videoMuted","webex","getWebexObject","reject","ParameterError","locusMediaRequest","internal","newMetrics","submitClientEvent","name","options","meetingId","send","type","selfUrl","sequence","locusInfo","muteOptions","then","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","deviceUrl","locusClusterUrl","meetingInfo","correlationId","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","isMultistream","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","ipVersion","meetings","reachability","getIpVersion","res","payload","trigger","identifiers","trackingId","headers","trackingid","cleanUp","breakouts","simultaneousInterpretation","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeRemoteTracks","closePeerConnections","cleanupLocalTracks","unsetRemoteTracks","unsetPeerConnections","reconnectionManager","stopKeepAlive","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","catch","LoggerProxy","logger","error","prepareLeaveMeetingOptions","defaultOptions","leaveMeeting","isUserInLeftState","UserNotJoinedError","leaveOptions","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","CaptchaError","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","setLocus","IntentToJoinError","JoinMeetingError","buildLeaveFetchRequestOptions","buildLeaveMeetingRequestOptions","getTrack","stream","audioTrack","videoTrack","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","userDisplayHints","canInviteNewParticipants","displayHints","DISPLAY_HINTS","ADD_GUEST","canAdmitParticipant","ROSTER_WAITING_TO_JOIN","canUserLock","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","canBroadcastMessageToBreakout","policies","BROADCAST_MESSAGE_TO_BREAKOUT","SELF_POLICY","SUPPORT_BROADCAST_MESSAGE","isSuppressBreakoutSupport","UCF_SUPPRESS_BREAKOUTS_SUPPORT","canAdmitLobbyToBreakout","DISABLE_LOBBY_TO_BREAKOUT","isBreakoutPreassignmentsEnabled","DISABLE_BREAKOUT_PREASSIGNMENTS","canUserAskForHelp","DISABLE_ASK_FOR_HELP","lockMeeting","actions","request","canLock","lock","PermissionError","unlockMeeting","canUnlock","handleAudioLogging","LOG_HEADER","settings","underlyingTrack","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","isSaveTranscriptsEnabled","SAVE_TRANSCRIPTS_ENABLED","canStartTranscribing","TRANSCRIPTION_CONTROL_START","canStopTranscribing","TRANSCRIPTION_CONTROL_STOP","isClosedCaptionActive","CAPTION_STATUS_ACTIVE","isWebexAssistantActive","WEBEX_ASSISTANT_STATUS_ACTIVE","canViewCaptionPanel","ENABLE_CAPTION_PANEL","isRealTimeTranslationEnabled","DISPLAY_REAL_TIME_TRANSLATION","canSelectSpokenLanguages","DISPLAY_NON_ENGLISH_ASR","waitingForOthersToJoin","WAITING_FOR_OTHERS","canSendReactions","originalValue","REACTIONS_ACTIVE","REACTIONS_INACTIVE","canUserRenameSelfAndObserved","CAN_RENAME_SELF_AND_OBSERVED","canUserRenameOthers","CAN_RENAME_OTHERS","canShareWhiteBoard","SHARE_WHITEBOARD","addSequence","requestBody","updateLocusWithDelta","handleLocusDelta","generateBuildLocusDeltaRequestOptions","originalMeeting","meetingRef","WeakRef","buildLocusDeltaRequestOptions","originalOptions","deref","generateLocusDeltaRequest","locusDeltaRequest","selfSupportsFeature","feature","userPolicies","parseInterpretationInfo","siInfo","updateMeetingSIEnabled","turnOnSimultaneousInterpretation","currentSIInterpreter","hostSIEnabled","meetingSiteSetting","enableHostInterpreterControlSI","updateHostSIEnabled","renameKey","obj","oldKey","newKey","lanuagesInfo","siLanguages","language","updateInterpretation","Trigger","file","function","EVENT_TRIGGERS","MEETING_INTERPRETATION_UPDATE"],"sources":["util.ts"],"sourcesContent":["import {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\nimport {cloneDeep} from 'lodash';\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\n SELF_POLICY,\n EVENT_TRIGGERS,\n} from '../constants';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\nimport Trigger from '../common/events/trigger-proxy';\n\nconst MeetingUtil = {\n parseLocusJoin: (response) => {\n const parsed: any = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n },\n\n remoteUpdateAudioVideo: (meeting, audioMuted?: boolean, videoMuted?: boolean) => {\n const webex = meeting.getWebexObject();\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n if (!meeting.locusMediaRequest) {\n return Promise.reject(\n new ParameterError(\n 'You need a meeting with a media connection, call Meeting.addMedia() first.'\n )\n );\n }\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.request',\n options: {meetingId: meeting.id},\n });\n\n return meeting.locusMediaRequest\n .send({\n type: 'LocalMute',\n selfUrl: meeting.selfUrl,\n mediaId: meeting.mediaId,\n sequence: meeting.locusInfo.sequence,\n muteOptions: {\n audioMuted,\n videoMuted,\n },\n })\n .then((response) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.response',\n options: {meetingId: meeting.id},\n });\n\n return response?.body?.locus;\n });\n },\n\n hasOwner: (info) => info && info.owner,\n\n isOwnerSelf: (owner, selfId) => owner === selfId,\n\n isPinOrGuest: (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode),\n\n joinMeeting: (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n const webex = meeting.getWebexObject();\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.request',\n options: {meetingId: meeting.id},\n });\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n 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: meeting.getWebexObject().meetings.reachability.getIpVersion(),\n })\n .then((res) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.response',\n payload: {\n trigger: 'loci-update',\n identifiers: {\n trackingId: res.headers.trackingid,\n },\n },\n options: {\n meetingId: meeting.id,\n mediaConnections: res.body.mediaConnections,\n },\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n },\n\n cleanUp: (meeting) => {\n meeting.breakouts.cleanUp();\n meeting.simultaneousInterpretation.cleanUp();\n\n // make sure we send last metrics before we close the peerconnection\n const stopStatsAnalyzer = meeting.statsAnalyzer\n ? meeting.statsAnalyzer.stopAnalyzer()\n : Promise.resolve();\n\n return stopStatsAnalyzer\n .then(() => meeting.closeRemoteTracks())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.cleanupLocalTracks();\n meeting.unsetRemoteTracks();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => meeting.updateLLMConnection());\n },\n\n disconnectPhoneAudio: (meeting, phoneUrl) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const options = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n phoneUrl,\n };\n\n return meeting.meetingRequest.disconnectPhoneAudio(options).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n /**\n * Returns options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} leave options\n */\n prepareLeaveMeetingOptions: (meeting, options: any = {}) => {\n const defaultOptions = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n resourceId: meeting.resourceId,\n deviceUrl: meeting.deviceUrl,\n };\n\n return {...defaultOptions, ...options};\n },\n\n // by default will leave on meeting's resourceId\n // if you explicity want it not to leave on resource id, pass\n // {resourceId: null}\n // TODO: chris, you can modify this however you want\n leaveMeeting: (meeting, options: any = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, options);\n\n return meeting.meetingRequest\n .leaveMeeting(leaveOptions)\n .then(() => {\n if (options.moveMeeting) {\n return Promise.resolve();\n }\n\n return MeetingUtil.cleanUp(meeting);\n })\n .catch((err) => {\n // TODO: If the meeting state comes as LEFT or INACTIVE as response then\n // 1) on leave clean up the meeting or simply do a sync on the meeting\n // 2) If the error says meeting is inactive then destroy the meeting object\n LoggerProxy.logger.error(\n `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n declineMeeting: (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason,\n }),\n\n isUserInLeftState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_,\n\n isUserInIdleState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_,\n\n isUserInJoinedState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_,\n\n isMediaEstablished: (currentMediaStatus) =>\n currentMediaStatus &&\n (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share),\n\n joinMeetingOptions: (meeting, options: any = {}) => {\n const webex = meeting.getWebexObject();\n\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (meeting.requiredCaptcha) {\n return Promise.reject(new CaptchaError());\n }\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n return Promise.reject(new PasswordError());\n }\n\n if (options.pin) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.collected',\n options: {\n meetingId: meeting.id,\n },\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.prompt',\n options: {\n meetingId: meeting.id,\n },\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error(\n 'Meeting:util#joinMeetingOptions --> Error joining the call, ',\n err\n );\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n },\n\n /**\n * Returns request options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} request options\n */\n buildLeaveFetchRequestOptions: (meeting, options: any = {}) => {\n const leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, options);\n\n return meeting.meetingRequest.buildLeaveMeetingRequestOptions(leaveOptions);\n },\n\n getTrack: (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n },\n\n getModeratorFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator,\n\n getPolicyFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy,\n\n getUserDisplayHintsFromLocusInfo: (locusInfo) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [],\n\n canInviteNewParticipants: (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST),\n\n canAdmitParticipant: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN),\n\n canUserLock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED),\n\n canUserUnlock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED),\n\n canUserRaiseHand: (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND),\n\n canUserLowerAllHands: (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS),\n\n canUserLowerSomeoneElsesHand: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND),\n\n bothLeaveAndEndMeetingAvailable: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING),\n\n canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),\n canBroadcastMessageToBreakout: (displayHints, policies = {}) =>\n displayHints.includes(DISPLAY_HINTS.BROADCAST_MESSAGE_TO_BREAKOUT) &&\n !!policies[SELF_POLICY.SUPPORT_BROADCAST_MESSAGE],\n\n isSuppressBreakoutSupport: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT),\n\n canAdmitLobbyToBreakout: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT),\n\n isBreakoutPreassignmentsEnabled: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS),\n\n canUserAskForHelp: (displayHints) => !displayHints.includes(DISPLAY_HINTS.DISABLE_ASK_FOR_HELP),\n\n lockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canLock) {\n return request.lockMeeting({locusUrl, lock: true});\n }\n\n return Promise.reject(new PermissionError('Lock not allowed, due to joined property.'));\n },\n\n unlockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canUnlock) {\n return request.lockMeeting({locusUrl, lock: false});\n }\n\n return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));\n },\n\n handleAudioLogging: (audioTrack?: LocalMicrophoneTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleVideoLogging: (videoTrack?: LocalCameraTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleDeviceLogging: (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n },\n\n endMeetingForAll: (meeting) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const endOptions = {\n locusUrl: meeting.locusUrl,\n };\n\n return meeting.meetingRequest\n .endMeetingForAll(endOptions)\n .then(() => MeetingUtil.cleanUp(meeting))\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n canEnableClosedCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START),\n\n isSaveTranscriptsEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED),\n\n canStartTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START),\n\n canStopTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP),\n\n isClosedCaptionActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE),\n\n isWebexAssistantActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE),\n\n canViewCaptionPanel: (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL),\n\n isRealTimeTranslationEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION),\n\n canSelectSpokenLanguages: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR),\n\n waitingForOthersToJoin: (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS),\n\n canSendReactions: (originalValue, displayHints) => {\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {\n return true;\n }\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {\n return false;\n }\n\n return originalValue;\n },\n canUserRenameSelfAndObserved: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED),\n\n canUserRenameOthers: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS),\n\n canShareWhiteBoard: (displayHints) => displayHints.includes(DISPLAY_HINTS.SHARE_WHITEBOARD),\n\n /**\n * Adds the current locus sequence information to a request body\n * @param {Object} meeting The meeting object\n * @param {Object} requestBody The body of a request to locus\n * @returns {void}\n */\n addSequence: (meeting, requestBody) => {\n const sequence = meeting?.locusInfo?.sequence;\n\n if (!sequence) {\n return;\n }\n\n requestBody.sequence = sequence;\n },\n\n /**\n * Updates the locus info for the meeting with the delta locus\n * returned from requests that include the sequence information\n * Returns the original response object\n * @param {Object} meeting The meeting object\n * @param {Object} response The response of the http request\n * @returns {Object}\n */\n updateLocusWithDelta: (meeting, response) => {\n if (!meeting) {\n return response;\n }\n\n const locus = response?.body?.locus;\n\n if (locus) {\n meeting.locusInfo.handleLocusDelta(locus, meeting);\n }\n\n return response;\n },\n\n generateBuildLocusDeltaRequestOptions: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const buildLocusDeltaRequestOptions = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return originalOptions;\n }\n\n const options = cloneDeep(originalOptions);\n\n if (!options.body) {\n options.body = {};\n }\n\n MeetingUtil.addSequence(meeting, options.body);\n\n return options;\n };\n\n return buildLocusDeltaRequestOptions;\n },\n\n generateLocusDeltaRequest: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const buildLocusDeltaRequestOptions =\n MeetingUtil.generateBuildLocusDeltaRequestOptions(originalMeeting);\n\n const locusDeltaRequest = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return Promise.resolve();\n }\n\n const options = buildLocusDeltaRequestOptions(originalOptions);\n\n return meeting\n .request(options)\n .then((response) => MeetingUtil.updateLocusWithDelta(meeting, response));\n };\n\n return locusDeltaRequest;\n },\n\n selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record<SELF_POLICY, boolean>) => {\n if (!userPolicies) {\n return true;\n }\n\n return userPolicies[feature];\n },\n\n parseInterpretationInfo: (meeting, meetingInfo) => {\n if (!meeting || !meetingInfo) {\n return;\n }\n const siInfo = meetingInfo.simultaneousInterpretation;\n meeting.simultaneousInterpretation.updateMeetingSIEnabled(\n !!meetingInfo.turnOnSimultaneousInterpretation,\n !!siInfo?.currentSIInterpreter\n );\n const hostSIEnabled = !!(\n meetingInfo.turnOnSimultaneousInterpretation &&\n meetingInfo?.meetingSiteSetting?.enableHostInterpreterControlSI\n );\n meeting.simultaneousInterpretation.updateHostSIEnabled(hostSIEnabled);\n\n function renameKey(obj, oldKey, newKey) {\n if (oldKey in obj) {\n obj[newKey] = obj[oldKey];\n delete obj[oldKey];\n }\n }\n if (siInfo) {\n const lanuagesInfo = cloneDeep(siInfo.siLanguages);\n for (const language of lanuagesInfo) {\n renameKey(language, 'languageCode', 'languageName');\n renameKey(language, 'languageGroupId', 'languageCode');\n }\n if (!meeting.simultaneousInterpretation?.siLanguages?.length) {\n meeting.simultaneousInterpretation.updateInterpretation({siLanguages: lanuagesInfo});\n }\n }\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'parseInterpretationInfo',\n },\n EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE\n );\n },\n};\n\nexport default MeetingUtil;\n"],"mappings":"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"}
|
|
1
|
+
{"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","closeRemoteTracks","closePeerConnections","cleanupLocalTracks","unsetRemoteTracks","unsetPeerConnections","reconnectionManager","stopKeepAlive","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","catch","LoggerProxy","logger","error","prepareLeaveMeetingOptions","defaultOptions","leaveMeeting","isUserInLeftState","UserNotJoinedError","leaveOptions","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","CaptchaError","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","setLocus","IntentToJoinError","JoinMeetingError","buildLeaveFetchRequestOptions","buildLeaveMeetingRequestOptions","getTrack","stream","audioTrack","videoTrack","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","userDisplayHints","canInviteNewParticipants","displayHints","DISPLAY_HINTS","ADD_GUEST","canAdmitParticipant","ROSTER_WAITING_TO_JOIN","canUserLock","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","canBroadcastMessageToBreakout","policies","BROADCAST_MESSAGE_TO_BREAKOUT","SELF_POLICY","SUPPORT_BROADCAST_MESSAGE","isSuppressBreakoutSupport","UCF_SUPPRESS_BREAKOUTS_SUPPORT","canAdmitLobbyToBreakout","DISABLE_LOBBY_TO_BREAKOUT","isBreakoutPreassignmentsEnabled","DISABLE_BREAKOUT_PREASSIGNMENTS","canUserAskForHelp","DISABLE_ASK_FOR_HELP","lockMeeting","actions","request","canLock","lock","PermissionError","unlockMeeting","canUnlock","handleAudioLogging","LOG_HEADER","settings","underlyingTrack","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","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 {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\nimport {cloneDeep} from 'lodash';\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\n SELF_POLICY,\n EVENT_TRIGGERS,\n 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.closeRemoteTracks())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.cleanupLocalTracks();\n meeting.unsetRemoteTracks();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => meeting.updateLLMConnection());\n },\n\n disconnectPhoneAudio: (meeting, phoneUrl) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const options = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n phoneUrl,\n };\n\n return meeting.meetingRequest.disconnectPhoneAudio(options).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n /**\n * Returns options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} leave options\n */\n prepareLeaveMeetingOptions: (meeting, options: any = {}) => {\n const defaultOptions = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n resourceId: meeting.resourceId,\n deviceUrl: meeting.deviceUrl,\n };\n\n return {...defaultOptions, ...options};\n },\n\n // by default will leave on meeting's resourceId\n // if you explicity want it not to leave on resource id, pass\n // {resourceId: null}\n // TODO: chris, you can modify this however you want\n leaveMeeting: (meeting, options: any = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, options);\n\n return meeting.meetingRequest\n .leaveMeeting(leaveOptions)\n .then(() => {\n if (options.moveMeeting) {\n return Promise.resolve();\n }\n\n return MeetingUtil.cleanUp(meeting);\n })\n .catch((err) => {\n // TODO: If the meeting state comes as LEFT or INACTIVE as response then\n // 1) on leave clean up the meeting or simply do a sync on the meeting\n // 2) If the error says meeting is inactive then destroy the meeting object\n LoggerProxy.logger.error(\n `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n declineMeeting: (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason,\n }),\n\n isUserInLeftState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_,\n\n isUserInIdleState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_,\n\n isUserInJoinedState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_,\n\n isMediaEstablished: (currentMediaStatus) =>\n currentMediaStatus &&\n (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share),\n\n joinMeetingOptions: (meeting, options: any = {}) => {\n const webex = meeting.getWebexObject();\n\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (meeting.requiredCaptcha) {\n return Promise.reject(new CaptchaError());\n }\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n return Promise.reject(new PasswordError());\n }\n\n if (options.pin) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.collected',\n options: {\n meetingId: meeting.id,\n },\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.prompt',\n options: {\n meetingId: meeting.id,\n },\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error(\n 'Meeting:util#joinMeetingOptions --> Error joining the call, ',\n err\n );\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n },\n\n /**\n * Returns request options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} request options\n */\n buildLeaveFetchRequestOptions: (meeting, options: any = {}) => {\n const leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, options);\n\n return meeting.meetingRequest.buildLeaveMeetingRequestOptions(leaveOptions);\n },\n\n getTrack: (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n },\n\n getModeratorFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator,\n\n getPolicyFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy,\n\n getUserDisplayHintsFromLocusInfo: (locusInfo) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [],\n\n canInviteNewParticipants: (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST),\n\n canAdmitParticipant: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN),\n\n canUserLock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED),\n\n canUserUnlock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED),\n\n canUserRaiseHand: (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND),\n\n canUserLowerAllHands: (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS),\n\n canUserLowerSomeoneElsesHand: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND),\n\n bothLeaveAndEndMeetingAvailable: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING),\n\n canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),\n canBroadcastMessageToBreakout: (displayHints, policies = {}) =>\n displayHints.includes(DISPLAY_HINTS.BROADCAST_MESSAGE_TO_BREAKOUT) &&\n !!policies[SELF_POLICY.SUPPORT_BROADCAST_MESSAGE],\n\n isSuppressBreakoutSupport: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT),\n\n canAdmitLobbyToBreakout: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT),\n\n isBreakoutPreassignmentsEnabled: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS),\n\n canUserAskForHelp: (displayHints) => !displayHints.includes(DISPLAY_HINTS.DISABLE_ASK_FOR_HELP),\n\n lockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canLock) {\n return request.lockMeeting({locusUrl, lock: true});\n }\n\n return Promise.reject(new PermissionError('Lock not allowed, due to joined property.'));\n },\n\n unlockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canUnlock) {\n return request.lockMeeting({locusUrl, lock: false});\n }\n\n return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));\n },\n\n handleAudioLogging: (audioTrack?: LocalMicrophoneTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleVideoLogging: (videoTrack?: LocalCameraTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleDeviceLogging: (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n },\n\n endMeetingForAll: (meeting) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const endOptions = {\n locusUrl: meeting.locusUrl,\n };\n\n return meeting.meetingRequest\n .endMeetingForAll(endOptions)\n .then(() => MeetingUtil.cleanUp(meeting))\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n canEnableClosedCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START),\n\n isSaveTranscriptsEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED),\n\n canStartTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START),\n\n canStopTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP),\n\n isClosedCaptionActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE),\n\n isWebexAssistantActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE),\n\n canViewCaptionPanel: (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL),\n\n isRealTimeTranslationEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION),\n\n canSelectSpokenLanguages: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR),\n\n waitingForOthersToJoin: (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS),\n\n canSendReactions: (originalValue, displayHints) => {\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {\n return true;\n }\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {\n return false;\n }\n\n return originalValue;\n },\n canUserRenameSelfAndObserved: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED),\n\n canUserRenameOthers: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS),\n\n canShareWhiteBoard: (displayHints) => displayHints.includes(DISPLAY_HINTS.SHARE_WHITEBOARD),\n\n /**\n * Adds the current locus sequence information to a request body\n * @param {Object} meeting The meeting object\n * @param {Object} requestBody The body of a request to locus\n * @returns {void}\n */\n addSequence: (meeting, requestBody) => {\n const sequence = meeting?.locusInfo?.sequence;\n\n if (!sequence) {\n return;\n }\n\n requestBody.sequence = sequence;\n },\n\n /**\n * Updates the locus info for the meeting with the delta locus\n * returned from requests that include the sequence information\n * Returns the original response object\n * @param {Object} meeting The meeting object\n * @param {Object} response The response of the http request\n * @returns {Object}\n */\n updateLocusWithDelta: (meeting, response) => {\n if (!meeting) {\n return response;\n }\n\n const locus = response?.body?.locus;\n\n if (locus) {\n meeting.locusInfo.handleLocusDelta(locus, meeting);\n }\n\n return response;\n },\n\n generateBuildLocusDeltaRequestOptions: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const buildLocusDeltaRequestOptions = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return originalOptions;\n }\n\n const options = cloneDeep(originalOptions);\n\n if (!options.body) {\n options.body = {};\n }\n\n MeetingUtil.addSequence(meeting, options.body);\n\n return options;\n };\n\n return buildLocusDeltaRequestOptions;\n },\n\n generateLocusDeltaRequest: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const buildLocusDeltaRequestOptions =\n MeetingUtil.generateBuildLocusDeltaRequestOptions(originalMeeting);\n\n const locusDeltaRequest = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return Promise.resolve();\n }\n\n const options = buildLocusDeltaRequestOptions(originalOptions);\n\n return meeting\n .request(options)\n .then((response) => MeetingUtil.updateLocusWithDelta(meeting, response));\n };\n\n return locusDeltaRequest;\n },\n\n selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record<SELF_POLICY, boolean>) => {\n if (!userPolicies) {\n return true;\n }\n\n return userPolicies[feature];\n },\n\n parseInterpretationInfo: (meeting, meetingInfo) => {\n if (!meeting || !meetingInfo) {\n return;\n }\n const siInfo = meetingInfo.simultaneousInterpretation;\n meeting.simultaneousInterpretation.updateMeetingSIEnabled(\n !!meetingInfo.turnOnSimultaneousInterpretation,\n !!siInfo?.currentSIInterpreter\n );\n const hostSIEnabled = !!(\n meetingInfo.turnOnSimultaneousInterpretation &&\n meetingInfo?.meetingSiteSetting?.enableHostInterpreterControlSI\n );\n meeting.simultaneousInterpretation.updateHostSIEnabled(hostSIEnabled);\n\n function renameKey(obj, oldKey, newKey) {\n if (oldKey in obj) {\n obj[newKey] = obj[oldKey];\n delete obj[oldKey];\n }\n }\n if (siInfo) {\n const lanuagesInfo = cloneDeep(siInfo.siLanguages);\n for (const language of lanuagesInfo) {\n renameKey(language, 'languageCode', 'languageName');\n renameKey(language, 'languageGroupId', 'languageCode');\n }\n if (!meeting.simultaneousInterpretation?.siLanguages?.length) {\n meeting.simultaneousInterpretation.updateInterpretation({siLanguages: lanuagesInfo});\n }\n }\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'parseInterpretationInfo',\n },\n EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE\n );\n },\n};\n\nexport default MeetingUtil;\n"],"mappings":"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"}
|
|
@@ -20,6 +20,7 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpe
|
|
|
20
20
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
21
21
|
var _uniq2 = _interopRequireDefault(require("lodash/uniq"));
|
|
22
22
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
23
|
+
var _util = _interopRequireDefault(require("../meeting/util"));
|
|
23
24
|
var _constants = require("../constants");
|
|
24
25
|
var _request = _interopRequireDefault(require("./request"));
|
|
25
26
|
var DEFAULT_TIMEOUT = 3000;
|
|
@@ -88,7 +89,7 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
88
89
|
case 5:
|
|
89
90
|
_context.prev = 5;
|
|
90
91
|
_context.next = 8;
|
|
91
|
-
return this.reachabilityRequest.getClusters(
|
|
92
|
+
return this.reachabilityRequest.getClusters(_util.default.getIpVersion(this.webex));
|
|
92
93
|
case 8:
|
|
93
94
|
_yield$this$reachabil = _context.sent;
|
|
94
95
|
clusters = _yield$this$reachabil.clusters;
|
|
@@ -163,16 +164,6 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
163
164
|
}
|
|
164
165
|
return isAnyClusterReachable;
|
|
165
166
|
}()
|
|
166
|
-
/**
|
|
167
|
-
* Returns what we know about the IP version of the networks we're connected to.
|
|
168
|
-
* @returns {IP_VERSION}
|
|
169
|
-
*/
|
|
170
|
-
}, {
|
|
171
|
-
key: "getIpVersion",
|
|
172
|
-
value: function getIpVersion() {
|
|
173
|
-
return _constants.IP_VERSION.unknown;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
167
|
/**
|
|
177
168
|
* Generate peerConnection config settings
|
|
178
169
|
* @param {object} cluster
|