@webex/plugin-meetings 1.147.0 → 1.149.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.
@@ -283,6 +283,50 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
283
283
  throw err;
284
284
  });
285
285
  }
286
+ /**
287
+ * Make a network request to add a dial out device
288
+ * @param {Object} options
289
+ * @param {String} options.correlationId
290
+ * @param {String} options.localUrl url for the meeting
291
+ * @param {String} options.dialOutUrl identifier for the to-be provisioned device
292
+ * @param {String} options.phoneNumber phone number to dial out to
293
+ * @param {String} options.clientUrl identifier for the web device
294
+ * @returns {Promise}
295
+ * @private
296
+ */
297
+
298
+ }, {
299
+ key: "dialOut",
300
+ value: function dialOut(_ref2) {
301
+ var locusUrl = _ref2.locusUrl,
302
+ dialOutUrl = _ref2.dialOutUrl,
303
+ phoneNumber = _ref2.phoneNumber,
304
+ clientUrl = _ref2.clientUrl,
305
+ correlationId = _ref2.correlationId;
306
+
307
+ _loggerProxy.default.logger.info('Meeting:request#dialOut --> Provisioning a dial out device', correlationId);
308
+
309
+ var uri = "".concat(locusUrl, "/").concat(_constants.PARTICIPANT);
310
+ var body = {
311
+ device: {
312
+ deviceType: _common.deviceType.PROVISIONAL,
313
+ provisionalType: _constants.PROVISIONAL_TYPE_DIAL_OUT,
314
+ url: dialOutUrl,
315
+ dialoutAddress: phoneNumber,
316
+ clientUrl: clientUrl
317
+ },
318
+ correlationId: correlationId
319
+ };
320
+ return this.request({
321
+ method: _constants.HTTP_VERBS.POST,
322
+ uri: uri,
323
+ body: body
324
+ }).catch(function (err) {
325
+ _loggerProxy.default.logger.error("Meeting:request#dialOut --> Error provisioning a dial out device, error ".concat(err));
326
+
327
+ throw err;
328
+ });
329
+ }
286
330
  /**
287
331
  * Syns the missed delta event
288
332
  * @param {Object} options
@@ -346,32 +390,31 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
346
390
  return _promise.default.reject();
347
391
  }
348
392
  /**
349
- * Make a network request to make a provisioned pstn device leave the meeting
393
+ * Make a network request to make a provisioned phone leave the meeting
350
394
  * @param {Object} options
351
395
  * @param {String} options.locusUrl
352
- * @param {String} options.selfId
353
- * @param {String} options.deviceUrl
354
- * @param {String} options.resourceId,
396
+ * @param {String} options.phoneUrl
355
397
  * @param {String} options.correlationId
398
+ * @param {String} options.selfId
356
399
  * @returns {Promise}
357
400
  * @private
358
401
  */
359
402
 
360
403
  }, {
361
- key: "leavePstn",
362
- value: function leavePstn(_ref2) {
363
- var locusUrl = _ref2.locusUrl,
364
- dialInUrl = _ref2.dialInUrl,
365
- correlationId = _ref2.correlationId,
366
- selfId = _ref2.selfId;
404
+ key: "disconnectPhoneAudio",
405
+ value: function disconnectPhoneAudio(_ref3) {
406
+ var locusUrl = _ref3.locusUrl,
407
+ phoneUrl = _ref3.phoneUrl,
408
+ correlationId = _ref3.correlationId,
409
+ selfId = _ref3.selfId;
367
410
 
368
- _loggerProxy.default.logger.info("Meeting:request#leavePstn --> request device ".concat(dialInUrl, " to leaving"), correlationId);
411
+ _loggerProxy.default.logger.info("Meeting:request#disconnectPhoneAudio --> request phone ".concat(phoneUrl, " to leave"), correlationId);
369
412
 
370
413
  var uri = "".concat(locusUrl, "/").concat(_constants.PARTICIPANT, "/").concat(selfId, "/").concat(_constants.LEAVE);
371
414
  var body = {
372
415
  device: {
373
416
  deviceType: _common.deviceType.PROVISIONAL,
374
- url: dialInUrl
417
+ url: phoneUrl
375
418
  },
376
419
  correlationId: correlationId
377
420
  };
@@ -380,7 +423,7 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
380
423
  uri: uri,
381
424
  body: body
382
425
  }).catch(function (err) {
383
- _loggerProxy.default.logger.error("Meeting:request#leavePstn --> Error when requesting pstn device ".concat(dialInUrl, " to leave, error ").concat(err));
426
+ _loggerProxy.default.logger.error("Meeting:request#disconnectPhoneAudio --> Error when requesting phone ".concat(phoneUrl, " to leave, error ").concat(err));
384
427
 
385
428
  throw err;
386
429
  });
@@ -398,12 +441,12 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
398
441
 
399
442
  }, {
400
443
  key: "leaveMeeting",
401
- value: function leaveMeeting(_ref3) {
402
- var locusUrl = _ref3.locusUrl,
403
- selfId = _ref3.selfId,
404
- url = _ref3.deviceUrl,
405
- resourceId = _ref3.resourceId,
406
- correlationId = _ref3.correlationId;
444
+ value: function leaveMeeting(_ref4) {
445
+ var locusUrl = _ref4.locusUrl,
446
+ selfId = _ref4.selfId,
447
+ url = _ref4.deviceUrl,
448
+ resourceId = _ref4.resourceId,
449
+ correlationId = _ref4.correlationId;
407
450
 
408
451
  _loggerProxy.default.logger.info('Meeting:request#leaveMeeting --> Leaving a meeting', correlationId);
409
452
 
@@ -608,10 +651,10 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
608
651
 
609
652
  }, {
610
653
  key: "sendDTMF",
611
- value: function sendDTMF(_ref4) {
612
- var locusUrl = _ref4.locusUrl,
613
- deviceUrl = _ref4.deviceUrl,
614
- tones = _ref4.tones;
654
+ value: function sendDTMF(_ref5) {
655
+ var locusUrl = _ref5.locusUrl,
656
+ deviceUrl = _ref5.deviceUrl,
657
+ tones = _ref5.tones;
615
658
  return this.request({
616
659
  method: _constants.HTTP_VERBS.POST,
617
660
  uri: "".concat(locusUrl, "/").concat(_constants.SEND_DTMF_ENDPOINT),
@@ -641,12 +684,12 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
641
684
 
642
685
  }, {
643
686
  key: "changeVideoLayout",
644
- value: function changeVideoLayout(_ref5) {
645
- var locusUrl = _ref5.locusUrl,
646
- deviceUrl = _ref5.deviceUrl,
647
- layoutType = _ref5.layoutType,
648
- main = _ref5.main,
649
- content = _ref5.content;
687
+ value: function changeVideoLayout(_ref6) {
688
+ var locusUrl = _ref6.locusUrl,
689
+ deviceUrl = _ref6.deviceUrl,
690
+ layoutType = _ref6.layoutType,
691
+ main = _ref6.main,
692
+ content = _ref6.content;
650
693
 
651
694
  // send main/content renderInfo only if both width and height are specified
652
695
  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","desync","syncUrl","split","LOCUS","SYNCDEBUG","GET","reject","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","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 {\n deviceType\n} 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 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, sipUri, meetingNumber, deviceUrl, locusUrl, resourceId, correlationId, ensureConversation, moderator, pin, moveToResource, roapMessage, 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 (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: `wbxmn:${meetingNumber}`\n };\n }\n catch (e) {\n LoggerProxy.logger.error(`Meeting:request#joinMeeting webex meeting id--> ${e}`);\n throw (e);\n }\n }\n else if (sipUri) {\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\n };\n }\n catch (e) {\n LoggerProxy.logger.error(`Meeting:request#joinMeeting sipUrl --> ${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, dialInUrl, clientUrl, 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 * 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 pstn device leave the meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.selfId\n * @param {String} options.deviceUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @returns {Promise}\n * @private\n */\n leavePstn({\n locusUrl, dialInUrl, correlationId, selfId\n }) {\n LoggerProxy.logger.info(\n `Meeting:request#leavePstn --> request device ${dialInUrl} to leaving`,\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n url: dialInUrl\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(`Meeting:request#leavePstn --> Error when requesting pstn device ${dialInUrl} to leave, error ${err}`);\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, selfId, deviceUrl: url, resourceId, 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 return this.request({\n uri: options.uri,\n method: HTTP_VERBS.PUT,\n body: {\n floor: floorReq,\n resourceUrl: options.resourceUrl\n }\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, deviceUrl, layoutType, main, 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","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","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 {\n deviceType\n} 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, sipUri, meetingNumber, deviceUrl, locusUrl, resourceId, correlationId, ensureConversation, moderator, pin, moveToResource, roapMessage, 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 (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: `wbxmn:${meetingNumber}`\n };\n }\n catch (e) {\n LoggerProxy.logger.error(`Meeting:request#joinMeeting webex meeting id--> ${e}`);\n throw (e);\n }\n }\n else if (sipUri) {\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\n };\n }\n catch (e) {\n LoggerProxy.logger.error(`Meeting:request#joinMeeting sipUrl --> ${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, dialInUrl, clientUrl, 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, dialOutUrl, phoneNumber, clientUrl, 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, phoneUrl, correlationId, 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, selfId, deviceUrl: url, resourceId, 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 return this.request({\n uri: options.uri,\n method: HTTP_VERBS.PUT,\n body: {\n floor: floorReq,\n resourceUrl: options.resourceUrl\n }\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, deviceUrl, layoutType, main, 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"]}
@@ -120,11 +120,9 @@ MeetingUtil.isOwnerSelf = function (owner, selfId) {
120
120
  };
121
121
 
122
122
  MeetingUtil.isPinOrGuest = function (err) {
123
- if (err && err.body && err.body.errorCode === _constants.INTENT_TO_JOIN) {
124
- return true;
125
- }
123
+ var _err$body;
126
124
 
127
- return false;
125
+ return (err === null || err === void 0 ? void 0 : (_err$body = err.body) === null || _err$body === void 0 ? void 0 : _err$body.errorCode) && _constants.INTENT_TO_JOIN.includes(err.body.errorCode);
128
126
  };
129
127
 
130
128
  MeetingUtil.joinMeeting = function (meeting, options) {
@@ -190,7 +188,7 @@ MeetingUtil.cleanUp = function (meeting) {
190
188
  });
191
189
  };
192
190
 
193
- MeetingUtil.leavePstn = function (meeting, dialInUrl) {
191
+ MeetingUtil.disconnectPhoneAudio = function (meeting, phoneUrl) {
194
192
  if (meeting.meetingState === _constants.FULL_STATE.INACTIVE) {
195
193
  return _promise.default.reject(new _webexErrors.MeetingNotActiveError());
196
194
  }
@@ -199,16 +197,16 @@ MeetingUtil.leavePstn = function (meeting, dialInUrl) {
199
197
  locusUrl: meeting.locusUrl,
200
198
  selfId: meeting.selfId,
201
199
  correlationId: meeting.correlationId,
202
- dialInUrl: dialInUrl
200
+ phoneUrl: phoneUrl
203
201
  };
204
- return meeting.meetingRequest.leavePstn(options).then(function (response) {
202
+ return meeting.meetingRequest.disconnectPhoneAudio(options).then(function (response) {
205
203
  var _response$body;
206
204
 
207
205
  if (response !== null && response !== void 0 && (_response$body = response.body) !== null && _response$body !== void 0 && _response$body.locus) {
208
206
  meeting.locusInfo.onFullLocus(response.body.locus);
209
207
  }
210
208
  }).catch(function (err) {
211
- _loggerProxy.default.logger.error("Meeting:util#leavePstn --> An error occured while trying to leave pstn with an id of ".concat(meeting.id, ", error: ").concat(err));
209
+ _loggerProxy.default.logger.error("Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ".concat(meeting.id, ", error: ").concat(err));
212
210
 
213
211
  return _promise.default.reject(err);
214
212
  });
@@ -311,13 +309,6 @@ MeetingUtil.joinMeetingOptions = function (meeting) {
311
309
  }).catch(function (err) {
312
310
  // joining a claimed PMR that is not my own, scenario B
313
311
  if (MeetingUtil.isPinOrGuest(err)) {
314
- if (MeetingUtil.hasOwner(meeting.meetingInfo)) {
315
- return MeetingUtil.joinMeeting(meeting, options).then(function (response) {
316
- meeting.setLocus(response);
317
- return _promise.default.resolve();
318
- });
319
- }
320
-
321
312
  _metrics.default.postEvent({
322
313
  event: _config.eventType.PIN_PROMPT,
323
314
  meeting: meeting
@@ -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","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","leavePstn","dialInUrl","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","meetingInfo","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) => {\n if (err && err.body && err.body.errorCode === INTENT_TO_JOIN) {\n return true;\n }\n\n return false;\n};\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.leavePstn = (meeting, dialInUrl) => {\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 dialInUrl\n };\n\n return meeting.meetingRequest\n .leavePstn(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#leavePstn --> An error occured while trying to leave pstn with an id of ${\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 if (MeetingUtil.hasOwner(meeting.meetingInfo)) {\n return MeetingUtil.joinMeeting(meeting, options).then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve();\n });\n }\n\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","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"]}