@webex/plugin-meetings 3.0.0-beta.112 → 3.0.0-beta.113

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/README.md CHANGED
@@ -331,7 +331,6 @@ webex.meetings.on('meeting:added', (addedMeeting) => {
331
331
  addedMeeting.join().then(() => {});
332
332
  }
333
333
  ```
334
-
335
334
  ##### Reject an incoming meeting
336
335
 
337
336
  When listening to an added meeting, to determine if it is an "incoming" meeting, check the type property of the meeting:
@@ -457,6 +456,51 @@ audioOutputSelect.onchange = function () {
457
456
  attachSinkId(document.getElementById('remoteaudio'), audioOutputSelect.value);
458
457
  };
459
458
  ```
459
+ ##### Availabel joining options
460
+ ```
461
+ /**
462
+ * Make a network request to join a meeting
463
+ * @param {Object} options
464
+ * @param {String} options.sipUri
465
+ * @param {String} options.deviceUrl
466
+ * @param {String} options.locusUrl
467
+ * @param {String} options.resourceId,
468
+ * @param {String} options.correlationId
469
+ * @param {boolean} options.ensureConversation
470
+ * @param {boolean} options.moderator
471
+ * @param {boolean} options.pin
472
+ * @param {boolean} options.moveToResource
473
+ * @param {Object} options.roapMessage
474
+ * @param {boolean} options.breakoutsSupported
475
+ * @param {String} options.locale,
476
+ * @param {Array} options.deviceCapabilities
477
+ * @param {boolean} options.liveAnnotationSupported
478
+ * @returns {Promise}
479
+ */
480
+ ```
481
+ ##### options.deviceCapabilities
482
+ This option provides toggles that Locus service needs, and those toggles will control the performance or features of the meetings to be joined, see examples:
483
+ ###### Breakout Sessions
484
+ ```
485
+ if (breakoutsSupported) {
486
+ deviceCapabilities.push(BREAKOUTS.BREAKOUTS_SUPPORTED);
487
+ }
488
+ ```
489
+ ###### Live Annotation
490
+ ```
491
+ if (liveAnnotationSupported) {
492
+ deviceCapabilities.push(ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED);
493
+ }
494
+ ```
495
+ ###### Audio Disclaimer
496
+ ```
497
+ const joinOptions = {
498
+ locale: 'en_UK', // audio disclaimer language
499
+ deviceCapabilities: ['SERVER_AUDIO_ANNOUNCEMENT_SUPPORTED'], // audio disclaimer toggle
500
+ };
501
+
502
+ const joinMeeting = () => { meeting.join(joinOptions)}
503
+ ```
460
504
 
461
505
  ##### Record
462
506
 
@@ -169,7 +169,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
169
169
  sessionId: this.sessionId
170
170
  });
171
171
  },
172
- version: "3.0.0-beta.112"
172
+ version: "3.0.0-beta.113"
173
173
  });
174
174
  var _default = Breakout;
175
175
  exports.default = _default;
@@ -937,7 +937,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
937
937
  this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
938
938
  }
939
939
  },
940
- version: "3.0.0-beta.112"
940
+ version: "3.0.0-beta.113"
941
941
  });
942
942
  var _default = Breakouts;
943
943
  exports.default = _default;
@@ -15,7 +15,6 @@ exports.default = void 0;
15
15
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
16
16
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
17
17
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
18
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
19
18
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
20
19
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
21
20
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
@@ -113,16 +112,18 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
113
112
  * @param {boolean} options.moveToResource
114
113
  * @param {Object} options.roapMessage
115
114
  * @param {boolean} options.breakoutsSupported
115
+ * @param {String} options.locale,
116
+ * @param {Array} options.deviceCapabilities
116
117
  * @param {boolean} options.liveAnnotationSupported
117
118
  * @returns {Promise}
118
119
  */
119
120
  function () {
120
121
  var _joinMeeting = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(options) {
121
- var asResourceOccupant, inviteeAddress, meetingNumber, permissionToken, deviceUrl, locusUrl, resourceId, correlationId, ensureConversation, moderator, pin, moveToResource, roapMessage, preferTranscoding, breakoutsSupported, liveAnnotationSupported, url, joinCookie, body, deviceCapabilities;
122
+ var asResourceOccupant, inviteeAddress, meetingNumber, permissionToken, deviceUrl, locusUrl, resourceId, correlationId, ensureConversation, moderator, pin, moveToResource, roapMessage, preferTranscoding, breakoutsSupported, locale, _options$deviceCapabi, deviceCapabilities, liveAnnotationSupported, url, joinCookie, body;
122
123
  return _regenerator.default.wrap(function _callee2$(_context2) {
123
124
  while (1) switch (_context2.prev = _context2.next) {
124
125
  case 0:
125
- asResourceOccupant = options.asResourceOccupant, inviteeAddress = options.inviteeAddress, meetingNumber = options.meetingNumber, permissionToken = options.permissionToken, deviceUrl = options.deviceUrl, locusUrl = options.locusUrl, resourceId = options.resourceId, correlationId = options.correlationId, ensureConversation = options.ensureConversation, moderator = options.moderator, pin = options.pin, moveToResource = options.moveToResource, roapMessage = options.roapMessage, preferTranscoding = options.preferTranscoding, breakoutsSupported = options.breakoutsSupported, liveAnnotationSupported = options.liveAnnotationSupported;
126
+ asResourceOccupant = options.asResourceOccupant, inviteeAddress = options.inviteeAddress, meetingNumber = options.meetingNumber, permissionToken = options.permissionToken, deviceUrl = options.deviceUrl, locusUrl = options.locusUrl, resourceId = options.resourceId, correlationId = options.correlationId, ensureConversation = options.ensureConversation, moderator = options.moderator, pin = options.pin, moveToResource = options.moveToResource, roapMessage = options.roapMessage, preferTranscoding = options.preferTranscoding, breakoutsSupported = options.breakoutsSupported, locale = options.locale, _options$deviceCapabi = options.deviceCapabilities, deviceCapabilities = _options$deviceCapabi === void 0 ? [] : _options$deviceCapabi, liveAnnotationSupported = options.liveAnnotationSupported;
126
127
  _loggerProxy.default.logger.info('Meeting:request#joinMeeting --> Joining a meeting', correlationId);
127
128
  url = '';
128
129
  _context2.next = 5;
@@ -148,17 +149,20 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
148
149
  joinCookie: joinCookie
149
150
  }
150
151
  };
151
- deviceCapabilities = [];
152
152
  if (breakoutsSupported) {
153
- deviceCapabilities = [].concat((0, _toConsumableArray2.default)(deviceCapabilities), [_constants.BREAKOUTS.BREAKOUTS_SUPPORTED]);
153
+ deviceCapabilities.push(_constants.BREAKOUTS.BREAKOUTS_SUPPORTED);
154
154
  }
155
155
  if (liveAnnotationSupported) {
156
- deviceCapabilities = [].concat((0, _toConsumableArray2.default)(deviceCapabilities), [_constants.ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED]);
156
+ deviceCapabilities.push(_constants.ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED);
157
157
  }
158
- if (deviceCapabilities.length > 0) {
159
- body.deviceCapabilities = deviceCapabilities;
158
+ if (locale) {
159
+ body.locale = locale;
160
160
  }
161
161
 
162
+ // add deviceCapabilities prop
163
+ if (deviceCapabilities.length) {
164
+ body.deviceCapabilities = deviceCapabilities;
165
+ }
162
166
  // @ts-ignore
163
167
  if (this.webex.meetings.clientRegion) {
164
168
  // @ts-ignore
@@ -1 +1 @@
1
- {"version":3,"names":["MeetingRequest","attrs","options","webex","boundedStorage","get","REACHABILITY","namespace","localStorageJoinCookie","catch","joinCookieRaw","joinCookie","JSON","parse","LoggerProxy","logger","error","changeVideoLayoutDebounced","changeVideoLayout","leading","trailing","asResourceOccupant","inviteeAddress","meetingNumber","permissionToken","deviceUrl","locusUrl","resourceId","correlationId","ensureConversation","moderator","pin","moveToResource","roapMessage","preferTranscoding","breakoutsSupported","liveAnnotationSupported","info","url","getJoinCookie","body","device","deviceType","config","meetings","usingResource","moveMediaToResource","respOnlySdp","allowMultiDevice","supportsNativeLobby","clientMediaPreferences","deviceCapabilities","BREAKOUTS","BREAKOUTS_SUPPORTED","ANNOTATION","ANNOTATION_ON_SHARE_SUPPORTED","length","clientRegion","countryCode","regionCode","undefined","PARTICIPANT","internal","services","waitForCatalog","LOCI","CALL","invitee","address","concat","ALTERNATE_REDIRECT_TRUE","callPreferences","requestedMedia","_SLIDES_","localMedias","request","method","HTTP_VERBS","POST","uri","captchaRefreshUrl","captchaId","err","dialInUrl","clientUrl","PROVISIONAL","provisionalType","PROVISIONAL_TYPE_DIAL_IN","dialOutUrl","phoneNumber","PROVISIONAL_TYPE_DIAL_OUT","dialoutAddress","desync","syncUrl","split","LOCUS","SYNCDEBUG","GET","reject","phoneUrl","selfId","LEAVE","PUT","ALERT","CONTROLS","lock","locked","PATCH","DECLINE","reason","floorReq","disposition","FLOOR_ACTION","GRANTED","beneficiary","personUrl","devices","requester","floor","resourceUrl","resourceToken","annotation","tones","SEND_DTMF_ENDPOINT","dtmf","uuid","v4","layoutType","main","content","width","height","Error","renderInfoMain","renderInfoContent","layoutParams","renderInfo","layout","type","END","keepAliveUrl","reactionChannelUrl","reaction","participantId","sender","enable","requestingParticipantId","reactions","enabled","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {debounce} from 'lodash';\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n// @ts-ignore\nimport {deviceType} from '@webex/common';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n ALERT,\n ALTERNATE_REDIRECT_TRUE,\n BREAKOUTS,\n CALL,\n CONTROLS,\n DECLINE,\n END,\n FLOOR_ACTION,\n HTTP_VERBS,\n LEAVE,\n LOCI,\n LOCUS,\n MEDIA,\n PARTICIPANT,\n PROVISIONAL_TYPE_DIAL_IN,\n PROVISIONAL_TYPE_DIAL_OUT,\n REACHABILITY,\n SEND_DTMF_ENDPOINT,\n _SLIDES_,\n ANNOTATION,\n} from '../constants';\nimport {SendReactionOptions, ToggleReactionsOptions} from './request.type';\n\n/**\n * @class MeetingRequest\n */\nexport default class MeetingRequest extends StatelessWebexPlugin {\n changeVideoLayoutDebounced: any;\n\n /**\n * Constructor\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super(attrs, options);\n this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {\n leading: true,\n trailing: true,\n });\n }\n\n /**\n * Returns joinCookie from boundedStorage if present.\n * @returns {Object} joinCookie\n */\n private getJoinCookie = async () => {\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n const joinCookie = JSON.parse(joinCookieRaw);\n if (joinCookie) {\n return joinCookie;\n }\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return null;\n };\n\n /**\n * Make a network request to join a meeting\n * @param {Object} options\n * @param {String} options.sipUri\n * @param {String} options.deviceUrl\n * @param {String} options.locusUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @param {boolean} options.ensureConversation\n * @param {boolean} options.moderator\n * @param {boolean} options.pin\n * @param {boolean} options.moveToResource\n * @param {Object} options.roapMessage\n * @param {boolean} options.breakoutsSupported\n * @param {boolean} options.liveAnnotationSupported\n * @returns {Promise}\n */\n async joinMeeting(options: {\n sipUri: string;\n deviceUrl: string;\n locusUrl: string;\n resourceId: string;\n correlationId: string;\n ensureConversation: boolean;\n moderator: boolean;\n pin: boolean;\n moveToResource: boolean;\n roapMessage: any;\n asResourceOccupant: any;\n inviteeAddress: any;\n meetingNumber: any;\n permissionToken: any;\n preferTranscoding: any;\n breakoutsSupported: boolean;\n liveAnnotationSupported: boolean;\n }) {\n const {\n asResourceOccupant,\n inviteeAddress,\n meetingNumber,\n permissionToken,\n deviceUrl,\n locusUrl,\n resourceId,\n correlationId,\n ensureConversation,\n moderator,\n pin,\n moveToResource,\n roapMessage,\n preferTranscoding,\n breakoutsSupported,\n liveAnnotationSupported,\n } = options;\n\n LoggerProxy.logger.info('Meeting:request#joinMeeting --> Joining a meeting', correlationId);\n\n let url = '';\n\n const joinCookie = await this.getJoinCookie();\n\n const body: any = {\n asResourceOccupant,\n device: {\n url: deviceUrl,\n // @ts-ignore - config comes from registerPlugin\n deviceType: this.config.meetings.deviceType,\n },\n usingResource: resourceId || null,\n moveMediaToResource: (resourceId && moveToResource) || false,\n correlationId,\n respOnlySdp: true,\n allowMultiDevice: true,\n ensureConversation: ensureConversation || false,\n supportsNativeLobby: 1,\n clientMediaPreferences: {\n preferTranscoding: preferTranscoding ?? true,\n joinCookie,\n },\n };\n\n let deviceCapabilities = [];\n if (breakoutsSupported) {\n deviceCapabilities = [...deviceCapabilities, BREAKOUTS.BREAKOUTS_SUPPORTED];\n }\n if (liveAnnotationSupported) {\n deviceCapabilities = [...deviceCapabilities, ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED];\n }\n if (deviceCapabilities.length > 0) {\n body.deviceCapabilities = deviceCapabilities;\n }\n\n // @ts-ignore\n if (this.webex.meetings.clientRegion) {\n // @ts-ignore\n body.device.countryCode = this.webex.meetings.clientRegion.countryCode;\n // @ts-ignore\n body.device.regionCode = this.webex.meetings.clientRegion.regionCode;\n }\n\n if (moderator !== undefined) {\n body.moderator = moderator;\n }\n\n if (permissionToken) {\n body.permissionToken = permissionToken;\n }\n\n if (pin !== undefined) {\n body.pin = pin;\n }\n\n if (locusUrl) {\n url = `${locusUrl}/${PARTICIPANT}`;\n } else if (inviteeAddress || meetingNumber) {\n try {\n // @ts-ignore\n await this.webex.internal.services.waitForCatalog('postauth');\n // @ts-ignore\n url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;\n body.invitee = {\n address: inviteeAddress || `wbxmn:${meetingNumber}`,\n };\n } catch (e) {\n LoggerProxy.logger.error(\n `Meeting:request#joinMeeting Error Joining ${inviteeAddress || meetingNumber} --> ${e}`\n );\n throw e;\n }\n }\n\n // TODO: -- this will be resolved in SDK request\n url = url.concat(`?${ALTERNATE_REDIRECT_TRUE}`);\n\n if (resourceId === inviteeAddress) {\n body.callPreferences = {\n requestedMedia: [_SLIDES_],\n };\n }\n\n if (roapMessage) {\n body.localMedias = roapMessage.localMedias;\n }\n\n /// @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: url,\n body,\n });\n }\n\n /**\n * Send a request to refresh the captcha\n * @param {Object} options\n * @param {String} options.captchaRefreshUrl\n * @param {String} options.captchaId\n * @returns {Promise}\n * @private\n */\n private refreshCaptcha({\n captchaRefreshUrl,\n captchaId,\n }: {\n captchaRefreshUrl: string;\n captchaId: string;\n }) {\n const body = {\n captchaId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: captchaRefreshUrl,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(`Meeting:request#refreshCaptcha --> Error: ${err}`);\n\n throw err;\n });\n }\n\n /**\n * Make a network request to add a dial in device\n * @param {Object} options\n * @param {String} options.correlationId\n * @param {String} options.locusUrl url for the meeting\n * @param {String} options.dialInUrl identifier for the to-be provisioned device\n * @param {String} options.clientUrl identifier for the web device\n * @returns {Promise}\n * @private\n */\n private dialIn({\n locusUrl,\n dialInUrl,\n clientUrl,\n correlationId,\n }: {\n correlationId: string;\n locusUrl: string;\n dialInUrl: string;\n clientUrl: string;\n }) {\n LoggerProxy.logger.info(\n 'Meeting:request#dialIn --> Provisioning a dial in device',\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n provisionalType: PROVISIONAL_TYPE_DIAL_IN,\n url: dialInUrl,\n clientUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#dialIn --> Error provisioning a dial in device, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Make a network request to add a dial out device\n * @param {Object} options\n * @param {String} options.correlationId\n * @param {String} options.locusUrl url for the meeting\n * @param {String} options.dialOutUrl identifier for the to-be provisioned device\n * @param {String} options.phoneNumber phone number to dial out to\n * @param {String} options.clientUrl identifier for the web device\n * @returns {Promise}\n * @private\n */\n private dialOut({\n locusUrl,\n dialOutUrl,\n phoneNumber,\n clientUrl,\n correlationId,\n }: {\n correlationId: string;\n locusUrl: string;\n dialOutUrl: string;\n phoneNumber: string;\n clientUrl: string;\n }) {\n LoggerProxy.logger.info(\n 'Meeting:request#dialOut --> Provisioning a dial out device',\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n provisionalType: PROVISIONAL_TYPE_DIAL_OUT,\n url: dialOutUrl,\n dialoutAddress: phoneNumber,\n clientUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#dialOut --> Error provisioning a dial out device, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Syns the missed delta event\n * @param {Object} options\n * @param {boolean} options.desync flag to get partial or whole locus object\n * @param {String} options.syncUrl sync url to get ht elatest locus delta\n * @returns {Promise}\n */\n syncMeeting(options: {desync: boolean; syncUrl: string}) {\n /* eslint-disable no-else-return */\n const {desync} = options;\n let {syncUrl} = options;\n\n /* istanbul ignore else */\n if (desync) {\n // check for existing URL parameters\n syncUrl = syncUrl\n .concat(syncUrl.split('?')[1] ? '&' : '?')\n .concat(`${LOCUS.SYNCDEBUG}=${desync}`);\n }\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: syncUrl,\n }) // TODO: Handle if delta sync failed . Get the full locus object\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#syncMeeting --> Error syncing meeting, error ${err}`\n );\n\n return err;\n });\n }\n\n /**\n * Request to get the complete locus object\n * @param {Object} options\n * @param {boolean} options.desync flag to get partial or whole locus object\n * @param {String} options.locusUrl sync url to get ht elatest locus delta\n * @returns {Promise}\n */\n getFullLocus(options: {desync: boolean; locusUrl: string}) {\n let {locusUrl} = options;\n const {desync} = options;\n\n if (locusUrl) {\n if (desync) {\n locusUrl += `?${LOCUS.SYNCDEBUG}=${desync}`;\n }\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: locusUrl,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#getFullLocus --> Error getting full locus, error ${err}`\n );\n\n return err;\n });\n }\n\n return Promise.reject();\n }\n\n /**\n * Make a network request to make a provisioned phone leave the meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.phoneUrl\n * @param {String} options.correlationId\n * @param {String} options.selfId\n * @returns {Promise}\n * @private\n */\n private disconnectPhoneAudio({\n locusUrl,\n phoneUrl,\n correlationId,\n selfId,\n }: {\n locusUrl: string;\n phoneUrl: string;\n correlationId: string;\n selfId: string;\n }) {\n LoggerProxy.logger.info(\n `Meeting:request#disconnectPhoneAudio --> request phone ${phoneUrl} to leave`,\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n url: phoneUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#disconnectPhoneAudio --> Error when requesting phone ${phoneUrl} to leave, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Make a network request to leave a meeting\n * @param {Object} options\n * @param {Url} options.locusUrl\n * @param {String} options.selfId\n * @param {Url} options.deviceUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @returns {Promise}\n */\n leaveMeeting({\n locusUrl,\n selfId,\n deviceUrl: url,\n resourceId,\n correlationId,\n }: {\n locusUrl: string;\n selfId: string;\n deviceUrl: string;\n resourceId: string;\n correlationId: string;\n }) {\n LoggerProxy.logger.info('Meeting:request#leaveMeeting --> Leaving a meeting', correlationId);\n\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url,\n },\n usingResource: resourceId || null,\n correlationId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * Make a network request to acknowledge a meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.correlationId\n * @returns {Promise}\n */\n acknowledgeMeeting(options: {locusUrl: string; deviceUrl: string; correlationId: string}) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${ALERT}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n correlationId: options.correlationId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n lockMeeting(options) {\n const uri = `${options.locusUrl}/${CONTROLS}`;\n const body = {\n lock: {\n locked: options.lock,\n },\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n });\n }\n\n /**\n * Make a network request to decline a meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.reason\n * @returns {Promise}\n */\n declineMeeting(options: {locusUrl: string; deviceUrl: string; reason: string}) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${DECLINE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n ...(options.reason && {reason: options.reason}),\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * change the content floor grant\n * @param {Object} options options for floor grant\n * @param {String} options.disposition floor action (granted/released)\n * @param {String} options.personUrl personUrl who is requesting floor\n * @param {String} options.deviceUrl Url of a device\n * @param {String} options.resourceId Populated if you are paired to a device\n * @param {String} options.uri floor grant uri\n * @returns {Promise}\n */\n changeMeetingFloor(\n options:\n | {\n disposition: string;\n personUrl: string;\n deviceUrl: string;\n resourceId: string;\n uri: string;\n annotation: any;\n }\n | any\n ) {\n let floorReq: any = {disposition: options.disposition};\n\n /* istanbul ignore else */\n if (options.disposition === FLOOR_ACTION.GRANTED) {\n floorReq = {\n beneficiary: {\n url: options.personUrl,\n devices: [\n {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n ],\n },\n disposition: options.disposition,\n requester: {\n url: options.personUrl,\n },\n };\n }\n\n const body: any = {\n floor: floorReq,\n resourceUrl: options.resourceUrl,\n };\n\n if (options?.resourceToken) {\n body.resourceToken = options?.resourceToken;\n }\n if (options?.annotation) {\n body.annotation = options?.annotation;\n }\n\n // @ts-ignore\n return this.request({\n uri: options.uri,\n method: HTTP_VERBS.PUT,\n body,\n });\n }\n\n /**\n * Sends a request to the DTMF endpoint to send tones\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.tones a string of one or more DTMF tones to send\n * @returns {Promise}\n */\n sendDTMF({locusUrl, deviceUrl, tones}: {locusUrl: string; deviceUrl: string; tones: string}) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: `${locusUrl}/${SEND_DTMF_ENDPOINT}`,\n body: {\n deviceUrl,\n dtmf: {\n correlationId: uuid.v4(),\n tones,\n },\n },\n });\n }\n\n /**\n * Sends a request to the controls endpoint to set the video layout\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.layoutType a layout type that should be available in meeting constants {@link #layout_types}\n * @param {Object} options.main preferred dimensions for the remote main video stream\n * @param {Number} options.main.width preferred width of main video stream\n * @param {Number} options.main.height preferred height of main video stream\n * @param {Object} options.content preferred dimensions for the remote content share stream\n * @param {Number} options.content.width preferred width of content share stream\n * @param {Number} options.content.height preferred height of content share stream\n * @returns {Promise}\n */\n changeVideoLayout({\n locusUrl,\n deviceUrl,\n layoutType,\n main,\n content,\n }: {\n locusUrl: string;\n deviceUrl: string;\n layoutType: string;\n main: {\n width: number;\n height: number;\n };\n content: {\n width: number;\n height: number;\n };\n }) {\n // send main/content renderInfo only if both width and height are specified\n if (main && (!main.width || !main.height)) {\n return Promise.reject(\n new Error(\n `Both width and height must be specified. One of them is missing for main: ${JSON.stringify(\n main\n )}`\n )\n );\n }\n\n if (content && (!content.width || !content.height)) {\n return Promise.reject(\n new Error(\n `Both width and height must be specified. One of them is missing for content: ${JSON.stringify(\n content\n )}`\n )\n );\n }\n\n const renderInfoMain = main ? {width: main.width, height: main.height} : undefined;\n const renderInfoContent = content ? {width: content.width, height: content.height} : undefined;\n\n const layoutParams =\n renderInfoMain || renderInfoContent\n ? {\n renderInfo: {\n main: renderInfoMain,\n content: renderInfoContent,\n },\n }\n : undefined;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${locusUrl}/${CONTROLS}`,\n body: {\n layout: {\n deviceUrl,\n type: layoutType,\n layoutParams,\n },\n },\n });\n }\n\n /**\n * Make a network request to end meeting for all\n * @param {Object} options\n * @param {Url} options.locusUrl\n * @returns {Promise}\n */\n endMeetingForAll({locusUrl}: {locusUrl: string}) {\n const uri = `${locusUrl}/${END}`;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n });\n }\n\n /**\n * Send a locus keepAlive (used in lobby)\n * @param {Object} options\n * @param {Url} options.keepAliveUrl\n * @returns {Promise}\n */\n keepAlive({keepAliveUrl}: {keepAliveUrl: string}) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: keepAliveUrl,\n });\n }\n\n /**\n * Make a network request to send a reaction.\n * @param {Object} options\n * @param {Url} options.reactionChannelUrl\n * @param {Reaction} options.reaction\n * @param {string} options.senderID\n * @returns {Promise}\n */\n sendReaction({reactionChannelUrl, reaction, participantId}: SendReactionOptions) {\n const uri = reactionChannelUrl;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n body: {\n sender: {participantId},\n reaction,\n },\n });\n }\n\n /**\n * Make a network request to enable or disable reactions.\n * @param {boolean} options.enable - determines if we need to enable or disable.\n * @param {locusUrl} options.locusUrl\n * @returns {Promise}\n */\n toggleReactions({enable, locusUrl, requestingParticipantId}: ToggleReactionsOptions) {\n const uri = `${locusUrl}/${CONTROLS}`;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body: {\n reactions: {\n enabled: enable,\n },\n requestingParticipantId,\n },\n });\n }\n\n getLocusStatusByUrl(locusUrl: string) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: locusUrl,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["MeetingRequest","attrs","options","webex","boundedStorage","get","REACHABILITY","namespace","localStorageJoinCookie","catch","joinCookieRaw","joinCookie","JSON","parse","LoggerProxy","logger","error","changeVideoLayoutDebounced","changeVideoLayout","leading","trailing","asResourceOccupant","inviteeAddress","meetingNumber","permissionToken","deviceUrl","locusUrl","resourceId","correlationId","ensureConversation","moderator","pin","moveToResource","roapMessage","preferTranscoding","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","info","url","getJoinCookie","body","device","deviceType","config","meetings","usingResource","moveMediaToResource","respOnlySdp","allowMultiDevice","supportsNativeLobby","clientMediaPreferences","push","BREAKOUTS","BREAKOUTS_SUPPORTED","ANNOTATION","ANNOTATION_ON_SHARE_SUPPORTED","length","clientRegion","countryCode","regionCode","undefined","PARTICIPANT","internal","services","waitForCatalog","LOCI","CALL","invitee","address","concat","ALTERNATE_REDIRECT_TRUE","callPreferences","requestedMedia","_SLIDES_","localMedias","request","method","HTTP_VERBS","POST","uri","captchaRefreshUrl","captchaId","err","dialInUrl","clientUrl","PROVISIONAL","provisionalType","PROVISIONAL_TYPE_DIAL_IN","dialOutUrl","phoneNumber","PROVISIONAL_TYPE_DIAL_OUT","dialoutAddress","desync","syncUrl","split","LOCUS","SYNCDEBUG","GET","reject","phoneUrl","selfId","LEAVE","PUT","ALERT","CONTROLS","lock","locked","PATCH","DECLINE","reason","floorReq","disposition","FLOOR_ACTION","GRANTED","beneficiary","personUrl","devices","requester","floor","resourceUrl","resourceToken","annotation","tones","SEND_DTMF_ENDPOINT","dtmf","uuid","v4","layoutType","main","content","width","height","Error","renderInfoMain","renderInfoContent","layoutParams","renderInfo","layout","type","END","keepAliveUrl","reactionChannelUrl","reaction","participantId","sender","enable","requestingParticipantId","reactions","enabled","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {debounce} from 'lodash';\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n// @ts-ignore\nimport {deviceType} from '@webex/common';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n ALERT,\n ALTERNATE_REDIRECT_TRUE,\n BREAKOUTS,\n CALL,\n CONTROLS,\n DECLINE,\n END,\n FLOOR_ACTION,\n HTTP_VERBS,\n LEAVE,\n LOCI,\n LOCUS,\n MEDIA,\n PARTICIPANT,\n PROVISIONAL_TYPE_DIAL_IN,\n PROVISIONAL_TYPE_DIAL_OUT,\n REACHABILITY,\n SEND_DTMF_ENDPOINT,\n _SLIDES_,\n ANNOTATION,\n} from '../constants';\nimport {SendReactionOptions, ToggleReactionsOptions} from './request.type';\n\n/**\n * @class MeetingRequest\n */\nexport default class MeetingRequest extends StatelessWebexPlugin {\n changeVideoLayoutDebounced: any;\n\n /**\n * Constructor\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super(attrs, options);\n this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {\n leading: true,\n trailing: true,\n });\n }\n\n /**\n * Returns joinCookie from boundedStorage if present.\n * @returns {Object} joinCookie\n */\n private getJoinCookie = async () => {\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n const joinCookie = JSON.parse(joinCookieRaw);\n if (joinCookie) {\n return joinCookie;\n }\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return null;\n };\n\n /**\n * Make a network request to join a meeting\n * @param {Object} options\n * @param {String} options.sipUri\n * @param {String} options.deviceUrl\n * @param {String} options.locusUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @param {boolean} options.ensureConversation\n * @param {boolean} options.moderator\n * @param {boolean} options.pin\n * @param {boolean} options.moveToResource\n * @param {Object} options.roapMessage\n * @param {boolean} options.breakoutsSupported\n * @param {String} options.locale,\n * @param {Array} options.deviceCapabilities\n * @param {boolean} options.liveAnnotationSupported\n * @returns {Promise}\n */\n async joinMeeting(options: {\n sipUri: string;\n deviceUrl: string;\n locusUrl: string;\n resourceId: string;\n correlationId: string;\n ensureConversation: boolean;\n moderator: boolean;\n pin: boolean;\n moveToResource: boolean;\n roapMessage: any;\n asResourceOccupant: any;\n inviteeAddress: any;\n meetingNumber: any;\n permissionToken: any;\n preferTranscoding: any;\n breakoutsSupported: boolean;\n locale?: string;\n deviceCapabilities?: Array<string>;\n liveAnnotationSupported: boolean;\n }) {\n const {\n asResourceOccupant,\n inviteeAddress,\n meetingNumber,\n permissionToken,\n deviceUrl,\n locusUrl,\n resourceId,\n correlationId,\n ensureConversation,\n moderator,\n pin,\n moveToResource,\n roapMessage,\n preferTranscoding,\n breakoutsSupported,\n locale,\n deviceCapabilities = [],\n liveAnnotationSupported,\n } = options;\n\n LoggerProxy.logger.info('Meeting:request#joinMeeting --> Joining a meeting', correlationId);\n\n let url = '';\n\n const joinCookie = await this.getJoinCookie();\n\n const body: any = {\n asResourceOccupant,\n device: {\n url: deviceUrl,\n // @ts-ignore - config comes from registerPlugin\n deviceType: this.config.meetings.deviceType,\n },\n usingResource: resourceId || null,\n moveMediaToResource: (resourceId && moveToResource) || false,\n correlationId,\n respOnlySdp: true,\n allowMultiDevice: true,\n ensureConversation: ensureConversation || false,\n supportsNativeLobby: 1,\n clientMediaPreferences: {\n preferTranscoding: preferTranscoding ?? true,\n joinCookie,\n },\n };\n\n if (breakoutsSupported) {\n deviceCapabilities.push(BREAKOUTS.BREAKOUTS_SUPPORTED);\n }\n if (liveAnnotationSupported) {\n deviceCapabilities.push(ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED);\n }\n\n if (locale) {\n body.locale = locale;\n }\n\n // add deviceCapabilities prop\n if (deviceCapabilities.length) {\n body.deviceCapabilities = deviceCapabilities;\n }\n // @ts-ignore\n if (this.webex.meetings.clientRegion) {\n // @ts-ignore\n body.device.countryCode = this.webex.meetings.clientRegion.countryCode;\n // @ts-ignore\n body.device.regionCode = this.webex.meetings.clientRegion.regionCode;\n }\n\n if (moderator !== undefined) {\n body.moderator = moderator;\n }\n\n if (permissionToken) {\n body.permissionToken = permissionToken;\n }\n\n if (pin !== undefined) {\n body.pin = pin;\n }\n\n if (locusUrl) {\n url = `${locusUrl}/${PARTICIPANT}`;\n } else if (inviteeAddress || meetingNumber) {\n try {\n // @ts-ignore\n await this.webex.internal.services.waitForCatalog('postauth');\n // @ts-ignore\n url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;\n body.invitee = {\n address: inviteeAddress || `wbxmn:${meetingNumber}`,\n };\n } catch (e) {\n LoggerProxy.logger.error(\n `Meeting:request#joinMeeting Error Joining ${inviteeAddress || meetingNumber} --> ${e}`\n );\n throw e;\n }\n }\n\n // TODO: -- this will be resolved in SDK request\n url = url.concat(`?${ALTERNATE_REDIRECT_TRUE}`);\n\n if (resourceId === inviteeAddress) {\n body.callPreferences = {\n requestedMedia: [_SLIDES_],\n };\n }\n\n if (roapMessage) {\n body.localMedias = roapMessage.localMedias;\n }\n\n /// @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: url,\n body,\n });\n }\n\n /**\n * Send a request to refresh the captcha\n * @param {Object} options\n * @param {String} options.captchaRefreshUrl\n * @param {String} options.captchaId\n * @returns {Promise}\n * @private\n */\n private refreshCaptcha({\n captchaRefreshUrl,\n captchaId,\n }: {\n captchaRefreshUrl: string;\n captchaId: string;\n }) {\n const body = {\n captchaId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: captchaRefreshUrl,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(`Meeting:request#refreshCaptcha --> Error: ${err}`);\n\n throw err;\n });\n }\n\n /**\n * Make a network request to add a dial in device\n * @param {Object} options\n * @param {String} options.correlationId\n * @param {String} options.locusUrl url for the meeting\n * @param {String} options.dialInUrl identifier for the to-be provisioned device\n * @param {String} options.clientUrl identifier for the web device\n * @returns {Promise}\n * @private\n */\n private dialIn({\n locusUrl,\n dialInUrl,\n clientUrl,\n correlationId,\n }: {\n correlationId: string;\n locusUrl: string;\n dialInUrl: string;\n clientUrl: string;\n }) {\n LoggerProxy.logger.info(\n 'Meeting:request#dialIn --> Provisioning a dial in device',\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n provisionalType: PROVISIONAL_TYPE_DIAL_IN,\n url: dialInUrl,\n clientUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#dialIn --> Error provisioning a dial in device, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Make a network request to add a dial out device\n * @param {Object} options\n * @param {String} options.correlationId\n * @param {String} options.locusUrl url for the meeting\n * @param {String} options.dialOutUrl identifier for the to-be provisioned device\n * @param {String} options.phoneNumber phone number to dial out to\n * @param {String} options.clientUrl identifier for the web device\n * @returns {Promise}\n * @private\n */\n private dialOut({\n locusUrl,\n dialOutUrl,\n phoneNumber,\n clientUrl,\n correlationId,\n }: {\n correlationId: string;\n locusUrl: string;\n dialOutUrl: string;\n phoneNumber: string;\n clientUrl: string;\n }) {\n LoggerProxy.logger.info(\n 'Meeting:request#dialOut --> Provisioning a dial out device',\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n provisionalType: PROVISIONAL_TYPE_DIAL_OUT,\n url: dialOutUrl,\n dialoutAddress: phoneNumber,\n clientUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#dialOut --> Error provisioning a dial out device, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Syns the missed delta event\n * @param {Object} options\n * @param {boolean} options.desync flag to get partial or whole locus object\n * @param {String} options.syncUrl sync url to get ht elatest locus delta\n * @returns {Promise}\n */\n syncMeeting(options: {desync: boolean; syncUrl: string}) {\n /* eslint-disable no-else-return */\n const {desync} = options;\n let {syncUrl} = options;\n\n /* istanbul ignore else */\n if (desync) {\n // check for existing URL parameters\n syncUrl = syncUrl\n .concat(syncUrl.split('?')[1] ? '&' : '?')\n .concat(`${LOCUS.SYNCDEBUG}=${desync}`);\n }\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: syncUrl,\n }) // TODO: Handle if delta sync failed . Get the full locus object\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#syncMeeting --> Error syncing meeting, error ${err}`\n );\n\n return err;\n });\n }\n\n /**\n * Request to get the complete locus object\n * @param {Object} options\n * @param {boolean} options.desync flag to get partial or whole locus object\n * @param {String} options.locusUrl sync url to get ht elatest locus delta\n * @returns {Promise}\n */\n getFullLocus(options: {desync: boolean; locusUrl: string}) {\n let {locusUrl} = options;\n const {desync} = options;\n\n if (locusUrl) {\n if (desync) {\n locusUrl += `?${LOCUS.SYNCDEBUG}=${desync}`;\n }\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: locusUrl,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#getFullLocus --> Error getting full locus, error ${err}`\n );\n\n return err;\n });\n }\n\n return Promise.reject();\n }\n\n /**\n * Make a network request to make a provisioned phone leave the meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.phoneUrl\n * @param {String} options.correlationId\n * @param {String} options.selfId\n * @returns {Promise}\n * @private\n */\n private disconnectPhoneAudio({\n locusUrl,\n phoneUrl,\n correlationId,\n selfId,\n }: {\n locusUrl: string;\n phoneUrl: string;\n correlationId: string;\n selfId: string;\n }) {\n LoggerProxy.logger.info(\n `Meeting:request#disconnectPhoneAudio --> request phone ${phoneUrl} to leave`,\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n url: phoneUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#disconnectPhoneAudio --> Error when requesting phone ${phoneUrl} to leave, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Make a network request to leave a meeting\n * @param {Object} options\n * @param {Url} options.locusUrl\n * @param {String} options.selfId\n * @param {Url} options.deviceUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @returns {Promise}\n */\n leaveMeeting({\n locusUrl,\n selfId,\n deviceUrl: url,\n resourceId,\n correlationId,\n }: {\n locusUrl: string;\n selfId: string;\n deviceUrl: string;\n resourceId: string;\n correlationId: string;\n }) {\n LoggerProxy.logger.info('Meeting:request#leaveMeeting --> Leaving a meeting', correlationId);\n\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url,\n },\n usingResource: resourceId || null,\n correlationId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * Make a network request to acknowledge a meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.correlationId\n * @returns {Promise}\n */\n acknowledgeMeeting(options: {locusUrl: string; deviceUrl: string; correlationId: string}) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${ALERT}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n correlationId: options.correlationId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n lockMeeting(options) {\n const uri = `${options.locusUrl}/${CONTROLS}`;\n const body = {\n lock: {\n locked: options.lock,\n },\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n });\n }\n\n /**\n * Make a network request to decline a meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.reason\n * @returns {Promise}\n */\n declineMeeting(options: {locusUrl: string; deviceUrl: string; reason: string}) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${DECLINE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n ...(options.reason && {reason: options.reason}),\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * change the content floor grant\n * @param {Object} options options for floor grant\n * @param {String} options.disposition floor action (granted/released)\n * @param {String} options.personUrl personUrl who is requesting floor\n * @param {String} options.deviceUrl Url of a device\n * @param {String} options.resourceId Populated if you are paired to a device\n * @param {String} options.uri floor grant uri\n * @returns {Promise}\n */\n changeMeetingFloor(\n options:\n | {\n disposition: string;\n personUrl: string;\n deviceUrl: string;\n resourceId: string;\n uri: string;\n annotation: any;\n }\n | any\n ) {\n let floorReq: any = {disposition: options.disposition};\n\n /* istanbul ignore else */\n if (options.disposition === FLOOR_ACTION.GRANTED) {\n floorReq = {\n beneficiary: {\n url: options.personUrl,\n devices: [\n {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n ],\n },\n disposition: options.disposition,\n requester: {\n url: options.personUrl,\n },\n };\n }\n\n const body: any = {\n floor: floorReq,\n resourceUrl: options.resourceUrl,\n };\n\n if (options?.resourceToken) {\n body.resourceToken = options?.resourceToken;\n }\n if (options?.annotation) {\n body.annotation = options?.annotation;\n }\n\n // @ts-ignore\n return this.request({\n uri: options.uri,\n method: HTTP_VERBS.PUT,\n body,\n });\n }\n\n /**\n * Sends a request to the DTMF endpoint to send tones\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.tones a string of one or more DTMF tones to send\n * @returns {Promise}\n */\n sendDTMF({locusUrl, deviceUrl, tones}: {locusUrl: string; deviceUrl: string; tones: string}) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: `${locusUrl}/${SEND_DTMF_ENDPOINT}`,\n body: {\n deviceUrl,\n dtmf: {\n correlationId: uuid.v4(),\n tones,\n },\n },\n });\n }\n\n /**\n * Sends a request to the controls endpoint to set the video layout\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.layoutType a layout type that should be available in meeting constants {@link #layout_types}\n * @param {Object} options.main preferred dimensions for the remote main video stream\n * @param {Number} options.main.width preferred width of main video stream\n * @param {Number} options.main.height preferred height of main video stream\n * @param {Object} options.content preferred dimensions for the remote content share stream\n * @param {Number} options.content.width preferred width of content share stream\n * @param {Number} options.content.height preferred height of content share stream\n * @returns {Promise}\n */\n changeVideoLayout({\n locusUrl,\n deviceUrl,\n layoutType,\n main,\n content,\n }: {\n locusUrl: string;\n deviceUrl: string;\n layoutType: string;\n main: {\n width: number;\n height: number;\n };\n content: {\n width: number;\n height: number;\n };\n }) {\n // send main/content renderInfo only if both width and height are specified\n if (main && (!main.width || !main.height)) {\n return Promise.reject(\n new Error(\n `Both width and height must be specified. One of them is missing for main: ${JSON.stringify(\n main\n )}`\n )\n );\n }\n\n if (content && (!content.width || !content.height)) {\n return Promise.reject(\n new Error(\n `Both width and height must be specified. One of them is missing for content: ${JSON.stringify(\n content\n )}`\n )\n );\n }\n\n const renderInfoMain = main ? {width: main.width, height: main.height} : undefined;\n const renderInfoContent = content ? {width: content.width, height: content.height} : undefined;\n\n const layoutParams =\n renderInfoMain || renderInfoContent\n ? {\n renderInfo: {\n main: renderInfoMain,\n content: renderInfoContent,\n },\n }\n : undefined;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${locusUrl}/${CONTROLS}`,\n body: {\n layout: {\n deviceUrl,\n type: layoutType,\n layoutParams,\n },\n },\n });\n }\n\n /**\n * Make a network request to end meeting for all\n * @param {Object} options\n * @param {Url} options.locusUrl\n * @returns {Promise}\n */\n endMeetingForAll({locusUrl}: {locusUrl: string}) {\n const uri = `${locusUrl}/${END}`;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n });\n }\n\n /**\n * Send a locus keepAlive (used in lobby)\n * @param {Object} options\n * @param {Url} options.keepAliveUrl\n * @returns {Promise}\n */\n keepAlive({keepAliveUrl}: {keepAliveUrl: string}) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: keepAliveUrl,\n });\n }\n\n /**\n * Make a network request to send a reaction.\n * @param {Object} options\n * @param {Url} options.reactionChannelUrl\n * @param {Reaction} options.reaction\n * @param {string} options.senderID\n * @returns {Promise}\n */\n sendReaction({reactionChannelUrl, reaction, participantId}: SendReactionOptions) {\n const uri = reactionChannelUrl;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n body: {\n sender: {participantId},\n reaction,\n },\n });\n }\n\n /**\n * Make a network request to enable or disable reactions.\n * @param {boolean} options.enable - determines if we need to enable or disable.\n * @param {locusUrl} options.locusUrl\n * @returns {Promise}\n */\n toggleReactions({enable, locusUrl, requestingParticipantId}: ToggleReactionsOptions) {\n const uri = `${locusUrl}/${CONTROLS}`;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body: {\n reactions: {\n enabled: enable,\n },\n requestingParticipantId,\n },\n });\n }\n\n getLocusStatusByUrl(locusUrl: string) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: locusUrl,\n });\n }\n}\n"],"mappings":"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"}
@@ -111,7 +111,9 @@ MeetingUtil.joinMeeting = function (meeting, options) {
111
111
  moveToResource: options.moveToResource,
112
112
  preferTranscoding: !meeting.isMultistream,
113
113
  asResourceOccupant: options.asResourceOccupant,
114
- breakoutsSupported: options.breakoutsSupported
114
+ breakoutsSupported: options.breakoutsSupported,
115
+ locale: options.locale,
116
+ deviceCapabilities: options.deviceCapabilities
115
117
  }).then(function (res) {
116
118
  _metrics.default.postEvent({
117
119
  event: _config.eventType.LOCUS_JOIN_RESPONSE,
@@ -1 +1 @@
1
- {"version":3,"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","meeting","audioMuted","videoMuted","reject","ParameterError","locusMediaRequest","Metrics","postEvent","event","eventType","MEDIA_REQUEST","send","type","selfUrl","muteOptions","then","MEDIA_RESPONSE","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","options","LOCUS_JOIN_REQUEST","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","deviceUrl","correlationId","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","isMultistream","asResourceOccupant","breakoutsSupported","res","LOCUS_JOIN_RESPONSE","data","trigger","LOCI_UPDATE","trackingId","headers","trackingid","cleanUp","breakouts","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeLocalStream","closeLocalShare","closeRemoteTracks","closePeerConnections","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteTracks","unsetPeerConnections","reconnectionManager","stopKeepAlive","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","locusInfo","onFullLocus","catch","LoggerProxy","logger","error","leaveMeeting","isUserInLeftState","UserNotJoinedError","defaultOptions","leaveOptions","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","validateOptions","sendVideo","sendAudio","sendShare","localStream","localShare","getTrack","videoTrack","audioTrack","stream","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","userDisplayHints","canInviteNewParticipants","displayHints","DISPLAY_HINTS","ADD_GUEST","canAdmitParticipant","ROSTER_WAITING_TO_JOIN","canUserLock","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","isSuppressBreakoutSupport","UCF_SUPPRESS_BREAKOUTS_SUPPORT","canAdmitLobbyToBreakout","DISABLE_LOBBY_TO_BREAKOUT","isBreakoutPreassignmentsEnabled","DISABLE_BREAKOUT_PREASSIGNMENTS","canUserAskForHelp","DISABLE_ASK_FOR_HELP","lockMeeting","actions","request","canLock","lock","PermissionError","unlockMeeting","canUnlock","handleAudioLogging","LOG_HEADER","settings","underlyingTrack","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","isSaveTranscriptsEnabled","SAVE_TRANSCRIPTS_ENABLED","canStartTranscribing","TRANSCRIPTION_CONTROL_START","canStopTranscribing","TRANSCRIPTION_CONTROL_STOP","isClosedCaptionActive","CAPTION_STATUS_ACTIVE","isWebexAssistantActive","WEBEX_ASSISTANT_STATUS_ACTIVE","canViewCaptionPanel","ENABLE_CAPTION_PANEL","isRealTimeTranslationEnabled","DISPLAY_REAL_TIME_TRANSLATION","canSelectSpokenLanguages","DISPLAY_NON_ENGLISH_ASR","waitingForOthersToJoin","WAITING_FOR_OTHERS","canSendReactions","originalValue","REACTIONS_ACTIVE","REACTIONS_INACTIVE","canUserRenameSelfAndObserved","CAN_RENAME_SELF_AND_OBSERVED","canUserRenameOthers","CAN_RENAME_OTHERS"],"sources":["util.ts"],"sourcesContent":["import {isEmpty} from 'lodash';\nimport {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\n\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport Metrics from '../metrics';\nimport {eventType, trigger} from '../metrics/config';\nimport Media from '../media';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\n} from '../constants';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\n\nconst MeetingUtil: any = {};\n\nMeetingUtil.parseLocusJoin = (response) => {\n const parsed: any = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n};\n\nMeetingUtil.remoteUpdateAudioVideo = (meeting, audioMuted?: boolean, videoMuted?: boolean) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n if (!meeting.locusMediaRequest) {\n return Promise.reject(\n new ParameterError(\n 'You need a meeting with a media connection, call Meeting.addMedia() first.'\n )\n );\n }\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});\n\n return meeting.locusMediaRequest\n .send({\n type: 'LocalMute',\n selfUrl: meeting.selfUrl,\n mediaId: meeting.mediaId,\n muteOptions: {\n audioMuted,\n videoMuted,\n },\n })\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 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 inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n permissionToken: meeting.permissionToken,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: !meeting.isMultistream,\n asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\n })\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 meeting.breakouts.cleanUp();\n\n // make sure we send last metrics before we close the peerconnection\n const stopStatsAnalyzer = meeting.statsAnalyzer\n ? meeting.statsAnalyzer.stopAnalyzer()\n : Promise.resolve();\n\n return stopStatsAnalyzer\n .then(() => meeting.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.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => meeting.updateLLMConnection());\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 ${meeting.id}, 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: any = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const 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) {\n // && !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 ${meeting.id}, 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) => locusInfo.parsedLocus?.self?.state === _LEFT_;\n\nMeetingUtil.isUserInIdleState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_;\n\nMeetingUtil.isUserInJoinedState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_;\n\nMeetingUtil.isMediaEstablished = (currentMediaStatus) =>\n currentMediaStatus &&\n (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);\n\nMeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {\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.validateOptions = (options) => {\n const {sendVideo, sendAudio, sendShare, localStream, localShare} = 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.getUserDisplayHintsFromLocusInfo = (locusInfo) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [];\n\nMeetingUtil.canInviteNewParticipants = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ADD_GUEST);\n\nMeetingUtil.canAdmitParticipant = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);\n\nMeetingUtil.canUserLock = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);\n\nMeetingUtil.canUserUnlock = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);\n\nMeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);\n\nMeetingUtil.canUserLowerAllHands = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);\n\nMeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);\n\nMeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);\n\nMeetingUtil.canManageBreakout = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT);\n\nMeetingUtil.isSuppressBreakoutSupport = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT);\n\nMeetingUtil.canAdmitLobbyToBreakout = (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT);\n\nMeetingUtil.isBreakoutPreassignmentsEnabled = (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS);\n\nMeetingUtil.canUserAskForHelp = (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_ASK_FOR_HELP);\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.handleAudioLogging = (audioTrack: LocalMicrophoneTrack | null) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n};\n\nMeetingUtil.handleVideoLogging = (videoTrack: LocalCameraTrack | null) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n};\n\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\nMeetingUtil.endMeetingForAll = (meeting) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const endOptions = {\n locusUrl: meeting.locusUrl,\n };\n\n return meeting.meetingRequest\n .endMeetingForAll(endOptions)\n .then((response) => {\n if (response && response.body && response.body.locus) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n\n return Promise.resolve();\n })\n .then(() => MeetingUtil.cleanUp(meeting))\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\n\nMeetingUtil.canEnableClosedCaption = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_START);\n\nMeetingUtil.isSaveTranscriptsEnabled = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED);\n\nMeetingUtil.canStartTranscribing = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);\n\nMeetingUtil.canStopTranscribing = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);\n\nMeetingUtil.isClosedCaptionActive = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);\n\nMeetingUtil.isWebexAssistantActive = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);\n\nMeetingUtil.canViewCaptionPanel = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);\n\nMeetingUtil.isRealTimeTranslationEnabled = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);\n\nMeetingUtil.canSelectSpokenLanguages = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);\n\nMeetingUtil.waitingForOthersToJoin = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);\n\nMeetingUtil.canSendReactions = (originalValue, displayHints) => {\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {\n return true;\n }\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {\n return false;\n }\n\n return originalValue;\n};\nMeetingUtil.canUserRenameSelfAndObserved = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED);\n\nMeetingUtil.canUserRenameOthers = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS);\n\nexport default MeetingUtil;\n"],"mappings":"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"}
1
+ {"version":3,"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","meeting","audioMuted","videoMuted","reject","ParameterError","locusMediaRequest","Metrics","postEvent","event","eventType","MEDIA_REQUEST","send","type","selfUrl","muteOptions","then","MEDIA_RESPONSE","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","options","LOCUS_JOIN_REQUEST","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","deviceUrl","correlationId","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","isMultistream","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","res","LOCUS_JOIN_RESPONSE","data","trigger","LOCI_UPDATE","trackingId","headers","trackingid","cleanUp","breakouts","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeLocalStream","closeLocalShare","closeRemoteTracks","closePeerConnections","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteTracks","unsetPeerConnections","reconnectionManager","stopKeepAlive","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","locusInfo","onFullLocus","catch","LoggerProxy","logger","error","leaveMeeting","isUserInLeftState","UserNotJoinedError","defaultOptions","leaveOptions","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","validateOptions","sendVideo","sendAudio","sendShare","localStream","localShare","getTrack","videoTrack","audioTrack","stream","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","userDisplayHints","canInviteNewParticipants","displayHints","DISPLAY_HINTS","ADD_GUEST","canAdmitParticipant","ROSTER_WAITING_TO_JOIN","canUserLock","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","isSuppressBreakoutSupport","UCF_SUPPRESS_BREAKOUTS_SUPPORT","canAdmitLobbyToBreakout","DISABLE_LOBBY_TO_BREAKOUT","isBreakoutPreassignmentsEnabled","DISABLE_BREAKOUT_PREASSIGNMENTS","canUserAskForHelp","DISABLE_ASK_FOR_HELP","lockMeeting","actions","request","canLock","lock","PermissionError","unlockMeeting","canUnlock","handleAudioLogging","LOG_HEADER","settings","underlyingTrack","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","isSaveTranscriptsEnabled","SAVE_TRANSCRIPTS_ENABLED","canStartTranscribing","TRANSCRIPTION_CONTROL_START","canStopTranscribing","TRANSCRIPTION_CONTROL_STOP","isClosedCaptionActive","CAPTION_STATUS_ACTIVE","isWebexAssistantActive","WEBEX_ASSISTANT_STATUS_ACTIVE","canViewCaptionPanel","ENABLE_CAPTION_PANEL","isRealTimeTranslationEnabled","DISPLAY_REAL_TIME_TRANSLATION","canSelectSpokenLanguages","DISPLAY_NON_ENGLISH_ASR","waitingForOthersToJoin","WAITING_FOR_OTHERS","canSendReactions","originalValue","REACTIONS_ACTIVE","REACTIONS_INACTIVE","canUserRenameSelfAndObserved","CAN_RENAME_SELF_AND_OBSERVED","canUserRenameOthers","CAN_RENAME_OTHERS"],"sources":["util.ts"],"sourcesContent":["import {isEmpty} from 'lodash';\nimport {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\n\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport Metrics from '../metrics';\nimport {eventType, trigger} from '../metrics/config';\nimport Media from '../media';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\n} from '../constants';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\n\nconst MeetingUtil: any = {};\n\nMeetingUtil.parseLocusJoin = (response) => {\n const parsed: any = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n};\n\nMeetingUtil.remoteUpdateAudioVideo = (meeting, audioMuted?: boolean, videoMuted?: boolean) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n if (!meeting.locusMediaRequest) {\n return Promise.reject(\n new ParameterError(\n 'You need a meeting with a media connection, call Meeting.addMedia() first.'\n )\n );\n }\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});\n\n return meeting.locusMediaRequest\n .send({\n type: 'LocalMute',\n selfUrl: meeting.selfUrl,\n mediaId: meeting.mediaId,\n muteOptions: {\n audioMuted,\n videoMuted,\n },\n })\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 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 inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n permissionToken: meeting.permissionToken,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: !meeting.isMultistream,\n asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\n locale: options.locale,\n deviceCapabilities: options.deviceCapabilities,\n })\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 meeting.breakouts.cleanUp();\n\n // make sure we send last metrics before we close the peerconnection\n const stopStatsAnalyzer = meeting.statsAnalyzer\n ? meeting.statsAnalyzer.stopAnalyzer()\n : Promise.resolve();\n\n return stopStatsAnalyzer\n .then(() => meeting.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.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => meeting.updateLLMConnection());\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 ${meeting.id}, 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: any = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const 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) {\n // && !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 ${meeting.id}, 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) => locusInfo.parsedLocus?.self?.state === _LEFT_;\n\nMeetingUtil.isUserInIdleState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_;\n\nMeetingUtil.isUserInJoinedState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_;\n\nMeetingUtil.isMediaEstablished = (currentMediaStatus) =>\n currentMediaStatus &&\n (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);\n\nMeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {\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.validateOptions = (options) => {\n const {sendVideo, sendAudio, sendShare, localStream, localShare} = 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.getUserDisplayHintsFromLocusInfo = (locusInfo) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [];\n\nMeetingUtil.canInviteNewParticipants = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ADD_GUEST);\n\nMeetingUtil.canAdmitParticipant = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);\n\nMeetingUtil.canUserLock = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);\n\nMeetingUtil.canUserUnlock = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);\n\nMeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);\n\nMeetingUtil.canUserLowerAllHands = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);\n\nMeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);\n\nMeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);\n\nMeetingUtil.canManageBreakout = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT);\n\nMeetingUtil.isSuppressBreakoutSupport = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT);\n\nMeetingUtil.canAdmitLobbyToBreakout = (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT);\n\nMeetingUtil.isBreakoutPreassignmentsEnabled = (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS);\n\nMeetingUtil.canUserAskForHelp = (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_ASK_FOR_HELP);\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.handleAudioLogging = (audioTrack: LocalMicrophoneTrack | null) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n};\n\nMeetingUtil.handleVideoLogging = (videoTrack: LocalCameraTrack | null) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n};\n\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\nMeetingUtil.endMeetingForAll = (meeting) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const endOptions = {\n locusUrl: meeting.locusUrl,\n };\n\n return meeting.meetingRequest\n .endMeetingForAll(endOptions)\n .then((response) => {\n if (response && response.body && response.body.locus) {\n meeting.locusInfo.onFullLocus(response.body.locus);\n }\n\n return Promise.resolve();\n })\n .then(() => MeetingUtil.cleanUp(meeting))\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n};\n\nMeetingUtil.canEnableClosedCaption = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_START);\n\nMeetingUtil.isSaveTranscriptsEnabled = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED);\n\nMeetingUtil.canStartTranscribing = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);\n\nMeetingUtil.canStopTranscribing = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);\n\nMeetingUtil.isClosedCaptionActive = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);\n\nMeetingUtil.isWebexAssistantActive = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);\n\nMeetingUtil.canViewCaptionPanel = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);\n\nMeetingUtil.isRealTimeTranslationEnabled = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);\n\nMeetingUtil.canSelectSpokenLanguages = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);\n\nMeetingUtil.waitingForOthersToJoin = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);\n\nMeetingUtil.canSendReactions = (originalValue, displayHints) => {\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {\n return true;\n }\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {\n return false;\n }\n\n return originalValue;\n};\nMeetingUtil.canUserRenameSelfAndObserved = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED);\n\nMeetingUtil.canUserRenameOthers = (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS);\n\nexport default MeetingUtil;\n"],"mappings":"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"}
@@ -30,6 +30,8 @@ export default class MeetingRequest extends StatelessWebexPlugin {
30
30
  * @param {boolean} options.moveToResource
31
31
  * @param {Object} options.roapMessage
32
32
  * @param {boolean} options.breakoutsSupported
33
+ * @param {String} options.locale,
34
+ * @param {Array} options.deviceCapabilities
33
35
  * @param {boolean} options.liveAnnotationSupported
34
36
  * @returns {Promise}
35
37
  */
@@ -50,6 +52,8 @@ export default class MeetingRequest extends StatelessWebexPlugin {
50
52
  permissionToken: any;
51
53
  preferTranscoding: any;
52
54
  breakoutsSupported: boolean;
55
+ locale?: string;
56
+ deviceCapabilities?: Array<string>;
53
57
  liveAnnotationSupported: boolean;
54
58
  }): Promise<any>;
55
59
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "3.0.0-beta.112",
3
+ "version": "3.0.0-beta.113",
4
4
  "description": "",
5
5
  "license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
6
6
  "contributors": [
@@ -32,12 +32,12 @@
32
32
  "build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
33
33
  },
34
34
  "devDependencies": {
35
- "@webex/plugin-meetings": "3.0.0-beta.112",
36
- "@webex/test-helper-chai": "3.0.0-beta.112",
37
- "@webex/test-helper-mocha": "3.0.0-beta.112",
38
- "@webex/test-helper-mock-webex": "3.0.0-beta.112",
39
- "@webex/test-helper-retry": "3.0.0-beta.112",
40
- "@webex/test-helper-test-users": "3.0.0-beta.112",
35
+ "@webex/plugin-meetings": "3.0.0-beta.113",
36
+ "@webex/test-helper-chai": "3.0.0-beta.113",
37
+ "@webex/test-helper-mocha": "3.0.0-beta.113",
38
+ "@webex/test-helper-mock-webex": "3.0.0-beta.113",
39
+ "@webex/test-helper-retry": "3.0.0-beta.113",
40
+ "@webex/test-helper-test-users": "3.0.0-beta.113",
41
41
  "chai": "^4.3.4",
42
42
  "chai-as-promised": "^7.1.1",
43
43
  "jsdom-global": "3.0.2",
@@ -46,19 +46,19 @@
46
46
  "typescript": "^4.7.4"
47
47
  },
48
48
  "dependencies": {
49
- "@webex/common": "3.0.0-beta.112",
49
+ "@webex/common": "3.0.0-beta.113",
50
50
  "@webex/internal-media-core": "1.38.0",
51
- "@webex/internal-plugin-conversation": "3.0.0-beta.112",
52
- "@webex/internal-plugin-device": "3.0.0-beta.112",
53
- "@webex/internal-plugin-llm": "3.0.0-beta.112",
54
- "@webex/internal-plugin-mercury": "3.0.0-beta.112",
55
- "@webex/internal-plugin-metrics": "3.0.0-beta.112",
56
- "@webex/internal-plugin-support": "3.0.0-beta.112",
57
- "@webex/internal-plugin-user": "3.0.0-beta.112",
58
- "@webex/media-helpers": "3.0.0-beta.112",
59
- "@webex/plugin-people": "3.0.0-beta.112",
60
- "@webex/plugin-rooms": "3.0.0-beta.112",
61
- "@webex/webex-core": "3.0.0-beta.112",
51
+ "@webex/internal-plugin-conversation": "3.0.0-beta.113",
52
+ "@webex/internal-plugin-device": "3.0.0-beta.113",
53
+ "@webex/internal-plugin-llm": "3.0.0-beta.113",
54
+ "@webex/internal-plugin-mercury": "3.0.0-beta.113",
55
+ "@webex/internal-plugin-metrics": "3.0.0-beta.113",
56
+ "@webex/internal-plugin-support": "3.0.0-beta.113",
57
+ "@webex/internal-plugin-user": "3.0.0-beta.113",
58
+ "@webex/media-helpers": "3.0.0-beta.113",
59
+ "@webex/plugin-people": "3.0.0-beta.113",
60
+ "@webex/plugin-rooms": "3.0.0-beta.113",
61
+ "@webex/webex-core": "3.0.0-beta.113",
62
62
  "ampersand-collection": "^2.0.2",
63
63
  "bowser": "^2.11.0",
64
64
  "btoa": "^1.2.1",
@@ -89,6 +89,8 @@ export default class MeetingRequest extends StatelessWebexPlugin {
89
89
  * @param {boolean} options.moveToResource
90
90
  * @param {Object} options.roapMessage
91
91
  * @param {boolean} options.breakoutsSupported
92
+ * @param {String} options.locale,
93
+ * @param {Array} options.deviceCapabilities
92
94
  * @param {boolean} options.liveAnnotationSupported
93
95
  * @returns {Promise}
94
96
  */
@@ -109,6 +111,8 @@ export default class MeetingRequest extends StatelessWebexPlugin {
109
111
  permissionToken: any;
110
112
  preferTranscoding: any;
111
113
  breakoutsSupported: boolean;
114
+ locale?: string;
115
+ deviceCapabilities?: Array<string>;
112
116
  liveAnnotationSupported: boolean;
113
117
  }) {
114
118
  const {
@@ -127,6 +131,8 @@ export default class MeetingRequest extends StatelessWebexPlugin {
127
131
  roapMessage,
128
132
  preferTranscoding,
129
133
  breakoutsSupported,
134
+ locale,
135
+ deviceCapabilities = [],
130
136
  liveAnnotationSupported,
131
137
  } = options;
132
138
 
@@ -156,17 +162,21 @@ export default class MeetingRequest extends StatelessWebexPlugin {
156
162
  },
157
163
  };
158
164
 
159
- let deviceCapabilities = [];
160
165
  if (breakoutsSupported) {
161
- deviceCapabilities = [...deviceCapabilities, BREAKOUTS.BREAKOUTS_SUPPORTED];
166
+ deviceCapabilities.push(BREAKOUTS.BREAKOUTS_SUPPORTED);
162
167
  }
163
168
  if (liveAnnotationSupported) {
164
- deviceCapabilities = [...deviceCapabilities, ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED];
169
+ deviceCapabilities.push(ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED);
165
170
  }
166
- if (deviceCapabilities.length > 0) {
167
- body.deviceCapabilities = deviceCapabilities;
171
+
172
+ if (locale) {
173
+ body.locale = locale;
168
174
  }
169
175
 
176
+ // add deviceCapabilities prop
177
+ if (deviceCapabilities.length) {
178
+ body.deviceCapabilities = deviceCapabilities;
179
+ }
170
180
  // @ts-ignore
171
181
  if (this.webex.meetings.clientRegion) {
172
182
  // @ts-ignore
@@ -109,6 +109,8 @@ MeetingUtil.joinMeeting = (meeting, options) => {
109
109
  preferTranscoding: !meeting.isMultistream,
110
110
  asResourceOccupant: options.asResourceOccupant,
111
111
  breakoutsSupported: options.breakoutsSupported,
112
+ locale: options.locale,
113
+ deviceCapabilities: options.deviceCapabilities,
112
114
  })
113
115
  .then((res) => {
114
116
  Metrics.postEvent({
@@ -226,6 +226,25 @@ describe('plugin-meetings', () => {
226
226
 
227
227
  });
228
228
 
229
+ it('adds deviceCapabilities and locale to request when they are provided', async () => {
230
+ await meetingsRequest.joinMeeting({
231
+ locale: 'en_UK',
232
+ deviceCapabilities: ['SERVER_AUDIO_ANNOUNCEMENT_SUPPORTED']
233
+ });
234
+ const requestParams = meetingsRequest.request.getCall(0).args[0];
235
+
236
+ assert.deepEqual(requestParams.body.deviceCapabilities, ['SERVER_AUDIO_ANNOUNCEMENT_SUPPORTED']);
237
+ assert.deepEqual(requestParams.body.locale, 'en_UK');
238
+ });
239
+
240
+ it('does not add deviceCapabilities and locale to request when they are not provided', async () => {
241
+ await meetingsRequest.joinMeeting({});
242
+ const requestParams = meetingsRequest.request.getCall(0).args[0];
243
+
244
+ assert.deepEqual(requestParams.body.deviceCapabilities, undefined);
245
+ assert.deepEqual(requestParams.body.locale, undefined);
246
+ });
247
+
229
248
  it('includes joinCookie correctly', async () => {
230
249
  const locusUrl = 'locusURL';
231
250
  const deviceUrl = 'deviceUrl';
@@ -193,6 +193,26 @@ describe('plugin-meetings', () => {
193
193
  assert.equal(parameter.breakoutsSupported, true);
194
194
  });
195
195
 
196
+ it('#Should call meetingRequest.joinMeeting with locale=en_UK, deviceCapabilities=["TEST"] when they are passed in as those values', async () => {
197
+ const meeting = {
198
+ meetingRequest: {
199
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
200
+ },
201
+ };
202
+
203
+ MeetingUtil.parseLocusJoin = sinon.stub();
204
+ await MeetingUtil.joinMeeting(meeting, {
205
+ locale: 'en_UK',
206
+ deviceCapabilities: ['TEST'],
207
+ });
208
+
209
+ assert.calledOnce(meeting.meetingRequest.joinMeeting);
210
+ const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
211
+
212
+ assert.equal(parameter.locale, 'en_UK');
213
+ assert.deepEqual(parameter.deviceCapabilities, ['TEST']);
214
+ });
215
+
196
216
  it('#Should call meetingRequest.joinMeeting with preferTranscoding=false when multistream is enabled', async () => {
197
217
  const meeting = {
198
218
  isMultistream: true,