@webex/plugin-meetings 3.8.0-next.8 → 3.8.0-next.81

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 (171) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +70 -6
  3. package/dist/breakouts/index.js.map +1 -1
  4. package/dist/common/errors/webex-errors.js +12 -2
  5. package/dist/common/errors/webex-errors.js.map +1 -1
  6. package/dist/config.js +5 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/constants.js +20 -123
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controls-options-manager/enums.js +2 -0
  11. package/dist/controls-options-manager/enums.js.map +1 -1
  12. package/dist/controls-options-manager/types.js.map +1 -1
  13. package/dist/controls-options-manager/util.js +52 -0
  14. package/dist/controls-options-manager/util.js.map +1 -1
  15. package/dist/interpretation/index.js +1 -1
  16. package/dist/interpretation/siLanguage.js +1 -1
  17. package/dist/locus-info/controlsUtils.js +28 -10
  18. package/dist/locus-info/controlsUtils.js.map +1 -1
  19. package/dist/locus-info/index.js +62 -12
  20. package/dist/locus-info/index.js.map +1 -1
  21. package/dist/locus-info/selfUtils.js +432 -418
  22. package/dist/locus-info/selfUtils.js.map +1 -1
  23. package/dist/media/index.js +17 -17
  24. package/dist/media/index.js.map +1 -1
  25. package/dist/media/properties.js +94 -6
  26. package/dist/media/properties.js.map +1 -1
  27. package/dist/meeting/brbState.js +6 -0
  28. package/dist/meeting/brbState.js.map +1 -1
  29. package/dist/meeting/in-meeting-actions.js +17 -1
  30. package/dist/meeting/in-meeting-actions.js.map +1 -1
  31. package/dist/meeting/index.js +570 -302
  32. package/dist/meeting/index.js.map +1 -1
  33. package/dist/meeting/locusMediaRequest.js +0 -17
  34. package/dist/meeting/locusMediaRequest.js.map +1 -1
  35. package/dist/meeting/muteState.js +0 -2
  36. package/dist/meeting/muteState.js.map +1 -1
  37. package/dist/meeting/request.js +30 -0
  38. package/dist/meeting/request.js.map +1 -1
  39. package/dist/meeting/request.type.js.map +1 -1
  40. package/dist/meeting/util.js +13 -2
  41. package/dist/meeting/util.js.map +1 -1
  42. package/dist/meeting-info/meeting-info-v2.js +373 -68
  43. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  44. package/dist/meeting-info/utilv2.js +5 -1
  45. package/dist/meeting-info/utilv2.js.map +1 -1
  46. package/dist/meetings/index.js +136 -1
  47. package/dist/meetings/index.js.map +1 -1
  48. package/dist/meetings/util.js +14 -0
  49. package/dist/meetings/util.js.map +1 -1
  50. package/dist/member/index.js +10 -0
  51. package/dist/member/index.js.map +1 -1
  52. package/dist/member/util.js +330 -353
  53. package/dist/member/util.js.map +1 -1
  54. package/dist/members/index.js +42 -0
  55. package/dist/members/index.js.map +1 -1
  56. package/dist/members/request.js +38 -0
  57. package/dist/members/request.js.map +1 -1
  58. package/dist/members/util.js +36 -1
  59. package/dist/members/util.js.map +1 -1
  60. package/dist/metrics/constants.js +9 -0
  61. package/dist/metrics/constants.js.map +1 -1
  62. package/dist/reachability/clusterReachability.js +63 -27
  63. package/dist/reachability/clusterReachability.js.map +1 -1
  64. package/dist/reachability/index.js +112 -47
  65. package/dist/reachability/index.js.map +1 -1
  66. package/dist/reachability/reachability.types.js +14 -0
  67. package/dist/reachability/reachability.types.js.map +1 -1
  68. package/dist/reachability/request.js +19 -3
  69. package/dist/reachability/request.js.map +1 -1
  70. package/dist/reconnection-manager/index.js +2 -2
  71. package/dist/reconnection-manager/index.js.map +1 -1
  72. package/dist/roap/index.js.map +1 -1
  73. package/dist/roap/turnDiscovery.js +45 -27
  74. package/dist/roap/turnDiscovery.js.map +1 -1
  75. package/dist/roap/types.js +17 -0
  76. package/dist/roap/types.js.map +1 -0
  77. package/dist/types/common/errors/webex-errors.d.ts +7 -1
  78. package/dist/types/config.d.ts +3 -0
  79. package/dist/types/constants.d.ts +13 -85
  80. package/dist/types/controls-options-manager/enums.d.ts +3 -1
  81. package/dist/types/controls-options-manager/types.d.ts +7 -1
  82. package/dist/types/locus-info/index.d.ts +3 -3
  83. package/dist/types/locus-info/selfUtils.d.ts +216 -1
  84. package/dist/types/media/properties.d.ts +15 -0
  85. package/dist/types/meeting/in-meeting-actions.d.ts +16 -0
  86. package/dist/types/meeting/index.d.ts +43 -1
  87. package/dist/types/meeting/muteState.d.ts +0 -1
  88. package/dist/types/meeting/request.d.ts +12 -1
  89. package/dist/types/meeting/request.type.d.ts +6 -0
  90. package/dist/types/meeting/util.d.ts +3 -1
  91. package/dist/types/meeting-info/meeting-info-v2.d.ts +82 -1
  92. package/dist/types/meetings/index.d.ts +57 -0
  93. package/dist/types/member/index.d.ts +1 -0
  94. package/dist/types/member/util.d.ts +159 -1
  95. package/dist/types/members/index.d.ts +15 -0
  96. package/dist/types/members/request.d.ts +26 -0
  97. package/dist/types/members/util.d.ts +27 -0
  98. package/dist/types/metrics/constants.d.ts +9 -0
  99. package/dist/types/reachability/clusterReachability.d.ts +15 -7
  100. package/dist/types/reachability/index.d.ts +10 -1
  101. package/dist/types/reachability/reachability.types.d.ts +5 -0
  102. package/dist/types/roap/index.d.ts +3 -2
  103. package/dist/types/roap/turnDiscovery.d.ts +5 -17
  104. package/dist/types/roap/types.d.ts +16 -0
  105. package/dist/webinar/index.js +1 -1
  106. package/package.json +24 -23
  107. package/src/breakouts/index.ts +69 -0
  108. package/src/common/errors/webex-errors.ts +8 -1
  109. package/src/config.ts +3 -0
  110. package/src/constants.ts +20 -90
  111. package/src/controls-options-manager/enums.ts +2 -0
  112. package/src/controls-options-manager/types.ts +11 -1
  113. package/src/controls-options-manager/util.ts +62 -0
  114. package/src/locus-info/controlsUtils.ts +44 -14
  115. package/src/locus-info/index.ts +56 -13
  116. package/src/locus-info/selfUtils.ts +496 -442
  117. package/src/media/index.ts +23 -21
  118. package/src/media/properties.ts +96 -0
  119. package/src/meeting/brbState.ts +7 -0
  120. package/src/meeting/in-meeting-actions.ts +32 -0
  121. package/src/meeting/index.ts +382 -93
  122. package/src/meeting/locusMediaRequest.ts +0 -18
  123. package/src/meeting/muteState.ts +0 -2
  124. package/src/meeting/request.ts +36 -1
  125. package/src/meeting/request.type.ts +7 -0
  126. package/src/meeting/util.ts +11 -2
  127. package/src/meeting-info/meeting-info-v2.ts +254 -8
  128. package/src/meeting-info/utilv2.ts +5 -0
  129. package/src/meetings/index.ts +148 -1
  130. package/src/meetings/util.ts +18 -0
  131. package/src/member/index.ts +13 -2
  132. package/src/member/util.ts +351 -348
  133. package/src/members/index.ts +47 -0
  134. package/src/members/request.ts +44 -0
  135. package/src/members/util.ts +43 -1
  136. package/src/metrics/constants.ts +9 -0
  137. package/src/reachability/clusterReachability.ts +73 -26
  138. package/src/reachability/index.ts +70 -1
  139. package/src/reachability/reachability.types.ts +6 -0
  140. package/src/reachability/request.ts +7 -0
  141. package/src/reconnection-manager/index.ts +2 -2
  142. package/src/roap/index.ts +3 -7
  143. package/src/roap/turnDiscovery.ts +34 -39
  144. package/src/roap/types.ts +23 -0
  145. package/test/unit/spec/breakouts/index.ts +167 -95
  146. package/test/unit/spec/controls-options-manager/util.js +120 -0
  147. package/test/unit/spec/locus-info/controlsUtils.js +103 -9
  148. package/test/unit/spec/locus-info/index.js +167 -73
  149. package/test/unit/spec/locus-info/selfUtils.js +98 -24
  150. package/test/unit/spec/media/index.ts +150 -18
  151. package/test/unit/spec/media/properties.ts +130 -0
  152. package/test/unit/spec/meeting/brbState.ts +19 -0
  153. package/test/unit/spec/meeting/in-meeting-actions.ts +19 -4
  154. package/test/unit/spec/meeting/index.js +557 -35
  155. package/test/unit/spec/meeting/locusMediaRequest.ts +0 -30
  156. package/test/unit/spec/meeting/muteState.js +0 -2
  157. package/test/unit/spec/meeting/request.js +32 -1
  158. package/test/unit/spec/meeting/utils.js +119 -18
  159. package/test/unit/spec/meeting-info/meetinginfov2.js +484 -114
  160. package/test/unit/spec/meeting-info/utilv2.js +19 -0
  161. package/test/unit/spec/meetings/index.js +146 -2
  162. package/test/unit/spec/member/index.js +7 -0
  163. package/test/unit/spec/member/util.js +24 -0
  164. package/test/unit/spec/members/index.js +140 -26
  165. package/test/unit/spec/members/request.js +68 -22
  166. package/test/unit/spec/members/utils.js +75 -0
  167. package/test/unit/spec/reachability/clusterReachability.ts +88 -56
  168. package/test/unit/spec/reachability/index.ts +101 -0
  169. package/test/unit/spec/reachability/request.js +47 -2
  170. package/test/unit/spec/reconnection-manager/index.js +4 -4
  171. 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
 
@@ -2370,6 +2442,31 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2370
2442
  return (0, _classPrivateFieldGet2.default)(this, _isoLocalClientMeetingJoinTime);
2371
2443
  }
2372
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
+
2373
2470
  /**
2374
2471
  * Set meeting info and trigger `MEETING_INFO_AVAILABLE` event
2375
2472
  * @param {any} info
@@ -3209,6 +3306,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3209
3306
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS, function (payload) {
3210
3307
  _this13.members.locusParticipantsUpdate(payload);
3211
3308
  });
3309
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.PARTICIPANT_REASON_CHANGED, function (payload) {
3310
+ _triggerProxy.default.trigger(_this13, {
3311
+ file: 'meeting/index',
3312
+ function: 'setUpLocusParticipantsListener'
3313
+ }, _constants.EVENT_TRIGGERS.MEETING_PARTICIPANT_REASON_CHANGED, {
3314
+ payload: payload
3315
+ });
3316
+ });
3212
3317
  }
3213
3318
 
3214
3319
  /**
@@ -3429,6 +3534,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3429
3534
  state: state
3430
3535
  });
3431
3536
  });
3537
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED, function (_ref27) {
3538
+ var state = _ref27.state;
3539
+ _triggerProxy.default.trigger(_this14, {
3540
+ file: 'meeting/index',
3541
+ function: 'setupLocusControlsListener'
3542
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_ANNOTATION_UPDATED, {
3543
+ state: state
3544
+ });
3545
+ });
3546
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED, function (_ref28) {
3547
+ var state = _ref28.state;
3548
+ _triggerProxy.default.trigger(_this14, {
3549
+ file: 'meeting/index',
3550
+ function: 'setupLocusControlsListener'
3551
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_REMOTE_DESKTOP_CONTROL_UPDATED, {
3552
+ state: state
3553
+ });
3554
+ });
3432
3555
  }
3433
3556
 
3434
3557
  /**
@@ -3468,7 +3591,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3468
3591
  var _this15 = this;
3469
3592
  // Will get triggered on local and remote share
3470
3593
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, /*#__PURE__*/function () {
3471
- var _ref27 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3594
+ var _ref29 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3472
3595
  var _payload$previous, _payload$previous2;
3473
3596
  var _payload$current, contentShare, whiteboardShare, previousContentShare, previousWhiteboardShare, newShareStatus, _this15$locusInfo, _this15$locusInfo$inf, _this15$webinar, oldShareStatus, sendStartedSharingRemote, _this15$mediaProperti;
3474
3597
  return _regenerator.default.wrap(function _callee8$(_context8) {
@@ -3554,6 +3677,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3554
3677
  case 26:
3555
3678
  sendStartedSharingRemote = function sendStartedSharingRemote() {
3556
3679
  _this15.remoteShareInstanceId = contentShare.shareInstanceId;
3680
+ _this15.shareCAEventSentStatus.receiveStart = false;
3681
+ _this15.shareCAEventSentStatus.receiveStop = false;
3557
3682
  _triggerProxy.default.trigger(_this15, {
3558
3683
  file: 'meetings/index',
3559
3684
  function: 'remoteShare'
@@ -3627,6 +3752,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3627
3752
  // if we got here, then some remote participant has stolen
3628
3753
  // the presentation from another remote participant
3629
3754
  _this15.remoteShareInstanceId = contentShare.shareInstanceId;
3755
+ _this15.shareCAEventSentStatus.receiveStart = false;
3756
+ _this15.shareCAEventSentStatus.receiveStop = false;
3630
3757
  _triggerProxy.default.trigger(_this15, {
3631
3758
  file: 'meetings/index',
3632
3759
  function: 'remoteShare'
@@ -3667,7 +3794,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3667
3794
  }, _callee8, null, [[27,, 31, 34]]);
3668
3795
  }));
3669
3796
  return function (_x8) {
3670
- return _ref27.apply(this, arguments);
3797
+ return _ref29.apply(this, arguments);
3671
3798
  };
3672
3799
  }());
3673
3800
  }
@@ -3781,8 +3908,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3781
3908
  });
3782
3909
  }
3783
3910
  });
3784
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref28) {
3785
- var isInitializing = _ref28.isInitializing;
3911
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref30) {
3912
+ var isInitializing = _ref30.isInitializing;
3786
3913
  _this19.updateMeetingActions();
3787
3914
  _this19.recordingController.setDisplayHints(_this19.userDisplayHints);
3788
3915
  _this19.recordingController.setUserPolicy(_this19.selfUserPolicies);
@@ -3920,7 +4047,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3920
4047
  _this21.updateLLMConnection();
3921
4048
  });
3922
4049
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, /*#__PURE__*/function () {
3923
- var _ref29 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
4050
+ var _ref31 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
3924
4051
  var _this21$rtcMetrics;
3925
4052
  return _regenerator.default.wrap(function _callee9$(_context9) {
3926
4053
  while (1) switch (_context9.prev = _context9.next) {
@@ -3954,7 +4081,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3954
4081
  }, _callee9);
3955
4082
  }));
3956
4083
  return function (_x9) {
3957
- return _ref29.apply(this, arguments);
4084
+ return _ref31.apply(this, arguments);
3958
4085
  };
3959
4086
  }());
3960
4087
 
@@ -4073,7 +4200,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4073
4200
  }
4074
4201
  });
4075
4202
  this.locusInfo.on(_constants.EVENTS.DESTROY_MEETING, /*#__PURE__*/function () {
4076
- var _ref30 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4203
+ var _ref32 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4077
4204
  return _regenerator.default.wrap(function _callee10$(_context10) {
4078
4205
  while (1) switch (_context10.prev = _context10.next) {
4079
4206
  case 0:
@@ -4133,7 +4260,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4133
4260
  }, _callee10, null, [[8, 14]]);
4134
4261
  }));
4135
4262
  return function (_x10) {
4136
- return _ref30.apply(this, arguments);
4263
+ return _ref32.apply(this, arguments);
4137
4264
  };
4138
4265
  }());
4139
4266
  }
@@ -4192,6 +4319,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4192
4319
  return this.members.cancelPhoneInvite(invitee);
4193
4320
  }
4194
4321
 
4322
+ /**
4323
+ * Cancel an SIP call invitation made during a meeting
4324
+ * @param {Object} invitee
4325
+ * @param {String} invitee.memberId
4326
+ * @returns {Promise} see #members.cancelSIPInvite
4327
+ * @public
4328
+ * @memberof Meeting
4329
+ */
4330
+ }, {
4331
+ key: "cancelSIPInvite",
4332
+ value: function cancelSIPInvite(invitee) {
4333
+ return this.members.cancelSIPInvite(invitee);
4334
+ }
4335
+
4195
4336
  /**
4196
4337
  * Admit the guest(s) to the call once they are waiting.
4197
4338
  * If the host/cohost is in a breakout session, the locus url
@@ -4235,6 +4376,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4235
4376
  key: "beRightBack",
4236
4377
  value: (function () {
4237
4378
  var _beRightBack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(enabled) {
4379
+ var _this24 = this;
4238
4380
  var errorMessage, error, _errorMessage, _error;
4239
4381
  return _regenerator.default.wrap(function _callee11$(_context11) {
4240
4382
  while (1) switch (_context11.prev = _context11.next) {
@@ -4257,7 +4399,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4257
4399
  _loggerProxy.default.logger.error(_error);
4258
4400
  return _context11.abrupt("return", _promise.default.reject(_error));
4259
4401
  case 10:
4260
- return _context11.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager));
4402
+ return _context11.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager).then(function () {
4403
+ if (_this24.audio && enabled) {
4404
+ // locus mutes the participant with brb enabled request,
4405
+ // so we need to explicitly update remote mute for correct logic flow
4406
+ _this24.audio.handleServerRemoteMuteUpdate(_this24, enabled);
4407
+ }
4408
+ }));
4261
4409
  case 11:
4262
4410
  case "end":
4263
4411
  return _context11.stop();
@@ -4443,7 +4591,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4443
4591
  canAdmitParticipant: _util2.default.canAdmitParticipant(this.userDisplayHints),
4444
4592
  canLock: _util2.default.canUserLock(this.userDisplayHints),
4445
4593
  canUnlock: _util2.default.canUserUnlock(this.userDisplayHints),
4446
- canShareWhiteBoard: _util2.default.canShareWhiteBoard(this.userDisplayHints),
4594
+ canShareWhiteBoard: _util2.default.canShareWhiteBoard(this.userDisplayHints, this.selfUserPolicies),
4447
4595
  canSetDisallowUnmute: _util5.default.canSetDisallowUnmute(this.userDisplayHints),
4448
4596
  canUnsetDisallowUnmute: _util5.default.canUnsetDisallowUnmute(this.userDisplayHints),
4449
4597
  canSetMuteOnEntry: _util5.default.canSetMuteOnEntry(this.userDisplayHints),
@@ -4473,6 +4621,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4473
4621
  canSelectSpokenLanguages: _util2.default.canSelectSpokenLanguages(this.userDisplayHints),
4474
4622
  waitingForOthersToJoin: _util2.default.waitingForOthersToJoin(this.userDisplayHints),
4475
4623
  canSendReactions: _util2.default.canSendReactions(this.inMeetingActions.canSendReactions, this.userDisplayHints),
4624
+ requiresPostMeetingDataConsentPrompt: _util2.default.requiresPostMeetingDataConsentPrompt(this.userDisplayHints),
4476
4625
  canManageBreakout: _util2.default.canManageBreakout(this.userDisplayHints),
4477
4626
  canStartBreakout: _util2.default.canStartBreakout(this.userDisplayHints),
4478
4627
  canBroadcastMessageToBreakout: _util2.default.canBroadcastMessageToBreakout(this.userDisplayHints, this.selfUserPolicies),
@@ -4481,6 +4630,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4481
4630
  canUserAskForHelp: _util2.default.canUserAskForHelp(this.userDisplayHints),
4482
4631
  canUserRenameSelfAndObserved: _util2.default.canUserRenameSelfAndObserved(this.userDisplayHints),
4483
4632
  canUserRenameOthers: _util2.default.canUserRenameOthers(this.userDisplayHints),
4633
+ canMoveToLobby: _util2.default.canMoveToLobby(this.userDisplayHints),
4484
4634
  canMuteAll: _util5.default.hasHints({
4485
4635
  requiredHints: [_constants.DISPLAY_HINTS.MUTE_ALL],
4486
4636
  displayHints: this.userDisplayHints
@@ -4612,6 +4762,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4612
4762
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_FILE_TRANSFER],
4613
4763
  policies: this.selfUserPolicies
4614
4764
  }),
4765
+ canRealtimeCloseCaption: _util5.default.hasPolicies({
4766
+ requiredPolicies: [_constants.SELF_POLICY.SUPPORT_REALTIME_CLOSE_CAPTION],
4767
+ policies: this.selfUserPolicies
4768
+ }),
4769
+ canRealtimeCloseCaptionManual: _util5.default.hasPolicies({
4770
+ requiredPolicies: [_constants.SELF_POLICY.SUPPORT_REALTIME_CLOSE_CAPTION_MANUAL],
4771
+ policies: this.selfUserPolicies
4772
+ }),
4615
4773
  canChat: _util5.default.hasPolicies({
4616
4774
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_CHAT],
4617
4775
  policies: this.selfUserPolicies
@@ -4648,6 +4806,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4648
4806
  canAnnotate: _util5.default.hasPolicies({
4649
4807
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_ANNOTATION],
4650
4808
  policies: this.selfUserPolicies
4809
+ }),
4810
+ canEnableAnnotation: _util5.default.hasHints({
4811
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_ANNOTATION_MEETING_OPTION],
4812
+ displayHints: this.userDisplayHints
4813
+ }),
4814
+ canDisableAnnotation: _util5.default.hasHints({
4815
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_ANNOTATION_MEETING_OPTION],
4816
+ displayHints: this.userDisplayHints
4817
+ }),
4818
+ canEnableRemoteDesktopControl: _util5.default.hasHints({
4819
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_RDC_MEETING_OPTION],
4820
+ displayHints: this.userDisplayHints
4821
+ }),
4822
+ canDisableRemoteDesktopControl: _util5.default.hasHints({
4823
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_RDC_MEETING_OPTION],
4824
+ displayHints: this.userDisplayHints
4651
4825
  })
4652
4826
  }) || changed;
4653
4827
  }
@@ -4752,7 +4926,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4752
4926
  }, {
4753
4927
  key: "setLogUploadTimer",
4754
4928
  value: function setLogUploadTimer() {
4755
- var _this24 = this;
4929
+ var _this25 = this;
4756
4930
  // 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
4757
4931
  var LOG_UPLOAD_INTERVALS = [0.1, 15, 30, 60]; // in minutes
4758
4932
 
@@ -4763,15 +4937,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4763
4937
  this.logUploadIntervalIndex += 1;
4764
4938
  }
4765
4939
  this.uploadLogsTimer = (0, _commonTimers.safeSetTimeout)(function () {
4766
- _this24.uploadLogsTimer = undefined;
4767
- _this24.uploadLogs();
4940
+ _this25.uploadLogsTimer = undefined;
4941
+ _this25.uploadLogs();
4768
4942
 
4769
4943
  // just as an extra precaution, to avoid uploading logs forever in case something goes wrong
4770
4944
  // and the page remains opened, we stop it if there is no media connection
4771
- if (!_this24.mediaProperties.webrtcMediaConnection) {
4945
+ if (!_this25.mediaProperties.webrtcMediaConnection) {
4772
4946
  return;
4773
4947
  }
4774
- _this24.setLogUploadTimer();
4948
+ _this25.setLogUploadTimer();
4775
4949
  }, delay);
4776
4950
  }
4777
4951
 
@@ -4838,7 +5012,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4838
5012
  }, {
4839
5013
  key: "closeRemoteStreams",
4840
5014
  value: function closeRemoteStreams() {
4841
- var _this25 = this;
5015
+ var _this26 = this;
4842
5016
  var _this$mediaProperties6 = this.mediaProperties,
4843
5017
  remoteAudioStream = _this$mediaProperties6.remoteAudioStream,
4844
5018
  remoteVideoStream = _this$mediaProperties6.remoteVideoStream,
@@ -4852,7 +5026,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4852
5026
  */
4853
5027
  // eslint-disable-next-line @typescript-eslint/no-shadow
4854
5028
  var triggerMediaStoppedEvent = function triggerMediaStoppedEvent(mediaType) {
4855
- _triggerProxy.default.trigger(_this25, {
5029
+ _triggerProxy.default.trigger(_this26, {
4856
5030
  file: 'meeting/index',
4857
5031
  function: 'closeRemoteStreams'
4858
5032
  }, _constants.EVENT_TRIGGERS.MEDIA_STOPPED, {
@@ -5160,7 +5334,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5160
5334
  }, {
5161
5335
  key: "setMercuryListener",
5162
5336
  value: function setMercuryListener() {
5163
- var _this26 = this;
5337
+ var _this27 = this;
5164
5338
  // Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury
5165
5339
  // if the meeting has active peer connections, it should try to reconnect.
5166
5340
  // @ts-ignore
@@ -5168,33 +5342,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5168
5342
  _loggerProxy.default.logger.info('Meeting:index#setMercuryListener --> Web socket online');
5169
5343
 
5170
5344
  // Only send restore event when it was disconnected before and for connected later
5171
- if (!_this26.hasWebsocketConnected) {
5345
+ if (!_this27.hasWebsocketConnected) {
5172
5346
  // @ts-ignore
5173
- _this26.webex.internal.newMetrics.submitClientEvent({
5347
+ _this27.webex.internal.newMetrics.submitClientEvent({
5174
5348
  name: 'client.mercury.connection.restored',
5175
5349
  options: {
5176
- meetingId: _this26.id
5350
+ meetingId: _this27.id
5177
5351
  }
5178
5352
  });
5179
5353
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_RESTORED, {
5180
- correlation_id: _this26.correlationId
5354
+ correlation_id: _this27.correlationId
5181
5355
  });
5182
5356
  }
5183
- _this26.hasWebsocketConnected = true;
5357
+ _this27.hasWebsocketConnected = true;
5184
5358
  });
5185
5359
 
5186
5360
  // @ts-ignore
5187
5361
  this.webex.internal.mercury.on(_constants.OFFLINE, function () {
5188
5362
  _loggerProxy.default.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
5189
5363
  // @ts-ignore
5190
- _this26.webex.internal.newMetrics.submitClientEvent({
5364
+ _this27.webex.internal.newMetrics.submitClientEvent({
5191
5365
  name: 'client.mercury.connection.lost',
5192
5366
  options: {
5193
- meetingId: _this26.id
5367
+ meetingId: _this27.id
5194
5368
  }
5195
5369
  });
5196
5370
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_FAILURE, {
5197
- correlation_id: _this26.correlationId
5371
+ correlation_id: _this27.correlationId
5198
5372
  });
5199
5373
  });
5200
5374
  }
@@ -5301,7 +5475,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5301
5475
  }, {
5302
5476
  key: "muteAudio",
5303
5477
  value: function muteAudio() {
5304
- var _this27 = this;
5478
+ var _this28 = this;
5305
5479
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5306
5480
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5307
5481
  }
@@ -5317,22 +5491,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5317
5491
 
5318
5492
  // First, stop sending the local audio media
5319
5493
  return logRequest(this.audio.handleClientRequest(this, true).then(function () {
5320
- _util2.default.handleAudioLogging(_this27.mediaProperties.audioStream);
5494
+ _util2.default.handleAudioLogging(_this28.mediaProperties.audioStream);
5321
5495
  // @ts-ignore
5322
- _this27.webex.internal.newMetrics.submitClientEvent({
5496
+ _this28.webex.internal.newMetrics.submitClientEvent({
5323
5497
  name: 'client.muted',
5324
5498
  payload: {
5325
5499
  trigger: 'user-interaction',
5326
5500
  mediaType: 'audio'
5327
5501
  },
5328
5502
  options: {
5329
- meetingId: _this27.id
5503
+ meetingId: _this28.id
5330
5504
  }
5331
5505
  });
5332
5506
  }).catch(function (error) {
5333
5507
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_AUDIO_FAILURE, {
5334
- correlation_id: _this27.correlationId,
5335
- locus_id: _this27.locusUrl.split('/').pop(),
5508
+ correlation_id: _this28.correlationId,
5509
+ locus_id: _this28.locusUrl.split('/').pop(),
5336
5510
  reason: error.message,
5337
5511
  stack: error.stack
5338
5512
  });
@@ -5351,7 +5525,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5351
5525
  }, {
5352
5526
  key: "unmuteAudio",
5353
5527
  value: function unmuteAudio() {
5354
- var _this28 = this;
5528
+ var _this29 = this;
5355
5529
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5356
5530
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5357
5531
  }
@@ -5367,22 +5541,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5367
5541
 
5368
5542
  // First, send the control to unmute the participant on the server
5369
5543
  return logRequest(this.audio.handleClientRequest(this, false).then(function () {
5370
- _util2.default.handleAudioLogging(_this28.mediaProperties.audioStream);
5544
+ _util2.default.handleAudioLogging(_this29.mediaProperties.audioStream);
5371
5545
  // @ts-ignore
5372
- _this28.webex.internal.newMetrics.submitClientEvent({
5546
+ _this29.webex.internal.newMetrics.submitClientEvent({
5373
5547
  name: 'client.unmuted',
5374
5548
  payload: {
5375
5549
  trigger: 'user-interaction',
5376
5550
  mediaType: 'audio'
5377
5551
  },
5378
5552
  options: {
5379
- meetingId: _this28.id
5553
+ meetingId: _this29.id
5380
5554
  }
5381
5555
  });
5382
5556
  }).catch(function (error) {
5383
5557
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_AUDIO_FAILURE, {
5384
- correlation_id: _this28.correlationId,
5385
- locus_id: _this28.locusUrl.split('/').pop(),
5558
+ correlation_id: _this29.correlationId,
5559
+ locus_id: _this29.locusUrl.split('/').pop(),
5386
5560
  reason: error.message,
5387
5561
  stack: error.stack
5388
5562
  });
@@ -5401,7 +5575,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5401
5575
  }, {
5402
5576
  key: "muteVideo",
5403
5577
  value: function muteVideo() {
5404
- var _this29 = this;
5578
+ var _this30 = this;
5405
5579
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5406
5580
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5407
5581
  }
@@ -5415,22 +5589,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5415
5589
  return _promise.default.reject(new _parameter.default('no video control associated to the meeting'));
5416
5590
  }
5417
5591
  return logRequest(this.video.handleClientRequest(this, true).then(function () {
5418
- _util2.default.handleVideoLogging(_this29.mediaProperties.videoStream);
5592
+ _util2.default.handleVideoLogging(_this30.mediaProperties.videoStream);
5419
5593
  // @ts-ignore
5420
- _this29.webex.internal.newMetrics.submitClientEvent({
5594
+ _this30.webex.internal.newMetrics.submitClientEvent({
5421
5595
  name: 'client.muted',
5422
5596
  payload: {
5423
5597
  trigger: 'user-interaction',
5424
5598
  mediaType: 'video'
5425
5599
  },
5426
5600
  options: {
5427
- meetingId: _this29.id
5601
+ meetingId: _this30.id
5428
5602
  }
5429
5603
  });
5430
5604
  }).catch(function (error) {
5431
5605
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_VIDEO_FAILURE, {
5432
- correlation_id: _this29.correlationId,
5433
- locus_id: _this29.locusUrl.split('/').pop(),
5606
+ correlation_id: _this30.correlationId,
5607
+ locus_id: _this30.locusUrl.split('/').pop(),
5434
5608
  reason: error.message,
5435
5609
  stack: error.stack
5436
5610
  });
@@ -5449,7 +5623,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5449
5623
  }, {
5450
5624
  key: "unmuteVideo",
5451
5625
  value: function unmuteVideo() {
5452
- var _this30 = this;
5626
+ var _this31 = this;
5453
5627
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5454
5628
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5455
5629
  }
@@ -5463,22 +5637,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5463
5637
  return _promise.default.reject(new _parameter.default('no audio control associated to the meeting'));
5464
5638
  }
5465
5639
  return logRequest(this.video.handleClientRequest(this, false).then(function () {
5466
- _util2.default.handleVideoLogging(_this30.mediaProperties.videoStream);
5640
+ _util2.default.handleVideoLogging(_this31.mediaProperties.videoStream);
5467
5641
  // @ts-ignore
5468
- _this30.webex.internal.newMetrics.submitClientEvent({
5642
+ _this31.webex.internal.newMetrics.submitClientEvent({
5469
5643
  name: 'client.unmuted',
5470
5644
  payload: {
5471
5645
  trigger: 'user-interaction',
5472
5646
  mediaType: 'video'
5473
5647
  },
5474
5648
  options: {
5475
- meetingId: _this30.id
5649
+ meetingId: _this31.id
5476
5650
  }
5477
5651
  });
5478
5652
  }).catch(function (error) {
5479
5653
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_VIDEO_FAILURE, {
5480
- correlation_id: _this30.correlationId,
5481
- locus_id: _this30.locusUrl.split('/').pop(),
5654
+ correlation_id: _this31.correlationId,
5655
+ locus_id: _this31.locusUrl.split('/').pop(),
5482
5656
  reason: error.message,
5483
5657
  stack: error.stack
5484
5658
  });
@@ -5508,7 +5682,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5508
5682
  key: "joinWithMedia",
5509
5683
  value: (function () {
5510
5684
  var _joinWithMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {
5511
- var _this31 = this;
5685
+ var _this32 = this;
5512
5686
  var options,
5513
5687
  mediaOptions,
5514
5688
  _options$joinOptions,
@@ -5591,7 +5765,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5591
5765
  case 35:
5592
5766
  _context16.next = 37;
5593
5767
  return this.addMediaInternal(function () {
5594
- return _this31.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5768
+ return _this32.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5595
5769
  }, turnServerInfo, forceTurnDiscovery, mediaOptions);
5596
5770
  case 37:
5597
5771
  mediaResponse = _context16.sent;
@@ -5686,7 +5860,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5686
5860
  }, {
5687
5861
  key: "reconnect",
5688
5862
  value: function reconnect(options) {
5689
- var _this32 = this;
5863
+ var _this33 = this;
5690
5864
  _loggerProxy.default.logger.log("Meeting:index#reconnect --> attempting to reconnect meeting ".concat(this.id));
5691
5865
  if (!this.reconnectionManager || !this.reconnectionManager.reconnect) {
5692
5866
  return _promise.default.reject(new _parameter.default('Cannot reconnect, ReconnectionManager must first be defined.'));
@@ -5702,10 +5876,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5702
5876
  while (1) switch (_context17.prev = _context17.next) {
5703
5877
  case 0:
5704
5878
  _context17.next = 2;
5705
- return _this32.waitForRemoteSDPAnswer();
5879
+ return _this33.waitForRemoteSDPAnswer();
5706
5880
  case 2:
5707
5881
  _context17.next = 4;
5708
- return _this32.waitForMediaConnectionConnected();
5882
+ return _this33.waitForMediaConnectionConnected();
5709
5883
  case 4:
5710
5884
  case "end":
5711
5885
  return _context17.stop();
@@ -5719,7 +5893,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5719
5893
  return _promise.default.resolve();
5720
5894
  }
5721
5895
  _loggerProxy.default.logger.error('Meeting:index#reconnect --> Meeting reconnect failed', error);
5722
- _this32.uploadLogs({
5896
+ _this33.uploadLogs({
5723
5897
  file: 'meeting/index',
5724
5898
  function: 'reconnect'
5725
5899
  });
@@ -5766,19 +5940,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5766
5940
  }, {
5767
5941
  key: "setCaptionLanguage",
5768
5942
  value: function setCaptionLanguage(language) {
5769
- var _this33 = this;
5943
+ var _this34 = this;
5770
5944
  return new _promise.default(function (resolve, reject) {
5771
- if (!_this33.isTranscriptionSupported()) {
5945
+ if (!_this34.isTranscriptionSupported()) {
5772
5946
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5773
5947
  reject(new Error('Webex Assistant is not enabled/supported'));
5774
5948
  }
5775
5949
  try {
5776
5950
  var voiceaListenerCaptionUpdate = function voiceaListenerCaptionUpdate(payload) {
5777
5951
  // @ts-ignore
5778
- _this33.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5952
+ _this34.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5779
5953
  var statusCode = payload.statusCode;
5780
5954
  if (statusCode === 200) {
5781
- _this33.transcription.languageOptions = _objectSpread(_objectSpread({}, _this33.transcription.languageOptions), {}, {
5955
+ _this34.transcription.languageOptions = _objectSpread(_objectSpread({}, _this34.transcription.languageOptions), {}, {
5782
5956
  currentCaptionLanguage: language
5783
5957
  });
5784
5958
  resolve(language);
@@ -5787,9 +5961,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5787
5961
  }
5788
5962
  };
5789
5963
  // @ts-ignore
5790
- _this33.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5964
+ _this34.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5791
5965
  // @ts-ignore
5792
- _this33.webex.internal.voicea.requestLanguage(language);
5966
+ _this34.webex.internal.voicea.requestLanguage(language);
5793
5967
  } catch (error) {
5794
5968
  _loggerProxy.default.logger.error("Meeting:index#setCaptionLanguage --> ".concat(error));
5795
5969
  reject(error);
@@ -5805,23 +5979,23 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5805
5979
  }, {
5806
5980
  key: "setSpokenLanguage",
5807
5981
  value: function setSpokenLanguage(language) {
5808
- var _this34 = this;
5982
+ var _this35 = this;
5809
5983
  return new _promise.default(function (resolve, reject) {
5810
- if (!_this34.isTranscriptionSupported()) {
5984
+ if (!_this35.isTranscriptionSupported()) {
5811
5985
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5812
5986
  reject(new Error('Webex Assistant is not enabled/supported'));
5813
5987
  }
5814
- if (_this34.getCurUserType() !== 'host') {
5988
+ if (_this35.getCurUserType() !== 'host') {
5815
5989
  _loggerProxy.default.logger.error('Meeting:index#setSpokenLanguage --> Only host can set spoken language');
5816
5990
  reject(new Error('Only host can set spoken language'));
5817
5991
  }
5818
5992
  try {
5819
5993
  var voiceaListenerLanguageUpdate = function voiceaListenerLanguageUpdate(payload) {
5820
5994
  // @ts-ignore
5821
- _this34.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5995
+ _this35.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5822
5996
  var languageCode = payload.languageCode;
5823
5997
  if (languageCode) {
5824
- _this34.transcription.languageOptions = _objectSpread(_objectSpread({}, _this34.transcription.languageOptions), {}, {
5998
+ _this35.transcription.languageOptions = _objectSpread(_objectSpread({}, _this35.transcription.languageOptions), {}, {
5825
5999
  currentSpokenLanguage: languageCode
5826
6000
  });
5827
6001
  resolve(languageCode);
@@ -5831,10 +6005,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5831
6005
  };
5832
6006
 
5833
6007
  // @ts-ignore
5834
- _this34.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
6008
+ _this35.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5835
6009
 
5836
6010
  // @ts-ignore
5837
- _this34.webex.internal.voicea.setSpokenLanguage(language);
6011
+ _this35.webex.internal.voicea.setSpokenLanguage(language);
5838
6012
  } catch (error) {
5839
6013
  _loggerProxy.default.logger.error("Meeting:index#setSpokenLanguage --> ".concat(error));
5840
6014
  reject(error);
@@ -5957,7 +6131,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5957
6131
  */
5958
6132
  function () {
5959
6133
  var _join = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19() {
5960
- var _this35 = this;
6134
+ var _this36 = this;
5961
6135
  var options,
5962
6136
  errorMessage,
5963
6137
  error,
@@ -6106,62 +6280,61 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6106
6280
  return _context19.abrupt("return", _promise.default.reject(_context19.t0));
6107
6281
  case 51:
6108
6282
  return _context19.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
6109
- _this35.meetingFiniteStateMachine.join();
6110
- _this35.setupLocusMediaRequest();
6283
+ _this36.meetingFiniteStateMachine.join();
6284
+ _this36.setupLocusMediaRequest();
6111
6285
 
6112
6286
  // @ts-ignore
6113
- _this35.webex.internal.device.meetingStarted();
6114
- (0, _classPrivateFieldSet2.default)(_this35, _isoLocalClientMeetingJoinTime, new Date().toISOString());
6287
+ _this36.webex.internal.device.meetingStarted();
6115
6288
  _loggerProxy.default.logger.log('Meeting:index#join --> Success');
6116
6289
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_SUCCESS, {
6117
- correlation_id: _this35.correlationId
6290
+ correlation_id: _this36.correlationId
6118
6291
  });
6119
6292
  joinSuccess(join);
6120
- _this35.deferJoin = undefined;
6293
+ _this36.deferJoin = undefined;
6121
6294
  return join;
6122
6295
  }).catch(function (error) {
6123
- var _this35$meetingInfo, _error$error;
6124
- _this35.meetingFiniteStateMachine.fail(error);
6296
+ var _this36$meetingInfo, _error$error;
6297
+ _this36.meetingFiniteStateMachine.fail(error);
6125
6298
  _loggerProxy.default.logger.error('Meeting:index#join --> Failed', error);
6126
6299
 
6127
6300
  // @ts-ignore
6128
- _this35.webex.internal.newMetrics.submitClientEvent({
6301
+ _this36.webex.internal.newMetrics.submitClientEvent({
6129
6302
  name: 'client.locus.join.response',
6130
6303
  payload: {
6131
6304
  identifiers: {
6132
- meetingLookupUrl: (_this35$meetingInfo = _this35.meetingInfo) === null || _this35$meetingInfo === void 0 ? void 0 : _this35$meetingInfo.meetingLookupUrl
6305
+ meetingLookupUrl: (_this36$meetingInfo = _this36.meetingInfo) === null || _this36$meetingInfo === void 0 ? void 0 : _this36$meetingInfo.meetingLookupUrl
6133
6306
  }
6134
6307
  },
6135
6308
  options: {
6136
- meetingId: _this35.id,
6309
+ meetingId: _this36.id,
6137
6310
  rawError: error
6138
6311
  }
6139
6312
  });
6140
6313
 
6141
6314
  // TODO: change this to error codes and pre defined dictionary
6142
6315
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_FAILURE, {
6143
- correlation_id: _this35.correlationId,
6316
+ correlation_id: _this36.correlationId,
6144
6317
  reason: (_error$error = error.error) === null || _error$error === void 0 ? void 0 : _error$error.message,
6145
6318
  stack: error.stack
6146
6319
  });
6147
6320
 
6148
6321
  // Upload logs on join Failure
6149
- _triggerProxy.default.trigger(_this35, {
6322
+ _triggerProxy.default.trigger(_this36, {
6150
6323
  file: 'meeting/index',
6151
6324
  function: 'join'
6152
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this35);
6325
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this36);
6153
6326
  joinFailed(error);
6154
- _this35.deferJoin = undefined;
6327
+ _this36.deferJoin = undefined;
6155
6328
  return _promise.default.reject(error);
6156
6329
  }).then(function (join) {
6157
6330
  // @ts-ignore - config coming from registerPlugin
6158
- if (_this35.config.enableAutomaticLLM) {
6331
+ if (_this36.config.enableAutomaticLLM) {
6159
6332
  // @ts-ignore
6160
- _this35.webex.internal.llm.on('online', _this35.handleLLMOnline);
6161
- _this35.updateLLMConnection().catch(function (error) {
6333
+ _this36.webex.internal.llm.on('online', _this36.handleLLMOnline);
6334
+ _this36.updateLLMConnection().catch(function (error) {
6162
6335
  _loggerProxy.default.logger.error('Meeting:index#join --> Transcription Socket Connection Failed', error);
6163
6336
  _metrics.default.sendBehavioralMetric(_constants2.default.LLM_CONNECTION_AFTER_JOIN_FAILURE, {
6164
- correlation_id: _this35.correlationId,
6337
+ correlation_id: _this36.correlationId,
6165
6338
  reason: error === null || error === void 0 ? void 0 : error.message,
6166
6339
  stack: error.stack
6167
6340
  });
@@ -6193,7 +6366,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6193
6366
  key: "updateLLMConnection",
6194
6367
  value: (function () {
6195
6368
  var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20() {
6196
- var _this36 = this;
6369
+ var _this37 = this;
6197
6370
  var _this$locusInfo6, url, _this$locusInfo6$info, _this$locusInfo6$info2, datachannelUrl, practiceSessionDatachannelUrl, isJoined, dataChannelUrl;
6198
6371
  return _regenerator.default.wrap(function _callee20$(_context20) {
6199
6372
  while (1) switch (_context20.prev = _context20.next) {
@@ -6233,9 +6406,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6233
6406
  case 11:
6234
6407
  return _context20.abrupt("return", this.webex.internal.llm.registerAndConnect(url, dataChannelUrl).then(function (registerAndConnectResult) {
6235
6408
  // @ts-ignore - Fix type
6236
- _this36.webex.internal.llm.off('event:relay.event', _this36.processRelayEvent);
6409
+ _this37.webex.internal.llm.off('event:relay.event', _this37.processRelayEvent);
6237
6410
  // @ts-ignore - Fix type
6238
- _this36.webex.internal.llm.on('event:relay.event', _this36.processRelayEvent);
6411
+ _this37.webex.internal.llm.on('event:relay.event', _this37.processRelayEvent);
6239
6412
  _loggerProxy.default.logger.info('Meeting:index#updateLLMConnection --> enabled to receive relay events!');
6240
6413
  return _promise.default.resolve(registerAndConnectResult);
6241
6414
  }));
@@ -6289,7 +6462,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6289
6462
  }, {
6290
6463
  key: "dialInPstn",
6291
6464
  value: function dialInPstn() {
6292
- var _this37 = this;
6465
+ var _this38 = this;
6293
6466
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial in devices from being provisioned
6294
6467
 
6295
6468
  var correlationId = this.correlationId,
@@ -6305,10 +6478,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6305
6478
  }).catch(function (error) {
6306
6479
  var _error$error2;
6307
6480
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_IN_FAILURE, {
6308
- correlation_id: _this37.correlationId,
6309
- dial_in_url: _this37.dialInUrl,
6481
+ correlation_id: _this38.correlationId,
6482
+ dial_in_url: _this38.dialInUrl,
6310
6483
  locus_id: locusUrl.split('/').pop(),
6311
- client_url: _this37.deviceUrl,
6484
+ client_url: _this38.deviceUrl,
6312
6485
  reason: (_error$error2 = error.error) === null || _error$error2 === void 0 ? void 0 : _error$error2.message,
6313
6486
  stack: error.stack
6314
6487
  });
@@ -6326,7 +6499,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6326
6499
  }, {
6327
6500
  key: "dialOutPstn",
6328
6501
  value: function dialOutPstn(phoneNumber) {
6329
- var _this38 = this;
6502
+ var _this39 = this;
6330
6503
  if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial out devices from being provisioned
6331
6504
 
6332
6505
  var correlationId = this.correlationId,
@@ -6343,10 +6516,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6343
6516
  }).catch(function (error) {
6344
6517
  var _error$error3;
6345
6518
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_OUT_FAILURE, {
6346
- correlation_id: _this38.correlationId,
6347
- dial_out_url: _this38.dialOutUrl,
6519
+ correlation_id: _this39.correlationId,
6520
+ dial_out_url: _this39.dialOutUrl,
6348
6521
  locus_id: locusUrl.split('/').pop(),
6349
- client_url: _this38.deviceUrl,
6522
+ client_url: _this39.deviceUrl,
6350
6523
  reason: (_error$error3 = error.error) === null || _error$error3 === void 0 ? void 0 : _error$error3.message,
6351
6524
  stack: error.stack
6352
6525
  });
@@ -6377,7 +6550,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6377
6550
  }, {
6378
6551
  key: "moveTo",
6379
6552
  value: function moveTo(resourceId) {
6380
- var _this39 = this;
6553
+ var _this40 = this;
6381
6554
  if (!resourceId) {
6382
6555
  throw new _parameter.default('Cannot move call without a resourceId.');
6383
6556
  }
@@ -6421,12 +6594,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6421
6594
  while (1) switch (_context21.prev = _context21.next) {
6422
6595
  case 0:
6423
6596
  _context21.prev = 0;
6424
- if (!(_this39.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6597
+ if (!(_this40.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6425
6598
  _context21.next = 4;
6426
6599
  break;
6427
6600
  }
6428
6601
  _context21.next = 4;
6429
- return _this39.releaseScreenShareFloor();
6602
+ return _this40.releaseScreenShareFloor();
6430
6603
  case 4:
6431
6604
  mediaSettings = {
6432
6605
  mediaDirection: {
@@ -6438,37 +6611,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6438
6611
  receiveShare: true
6439
6612
  }
6440
6613
  };
6441
- _this39.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6442
- _this39.mediaProperties.unsetRemoteMedia();
6614
+ _this40.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6615
+ _this40.mediaProperties.unsetRemoteMedia();
6443
6616
 
6444
6617
  // 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
6445
6618
  // once the device answers we close the old connection and create new media server connection with only share enabled
6446
- if (!_this39.statsAnalyzer) {
6619
+ if (!_this40.statsAnalyzer) {
6447
6620
  _context21.next = 10;
6448
6621
  break;
6449
6622
  }
6450
6623
  _context21.next = 10;
6451
- return _this39.statsAnalyzer.stopAnalyzer();
6624
+ return _this40.statsAnalyzer.stopAnalyzer();
6452
6625
  case 10:
6453
6626
  _context21.next = 12;
6454
- return _this39.closeRemoteStreams();
6627
+ return _this40.closeRemoteStreams();
6455
6628
  case 12:
6456
6629
  _context21.next = 14;
6457
- return _this39.closePeerConnections();
6630
+ return _this40.closePeerConnections();
6458
6631
  case 14:
6459
- _this39.cleanupLocalStreams();
6460
- _this39.unsetRemoteStreams();
6461
- _this39.unsetPeerConnections();
6462
- _this39.reconnectionManager.cleanUp();
6632
+ _this40.cleanupLocalStreams();
6633
+ _this40.unsetRemoteStreams();
6634
+ _this40.unsetPeerConnections();
6635
+ _this40.reconnectionManager.cleanUp();
6463
6636
  _context21.next = 20;
6464
- return _this39.addMedia({
6637
+ return _this40.addMedia({
6465
6638
  audioEnabled: false,
6466
6639
  videoEnabled: false,
6467
6640
  shareVideoEnabled: true
6468
6641
  });
6469
6642
  case 20:
6470
6643
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
6471
- _this39.isMoveToInProgress = false;
6644
+ _this40.isMoveToInProgress = false;
6472
6645
  _context21.next = 29;
6473
6646
  break;
6474
6647
  case 24:
@@ -6476,12 +6649,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6476
6649
  _context21.t0 = _context21["catch"](0);
6477
6650
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context21.t0);
6478
6651
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6479
- correlation_id: _this39.correlationId,
6480
- locus_id: _this39.locusUrl.split('/').pop(),
6652
+ correlation_id: _this40.correlationId,
6653
+ locus_id: _this40.locusUrl.split('/').pop(),
6481
6654
  reason: _context21.t0.message,
6482
6655
  stack: _context21.t0.stack
6483
6656
  });
6484
- _this39.isMoveToInProgress = false;
6657
+ _this40.isMoveToInProgress = false;
6485
6658
  case 29:
6486
6659
  case "end":
6487
6660
  return _context21.stop();
@@ -6497,17 +6670,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6497
6670
  resourceId: resourceId,
6498
6671
  moveToResource: true
6499
6672
  }).then(function () {
6500
- _this39.meetingFiniteStateMachine.join();
6673
+ _this40.meetingFiniteStateMachine.join();
6501
6674
  }).catch(function (error) {
6502
- _this39.meetingFiniteStateMachine.fail(error);
6675
+ _this40.meetingFiniteStateMachine.fail(error);
6503
6676
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6504
- correlation_id: _this39.correlationId,
6505
- locus_id: _this39.locusUrl.split('/').pop(),
6677
+ correlation_id: _this40.correlationId,
6678
+ locus_id: _this40.locusUrl.split('/').pop(),
6506
6679
  reason: error.message,
6507
6680
  stack: error.stack
6508
6681
  });
6509
6682
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
6510
- _this39.isMoveToInProgress = false;
6683
+ _this40.isMoveToInProgress = false;
6511
6684
  return _promise.default.reject(error);
6512
6685
  });
6513
6686
  }
@@ -6522,7 +6695,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6522
6695
  }, {
6523
6696
  key: "moveFrom",
6524
6697
  value: function moveFrom(resourceId) {
6525
- var _this40 = this;
6698
+ var _this41 = this;
6526
6699
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
6527
6700
  if (!resourceId) {
6528
6701
  throw new _parameter.default('Cannot move call without a resourceId.');
@@ -6537,19 +6710,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6537
6710
  }
6538
6711
  });
6539
6712
  return _util2.default.joinMeetingOptions(this).then(function () {
6540
- return _util2.default.leaveMeeting(_this40, {
6713
+ return _util2.default.leaveMeeting(_this41, {
6541
6714
  resourceId: resourceId,
6542
6715
  correlationId: oldCorrelationId,
6543
6716
  moveMeeting: true
6544
6717
  }).then(function () {
6545
- _this40.resourceId = '';
6718
+ _this41.resourceId = '';
6546
6719
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_SUCCESS);
6547
6720
  });
6548
6721
  }).catch(function (error) {
6549
- _this40.meetingFiniteStateMachine.fail(error);
6722
+ _this41.meetingFiniteStateMachine.fail(error);
6550
6723
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_FAILURE, {
6551
- correlation_id: _this40.correlationId,
6552
- locus_id: _this40.locusUrl.split('/').pop(),
6724
+ correlation_id: _this41.correlationId,
6725
+ locus_id: _this41.locusUrl.split('/').pop(),
6553
6726
  reason: error.message,
6554
6727
  stack: error.stack
6555
6728
  });
@@ -6598,7 +6771,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6598
6771
  turnServerInfo: turnServerInfo,
6599
6772
  bundlePolicy: bundlePolicy,
6600
6773
  // @ts-ignore - config coming from registerPlugin
6601
- iceCandidatesTimeout: this.config.iceCandidatesGatheringTimeout
6774
+ iceCandidatesTimeout: this.config.iceCandidatesGatheringTimeout,
6775
+ // @ts-ignore - config coming from registerPlugin
6776
+ disableAudioMainDtx: this.config.experimental.disableAudioMainDtx,
6777
+ // @ts-ignore - config coming from registerPlugin
6778
+ enableAudioTwcc: this.config.enableAudioTwccForMultistream,
6779
+ stopIceGatheringAfterFirstRelayCandidate:
6780
+ // @ts-ignore - config coming from registerPlugin
6781
+ this.config.stopIceGatheringAfterFirstRelayCandidate
6602
6782
  });
6603
6783
  this.mediaProperties.setMediaPeerConnection(mc);
6604
6784
  this.setupMediaConnectionListeners();
@@ -6665,9 +6845,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6665
6845
  }, {
6666
6846
  key: "forwardEvent",
6667
6847
  value: function forwardEvent(eventEmitter, eventTypeToForward, meetingEventType) {
6668
- var _this41 = this;
6848
+ var _this42 = this;
6669
6849
  eventEmitter.on(eventTypeToForward, function (data) {
6670
- return _triggerProxy.default.trigger(_this41, {
6850
+ return _triggerProxy.default.trigger(_this42, {
6671
6851
  file: 'meetings',
6672
6852
  function: 'addMedia'
6673
6853
  }, meetingEventType, data);
@@ -6737,7 +6917,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6737
6917
  key: "waitForMediaConnectionConnected",
6738
6918
  value: (function () {
6739
6919
  var _waitForMediaConnectionConnected = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24() {
6740
- var iceConnected, _this$mediaProperties8, _this$mediaProperties9, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, _this$mediaProperties14;
6920
+ var iceConnected, _this$mediaProperties8, _this$mediaProperties9, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, _this$mediaProperties14, timedOutError;
6741
6921
  return _regenerator.default.wrap(function _callee24$(_context24) {
6742
6922
  while (1) switch (_context24.prev = _context24.next) {
6743
6923
  case 0:
@@ -6745,7 +6925,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6745
6925
  _context24.next = 3;
6746
6926
  return this.mediaProperties.waitForMediaConnectionConnected();
6747
6927
  case 3:
6748
- _context24.next = 30;
6928
+ _context24.next = 32;
6749
6929
  break;
6750
6930
  case 5:
6751
6931
  _context24.prev = 5;
@@ -6787,7 +6967,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6787
6967
  errors: _context24.t14
6788
6968
  };
6789
6969
  _context24.t16 = {
6790
- meetingId: this.id
6970
+ meetingId: this.id,
6971
+ rawError: _context24.t0
6791
6972
  };
6792
6973
  _context24.t17 = {
6793
6974
  name: 'client.ice.end',
@@ -6796,8 +6977,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6796
6977
  };
6797
6978
  _context24.t1.submitClientEvent.call(_context24.t1, _context24.t17);
6798
6979
  case 29:
6799
- throw new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
6800
- case 30:
6980
+ timedOutError = new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
6981
+ timedOutError.cause = _context24.t0;
6982
+ throw timedOutError;
6983
+ case 32:
6801
6984
  case "end":
6802
6985
  return _context24.stop();
6803
6986
  }
@@ -6828,6 +7011,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6828
7011
  networkQualityMonitor: this.networkQualityMonitor,
6829
7012
  isMultistream: this.isMultistream
6830
7013
  });
7014
+ this.shareCAEventSentStatus = {
7015
+ transmitStart: false,
7016
+ transmitStop: false,
7017
+ receiveStart: false,
7018
+ receiveStop: false
7019
+ };
6831
7020
  this.setupStatsAnalyzerEventHandlers();
6832
7021
  this.networkQualityMonitor.on(_internalMediaCore.NetworkQualityEventNames.NETWORK_QUALITY, this.sendNetworkQualityEvent.bind(this));
6833
7022
  }
@@ -6844,7 +7033,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6844
7033
  key: "waitForRemoteSDPAnswer",
6845
7034
  value: (function () {
6846
7035
  var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25() {
6847
- var _this42 = this;
7036
+ var _this43 = this;
6848
7037
  var LOG_HEADER, deferSDPAnswer;
6849
7038
  return _regenerator.default.wrap(function _callee25$(_context25) {
6850
7039
  while (1) switch (_context25.prev = _context25.next) {
@@ -6860,23 +7049,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6860
7049
  deferSDPAnswer = this.deferSDPAnswer;
6861
7050
  this.sdpResponseTimer = setTimeout(function () {
6862
7051
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " timeout! no REMOTE SDP ANSWER received within ").concat(_constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT / 1000, " seconds"));
7052
+ var error = new Error('Timed out waiting for REMOTE SDP ANSWER');
7053
+
6863
7054
  // @ts-ignore
6864
- _this42.webex.internal.newMetrics.submitClientEvent({
7055
+ _this43.webex.internal.newMetrics.submitClientEvent({
6865
7056
  name: 'client.media-engine.remote-sdp-received',
6866
7057
  payload: {
6867
7058
  canProceed: false,
6868
7059
  errors: [
6869
7060
  // @ts-ignore
6870
- _this42.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
7061
+ _this43.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6871
7062
  clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
6872
7063
  })]
6873
7064
  },
6874
7065
  options: {
6875
- meetingId: _this42.id,
6876
- rawError: new Error('Timeout waiting for SDP answer')
7066
+ meetingId: _this43.id,
7067
+ rawError: error
6877
7068
  }
6878
7069
  });
6879
- deferSDPAnswer.reject(new Error('Timed out waiting for REMOTE SDP ANSWER'));
7070
+ deferSDPAnswer.reject(error);
6880
7071
  }, _constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT);
6881
7072
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " waiting for REMOTE SDP ANSWER..."));
6882
7073
  return _context25.abrupt("return", deferSDPAnswer.promise);
@@ -7016,7 +7207,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7016
7207
  break;
7017
7208
  case 7:
7018
7209
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " error waiting for media to connect using UDP, TCP and TURN-TLS"), error);
7019
- throw new _webexErrors.AddMediaFailed();
7210
+ throw new _webexErrors.AddMediaFailed(error);
7020
7211
  case 9:
7021
7212
  case "end":
7022
7213
  return _context28.stop();
@@ -7379,10 +7570,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7379
7570
  }, {
7380
7571
  key: "addMedia",
7381
7572
  value: function addMedia() {
7382
- var _this43 = this;
7573
+ var _this44 = this;
7383
7574
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7384
7575
  return this.addMediaInternal(function () {
7385
- return _this43.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7576
+ return _this44.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7386
7577
  }, undefined, false, options);
7387
7578
  }
7388
7579
 
@@ -7418,10 +7609,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7418
7609
  _this$remoteMediaMana,
7419
7610
  _yield$this$mediaProp,
7420
7611
  connectionType,
7612
+ ipVersion,
7421
7613
  selectedCandidatePairChanges,
7422
7614
  numTransports,
7423
- reachabilityStats,
7424
7615
  iceCandidateErrors,
7616
+ reachabilityMetrics,
7425
7617
  _this$mediaProperties15,
7426
7618
  _this$mediaProperties16,
7427
7619
  _this$mediaProperties17,
@@ -7443,7 +7635,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7443
7635
  _this$mediaProperties33,
7444
7636
  _this$mediaProperties34,
7445
7637
  _this$mediaProperties35,
7446
- reachabilityMetrics,
7638
+ _reachabilityMetrics,
7447
7639
  _yield$this$mediaProp2,
7448
7640
  _selectedCandidatePairChanges,
7449
7641
  _numTransports,
@@ -7564,28 +7756,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7564
7756
  case 46:
7565
7757
  _yield$this$mediaProp = _context35.sent;
7566
7758
  connectionType = _yield$this$mediaProp.connectionType;
7759
+ ipVersion = _yield$this$mediaProp.ipVersion;
7567
7760
  selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
7568
7761
  numTransports = _yield$this$mediaProp.numTransports;
7569
- _context35.next = 52;
7570
- return this.webex.meetings.reachability.getReachabilityMetrics();
7571
- case 52:
7572
- reachabilityStats = _context35.sent;
7573
7762
  iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7763
+ _context35.next = 54;
7764
+ return this.getMediaReachabilityMetricFields();
7765
+ case 54:
7766
+ reachabilityMetrics = _context35.sent;
7574
7767
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
7575
7768
  correlation_id: this.correlationId,
7576
7769
  locus_id: this.locusUrl.split('/').pop(),
7577
7770
  connectionType: connectionType,
7771
+ ipVersion: ipVersion,
7578
7772
  selectedCandidatePairChanges: selectedCandidatePairChanges,
7579
7773
  numTransports: numTransports,
7580
7774
  isMultistream: this.isMultistream,
7581
7775
  retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,
7582
7776
  isJoinWithMediaRetry: this.joinWithMediaRetryInfo.isRetry
7583
- }, reachabilityStats), iceCandidateErrors), {}, {
7777
+ }, reachabilityMetrics), iceCandidateErrors), {}, {
7584
7778
  iceCandidatesCount: this.iceCandidatesCount
7585
7779
  }));
7586
7780
  // @ts-ignore
7587
7781
  this.webex.internal.newMetrics.submitClientEvent({
7588
7782
  name: 'client.media-engine.ready',
7783
+ payload: {
7784
+ ipVersion: ipVersion
7785
+ },
7589
7786
  options: {
7590
7787
  meetingId: this.id
7591
7788
  }
@@ -7595,21 +7792,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7595
7792
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
7596
7793
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
7597
7794
  this.startPeriodicLogUpload();
7598
- _context35.next = 79;
7795
+ _context35.next = 80;
7599
7796
  break;
7600
- case 61:
7601
- _context35.prev = 61;
7797
+ case 62:
7798
+ _context35.prev = 62;
7602
7799
  _context35.t1 = _context35["catch"](19);
7603
7800
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context35.t1);
7604
7801
 
7605
7802
  // @ts-ignore
7606
- _context35.next = 66;
7607
- return this.webex.meetings.reachability.getReachabilityMetrics();
7608
- case 66:
7609
- reachabilityMetrics = _context35.sent;
7610
- _context35.next = 69;
7803
+ _context35.next = 67;
7804
+ return this.getMediaReachabilityMetricFields();
7805
+ case 67:
7806
+ _reachabilityMetrics = _context35.sent;
7807
+ _context35.next = 70;
7611
7808
  return this.mediaProperties.getCurrentConnectionInfo();
7612
- case 69:
7809
+ case 70:
7613
7810
  _yield$this$mediaProp2 = _context35.sent;
7614
7811
  _selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
7615
7812
  _numTransports = _yield$this$mediaProp2.numTransports;
@@ -7630,12 +7827,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7630
7827
  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',
7631
7828
  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',
7632
7829
  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'
7633
- }, reachabilityMetrics), _iceCandidateErrors), {}, {
7830
+ }, _reachabilityMetrics), _iceCandidateErrors), {}, {
7634
7831
  iceCandidatesCount: this.iceCandidatesCount
7635
7832
  }));
7636
- _context35.next = 76;
7833
+ _context35.next = 77;
7637
7834
  return this.cleanUpOnAddMediaFailure();
7638
- case 76:
7835
+ case 77:
7639
7836
  // Upload logs on error while adding media
7640
7837
  _triggerProxy.default.trigger(this, {
7641
7838
  file: 'meeting/index',
@@ -7647,15 +7844,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7647
7844
  });
7648
7845
  }
7649
7846
  throw _context35.t1;
7650
- case 79:
7651
- _context35.prev = 79;
7847
+ case 80:
7848
+ _context35.prev = 80;
7652
7849
  this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
7653
- return _context35.finish(79);
7654
- case 82:
7850
+ return _context35.finish(80);
7851
+ case 83:
7655
7852
  case "end":
7656
7853
  return _context35.stop();
7657
7854
  }
7658
- }, _callee35, this, [[19, 61, 79, 82], [24, 29]]);
7855
+ }, _callee35, this, [[19, 62, 80, 83], [24, 29]]);
7659
7856
  }));
7660
7857
  function addMediaInternal(_x33, _x34, _x35) {
7661
7858
  return _addMediaInternal.apply(this, arguments);
@@ -7687,7 +7884,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7687
7884
  * @memberof Meeting
7688
7885
  */
7689
7886
  function enqueueMediaUpdate(mediaUpdateType) {
7690
- var _this44 = this;
7887
+ var _this45 = this;
7691
7888
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7692
7889
  var canUpdateMediaNow = this.canUpdateMedia();
7693
7890
  return new _promise.default(function (resolve, reject) {
@@ -7698,9 +7895,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7698
7895
  options: options
7699
7896
  };
7700
7897
  _loggerProxy.default.logger.log("Meeting:index#enqueueMediaUpdate --> enqueuing media update type=".concat(mediaUpdateType));
7701
- _this44.queuedMediaUpdates.push(queueItem);
7898
+ _this45.queuedMediaUpdates.push(queueItem);
7702
7899
  if (canUpdateMediaNow) {
7703
- _this44.processNextQueuedMediaUpdate();
7900
+ _this45.processNextQueuedMediaUpdate();
7704
7901
  }
7705
7902
  });
7706
7903
  }
@@ -7805,7 +8002,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7805
8002
  }, {
7806
8003
  key: "acknowledge",
7807
8004
  value: function acknowledge(type) {
7808
- var _this45 = this;
8005
+ var _this46 = this;
7809
8006
  if (!type) {
7810
8007
  return _promise.default.reject(new _parameter.default('Type must be set to acknowledge the meeting.'));
7811
8008
  }
@@ -7817,12 +8014,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7817
8014
  }).then(function (response) {
7818
8015
  return _promise.default.resolve(response);
7819
8016
  }).then(function (response) {
7820
- _this45.meetingFiniteStateMachine.ring(type);
8017
+ _this46.meetingFiniteStateMachine.ring(type);
7821
8018
  // @ts-ignore
7822
- _this45.webex.internal.newMetrics.submitClientEvent({
8019
+ _this46.webex.internal.newMetrics.submitClientEvent({
7823
8020
  name: 'client.alert.displayed',
7824
8021
  options: {
7825
- meetingId: _this45.id
8022
+ meetingId: _this46.id
7826
8023
  }
7827
8024
  });
7828
8025
  return _promise.default.resolve({
@@ -7847,12 +8044,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7847
8044
  }, {
7848
8045
  key: "decline",
7849
8046
  value: function decline(reason) {
7850
- var _this46 = this;
8047
+ var _this47 = this;
7851
8048
  return _util2.default.declineMeeting(this, reason).then(function (decline) {
7852
- _this46.meetingFiniteStateMachine.decline();
8049
+ _this47.meetingFiniteStateMachine.decline();
7853
8050
  return _promise.default.resolve(decline);
7854
8051
  }).catch(function (error) {
7855
- _this46.meetingFiniteStateMachine.fail(error);
8052
+ _this47.meetingFiniteStateMachine.fail(error);
7856
8053
  return _promise.default.reject(error);
7857
8054
  });
7858
8055
  }
@@ -7903,7 +8100,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7903
8100
  }, {
7904
8101
  key: "leave",
7905
8102
  value: function leave() {
7906
- var _this47 = this;
8103
+ var _this48 = this;
7907
8104
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7908
8105
  var leaveReason = options.reason || _constants.MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
7909
8106
 
@@ -7915,7 +8112,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7915
8112
  var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7916
8113
  return (
7917
8114
  // @ts-ignore
7918
- _this47.webex.internal.newMetrics.submitClientEvent({
8115
+ _this48.webex.internal.newMetrics.submitClientEvent({
7919
8116
  name: 'client.call.leave',
7920
8117
  payload: _objectSpread({
7921
8118
  trigger: 'user-interaction',
@@ -7923,7 +8120,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7923
8120
  leaveReason: options.clientEventLeaveReason
7924
8121
  }, payload),
7925
8122
  options: {
7926
- meetingId: _this47.id
8123
+ meetingId: _this48.id
7927
8124
  }
7928
8125
  })
7929
8126
  );
@@ -7932,24 +8129,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7932
8129
  return _util2.default.leaveMeeting(this, options).then(function (leave) {
7933
8130
  // CA team recommends submitting this *after* locus /leave
7934
8131
  submitLeaveMetric();
7935
- _this47.meetingFiniteStateMachine.leave();
7936
- _this47.clearMeetingData();
8132
+ _this48.meetingFiniteStateMachine.leave();
8133
+ _this48.clearMeetingData();
7937
8134
 
7938
8135
  // upload logs on leave irrespective of meeting delete
7939
- _triggerProxy.default.trigger(_this47, {
8136
+ _triggerProxy.default.trigger(_this48, {
7940
8137
  file: 'meeting/index',
7941
8138
  function: 'leave'
7942
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
8139
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
7943
8140
 
7944
8141
  // TODO: more testing before we remove this code, we are not sure the scenarios for destroy here
7945
- if (_this47.wirelessShare || _this47.guest) {
8142
+ if (_this48.wirelessShare || _this48.guest) {
7946
8143
  // If screen sharing clean the meeting object
7947
- _triggerProxy.default.trigger(_this47, {
8144
+ _triggerProxy.default.trigger(_this48, {
7948
8145
  file: 'meeting/index',
7949
8146
  function: 'leave'
7950
8147
  }, _constants.EVENTS.DESTROY_MEETING, {
7951
8148
  reason: options.reason,
7952
- meetingId: _this47.id
8149
+ meetingId: _this48.id
7953
8150
  });
7954
8151
  }
7955
8152
  _loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
@@ -7966,16 +8163,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7966
8163
  shownToUser: false
7967
8164
  }]
7968
8165
  });
7969
- _this47.meetingFiniteStateMachine.fail(error);
8166
+ _this48.meetingFiniteStateMachine.fail(error);
7970
8167
  _loggerProxy.default.logger.error('Meeting:index#leave --> Failed to leave ', error);
7971
8168
  // upload logs on leave irrespective of meeting delete
7972
- _triggerProxy.default.trigger(_this47, {
8169
+ _triggerProxy.default.trigger(_this48, {
7973
8170
  file: 'meeting/index',
7974
8171
  function: 'leave'
7975
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
8172
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
7976
8173
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_LEAVE_FAILURE, {
7977
- correlation_id: _this47.correlationId,
7978
- locus_id: _this47.locusUrl.split('/').pop(),
8174
+ correlation_id: _this48.correlationId,
8175
+ locus_id: _this48.locusUrl.split('/').pop(),
7979
8176
  reason: error.message,
7980
8177
  stack: error.stack,
7981
8178
  code: error.code
@@ -7995,7 +8192,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7995
8192
  }, {
7996
8193
  key: "startWhiteboardShare",
7997
8194
  value: function startWhiteboardShare(channelUrl, resourceToken) {
7998
- var _this48 = this;
8195
+ var _this49 = this;
7999
8196
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
8000
8197
  return element.name === 'whiteboard';
8001
8198
  });
@@ -8024,13 +8221,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8024
8221
  body.resourceToken = resourceToken;
8025
8222
  }
8026
8223
  return this.meetingRequest.changeMeetingFloor(body).then(function () {
8027
- _this48.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8224
+ _this49.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8028
8225
  return _promise.default.resolve();
8029
8226
  }).catch(function (error) {
8030
8227
  _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
8031
8228
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_START_WHITEBOARD_SHARE_FAILURE, {
8032
- correlation_id: _this48.correlationId,
8033
- locus_id: _this48.locusUrl.split('/').pop(),
8229
+ correlation_id: _this49.correlationId,
8230
+ locus_id: _this49.locusUrl.split('/').pop(),
8034
8231
  reason: error.message,
8035
8232
  stack: error.stack,
8036
8233
  board: {
@@ -8053,7 +8250,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8053
8250
  }, {
8054
8251
  key: "stopWhiteboardShare",
8055
8252
  value: function stopWhiteboardShare(channelUrl) {
8056
- var _this49 = this;
8253
+ var _this50 = this;
8057
8254
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
8058
8255
  return element.name === 'whiteboard';
8059
8256
  });
@@ -8076,8 +8273,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8076
8273
  }).catch(function (error) {
8077
8274
  _loggerProxy.default.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
8078
8275
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_STOP_WHITEBOARD_SHARE_FAILURE, {
8079
- correlation_id: _this49.correlationId,
8080
- locus_id: _this49.locusUrl.split('/').pop(),
8276
+ correlation_id: _this50.correlationId,
8277
+ locus_id: _this50.locusUrl.split('/').pop(),
8081
8278
  reason: error.message,
8082
8279
  stack: error.stack,
8083
8280
  board: {
@@ -8099,7 +8296,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8099
8296
  }, {
8100
8297
  key: "requestScreenShareFloor",
8101
8298
  value: function requestScreenShareFloor() {
8102
- var _this50 = this;
8299
+ var _this51 = this;
8103
8300
  if (!this.mediaProperties.hasLocalShareStream() || !this.mediaProperties.mediaDirection.sendShare) {
8104
8301
  _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, ")"));
8105
8302
  this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
@@ -8130,34 +8327,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8130
8327
  resourceUrl: this.resourceUrl,
8131
8328
  shareInstanceId: this.localShareInstanceId
8132
8329
  }).then(function () {
8133
- _this50.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8330
+ _this51.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8134
8331
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_SUCCESS, {
8135
- correlation_id: _this50.correlationId,
8136
- locus_id: _this50.locusUrl.split('/').pop()
8332
+ correlation_id: _this51.correlationId,
8333
+ locus_id: _this51.locusUrl.split('/').pop()
8137
8334
  });
8138
8335
  return _promise.default.resolve();
8139
8336
  }).catch(function (error) {
8140
8337
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
8141
8338
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_FAILURE, {
8142
- correlation_id: _this50.correlationId,
8143
- locus_id: _this50.locusUrl.split('/').pop(),
8339
+ correlation_id: _this51.correlationId,
8340
+ locus_id: _this51.locusUrl.split('/').pop(),
8144
8341
  reason: error.message,
8145
8342
  stack: error.stack
8146
8343
  });
8147
8344
 
8148
8345
  // @ts-ignore
8149
- _this50.webex.internal.newMetrics.submitClientEvent({
8346
+ _this51.webex.internal.newMetrics.submitClientEvent({
8150
8347
  name: 'client.share.floor-granted.local',
8151
8348
  payload: {
8152
8349
  mediaType: 'share',
8153
8350
  errors: _util2.default.getChangeMeetingFloorErrorPayload(error.message),
8154
- shareInstanceId: _this50.localShareInstanceId
8351
+ shareInstanceId: _this51.localShareInstanceId
8155
8352
  },
8156
8353
  options: {
8157
- meetingId: _this50.id
8354
+ meetingId: _this51.id
8158
8355
  }
8159
8356
  });
8160
- _this50.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8357
+ _this51.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8161
8358
  return _promise.default.reject(error);
8162
8359
  });
8163
8360
  }
@@ -8180,10 +8377,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8180
8377
  }, {
8181
8378
  key: "requestScreenShareFloorIfPending",
8182
8379
  value: function requestScreenShareFloorIfPending() {
8183
- var _this51 = this;
8380
+ var _this52 = this;
8184
8381
  if (this.floorGrantPending && this.state === _constants.MEETING_STATE.STATES.JOINED) {
8185
8382
  this.requestScreenShareFloor().then(function () {
8186
- _this51.floorGrantPending = false;
8383
+ _this52.floorGrantPending = false;
8187
8384
  });
8188
8385
  }
8189
8386
  }
@@ -8197,7 +8394,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8197
8394
  }, {
8198
8395
  key: "releaseScreenShareFloor",
8199
8396
  value: function releaseScreenShareFloor() {
8200
- var _this52 = this;
8397
+ var _this53 = this;
8201
8398
  var content = this.locusInfo.mediaShares.find(function (element) {
8202
8399
  return element.name === _constants.CONTENT;
8203
8400
  });
@@ -8232,8 +8429,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8232
8429
  }).catch(function (error) {
8233
8430
  _loggerProxy.default.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
8234
8431
  _metrics.default.sendBehavioralMetric(_constants2.default.STOP_FLOOR_REQUEST_FAILURE, {
8235
- correlation_id: _this52.correlationId,
8236
- locus_id: _this52.locusUrl.split('/').pop(),
8432
+ correlation_id: _this53.correlationId,
8433
+ locus_id: _this53.locusUrl.split('/').pop(),
8237
8434
  reason: error.message,
8238
8435
  stack: error.stack
8239
8436
  });
@@ -8413,7 +8610,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8413
8610
  }, {
8414
8611
  key: "changeVideoLayout",
8415
8612
  value: function changeVideoLayout(layoutType) {
8416
- var _this53 = this;
8613
+ var _this54 = this;
8417
8614
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
8418
8615
  var main = renderInfo.main,
8419
8616
  content = renderInfo.content;
@@ -8467,7 +8664,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8467
8664
  }
8468
8665
  this.lastVideoLayoutInfo = (0, _lodash.cloneDeep)(layoutInfo);
8469
8666
  this.locusInfo.once(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED, function (envelope) {
8470
- _triggerProxy.default.trigger(_this53, {
8667
+ _triggerProxy.default.trigger(_this54, {
8471
8668
  file: 'meeting/index',
8472
8669
  function: 'changeVideoLayout'
8473
8670
  }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_LAYOUT_UPDATE, {
@@ -8583,7 +8780,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8583
8780
  }, {
8584
8781
  key: "endMeetingForAll",
8585
8782
  value: function endMeetingForAll() {
8586
- var _this54 = this;
8783
+ var _this55 = this;
8587
8784
  // @ts-ignore
8588
8785
  this.webex.internal.newMetrics.submitClientEvent({
8589
8786
  name: 'client.call.leave',
@@ -8601,25 +8798,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8601
8798
  locus_id: this.locusId
8602
8799
  });
8603
8800
  return _util2.default.endMeetingForAll(this).then(function (end) {
8604
- _this54.meetingFiniteStateMachine.end();
8605
- _this54.clearMeetingData();
8801
+ _this55.meetingFiniteStateMachine.end();
8802
+ _this55.clearMeetingData();
8606
8803
  // upload logs on leave irrespective of meeting delete
8607
- _triggerProxy.default.trigger(_this54, {
8804
+ _triggerProxy.default.trigger(_this55, {
8608
8805
  file: 'meeting/index',
8609
8806
  function: 'endMeetingForAll'
8610
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this54);
8807
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8611
8808
  return end;
8612
8809
  }).catch(function (error) {
8613
- _this54.meetingFiniteStateMachine.fail(error);
8810
+ _this55.meetingFiniteStateMachine.fail(error);
8614
8811
  _loggerProxy.default.logger.error('Meeting:index#endMeetingForAll --> Failed to end meeting ', error);
8615
8812
  // upload logs on leave irrespective of meeting delete
8616
- _triggerProxy.default.trigger(_this54, {
8813
+ _triggerProxy.default.trigger(_this55, {
8617
8814
  file: 'meeting/index',
8618
8815
  function: 'endMeetingForAll'
8619
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this54);
8816
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8620
8817
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_FAILURE, {
8621
- correlation_id: _this54.correlationId,
8622
- locus_id: _this54.locusUrl.split('/').pop(),
8818
+ correlation_id: _this55.correlationId,
8819
+ locus_id: _this55.locusUrl.split('/').pop(),
8623
8820
  reason: error.message,
8624
8821
  stack: error.stack,
8625
8822
  code: error.code
@@ -8684,6 +8881,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8684
8881
  });
8685
8882
  }
8686
8883
 
8884
+ /**
8885
+ * Method to set post meeting data consent.
8886
+ *
8887
+ * @param {boolean} accept - whether consent accepted or declined
8888
+ * @returns {Promise}
8889
+ * @public
8890
+ * @memberof Meeting
8891
+ */
8892
+ }, {
8893
+ key: "setPostMeetingDataConsent",
8894
+ value: function setPostMeetingDataConsent(accept) {
8895
+ return this.meetingRequest.setPostMeetingDataConsent({
8896
+ postMeetingDataConsent: accept,
8897
+ locusUrl: this.locusUrl,
8898
+ deviceUrl: this.deviceUrl,
8899
+ selfId: this.members.selfId
8900
+ });
8901
+ }
8902
+
8687
8903
  /**
8688
8904
  * Throws if we don't have a media connection created
8689
8905
  *
@@ -8761,7 +8977,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8761
8977
  _this$mediaProperties43,
8762
8978
  _this$mediaProperties44,
8763
8979
  _this$mediaProperties45,
8764
- _this55 = this;
8980
+ _this56 = this;
8765
8981
  var LOG_HEADER = 'Meeting:index#updateTranscodedMediaConnection -->';
8766
8982
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " starting"));
8767
8983
  if (!this.canUpdateMedia()) {
@@ -8786,8 +9002,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8786
9002
  }).catch(function (error) {
8787
9003
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error: "), error);
8788
9004
  _metrics.default.sendBehavioralMetric(_constants2.default.UPDATE_MEDIA_FAILURE, {
8789
- correlation_id: _this55.correlationId,
8790
- locus_id: _this55.locusUrl.split('/').pop(),
9005
+ correlation_id: _this56.correlationId,
9006
+ locus_id: _this56.locusUrl.split('/').pop(),
8791
9007
  reason: error.message,
8792
9008
  stack: error.stack
8793
9009
  });
@@ -9009,10 +9225,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9009
9225
  return this.updateTranscodedMediaConnection();
9010
9226
  case 31:
9011
9227
  if (!floorRequestNeeded) {
9012
- _context40.next = 37;
9228
+ _context40.next = 39;
9013
9229
  break;
9014
9230
  }
9015
9231
  this.localShareInstanceId = _uuid.default.v4();
9232
+ this.shareCAEventSentStatus.transmitStart = false;
9233
+ this.shareCAEventSentStatus.transmitStop = false;
9016
9234
 
9017
9235
  // @ts-ignore
9018
9236
  this.webex.internal.newMetrics.submitClientEvent({
@@ -9033,9 +9251,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9033
9251
  // we're sending the http request to Locus to request the screen share floor
9034
9252
  // only after the SDP update, because that's how it's always been done for transcoded meetings
9035
9253
  // and also if sharing from the start, we need confluence to have been created
9036
- _context40.next = 37;
9254
+ _context40.next = 39;
9037
9255
  return this.enqueueScreenShareFloorRequest();
9038
- case 37:
9256
+ case 39:
9039
9257
  case "end":
9040
9258
  return _context40.stop();
9041
9259
  }
@@ -9173,6 +9391,56 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9173
9391
  }
9174
9392
  return _promise.default.resolve();
9175
9393
  }
9394
+
9395
+ /**
9396
+ * Gets the media reachability metrics
9397
+ *
9398
+ * @returns {Promise<MediaReachabilityMetrics>}
9399
+ */
9400
+ }, {
9401
+ key: "getMediaReachabilityMetricFields",
9402
+ value: (function () {
9403
+ var _getMediaReachabilityMetricFields = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee42() {
9404
+ var reachabilityMetrics, successKeys, totalSuccessCases, isSubnetReachable, selectedCluster;
9405
+ return _regenerator.default.wrap(function _callee42$(_context42) {
9406
+ while (1) switch (_context42.prev = _context42.next) {
9407
+ case 0:
9408
+ _context42.next = 2;
9409
+ return this.webex.meetings.reachability.getReachabilityMetrics();
9410
+ case 2:
9411
+ reachabilityMetrics = _context42.sent;
9412
+ 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'];
9413
+ totalSuccessCases = successKeys.reduce(function (total, key) {
9414
+ var value = reachabilityMetrics[key];
9415
+ if (typeof value === 'number') {
9416
+ return total + value;
9417
+ }
9418
+ return total;
9419
+ }, 0);
9420
+ isSubnetReachable = null;
9421
+ if (totalSuccessCases > 0) {
9422
+ // @ts-ignore
9423
+ isSubnetReachable = this.webex.meetings.reachability.isSubnetReachable(this.mediaServerIp);
9424
+ }
9425
+ selectedCluster = null;
9426
+ if (this.mediaConnections && this.mediaConnections.length > 0) {
9427
+ selectedCluster = this.mediaConnections[0].mediaAgentCluster;
9428
+ }
9429
+ return _context42.abrupt("return", _objectSpread(_objectSpread({}, reachabilityMetrics), {}, {
9430
+ isSubnetReachable: isSubnetReachable,
9431
+ selectedCluster: selectedCluster
9432
+ }));
9433
+ case 10:
9434
+ case "end":
9435
+ return _context42.stop();
9436
+ }
9437
+ }, _callee42, this);
9438
+ }));
9439
+ function getMediaReachabilityMetricFields() {
9440
+ return _getMediaReachabilityMetricFields.apply(this, arguments);
9441
+ }
9442
+ return getMediaReachabilityMetricFields;
9443
+ }())
9176
9444
  }]);
9177
9445
  return Meeting;
9178
9446
  }(_webexCore.StatelessWebexPlugin);