@webex/plugin-meetings 1.149.2 → 1.151.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1321,6 +1321,38 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1321
1321
  });
1322
1322
  }
1323
1323
 
1324
+ var localSDPGenRemoteSDPRecv = this.getLocalSDPGenRemoteSDPRecvDelay();
1325
+
1326
+ if (localSDPGenRemoteSDPRecv) {
1327
+ options.joinTimes = _objectSpread(_objectSpread({}, options.joinTimes), {}, {
1328
+ localSDPGenRemoteSDPRecv: localSDPGenRemoteSDPRecv
1329
+ });
1330
+ }
1331
+
1332
+ var callInitiateJoinReq = this.getCallInitiateJoinReq();
1333
+
1334
+ if (callInitiateJoinReq) {
1335
+ options.joinTimes = _objectSpread(_objectSpread({}, options.joinTimes), {}, {
1336
+ callInitiateJoinReq: callInitiateJoinReq
1337
+ });
1338
+ }
1339
+
1340
+ var joinReqResp = this.getJoinReqResp();
1341
+
1342
+ if (joinReqResp) {
1343
+ options.joinTimes = _objectSpread(_objectSpread({}, options.joinTimes), {}, {
1344
+ joinReqResp: joinReqResp
1345
+ });
1346
+ }
1347
+
1348
+ var getTotalJmt = this.getTotalJmt();
1349
+
1350
+ if (getTotalJmt) {
1351
+ options.joinTimes = _objectSpread(_objectSpread({}, options.joinTimes), {}, {
1352
+ getTotalJmt: getTotalJmt
1353
+ });
1354
+ }
1355
+
1324
1356
  if (options.type === _constants.MQA_STATS.CA_TYPE) {
1325
1357
  payload = _metrics.default.initMediaPayload(options.event, identifiers, options);
1326
1358
  } else {
@@ -1580,7 +1612,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1580
1612
  }
1581
1613
  /**
1582
1614
  * Set up the locus info media shares listener
1583
- * update content sharing id value for members, and updates the member
1615
+ * update content and whiteboard sharing id value for members, and updates the member
1584
1616
  * notifies consumer with members:content:update {activeContentSharingId, endedContentSharingId}
1585
1617
  * @returns {undefined}
1586
1618
  * @private
@@ -1597,10 +1629,12 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1597
1629
  var _payload$previous, _payload$previous2;
1598
1630
 
1599
1631
  var _payload$current = payload.current,
1600
- contentId = _payload$current.contentId,
1601
- disposition = _payload$current.disposition;
1632
+ contentShare = _payload$current.content,
1633
+ whiteboardShare = _payload$current.whiteboard;
1634
+ var previousContentShare = (_payload$previous = payload.previous) === null || _payload$previous === void 0 ? void 0 : _payload$previous.content;
1635
+ var previousWhiteboardShare = (_payload$previous2 = payload.previous) === null || _payload$previous2 === void 0 ? void 0 : _payload$previous2.whiteboard;
1602
1636
 
1603
- if (contentId === ((_payload$previous = payload.previous) === null || _payload$previous === void 0 ? void 0 : _payload$previous.contentId) && disposition === ((_payload$previous2 = payload.previous) === null || _payload$previous2 === void 0 ? void 0 : _payload$previous2.disposition)) {
1637
+ 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)) {
1604
1638
  // nothing changed, so ignore
1605
1639
  // (this happens when we steal presentation from remote)
1606
1640
  return;
@@ -1608,10 +1642,11 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1608
1642
 
1609
1643
  var newShareStatus = _this10.shareStatus; // REMOTE - check if remote started sharing
1610
1644
 
1611
- if (_this10.selfId !== contentId && disposition === _constants.FLOOR_ACTION.GRANTED) {
1645
+ if (_this10.selfId !== contentShare.beneficiaryId && contentShare.disposition === _constants.FLOOR_ACTION.GRANTED) {
1646
+ // CONTENT - sharing content remote
1612
1647
  newShareStatus = _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE;
1613
- } // LOCAL - check if we started sharing
1614
- else if (_this10.selfId === contentId && disposition === _constants.FLOOR_ACTION.GRANTED) {
1648
+ } // LOCAL - check if we started sharing content
1649
+ else if (_this10.selfId === contentShare.beneficiaryId && contentShare.disposition === _constants.FLOOR_ACTION.GRANTED) {
1615
1650
  var _this10$mediaProperti;
1616
1651
 
1617
1652
  if (((_this10$mediaProperti = _this10.mediaProperties.shareTrack) === null || _this10$mediaProperti === void 0 ? void 0 : _this10$mediaProperti.readyState) === 'ended') {
@@ -1621,10 +1656,17 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1621
1656
  _loggerProxy.default.logger.log('Meeting:index#setUpLocusMediaSharesListener --> Error stopping share: ', error);
1622
1657
  });
1623
1658
  } else {
1659
+ // CONTENT - sharing content local
1624
1660
  newShareStatus = _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE;
1625
1661
  }
1626
- } // or if sharing has been stopped
1627
- else if (payload.previous && disposition === _constants.FLOOR_ACTION.RELEASED) {
1662
+ } // If we did not hit the cases above, no one is sharng content, so we check if we are sharing whiteboard
1663
+ // There is no concept of local/remote share for whiteboard
1664
+ // It does not matter who requested to share the whiteboard, everyone gets the same view
1665
+ else if (whiteboardShare.disposition === _constants.FLOOR_ACTION.GRANTED) {
1666
+ // WHITEBOARD - sharing whiteboard
1667
+ newShareStatus = _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE;
1668
+ } // or if content share is either released or null and whiteboard share is either released or null, no one is sharing
1669
+ else if ((previousContentShare && contentShare.disposition === _constants.FLOOR_ACTION.RELEASED || contentShare.disposition === null) && (previousWhiteboardShare && whiteboardShare.disposition === _constants.FLOOR_ACTION.RELEASED || whiteboardShare.disposition === null)) {
1628
1670
  newShareStatus = _constants.SHARE_STATUS.NO_SHARE;
1629
1671
  }
1630
1672
 
@@ -1652,6 +1694,14 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1652
1694
 
1653
1695
  break;
1654
1696
 
1697
+ case _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE:
1698
+ _triggerProxy.default.trigger(_this10, {
1699
+ file: 'meeting/index',
1700
+ function: 'stopWhiteboardShare'
1701
+ }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_WHITEBOARD);
1702
+
1703
+ break;
1704
+
1655
1705
  case _constants.SHARE_STATUS.NO_SHARE:
1656
1706
  // nothing to do
1657
1707
  break;
@@ -1671,20 +1721,20 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1671
1721
  file: 'meetings/index',
1672
1722
  function: 'remoteShare'
1673
1723
  }, _constants.EVENT_TRIGGERS.MEETING_STARTED_SHARING_REMOTE, {
1674
- memberId: contentId
1724
+ memberId: contentShare.beneficiaryId
1675
1725
  });
1676
1726
  }; // if a remote participant is stealing the presentation from us
1677
1727
 
1678
1728
 
1679
- if ((_this10$mediaProperti2 = _this10.mediaProperties.mediaDirection) !== null && _this10$mediaProperti2 !== void 0 && _this10$mediaProperti2.sendShare) {
1729
+ if (!((_this10$mediaProperti2 = _this10.mediaProperties.mediaDirection) !== null && _this10$mediaProperti2 !== void 0 && _this10$mediaProperti2.sendShare) || oldShareStatus === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE) {
1730
+ sendStartedSharingRemote();
1731
+ } else {
1680
1732
  _this10.updateShare({
1681
1733
  sendShare: false,
1682
1734
  receiveShare: _this10.mediaProperties.mediaDirection.receiveShare
1683
1735
  }).finally(function () {
1684
1736
  sendStartedSharingRemote();
1685
1737
  });
1686
- } else {
1687
- sendStartedSharingRemote();
1688
1738
  }
1689
1739
 
1690
1740
  break;
@@ -1703,6 +1753,22 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1703
1753
 
1704
1754
  break;
1705
1755
 
1756
+ case _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE:
1757
+ _triggerProxy.default.trigger(_this10, {
1758
+ file: 'meeting/index',
1759
+ function: 'startWhiteboardShare'
1760
+ }, _constants.EVENT_TRIGGERS.MEETING_STARTED_SHARING_WHITEBOARD, {
1761
+ resourceUrl: whiteboardShare.resourceUrl,
1762
+ memberId: whiteboardShare.beneficiaryId
1763
+ });
1764
+
1765
+ _metrics.default.postEvent({
1766
+ event: _config.eventType.WHITEBOARD_SHARE_FLOOR_GRANTED,
1767
+ meeting: _this10
1768
+ });
1769
+
1770
+ break;
1771
+
1706
1772
  case _constants.SHARE_STATUS.NO_SHARE:
1707
1773
  // nothing to do
1708
1774
  break;
@@ -1719,7 +1785,24 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1719
1785
  file: 'meetings/index',
1720
1786
  function: 'remoteShare'
1721
1787
  }, _constants.EVENT_TRIGGERS.MEETING_STARTED_SHARING_REMOTE, {
1722
- memberId: contentId
1788
+ memberId: contentShare.beneficiaryId
1789
+ });
1790
+
1791
+ _this10.members.locusMediaSharesUpdate(payload);
1792
+ } else if (newShareStatus === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE) {
1793
+ // if we got here, then some remote participant has stolen
1794
+ // the presentation from another remote participant
1795
+ _triggerProxy.default.trigger(_this10, {
1796
+ file: 'meeting/index',
1797
+ function: 'startWhiteboardShare'
1798
+ }, _constants.EVENT_TRIGGERS.MEETING_STARTED_SHARING_WHITEBOARD, {
1799
+ resourceUrl: whiteboardShare.resourceUrl,
1800
+ memberId: whiteboardShare.beneficiaryId
1801
+ });
1802
+
1803
+ _metrics.default.postEvent({
1804
+ event: _config.eventType.WHITEBOARD_SHARE_FLOOR_GRANTED,
1805
+ meeting: _this10
1723
1806
  });
1724
1807
 
1725
1808
  _this10.members.locusMediaSharesUpdate(payload);
@@ -4078,7 +4161,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4078
4161
  meetingId: _this37.id,
4079
4162
  remoteQualityLevel: _this37.mediaProperties.remoteQualityLevel,
4080
4163
  enableRtx: _this37.config.enableRtx,
4081
- enableExtmap: _this37.config.enableExtmap
4164
+ enableExtmap: _this37.config.enableExtmap,
4165
+ setStartLocalSDPGenRemoteSDPRecvDelay: _this37.setStartLocalSDPGenRemoteSDPRecvDelay.bind(_this37)
4082
4166
  }).then(function (peerConnection) {
4083
4167
  return _this37.getDevices().then(function (devices) {
4084
4168
  _util.default.handleDeviceLogging(devices);
@@ -4795,6 +4879,115 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4795
4879
  return _promise.default.reject(error);
4796
4880
  });
4797
4881
  }
4882
+ /**
4883
+ * Start sharing whiteboard given channelUrl
4884
+ * @param {string} channelUrl whiteboard url
4885
+ * @param {String} resourceToken token created by authorize media injector
4886
+ * @returns {Promise}
4887
+ * @public
4888
+ * @memberof Meeting
4889
+ */
4890
+
4891
+ }, {
4892
+ key: "startWhiteboardShare",
4893
+ value: function startWhiteboardShare(channelUrl, resourceToken) {
4894
+ var _this46 = this;
4895
+
4896
+ var whiteboard = this.locusInfo.mediaShares.find(function (element) {
4897
+ return element.name === 'whiteboard';
4898
+ });
4899
+
4900
+ if (!channelUrl) {
4901
+ return _promise.default.reject(new _parameter.default('Cannot share without channelUrl.'));
4902
+ }
4903
+
4904
+ if (whiteboard) {
4905
+ _metrics.default.postEvent({
4906
+ event: _config.eventType.WHITEBOARD_SHARE_INITIATED,
4907
+ meeting: this
4908
+ });
4909
+
4910
+ var body = {
4911
+ disposition: _constants.FLOOR_ACTION.GRANTED,
4912
+ personUrl: this.locusInfo.self.url,
4913
+ deviceUrl: this.deviceUrl,
4914
+ uri: whiteboard.url,
4915
+ resourceUrl: channelUrl
4916
+ };
4917
+
4918
+ if (resourceToken) {
4919
+ body.resourceToken = resourceToken;
4920
+ }
4921
+
4922
+ return this.meetingRequest.changeMeetingFloor(body).then(function () {
4923
+ _this46.isSharing = false;
4924
+ return _promise.default.resolve();
4925
+ }).catch(function (error) {
4926
+ _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
4927
+
4928
+ _metrics.default.sendOperationalMetric(_constants.METRICS_OPERATIONAL_MEASURES.MEETING_START_WHITEBOARD_SHARE_FAILURE, {
4929
+ correlation_id: _this46.correlationId,
4930
+ locus_id: _this46.locusUrl.split('/').pop(),
4931
+ reason: error.message,
4932
+ stack: error.stack,
4933
+ board: {
4934
+ channelUrl: channelUrl
4935
+ }
4936
+ });
4937
+
4938
+ return _promise.default.reject(error);
4939
+ });
4940
+ }
4941
+
4942
+ return _promise.default.reject(new _parameter.default('Cannot share without whiteboard.'));
4943
+ }
4944
+ /**
4945
+ * Stop sharing whiteboard given channelUrl
4946
+ * @param {string} channelUrl whiteboard url
4947
+ * @returns {Promise}
4948
+ * @public
4949
+ * @memberof Meeting
4950
+ */
4951
+
4952
+ }, {
4953
+ key: "stopWhiteboardShare",
4954
+ value: function stopWhiteboardShare(channelUrl) {
4955
+ var _this47 = this;
4956
+
4957
+ var whiteboard = this.locusInfo.mediaShares.find(function (element) {
4958
+ return element.name === 'whiteboard';
4959
+ });
4960
+
4961
+ if (whiteboard) {
4962
+ _metrics.default.postEvent({
4963
+ event: _config.eventType.WHITEBOARD_SHARE_STOPPED,
4964
+ meeting: this
4965
+ });
4966
+
4967
+ return this.meetingRequest.changeMeetingFloor({
4968
+ disposition: _constants.FLOOR_ACTION.RELEASED,
4969
+ personUrl: this.locusInfo.self.url,
4970
+ deviceUrl: this.deviceUrl,
4971
+ uri: whiteboard.url
4972
+ }).catch(function (error) {
4973
+ _loggerProxy.default.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
4974
+
4975
+ _metrics.default.sendOperationalMetric(_constants.METRICS_OPERATIONAL_MEASURES.STOP_WHITEBOARD_SHARE_FAILURE, {
4976
+ correlation_id: _this47.correlationId,
4977
+ locus_id: _this47.locusUrl.split('/').pop(),
4978
+ reason: error.message,
4979
+ stack: error.stack,
4980
+ board: {
4981
+ channelUrl: channelUrl
4982
+ }
4983
+ });
4984
+
4985
+ return _promise.default.reject(error);
4986
+ }).finally(function () {});
4987
+ }
4988
+
4989
+ return _promise.default.reject(new _parameter.default('Cannot stop share without whiteboard.'));
4990
+ }
4798
4991
  /**
4799
4992
  * Start sharing content with server
4800
4993
  * @returns {Promise} see #meetingRequest.changeMeetingFloor
@@ -4805,7 +4998,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4805
4998
  }, {
4806
4999
  key: "share",
4807
5000
  value: function share() {
4808
- var _this46 = this;
5001
+ var _this48 = this;
4809
5002
 
4810
5003
  var content = this.locusInfo.mediaShares.find(function (element) {
4811
5004
  return element.name === _constants.CONTENT;
@@ -4824,14 +5017,14 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4824
5017
  uri: content.url,
4825
5018
  resourceUrl: this.resourceUrl
4826
5019
  }).then(function () {
4827
- _this46.isSharing = true;
5020
+ _this48.isSharing = true;
4828
5021
  return _promise.default.resolve();
4829
5022
  }).catch(function (error) {
4830
5023
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
4831
5024
 
4832
5025
  _metrics.default.sendOperationalMetric(_constants.METRICS_OPERATIONAL_MEASURES.MEETING_SHARE_FAILURE, {
4833
- correlation_id: _this46.correlationId,
4834
- locus_id: _this46.locusUrl.split('/').pop(),
5026
+ correlation_id: _this48.correlationId,
5027
+ locus_id: _this48.locusUrl.split('/').pop(),
4835
5028
  reason: error.message,
4836
5029
  stack: error.stack
4837
5030
  });
@@ -4870,7 +5063,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4870
5063
  }, {
4871
5064
  key: "stopFloorRequest",
4872
5065
  value: function stopFloorRequest() {
4873
- var _this47 = this;
5066
+ var _this49 = this;
4874
5067
 
4875
5068
  var content = this.locusInfo.mediaShares.find(function (element) {
4876
5069
  return element.name === _constants.CONTENT;
@@ -4884,7 +5077,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4884
5077
 
4885
5078
  _media.default.stopTracks(this.mediaProperties.shareTrack);
4886
5079
 
4887
- if (this.contentId !== this.selfId) {
5080
+ if (content.floor.beneficiary.id !== this.selfId) {
4888
5081
  // remote participant started sharing and caused our sharing to stop, we don't want to send any floor action request in that case
4889
5082
  this.isSharing = false;
4890
5083
  return _promise.default.resolve();
@@ -4900,15 +5093,15 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4900
5093
  _loggerProxy.default.logger.error('Meeting:index#stopFloorRequest --> Error ', error);
4901
5094
 
4902
5095
  _metrics.default.sendOperationalMetric(_constants.METRICS_OPERATIONAL_MEASURES.STOP_FLOOR_REQUEST_FAILURE, {
4903
- correlation_id: _this47.correlationId,
4904
- locus_id: _this47.locusUrl.split('/').pop(),
5096
+ correlation_id: _this49.correlationId,
5097
+ locus_id: _this49.locusUrl.split('/').pop(),
4905
5098
  reason: error.message,
4906
5099
  stack: error.stack
4907
5100
  });
4908
5101
 
4909
5102
  return _promise.default.reject(error);
4910
5103
  }).finally(function () {
4911
- _this47.isSharing = false;
5104
+ _this49.isSharing = false;
4912
5105
  });
4913
5106
  }
4914
5107
 
@@ -5044,7 +5237,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5044
5237
  }, {
5045
5238
  key: "changeVideoLayout",
5046
5239
  value: function changeVideoLayout(layoutType) {
5047
- var _this48 = this;
5240
+ var _this50 = this;
5048
5241
 
5049
5242
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
5050
5243
  var main = renderInfo.main,
@@ -5107,7 +5300,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5107
5300
  content: layoutInfo.content
5108
5301
  }).then(function (response) {
5109
5302
  if (response && response.body && response.body.locus) {
5110
- _this48.locusInfo.onFullLocus(response.body.locus);
5303
+ _this50.locusInfo.onFullLocus(response.body.locus);
5111
5304
  }
5112
5305
  }).catch(function (error) {
5113
5306
  _loggerProxy.default.logger.error('Meeting:index#changeVideoLayout --> Error ', error);
@@ -5124,7 +5317,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5124
5317
  }, {
5125
5318
  key: "setLocalVideoQuality",
5126
5319
  value: function setLocalVideoQuality(level) {
5127
- var _this49 = this;
5320
+ var _this51 = this;
5128
5321
 
5129
5322
  _loggerProxy.default.logger.log("Meeting:index#setLocalVideoQuality --> Setting quality to ".concat(level));
5130
5323
 
@@ -5154,7 +5347,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5154
5347
  var _ref11 = (0, _slicedToArray2.default)(_ref10, 1),
5155
5348
  localStream = _ref11[0];
5156
5349
 
5157
- return _this49.updateVideo({
5350
+ return _this51.updateVideo({
5158
5351
  sendVideo: true,
5159
5352
  receiveVideo: true,
5160
5353
  stream: localStream
@@ -5202,7 +5395,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5202
5395
  }, {
5203
5396
  key: "setMeetingQuality",
5204
5397
  value: function setMeetingQuality(level) {
5205
- var _this50 = this;
5398
+ var _this52 = this;
5206
5399
 
5207
5400
  _loggerProxy.default.logger.log("Meeting:index#setMeetingQuality --> Setting quality to ".concat(level));
5208
5401
 
@@ -5227,18 +5420,18 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5227
5420
  receiveVideo = _this$mediaProperties4.receiveVideo,
5228
5421
  sendVideo = _this$mediaProperties4.sendVideo;
5229
5422
  return (sendVideo ? this.setLocalVideoQuality(level) : _promise.default.resolve()).then(function () {
5230
- return receiveAudio || receiveVideo ? _this50.setRemoteQualityLevel(level) : _promise.default.resolve();
5423
+ return receiveAudio || receiveVideo ? _this52.setRemoteQualityLevel(level) : _promise.default.resolve();
5231
5424
  }).catch(function (error) {
5232
5425
  // From troubleshooting it seems that the stream itself doesn't change the max-fs if the peer connection isn't stable
5233
- _this50.mediaProperties.setLocalQualityLevel(previousLevel.local);
5426
+ _this52.mediaProperties.setLocalQualityLevel(previousLevel.local);
5234
5427
 
5235
- _this50.mediaProperties.setRemoteQualityLevel(previousLevel.remote);
5428
+ _this52.mediaProperties.setRemoteQualityLevel(previousLevel.remote);
5236
5429
 
5237
5430
  _loggerProxy.default.logger.error("Meeting:index#setMeetingQuality --> ".concat(error.message));
5238
5431
 
5239
5432
  _metrics.default.sendOperationalMetric(_constants.METRICS_OPERATIONAL_MEASURES.SET_MEETING_QUALITY_FAILURE, {
5240
- correlation_id: _this50.correlationId,
5241
- locus_id: _this50.locusUrl.split('/').pop(),
5433
+ correlation_id: _this52.correlationId,
5434
+ locus_id: _this52.locusUrl.split('/').pop(),
5242
5435
  reason: error.message,
5243
5436
  stack: error.stack
5244
5437
  }, {
@@ -5262,7 +5455,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5262
5455
  }, {
5263
5456
  key: "shareScreen",
5264
5457
  value: function shareScreen() {
5265
- var _this51 = this;
5458
+ var _this53 = this;
5266
5459
 
5267
5460
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
5268
5461
 
@@ -5274,9 +5467,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5274
5467
  }, options);
5275
5468
 
5276
5469
  return _media.default.getDisplayMedia(shareConstraints, this.config).then(function (shareStream) {
5277
- return _this51.updateShare({
5470
+ return _this53.updateShare({
5278
5471
  sendShare: true,
5279
- receiveShare: _this51.mediaProperties.mediaDirection.receiveShare,
5472
+ receiveShare: _this53.mediaProperties.mediaDirection.receiveShare,
5280
5473
  stream: shareStream
5281
5474
  });
5282
5475
  }).catch(function (error) {
@@ -5288,8 +5481,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5288
5481
  // TODO: The getDisplayMedia errors need to be moved inside `media.getDisplayMedia`
5289
5482
  var metricName = _constants.METRICS_OPERATIONAL_MEASURES.GET_DISPLAY_MEDIA_FAILURE;
5290
5483
  var data = {
5291
- correlation_id: _this51.correlationId,
5292
- locus_id: _this51.locusUrl.split('/').pop(),
5484
+ correlation_id: _this53.correlationId,
5485
+ locus_id: _this53.locusUrl.split('/').pop(),
5293
5486
  reason: error.message,
5294
5487
  stack: error.stack
5295
5488
  };
@@ -5421,9 +5614,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5421
5614
  this["endSendingMediaDelay".concat(typeMedia)] = undefined;
5422
5615
  }
5423
5616
  /**
5424
- * @param {string} typeMedia 'audio' or 'video'
5425
- * @returns {undefined}
5426
- */
5617
+ * @param {string} typeMedia 'audio' or 'video'
5618
+ * @returns {undefined}
5619
+ */
5427
5620
 
5428
5621
  }, {
5429
5622
  key: "setEndSendingMediaDelay",
@@ -5442,6 +5635,139 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5442
5635
  var end = this["endSendingMediaDelay".concat(typeMedia)];
5443
5636
  return start && end ? end - start : undefined;
5444
5637
  }
5638
+ /**
5639
+ *
5640
+ * @returns {undefined}
5641
+ */
5642
+
5643
+ }, {
5644
+ key: "setStartLocalSDPGenRemoteSDPRecvDelay",
5645
+ value: function setStartLocalSDPGenRemoteSDPRecvDelay() {
5646
+ if (!this.startLocalSDPGenRemoteSDPRecvDelay) {
5647
+ this.startLocalSDPGenRemoteSDPRecvDelay = performance.now();
5648
+ this.endLocalSDPGenRemoteSDPRecvDelay = undefined;
5649
+ }
5650
+ }
5651
+ /**
5652
+ *
5653
+ * @returns {undefined}
5654
+ */
5655
+
5656
+ }, {
5657
+ key: "setEndLocalSDPGenRemoteSDPRecvDelay",
5658
+ value: function setEndLocalSDPGenRemoteSDPRecvDelay() {
5659
+ if (!this.endLocalSDPGenRemoteSDPRecvDelay) {
5660
+ this.endLocalSDPGenRemoteSDPRecvDelay = performance.now();
5661
+ }
5662
+ }
5663
+ /**
5664
+ *
5665
+ * @returns {string} duration between local SDP generation and remote SDP reception
5666
+ */
5667
+
5668
+ }, {
5669
+ key: "getLocalSDPGenRemoteSDPRecvDelay",
5670
+ value: function getLocalSDPGenRemoteSDPRecvDelay() {
5671
+ var start = this.startLocalSDPGenRemoteSDPRecvDelay;
5672
+ var end = this.endLocalSDPGenRemoteSDPRecvDelay;
5673
+
5674
+ if (start && end) {
5675
+ var calculatedDelay = end - start;
5676
+ return calculatedDelay > _constants.METRICS_JOIN_TIMES_MAX_DURATION ? undefined : calculatedDelay;
5677
+ }
5678
+
5679
+ return undefined;
5680
+ }
5681
+ /**
5682
+ *
5683
+ * @returns {undefined}
5684
+ */
5685
+
5686
+ }, {
5687
+ key: "setStartCallInitiateJoinReq",
5688
+ value: function setStartCallInitiateJoinReq() {
5689
+ this.startCallInitiateJoinReq = performance.now();
5690
+ this.endCallInitiateJoinReq = undefined;
5691
+ }
5692
+ /**
5693
+ *
5694
+ * @returns {undefined}
5695
+ */
5696
+
5697
+ }, {
5698
+ key: "setEndCallInitiateJoinReq",
5699
+ value: function setEndCallInitiateJoinReq() {
5700
+ this.endCallInitiateJoinReq = performance.now();
5701
+ }
5702
+ /**
5703
+ *
5704
+ * @returns {string} duration between call initiate and sending join request to locus
5705
+ */
5706
+
5707
+ }, {
5708
+ key: "getCallInitiateJoinReq",
5709
+ value: function getCallInitiateJoinReq() {
5710
+ var start = this.startCallInitiateJoinReq;
5711
+ var end = this.endCallInitiateJoinReq;
5712
+
5713
+ if (start && end) {
5714
+ var calculatedDelay = end - start;
5715
+ return calculatedDelay > _constants.METRICS_JOIN_TIMES_MAX_DURATION ? undefined : calculatedDelay;
5716
+ }
5717
+
5718
+ return undefined;
5719
+ }
5720
+ /**
5721
+ *
5722
+ * @returns {undefined}
5723
+ */
5724
+
5725
+ }, {
5726
+ key: "setStartJoinReqResp",
5727
+ value: function setStartJoinReqResp() {
5728
+ this.startJoinReqResp = performance.now();
5729
+ this.endJoinReqResp = undefined;
5730
+ }
5731
+ /**
5732
+ *
5733
+ * @returns {undefined}
5734
+ */
5735
+
5736
+ }, {
5737
+ key: "setEndJoinReqResp",
5738
+ value: function setEndJoinReqResp() {
5739
+ this.endJoinReqResp = performance.now();
5740
+ }
5741
+ /**
5742
+ *
5743
+ * @returns {string} duration between sending locus join request and receiving join response
5744
+ */
5745
+
5746
+ }, {
5747
+ key: "getJoinReqResp",
5748
+ value: function getJoinReqResp() {
5749
+ var start = this.startJoinReqResp;
5750
+ var end = this.endJoinReqResp;
5751
+
5752
+ if (start && end) {
5753
+ var calculatedDelay = end - start;
5754
+ return calculatedDelay > _constants.METRICS_JOIN_TIMES_MAX_DURATION ? undefined : calculatedDelay;
5755
+ }
5756
+
5757
+ return undefined;
5758
+ }
5759
+ /**
5760
+ *
5761
+ * @returns {string} duration between call initiate and successful locus join (even if it is in lobby)
5762
+ */
5763
+
5764
+ }, {
5765
+ key: "getTotalJmt",
5766
+ value: function getTotalJmt() {
5767
+ var start = this.startCallInitiateJoinReq;
5768
+ var end = this.endJoinReqResp;
5769
+ return start && end ? end - start : undefined;
5770
+ }
5445
5771
  }]);
5446
5772
  return Meeting;
5447
5773
  }(_webexCore.StatelessWebexPlugin);