@webex/plugin-meetings 1.151.5 → 1.152.1
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/common/errors/captcha-error.js +64 -0
- package/dist/common/errors/captcha-error.js.map +1 -0
- package/dist/common/errors/password-error.js +64 -0
- package/dist/common/errors/password-error.js.map +1 -0
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +33 -1
- package/dist/constants.js.map +1 -1
- package/dist/meeting/index.js +674 -433
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +59 -32
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +12 -0
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +5 -0
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +142 -8
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/utilv2.js +12 -1
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/index.js +31 -22
- package/dist/meetings/index.js.map +1 -1
- package/dist/peer-connection-manager/index.js +10 -1
- package/dist/peer-connection-manager/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +6 -9
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/package.json +5 -5
- package/src/common/errors/captcha-error.js +21 -0
- package/src/common/errors/password-error.js +21 -0
- package/src/config.js +2 -1
- package/src/constants.js +24 -0
- package/src/meeting/index.js +180 -5
- package/src/meeting/request.js +27 -0
- package/src/meeting/util.js +15 -4
- package/src/meeting-info/index.js +6 -1
- package/src/meeting-info/meeting-info-v2.js +67 -3
- package/src/meeting-info/utilv2.js +12 -1
- package/src/meetings/index.js +12 -9
- package/src/peer-connection-manager/index.js +13 -2
- package/src/personal-meeting-room/index.js +5 -6
- package/test/unit/spec/meeting/index.js +304 -2
- package/test/unit/spec/meeting-info/meetinginfov2.js +93 -3
- package/test/unit/spec/peerconnection-manager/index.js +66 -0
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +33 -0
package/dist/meeting/request.js
CHANGED
|
@@ -212,6 +212,33 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
212
212
|
|
|
213
213
|
return joinMeeting;
|
|
214
214
|
}()
|
|
215
|
+
/**
|
|
216
|
+
* Send a request to refresh the captcha
|
|
217
|
+
* @param {Object} options
|
|
218
|
+
* @param {String} options.captchaRefreshUrl
|
|
219
|
+
* @param {String} options.captchaId
|
|
220
|
+
* @returns {Promise}
|
|
221
|
+
* @private
|
|
222
|
+
*/
|
|
223
|
+
|
|
224
|
+
}, {
|
|
225
|
+
key: "refreshCaptcha",
|
|
226
|
+
value: function refreshCaptcha(_ref) {
|
|
227
|
+
var captchaRefreshUrl = _ref.captchaRefreshUrl,
|
|
228
|
+
captchaId = _ref.captchaId;
|
|
229
|
+
var body = {
|
|
230
|
+
captchaId: captchaId
|
|
231
|
+
};
|
|
232
|
+
return this.request({
|
|
233
|
+
method: _constants.HTTP_VERBS.POST,
|
|
234
|
+
uri: captchaRefreshUrl,
|
|
235
|
+
body: body
|
|
236
|
+
}).catch(function (err) {
|
|
237
|
+
_loggerProxy.default.logger.error("Meeting:request#refreshCaptcha --> Error: ".concat(err));
|
|
238
|
+
|
|
239
|
+
throw err;
|
|
240
|
+
});
|
|
241
|
+
}
|
|
215
242
|
/**
|
|
216
243
|
* Make a network request to add a dial in device
|
|
217
244
|
* @param {Object} options
|
|
@@ -225,11 +252,11 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
225
252
|
|
|
226
253
|
}, {
|
|
227
254
|
key: "dialIn",
|
|
228
|
-
value: function dialIn(
|
|
229
|
-
var locusUrl =
|
|
230
|
-
dialInUrl =
|
|
231
|
-
clientUrl =
|
|
232
|
-
correlationId =
|
|
255
|
+
value: function dialIn(_ref2) {
|
|
256
|
+
var locusUrl = _ref2.locusUrl,
|
|
257
|
+
dialInUrl = _ref2.dialInUrl,
|
|
258
|
+
clientUrl = _ref2.clientUrl,
|
|
259
|
+
correlationId = _ref2.correlationId;
|
|
233
260
|
|
|
234
261
|
_loggerProxy.default.logger.info('Meeting:request#dialIn --> Provisioning a dial in device', correlationId);
|
|
235
262
|
|
|
@@ -267,12 +294,12 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
267
294
|
|
|
268
295
|
}, {
|
|
269
296
|
key: "dialOut",
|
|
270
|
-
value: function dialOut(
|
|
271
|
-
var locusUrl =
|
|
272
|
-
dialOutUrl =
|
|
273
|
-
phoneNumber =
|
|
274
|
-
clientUrl =
|
|
275
|
-
correlationId =
|
|
297
|
+
value: function dialOut(_ref3) {
|
|
298
|
+
var locusUrl = _ref3.locusUrl,
|
|
299
|
+
dialOutUrl = _ref3.dialOutUrl,
|
|
300
|
+
phoneNumber = _ref3.phoneNumber,
|
|
301
|
+
clientUrl = _ref3.clientUrl,
|
|
302
|
+
correlationId = _ref3.correlationId;
|
|
276
303
|
|
|
277
304
|
_loggerProxy.default.logger.info('Meeting:request#dialOut --> Provisioning a dial out device', correlationId);
|
|
278
305
|
|
|
@@ -372,11 +399,11 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
372
399
|
|
|
373
400
|
}, {
|
|
374
401
|
key: "disconnectPhoneAudio",
|
|
375
|
-
value: function disconnectPhoneAudio(
|
|
376
|
-
var locusUrl =
|
|
377
|
-
phoneUrl =
|
|
378
|
-
correlationId =
|
|
379
|
-
selfId =
|
|
402
|
+
value: function disconnectPhoneAudio(_ref4) {
|
|
403
|
+
var locusUrl = _ref4.locusUrl,
|
|
404
|
+
phoneUrl = _ref4.phoneUrl,
|
|
405
|
+
correlationId = _ref4.correlationId,
|
|
406
|
+
selfId = _ref4.selfId;
|
|
380
407
|
|
|
381
408
|
_loggerProxy.default.logger.info("Meeting:request#disconnectPhoneAudio --> request phone ".concat(phoneUrl, " to leave"), correlationId);
|
|
382
409
|
|
|
@@ -411,12 +438,12 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
411
438
|
|
|
412
439
|
}, {
|
|
413
440
|
key: "leaveMeeting",
|
|
414
|
-
value: function leaveMeeting(
|
|
415
|
-
var locusUrl =
|
|
416
|
-
selfId =
|
|
417
|
-
url =
|
|
418
|
-
resourceId =
|
|
419
|
-
correlationId =
|
|
441
|
+
value: function leaveMeeting(_ref5) {
|
|
442
|
+
var locusUrl = _ref5.locusUrl,
|
|
443
|
+
selfId = _ref5.selfId,
|
|
444
|
+
url = _ref5.deviceUrl,
|
|
445
|
+
resourceId = _ref5.resourceId,
|
|
446
|
+
correlationId = _ref5.correlationId;
|
|
420
447
|
|
|
421
448
|
_loggerProxy.default.logger.info('Meeting:request#leaveMeeting --> Leaving a meeting', correlationId);
|
|
422
449
|
|
|
@@ -627,10 +654,10 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
627
654
|
|
|
628
655
|
}, {
|
|
629
656
|
key: "sendDTMF",
|
|
630
|
-
value: function sendDTMF(
|
|
631
|
-
var locusUrl =
|
|
632
|
-
deviceUrl =
|
|
633
|
-
tones =
|
|
657
|
+
value: function sendDTMF(_ref6) {
|
|
658
|
+
var locusUrl = _ref6.locusUrl,
|
|
659
|
+
deviceUrl = _ref6.deviceUrl,
|
|
660
|
+
tones = _ref6.tones;
|
|
634
661
|
return this.request({
|
|
635
662
|
method: _constants.HTTP_VERBS.POST,
|
|
636
663
|
uri: "".concat(locusUrl, "/").concat(_constants.SEND_DTMF_ENDPOINT),
|
|
@@ -660,12 +687,12 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
660
687
|
|
|
661
688
|
}, {
|
|
662
689
|
key: "changeVideoLayout",
|
|
663
|
-
value: function changeVideoLayout(
|
|
664
|
-
var locusUrl =
|
|
665
|
-
deviceUrl =
|
|
666
|
-
layoutType =
|
|
667
|
-
main =
|
|
668
|
-
content =
|
|
690
|
+
value: function changeVideoLayout(_ref7) {
|
|
691
|
+
var locusUrl = _ref7.locusUrl,
|
|
692
|
+
deviceUrl = _ref7.deviceUrl,
|
|
693
|
+
layoutType = _ref7.layoutType,
|
|
694
|
+
main = _ref7.main,
|
|
695
|
+
content = _ref7.content;
|
|
669
696
|
|
|
670
697
|
// send main/content renderInfo only if both width and height are specified
|
|
671
698
|
if (main && (!main.width || !main.height)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["request.js"],"names":["MeetingRequest","attrs","options","changeVideoLayoutDebounced","changeVideoLayout","leading","trailing","asResourceOccupant","sipUri","meetingNumber","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","dialInUrl","clientUrl","PROVISIONAL","provisionalType","PROVISIONAL_TYPE_DIAL_IN","catch","err","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","StatelessWebexPlugin"],"mappings":"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","sourcesContent":["import uuid from 'uuid';\nimport {debounce} from 'lodash';\nimport {StatelessWebexPlugin} from '@webex/webex-core';\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 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';\n\n/**\n * @class MeetingRequest\n */\nexport default class MeetingRequest extends StatelessWebexPlugin {\n constructor(attrs, options) {\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 const {\n asResourceOccupant,\n sipUri,\n meetingNumber,\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 = {\n asResourceOccupant,\n device: {\n url: deviceUrl,\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 if (this.webex.meetings.clientRegion) {\n body.device.countryCode = this.webex.meetings.clientRegion.countryCode;\n body.device.regionCode = this.webex.meetings.clientRegion.regionCode;\n }\n\n if (moderator !== undefined) {\n body.moderator = moderator;\n }\n\n if (pin !== undefined) {\n body.pin = pin;\n }\n\n if (locusUrl) {\n url = `${locusUrl}/${PARTICIPANT}`;\n }\n else if (sipUri || meetingNumber) {\n try {\n await this.webex.internal.services.waitForCatalog('postauth');\n url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;\n body.invitee = {\n address: sipUri || `wbxmn:${meetingNumber}`\n };\n }\n catch (e) {\n LoggerProxy.logger.error(`Meeting:request#joinMeeting ${sipUri ? 'sipUri' : '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 === sipUri) {\n body.callPreferences = {\n requestedMedia: [_SLIDES_]\n };\n }\n\n if (roapMessage) {\n body.localMedias = roapMessage.localMedias;\n }\n\n return this.request({\n method: HTTP_VERBS.POST,\n uri: url,\n body\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.localUrl 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 dialIn({\n locusUrl,\n dialInUrl,\n clientUrl,\n correlationId\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 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.localUrl 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 dialOut({\n locusUrl,\n dialOutUrl,\n phoneNumber,\n clientUrl,\n correlationId\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 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 {boolen} 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) {\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 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 {boolen} 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) {\n let {locusUrl} = options;\n const {desync} = options;\n\n if (locusUrl) {\n if (desync) {\n locusUrl += `?${LOCUS.SYNCDEBUG}=${desync}`;\n }\n\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 disconnectPhoneAudio({\n locusUrl,\n phoneUrl,\n correlationId,\n selfId\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 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 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 deviceType: this.config.meetings.deviceType,\n url\n },\n usingResource: resourceId || null,\n correlationId\n };\n\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) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${ALERT}`;\n const body = {\n device: {\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl\n },\n correlationId: options.correlationId\n };\n\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) {\n const uri = `${options.locusUrl}/${CONTROLS}`;\n const body = {\n record: {\n recording: options.recording,\n paused: options.paused\n }\n };\n\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 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) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${DECLINE}`;\n const body = {\n device: {\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl\n },\n ...(options.reason && {reason: options.reason})\n };\n\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 * @returns {Promise}\n */\n remoteAudioVideoToggle(options) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.selfId}/${MEDIA}`;\n const body = {\n device: {\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 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 let floorReq = {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 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 = {\n floor: floorReq,\n resourceUrl: options.resourceUrl\n };\n\n if (options?.resourceToken) {\n body.resourceToken = options?.resourceToken;\n }\n\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}) {\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 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 // 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 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"]}
|
|
1
|
+
{"version":3,"sources":["request.js"],"names":["MeetingRequest","attrs","options","changeVideoLayoutDebounced","changeVideoLayout","leading","trailing","asResourceOccupant","sipUri","meetingNumber","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","StatelessWebexPlugin"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;AAEA;;AACA;;;;;;;;;;AAmBA;AACA;AACA;IACqBA,c;;;;;AACnB,0BAAYC,KAAZ,EAAmBC,OAAnB,EAA4B;AAAA;;AAAA;AAC1B,8BAAMD,KAAN,EAAaC,OAAb;AACA,UAAKC,0BAAL,GAAkC,wBAAS,MAAKC,iBAAd,EAAiC,IAAjC,EAAuC;AAACC,MAAAA,OAAO,EAAE,IAAV;AAAgBC,MAAAA,QAAQ,EAAE;AAA1B,KAAvC,CAAlC;AAF0B;AAG3B;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;iGACE,iBAAkBJ,OAAlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAEIK,gBAAAA,kBAFJ,GAeML,OAfN,CAEIK,kBAFJ,EAGIC,MAHJ,GAeMN,OAfN,CAGIM,MAHJ,EAIIC,aAJJ,GAeMP,OAfN,CAIIO,aAJJ,EAKIC,SALJ,GAeMR,OAfN,CAKIQ,SALJ,EAMIC,QANJ,GAeMT,OAfN,CAMIS,QANJ,EAOIC,UAPJ,GAeMV,OAfN,CAOIU,UAPJ,EAQIC,aARJ,GAeMX,OAfN,CAQIW,aARJ,EASIC,kBATJ,GAeMZ,OAfN,CASIY,kBATJ,EAUIC,SAVJ,GAeMb,OAfN,CAUIa,SAVJ,EAWIC,GAXJ,GAeMd,OAfN,CAWIc,GAXJ,EAYIC,cAZJ,GAeMf,OAfN,CAYIe,cAZJ,EAaIC,WAbJ,GAeMhB,OAfN,CAaIgB,WAbJ,EAcIC,iBAdJ,GAeMjB,OAfN,CAcIiB,iBAdJ;;AAiBEC,qCAAYC,MAAZ,CAAmBC,IAAnB,CACE,mDADF,EAEET,aAFF;;AAKIU,gBAAAA,GAtBN,GAsBY,EAtBZ;AAwBQC,gBAAAA,IAxBR,GAwBe;AACXjB,kBAAAA,kBAAkB,EAAlBA,kBADW;AAEXkB,kBAAAA,MAAM,EAAE;AACNF,oBAAAA,GAAG,EAAEb,SADC;AAENgB,oBAAAA,UAAU,EAAE,KAAKC,MAAL,CAAYC,QAAZ,CAAqBF;AAF3B,mBAFG;AAMXG,kBAAAA,aAAa,EAAEjB,UAAU,IAAI,IANlB;AAOXkB,kBAAAA,mBAAmB,EAAElB,UAAU,IAAIK,cAAd,IAAgC,KAP1C;AAQXJ,kBAAAA,aAAa,EAAbA,aARW;AASXkB,kBAAAA,WAAW,EAAE,IATF;AAUXC,kBAAAA,gBAAgB,EAAE,IAVP;AAWXlB,kBAAAA,kBAAkB,EAAEA,kBAAkB,IAAI,KAX/B;AAYXmB,kBAAAA,mBAAmB,EAAE,CAZV;AAaXC,kBAAAA,sBAAsB,EAAE;AACtBf,oBAAAA,iBAAiB,EAAEA,iBAAF,aAAEA,iBAAF,cAAEA,iBAAF,GAAuB;AADlB;AAbb,iBAxBf;;AA0CE,oBAAI,KAAKgB,KAAL,CAAWP,QAAX,CAAoBQ,YAAxB,EAAsC;AACpCZ,kBAAAA,IAAI,CAACC,MAAL,CAAYY,WAAZ,GAA0B,KAAKF,KAAL,CAAWP,QAAX,CAAoBQ,YAApB,CAAiCC,WAA3D;AACAb,kBAAAA,IAAI,CAACC,MAAL,CAAYa,UAAZ,GAAyB,KAAKH,KAAL,CAAWP,QAAX,CAAoBQ,YAApB,CAAiCE,UAA1D;AACD;;AAED,oBAAIvB,SAAS,KAAKwB,SAAlB,EAA6B;AAC3Bf,kBAAAA,IAAI,CAACT,SAAL,GAAiBA,SAAjB;AACD;;AAED,oBAAIC,GAAG,KAAKuB,SAAZ,EAAuB;AACrBf,kBAAAA,IAAI,CAACR,GAAL,GAAWA,GAAX;AACD;;AArDH,qBAuDML,QAvDN;AAAA;AAAA;AAAA;;AAwDIY,gBAAAA,GAAG,aAAMZ,QAAN,cAAkB6B,sBAAlB,CAAH;AAxDJ;AAAA;;AAAA;AAAA,sBA0DWhC,MAAM,IAAIC,aA1DrB;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,uBA4DY,KAAK0B,KAAL,CAAWM,QAAX,CAAoBC,QAApB,CAA6BC,cAA7B,CAA4C,UAA5C,CA5DZ;;AAAA;AA6DMpB,gBAAAA,GAAG,aAAM,KAAKY,KAAL,CAAWM,QAAX,CAAoBC,QAApB,CAA6BE,GAA7B,CAAiC,OAAjC,CAAN,cAAmDC,eAAnD,cAA2DC,eAA3D,CAAH;AACAtB,gBAAAA,IAAI,CAACuB,OAAL,GAAe;AACbC,kBAAAA,OAAO,EAAExC,MAAM,oBAAaC,aAAb;AADF,iBAAf;AA9DN;AAAA;;AAAA;AAAA;AAAA;;AAmEMW,qCAAYC,MAAZ,CAAmB4B,KAAnB,uCAAwDzC,MAAM,GAAG,QAAH,GAAc,eAA5E;;AAnEN;;AAAA;AAyEE;AACAe,gBAAAA,GAAG,GAAGA,GAAG,CAAC2B,MAAJ,YAAeC,kCAAf,EAAN;;AAEA,oBAAIvC,UAAU,KAAKJ,MAAnB,EAA2B;AACzBgB,kBAAAA,IAAI,CAAC4B,eAAL,GAAuB;AACrBC,oBAAAA,cAAc,EAAE,CAACC,mBAAD;AADK,mBAAvB;AAGD;;AAED,oBAAIpC,WAAJ,EAAiB;AACfM,kBAAAA,IAAI,CAAC+B,WAAL,GAAmBrC,WAAW,CAACqC,WAA/B;AACD;;AApFH,iDAsFS,KAAKC,OAAL,CAAa;AAClBC,kBAAAA,MAAM,EAAEC,sBAAWC,IADD;AAElBC,kBAAAA,GAAG,EAAErC,GAFa;AAGlBC,kBAAAA,IAAI,EAAJA;AAHkB,iBAAb,CAtFT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;AA6FA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,8BAGG;AAAA,UAFDqC,iBAEC,QAFDA,iBAEC;AAAA,UADDC,SACC,QADDA,SACC;AACD,UAAMtC,IAAI,GAAG;AACXsC,QAAAA,SAAS,EAATA;AADW,OAAb;AAIA,aAAO,KAAKN,OAAL,CAAa;AAClBC,QAAAA,MAAM,EAAEC,sBAAWC,IADD;AAElBC,QAAAA,GAAG,EAAEC,iBAFa;AAGlBrC,QAAAA,IAAI,EAAJA;AAHkB,OAAb,EAIJuC,KAJI,CAIE,UAACC,GAAD,EAAS;AAChB5C,6BAAYC,MAAZ,CAAmB4B,KAAnB,qDAAsEe,GAAtE;;AAEA,cAAMA,GAAN;AACD,OARM,CAAP;AASD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,uBAKG;AAAA,UAJDrD,QAIC,SAJDA,QAIC;AAAA,UAHDsD,SAGC,SAHDA,SAGC;AAAA,UAFDC,SAEC,SAFDA,SAEC;AAAA,UADDrD,aACC,SADDA,aACC;;AACDO,2BAAYC,MAAZ,CAAmBC,IAAnB,CACE,0DADF,EAEET,aAFF;;AAIA,UAAM+C,GAAG,aAAMjD,QAAN,cAAkB6B,sBAAlB,CAAT;AAEA,UAAMhB,IAAI,GAAG;AACXC,QAAAA,MAAM,EAAE;AACNC,UAAAA,UAAU,EAAEA,mBAAWyC,WADjB;AAENC,UAAAA,eAAe,EAAEC,mCAFX;AAGN9C,UAAAA,GAAG,EAAE0C,SAHC;AAINC,UAAAA,SAAS,EAATA;AAJM,SADG;AAOXrD,QAAAA,aAAa,EAAbA;AAPW,OAAb;AAUA,aAAO,KAAK2C,OAAL,CAAa;AAClBC,QAAAA,MAAM,EAAEC,sBAAWC,IADD;AAElBC,QAAAA,GAAG,EAAHA,GAFkB;AAGlBpC,QAAAA,IAAI,EAAJA;AAHkB,OAAb,EAIJuC,KAJI,CAIE,UAACC,GAAD,EAAS;AAChB5C,6BAAYC,MAAZ,CAAmB4B,KAAnB,iFAAkGe,GAAlG;;AAEA,cAAMA,GAAN;AACD,OARM,CAAP;AASD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,wBAMG;AAAA,UALDrD,QAKC,SALDA,QAKC;AAAA,UAJD2D,UAIC,SAJDA,UAIC;AAAA,UAHDC,WAGC,SAHDA,WAGC;AAAA,UAFDL,SAEC,SAFDA,SAEC;AAAA,UADDrD,aACC,SADDA,aACC;;AACDO,2BAAYC,MAAZ,CAAmBC,IAAnB,CACE,4DADF,EAEET,aAFF;;AAIA,UAAM+C,GAAG,aAAMjD,QAAN,cAAkB6B,sBAAlB,CAAT;AAEA,UAAMhB,IAAI,GAAG;AACXC,QAAAA,MAAM,EAAE;AACNC,UAAAA,UAAU,EAAEA,mBAAWyC,WADjB;AAENC,UAAAA,eAAe,EAAEI,oCAFX;AAGNjD,UAAAA,GAAG,EAAE+C,UAHC;AAING,UAAAA,cAAc,EAAEF,WAJV;AAKNL,UAAAA,SAAS,EAATA;AALM,SADG;AAQXrD,QAAAA,aAAa,EAAbA;AARW,OAAb;AAWA,aAAO,KAAK2C,OAAL,CAAa;AAClBC,QAAAA,MAAM,EAAEC,sBAAWC,IADD;AAElBC,QAAAA,GAAG,EAAHA,GAFkB;AAGlBpC,QAAAA,IAAI,EAAJA;AAHkB,OAAb,EAIJuC,KAJI,CAIE,UAACC,GAAD,EAAS;AAChB5C,6BAAYC,MAAZ,CAAmB4B,KAAnB,mFAAoGe,GAApG;;AAEA,cAAMA,GAAN;AACD,OARM,CAAP;AASD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,qBAAY9D,OAAZ,EAAqB;AACnB;AACA,UAAOwE,MAAP,GAAiBxE,OAAjB,CAAOwE,MAAP;AACA,UAAKC,OAAL,GAAgBzE,OAAhB,CAAKyE,OAAL;AAEA;;AACA,UAAID,MAAJ,EAAY;AACV;AACAC,QAAAA,OAAO,GAAGA,OAAO,CAACzB,MAAR,CAAeyB,OAAO,CAACC,KAAR,CAAc,GAAd,EAAmB,CAAnB,IAAwB,GAAxB,GAA8B,GAA7C,EAAkD1B,MAAlD,WAA4D2B,iBAAMC,SAAlE,cAA+EJ,MAA/E,EAAV;AACD;;AAED,aAAO,KAAKlB,OAAL,CAAa;AAClBC,QAAAA,MAAM,EAAEC,sBAAWqB,GADD;AAElBnB,QAAAA,GAAG,EAAEe;AAFa,OAAb,EAGJ;AAHI,OAIJZ,KAJI,CAIE,UAACC,GAAD,EAAS;AACd5C,6BAAYC,MAAZ,CAAmB4B,KAAnB,wEAAyFe,GAAzF;;AAEA,eAAOA,GAAP;AACD,OARI,CAAP;AASD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,sBAAa9D,OAAb,EAAsB;AACpB,UAAKS,QAAL,GAAiBT,OAAjB,CAAKS,QAAL;AACA,UAAO+D,MAAP,GAAiBxE,OAAjB,CAAOwE,MAAP;;AAEA,UAAI/D,QAAJ,EAAc;AACZ,YAAI+D,MAAJ,EAAY;AACV/D,UAAAA,QAAQ,eAAQkE,iBAAMC,SAAd,cAA2BJ,MAA3B,CAAR;AACD;;AAED,eAAO,KAAKlB,OAAL,CAAa;AAClBC,UAAAA,MAAM,EAAEC,sBAAWqB,GADD;AAElBnB,UAAAA,GAAG,EAAEjD;AAFa,SAAb,EAGJoD,KAHI,CAGE,UAACC,GAAD,EAAS;AAChB5C,+BAAYC,MAAZ,CAAmB4B,KAAnB,4EAA6Fe,GAA7F;;AAEA,iBAAOA,GAAP;AACD,SAPM,CAAP;AAQD;;AAED,aAAO,iBAAQgB,MAAR,EAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,qCAKG;AAAA,UAJDrE,QAIC,SAJDA,QAIC;AAAA,UAHDsE,QAGC,SAHDA,QAGC;AAAA,UAFDpE,aAEC,SAFDA,aAEC;AAAA,UADDqE,MACC,SADDA,MACC;;AACD9D,2BAAYC,MAAZ,CAAmBC,IAAnB,kEAC4D2D,QAD5D,gBAEEpE,aAFF;;AAIA,UAAM+C,GAAG,aAAMjD,QAAN,cAAkB6B,sBAAlB,cAAiC0C,MAAjC,cAA2CC,gBAA3C,CAAT;AAEA,UAAM3D,IAAI,GAAG;AACXC,QAAAA,MAAM,EAAE;AACNC,UAAAA,UAAU,EAAEA,mBAAWyC,WADjB;AAEN5C,UAAAA,GAAG,EAAE0D;AAFC,SADG;AAKXpE,QAAAA,aAAa,EAAbA;AALW,OAAb;AAQA,aAAO,KAAK2C,OAAL,CAAa;AAClBC,QAAAA,MAAM,EAAEC,sBAAW0B,GADD;AAElBxB,QAAAA,GAAG,EAAHA,GAFkB;AAGlBpC,QAAAA,IAAI,EAAJA;AAHkB,OAAb,EAIJuC,KAJI,CAIE,UAACC,GAAD,EAAS;AAChB5C,6BAAYC,MAAZ,CAAmB4B,KAAnB,gFAC0EgC,QAD1E,8BACsGjB,GADtG;;AAIA,cAAMA,GAAN;AACD,OAVM,CAAP;AAWD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,6BAMG;AAAA,UALDrD,QAKC,SALDA,QAKC;AAAA,UAJDuE,MAIC,SAJDA,MAIC;AAAA,UAHU3D,GAGV,SAHDb,SAGC;AAAA,UAFDE,UAEC,SAFDA,UAEC;AAAA,UADDC,aACC,SADDA,aACC;;AACDO,2BAAYC,MAAZ,CAAmBC,IAAnB,CACE,oDADF,EAEET,aAFF;;AAKA,UAAM+C,GAAG,aAAMjD,QAAN,cAAkB6B,sBAAlB,cAAiC0C,MAAjC,cAA2CC,gBAA3C,CAAT;AACA,UAAM3D,IAAI,GAAG;AACXC,QAAAA,MAAM,EAAE;AACNC,UAAAA,UAAU,EAAE,KAAKC,MAAL,CAAYC,QAAZ,CAAqBF,UAD3B;AAENH,UAAAA,GAAG,EAAHA;AAFM,SADG;AAKXM,QAAAA,aAAa,EAAEjB,UAAU,IAAI,IALlB;AAMXC,QAAAA,aAAa,EAAbA;AANW,OAAb;AASA,aAAO,KAAK2C,OAAL,CAAa;AAClBC,QAAAA,MAAM,EAAEC,sBAAW0B,GADD;AAElBxB,QAAAA,GAAG,EAAHA,GAFkB;AAGlBpC,QAAAA,IAAI,EAAJA;AAHkB,OAAb,CAAP;AAKD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,4BAAmBtB,OAAnB,EAA4B;AAC1B,UAAM0D,GAAG,aAAM1D,OAAO,CAACS,QAAd,cAA0B6B,sBAA1B,cAAyC6C,gBAAzC,CAAT;AACA,UAAM7D,IAAI,GAAG;AACXC,QAAAA,MAAM,EAAE;AACNC,UAAAA,UAAU,EAAE,KAAKC,MAAL,CAAYC,QAAZ,CAAqBF,UAD3B;AAENH,UAAAA,GAAG,EAAErB,OAAO,CAACQ;AAFP,SADG;AAKXG,QAAAA,aAAa,EAAEX,OAAO,CAACW;AALZ,OAAb;AAQA,aAAO,KAAK2C,OAAL,CAAa;AAClBC,QAAAA,MAAM,EAAEC,sBAAW0B,GADD;AAElBxB,QAAAA,GAAG,EAAHA,GAFkB;AAGlBpC,QAAAA,IAAI,EAAJA;AAHkB,OAAb,CAAP;AAKD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,uBAActB,OAAd,EAAuB;AACrB,UAAM0D,GAAG,aAAM1D,OAAO,CAACS,QAAd,cAA0B2E,mBAA1B,CAAT;AACA,UAAM9D,IAAI,GAAG;AACX+D,QAAAA,MAAM,EAAE;AACNC,UAAAA,SAAS,EAAEtF,OAAO,CAACsF,SADb;AAENC,UAAAA,MAAM,EAAEvF,OAAO,CAACuF;AAFV;AADG,OAAb;AAOA,aAAO,KAAKjC,OAAL,CAAa;AAClBC,QAAAA,MAAM,EAAEC,sBAAWgC,KADD;AAElB9B,QAAAA,GAAG,EAAHA,GAFkB;AAGlBpC,QAAAA,IAAI,EAAJA;AAHkB,OAAb,CAAP;AAKD;;;WAED,qBAAYtB,OAAZ,EAAqB;AACnB,UAAM0D,GAAG,aAAM1D,OAAO,CAACS,QAAd,cAA0B2E,mBAA1B,CAAT;AACA,UAAM9D,IAAI,GAAG;AACXmE,QAAAA,IAAI,EAAE;AACJC,UAAAA,MAAM,EAAE1F,OAAO,CAACyF;AADZ;AADK,OAAb;AAMA,aAAO,KAAKnC,OAAL,CAAa;AAClBC,QAAAA,MAAM,EAAEC,sBAAWgC,KADD;AAElB9B,QAAAA,GAAG,EAAHA,GAFkB;AAGlBpC,QAAAA,IAAI,EAAJA;AAHkB,OAAb,CAAP;AAKD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,wBAAetB,OAAf,EAAwB;AACtB,UAAM0D,GAAG,aAAM1D,OAAO,CAACS,QAAd,cAA0B6B,sBAA1B,cAAyCqD,kBAAzC,CAAT;;AACA,UAAMrE,IAAI;AACRC,QAAAA,MAAM,EAAE;AACNC,UAAAA,UAAU,EAAE,KAAKC,MAAL,CAAYC,QAAZ,CAAqBF,UAD3B;AAENH,UAAAA,GAAG,EAAErB,OAAO,CAACQ;AAFP;AADA,SAKJR,OAAO,CAAC4F,MAAR,IAAkB;AAACA,QAAAA,MAAM,EAAE5F,OAAO,CAAC4F;AAAjB,OALd,CAAV;;AAQA,aAAO,KAAKtC,OAAL,CAAa;AAClBC,QAAAA,MAAM,EAAEC,sBAAW0B,GADD;AAElBxB,QAAAA,GAAG,EAAHA,GAFkB;AAGlBpC,QAAAA,IAAI,EAAJA;AAHkB,OAAb,CAAP;AAKD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,gCAAuBtB,OAAvB,EAAgC;AAAA;;AAC9B,UAAM0D,GAAG,aAAM1D,OAAO,CAACS,QAAd,cAA0B6B,sBAA1B,cAAyCtC,OAAO,CAACgF,MAAjD,cAA2Da,gBAA3D,CAAT;AACA,UAAMvE,IAAI,GAAG;AACXC,QAAAA,MAAM,EAAE;AACNC,UAAAA,UAAU,EAAE,KAAKC,MAAL,CAAYC,QAAZ,CAAqBF,UAD3B;AAENH,UAAAA,GAAG,EAAErB,OAAO,CAACQ;AAFP,SADG;AAKXmB,QAAAA,aAAa,EAAE3B,OAAO,CAACU,UAAR,IAAsB,IAL1B;AAMXC,QAAAA,aAAa,EAAEX,OAAO,CAACW,aANZ;AAOXkB,QAAAA,WAAW,EAAE,IAPF;AAQXwB,QAAAA,WAAW,EAAErD,OAAO,CAACqD,WARV;AASXrB,QAAAA,sBAAsB,EAAE;AACtBf,UAAAA,iBAAiB,2BAAEjB,OAAO,CAACiB,iBAAV,yEAA+B;AAD1B;AATb,OAAb;AAcA,aAAO,KAAKqC,OAAL,CAAa;AAClBC,QAAAA,MAAM,EAAEC,sBAAW0B,GADD;AAElBxB,QAAAA,GAAG,EAAHA,GAFkB;AAGlBpC,QAAAA,IAAI,EAAJA;AAHkB,OAAb,CAAP;AAKD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,4BAAmBtB,OAAnB,EAA4B;AAC1B,UAAI8F,QAAQ,GAAG;AAACC,QAAAA,WAAW,EAAE/F,OAAO,CAAC+F;AAAtB,OAAf;AAEA;;AACA,UAAI/F,OAAO,CAAC+F,WAAR,KAAwBC,wBAAaC,OAAzC,EAAkD;AAChDH,QAAAA,QAAQ,GAAG;AACTI,UAAAA,WAAW,EAAE;AACX7E,YAAAA,GAAG,EAAErB,OAAO,CAACmG,SADF;AAEXC,YAAAA,OAAO,EAAE,CACP;AACE5E,cAAAA,UAAU,EAAE,KAAKC,MAAL,CAAYC,QAAZ,CAAqBF,UADnC;AAEEH,cAAAA,GAAG,EAAErB,OAAO,CAACQ;AAFf,aADO;AAFE,WADJ;AAUTuF,UAAAA,WAAW,EAAE/F,OAAO,CAAC+F,WAVZ;AAWTM,UAAAA,SAAS,EAAE;AACThF,YAAAA,GAAG,EAAErB,OAAO,CAACmG;AADJ;AAXF,SAAX;AAeD;;AAED,UAAM7E,IAAI,GAAG;AACXgF,QAAAA,KAAK,EAAER,QADI;AAEXS,QAAAA,WAAW,EAAEvG,OAAO,CAACuG;AAFV,OAAb;;AAKA,UAAIvG,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAEwG,aAAb,EAA4B;AAC1BlF,QAAAA,IAAI,CAACkF,aAAL,GAAqBxG,OAArB,aAAqBA,OAArB,uBAAqBA,OAAO,CAAEwG,aAA9B;AACD;;AAED,aAAO,KAAKlD,OAAL,CAAa;AAClBI,QAAAA,GAAG,EAAE1D,OAAO,CAAC0D,GADK;AAElBH,QAAAA,MAAM,EAAEC,sBAAW0B,GAFD;AAGlB5D,QAAAA,IAAI,EAAJA;AAHkB,OAAb,CAAP;AAKD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,yBAAuC;AAAA,UAA7Bb,QAA6B,SAA7BA,QAA6B;AAAA,UAAnBD,SAAmB,SAAnBA,SAAmB;AAAA,UAARiG,KAAQ,SAARA,KAAQ;AACrC,aAAO,KAAKnD,OAAL,CAAa;AAClBC,QAAAA,MAAM,EAAEC,sBAAWC,IADD;AAElBC,QAAAA,GAAG,YAAKjD,QAAL,cAAiBiG,6BAAjB,CAFe;AAGlBpF,QAAAA,IAAI,EAAE;AACJd,UAAAA,SAAS,EAATA,SADI;AAEJmG,UAAAA,IAAI,EAAE;AACJhG,YAAAA,aAAa,EAAEiG,cAAKC,EAAL,EADX;AAEJJ,YAAAA,KAAK,EAALA;AAFI;AAFF;AAHY,OAAb,CAAP;AAWD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,kCAMG;AAAA,UALDhG,QAKC,SALDA,QAKC;AAAA,UAJDD,SAIC,SAJDA,SAIC;AAAA,UAHDsG,UAGC,SAHDA,UAGC;AAAA,UAFDC,IAEC,SAFDA,IAEC;AAAA,UADDC,OACC,SADDA,OACC;;AACD;AACA,UAAID,IAAI,KAAK,CAACA,IAAI,CAACE,KAAN,IAAe,CAACF,IAAI,CAACG,MAA1B,CAAR,EAA2C;AACzC,eAAO,iBAAQpC,MAAR,CAAe,IAAIqC,KAAJ,qFAAuF,wBAAeJ,IAAf,CAAvF,EAAf,CAAP;AACD;;AAED,UAAIC,OAAO,KAAK,CAACA,OAAO,CAACC,KAAT,IAAkB,CAACD,OAAO,CAACE,MAAhC,CAAX,EAAoD;AAClD,eAAO,iBAAQpC,MAAR,CAAe,IAAIqC,KAAJ,wFAA0F,wBAAeH,OAAf,CAA1F,EAAf,CAAP;AACD;;AAED,UAAMI,cAAc,GAAIL,IAAD,GAAS;AAACE,QAAAA,KAAK,EAAEF,IAAI,CAACE,KAAb;AAAoBC,QAAAA,MAAM,EAAEH,IAAI,CAACG;AAAjC,OAAT,GAAoD7E,SAA3E;AACA,UAAMgF,iBAAiB,GAAIL,OAAD,GAAY;AAACC,QAAAA,KAAK,EAAED,OAAO,CAACC,KAAhB;AAAuBC,QAAAA,MAAM,EAAEF,OAAO,CAACE;AAAvC,OAAZ,GAA6D7E,SAAvF;AAEA,UAAMiF,YAAY,GAAIF,cAAc,IAAIC,iBAAnB,GACnB;AACEE,QAAAA,UAAU,EACV;AACER,UAAAA,IAAI,EAAEK,cADR;AAEEJ,UAAAA,OAAO,EAAEK;AAFX;AAFF,OADmB,GAOfhF,SAPN;AASA,aAAO,KAAKiB,OAAL,CAAa;AAClBC,QAAAA,MAAM,EAAEC,sBAAW0B,GADD;AAElBxB,QAAAA,GAAG,YAAKjD,QAAL,cAAiB2E,mBAAjB,CAFe;AAGlB9D,QAAAA,IAAI,EAAE;AACJkG,UAAAA,MAAM,EAAE;AACNhH,YAAAA,SAAS,EAATA,SADM;AAENiH,YAAAA,IAAI,EAAEX,UAFA;AAGNQ,YAAAA,YAAY,EAAZA;AAHM;AADJ;AAHY,OAAb,CAAP;AAWD;;;EAvmByCI,+B","sourcesContent":["import uuid from 'uuid';\nimport {debounce} from 'lodash';\nimport {StatelessWebexPlugin} from '@webex/webex-core';\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 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';\n\n/**\n * @class MeetingRequest\n */\nexport default class MeetingRequest extends StatelessWebexPlugin {\n constructor(attrs, options) {\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 const {\n asResourceOccupant,\n sipUri,\n meetingNumber,\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 = {\n asResourceOccupant,\n device: {\n url: deviceUrl,\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 if (this.webex.meetings.clientRegion) {\n body.device.countryCode = this.webex.meetings.clientRegion.countryCode;\n body.device.regionCode = this.webex.meetings.clientRegion.regionCode;\n }\n\n if (moderator !== undefined) {\n body.moderator = moderator;\n }\n\n if (pin !== undefined) {\n body.pin = pin;\n }\n\n if (locusUrl) {\n url = `${locusUrl}/${PARTICIPANT}`;\n }\n else if (sipUri || meetingNumber) {\n try {\n await this.webex.internal.services.waitForCatalog('postauth');\n url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;\n body.invitee = {\n address: sipUri || `wbxmn:${meetingNumber}`\n };\n }\n catch (e) {\n LoggerProxy.logger.error(`Meeting:request#joinMeeting ${sipUri ? 'sipUri' : '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 === sipUri) {\n body.callPreferences = {\n requestedMedia: [_SLIDES_]\n };\n }\n\n if (roapMessage) {\n body.localMedias = roapMessage.localMedias;\n }\n\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 refreshCaptcha({\n captchaRefreshUrl,\n captchaId\n }) {\n const body = {\n captchaId\n };\n\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.localUrl 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 dialIn({\n locusUrl,\n dialInUrl,\n clientUrl,\n correlationId\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 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.localUrl 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 dialOut({\n locusUrl,\n dialOutUrl,\n phoneNumber,\n clientUrl,\n correlationId\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 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 {boolen} 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) {\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 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 {boolen} 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) {\n let {locusUrl} = options;\n const {desync} = options;\n\n if (locusUrl) {\n if (desync) {\n locusUrl += `?${LOCUS.SYNCDEBUG}=${desync}`;\n }\n\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 disconnectPhoneAudio({\n locusUrl,\n phoneUrl,\n correlationId,\n selfId\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 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 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 deviceType: this.config.meetings.deviceType,\n url\n },\n usingResource: resourceId || null,\n correlationId\n };\n\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) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${ALERT}`;\n const body = {\n device: {\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl\n },\n correlationId: options.correlationId\n };\n\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) {\n const uri = `${options.locusUrl}/${CONTROLS}`;\n const body = {\n record: {\n recording: options.recording,\n paused: options.paused\n }\n };\n\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 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) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${DECLINE}`;\n const body = {\n device: {\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl\n },\n ...(options.reason && {reason: options.reason})\n };\n\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 * @returns {Promise}\n */\n remoteAudioVideoToggle(options) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.selfId}/${MEDIA}`;\n const body = {\n device: {\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 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 let floorReq = {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 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 = {\n floor: floorReq,\n resourceUrl: options.resourceUrl\n };\n\n if (options?.resourceToken) {\n body.resourceToken = options?.resourceToken;\n }\n\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}) {\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 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 // 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 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"]}
|
package/dist/meeting/util.js
CHANGED
|
@@ -56,6 +56,10 @@ var _parameter = _interopRequireDefault(require("../common/errors/parameter"));
|
|
|
56
56
|
|
|
57
57
|
var _permission = _interopRequireDefault(require("../common/errors/permission"));
|
|
58
58
|
|
|
59
|
+
var _passwordError = _interopRequireDefault(require("../common/errors/password-error"));
|
|
60
|
+
|
|
61
|
+
var _captchaError = _interopRequireDefault(require("../common/errors/captcha-error"));
|
|
62
|
+
|
|
59
63
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
60
64
|
|
|
61
65
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors) { _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
@@ -295,6 +299,14 @@ MeetingUtil.joinMeetingOptions = function (meeting) {
|
|
|
295
299
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
296
300
|
meeting.resourceId = meeting.resourceId || options.resourceId;
|
|
297
301
|
|
|
302
|
+
if (meeting.requiredCaptcha) {
|
|
303
|
+
return _promise.default.reject(new _captchaError.default());
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
if (meeting.passwordStatus === _constants.PASSWORD_STATUS.REQUIRED) {
|
|
307
|
+
return _promise.default.reject(new _passwordError.default());
|
|
308
|
+
}
|
|
309
|
+
|
|
298
310
|
if (options.pin) {
|
|
299
311
|
_metrics.default.postEvent({
|
|
300
312
|
event: _config.eventType.PIN_COLLECTED,
|
package/dist/meeting/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["util.js"],"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","audioMuted","videoMuted","meeting","reject","ParameterError","localMedias","Media","generateLocalMedias","Metrics","postEvent","event","eventType","MEDIA_REQUEST","meetingRequest","remoteAudioVideoToggle","deviceUrl","correlationId","then","MEDIA_RESPONSE","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","options","LOCUS_JOIN_REQUEST","sipUri","meetingNumber","roapMessage","resourceId","moderator","pin","moveToResource","preferTranscoding","asResourceOccupant","res","LOCUS_JOIN_RESPONSE","data","trigger","LOCI_UPDATE","trackingId","headers","trackingid","cleanUp","statsAnalyzer","stopAnalyzer","closeLocalStream","closeLocalShare","closeRemoteTracks","closePeerConnections","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteTracks","unsetPeerConnections","cleanMQAInterval","reconnectionManager","roap","stop","roapSeq","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","locusInfo","onFullLocus","catch","LoggerProxy","logger","error","leaveMeeting","isUserInLeftState","UserNotJoinedError","defaultOptions","leaveOptions","resolve","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","PIN_COLLECTED","setLocus","PIN_PROMPT","IntentToJoinError","JoinMeetingError","updateTransceiver","meetingOptions","type","sendTrack","receiveTrack","track","transceiver","peerConnection","previousMediaDirection","undefined","meetingId","remoteQualityLevel","mediaProperties","enableRtx","config","enableExtmap","sendRoapMediaRequest","sdp","e","sender","replaceTrack","validateOptions","sendVideo","sendAudio","sendShare","localStream","localShare","getTrack","videoTrack","audioTrack","stream","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","canUserLock","joined","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRecord","RECORDING_CONTROL_START","canUserPause","RECORDING_CONTROL_PAUSE","canUserResume","RECORDING_CONTROL_RESUME","canUserStop","RECORDING_CONTROL_STOP","startRecording","request","recordMeeting","recording","paused","PermissionError","pauseRecording","resumeRecording","stopRecording","lockMeeting","actions","canLock","lock","unlockMeeting","canUnlock","startInternalStats","internalStats","useConfig","senders","correlate","history","onEvent","kind","stat","Trigger","file","function","EVENT_TRIGGERS","MEETING_MEDIA_LOCAL_STARTED","mediaType","AUDIO","SENDING_MEDIA_START","SENDING_MEDIA_STOP","onData","VIDEO","SHARE","SENDING_SHARE_START","SENDING_SHARE_STOP","receivers","MEETING_MEDIA_REMOTE_STARTED","RECEIVING_MEDIA_START","RECEIVING_MEDIA_STOP","StatsUtil","generateOptions","STATS","CONFIG","WebRTCStats","attrs","handleAudioLogging","LOG_HEADER","settings","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device"],"mappings":"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","sourcesContent":["import {isEmpty} from 'lodash';\n\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport StatsUtil from '../stats/util';\nimport Metrics from '../metrics';\nimport {eventType, trigger, mediaType} from '../metrics/config';\nimport Media from '../media';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport WebRTCStats from '../stats/index';\nimport {INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n STATS,\n EVENT_TRIGGERS\n , FULL_STATE} from '../constants';\nimport Trigger from '../common/events/trigger-proxy';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\n\n\nconst MeetingUtil = {};\n\nMeetingUtil.parseLocusJoin = (response) => {\n const parsed = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n};\n\nMeetingUtil.remoteUpdateAudioVideo = (audioMuted, videoMuted, meeting) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n const localMedias = Media.generateLocalMedias(meeting.mediaId, audioMuted, videoMuted);\n\n if (isEmpty(localMedias)) {\n return Promise.reject(new ParameterError('You need a media id on the meeting to change remote audio.'));\n }\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});\n\n return meeting.meetingRequest.remoteAudioVideoToggle({\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n localMedias,\n deviceUrl: meeting.deviceUrl,\n correlationId: meeting.correlationId\n }).then((response) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});\n\n return response.body.locus;\n });\n};\n\nMeetingUtil.hasOwner = (info) => info && info.owner;\n\nMeetingUtil.isOwnerSelf = (owner, selfId) => owner === selfId;\n\nMeetingUtil.isPinOrGuest = (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);\n\nMeetingUtil.joinMeeting = (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n Metrics.postEvent({event: eventType.LOCUS_JOIN_REQUEST, meeting});\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n sipUri: meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: options.preferTranscoding,\n asResourceOccupant: options.asResourceOccupant\n })\n .then((res) => {\n Metrics.postEvent({\n event: eventType.LOCUS_JOIN_RESPONSE,\n meeting,\n data: {\n trigger: trigger.LOCI_UPDATE,\n locus: res.body.locus,\n mediaConnections: res.body.mediaConnections,\n trackingId: res.headers.trackingid\n }\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n};\n\nMeetingUtil.cleanUp = (meeting) => {\n // make sure we send last metrics before we close the peerconnection\n if (meeting.statsAnalyzer) meeting.statsAnalyzer.stopAnalyzer();\n\n return meeting.closeLocalStream()\n .then(() => meeting.closeLocalShare())\n .then(() => meeting.closeRemoteTracks())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.unsetLocalVideoTrack();\n meeting.unsetLocalShareTrack();\n meeting.unsetRemoteTracks();\n meeting.unsetPeerConnections();\n meeting.cleanMQAInterval();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.roap.stop(meeting.correlationId, meeting.roapSeq));\n};\n\nMeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const options = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n phoneUrl\n };\n\n return meeting.meetingRequest\n .disconnectPhoneAudio(options)\n .then((response) => {\n if (response?.body?.locus) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${\n meeting.id\n }, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\n\n// by default will leave on meeting's resourceId\n// if you explicity want it not to leave on resource id, pass\n// {resourceId: null}\n// TODO: chris, you can modify this however you want\nMeetingUtil.leaveMeeting = (meeting, options = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const defaultOptions = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n resourceId: meeting.resourceId,\n deviceUrl: meeting.deviceUrl\n };\n\n const leaveOptions = {...defaultOptions, ...options};\n\n return meeting.meetingRequest\n .leaveMeeting(leaveOptions)\n .then((response) => {\n if (response && response.body && response.body.locus) { // && !options.moveMeeting) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n\n return Promise.resolve();\n })\n .then(() => {\n if (options.moveMeeting) {\n return Promise.resolve();\n }\n\n return MeetingUtil.cleanUp(meeting);\n })\n .catch((err) => {\n // TODO: If the meeting state comes as LEFT or INACTIVE as response then\n // 1) on leave clean up the meeting or simply do a sync on the meeting\n // 2) If the error says meeting is inactive then destroy the meeting object\n LoggerProxy.logger.error(\n `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${\n meeting.id\n }, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\nMeetingUtil.declineMeeting = (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason\n });\n\nMeetingUtil.isUserInLeftState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _LEFT_;\n\nMeetingUtil.isUserInIdleState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _IDLE_;\n\nMeetingUtil.isUserInJoinedState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _JOINED_;\n\nMeetingUtil.isMediaEstablished = (currentMediaStatus) =>\n currentMediaStatus && (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);\n\n\nMeetingUtil.joinMeetingOptions = (meeting, options = {}) => {\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (options.pin) {\n Metrics.postEvent({\n event: eventType.PIN_COLLECTED,\n meeting\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n Metrics.postEvent({\n event: eventType.PIN_PROMPT,\n meeting\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error('Meeting:util#joinMeetingOptions --> Error joining the call, ', err);\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n};\n\nMeetingUtil.updateTransceiver = (options, meetingOptions) => {\n const {\n type,\n sendTrack,\n receiveTrack,\n track,\n transceiver,\n peerConnection,\n previousMediaDirection\n } = options;\n\n if ((sendTrack !== undefined && sendTrack !== previousMediaDirection.sendTrack) ||\n (receiveTrack !== undefined && receiveTrack !== previousMediaDirection.receiveTrack)) {\n return Media.updateTransceiver({\n meetingId: meetingOptions.meeting.id,\n remoteQualityLevel: meetingOptions.mediaProperties.remoteQualityLevel,\n enableRtx: meetingOptions.meeting.config.enableRtx,\n enableExtmap: meetingOptions.meeting.config.enableExtmap\n }, peerConnection, transceiver,\n {\n track,\n type,\n receiveTrack,\n sendTrack\n })\n .then(() => meetingOptions.meeting.roap\n .sendRoapMediaRequest({\n sdp: meetingOptions.mediaProperties.peerConnection.sdp,\n roapSeq: meetingOptions.meeting.roapSeq,\n meeting: meetingOptions.meeting // or can pass meeting ID\n }))\n .catch((e) => {\n LoggerProxy.logger.error(`Meeting:util#updateTransceiver --> Error updating the ${type} streams with error: ${e}`);\n });\n } if (track) {\n transceiver.sender.replaceTrack(track);\n\n return Promise.resolve();\n }\n\n return Promise.reject(new ParameterError('update Failed: please pass valid parameter'));\n};\n\nMeetingUtil.validateOptions = (options) => {\n const {\n sendVideo, sendAudio, sendShare, localStream, localShare\n } = options;\n\n if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid video streams'));\n }\n\n if (sendAudio && !MeetingUtil.getTrack(localStream).audioTrack) {\n return Promise.reject(new ParameterError('please pass valid audio streams'));\n }\n\n if (sendShare && !MeetingUtil.getTrack(localShare).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid share streams'));\n }\n\n return Promise.resolve();\n};\n\nMeetingUtil.getTrack = (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n};\n\nMeetingUtil.getModeratorFromLocusInfo = (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator;\n\nMeetingUtil.getPolicyFromLocusInfo = (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy;\n\nMeetingUtil.canUserLock = (moderator, joined) => {\n if (moderator.LOCK_CONTROL_LOCK && joined.LOCK_STATUS_UNLOCKED) {\n return true;\n }\n\n return false;\n};\n\nMeetingUtil.canUserUnlock = (moderator, joined) => {\n if (moderator.LOCK_CONTROL_UNLOCK && joined.LOCK_STATUS_LOCKED) {\n return true;\n }\n\n return false;\n};\n\nMeetingUtil.canUserRecord = (moderator) => moderator.RECORDING_CONTROL_START;\n\nMeetingUtil.canUserPause = (moderator) => moderator.RECORDING_CONTROL_PAUSE;\n\nMeetingUtil.canUserResume = (moderator) => moderator.RECORDING_CONTROL_RESUME;\n\nMeetingUtil.canUserStop = (moderator) => moderator.RECORDING_CONTROL_STOP;\n\nMeetingUtil.startRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserRecord(moderator)) {\n return request.recordMeeting({locusUrl, recording: true, paused: false});\n }\n\n return Promise.reject(new PermissionError('Start recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.pauseRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserPause(moderator)) {\n return request.recordMeeting({locusUrl, recording: true, paused: true});\n }\n\n return Promise.reject(new PermissionError('Pause recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.resumeRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserResume(moderator)) {\n return request.recordMeeting({locusUrl, recording: true, paused: false});\n }\n\n return Promise.reject(new PermissionError('Resume recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.stopRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserStop(moderator)) {\n return request.recordMeeting({locusUrl, recording: false, paused: false});\n }\n\n return Promise.reject(new PermissionError('Stop recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.lockMeeting = (actions, request, locusUrl) => {\n if (actions && actions.canLock) {\n return request.lockMeeting({locusUrl, lock: true});\n }\n\n return Promise.reject(new PermissionError('Lock not allowed, due to joined property.'));\n};\n\nMeetingUtil.unlockMeeting = (actions, request, locusUrl) => {\n if (actions && actions.canUnlock) {\n return request.lockMeeting({locusUrl, lock: false});\n }\n\n return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));\n};\n\nMeetingUtil.startInternalStats = (meeting) => {\n if (!meeting.internalStats) {\n const options = {\n useConfig: true,\n senders: [\n {\n id: 'mainAudio',\n correlate: 'audio',\n history: true,\n onEvent: (event) => {\n // TODO: we don't need checks like this since it comes from the transceiver\n // refactor event linkage to use callbacks instead of events\n if (event.kind === 'audio' && event.stat === 'bytesSent') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.AUDIO\n }\n );\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesSent') {\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainVideo',\n correlate: 'video',\n history: true,\n onEvent: (event) => {\n if (event.kind === 'video' && event.stat === 'bytesSent') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.VIDEO\n }\n );\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesSent') {\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainShare',\n correlate: 'video',\n onEvent: (event) => {\n if (event.kind === 'share' && event.stat === 'bytesSent') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.SHARE\n }\n );\n Metrics.postEvent({\n event: eventType.SENDING_SHARE_START,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n else if (event.stop && event.stat === 'bytesSent') {\n Metrics.postEvent({\n event: eventType.SENDING_SHARE_STOP,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n },\n onData: () => {}\n }\n ],\n receivers: [\n {\n id: 'mainAudio',\n correlate: 'audio',\n history: true,\n onEvent: (event) => {\n if (event.kind === 'audio' && event.stat === 'bytesReceived') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,\n {\n type: mediaType.AUDIO\n }\n );\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesReceived') {\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainVideo',\n correlate: 'video',\n history: true,\n onEvent: (event) => {\n if (event.kind === 'video' && event.stat === 'bytesReceived') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,\n {\n type: mediaType.VIDEO\n }\n );\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesReceived') {\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainShare',\n correlate: 'video',\n onEvent: (event) => {\n if (event.kind === 'share' && event.stat === 'bytesReceived') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,\n {\n type: mediaType.SHARE\n }\n );\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n else if (event.stop && event.stat === 'bytesReceived') {\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n },\n onData: () => {}\n }\n ]\n };\n\n StatsUtil.generateOptions(options, STATS.CONFIG, meeting);\n\n options.config = STATS.CONFIG;\n\n // pass the attrs and options for the webex instance\n meeting.internalStats = new WebRTCStats(meeting.attrs, meeting.options, options);\n }\n\n return meeting.internalStats;\n};\n\nMeetingUtil.handleAudioLogging = (audioTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n};\n\nMeetingUtil.handleVideoLogging = (videoTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n};\n\nMeetingUtil.handleDeviceLogging = (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n};\n\nexport default MeetingUtil;\n"]}
|
|
1
|
+
{"version":3,"sources":["util.js"],"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","audioMuted","videoMuted","meeting","reject","ParameterError","localMedias","Media","generateLocalMedias","Metrics","postEvent","event","eventType","MEDIA_REQUEST","meetingRequest","remoteAudioVideoToggle","deviceUrl","correlationId","then","MEDIA_RESPONSE","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","options","LOCUS_JOIN_REQUEST","sipUri","meetingNumber","roapMessage","resourceId","moderator","pin","moveToResource","preferTranscoding","asResourceOccupant","res","LOCUS_JOIN_RESPONSE","data","trigger","LOCI_UPDATE","trackingId","headers","trackingid","cleanUp","statsAnalyzer","stopAnalyzer","closeLocalStream","closeLocalShare","closeRemoteTracks","closePeerConnections","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteTracks","unsetPeerConnections","cleanMQAInterval","reconnectionManager","roap","stop","roapSeq","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","locusInfo","onFullLocus","catch","LoggerProxy","logger","error","leaveMeeting","isUserInLeftState","UserNotJoinedError","defaultOptions","leaveOptions","resolve","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","CaptchaError","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","PIN_COLLECTED","setLocus","PIN_PROMPT","IntentToJoinError","JoinMeetingError","updateTransceiver","meetingOptions","type","sendTrack","receiveTrack","track","transceiver","peerConnection","previousMediaDirection","undefined","meetingId","remoteQualityLevel","mediaProperties","enableRtx","config","enableExtmap","sendRoapMediaRequest","sdp","e","sender","replaceTrack","validateOptions","sendVideo","sendAudio","sendShare","localStream","localShare","getTrack","videoTrack","audioTrack","stream","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","canUserLock","joined","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRecord","RECORDING_CONTROL_START","canUserPause","RECORDING_CONTROL_PAUSE","canUserResume","RECORDING_CONTROL_RESUME","canUserStop","RECORDING_CONTROL_STOP","startRecording","request","recordMeeting","recording","paused","PermissionError","pauseRecording","resumeRecording","stopRecording","lockMeeting","actions","canLock","lock","unlockMeeting","canUnlock","startInternalStats","internalStats","useConfig","senders","correlate","history","onEvent","kind","stat","Trigger","file","function","EVENT_TRIGGERS","MEETING_MEDIA_LOCAL_STARTED","mediaType","AUDIO","SENDING_MEDIA_START","SENDING_MEDIA_STOP","onData","VIDEO","SHARE","SENDING_SHARE_START","SENDING_SHARE_STOP","receivers","MEETING_MEDIA_REMOTE_STARTED","RECEIVING_MEDIA_START","RECEIVING_MEDIA_STOP","StatsUtil","generateOptions","STATS","CONFIG","WebRTCStats","attrs","handleAudioLogging","LOG_HEADER","settings","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device"],"mappings":"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","sourcesContent":["import {isEmpty} from 'lodash';\n\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport StatsUtil from '../stats/util';\nimport Metrics from '../metrics';\nimport {eventType, trigger, mediaType} from '../metrics/config';\nimport Media from '../media';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport WebRTCStats from '../stats/index';\nimport {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n STATS,\n EVENT_TRIGGERS,\n FULL_STATE,\n PASSWORD_STATUS\n} from '../constants';\nimport Trigger from '../common/events/trigger-proxy';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\n\nconst MeetingUtil = {};\n\nMeetingUtil.parseLocusJoin = (response) => {\n const parsed = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n};\n\nMeetingUtil.remoteUpdateAudioVideo = (audioMuted, videoMuted, meeting) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n const localMedias = Media.generateLocalMedias(meeting.mediaId, audioMuted, videoMuted);\n\n if (isEmpty(localMedias)) {\n return Promise.reject(new ParameterError('You need a media id on the meeting to change remote audio.'));\n }\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});\n\n return meeting.meetingRequest.remoteAudioVideoToggle({\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n localMedias,\n deviceUrl: meeting.deviceUrl,\n correlationId: meeting.correlationId\n }).then((response) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});\n\n return response.body.locus;\n });\n};\n\nMeetingUtil.hasOwner = (info) => info && info.owner;\n\nMeetingUtil.isOwnerSelf = (owner, selfId) => owner === selfId;\n\nMeetingUtil.isPinOrGuest = (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);\n\nMeetingUtil.joinMeeting = (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n Metrics.postEvent({event: eventType.LOCUS_JOIN_REQUEST, meeting});\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n sipUri: meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: options.preferTranscoding,\n asResourceOccupant: options.asResourceOccupant\n })\n .then((res) => {\n Metrics.postEvent({\n event: eventType.LOCUS_JOIN_RESPONSE,\n meeting,\n data: {\n trigger: trigger.LOCI_UPDATE,\n locus: res.body.locus,\n mediaConnections: res.body.mediaConnections,\n trackingId: res.headers.trackingid\n }\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n};\n\nMeetingUtil.cleanUp = (meeting) => {\n // make sure we send last metrics before we close the peerconnection\n if (meeting.statsAnalyzer) meeting.statsAnalyzer.stopAnalyzer();\n\n return meeting.closeLocalStream()\n .then(() => meeting.closeLocalShare())\n .then(() => meeting.closeRemoteTracks())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.unsetLocalVideoTrack();\n meeting.unsetLocalShareTrack();\n meeting.unsetRemoteTracks();\n meeting.unsetPeerConnections();\n meeting.cleanMQAInterval();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.roap.stop(meeting.correlationId, meeting.roapSeq));\n};\n\nMeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const options = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n phoneUrl\n };\n\n return meeting.meetingRequest\n .disconnectPhoneAudio(options)\n .then((response) => {\n if (response?.body?.locus) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${\n meeting.id\n }, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\n\n// by default will leave on meeting's resourceId\n// if you explicity want it not to leave on resource id, pass\n// {resourceId: null}\n// TODO: chris, you can modify this however you want\nMeetingUtil.leaveMeeting = (meeting, options = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const defaultOptions = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n resourceId: meeting.resourceId,\n deviceUrl: meeting.deviceUrl\n };\n\n const leaveOptions = {...defaultOptions, ...options};\n\n return meeting.meetingRequest\n .leaveMeeting(leaveOptions)\n .then((response) => {\n if (response && response.body && response.body.locus) { // && !options.moveMeeting) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n\n return Promise.resolve();\n })\n .then(() => {\n if (options.moveMeeting) {\n return Promise.resolve();\n }\n\n return MeetingUtil.cleanUp(meeting);\n })\n .catch((err) => {\n // TODO: If the meeting state comes as LEFT or INACTIVE as response then\n // 1) on leave clean up the meeting or simply do a sync on the meeting\n // 2) If the error says meeting is inactive then destroy the meeting object\n LoggerProxy.logger.error(\n `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${\n meeting.id\n }, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\nMeetingUtil.declineMeeting = (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason\n });\n\nMeetingUtil.isUserInLeftState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _LEFT_;\n\nMeetingUtil.isUserInIdleState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _IDLE_;\n\nMeetingUtil.isUserInJoinedState = (locusInfo) =>\n locusInfo.parsedLocus?.self?.state === _JOINED_;\n\nMeetingUtil.isMediaEstablished = (currentMediaStatus) =>\n currentMediaStatus && (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);\n\n\nMeetingUtil.joinMeetingOptions = (meeting, options = {}) => {\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (meeting.requiredCaptcha) {\n return Promise.reject(new CaptchaError());\n }\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n return Promise.reject(new PasswordError());\n }\n\n if (options.pin) {\n Metrics.postEvent({\n event: eventType.PIN_COLLECTED,\n meeting\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n Metrics.postEvent({\n event: eventType.PIN_PROMPT,\n meeting\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error('Meeting:util#joinMeetingOptions --> Error joining the call, ', err);\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n};\n\nMeetingUtil.updateTransceiver = (options, meetingOptions) => {\n const {\n type,\n sendTrack,\n receiveTrack,\n track,\n transceiver,\n peerConnection,\n previousMediaDirection\n } = options;\n\n if ((sendTrack !== undefined && sendTrack !== previousMediaDirection.sendTrack) ||\n (receiveTrack !== undefined && receiveTrack !== previousMediaDirection.receiveTrack)) {\n return Media.updateTransceiver({\n meetingId: meetingOptions.meeting.id,\n remoteQualityLevel: meetingOptions.mediaProperties.remoteQualityLevel,\n enableRtx: meetingOptions.meeting.config.enableRtx,\n enableExtmap: meetingOptions.meeting.config.enableExtmap\n }, peerConnection, transceiver,\n {\n track,\n type,\n receiveTrack,\n sendTrack\n })\n .then(() => meetingOptions.meeting.roap\n .sendRoapMediaRequest({\n sdp: meetingOptions.mediaProperties.peerConnection.sdp,\n roapSeq: meetingOptions.meeting.roapSeq,\n meeting: meetingOptions.meeting // or can pass meeting ID\n }))\n .catch((e) => {\n LoggerProxy.logger.error(`Meeting:util#updateTransceiver --> Error updating the ${type} streams with error: ${e}`);\n });\n } if (track) {\n transceiver.sender.replaceTrack(track);\n\n return Promise.resolve();\n }\n\n return Promise.reject(new ParameterError('update Failed: please pass valid parameter'));\n};\n\nMeetingUtil.validateOptions = (options) => {\n const {\n sendVideo, sendAudio, sendShare, localStream, localShare\n } = options;\n\n if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid video streams'));\n }\n\n if (sendAudio && !MeetingUtil.getTrack(localStream).audioTrack) {\n return Promise.reject(new ParameterError('please pass valid audio streams'));\n }\n\n if (sendShare && !MeetingUtil.getTrack(localShare).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid share streams'));\n }\n\n return Promise.resolve();\n};\n\nMeetingUtil.getTrack = (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n};\n\nMeetingUtil.getModeratorFromLocusInfo = (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator;\n\nMeetingUtil.getPolicyFromLocusInfo = (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy;\n\nMeetingUtil.canUserLock = (moderator, joined) => {\n if (moderator.LOCK_CONTROL_LOCK && joined.LOCK_STATUS_UNLOCKED) {\n return true;\n }\n\n return false;\n};\n\nMeetingUtil.canUserUnlock = (moderator, joined) => {\n if (moderator.LOCK_CONTROL_UNLOCK && joined.LOCK_STATUS_LOCKED) {\n return true;\n }\n\n return false;\n};\n\nMeetingUtil.canUserRecord = (moderator) => moderator.RECORDING_CONTROL_START;\n\nMeetingUtil.canUserPause = (moderator) => moderator.RECORDING_CONTROL_PAUSE;\n\nMeetingUtil.canUserResume = (moderator) => moderator.RECORDING_CONTROL_RESUME;\n\nMeetingUtil.canUserStop = (moderator) => moderator.RECORDING_CONTROL_STOP;\n\nMeetingUtil.startRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserRecord(moderator)) {\n return request.recordMeeting({locusUrl, recording: true, paused: false});\n }\n\n return Promise.reject(new PermissionError('Start recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.pauseRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserPause(moderator)) {\n return request.recordMeeting({locusUrl, recording: true, paused: true});\n }\n\n return Promise.reject(new PermissionError('Pause recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.resumeRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserResume(moderator)) {\n return request.recordMeeting({locusUrl, recording: true, paused: false});\n }\n\n return Promise.reject(new PermissionError('Resume recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.stopRecording = (request, locusUrl, locusInfo) => {\n const moderator = MeetingUtil.getModeratorFromLocusInfo(locusInfo);\n\n if (moderator && MeetingUtil.canUserStop(moderator)) {\n return request.recordMeeting({locusUrl, recording: false, paused: false});\n }\n\n return Promise.reject(new PermissionError('Stop recording not allowed, due to moderator property.'));\n};\n\nMeetingUtil.lockMeeting = (actions, request, locusUrl) => {\n if (actions && actions.canLock) {\n return request.lockMeeting({locusUrl, lock: true});\n }\n\n return Promise.reject(new PermissionError('Lock not allowed, due to joined property.'));\n};\n\nMeetingUtil.unlockMeeting = (actions, request, locusUrl) => {\n if (actions && actions.canUnlock) {\n return request.lockMeeting({locusUrl, lock: false});\n }\n\n return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));\n};\n\nMeetingUtil.startInternalStats = (meeting) => {\n if (!meeting.internalStats) {\n const options = {\n useConfig: true,\n senders: [\n {\n id: 'mainAudio',\n correlate: 'audio',\n history: true,\n onEvent: (event) => {\n // TODO: we don't need checks like this since it comes from the transceiver\n // refactor event linkage to use callbacks instead of events\n if (event.kind === 'audio' && event.stat === 'bytesSent') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.AUDIO\n }\n );\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesSent') {\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainVideo',\n correlate: 'video',\n history: true,\n onEvent: (event) => {\n if (event.kind === 'video' && event.stat === 'bytesSent') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.VIDEO\n }\n );\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesSent') {\n Metrics.postEvent({\n event: eventType.SENDING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainShare',\n correlate: 'video',\n onEvent: (event) => {\n if (event.kind === 'share' && event.stat === 'bytesSent') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.SHARE\n }\n );\n Metrics.postEvent({\n event: eventType.SENDING_SHARE_START,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n else if (event.stop && event.stat === 'bytesSent') {\n Metrics.postEvent({\n event: eventType.SENDING_SHARE_STOP,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n },\n onData: () => {}\n }\n ],\n receivers: [\n {\n id: 'mainAudio',\n correlate: 'audio',\n history: true,\n onEvent: (event) => {\n if (event.kind === 'audio' && event.stat === 'bytesReceived') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,\n {\n type: mediaType.AUDIO\n }\n );\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesReceived') {\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.AUDIO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainVideo',\n correlate: 'video',\n history: true,\n onEvent: (event) => {\n if (event.kind === 'video' && event.stat === 'bytesReceived') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,\n {\n type: mediaType.VIDEO\n }\n );\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n else if (event.stop && event.stat === 'bytesReceived') {\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.VIDEO\n }\n });\n }\n },\n onData: () => {}\n },\n {\n id: 'mainShare',\n correlate: 'video',\n onEvent: (event) => {\n if (event.kind === 'share' && event.stat === 'bytesReceived') {\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'startInternalStats'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,\n {\n type: mediaType.SHARE\n }\n );\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_START,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n else if (event.stop && event.stat === 'bytesReceived') {\n Metrics.postEvent({\n event: eventType.RECEIVING_MEDIA_STOP,\n meeting,\n data: {\n mediaType: mediaType.SHARE\n }\n });\n }\n },\n onData: () => {}\n }\n ]\n };\n\n StatsUtil.generateOptions(options, STATS.CONFIG, meeting);\n\n options.config = STATS.CONFIG;\n\n // pass the attrs and options for the webex instance\n meeting.internalStats = new WebRTCStats(meeting.attrs, meeting.options, options);\n }\n\n return meeting.internalStats;\n};\n\nMeetingUtil.handleAudioLogging = (audioTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n};\n\nMeetingUtil.handleVideoLogging = (videoTrack) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n};\n\nMeetingUtil.handleDeviceLogging = (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n};\n\nexport default MeetingUtil;\n"]}
|
|
@@ -144,6 +144,11 @@ var MeetingInfo = /*#__PURE__*/function () {
|
|
|
144
144
|
var _this2 = this;
|
|
145
145
|
|
|
146
146
|
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
147
|
+
|
|
148
|
+
if (type === _constants._PERSONAL_ROOM_ && !destination) {
|
|
149
|
+
destination = this.webex.internal.device.userId;
|
|
150
|
+
}
|
|
151
|
+
|
|
147
152
|
return this.fetchInfoOptions(_util.default.extractDestination(destination, type), type).then(function (options) {
|
|
148
153
|
return (// fetch meeting info
|
|
149
154
|
_this2.requestFetchInfo(options).catch(function (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.js"],"names":["MeetingInfo","webex","meetingInfoRequest","MeetingInfoRequest","meetingInfoCollection","MeetingInfoCollection","id","get","info","set","options","fetchMeetingInfo","then","body","setMeetingInfo","sipMeetingUri","meetingLink","catch","error","LoggerProxy","logger","reject","destination","type","MeetingInfoUtil","generateOptions","fetchInfoOptions","extractDestination","requestFetchInfo","_MEETING_LINK_","convertLinkToSip","_SIP_URI_"],"mappings":";;;;;;;;;;;;;;;;;;AAIA;;
|
|
1
|
+
{"version":3,"sources":["index.js"],"names":["MeetingInfo","webex","meetingInfoRequest","MeetingInfoRequest","meetingInfoCollection","MeetingInfoCollection","id","get","info","set","options","fetchMeetingInfo","then","body","setMeetingInfo","sipMeetingUri","meetingLink","catch","error","LoggerProxy","logger","reject","destination","type","MeetingInfoUtil","generateOptions","_PERSONAL_ROOM_","internal","device","userId","fetchInfoOptions","extractDestination","requestFetchInfo","_MEETING_LINK_","convertLinkToSip","_SIP_URI_"],"mappings":";;;;;;;;;;;;;;;;;;AAIA;;AAKA;;AAEA;;AACA;;AACA;;AAbA;AACA;AACA;;AAaA;AACA;AACA;IACqBA,W;AACnB;AACF;AACA;AACA;AACE,uBAAYC,KAAZ,EAAmB;AAAA;AACjB,SAAKA,KAAL,GAAaA,KAAb;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;;AACI,SAAKC,kBAAL,GAA0B,IAAIC,gBAAJ,CAAuB,KAAKF,KAA5B,CAA1B;AACA;AACJ;AACA;AACA;AACA;AACA;AACA;;AACI,SAAKG,qBAAL,GAA6B,IAAIC,mBAAJ,EAA7B;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;;;WACE,wBAAeC,EAAf,EAAmB;AACjB,aAAO,KAAKF,qBAAL,CAA2BG,GAA3B,CAA+BD,EAA/B,CAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,wBAAeA,EAAf,EAAmBE,IAAnB,EAAyB;AACvB,WAAKJ,qBAAL,CAA2BK,GAA3B,CAA+BH,EAA/B,EAAmCE,IAAnC;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,0BAAiBE,OAAjB,EAA0B;AAAA;;AACxB,aAAO,KAAKR,kBAAL,CAAwBS,gBAAxB,CAAyCD,OAAzC,EAAkDE,IAAlD,CAAuD,UAACJ,IAAD,EAAU;AACtE,YAAIA,IAAI,IAAIA,IAAI,CAACK,IAAjB,EAAuB;AACrB,UAAA,KAAI,CAACC,cAAL,CAAoBN,IAAI,CAACK,IAAL,CAAUE,aAAV,IAA2BP,IAAI,CAACK,IAAL,CAAUG,WAAzD,EAAsER,IAAI,CAACK,IAA3E;AACD;;AAED,eAAOL,IAAP;AACD,OANM,EAMJS,KANI,CAME,UAACC,KAAD,EAAW;AAClBC,6BAAYC,MAAZ,CAAmBF,KAAnB,oDAAqEA,KAArE;;AAEA,eAAO,iBAAQG,MAAR,CAAeH,KAAf,CAAP;AACD,OAVM,CAAP;AAWD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,0BAAiBI,WAAjB,EAA8BC,IAA9B,EAAoC;AAClC,aAAOC,cAAgBC,eAAhB,CAAgC;AACrCH,QAAAA,WAAW,EAAXA,WADqC;AAErCC,QAAAA,IAAI,EAAJA,IAFqC;AAGrCtB,QAAAA,KAAK,EAAE,KAAKA;AAHyB,OAAhC,CAAP;AAKD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,0BAAiBqB,WAAjB,EAA2C;AAAA;;AAAA,UAAbC,IAAa,uEAAN,IAAM;;AACzC,UAAIA,IAAI,KAAKG,0BAAT,IAA4B,CAACJ,WAAjC,EAA8C;AAC5CA,QAAAA,WAAW,GAAG,KAAKrB,KAAL,CAAW0B,QAAX,CAAoBC,MAApB,CAA2BC,MAAzC;AACD;;AAED,aAAO,KAAKC,gBAAL,CACLN,cAAgBO,kBAAhB,CAAmCT,WAAnC,EAAgDC,IAAhD,CADK,EAELA,IAFK,EAGLX,IAHK,CAGA,UAACF,OAAD;AAAA,eACP;AACE,UAAA,MAAI,CAACsB,gBAAL,CAAsBtB,OAAtB,EAA+BO,KAA/B,CAAqC,UAACC,KAAD,EAAW;AAChD;AACE,gBAAIR,OAAO,CAACa,IAAR,KAAiBU,yBAArB,EAAqC;AACrC;AACE,qBAAO,MAAI,CAACD,gBAAL,CAAsB,MAAI,CAACF,gBAAL,CAAsBN,cAAgBU,gBAAhB,CAAiCZ,WAAjC,CAAtB,EAAqEa,oBAArE,CAAtB,CAAP;AACD;;AAED,mBAAO,iBAAQd,MAAR,CAAeH,KAAf,CAAP;AACD,WARD;AAFK;AAAA,OAHA,CAAP;AAcD","sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {\n _MEETING_LINK_,\n _SIP_URI_,\n _PERSONAL_ROOM_\n} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport MeetingInfoCollection from './collection';\nimport MeetingInfoRequest from './request';\nimport MeetingInfoUtil from './util';\n\n/**\n * @class MeetingInfo\n */\nexport default class MeetingInfo {\n /**\n *\n * @param {WebexSDK} webex\n */\n constructor(webex) {\n this.webex = webex;\n\n /**\n * The meeting info request server interface\n * @instance\n * @type {Object}\n * @private\n * @memberof MeetingInfo\n */\n this.meetingInfoRequest = new MeetingInfoRequest(this.webex);\n /**\n * The meeting information collection interface\n * @instance\n * @type {Object}\n * @private\n * @memberof MeetingInfo\n */\n this.meetingInfoCollection = new MeetingInfoCollection();\n }\n\n /**\n * @param {string} id\n * @returns {object}\n * @public\n * @memberof MeetingInfo\n */\n getMeetingInfo(id) {\n return this.meetingInfoCollection.get(id);\n }\n\n /**\n * @param {string} id\n * @param {object} info\n * @returns {null}\n * @public\n * @memberof MeetingInfo\n */\n setMeetingInfo(id, info) {\n this.meetingInfoCollection.set(id, info);\n }\n\n /**\n * Helper to make the actual MeetingInfo request and set the meetingInfo if successful, else reject\n * @param {Object} options\n * @returns {Promise}\n * @private\n * @memberof MeetingInfo\n */\n requestFetchInfo(options) {\n return this.meetingInfoRequest.fetchMeetingInfo(options).then((info) => {\n if (info && info.body) {\n this.setMeetingInfo(info.body.sipMeetingUri || info.body.meetingLink, info.body);\n }\n\n return info;\n }).catch((error) => {\n LoggerProxy.logger.error(`Meeting-info:index#requestFetchInfo --> ${error} fetch meetingInfo`);\n\n return Promise.reject(error);\n });\n }\n\n /**\n * Helper to generate the options for the MeetingInfo request\n * @param {String} destination\n * @param {String} type\n * @returns {Promise}\n * @private\n * @memberof MeetingInfo\n */\n fetchInfoOptions(destination, type) {\n return MeetingInfoUtil.generateOptions({\n destination,\n type,\n webex: this.webex\n });\n }\n\n /**\n * Fetches meeting info from the server\n * @param {String} destination one of many different types of destinations to look up info for\n * @param {String} [type] to match up with the destination value\n * @returns {Promise} returns a meeting info object\n * @public\n * @memberof MeetingInfo\n */\n fetchMeetingInfo(destination, type = null) {\n if (type === _PERSONAL_ROOM_ && !destination) {\n destination = this.webex.internal.device.userId;\n }\n\n return this.fetchInfoOptions(\n MeetingInfoUtil.extractDestination(destination, type),\n type\n ).then((options) =>\n // fetch meeting info\n this.requestFetchInfo(options).catch((error) => {\n // if it failed the first time as meeting link\n if (options.type === _MEETING_LINK_) {\n // convert the meeting link to sip URI and retry\n return this.requestFetchInfo(this.fetchInfoOptions(MeetingInfoUtil.convertLinkToSip(destination), _SIP_URI_));\n }\n\n return Promise.reject(error);\n }));\n }\n}\n"]}
|