@webex/plugin-meetings 3.0.0-beta.145 → 3.0.0-beta.146

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.
@@ -607,8 +607,8 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
607
607
  if (options !== null && options !== void 0 && options.resourceToken) {
608
608
  body.resourceToken = options === null || options === void 0 ? void 0 : options.resourceToken;
609
609
  }
610
- if (options !== null && options !== void 0 && options.annotation) {
611
- body.annotation = options === null || options === void 0 ? void 0 : options.annotation;
610
+ if (options !== null && options !== void 0 && options.annotationInfo) {
611
+ body.annotation = options === null || options === void 0 ? void 0 : options.annotationInfo;
612
612
  }
613
613
 
614
614
  // @ts-ignore
@@ -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","changeVideoLayoutDebounced","changeVideoLayout","leading","trailing","asResourceOccupant","inviteeAddress","meetingNumber","permissionToken","deviceUrl","locusUrl","resourceId","correlationId","ensureConversation","moderator","pin","moveToResource","roapMessage","preferTranscoding","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","info","url","getJoinCookie","body","device","deviceType","config","meetings","usingResource","moveMediaToResource","respOnlySdp","allowMultiDevice","supportsNativeLobby","clientMediaPreferences","push","BREAKOUTS","BREAKOUTS_SUPPORTED","ANNOTATION","ANNOTATION_ON_SHARE_SUPPORTED","length","clientRegion","countryCode","regionCode","undefined","PARTICIPANT","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","desync","syncUrl","split","LOCUS","SYNCDEBUG","GET","reject","phoneUrl","selfId","LEAVE","PUT","ALERT","CONTROLS","lock","locked","PATCH","DECLINE","reason","floorReq","disposition","FLOOR_ACTION","GRANTED","beneficiary","personUrl","devices","requester","floor","resourceUrl","resourceToken","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 LOCUS,\n PARTICIPANT,\n PROVISIONAL_TYPE_DIAL_IN,\n PROVISIONAL_TYPE_DIAL_OUT,\n REACHABILITY,\n SEND_DTMF_ENDPOINT,\n _SLIDES_,\n ANNOTATION,\n} from '../constants';\nimport {SendReactionOptions, ToggleReactionsOptions} from './request.type';\nimport MeetingUtil from './util';\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\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\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 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 }) {\n const {\n asResourceOccupant,\n inviteeAddress,\n meetingNumber,\n permissionToken,\n deviceUrl,\n locusUrl,\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 } = 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 },\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.clientRegion) {\n // @ts-ignore\n body.device.countryCode = this.webex.meetings.clientRegion.countryCode;\n // @ts-ignore\n body.device.regionCode = this.webex.meetings.clientRegion.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 // @ts-ignore\n await this.webex.internal.services.waitForCatalog('postauth');\n // @ts-ignore\n url = `${this.webex.internal.services.get('locus')}/${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 * Syns the missed delta event\n * @param {Object} options\n * @param {boolean} options.desync flag to get partial or whole locus object\n * @param {String} options.syncUrl sync url to get ht elatest locus delta\n * @returns {Promise}\n */\n syncMeeting(options: {desync: boolean; syncUrl: string}) {\n /* eslint-disable no-else-return */\n const {desync} = options;\n let {syncUrl} = options;\n\n /* istanbul ignore else */\n if (desync) {\n // check for existing URL parameters\n syncUrl = syncUrl\n .concat(syncUrl.split('?')[1] ? '&' : '?')\n .concat(`${LOCUS.SYNCDEBUG}=${desync}`);\n }\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: syncUrl,\n }) // TODO: Handle if delta sync failed . Get the full locus object\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#syncMeeting --> Error syncing meeting, error ${err}`\n );\n\n return err;\n });\n }\n\n /**\n * Request to get the complete locus object\n * @param {Object} options\n * @param {boolean} options.desync flag to get partial or whole locus object\n * @param {String} options.locusUrl sync url to get ht elatest locus delta\n * @returns {Promise}\n */\n getFullLocus(options: {desync: boolean; locusUrl: string}) {\n let {locusUrl} = options;\n const {desync} = options;\n\n if (locusUrl) {\n if (desync) {\n locusUrl += `?${LOCUS.SYNCDEBUG}=${desync}`;\n }\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: locusUrl,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#getFullLocus --> Error getting full 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 * Make a network request 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 {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 * 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 annotation: any;\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?.annotation) {\n body.annotation = options?.annotation;\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","changeVideoLayoutDebounced","changeVideoLayout","leading","trailing","asResourceOccupant","inviteeAddress","meetingNumber","permissionToken","deviceUrl","locusUrl","resourceId","correlationId","ensureConversation","moderator","pin","moveToResource","roapMessage","preferTranscoding","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","info","url","getJoinCookie","body","device","deviceType","config","meetings","usingResource","moveMediaToResource","respOnlySdp","allowMultiDevice","supportsNativeLobby","clientMediaPreferences","push","BREAKOUTS","BREAKOUTS_SUPPORTED","ANNOTATION","ANNOTATION_ON_SHARE_SUPPORTED","length","clientRegion","countryCode","regionCode","undefined","PARTICIPANT","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","desync","syncUrl","split","LOCUS","SYNCDEBUG","GET","reject","phoneUrl","selfId","LEAVE","PUT","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 LOCUS,\n PARTICIPANT,\n PROVISIONAL_TYPE_DIAL_IN,\n PROVISIONAL_TYPE_DIAL_OUT,\n REACHABILITY,\n SEND_DTMF_ENDPOINT,\n _SLIDES_,\n ANNOTATION,\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\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\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 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 }) {\n const {\n asResourceOccupant,\n inviteeAddress,\n meetingNumber,\n permissionToken,\n deviceUrl,\n locusUrl,\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 } = 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 },\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.clientRegion) {\n // @ts-ignore\n body.device.countryCode = this.webex.meetings.clientRegion.countryCode;\n // @ts-ignore\n body.device.regionCode = this.webex.meetings.clientRegion.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 // @ts-ignore\n await this.webex.internal.services.waitForCatalog('postauth');\n // @ts-ignore\n url = `${this.webex.internal.services.get('locus')}/${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 * Syns the missed delta event\n * @param {Object} options\n * @param {boolean} options.desync flag to get partial or whole locus object\n * @param {String} options.syncUrl sync url to get ht elatest locus delta\n * @returns {Promise}\n */\n syncMeeting(options: {desync: boolean; syncUrl: string}) {\n /* eslint-disable no-else-return */\n const {desync} = options;\n let {syncUrl} = options;\n\n /* istanbul ignore else */\n if (desync) {\n // check for existing URL parameters\n syncUrl = syncUrl\n .concat(syncUrl.split('?')[1] ? '&' : '?')\n .concat(`${LOCUS.SYNCDEBUG}=${desync}`);\n }\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: syncUrl,\n }) // TODO: Handle if delta sync failed . Get the full locus object\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#syncMeeting --> Error syncing meeting, error ${err}`\n );\n\n return err;\n });\n }\n\n /**\n * Request to get the complete locus object\n * @param {Object} options\n * @param {boolean} options.desync flag to get partial or whole locus object\n * @param {String} options.locusUrl sync url to get ht elatest locus delta\n * @returns {Promise}\n */\n getFullLocus(options: {desync: boolean; locusUrl: string}) {\n let {locusUrl} = options;\n const {desync} = options;\n\n if (locusUrl) {\n if (desync) {\n locusUrl += `?${LOCUS.SYNCDEBUG}=${desync}`;\n }\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: locusUrl,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#getFullLocus --> Error getting full 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 * Make a network request 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 {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 * 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,3 +1,4 @@
1
+ import { ANNOTATION_POLICY } from './constants';
1
2
  /**
2
3
  * Type for an StrokeData Object
3
4
  */
@@ -21,6 +22,13 @@ type CommandRequestBody = {
21
22
  shareInstanceId: string;
22
23
  receivers?: any[];
23
24
  };
25
+ /**
26
+ * Type for an annotation Object include annotation version and privilege
27
+ */
28
+ type AnnotationInfo = {
29
+ version: string;
30
+ policy: ANNOTATION_POLICY;
31
+ };
24
32
  interface IAnnotationChannel {
25
33
  acceptRequest: (approval: any) => undefined | Promise<void>;
26
34
  declineRequest: (approval: any) => undefined | Promise<void>;
@@ -32,4 +40,4 @@ interface IAnnotationChannel {
32
40
  approvalUrlUpdate: (approvalUrl: string) => void;
33
41
  locusUrlUpdate: (locusUrl: string) => void;
34
42
  }
35
- export type { StrokeData, RequestData, CommandRequestBody, IAnnotationChannel };
43
+ export type { StrokeData, RequestData, CommandRequestBody, IAnnotationChannel, AnnotationInfo };
@@ -10,11 +10,11 @@ export declare const ANNOTATION_STATUS: {
10
10
  NO_ANNOTATION: string;
11
11
  RUNNING_ANNOTATION: string;
12
12
  };
13
- export declare const ANNOTATION_POLICY: {
14
- ANYONE_CAN_ANNOTATE: string;
15
- APPROVAL: string;
16
- ANNOTATION_NOT_ALLOWED: string;
17
- };
13
+ export declare enum ANNOTATION_POLICY {
14
+ ANYONE_CAN_ANNOTATE = "AnyoneCanAnnotate",
15
+ APPROVAL = "Approval",
16
+ ANNOTATION_NOT_ALLOWED = "AnnotationNotAllowed"
17
+ }
18
18
  export declare const ANNOTATION_REQUEST_TYPE: {
19
19
  ANNOTATION_MESSAGE: string;
20
20
  };
@@ -17,6 +17,7 @@ import InMeetingActions from './in-meeting-actions';
17
17
  import RecordingController from '../recording-controller';
18
18
  import ControlsOptionsManager from '../controls-options-manager';
19
19
  import { LocusMediaRequest } from './locusMediaRequest';
20
+ import { AnnotationInfo } from '../annotation/annotation.types';
20
21
  export declare const MEDIA_UPDATE_TYPE: {
21
22
  ALL: string;
22
23
  AUDIO: string;
@@ -382,6 +383,7 @@ export default class Meeting extends StatelessWebexPlugin {
382
383
  roles: any[];
383
384
  environment: string;
384
385
  namespace: string;
386
+ annotationInfo: AnnotationInfo;
385
387
  /**
386
388
  * @param {Object} attrs
387
389
  * @param {Object} options
@@ -1751,6 +1753,7 @@ export default class Meeting extends StatelessWebexPlugin {
1751
1753
  audio?: LocalTrack;
1752
1754
  video?: LocalDisplayTrack;
1753
1755
  };
1756
+ annotationInfo?: AnnotationInfo;
1754
1757
  }): Promise<void>;
1755
1758
  /**
1756
1759
  * Un-publishes specified local tracks in the meeting
@@ -1,5 +1,6 @@
1
1
  import { StatelessWebexPlugin } from '@webex/webex-core';
2
2
  import { SendReactionOptions, ToggleReactionsOptions } from './request.type';
3
+ import { AnnotationInfo } from '../annotation/annotation.types';
3
4
  /**
4
5
  * @class MeetingRequest
5
6
  */
@@ -189,7 +190,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
189
190
  deviceUrl: string;
190
191
  resourceId: string;
191
192
  uri: string;
192
- annotation: any;
193
+ annotationInfo: AnnotationInfo;
193
194
  } | any): any;
194
195
  /**
195
196
  * Sends a request to the DTMF endpoint to send tones
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "3.0.0-beta.145",
3
+ "version": "3.0.0-beta.146",
4
4
  "description": "",
5
5
  "license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
6
6
  "contributors": [
@@ -32,12 +32,12 @@
32
32
  "build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
33
33
  },
34
34
  "devDependencies": {
35
- "@webex/plugin-meetings": "3.0.0-beta.145",
36
- "@webex/test-helper-chai": "3.0.0-beta.145",
37
- "@webex/test-helper-mocha": "3.0.0-beta.145",
38
- "@webex/test-helper-mock-webex": "3.0.0-beta.145",
39
- "@webex/test-helper-retry": "3.0.0-beta.145",
40
- "@webex/test-helper-test-users": "3.0.0-beta.145",
35
+ "@webex/plugin-meetings": "3.0.0-beta.146",
36
+ "@webex/test-helper-chai": "3.0.0-beta.146",
37
+ "@webex/test-helper-mocha": "3.0.0-beta.146",
38
+ "@webex/test-helper-mock-webex": "3.0.0-beta.146",
39
+ "@webex/test-helper-retry": "3.0.0-beta.146",
40
+ "@webex/test-helper-test-users": "3.0.0-beta.146",
41
41
  "chai": "^4.3.4",
42
42
  "chai-as-promised": "^7.1.1",
43
43
  "jsdom-global": "3.0.2",
@@ -46,19 +46,19 @@
46
46
  "typescript": "^4.7.4"
47
47
  },
48
48
  "dependencies": {
49
- "@webex/common": "3.0.0-beta.145",
49
+ "@webex/common": "3.0.0-beta.146",
50
50
  "@webex/internal-media-core": "1.38.3",
51
- "@webex/internal-plugin-conversation": "3.0.0-beta.145",
52
- "@webex/internal-plugin-device": "3.0.0-beta.145",
53
- "@webex/internal-plugin-llm": "3.0.0-beta.145",
54
- "@webex/internal-plugin-mercury": "3.0.0-beta.145",
55
- "@webex/internal-plugin-metrics": "3.0.0-beta.145",
56
- "@webex/internal-plugin-support": "3.0.0-beta.145",
57
- "@webex/internal-plugin-user": "3.0.0-beta.145",
58
- "@webex/media-helpers": "3.0.0-beta.145",
59
- "@webex/plugin-people": "3.0.0-beta.145",
60
- "@webex/plugin-rooms": "3.0.0-beta.145",
61
- "@webex/webex-core": "3.0.0-beta.145",
51
+ "@webex/internal-plugin-conversation": "3.0.0-beta.146",
52
+ "@webex/internal-plugin-device": "3.0.0-beta.146",
53
+ "@webex/internal-plugin-llm": "3.0.0-beta.146",
54
+ "@webex/internal-plugin-mercury": "3.0.0-beta.146",
55
+ "@webex/internal-plugin-metrics": "3.0.0-beta.146",
56
+ "@webex/internal-plugin-support": "3.0.0-beta.146",
57
+ "@webex/internal-plugin-user": "3.0.0-beta.146",
58
+ "@webex/media-helpers": "3.0.0-beta.146",
59
+ "@webex/plugin-people": "3.0.0-beta.146",
60
+ "@webex/plugin-rooms": "3.0.0-beta.146",
61
+ "@webex/webex-core": "3.0.0-beta.146",
62
62
  "ampersand-collection": "^2.0.2",
63
63
  "bowser": "^2.11.0",
64
64
  "btoa": "^1.2.1",
@@ -1,3 +1,5 @@
1
+ import {ANNOTATION_POLICY} from './constants';
2
+
1
3
  /**
2
4
  * Type for an StrokeData Object
3
5
  */
@@ -23,6 +25,13 @@ type CommandRequestBody = {
23
25
  shareInstanceId: string;
24
26
  receivers?: any[];
25
27
  };
28
+ /**
29
+ * Type for an annotation Object include annotation version and privilege
30
+ */
31
+ type AnnotationInfo = {
32
+ version: string;
33
+ policy: ANNOTATION_POLICY;
34
+ };
26
35
 
27
36
  interface IAnnotationChannel {
28
37
  // === below is for presenter
@@ -40,4 +49,4 @@ interface IAnnotationChannel {
40
49
  locusUrlUpdate: (locusUrl: string) => void;
41
50
  }
42
51
 
43
- export type {StrokeData, RequestData, CommandRequestBody, IAnnotationChannel};
52
+ export type {StrokeData, RequestData, CommandRequestBody, IAnnotationChannel, AnnotationInfo};
@@ -12,11 +12,11 @@ export const ANNOTATION_STATUS = {
12
12
  RUNNING_ANNOTATION: 'RUNNING_ANNOTATION',
13
13
  };
14
14
 
15
- export const ANNOTATION_POLICY = {
16
- ANYONE_CAN_ANNOTATE: 'AnyoneCanAnnotate',
17
- APPROVAL: 'Approval',
18
- ANNOTATION_NOT_ALLOWED: 'AnnotationNotAllowed',
19
- };
15
+ export enum ANNOTATION_POLICY {
16
+ ANYONE_CAN_ANNOTATE = 'AnyoneCanAnnotate',
17
+ APPROVAL = 'Approval',
18
+ ANNOTATION_NOT_ALLOWED = 'AnnotationNotAllowed',
19
+ }
20
20
 
21
21
  export const ANNOTATION_REQUEST_TYPE = {
22
22
  ANNOTATION_MESSAGE: 'annotation_message',
@@ -124,6 +124,7 @@ import RecordingController from '../recording-controller';
124
124
  import ControlsOptionsManager from '../controls-options-manager';
125
125
  import PermissionError from '../common/errors/permission';
126
126
  import {LocusMediaRequest} from './locusMediaRequest';
127
+ import {AnnotationInfo} from '../annotation/annotation.types';
127
128
 
128
129
  const {isBrowser} = BrowserDetection();
129
130
 
@@ -537,6 +538,7 @@ export default class Meeting extends StatelessWebexPlugin {
537
538
  roles: any[];
538
539
  environment: string;
539
540
  namespace = MEETINGS;
541
+ annotationInfo: AnnotationInfo;
540
542
 
541
543
  /**
542
544
  * @param {Object} attrs
@@ -6583,6 +6585,7 @@ export default class Meeting extends StatelessWebexPlugin {
6583
6585
  deviceUrl: this.deviceUrl,
6584
6586
  uri: content.url,
6585
6587
  resourceUrl: this.resourceUrl,
6588
+ annotationInfo: this.annotationInfo,
6586
6589
  })
6587
6590
  .then(() => {
6588
6591
  this.isSharing = true;
@@ -7700,13 +7703,14 @@ export default class Meeting extends StatelessWebexPlugin {
7700
7703
  audio?: LocalTrack; // todo: for now screen share audio is not supported (will be done in SPARK-399690)
7701
7704
  video?: LocalDisplayTrack;
7702
7705
  };
7706
+ annotationInfo?: AnnotationInfo;
7703
7707
  }): Promise<void> {
7704
7708
  this.checkMediaConnection();
7705
7709
 
7706
7710
  if (!this.isMultistream) {
7707
7711
  throw new Error('publishTracks() only supported with multistream');
7708
7712
  }
7709
-
7713
+ this.annotationInfo = tracks.annotationInfo;
7710
7714
  if (tracks.screenShare?.video) {
7711
7715
  const oldTrack = this.mediaProperties.shareTrack;
7712
7716
  const localDisplayTrack = tracks.screenShare?.video;
@@ -29,6 +29,7 @@ import {
29
29
  } from '../constants';
30
30
  import {SendReactionOptions, ToggleReactionsOptions} from './request.type';
31
31
  import MeetingUtil from './util';
32
+ import {AnnotationInfo} from '../annotation/annotation.types';
32
33
 
33
34
  /**
34
35
  * @class MeetingRequest
@@ -630,7 +631,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
630
631
  deviceUrl: string;
631
632
  resourceId: string;
632
633
  uri: string;
633
- annotation: any;
634
+ annotationInfo: AnnotationInfo;
634
635
  }
635
636
  | any
636
637
  ) {
@@ -664,8 +665,8 @@ export default class MeetingRequest extends StatelessWebexPlugin {
664
665
  if (options?.resourceToken) {
665
666
  body.resourceToken = options?.resourceToken;
666
667
  }
667
- if (options?.annotation) {
668
- body.annotation = options?.annotation;
668
+ if (options?.annotationInfo) {
669
+ body.annotation = options?.annotationInfo;
669
670
  }
670
671
 
671
672
  // @ts-ignore
@@ -86,6 +86,7 @@ import {
86
86
  MeetingInfoV2PasswordError,
87
87
  MeetingInfoV2PolicyError,
88
88
  } from '../../../../src/meeting-info/meeting-info-v2';
89
+ import {ANNOTATION_POLICY} from "../../../../src/annotation/constants";
89
90
 
90
91
  const {getBrowserName, getOSVersion} = BrowserDetection();
91
92
 
@@ -4130,6 +4131,14 @@ describe('plugin-meetings', () => {
4130
4131
  checkScreenShareVideoPublished(videoShareTrack);
4131
4132
  });
4132
4133
  });
4134
+ it('creates instance and publishes with annotation info', async () => {
4135
+ const annotationInfo = {
4136
+ version: '1',
4137
+ policy: ANNOTATION_POLICY.APPROVAL,
4138
+ };
4139
+ await meeting.publishTracks({annotationInfo});
4140
+ assert.equal(meeting.annotationInfo, annotationInfo);
4141
+ });
4133
4142
 
4134
4143
  describe('unpublishTracks', () => {
4135
4144
  beforeEach(async () => {
@@ -560,13 +560,13 @@ describe('plugin-meetings', () => {
560
560
  const deviceUrl = 'deviceUrl';
561
561
  const locusUrl = 'locusUrl';
562
562
  meetingsRequest.config.meetings.deviceType = 'deviceType';
563
-
563
+
564
564
  await meetingsRequest.declineMeeting({
565
565
  locusUrl,
566
566
  deviceUrl,
567
567
  reason
568
568
  });
569
-
569
+
570
570
  const expectedBody = {
571
571
  device: {
572
572
  deviceType: 'deviceType',
@@ -574,7 +574,7 @@ describe('plugin-meetings', () => {
574
574
  },
575
575
  reason,
576
576
  };
577
-
577
+
578
578
  checkRequest({
579
579
  method: 'PUT',
580
580
  uri: `${locusUrl}/participant/decline`,
@@ -606,7 +606,7 @@ describe('plugin-meetings', () => {
606
606
  resourceId: 'resourceId',
607
607
  resourceUrl: 'resourceUrl',
608
608
  uri: 'optionsUrl',
609
- annotation:{
609
+ annotationInfo:{
610
610
  version: '1',
611
611
  policy: 'Approval',
612
612
  },