@webex/plugin-meetings 3.8.0-next.4 → 3.8.0-next.41

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 (130) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/config.js +1 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/constants.js +14 -1
  6. package/dist/constants.js.map +1 -1
  7. package/dist/controls-options-manager/enums.js +2 -0
  8. package/dist/controls-options-manager/enums.js.map +1 -1
  9. package/dist/controls-options-manager/types.js.map +1 -1
  10. package/dist/controls-options-manager/util.js +52 -0
  11. package/dist/controls-options-manager/util.js.map +1 -1
  12. package/dist/interpretation/index.js +1 -1
  13. package/dist/interpretation/siLanguage.js +1 -1
  14. package/dist/locus-info/controlsUtils.js +28 -10
  15. package/dist/locus-info/controlsUtils.js.map +1 -1
  16. package/dist/locus-info/index.js +20 -1
  17. package/dist/locus-info/index.js.map +1 -1
  18. package/dist/media/index.js +3 -15
  19. package/dist/media/index.js.map +1 -1
  20. package/dist/meeting/in-meeting-actions.js +11 -1
  21. package/dist/meeting/in-meeting-actions.js.map +1 -1
  22. package/dist/meeting/index.js +443 -256
  23. package/dist/meeting/index.js.map +1 -1
  24. package/dist/meeting/locusMediaRequest.js +21 -22
  25. package/dist/meeting/locusMediaRequest.js.map +1 -1
  26. package/dist/meeting/muteState.js +0 -2
  27. package/dist/meeting/muteState.js.map +1 -1
  28. package/dist/meeting/request.js +30 -0
  29. package/dist/meeting/request.js.map +1 -1
  30. package/dist/meeting/request.type.js.map +1 -1
  31. package/dist/meeting/util.js +10 -2
  32. package/dist/meeting/util.js.map +1 -1
  33. package/dist/meeting-info/meeting-info-v2.js +359 -60
  34. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  35. package/dist/meetings/index.js +60 -1
  36. package/dist/meetings/index.js.map +1 -1
  37. package/dist/member/index.js +10 -0
  38. package/dist/member/index.js.map +1 -1
  39. package/dist/member/util.js +3 -0
  40. package/dist/member/util.js.map +1 -1
  41. package/dist/metrics/constants.js +9 -0
  42. package/dist/metrics/constants.js.map +1 -1
  43. package/dist/reachability/clusterReachability.js +52 -8
  44. package/dist/reachability/clusterReachability.js.map +1 -1
  45. package/dist/reachability/index.js +70 -45
  46. package/dist/reachability/index.js.map +1 -1
  47. package/dist/reachability/reachability.types.js +14 -0
  48. package/dist/reachability/reachability.types.js.map +1 -1
  49. package/dist/reachability/request.js +19 -3
  50. package/dist/reachability/request.js.map +1 -1
  51. package/dist/reconnection-manager/index.js +2 -2
  52. package/dist/reconnection-manager/index.js.map +1 -1
  53. package/dist/recording-controller/util.js +5 -5
  54. package/dist/recording-controller/util.js.map +1 -1
  55. package/dist/roap/index.js.map +1 -1
  56. package/dist/roap/turnDiscovery.js +45 -27
  57. package/dist/roap/turnDiscovery.js.map +1 -1
  58. package/dist/roap/types.js +17 -0
  59. package/dist/roap/types.js.map +1 -0
  60. package/dist/types/config.d.ts +1 -0
  61. package/dist/types/constants.d.ts +10 -0
  62. package/dist/types/controls-options-manager/enums.d.ts +3 -1
  63. package/dist/types/controls-options-manager/types.d.ts +7 -1
  64. package/dist/types/locus-info/index.d.ts +1 -0
  65. package/dist/types/meeting/in-meeting-actions.d.ts +10 -0
  66. package/dist/types/meeting/index.d.ts +47 -1
  67. package/dist/types/meeting/muteState.d.ts +0 -1
  68. package/dist/types/meeting/request.d.ts +12 -1
  69. package/dist/types/meeting/request.type.d.ts +6 -0
  70. package/dist/types/meeting/util.d.ts +2 -1
  71. package/dist/types/meeting-info/meeting-info-v2.d.ts +80 -0
  72. package/dist/types/meetings/index.d.ts +29 -0
  73. package/dist/types/member/index.d.ts +1 -0
  74. package/dist/types/metrics/constants.d.ts +9 -0
  75. package/dist/types/reachability/clusterReachability.d.ts +13 -1
  76. package/dist/types/reachability/index.d.ts +2 -1
  77. package/dist/types/reachability/reachability.types.d.ts +5 -0
  78. package/dist/types/roap/index.d.ts +3 -2
  79. package/dist/types/roap/turnDiscovery.d.ts +5 -17
  80. package/dist/types/roap/types.d.ts +16 -0
  81. package/dist/webinar/index.js +1 -1
  82. package/package.json +22 -22
  83. package/src/config.ts +1 -0
  84. package/src/constants.ts +17 -0
  85. package/src/controls-options-manager/enums.ts +2 -0
  86. package/src/controls-options-manager/types.ts +11 -1
  87. package/src/controls-options-manager/util.ts +62 -0
  88. package/src/locus-info/controlsUtils.ts +44 -14
  89. package/src/locus-info/index.ts +23 -1
  90. package/src/media/index.ts +5 -21
  91. package/src/meeting/in-meeting-actions.ts +20 -0
  92. package/src/meeting/index.ts +263 -69
  93. package/src/meeting/locusMediaRequest.ts +27 -22
  94. package/src/meeting/muteState.ts +0 -2
  95. package/src/meeting/request.ts +36 -1
  96. package/src/meeting/request.type.ts +7 -0
  97. package/src/meeting/util.ts +9 -2
  98. package/src/meeting-info/meeting-info-v2.ts +247 -6
  99. package/src/meetings/index.ts +72 -1
  100. package/src/member/index.ts +11 -0
  101. package/src/member/util.ts +3 -0
  102. package/src/metrics/constants.ts +9 -0
  103. package/src/reachability/clusterReachability.ts +47 -1
  104. package/src/reachability/index.ts +15 -0
  105. package/src/reachability/reachability.types.ts +6 -0
  106. package/src/reachability/request.ts +7 -0
  107. package/src/reconnection-manager/index.ts +2 -2
  108. package/src/recording-controller/util.ts +17 -13
  109. package/src/roap/index.ts +3 -7
  110. package/src/roap/turnDiscovery.ts +34 -39
  111. package/src/roap/types.ts +23 -0
  112. package/test/unit/spec/controls-options-manager/util.js +120 -0
  113. package/test/unit/spec/locus-info/controlsUtils.js +103 -9
  114. package/test/unit/spec/locus-info/index.js +28 -0
  115. package/test/unit/spec/media/index.ts +6 -16
  116. package/test/unit/spec/meeting/in-meeting-actions.ts +13 -4
  117. package/test/unit/spec/meeting/index.js +490 -130
  118. package/test/unit/spec/meeting/locusMediaRequest.ts +95 -87
  119. package/test/unit/spec/meeting/muteState.js +0 -2
  120. package/test/unit/spec/meeting/request.js +32 -1
  121. package/test/unit/spec/meeting/utils.js +115 -18
  122. package/test/unit/spec/meeting-info/meetinginfov2.js +443 -114
  123. package/test/unit/spec/meetings/index.js +78 -1
  124. package/test/unit/spec/member/index.js +7 -0
  125. package/test/unit/spec/member/util.js +24 -0
  126. package/test/unit/spec/reachability/clusterReachability.ts +47 -1
  127. package/test/unit/spec/reachability/index.ts +12 -0
  128. package/test/unit/spec/reachability/request.js +47 -2
  129. package/test/unit/spec/reconnection-manager/index.js +4 -4
  130. package/test/unit/spec/roap/turnDiscovery.ts +110 -28
@@ -21,6 +21,7 @@ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/
21
21
  var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
22
22
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
23
23
  var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
24
+ var _isNan = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/number/is-nan"));
24
25
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
25
26
  var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
26
27
  var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
@@ -506,6 +507,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
506
507
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "allowMediaInLobby", void 0);
507
508
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "localShareInstanceId", void 0);
508
509
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "remoteShareInstanceId", void 0);
510
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "shareCAEventSentStatus", void 0);
509
511
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "turnDiscoverySkippedReason", void 0);
510
512
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "turnServerUsed", void 0);
511
513
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "areVoiceaEventsSetup", false);
@@ -646,7 +648,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
646
648
  rawError: error
647
649
  }
648
650
  });
649
- } else if (error instanceof _internalMediaCore.Errors.SdpOfferHandlingError || error instanceof _internalMediaCore.Errors.SdpAnswerHandlingError) {
651
+ } else if (error instanceof _internalMediaCore.Errors.SdpOfferHandlingError) {
650
652
  sendBehavioralMetric(_constants2.default.PEERCONNECTION_FAILURE, error, _this.correlationId);
651
653
 
652
654
  // @ts-ignore
@@ -660,6 +662,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
660
662
  rawError: error
661
663
  }
662
664
  });
665
+ } else if (error instanceof _internalMediaCore.Errors.SdpAnswerHandlingError) {
666
+ sendBehavioralMetric(_constants2.default.PEERCONNECTION_FAILURE, error, _this.correlationId);
667
+
668
+ // @ts-ignore
669
+ _this.webex.internal.newMetrics.submitClientEvent({
670
+ name: 'client.media-engine.remote-sdp-received',
671
+ payload: {
672
+ canProceed: false
673
+ },
674
+ options: {
675
+ meetingId: _this.id,
676
+ rawError: error
677
+ }
678
+ });
679
+ if (_this.deferSDPAnswer) {
680
+ clearTimeout(_this.sdpResponseTimer);
681
+ _this.sdpResponseTimer = undefined;
682
+ _this.deferSDPAnswer.reject();
683
+ }
663
684
  } else if (error instanceof _internalMediaCore.Errors.SdpError) {
664
685
  // this covers also the case of Errors.IceGatheringError which extends Errors.SdpError
665
686
  sendBehavioralMetric(_constants2.default.INVALID_ICE_CANDIDATE, error, _this.correlationId);
@@ -1066,85 +1087,101 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1066
1087
  file: 'meeting/index',
1067
1088
  function: 'addMedia'
1068
1089
  }, _constants.EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED, data);
1069
- // @ts-ignore
1070
- _this.webex.internal.newMetrics.submitClientEvent({
1071
- name: 'client.media.tx.start',
1072
- payload: {
1073
- mediaType: data.mediaType,
1074
- shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1075
- },
1076
- options: {
1077
- meetingId: _this.id
1090
+ if (data.mediaType !== 'share' || !_this.shareCAEventSentStatus.transmitStart) {
1091
+ // @ts-ignore
1092
+ _this.webex.internal.newMetrics.submitClientEvent({
1093
+ name: 'client.media.tx.start',
1094
+ payload: {
1095
+ mediaType: data.mediaType,
1096
+ shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1097
+ },
1098
+ options: {
1099
+ meetingId: _this.id
1100
+ }
1101
+ });
1102
+ if (data.mediaType === 'share') {
1103
+ _this.shareCAEventSentStatus.transmitStart = true;
1078
1104
  }
1079
- });
1105
+ }
1080
1106
  });
1081
1107
  _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.LOCAL_MEDIA_STOPPED, function (data) {
1082
- // @ts-ignore
1083
- _this.webex.internal.newMetrics.submitClientEvent({
1084
- name: 'client.media.tx.stop',
1085
- payload: {
1086
- mediaType: data.mediaType,
1087
- shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1088
- },
1089
- options: {
1090
- meetingId: _this.id
1108
+ if (data.mediaType !== 'share' || !_this.shareCAEventSentStatus.transmitStop) {
1109
+ // @ts-ignore
1110
+ _this.webex.internal.newMetrics.submitClientEvent({
1111
+ name: 'client.media.tx.stop',
1112
+ payload: {
1113
+ mediaType: data.mediaType,
1114
+ shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1115
+ },
1116
+ options: {
1117
+ meetingId: _this.id
1118
+ }
1119
+ });
1120
+ if (data.mediaType === 'share') {
1121
+ _this.shareCAEventSentStatus.transmitStop = true;
1091
1122
  }
1092
- });
1123
+ }
1093
1124
  });
1094
1125
  _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED, function (data) {
1095
1126
  _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
1096
1127
  file: 'meeting/index',
1097
1128
  function: 'addMedia'
1098
1129
  }, _constants.EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED, data);
1099
- // @ts-ignore
1100
- _this.webex.internal.newMetrics.submitClientEvent({
1101
- name: 'client.media.rx.start',
1102
- payload: {
1103
- mediaType: data.mediaType,
1104
- shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1105
- },
1106
- options: {
1107
- meetingId: _this.id
1108
- }
1109
- });
1110
- if (data.mediaType === 'share') {
1130
+ if (data.mediaType !== 'share' || !_this.shareCAEventSentStatus.receiveStart) {
1111
1131
  // @ts-ignore
1112
1132
  _this.webex.internal.newMetrics.submitClientEvent({
1113
- name: 'client.media.render.start',
1133
+ name: 'client.media.rx.start',
1114
1134
  payload: {
1115
- mediaType: 'share',
1116
- shareInstanceId: _this.remoteShareInstanceId
1135
+ mediaType: data.mediaType,
1136
+ shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1117
1137
  },
1118
1138
  options: {
1119
1139
  meetingId: _this.id
1120
1140
  }
1121
1141
  });
1142
+ if (data.mediaType === 'share') {
1143
+ // @ts-ignore
1144
+ _this.webex.internal.newMetrics.submitClientEvent({
1145
+ name: 'client.media.render.start',
1146
+ payload: {
1147
+ mediaType: 'share',
1148
+ shareInstanceId: _this.remoteShareInstanceId
1149
+ },
1150
+ options: {
1151
+ meetingId: _this.id
1152
+ }
1153
+ });
1154
+ _this.shareCAEventSentStatus.receiveStart = true;
1155
+ }
1122
1156
  }
1123
1157
  });
1124
1158
  _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.REMOTE_MEDIA_STOPPED, function (data) {
1125
- // @ts-ignore
1126
- _this.webex.internal.newMetrics.submitClientEvent({
1127
- name: 'client.media.rx.stop',
1128
- payload: {
1129
- mediaType: data.mediaType,
1130
- shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1131
- },
1132
- options: {
1133
- meetingId: _this.id
1134
- }
1135
- });
1136
- if (data.mediaType === 'share') {
1159
+ if (data.mediaType !== 'share' || !_this.shareCAEventSentStatus.receiveStop) {
1137
1160
  // @ts-ignore
1138
1161
  _this.webex.internal.newMetrics.submitClientEvent({
1139
- name: 'client.media.render.stop',
1162
+ name: 'client.media.rx.stop',
1140
1163
  payload: {
1141
- mediaType: 'share',
1142
- shareInstanceId: _this.remoteShareInstanceId
1164
+ mediaType: data.mediaType,
1165
+ shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1143
1166
  },
1144
1167
  options: {
1145
1168
  meetingId: _this.id
1146
1169
  }
1147
1170
  });
1171
+ if (data.mediaType === 'share') {
1172
+ // @ts-ignore
1173
+ _this.webex.internal.newMetrics.submitClientEvent({
1174
+ name: 'client.media.render.stop',
1175
+ payload: {
1176
+ mediaType: 'share',
1177
+ shareInstanceId: _this.remoteShareInstanceId
1178
+ },
1179
+ options: {
1180
+ meetingId: _this.id
1181
+ }
1182
+ });
1183
+ _this.shareCAEventSentStatus.receiveStop = true;
1184
+ }
1148
1185
  }
1149
1186
  });
1150
1187
  });
@@ -1282,8 +1319,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1282
1319
  * @returns {undefined}
1283
1320
  */
1284
1321
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "handleShareVideoStreamMuteStateChange", function (muted) {
1285
- var _this$statsAnalyzer, _this$mediaProperties3, _this$mediaProperties4;
1322
+ var _this$mediaProperties3, _this$mediaProperties4, _this$statsAnalyzer;
1286
1323
  _loggerProxy.default.logger.log("Meeting:index#handleShareVideoStreamMuteStateChange --> Share video stream mute state changed to muted ".concat(muted));
1324
+ var shareVideoStreamSettings = (_this$mediaProperties3 = _this.mediaProperties) === null || _this$mediaProperties3 === void 0 ? void 0 : (_this$mediaProperties4 = _this$mediaProperties3.shareVideoStream) === null || _this$mediaProperties4 === void 0 ? void 0 : _this$mediaProperties4.getSettings();
1287
1325
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE, {
1288
1326
  correlationId: _this.correlationId,
1289
1327
  muted: muted,
@@ -1292,8 +1330,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1292
1330
  // SDK to TypeScript 5, which may affect other packages, use bracket notation for now, since
1293
1331
  // all we're doing here is adding metrics.
1294
1332
  // eslint-disable-next-line dot-notation
1295
- displaySurface: (_this$mediaProperties3 = _this.mediaProperties) === null || _this$mediaProperties3 === void 0 ? void 0 : (_this$mediaProperties4 = _this$mediaProperties3.shareVideoStream) === null || _this$mediaProperties4 === void 0 ? void 0 : _this$mediaProperties4.getSettings()['displaySurface'],
1296
- isMultistream: _this.isMultistream
1333
+ displaySurface: shareVideoStreamSettings === null || shareVideoStreamSettings === void 0 ? void 0 : shareVideoStreamSettings['displaySurface'],
1334
+ isMultistream: _this.isMultistream,
1335
+ frameRate: shareVideoStreamSettings === null || shareVideoStreamSettings === void 0 ? void 0 : shareVideoStreamSettings.frameRate
1297
1336
  });
1298
1337
  });
1299
1338
  /**
@@ -2084,6 +2123,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2084
2123
  */
2085
2124
  _this.remoteShareInstanceId = null;
2086
2125
 
2126
+ /**
2127
+ * Status used for ensuring we do not oversend metrics
2128
+ * @instance
2129
+ * @private
2130
+ * @memberof Meeting
2131
+ */
2132
+ _this.shareCAEventSentStatus = {
2133
+ transmitStart: false,
2134
+ transmitStop: false,
2135
+ receiveStart: false,
2136
+ receiveStop: false
2137
+ };
2138
+
2087
2139
  /**
2088
2140
  * The class that helps to control recording functions: start, stop, pause, resume, etc
2089
2141
  * @instance
@@ -2303,6 +2355,44 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2303
2355
  this.callStateForMetrics.correlationId = correlationId;
2304
2356
  }
2305
2357
 
2358
+ /**
2359
+ * Getter - Returns callStateForMetrics.userNameInput
2360
+ * @returns {string}
2361
+ */
2362
+ }, {
2363
+ key: "userNameInput",
2364
+ get: function get() {
2365
+ var _this$callStateForMet;
2366
+ return (_this$callStateForMet = this.callStateForMetrics) === null || _this$callStateForMet === void 0 ? void 0 : _this$callStateForMet.userNameInput;
2367
+ }
2368
+
2369
+ /**
2370
+ * Setter - sets callStateForMetrics.userNameInput
2371
+ * @param {string} userNameInput
2372
+ */,
2373
+ set: function set(userNameInput) {
2374
+ this.callStateForMetrics.userNameInput = userNameInput;
2375
+ }
2376
+
2377
+ /**
2378
+ * Getter - Returns callStateForMetrics.emailInput
2379
+ * @returns {string}
2380
+ */
2381
+ }, {
2382
+ key: "emailInput",
2383
+ get: function get() {
2384
+ var _this$callStateForMet2;
2385
+ return (_this$callStateForMet2 = this.callStateForMetrics) === null || _this$callStateForMet2 === void 0 ? void 0 : _this$callStateForMet2.emailInput;
2386
+ }
2387
+
2388
+ /**
2389
+ * Setter - sets callStateForMetrics.emailInput
2390
+ * @param {string} emailInput
2391
+ */,
2392
+ set: function set(emailInput) {
2393
+ this.callStateForMetrics.emailInput = emailInput;
2394
+ }
2395
+
2306
2396
  /**
2307
2397
  * Getter - Returns callStateForMetrics.sessionCorrelationId
2308
2398
  * @returns {string}
@@ -2332,6 +2422,31 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2332
2422
  return (0, _classPrivateFieldGet2.default)(this, _isoLocalClientMeetingJoinTime);
2333
2423
  }
2334
2424
 
2425
+ /**
2426
+ * Setter - sets isoLocalClientMeetingJoinTime
2427
+ * This will be set once on meeting join, and not updated again
2428
+ * this will always produce an ISO string
2429
+ * If the iso string is invalid, it will fallback to the current system time
2430
+ * @param {string | undefined} time
2431
+ */,
2432
+ set: function set(time) {
2433
+ var fallback = new Date().toISOString();
2434
+ if (!time) {
2435
+ (0, _classPrivateFieldSet2.default)(this, _isoLocalClientMeetingJoinTime, fallback);
2436
+ } else {
2437
+ var date = new Date(time);
2438
+
2439
+ // Check if the date is valid
2440
+ if ((0, _isNan.default)(date.getTime())) {
2441
+ _loggerProxy.default.logger.info( // @ts-ignore
2442
+ "Meeting:index#isoLocalClientMeetingJoinTime --> Invalid date provided: ".concat(time, ". Falling back to system clock."));
2443
+ (0, _classPrivateFieldSet2.default)(this, _isoLocalClientMeetingJoinTime, fallback);
2444
+ } else {
2445
+ (0, _classPrivateFieldSet2.default)(this, _isoLocalClientMeetingJoinTime, date.toISOString());
2446
+ }
2447
+ }
2448
+ }
2449
+
2335
2450
  /**
2336
2451
  * Set meeting info and trigger `MEETING_INFO_AVAILABLE` event
2337
2452
  * @param {any} info
@@ -3391,6 +3506,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3391
3506
  state: state
3392
3507
  });
3393
3508
  });
3509
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED, function (_ref27) {
3510
+ var state = _ref27.state;
3511
+ _triggerProxy.default.trigger(_this14, {
3512
+ file: 'meeting/index',
3513
+ function: 'setupLocusControlsListener'
3514
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_ANNOTATION_UPDATED, {
3515
+ state: state
3516
+ });
3517
+ });
3518
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED, function (_ref28) {
3519
+ var state = _ref28.state;
3520
+ _triggerProxy.default.trigger(_this14, {
3521
+ file: 'meeting/index',
3522
+ function: 'setupLocusControlsListener'
3523
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_REMOTE_DESKTOP_CONTROL_UPDATED, {
3524
+ state: state
3525
+ });
3526
+ });
3394
3527
  }
3395
3528
 
3396
3529
  /**
@@ -3430,7 +3563,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3430
3563
  var _this15 = this;
3431
3564
  // Will get triggered on local and remote share
3432
3565
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, /*#__PURE__*/function () {
3433
- var _ref27 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3566
+ var _ref29 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3434
3567
  var _payload$previous, _payload$previous2;
3435
3568
  var _payload$current, contentShare, whiteboardShare, previousContentShare, previousWhiteboardShare, newShareStatus, _this15$locusInfo, _this15$locusInfo$inf, _this15$webinar, oldShareStatus, sendStartedSharingRemote, _this15$mediaProperti;
3436
3569
  return _regenerator.default.wrap(function _callee8$(_context8) {
@@ -3516,6 +3649,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3516
3649
  case 26:
3517
3650
  sendStartedSharingRemote = function sendStartedSharingRemote() {
3518
3651
  _this15.remoteShareInstanceId = contentShare.shareInstanceId;
3652
+ _this15.shareCAEventSentStatus.receiveStart = false;
3653
+ _this15.shareCAEventSentStatus.receiveStop = false;
3519
3654
  _triggerProxy.default.trigger(_this15, {
3520
3655
  file: 'meetings/index',
3521
3656
  function: 'remoteShare'
@@ -3589,6 +3724,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3589
3724
  // if we got here, then some remote participant has stolen
3590
3725
  // the presentation from another remote participant
3591
3726
  _this15.remoteShareInstanceId = contentShare.shareInstanceId;
3727
+ _this15.shareCAEventSentStatus.receiveStart = false;
3728
+ _this15.shareCAEventSentStatus.receiveStop = false;
3592
3729
  _triggerProxy.default.trigger(_this15, {
3593
3730
  file: 'meetings/index',
3594
3731
  function: 'remoteShare'
@@ -3629,7 +3766,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3629
3766
  }, _callee8, null, [[27,, 31, 34]]);
3630
3767
  }));
3631
3768
  return function (_x8) {
3632
- return _ref27.apply(this, arguments);
3769
+ return _ref29.apply(this, arguments);
3633
3770
  };
3634
3771
  }());
3635
3772
  }
@@ -3743,8 +3880,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3743
3880
  });
3744
3881
  }
3745
3882
  });
3746
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref28) {
3747
- var isInitializing = _ref28.isInitializing;
3883
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref30) {
3884
+ var isInitializing = _ref30.isInitializing;
3748
3885
  _this19.updateMeetingActions();
3749
3886
  _this19.recordingController.setDisplayHints(_this19.userDisplayHints);
3750
3887
  _this19.recordingController.setUserPolicy(_this19.selfUserPolicies);
@@ -3882,7 +4019,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3882
4019
  _this21.updateLLMConnection();
3883
4020
  });
3884
4021
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, /*#__PURE__*/function () {
3885
- var _ref29 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
4022
+ var _ref31 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
3886
4023
  var _this21$rtcMetrics;
3887
4024
  return _regenerator.default.wrap(function _callee9$(_context9) {
3888
4025
  while (1) switch (_context9.prev = _context9.next) {
@@ -3916,7 +4053,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3916
4053
  }, _callee9);
3917
4054
  }));
3918
4055
  return function (_x9) {
3919
- return _ref29.apply(this, arguments);
4056
+ return _ref31.apply(this, arguments);
3920
4057
  };
3921
4058
  }());
3922
4059
 
@@ -4035,7 +4172,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4035
4172
  }
4036
4173
  });
4037
4174
  this.locusInfo.on(_constants.EVENTS.DESTROY_MEETING, /*#__PURE__*/function () {
4038
- var _ref30 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4175
+ var _ref32 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4039
4176
  return _regenerator.default.wrap(function _callee10$(_context10) {
4040
4177
  while (1) switch (_context10.prev = _context10.next) {
4041
4178
  case 0:
@@ -4095,7 +4232,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4095
4232
  }, _callee10, null, [[8, 14]]);
4096
4233
  }));
4097
4234
  return function (_x10) {
4098
- return _ref30.apply(this, arguments);
4235
+ return _ref32.apply(this, arguments);
4099
4236
  };
4100
4237
  }());
4101
4238
  }
@@ -4197,6 +4334,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4197
4334
  key: "beRightBack",
4198
4335
  value: (function () {
4199
4336
  var _beRightBack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(enabled) {
4337
+ var _this24 = this;
4200
4338
  var errorMessage, error, _errorMessage, _error;
4201
4339
  return _regenerator.default.wrap(function _callee11$(_context11) {
4202
4340
  while (1) switch (_context11.prev = _context11.next) {
@@ -4219,7 +4357,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4219
4357
  _loggerProxy.default.logger.error(_error);
4220
4358
  return _context11.abrupt("return", _promise.default.reject(_error));
4221
4359
  case 10:
4222
- return _context11.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager));
4360
+ return _context11.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager).then(function () {
4361
+ if (_this24.audio && enabled) {
4362
+ // locus mutes the participant with brb enabled request,
4363
+ // so we need to explicitly update remote mute for correct logic flow
4364
+ _this24.audio.handleServerRemoteMuteUpdate(_this24, enabled);
4365
+ }
4366
+ }));
4223
4367
  case 11:
4224
4368
  case "end":
4225
4369
  return _context11.stop();
@@ -4405,7 +4549,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4405
4549
  canAdmitParticipant: _util2.default.canAdmitParticipant(this.userDisplayHints),
4406
4550
  canLock: _util2.default.canUserLock(this.userDisplayHints),
4407
4551
  canUnlock: _util2.default.canUserUnlock(this.userDisplayHints),
4408
- canShareWhiteBoard: _util2.default.canShareWhiteBoard(this.userDisplayHints),
4552
+ canShareWhiteBoard: _util2.default.canShareWhiteBoard(this.userDisplayHints, this.selfUserPolicies),
4409
4553
  canSetDisallowUnmute: _util5.default.canSetDisallowUnmute(this.userDisplayHints),
4410
4554
  canUnsetDisallowUnmute: _util5.default.canUnsetDisallowUnmute(this.userDisplayHints),
4411
4555
  canSetMuteOnEntry: _util5.default.canSetMuteOnEntry(this.userDisplayHints),
@@ -4435,6 +4579,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4435
4579
  canSelectSpokenLanguages: _util2.default.canSelectSpokenLanguages(this.userDisplayHints),
4436
4580
  waitingForOthersToJoin: _util2.default.waitingForOthersToJoin(this.userDisplayHints),
4437
4581
  canSendReactions: _util2.default.canSendReactions(this.inMeetingActions.canSendReactions, this.userDisplayHints),
4582
+ requiresPostMeetingDataConsentPrompt: _util2.default.requiresPostMeetingDataConsentPrompt(this.userDisplayHints),
4438
4583
  canManageBreakout: _util2.default.canManageBreakout(this.userDisplayHints),
4439
4584
  canStartBreakout: _util2.default.canStartBreakout(this.userDisplayHints),
4440
4585
  canBroadcastMessageToBreakout: _util2.default.canBroadcastMessageToBreakout(this.userDisplayHints, this.selfUserPolicies),
@@ -4610,6 +4755,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4610
4755
  canAnnotate: _util5.default.hasPolicies({
4611
4756
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_ANNOTATION],
4612
4757
  policies: this.selfUserPolicies
4758
+ }),
4759
+ canEnableAnnotation: _util5.default.hasHints({
4760
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_ANNOTATION_MEETING_OPTION],
4761
+ displayHints: this.userDisplayHints
4762
+ }),
4763
+ canDisableAnnotation: _util5.default.hasHints({
4764
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_ANNOTATION_MEETING_OPTION],
4765
+ displayHints: this.userDisplayHints
4766
+ }),
4767
+ canEnableRemoteDesktopControl: _util5.default.hasHints({
4768
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_RDC_MEETING_OPTION],
4769
+ displayHints: this.userDisplayHints
4770
+ }),
4771
+ canDisableRemoteDesktopControl: _util5.default.hasHints({
4772
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_RDC_MEETING_OPTION],
4773
+ displayHints: this.userDisplayHints
4613
4774
  })
4614
4775
  }) || changed;
4615
4776
  }
@@ -4714,7 +4875,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4714
4875
  }, {
4715
4876
  key: "setLogUploadTimer",
4716
4877
  value: function setLogUploadTimer() {
4717
- var _this24 = this;
4878
+ var _this25 = this;
4718
4879
  // start with short timeouts and increase them later on so in case users have very long multi-hour meetings we don't get too fragmented logs
4719
4880
  var LOG_UPLOAD_INTERVALS = [0.1, 15, 30, 60]; // in minutes
4720
4881
 
@@ -4725,15 +4886,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4725
4886
  this.logUploadIntervalIndex += 1;
4726
4887
  }
4727
4888
  this.uploadLogsTimer = (0, _commonTimers.safeSetTimeout)(function () {
4728
- _this24.uploadLogsTimer = undefined;
4729
- _this24.uploadLogs();
4889
+ _this25.uploadLogsTimer = undefined;
4890
+ _this25.uploadLogs();
4730
4891
 
4731
4892
  // just as an extra precaution, to avoid uploading logs forever in case something goes wrong
4732
4893
  // and the page remains opened, we stop it if there is no media connection
4733
- if (!_this24.mediaProperties.webrtcMediaConnection) {
4894
+ if (!_this25.mediaProperties.webrtcMediaConnection) {
4734
4895
  return;
4735
4896
  }
4736
- _this24.setLogUploadTimer();
4897
+ _this25.setLogUploadTimer();
4737
4898
  }, delay);
4738
4899
  }
4739
4900
 
@@ -4800,7 +4961,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4800
4961
  }, {
4801
4962
  key: "closeRemoteStreams",
4802
4963
  value: function closeRemoteStreams() {
4803
- var _this25 = this;
4964
+ var _this26 = this;
4804
4965
  var _this$mediaProperties6 = this.mediaProperties,
4805
4966
  remoteAudioStream = _this$mediaProperties6.remoteAudioStream,
4806
4967
  remoteVideoStream = _this$mediaProperties6.remoteVideoStream,
@@ -4814,7 +4975,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4814
4975
  */
4815
4976
  // eslint-disable-next-line @typescript-eslint/no-shadow
4816
4977
  var triggerMediaStoppedEvent = function triggerMediaStoppedEvent(mediaType) {
4817
- _triggerProxy.default.trigger(_this25, {
4978
+ _triggerProxy.default.trigger(_this26, {
4818
4979
  file: 'meeting/index',
4819
4980
  function: 'closeRemoteStreams'
4820
4981
  }, _constants.EVENT_TRIGGERS.MEDIA_STOPPED, {
@@ -5122,7 +5283,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5122
5283
  }, {
5123
5284
  key: "setMercuryListener",
5124
5285
  value: function setMercuryListener() {
5125
- var _this26 = this;
5286
+ var _this27 = this;
5126
5287
  // Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury
5127
5288
  // if the meeting has active peer connections, it should try to reconnect.
5128
5289
  // @ts-ignore
@@ -5130,33 +5291,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5130
5291
  _loggerProxy.default.logger.info('Meeting:index#setMercuryListener --> Web socket online');
5131
5292
 
5132
5293
  // Only send restore event when it was disconnected before and for connected later
5133
- if (!_this26.hasWebsocketConnected) {
5294
+ if (!_this27.hasWebsocketConnected) {
5134
5295
  // @ts-ignore
5135
- _this26.webex.internal.newMetrics.submitClientEvent({
5296
+ _this27.webex.internal.newMetrics.submitClientEvent({
5136
5297
  name: 'client.mercury.connection.restored',
5137
5298
  options: {
5138
- meetingId: _this26.id
5299
+ meetingId: _this27.id
5139
5300
  }
5140
5301
  });
5141
5302
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_RESTORED, {
5142
- correlation_id: _this26.correlationId
5303
+ correlation_id: _this27.correlationId
5143
5304
  });
5144
5305
  }
5145
- _this26.hasWebsocketConnected = true;
5306
+ _this27.hasWebsocketConnected = true;
5146
5307
  });
5147
5308
 
5148
5309
  // @ts-ignore
5149
5310
  this.webex.internal.mercury.on(_constants.OFFLINE, function () {
5150
5311
  _loggerProxy.default.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
5151
5312
  // @ts-ignore
5152
- _this26.webex.internal.newMetrics.submitClientEvent({
5313
+ _this27.webex.internal.newMetrics.submitClientEvent({
5153
5314
  name: 'client.mercury.connection.lost',
5154
5315
  options: {
5155
- meetingId: _this26.id
5316
+ meetingId: _this27.id
5156
5317
  }
5157
5318
  });
5158
5319
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_FAILURE, {
5159
- correlation_id: _this26.correlationId
5320
+ correlation_id: _this27.correlationId
5160
5321
  });
5161
5322
  });
5162
5323
  }
@@ -5263,7 +5424,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5263
5424
  }, {
5264
5425
  key: "muteAudio",
5265
5426
  value: function muteAudio() {
5266
- var _this27 = this;
5427
+ var _this28 = this;
5267
5428
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5268
5429
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5269
5430
  }
@@ -5279,22 +5440,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5279
5440
 
5280
5441
  // First, stop sending the local audio media
5281
5442
  return logRequest(this.audio.handleClientRequest(this, true).then(function () {
5282
- _util2.default.handleAudioLogging(_this27.mediaProperties.audioStream);
5443
+ _util2.default.handleAudioLogging(_this28.mediaProperties.audioStream);
5283
5444
  // @ts-ignore
5284
- _this27.webex.internal.newMetrics.submitClientEvent({
5445
+ _this28.webex.internal.newMetrics.submitClientEvent({
5285
5446
  name: 'client.muted',
5286
5447
  payload: {
5287
5448
  trigger: 'user-interaction',
5288
5449
  mediaType: 'audio'
5289
5450
  },
5290
5451
  options: {
5291
- meetingId: _this27.id
5452
+ meetingId: _this28.id
5292
5453
  }
5293
5454
  });
5294
5455
  }).catch(function (error) {
5295
5456
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_AUDIO_FAILURE, {
5296
- correlation_id: _this27.correlationId,
5297
- locus_id: _this27.locusUrl.split('/').pop(),
5457
+ correlation_id: _this28.correlationId,
5458
+ locus_id: _this28.locusUrl.split('/').pop(),
5298
5459
  reason: error.message,
5299
5460
  stack: error.stack
5300
5461
  });
@@ -5313,7 +5474,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5313
5474
  }, {
5314
5475
  key: "unmuteAudio",
5315
5476
  value: function unmuteAudio() {
5316
- var _this28 = this;
5477
+ var _this29 = this;
5317
5478
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5318
5479
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5319
5480
  }
@@ -5329,22 +5490,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5329
5490
 
5330
5491
  // First, send the control to unmute the participant on the server
5331
5492
  return logRequest(this.audio.handleClientRequest(this, false).then(function () {
5332
- _util2.default.handleAudioLogging(_this28.mediaProperties.audioStream);
5493
+ _util2.default.handleAudioLogging(_this29.mediaProperties.audioStream);
5333
5494
  // @ts-ignore
5334
- _this28.webex.internal.newMetrics.submitClientEvent({
5495
+ _this29.webex.internal.newMetrics.submitClientEvent({
5335
5496
  name: 'client.unmuted',
5336
5497
  payload: {
5337
5498
  trigger: 'user-interaction',
5338
5499
  mediaType: 'audio'
5339
5500
  },
5340
5501
  options: {
5341
- meetingId: _this28.id
5502
+ meetingId: _this29.id
5342
5503
  }
5343
5504
  });
5344
5505
  }).catch(function (error) {
5345
5506
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_AUDIO_FAILURE, {
5346
- correlation_id: _this28.correlationId,
5347
- locus_id: _this28.locusUrl.split('/').pop(),
5507
+ correlation_id: _this29.correlationId,
5508
+ locus_id: _this29.locusUrl.split('/').pop(),
5348
5509
  reason: error.message,
5349
5510
  stack: error.stack
5350
5511
  });
@@ -5363,7 +5524,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5363
5524
  }, {
5364
5525
  key: "muteVideo",
5365
5526
  value: function muteVideo() {
5366
- var _this29 = this;
5527
+ var _this30 = this;
5367
5528
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5368
5529
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5369
5530
  }
@@ -5377,22 +5538,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5377
5538
  return _promise.default.reject(new _parameter.default('no video control associated to the meeting'));
5378
5539
  }
5379
5540
  return logRequest(this.video.handleClientRequest(this, true).then(function () {
5380
- _util2.default.handleVideoLogging(_this29.mediaProperties.videoStream);
5541
+ _util2.default.handleVideoLogging(_this30.mediaProperties.videoStream);
5381
5542
  // @ts-ignore
5382
- _this29.webex.internal.newMetrics.submitClientEvent({
5543
+ _this30.webex.internal.newMetrics.submitClientEvent({
5383
5544
  name: 'client.muted',
5384
5545
  payload: {
5385
5546
  trigger: 'user-interaction',
5386
5547
  mediaType: 'video'
5387
5548
  },
5388
5549
  options: {
5389
- meetingId: _this29.id
5550
+ meetingId: _this30.id
5390
5551
  }
5391
5552
  });
5392
5553
  }).catch(function (error) {
5393
5554
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_VIDEO_FAILURE, {
5394
- correlation_id: _this29.correlationId,
5395
- locus_id: _this29.locusUrl.split('/').pop(),
5555
+ correlation_id: _this30.correlationId,
5556
+ locus_id: _this30.locusUrl.split('/').pop(),
5396
5557
  reason: error.message,
5397
5558
  stack: error.stack
5398
5559
  });
@@ -5411,7 +5572,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5411
5572
  }, {
5412
5573
  key: "unmuteVideo",
5413
5574
  value: function unmuteVideo() {
5414
- var _this30 = this;
5575
+ var _this31 = this;
5415
5576
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5416
5577
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5417
5578
  }
@@ -5425,22 +5586,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5425
5586
  return _promise.default.reject(new _parameter.default('no audio control associated to the meeting'));
5426
5587
  }
5427
5588
  return logRequest(this.video.handleClientRequest(this, false).then(function () {
5428
- _util2.default.handleVideoLogging(_this30.mediaProperties.videoStream);
5589
+ _util2.default.handleVideoLogging(_this31.mediaProperties.videoStream);
5429
5590
  // @ts-ignore
5430
- _this30.webex.internal.newMetrics.submitClientEvent({
5591
+ _this31.webex.internal.newMetrics.submitClientEvent({
5431
5592
  name: 'client.unmuted',
5432
5593
  payload: {
5433
5594
  trigger: 'user-interaction',
5434
5595
  mediaType: 'video'
5435
5596
  },
5436
5597
  options: {
5437
- meetingId: _this30.id
5598
+ meetingId: _this31.id
5438
5599
  }
5439
5600
  });
5440
5601
  }).catch(function (error) {
5441
5602
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_VIDEO_FAILURE, {
5442
- correlation_id: _this30.correlationId,
5443
- locus_id: _this30.locusUrl.split('/').pop(),
5603
+ correlation_id: _this31.correlationId,
5604
+ locus_id: _this31.locusUrl.split('/').pop(),
5444
5605
  reason: error.message,
5445
5606
  stack: error.stack
5446
5607
  });
@@ -5470,7 +5631,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5470
5631
  key: "joinWithMedia",
5471
5632
  value: (function () {
5472
5633
  var _joinWithMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {
5473
- var _this31 = this;
5634
+ var _this32 = this;
5474
5635
  var options,
5475
5636
  mediaOptions,
5476
5637
  _options$joinOptions,
@@ -5553,7 +5714,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5553
5714
  case 35:
5554
5715
  _context16.next = 37;
5555
5716
  return this.addMediaInternal(function () {
5556
- return _this31.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5717
+ return _this32.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5557
5718
  }, turnServerInfo, forceTurnDiscovery, mediaOptions);
5558
5719
  case 37:
5559
5720
  mediaResponse = _context16.sent;
@@ -5648,7 +5809,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5648
5809
  }, {
5649
5810
  key: "reconnect",
5650
5811
  value: function reconnect(options) {
5651
- var _this32 = this;
5812
+ var _this33 = this;
5652
5813
  _loggerProxy.default.logger.log("Meeting:index#reconnect --> attempting to reconnect meeting ".concat(this.id));
5653
5814
  if (!this.reconnectionManager || !this.reconnectionManager.reconnect) {
5654
5815
  return _promise.default.reject(new _parameter.default('Cannot reconnect, ReconnectionManager must first be defined.'));
@@ -5664,10 +5825,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5664
5825
  while (1) switch (_context17.prev = _context17.next) {
5665
5826
  case 0:
5666
5827
  _context17.next = 2;
5667
- return _this32.waitForRemoteSDPAnswer();
5828
+ return _this33.waitForRemoteSDPAnswer();
5668
5829
  case 2:
5669
5830
  _context17.next = 4;
5670
- return _this32.waitForMediaConnectionConnected();
5831
+ return _this33.waitForMediaConnectionConnected();
5671
5832
  case 4:
5672
5833
  case "end":
5673
5834
  return _context17.stop();
@@ -5681,7 +5842,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5681
5842
  return _promise.default.resolve();
5682
5843
  }
5683
5844
  _loggerProxy.default.logger.error('Meeting:index#reconnect --> Meeting reconnect failed', error);
5684
- _this32.uploadLogs({
5845
+ _this33.uploadLogs({
5685
5846
  file: 'meeting/index',
5686
5847
  function: 'reconnect'
5687
5848
  });
@@ -5728,19 +5889,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5728
5889
  }, {
5729
5890
  key: "setCaptionLanguage",
5730
5891
  value: function setCaptionLanguage(language) {
5731
- var _this33 = this;
5892
+ var _this34 = this;
5732
5893
  return new _promise.default(function (resolve, reject) {
5733
- if (!_this33.isTranscriptionSupported()) {
5894
+ if (!_this34.isTranscriptionSupported()) {
5734
5895
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5735
5896
  reject(new Error('Webex Assistant is not enabled/supported'));
5736
5897
  }
5737
5898
  try {
5738
5899
  var voiceaListenerCaptionUpdate = function voiceaListenerCaptionUpdate(payload) {
5739
5900
  // @ts-ignore
5740
- _this33.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5901
+ _this34.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5741
5902
  var statusCode = payload.statusCode;
5742
5903
  if (statusCode === 200) {
5743
- _this33.transcription.languageOptions = _objectSpread(_objectSpread({}, _this33.transcription.languageOptions), {}, {
5904
+ _this34.transcription.languageOptions = _objectSpread(_objectSpread({}, _this34.transcription.languageOptions), {}, {
5744
5905
  currentCaptionLanguage: language
5745
5906
  });
5746
5907
  resolve(language);
@@ -5749,9 +5910,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5749
5910
  }
5750
5911
  };
5751
5912
  // @ts-ignore
5752
- _this33.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5913
+ _this34.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5753
5914
  // @ts-ignore
5754
- _this33.webex.internal.voicea.requestLanguage(language);
5915
+ _this34.webex.internal.voicea.requestLanguage(language);
5755
5916
  } catch (error) {
5756
5917
  _loggerProxy.default.logger.error("Meeting:index#setCaptionLanguage --> ".concat(error));
5757
5918
  reject(error);
@@ -5767,23 +5928,23 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5767
5928
  }, {
5768
5929
  key: "setSpokenLanguage",
5769
5930
  value: function setSpokenLanguage(language) {
5770
- var _this34 = this;
5931
+ var _this35 = this;
5771
5932
  return new _promise.default(function (resolve, reject) {
5772
- if (!_this34.isTranscriptionSupported()) {
5933
+ if (!_this35.isTranscriptionSupported()) {
5773
5934
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5774
5935
  reject(new Error('Webex Assistant is not enabled/supported'));
5775
5936
  }
5776
- if (_this34.getCurUserType() !== 'host') {
5937
+ if (_this35.getCurUserType() !== 'host') {
5777
5938
  _loggerProxy.default.logger.error('Meeting:index#setSpokenLanguage --> Only host can set spoken language');
5778
5939
  reject(new Error('Only host can set spoken language'));
5779
5940
  }
5780
5941
  try {
5781
5942
  var voiceaListenerLanguageUpdate = function voiceaListenerLanguageUpdate(payload) {
5782
5943
  // @ts-ignore
5783
- _this34.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5944
+ _this35.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5784
5945
  var languageCode = payload.languageCode;
5785
5946
  if (languageCode) {
5786
- _this34.transcription.languageOptions = _objectSpread(_objectSpread({}, _this34.transcription.languageOptions), {}, {
5947
+ _this35.transcription.languageOptions = _objectSpread(_objectSpread({}, _this35.transcription.languageOptions), {}, {
5787
5948
  currentSpokenLanguage: languageCode
5788
5949
  });
5789
5950
  resolve(languageCode);
@@ -5793,10 +5954,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5793
5954
  };
5794
5955
 
5795
5956
  // @ts-ignore
5796
- _this34.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5957
+ _this35.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5797
5958
 
5798
5959
  // @ts-ignore
5799
- _this34.webex.internal.voicea.setSpokenLanguage(language);
5960
+ _this35.webex.internal.voicea.setSpokenLanguage(language);
5800
5961
  } catch (error) {
5801
5962
  _loggerProxy.default.logger.error("Meeting:index#setSpokenLanguage --> ".concat(error));
5802
5963
  reject(error);
@@ -5919,7 +6080,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5919
6080
  */
5920
6081
  function () {
5921
6082
  var _join = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19() {
5922
- var _this35 = this;
6083
+ var _this36 = this;
5923
6084
  var options,
5924
6085
  errorMessage,
5925
6086
  error,
@@ -6068,62 +6229,61 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6068
6229
  return _context19.abrupt("return", _promise.default.reject(_context19.t0));
6069
6230
  case 51:
6070
6231
  return _context19.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
6071
- _this35.meetingFiniteStateMachine.join();
6072
- _this35.setupLocusMediaRequest();
6232
+ _this36.meetingFiniteStateMachine.join();
6233
+ _this36.setupLocusMediaRequest();
6073
6234
 
6074
6235
  // @ts-ignore
6075
- _this35.webex.internal.device.meetingStarted();
6076
- (0, _classPrivateFieldSet2.default)(_this35, _isoLocalClientMeetingJoinTime, new Date().toISOString());
6236
+ _this36.webex.internal.device.meetingStarted();
6077
6237
  _loggerProxy.default.logger.log('Meeting:index#join --> Success');
6078
6238
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_SUCCESS, {
6079
- correlation_id: _this35.correlationId
6239
+ correlation_id: _this36.correlationId
6080
6240
  });
6081
6241
  joinSuccess(join);
6082
- _this35.deferJoin = undefined;
6242
+ _this36.deferJoin = undefined;
6083
6243
  return join;
6084
6244
  }).catch(function (error) {
6085
- var _this35$meetingInfo, _error$error;
6086
- _this35.meetingFiniteStateMachine.fail(error);
6245
+ var _this36$meetingInfo, _error$error;
6246
+ _this36.meetingFiniteStateMachine.fail(error);
6087
6247
  _loggerProxy.default.logger.error('Meeting:index#join --> Failed', error);
6088
6248
 
6089
6249
  // @ts-ignore
6090
- _this35.webex.internal.newMetrics.submitClientEvent({
6250
+ _this36.webex.internal.newMetrics.submitClientEvent({
6091
6251
  name: 'client.locus.join.response',
6092
6252
  payload: {
6093
6253
  identifiers: {
6094
- meetingLookupUrl: (_this35$meetingInfo = _this35.meetingInfo) === null || _this35$meetingInfo === void 0 ? void 0 : _this35$meetingInfo.meetingLookupUrl
6254
+ meetingLookupUrl: (_this36$meetingInfo = _this36.meetingInfo) === null || _this36$meetingInfo === void 0 ? void 0 : _this36$meetingInfo.meetingLookupUrl
6095
6255
  }
6096
6256
  },
6097
6257
  options: {
6098
- meetingId: _this35.id,
6258
+ meetingId: _this36.id,
6099
6259
  rawError: error
6100
6260
  }
6101
6261
  });
6102
6262
 
6103
6263
  // TODO: change this to error codes and pre defined dictionary
6104
6264
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_FAILURE, {
6105
- correlation_id: _this35.correlationId,
6265
+ correlation_id: _this36.correlationId,
6106
6266
  reason: (_error$error = error.error) === null || _error$error === void 0 ? void 0 : _error$error.message,
6107
6267
  stack: error.stack
6108
6268
  });
6109
6269
 
6110
6270
  // Upload logs on join Failure
6111
- _triggerProxy.default.trigger(_this35, {
6271
+ _triggerProxy.default.trigger(_this36, {
6112
6272
  file: 'meeting/index',
6113
6273
  function: 'join'
6114
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this35);
6274
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this36);
6115
6275
  joinFailed(error);
6116
- _this35.deferJoin = undefined;
6276
+ _this36.deferJoin = undefined;
6117
6277
  return _promise.default.reject(error);
6118
6278
  }).then(function (join) {
6119
6279
  // @ts-ignore - config coming from registerPlugin
6120
- if (_this35.config.enableAutomaticLLM) {
6280
+ if (_this36.config.enableAutomaticLLM) {
6121
6281
  // @ts-ignore
6122
- _this35.webex.internal.llm.on('online', _this35.handleLLMOnline);
6123
- _this35.updateLLMConnection().catch(function (error) {
6282
+ _this36.webex.internal.llm.on('online', _this36.handleLLMOnline);
6283
+ _this36.updateLLMConnection().catch(function (error) {
6124
6284
  _loggerProxy.default.logger.error('Meeting:index#join --> Transcription Socket Connection Failed', error);
6125
6285
  _metrics.default.sendBehavioralMetric(_constants2.default.LLM_CONNECTION_AFTER_JOIN_FAILURE, {
6126
- correlation_id: _this35.correlationId,
6286
+ correlation_id: _this36.correlationId,
6127
6287
  reason: error === null || error === void 0 ? void 0 : error.message,
6128
6288
  stack: error.stack
6129
6289
  });
@@ -6155,7 +6315,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6155
6315
  key: "updateLLMConnection",
6156
6316
  value: (function () {
6157
6317
  var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20() {
6158
- var _this36 = this;
6318
+ var _this37 = this;
6159
6319
  var _this$locusInfo6, url, _this$locusInfo6$info, _this$locusInfo6$info2, datachannelUrl, practiceSessionDatachannelUrl, isJoined, dataChannelUrl;
6160
6320
  return _regenerator.default.wrap(function _callee20$(_context20) {
6161
6321
  while (1) switch (_context20.prev = _context20.next) {
@@ -6195,9 +6355,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6195
6355
  case 11:
6196
6356
  return _context20.abrupt("return", this.webex.internal.llm.registerAndConnect(url, dataChannelUrl).then(function (registerAndConnectResult) {
6197
6357
  // @ts-ignore - Fix type
6198
- _this36.webex.internal.llm.off('event:relay.event', _this36.processRelayEvent);
6358
+ _this37.webex.internal.llm.off('event:relay.event', _this37.processRelayEvent);
6199
6359
  // @ts-ignore - Fix type
6200
- _this36.webex.internal.llm.on('event:relay.event', _this36.processRelayEvent);
6360
+ _this37.webex.internal.llm.on('event:relay.event', _this37.processRelayEvent);
6201
6361
  _loggerProxy.default.logger.info('Meeting:index#updateLLMConnection --> enabled to receive relay events!');
6202
6362
  return _promise.default.resolve(registerAndConnectResult);
6203
6363
  }));
@@ -6251,7 +6411,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6251
6411
  }, {
6252
6412
  key: "dialInPstn",
6253
6413
  value: function dialInPstn() {
6254
- var _this37 = this;
6414
+ var _this38 = this;
6255
6415
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial in devices from being provisioned
6256
6416
 
6257
6417
  var correlationId = this.correlationId,
@@ -6267,10 +6427,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6267
6427
  }).catch(function (error) {
6268
6428
  var _error$error2;
6269
6429
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_IN_FAILURE, {
6270
- correlation_id: _this37.correlationId,
6271
- dial_in_url: _this37.dialInUrl,
6430
+ correlation_id: _this38.correlationId,
6431
+ dial_in_url: _this38.dialInUrl,
6272
6432
  locus_id: locusUrl.split('/').pop(),
6273
- client_url: _this37.deviceUrl,
6433
+ client_url: _this38.deviceUrl,
6274
6434
  reason: (_error$error2 = error.error) === null || _error$error2 === void 0 ? void 0 : _error$error2.message,
6275
6435
  stack: error.stack
6276
6436
  });
@@ -6288,7 +6448,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6288
6448
  }, {
6289
6449
  key: "dialOutPstn",
6290
6450
  value: function dialOutPstn(phoneNumber) {
6291
- var _this38 = this;
6451
+ var _this39 = this;
6292
6452
  if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial out devices from being provisioned
6293
6453
 
6294
6454
  var correlationId = this.correlationId,
@@ -6305,10 +6465,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6305
6465
  }).catch(function (error) {
6306
6466
  var _error$error3;
6307
6467
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_OUT_FAILURE, {
6308
- correlation_id: _this38.correlationId,
6309
- dial_out_url: _this38.dialOutUrl,
6468
+ correlation_id: _this39.correlationId,
6469
+ dial_out_url: _this39.dialOutUrl,
6310
6470
  locus_id: locusUrl.split('/').pop(),
6311
- client_url: _this38.deviceUrl,
6471
+ client_url: _this39.deviceUrl,
6312
6472
  reason: (_error$error3 = error.error) === null || _error$error3 === void 0 ? void 0 : _error$error3.message,
6313
6473
  stack: error.stack
6314
6474
  });
@@ -6339,7 +6499,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6339
6499
  }, {
6340
6500
  key: "moveTo",
6341
6501
  value: function moveTo(resourceId) {
6342
- var _this39 = this;
6502
+ var _this40 = this;
6343
6503
  if (!resourceId) {
6344
6504
  throw new _parameter.default('Cannot move call without a resourceId.');
6345
6505
  }
@@ -6383,12 +6543,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6383
6543
  while (1) switch (_context21.prev = _context21.next) {
6384
6544
  case 0:
6385
6545
  _context21.prev = 0;
6386
- if (!(_this39.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6546
+ if (!(_this40.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6387
6547
  _context21.next = 4;
6388
6548
  break;
6389
6549
  }
6390
6550
  _context21.next = 4;
6391
- return _this39.releaseScreenShareFloor();
6551
+ return _this40.releaseScreenShareFloor();
6392
6552
  case 4:
6393
6553
  mediaSettings = {
6394
6554
  mediaDirection: {
@@ -6400,37 +6560,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6400
6560
  receiveShare: true
6401
6561
  }
6402
6562
  };
6403
- _this39.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6404
- _this39.mediaProperties.unsetRemoteMedia();
6563
+ _this40.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6564
+ _this40.mediaProperties.unsetRemoteMedia();
6405
6565
 
6406
6566
  // when a move to is intiated by the client , Locus delets the existing media node from the server as soon the device answers the meeting
6407
6567
  // once the device answers we close the old connection and create new media server connection with only share enabled
6408
- if (!_this39.statsAnalyzer) {
6568
+ if (!_this40.statsAnalyzer) {
6409
6569
  _context21.next = 10;
6410
6570
  break;
6411
6571
  }
6412
6572
  _context21.next = 10;
6413
- return _this39.statsAnalyzer.stopAnalyzer();
6573
+ return _this40.statsAnalyzer.stopAnalyzer();
6414
6574
  case 10:
6415
6575
  _context21.next = 12;
6416
- return _this39.closeRemoteStreams();
6576
+ return _this40.closeRemoteStreams();
6417
6577
  case 12:
6418
6578
  _context21.next = 14;
6419
- return _this39.closePeerConnections();
6579
+ return _this40.closePeerConnections();
6420
6580
  case 14:
6421
- _this39.cleanupLocalStreams();
6422
- _this39.unsetRemoteStreams();
6423
- _this39.unsetPeerConnections();
6424
- _this39.reconnectionManager.cleanUp();
6581
+ _this40.cleanupLocalStreams();
6582
+ _this40.unsetRemoteStreams();
6583
+ _this40.unsetPeerConnections();
6584
+ _this40.reconnectionManager.cleanUp();
6425
6585
  _context21.next = 20;
6426
- return _this39.addMedia({
6586
+ return _this40.addMedia({
6427
6587
  audioEnabled: false,
6428
6588
  videoEnabled: false,
6429
6589
  shareVideoEnabled: true
6430
6590
  });
6431
6591
  case 20:
6432
6592
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
6433
- _this39.isMoveToInProgress = false;
6593
+ _this40.isMoveToInProgress = false;
6434
6594
  _context21.next = 29;
6435
6595
  break;
6436
6596
  case 24:
@@ -6438,12 +6598,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6438
6598
  _context21.t0 = _context21["catch"](0);
6439
6599
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context21.t0);
6440
6600
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6441
- correlation_id: _this39.correlationId,
6442
- locus_id: _this39.locusUrl.split('/').pop(),
6601
+ correlation_id: _this40.correlationId,
6602
+ locus_id: _this40.locusUrl.split('/').pop(),
6443
6603
  reason: _context21.t0.message,
6444
6604
  stack: _context21.t0.stack
6445
6605
  });
6446
- _this39.isMoveToInProgress = false;
6606
+ _this40.isMoveToInProgress = false;
6447
6607
  case 29:
6448
6608
  case "end":
6449
6609
  return _context21.stop();
@@ -6459,17 +6619,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6459
6619
  resourceId: resourceId,
6460
6620
  moveToResource: true
6461
6621
  }).then(function () {
6462
- _this39.meetingFiniteStateMachine.join();
6622
+ _this40.meetingFiniteStateMachine.join();
6463
6623
  }).catch(function (error) {
6464
- _this39.meetingFiniteStateMachine.fail(error);
6624
+ _this40.meetingFiniteStateMachine.fail(error);
6465
6625
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6466
- correlation_id: _this39.correlationId,
6467
- locus_id: _this39.locusUrl.split('/').pop(),
6626
+ correlation_id: _this40.correlationId,
6627
+ locus_id: _this40.locusUrl.split('/').pop(),
6468
6628
  reason: error.message,
6469
6629
  stack: error.stack
6470
6630
  });
6471
6631
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
6472
- _this39.isMoveToInProgress = false;
6632
+ _this40.isMoveToInProgress = false;
6473
6633
  return _promise.default.reject(error);
6474
6634
  });
6475
6635
  }
@@ -6484,7 +6644,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6484
6644
  }, {
6485
6645
  key: "moveFrom",
6486
6646
  value: function moveFrom(resourceId) {
6487
- var _this40 = this;
6647
+ var _this41 = this;
6488
6648
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
6489
6649
  if (!resourceId) {
6490
6650
  throw new _parameter.default('Cannot move call without a resourceId.');
@@ -6499,19 +6659,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6499
6659
  }
6500
6660
  });
6501
6661
  return _util2.default.joinMeetingOptions(this).then(function () {
6502
- return _util2.default.leaveMeeting(_this40, {
6662
+ return _util2.default.leaveMeeting(_this41, {
6503
6663
  resourceId: resourceId,
6504
6664
  correlationId: oldCorrelationId,
6505
6665
  moveMeeting: true
6506
6666
  }).then(function () {
6507
- _this40.resourceId = '';
6667
+ _this41.resourceId = '';
6508
6668
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_SUCCESS);
6509
6669
  });
6510
6670
  }).catch(function (error) {
6511
- _this40.meetingFiniteStateMachine.fail(error);
6671
+ _this41.meetingFiniteStateMachine.fail(error);
6512
6672
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_FAILURE, {
6513
- correlation_id: _this40.correlationId,
6514
- locus_id: _this40.locusUrl.split('/').pop(),
6673
+ correlation_id: _this41.correlationId,
6674
+ locus_id: _this41.locusUrl.split('/').pop(),
6515
6675
  reason: error.message,
6516
6676
  stack: error.stack
6517
6677
  });
@@ -6627,9 +6787,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6627
6787
  }, {
6628
6788
  key: "forwardEvent",
6629
6789
  value: function forwardEvent(eventEmitter, eventTypeToForward, meetingEventType) {
6630
- var _this41 = this;
6790
+ var _this42 = this;
6631
6791
  eventEmitter.on(eventTypeToForward, function (data) {
6632
- return _triggerProxy.default.trigger(_this41, {
6792
+ return _triggerProxy.default.trigger(_this42, {
6633
6793
  file: 'meetings',
6634
6794
  function: 'addMedia'
6635
6795
  }, meetingEventType, data);
@@ -6790,6 +6950,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6790
6950
  networkQualityMonitor: this.networkQualityMonitor,
6791
6951
  isMultistream: this.isMultistream
6792
6952
  });
6953
+ this.shareCAEventSentStatus = {
6954
+ transmitStart: false,
6955
+ transmitStop: false,
6956
+ receiveStart: false,
6957
+ receiveStop: false
6958
+ };
6793
6959
  this.setupStatsAnalyzerEventHandlers();
6794
6960
  this.networkQualityMonitor.on(_internalMediaCore.NetworkQualityEventNames.NETWORK_QUALITY, this.sendNetworkQualityEvent.bind(this));
6795
6961
  }
@@ -6806,7 +6972,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6806
6972
  key: "waitForRemoteSDPAnswer",
6807
6973
  value: (function () {
6808
6974
  var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25() {
6809
- var _this42 = this;
6975
+ var _this43 = this;
6810
6976
  var LOG_HEADER, deferSDPAnswer;
6811
6977
  return _regenerator.default.wrap(function _callee25$(_context25) {
6812
6978
  while (1) switch (_context25.prev = _context25.next) {
@@ -6823,18 +6989,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6823
6989
  this.sdpResponseTimer = setTimeout(function () {
6824
6990
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " timeout! no REMOTE SDP ANSWER received within ").concat(_constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT / 1000, " seconds"));
6825
6991
  // @ts-ignore
6826
- _this42.webex.internal.newMetrics.submitClientEvent({
6992
+ _this43.webex.internal.newMetrics.submitClientEvent({
6827
6993
  name: 'client.media-engine.remote-sdp-received',
6828
6994
  payload: {
6829
6995
  canProceed: false,
6830
6996
  errors: [
6831
6997
  // @ts-ignore
6832
- _this42.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6998
+ _this43.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6833
6999
  clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
6834
7000
  })]
6835
7001
  },
6836
7002
  options: {
6837
- meetingId: _this42.id,
7003
+ meetingId: _this43.id,
6838
7004
  rawError: new Error('Timeout waiting for SDP answer')
6839
7005
  }
6840
7006
  });
@@ -7341,10 +7507,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7341
7507
  }, {
7342
7508
  key: "addMedia",
7343
7509
  value: function addMedia() {
7344
- var _this43 = this;
7510
+ var _this44 = this;
7345
7511
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7346
7512
  return this.addMediaInternal(function () {
7347
- return _this43.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7513
+ return _this44.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7348
7514
  }, undefined, false, options);
7349
7515
  }
7350
7516
 
@@ -7649,7 +7815,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7649
7815
  * @memberof Meeting
7650
7816
  */
7651
7817
  function enqueueMediaUpdate(mediaUpdateType) {
7652
- var _this44 = this;
7818
+ var _this45 = this;
7653
7819
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7654
7820
  var canUpdateMediaNow = this.canUpdateMedia();
7655
7821
  return new _promise.default(function (resolve, reject) {
@@ -7660,9 +7826,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7660
7826
  options: options
7661
7827
  };
7662
7828
  _loggerProxy.default.logger.log("Meeting:index#enqueueMediaUpdate --> enqueuing media update type=".concat(mediaUpdateType));
7663
- _this44.queuedMediaUpdates.push(queueItem);
7829
+ _this45.queuedMediaUpdates.push(queueItem);
7664
7830
  if (canUpdateMediaNow) {
7665
- _this44.processNextQueuedMediaUpdate();
7831
+ _this45.processNextQueuedMediaUpdate();
7666
7832
  }
7667
7833
  });
7668
7834
  }
@@ -7767,7 +7933,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7767
7933
  }, {
7768
7934
  key: "acknowledge",
7769
7935
  value: function acknowledge(type) {
7770
- var _this45 = this;
7936
+ var _this46 = this;
7771
7937
  if (!type) {
7772
7938
  return _promise.default.reject(new _parameter.default('Type must be set to acknowledge the meeting.'));
7773
7939
  }
@@ -7779,12 +7945,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7779
7945
  }).then(function (response) {
7780
7946
  return _promise.default.resolve(response);
7781
7947
  }).then(function (response) {
7782
- _this45.meetingFiniteStateMachine.ring(type);
7948
+ _this46.meetingFiniteStateMachine.ring(type);
7783
7949
  // @ts-ignore
7784
- _this45.webex.internal.newMetrics.submitClientEvent({
7950
+ _this46.webex.internal.newMetrics.submitClientEvent({
7785
7951
  name: 'client.alert.displayed',
7786
7952
  options: {
7787
- meetingId: _this45.id
7953
+ meetingId: _this46.id
7788
7954
  }
7789
7955
  });
7790
7956
  return _promise.default.resolve({
@@ -7809,12 +7975,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7809
7975
  }, {
7810
7976
  key: "decline",
7811
7977
  value: function decline(reason) {
7812
- var _this46 = this;
7978
+ var _this47 = this;
7813
7979
  return _util2.default.declineMeeting(this, reason).then(function (decline) {
7814
- _this46.meetingFiniteStateMachine.decline();
7980
+ _this47.meetingFiniteStateMachine.decline();
7815
7981
  return _promise.default.resolve(decline);
7816
7982
  }).catch(function (error) {
7817
- _this46.meetingFiniteStateMachine.fail(error);
7983
+ _this47.meetingFiniteStateMachine.fail(error);
7818
7984
  return _promise.default.reject(error);
7819
7985
  });
7820
7986
  }
@@ -7865,7 +8031,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7865
8031
  }, {
7866
8032
  key: "leave",
7867
8033
  value: function leave() {
7868
- var _this47 = this;
8034
+ var _this48 = this;
7869
8035
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7870
8036
  var leaveReason = options.reason || _constants.MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
7871
8037
 
@@ -7877,7 +8043,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7877
8043
  var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7878
8044
  return (
7879
8045
  // @ts-ignore
7880
- _this47.webex.internal.newMetrics.submitClientEvent({
8046
+ _this48.webex.internal.newMetrics.submitClientEvent({
7881
8047
  name: 'client.call.leave',
7882
8048
  payload: _objectSpread({
7883
8049
  trigger: 'user-interaction',
@@ -7885,7 +8051,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7885
8051
  leaveReason: options.clientEventLeaveReason
7886
8052
  }, payload),
7887
8053
  options: {
7888
- meetingId: _this47.id
8054
+ meetingId: _this48.id
7889
8055
  }
7890
8056
  })
7891
8057
  );
@@ -7894,24 +8060,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7894
8060
  return _util2.default.leaveMeeting(this, options).then(function (leave) {
7895
8061
  // CA team recommends submitting this *after* locus /leave
7896
8062
  submitLeaveMetric();
7897
- _this47.meetingFiniteStateMachine.leave();
7898
- _this47.clearMeetingData();
8063
+ _this48.meetingFiniteStateMachine.leave();
8064
+ _this48.clearMeetingData();
7899
8065
 
7900
8066
  // upload logs on leave irrespective of meeting delete
7901
- _triggerProxy.default.trigger(_this47, {
8067
+ _triggerProxy.default.trigger(_this48, {
7902
8068
  file: 'meeting/index',
7903
8069
  function: 'leave'
7904
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
8070
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
7905
8071
 
7906
8072
  // TODO: more testing before we remove this code, we are not sure the scenarios for destroy here
7907
- if (_this47.wirelessShare || _this47.guest) {
8073
+ if (_this48.wirelessShare || _this48.guest) {
7908
8074
  // If screen sharing clean the meeting object
7909
- _triggerProxy.default.trigger(_this47, {
8075
+ _triggerProxy.default.trigger(_this48, {
7910
8076
  file: 'meeting/index',
7911
8077
  function: 'leave'
7912
8078
  }, _constants.EVENTS.DESTROY_MEETING, {
7913
8079
  reason: options.reason,
7914
- meetingId: _this47.id
8080
+ meetingId: _this48.id
7915
8081
  });
7916
8082
  }
7917
8083
  _loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
@@ -7928,16 +8094,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7928
8094
  shownToUser: false
7929
8095
  }]
7930
8096
  });
7931
- _this47.meetingFiniteStateMachine.fail(error);
8097
+ _this48.meetingFiniteStateMachine.fail(error);
7932
8098
  _loggerProxy.default.logger.error('Meeting:index#leave --> Failed to leave ', error);
7933
8099
  // upload logs on leave irrespective of meeting delete
7934
- _triggerProxy.default.trigger(_this47, {
8100
+ _triggerProxy.default.trigger(_this48, {
7935
8101
  file: 'meeting/index',
7936
8102
  function: 'leave'
7937
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
8103
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
7938
8104
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_LEAVE_FAILURE, {
7939
- correlation_id: _this47.correlationId,
7940
- locus_id: _this47.locusUrl.split('/').pop(),
8105
+ correlation_id: _this48.correlationId,
8106
+ locus_id: _this48.locusUrl.split('/').pop(),
7941
8107
  reason: error.message,
7942
8108
  stack: error.stack,
7943
8109
  code: error.code
@@ -7957,7 +8123,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7957
8123
  }, {
7958
8124
  key: "startWhiteboardShare",
7959
8125
  value: function startWhiteboardShare(channelUrl, resourceToken) {
7960
- var _this48 = this;
8126
+ var _this49 = this;
7961
8127
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
7962
8128
  return element.name === 'whiteboard';
7963
8129
  });
@@ -7986,13 +8152,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7986
8152
  body.resourceToken = resourceToken;
7987
8153
  }
7988
8154
  return this.meetingRequest.changeMeetingFloor(body).then(function () {
7989
- _this48.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8155
+ _this49.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7990
8156
  return _promise.default.resolve();
7991
8157
  }).catch(function (error) {
7992
8158
  _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
7993
8159
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_START_WHITEBOARD_SHARE_FAILURE, {
7994
- correlation_id: _this48.correlationId,
7995
- locus_id: _this48.locusUrl.split('/').pop(),
8160
+ correlation_id: _this49.correlationId,
8161
+ locus_id: _this49.locusUrl.split('/').pop(),
7996
8162
  reason: error.message,
7997
8163
  stack: error.stack,
7998
8164
  board: {
@@ -8015,7 +8181,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8015
8181
  }, {
8016
8182
  key: "stopWhiteboardShare",
8017
8183
  value: function stopWhiteboardShare(channelUrl) {
8018
- var _this49 = this;
8184
+ var _this50 = this;
8019
8185
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
8020
8186
  return element.name === 'whiteboard';
8021
8187
  });
@@ -8038,8 +8204,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8038
8204
  }).catch(function (error) {
8039
8205
  _loggerProxy.default.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
8040
8206
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_STOP_WHITEBOARD_SHARE_FAILURE, {
8041
- correlation_id: _this49.correlationId,
8042
- locus_id: _this49.locusUrl.split('/').pop(),
8207
+ correlation_id: _this50.correlationId,
8208
+ locus_id: _this50.locusUrl.split('/').pop(),
8043
8209
  reason: error.message,
8044
8210
  stack: error.stack,
8045
8211
  board: {
@@ -8061,7 +8227,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8061
8227
  }, {
8062
8228
  key: "requestScreenShareFloor",
8063
8229
  value: function requestScreenShareFloor() {
8064
- var _this50 = this;
8230
+ var _this51 = this;
8065
8231
  if (!this.mediaProperties.hasLocalShareStream() || !this.mediaProperties.mediaDirection.sendShare) {
8066
8232
  _loggerProxy.default.logger.log("Meeting:index#requestScreenShareFloor --> NOT requesting floor, because we don't have the share stream anymore (shareStream=".concat(this.mediaProperties.shareVideoStream ? 'yes' : 'no', ", sendShare=").concat(this.mediaProperties.mediaDirection.sendShare, ")"));
8067
8233
  this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
@@ -8092,34 +8258,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8092
8258
  resourceUrl: this.resourceUrl,
8093
8259
  shareInstanceId: this.localShareInstanceId
8094
8260
  }).then(function () {
8095
- _this50.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8261
+ _this51.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8096
8262
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_SUCCESS, {
8097
- correlation_id: _this50.correlationId,
8098
- locus_id: _this50.locusUrl.split('/').pop()
8263
+ correlation_id: _this51.correlationId,
8264
+ locus_id: _this51.locusUrl.split('/').pop()
8099
8265
  });
8100
8266
  return _promise.default.resolve();
8101
8267
  }).catch(function (error) {
8102
8268
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
8103
8269
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_FAILURE, {
8104
- correlation_id: _this50.correlationId,
8105
- locus_id: _this50.locusUrl.split('/').pop(),
8270
+ correlation_id: _this51.correlationId,
8271
+ locus_id: _this51.locusUrl.split('/').pop(),
8106
8272
  reason: error.message,
8107
8273
  stack: error.stack
8108
8274
  });
8109
8275
 
8110
8276
  // @ts-ignore
8111
- _this50.webex.internal.newMetrics.submitClientEvent({
8277
+ _this51.webex.internal.newMetrics.submitClientEvent({
8112
8278
  name: 'client.share.floor-granted.local',
8113
8279
  payload: {
8114
8280
  mediaType: 'share',
8115
8281
  errors: _util2.default.getChangeMeetingFloorErrorPayload(error.message),
8116
- shareInstanceId: _this50.localShareInstanceId
8282
+ shareInstanceId: _this51.localShareInstanceId
8117
8283
  },
8118
8284
  options: {
8119
- meetingId: _this50.id
8285
+ meetingId: _this51.id
8120
8286
  }
8121
8287
  });
8122
- _this50.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8288
+ _this51.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8123
8289
  return _promise.default.reject(error);
8124
8290
  });
8125
8291
  }
@@ -8142,10 +8308,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8142
8308
  }, {
8143
8309
  key: "requestScreenShareFloorIfPending",
8144
8310
  value: function requestScreenShareFloorIfPending() {
8145
- var _this51 = this;
8311
+ var _this52 = this;
8146
8312
  if (this.floorGrantPending && this.state === _constants.MEETING_STATE.STATES.JOINED) {
8147
8313
  this.requestScreenShareFloor().then(function () {
8148
- _this51.floorGrantPending = false;
8314
+ _this52.floorGrantPending = false;
8149
8315
  });
8150
8316
  }
8151
8317
  }
@@ -8159,7 +8325,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8159
8325
  }, {
8160
8326
  key: "releaseScreenShareFloor",
8161
8327
  value: function releaseScreenShareFloor() {
8162
- var _this52 = this;
8328
+ var _this53 = this;
8163
8329
  var content = this.locusInfo.mediaShares.find(function (element) {
8164
8330
  return element.name === _constants.CONTENT;
8165
8331
  });
@@ -8194,8 +8360,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8194
8360
  }).catch(function (error) {
8195
8361
  _loggerProxy.default.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
8196
8362
  _metrics.default.sendBehavioralMetric(_constants2.default.STOP_FLOOR_REQUEST_FAILURE, {
8197
- correlation_id: _this52.correlationId,
8198
- locus_id: _this52.locusUrl.split('/').pop(),
8363
+ correlation_id: _this53.correlationId,
8364
+ locus_id: _this53.locusUrl.split('/').pop(),
8199
8365
  reason: error.message,
8200
8366
  stack: error.stack
8201
8367
  });
@@ -8375,7 +8541,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8375
8541
  }, {
8376
8542
  key: "changeVideoLayout",
8377
8543
  value: function changeVideoLayout(layoutType) {
8378
- var _this53 = this;
8544
+ var _this54 = this;
8379
8545
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
8380
8546
  var main = renderInfo.main,
8381
8547
  content = renderInfo.content;
@@ -8429,7 +8595,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8429
8595
  }
8430
8596
  this.lastVideoLayoutInfo = (0, _lodash.cloneDeep)(layoutInfo);
8431
8597
  this.locusInfo.once(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED, function (envelope) {
8432
- _triggerProxy.default.trigger(_this53, {
8598
+ _triggerProxy.default.trigger(_this54, {
8433
8599
  file: 'meeting/index',
8434
8600
  function: 'changeVideoLayout'
8435
8601
  }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_LAYOUT_UPDATE, {
@@ -8545,7 +8711,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8545
8711
  }, {
8546
8712
  key: "endMeetingForAll",
8547
8713
  value: function endMeetingForAll() {
8548
- var _this54 = this;
8714
+ var _this55 = this;
8549
8715
  // @ts-ignore
8550
8716
  this.webex.internal.newMetrics.submitClientEvent({
8551
8717
  name: 'client.call.leave',
@@ -8563,25 +8729,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8563
8729
  locus_id: this.locusId
8564
8730
  });
8565
8731
  return _util2.default.endMeetingForAll(this).then(function (end) {
8566
- _this54.meetingFiniteStateMachine.end();
8567
- _this54.clearMeetingData();
8732
+ _this55.meetingFiniteStateMachine.end();
8733
+ _this55.clearMeetingData();
8568
8734
  // upload logs on leave irrespective of meeting delete
8569
- _triggerProxy.default.trigger(_this54, {
8735
+ _triggerProxy.default.trigger(_this55, {
8570
8736
  file: 'meeting/index',
8571
8737
  function: 'endMeetingForAll'
8572
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this54);
8738
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8573
8739
  return end;
8574
8740
  }).catch(function (error) {
8575
- _this54.meetingFiniteStateMachine.fail(error);
8741
+ _this55.meetingFiniteStateMachine.fail(error);
8576
8742
  _loggerProxy.default.logger.error('Meeting:index#endMeetingForAll --> Failed to end meeting ', error);
8577
8743
  // upload logs on leave irrespective of meeting delete
8578
- _triggerProxy.default.trigger(_this54, {
8744
+ _triggerProxy.default.trigger(_this55, {
8579
8745
  file: 'meeting/index',
8580
8746
  function: 'endMeetingForAll'
8581
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this54);
8747
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8582
8748
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_FAILURE, {
8583
- correlation_id: _this54.correlationId,
8584
- locus_id: _this54.locusUrl.split('/').pop(),
8749
+ correlation_id: _this55.correlationId,
8750
+ locus_id: _this55.locusUrl.split('/').pop(),
8585
8751
  reason: error.message,
8586
8752
  stack: error.stack,
8587
8753
  code: error.code
@@ -8646,6 +8812,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8646
8812
  });
8647
8813
  }
8648
8814
 
8815
+ /**
8816
+ * Method to set post meeting data consent.
8817
+ *
8818
+ * @param {boolean} accept - whether consent accepted or declined
8819
+ * @returns {Promise}
8820
+ * @public
8821
+ * @memberof Meeting
8822
+ */
8823
+ }, {
8824
+ key: "setPostMeetingDataConsent",
8825
+ value: function setPostMeetingDataConsent(accept) {
8826
+ return this.meetingRequest.setPostMeetingDataConsent({
8827
+ postMeetingDataConsent: accept,
8828
+ locusUrl: this.locusUrl,
8829
+ deviceUrl: this.deviceUrl,
8830
+ selfId: this.members.selfId
8831
+ });
8832
+ }
8833
+
8649
8834
  /**
8650
8835
  * Throws if we don't have a media connection created
8651
8836
  *
@@ -8723,7 +8908,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8723
8908
  _this$mediaProperties43,
8724
8909
  _this$mediaProperties44,
8725
8910
  _this$mediaProperties45,
8726
- _this55 = this;
8911
+ _this56 = this;
8727
8912
  var LOG_HEADER = 'Meeting:index#updateTranscodedMediaConnection -->';
8728
8913
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " starting"));
8729
8914
  if (!this.canUpdateMedia()) {
@@ -8748,8 +8933,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8748
8933
  }).catch(function (error) {
8749
8934
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error: "), error);
8750
8935
  _metrics.default.sendBehavioralMetric(_constants2.default.UPDATE_MEDIA_FAILURE, {
8751
- correlation_id: _this55.correlationId,
8752
- locus_id: _this55.locusUrl.split('/').pop(),
8936
+ correlation_id: _this56.correlationId,
8937
+ locus_id: _this56.locusUrl.split('/').pop(),
8753
8938
  reason: error.message,
8754
8939
  stack: error.stack
8755
8940
  });
@@ -8971,10 +9156,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8971
9156
  return this.updateTranscodedMediaConnection();
8972
9157
  case 31:
8973
9158
  if (!floorRequestNeeded) {
8974
- _context40.next = 37;
9159
+ _context40.next = 39;
8975
9160
  break;
8976
9161
  }
8977
9162
  this.localShareInstanceId = _uuid.default.v4();
9163
+ this.shareCAEventSentStatus.transmitStart = false;
9164
+ this.shareCAEventSentStatus.transmitStop = false;
8978
9165
 
8979
9166
  // @ts-ignore
8980
9167
  this.webex.internal.newMetrics.submitClientEvent({
@@ -8995,9 +9182,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8995
9182
  // we're sending the http request to Locus to request the screen share floor
8996
9183
  // only after the SDP update, because that's how it's always been done for transcoded meetings
8997
9184
  // and also if sharing from the start, we need confluence to have been created
8998
- _context40.next = 37;
9185
+ _context40.next = 39;
8999
9186
  return this.enqueueScreenShareFloorRequest();
9000
- case 37:
9187
+ case 39:
9001
9188
  case "end":
9002
9189
  return _context40.stop();
9003
9190
  }