@webex/plugin-meetings 3.8.0-next.6 → 3.8.0-next.60

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 (156) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/common/errors/webex-errors.js +12 -2
  4. package/dist/common/errors/webex-errors.js.map +1 -1
  5. package/dist/config.js +1 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/constants.js +16 -121
  8. package/dist/constants.js.map +1 -1
  9. package/dist/controls-options-manager/enums.js +2 -0
  10. package/dist/controls-options-manager/enums.js.map +1 -1
  11. package/dist/controls-options-manager/types.js.map +1 -1
  12. package/dist/controls-options-manager/util.js +52 -0
  13. package/dist/controls-options-manager/util.js.map +1 -1
  14. package/dist/interpretation/index.js +1 -1
  15. package/dist/interpretation/siLanguage.js +1 -1
  16. package/dist/locus-info/controlsUtils.js +28 -10
  17. package/dist/locus-info/controlsUtils.js.map +1 -1
  18. package/dist/locus-info/index.js +20 -1
  19. package/dist/locus-info/index.js.map +1 -1
  20. package/dist/locus-info/selfUtils.js +405 -418
  21. package/dist/locus-info/selfUtils.js.map +1 -1
  22. package/dist/media/index.js +8 -16
  23. package/dist/media/index.js.map +1 -1
  24. package/dist/meeting/in-meeting-actions.js +13 -1
  25. package/dist/meeting/in-meeting-actions.js.map +1 -1
  26. package/dist/meeting/index.js +548 -288
  27. package/dist/meeting/index.js.map +1 -1
  28. package/dist/meeting/locusMediaRequest.js +0 -17
  29. package/dist/meeting/locusMediaRequest.js.map +1 -1
  30. package/dist/meeting/muteState.js +0 -2
  31. package/dist/meeting/muteState.js.map +1 -1
  32. package/dist/meeting/request.js +30 -0
  33. package/dist/meeting/request.js.map +1 -1
  34. package/dist/meeting/request.type.js.map +1 -1
  35. package/dist/meeting/util.js +13 -2
  36. package/dist/meeting/util.js.map +1 -1
  37. package/dist/meeting-info/meeting-info-v2.js +359 -60
  38. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  39. package/dist/meetings/index.js +91 -1
  40. package/dist/meetings/index.js.map +1 -1
  41. package/dist/meetings/util.js +14 -0
  42. package/dist/meetings/util.js.map +1 -1
  43. package/dist/member/index.js +10 -0
  44. package/dist/member/index.js.map +1 -1
  45. package/dist/member/util.js +3 -0
  46. package/dist/member/util.js.map +1 -1
  47. package/dist/members/index.js +23 -0
  48. package/dist/members/index.js.map +1 -1
  49. package/dist/members/request.js +21 -0
  50. package/dist/members/request.js.map +1 -1
  51. package/dist/members/util.js +15 -0
  52. package/dist/members/util.js.map +1 -1
  53. package/dist/metrics/constants.js +9 -0
  54. package/dist/metrics/constants.js.map +1 -1
  55. package/dist/reachability/clusterReachability.js +63 -27
  56. package/dist/reachability/clusterReachability.js.map +1 -1
  57. package/dist/reachability/index.js +112 -47
  58. package/dist/reachability/index.js.map +1 -1
  59. package/dist/reachability/reachability.types.js +14 -0
  60. package/dist/reachability/reachability.types.js.map +1 -1
  61. package/dist/reachability/request.js +19 -3
  62. package/dist/reachability/request.js.map +1 -1
  63. package/dist/reconnection-manager/index.js +2 -2
  64. package/dist/reconnection-manager/index.js.map +1 -1
  65. package/dist/recording-controller/util.js +5 -5
  66. package/dist/recording-controller/util.js.map +1 -1
  67. package/dist/roap/index.js.map +1 -1
  68. package/dist/roap/turnDiscovery.js +45 -27
  69. package/dist/roap/turnDiscovery.js.map +1 -1
  70. package/dist/roap/types.js +17 -0
  71. package/dist/roap/types.js.map +1 -0
  72. package/dist/types/common/errors/webex-errors.d.ts +7 -1
  73. package/dist/types/config.d.ts +1 -0
  74. package/dist/types/constants.d.ts +11 -85
  75. package/dist/types/controls-options-manager/enums.d.ts +3 -1
  76. package/dist/types/controls-options-manager/types.d.ts +7 -1
  77. package/dist/types/locus-info/index.d.ts +1 -0
  78. package/dist/types/locus-info/selfUtils.d.ts +247 -1
  79. package/dist/types/meeting/in-meeting-actions.d.ts +12 -0
  80. package/dist/types/meeting/index.d.ts +54 -1
  81. package/dist/types/meeting/muteState.d.ts +0 -1
  82. package/dist/types/meeting/request.d.ts +12 -1
  83. package/dist/types/meeting/request.type.d.ts +6 -0
  84. package/dist/types/meeting/util.d.ts +3 -1
  85. package/dist/types/meeting-info/meeting-info-v2.d.ts +80 -0
  86. package/dist/types/meetings/index.d.ts +38 -0
  87. package/dist/types/member/index.d.ts +1 -0
  88. package/dist/types/members/index.d.ts +8 -0
  89. package/dist/types/members/request.d.ts +19 -0
  90. package/dist/types/members/util.d.ts +13 -0
  91. package/dist/types/metrics/constants.d.ts +9 -0
  92. package/dist/types/reachability/clusterReachability.d.ts +15 -7
  93. package/dist/types/reachability/index.d.ts +10 -1
  94. package/dist/types/reachability/reachability.types.d.ts +5 -0
  95. package/dist/types/roap/index.d.ts +3 -2
  96. package/dist/types/roap/turnDiscovery.d.ts +5 -17
  97. package/dist/types/roap/types.d.ts +16 -0
  98. package/dist/webinar/index.js +1 -1
  99. package/package.json +23 -23
  100. package/src/common/errors/webex-errors.ts +8 -1
  101. package/src/config.ts +1 -0
  102. package/src/constants.ts +18 -90
  103. package/src/controls-options-manager/enums.ts +2 -0
  104. package/src/controls-options-manager/types.ts +11 -1
  105. package/src/controls-options-manager/util.ts +62 -0
  106. package/src/locus-info/controlsUtils.ts +44 -14
  107. package/src/locus-info/index.ts +23 -1
  108. package/src/locus-info/selfUtils.ts +451 -447
  109. package/src/media/index.ts +11 -21
  110. package/src/meeting/in-meeting-actions.ts +24 -0
  111. package/src/meeting/index.ts +364 -92
  112. package/src/meeting/locusMediaRequest.ts +0 -18
  113. package/src/meeting/muteState.ts +0 -2
  114. package/src/meeting/request.ts +36 -1
  115. package/src/meeting/request.type.ts +7 -0
  116. package/src/meeting/util.ts +11 -2
  117. package/src/meeting-info/meeting-info-v2.ts +247 -6
  118. package/src/meetings/index.ts +107 -1
  119. package/src/meetings/util.ts +18 -0
  120. package/src/member/index.ts +11 -0
  121. package/src/member/util.ts +3 -0
  122. package/src/members/index.ts +25 -0
  123. package/src/members/request.ts +26 -0
  124. package/src/members/util.ts +16 -0
  125. package/src/metrics/constants.ts +9 -0
  126. package/src/reachability/clusterReachability.ts +73 -26
  127. package/src/reachability/index.ts +70 -1
  128. package/src/reachability/reachability.types.ts +6 -0
  129. package/src/reachability/request.ts +7 -0
  130. package/src/reconnection-manager/index.ts +2 -2
  131. package/src/recording-controller/util.ts +17 -13
  132. package/src/roap/index.ts +3 -7
  133. package/src/roap/turnDiscovery.ts +34 -39
  134. package/src/roap/types.ts +23 -0
  135. package/test/unit/spec/controls-options-manager/util.js +120 -0
  136. package/test/unit/spec/locus-info/controlsUtils.js +103 -9
  137. package/test/unit/spec/locus-info/index.js +28 -0
  138. package/test/unit/spec/media/index.ts +36 -16
  139. package/test/unit/spec/meeting/in-meeting-actions.ts +15 -4
  140. package/test/unit/spec/meeting/index.js +518 -34
  141. package/test/unit/spec/meeting/locusMediaRequest.ts +0 -30
  142. package/test/unit/spec/meeting/muteState.js +0 -2
  143. package/test/unit/spec/meeting/request.js +32 -1
  144. package/test/unit/spec/meeting/utils.js +119 -18
  145. package/test/unit/spec/meeting-info/meetinginfov2.js +443 -114
  146. package/test/unit/spec/meetings/index.js +120 -2
  147. package/test/unit/spec/member/index.js +7 -0
  148. package/test/unit/spec/member/util.js +24 -0
  149. package/test/unit/spec/members/index.js +103 -26
  150. package/test/unit/spec/members/request.js +45 -22
  151. package/test/unit/spec/members/utils.js +33 -0
  152. package/test/unit/spec/reachability/clusterReachability.ts +88 -56
  153. package/test/unit/spec/reachability/index.ts +101 -0
  154. package/test/unit/spec/reachability/request.js +47 -2
  155. package/test/unit/spec/reconnection-manager/index.js +4 -4
  156. package/test/unit/spec/roap/turnDiscovery.ts +110 -28
@@ -21,6 +21,7 @@ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/
21
21
  var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
22
22
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
23
23
  var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
24
+ var _isNan = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/number/is-nan"));
24
25
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
25
26
  var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
26
27
  var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
@@ -506,6 +507,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
506
507
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "allowMediaInLobby", void 0);
507
508
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "localShareInstanceId", void 0);
508
509
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "remoteShareInstanceId", void 0);
510
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "shareCAEventSentStatus", void 0);
509
511
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "turnDiscoverySkippedReason", void 0);
510
512
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "turnServerUsed", void 0);
511
513
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "areVoiceaEventsSetup", false);
@@ -560,6 +562,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
560
562
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "rtcMetrics", void 0);
561
563
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "uploadLogsTimer", void 0);
562
564
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "logUploadIntervalIndex", void 0);
565
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "mediaServerIp", void 0);
563
566
  /**
564
567
  * Callback called when a relay event is received from meeting LLM Connection
565
568
  * @param {RelayEvent} e Event object coming from LLM Connection
@@ -646,7 +649,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
646
649
  rawError: error
647
650
  }
648
651
  });
649
- } else if (error instanceof _internalMediaCore.Errors.SdpOfferHandlingError || error instanceof _internalMediaCore.Errors.SdpAnswerHandlingError) {
652
+ } else if (error instanceof _internalMediaCore.Errors.SdpOfferHandlingError) {
650
653
  sendBehavioralMetric(_constants2.default.PEERCONNECTION_FAILURE, error, _this.correlationId);
651
654
 
652
655
  // @ts-ignore
@@ -660,6 +663,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
660
663
  rawError: error
661
664
  }
662
665
  });
666
+ } else if (error instanceof _internalMediaCore.Errors.SdpAnswerHandlingError) {
667
+ sendBehavioralMetric(_constants2.default.PEERCONNECTION_FAILURE, error, _this.correlationId);
668
+
669
+ // @ts-ignore
670
+ _this.webex.internal.newMetrics.submitClientEvent({
671
+ name: 'client.media-engine.remote-sdp-received',
672
+ payload: {
673
+ canProceed: false
674
+ },
675
+ options: {
676
+ meetingId: _this.id,
677
+ rawError: error
678
+ }
679
+ });
680
+ if (_this.deferSDPAnswer) {
681
+ clearTimeout(_this.sdpResponseTimer);
682
+ _this.sdpResponseTimer = undefined;
683
+ _this.deferSDPAnswer.reject();
684
+ }
663
685
  } else if (error instanceof _internalMediaCore.Errors.SdpError) {
664
686
  // this covers also the case of Errors.IceGatheringError which extends Errors.SdpError
665
687
  sendBehavioralMetric(_constants2.default.INVALID_ICE_CANDIDATE, error, _this.correlationId);
@@ -685,6 +707,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
685
707
  */
686
708
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "roapMessageReceived", function (roapMessage) {
687
709
  var mediaServer = roapMessage.messageType === 'ANSWER' ? _util3.default.getMediaServer(roapMessage.sdp) : undefined;
710
+ var mediaServerIp = roapMessage.messageType === 'ANSWER' ? _util3.default.getMediaServerIp(roapMessage.sdp) : undefined;
688
711
  if (_this.isMultistream && mediaServer && mediaServer !== 'homer') {
689
712
  throw new _multistreamNotSupportedError.default("Client asked for multistream backend (Homer), but got ".concat(mediaServer, " instead"));
690
713
  }
@@ -692,6 +715,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
692
715
  if (mediaServer) {
693
716
  _this.mediaProperties.webrtcMediaConnection.mediaServer = mediaServer;
694
717
  }
718
+ if (_this.isMultistream && mediaServerIp) {
719
+ _this.mediaServerIp = mediaServerIp;
720
+ }
695
721
  });
696
722
  /**
697
723
  * This function makes sure we send the right metrics when local and remote SDPs are processed/generated
@@ -1034,18 +1060,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1034
1060
  * @memberof Meetings
1035
1061
  */
1036
1062
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "setupStatsAnalyzerEventHandlers", function () {
1037
- _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.MEDIA_QUALITY, function (options) {
1038
- var _this$webex$meetings$;
1039
- // TODO: might have to send the same event to the developer
1040
- // Add ip address info if geo hint is present
1041
- // @ts-ignore fix type
1042
- options.data.intervalMetadata.peerReflexiveIP =
1043
- // @ts-ignore
1044
- ((_this$webex$meetings$ = _this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$ === void 0 ? void 0 : _this$webex$meetings$.clientAddress) || options.data.intervalMetadata.peerReflexiveIP || _constants.MQA_STATS.DEFAULT_IP;
1045
- var members = _this.getMembers().membersCollection.members;
1063
+ _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.MEDIA_QUALITY, function (event) {
1064
+ // Add IP address from geoHintInfo if missing.
1065
+ if (event.data.intervalMetadata.maskedPeerReflexiveIP === '0.0.0.0') {
1066
+ var _this$webex$meetings$;
1067
+ // @ts-ignore fix type
1068
+ var clientAddressFromGeoHint = (_this$webex$meetings$ = _this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$ === void 0 ? void 0 : _this$webex$meetings$.clientAddress;
1069
+ if (clientAddressFromGeoHint) {
1070
+ event.data.intervalMetadata.maskedPeerReflexiveIP = _internalPluginMetrics.CallDiagnosticUtils.anonymizeIPAddress(clientAddressFromGeoHint);
1071
+ }
1072
+ }
1046
1073
 
1047
- // Count members that are in the meeting
1048
- options.data.intervalMetadata.meetingUserCount = (0, _values.default)(members).filter(function (member) {
1074
+ // Count members that are in the meeting.
1075
+ var members = _this.getMembers().membersCollection.members;
1076
+ event.data.intervalMetadata.meetingUserCount = (0, _values.default)(members).filter(function (member) {
1049
1077
  return member.isInMeeting;
1050
1078
  }).length;
1051
1079
 
@@ -1054,10 +1082,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1054
1082
  name: 'client.mediaquality.event',
1055
1083
  options: {
1056
1084
  meetingId: _this.id,
1057
- networkType: options.data.networkType
1085
+ networkType: _this.statsAnalyzer.getNetworkType()
1058
1086
  },
1059
1087
  payload: {
1060
- intervals: [options.data]
1088
+ intervals: [event.data]
1061
1089
  }
1062
1090
  });
1063
1091
  });
@@ -1066,85 +1094,101 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1066
1094
  file: 'meeting/index',
1067
1095
  function: 'addMedia'
1068
1096
  }, _constants.EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED, data);
1069
- // @ts-ignore
1070
- _this.webex.internal.newMetrics.submitClientEvent({
1071
- name: 'client.media.tx.start',
1072
- payload: {
1073
- mediaType: data.mediaType,
1074
- shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1075
- },
1076
- options: {
1077
- meetingId: _this.id
1097
+ if (data.mediaType !== 'share' || !_this.shareCAEventSentStatus.transmitStart) {
1098
+ // @ts-ignore
1099
+ _this.webex.internal.newMetrics.submitClientEvent({
1100
+ name: 'client.media.tx.start',
1101
+ payload: {
1102
+ mediaType: data.mediaType,
1103
+ shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1104
+ },
1105
+ options: {
1106
+ meetingId: _this.id
1107
+ }
1108
+ });
1109
+ if (data.mediaType === 'share') {
1110
+ _this.shareCAEventSentStatus.transmitStart = true;
1078
1111
  }
1079
- });
1112
+ }
1080
1113
  });
1081
1114
  _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.LOCAL_MEDIA_STOPPED, function (data) {
1082
- // @ts-ignore
1083
- _this.webex.internal.newMetrics.submitClientEvent({
1084
- name: 'client.media.tx.stop',
1085
- payload: {
1086
- mediaType: data.mediaType,
1087
- shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1088
- },
1089
- options: {
1090
- meetingId: _this.id
1115
+ if (data.mediaType !== 'share' || !_this.shareCAEventSentStatus.transmitStop) {
1116
+ // @ts-ignore
1117
+ _this.webex.internal.newMetrics.submitClientEvent({
1118
+ name: 'client.media.tx.stop',
1119
+ payload: {
1120
+ mediaType: data.mediaType,
1121
+ shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1122
+ },
1123
+ options: {
1124
+ meetingId: _this.id
1125
+ }
1126
+ });
1127
+ if (data.mediaType === 'share') {
1128
+ _this.shareCAEventSentStatus.transmitStop = true;
1091
1129
  }
1092
- });
1130
+ }
1093
1131
  });
1094
1132
  _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED, function (data) {
1095
1133
  _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
1096
1134
  file: 'meeting/index',
1097
1135
  function: 'addMedia'
1098
1136
  }, _constants.EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED, data);
1099
- // @ts-ignore
1100
- _this.webex.internal.newMetrics.submitClientEvent({
1101
- name: 'client.media.rx.start',
1102
- payload: {
1103
- mediaType: data.mediaType,
1104
- shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1105
- },
1106
- options: {
1107
- meetingId: _this.id
1108
- }
1109
- });
1110
- if (data.mediaType === 'share') {
1137
+ if (data.mediaType !== 'share' || !_this.shareCAEventSentStatus.receiveStart) {
1111
1138
  // @ts-ignore
1112
1139
  _this.webex.internal.newMetrics.submitClientEvent({
1113
- name: 'client.media.render.start',
1140
+ name: 'client.media.rx.start',
1114
1141
  payload: {
1115
- mediaType: 'share',
1116
- shareInstanceId: _this.remoteShareInstanceId
1142
+ mediaType: data.mediaType,
1143
+ shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1117
1144
  },
1118
1145
  options: {
1119
1146
  meetingId: _this.id
1120
1147
  }
1121
1148
  });
1149
+ if (data.mediaType === 'share') {
1150
+ // @ts-ignore
1151
+ _this.webex.internal.newMetrics.submitClientEvent({
1152
+ name: 'client.media.render.start',
1153
+ payload: {
1154
+ mediaType: 'share',
1155
+ shareInstanceId: _this.remoteShareInstanceId
1156
+ },
1157
+ options: {
1158
+ meetingId: _this.id
1159
+ }
1160
+ });
1161
+ _this.shareCAEventSentStatus.receiveStart = true;
1162
+ }
1122
1163
  }
1123
1164
  });
1124
1165
  _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.REMOTE_MEDIA_STOPPED, function (data) {
1125
- // @ts-ignore
1126
- _this.webex.internal.newMetrics.submitClientEvent({
1127
- name: 'client.media.rx.stop',
1128
- payload: {
1129
- mediaType: data.mediaType,
1130
- shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1131
- },
1132
- options: {
1133
- meetingId: _this.id
1134
- }
1135
- });
1136
- if (data.mediaType === 'share') {
1166
+ if (data.mediaType !== 'share' || !_this.shareCAEventSentStatus.receiveStop) {
1137
1167
  // @ts-ignore
1138
1168
  _this.webex.internal.newMetrics.submitClientEvent({
1139
- name: 'client.media.render.stop',
1169
+ name: 'client.media.rx.stop',
1140
1170
  payload: {
1141
- mediaType: 'share',
1142
- shareInstanceId: _this.remoteShareInstanceId
1171
+ mediaType: data.mediaType,
1172
+ shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1143
1173
  },
1144
1174
  options: {
1145
1175
  meetingId: _this.id
1146
1176
  }
1147
1177
  });
1178
+ if (data.mediaType === 'share') {
1179
+ // @ts-ignore
1180
+ _this.webex.internal.newMetrics.submitClientEvent({
1181
+ name: 'client.media.render.stop',
1182
+ payload: {
1183
+ mediaType: 'share',
1184
+ shareInstanceId: _this.remoteShareInstanceId
1185
+ },
1186
+ options: {
1187
+ meetingId: _this.id
1188
+ }
1189
+ });
1190
+ _this.shareCAEventSentStatus.receiveStop = true;
1191
+ }
1148
1192
  }
1149
1193
  });
1150
1194
  });
@@ -1282,8 +1326,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1282
1326
  * @returns {undefined}
1283
1327
  */
1284
1328
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "handleShareVideoStreamMuteStateChange", function (muted) {
1285
- var _this$statsAnalyzer, _this$mediaProperties3, _this$mediaProperties4;
1329
+ var _this$mediaProperties3, _this$mediaProperties4, _this$statsAnalyzer;
1286
1330
  _loggerProxy.default.logger.log("Meeting:index#handleShareVideoStreamMuteStateChange --> Share video stream mute state changed to muted ".concat(muted));
1331
+ var shareVideoStreamSettings = (_this$mediaProperties3 = _this.mediaProperties) === null || _this$mediaProperties3 === void 0 ? void 0 : (_this$mediaProperties4 = _this$mediaProperties3.shareVideoStream) === null || _this$mediaProperties4 === void 0 ? void 0 : _this$mediaProperties4.getSettings();
1287
1332
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE, {
1288
1333
  correlationId: _this.correlationId,
1289
1334
  muted: muted,
@@ -1292,8 +1337,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1292
1337
  // SDK to TypeScript 5, which may affect other packages, use bracket notation for now, since
1293
1338
  // all we're doing here is adding metrics.
1294
1339
  // eslint-disable-next-line dot-notation
1295
- displaySurface: (_this$mediaProperties3 = _this.mediaProperties) === null || _this$mediaProperties3 === void 0 ? void 0 : (_this$mediaProperties4 = _this$mediaProperties3.shareVideoStream) === null || _this$mediaProperties4 === void 0 ? void 0 : _this$mediaProperties4.getSettings()['displaySurface'],
1296
- isMultistream: _this.isMultistream
1340
+ displaySurface: shareVideoStreamSettings === null || shareVideoStreamSettings === void 0 ? void 0 : shareVideoStreamSettings['displaySurface'],
1341
+ isMultistream: _this.isMultistream,
1342
+ frameRate: shareVideoStreamSettings === null || shareVideoStreamSettings === void 0 ? void 0 : shareVideoStreamSettings.frameRate
1297
1343
  });
1298
1344
  });
1299
1345
  /**
@@ -2084,6 +2130,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2084
2130
  */
2085
2131
  _this.remoteShareInstanceId = null;
2086
2132
 
2133
+ /**
2134
+ * Status used for ensuring we do not oversend metrics
2135
+ * @instance
2136
+ * @private
2137
+ * @memberof Meeting
2138
+ */
2139
+ _this.shareCAEventSentStatus = {
2140
+ transmitStart: false,
2141
+ transmitStop: false,
2142
+ receiveStart: false,
2143
+ receiveStop: false
2144
+ };
2145
+
2087
2146
  /**
2088
2147
  * The class that helps to control recording functions: start, stop, pause, resume, etc
2089
2148
  * @instance
@@ -2245,6 +2304,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2245
2304
  * @memberof Meeting
2246
2305
  */
2247
2306
  (0, _classPrivateFieldSet2.default)((0, _assertThisInitialized2.default)(_this), _isoLocalClientMeetingJoinTime, undefined);
2307
+
2308
+ // We clear the error cache of CA events on every new meeting instance
2309
+ // @ts-ignore - Fix type
2310
+ _this.webex.internal.newMetrics.callDiagnosticMetrics.clearErrorCache();
2311
+
2312
+ /**
2313
+ * IP Address of the remote media server
2314
+ * @instance
2315
+ * @type {string}
2316
+ * @private
2317
+ * @memberof Meeting
2318
+ */
2319
+ _this.mediaServerIp = undefined;
2248
2320
  return _this;
2249
2321
  }
2250
2322
 
@@ -2303,6 +2375,44 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2303
2375
  this.callStateForMetrics.correlationId = correlationId;
2304
2376
  }
2305
2377
 
2378
+ /**
2379
+ * Getter - Returns callStateForMetrics.userNameInput
2380
+ * @returns {string}
2381
+ */
2382
+ }, {
2383
+ key: "userNameInput",
2384
+ get: function get() {
2385
+ var _this$callStateForMet;
2386
+ return (_this$callStateForMet = this.callStateForMetrics) === null || _this$callStateForMet === void 0 ? void 0 : _this$callStateForMet.userNameInput;
2387
+ }
2388
+
2389
+ /**
2390
+ * Setter - sets callStateForMetrics.userNameInput
2391
+ * @param {string} userNameInput
2392
+ */,
2393
+ set: function set(userNameInput) {
2394
+ this.callStateForMetrics.userNameInput = userNameInput;
2395
+ }
2396
+
2397
+ /**
2398
+ * Getter - Returns callStateForMetrics.emailInput
2399
+ * @returns {string}
2400
+ */
2401
+ }, {
2402
+ key: "emailInput",
2403
+ get: function get() {
2404
+ var _this$callStateForMet2;
2405
+ return (_this$callStateForMet2 = this.callStateForMetrics) === null || _this$callStateForMet2 === void 0 ? void 0 : _this$callStateForMet2.emailInput;
2406
+ }
2407
+
2408
+ /**
2409
+ * Setter - sets callStateForMetrics.emailInput
2410
+ * @param {string} emailInput
2411
+ */,
2412
+ set: function set(emailInput) {
2413
+ this.callStateForMetrics.emailInput = emailInput;
2414
+ }
2415
+
2306
2416
  /**
2307
2417
  * Getter - Returns callStateForMetrics.sessionCorrelationId
2308
2418
  * @returns {string}
@@ -2332,6 +2442,31 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2332
2442
  return (0, _classPrivateFieldGet2.default)(this, _isoLocalClientMeetingJoinTime);
2333
2443
  }
2334
2444
 
2445
+ /**
2446
+ * Setter - sets isoLocalClientMeetingJoinTime
2447
+ * This will be set once on meeting join, and not updated again
2448
+ * this will always produce an ISO string
2449
+ * If the iso string is invalid, it will fallback to the current system time
2450
+ * @param {string | undefined} time
2451
+ */,
2452
+ set: function set(time) {
2453
+ var fallback = new Date().toISOString();
2454
+ if (!time) {
2455
+ (0, _classPrivateFieldSet2.default)(this, _isoLocalClientMeetingJoinTime, fallback);
2456
+ } else {
2457
+ var date = new Date(time);
2458
+
2459
+ // Check if the date is valid
2460
+ if ((0, _isNan.default)(date.getTime())) {
2461
+ _loggerProxy.default.logger.info( // @ts-ignore
2462
+ "Meeting:index#isoLocalClientMeetingJoinTime --> Invalid date provided: ".concat(time, ". Falling back to system clock."));
2463
+ (0, _classPrivateFieldSet2.default)(this, _isoLocalClientMeetingJoinTime, fallback);
2464
+ } else {
2465
+ (0, _classPrivateFieldSet2.default)(this, _isoLocalClientMeetingJoinTime, date.toISOString());
2466
+ }
2467
+ }
2468
+ }
2469
+
2335
2470
  /**
2336
2471
  * Set meeting info and trigger `MEETING_INFO_AVAILABLE` event
2337
2472
  * @param {any} info
@@ -3391,6 +3526,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3391
3526
  state: state
3392
3527
  });
3393
3528
  });
3529
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED, function (_ref27) {
3530
+ var state = _ref27.state;
3531
+ _triggerProxy.default.trigger(_this14, {
3532
+ file: 'meeting/index',
3533
+ function: 'setupLocusControlsListener'
3534
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_ANNOTATION_UPDATED, {
3535
+ state: state
3536
+ });
3537
+ });
3538
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED, function (_ref28) {
3539
+ var state = _ref28.state;
3540
+ _triggerProxy.default.trigger(_this14, {
3541
+ file: 'meeting/index',
3542
+ function: 'setupLocusControlsListener'
3543
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_REMOTE_DESKTOP_CONTROL_UPDATED, {
3544
+ state: state
3545
+ });
3546
+ });
3394
3547
  }
3395
3548
 
3396
3549
  /**
@@ -3430,7 +3583,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3430
3583
  var _this15 = this;
3431
3584
  // Will get triggered on local and remote share
3432
3585
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, /*#__PURE__*/function () {
3433
- var _ref27 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3586
+ var _ref29 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3434
3587
  var _payload$previous, _payload$previous2;
3435
3588
  var _payload$current, contentShare, whiteboardShare, previousContentShare, previousWhiteboardShare, newShareStatus, _this15$locusInfo, _this15$locusInfo$inf, _this15$webinar, oldShareStatus, sendStartedSharingRemote, _this15$mediaProperti;
3436
3589
  return _regenerator.default.wrap(function _callee8$(_context8) {
@@ -3516,6 +3669,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3516
3669
  case 26:
3517
3670
  sendStartedSharingRemote = function sendStartedSharingRemote() {
3518
3671
  _this15.remoteShareInstanceId = contentShare.shareInstanceId;
3672
+ _this15.shareCAEventSentStatus.receiveStart = false;
3673
+ _this15.shareCAEventSentStatus.receiveStop = false;
3519
3674
  _triggerProxy.default.trigger(_this15, {
3520
3675
  file: 'meetings/index',
3521
3676
  function: 'remoteShare'
@@ -3589,6 +3744,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3589
3744
  // if we got here, then some remote participant has stolen
3590
3745
  // the presentation from another remote participant
3591
3746
  _this15.remoteShareInstanceId = contentShare.shareInstanceId;
3747
+ _this15.shareCAEventSentStatus.receiveStart = false;
3748
+ _this15.shareCAEventSentStatus.receiveStop = false;
3592
3749
  _triggerProxy.default.trigger(_this15, {
3593
3750
  file: 'meetings/index',
3594
3751
  function: 'remoteShare'
@@ -3629,7 +3786,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3629
3786
  }, _callee8, null, [[27,, 31, 34]]);
3630
3787
  }));
3631
3788
  return function (_x8) {
3632
- return _ref27.apply(this, arguments);
3789
+ return _ref29.apply(this, arguments);
3633
3790
  };
3634
3791
  }());
3635
3792
  }
@@ -3743,8 +3900,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3743
3900
  });
3744
3901
  }
3745
3902
  });
3746
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref28) {
3747
- var isInitializing = _ref28.isInitializing;
3903
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref30) {
3904
+ var isInitializing = _ref30.isInitializing;
3748
3905
  _this19.updateMeetingActions();
3749
3906
  _this19.recordingController.setDisplayHints(_this19.userDisplayHints);
3750
3907
  _this19.recordingController.setUserPolicy(_this19.selfUserPolicies);
@@ -3882,7 +4039,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3882
4039
  _this21.updateLLMConnection();
3883
4040
  });
3884
4041
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, /*#__PURE__*/function () {
3885
- var _ref29 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
4042
+ var _ref31 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
3886
4043
  var _this21$rtcMetrics;
3887
4044
  return _regenerator.default.wrap(function _callee9$(_context9) {
3888
4045
  while (1) switch (_context9.prev = _context9.next) {
@@ -3916,7 +4073,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3916
4073
  }, _callee9);
3917
4074
  }));
3918
4075
  return function (_x9) {
3919
- return _ref29.apply(this, arguments);
4076
+ return _ref31.apply(this, arguments);
3920
4077
  };
3921
4078
  }());
3922
4079
 
@@ -4035,7 +4192,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4035
4192
  }
4036
4193
  });
4037
4194
  this.locusInfo.on(_constants.EVENTS.DESTROY_MEETING, /*#__PURE__*/function () {
4038
- var _ref30 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4195
+ var _ref32 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4039
4196
  return _regenerator.default.wrap(function _callee10$(_context10) {
4040
4197
  while (1) switch (_context10.prev = _context10.next) {
4041
4198
  case 0:
@@ -4095,7 +4252,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4095
4252
  }, _callee10, null, [[8, 14]]);
4096
4253
  }));
4097
4254
  return function (_x10) {
4098
- return _ref30.apply(this, arguments);
4255
+ return _ref32.apply(this, arguments);
4099
4256
  };
4100
4257
  }());
4101
4258
  }
@@ -4197,6 +4354,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4197
4354
  key: "beRightBack",
4198
4355
  value: (function () {
4199
4356
  var _beRightBack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(enabled) {
4357
+ var _this24 = this;
4200
4358
  var errorMessage, error, _errorMessage, _error;
4201
4359
  return _regenerator.default.wrap(function _callee11$(_context11) {
4202
4360
  while (1) switch (_context11.prev = _context11.next) {
@@ -4219,7 +4377,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4219
4377
  _loggerProxy.default.logger.error(_error);
4220
4378
  return _context11.abrupt("return", _promise.default.reject(_error));
4221
4379
  case 10:
4222
- return _context11.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager));
4380
+ return _context11.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager).then(function () {
4381
+ if (_this24.audio && enabled) {
4382
+ // locus mutes the participant with brb enabled request,
4383
+ // so we need to explicitly update remote mute for correct logic flow
4384
+ _this24.audio.handleServerRemoteMuteUpdate(_this24, enabled);
4385
+ }
4386
+ }));
4223
4387
  case 11:
4224
4388
  case "end":
4225
4389
  return _context11.stop();
@@ -4405,7 +4569,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4405
4569
  canAdmitParticipant: _util2.default.canAdmitParticipant(this.userDisplayHints),
4406
4570
  canLock: _util2.default.canUserLock(this.userDisplayHints),
4407
4571
  canUnlock: _util2.default.canUserUnlock(this.userDisplayHints),
4408
- canShareWhiteBoard: _util2.default.canShareWhiteBoard(this.userDisplayHints),
4572
+ canShareWhiteBoard: _util2.default.canShareWhiteBoard(this.userDisplayHints, this.selfUserPolicies),
4409
4573
  canSetDisallowUnmute: _util5.default.canSetDisallowUnmute(this.userDisplayHints),
4410
4574
  canUnsetDisallowUnmute: _util5.default.canUnsetDisallowUnmute(this.userDisplayHints),
4411
4575
  canSetMuteOnEntry: _util5.default.canSetMuteOnEntry(this.userDisplayHints),
@@ -4435,6 +4599,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4435
4599
  canSelectSpokenLanguages: _util2.default.canSelectSpokenLanguages(this.userDisplayHints),
4436
4600
  waitingForOthersToJoin: _util2.default.waitingForOthersToJoin(this.userDisplayHints),
4437
4601
  canSendReactions: _util2.default.canSendReactions(this.inMeetingActions.canSendReactions, this.userDisplayHints),
4602
+ requiresPostMeetingDataConsentPrompt: _util2.default.requiresPostMeetingDataConsentPrompt(this.userDisplayHints),
4438
4603
  canManageBreakout: _util2.default.canManageBreakout(this.userDisplayHints),
4439
4604
  canStartBreakout: _util2.default.canStartBreakout(this.userDisplayHints),
4440
4605
  canBroadcastMessageToBreakout: _util2.default.canBroadcastMessageToBreakout(this.userDisplayHints, this.selfUserPolicies),
@@ -4443,6 +4608,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4443
4608
  canUserAskForHelp: _util2.default.canUserAskForHelp(this.userDisplayHints),
4444
4609
  canUserRenameSelfAndObserved: _util2.default.canUserRenameSelfAndObserved(this.userDisplayHints),
4445
4610
  canUserRenameOthers: _util2.default.canUserRenameOthers(this.userDisplayHints),
4611
+ canMoveToLobby: _util2.default.canMoveToLobby(this.userDisplayHints),
4446
4612
  canMuteAll: _util5.default.hasHints({
4447
4613
  requiredHints: [_constants.DISPLAY_HINTS.MUTE_ALL],
4448
4614
  displayHints: this.userDisplayHints
@@ -4610,6 +4776,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4610
4776
  canAnnotate: _util5.default.hasPolicies({
4611
4777
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_ANNOTATION],
4612
4778
  policies: this.selfUserPolicies
4779
+ }),
4780
+ canEnableAnnotation: _util5.default.hasHints({
4781
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_ANNOTATION_MEETING_OPTION],
4782
+ displayHints: this.userDisplayHints
4783
+ }),
4784
+ canDisableAnnotation: _util5.default.hasHints({
4785
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_ANNOTATION_MEETING_OPTION],
4786
+ displayHints: this.userDisplayHints
4787
+ }),
4788
+ canEnableRemoteDesktopControl: _util5.default.hasHints({
4789
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_RDC_MEETING_OPTION],
4790
+ displayHints: this.userDisplayHints
4791
+ }),
4792
+ canDisableRemoteDesktopControl: _util5.default.hasHints({
4793
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_RDC_MEETING_OPTION],
4794
+ displayHints: this.userDisplayHints
4613
4795
  })
4614
4796
  }) || changed;
4615
4797
  }
@@ -4714,7 +4896,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4714
4896
  }, {
4715
4897
  key: "setLogUploadTimer",
4716
4898
  value: function setLogUploadTimer() {
4717
- var _this24 = this;
4899
+ var _this25 = this;
4718
4900
  // start with short timeouts and increase them later on so in case users have very long multi-hour meetings we don't get too fragmented logs
4719
4901
  var LOG_UPLOAD_INTERVALS = [0.1, 15, 30, 60]; // in minutes
4720
4902
 
@@ -4725,15 +4907,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4725
4907
  this.logUploadIntervalIndex += 1;
4726
4908
  }
4727
4909
  this.uploadLogsTimer = (0, _commonTimers.safeSetTimeout)(function () {
4728
- _this24.uploadLogsTimer = undefined;
4729
- _this24.uploadLogs();
4910
+ _this25.uploadLogsTimer = undefined;
4911
+ _this25.uploadLogs();
4730
4912
 
4731
4913
  // just as an extra precaution, to avoid uploading logs forever in case something goes wrong
4732
4914
  // and the page remains opened, we stop it if there is no media connection
4733
- if (!_this24.mediaProperties.webrtcMediaConnection) {
4915
+ if (!_this25.mediaProperties.webrtcMediaConnection) {
4734
4916
  return;
4735
4917
  }
4736
- _this24.setLogUploadTimer();
4918
+ _this25.setLogUploadTimer();
4737
4919
  }, delay);
4738
4920
  }
4739
4921
 
@@ -4800,7 +4982,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4800
4982
  }, {
4801
4983
  key: "closeRemoteStreams",
4802
4984
  value: function closeRemoteStreams() {
4803
- var _this25 = this;
4985
+ var _this26 = this;
4804
4986
  var _this$mediaProperties6 = this.mediaProperties,
4805
4987
  remoteAudioStream = _this$mediaProperties6.remoteAudioStream,
4806
4988
  remoteVideoStream = _this$mediaProperties6.remoteVideoStream,
@@ -4814,7 +4996,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4814
4996
  */
4815
4997
  // eslint-disable-next-line @typescript-eslint/no-shadow
4816
4998
  var triggerMediaStoppedEvent = function triggerMediaStoppedEvent(mediaType) {
4817
- _triggerProxy.default.trigger(_this25, {
4999
+ _triggerProxy.default.trigger(_this26, {
4818
5000
  file: 'meeting/index',
4819
5001
  function: 'closeRemoteStreams'
4820
5002
  }, _constants.EVENT_TRIGGERS.MEDIA_STOPPED, {
@@ -5122,7 +5304,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5122
5304
  }, {
5123
5305
  key: "setMercuryListener",
5124
5306
  value: function setMercuryListener() {
5125
- var _this26 = this;
5307
+ var _this27 = this;
5126
5308
  // Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury
5127
5309
  // if the meeting has active peer connections, it should try to reconnect.
5128
5310
  // @ts-ignore
@@ -5130,33 +5312,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5130
5312
  _loggerProxy.default.logger.info('Meeting:index#setMercuryListener --> Web socket online');
5131
5313
 
5132
5314
  // Only send restore event when it was disconnected before and for connected later
5133
- if (!_this26.hasWebsocketConnected) {
5315
+ if (!_this27.hasWebsocketConnected) {
5134
5316
  // @ts-ignore
5135
- _this26.webex.internal.newMetrics.submitClientEvent({
5317
+ _this27.webex.internal.newMetrics.submitClientEvent({
5136
5318
  name: 'client.mercury.connection.restored',
5137
5319
  options: {
5138
- meetingId: _this26.id
5320
+ meetingId: _this27.id
5139
5321
  }
5140
5322
  });
5141
5323
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_RESTORED, {
5142
- correlation_id: _this26.correlationId
5324
+ correlation_id: _this27.correlationId
5143
5325
  });
5144
5326
  }
5145
- _this26.hasWebsocketConnected = true;
5327
+ _this27.hasWebsocketConnected = true;
5146
5328
  });
5147
5329
 
5148
5330
  // @ts-ignore
5149
5331
  this.webex.internal.mercury.on(_constants.OFFLINE, function () {
5150
5332
  _loggerProxy.default.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
5151
5333
  // @ts-ignore
5152
- _this26.webex.internal.newMetrics.submitClientEvent({
5334
+ _this27.webex.internal.newMetrics.submitClientEvent({
5153
5335
  name: 'client.mercury.connection.lost',
5154
5336
  options: {
5155
- meetingId: _this26.id
5337
+ meetingId: _this27.id
5156
5338
  }
5157
5339
  });
5158
5340
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_FAILURE, {
5159
- correlation_id: _this26.correlationId
5341
+ correlation_id: _this27.correlationId
5160
5342
  });
5161
5343
  });
5162
5344
  }
@@ -5263,7 +5445,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5263
5445
  }, {
5264
5446
  key: "muteAudio",
5265
5447
  value: function muteAudio() {
5266
- var _this27 = this;
5448
+ var _this28 = this;
5267
5449
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5268
5450
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5269
5451
  }
@@ -5279,22 +5461,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5279
5461
 
5280
5462
  // First, stop sending the local audio media
5281
5463
  return logRequest(this.audio.handleClientRequest(this, true).then(function () {
5282
- _util2.default.handleAudioLogging(_this27.mediaProperties.audioStream);
5464
+ _util2.default.handleAudioLogging(_this28.mediaProperties.audioStream);
5283
5465
  // @ts-ignore
5284
- _this27.webex.internal.newMetrics.submitClientEvent({
5466
+ _this28.webex.internal.newMetrics.submitClientEvent({
5285
5467
  name: 'client.muted',
5286
5468
  payload: {
5287
5469
  trigger: 'user-interaction',
5288
5470
  mediaType: 'audio'
5289
5471
  },
5290
5472
  options: {
5291
- meetingId: _this27.id
5473
+ meetingId: _this28.id
5292
5474
  }
5293
5475
  });
5294
5476
  }).catch(function (error) {
5295
5477
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_AUDIO_FAILURE, {
5296
- correlation_id: _this27.correlationId,
5297
- locus_id: _this27.locusUrl.split('/').pop(),
5478
+ correlation_id: _this28.correlationId,
5479
+ locus_id: _this28.locusUrl.split('/').pop(),
5298
5480
  reason: error.message,
5299
5481
  stack: error.stack
5300
5482
  });
@@ -5313,7 +5495,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5313
5495
  }, {
5314
5496
  key: "unmuteAudio",
5315
5497
  value: function unmuteAudio() {
5316
- var _this28 = this;
5498
+ var _this29 = this;
5317
5499
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5318
5500
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5319
5501
  }
@@ -5329,22 +5511,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5329
5511
 
5330
5512
  // First, send the control to unmute the participant on the server
5331
5513
  return logRequest(this.audio.handleClientRequest(this, false).then(function () {
5332
- _util2.default.handleAudioLogging(_this28.mediaProperties.audioStream);
5514
+ _util2.default.handleAudioLogging(_this29.mediaProperties.audioStream);
5333
5515
  // @ts-ignore
5334
- _this28.webex.internal.newMetrics.submitClientEvent({
5516
+ _this29.webex.internal.newMetrics.submitClientEvent({
5335
5517
  name: 'client.unmuted',
5336
5518
  payload: {
5337
5519
  trigger: 'user-interaction',
5338
5520
  mediaType: 'audio'
5339
5521
  },
5340
5522
  options: {
5341
- meetingId: _this28.id
5523
+ meetingId: _this29.id
5342
5524
  }
5343
5525
  });
5344
5526
  }).catch(function (error) {
5345
5527
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_AUDIO_FAILURE, {
5346
- correlation_id: _this28.correlationId,
5347
- locus_id: _this28.locusUrl.split('/').pop(),
5528
+ correlation_id: _this29.correlationId,
5529
+ locus_id: _this29.locusUrl.split('/').pop(),
5348
5530
  reason: error.message,
5349
5531
  stack: error.stack
5350
5532
  });
@@ -5363,7 +5545,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5363
5545
  }, {
5364
5546
  key: "muteVideo",
5365
5547
  value: function muteVideo() {
5366
- var _this29 = this;
5548
+ var _this30 = this;
5367
5549
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5368
5550
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5369
5551
  }
@@ -5377,22 +5559,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5377
5559
  return _promise.default.reject(new _parameter.default('no video control associated to the meeting'));
5378
5560
  }
5379
5561
  return logRequest(this.video.handleClientRequest(this, true).then(function () {
5380
- _util2.default.handleVideoLogging(_this29.mediaProperties.videoStream);
5562
+ _util2.default.handleVideoLogging(_this30.mediaProperties.videoStream);
5381
5563
  // @ts-ignore
5382
- _this29.webex.internal.newMetrics.submitClientEvent({
5564
+ _this30.webex.internal.newMetrics.submitClientEvent({
5383
5565
  name: 'client.muted',
5384
5566
  payload: {
5385
5567
  trigger: 'user-interaction',
5386
5568
  mediaType: 'video'
5387
5569
  },
5388
5570
  options: {
5389
- meetingId: _this29.id
5571
+ meetingId: _this30.id
5390
5572
  }
5391
5573
  });
5392
5574
  }).catch(function (error) {
5393
5575
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_VIDEO_FAILURE, {
5394
- correlation_id: _this29.correlationId,
5395
- locus_id: _this29.locusUrl.split('/').pop(),
5576
+ correlation_id: _this30.correlationId,
5577
+ locus_id: _this30.locusUrl.split('/').pop(),
5396
5578
  reason: error.message,
5397
5579
  stack: error.stack
5398
5580
  });
@@ -5411,7 +5593,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5411
5593
  }, {
5412
5594
  key: "unmuteVideo",
5413
5595
  value: function unmuteVideo() {
5414
- var _this30 = this;
5596
+ var _this31 = this;
5415
5597
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5416
5598
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5417
5599
  }
@@ -5425,22 +5607,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5425
5607
  return _promise.default.reject(new _parameter.default('no audio control associated to the meeting'));
5426
5608
  }
5427
5609
  return logRequest(this.video.handleClientRequest(this, false).then(function () {
5428
- _util2.default.handleVideoLogging(_this30.mediaProperties.videoStream);
5610
+ _util2.default.handleVideoLogging(_this31.mediaProperties.videoStream);
5429
5611
  // @ts-ignore
5430
- _this30.webex.internal.newMetrics.submitClientEvent({
5612
+ _this31.webex.internal.newMetrics.submitClientEvent({
5431
5613
  name: 'client.unmuted',
5432
5614
  payload: {
5433
5615
  trigger: 'user-interaction',
5434
5616
  mediaType: 'video'
5435
5617
  },
5436
5618
  options: {
5437
- meetingId: _this30.id
5619
+ meetingId: _this31.id
5438
5620
  }
5439
5621
  });
5440
5622
  }).catch(function (error) {
5441
5623
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_VIDEO_FAILURE, {
5442
- correlation_id: _this30.correlationId,
5443
- locus_id: _this30.locusUrl.split('/').pop(),
5624
+ correlation_id: _this31.correlationId,
5625
+ locus_id: _this31.locusUrl.split('/').pop(),
5444
5626
  reason: error.message,
5445
5627
  stack: error.stack
5446
5628
  });
@@ -5470,7 +5652,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5470
5652
  key: "joinWithMedia",
5471
5653
  value: (function () {
5472
5654
  var _joinWithMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {
5473
- var _this31 = this;
5655
+ var _this32 = this;
5474
5656
  var options,
5475
5657
  mediaOptions,
5476
5658
  _options$joinOptions,
@@ -5553,7 +5735,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5553
5735
  case 35:
5554
5736
  _context16.next = 37;
5555
5737
  return this.addMediaInternal(function () {
5556
- return _this31.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5738
+ return _this32.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5557
5739
  }, turnServerInfo, forceTurnDiscovery, mediaOptions);
5558
5740
  case 37:
5559
5741
  mediaResponse = _context16.sent;
@@ -5648,7 +5830,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5648
5830
  }, {
5649
5831
  key: "reconnect",
5650
5832
  value: function reconnect(options) {
5651
- var _this32 = this;
5833
+ var _this33 = this;
5652
5834
  _loggerProxy.default.logger.log("Meeting:index#reconnect --> attempting to reconnect meeting ".concat(this.id));
5653
5835
  if (!this.reconnectionManager || !this.reconnectionManager.reconnect) {
5654
5836
  return _promise.default.reject(new _parameter.default('Cannot reconnect, ReconnectionManager must first be defined.'));
@@ -5664,10 +5846,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5664
5846
  while (1) switch (_context17.prev = _context17.next) {
5665
5847
  case 0:
5666
5848
  _context17.next = 2;
5667
- return _this32.waitForRemoteSDPAnswer();
5849
+ return _this33.waitForRemoteSDPAnswer();
5668
5850
  case 2:
5669
5851
  _context17.next = 4;
5670
- return _this32.waitForMediaConnectionConnected();
5852
+ return _this33.waitForMediaConnectionConnected();
5671
5853
  case 4:
5672
5854
  case "end":
5673
5855
  return _context17.stop();
@@ -5681,7 +5863,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5681
5863
  return _promise.default.resolve();
5682
5864
  }
5683
5865
  _loggerProxy.default.logger.error('Meeting:index#reconnect --> Meeting reconnect failed', error);
5684
- _this32.uploadLogs({
5866
+ _this33.uploadLogs({
5685
5867
  file: 'meeting/index',
5686
5868
  function: 'reconnect'
5687
5869
  });
@@ -5728,19 +5910,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5728
5910
  }, {
5729
5911
  key: "setCaptionLanguage",
5730
5912
  value: function setCaptionLanguage(language) {
5731
- var _this33 = this;
5913
+ var _this34 = this;
5732
5914
  return new _promise.default(function (resolve, reject) {
5733
- if (!_this33.isTranscriptionSupported()) {
5915
+ if (!_this34.isTranscriptionSupported()) {
5734
5916
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5735
5917
  reject(new Error('Webex Assistant is not enabled/supported'));
5736
5918
  }
5737
5919
  try {
5738
5920
  var voiceaListenerCaptionUpdate = function voiceaListenerCaptionUpdate(payload) {
5739
5921
  // @ts-ignore
5740
- _this33.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5922
+ _this34.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5741
5923
  var statusCode = payload.statusCode;
5742
5924
  if (statusCode === 200) {
5743
- _this33.transcription.languageOptions = _objectSpread(_objectSpread({}, _this33.transcription.languageOptions), {}, {
5925
+ _this34.transcription.languageOptions = _objectSpread(_objectSpread({}, _this34.transcription.languageOptions), {}, {
5744
5926
  currentCaptionLanguage: language
5745
5927
  });
5746
5928
  resolve(language);
@@ -5749,9 +5931,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5749
5931
  }
5750
5932
  };
5751
5933
  // @ts-ignore
5752
- _this33.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5934
+ _this34.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5753
5935
  // @ts-ignore
5754
- _this33.webex.internal.voicea.requestLanguage(language);
5936
+ _this34.webex.internal.voicea.requestLanguage(language);
5755
5937
  } catch (error) {
5756
5938
  _loggerProxy.default.logger.error("Meeting:index#setCaptionLanguage --> ".concat(error));
5757
5939
  reject(error);
@@ -5767,23 +5949,23 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5767
5949
  }, {
5768
5950
  key: "setSpokenLanguage",
5769
5951
  value: function setSpokenLanguage(language) {
5770
- var _this34 = this;
5952
+ var _this35 = this;
5771
5953
  return new _promise.default(function (resolve, reject) {
5772
- if (!_this34.isTranscriptionSupported()) {
5954
+ if (!_this35.isTranscriptionSupported()) {
5773
5955
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5774
5956
  reject(new Error('Webex Assistant is not enabled/supported'));
5775
5957
  }
5776
- if (_this34.getCurUserType() !== 'host') {
5958
+ if (_this35.getCurUserType() !== 'host') {
5777
5959
  _loggerProxy.default.logger.error('Meeting:index#setSpokenLanguage --> Only host can set spoken language');
5778
5960
  reject(new Error('Only host can set spoken language'));
5779
5961
  }
5780
5962
  try {
5781
5963
  var voiceaListenerLanguageUpdate = function voiceaListenerLanguageUpdate(payload) {
5782
5964
  // @ts-ignore
5783
- _this34.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5965
+ _this35.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5784
5966
  var languageCode = payload.languageCode;
5785
5967
  if (languageCode) {
5786
- _this34.transcription.languageOptions = _objectSpread(_objectSpread({}, _this34.transcription.languageOptions), {}, {
5968
+ _this35.transcription.languageOptions = _objectSpread(_objectSpread({}, _this35.transcription.languageOptions), {}, {
5787
5969
  currentSpokenLanguage: languageCode
5788
5970
  });
5789
5971
  resolve(languageCode);
@@ -5793,10 +5975,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5793
5975
  };
5794
5976
 
5795
5977
  // @ts-ignore
5796
- _this34.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5978
+ _this35.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5797
5979
 
5798
5980
  // @ts-ignore
5799
- _this34.webex.internal.voicea.setSpokenLanguage(language);
5981
+ _this35.webex.internal.voicea.setSpokenLanguage(language);
5800
5982
  } catch (error) {
5801
5983
  _loggerProxy.default.logger.error("Meeting:index#setSpokenLanguage --> ".concat(error));
5802
5984
  reject(error);
@@ -5919,7 +6101,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5919
6101
  */
5920
6102
  function () {
5921
6103
  var _join = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19() {
5922
- var _this35 = this;
6104
+ var _this36 = this;
5923
6105
  var options,
5924
6106
  errorMessage,
5925
6107
  error,
@@ -6068,62 +6250,61 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6068
6250
  return _context19.abrupt("return", _promise.default.reject(_context19.t0));
6069
6251
  case 51:
6070
6252
  return _context19.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
6071
- _this35.meetingFiniteStateMachine.join();
6072
- _this35.setupLocusMediaRequest();
6253
+ _this36.meetingFiniteStateMachine.join();
6254
+ _this36.setupLocusMediaRequest();
6073
6255
 
6074
6256
  // @ts-ignore
6075
- _this35.webex.internal.device.meetingStarted();
6076
- (0, _classPrivateFieldSet2.default)(_this35, _isoLocalClientMeetingJoinTime, new Date().toISOString());
6257
+ _this36.webex.internal.device.meetingStarted();
6077
6258
  _loggerProxy.default.logger.log('Meeting:index#join --> Success');
6078
6259
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_SUCCESS, {
6079
- correlation_id: _this35.correlationId
6260
+ correlation_id: _this36.correlationId
6080
6261
  });
6081
6262
  joinSuccess(join);
6082
- _this35.deferJoin = undefined;
6263
+ _this36.deferJoin = undefined;
6083
6264
  return join;
6084
6265
  }).catch(function (error) {
6085
- var _this35$meetingInfo, _error$error;
6086
- _this35.meetingFiniteStateMachine.fail(error);
6266
+ var _this36$meetingInfo, _error$error;
6267
+ _this36.meetingFiniteStateMachine.fail(error);
6087
6268
  _loggerProxy.default.logger.error('Meeting:index#join --> Failed', error);
6088
6269
 
6089
6270
  // @ts-ignore
6090
- _this35.webex.internal.newMetrics.submitClientEvent({
6271
+ _this36.webex.internal.newMetrics.submitClientEvent({
6091
6272
  name: 'client.locus.join.response',
6092
6273
  payload: {
6093
6274
  identifiers: {
6094
- meetingLookupUrl: (_this35$meetingInfo = _this35.meetingInfo) === null || _this35$meetingInfo === void 0 ? void 0 : _this35$meetingInfo.meetingLookupUrl
6275
+ meetingLookupUrl: (_this36$meetingInfo = _this36.meetingInfo) === null || _this36$meetingInfo === void 0 ? void 0 : _this36$meetingInfo.meetingLookupUrl
6095
6276
  }
6096
6277
  },
6097
6278
  options: {
6098
- meetingId: _this35.id,
6279
+ meetingId: _this36.id,
6099
6280
  rawError: error
6100
6281
  }
6101
6282
  });
6102
6283
 
6103
6284
  // TODO: change this to error codes and pre defined dictionary
6104
6285
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_FAILURE, {
6105
- correlation_id: _this35.correlationId,
6286
+ correlation_id: _this36.correlationId,
6106
6287
  reason: (_error$error = error.error) === null || _error$error === void 0 ? void 0 : _error$error.message,
6107
6288
  stack: error.stack
6108
6289
  });
6109
6290
 
6110
6291
  // Upload logs on join Failure
6111
- _triggerProxy.default.trigger(_this35, {
6292
+ _triggerProxy.default.trigger(_this36, {
6112
6293
  file: 'meeting/index',
6113
6294
  function: 'join'
6114
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this35);
6295
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this36);
6115
6296
  joinFailed(error);
6116
- _this35.deferJoin = undefined;
6297
+ _this36.deferJoin = undefined;
6117
6298
  return _promise.default.reject(error);
6118
6299
  }).then(function (join) {
6119
6300
  // @ts-ignore - config coming from registerPlugin
6120
- if (_this35.config.enableAutomaticLLM) {
6301
+ if (_this36.config.enableAutomaticLLM) {
6121
6302
  // @ts-ignore
6122
- _this35.webex.internal.llm.on('online', _this35.handleLLMOnline);
6123
- _this35.updateLLMConnection().catch(function (error) {
6303
+ _this36.webex.internal.llm.on('online', _this36.handleLLMOnline);
6304
+ _this36.updateLLMConnection().catch(function (error) {
6124
6305
  _loggerProxy.default.logger.error('Meeting:index#join --> Transcription Socket Connection Failed', error);
6125
6306
  _metrics.default.sendBehavioralMetric(_constants2.default.LLM_CONNECTION_AFTER_JOIN_FAILURE, {
6126
- correlation_id: _this35.correlationId,
6307
+ correlation_id: _this36.correlationId,
6127
6308
  reason: error === null || error === void 0 ? void 0 : error.message,
6128
6309
  stack: error.stack
6129
6310
  });
@@ -6155,7 +6336,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6155
6336
  key: "updateLLMConnection",
6156
6337
  value: (function () {
6157
6338
  var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20() {
6158
- var _this36 = this;
6339
+ var _this37 = this;
6159
6340
  var _this$locusInfo6, url, _this$locusInfo6$info, _this$locusInfo6$info2, datachannelUrl, practiceSessionDatachannelUrl, isJoined, dataChannelUrl;
6160
6341
  return _regenerator.default.wrap(function _callee20$(_context20) {
6161
6342
  while (1) switch (_context20.prev = _context20.next) {
@@ -6195,9 +6376,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6195
6376
  case 11:
6196
6377
  return _context20.abrupt("return", this.webex.internal.llm.registerAndConnect(url, dataChannelUrl).then(function (registerAndConnectResult) {
6197
6378
  // @ts-ignore - Fix type
6198
- _this36.webex.internal.llm.off('event:relay.event', _this36.processRelayEvent);
6379
+ _this37.webex.internal.llm.off('event:relay.event', _this37.processRelayEvent);
6199
6380
  // @ts-ignore - Fix type
6200
- _this36.webex.internal.llm.on('event:relay.event', _this36.processRelayEvent);
6381
+ _this37.webex.internal.llm.on('event:relay.event', _this37.processRelayEvent);
6201
6382
  _loggerProxy.default.logger.info('Meeting:index#updateLLMConnection --> enabled to receive relay events!');
6202
6383
  return _promise.default.resolve(registerAndConnectResult);
6203
6384
  }));
@@ -6251,7 +6432,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6251
6432
  }, {
6252
6433
  key: "dialInPstn",
6253
6434
  value: function dialInPstn() {
6254
- var _this37 = this;
6435
+ var _this38 = this;
6255
6436
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial in devices from being provisioned
6256
6437
 
6257
6438
  var correlationId = this.correlationId,
@@ -6267,10 +6448,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6267
6448
  }).catch(function (error) {
6268
6449
  var _error$error2;
6269
6450
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_IN_FAILURE, {
6270
- correlation_id: _this37.correlationId,
6271
- dial_in_url: _this37.dialInUrl,
6451
+ correlation_id: _this38.correlationId,
6452
+ dial_in_url: _this38.dialInUrl,
6272
6453
  locus_id: locusUrl.split('/').pop(),
6273
- client_url: _this37.deviceUrl,
6454
+ client_url: _this38.deviceUrl,
6274
6455
  reason: (_error$error2 = error.error) === null || _error$error2 === void 0 ? void 0 : _error$error2.message,
6275
6456
  stack: error.stack
6276
6457
  });
@@ -6288,7 +6469,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6288
6469
  }, {
6289
6470
  key: "dialOutPstn",
6290
6471
  value: function dialOutPstn(phoneNumber) {
6291
- var _this38 = this;
6472
+ var _this39 = this;
6292
6473
  if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial out devices from being provisioned
6293
6474
 
6294
6475
  var correlationId = this.correlationId,
@@ -6305,10 +6486,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6305
6486
  }).catch(function (error) {
6306
6487
  var _error$error3;
6307
6488
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_OUT_FAILURE, {
6308
- correlation_id: _this38.correlationId,
6309
- dial_out_url: _this38.dialOutUrl,
6489
+ correlation_id: _this39.correlationId,
6490
+ dial_out_url: _this39.dialOutUrl,
6310
6491
  locus_id: locusUrl.split('/').pop(),
6311
- client_url: _this38.deviceUrl,
6492
+ client_url: _this39.deviceUrl,
6312
6493
  reason: (_error$error3 = error.error) === null || _error$error3 === void 0 ? void 0 : _error$error3.message,
6313
6494
  stack: error.stack
6314
6495
  });
@@ -6339,7 +6520,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6339
6520
  }, {
6340
6521
  key: "moveTo",
6341
6522
  value: function moveTo(resourceId) {
6342
- var _this39 = this;
6523
+ var _this40 = this;
6343
6524
  if (!resourceId) {
6344
6525
  throw new _parameter.default('Cannot move call without a resourceId.');
6345
6526
  }
@@ -6383,12 +6564,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6383
6564
  while (1) switch (_context21.prev = _context21.next) {
6384
6565
  case 0:
6385
6566
  _context21.prev = 0;
6386
- if (!(_this39.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6567
+ if (!(_this40.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6387
6568
  _context21.next = 4;
6388
6569
  break;
6389
6570
  }
6390
6571
  _context21.next = 4;
6391
- return _this39.releaseScreenShareFloor();
6572
+ return _this40.releaseScreenShareFloor();
6392
6573
  case 4:
6393
6574
  mediaSettings = {
6394
6575
  mediaDirection: {
@@ -6400,37 +6581,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6400
6581
  receiveShare: true
6401
6582
  }
6402
6583
  };
6403
- _this39.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6404
- _this39.mediaProperties.unsetRemoteMedia();
6584
+ _this40.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6585
+ _this40.mediaProperties.unsetRemoteMedia();
6405
6586
 
6406
6587
  // when a move to is intiated by the client , Locus delets the existing media node from the server as soon the device answers the meeting
6407
6588
  // once the device answers we close the old connection and create new media server connection with only share enabled
6408
- if (!_this39.statsAnalyzer) {
6589
+ if (!_this40.statsAnalyzer) {
6409
6590
  _context21.next = 10;
6410
6591
  break;
6411
6592
  }
6412
6593
  _context21.next = 10;
6413
- return _this39.statsAnalyzer.stopAnalyzer();
6594
+ return _this40.statsAnalyzer.stopAnalyzer();
6414
6595
  case 10:
6415
6596
  _context21.next = 12;
6416
- return _this39.closeRemoteStreams();
6597
+ return _this40.closeRemoteStreams();
6417
6598
  case 12:
6418
6599
  _context21.next = 14;
6419
- return _this39.closePeerConnections();
6600
+ return _this40.closePeerConnections();
6420
6601
  case 14:
6421
- _this39.cleanupLocalStreams();
6422
- _this39.unsetRemoteStreams();
6423
- _this39.unsetPeerConnections();
6424
- _this39.reconnectionManager.cleanUp();
6602
+ _this40.cleanupLocalStreams();
6603
+ _this40.unsetRemoteStreams();
6604
+ _this40.unsetPeerConnections();
6605
+ _this40.reconnectionManager.cleanUp();
6425
6606
  _context21.next = 20;
6426
- return _this39.addMedia({
6607
+ return _this40.addMedia({
6427
6608
  audioEnabled: false,
6428
6609
  videoEnabled: false,
6429
6610
  shareVideoEnabled: true
6430
6611
  });
6431
6612
  case 20:
6432
6613
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
6433
- _this39.isMoveToInProgress = false;
6614
+ _this40.isMoveToInProgress = false;
6434
6615
  _context21.next = 29;
6435
6616
  break;
6436
6617
  case 24:
@@ -6438,12 +6619,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6438
6619
  _context21.t0 = _context21["catch"](0);
6439
6620
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context21.t0);
6440
6621
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6441
- correlation_id: _this39.correlationId,
6442
- locus_id: _this39.locusUrl.split('/').pop(),
6622
+ correlation_id: _this40.correlationId,
6623
+ locus_id: _this40.locusUrl.split('/').pop(),
6443
6624
  reason: _context21.t0.message,
6444
6625
  stack: _context21.t0.stack
6445
6626
  });
6446
- _this39.isMoveToInProgress = false;
6627
+ _this40.isMoveToInProgress = false;
6447
6628
  case 29:
6448
6629
  case "end":
6449
6630
  return _context21.stop();
@@ -6459,17 +6640,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6459
6640
  resourceId: resourceId,
6460
6641
  moveToResource: true
6461
6642
  }).then(function () {
6462
- _this39.meetingFiniteStateMachine.join();
6643
+ _this40.meetingFiniteStateMachine.join();
6463
6644
  }).catch(function (error) {
6464
- _this39.meetingFiniteStateMachine.fail(error);
6645
+ _this40.meetingFiniteStateMachine.fail(error);
6465
6646
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6466
- correlation_id: _this39.correlationId,
6467
- locus_id: _this39.locusUrl.split('/').pop(),
6647
+ correlation_id: _this40.correlationId,
6648
+ locus_id: _this40.locusUrl.split('/').pop(),
6468
6649
  reason: error.message,
6469
6650
  stack: error.stack
6470
6651
  });
6471
6652
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
6472
- _this39.isMoveToInProgress = false;
6653
+ _this40.isMoveToInProgress = false;
6473
6654
  return _promise.default.reject(error);
6474
6655
  });
6475
6656
  }
@@ -6484,7 +6665,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6484
6665
  }, {
6485
6666
  key: "moveFrom",
6486
6667
  value: function moveFrom(resourceId) {
6487
- var _this40 = this;
6668
+ var _this41 = this;
6488
6669
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
6489
6670
  if (!resourceId) {
6490
6671
  throw new _parameter.default('Cannot move call without a resourceId.');
@@ -6499,19 +6680,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6499
6680
  }
6500
6681
  });
6501
6682
  return _util2.default.joinMeetingOptions(this).then(function () {
6502
- return _util2.default.leaveMeeting(_this40, {
6683
+ return _util2.default.leaveMeeting(_this41, {
6503
6684
  resourceId: resourceId,
6504
6685
  correlationId: oldCorrelationId,
6505
6686
  moveMeeting: true
6506
6687
  }).then(function () {
6507
- _this40.resourceId = '';
6688
+ _this41.resourceId = '';
6508
6689
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_SUCCESS);
6509
6690
  });
6510
6691
  }).catch(function (error) {
6511
- _this40.meetingFiniteStateMachine.fail(error);
6692
+ _this41.meetingFiniteStateMachine.fail(error);
6512
6693
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_FAILURE, {
6513
- correlation_id: _this40.correlationId,
6514
- locus_id: _this40.locusUrl.split('/').pop(),
6694
+ correlation_id: _this41.correlationId,
6695
+ locus_id: _this41.locusUrl.split('/').pop(),
6515
6696
  reason: error.message,
6516
6697
  stack: error.stack
6517
6698
  });
@@ -6560,7 +6741,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6560
6741
  turnServerInfo: turnServerInfo,
6561
6742
  bundlePolicy: bundlePolicy,
6562
6743
  // @ts-ignore - config coming from registerPlugin
6563
- iceCandidatesTimeout: this.config.iceCandidatesGatheringTimeout
6744
+ iceCandidatesTimeout: this.config.iceCandidatesGatheringTimeout,
6745
+ // @ts-ignore - config coming from registerPlugin
6746
+ disableAudioMainDtx: this.config.experimental.disableAudioMainDtx
6564
6747
  });
6565
6748
  this.mediaProperties.setMediaPeerConnection(mc);
6566
6749
  this.setupMediaConnectionListeners();
@@ -6627,9 +6810,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6627
6810
  }, {
6628
6811
  key: "forwardEvent",
6629
6812
  value: function forwardEvent(eventEmitter, eventTypeToForward, meetingEventType) {
6630
- var _this41 = this;
6813
+ var _this42 = this;
6631
6814
  eventEmitter.on(eventTypeToForward, function (data) {
6632
- return _triggerProxy.default.trigger(_this41, {
6815
+ return _triggerProxy.default.trigger(_this42, {
6633
6816
  file: 'meetings',
6634
6817
  function: 'addMedia'
6635
6818
  }, meetingEventType, data);
@@ -6699,7 +6882,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6699
6882
  key: "waitForMediaConnectionConnected",
6700
6883
  value: (function () {
6701
6884
  var _waitForMediaConnectionConnected = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24() {
6702
- var iceConnected, _this$mediaProperties8, _this$mediaProperties9, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, _this$mediaProperties14;
6885
+ var iceConnected, _this$mediaProperties8, _this$mediaProperties9, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, _this$mediaProperties14, timedOutError;
6703
6886
  return _regenerator.default.wrap(function _callee24$(_context24) {
6704
6887
  while (1) switch (_context24.prev = _context24.next) {
6705
6888
  case 0:
@@ -6707,7 +6890,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6707
6890
  _context24.next = 3;
6708
6891
  return this.mediaProperties.waitForMediaConnectionConnected();
6709
6892
  case 3:
6710
- _context24.next = 30;
6893
+ _context24.next = 32;
6711
6894
  break;
6712
6895
  case 5:
6713
6896
  _context24.prev = 5;
@@ -6749,7 +6932,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6749
6932
  errors: _context24.t14
6750
6933
  };
6751
6934
  _context24.t16 = {
6752
- meetingId: this.id
6935
+ meetingId: this.id,
6936
+ rawError: _context24.t0
6753
6937
  };
6754
6938
  _context24.t17 = {
6755
6939
  name: 'client.ice.end',
@@ -6758,8 +6942,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6758
6942
  };
6759
6943
  _context24.t1.submitClientEvent.call(_context24.t1, _context24.t17);
6760
6944
  case 29:
6761
- throw new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
6762
- case 30:
6945
+ timedOutError = new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
6946
+ timedOutError.cause = _context24.t0;
6947
+ throw timedOutError;
6948
+ case 32:
6763
6949
  case "end":
6764
6950
  return _context24.stop();
6765
6951
  }
@@ -6790,6 +6976,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6790
6976
  networkQualityMonitor: this.networkQualityMonitor,
6791
6977
  isMultistream: this.isMultistream
6792
6978
  });
6979
+ this.shareCAEventSentStatus = {
6980
+ transmitStart: false,
6981
+ transmitStop: false,
6982
+ receiveStart: false,
6983
+ receiveStop: false
6984
+ };
6793
6985
  this.setupStatsAnalyzerEventHandlers();
6794
6986
  this.networkQualityMonitor.on(_internalMediaCore.NetworkQualityEventNames.NETWORK_QUALITY, this.sendNetworkQualityEvent.bind(this));
6795
6987
  }
@@ -6806,7 +6998,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6806
6998
  key: "waitForRemoteSDPAnswer",
6807
6999
  value: (function () {
6808
7000
  var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25() {
6809
- var _this42 = this;
7001
+ var _this43 = this;
6810
7002
  var LOG_HEADER, deferSDPAnswer;
6811
7003
  return _regenerator.default.wrap(function _callee25$(_context25) {
6812
7004
  while (1) switch (_context25.prev = _context25.next) {
@@ -6822,23 +7014,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6822
7014
  deferSDPAnswer = this.deferSDPAnswer;
6823
7015
  this.sdpResponseTimer = setTimeout(function () {
6824
7016
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " timeout! no REMOTE SDP ANSWER received within ").concat(_constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT / 1000, " seconds"));
7017
+ var error = new Error('Timed out waiting for REMOTE SDP ANSWER');
7018
+
6825
7019
  // @ts-ignore
6826
- _this42.webex.internal.newMetrics.submitClientEvent({
7020
+ _this43.webex.internal.newMetrics.submitClientEvent({
6827
7021
  name: 'client.media-engine.remote-sdp-received',
6828
7022
  payload: {
6829
7023
  canProceed: false,
6830
7024
  errors: [
6831
7025
  // @ts-ignore
6832
- _this42.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
7026
+ _this43.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6833
7027
  clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
6834
7028
  })]
6835
7029
  },
6836
7030
  options: {
6837
- meetingId: _this42.id,
6838
- rawError: new Error('Timeout waiting for SDP answer')
7031
+ meetingId: _this43.id,
7032
+ rawError: error
6839
7033
  }
6840
7034
  });
6841
- deferSDPAnswer.reject(new Error('Timed out waiting for REMOTE SDP ANSWER'));
7035
+ deferSDPAnswer.reject(error);
6842
7036
  }, _constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT);
6843
7037
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " waiting for REMOTE SDP ANSWER..."));
6844
7038
  return _context25.abrupt("return", deferSDPAnswer.promise);
@@ -6978,7 +7172,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6978
7172
  break;
6979
7173
  case 7:
6980
7174
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " error waiting for media to connect using UDP, TCP and TURN-TLS"), error);
6981
- throw new _webexErrors.AddMediaFailed();
7175
+ throw new _webexErrors.AddMediaFailed(error);
6982
7176
  case 9:
6983
7177
  case "end":
6984
7178
  return _context28.stop();
@@ -7341,10 +7535,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7341
7535
  }, {
7342
7536
  key: "addMedia",
7343
7537
  value: function addMedia() {
7344
- var _this43 = this;
7538
+ var _this44 = this;
7345
7539
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7346
7540
  return this.addMediaInternal(function () {
7347
- return _this43.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7541
+ return _this44.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7348
7542
  }, undefined, false, options);
7349
7543
  }
7350
7544
 
@@ -7382,8 +7576,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7382
7576
  connectionType,
7383
7577
  selectedCandidatePairChanges,
7384
7578
  numTransports,
7385
- reachabilityStats,
7386
7579
  iceCandidateErrors,
7580
+ reachabilityMetrics,
7387
7581
  _this$mediaProperties15,
7388
7582
  _this$mediaProperties16,
7389
7583
  _this$mediaProperties17,
@@ -7405,7 +7599,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7405
7599
  _this$mediaProperties33,
7406
7600
  _this$mediaProperties34,
7407
7601
  _this$mediaProperties35,
7408
- reachabilityMetrics,
7602
+ _reachabilityMetrics,
7409
7603
  _yield$this$mediaProp2,
7410
7604
  _selectedCandidatePairChanges,
7411
7605
  _numTransports,
@@ -7528,11 +7722,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7528
7722
  connectionType = _yield$this$mediaProp.connectionType;
7529
7723
  selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
7530
7724
  numTransports = _yield$this$mediaProp.numTransports;
7531
- _context35.next = 52;
7532
- return this.webex.meetings.reachability.getReachabilityMetrics();
7533
- case 52:
7534
- reachabilityStats = _context35.sent;
7535
7725
  iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7726
+ _context35.next = 53;
7727
+ return this.getMediaReachabilityMetricFields();
7728
+ case 53:
7729
+ reachabilityMetrics = _context35.sent;
7536
7730
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
7537
7731
  correlation_id: this.correlationId,
7538
7732
  locus_id: this.locusUrl.split('/').pop(),
@@ -7542,7 +7736,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7542
7736
  isMultistream: this.isMultistream,
7543
7737
  retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,
7544
7738
  isJoinWithMediaRetry: this.joinWithMediaRetryInfo.isRetry
7545
- }, reachabilityStats), iceCandidateErrors), {}, {
7739
+ }, reachabilityMetrics), iceCandidateErrors), {}, {
7546
7740
  iceCandidatesCount: this.iceCandidatesCount
7547
7741
  }));
7548
7742
  // @ts-ignore
@@ -7566,9 +7760,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7566
7760
 
7567
7761
  // @ts-ignore
7568
7762
  _context35.next = 66;
7569
- return this.webex.meetings.reachability.getReachabilityMetrics();
7763
+ return this.getMediaReachabilityMetricFields();
7570
7764
  case 66:
7571
- reachabilityMetrics = _context35.sent;
7765
+ _reachabilityMetrics = _context35.sent;
7572
7766
  _context35.next = 69;
7573
7767
  return this.mediaProperties.getCurrentConnectionInfo();
7574
7768
  case 69:
@@ -7592,7 +7786,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7592
7786
  signalingState: ((_this$mediaProperties15 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties15 === void 0 ? void 0 : (_this$mediaProperties16 = _this$mediaProperties15.multistreamConnection) === null || _this$mediaProperties16 === void 0 ? void 0 : (_this$mediaProperties17 = _this$mediaProperties16.pc) === null || _this$mediaProperties17 === void 0 ? void 0 : (_this$mediaProperties18 = _this$mediaProperties17.pc) === null || _this$mediaProperties18 === void 0 ? void 0 : _this$mediaProperties18.signalingState) || ((_this$mediaProperties19 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties19 === void 0 ? void 0 : (_this$mediaProperties20 = _this$mediaProperties19.mediaConnection) === null || _this$mediaProperties20 === void 0 ? void 0 : (_this$mediaProperties21 = _this$mediaProperties20.pc) === null || _this$mediaProperties21 === void 0 ? void 0 : _this$mediaProperties21.signalingState) || 'unknown',
7593
7787
  connectionState: ((_this$mediaProperties22 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties22 === void 0 ? void 0 : (_this$mediaProperties23 = _this$mediaProperties22.multistreamConnection) === null || _this$mediaProperties23 === void 0 ? void 0 : (_this$mediaProperties24 = _this$mediaProperties23.pc) === null || _this$mediaProperties24 === void 0 ? void 0 : (_this$mediaProperties25 = _this$mediaProperties24.pc) === null || _this$mediaProperties25 === void 0 ? void 0 : _this$mediaProperties25.connectionState) || ((_this$mediaProperties26 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties26 === void 0 ? void 0 : (_this$mediaProperties27 = _this$mediaProperties26.mediaConnection) === null || _this$mediaProperties27 === void 0 ? void 0 : (_this$mediaProperties28 = _this$mediaProperties27.pc) === null || _this$mediaProperties28 === void 0 ? void 0 : _this$mediaProperties28.connectionState) || 'unknown',
7594
7788
  iceConnectionState: ((_this$mediaProperties29 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties29 === void 0 ? void 0 : (_this$mediaProperties30 = _this$mediaProperties29.multistreamConnection) === null || _this$mediaProperties30 === void 0 ? void 0 : (_this$mediaProperties31 = _this$mediaProperties30.pc) === null || _this$mediaProperties31 === void 0 ? void 0 : (_this$mediaProperties32 = _this$mediaProperties31.pc) === null || _this$mediaProperties32 === void 0 ? void 0 : _this$mediaProperties32.iceConnectionState) || ((_this$mediaProperties33 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties33 === void 0 ? void 0 : (_this$mediaProperties34 = _this$mediaProperties33.mediaConnection) === null || _this$mediaProperties34 === void 0 ? void 0 : (_this$mediaProperties35 = _this$mediaProperties34.pc) === null || _this$mediaProperties35 === void 0 ? void 0 : _this$mediaProperties35.iceConnectionState) || 'unknown'
7595
- }, reachabilityMetrics), _iceCandidateErrors), {}, {
7789
+ }, _reachabilityMetrics), _iceCandidateErrors), {}, {
7596
7790
  iceCandidatesCount: this.iceCandidatesCount
7597
7791
  }));
7598
7792
  _context35.next = 76;
@@ -7649,7 +7843,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7649
7843
  * @memberof Meeting
7650
7844
  */
7651
7845
  function enqueueMediaUpdate(mediaUpdateType) {
7652
- var _this44 = this;
7846
+ var _this45 = this;
7653
7847
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7654
7848
  var canUpdateMediaNow = this.canUpdateMedia();
7655
7849
  return new _promise.default(function (resolve, reject) {
@@ -7660,9 +7854,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7660
7854
  options: options
7661
7855
  };
7662
7856
  _loggerProxy.default.logger.log("Meeting:index#enqueueMediaUpdate --> enqueuing media update type=".concat(mediaUpdateType));
7663
- _this44.queuedMediaUpdates.push(queueItem);
7857
+ _this45.queuedMediaUpdates.push(queueItem);
7664
7858
  if (canUpdateMediaNow) {
7665
- _this44.processNextQueuedMediaUpdate();
7859
+ _this45.processNextQueuedMediaUpdate();
7666
7860
  }
7667
7861
  });
7668
7862
  }
@@ -7767,7 +7961,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7767
7961
  }, {
7768
7962
  key: "acknowledge",
7769
7963
  value: function acknowledge(type) {
7770
- var _this45 = this;
7964
+ var _this46 = this;
7771
7965
  if (!type) {
7772
7966
  return _promise.default.reject(new _parameter.default('Type must be set to acknowledge the meeting.'));
7773
7967
  }
@@ -7779,12 +7973,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7779
7973
  }).then(function (response) {
7780
7974
  return _promise.default.resolve(response);
7781
7975
  }).then(function (response) {
7782
- _this45.meetingFiniteStateMachine.ring(type);
7976
+ _this46.meetingFiniteStateMachine.ring(type);
7783
7977
  // @ts-ignore
7784
- _this45.webex.internal.newMetrics.submitClientEvent({
7978
+ _this46.webex.internal.newMetrics.submitClientEvent({
7785
7979
  name: 'client.alert.displayed',
7786
7980
  options: {
7787
- meetingId: _this45.id
7981
+ meetingId: _this46.id
7788
7982
  }
7789
7983
  });
7790
7984
  return _promise.default.resolve({
@@ -7809,12 +8003,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7809
8003
  }, {
7810
8004
  key: "decline",
7811
8005
  value: function decline(reason) {
7812
- var _this46 = this;
8006
+ var _this47 = this;
7813
8007
  return _util2.default.declineMeeting(this, reason).then(function (decline) {
7814
- _this46.meetingFiniteStateMachine.decline();
8008
+ _this47.meetingFiniteStateMachine.decline();
7815
8009
  return _promise.default.resolve(decline);
7816
8010
  }).catch(function (error) {
7817
- _this46.meetingFiniteStateMachine.fail(error);
8011
+ _this47.meetingFiniteStateMachine.fail(error);
7818
8012
  return _promise.default.reject(error);
7819
8013
  });
7820
8014
  }
@@ -7865,7 +8059,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7865
8059
  }, {
7866
8060
  key: "leave",
7867
8061
  value: function leave() {
7868
- var _this47 = this;
8062
+ var _this48 = this;
7869
8063
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7870
8064
  var leaveReason = options.reason || _constants.MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
7871
8065
 
@@ -7877,7 +8071,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7877
8071
  var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7878
8072
  return (
7879
8073
  // @ts-ignore
7880
- _this47.webex.internal.newMetrics.submitClientEvent({
8074
+ _this48.webex.internal.newMetrics.submitClientEvent({
7881
8075
  name: 'client.call.leave',
7882
8076
  payload: _objectSpread({
7883
8077
  trigger: 'user-interaction',
@@ -7885,7 +8079,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7885
8079
  leaveReason: options.clientEventLeaveReason
7886
8080
  }, payload),
7887
8081
  options: {
7888
- meetingId: _this47.id
8082
+ meetingId: _this48.id
7889
8083
  }
7890
8084
  })
7891
8085
  );
@@ -7894,24 +8088,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7894
8088
  return _util2.default.leaveMeeting(this, options).then(function (leave) {
7895
8089
  // CA team recommends submitting this *after* locus /leave
7896
8090
  submitLeaveMetric();
7897
- _this47.meetingFiniteStateMachine.leave();
7898
- _this47.clearMeetingData();
8091
+ _this48.meetingFiniteStateMachine.leave();
8092
+ _this48.clearMeetingData();
7899
8093
 
7900
8094
  // upload logs on leave irrespective of meeting delete
7901
- _triggerProxy.default.trigger(_this47, {
8095
+ _triggerProxy.default.trigger(_this48, {
7902
8096
  file: 'meeting/index',
7903
8097
  function: 'leave'
7904
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
8098
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
7905
8099
 
7906
8100
  // TODO: more testing before we remove this code, we are not sure the scenarios for destroy here
7907
- if (_this47.wirelessShare || _this47.guest) {
8101
+ if (_this48.wirelessShare || _this48.guest) {
7908
8102
  // If screen sharing clean the meeting object
7909
- _triggerProxy.default.trigger(_this47, {
8103
+ _triggerProxy.default.trigger(_this48, {
7910
8104
  file: 'meeting/index',
7911
8105
  function: 'leave'
7912
8106
  }, _constants.EVENTS.DESTROY_MEETING, {
7913
8107
  reason: options.reason,
7914
- meetingId: _this47.id
8108
+ meetingId: _this48.id
7915
8109
  });
7916
8110
  }
7917
8111
  _loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
@@ -7928,16 +8122,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7928
8122
  shownToUser: false
7929
8123
  }]
7930
8124
  });
7931
- _this47.meetingFiniteStateMachine.fail(error);
8125
+ _this48.meetingFiniteStateMachine.fail(error);
7932
8126
  _loggerProxy.default.logger.error('Meeting:index#leave --> Failed to leave ', error);
7933
8127
  // upload logs on leave irrespective of meeting delete
7934
- _triggerProxy.default.trigger(_this47, {
8128
+ _triggerProxy.default.trigger(_this48, {
7935
8129
  file: 'meeting/index',
7936
8130
  function: 'leave'
7937
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
8131
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
7938
8132
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_LEAVE_FAILURE, {
7939
- correlation_id: _this47.correlationId,
7940
- locus_id: _this47.locusUrl.split('/').pop(),
8133
+ correlation_id: _this48.correlationId,
8134
+ locus_id: _this48.locusUrl.split('/').pop(),
7941
8135
  reason: error.message,
7942
8136
  stack: error.stack,
7943
8137
  code: error.code
@@ -7957,7 +8151,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7957
8151
  }, {
7958
8152
  key: "startWhiteboardShare",
7959
8153
  value: function startWhiteboardShare(channelUrl, resourceToken) {
7960
- var _this48 = this;
8154
+ var _this49 = this;
7961
8155
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
7962
8156
  return element.name === 'whiteboard';
7963
8157
  });
@@ -7986,13 +8180,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7986
8180
  body.resourceToken = resourceToken;
7987
8181
  }
7988
8182
  return this.meetingRequest.changeMeetingFloor(body).then(function () {
7989
- _this48.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8183
+ _this49.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7990
8184
  return _promise.default.resolve();
7991
8185
  }).catch(function (error) {
7992
8186
  _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
7993
8187
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_START_WHITEBOARD_SHARE_FAILURE, {
7994
- correlation_id: _this48.correlationId,
7995
- locus_id: _this48.locusUrl.split('/').pop(),
8188
+ correlation_id: _this49.correlationId,
8189
+ locus_id: _this49.locusUrl.split('/').pop(),
7996
8190
  reason: error.message,
7997
8191
  stack: error.stack,
7998
8192
  board: {
@@ -8015,7 +8209,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8015
8209
  }, {
8016
8210
  key: "stopWhiteboardShare",
8017
8211
  value: function stopWhiteboardShare(channelUrl) {
8018
- var _this49 = this;
8212
+ var _this50 = this;
8019
8213
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
8020
8214
  return element.name === 'whiteboard';
8021
8215
  });
@@ -8038,8 +8232,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8038
8232
  }).catch(function (error) {
8039
8233
  _loggerProxy.default.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
8040
8234
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_STOP_WHITEBOARD_SHARE_FAILURE, {
8041
- correlation_id: _this49.correlationId,
8042
- locus_id: _this49.locusUrl.split('/').pop(),
8235
+ correlation_id: _this50.correlationId,
8236
+ locus_id: _this50.locusUrl.split('/').pop(),
8043
8237
  reason: error.message,
8044
8238
  stack: error.stack,
8045
8239
  board: {
@@ -8061,7 +8255,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8061
8255
  }, {
8062
8256
  key: "requestScreenShareFloor",
8063
8257
  value: function requestScreenShareFloor() {
8064
- var _this50 = this;
8258
+ var _this51 = this;
8065
8259
  if (!this.mediaProperties.hasLocalShareStream() || !this.mediaProperties.mediaDirection.sendShare) {
8066
8260
  _loggerProxy.default.logger.log("Meeting:index#requestScreenShareFloor --> NOT requesting floor, because we don't have the share stream anymore (shareStream=".concat(this.mediaProperties.shareVideoStream ? 'yes' : 'no', ", sendShare=").concat(this.mediaProperties.mediaDirection.sendShare, ")"));
8067
8261
  this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
@@ -8092,34 +8286,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8092
8286
  resourceUrl: this.resourceUrl,
8093
8287
  shareInstanceId: this.localShareInstanceId
8094
8288
  }).then(function () {
8095
- _this50.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8289
+ _this51.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8096
8290
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_SUCCESS, {
8097
- correlation_id: _this50.correlationId,
8098
- locus_id: _this50.locusUrl.split('/').pop()
8291
+ correlation_id: _this51.correlationId,
8292
+ locus_id: _this51.locusUrl.split('/').pop()
8099
8293
  });
8100
8294
  return _promise.default.resolve();
8101
8295
  }).catch(function (error) {
8102
8296
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
8103
8297
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_FAILURE, {
8104
- correlation_id: _this50.correlationId,
8105
- locus_id: _this50.locusUrl.split('/').pop(),
8298
+ correlation_id: _this51.correlationId,
8299
+ locus_id: _this51.locusUrl.split('/').pop(),
8106
8300
  reason: error.message,
8107
8301
  stack: error.stack
8108
8302
  });
8109
8303
 
8110
8304
  // @ts-ignore
8111
- _this50.webex.internal.newMetrics.submitClientEvent({
8305
+ _this51.webex.internal.newMetrics.submitClientEvent({
8112
8306
  name: 'client.share.floor-granted.local',
8113
8307
  payload: {
8114
8308
  mediaType: 'share',
8115
8309
  errors: _util2.default.getChangeMeetingFloorErrorPayload(error.message),
8116
- shareInstanceId: _this50.localShareInstanceId
8310
+ shareInstanceId: _this51.localShareInstanceId
8117
8311
  },
8118
8312
  options: {
8119
- meetingId: _this50.id
8313
+ meetingId: _this51.id
8120
8314
  }
8121
8315
  });
8122
- _this50.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8316
+ _this51.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8123
8317
  return _promise.default.reject(error);
8124
8318
  });
8125
8319
  }
@@ -8142,10 +8336,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8142
8336
  }, {
8143
8337
  key: "requestScreenShareFloorIfPending",
8144
8338
  value: function requestScreenShareFloorIfPending() {
8145
- var _this51 = this;
8339
+ var _this52 = this;
8146
8340
  if (this.floorGrantPending && this.state === _constants.MEETING_STATE.STATES.JOINED) {
8147
8341
  this.requestScreenShareFloor().then(function () {
8148
- _this51.floorGrantPending = false;
8342
+ _this52.floorGrantPending = false;
8149
8343
  });
8150
8344
  }
8151
8345
  }
@@ -8159,7 +8353,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8159
8353
  }, {
8160
8354
  key: "releaseScreenShareFloor",
8161
8355
  value: function releaseScreenShareFloor() {
8162
- var _this52 = this;
8356
+ var _this53 = this;
8163
8357
  var content = this.locusInfo.mediaShares.find(function (element) {
8164
8358
  return element.name === _constants.CONTENT;
8165
8359
  });
@@ -8194,8 +8388,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8194
8388
  }).catch(function (error) {
8195
8389
  _loggerProxy.default.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
8196
8390
  _metrics.default.sendBehavioralMetric(_constants2.default.STOP_FLOOR_REQUEST_FAILURE, {
8197
- correlation_id: _this52.correlationId,
8198
- locus_id: _this52.locusUrl.split('/').pop(),
8391
+ correlation_id: _this53.correlationId,
8392
+ locus_id: _this53.locusUrl.split('/').pop(),
8199
8393
  reason: error.message,
8200
8394
  stack: error.stack
8201
8395
  });
@@ -8375,7 +8569,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8375
8569
  }, {
8376
8570
  key: "changeVideoLayout",
8377
8571
  value: function changeVideoLayout(layoutType) {
8378
- var _this53 = this;
8572
+ var _this54 = this;
8379
8573
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
8380
8574
  var main = renderInfo.main,
8381
8575
  content = renderInfo.content;
@@ -8429,7 +8623,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8429
8623
  }
8430
8624
  this.lastVideoLayoutInfo = (0, _lodash.cloneDeep)(layoutInfo);
8431
8625
  this.locusInfo.once(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED, function (envelope) {
8432
- _triggerProxy.default.trigger(_this53, {
8626
+ _triggerProxy.default.trigger(_this54, {
8433
8627
  file: 'meeting/index',
8434
8628
  function: 'changeVideoLayout'
8435
8629
  }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_LAYOUT_UPDATE, {
@@ -8545,7 +8739,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8545
8739
  }, {
8546
8740
  key: "endMeetingForAll",
8547
8741
  value: function endMeetingForAll() {
8548
- var _this54 = this;
8742
+ var _this55 = this;
8549
8743
  // @ts-ignore
8550
8744
  this.webex.internal.newMetrics.submitClientEvent({
8551
8745
  name: 'client.call.leave',
@@ -8563,25 +8757,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8563
8757
  locus_id: this.locusId
8564
8758
  });
8565
8759
  return _util2.default.endMeetingForAll(this).then(function (end) {
8566
- _this54.meetingFiniteStateMachine.end();
8567
- _this54.clearMeetingData();
8760
+ _this55.meetingFiniteStateMachine.end();
8761
+ _this55.clearMeetingData();
8568
8762
  // upload logs on leave irrespective of meeting delete
8569
- _triggerProxy.default.trigger(_this54, {
8763
+ _triggerProxy.default.trigger(_this55, {
8570
8764
  file: 'meeting/index',
8571
8765
  function: 'endMeetingForAll'
8572
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this54);
8766
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8573
8767
  return end;
8574
8768
  }).catch(function (error) {
8575
- _this54.meetingFiniteStateMachine.fail(error);
8769
+ _this55.meetingFiniteStateMachine.fail(error);
8576
8770
  _loggerProxy.default.logger.error('Meeting:index#endMeetingForAll --> Failed to end meeting ', error);
8577
8771
  // upload logs on leave irrespective of meeting delete
8578
- _triggerProxy.default.trigger(_this54, {
8772
+ _triggerProxy.default.trigger(_this55, {
8579
8773
  file: 'meeting/index',
8580
8774
  function: 'endMeetingForAll'
8581
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this54);
8775
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8582
8776
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_FAILURE, {
8583
- correlation_id: _this54.correlationId,
8584
- locus_id: _this54.locusUrl.split('/').pop(),
8777
+ correlation_id: _this55.correlationId,
8778
+ locus_id: _this55.locusUrl.split('/').pop(),
8585
8779
  reason: error.message,
8586
8780
  stack: error.stack,
8587
8781
  code: error.code
@@ -8646,6 +8840,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8646
8840
  });
8647
8841
  }
8648
8842
 
8843
+ /**
8844
+ * Method to set post meeting data consent.
8845
+ *
8846
+ * @param {boolean} accept - whether consent accepted or declined
8847
+ * @returns {Promise}
8848
+ * @public
8849
+ * @memberof Meeting
8850
+ */
8851
+ }, {
8852
+ key: "setPostMeetingDataConsent",
8853
+ value: function setPostMeetingDataConsent(accept) {
8854
+ return this.meetingRequest.setPostMeetingDataConsent({
8855
+ postMeetingDataConsent: accept,
8856
+ locusUrl: this.locusUrl,
8857
+ deviceUrl: this.deviceUrl,
8858
+ selfId: this.members.selfId
8859
+ });
8860
+ }
8861
+
8649
8862
  /**
8650
8863
  * Throws if we don't have a media connection created
8651
8864
  *
@@ -8723,7 +8936,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8723
8936
  _this$mediaProperties43,
8724
8937
  _this$mediaProperties44,
8725
8938
  _this$mediaProperties45,
8726
- _this55 = this;
8939
+ _this56 = this;
8727
8940
  var LOG_HEADER = 'Meeting:index#updateTranscodedMediaConnection -->';
8728
8941
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " starting"));
8729
8942
  if (!this.canUpdateMedia()) {
@@ -8748,8 +8961,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8748
8961
  }).catch(function (error) {
8749
8962
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error: "), error);
8750
8963
  _metrics.default.sendBehavioralMetric(_constants2.default.UPDATE_MEDIA_FAILURE, {
8751
- correlation_id: _this55.correlationId,
8752
- locus_id: _this55.locusUrl.split('/').pop(),
8964
+ correlation_id: _this56.correlationId,
8965
+ locus_id: _this56.locusUrl.split('/').pop(),
8753
8966
  reason: error.message,
8754
8967
  stack: error.stack
8755
8968
  });
@@ -8971,10 +9184,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8971
9184
  return this.updateTranscodedMediaConnection();
8972
9185
  case 31:
8973
9186
  if (!floorRequestNeeded) {
8974
- _context40.next = 37;
9187
+ _context40.next = 39;
8975
9188
  break;
8976
9189
  }
8977
9190
  this.localShareInstanceId = _uuid.default.v4();
9191
+ this.shareCAEventSentStatus.transmitStart = false;
9192
+ this.shareCAEventSentStatus.transmitStop = false;
8978
9193
 
8979
9194
  // @ts-ignore
8980
9195
  this.webex.internal.newMetrics.submitClientEvent({
@@ -8995,9 +9210,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8995
9210
  // we're sending the http request to Locus to request the screen share floor
8996
9211
  // only after the SDP update, because that's how it's always been done for transcoded meetings
8997
9212
  // and also if sharing from the start, we need confluence to have been created
8998
- _context40.next = 37;
9213
+ _context40.next = 39;
8999
9214
  return this.enqueueScreenShareFloorRequest();
9000
- case 37:
9215
+ case 39:
9001
9216
  case "end":
9002
9217
  return _context40.stop();
9003
9218
  }
@@ -9135,6 +9350,51 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9135
9350
  }
9136
9351
  return _promise.default.resolve();
9137
9352
  }
9353
+
9354
+ /**
9355
+ * Gets the media reachability metrics
9356
+ *
9357
+ * @returns {Promise<MediaReachabilityMetrics>}
9358
+ */
9359
+ }, {
9360
+ key: "getMediaReachabilityMetricFields",
9361
+ value: (function () {
9362
+ var _getMediaReachabilityMetricFields = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee42() {
9363
+ var reachabilityMetrics, successKeys, totalSuccessCases, isSubnetReachable;
9364
+ return _regenerator.default.wrap(function _callee42$(_context42) {
9365
+ while (1) switch (_context42.prev = _context42.next) {
9366
+ case 0:
9367
+ _context42.next = 2;
9368
+ return this.webex.meetings.reachability.getReachabilityMetrics();
9369
+ case 2:
9370
+ reachabilityMetrics = _context42.sent;
9371
+ successKeys = ['reachability_public_udp_success', 'reachability_public_tcp_success', 'reachability_public_xtls_success', 'reachability_vmn_udp_success', 'reachability_vmn_tcp_success', 'reachability_vmn_xtls_success'];
9372
+ totalSuccessCases = successKeys.reduce(function (total, key) {
9373
+ var value = reachabilityMetrics[key];
9374
+ if (typeof value === 'number') {
9375
+ return total + value;
9376
+ }
9377
+ return total;
9378
+ }, 0);
9379
+ isSubnetReachable = null;
9380
+ if (totalSuccessCases > 0) {
9381
+ // @ts-ignore
9382
+ isSubnetReachable = this.webex.meetings.reachability.isSubnetReachable(this.mediaServerIp);
9383
+ }
9384
+ return _context42.abrupt("return", _objectSpread(_objectSpread({}, reachabilityMetrics), {}, {
9385
+ isSubnetReachable: isSubnetReachable
9386
+ }));
9387
+ case 8:
9388
+ case "end":
9389
+ return _context42.stop();
9390
+ }
9391
+ }, _callee42, this);
9392
+ }));
9393
+ function getMediaReachabilityMetricFields() {
9394
+ return _getMediaReachabilityMetricFields.apply(this, arguments);
9395
+ }
9396
+ return getMediaReachabilityMetricFields;
9397
+ }())
9138
9398
  }]);
9139
9399
  return Meeting;
9140
9400
  }(_webexCore.StatelessWebexPlugin);