@webex/plugin-meetings 3.8.0-web-workers-keepalive.1 → 3.8.1-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) 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 +4 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/constants.js +22 -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 +30 -10
  18. package/dist/locus-info/controlsUtils.js.map +1 -1
  19. package/dist/locus-info/index.js +83 -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 +9 -2
  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 +568 -328
  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 +4 -4
  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 +9 -1
  41. package/dist/meeting/util.js.map +1 -1
  42. package/dist/meeting-info/meeting-info-v2.js +19 -13
  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 +76 -0
  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 +45 -9
  51. package/dist/member/index.js.map +1 -1
  52. package/dist/member/types.js +3 -0
  53. package/dist/member/types.js.map +1 -1
  54. package/dist/member/util.js +335 -356
  55. package/dist/member/util.js.map +1 -1
  56. package/dist/members/collection.js.map +1 -1
  57. package/dist/members/index.js +137 -29
  58. package/dist/members/index.js.map +1 -1
  59. package/dist/members/request.js +38 -0
  60. package/dist/members/request.js.map +1 -1
  61. package/dist/members/util.js +36 -1
  62. package/dist/members/util.js.map +1 -1
  63. package/dist/metrics/constants.js +1 -0
  64. package/dist/metrics/constants.js.map +1 -1
  65. package/dist/reachability/clusterReachability.js +23 -31
  66. package/dist/reachability/clusterReachability.js.map +1 -1
  67. package/dist/reachability/index.js +42 -2
  68. package/dist/reachability/index.js.map +1 -1
  69. package/dist/reconnection-manager/index.js +2 -2
  70. package/dist/reconnection-manager/index.js.map +1 -1
  71. package/dist/roap/index.js.map +1 -1
  72. package/dist/roap/turnDiscovery.js +45 -27
  73. package/dist/roap/turnDiscovery.js.map +1 -1
  74. package/dist/roap/types.js +17 -0
  75. package/dist/roap/types.js.map +1 -0
  76. package/dist/types/common/errors/webex-errors.d.ts +7 -1
  77. package/dist/types/config.d.ts +2 -0
  78. package/dist/types/constants.d.ts +15 -85
  79. package/dist/types/controls-options-manager/enums.d.ts +3 -1
  80. package/dist/types/controls-options-manager/types.d.ts +7 -1
  81. package/dist/types/locus-info/index.d.ts +3 -3
  82. package/dist/types/locus-info/selfUtils.d.ts +216 -1
  83. package/dist/types/media/properties.d.ts +15 -0
  84. package/dist/types/meeting/in-meeting-actions.d.ts +16 -0
  85. package/dist/types/meeting/index.d.ts +35 -1
  86. package/dist/types/meeting/muteState.d.ts +0 -1
  87. package/dist/types/meeting/request.d.ts +12 -1
  88. package/dist/types/meeting/request.type.d.ts +6 -0
  89. package/dist/types/meeting/util.d.ts +3 -1
  90. package/dist/types/meeting-info/meeting-info-v2.d.ts +2 -1
  91. package/dist/types/meetings/index.d.ts +28 -0
  92. package/dist/types/member/index.d.ts +20 -6
  93. package/dist/types/member/types.d.ts +73 -14
  94. package/dist/types/member/util.d.ts +156 -1
  95. package/dist/types/members/collection.d.ts +6 -5
  96. package/dist/types/members/index.d.ts +32 -43
  97. package/dist/types/members/request.d.ts +26 -0
  98. package/dist/types/members/util.d.ts +27 -0
  99. package/dist/types/metrics/constants.d.ts +1 -0
  100. package/dist/types/reachability/clusterReachability.d.ts +2 -6
  101. package/dist/types/reachability/index.d.ts +8 -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 +2 -0
  110. package/src/constants.ts +23 -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 +48 -12
  115. package/src/locus-info/index.ts +88 -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 +11 -2
  120. package/src/meeting/in-meeting-actions.ts +32 -0
  121. package/src/meeting/index.ts +356 -87
  122. package/src/meeting/locusMediaRequest.ts +0 -18
  123. package/src/meeting/muteState.ts +4 -4
  124. package/src/meeting/request.ts +36 -1
  125. package/src/meeting/request.type.ts +7 -0
  126. package/src/meeting/util.ts +9 -1
  127. package/src/meeting-info/meeting-info-v2.ts +7 -2
  128. package/src/meeting-info/utilv2.ts +5 -0
  129. package/src/meetings/index.ts +76 -0
  130. package/src/meetings/util.ts +18 -0
  131. package/src/member/index.ts +57 -22
  132. package/src/member/types.ts +82 -16
  133. package/src/member/util.ts +357 -353
  134. package/src/members/collection.ts +4 -3
  135. package/src/members/index.ts +137 -18
  136. package/src/members/request.ts +44 -0
  137. package/src/members/util.ts +43 -1
  138. package/src/metrics/constants.ts +1 -0
  139. package/src/reachability/clusterReachability.ts +26 -25
  140. package/src/reachability/index.ts +55 -1
  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 +131 -9
  148. package/test/unit/spec/locus-info/index.js +195 -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 +40 -2
  153. package/test/unit/spec/meeting/in-meeting-actions.ts +19 -4
  154. package/test/unit/spec/meeting/index.js +553 -36
  155. package/test/unit/spec/meeting/locusMediaRequest.ts +0 -30
  156. package/test/unit/spec/meeting/muteState.js +73 -2
  157. package/test/unit/spec/meeting/request.js +32 -1
  158. package/test/unit/spec/meeting/utils.js +79 -33
  159. package/test/unit/spec/meeting-info/meetinginfov2.js +41 -0
  160. package/test/unit/spec/meeting-info/utilv2.js +19 -0
  161. package/test/unit/spec/meetings/index.js +68 -1
  162. package/test/unit/spec/members/index.js +304 -78
  163. package/test/unit/spec/members/request.js +68 -22
  164. package/test/unit/spec/members/utils.js +75 -0
  165. package/test/unit/spec/reachability/clusterReachability.ts +41 -55
  166. package/test/unit/spec/reachability/index.ts +89 -0
  167. package/test/unit/spec/reconnection-manager/index.js +4 -4
  168. package/test/unit/spec/roap/turnDiscovery.ts +110 -28
@@ -507,6 +507,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
507
507
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "allowMediaInLobby", void 0);
508
508
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "localShareInstanceId", void 0);
509
509
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "remoteShareInstanceId", void 0);
510
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "shareCAEventSentStatus", void 0);
510
511
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "turnDiscoverySkippedReason", void 0);
511
512
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "turnServerUsed", void 0);
512
513
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "areVoiceaEventsSetup", false);
@@ -561,6 +562,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
561
562
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "rtcMetrics", void 0);
562
563
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "uploadLogsTimer", void 0);
563
564
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "logUploadIntervalIndex", void 0);
565
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "mediaServerIp", void 0);
564
566
  /**
565
567
  * Callback called when a relay event is received from meeting LLM Connection
566
568
  * @param {RelayEvent} e Event object coming from LLM Connection
@@ -705,6 +707,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
705
707
  */
706
708
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "roapMessageReceived", function (roapMessage) {
707
709
  var mediaServer = roapMessage.messageType === 'ANSWER' ? _util3.default.getMediaServer(roapMessage.sdp) : undefined;
710
+ var mediaServerIp = roapMessage.messageType === 'ANSWER' ? _util3.default.getMediaServerIp(roapMessage.sdp) : undefined;
708
711
  if (_this.isMultistream && mediaServer && mediaServer !== 'homer') {
709
712
  throw new _multistreamNotSupportedError.default("Client asked for multistream backend (Homer), but got ".concat(mediaServer, " instead"));
710
713
  }
@@ -712,6 +715,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
712
715
  if (mediaServer) {
713
716
  _this.mediaProperties.webrtcMediaConnection.mediaServer = mediaServer;
714
717
  }
718
+ if (_this.isMultistream && mediaServerIp) {
719
+ _this.mediaServerIp = mediaServerIp;
720
+ }
715
721
  });
716
722
  /**
717
723
  * This function makes sure we send the right metrics when local and remote SDPs are processed/generated
@@ -1054,18 +1060,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1054
1060
  * @memberof Meetings
1055
1061
  */
1056
1062
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "setupStatsAnalyzerEventHandlers", function () {
1057
- _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.MEDIA_QUALITY, function (options) {
1058
- var _this$webex$meetings$;
1059
- // TODO: might have to send the same event to the developer
1060
- // Add ip address info if geo hint is present
1061
- // @ts-ignore fix type
1062
- options.data.intervalMetadata.peerReflexiveIP =
1063
- // @ts-ignore
1064
- ((_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;
1065
- 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
+ }
1066
1073
 
1067
- // Count members that are in the meeting
1068
- 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) {
1069
1077
  return member.isInMeeting;
1070
1078
  }).length;
1071
1079
 
@@ -1074,10 +1082,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1074
1082
  name: 'client.mediaquality.event',
1075
1083
  options: {
1076
1084
  meetingId: _this.id,
1077
- networkType: options.data.networkType
1085
+ networkType: _this.statsAnalyzer.getNetworkType()
1078
1086
  },
1079
1087
  payload: {
1080
- intervals: [options.data]
1088
+ intervals: [event.data]
1081
1089
  }
1082
1090
  });
1083
1091
  });
@@ -1086,85 +1094,101 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1086
1094
  file: 'meeting/index',
1087
1095
  function: 'addMedia'
1088
1096
  }, _constants.EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED, data);
1089
- // @ts-ignore
1090
- _this.webex.internal.newMetrics.submitClientEvent({
1091
- name: 'client.media.tx.start',
1092
- payload: {
1093
- mediaType: data.mediaType,
1094
- shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1095
- },
1096
- options: {
1097
- 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;
1098
1111
  }
1099
- });
1112
+ }
1100
1113
  });
1101
1114
  _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.LOCAL_MEDIA_STOPPED, function (data) {
1102
- // @ts-ignore
1103
- _this.webex.internal.newMetrics.submitClientEvent({
1104
- name: 'client.media.tx.stop',
1105
- payload: {
1106
- mediaType: data.mediaType,
1107
- shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1108
- },
1109
- options: {
1110
- 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;
1111
1129
  }
1112
- });
1130
+ }
1113
1131
  });
1114
1132
  _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED, function (data) {
1115
1133
  _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
1116
1134
  file: 'meeting/index',
1117
1135
  function: 'addMedia'
1118
1136
  }, _constants.EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED, data);
1119
- // @ts-ignore
1120
- _this.webex.internal.newMetrics.submitClientEvent({
1121
- name: 'client.media.rx.start',
1122
- payload: {
1123
- mediaType: data.mediaType,
1124
- shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1125
- },
1126
- options: {
1127
- meetingId: _this.id
1128
- }
1129
- });
1130
- if (data.mediaType === 'share') {
1137
+ if (data.mediaType !== 'share' || !_this.shareCAEventSentStatus.receiveStart) {
1131
1138
  // @ts-ignore
1132
1139
  _this.webex.internal.newMetrics.submitClientEvent({
1133
- name: 'client.media.render.start',
1140
+ name: 'client.media.rx.start',
1134
1141
  payload: {
1135
- mediaType: 'share',
1136
- shareInstanceId: _this.remoteShareInstanceId
1142
+ mediaType: data.mediaType,
1143
+ shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1137
1144
  },
1138
1145
  options: {
1139
1146
  meetingId: _this.id
1140
1147
  }
1141
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
+ }
1142
1163
  }
1143
1164
  });
1144
1165
  _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.REMOTE_MEDIA_STOPPED, function (data) {
1145
- // @ts-ignore
1146
- _this.webex.internal.newMetrics.submitClientEvent({
1147
- name: 'client.media.rx.stop',
1148
- payload: {
1149
- mediaType: data.mediaType,
1150
- shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1151
- },
1152
- options: {
1153
- meetingId: _this.id
1154
- }
1155
- });
1156
- if (data.mediaType === 'share') {
1166
+ if (data.mediaType !== 'share' || !_this.shareCAEventSentStatus.receiveStop) {
1157
1167
  // @ts-ignore
1158
1168
  _this.webex.internal.newMetrics.submitClientEvent({
1159
- name: 'client.media.render.stop',
1169
+ name: 'client.media.rx.stop',
1160
1170
  payload: {
1161
- mediaType: 'share',
1162
- shareInstanceId: _this.remoteShareInstanceId
1171
+ mediaType: data.mediaType,
1172
+ shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1163
1173
  },
1164
1174
  options: {
1165
1175
  meetingId: _this.id
1166
1176
  }
1167
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
+ }
1168
1192
  }
1169
1193
  });
1170
1194
  });
@@ -2018,7 +2042,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2018
2042
  captions: [],
2019
2043
  isListening: false,
2020
2044
  commandText: '',
2021
- languageOptions: {},
2045
+ languageOptions: {
2046
+ currentSpokenLanguage: 'en'
2047
+ },
2022
2048
  showCaptionBox: false,
2023
2049
  transcribingRequestStatus: 'INACTIVE',
2024
2050
  isCaptioning: false,
@@ -2106,6 +2132,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2106
2132
  */
2107
2133
  _this.remoteShareInstanceId = null;
2108
2134
 
2135
+ /**
2136
+ * Status used for ensuring we do not oversend metrics
2137
+ * @instance
2138
+ * @private
2139
+ * @memberof Meeting
2140
+ */
2141
+ _this.shareCAEventSentStatus = {
2142
+ transmitStart: false,
2143
+ transmitStop: false,
2144
+ receiveStart: false,
2145
+ receiveStop: false
2146
+ };
2147
+
2109
2148
  /**
2110
2149
  * The class that helps to control recording functions: start, stop, pause, resume, etc
2111
2150
  * @instance
@@ -2267,6 +2306,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2267
2306
  * @memberof Meeting
2268
2307
  */
2269
2308
  (0, _classPrivateFieldSet2.default)((0, _assertThisInitialized2.default)(_this), _isoLocalClientMeetingJoinTime, undefined);
2309
+
2310
+ // We clear the error cache of CA events on every new meeting instance
2311
+ // @ts-ignore - Fix type
2312
+ _this.webex.internal.newMetrics.callDiagnosticMetrics.clearErrorCache();
2313
+
2314
+ /**
2315
+ * IP Address of the remote media server
2316
+ * @instance
2317
+ * @type {string}
2318
+ * @private
2319
+ * @memberof Meeting
2320
+ */
2321
+ _this.mediaServerIp = undefined;
2270
2322
  return _this;
2271
2323
  }
2272
2324
 
@@ -3256,6 +3308,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3256
3308
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS, function (payload) {
3257
3309
  _this13.members.locusParticipantsUpdate(payload);
3258
3310
  });
3311
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.PARTICIPANT_REASON_CHANGED, function (payload) {
3312
+ _triggerProxy.default.trigger(_this13, {
3313
+ file: 'meeting/index',
3314
+ function: 'setUpLocusParticipantsListener'
3315
+ }, _constants.EVENT_TRIGGERS.MEETING_PARTICIPANT_REASON_CHANGED, {
3316
+ payload: payload
3317
+ });
3318
+ });
3259
3319
  }
3260
3320
 
3261
3321
  /**
@@ -3342,8 +3402,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3342
3402
  }
3343
3403
  }
3344
3404
  });
3345
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED, function (_ref12) {
3346
- var enable = _ref12.enable;
3405
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED, function (_ref12) {
3406
+ var spokenLanguage = _ref12.spokenLanguage;
3407
+ if (spokenLanguage) {
3408
+ _this14.transcription.languageOptions.currentSpokenLanguage = spokenLanguage;
3409
+ // @ts-ignore
3410
+ _this14.webex.internal.voicea.onSpokenLanguageUpdate(spokenLanguage);
3411
+ _triggerProxy.default.trigger(_this14, {
3412
+ file: 'meeting/index',
3413
+ function: 'setupLocusControlsListener'
3414
+ }, _constants.EVENT_TRIGGERS.MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED, {
3415
+ spokenLanguage: spokenLanguage
3416
+ });
3417
+ }
3418
+ });
3419
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED, function (_ref13) {
3420
+ var enable = _ref13.enable;
3347
3421
  _triggerProxy.default.trigger(_this14, {
3348
3422
  file: 'meeting/index',
3349
3423
  function: 'setupLocusControlsListener'
@@ -3351,24 +3425,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3351
3425
  enable: enable
3352
3426
  });
3353
3427
  });
3354
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, function (_ref13) {
3355
- var breakout = _ref13.breakout;
3428
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, function (_ref14) {
3429
+ var breakout = _ref14.breakout;
3356
3430
  _this14.breakouts.updateBreakout(breakout);
3357
3431
  _triggerProxy.default.trigger(_this14, {
3358
3432
  file: 'meeting/index',
3359
3433
  function: 'setupLocusControlsListener'
3360
3434
  }, _constants.EVENT_TRIGGERS.MEETING_BREAKOUTS_UPDATE);
3361
3435
  });
3362
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED, function (_ref14) {
3363
- var interpretation = _ref14.interpretation;
3436
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED, function (_ref15) {
3437
+ var interpretation = _ref15.interpretation;
3364
3438
  _this14.simultaneousInterpretation.updateInterpretation(interpretation);
3365
3439
  _triggerProxy.default.trigger(_this14, {
3366
3440
  file: 'meeting/index',
3367
3441
  function: 'setupLocusControlsListener'
3368
3442
  }, _constants.EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE);
3369
3443
  });
3370
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, function (_ref15) {
3371
- var entryExitTone = _ref15.entryExitTone;
3444
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, function (_ref16) {
3445
+ var entryExitTone = _ref16.entryExitTone;
3372
3446
  _triggerProxy.default.trigger(_this14, {
3373
3447
  file: 'meeting/index',
3374
3448
  function: 'setupLocusControlsListener'
@@ -3376,8 +3450,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3376
3450
  entryExitTone: entryExitTone
3377
3451
  });
3378
3452
  });
3379
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, function (_ref16) {
3380
- var state = _ref16.state;
3453
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, function (_ref17) {
3454
+ var state = _ref17.state;
3381
3455
  _triggerProxy.default.trigger(_this14, {
3382
3456
  file: 'meeting/index',
3383
3457
  function: 'setupLocusControlsListener'
@@ -3385,8 +3459,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3385
3459
  state: state
3386
3460
  });
3387
3461
  });
3388
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, function (_ref17) {
3389
- var state = _ref17.state;
3462
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, function (_ref18) {
3463
+ var state = _ref18.state;
3390
3464
  _triggerProxy.default.trigger(_this14, {
3391
3465
  file: 'meeting/index',
3392
3466
  function: 'setupLocusControlsListener'
@@ -3394,8 +3468,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3394
3468
  state: state
3395
3469
  });
3396
3470
  });
3397
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, function (_ref18) {
3398
- var state = _ref18.state;
3471
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, function (_ref19) {
3472
+ var state = _ref19.state;
3399
3473
  _triggerProxy.default.trigger(_this14, {
3400
3474
  file: 'meeting/index',
3401
3475
  function: 'setupLocusControlsListener'
@@ -3403,8 +3477,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3403
3477
  state: state
3404
3478
  });
3405
3479
  });
3406
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, function (_ref19) {
3407
- var state = _ref19.state;
3480
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, function (_ref20) {
3481
+ var state = _ref20.state;
3408
3482
  _triggerProxy.default.trigger(_this14, {
3409
3483
  file: 'meeting/index',
3410
3484
  function: 'setupLocusControlsListener'
@@ -3412,8 +3486,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3412
3486
  state: state
3413
3487
  });
3414
3488
  });
3415
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, function (_ref20) {
3416
- var state = _ref20.state;
3489
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, function (_ref21) {
3490
+ var state = _ref21.state;
3417
3491
  _triggerProxy.default.trigger(_this14, {
3418
3492
  file: 'meeting/index',
3419
3493
  function: 'setupLocusControlsListener'
@@ -3421,8 +3495,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3421
3495
  state: state
3422
3496
  });
3423
3497
  });
3424
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, function (_ref21) {
3425
- var state = _ref21.state;
3498
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, function (_ref22) {
3499
+ var state = _ref22.state;
3426
3500
  _triggerProxy.default.trigger(_this14, {
3427
3501
  file: 'meeting/index',
3428
3502
  function: 'setupLocusControlsListener'
@@ -3430,8 +3504,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3430
3504
  state: state
3431
3505
  });
3432
3506
  });
3433
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED, function (_ref22) {
3434
- var state = _ref22.state;
3507
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED, function (_ref23) {
3508
+ var state = _ref23.state;
3435
3509
  _triggerProxy.default.trigger(_this14, {
3436
3510
  file: 'meeting/index',
3437
3511
  function: 'setupLocusControlsListener'
@@ -3439,8 +3513,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3439
3513
  state: state
3440
3514
  });
3441
3515
  });
3442
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED, function (_ref23) {
3443
- var state = _ref23.state;
3516
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED, function (_ref24) {
3517
+ var state = _ref24.state;
3444
3518
  _triggerProxy.default.trigger(_this14, {
3445
3519
  file: 'meeting/index',
3446
3520
  function: 'setupLocusControlsListener'
@@ -3448,8 +3522,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3448
3522
  state: state
3449
3523
  });
3450
3524
  });
3451
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED, function (_ref24) {
3452
- var state = _ref24.state;
3525
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED, function (_ref25) {
3526
+ var state = _ref25.state;
3453
3527
  _this14.webinar.updatePracticeSessionStatus(state);
3454
3528
  _triggerProxy.default.trigger(_this14, {
3455
3529
  file: 'meeting/index',
@@ -3458,8 +3532,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3458
3532
  state: state
3459
3533
  });
3460
3534
  });
3461
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED, function (_ref25) {
3462
- var state = _ref25.state;
3535
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED, function (_ref26) {
3536
+ var state = _ref26.state;
3463
3537
  _triggerProxy.default.trigger(_this14, {
3464
3538
  file: 'meeting/index',
3465
3539
  function: 'setupLocusControlsListener'
@@ -3467,8 +3541,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3467
3541
  state: state
3468
3542
  });
3469
3543
  });
3470
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, function (_ref26) {
3471
- var state = _ref26.state;
3544
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, function (_ref27) {
3545
+ var state = _ref27.state;
3472
3546
  _triggerProxy.default.trigger(_this14, {
3473
3547
  file: 'meeting/index',
3474
3548
  function: 'setupLocusControlsListener'
@@ -3476,6 +3550,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3476
3550
  state: state
3477
3551
  });
3478
3552
  });
3553
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED, function (_ref28) {
3554
+ var state = _ref28.state;
3555
+ _triggerProxy.default.trigger(_this14, {
3556
+ file: 'meeting/index',
3557
+ function: 'setupLocusControlsListener'
3558
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_ANNOTATION_UPDATED, {
3559
+ state: state
3560
+ });
3561
+ });
3562
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED, function (_ref29) {
3563
+ var state = _ref29.state;
3564
+ _triggerProxy.default.trigger(_this14, {
3565
+ file: 'meeting/index',
3566
+ function: 'setupLocusControlsListener'
3567
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_REMOTE_DESKTOP_CONTROL_UPDATED, {
3568
+ state: state
3569
+ });
3570
+ });
3479
3571
  }
3480
3572
 
3481
3573
  /**
@@ -3515,7 +3607,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3515
3607
  var _this15 = this;
3516
3608
  // Will get triggered on local and remote share
3517
3609
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, /*#__PURE__*/function () {
3518
- var _ref27 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3610
+ var _ref30 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3519
3611
  var _payload$previous, _payload$previous2;
3520
3612
  var _payload$current, contentShare, whiteboardShare, previousContentShare, previousWhiteboardShare, newShareStatus, _this15$locusInfo, _this15$locusInfo$inf, _this15$webinar, oldShareStatus, sendStartedSharingRemote, _this15$mediaProperti;
3521
3613
  return _regenerator.default.wrap(function _callee8$(_context8) {
@@ -3601,6 +3693,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3601
3693
  case 26:
3602
3694
  sendStartedSharingRemote = function sendStartedSharingRemote() {
3603
3695
  _this15.remoteShareInstanceId = contentShare.shareInstanceId;
3696
+ _this15.shareCAEventSentStatus.receiveStart = false;
3697
+ _this15.shareCAEventSentStatus.receiveStop = false;
3604
3698
  _triggerProxy.default.trigger(_this15, {
3605
3699
  file: 'meetings/index',
3606
3700
  function: 'remoteShare'
@@ -3674,6 +3768,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3674
3768
  // if we got here, then some remote participant has stolen
3675
3769
  // the presentation from another remote participant
3676
3770
  _this15.remoteShareInstanceId = contentShare.shareInstanceId;
3771
+ _this15.shareCAEventSentStatus.receiveStart = false;
3772
+ _this15.shareCAEventSentStatus.receiveStop = false;
3677
3773
  _triggerProxy.default.trigger(_this15, {
3678
3774
  file: 'meetings/index',
3679
3775
  function: 'remoteShare'
@@ -3714,7 +3810,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3714
3810
  }, _callee8, null, [[27,, 31, 34]]);
3715
3811
  }));
3716
3812
  return function (_x8) {
3717
- return _ref27.apply(this, arguments);
3813
+ return _ref30.apply(this, arguments);
3718
3814
  };
3719
3815
  }());
3720
3816
  }
@@ -3828,8 +3924,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3828
3924
  });
3829
3925
  }
3830
3926
  });
3831
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref28) {
3832
- var isInitializing = _ref28.isInitializing;
3927
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref31) {
3928
+ var isInitializing = _ref31.isInitializing;
3833
3929
  _this19.updateMeetingActions();
3834
3930
  _this19.recordingController.setDisplayHints(_this19.userDisplayHints);
3835
3931
  _this19.recordingController.setUserPolicy(_this19.selfUserPolicies);
@@ -3967,7 +4063,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3967
4063
  _this21.updateLLMConnection();
3968
4064
  });
3969
4065
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, /*#__PURE__*/function () {
3970
- var _ref29 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
4066
+ var _ref32 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
3971
4067
  var _this21$rtcMetrics;
3972
4068
  return _regenerator.default.wrap(function _callee9$(_context9) {
3973
4069
  while (1) switch (_context9.prev = _context9.next) {
@@ -4001,7 +4097,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4001
4097
  }, _callee9);
4002
4098
  }));
4003
4099
  return function (_x9) {
4004
- return _ref29.apply(this, arguments);
4100
+ return _ref32.apply(this, arguments);
4005
4101
  };
4006
4102
  }());
4007
4103
 
@@ -4120,7 +4216,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4120
4216
  }
4121
4217
  });
4122
4218
  this.locusInfo.on(_constants.EVENTS.DESTROY_MEETING, /*#__PURE__*/function () {
4123
- var _ref30 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4219
+ var _ref33 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4124
4220
  return _regenerator.default.wrap(function _callee10$(_context10) {
4125
4221
  while (1) switch (_context10.prev = _context10.next) {
4126
4222
  case 0:
@@ -4180,7 +4276,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4180
4276
  }, _callee10, null, [[8, 14]]);
4181
4277
  }));
4182
4278
  return function (_x10) {
4183
- return _ref30.apply(this, arguments);
4279
+ return _ref33.apply(this, arguments);
4184
4280
  };
4185
4281
  }());
4186
4282
  }
@@ -4239,6 +4335,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4239
4335
  return this.members.cancelPhoneInvite(invitee);
4240
4336
  }
4241
4337
 
4338
+ /**
4339
+ * Cancel an SIP call invitation made during a meeting
4340
+ * @param {Object} invitee
4341
+ * @param {String} invitee.memberId
4342
+ * @returns {Promise} see #members.cancelSIPInvite
4343
+ * @public
4344
+ * @memberof Meeting
4345
+ */
4346
+ }, {
4347
+ key: "cancelSIPInvite",
4348
+ value: function cancelSIPInvite(invitee) {
4349
+ return this.members.cancelSIPInvite(invitee);
4350
+ }
4351
+
4242
4352
  /**
4243
4353
  * Admit the guest(s) to the call once they are waiting.
4244
4354
  * If the host/cohost is in a breakout session, the locus url
@@ -4282,6 +4392,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4282
4392
  key: "beRightBack",
4283
4393
  value: (function () {
4284
4394
  var _beRightBack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(enabled) {
4395
+ var _this24 = this;
4285
4396
  var errorMessage, error, _errorMessage, _error;
4286
4397
  return _regenerator.default.wrap(function _callee11$(_context11) {
4287
4398
  while (1) switch (_context11.prev = _context11.next) {
@@ -4304,7 +4415,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4304
4415
  _loggerProxy.default.logger.error(_error);
4305
4416
  return _context11.abrupt("return", _promise.default.reject(_error));
4306
4417
  case 10:
4307
- return _context11.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager));
4418
+ return _context11.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager).then(function () {
4419
+ if (_this24.audio && enabled) {
4420
+ // locus mutes the participant with brb enabled request,
4421
+ // so we need to explicitly update remote mute for correct logic flow
4422
+ _this24.audio.handleServerRemoteMuteUpdate(_this24, enabled);
4423
+ }
4424
+ }).catch(function (error) {
4425
+ return _promise.default.reject(error);
4426
+ }));
4308
4427
  case 11:
4309
4428
  case "end":
4310
4429
  return _context11.stop();
@@ -4490,7 +4609,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4490
4609
  canAdmitParticipant: _util2.default.canAdmitParticipant(this.userDisplayHints),
4491
4610
  canLock: _util2.default.canUserLock(this.userDisplayHints),
4492
4611
  canUnlock: _util2.default.canUserUnlock(this.userDisplayHints),
4493
- canShareWhiteBoard: _util2.default.canShareWhiteBoard(this.userDisplayHints),
4612
+ canShareWhiteBoard: _util2.default.canShareWhiteBoard(this.userDisplayHints, this.selfUserPolicies),
4494
4613
  canSetDisallowUnmute: _util5.default.canSetDisallowUnmute(this.userDisplayHints),
4495
4614
  canUnsetDisallowUnmute: _util5.default.canUnsetDisallowUnmute(this.userDisplayHints),
4496
4615
  canSetMuteOnEntry: _util5.default.canSetMuteOnEntry(this.userDisplayHints),
@@ -4520,6 +4639,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4520
4639
  canSelectSpokenLanguages: _util2.default.canSelectSpokenLanguages(this.userDisplayHints),
4521
4640
  waitingForOthersToJoin: _util2.default.waitingForOthersToJoin(this.userDisplayHints),
4522
4641
  canSendReactions: _util2.default.canSendReactions(this.inMeetingActions.canSendReactions, this.userDisplayHints),
4642
+ requiresPostMeetingDataConsentPrompt: _util2.default.requiresPostMeetingDataConsentPrompt(this.userDisplayHints),
4523
4643
  canManageBreakout: _util2.default.canManageBreakout(this.userDisplayHints),
4524
4644
  canStartBreakout: _util2.default.canStartBreakout(this.userDisplayHints),
4525
4645
  canBroadcastMessageToBreakout: _util2.default.canBroadcastMessageToBreakout(this.userDisplayHints, this.selfUserPolicies),
@@ -4528,6 +4648,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4528
4648
  canUserAskForHelp: _util2.default.canUserAskForHelp(this.userDisplayHints),
4529
4649
  canUserRenameSelfAndObserved: _util2.default.canUserRenameSelfAndObserved(this.userDisplayHints),
4530
4650
  canUserRenameOthers: _util2.default.canUserRenameOthers(this.userDisplayHints),
4651
+ canMoveToLobby: _util2.default.canMoveToLobby(this.userDisplayHints),
4531
4652
  canMuteAll: _util5.default.hasHints({
4532
4653
  requiredHints: [_constants.DISPLAY_HINTS.MUTE_ALL],
4533
4654
  displayHints: this.userDisplayHints
@@ -4659,6 +4780,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4659
4780
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_FILE_TRANSFER],
4660
4781
  policies: this.selfUserPolicies
4661
4782
  }),
4783
+ canRealtimeCloseCaption: _util5.default.hasPolicies({
4784
+ requiredPolicies: [_constants.SELF_POLICY.SUPPORT_REALTIME_CLOSE_CAPTION],
4785
+ policies: this.selfUserPolicies
4786
+ }),
4787
+ canRealtimeCloseCaptionManual: _util5.default.hasPolicies({
4788
+ requiredPolicies: [_constants.SELF_POLICY.SUPPORT_REALTIME_CLOSE_CAPTION_MANUAL],
4789
+ policies: this.selfUserPolicies
4790
+ }),
4662
4791
  canChat: _util5.default.hasPolicies({
4663
4792
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_CHAT],
4664
4793
  policies: this.selfUserPolicies
@@ -4695,6 +4824,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4695
4824
  canAnnotate: _util5.default.hasPolicies({
4696
4825
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_ANNOTATION],
4697
4826
  policies: this.selfUserPolicies
4827
+ }),
4828
+ canEnableAnnotation: _util5.default.hasHints({
4829
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_ANNOTATION_MEETING_OPTION],
4830
+ displayHints: this.userDisplayHints
4831
+ }),
4832
+ canDisableAnnotation: _util5.default.hasHints({
4833
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_ANNOTATION_MEETING_OPTION],
4834
+ displayHints: this.userDisplayHints
4835
+ }),
4836
+ canEnableRemoteDesktopControl: _util5.default.hasHints({
4837
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_RDC_MEETING_OPTION],
4838
+ displayHints: this.userDisplayHints
4839
+ }),
4840
+ canDisableRemoteDesktopControl: _util5.default.hasHints({
4841
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_RDC_MEETING_OPTION],
4842
+ displayHints: this.userDisplayHints
4698
4843
  })
4699
4844
  }) || changed;
4700
4845
  }
@@ -4799,7 +4944,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4799
4944
  }, {
4800
4945
  key: "setLogUploadTimer",
4801
4946
  value: function setLogUploadTimer() {
4802
- var _this24 = this;
4947
+ var _this25 = this;
4803
4948
  // 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
4804
4949
  var LOG_UPLOAD_INTERVALS = [0.1, 15, 30, 60]; // in minutes
4805
4950
 
@@ -4810,15 +4955,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4810
4955
  this.logUploadIntervalIndex += 1;
4811
4956
  }
4812
4957
  this.uploadLogsTimer = (0, _commonTimers.safeSetTimeout)(function () {
4813
- _this24.uploadLogsTimer = undefined;
4814
- _this24.uploadLogs();
4958
+ _this25.uploadLogsTimer = undefined;
4959
+ _this25.uploadLogs();
4815
4960
 
4816
4961
  // just as an extra precaution, to avoid uploading logs forever in case something goes wrong
4817
4962
  // and the page remains opened, we stop it if there is no media connection
4818
- if (!_this24.mediaProperties.webrtcMediaConnection) {
4963
+ if (!_this25.mediaProperties.webrtcMediaConnection) {
4819
4964
  return;
4820
4965
  }
4821
- _this24.setLogUploadTimer();
4966
+ _this25.setLogUploadTimer();
4822
4967
  }, delay);
4823
4968
  }
4824
4969
 
@@ -4885,7 +5030,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4885
5030
  }, {
4886
5031
  key: "closeRemoteStreams",
4887
5032
  value: function closeRemoteStreams() {
4888
- var _this25 = this;
5033
+ var _this26 = this;
4889
5034
  var _this$mediaProperties6 = this.mediaProperties,
4890
5035
  remoteAudioStream = _this$mediaProperties6.remoteAudioStream,
4891
5036
  remoteVideoStream = _this$mediaProperties6.remoteVideoStream,
@@ -4899,7 +5044,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4899
5044
  */
4900
5045
  // eslint-disable-next-line @typescript-eslint/no-shadow
4901
5046
  var triggerMediaStoppedEvent = function triggerMediaStoppedEvent(mediaType) {
4902
- _triggerProxy.default.trigger(_this25, {
5047
+ _triggerProxy.default.trigger(_this26, {
4903
5048
  file: 'meeting/index',
4904
5049
  function: 'closeRemoteStreams'
4905
5050
  }, _constants.EVENT_TRIGGERS.MEDIA_STOPPED, {
@@ -5207,7 +5352,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5207
5352
  }, {
5208
5353
  key: "setMercuryListener",
5209
5354
  value: function setMercuryListener() {
5210
- var _this26 = this;
5355
+ var _this27 = this;
5211
5356
  // Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury
5212
5357
  // if the meeting has active peer connections, it should try to reconnect.
5213
5358
  // @ts-ignore
@@ -5215,33 +5360,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5215
5360
  _loggerProxy.default.logger.info('Meeting:index#setMercuryListener --> Web socket online');
5216
5361
 
5217
5362
  // Only send restore event when it was disconnected before and for connected later
5218
- if (!_this26.hasWebsocketConnected) {
5363
+ if (!_this27.hasWebsocketConnected) {
5219
5364
  // @ts-ignore
5220
- _this26.webex.internal.newMetrics.submitClientEvent({
5365
+ _this27.webex.internal.newMetrics.submitClientEvent({
5221
5366
  name: 'client.mercury.connection.restored',
5222
5367
  options: {
5223
- meetingId: _this26.id
5368
+ meetingId: _this27.id
5224
5369
  }
5225
5370
  });
5226
5371
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_RESTORED, {
5227
- correlation_id: _this26.correlationId
5372
+ correlation_id: _this27.correlationId
5228
5373
  });
5229
5374
  }
5230
- _this26.hasWebsocketConnected = true;
5375
+ _this27.hasWebsocketConnected = true;
5231
5376
  });
5232
5377
 
5233
5378
  // @ts-ignore
5234
5379
  this.webex.internal.mercury.on(_constants.OFFLINE, function () {
5235
5380
  _loggerProxy.default.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
5236
5381
  // @ts-ignore
5237
- _this26.webex.internal.newMetrics.submitClientEvent({
5382
+ _this27.webex.internal.newMetrics.submitClientEvent({
5238
5383
  name: 'client.mercury.connection.lost',
5239
5384
  options: {
5240
- meetingId: _this26.id
5385
+ meetingId: _this27.id
5241
5386
  }
5242
5387
  });
5243
5388
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_FAILURE, {
5244
- correlation_id: _this26.correlationId
5389
+ correlation_id: _this27.correlationId
5245
5390
  });
5246
5391
  });
5247
5392
  }
@@ -5348,7 +5493,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5348
5493
  }, {
5349
5494
  key: "muteAudio",
5350
5495
  value: function muteAudio() {
5351
- var _this27 = this;
5496
+ var _this28 = this;
5352
5497
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5353
5498
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5354
5499
  }
@@ -5364,22 +5509,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5364
5509
 
5365
5510
  // First, stop sending the local audio media
5366
5511
  return logRequest(this.audio.handleClientRequest(this, true).then(function () {
5367
- _util2.default.handleAudioLogging(_this27.mediaProperties.audioStream);
5512
+ _util2.default.handleAudioLogging(_this28.mediaProperties.audioStream);
5368
5513
  // @ts-ignore
5369
- _this27.webex.internal.newMetrics.submitClientEvent({
5514
+ _this28.webex.internal.newMetrics.submitClientEvent({
5370
5515
  name: 'client.muted',
5371
5516
  payload: {
5372
5517
  trigger: 'user-interaction',
5373
5518
  mediaType: 'audio'
5374
5519
  },
5375
5520
  options: {
5376
- meetingId: _this27.id
5521
+ meetingId: _this28.id
5377
5522
  }
5378
5523
  });
5379
5524
  }).catch(function (error) {
5380
5525
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_AUDIO_FAILURE, {
5381
- correlation_id: _this27.correlationId,
5382
- locus_id: _this27.locusUrl.split('/').pop(),
5526
+ correlation_id: _this28.correlationId,
5527
+ locus_id: _this28.locusUrl.split('/').pop(),
5383
5528
  reason: error.message,
5384
5529
  stack: error.stack
5385
5530
  });
@@ -5398,7 +5543,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5398
5543
  }, {
5399
5544
  key: "unmuteAudio",
5400
5545
  value: function unmuteAudio() {
5401
- var _this28 = this;
5546
+ var _this29 = this;
5402
5547
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5403
5548
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5404
5549
  }
@@ -5414,22 +5559,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5414
5559
 
5415
5560
  // First, send the control to unmute the participant on the server
5416
5561
  return logRequest(this.audio.handleClientRequest(this, false).then(function () {
5417
- _util2.default.handleAudioLogging(_this28.mediaProperties.audioStream);
5562
+ _util2.default.handleAudioLogging(_this29.mediaProperties.audioStream);
5418
5563
  // @ts-ignore
5419
- _this28.webex.internal.newMetrics.submitClientEvent({
5564
+ _this29.webex.internal.newMetrics.submitClientEvent({
5420
5565
  name: 'client.unmuted',
5421
5566
  payload: {
5422
5567
  trigger: 'user-interaction',
5423
5568
  mediaType: 'audio'
5424
5569
  },
5425
5570
  options: {
5426
- meetingId: _this28.id
5571
+ meetingId: _this29.id
5427
5572
  }
5428
5573
  });
5429
5574
  }).catch(function (error) {
5430
5575
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_AUDIO_FAILURE, {
5431
- correlation_id: _this28.correlationId,
5432
- locus_id: _this28.locusUrl.split('/').pop(),
5576
+ correlation_id: _this29.correlationId,
5577
+ locus_id: _this29.locusUrl.split('/').pop(),
5433
5578
  reason: error.message,
5434
5579
  stack: error.stack
5435
5580
  });
@@ -5448,7 +5593,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5448
5593
  }, {
5449
5594
  key: "muteVideo",
5450
5595
  value: function muteVideo() {
5451
- var _this29 = this;
5596
+ var _this30 = this;
5452
5597
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5453
5598
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5454
5599
  }
@@ -5462,22 +5607,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5462
5607
  return _promise.default.reject(new _parameter.default('no video control associated to the meeting'));
5463
5608
  }
5464
5609
  return logRequest(this.video.handleClientRequest(this, true).then(function () {
5465
- _util2.default.handleVideoLogging(_this29.mediaProperties.videoStream);
5610
+ _util2.default.handleVideoLogging(_this30.mediaProperties.videoStream);
5466
5611
  // @ts-ignore
5467
- _this29.webex.internal.newMetrics.submitClientEvent({
5612
+ _this30.webex.internal.newMetrics.submitClientEvent({
5468
5613
  name: 'client.muted',
5469
5614
  payload: {
5470
5615
  trigger: 'user-interaction',
5471
5616
  mediaType: 'video'
5472
5617
  },
5473
5618
  options: {
5474
- meetingId: _this29.id
5619
+ meetingId: _this30.id
5475
5620
  }
5476
5621
  });
5477
5622
  }).catch(function (error) {
5478
5623
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_VIDEO_FAILURE, {
5479
- correlation_id: _this29.correlationId,
5480
- locus_id: _this29.locusUrl.split('/').pop(),
5624
+ correlation_id: _this30.correlationId,
5625
+ locus_id: _this30.locusUrl.split('/').pop(),
5481
5626
  reason: error.message,
5482
5627
  stack: error.stack
5483
5628
  });
@@ -5496,7 +5641,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5496
5641
  }, {
5497
5642
  key: "unmuteVideo",
5498
5643
  value: function unmuteVideo() {
5499
- var _this30 = this;
5644
+ var _this31 = this;
5500
5645
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5501
5646
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5502
5647
  }
@@ -5510,22 +5655,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5510
5655
  return _promise.default.reject(new _parameter.default('no audio control associated to the meeting'));
5511
5656
  }
5512
5657
  return logRequest(this.video.handleClientRequest(this, false).then(function () {
5513
- _util2.default.handleVideoLogging(_this30.mediaProperties.videoStream);
5658
+ _util2.default.handleVideoLogging(_this31.mediaProperties.videoStream);
5514
5659
  // @ts-ignore
5515
- _this30.webex.internal.newMetrics.submitClientEvent({
5660
+ _this31.webex.internal.newMetrics.submitClientEvent({
5516
5661
  name: 'client.unmuted',
5517
5662
  payload: {
5518
5663
  trigger: 'user-interaction',
5519
5664
  mediaType: 'video'
5520
5665
  },
5521
5666
  options: {
5522
- meetingId: _this30.id
5667
+ meetingId: _this31.id
5523
5668
  }
5524
5669
  });
5525
5670
  }).catch(function (error) {
5526
5671
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_VIDEO_FAILURE, {
5527
- correlation_id: _this30.correlationId,
5528
- locus_id: _this30.locusUrl.split('/').pop(),
5672
+ correlation_id: _this31.correlationId,
5673
+ locus_id: _this31.locusUrl.split('/').pop(),
5529
5674
  reason: error.message,
5530
5675
  stack: error.stack
5531
5676
  });
@@ -5555,7 +5700,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5555
5700
  key: "joinWithMedia",
5556
5701
  value: (function () {
5557
5702
  var _joinWithMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {
5558
- var _this31 = this;
5703
+ var _this32 = this;
5559
5704
  var options,
5560
5705
  mediaOptions,
5561
5706
  _options$joinOptions,
@@ -5638,7 +5783,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5638
5783
  case 35:
5639
5784
  _context16.next = 37;
5640
5785
  return this.addMediaInternal(function () {
5641
- return _this31.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5786
+ return _this32.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5642
5787
  }, turnServerInfo, forceTurnDiscovery, mediaOptions);
5643
5788
  case 37:
5644
5789
  mediaResponse = _context16.sent;
@@ -5733,7 +5878,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5733
5878
  }, {
5734
5879
  key: "reconnect",
5735
5880
  value: function reconnect(options) {
5736
- var _this32 = this;
5881
+ var _this33 = this;
5737
5882
  _loggerProxy.default.logger.log("Meeting:index#reconnect --> attempting to reconnect meeting ".concat(this.id));
5738
5883
  if (!this.reconnectionManager || !this.reconnectionManager.reconnect) {
5739
5884
  return _promise.default.reject(new _parameter.default('Cannot reconnect, ReconnectionManager must first be defined.'));
@@ -5749,10 +5894,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5749
5894
  while (1) switch (_context17.prev = _context17.next) {
5750
5895
  case 0:
5751
5896
  _context17.next = 2;
5752
- return _this32.waitForRemoteSDPAnswer();
5897
+ return _this33.waitForRemoteSDPAnswer();
5753
5898
  case 2:
5754
5899
  _context17.next = 4;
5755
- return _this32.waitForMediaConnectionConnected();
5900
+ return _this33.waitForMediaConnectionConnected();
5756
5901
  case 4:
5757
5902
  case "end":
5758
5903
  return _context17.stop();
@@ -5766,7 +5911,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5766
5911
  return _promise.default.resolve();
5767
5912
  }
5768
5913
  _loggerProxy.default.logger.error('Meeting:index#reconnect --> Meeting reconnect failed', error);
5769
- _this32.uploadLogs({
5914
+ _this33.uploadLogs({
5770
5915
  file: 'meeting/index',
5771
5916
  function: 'reconnect'
5772
5917
  });
@@ -5813,19 +5958,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5813
5958
  }, {
5814
5959
  key: "setCaptionLanguage",
5815
5960
  value: function setCaptionLanguage(language) {
5816
- var _this33 = this;
5961
+ var _this34 = this;
5817
5962
  return new _promise.default(function (resolve, reject) {
5818
- if (!_this33.isTranscriptionSupported()) {
5963
+ if (!_this34.isTranscriptionSupported()) {
5819
5964
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5820
5965
  reject(new Error('Webex Assistant is not enabled/supported'));
5821
5966
  }
5822
5967
  try {
5823
5968
  var voiceaListenerCaptionUpdate = function voiceaListenerCaptionUpdate(payload) {
5824
5969
  // @ts-ignore
5825
- _this33.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5970
+ _this34.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5826
5971
  var statusCode = payload.statusCode;
5827
5972
  if (statusCode === 200) {
5828
- _this33.transcription.languageOptions = _objectSpread(_objectSpread({}, _this33.transcription.languageOptions), {}, {
5973
+ _this34.transcription.languageOptions = _objectSpread(_objectSpread({}, _this34.transcription.languageOptions), {}, {
5829
5974
  currentCaptionLanguage: language
5830
5975
  });
5831
5976
  resolve(language);
@@ -5834,9 +5979,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5834
5979
  }
5835
5980
  };
5836
5981
  // @ts-ignore
5837
- _this33.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5982
+ _this34.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5838
5983
  // @ts-ignore
5839
- _this33.webex.internal.voicea.requestLanguage(language);
5984
+ _this34.webex.internal.voicea.requestLanguage(language);
5840
5985
  } catch (error) {
5841
5986
  _loggerProxy.default.logger.error("Meeting:index#setCaptionLanguage --> ".concat(error));
5842
5987
  reject(error);
@@ -5852,23 +5997,23 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5852
5997
  }, {
5853
5998
  key: "setSpokenLanguage",
5854
5999
  value: function setSpokenLanguage(language) {
5855
- var _this34 = this;
6000
+ var _this35 = this;
5856
6001
  return new _promise.default(function (resolve, reject) {
5857
- if (!_this34.isTranscriptionSupported()) {
6002
+ if (!_this35.isTranscriptionSupported()) {
5858
6003
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5859
6004
  reject(new Error('Webex Assistant is not enabled/supported'));
5860
6005
  }
5861
- if (_this34.getCurUserType() !== 'host') {
6006
+ if (_this35.getCurUserType() !== 'host') {
5862
6007
  _loggerProxy.default.logger.error('Meeting:index#setSpokenLanguage --> Only host can set spoken language');
5863
6008
  reject(new Error('Only host can set spoken language'));
5864
6009
  }
5865
6010
  try {
5866
6011
  var voiceaListenerLanguageUpdate = function voiceaListenerLanguageUpdate(payload) {
5867
6012
  // @ts-ignore
5868
- _this34.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
6013
+ _this35.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5869
6014
  var languageCode = payload.languageCode;
5870
6015
  if (languageCode) {
5871
- _this34.transcription.languageOptions = _objectSpread(_objectSpread({}, _this34.transcription.languageOptions), {}, {
6016
+ _this35.transcription.languageOptions = _objectSpread(_objectSpread({}, _this35.transcription.languageOptions), {}, {
5872
6017
  currentSpokenLanguage: languageCode
5873
6018
  });
5874
6019
  resolve(languageCode);
@@ -5878,10 +6023,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5878
6023
  };
5879
6024
 
5880
6025
  // @ts-ignore
5881
- _this34.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
6026
+ _this35.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5882
6027
 
5883
6028
  // @ts-ignore
5884
- _this34.webex.internal.voicea.setSpokenLanguage(language);
6029
+ _this35.webex.internal.voicea.setSpokenLanguage(language);
5885
6030
  } catch (error) {
5886
6031
  _loggerProxy.default.logger.error("Meeting:index#setSpokenLanguage --> ".concat(error));
5887
6032
  reject(error);
@@ -6004,7 +6149,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6004
6149
  */
6005
6150
  function () {
6006
6151
  var _join = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19() {
6007
- var _this35 = this;
6152
+ var _this36 = this;
6008
6153
  var options,
6009
6154
  errorMessage,
6010
6155
  error,
@@ -6153,61 +6298,61 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6153
6298
  return _context19.abrupt("return", _promise.default.reject(_context19.t0));
6154
6299
  case 51:
6155
6300
  return _context19.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
6156
- _this35.meetingFiniteStateMachine.join();
6157
- _this35.setupLocusMediaRequest();
6301
+ _this36.meetingFiniteStateMachine.join();
6302
+ _this36.setupLocusMediaRequest();
6158
6303
 
6159
6304
  // @ts-ignore
6160
- _this35.webex.internal.device.meetingStarted();
6305
+ _this36.webex.internal.device.meetingStarted();
6161
6306
  _loggerProxy.default.logger.log('Meeting:index#join --> Success');
6162
6307
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_SUCCESS, {
6163
- correlation_id: _this35.correlationId
6308
+ correlation_id: _this36.correlationId
6164
6309
  });
6165
6310
  joinSuccess(join);
6166
- _this35.deferJoin = undefined;
6311
+ _this36.deferJoin = undefined;
6167
6312
  return join;
6168
6313
  }).catch(function (error) {
6169
- var _this35$meetingInfo, _error$error;
6170
- _this35.meetingFiniteStateMachine.fail(error);
6314
+ var _this36$meetingInfo, _error$error;
6315
+ _this36.meetingFiniteStateMachine.fail(error);
6171
6316
  _loggerProxy.default.logger.error('Meeting:index#join --> Failed', error);
6172
6317
 
6173
6318
  // @ts-ignore
6174
- _this35.webex.internal.newMetrics.submitClientEvent({
6319
+ _this36.webex.internal.newMetrics.submitClientEvent({
6175
6320
  name: 'client.locus.join.response',
6176
6321
  payload: {
6177
6322
  identifiers: {
6178
- meetingLookupUrl: (_this35$meetingInfo = _this35.meetingInfo) === null || _this35$meetingInfo === void 0 ? void 0 : _this35$meetingInfo.meetingLookupUrl
6323
+ meetingLookupUrl: (_this36$meetingInfo = _this36.meetingInfo) === null || _this36$meetingInfo === void 0 ? void 0 : _this36$meetingInfo.meetingLookupUrl
6179
6324
  }
6180
6325
  },
6181
6326
  options: {
6182
- meetingId: _this35.id,
6327
+ meetingId: _this36.id,
6183
6328
  rawError: error
6184
6329
  }
6185
6330
  });
6186
6331
 
6187
6332
  // TODO: change this to error codes and pre defined dictionary
6188
6333
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_FAILURE, {
6189
- correlation_id: _this35.correlationId,
6334
+ correlation_id: _this36.correlationId,
6190
6335
  reason: (_error$error = error.error) === null || _error$error === void 0 ? void 0 : _error$error.message,
6191
6336
  stack: error.stack
6192
6337
  });
6193
6338
 
6194
6339
  // Upload logs on join Failure
6195
- _triggerProxy.default.trigger(_this35, {
6340
+ _triggerProxy.default.trigger(_this36, {
6196
6341
  file: 'meeting/index',
6197
6342
  function: 'join'
6198
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this35);
6343
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this36);
6199
6344
  joinFailed(error);
6200
- _this35.deferJoin = undefined;
6345
+ _this36.deferJoin = undefined;
6201
6346
  return _promise.default.reject(error);
6202
6347
  }).then(function (join) {
6203
6348
  // @ts-ignore - config coming from registerPlugin
6204
- if (_this35.config.enableAutomaticLLM) {
6349
+ if (_this36.config.enableAutomaticLLM) {
6205
6350
  // @ts-ignore
6206
- _this35.webex.internal.llm.on('online', _this35.handleLLMOnline);
6207
- _this35.updateLLMConnection().catch(function (error) {
6351
+ _this36.webex.internal.llm.on('online', _this36.handleLLMOnline);
6352
+ _this36.updateLLMConnection().catch(function (error) {
6208
6353
  _loggerProxy.default.logger.error('Meeting:index#join --> Transcription Socket Connection Failed', error);
6209
6354
  _metrics.default.sendBehavioralMetric(_constants2.default.LLM_CONNECTION_AFTER_JOIN_FAILURE, {
6210
- correlation_id: _this35.correlationId,
6355
+ correlation_id: _this36.correlationId,
6211
6356
  reason: error === null || error === void 0 ? void 0 : error.message,
6212
6357
  stack: error.stack
6213
6358
  });
@@ -6239,7 +6384,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6239
6384
  key: "updateLLMConnection",
6240
6385
  value: (function () {
6241
6386
  var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20() {
6242
- var _this36 = this;
6387
+ var _this37 = this;
6243
6388
  var _this$locusInfo6, url, _this$locusInfo6$info, _this$locusInfo6$info2, datachannelUrl, practiceSessionDatachannelUrl, isJoined, dataChannelUrl;
6244
6389
  return _regenerator.default.wrap(function _callee20$(_context20) {
6245
6390
  while (1) switch (_context20.prev = _context20.next) {
@@ -6279,9 +6424,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6279
6424
  case 11:
6280
6425
  return _context20.abrupt("return", this.webex.internal.llm.registerAndConnect(url, dataChannelUrl).then(function (registerAndConnectResult) {
6281
6426
  // @ts-ignore - Fix type
6282
- _this36.webex.internal.llm.off('event:relay.event', _this36.processRelayEvent);
6427
+ _this37.webex.internal.llm.off('event:relay.event', _this37.processRelayEvent);
6283
6428
  // @ts-ignore - Fix type
6284
- _this36.webex.internal.llm.on('event:relay.event', _this36.processRelayEvent);
6429
+ _this37.webex.internal.llm.on('event:relay.event', _this37.processRelayEvent);
6285
6430
  _loggerProxy.default.logger.info('Meeting:index#updateLLMConnection --> enabled to receive relay events!');
6286
6431
  return _promise.default.resolve(registerAndConnectResult);
6287
6432
  }));
@@ -6335,7 +6480,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6335
6480
  }, {
6336
6481
  key: "dialInPstn",
6337
6482
  value: function dialInPstn() {
6338
- var _this37 = this;
6483
+ var _this38 = this;
6339
6484
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial in devices from being provisioned
6340
6485
 
6341
6486
  var correlationId = this.correlationId,
@@ -6351,10 +6496,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6351
6496
  }).catch(function (error) {
6352
6497
  var _error$error2;
6353
6498
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_IN_FAILURE, {
6354
- correlation_id: _this37.correlationId,
6355
- dial_in_url: _this37.dialInUrl,
6499
+ correlation_id: _this38.correlationId,
6500
+ dial_in_url: _this38.dialInUrl,
6356
6501
  locus_id: locusUrl.split('/').pop(),
6357
- client_url: _this37.deviceUrl,
6502
+ client_url: _this38.deviceUrl,
6358
6503
  reason: (_error$error2 = error.error) === null || _error$error2 === void 0 ? void 0 : _error$error2.message,
6359
6504
  stack: error.stack
6360
6505
  });
@@ -6372,7 +6517,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6372
6517
  }, {
6373
6518
  key: "dialOutPstn",
6374
6519
  value: function dialOutPstn(phoneNumber) {
6375
- var _this38 = this;
6520
+ var _this39 = this;
6376
6521
  if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial out devices from being provisioned
6377
6522
 
6378
6523
  var correlationId = this.correlationId,
@@ -6389,10 +6534,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6389
6534
  }).catch(function (error) {
6390
6535
  var _error$error3;
6391
6536
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_OUT_FAILURE, {
6392
- correlation_id: _this38.correlationId,
6393
- dial_out_url: _this38.dialOutUrl,
6537
+ correlation_id: _this39.correlationId,
6538
+ dial_out_url: _this39.dialOutUrl,
6394
6539
  locus_id: locusUrl.split('/').pop(),
6395
- client_url: _this38.deviceUrl,
6540
+ client_url: _this39.deviceUrl,
6396
6541
  reason: (_error$error3 = error.error) === null || _error$error3 === void 0 ? void 0 : _error$error3.message,
6397
6542
  stack: error.stack
6398
6543
  });
@@ -6423,7 +6568,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6423
6568
  }, {
6424
6569
  key: "moveTo",
6425
6570
  value: function moveTo(resourceId) {
6426
- var _this39 = this;
6571
+ var _this40 = this;
6427
6572
  if (!resourceId) {
6428
6573
  throw new _parameter.default('Cannot move call without a resourceId.');
6429
6574
  }
@@ -6467,12 +6612,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6467
6612
  while (1) switch (_context21.prev = _context21.next) {
6468
6613
  case 0:
6469
6614
  _context21.prev = 0;
6470
- if (!(_this39.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6615
+ if (!(_this40.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6471
6616
  _context21.next = 4;
6472
6617
  break;
6473
6618
  }
6474
6619
  _context21.next = 4;
6475
- return _this39.releaseScreenShareFloor();
6620
+ return _this40.releaseScreenShareFloor();
6476
6621
  case 4:
6477
6622
  mediaSettings = {
6478
6623
  mediaDirection: {
@@ -6484,37 +6629,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6484
6629
  receiveShare: true
6485
6630
  }
6486
6631
  };
6487
- _this39.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6488
- _this39.mediaProperties.unsetRemoteMedia();
6632
+ _this40.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6633
+ _this40.mediaProperties.unsetRemoteMedia();
6489
6634
 
6490
6635
  // 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
6491
6636
  // once the device answers we close the old connection and create new media server connection with only share enabled
6492
- if (!_this39.statsAnalyzer) {
6637
+ if (!_this40.statsAnalyzer) {
6493
6638
  _context21.next = 10;
6494
6639
  break;
6495
6640
  }
6496
6641
  _context21.next = 10;
6497
- return _this39.statsAnalyzer.stopAnalyzer();
6642
+ return _this40.statsAnalyzer.stopAnalyzer();
6498
6643
  case 10:
6499
6644
  _context21.next = 12;
6500
- return _this39.closeRemoteStreams();
6645
+ return _this40.closeRemoteStreams();
6501
6646
  case 12:
6502
6647
  _context21.next = 14;
6503
- return _this39.closePeerConnections();
6648
+ return _this40.closePeerConnections();
6504
6649
  case 14:
6505
- _this39.cleanupLocalStreams();
6506
- _this39.unsetRemoteStreams();
6507
- _this39.unsetPeerConnections();
6508
- _this39.reconnectionManager.cleanUp();
6650
+ _this40.cleanupLocalStreams();
6651
+ _this40.unsetRemoteStreams();
6652
+ _this40.unsetPeerConnections();
6653
+ _this40.reconnectionManager.cleanUp();
6509
6654
  _context21.next = 20;
6510
- return _this39.addMedia({
6655
+ return _this40.addMedia({
6511
6656
  audioEnabled: false,
6512
6657
  videoEnabled: false,
6513
6658
  shareVideoEnabled: true
6514
6659
  });
6515
6660
  case 20:
6516
6661
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
6517
- _this39.isMoveToInProgress = false;
6662
+ _this40.isMoveToInProgress = false;
6518
6663
  _context21.next = 29;
6519
6664
  break;
6520
6665
  case 24:
@@ -6522,12 +6667,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6522
6667
  _context21.t0 = _context21["catch"](0);
6523
6668
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context21.t0);
6524
6669
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6525
- correlation_id: _this39.correlationId,
6526
- locus_id: _this39.locusUrl.split('/').pop(),
6670
+ correlation_id: _this40.correlationId,
6671
+ locus_id: _this40.locusUrl.split('/').pop(),
6527
6672
  reason: _context21.t0.message,
6528
6673
  stack: _context21.t0.stack
6529
6674
  });
6530
- _this39.isMoveToInProgress = false;
6675
+ _this40.isMoveToInProgress = false;
6531
6676
  case 29:
6532
6677
  case "end":
6533
6678
  return _context21.stop();
@@ -6543,17 +6688,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6543
6688
  resourceId: resourceId,
6544
6689
  moveToResource: true
6545
6690
  }).then(function () {
6546
- _this39.meetingFiniteStateMachine.join();
6691
+ _this40.meetingFiniteStateMachine.join();
6547
6692
  }).catch(function (error) {
6548
- _this39.meetingFiniteStateMachine.fail(error);
6693
+ _this40.meetingFiniteStateMachine.fail(error);
6549
6694
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6550
- correlation_id: _this39.correlationId,
6551
- locus_id: _this39.locusUrl.split('/').pop(),
6695
+ correlation_id: _this40.correlationId,
6696
+ locus_id: _this40.locusUrl.split('/').pop(),
6552
6697
  reason: error.message,
6553
6698
  stack: error.stack
6554
6699
  });
6555
6700
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
6556
- _this39.isMoveToInProgress = false;
6701
+ _this40.isMoveToInProgress = false;
6557
6702
  return _promise.default.reject(error);
6558
6703
  });
6559
6704
  }
@@ -6568,7 +6713,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6568
6713
  }, {
6569
6714
  key: "moveFrom",
6570
6715
  value: function moveFrom(resourceId) {
6571
- var _this40 = this;
6716
+ var _this41 = this;
6572
6717
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
6573
6718
  if (!resourceId) {
6574
6719
  throw new _parameter.default('Cannot move call without a resourceId.');
@@ -6583,19 +6728,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6583
6728
  }
6584
6729
  });
6585
6730
  return _util2.default.joinMeetingOptions(this).then(function () {
6586
- return _util2.default.leaveMeeting(_this40, {
6731
+ return _util2.default.leaveMeeting(_this41, {
6587
6732
  resourceId: resourceId,
6588
6733
  correlationId: oldCorrelationId,
6589
6734
  moveMeeting: true
6590
6735
  }).then(function () {
6591
- _this40.resourceId = '';
6736
+ _this41.resourceId = '';
6592
6737
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_SUCCESS);
6593
6738
  });
6594
6739
  }).catch(function (error) {
6595
- _this40.meetingFiniteStateMachine.fail(error);
6740
+ _this41.meetingFiniteStateMachine.fail(error);
6596
6741
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_FAILURE, {
6597
- correlation_id: _this40.correlationId,
6598
- locus_id: _this40.locusUrl.split('/').pop(),
6742
+ correlation_id: _this41.correlationId,
6743
+ locus_id: _this41.locusUrl.split('/').pop(),
6599
6744
  reason: error.message,
6600
6745
  stack: error.stack
6601
6746
  });
@@ -6644,7 +6789,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6644
6789
  turnServerInfo: turnServerInfo,
6645
6790
  bundlePolicy: bundlePolicy,
6646
6791
  // @ts-ignore - config coming from registerPlugin
6647
- iceCandidatesTimeout: this.config.iceCandidatesGatheringTimeout
6792
+ iceCandidatesTimeout: this.config.iceCandidatesGatheringTimeout,
6793
+ // @ts-ignore - config coming from registerPlugin
6794
+ disableAudioMainDtx: this.config.experimental.disableAudioMainDtx,
6795
+ // @ts-ignore - config coming from registerPlugin
6796
+ enableAudioTwcc: this.config.enableAudioTwccForMultistream,
6797
+ stopIceGatheringAfterFirstRelayCandidate:
6798
+ // @ts-ignore - config coming from registerPlugin
6799
+ this.config.stopIceGatheringAfterFirstRelayCandidate
6648
6800
  });
6649
6801
  this.mediaProperties.setMediaPeerConnection(mc);
6650
6802
  this.setupMediaConnectionListeners();
@@ -6711,9 +6863,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6711
6863
  }, {
6712
6864
  key: "forwardEvent",
6713
6865
  value: function forwardEvent(eventEmitter, eventTypeToForward, meetingEventType) {
6714
- var _this41 = this;
6866
+ var _this42 = this;
6715
6867
  eventEmitter.on(eventTypeToForward, function (data) {
6716
- return _triggerProxy.default.trigger(_this41, {
6868
+ return _triggerProxy.default.trigger(_this42, {
6717
6869
  file: 'meetings',
6718
6870
  function: 'addMedia'
6719
6871
  }, meetingEventType, data);
@@ -6783,7 +6935,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6783
6935
  key: "waitForMediaConnectionConnected",
6784
6936
  value: (function () {
6785
6937
  var _waitForMediaConnectionConnected = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24() {
6786
- var iceConnected, _this$mediaProperties8, _this$mediaProperties9, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, _this$mediaProperties14;
6938
+ var iceConnected, _this$mediaProperties8, _this$mediaProperties9, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, _this$mediaProperties14, timedOutError;
6787
6939
  return _regenerator.default.wrap(function _callee24$(_context24) {
6788
6940
  while (1) switch (_context24.prev = _context24.next) {
6789
6941
  case 0:
@@ -6791,7 +6943,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6791
6943
  _context24.next = 3;
6792
6944
  return this.mediaProperties.waitForMediaConnectionConnected();
6793
6945
  case 3:
6794
- _context24.next = 30;
6946
+ _context24.next = 32;
6795
6947
  break;
6796
6948
  case 5:
6797
6949
  _context24.prev = 5;
@@ -6833,7 +6985,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6833
6985
  errors: _context24.t14
6834
6986
  };
6835
6987
  _context24.t16 = {
6836
- meetingId: this.id
6988
+ meetingId: this.id,
6989
+ rawError: _context24.t0
6837
6990
  };
6838
6991
  _context24.t17 = {
6839
6992
  name: 'client.ice.end',
@@ -6842,8 +6995,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6842
6995
  };
6843
6996
  _context24.t1.submitClientEvent.call(_context24.t1, _context24.t17);
6844
6997
  case 29:
6845
- throw new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
6846
- case 30:
6998
+ timedOutError = new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
6999
+ timedOutError.cause = _context24.t0;
7000
+ throw timedOutError;
7001
+ case 32:
6847
7002
  case "end":
6848
7003
  return _context24.stop();
6849
7004
  }
@@ -6874,6 +7029,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6874
7029
  networkQualityMonitor: this.networkQualityMonitor,
6875
7030
  isMultistream: this.isMultistream
6876
7031
  });
7032
+ this.shareCAEventSentStatus = {
7033
+ transmitStart: false,
7034
+ transmitStop: false,
7035
+ receiveStart: false,
7036
+ receiveStop: false
7037
+ };
6877
7038
  this.setupStatsAnalyzerEventHandlers();
6878
7039
  this.networkQualityMonitor.on(_internalMediaCore.NetworkQualityEventNames.NETWORK_QUALITY, this.sendNetworkQualityEvent.bind(this));
6879
7040
  }
@@ -6890,7 +7051,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6890
7051
  key: "waitForRemoteSDPAnswer",
6891
7052
  value: (function () {
6892
7053
  var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25() {
6893
- var _this42 = this;
7054
+ var _this43 = this;
6894
7055
  var LOG_HEADER, deferSDPAnswer;
6895
7056
  return _regenerator.default.wrap(function _callee25$(_context25) {
6896
7057
  while (1) switch (_context25.prev = _context25.next) {
@@ -6906,23 +7067,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6906
7067
  deferSDPAnswer = this.deferSDPAnswer;
6907
7068
  this.sdpResponseTimer = setTimeout(function () {
6908
7069
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " timeout! no REMOTE SDP ANSWER received within ").concat(_constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT / 1000, " seconds"));
7070
+ var error = new Error('Timed out waiting for REMOTE SDP ANSWER');
7071
+
6909
7072
  // @ts-ignore
6910
- _this42.webex.internal.newMetrics.submitClientEvent({
7073
+ _this43.webex.internal.newMetrics.submitClientEvent({
6911
7074
  name: 'client.media-engine.remote-sdp-received',
6912
7075
  payload: {
6913
7076
  canProceed: false,
6914
7077
  errors: [
6915
7078
  // @ts-ignore
6916
- _this42.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
7079
+ _this43.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6917
7080
  clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
6918
7081
  })]
6919
7082
  },
6920
7083
  options: {
6921
- meetingId: _this42.id,
6922
- rawError: new Error('Timeout waiting for SDP answer')
7084
+ meetingId: _this43.id,
7085
+ rawError: error
6923
7086
  }
6924
7087
  });
6925
- deferSDPAnswer.reject(new Error('Timed out waiting for REMOTE SDP ANSWER'));
7088
+ deferSDPAnswer.reject(error);
6926
7089
  }, _constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT);
6927
7090
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " waiting for REMOTE SDP ANSWER..."));
6928
7091
  return _context25.abrupt("return", deferSDPAnswer.promise);
@@ -7062,7 +7225,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7062
7225
  break;
7063
7226
  case 7:
7064
7227
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " error waiting for media to connect using UDP, TCP and TURN-TLS"), error);
7065
- throw new _webexErrors.AddMediaFailed();
7228
+ throw new _webexErrors.AddMediaFailed(error);
7066
7229
  case 9:
7067
7230
  case "end":
7068
7231
  return _context28.stop();
@@ -7425,10 +7588,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7425
7588
  }, {
7426
7589
  key: "addMedia",
7427
7590
  value: function addMedia() {
7428
- var _this43 = this;
7591
+ var _this44 = this;
7429
7592
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7430
7593
  return this.addMediaInternal(function () {
7431
- return _this43.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7594
+ return _this44.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7432
7595
  }, undefined, false, options);
7433
7596
  }
7434
7597
 
@@ -7464,10 +7627,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7464
7627
  _this$remoteMediaMana,
7465
7628
  _yield$this$mediaProp,
7466
7629
  connectionType,
7630
+ ipVersion,
7467
7631
  selectedCandidatePairChanges,
7468
7632
  numTransports,
7469
- reachabilityStats,
7470
7633
  iceCandidateErrors,
7634
+ reachabilityMetrics,
7471
7635
  _this$mediaProperties15,
7472
7636
  _this$mediaProperties16,
7473
7637
  _this$mediaProperties17,
@@ -7489,7 +7653,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7489
7653
  _this$mediaProperties33,
7490
7654
  _this$mediaProperties34,
7491
7655
  _this$mediaProperties35,
7492
- reachabilityMetrics,
7656
+ _reachabilityMetrics,
7493
7657
  _yield$this$mediaProp2,
7494
7658
  _selectedCandidatePairChanges,
7495
7659
  _numTransports,
@@ -7610,28 +7774,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7610
7774
  case 46:
7611
7775
  _yield$this$mediaProp = _context35.sent;
7612
7776
  connectionType = _yield$this$mediaProp.connectionType;
7777
+ ipVersion = _yield$this$mediaProp.ipVersion;
7613
7778
  selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
7614
7779
  numTransports = _yield$this$mediaProp.numTransports;
7615
- _context35.next = 52;
7616
- return this.webex.meetings.reachability.getReachabilityMetrics();
7617
- case 52:
7618
- reachabilityStats = _context35.sent;
7619
7780
  iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7781
+ _context35.next = 54;
7782
+ return this.getMediaReachabilityMetricFields();
7783
+ case 54:
7784
+ reachabilityMetrics = _context35.sent;
7620
7785
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
7621
7786
  correlation_id: this.correlationId,
7622
7787
  locus_id: this.locusUrl.split('/').pop(),
7623
7788
  connectionType: connectionType,
7789
+ ipVersion: ipVersion,
7624
7790
  selectedCandidatePairChanges: selectedCandidatePairChanges,
7625
7791
  numTransports: numTransports,
7626
7792
  isMultistream: this.isMultistream,
7627
7793
  retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,
7628
7794
  isJoinWithMediaRetry: this.joinWithMediaRetryInfo.isRetry
7629
- }, reachabilityStats), iceCandidateErrors), {}, {
7795
+ }, reachabilityMetrics), iceCandidateErrors), {}, {
7630
7796
  iceCandidatesCount: this.iceCandidatesCount
7631
7797
  }));
7632
7798
  // @ts-ignore
7633
7799
  this.webex.internal.newMetrics.submitClientEvent({
7634
7800
  name: 'client.media-engine.ready',
7801
+ payload: {
7802
+ ipVersion: ipVersion
7803
+ },
7635
7804
  options: {
7636
7805
  meetingId: this.id
7637
7806
  }
@@ -7641,21 +7810,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7641
7810
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
7642
7811
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
7643
7812
  this.startPeriodicLogUpload();
7644
- _context35.next = 79;
7813
+ _context35.next = 80;
7645
7814
  break;
7646
- case 61:
7647
- _context35.prev = 61;
7815
+ case 62:
7816
+ _context35.prev = 62;
7648
7817
  _context35.t1 = _context35["catch"](19);
7649
7818
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context35.t1);
7650
7819
 
7651
7820
  // @ts-ignore
7652
- _context35.next = 66;
7653
- return this.webex.meetings.reachability.getReachabilityMetrics();
7654
- case 66:
7655
- reachabilityMetrics = _context35.sent;
7656
- _context35.next = 69;
7821
+ _context35.next = 67;
7822
+ return this.getMediaReachabilityMetricFields();
7823
+ case 67:
7824
+ _reachabilityMetrics = _context35.sent;
7825
+ _context35.next = 70;
7657
7826
  return this.mediaProperties.getCurrentConnectionInfo();
7658
- case 69:
7827
+ case 70:
7659
7828
  _yield$this$mediaProp2 = _context35.sent;
7660
7829
  _selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
7661
7830
  _numTransports = _yield$this$mediaProp2.numTransports;
@@ -7676,12 +7845,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7676
7845
  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',
7677
7846
  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',
7678
7847
  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'
7679
- }, reachabilityMetrics), _iceCandidateErrors), {}, {
7848
+ }, _reachabilityMetrics), _iceCandidateErrors), {}, {
7680
7849
  iceCandidatesCount: this.iceCandidatesCount
7681
7850
  }));
7682
- _context35.next = 76;
7851
+ _context35.next = 77;
7683
7852
  return this.cleanUpOnAddMediaFailure();
7684
- case 76:
7853
+ case 77:
7685
7854
  // Upload logs on error while adding media
7686
7855
  _triggerProxy.default.trigger(this, {
7687
7856
  file: 'meeting/index',
@@ -7693,15 +7862,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7693
7862
  });
7694
7863
  }
7695
7864
  throw _context35.t1;
7696
- case 79:
7697
- _context35.prev = 79;
7865
+ case 80:
7866
+ _context35.prev = 80;
7698
7867
  this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
7699
- return _context35.finish(79);
7700
- case 82:
7868
+ return _context35.finish(80);
7869
+ case 83:
7701
7870
  case "end":
7702
7871
  return _context35.stop();
7703
7872
  }
7704
- }, _callee35, this, [[19, 61, 79, 82], [24, 29]]);
7873
+ }, _callee35, this, [[19, 62, 80, 83], [24, 29]]);
7705
7874
  }));
7706
7875
  function addMediaInternal(_x33, _x34, _x35) {
7707
7876
  return _addMediaInternal.apply(this, arguments);
@@ -7733,7 +7902,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7733
7902
  * @memberof Meeting
7734
7903
  */
7735
7904
  function enqueueMediaUpdate(mediaUpdateType) {
7736
- var _this44 = this;
7905
+ var _this45 = this;
7737
7906
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7738
7907
  var canUpdateMediaNow = this.canUpdateMedia();
7739
7908
  return new _promise.default(function (resolve, reject) {
@@ -7744,9 +7913,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7744
7913
  options: options
7745
7914
  };
7746
7915
  _loggerProxy.default.logger.log("Meeting:index#enqueueMediaUpdate --> enqueuing media update type=".concat(mediaUpdateType));
7747
- _this44.queuedMediaUpdates.push(queueItem);
7916
+ _this45.queuedMediaUpdates.push(queueItem);
7748
7917
  if (canUpdateMediaNow) {
7749
- _this44.processNextQueuedMediaUpdate();
7918
+ _this45.processNextQueuedMediaUpdate();
7750
7919
  }
7751
7920
  });
7752
7921
  }
@@ -7851,7 +8020,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7851
8020
  }, {
7852
8021
  key: "acknowledge",
7853
8022
  value: function acknowledge(type) {
7854
- var _this45 = this;
8023
+ var _this46 = this;
7855
8024
  if (!type) {
7856
8025
  return _promise.default.reject(new _parameter.default('Type must be set to acknowledge the meeting.'));
7857
8026
  }
@@ -7863,12 +8032,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7863
8032
  }).then(function (response) {
7864
8033
  return _promise.default.resolve(response);
7865
8034
  }).then(function (response) {
7866
- _this45.meetingFiniteStateMachine.ring(type);
8035
+ _this46.meetingFiniteStateMachine.ring(type);
7867
8036
  // @ts-ignore
7868
- _this45.webex.internal.newMetrics.submitClientEvent({
8037
+ _this46.webex.internal.newMetrics.submitClientEvent({
7869
8038
  name: 'client.alert.displayed',
7870
8039
  options: {
7871
- meetingId: _this45.id
8040
+ meetingId: _this46.id
7872
8041
  }
7873
8042
  });
7874
8043
  return _promise.default.resolve({
@@ -7893,12 +8062,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7893
8062
  }, {
7894
8063
  key: "decline",
7895
8064
  value: function decline(reason) {
7896
- var _this46 = this;
8065
+ var _this47 = this;
7897
8066
  return _util2.default.declineMeeting(this, reason).then(function (decline) {
7898
- _this46.meetingFiniteStateMachine.decline();
8067
+ _this47.meetingFiniteStateMachine.decline();
7899
8068
  return _promise.default.resolve(decline);
7900
8069
  }).catch(function (error) {
7901
- _this46.meetingFiniteStateMachine.fail(error);
8070
+ _this47.meetingFiniteStateMachine.fail(error);
7902
8071
  return _promise.default.reject(error);
7903
8072
  });
7904
8073
  }
@@ -7949,7 +8118,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7949
8118
  }, {
7950
8119
  key: "leave",
7951
8120
  value: function leave() {
7952
- var _this47 = this;
8121
+ var _this48 = this;
7953
8122
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7954
8123
  var leaveReason = options.reason || _constants.MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
7955
8124
 
@@ -7961,7 +8130,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7961
8130
  var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7962
8131
  return (
7963
8132
  // @ts-ignore
7964
- _this47.webex.internal.newMetrics.submitClientEvent({
8133
+ _this48.webex.internal.newMetrics.submitClientEvent({
7965
8134
  name: 'client.call.leave',
7966
8135
  payload: _objectSpread({
7967
8136
  trigger: 'user-interaction',
@@ -7969,7 +8138,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7969
8138
  leaveReason: options.clientEventLeaveReason
7970
8139
  }, payload),
7971
8140
  options: {
7972
- meetingId: _this47.id
8141
+ meetingId: _this48.id
7973
8142
  }
7974
8143
  })
7975
8144
  );
@@ -7978,24 +8147,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7978
8147
  return _util2.default.leaveMeeting(this, options).then(function (leave) {
7979
8148
  // CA team recommends submitting this *after* locus /leave
7980
8149
  submitLeaveMetric();
7981
- _this47.meetingFiniteStateMachine.leave();
7982
- _this47.clearMeetingData();
8150
+ _this48.meetingFiniteStateMachine.leave();
8151
+ _this48.clearMeetingData();
7983
8152
 
7984
8153
  // upload logs on leave irrespective of meeting delete
7985
- _triggerProxy.default.trigger(_this47, {
8154
+ _triggerProxy.default.trigger(_this48, {
7986
8155
  file: 'meeting/index',
7987
8156
  function: 'leave'
7988
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
8157
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
7989
8158
 
7990
8159
  // TODO: more testing before we remove this code, we are not sure the scenarios for destroy here
7991
- if (_this47.wirelessShare || _this47.guest) {
8160
+ if (_this48.wirelessShare || _this48.guest) {
7992
8161
  // If screen sharing clean the meeting object
7993
- _triggerProxy.default.trigger(_this47, {
8162
+ _triggerProxy.default.trigger(_this48, {
7994
8163
  file: 'meeting/index',
7995
8164
  function: 'leave'
7996
8165
  }, _constants.EVENTS.DESTROY_MEETING, {
7997
8166
  reason: options.reason,
7998
- meetingId: _this47.id
8167
+ meetingId: _this48.id
7999
8168
  });
8000
8169
  }
8001
8170
  _loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
@@ -8012,16 +8181,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8012
8181
  shownToUser: false
8013
8182
  }]
8014
8183
  });
8015
- _this47.meetingFiniteStateMachine.fail(error);
8184
+ _this48.meetingFiniteStateMachine.fail(error);
8016
8185
  _loggerProxy.default.logger.error('Meeting:index#leave --> Failed to leave ', error);
8017
8186
  // upload logs on leave irrespective of meeting delete
8018
- _triggerProxy.default.trigger(_this47, {
8187
+ _triggerProxy.default.trigger(_this48, {
8019
8188
  file: 'meeting/index',
8020
8189
  function: 'leave'
8021
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
8190
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
8022
8191
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_LEAVE_FAILURE, {
8023
- correlation_id: _this47.correlationId,
8024
- locus_id: _this47.locusUrl.split('/').pop(),
8192
+ correlation_id: _this48.correlationId,
8193
+ locus_id: _this48.locusUrl.split('/').pop(),
8025
8194
  reason: error.message,
8026
8195
  stack: error.stack,
8027
8196
  code: error.code
@@ -8041,7 +8210,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8041
8210
  }, {
8042
8211
  key: "startWhiteboardShare",
8043
8212
  value: function startWhiteboardShare(channelUrl, resourceToken) {
8044
- var _this48 = this;
8213
+ var _this49 = this;
8045
8214
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
8046
8215
  return element.name === 'whiteboard';
8047
8216
  });
@@ -8070,13 +8239,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8070
8239
  body.resourceToken = resourceToken;
8071
8240
  }
8072
8241
  return this.meetingRequest.changeMeetingFloor(body).then(function () {
8073
- _this48.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8242
+ _this49.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8074
8243
  return _promise.default.resolve();
8075
8244
  }).catch(function (error) {
8076
8245
  _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
8077
8246
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_START_WHITEBOARD_SHARE_FAILURE, {
8078
- correlation_id: _this48.correlationId,
8079
- locus_id: _this48.locusUrl.split('/').pop(),
8247
+ correlation_id: _this49.correlationId,
8248
+ locus_id: _this49.locusUrl.split('/').pop(),
8080
8249
  reason: error.message,
8081
8250
  stack: error.stack,
8082
8251
  board: {
@@ -8099,7 +8268,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8099
8268
  }, {
8100
8269
  key: "stopWhiteboardShare",
8101
8270
  value: function stopWhiteboardShare(channelUrl) {
8102
- var _this49 = this;
8271
+ var _this50 = this;
8103
8272
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
8104
8273
  return element.name === 'whiteboard';
8105
8274
  });
@@ -8122,8 +8291,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8122
8291
  }).catch(function (error) {
8123
8292
  _loggerProxy.default.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
8124
8293
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_STOP_WHITEBOARD_SHARE_FAILURE, {
8125
- correlation_id: _this49.correlationId,
8126
- locus_id: _this49.locusUrl.split('/').pop(),
8294
+ correlation_id: _this50.correlationId,
8295
+ locus_id: _this50.locusUrl.split('/').pop(),
8127
8296
  reason: error.message,
8128
8297
  stack: error.stack,
8129
8298
  board: {
@@ -8145,7 +8314,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8145
8314
  }, {
8146
8315
  key: "requestScreenShareFloor",
8147
8316
  value: function requestScreenShareFloor() {
8148
- var _this50 = this;
8317
+ var _this51 = this;
8149
8318
  if (!this.mediaProperties.hasLocalShareStream() || !this.mediaProperties.mediaDirection.sendShare) {
8150
8319
  _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, ")"));
8151
8320
  this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
@@ -8176,34 +8345,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8176
8345
  resourceUrl: this.resourceUrl,
8177
8346
  shareInstanceId: this.localShareInstanceId
8178
8347
  }).then(function () {
8179
- _this50.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8348
+ _this51.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8180
8349
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_SUCCESS, {
8181
- correlation_id: _this50.correlationId,
8182
- locus_id: _this50.locusUrl.split('/').pop()
8350
+ correlation_id: _this51.correlationId,
8351
+ locus_id: _this51.locusUrl.split('/').pop()
8183
8352
  });
8184
8353
  return _promise.default.resolve();
8185
8354
  }).catch(function (error) {
8186
8355
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
8187
8356
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_FAILURE, {
8188
- correlation_id: _this50.correlationId,
8189
- locus_id: _this50.locusUrl.split('/').pop(),
8357
+ correlation_id: _this51.correlationId,
8358
+ locus_id: _this51.locusUrl.split('/').pop(),
8190
8359
  reason: error.message,
8191
8360
  stack: error.stack
8192
8361
  });
8193
8362
 
8194
8363
  // @ts-ignore
8195
- _this50.webex.internal.newMetrics.submitClientEvent({
8364
+ _this51.webex.internal.newMetrics.submitClientEvent({
8196
8365
  name: 'client.share.floor-granted.local',
8197
8366
  payload: {
8198
8367
  mediaType: 'share',
8199
8368
  errors: _util2.default.getChangeMeetingFloorErrorPayload(error.message),
8200
- shareInstanceId: _this50.localShareInstanceId
8369
+ shareInstanceId: _this51.localShareInstanceId
8201
8370
  },
8202
8371
  options: {
8203
- meetingId: _this50.id
8372
+ meetingId: _this51.id
8204
8373
  }
8205
8374
  });
8206
- _this50.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8375
+ _this51.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8207
8376
  return _promise.default.reject(error);
8208
8377
  });
8209
8378
  }
@@ -8226,10 +8395,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8226
8395
  }, {
8227
8396
  key: "requestScreenShareFloorIfPending",
8228
8397
  value: function requestScreenShareFloorIfPending() {
8229
- var _this51 = this;
8398
+ var _this52 = this;
8230
8399
  if (this.floorGrantPending && this.state === _constants.MEETING_STATE.STATES.JOINED) {
8231
8400
  this.requestScreenShareFloor().then(function () {
8232
- _this51.floorGrantPending = false;
8401
+ _this52.floorGrantPending = false;
8233
8402
  });
8234
8403
  }
8235
8404
  }
@@ -8243,7 +8412,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8243
8412
  }, {
8244
8413
  key: "releaseScreenShareFloor",
8245
8414
  value: function releaseScreenShareFloor() {
8246
- var _this52 = this;
8415
+ var _this53 = this;
8247
8416
  var content = this.locusInfo.mediaShares.find(function (element) {
8248
8417
  return element.name === _constants.CONTENT;
8249
8418
  });
@@ -8278,8 +8447,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8278
8447
  }).catch(function (error) {
8279
8448
  _loggerProxy.default.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
8280
8449
  _metrics.default.sendBehavioralMetric(_constants2.default.STOP_FLOOR_REQUEST_FAILURE, {
8281
- correlation_id: _this52.correlationId,
8282
- locus_id: _this52.locusUrl.split('/').pop(),
8450
+ correlation_id: _this53.correlationId,
8451
+ locus_id: _this53.locusUrl.split('/').pop(),
8283
8452
  reason: error.message,
8284
8453
  stack: error.stack
8285
8454
  });
@@ -8459,7 +8628,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8459
8628
  }, {
8460
8629
  key: "changeVideoLayout",
8461
8630
  value: function changeVideoLayout(layoutType) {
8462
- var _this53 = this;
8631
+ var _this54 = this;
8463
8632
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
8464
8633
  var main = renderInfo.main,
8465
8634
  content = renderInfo.content;
@@ -8513,7 +8682,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8513
8682
  }
8514
8683
  this.lastVideoLayoutInfo = (0, _lodash.cloneDeep)(layoutInfo);
8515
8684
  this.locusInfo.once(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED, function (envelope) {
8516
- _triggerProxy.default.trigger(_this53, {
8685
+ _triggerProxy.default.trigger(_this54, {
8517
8686
  file: 'meeting/index',
8518
8687
  function: 'changeVideoLayout'
8519
8688
  }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_LAYOUT_UPDATE, {
@@ -8629,7 +8798,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8629
8798
  }, {
8630
8799
  key: "endMeetingForAll",
8631
8800
  value: function endMeetingForAll() {
8632
- var _this54 = this;
8801
+ var _this55 = this;
8633
8802
  // @ts-ignore
8634
8803
  this.webex.internal.newMetrics.submitClientEvent({
8635
8804
  name: 'client.call.leave',
@@ -8647,25 +8816,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8647
8816
  locus_id: this.locusId
8648
8817
  });
8649
8818
  return _util2.default.endMeetingForAll(this).then(function (end) {
8650
- _this54.meetingFiniteStateMachine.end();
8651
- _this54.clearMeetingData();
8819
+ _this55.meetingFiniteStateMachine.end();
8820
+ _this55.clearMeetingData();
8652
8821
  // upload logs on leave irrespective of meeting delete
8653
- _triggerProxy.default.trigger(_this54, {
8822
+ _triggerProxy.default.trigger(_this55, {
8654
8823
  file: 'meeting/index',
8655
8824
  function: 'endMeetingForAll'
8656
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this54);
8825
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8657
8826
  return end;
8658
8827
  }).catch(function (error) {
8659
- _this54.meetingFiniteStateMachine.fail(error);
8828
+ _this55.meetingFiniteStateMachine.fail(error);
8660
8829
  _loggerProxy.default.logger.error('Meeting:index#endMeetingForAll --> Failed to end meeting ', error);
8661
8830
  // upload logs on leave irrespective of meeting delete
8662
- _triggerProxy.default.trigger(_this54, {
8831
+ _triggerProxy.default.trigger(_this55, {
8663
8832
  file: 'meeting/index',
8664
8833
  function: 'endMeetingForAll'
8665
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this54);
8834
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8666
8835
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_FAILURE, {
8667
- correlation_id: _this54.correlationId,
8668
- locus_id: _this54.locusUrl.split('/').pop(),
8836
+ correlation_id: _this55.correlationId,
8837
+ locus_id: _this55.locusUrl.split('/').pop(),
8669
8838
  reason: error.message,
8670
8839
  stack: error.stack,
8671
8840
  code: error.code
@@ -8730,6 +8899,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8730
8899
  });
8731
8900
  }
8732
8901
 
8902
+ /**
8903
+ * Method to set post meeting data consent.
8904
+ *
8905
+ * @param {boolean} accept - whether consent accepted or declined
8906
+ * @returns {Promise}
8907
+ * @public
8908
+ * @memberof Meeting
8909
+ */
8910
+ }, {
8911
+ key: "setPostMeetingDataConsent",
8912
+ value: function setPostMeetingDataConsent(accept) {
8913
+ return this.meetingRequest.setPostMeetingDataConsent({
8914
+ postMeetingDataConsent: accept,
8915
+ locusUrl: this.locusUrl,
8916
+ deviceUrl: this.deviceUrl,
8917
+ selfId: this.members.selfId
8918
+ });
8919
+ }
8920
+
8733
8921
  /**
8734
8922
  * Throws if we don't have a media connection created
8735
8923
  *
@@ -8807,7 +8995,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8807
8995
  _this$mediaProperties43,
8808
8996
  _this$mediaProperties44,
8809
8997
  _this$mediaProperties45,
8810
- _this55 = this;
8998
+ _this56 = this;
8811
8999
  var LOG_HEADER = 'Meeting:index#updateTranscodedMediaConnection -->';
8812
9000
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " starting"));
8813
9001
  if (!this.canUpdateMedia()) {
@@ -8832,8 +9020,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8832
9020
  }).catch(function (error) {
8833
9021
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error: "), error);
8834
9022
  _metrics.default.sendBehavioralMetric(_constants2.default.UPDATE_MEDIA_FAILURE, {
8835
- correlation_id: _this55.correlationId,
8836
- locus_id: _this55.locusUrl.split('/').pop(),
9023
+ correlation_id: _this56.correlationId,
9024
+ locus_id: _this56.locusUrl.split('/').pop(),
8837
9025
  reason: error.message,
8838
9026
  stack: error.stack
8839
9027
  });
@@ -9055,10 +9243,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9055
9243
  return this.updateTranscodedMediaConnection();
9056
9244
  case 31:
9057
9245
  if (!floorRequestNeeded) {
9058
- _context40.next = 37;
9246
+ _context40.next = 39;
9059
9247
  break;
9060
9248
  }
9061
9249
  this.localShareInstanceId = _uuid.default.v4();
9250
+ this.shareCAEventSentStatus.transmitStart = false;
9251
+ this.shareCAEventSentStatus.transmitStop = false;
9062
9252
 
9063
9253
  // @ts-ignore
9064
9254
  this.webex.internal.newMetrics.submitClientEvent({
@@ -9079,9 +9269,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9079
9269
  // we're sending the http request to Locus to request the screen share floor
9080
9270
  // only after the SDP update, because that's how it's always been done for transcoded meetings
9081
9271
  // and also if sharing from the start, we need confluence to have been created
9082
- _context40.next = 37;
9272
+ _context40.next = 39;
9083
9273
  return this.enqueueScreenShareFloorRequest();
9084
- case 37:
9274
+ case 39:
9085
9275
  case "end":
9086
9276
  return _context40.stop();
9087
9277
  }
@@ -9219,6 +9409,56 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9219
9409
  }
9220
9410
  return _promise.default.resolve();
9221
9411
  }
9412
+
9413
+ /**
9414
+ * Gets the media reachability metrics
9415
+ *
9416
+ * @returns {Promise<MediaReachabilityMetrics>}
9417
+ */
9418
+ }, {
9419
+ key: "getMediaReachabilityMetricFields",
9420
+ value: (function () {
9421
+ var _getMediaReachabilityMetricFields = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee42() {
9422
+ var reachabilityMetrics, successKeys, totalSuccessCases, isSubnetReachable, selectedCluster;
9423
+ return _regenerator.default.wrap(function _callee42$(_context42) {
9424
+ while (1) switch (_context42.prev = _context42.next) {
9425
+ case 0:
9426
+ _context42.next = 2;
9427
+ return this.webex.meetings.reachability.getReachabilityMetrics();
9428
+ case 2:
9429
+ reachabilityMetrics = _context42.sent;
9430
+ 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'];
9431
+ totalSuccessCases = successKeys.reduce(function (total, key) {
9432
+ var value = reachabilityMetrics[key];
9433
+ if (typeof value === 'number') {
9434
+ return total + value;
9435
+ }
9436
+ return total;
9437
+ }, 0);
9438
+ isSubnetReachable = null;
9439
+ if (totalSuccessCases > 0) {
9440
+ // @ts-ignore
9441
+ isSubnetReachable = this.webex.meetings.reachability.isSubnetReachable(this.mediaServerIp);
9442
+ }
9443
+ selectedCluster = null;
9444
+ if (this.mediaConnections && this.mediaConnections.length > 0) {
9445
+ selectedCluster = this.mediaConnections[0].mediaAgentCluster;
9446
+ }
9447
+ return _context42.abrupt("return", _objectSpread(_objectSpread({}, reachabilityMetrics), {}, {
9448
+ isSubnetReachable: isSubnetReachable,
9449
+ selectedCluster: selectedCluster
9450
+ }));
9451
+ case 10:
9452
+ case "end":
9453
+ return _context42.stop();
9454
+ }
9455
+ }, _callee42, this);
9456
+ }));
9457
+ function getMediaReachabilityMetricFields() {
9458
+ return _getMediaReachabilityMetricFields.apply(this, arguments);
9459
+ }
9460
+ return getMediaReachabilityMetricFields;
9461
+ }())
9222
9462
  }]);
9223
9463
  return Meeting;
9224
9464
  }(_webexCore.StatelessWebexPlugin);