@webex/plugin-meetings 3.0.0-beta.12 → 3.0.0-beta.14
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/meeting/index.js +26 -0
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +25 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +8 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/package.json +18 -18
- package/src/meeting/index.ts +18 -0
- package/src/meeting/request.ts +23 -1
- package/src/meeting/request.type.ts +11 -0
- package/test/unit/spec/meeting/index.js +64 -0
- package/test/unit/spec/meeting/request.js +19 -0
package/dist/meeting/request.js
CHANGED
|
@@ -825,6 +825,31 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
825
825
|
}
|
|
826
826
|
});
|
|
827
827
|
}
|
|
828
|
+
/**
|
|
829
|
+
* Make a network request to enable or disable reactions.
|
|
830
|
+
* @param {boolean} options.enable - determines if we need to enable or disable.
|
|
831
|
+
* @param {locusUrl} options.locusUrl
|
|
832
|
+
* @returns {Promise}
|
|
833
|
+
*/
|
|
834
|
+
|
|
835
|
+
}, {
|
|
836
|
+
key: "toggleReactions",
|
|
837
|
+
value: function toggleReactions(_ref11) {
|
|
838
|
+
var enable = _ref11.enable,
|
|
839
|
+
locusUrl = _ref11.locusUrl,
|
|
840
|
+
requestingParticipantId = _ref11.requestingParticipantId;
|
|
841
|
+
var uri = "".concat(locusUrl, "/").concat(_constants.CONTROLS);
|
|
842
|
+
return this.request({
|
|
843
|
+
method: _constants.HTTP_VERBS.PUT,
|
|
844
|
+
uri: uri,
|
|
845
|
+
body: {
|
|
846
|
+
reactions: {
|
|
847
|
+
enabled: enable
|
|
848
|
+
},
|
|
849
|
+
requestingParticipantId: requestingParticipantId
|
|
850
|
+
}
|
|
851
|
+
});
|
|
852
|
+
}
|
|
828
853
|
}]);
|
|
829
854
|
return MeetingRequest;
|
|
830
855
|
}(_webexCore.StatelessWebexPlugin);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MeetingRequest","attrs","options","changeVideoLayoutDebounced","changeVideoLayout","leading","trailing","asResourceOccupant","inviteeAddress","meetingNumber","permissionToken","deviceUrl","locusUrl","resourceId","correlationId","ensureConversation","moderator","pin","moveToResource","roapMessage","preferTranscoding","LoggerProxy","logger","info","url","body","device","deviceType","config","meetings","usingResource","moveMediaToResource","respOnlySdp","allowMultiDevice","supportsNativeLobby","clientMediaPreferences","webex","clientRegion","countryCode","regionCode","undefined","PARTICIPANT","internal","services","waitForCatalog","get","LOCI","CALL","invitee","address","error","concat","ALTERNATE_REDIRECT_TRUE","callPreferences","requestedMedia","_SLIDES_","localMedias","request","method","HTTP_VERBS","POST","uri","captchaRefreshUrl","captchaId","catch","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","record","recording","paused","PATCH","lock","locked","DECLINE","reason","MEDIA","floorReq","disposition","FLOOR_ACTION","GRANTED","beneficiary","personUrl","devices","requester","floor","resourceUrl","resourceToken","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","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 CALL,\n CONTROLS,\n DECLINE,\n END,\n FLOOR_ACTION,\n HTTP_VERBS,\n LEAVE,\n LOCI,\n LOCUS,\n MEDIA,\n PARTICIPANT,\n PROVISIONAL_TYPE_DIAL_IN,\n PROVISIONAL_TYPE_DIAL_OUT,\n SEND_DTMF_ENDPOINT,\n _SLIDES_\n} from '../constants';\nimport {Reaction} from '../reactions/reactions.type';\n\n/**\n * @class MeetingRequest\n */\nexport default class MeetingRequest extends StatelessWebexPlugin {\n changeVideoLayoutDebounced: any;\n\n constructor(attrs: any, options: any) {\n super(attrs, options);\n this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {leading: true, trailing: true});\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 * @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 }) {\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 } = options;\n\n LoggerProxy.logger.info(\n 'Meeting:request#joinMeeting --> Joining a meeting',\n correlationId\n );\n\n let url = '';\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 }\n };\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 }\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 }\n catch (e) {\n LoggerProxy.logger.error(`Meeting:request#joinMeeting Error Joining ${inviteeAddress || meetingNumber} --> ${e}`);\n throw (e);\n }\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({ captchaRefreshUrl, captchaId }: { captchaRefreshUrl: string; captchaId: string }) {\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.request({\n method: HTTP_VERBS.POST,\n uri,\n body\n }).catch((err) => {\n LoggerProxy.logger.error(`Meeting:request#dialIn --> Error provisioning a dial in device, error ${err}`);\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.request({\n method: HTTP_VERBS.POST,\n uri,\n body\n }).catch((err) => {\n LoggerProxy.logger.error(`Meeting:request#dialOut --> Error provisioning a dial out device, error ${err}`);\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.concat(syncUrl.split('?')[1] ? '&' : '?').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(`Meeting:request#syncMeeting --> Error syncing meeting, error ${err}`);\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(`Meeting:request#getFullLocus --> Error getting full locus, error ${err}`);\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.request({\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(\n 'Meeting:request#leaveMeeting --> Leaving a meeting',\n correlationId\n );\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 // @ts-ignore\n return this.request({\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 // @ts-ignore\n return this.request({\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.id\n * @returns {Promise}\n */\n recordMeeting(options: { locusUrl: string; deviceUrl: string; id: string, recording: any, paused: any }) {\n const uri = `${options.locusUrl}/${CONTROLS}`;\n const body = {\n record: {\n recording: options.recording,\n paused: options.paused\n }\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri,\n body\n });\n }\n\n lockMeeting(options) {\n const uri = `${options.locusUrl}/${CONTROLS}`;\n const body = {\n lock: {\n locked: options.lock\n }\n };\n\n // @ts-ignore\n return this.request({\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 // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body\n });\n }\n\n /**\n * Toggle remote audio and/or video\n * @param {Object} options options for toggling\n * @param {String} options.selfId Locus self id??\n * @param {String} options.locusUrl Locus url\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.localMedias local sdps\n * @param {Boolean} options.preferTranscoding false for multistream (Homer), true for transcoded media (Edonus)\n * @returns {Promise}\n */\n remoteAudioVideoToggle(options: {\n selfId: string;\n locusUrl: string;\n deviceUrl: string;\n resourceId: string;\n localMedias: string;\n } | any) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.selfId}/${MEDIA}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl\n },\n usingResource: options.resourceId || null,\n correlationId: options.correlationId,\n respOnlySdp: true,\n localMedias: options.localMedias,\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true\n }\n };\n\n // @ts-ignore\n return this.request({\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(options: {\n disposition: string;\n personUrl: string;\n deviceUrl: string;\n resourceId: string;\n uri: string;\n } | any) {\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\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.request({\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(new Error(`Both width and height must be specified. One of them is missing for main: ${JSON.stringify(main)}`));\n }\n\n if (content && (!content.width || !content.height)) {\n return Promise.reject(new Error(`Both width and height must be specified. One of them is missing for content: ${JSON.stringify(content)}`));\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 = (renderInfoMain || renderInfoContent) ?\n {\n renderInfo:\n {\n main: renderInfoMain,\n content: renderInfoContent\n }\n } : undefined;\n\n // @ts-ignore\n return this.request({\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.request({\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 }: { reactionChannelUrl: string, reaction: Reaction, participantId: string }) {\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["MeetingRequest","attrs","options","changeVideoLayoutDebounced","changeVideoLayout","leading","trailing","asResourceOccupant","inviteeAddress","meetingNumber","permissionToken","deviceUrl","locusUrl","resourceId","correlationId","ensureConversation","moderator","pin","moveToResource","roapMessage","preferTranscoding","LoggerProxy","logger","info","url","body","device","deviceType","config","meetings","usingResource","moveMediaToResource","respOnlySdp","allowMultiDevice","supportsNativeLobby","clientMediaPreferences","webex","clientRegion","countryCode","regionCode","undefined","PARTICIPANT","internal","services","waitForCatalog","get","LOCI","CALL","invitee","address","error","concat","ALTERNATE_REDIRECT_TRUE","callPreferences","requestedMedia","_SLIDES_","localMedias","request","method","HTTP_VERBS","POST","uri","captchaRefreshUrl","captchaId","catch","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","record","recording","paused","PATCH","lock","locked","DECLINE","reason","MEDIA","floorReq","disposition","FLOOR_ACTION","GRANTED","beneficiary","personUrl","devices","requester","floor","resourceUrl","resourceToken","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 CALL,\n CONTROLS,\n DECLINE,\n END,\n FLOOR_ACTION,\n HTTP_VERBS,\n LEAVE,\n LOCI,\n LOCUS,\n MEDIA,\n PARTICIPANT,\n PROVISIONAL_TYPE_DIAL_IN,\n PROVISIONAL_TYPE_DIAL_OUT,\n SEND_DTMF_ENDPOINT,\n _SLIDES_\n} from '../constants';\nimport {Reaction} from '../reactions/reactions.type';\nimport {SendReactionOptions, ToggleReactionsOptions} from './request.type';\n\n/**\n * @class MeetingRequest\n */\nexport default class MeetingRequest extends StatelessWebexPlugin {\n changeVideoLayoutDebounced: any;\n\n constructor(attrs: any, options: any) {\n super(attrs, options);\n this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {leading: true, trailing: true});\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 * @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 }) {\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 } = options;\n\n LoggerProxy.logger.info(\n 'Meeting:request#joinMeeting --> Joining a meeting',\n correlationId\n );\n\n let url = '';\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 }\n };\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 }\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 }\n catch (e) {\n LoggerProxy.logger.error(`Meeting:request#joinMeeting Error Joining ${inviteeAddress || meetingNumber} --> ${e}`);\n throw (e);\n }\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({ captchaRefreshUrl, captchaId }: { captchaRefreshUrl: string; captchaId: string }) {\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.request({\n method: HTTP_VERBS.POST,\n uri,\n body\n }).catch((err) => {\n LoggerProxy.logger.error(`Meeting:request#dialIn --> Error provisioning a dial in device, error ${err}`);\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.request({\n method: HTTP_VERBS.POST,\n uri,\n body\n }).catch((err) => {\n LoggerProxy.logger.error(`Meeting:request#dialOut --> Error provisioning a dial out device, error ${err}`);\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.concat(syncUrl.split('?')[1] ? '&' : '?').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(`Meeting:request#syncMeeting --> Error syncing meeting, error ${err}`);\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(`Meeting:request#getFullLocus --> Error getting full locus, error ${err}`);\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.request({\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(\n 'Meeting:request#leaveMeeting --> Leaving a meeting',\n correlationId\n );\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 // @ts-ignore\n return this.request({\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 // @ts-ignore\n return this.request({\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.id\n * @returns {Promise}\n */\n recordMeeting(options: { locusUrl: string; deviceUrl: string; id: string, recording: any, paused: any }) {\n const uri = `${options.locusUrl}/${CONTROLS}`;\n const body = {\n record: {\n recording: options.recording,\n paused: options.paused\n }\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri,\n body\n });\n }\n\n lockMeeting(options) {\n const uri = `${options.locusUrl}/${CONTROLS}`;\n const body = {\n lock: {\n locked: options.lock\n }\n };\n\n // @ts-ignore\n return this.request({\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 // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body\n });\n }\n\n /**\n * Toggle remote audio and/or video\n * @param {Object} options options for toggling\n * @param {String} options.selfId Locus self id??\n * @param {String} options.locusUrl Locus url\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.localMedias local sdps\n * @param {Boolean} options.preferTranscoding false for multistream (Homer), true for transcoded media (Edonus)\n * @returns {Promise}\n */\n remoteAudioVideoToggle(options: {\n selfId: string;\n locusUrl: string;\n deviceUrl: string;\n resourceId: string;\n localMedias: string;\n } | any) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.selfId}/${MEDIA}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl\n },\n usingResource: options.resourceId || null,\n correlationId: options.correlationId,\n respOnlySdp: true,\n localMedias: options.localMedias,\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true\n }\n };\n\n // @ts-ignore\n return this.request({\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(options: {\n disposition: string;\n personUrl: string;\n deviceUrl: string;\n resourceId: string;\n uri: string;\n } | any) {\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\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.request({\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(new Error(`Both width and height must be specified. One of them is missing for main: ${JSON.stringify(main)}`));\n }\n\n if (content && (!content.width || !content.height)) {\n return Promise.reject(new Error(`Both width and height must be specified. One of them is missing for content: ${JSON.stringify(content)}`));\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 = (renderInfoMain || renderInfoContent) ?\n {\n renderInfo:\n {\n main: renderInfoMain,\n content: renderInfoContent\n }\n } : undefined;\n\n // @ts-ignore\n return this.request({\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.request({\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 return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body: {\n reactions: {\n enabled: enable\n },\n requestingParticipantId,\n }\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["request.type.ts"],"sourcesContent":["export type SendReactionOptions = {\n reactionChannelUrl: string,\n reaction: Reaction,\n participantId: string\n}\n\nexport type ToggleReactionsOptions = {\n enable: boolean,\n locusUrl: string,\n requestingParticipantId: string\n}\n"],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/plugin-meetings",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.14",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
|
|
6
6
|
"contributors": [
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
]
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@webex/plugin-meetings": "3.0.0-beta.
|
|
32
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
33
|
-
"@webex/test-helper-mocha": "3.0.0-beta.
|
|
34
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
35
|
-
"@webex/test-helper-retry": "3.0.0-beta.
|
|
36
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
31
|
+
"@webex/plugin-meetings": "3.0.0-beta.14",
|
|
32
|
+
"@webex/test-helper-chai": "3.0.0-beta.14",
|
|
33
|
+
"@webex/test-helper-mocha": "3.0.0-beta.14",
|
|
34
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.14",
|
|
35
|
+
"@webex/test-helper-retry": "3.0.0-beta.14",
|
|
36
|
+
"@webex/test-helper-test-users": "3.0.0-beta.14",
|
|
37
37
|
"chai": "^4.3.4",
|
|
38
38
|
"chai-as-promised": "^7.1.1",
|
|
39
39
|
"jsdom-global": "3.0.2",
|
|
@@ -41,18 +41,18 @@
|
|
|
41
41
|
"typed-emitter": "^2.1.0"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@webex/common": "3.0.0-beta.
|
|
44
|
+
"@webex/common": "3.0.0-beta.14",
|
|
45
45
|
"@webex/internal-media-core": "^0.0.17-beta",
|
|
46
|
-
"@webex/internal-plugin-conversation": "3.0.0-beta.
|
|
47
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
48
|
-
"@webex/internal-plugin-llm": "3.0.0-beta.
|
|
49
|
-
"@webex/internal-plugin-mercury": "3.0.0-beta.
|
|
50
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
51
|
-
"@webex/internal-plugin-support": "3.0.0-beta.
|
|
52
|
-
"@webex/internal-plugin-user": "3.0.0-beta.
|
|
53
|
-
"@webex/plugin-people": "3.0.0-beta.
|
|
54
|
-
"@webex/plugin-rooms": "3.0.0-beta.
|
|
55
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
46
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.14",
|
|
47
|
+
"@webex/internal-plugin-device": "3.0.0-beta.14",
|
|
48
|
+
"@webex/internal-plugin-llm": "3.0.0-beta.14",
|
|
49
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.14",
|
|
50
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.14",
|
|
51
|
+
"@webex/internal-plugin-support": "3.0.0-beta.14",
|
|
52
|
+
"@webex/internal-plugin-user": "3.0.0-beta.14",
|
|
53
|
+
"@webex/plugin-people": "3.0.0-beta.14",
|
|
54
|
+
"@webex/plugin-rooms": "3.0.0-beta.14",
|
|
55
|
+
"@webex/webex-core": "3.0.0-beta.14",
|
|
56
56
|
"bowser": "^2.11.0",
|
|
57
57
|
"btoa": "^1.2.1",
|
|
58
58
|
"dotenv": "^4.0.0",
|
package/src/meeting/index.ts
CHANGED
|
@@ -6555,4 +6555,22 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
6555
6555
|
|
|
6556
6556
|
return Promise.reject(new Error('Error sending reaction, service url not found.'));
|
|
6557
6557
|
}
|
|
6558
|
+
|
|
6559
|
+
/**
|
|
6560
|
+
* Method to enable or disable reactions inside the meeting.
|
|
6561
|
+
*
|
|
6562
|
+
* @param {boolean} enable - enable or disable reactions
|
|
6563
|
+
* @returns {Promise}
|
|
6564
|
+
* @public
|
|
6565
|
+
* @memberof Meeting
|
|
6566
|
+
*/
|
|
6567
|
+
public toggleReactions(enable: boolean) {
|
|
6568
|
+
const isEnabled = this.locusInfo?.controls?.reactions?.enabled;
|
|
6569
|
+
|
|
6570
|
+
if ((isEnabled && enable) || (!isEnabled && !enable)) {
|
|
6571
|
+
return Promise.resolve(`Reactions are already ${isEnabled ? 'enabled' : 'disabled'}.`);
|
|
6572
|
+
}
|
|
6573
|
+
|
|
6574
|
+
return this.meetingRequest.toggleReactions({enable, locusUrl: this.locusUrl, requestingParticipantId: this.members.selfId});
|
|
6575
|
+
}
|
|
6558
6576
|
}
|
package/src/meeting/request.ts
CHANGED
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
_SLIDES_
|
|
27
27
|
} from '../constants';
|
|
28
28
|
import {Reaction} from '../reactions/reactions.type';
|
|
29
|
+
import {SendReactionOptions, ToggleReactionsOptions} from './request.type';
|
|
29
30
|
|
|
30
31
|
/**
|
|
31
32
|
* @class MeetingRequest
|
|
@@ -779,7 +780,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
779
780
|
* @param {string} options.senderID
|
|
780
781
|
* @returns {Promise}
|
|
781
782
|
*/
|
|
782
|
-
sendReaction({ reactionChannelUrl, reaction, participantId }:
|
|
783
|
+
sendReaction({ reactionChannelUrl, reaction, participantId }: SendReactionOptions) {
|
|
783
784
|
const uri = reactionChannelUrl;
|
|
784
785
|
|
|
785
786
|
// @ts-ignore
|
|
@@ -792,4 +793,25 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
792
793
|
}
|
|
793
794
|
});
|
|
794
795
|
}
|
|
796
|
+
|
|
797
|
+
/**
|
|
798
|
+
* Make a network request to enable or disable reactions.
|
|
799
|
+
* @param {boolean} options.enable - determines if we need to enable or disable.
|
|
800
|
+
* @param {locusUrl} options.locusUrl
|
|
801
|
+
* @returns {Promise}
|
|
802
|
+
*/
|
|
803
|
+
toggleReactions({ enable, locusUrl, requestingParticipantId }: ToggleReactionsOptions) {
|
|
804
|
+
const uri = `${locusUrl}/${CONTROLS}`;
|
|
805
|
+
|
|
806
|
+
return this.request({
|
|
807
|
+
method: HTTP_VERBS.PUT,
|
|
808
|
+
uri,
|
|
809
|
+
body: {
|
|
810
|
+
reactions: {
|
|
811
|
+
enabled: enable
|
|
812
|
+
},
|
|
813
|
+
requestingParticipantId,
|
|
814
|
+
}
|
|
815
|
+
});
|
|
816
|
+
}
|
|
795
817
|
}
|
|
@@ -5016,6 +5016,70 @@ describe('plugin-meetings', () => {
|
|
|
5016
5016
|
});
|
|
5017
5017
|
});
|
|
5018
5018
|
});
|
|
5019
|
+
describe('#toggleReactions', () => {
|
|
5020
|
+
it('should have #toggleReactions', () => {
|
|
5021
|
+
assert.exists(meeting.toggleReactions);
|
|
5022
|
+
});
|
|
5023
|
+
|
|
5024
|
+
beforeEach(() => {
|
|
5025
|
+
meeting.meetingRequest.toggleReactions = sinon.stub().returns(Promise.resolve());
|
|
5026
|
+
});
|
|
5027
|
+
|
|
5028
|
+
it('should toggle the reactions with the right data and return a promise', async () => {
|
|
5029
|
+
meeting.locusUrl = 'locusUrl';
|
|
5030
|
+
meeting.locusInfo.controls = {reactions: {enabled: false}};
|
|
5031
|
+
|
|
5032
|
+
|
|
5033
|
+
const togglePromise = meeting.toggleReactions(true);
|
|
5034
|
+
|
|
5035
|
+
assert.exists(togglePromise.then);
|
|
5036
|
+
await togglePromise;
|
|
5037
|
+
assert.calledOnceWithExactly(meeting.meetingRequest.toggleReactions, {
|
|
5038
|
+
locusUrl: 'locusUrl',
|
|
5039
|
+
enable: true,
|
|
5040
|
+
requestingParticipantId: meeting.members.selfId,
|
|
5041
|
+
});
|
|
5042
|
+
});
|
|
5043
|
+
|
|
5044
|
+
it('should resolve immediately if already enabled', async () => {
|
|
5045
|
+
meeting.locusUrl = 'locusUrl';
|
|
5046
|
+
meeting.locusInfo.controls = {reactions: {enabled: true}};
|
|
5047
|
+
|
|
5048
|
+
const togglePromise = meeting.toggleReactions(true);
|
|
5049
|
+
|
|
5050
|
+
const response = await togglePromise;
|
|
5051
|
+
|
|
5052
|
+
assert.equal(response, 'Reactions are already enabled.');
|
|
5053
|
+
assert.notCalled(meeting.meetingRequest.toggleReactions);
|
|
5054
|
+
});
|
|
5055
|
+
|
|
5056
|
+
it('should resolve immediately if already disabled', async () => {
|
|
5057
|
+
meeting.locusUrl = 'locusUrl';
|
|
5058
|
+
meeting.locusInfo.controls = {reactions: {enabled: false}};
|
|
5059
|
+
|
|
5060
|
+
const togglePromise = meeting.toggleReactions(false);
|
|
5061
|
+
|
|
5062
|
+
const response = await togglePromise;
|
|
5063
|
+
|
|
5064
|
+
assert.equal(response, 'Reactions are already disabled.');
|
|
5065
|
+
assert.notCalled(meeting.meetingRequest.toggleReactions);
|
|
5066
|
+
});
|
|
5067
|
+
|
|
5068
|
+
it('should toggle reactions on if controls is undefined and enable = true', async () => {
|
|
5069
|
+
meeting.locusUrl = 'locusUrl';
|
|
5070
|
+
meeting.locusInfo.controls = undefined;
|
|
5071
|
+
|
|
5072
|
+
const togglePromise = meeting.toggleReactions(true);
|
|
5073
|
+
|
|
5074
|
+
assert.exists(togglePromise.then);
|
|
5075
|
+
await togglePromise;
|
|
5076
|
+
assert.calledOnceWithExactly(meeting.meetingRequest.toggleReactions, {
|
|
5077
|
+
locusUrl: 'locusUrl',
|
|
5078
|
+
enable: true,
|
|
5079
|
+
requestingParticipantId: meeting.members.selfId,
|
|
5080
|
+
});
|
|
5081
|
+
});
|
|
5082
|
+
});
|
|
5019
5083
|
});
|
|
5020
5084
|
});
|
|
5021
5085
|
});
|
|
@@ -302,5 +302,24 @@ describe('plugin-meetings', () => {
|
|
|
302
302
|
assert.equal(requestParams.body.reaction, reaction);
|
|
303
303
|
});
|
|
304
304
|
});
|
|
305
|
+
|
|
306
|
+
describe('#toggleReactions', () => {
|
|
307
|
+
it('sends request to toggleReactions', async () => {
|
|
308
|
+
const locusUrl = 'locusUrl';
|
|
309
|
+
const requestingParticipantId = 'requestingParticipantId';
|
|
310
|
+
|
|
311
|
+
await meetingsRequest.toggleReactions({
|
|
312
|
+
enable: true,
|
|
313
|
+
locusUrl,
|
|
314
|
+
requestingParticipantId
|
|
315
|
+
});
|
|
316
|
+
const requestParams = meetingsRequest.request.getCall(0).args[0];
|
|
317
|
+
|
|
318
|
+
assert.equal(requestParams.method, 'PUT');
|
|
319
|
+
assert.equal(requestParams.uri, `${locusUrl}/controls`);
|
|
320
|
+
assert.equal(requestParams.body.reactions.enabled, true);
|
|
321
|
+
assert.equal(requestParams.body.requestingParticipantId, requestingParticipantId);
|
|
322
|
+
});
|
|
323
|
+
});
|
|
305
324
|
});
|
|
306
325
|
});
|