@webex/plugin-meetings 3.0.0-beta.170 → 3.0.0-beta.172

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.
Files changed (40) hide show
  1. package/README.md +0 -6
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/index.js +12 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/interpretation/index.js +1 -1
  7. package/dist/interpretation/siLanguage.js +1 -1
  8. package/dist/media/index.js +3 -3
  9. package/dist/media/index.js.map +1 -1
  10. package/dist/media/properties.js +22 -5
  11. package/dist/media/properties.js.map +1 -1
  12. package/dist/meeting/index.js +529 -415
  13. package/dist/meeting/index.js.map +1 -1
  14. package/dist/member/index.js +15 -0
  15. package/dist/member/index.js.map +1 -1
  16. package/dist/member/types.js +11 -1
  17. package/dist/member/types.js.map +1 -1
  18. package/dist/member/util.js +15 -0
  19. package/dist/member/util.js.map +1 -1
  20. package/dist/reconnection-manager/index.js +1 -2
  21. package/dist/reconnection-manager/index.js.map +1 -1
  22. package/dist/types/index.d.ts +1 -1
  23. package/dist/types/media/properties.d.ts +10 -3
  24. package/dist/types/meeting/index.d.ts +41 -9
  25. package/dist/types/member/index.d.ts +2 -1
  26. package/dist/types/member/types.d.ts +11 -0
  27. package/package.json +20 -20
  28. package/src/index.ts +2 -0
  29. package/src/media/index.ts +11 -5
  30. package/src/media/properties.ts +24 -5
  31. package/src/meeting/index.ts +210 -77
  32. package/src/member/index.ts +17 -1
  33. package/src/member/types.ts +14 -0
  34. package/src/member/util.ts +23 -1
  35. package/src/reconnection-manager/index.ts +4 -1
  36. package/test/integration/spec/journey.js +9 -9
  37. package/test/unit/spec/media/index.ts +13 -3
  38. package/test/unit/spec/meeting/index.js +106 -15
  39. package/test/unit/spec/member/index.js +36 -13
  40. package/test/unit/spec/member/util.js +31 -0
@@ -15,7 +15,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequ
15
15
  _Object$defineProperty(exports, "__esModule", {
16
16
  value: true
17
17
  });
18
- exports.default = exports.MEDIA_UPDATE_TYPE = void 0;
18
+ exports.default = exports.ScreenShareFloorStatus = exports.MEDIA_UPDATE_TYPE = void 0;
19
19
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
20
20
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
21
21
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
@@ -108,7 +108,8 @@ var MEDIA_UPDATE_TYPE = {
108
108
  SHARE_FLOOR_REQUEST: 'SHARE_FLOOR_REQUEST',
109
109
  UPDATE_MEDIA: 'UPDATE_MEDIA'
110
110
  };
111
-
111
+ exports.MEDIA_UPDATE_TYPE = MEDIA_UPDATE_TYPE;
112
+ var ScreenShareFloorStatus;
112
113
  /**
113
114
  * MediaDirection
114
115
  * @typedef {Object} MediaDirection
@@ -120,14 +121,12 @@ var MEDIA_UPDATE_TYPE = {
120
121
  * @property {boolean} receiveShare
121
122
  * @property {boolean} isSharing
122
123
  */
123
-
124
124
  /**
125
125
  * SharePreferences
126
126
  * @typedef {Object} SharePreferences
127
127
  * @property {Object} [shareConstraints]
128
128
  * @property {Boolean} [highFrameRate]
129
129
  */
130
-
131
130
  /**
132
131
  * JoinOptions
133
132
  * @typedef {Object} JoinOptions
@@ -140,14 +139,12 @@ var MEDIA_UPDATE_TYPE = {
140
139
  * @property {Boolean} [enableMultistream]
141
140
  * @property {String} [correlationId]
142
141
  */
143
-
144
142
  /**
145
143
  * Recording
146
144
  * @typedef {Object} Recording
147
145
  * @property {Object} state
148
146
  * @property {String} modifiedBy
149
147
  */
150
-
151
148
  /**
152
149
  * Meeting State Change Event
153
150
  * Emitted when ever there is a meeting state change
@@ -158,7 +155,6 @@ var MEDIA_UPDATE_TYPE = {
158
155
  * @property {String} previousState previous state of the meeting
159
156
  * @memberof Meeting
160
157
  */
161
-
162
158
  /**
163
159
  * Media Ready Event
164
160
  * Emitted when a stream is ready to be rendered
@@ -169,7 +165,6 @@ var MEDIA_UPDATE_TYPE = {
169
165
  * @property {String} type what type of stream, remote, local
170
166
  * @memberof Meeting
171
167
  */
172
-
173
168
  /**
174
169
  * Media Stopped Event
175
170
  * Emitted when a stream has stopped sending
@@ -179,7 +174,6 @@ var MEDIA_UPDATE_TYPE = {
179
174
  * @property {String} type what type of stream, remote, local
180
175
  * @memberof Meeting
181
176
  */
182
-
183
177
  /**
184
178
  * Meeting Ringing Event
185
179
  * Emitted when this client should play a ringing sound, because this member is getting an incoming meeting
@@ -191,7 +185,6 @@ var MEDIA_UPDATE_TYPE = {
191
185
  * @property {String} id
192
186
  * @memberof Meeting
193
187
  */
194
-
195
188
  /**
196
189
  * Meeting Ringing Stop Event
197
190
  * Emitted when this client should stop playing a ringing sound
@@ -204,7 +197,6 @@ var MEDIA_UPDATE_TYPE = {
204
197
  * @property {String} id
205
198
  * @memberof Meeting
206
199
  */
207
-
208
200
  /**
209
201
  * Meeting Started Sharing Local Event
210
202
  * Emitted when this member starts sharing
@@ -213,7 +205,6 @@ var MEDIA_UPDATE_TYPE = {
213
205
  * @type {Object}
214
206
  * @memberof Meeting
215
207
  */
216
-
217
208
  /**
218
209
  * Meeting Stopped Sharing Local Event
219
210
  * Emitted when this member stops sharing
@@ -222,7 +213,6 @@ var MEDIA_UPDATE_TYPE = {
222
213
  * @type {Object}
223
214
  * @memberof Meeting
224
215
  */
225
-
226
216
  /**
227
217
  * Meeting Started Sharing Remote Event
228
218
  * Emitted when remote sharing starts
@@ -232,7 +222,6 @@ var MEDIA_UPDATE_TYPE = {
232
222
  * @property {Boolean} memberId id of the meeting member that started screen share
233
223
  * @memberof Meeting
234
224
  */
235
-
236
225
  /**
237
226
  * Meeting Stopped Sharing Remote Event
238
227
  * Emitted when remote screen sharing ends
@@ -241,7 +230,6 @@ var MEDIA_UPDATE_TYPE = {
241
230
  * @type {Object}
242
231
  * @memberof Meeting
243
232
  */
244
-
245
233
  /**
246
234
  * Meeting Locked Event
247
235
  * Emitted when a meeting is locked
@@ -251,7 +239,6 @@ var MEDIA_UPDATE_TYPE = {
251
239
  * @property {Object} info
252
240
  * @memberof Meeting
253
241
  */
254
-
255
242
  /**
256
243
  * Meeting Unlocked Event
257
244
  * Emitted when a meeting is unlocked
@@ -261,7 +248,6 @@ var MEDIA_UPDATE_TYPE = {
261
248
  * @property {Object} info
262
249
  * @memberof Meeting
263
250
  */
264
-
265
251
  /**
266
252
  * Meeting Actions Update Event
267
253
  * Emitted when a user can take actions on a meeting such as lock, unlock, assign host
@@ -273,7 +259,6 @@ var MEDIA_UPDATE_TYPE = {
273
259
  * @property {Boolean} canAssignHost
274
260
  * @memberof Meeting
275
261
  */
276
-
277
262
  /**
278
263
  * Meeting Unmuted By Others Event
279
264
  * Emitted when a member is unmuted by another member
@@ -283,7 +268,6 @@ var MEDIA_UPDATE_TYPE = {
283
268
  * @property {Object} payload
284
269
  * @memberof Meeting
285
270
  */
286
-
287
271
  /**
288
272
  * Meeting Muted By Others Event
289
273
  * Emitted when a member is muted by another member
@@ -294,7 +278,6 @@ var MEDIA_UPDATE_TYPE = {
294
278
  * @property {Boolean} payload.unmuteAllowed - whether the user is allowed to unmute self
295
279
  * @memberof Meeting
296
280
  */
297
-
298
281
  /**
299
282
  * Meeting Muted By Others Event
300
283
  * Emitted when the host(moderator)/co-host requests a user to unmute
@@ -304,7 +287,6 @@ var MEDIA_UPDATE_TYPE = {
304
287
  * @property {Object} payload
305
288
  * @memberof Meeting
306
289
  */
307
-
308
290
  /**
309
291
  * Meeting Self Guest Admitted Event
310
292
  * Emitted when a joined user get admitted to the meeting by another member or host
@@ -314,7 +296,6 @@ var MEDIA_UPDATE_TYPE = {
314
296
  * @property {Object} payload
315
297
  * @memberof Meeting
316
298
  */
317
-
318
299
  /**
319
300
  * Meeting Self Lobby Waiting Event
320
301
  * Emitted when joined user enters the lobby and is waiting for the webex meeting to begin
@@ -324,7 +305,6 @@ var MEDIA_UPDATE_TYPE = {
324
305
  * @property {Object} reason Reason why user left the meeting
325
306
  * @memberof Meeting
326
307
  */
327
-
328
308
  /**
329
309
  * Meeting Self Left State
330
310
  * Emitted when user is inactive for more then 40 seconds, User can rejoin the meeting again
@@ -334,7 +314,6 @@ var MEDIA_UPDATE_TYPE = {
334
314
  * @property {Object} payload
335
315
  * @memberof Meeting
336
316
  */
337
-
338
317
  /**
339
318
  * Reconnection Starting Event
340
319
  * Emitted when reconnection of media to the active meeting was successful
@@ -342,7 +321,6 @@ var MEDIA_UPDATE_TYPE = {
342
321
  * @instance
343
322
  * @memberof Meeting
344
323
  */
345
-
346
324
  /**
347
325
  * Reconnection Success Event
348
326
  * Emitted when reconnection of media to the active meeting was successful
@@ -352,7 +330,6 @@ var MEDIA_UPDATE_TYPE = {
352
330
  * @property {Object} reconnect
353
331
  * @memberof Meeting
354
332
  */
355
-
356
333
  /**
357
334
  * Reconnection Failure Event
358
335
  * Emitted when reconnection of media to the active meeting was successful
@@ -362,7 +339,6 @@ var MEDIA_UPDATE_TYPE = {
362
339
  * @property {Error} error
363
340
  * @memberof Meeting
364
341
  */
365
-
366
342
  /**
367
343
  * Meeting network quality event
368
344
  * Emitted on each interval of retrieving stats Analyzer data
@@ -372,13 +348,17 @@ var MEDIA_UPDATE_TYPE = {
372
348
  * @property {number} networkQualityScore - {1|0} 1 indicates acceptable uplink 0 indicates unacceptable uplink based on threshold
373
349
  * @memberof Meeting
374
350
  */
375
-
376
351
  /**
377
352
  * @description Meeting is the crux of the plugin
378
353
  * @export
379
354
  * @class Meeting
380
355
  */
381
- exports.MEDIA_UPDATE_TYPE = MEDIA_UPDATE_TYPE;
356
+ exports.ScreenShareFloorStatus = ScreenShareFloorStatus;
357
+ (function (ScreenShareFloorStatus) {
358
+ ScreenShareFloorStatus["PENDING"] = "floor_request_pending";
359
+ ScreenShareFloorStatus["GRANTED"] = "floor_request_granted";
360
+ ScreenShareFloorStatus["RELEASED"] = "floor_released";
361
+ })(ScreenShareFloorStatus || (exports.ScreenShareFloorStatus = ScreenShareFloorStatus = {}));
382
362
  var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
383
363
  (0, _inherits2.default)(Meeting, _StatelessWebexPlugin);
384
364
  var _super = _createSuper(Meeting);
@@ -449,7 +429,6 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
449
429
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "inMeetingActions", void 0);
450
430
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isLocalShareLive", void 0);
451
431
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isRoapInProgress", void 0);
452
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isSharing", void 0);
453
432
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "keepAliveTimerId", void 0);
454
433
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastVideoLayoutInfo", void 0);
455
434
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "locusInfo", void 0);
@@ -470,6 +449,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
470
449
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "receiveSlotManager", void 0);
471
450
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "selfUserPolicies", void 0);
472
451
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "shareStatus", void 0);
452
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "screenShareFloorState", void 0);
473
453
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsAnalyzer", void 0);
474
454
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "transcription", void 0);
475
455
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "updateMediaConnections", void 0);
@@ -951,11 +931,11 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
951
931
  });
952
932
  }
953
933
  });
954
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleShareTrackEnded", /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
934
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleShareAudioTrackEnded", /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
955
935
  return _regenerator.default.wrap(function _callee$(_context) {
956
936
  while (1) switch (_context.prev = _context.next) {
957
937
  case 0:
958
- if (!_this.wirelessShare) {
938
+ if (!(_this.wirelessShare && !_this.mediaProperties.shareVideoTrack)) {
959
939
  _context.next = 4;
960
940
  break;
961
941
  }
@@ -967,31 +947,68 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
967
947
  case 4:
968
948
  _context.prev = 4;
969
949
  _context.next = 7;
970
- return _this.unpublishTracks([_this.mediaProperties.shareTrack]);
950
+ return _this.unpublishTracks([_this.mediaProperties.shareAudioTrack]);
971
951
  case 7:
972
952
  _context.next = 12;
973
953
  break;
974
954
  case 9:
975
955
  _context.prev = 9;
976
956
  _context.t0 = _context["catch"](4);
977
- _loggerProxy.default.logger.log('Meeting:index#handleShareTrackEnded --> Error stopping share: ', _context.t0);
957
+ _loggerProxy.default.logger.log('Meeting:index#handleShareAudioTrackEnded --> Error stopping share: ', _context.t0);
978
958
  case 12:
979
- _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
980
- file: 'meeting/index',
981
- function: 'handleShareTrackEnded'
982
- }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL, {
983
- reason: _constants.SHARE_STOPPED_REASON.TRACK_ENDED
984
- });
959
+ _this.triggerStoppedSharing();
985
960
  case 13:
986
961
  case "end":
987
962
  return _context.stop();
988
963
  }
989
964
  }, _callee, null, [[4, 9]]);
990
965
  })));
966
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleShareVideoTrackEnded", /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
967
+ return _regenerator.default.wrap(function _callee2$(_context2) {
968
+ while (1) switch (_context2.prev = _context2.next) {
969
+ case 0:
970
+ if (!(_this.wirelessShare && !_this.mediaProperties.shareAudioTrack)) {
971
+ _context2.next = 4;
972
+ break;
973
+ }
974
+ _this.leave({
975
+ reason: _constants.MEETING_REMOVED_REASON.USER_ENDED_SHARE_STREAMS
976
+ });
977
+ _context2.next = 12;
978
+ break;
979
+ case 4:
980
+ _context2.prev = 4;
981
+ _context2.next = 7;
982
+ return _this.unpublishTracks([_this.mediaProperties.shareVideoTrack]);
983
+ case 7:
984
+ _context2.next = 12;
985
+ break;
986
+ case 9:
987
+ _context2.prev = 9;
988
+ _context2.t0 = _context2["catch"](4);
989
+ _loggerProxy.default.logger.log('Meeting:index#handleShareVideoTrackEnded --> Error stopping share: ', _context2.t0);
990
+ case 12:
991
+ _this.triggerStoppedSharing();
992
+ case 13:
993
+ case "end":
994
+ return _context2.stop();
995
+ }
996
+ }, _callee2, null, [[4, 9]]);
997
+ })));
998
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "triggerStoppedSharing", function () {
999
+ if (!_this.mediaProperties.hasLocalShareTrack()) {
1000
+ _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
1001
+ file: 'meeting/index',
1002
+ function: 'handleShareTrackEnded'
1003
+ }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL, {
1004
+ reason: _constants.SHARE_STOPPED_REASON.TRACK_ENDED
1005
+ });
1006
+ }
1007
+ });
991
1008
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "clearMeetingData", function () {
992
1009
  _this.audio = null;
993
1010
  _this.video = null;
994
- _this.isSharing = false;
1011
+ _this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
995
1012
  if (_this.shareStatus === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE) {
996
1013
  _this.shareStatus = _constants.SHARE_STATUS.NO_SHARE;
997
1014
  }
@@ -1419,24 +1436,20 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1419
1436
  */
1420
1437
  _this.inMeetingActions = new _inMeetingActions.default();
1421
1438
  /**
1422
- * This is deprecated, please use shareStatus instead.
1423
1439
  * @instance
1424
- * @type {Boolean}
1440
+ * @type {string}
1425
1441
  * @readonly
1426
1442
  * @public
1427
1443
  * @memberof Meeting
1428
- * @deprecated after v1.118.13
1429
1444
  */
1430
- _this.isSharing = false;
1445
+ _this.shareStatus = _constants.SHARE_STATUS.NO_SHARE;
1431
1446
  /**
1432
1447
  * @instance
1433
- * @type {string}
1434
- * @readonly
1435
- * @public
1436
- * @memberof Meeting
1448
+ * @type {ScreenShareFloorStatus}
1449
+ * @private
1450
+ * @memberof
1437
1451
  */
1438
- _this.shareStatus = _constants.SHARE_STATUS.NO_SHARE;
1439
-
1452
+ _this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
1440
1453
  /**
1441
1454
  * @instance
1442
1455
  * @type {Array}
@@ -1722,42 +1735,42 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1722
1735
  }, {
1723
1736
  key: "fetchMeetingInfo",
1724
1737
  value: function () {
1725
- var _fetchMeetingInfo = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(_ref3) {
1726
- var _ref3$password, password, _ref3$captchaCode, captchaCode, _ref3$extraParams, extraParams, captchaInfo, info, _err$body, _err$body2;
1727
- return _regenerator.default.wrap(function _callee2$(_context2) {
1728
- while (1) switch (_context2.prev = _context2.next) {
1738
+ var _fetchMeetingInfo = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(_ref4) {
1739
+ var _ref4$password, password, _ref4$captchaCode, captchaCode, _ref4$extraParams, extraParams, captchaInfo, info, _err$body, _err$body2;
1740
+ return _regenerator.default.wrap(function _callee3$(_context3) {
1741
+ while (1) switch (_context3.prev = _context3.next) {
1729
1742
  case 0:
1730
- _ref3$password = _ref3.password, password = _ref3$password === void 0 ? null : _ref3$password, _ref3$captchaCode = _ref3.captchaCode, captchaCode = _ref3$captchaCode === void 0 ? null : _ref3$captchaCode, _ref3$extraParams = _ref3.extraParams, extraParams = _ref3$extraParams === void 0 ? {} : _ref3$extraParams;
1743
+ _ref4$password = _ref4.password, password = _ref4$password === void 0 ? null : _ref4$password, _ref4$captchaCode = _ref4.captchaCode, captchaCode = _ref4$captchaCode === void 0 ? null : _ref4$captchaCode, _ref4$extraParams = _ref4.extraParams, extraParams = _ref4$extraParams === void 0 ? {} : _ref4$extraParams;
1731
1744
  // when fetch meeting info is called directly by the client, we want to clear out the random timer for sdk to do it
1732
1745
  if (this.fetchMeetingInfoTimeoutId) {
1733
1746
  clearTimeout(this.fetchMeetingInfoTimeoutId);
1734
1747
  this.fetchMeetingInfoTimeoutId = undefined;
1735
1748
  }
1736
1749
  if (!(captchaCode && !this.requiredCaptcha)) {
1737
- _context2.next = 4;
1750
+ _context3.next = 4;
1738
1751
  break;
1739
1752
  }
1740
- return _context2.abrupt("return", _promise.default.reject(new Error('fetchMeetingInfo() called with captchaCode when captcha was not required')));
1753
+ return _context3.abrupt("return", _promise.default.reject(new Error('fetchMeetingInfo() called with captchaCode when captcha was not required')));
1741
1754
  case 4:
1742
1755
  if (!(password && this.passwordStatus !== _constants.PASSWORD_STATUS.REQUIRED && this.passwordStatus !== _constants.PASSWORD_STATUS.UNKNOWN)) {
1743
- _context2.next = 6;
1756
+ _context3.next = 6;
1744
1757
  break;
1745
1758
  }
1746
- return _context2.abrupt("return", _promise.default.reject(new Error('fetchMeetingInfo() called with password when password was not required')));
1759
+ return _context3.abrupt("return", _promise.default.reject(new Error('fetchMeetingInfo() called with password when password was not required')));
1747
1760
  case 6:
1748
- _context2.prev = 6;
1761
+ _context3.prev = 6;
1749
1762
  captchaInfo = captchaCode ? {
1750
1763
  code: captchaCode,
1751
1764
  id: this.requiredCaptcha.captchaId
1752
1765
  } : null;
1753
- _context2.next = 10;
1766
+ _context3.next = 10;
1754
1767
  return this.attrs.meetingInfoProvider.fetchMeetingInfo(this.destination, this.destinationType, password, captchaInfo,
1755
1768
  // @ts-ignore - config coming from registerPlugin
1756
1769
  this.config.installedOrgID, this.locusId, extraParams, {
1757
1770
  meetingId: this.id
1758
1771
  });
1759
1772
  case 10:
1760
- info = _context2.sent;
1773
+ info = _context3.sent;
1761
1774
  this.parseMeetingInfo(info, this.destination);
1762
1775
  this.meetingInfo = info ? _objectSpread(_objectSpread({}, info.body), {}, {
1763
1776
  meetingLookupUrl: info === null || info === void 0 ? void 0 : info.url
@@ -1773,66 +1786,66 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1773
1786
  file: 'meetings',
1774
1787
  function: 'fetchMeetingInfo'
1775
1788
  }, _constants.EVENT_TRIGGERS.MEETING_INFO_AVAILABLE);
1776
- return _context2.abrupt("return", _promise.default.resolve());
1789
+ return _context3.abrupt("return", _promise.default.resolve());
1777
1790
  case 20:
1778
- _context2.prev = 20;
1779
- _context2.t0 = _context2["catch"](6);
1780
- if (!(_context2.t0 instanceof _meetingInfoV.MeetingInfoV2PolicyError)) {
1781
- _context2.next = 29;
1791
+ _context3.prev = 20;
1792
+ _context3.t0 = _context3["catch"](6);
1793
+ if (!(_context3.t0 instanceof _meetingInfoV.MeetingInfoV2PolicyError)) {
1794
+ _context3.next = 29;
1782
1795
  break;
1783
1796
  }
1784
1797
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.POLICY;
1785
- this.meetingInfoFailureCode = _context2.t0.wbxAppApiCode;
1786
- if (_context2.t0.meetingInfo) {
1787
- this.meetingInfo = _context2.t0.meetingInfo;
1798
+ this.meetingInfoFailureCode = _context3.t0.wbxAppApiCode;
1799
+ if (_context3.t0.meetingInfo) {
1800
+ this.meetingInfo = _context3.t0.meetingInfo;
1788
1801
  }
1789
1802
  throw new _permission.default();
1790
1803
  case 29:
1791
- if (!(_context2.t0 instanceof _meetingInfoV.MeetingInfoV2PasswordError)) {
1792
- _context2.next = 41;
1804
+ if (!(_context3.t0 instanceof _meetingInfoV.MeetingInfoV2PasswordError)) {
1805
+ _context3.next = 41;
1793
1806
  break;
1794
1807
  }
1795
1808
  _loggerProxy.default.logger.info( // @ts-ignore
1796
- "Meeting:index#fetchMeetingInfo --> Info Unable to fetch meeting info for ".concat(this.destination, " - password required (code=").concat(_context2.t0 === null || _context2.t0 === void 0 ? void 0 : (_err$body = _context2.t0.body) === null || _err$body === void 0 ? void 0 : _err$body.code, ")."));
1809
+ "Meeting:index#fetchMeetingInfo --> Info Unable to fetch meeting info for ".concat(this.destination, " - password required (code=").concat(_context3.t0 === null || _context3.t0 === void 0 ? void 0 : (_err$body = _context3.t0.body) === null || _err$body === void 0 ? void 0 : _err$body.code, ")."));
1797
1810
 
1798
1811
  // when wbxappapi requires password it still populates partial meeting info in the response
1799
- if (_context2.t0.meetingInfo) {
1800
- this.meetingInfo = _context2.t0.meetingInfo;
1801
- this.meetingNumber = _context2.t0.meetingInfo.meetingNumber;
1812
+ if (_context3.t0.meetingInfo) {
1813
+ this.meetingInfo = _context3.t0.meetingInfo;
1814
+ this.meetingNumber = _context3.t0.meetingInfo.meetingNumber;
1802
1815
  }
1803
- this.meetingInfoFailureCode = _context2.t0.wbxAppApiCode;
1816
+ this.meetingInfoFailureCode = _context3.t0.wbxAppApiCode;
1804
1817
  this.passwordStatus = _constants.PASSWORD_STATUS.REQUIRED;
1805
1818
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WRONG_PASSWORD;
1806
1819
  if (!this.requiredCaptcha) {
1807
- _context2.next = 38;
1820
+ _context3.next = 38;
1808
1821
  break;
1809
1822
  }
1810
- _context2.next = 38;
1823
+ _context3.next = 38;
1811
1824
  return this.refreshCaptcha();
1812
1825
  case 38:
1813
1826
  throw new _passwordError.default();
1814
1827
  case 41:
1815
- if (!(_context2.t0 instanceof _meetingInfoV.MeetingInfoV2CaptchaError)) {
1816
- _context2.next = 50;
1828
+ if (!(_context3.t0 instanceof _meetingInfoV.MeetingInfoV2CaptchaError)) {
1829
+ _context3.next = 50;
1817
1830
  break;
1818
1831
  }
1819
1832
  _loggerProxy.default.logger.info( // @ts-ignore
1820
- "Meeting:index#fetchMeetingInfo --> Info Unable to fetch meeting info for ".concat(this.destination, " - captcha required (code=").concat(_context2.t0 === null || _context2.t0 === void 0 ? void 0 : (_err$body2 = _context2.t0.body) === null || _err$body2 === void 0 ? void 0 : _err$body2.code, ")."));
1833
+ "Meeting:index#fetchMeetingInfo --> Info Unable to fetch meeting info for ".concat(this.destination, " - captcha required (code=").concat(_context3.t0 === null || _context3.t0 === void 0 ? void 0 : (_err$body2 = _context3.t0.body) === null || _err$body2 === void 0 ? void 0 : _err$body2.code, ")."));
1821
1834
  this.meetingInfoFailureReason = this.requiredCaptcha ? _constants.MEETING_INFO_FAILURE_REASON.WRONG_CAPTCHA : _constants.MEETING_INFO_FAILURE_REASON.WRONG_PASSWORD;
1822
- this.meetingInfoFailureCode = _context2.t0.wbxAppApiCode;
1823
- if (_context2.t0.isPasswordRequired) {
1835
+ this.meetingInfoFailureCode = _context3.t0.wbxAppApiCode;
1836
+ if (_context3.t0.isPasswordRequired) {
1824
1837
  this.passwordStatus = _constants.PASSWORD_STATUS.REQUIRED;
1825
1838
  }
1826
- this.requiredCaptcha = _context2.t0.captchaInfo;
1839
+ this.requiredCaptcha = _context3.t0.captchaInfo;
1827
1840
  throw new _captchaError.default();
1828
1841
  case 50:
1829
1842
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.OTHER;
1830
- throw _context2.t0;
1843
+ throw _context3.t0;
1831
1844
  case 52:
1832
1845
  case "end":
1833
- return _context2.stop();
1846
+ return _context3.stop();
1834
1847
  }
1835
- }, _callee2, this, [[6, 20]]);
1848
+ }, _callee3, this, [[6, 20]]);
1836
1849
  }));
1837
1850
  function fetchMeetingInfo(_x) {
1838
1851
  return _fetchMeetingInfo.apply(this, arguments);
@@ -2271,10 +2284,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2271
2284
  key: "setupLocusControlsListener",
2272
2285
  value: function setupLocusControlsListener() {
2273
2286
  var _this13 = this;
2274
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED, function (_ref4) {
2275
- var state = _ref4.state,
2276
- modifiedBy = _ref4.modifiedBy,
2277
- lastModified = _ref4.lastModified;
2287
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED, function (_ref5) {
2288
+ var state = _ref5.state,
2289
+ modifiedBy = _ref5.modifiedBy,
2290
+ lastModified = _ref5.lastModified;
2278
2291
  var event;
2279
2292
  switch (state) {
2280
2293
  case _constants.RECORDING_STATE.RECORDING:
@@ -2305,8 +2318,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2305
2318
  function: 'setupLocusControlsListener'
2306
2319
  }, event, _this13.recording);
2307
2320
  });
2308
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED, function (_ref5) {
2309
- var meetingContainerUrl = _ref5.meetingContainerUrl;
2321
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED, function (_ref6) {
2322
+ var meetingContainerUrl = _ref6.meetingContainerUrl;
2310
2323
  _triggerProxy.default.trigger(_this13, {
2311
2324
  file: 'meeting/index',
2312
2325
  function: 'setupLocusControlsListener'
@@ -2314,9 +2327,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2314
2327
  meetingContainerUrl: meetingContainerUrl
2315
2328
  });
2316
2329
  });
2317
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED, function (_ref6) {
2318
- var caption = _ref6.caption,
2319
- transcribing = _ref6.transcribing;
2330
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED, function (_ref7) {
2331
+ var caption = _ref7.caption,
2332
+ transcribing = _ref7.transcribing;
2320
2333
  // @ts-ignore - config coming from registerPlugin
2321
2334
  if (transcribing && _this13.transcription && _this13.config.receiveTranscription) {
2322
2335
  _this13.receiveTranscription();
@@ -2330,24 +2343,24 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2330
2343
  });
2331
2344
  }
2332
2345
  });
2333
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, function (_ref7) {
2334
- var breakout = _ref7.breakout;
2346
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, function (_ref8) {
2347
+ var breakout = _ref8.breakout;
2335
2348
  _this13.breakouts.updateBreakout(breakout);
2336
2349
  _triggerProxy.default.trigger(_this13, {
2337
2350
  file: 'meeting/index',
2338
2351
  function: 'setupLocusControlsListener'
2339
2352
  }, _constants.EVENT_TRIGGERS.MEETING_BREAKOUTS_UPDATE);
2340
2353
  });
2341
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED, function (_ref8) {
2342
- var interpretation = _ref8.interpretation;
2354
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED, function (_ref9) {
2355
+ var interpretation = _ref9.interpretation;
2343
2356
  _this13.simultaneousInterpretation.updateInterpretation(interpretation);
2344
2357
  _triggerProxy.default.trigger(_this13, {
2345
2358
  file: 'meeting/index',
2346
2359
  function: 'setupLocusControlsListener'
2347
2360
  }, _constants.EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE);
2348
2361
  });
2349
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN, function (_ref9) {
2350
- var mainLocusUrl = _ref9.mainLocusUrl;
2362
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN, function (_ref10) {
2363
+ var mainLocusUrl = _ref10.mainLocusUrl;
2351
2364
  _this13.meetingRequest.getLocusStatusByUrl(mainLocusUrl).catch(function (error) {
2352
2365
  // clear main session cache when attendee join into breakout and forbidden to get locus from main locus url,
2353
2366
  // which means main session is not active for the attendee
@@ -2356,8 +2369,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2356
2369
  }
2357
2370
  });
2358
2371
  });
2359
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, function (_ref10) {
2360
- var entryExitTone = _ref10.entryExitTone;
2372
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, function (_ref11) {
2373
+ var entryExitTone = _ref11.entryExitTone;
2361
2374
  _triggerProxy.default.trigger(_this13, {
2362
2375
  file: 'meeting/index',
2363
2376
  function: 'setupLocusControlsListener'
@@ -2365,8 +2378,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2365
2378
  entryExitTone: entryExitTone
2366
2379
  });
2367
2380
  });
2368
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, function (_ref11) {
2369
- var state = _ref11.state;
2381
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, function (_ref12) {
2382
+ var state = _ref12.state;
2370
2383
  _triggerProxy.default.trigger(_this13, {
2371
2384
  file: 'meeting/index',
2372
2385
  function: 'setupLocusControlsListener'
@@ -2374,8 +2387,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2374
2387
  state: state
2375
2388
  });
2376
2389
  });
2377
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, function (_ref12) {
2378
- var state = _ref12.state;
2390
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, function (_ref13) {
2391
+ var state = _ref13.state;
2379
2392
  _triggerProxy.default.trigger(_this13, {
2380
2393
  file: 'meeting/index',
2381
2394
  function: 'setupLocusControlsListener'
@@ -2383,8 +2396,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2383
2396
  state: state
2384
2397
  });
2385
2398
  });
2386
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, function (_ref13) {
2387
- var state = _ref13.state;
2399
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, function (_ref14) {
2400
+ var state = _ref14.state;
2388
2401
  _triggerProxy.default.trigger(_this13, {
2389
2402
  file: 'meeting/index',
2390
2403
  function: 'setupLocusControlsListener'
@@ -2392,8 +2405,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2392
2405
  state: state
2393
2406
  });
2394
2407
  });
2395
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, function (_ref14) {
2396
- var state = _ref14.state;
2408
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, function (_ref15) {
2409
+ var state = _ref15.state;
2397
2410
  _triggerProxy.default.trigger(_this13, {
2398
2411
  file: 'meeting/index',
2399
2412
  function: 'setupLocusControlsListener'
@@ -2401,8 +2414,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2401
2414
  state: state
2402
2415
  });
2403
2416
  });
2404
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, function (_ref15) {
2405
- var state = _ref15.state;
2417
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, function (_ref16) {
2418
+ var state = _ref16.state;
2406
2419
  _triggerProxy.default.trigger(_this13, {
2407
2420
  file: 'meeting/index',
2408
2421
  function: 'setupLocusControlsListener'
@@ -2410,8 +2423,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2410
2423
  state: state
2411
2424
  });
2412
2425
  });
2413
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, function (_ref16) {
2414
- var state = _ref16.state;
2426
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, function (_ref17) {
2427
+ var state = _ref17.state;
2415
2428
  _triggerProxy.default.trigger(_this13, {
2416
2429
  file: 'meeting/index',
2417
2430
  function: 'setupLocusControlsListener'
@@ -2419,8 +2432,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2419
2432
  state: state
2420
2433
  });
2421
2434
  });
2422
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, function (_ref17) {
2423
- var state = _ref17.state;
2435
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, function (_ref18) {
2436
+ var state = _ref18.state;
2424
2437
  _triggerProxy.default.trigger(_this13, {
2425
2438
  file: 'meeting/index',
2426
2439
  function: 'setupLocusControlsListener'
@@ -2466,21 +2479,21 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2466
2479
  var _this14 = this;
2467
2480
  // Will get triggered on local and remote share
2468
2481
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, /*#__PURE__*/function () {
2469
- var _ref18 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(payload) {
2482
+ var _ref19 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(payload) {
2470
2483
  var _payload$previous, _payload$previous2;
2471
2484
  var _payload$current, contentShare, whiteboardShare, previousContentShare, previousWhiteboardShare, newShareStatus, oldShareStatus, sendStartedSharingRemote, _this14$mediaProperti;
2472
- return _regenerator.default.wrap(function _callee3$(_context3) {
2473
- while (1) switch (_context3.prev = _context3.next) {
2485
+ return _regenerator.default.wrap(function _callee4$(_context4) {
2486
+ while (1) switch (_context4.prev = _context4.next) {
2474
2487
  case 0:
2475
2488
  _payload$current = payload.current, contentShare = _payload$current.content, whiteboardShare = _payload$current.whiteboard;
2476
2489
  previousContentShare = (_payload$previous = payload.previous) === null || _payload$previous === void 0 ? void 0 : _payload$previous.content;
2477
2490
  previousWhiteboardShare = (_payload$previous2 = payload.previous) === null || _payload$previous2 === void 0 ? void 0 : _payload$previous2.whiteboard;
2478
2491
  _this14.triggerAnnotationInfoEvent(contentShare, previousContentShare);
2479
2492
  if (!(contentShare.beneficiaryId === (previousContentShare === null || previousContentShare === void 0 ? void 0 : previousContentShare.beneficiaryId) && contentShare.disposition === (previousContentShare === null || previousContentShare === void 0 ? void 0 : previousContentShare.disposition) && whiteboardShare.beneficiaryId === (previousWhiteboardShare === null || previousWhiteboardShare === void 0 ? void 0 : previousWhiteboardShare.beneficiaryId) && whiteboardShare.disposition === (previousWhiteboardShare === null || previousWhiteboardShare === void 0 ? void 0 : previousWhiteboardShare.disposition) && whiteboardShare.resourceUrl === (previousWhiteboardShare === null || previousWhiteboardShare === void 0 ? void 0 : previousWhiteboardShare.resourceUrl))) {
2480
- _context3.next = 6;
2493
+ _context4.next = 6;
2481
2494
  break;
2482
2495
  }
2483
- return _context3.abrupt("return");
2496
+ return _context4.abrupt("return");
2484
2497
  case 6:
2485
2498
  newShareStatus = _this14.shareStatus; // REMOTE - check if remote started sharing
2486
2499
  if (_this14.selfId !== contentShare.beneficiaryId && contentShare.disposition === _constants.FLOOR_ACTION.GRANTED) {
@@ -2504,22 +2517,22 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2504
2517
  newShareStatus = _constants.SHARE_STATUS.NO_SHARE;
2505
2518
  }
2506
2519
  if (!(newShareStatus !== _this14.shareStatus)) {
2507
- _context3.next = 45;
2520
+ _context4.next = 45;
2508
2521
  break;
2509
2522
  }
2510
2523
  oldShareStatus = _this14.shareStatus; // update our state before we send out any notifications
2511
2524
  _this14.shareStatus = newShareStatus;
2512
2525
 
2513
2526
  // send out "stop" notifications for the old state
2514
- _context3.t0 = oldShareStatus;
2515
- _context3.next = _context3.t0 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 14 : _context3.t0 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 16 : _context3.t0 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 18 : _context3.t0 === _constants.SHARE_STATUS.NO_SHARE ? 20 : 21;
2527
+ _context4.t0 = oldShareStatus;
2528
+ _context4.next = _context4.t0 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 14 : _context4.t0 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 16 : _context4.t0 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 18 : _context4.t0 === _constants.SHARE_STATUS.NO_SHARE ? 20 : 21;
2516
2529
  break;
2517
2530
  case 14:
2518
2531
  _triggerProxy.default.trigger(_this14, {
2519
2532
  file: 'meetings/index',
2520
2533
  function: 'remoteShare'
2521
2534
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_REMOTE);
2522
- return _context3.abrupt("break", 22);
2535
+ return _context4.abrupt("break", 22);
2523
2536
  case 16:
2524
2537
  _triggerProxy.default.trigger(_this14, {
2525
2538
  file: 'meeting/index',
@@ -2527,20 +2540,20 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2527
2540
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL, {
2528
2541
  reason: _constants.SHARE_STOPPED_REASON.SELF_STOPPED
2529
2542
  });
2530
- return _context3.abrupt("break", 22);
2543
+ return _context4.abrupt("break", 22);
2531
2544
  case 18:
2532
2545
  _triggerProxy.default.trigger(_this14, {
2533
2546
  file: 'meeting/index',
2534
2547
  function: 'stopWhiteboardShare'
2535
2548
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_WHITEBOARD);
2536
- return _context3.abrupt("break", 22);
2549
+ return _context4.abrupt("break", 22);
2537
2550
  case 20:
2538
- return _context3.abrupt("break", 22);
2551
+ return _context4.abrupt("break", 22);
2539
2552
  case 21:
2540
- return _context3.abrupt("break", 22);
2553
+ return _context4.abrupt("break", 22);
2541
2554
  case 22:
2542
- _context3.t1 = newShareStatus;
2543
- _context3.next = _context3.t1 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 25 : _context3.t1 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 34 : _context3.t1 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 37 : _context3.t1 === _constants.SHARE_STATUS.NO_SHARE ? 40 : 41;
2555
+ _context4.t1 = newShareStatus;
2556
+ _context4.next = _context4.t1 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 25 : _context4.t1 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 34 : _context4.t1 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 37 : _context4.t1 === _constants.SHARE_STATUS.NO_SHARE ? 40 : 41;
2544
2557
  break;
2545
2558
  case 25:
2546
2559
  sendStartedSharingRemote = function sendStartedSharingRemote() {
@@ -2553,19 +2566,19 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2553
2566
  shareInstanceId: contentShare.shareInstanceId
2554
2567
  });
2555
2568
  };
2556
- _context3.prev = 26;
2569
+ _context4.prev = 26;
2557
2570
  if (!((_this14$mediaProperti = _this14.mediaProperties.mediaDirection) !== null && _this14$mediaProperti !== void 0 && _this14$mediaProperti.sendShare && oldShareStatus === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE)) {
2558
- _context3.next = 30;
2571
+ _context4.next = 30;
2559
2572
  break;
2560
2573
  }
2561
- _context3.next = 30;
2562
- return _this14.unpublishTracks([_this14.mediaProperties.shareTrack]);
2574
+ _context4.next = 30;
2575
+ return _this14.unpublishTracks([_this14.mediaProperties.shareVideoTrack, _this14.mediaProperties.shareAudioTrack]);
2563
2576
  case 30:
2564
- _context3.prev = 30;
2577
+ _context4.prev = 30;
2565
2578
  sendStartedSharingRemote();
2566
- return _context3.finish(30);
2579
+ return _context4.finish(30);
2567
2580
  case 33:
2568
- return _context3.abrupt("break", 42);
2581
+ return _context4.abrupt("break", 42);
2569
2582
  case 34:
2570
2583
  _triggerProxy.default.trigger(_this14, {
2571
2584
  file: 'meeting/index',
@@ -2581,7 +2594,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2581
2594
  meetingId: _this14.id
2582
2595
  }
2583
2596
  });
2584
- return _context3.abrupt("break", 42);
2597
+ return _context4.abrupt("break", 42);
2585
2598
  case 37:
2586
2599
  _triggerProxy.default.trigger(_this14, {
2587
2600
  file: 'meeting/index',
@@ -2600,14 +2613,14 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2600
2613
  meetingId: _this14.id
2601
2614
  }
2602
2615
  });
2603
- return _context3.abrupt("break", 42);
2616
+ return _context4.abrupt("break", 42);
2604
2617
  case 40:
2605
- return _context3.abrupt("break", 42);
2618
+ return _context4.abrupt("break", 42);
2606
2619
  case 41:
2607
- return _context3.abrupt("break", 42);
2620
+ return _context4.abrupt("break", 42);
2608
2621
  case 42:
2609
2622
  _this14.members.locusMediaSharesUpdate(payload);
2610
- _context3.next = 46;
2623
+ _context4.next = 46;
2611
2624
  break;
2612
2625
  case 45:
2613
2626
  if (newShareStatus === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE) {
@@ -2646,12 +2659,12 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2646
2659
  }
2647
2660
  case 46:
2648
2661
  case "end":
2649
- return _context3.stop();
2662
+ return _context4.stop();
2650
2663
  }
2651
- }, _callee3, null, [[26,, 30, 33]]);
2664
+ }, _callee4, null, [[26,, 30, 33]]);
2652
2665
  }));
2653
2666
  return function (_x2) {
2654
- return _ref18.apply(this, arguments);
2667
+ return _ref19.apply(this, arguments);
2655
2668
  };
2656
2669
  }());
2657
2670
  }
@@ -3113,43 +3126,50 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3113
3126
  }
3114
3127
  });
3115
3128
  this.locusInfo.on(_constants.EVENTS.DESTROY_MEETING, /*#__PURE__*/function () {
3116
- var _ref19 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(payload) {
3117
- return _regenerator.default.wrap(function _callee4$(_context4) {
3118
- while (1) switch (_context4.prev = _context4.next) {
3129
+ var _ref20 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(payload) {
3130
+ return _regenerator.default.wrap(function _callee5$(_context5) {
3131
+ while (1) switch (_context5.prev = _context5.next) {
3119
3132
  case 0:
3120
3133
  if (!_this21.wirelessShare) {
3121
- _context4.next = 4;
3134
+ _context5.next = 7;
3122
3135
  break;
3123
3136
  }
3124
- if (!_this21.mediaProperties.shareTrack) {
3125
- _context4.next = 4;
3137
+ if (!_this21.mediaProperties.shareVideoTrack) {
3138
+ _context5.next = 4;
3126
3139
  break;
3127
3140
  }
3128
- _context4.next = 4;
3129
- return _this21.setLocalShareTrack(undefined);
3141
+ _context5.next = 4;
3142
+ return _this21.setLocalShareVideoTrack(undefined);
3130
3143
  case 4:
3144
+ if (!_this21.mediaProperties.shareAudioTrack) {
3145
+ _context5.next = 7;
3146
+ break;
3147
+ }
3148
+ _context5.next = 7;
3149
+ return _this21.setLocalShareAudioTrack(undefined);
3150
+ case 7:
3131
3151
  if (!payload.shouldLeave) {
3132
- _context4.next = 16;
3152
+ _context5.next = 19;
3133
3153
  break;
3134
3154
  }
3135
- _context4.prev = 5;
3136
- _context4.next = 8;
3155
+ _context5.prev = 8;
3156
+ _context5.next = 11;
3137
3157
  return _this21.leave({
3138
3158
  reason: payload.reason
3139
3159
  });
3140
- case 8:
3160
+ case 11:
3141
3161
  _loggerProxy.default.logger.warn('Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. The meeting has been left, but has not been destroyed, you should see a later event for leave.');
3142
- _context4.next = 14;
3162
+ _context5.next = 17;
3143
3163
  break;
3144
- case 11:
3145
- _context4.prev = 11;
3146
- _context4.t0 = _context4["catch"](5);
3147
- // @ts-ignore
3148
- _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. Issue with leave for meeting, meeting still in collection: ".concat(_this21, ", error: ").concat(_context4.t0));
3149
3164
  case 14:
3150
- _context4.next = 19;
3165
+ _context5.prev = 14;
3166
+ _context5.t0 = _context5["catch"](8);
3167
+ // @ts-ignore
3168
+ _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. Issue with leave for meeting, meeting still in collection: ".concat(_this21, ", error: ").concat(_context5.t0));
3169
+ case 17:
3170
+ _context5.next = 22;
3151
3171
  break;
3152
- case 16:
3172
+ case 19:
3153
3173
  _loggerProxy.default.logger.info('Meeting:index#setUpLocusInfoMeetingListener --> MEETING_REMOVED_REASON', payload.reason);
3154
3174
  _util.default.cleanUp(_this21);
3155
3175
  _triggerProxy.default.trigger(_this21, {
@@ -3159,14 +3179,14 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3159
3179
  reason: payload.reason,
3160
3180
  meetingId: _this21.id
3161
3181
  });
3162
- case 19:
3182
+ case 22:
3163
3183
  case "end":
3164
- return _context4.stop();
3184
+ return _context5.stop();
3165
3185
  }
3166
- }, _callee4, null, [[5, 11]]);
3186
+ }, _callee5, null, [[8, 14]]);
3167
3187
  }));
3168
3188
  return function (_x3) {
3169
- return _ref19.apply(this, arguments);
3189
+ return _ref20.apply(this, arguments);
3170
3190
  };
3171
3191
  }());
3172
3192
  }
@@ -3521,10 +3541,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3521
3541
  }, {
3522
3542
  key: "setLocalAudioTrack",
3523
3543
  value: function () {
3524
- var _setLocalAudioTrack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(localTrack) {
3544
+ var _setLocalAudioTrack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(localTrack) {
3525
3545
  var oldTrack;
3526
- return _regenerator.default.wrap(function _callee5$(_context5) {
3527
- while (1) switch (_context5.prev = _context5.next) {
3546
+ return _regenerator.default.wrap(function _callee6$(_context6) {
3547
+ while (1) switch (_context6.prev = _context6.next) {
3528
3548
  case 0:
3529
3549
  oldTrack = this.mediaProperties.audioTrack;
3530
3550
  oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.off(_mediaHelpers.LocalTrackEvents.Muted, this.localAudioTrackMuteStateHandler);
@@ -3536,19 +3556,19 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3536
3556
  localTrack === null || localTrack === void 0 ? void 0 : localTrack.on(_mediaHelpers.LocalTrackEvents.Muted, this.localAudioTrackMuteStateHandler);
3537
3557
  localTrack === null || localTrack === void 0 ? void 0 : localTrack.on(_mediaHelpers.LocalTrackEvents.UnderlyingTrackChange, this.underlyingLocalTrackChangeHandler);
3538
3558
  if (!(!this.isMultistream || !localTrack)) {
3539
- _context5.next = 10;
3559
+ _context6.next = 10;
3540
3560
  break;
3541
3561
  }
3542
- _context5.next = 10;
3562
+ _context6.next = 10;
3543
3563
  return this.unpublishTrack(oldTrack);
3544
3564
  case 10:
3545
- _context5.next = 12;
3565
+ _context6.next = 12;
3546
3566
  return this.publishTrack(this.mediaProperties.audioTrack);
3547
3567
  case 12:
3548
3568
  case "end":
3549
- return _context5.stop();
3569
+ return _context6.stop();
3550
3570
  }
3551
- }, _callee5, this);
3571
+ }, _callee6, this);
3552
3572
  }));
3553
3573
  function setLocalAudioTrack(_x4) {
3554
3574
  return _setLocalAudioTrack.apply(this, arguments);
@@ -3565,10 +3585,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3565
3585
  }, {
3566
3586
  key: "setLocalVideoTrack",
3567
3587
  value: function () {
3568
- var _setLocalVideoTrack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(localTrack) {
3588
+ var _setLocalVideoTrack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(localTrack) {
3569
3589
  var oldTrack;
3570
- return _regenerator.default.wrap(function _callee6$(_context6) {
3571
- while (1) switch (_context6.prev = _context6.next) {
3590
+ return _regenerator.default.wrap(function _callee7$(_context7) {
3591
+ while (1) switch (_context7.prev = _context7.next) {
3572
3592
  case 0:
3573
3593
  oldTrack = this.mediaProperties.videoTrack;
3574
3594
  oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.off(_mediaHelpers.LocalTrackEvents.Muted, this.localVideoTrackMuteStateHandler);
@@ -3580,19 +3600,19 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3580
3600
  localTrack === null || localTrack === void 0 ? void 0 : localTrack.on(_mediaHelpers.LocalTrackEvents.Muted, this.localVideoTrackMuteStateHandler);
3581
3601
  localTrack === null || localTrack === void 0 ? void 0 : localTrack.on(_mediaHelpers.LocalTrackEvents.UnderlyingTrackChange, this.underlyingLocalTrackChangeHandler);
3582
3602
  if (!(!this.isMultistream || !localTrack)) {
3583
- _context6.next = 10;
3603
+ _context7.next = 10;
3584
3604
  break;
3585
3605
  }
3586
- _context6.next = 10;
3606
+ _context7.next = 10;
3587
3607
  return this.unpublishTrack(oldTrack);
3588
3608
  case 10:
3589
- _context6.next = 12;
3609
+ _context7.next = 12;
3590
3610
  return this.publishTrack(this.mediaProperties.videoTrack);
3591
3611
  case 12:
3592
3612
  case "end":
3593
- return _context6.stop();
3613
+ return _context7.stop();
3594
3614
  }
3595
- }, _callee6, this);
3615
+ }, _callee7, this);
3596
3616
  }));
3597
3617
  function setLocalVideoTrack(_x5) {
3598
3618
  return _setLocalVideoTrack.apply(this, arguments);
@@ -3600,47 +3620,88 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3600
3620
  return setLocalVideoTrack;
3601
3621
  }()
3602
3622
  /**
3603
- * Stores the reference to a new screen share track, sets up the required event listeners
3623
+ * Stores the reference to a new screen share video track, sets up the required event listeners
3604
3624
  * on it, cleans up previous track, etc.
3605
- * It also sends the floor grant/release request.
3606
3625
  *
3607
3626
  * @param {LocalDisplayTrack | undefined} localDisplayTrack local camera track
3608
3627
  * @returns {Promise<void>}
3609
3628
  */
3610
3629
  }, {
3611
- key: "setLocalShareTrack",
3630
+ key: "setLocalShareVideoTrack",
3612
3631
  value: function () {
3613
- var _setLocalShareTrack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(localDisplayTrack) {
3632
+ var _setLocalShareVideoTrack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(localDisplayTrack) {
3614
3633
  var oldTrack;
3615
- return _regenerator.default.wrap(function _callee7$(_context7) {
3616
- while (1) switch (_context7.prev = _context7.next) {
3634
+ return _regenerator.default.wrap(function _callee8$(_context8) {
3635
+ while (1) switch (_context8.prev = _context8.next) {
3617
3636
  case 0:
3618
- oldTrack = this.mediaProperties.shareTrack;
3619
- oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.off(_mediaHelpers.LocalTrackEvents.Ended, this.handleShareTrackEnded);
3637
+ oldTrack = this.mediaProperties.shareVideoTrack;
3638
+ oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.off(_mediaHelpers.LocalTrackEvents.Ended, this.handleShareVideoTrackEnded);
3620
3639
  oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.off(_mediaHelpers.LocalTrackEvents.UnderlyingTrackChange, this.underlyingLocalTrackChangeHandler);
3621
- this.mediaProperties.setLocalShareTrack(localDisplayTrack);
3622
- localDisplayTrack === null || localDisplayTrack === void 0 ? void 0 : localDisplayTrack.on(_mediaHelpers.LocalTrackEvents.Ended, this.handleShareTrackEnded);
3640
+ this.mediaProperties.setLocalShareVideoTrack(localDisplayTrack);
3641
+ localDisplayTrack === null || localDisplayTrack === void 0 ? void 0 : localDisplayTrack.on(_mediaHelpers.LocalTrackEvents.Ended, this.handleShareVideoTrackEnded);
3623
3642
  localDisplayTrack === null || localDisplayTrack === void 0 ? void 0 : localDisplayTrack.on(_mediaHelpers.LocalTrackEvents.UnderlyingTrackChange, this.underlyingLocalTrackChangeHandler);
3624
- this.mediaProperties.mediaDirection.sendShare = !!localDisplayTrack;
3643
+ this.mediaProperties.mediaDirection.sendShare = this.mediaProperties.hasLocalShareTrack();
3625
3644
  if (!(!this.isMultistream || !localDisplayTrack)) {
3626
- _context7.next = 10;
3645
+ _context8.next = 10;
3627
3646
  break;
3628
3647
  }
3629
- _context7.next = 10;
3648
+ _context8.next = 10;
3630
3649
  return this.unpublishTrack(oldTrack);
3631
3650
  case 10:
3632
- _context7.next = 12;
3633
- return this.publishTrack(this.mediaProperties.shareTrack);
3651
+ _context8.next = 12;
3652
+ return this.publishTrack(this.mediaProperties.shareVideoTrack);
3634
3653
  case 12:
3635
3654
  case "end":
3636
- return _context7.stop();
3655
+ return _context8.stop();
3637
3656
  }
3638
- }, _callee7, this);
3657
+ }, _callee8, this);
3639
3658
  }));
3640
- function setLocalShareTrack(_x6) {
3641
- return _setLocalShareTrack.apply(this, arguments);
3659
+ function setLocalShareVideoTrack(_x6) {
3660
+ return _setLocalShareVideoTrack.apply(this, arguments);
3642
3661
  }
3643
- return setLocalShareTrack;
3662
+ return setLocalShareVideoTrack;
3663
+ }()
3664
+ /**
3665
+ * Stores the reference to a new screen share audio track, sets up the required event listeners
3666
+ * on it, cleans up previous track, etc.
3667
+ *
3668
+ * @param {LocalSystemAudioTrack | undefined} localSystemAudioTrack local system audio track
3669
+ * @returns {Promise<void>}
3670
+ */
3671
+ }, {
3672
+ key: "setLocalShareAudioTrack",
3673
+ value: function () {
3674
+ var _setLocalShareAudioTrack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(localSystemAudioTrack) {
3675
+ var oldTrack;
3676
+ return _regenerator.default.wrap(function _callee9$(_context9) {
3677
+ while (1) switch (_context9.prev = _context9.next) {
3678
+ case 0:
3679
+ oldTrack = this.mediaProperties.shareAudioTrack;
3680
+ oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.off(_mediaHelpers.LocalTrackEvents.Ended, this.handleShareAudioTrackEnded);
3681
+ oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.off(_mediaHelpers.LocalTrackEvents.UnderlyingTrackChange, this.underlyingLocalTrackChangeHandler);
3682
+ this.mediaProperties.setLocalShareAudioTrack(localSystemAudioTrack);
3683
+ localSystemAudioTrack === null || localSystemAudioTrack === void 0 ? void 0 : localSystemAudioTrack.on(_mediaHelpers.LocalTrackEvents.Ended, this.handleShareAudioTrackEnded);
3684
+ localSystemAudioTrack === null || localSystemAudioTrack === void 0 ? void 0 : localSystemAudioTrack.on(_mediaHelpers.LocalTrackEvents.UnderlyingTrackChange, this.underlyingLocalTrackChangeHandler);
3685
+ this.mediaProperties.mediaDirection.sendShare = this.mediaProperties.hasLocalShareTrack();
3686
+ if (!(!this.isMultistream || !localSystemAudioTrack)) {
3687
+ _context9.next = 10;
3688
+ break;
3689
+ }
3690
+ _context9.next = 10;
3691
+ return this.unpublishTrack(oldTrack);
3692
+ case 10:
3693
+ _context9.next = 12;
3694
+ return this.publishTrack(this.mediaProperties.shareAudioTrack);
3695
+ case 12:
3696
+ case "end":
3697
+ return _context9.stop();
3698
+ }
3699
+ }, _callee9, this);
3700
+ }));
3701
+ function setLocalShareAudioTrack(_x7) {
3702
+ return _setLocalShareAudioTrack.apply(this, arguments);
3703
+ }
3704
+ return setLocalShareAudioTrack;
3644
3705
  }()
3645
3706
  /**
3646
3707
  * Removes references to local tracks. This function should be called
@@ -3655,16 +3716,20 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3655
3716
  var _this$mediaProperties3 = this.mediaProperties,
3656
3717
  audioTrack = _this$mediaProperties3.audioTrack,
3657
3718
  videoTrack = _this$mediaProperties3.videoTrack,
3658
- shareTrack = _this$mediaProperties3.shareTrack;
3719
+ shareVideoTrack = _this$mediaProperties3.shareVideoTrack,
3720
+ shareAudioTrack = _this$mediaProperties3.shareAudioTrack;
3659
3721
  audioTrack === null || audioTrack === void 0 ? void 0 : audioTrack.off(_mediaHelpers.LocalTrackEvents.Muted, this.localAudioTrackMuteStateHandler);
3660
3722
  audioTrack === null || audioTrack === void 0 ? void 0 : audioTrack.off(_mediaHelpers.LocalTrackEvents.UnderlyingTrackChange, this.underlyingLocalTrackChangeHandler);
3661
3723
  videoTrack === null || videoTrack === void 0 ? void 0 : videoTrack.off(_mediaHelpers.LocalTrackEvents.Muted, this.localVideoTrackMuteStateHandler);
3662
3724
  videoTrack === null || videoTrack === void 0 ? void 0 : videoTrack.off(_mediaHelpers.LocalTrackEvents.UnderlyingTrackChange, this.underlyingLocalTrackChangeHandler);
3663
- shareTrack === null || shareTrack === void 0 ? void 0 : shareTrack.off(_mediaHelpers.LocalTrackEvents.Ended, this.handleShareTrackEnded);
3664
- shareTrack === null || shareTrack === void 0 ? void 0 : shareTrack.off(_mediaHelpers.LocalTrackEvents.UnderlyingTrackChange, this.underlyingLocalTrackChangeHandler);
3725
+ shareVideoTrack === null || shareVideoTrack === void 0 ? void 0 : shareVideoTrack.off(_mediaHelpers.LocalTrackEvents.Ended, this.handleShareVideoTrackEnded);
3726
+ shareVideoTrack === null || shareVideoTrack === void 0 ? void 0 : shareVideoTrack.off(_mediaHelpers.LocalTrackEvents.UnderlyingTrackChange, this.underlyingLocalTrackChangeHandler);
3727
+ shareAudioTrack === null || shareAudioTrack === void 0 ? void 0 : shareAudioTrack.off(_mediaHelpers.LocalTrackEvents.Ended, this.handleShareAudioTrackEnded);
3728
+ shareAudioTrack === null || shareAudioTrack === void 0 ? void 0 : shareAudioTrack.off(_mediaHelpers.LocalTrackEvents.UnderlyingTrackChange, this.underlyingLocalTrackChangeHandler);
3665
3729
  this.mediaProperties.setLocalAudioTrack(undefined);
3666
3730
  this.mediaProperties.setLocalVideoTrack(undefined);
3667
- this.mediaProperties.setLocalShareTrack(undefined);
3731
+ this.mediaProperties.setLocalShareVideoTrack(undefined);
3732
+ this.mediaProperties.setLocalShareAudioTrack(undefined);
3668
3733
  this.mediaProperties.mediaDirection.sendAudio = false;
3669
3734
  this.mediaProperties.mediaDirection.sendVideo = false;
3670
3735
  this.mediaProperties.mediaDirection.sendShare = false;
@@ -3673,7 +3738,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3673
3738
  // (we have to do it for transcoded meetings anyway, so we might as well do for multistream too)
3674
3739
  audioTrack === null || audioTrack === void 0 ? void 0 : audioTrack.setPublished(false);
3675
3740
  videoTrack === null || videoTrack === void 0 ? void 0 : videoTrack.setPublished(false);
3676
- shareTrack === null || shareTrack === void 0 ? void 0 : shareTrack.setPublished(false);
3741
+ shareVideoTrack === null || shareVideoTrack === void 0 ? void 0 : shareVideoTrack.setPublished(false);
3742
+ shareAudioTrack === null || shareAudioTrack === void 0 ? void 0 : shareAudioTrack.setPublished(false);
3677
3743
  }
3678
3744
 
3679
3745
  /**
@@ -3783,6 +3849,19 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3783
3849
  this.correlationId = id;
3784
3850
  }
3785
3851
 
3852
+ /**
3853
+ * Enqueue request for screenshare floor and set the status to pending
3854
+ * @returns {Promise}
3855
+ * @private
3856
+ * @memberof Meeting
3857
+ */
3858
+ }, {
3859
+ key: "enqueueScreenShareFloorRequest",
3860
+ value: function enqueueScreenShareFloorRequest() {
3861
+ this.screenShareFloorState = ScreenShareFloorStatus.PENDING;
3862
+ return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.SHARE_FLOOR_REQUEST);
3863
+ }
3864
+
3786
3865
  /**
3787
3866
  * Mute the audio for a meeting
3788
3867
  * @returns {Promise} resolves the data from muting audio {mute, self} or rejects if there is no audio set
@@ -4154,16 +4233,16 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4154
4233
  }, {
4155
4234
  key: "receiveTranscription",
4156
4235
  value: function () {
4157
- var _receiveTranscription = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8() {
4236
+ var _receiveTranscription = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {
4158
4237
  var _this32 = this;
4159
4238
  var datachannelUrl, _yield$this$request, webSocketUrl;
4160
- return _regenerator.default.wrap(function _callee8$(_context8) {
4161
- while (1) switch (_context8.prev = _context8.next) {
4239
+ return _regenerator.default.wrap(function _callee10$(_context10) {
4240
+ while (1) switch (_context10.prev = _context10.next) {
4162
4241
  case 0:
4163
4242
  _loggerProxy.default.logger.info("Meeting:index#receiveTranscription -->\n Attempting to generate a web socket url.");
4164
- _context8.prev = 1;
4243
+ _context10.prev = 1;
4165
4244
  datachannelUrl = this.locusInfo.info.datachannelUrl; // @ts-ignore - fix type
4166
- _context8.next = 5;
4245
+ _context10.next = 5;
4167
4246
  return this.request({
4168
4247
  method: _constants.HTTP_VERBS.POST,
4169
4248
  uri: datachannelUrl,
@@ -4172,7 +4251,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4172
4251
  }
4173
4252
  });
4174
4253
  case 5:
4175
- _yield$this$request = _context8.sent;
4254
+ _yield$this$request = _context10.sent;
4176
4255
  webSocketUrl = _yield$this$request.body.webSocketUrl;
4177
4256
  _loggerProxy.default.logger.info("Meeting:index#receiveTranscription -->\n Generated web socket url succesfully.");
4178
4257
  this.transcription = new _transcription.default(webSocketUrl,
@@ -4190,22 +4269,22 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4190
4269
  this.monitorTranscriptionSocketConnection();
4191
4270
  // @ts-ignore - fix type
4192
4271
  this.transcription.connect(this.webex.credentials.supertoken.access_token);
4193
- _context8.next = 19;
4272
+ _context10.next = 19;
4194
4273
  break;
4195
4274
  case 15:
4196
- _context8.prev = 15;
4197
- _context8.t0 = _context8["catch"](1);
4198
- _loggerProxy.default.logger.error("Meeting:index#receiveTranscription --> ".concat(_context8.t0));
4275
+ _context10.prev = 15;
4276
+ _context10.t0 = _context10["catch"](1);
4277
+ _loggerProxy.default.logger.error("Meeting:index#receiveTranscription --> ".concat(_context10.t0));
4199
4278
  _metrics.default.sendBehavioralMetric(_constants2.default.RECEIVE_TRANSCRIPTION_FAILURE, {
4200
4279
  correlation_id: this.correlationId,
4201
- reason: _context8.t0.message,
4202
- stack: _context8.t0.stack
4280
+ reason: _context10.t0.message,
4281
+ stack: _context10.t0.stack
4203
4282
  });
4204
4283
  case 19:
4205
4284
  case "end":
4206
- return _context8.stop();
4285
+ return _context10.stop();
4207
4286
  }
4208
- }, _callee8, this, [[1, 15]]);
4287
+ }, _callee10, this, [[1, 15]]);
4209
4288
  }));
4210
4289
  function receiveTranscription() {
4211
4290
  return _receiveTranscription.apply(this, arguments);
@@ -4389,63 +4468,63 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4389
4468
  });
4390
4469
  return join;
4391
4470
  }).then( /*#__PURE__*/function () {
4392
- var _ref20 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(join) {
4393
- return _regenerator.default.wrap(function _callee9$(_context9) {
4394
- while (1) switch (_context9.prev = _context9.next) {
4471
+ var _ref21 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(join) {
4472
+ return _regenerator.default.wrap(function _callee11$(_context11) {
4473
+ while (1) switch (_context11.prev = _context11.next) {
4395
4474
  case 0:
4396
4475
  if (!_this33.config.enableAutomaticLLM) {
4397
- _context9.next = 3;
4476
+ _context11.next = 3;
4398
4477
  break;
4399
4478
  }
4400
- _context9.next = 3;
4479
+ _context11.next = 3;
4401
4480
  return _this33.updateLLMConnection();
4402
4481
  case 3:
4403
- return _context9.abrupt("return", join);
4482
+ return _context11.abrupt("return", join);
4404
4483
  case 4:
4405
4484
  case "end":
4406
- return _context9.stop();
4485
+ return _context11.stop();
4407
4486
  }
4408
- }, _callee9);
4487
+ }, _callee11);
4409
4488
  }));
4410
- return function (_x7) {
4411
- return _ref20.apply(this, arguments);
4489
+ return function (_x8) {
4490
+ return _ref21.apply(this, arguments);
4412
4491
  };
4413
4492
  }()).then( /*#__PURE__*/function () {
4414
- var _ref21 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(join) {
4415
- return _regenerator.default.wrap(function _callee10$(_context10) {
4416
- while (1) switch (_context10.prev = _context10.next) {
4493
+ var _ref22 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(join) {
4494
+ return _regenerator.default.wrap(function _callee12$(_context12) {
4495
+ while (1) switch (_context12.prev = _context12.next) {
4417
4496
  case 0:
4418
4497
  if (!isBrowser) {
4419
- _context10.next = 8;
4498
+ _context12.next = 8;
4420
4499
  break;
4421
4500
  }
4422
4501
  if (!(_this33.config.receiveTranscription || options.receiveTranscription)) {
4423
- _context10.next = 6;
4502
+ _context12.next = 6;
4424
4503
  break;
4425
4504
  }
4426
4505
  if (!_this33.isTranscriptionSupported()) {
4427
- _context10.next = 6;
4506
+ _context12.next = 6;
4428
4507
  break;
4429
4508
  }
4430
- _context10.next = 5;
4509
+ _context12.next = 5;
4431
4510
  return _this33.receiveTranscription();
4432
4511
  case 5:
4433
4512
  _loggerProxy.default.logger.info('Meeting:index#join --> enabled to recieve transcription!');
4434
4513
  case 6:
4435
- _context10.next = 9;
4514
+ _context12.next = 9;
4436
4515
  break;
4437
4516
  case 8:
4438
4517
  _loggerProxy.default.logger.error('Meeting:index#join --> Receving transcription is not supported on this platform');
4439
4518
  case 9:
4440
- return _context10.abrupt("return", join);
4519
+ return _context12.abrupt("return", join);
4441
4520
  case 10:
4442
4521
  case "end":
4443
- return _context10.stop();
4522
+ return _context12.stop();
4444
4523
  }
4445
- }, _callee10);
4524
+ }, _callee12);
4446
4525
  }));
4447
- return function (_x8) {
4448
- return _ref21.apply(this, arguments);
4526
+ return function (_x9) {
4527
+ return _ref22.apply(this, arguments);
4449
4528
  };
4450
4529
  }()).catch(function (error) {
4451
4530
  var _this33$meetingInfo, _error$error;
@@ -4494,38 +4573,38 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4494
4573
  }, {
4495
4574
  key: "updateLLMConnection",
4496
4575
  value: function () {
4497
- var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {
4576
+ var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13() {
4498
4577
  var _this34 = this;
4499
4578
  var _this$locusInfo6, url, _this$locusInfo6$info, _this$locusInfo6$info2, datachannelUrl, isJoined;
4500
- return _regenerator.default.wrap(function _callee11$(_context11) {
4501
- while (1) switch (_context11.prev = _context11.next) {
4579
+ return _regenerator.default.wrap(function _callee13$(_context13) {
4580
+ while (1) switch (_context13.prev = _context13.next) {
4502
4581
  case 0:
4503
4582
  // @ts-ignore - Fix type
4504
4583
  _this$locusInfo6 = this.locusInfo, url = _this$locusInfo6.url, _this$locusInfo6$info = _this$locusInfo6.info, _this$locusInfo6$info2 = _this$locusInfo6$info === void 0 ? {} : _this$locusInfo6$info, datachannelUrl = _this$locusInfo6$info2.datachannelUrl;
4505
4584
  isJoined = this.isJoined(); // @ts-ignore - Fix type
4506
4585
  if (!this.webex.internal.llm.isConnected()) {
4507
- _context11.next = 8;
4586
+ _context13.next = 8;
4508
4587
  break;
4509
4588
  }
4510
4589
  if (!(url === this.webex.internal.llm.getLocusUrl() && isJoined)) {
4511
- _context11.next = 5;
4590
+ _context13.next = 5;
4512
4591
  break;
4513
4592
  }
4514
- return _context11.abrupt("return", undefined);
4593
+ return _context13.abrupt("return", undefined);
4515
4594
  case 5:
4516
- _context11.next = 7;
4595
+ _context13.next = 7;
4517
4596
  return this.webex.internal.llm.disconnectLLM();
4518
4597
  case 7:
4519
4598
  // @ts-ignore - Fix type
4520
4599
  this.webex.internal.llm.off('event:relay.event', this.processRelayEvent);
4521
4600
  case 8:
4522
4601
  if (isJoined) {
4523
- _context11.next = 10;
4602
+ _context13.next = 10;
4524
4603
  break;
4525
4604
  }
4526
- return _context11.abrupt("return", undefined);
4605
+ return _context13.abrupt("return", undefined);
4527
4606
  case 10:
4528
- return _context11.abrupt("return", this.webex.internal.llm.registerAndConnect(url, datachannelUrl).then(function (registerAndConnectResult) {
4607
+ return _context13.abrupt("return", this.webex.internal.llm.registerAndConnect(url, datachannelUrl).then(function (registerAndConnectResult) {
4529
4608
  // @ts-ignore - Fix type
4530
4609
  _this34.webex.internal.llm.off('event:relay.event', _this34.processRelayEvent);
4531
4610
  // @ts-ignore - Fix type
@@ -4535,9 +4614,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4535
4614
  }));
4536
4615
  case 11:
4537
4616
  case "end":
4538
- return _context11.stop();
4617
+ return _context13.stop();
4539
4618
  }
4540
- }, _callee11, this);
4619
+ }, _callee13, this);
4541
4620
  }));
4542
4621
  function updateLLMConnection() {
4543
4622
  return _updateLLMConnection.apply(this, arguments);
@@ -4708,17 +4787,17 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4708
4787
  meetingId: this.id
4709
4788
  }
4710
4789
  });
4711
- this.locusInfo.once(_constants.LOCUSINFO.EVENTS.SELF_OBSERVING, /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12() {
4790
+ this.locusInfo.once(_constants.LOCUSINFO.EVENTS.SELF_OBSERVING, /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14() {
4712
4791
  var mediaSettings;
4713
- return _regenerator.default.wrap(function _callee12$(_context12) {
4714
- while (1) switch (_context12.prev = _context12.next) {
4792
+ return _regenerator.default.wrap(function _callee14$(_context14) {
4793
+ while (1) switch (_context14.prev = _context14.next) {
4715
4794
  case 0:
4716
- _context12.prev = 0;
4717
- if (!_this37.isSharing) {
4718
- _context12.next = 4;
4795
+ _context14.prev = 0;
4796
+ if (!(_this37.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
4797
+ _context14.next = 4;
4719
4798
  break;
4720
4799
  }
4721
- _context12.next = 4;
4800
+ _context14.next = 4;
4722
4801
  return _this37.releaseScreenShareFloor();
4723
4802
  case 4:
4724
4803
  mediaSettings = {
@@ -4738,28 +4817,28 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4738
4817
  // when a move to is intiated by the client , Locus delets the existing media node from the server as soon the DX answers the meeting
4739
4818
  // once the DX answers we establish connection back the media server with only receiveShare enabled
4740
4819
  // @ts-ignore - reconnectMedia does not accept any argument
4741
- _context12.next = 10;
4820
+ _context14.next = 10;
4742
4821
  return _this37.reconnectionManager.reconnectMedia(mediaSettings).then(function () {
4743
4822
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
4744
4823
  });
4745
4824
  case 10:
4746
- _context12.next = 16;
4825
+ _context14.next = 16;
4747
4826
  break;
4748
4827
  case 12:
4749
- _context12.prev = 12;
4750
- _context12.t0 = _context12["catch"](0);
4751
- _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context12.t0);
4828
+ _context14.prev = 12;
4829
+ _context14.t0 = _context14["catch"](0);
4830
+ _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context14.t0);
4752
4831
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
4753
4832
  correlation_id: _this37.correlationId,
4754
4833
  locus_id: _this37.locusUrl.split('/').pop(),
4755
- reason: _context12.t0.message,
4756
- stack: _context12.t0.stack
4834
+ reason: _context14.t0.message,
4835
+ stack: _context14.t0.stack
4757
4836
  });
4758
4837
  case 16:
4759
4838
  case "end":
4760
- return _context12.stop();
4839
+ return _context14.stop();
4761
4840
  }
4762
- }, _callee12, null, [[0, 12]]);
4841
+ }, _callee14, null, [[0, 12]]);
4763
4842
  })));
4764
4843
  _loggerProxy.default.logger.info('Meeting:index#moveTo --> Initated moved to using resourceId', resourceId);
4765
4844
  return _util.default.joinMeetingOptions(this, {
@@ -4848,10 +4927,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4848
4927
  }, {
4849
4928
  key: "createMediaConnection",
4850
4929
  value: function () {
4851
- var _createMediaConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13(turnServerInfo, bundlePolicy) {
4930
+ var _createMediaConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15(turnServerInfo, bundlePolicy) {
4852
4931
  var mc;
4853
- return _regenerator.default.wrap(function _callee13$(_context13) {
4854
- while (1) switch (_context13.prev = _context13.next) {
4932
+ return _regenerator.default.wrap(function _callee15$(_context15) {
4933
+ while (1) switch (_context15.prev = _context15.next) {
4855
4934
  case 0:
4856
4935
  // create the actual media connection
4857
4936
  mc = _media.default.createMediaConnection(this.isMultistream, this.getMediaConnectionDebugId(), {
@@ -4869,34 +4948,41 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4869
4948
 
4870
4949
  // publish the tracks
4871
4950
  if (!this.mediaProperties.audioTrack) {
4872
- _context13.next = 6;
4951
+ _context15.next = 6;
4873
4952
  break;
4874
4953
  }
4875
- _context13.next = 6;
4954
+ _context15.next = 6;
4876
4955
  return this.publishTrack(this.mediaProperties.audioTrack);
4877
4956
  case 6:
4878
4957
  if (!this.mediaProperties.videoTrack) {
4879
- _context13.next = 9;
4958
+ _context15.next = 9;
4880
4959
  break;
4881
4960
  }
4882
- _context13.next = 9;
4961
+ _context15.next = 9;
4883
4962
  return this.publishTrack(this.mediaProperties.videoTrack);
4884
4963
  case 9:
4885
- if (!this.mediaProperties.shareTrack) {
4886
- _context13.next = 12;
4964
+ if (!this.mediaProperties.shareVideoTrack) {
4965
+ _context15.next = 12;
4887
4966
  break;
4888
4967
  }
4889
- _context13.next = 12;
4890
- return this.publishTrack(this.mediaProperties.shareTrack);
4968
+ _context15.next = 12;
4969
+ return this.publishTrack(this.mediaProperties.shareVideoTrack);
4891
4970
  case 12:
4892
- return _context13.abrupt("return", mc);
4893
- case 13:
4971
+ if (!(this.isMultistream && this.mediaProperties.shareAudioTrack)) {
4972
+ _context15.next = 15;
4973
+ break;
4974
+ }
4975
+ _context15.next = 15;
4976
+ return this.publishTrack(this.mediaProperties.shareAudioTrack);
4977
+ case 15:
4978
+ return _context15.abrupt("return", mc);
4979
+ case 16:
4894
4980
  case "end":
4895
- return _context13.stop();
4981
+ return _context15.stop();
4896
4982
  }
4897
- }, _callee13, this);
4983
+ }, _callee15, this);
4898
4984
  }));
4899
- function createMediaConnection(_x9, _x10) {
4985
+ function createMediaConnection(_x10, _x11) {
4900
4986
  return _createMediaConnection.apply(this, arguments);
4901
4987
  }
4902
4988
  return createMediaConnection;
@@ -4934,6 +5020,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4934
5020
  key: "addMedia",
4935
5021
  value: function addMedia() {
4936
5022
  var _localTracks$screenSh,
5023
+ _localTracks$screenSh2,
4937
5024
  _this40 = this;
4938
5025
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4939
5026
  var LOG_HEADER = 'Meeting:index#addMedia -->';
@@ -5025,44 +5112,47 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5025
5112
  promises.push(this.setLocalVideoTrack(localTracks.camera));
5026
5113
  }
5027
5114
  if (localTracks !== null && localTracks !== void 0 && (_localTracks$screenSh = localTracks.screenShare) !== null && _localTracks$screenSh !== void 0 && _localTracks$screenSh.video) {
5028
- promises.push(this.setLocalShareTrack(localTracks.screenShare.video));
5115
+ promises.push(this.setLocalShareVideoTrack(localTracks.screenShare.video));
5116
+ }
5117
+ if (this.isMultistream && localTracks !== null && localTracks !== void 0 && (_localTracks$screenSh2 = localTracks.screenShare) !== null && _localTracks$screenSh2 !== void 0 && _localTracks$screenSh2.audio) {
5118
+ promises.push(this.setLocalShareAudioTrack(localTracks.screenShare.audio));
5029
5119
  }
5030
5120
  return _promise.default.all(promises).then(function () {
5031
5121
  return _this40.roap.doTurnDiscovery(_this40, false);
5032
5122
  }).then( /*#__PURE__*/function () {
5033
- var _ref23 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14(turnDiscoveryObject) {
5123
+ var _ref24 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16(turnDiscoveryObject) {
5034
5124
  var turnServerInfo, mc;
5035
- return _regenerator.default.wrap(function _callee14$(_context14) {
5036
- while (1) switch (_context14.prev = _context14.next) {
5125
+ return _regenerator.default.wrap(function _callee16$(_context16) {
5126
+ while (1) switch (_context16.prev = _context16.next) {
5037
5127
  case 0:
5038
5128
  turnDiscoverySkippedReason = turnDiscoveryObject.turnDiscoverySkippedReason;
5039
5129
  turnServerUsed = !turnDiscoverySkippedReason;
5040
5130
  turnServerInfo = turnDiscoveryObject.turnServerInfo;
5041
- _context14.next = 5;
5131
+ _context16.next = 5;
5042
5132
  return _this40.createMediaConnection(turnServerInfo, bundlePolicy);
5043
5133
  case 5:
5044
- mc = _context14.sent;
5134
+ mc = _context16.sent;
5045
5135
  if (!_this40.isMultistream) {
5046
- _context14.next = 13;
5136
+ _context16.next = 13;
5047
5137
  break;
5048
5138
  }
5049
5139
  _this40.remoteMediaManager = new _remoteMediaManager.RemoteMediaManager(_this40.receiveSlotManager, _this40.mediaRequestManagers, remoteMediaManagerConfig);
5050
5140
  _this40.forwardEvent(_this40.remoteMediaManager, _remoteMediaManager.Event.AudioCreated, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_AUDIO_CREATED);
5051
5141
  _this40.forwardEvent(_this40.remoteMediaManager, _remoteMediaManager.Event.ScreenShareAudioCreated, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED);
5052
5142
  _this40.forwardEvent(_this40.remoteMediaManager, _remoteMediaManager.Event.VideoLayoutChanged, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED);
5053
- _context14.next = 13;
5143
+ _context16.next = 13;
5054
5144
  return _this40.remoteMediaManager.start();
5055
5145
  case 13:
5056
- _context14.next = 15;
5146
+ _context16.next = 15;
5057
5147
  return mc.initiateOffer();
5058
5148
  case 15:
5059
5149
  case "end":
5060
- return _context14.stop();
5150
+ return _context16.stop();
5061
5151
  }
5062
- }, _callee14);
5152
+ }, _callee16);
5063
5153
  }));
5064
- return function (_x11) {
5065
- return _ref23.apply(this, arguments);
5154
+ return function (_x12) {
5155
+ return _ref24.apply(this, arguments);
5066
5156
  };
5067
5157
  }()).then(function () {
5068
5158
  _this40.setMercuryListener();
@@ -5130,10 +5220,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5130
5220
  throw new Error("Timed out waiting for media connection to be connected, correlationId=".concat(_this40.correlationId));
5131
5221
  });
5132
5222
  }).then(function () {
5133
- var _localTracks$screenSh2;
5134
- if (localTracks !== null && localTracks !== void 0 && (_localTracks$screenSh2 = localTracks.screenShare) !== null && _localTracks$screenSh2 !== void 0 && _localTracks$screenSh2.video) {
5135
- _this40.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.SHARE_FLOOR_REQUEST);
5223
+ if (_this40.mediaProperties.hasLocalShareTrack()) {
5224
+ return _this40.enqueueScreenShareFloorRequest();
5136
5225
  }
5226
+ return _promise.default.resolve();
5137
5227
  }).then(function () {
5138
5228
  return _this40.mediaProperties.getCurrentConnectionType();
5139
5229
  }).then(function (connectionType) {
@@ -5258,32 +5348,32 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5258
5348
  * @memberof Meeting
5259
5349
  */
5260
5350
  function () {
5261
- var _updateMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15(options) {
5351
+ var _updateMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17(options) {
5262
5352
  var audioEnabled, videoEnabled, receiveShare;
5263
- return _regenerator.default.wrap(function _callee15$(_context15) {
5264
- while (1) switch (_context15.prev = _context15.next) {
5353
+ return _regenerator.default.wrap(function _callee17$(_context17) {
5354
+ while (1) switch (_context17.prev = _context17.next) {
5265
5355
  case 0:
5266
5356
  this.checkMediaConnection();
5267
5357
  audioEnabled = options.audioEnabled, videoEnabled = options.videoEnabled, receiveShare = options.receiveShare;
5268
5358
  _loggerProxy.default.logger.log("Meeting:index#updateMedia --> called with options=".concat((0, _stringify.default)(options)));
5269
5359
  if (this.canUpdateMedia()) {
5270
- _context15.next = 5;
5360
+ _context17.next = 5;
5271
5361
  break;
5272
5362
  }
5273
- return _context15.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.UPDATE_MEDIA, options));
5363
+ return _context17.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.UPDATE_MEDIA, options));
5274
5364
  case 5:
5275
5365
  if (!this.isMultistream) {
5276
- _context15.next = 10;
5366
+ _context17.next = 10;
5277
5367
  break;
5278
5368
  }
5279
5369
  if (!(videoEnabled !== undefined)) {
5280
- _context15.next = 8;
5370
+ _context17.next = 8;
5281
5371
  break;
5282
5372
  }
5283
5373
  throw new Error('enabling/disabling video in a meeting is not supported for multistream, it can only be done upfront when calling addMedia()');
5284
5374
  case 8:
5285
5375
  if (!(receiveShare !== undefined)) {
5286
- _context15.next = 10;
5376
+ _context17.next = 10;
5287
5377
  break;
5288
5378
  }
5289
5379
  throw new Error('toggling receiveShare in a multistream meeting is not supported, to control receiving screen share call meeting.remoteMediaManager.setLayout() with appropriate layout');
@@ -5302,30 +5392,30 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5302
5392
  this.mediaProperties.mediaDirection.receiveShare = receiveShare;
5303
5393
  }
5304
5394
  if (!this.isMultistream) {
5305
- _context15.next = 19;
5395
+ _context17.next = 19;
5306
5396
  break;
5307
5397
  }
5308
5398
  if (!(audioEnabled !== undefined)) {
5309
- _context15.next = 17;
5399
+ _context17.next = 17;
5310
5400
  break;
5311
5401
  }
5312
- _context15.next = 17;
5402
+ _context17.next = 17;
5313
5403
  return this.mediaProperties.webrtcMediaConnection.enableMultistreamAudio(audioEnabled);
5314
5404
  case 17:
5315
- _context15.next = 21;
5405
+ _context17.next = 21;
5316
5406
  break;
5317
5407
  case 19:
5318
- _context15.next = 21;
5408
+ _context17.next = 21;
5319
5409
  return this.updateTranscodedMediaConnection();
5320
5410
  case 21:
5321
- return _context15.abrupt("return", undefined);
5411
+ return _context17.abrupt("return", undefined);
5322
5412
  case 22:
5323
5413
  case "end":
5324
- return _context15.stop();
5414
+ return _context17.stop();
5325
5415
  }
5326
- }, _callee15, this);
5416
+ }, _callee17, this);
5327
5417
  }));
5328
- function updateMedia(_x12) {
5418
+ function updateMedia(_x13) {
5329
5419
  return _updateMedia.apply(this, arguments);
5330
5420
  }
5331
5421
  return updateMedia;
@@ -5506,7 +5596,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5506
5596
  body.resourceToken = resourceToken;
5507
5597
  }
5508
5598
  return this.meetingRequest.changeMeetingFloor(body).then(function () {
5509
- _this45.isSharing = false;
5599
+ _this45.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
5510
5600
  return _promise.default.resolve();
5511
5601
  }).catch(function (error) {
5512
5602
  _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
@@ -5584,11 +5674,13 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5584
5674
  key: "requestScreenShareFloor",
5585
5675
  value: function requestScreenShareFloor() {
5586
5676
  var _this47 = this;
5587
- if (!this.mediaProperties.shareTrack || !this.mediaProperties.mediaDirection.sendShare) {
5588
- _loggerProxy.default.logger.log("Meeting:index#requestScreenShareFloor --> NOT requesting floor, because we don't have the share track anymore (shareTrack=".concat(this.mediaProperties.shareTrack ? 'yes' : 'no', ", sendShare=").concat(this.mediaProperties.mediaDirection.sendShare, ")"));
5677
+ if (!this.mediaProperties.hasLocalShareTrack() || !this.mediaProperties.mediaDirection.sendShare) {
5678
+ _loggerProxy.default.logger.log("Meeting:index#requestScreenShareFloor --> NOT requesting floor, because we don't have the share track anymore (shareVideoTrack=".concat(this.mediaProperties.shareVideoTrack ? 'yes' : 'no', ", shareAudioTrack=").concat(this.mediaProperties.shareAudioTrack ? 'yes' : 'no', ", sendShare=").concat(this.mediaProperties.mediaDirection.sendShare, ")"));
5679
+ this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
5589
5680
  return _promise.default.resolve({});
5590
5681
  }
5591
5682
  if (this.state === _constants.MEETING_STATE.STATES.JOINED) {
5683
+ this.screenShareFloorState = ScreenShareFloorStatus.PENDING;
5592
5684
  var content = this.locusInfo.mediaShares.find(function (element) {
5593
5685
  return element.name === _constants.CONTENT;
5594
5686
  });
@@ -5611,7 +5703,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5611
5703
  resourceUrl: this.resourceUrl,
5612
5704
  annotationInfo: this.annotationInfo
5613
5705
  }).then(function () {
5614
- _this47.isSharing = true;
5706
+ _this47.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
5615
5707
  return _promise.default.resolve();
5616
5708
  }).catch(function (error) {
5617
5709
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
@@ -5621,10 +5713,15 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5621
5713
  reason: error.message,
5622
5714
  stack: error.stack
5623
5715
  });
5716
+ _this47.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
5624
5717
  return _promise.default.reject(error);
5625
5718
  });
5626
5719
  }
5627
- return _promise.default.reject(new _parameter.default('Cannot share without content.'));
5720
+ if (!content) {
5721
+ this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
5722
+ return _promise.default.reject(new _parameter.default('Cannot share without content.'));
5723
+ }
5724
+ return _promise.default.resolve();
5628
5725
  }
5629
5726
  this.floorGrantPending = true;
5630
5727
  return _promise.default.resolve({});
@@ -5660,6 +5757,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5660
5757
  var content = this.locusInfo.mediaShares.find(function (element) {
5661
5758
  return element.name === _constants.CONTENT;
5662
5759
  });
5760
+ if (this.screenShareFloorState === ScreenShareFloorStatus.RELEASED) {
5761
+ return _promise.default.resolve();
5762
+ }
5763
+ this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
5663
5764
  if (content) {
5664
5765
  var _content$floor;
5665
5766
  // @ts-ignore
@@ -5674,7 +5775,6 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5674
5775
  });
5675
5776
  if (((_content$floor = content.floor) === null || _content$floor === void 0 ? void 0 : _content$floor.beneficiary.id) !== this.selfId) {
5676
5777
  // remote participant started sharing and caused our sharing to stop, we don't want to send any floor action request in that case
5677
- this.isSharing = false;
5678
5778
  return _promise.default.resolve();
5679
5779
  }
5680
5780
  return this.meetingRequest.changeMeetingFloor({
@@ -5692,13 +5792,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5692
5792
  stack: error.stack
5693
5793
  });
5694
5794
  return _promise.default.reject(error);
5695
- }).finally(function () {
5696
- _this49.isSharing = false;
5697
5795
  });
5698
5796
  }
5699
5797
 
5700
5798
  // according to Locus there is no content, so we don't need to release the floor (it's probably already been released)
5701
- this.isSharing = false;
5702
5799
  return _promise.default.resolve();
5703
5800
  }
5704
5801
 
@@ -5970,10 +6067,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5970
6067
  }
5971
6068
 
5972
6069
  /**
5973
- * Functionality for when a share is ended.
6070
+ * Functionality for when a share audio is ended.
5974
6071
  * @private
5975
6072
  * @memberof Meeting
5976
- * @param {MediaStream} localShare
5977
6073
  * @returns {undefined}
5978
6074
  */
5979
6075
  }, {
@@ -6176,39 +6272,39 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6176
6272
  }, {
6177
6273
  key: "enableMusicMode",
6178
6274
  value: function () {
6179
- var _enableMusicMode = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16(shouldEnableMusicMode) {
6180
- return _regenerator.default.wrap(function _callee16$(_context16) {
6181
- while (1) switch (_context16.prev = _context16.next) {
6275
+ var _enableMusicMode = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee18(shouldEnableMusicMode) {
6276
+ return _regenerator.default.wrap(function _callee18$(_context18) {
6277
+ while (1) switch (_context18.prev = _context18.next) {
6182
6278
  case 0:
6183
6279
  this.checkMediaConnection();
6184
6280
  if (this.isMultistream) {
6185
- _context16.next = 3;
6281
+ _context18.next = 3;
6186
6282
  break;
6187
6283
  }
6188
6284
  throw new Error('enableMusicMode() only supported with multistream');
6189
6285
  case 3:
6190
6286
  if (!shouldEnableMusicMode) {
6191
- _context16.next = 8;
6287
+ _context18.next = 8;
6192
6288
  break;
6193
6289
  }
6194
- _context16.next = 6;
6290
+ _context18.next = 6;
6195
6291
  return this.mediaProperties.webrtcMediaConnection.setCodecParameters(_internalMediaCore.MediaType.AudioMain, {
6196
6292
  maxaveragebitrate: '64000',
6197
6293
  maxplaybackrate: '48000'
6198
6294
  });
6199
6295
  case 6:
6200
- _context16.next = 10;
6296
+ _context18.next = 10;
6201
6297
  break;
6202
6298
  case 8:
6203
- _context16.next = 10;
6299
+ _context18.next = 10;
6204
6300
  return this.mediaProperties.webrtcMediaConnection.deleteCodecParameters(_internalMediaCore.MediaType.AudioMain, ['maxaveragebitrate', 'maxplaybackrate']);
6205
6301
  case 10:
6206
6302
  case "end":
6207
- return _context16.stop();
6303
+ return _context18.stop();
6208
6304
  }
6209
- }, _callee16, this);
6305
+ }, _callee18, this);
6210
6306
  }));
6211
- function enableMusicMode(_x13) {
6307
+ function enableMusicMode(_x14) {
6212
6308
  return _enableMusicMode.apply(this, arguments);
6213
6309
  }
6214
6310
  return enableMusicMode;
@@ -6233,7 +6329,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6233
6329
  localTracks: {
6234
6330
  audio: ((_this$mediaProperties6 = this.mediaProperties.audioTrack) === null || _this$mediaProperties6 === void 0 ? void 0 : _this$mediaProperties6.underlyingTrack) || null,
6235
6331
  video: ((_this$mediaProperties7 = this.mediaProperties.videoTrack) === null || _this$mediaProperties7 === void 0 ? void 0 : _this$mediaProperties7.underlyingTrack) || null,
6236
- screenShareVideo: ((_this$mediaProperties8 = this.mediaProperties.shareTrack) === null || _this$mediaProperties8 === void 0 ? void 0 : _this$mediaProperties8.underlyingTrack) || null
6332
+ screenShareVideo: ((_this$mediaProperties8 = this.mediaProperties.shareVideoTrack) === null || _this$mediaProperties8 === void 0 ? void 0 : _this$mediaProperties8.underlyingTrack) || null
6237
6333
  },
6238
6334
  direction: {
6239
6335
  audio: _media.default.getDirection(true, this.mediaProperties.mediaDirection.receiveAudio, this.mediaProperties.mediaDirection.sendAudio),
@@ -6264,38 +6360,38 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6264
6360
  }, {
6265
6361
  key: "publishTrack",
6266
6362
  value: function () {
6267
- var _publishTrack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17(track) {
6268
- return _regenerator.default.wrap(function _callee17$(_context17) {
6269
- while (1) switch (_context17.prev = _context17.next) {
6363
+ var _publishTrack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19(track) {
6364
+ return _regenerator.default.wrap(function _callee19$(_context19) {
6365
+ while (1) switch (_context19.prev = _context19.next) {
6270
6366
  case 0:
6271
6367
  if (track) {
6272
- _context17.next = 2;
6368
+ _context19.next = 2;
6273
6369
  break;
6274
6370
  }
6275
- return _context17.abrupt("return");
6371
+ return _context19.abrupt("return");
6276
6372
  case 2:
6277
6373
  if (!this.mediaProperties.webrtcMediaConnection) {
6278
- _context17.next = 9;
6374
+ _context19.next = 9;
6279
6375
  break;
6280
6376
  }
6281
6377
  if (!this.isMultistream) {
6282
- _context17.next = 8;
6378
+ _context19.next = 8;
6283
6379
  break;
6284
6380
  }
6285
- _context17.next = 6;
6381
+ _context19.next = 6;
6286
6382
  return this.mediaProperties.webrtcMediaConnection.publishTrack(track);
6287
6383
  case 6:
6288
- _context17.next = 9;
6384
+ _context19.next = 9;
6289
6385
  break;
6290
6386
  case 8:
6291
6387
  track.setPublished(true); // for multistream, this call is done by WCME
6292
6388
  case 9:
6293
6389
  case "end":
6294
- return _context17.stop();
6390
+ return _context19.stop();
6295
6391
  }
6296
- }, _callee17, this);
6392
+ }, _callee19, this);
6297
6393
  }));
6298
- function publishTrack(_x14) {
6394
+ function publishTrack(_x15) {
6299
6395
  return _publishTrack.apply(this, arguments);
6300
6396
  }
6301
6397
  return publishTrack;
@@ -6309,34 +6405,34 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6309
6405
  }, {
6310
6406
  key: "unpublishTrack",
6311
6407
  value: function () {
6312
- var _unpublishTrack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee18(track) {
6313
- return _regenerator.default.wrap(function _callee18$(_context18) {
6314
- while (1) switch (_context18.prev = _context18.next) {
6408
+ var _unpublishTrack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20(track) {
6409
+ return _regenerator.default.wrap(function _callee20$(_context20) {
6410
+ while (1) switch (_context20.prev = _context20.next) {
6315
6411
  case 0:
6316
6412
  if (track) {
6317
- _context18.next = 2;
6413
+ _context20.next = 2;
6318
6414
  break;
6319
6415
  }
6320
- return _context18.abrupt("return");
6416
+ return _context20.abrupt("return");
6321
6417
  case 2:
6322
6418
  if (!(this.isMultistream && this.mediaProperties.webrtcMediaConnection)) {
6323
- _context18.next = 7;
6419
+ _context20.next = 7;
6324
6420
  break;
6325
6421
  }
6326
- _context18.next = 5;
6422
+ _context20.next = 5;
6327
6423
  return this.mediaProperties.webrtcMediaConnection.unpublishTrack(track);
6328
6424
  case 5:
6329
- _context18.next = 8;
6425
+ _context20.next = 8;
6330
6426
  break;
6331
6427
  case 7:
6332
6428
  track.setPublished(false); // for multistream, this call is done by WCME
6333
6429
  case 8:
6334
6430
  case "end":
6335
- return _context18.stop();
6431
+ return _context20.stop();
6336
6432
  }
6337
- }, _callee18, this);
6433
+ }, _callee20, this);
6338
6434
  }));
6339
- function unpublishTrack(_x15) {
6435
+ function unpublishTrack(_x16) {
6340
6436
  return _unpublishTrack.apply(this, arguments);
6341
6437
  }
6342
6438
  return unpublishTrack;
@@ -6350,64 +6446,73 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6350
6446
  }, {
6351
6447
  key: "publishTracks",
6352
6448
  value: function () {
6353
- var _publishTracks = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19(tracks) {
6354
- var _tracks$screenShare, _tracks$screenShare2, _tracks$screenShare3;
6449
+ var _publishTracks = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee21(tracks) {
6450
+ var _tracks$screenShare, _tracks$screenShare2, _tracks$screenShare3, _tracks$screenShare5;
6355
6451
  var floorRequestNeeded, _tracks$screenShare4;
6356
- return _regenerator.default.wrap(function _callee19$(_context19) {
6357
- while (1) switch (_context19.prev = _context19.next) {
6452
+ return _regenerator.default.wrap(function _callee21$(_context21) {
6453
+ while (1) switch (_context21.prev = _context21.next) {
6358
6454
  case 0:
6359
6455
  this.checkMediaConnection();
6360
6456
  this.annotationInfo = tracks.annotationInfo;
6361
6457
  if (!(!tracks.microphone && !tracks.camera && !((_tracks$screenShare = tracks.screenShare) !== null && _tracks$screenShare !== void 0 && _tracks$screenShare.audio) && !((_tracks$screenShare2 = tracks.screenShare) !== null && _tracks$screenShare2 !== void 0 && _tracks$screenShare2.video))) {
6362
- _context19.next = 4;
6458
+ _context21.next = 4;
6363
6459
  break;
6364
6460
  }
6365
- return _context19.abrupt("return");
6461
+ return _context21.abrupt("return");
6366
6462
  case 4:
6367
6463
  floorRequestNeeded = false;
6368
6464
  if (!((_tracks$screenShare3 = tracks.screenShare) !== null && _tracks$screenShare3 !== void 0 && _tracks$screenShare3.video)) {
6369
- _context19.next = 9;
6465
+ _context21.next = 9;
6370
6466
  break;
6371
6467
  }
6372
- _context19.next = 8;
6373
- return this.setLocalShareTrack((_tracks$screenShare4 = tracks.screenShare) === null || _tracks$screenShare4 === void 0 ? void 0 : _tracks$screenShare4.video);
6468
+ _context21.next = 8;
6469
+ return this.setLocalShareVideoTrack((_tracks$screenShare4 = tracks.screenShare) === null || _tracks$screenShare4 === void 0 ? void 0 : _tracks$screenShare4.video);
6374
6470
  case 8:
6375
- floorRequestNeeded = true;
6471
+ floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
6376
6472
  case 9:
6473
+ if (!(this.isMultistream && (_tracks$screenShare5 = tracks.screenShare) !== null && _tracks$screenShare5 !== void 0 && _tracks$screenShare5.audio)) {
6474
+ _context21.next = 13;
6475
+ break;
6476
+ }
6477
+ _context21.next = 12;
6478
+ return this.setLocalShareAudioTrack(tracks.screenShare.audio);
6479
+ case 12:
6480
+ floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
6481
+ case 13:
6377
6482
  if (!tracks.microphone) {
6378
- _context19.next = 12;
6483
+ _context21.next = 16;
6379
6484
  break;
6380
6485
  }
6381
- _context19.next = 12;
6486
+ _context21.next = 16;
6382
6487
  return this.setLocalAudioTrack(tracks.microphone);
6383
- case 12:
6488
+ case 16:
6384
6489
  if (!tracks.camera) {
6385
- _context19.next = 15;
6490
+ _context21.next = 19;
6386
6491
  break;
6387
6492
  }
6388
- _context19.next = 15;
6493
+ _context21.next = 19;
6389
6494
  return this.setLocalVideoTrack(tracks.camera);
6390
- case 15:
6495
+ case 19:
6391
6496
  if (this.isMultistream) {
6392
- _context19.next = 18;
6497
+ _context21.next = 22;
6393
6498
  break;
6394
6499
  }
6395
- _context19.next = 18;
6500
+ _context21.next = 22;
6396
6501
  return this.updateTranscodedMediaConnection();
6397
- case 18:
6502
+ case 22:
6398
6503
  if (!floorRequestNeeded) {
6399
- _context19.next = 21;
6504
+ _context21.next = 25;
6400
6505
  break;
6401
6506
  }
6402
- _context19.next = 21;
6403
- return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.SHARE_FLOOR_REQUEST);
6404
- case 21:
6507
+ _context21.next = 25;
6508
+ return this.enqueueScreenShareFloorRequest();
6509
+ case 25:
6405
6510
  case "end":
6406
- return _context19.stop();
6511
+ return _context21.stop();
6407
6512
  }
6408
- }, _callee19, this);
6513
+ }, _callee21, this);
6409
6514
  }));
6410
- function publishTracks(_x16) {
6515
+ function publishTracks(_x17) {
6411
6516
  return _publishTracks.apply(this, arguments);
6412
6517
  }
6413
6518
  return publishTracks;
@@ -6421,10 +6526,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6421
6526
  }, {
6422
6527
  key: "unpublishTracks",
6423
6528
  value: function () {
6424
- var _unpublishTracks = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20(tracks) {
6529
+ var _unpublishTracks = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee22(tracks) {
6425
6530
  var promises, _iterator, _step, track;
6426
- return _regenerator.default.wrap(function _callee20$(_context20) {
6427
- while (1) switch (_context20.prev = _context20.next) {
6531
+ return _regenerator.default.wrap(function _callee22$(_context22) {
6532
+ while (1) switch (_context22.prev = _context22.next) {
6428
6533
  case 0:
6429
6534
  this.checkMediaConnection();
6430
6535
  promises = [];
@@ -6434,13 +6539,11 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6434
6539
  try {
6435
6540
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
6436
6541
  track = _step.value;
6437
- if (track === this.mediaProperties.shareTrack) {
6438
- try {
6439
- this.releaseScreenShareFloor(); // we ignore the returned promise here on purpose
6440
- } catch (e) {
6441
- // nothing to do here, error is logged already inside releaseScreenShareFloor()
6442
- }
6443
- promises.push(this.setLocalShareTrack(undefined));
6542
+ if (track === this.mediaProperties.shareVideoTrack) {
6543
+ promises.push(this.setLocalShareVideoTrack(undefined));
6544
+ }
6545
+ if (track === this.mediaProperties.shareAudioTrack) {
6546
+ promises.push(this.setLocalShareAudioTrack(undefined));
6444
6547
  }
6445
6548
  if (track === this.mediaProperties.audioTrack) {
6446
6549
  promises.push(this.setLocalAudioTrack(undefined));
@@ -6457,15 +6560,26 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6457
6560
  if (!this.isMultistream) {
6458
6561
  promises.push(this.updateTranscodedMediaConnection());
6459
6562
  }
6460
- _context20.next = 7;
6563
+ _context22.next = 7;
6461
6564
  return _promise.default.all(promises);
6462
6565
  case 7:
6566
+ // we're allowing for the SDK to support just audio share as well
6567
+ // so a share could be active with only video, only audio, or both
6568
+ // we're only releasing the floor if both tracks have ended
6569
+ if (!this.mediaProperties.hasLocalShareTrack()) {
6570
+ try {
6571
+ this.releaseScreenShareFloor(); // we ignore the returned promise here on purpose
6572
+ } catch (e) {
6573
+ // nothing to do here, error is logged already inside releaseScreenShareFloor()
6574
+ }
6575
+ }
6576
+ case 8:
6463
6577
  case "end":
6464
- return _context20.stop();
6578
+ return _context22.stop();
6465
6579
  }
6466
- }, _callee20, this);
6580
+ }, _callee22, this);
6467
6581
  }));
6468
- function unpublishTracks(_x17) {
6582
+ function unpublishTracks(_x18) {
6469
6583
  return _unpublishTracks.apply(this, arguments);
6470
6584
  }
6471
6585
  return unpublishTracks;