@webex/plugin-meetings 3.0.0-beta.317 → 3.0.0-beta.319

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.
@@ -209,7 +209,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
209
209
  sessionId: this.sessionId
210
210
  });
211
211
  },
212
- version: "3.0.0-beta.317"
212
+ version: "3.0.0-beta.319"
213
213
  });
214
214
  var _default = Breakout;
215
215
  exports.default = _default;
@@ -1041,7 +1041,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
1041
1041
  this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
1042
1042
  }
1043
1043
  },
1044
- version: "3.0.0-beta.317"
1044
+ version: "3.0.0-beta.319"
1045
1045
  });
1046
1046
  var _default = Breakouts;
1047
1047
  exports.default = _default;
@@ -359,7 +359,7 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
359
359
  throw error;
360
360
  });
361
361
  },
362
- version: "3.0.0-beta.317"
362
+ version: "3.0.0-beta.319"
363
363
  });
364
364
  var _default = SimultaneousInterpretation;
365
365
  exports.default = _default;
@@ -18,7 +18,7 @@ var SILanguage = _webexCore.WebexPlugin.extend({
18
18
  languageCode: 'number',
19
19
  languageName: 'string'
20
20
  },
21
- version: "3.0.0-beta.317"
21
+ version: "3.0.0-beta.319"
22
22
  });
23
23
  var _default = SILanguage;
24
24
  exports.default = _default;
@@ -497,6 +497,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
497
497
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sendSlotManager", new _sendSlotManager.default(_loggerProxy.default));
498
498
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "deferSDPAnswer", void 0);
499
499
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sdpResponseTimer", void 0);
500
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hasMediaConnectionConnectedAtLeastOnce", void 0);
500
501
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "processRelayEvent", function (e) {
501
502
  switch (e.data.relayType) {
502
503
  case _constants3.REACTION_RELAY_TYPES.REACTION:
@@ -765,36 +766,40 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
765
766
  });
766
767
  _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.CONNECTION_STATE_CHANGED, function (event) {
767
768
  var connectionFailed = function connectionFailed() {
768
- // we know the media connection failed and browser will not attempt to recover it any more
769
- // so reset the timer as it's not needed anymore, we want to reconnect immediately
770
- _this.reconnectionManager.resetReconnectionTimer();
771
- _this.reconnect({
772
- networkDisconnect: true
773
- });
774
- // @ts-ignore
775
- _this.webex.internal.newMetrics.submitClientEvent({
776
- name: 'client.ice.end',
777
- payload: {
778
- canProceed: false,
779
- icePhase: 'IN_MEETING',
780
- errors: [
781
- // @ts-ignore
782
- _this.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
783
- clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.ICE_FAILURE_CLIENT_CODE
784
- })]
785
- },
786
- options: {
787
- meetingId: _this.id
788
- }
789
- });
790
- _this.uploadLogs({
791
- file: 'peer-connection-manager/index',
792
- function: 'connectionFailed'
793
- });
794
769
  _metrics.default.sendBehavioralMetric(_constants2.default.CONNECTION_FAILURE, {
795
770
  correlation_id: _this.correlationId,
796
- locus_id: _this.locusId
771
+ locus_id: _this.locusId,
772
+ networkStatus: _this.networkStatus,
773
+ hasMediaConnectionConnectedAtLeastOnce: _this.hasMediaConnectionConnectedAtLeastOnce
797
774
  });
775
+ if (_this.hasMediaConnectionConnectedAtLeastOnce) {
776
+ // we know the media connection failed and browser will not attempt to recover it any more
777
+ // so reset the timer as it's not needed anymore, we want to reconnect immediately
778
+ _this.reconnectionManager.resetReconnectionTimer();
779
+ _this.reconnect({
780
+ networkDisconnect: true
781
+ });
782
+ // @ts-ignore
783
+ _this.webex.internal.newMetrics.submitClientEvent({
784
+ name: 'client.ice.end',
785
+ payload: {
786
+ canProceed: false,
787
+ icePhase: 'IN_MEETING',
788
+ errors: [
789
+ // @ts-ignore
790
+ _this.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
791
+ clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.ICE_FAILURE_CLIENT_CODE
792
+ })]
793
+ },
794
+ options: {
795
+ meetingId: _this.id
796
+ }
797
+ });
798
+ _this.uploadLogs({
799
+ file: 'peer-connection-manager/index',
800
+ function: 'connectionFailed'
801
+ });
802
+ }
798
803
  };
799
804
  _loggerProxy.default.logger.info("Meeting:index#setupMediaConnectionListeners --> correlationId=".concat(_this.correlationId, " connection state changed to ").concat(event.state));
800
805
 
@@ -830,6 +835,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
830
835
  _this.setNetworkStatus(_constants.NETWORK_STATUS.CONNECTED);
831
836
  _this.reconnectionManager.iceReconnected();
832
837
  _this.statsAnalyzer.startAnalyzer(_this.mediaProperties.webrtcMediaConnection);
838
+ _this.hasMediaConnectionConnectedAtLeastOnce = true;
833
839
  break;
834
840
  case _internalMediaCore.ConnectionState.Disconnected:
835
841
  _this.setNetworkStatus(_constants.NETWORK_STATUS.DISCONNECTED);
@@ -1850,6 +1856,15 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1850
1856
  * @memberof Meeting
1851
1857
  */
1852
1858
  _this.retriedWithTurnServer = false;
1859
+
1860
+ /**
1861
+ * Whether or not the media connection has ever successfully connected.
1862
+ * @instance
1863
+ * @type {boolean}
1864
+ * @private
1865
+ * @memberof Meeting
1866
+ */
1867
+ _this.hasMediaConnectionConnectedAtLeastOnce = false;
1853
1868
  return _this;
1854
1869
  }
1855
1870
 
@@ -6021,31 +6036,32 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6021
6036
  case 0:
6022
6037
  options = _args27.length > 0 && _args27[0] !== undefined ? _args27[0] : {};
6023
6038
  this.retriedWithTurnServer = false;
6039
+ this.hasMediaConnectionConnectedAtLeastOnce = false;
6024
6040
  LOG_HEADER = 'Meeting:index#addMedia -->';
6025
6041
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " called with: ").concat((0, _stringify.default)(options)));
6026
6042
  if (!(this.meetingState !== _constants.FULL_STATE.ACTIVE)) {
6027
- _context27.next = 6;
6043
+ _context27.next = 7;
6028
6044
  break;
6029
6045
  }
6030
6046
  throw new _webexErrors.MeetingNotActiveError();
6031
- case 6:
6047
+ case 7:
6032
6048
  if (!_util.default.isUserInLeftState(this.locusInfo)) {
6033
- _context27.next = 8;
6049
+ _context27.next = 9;
6034
6050
  break;
6035
6051
  }
6036
6052
  throw new _webexErrors.UserNotJoinedError();
6037
- case 8:
6053
+ case 9:
6038
6054
  localStreams = options.localStreams, _options$audioEnabled = options.audioEnabled, audioEnabled = _options$audioEnabled === void 0 ? true : _options$audioEnabled, _options$videoEnabled = options.videoEnabled, videoEnabled = _options$videoEnabled === void 0 ? true : _options$videoEnabled, _options$shareAudioEn = options.shareAudioEnabled, shareAudioEnabled = _options$shareAudioEn === void 0 ? true : _options$shareAudioEn, _options$shareVideoEn = options.shareVideoEnabled, shareVideoEnabled = _options$shareVideoEn === void 0 ? true : _options$shareVideoEn, remoteMediaManagerConfig = options.remoteMediaManagerConfig, bundlePolicy = options.bundlePolicy, allowMediaInLobby = options.allowMediaInLobby;
6039
6055
  this.allowMediaInLobby = options === null || options === void 0 ? void 0 : options.allowMediaInLobby;
6040
6056
 
6041
6057
  // If the user is unjoined or guest waiting in lobby dont allow the user to addMedia
6042
6058
  // @ts-ignore - isUserUnadmitted coming from SelfUtil
6043
6059
  if (!(this.isUserUnadmitted && !this.wirelessShare && !allowMediaInLobby)) {
6044
- _context27.next = 12;
6060
+ _context27.next = 13;
6045
6061
  break;
6046
6062
  }
6047
6063
  throw new _webexErrors.UserInLobbyError();
6048
- case 12:
6064
+ case 13:
6049
6065
  // @ts-ignore
6050
6066
  this.webex.internal.newMetrics.submitClientEvent({
6051
6067
  name: 'client.media.capabilities',
@@ -6100,32 +6116,32 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6100
6116
  });
6101
6117
  this.audio = (0, _muteState.createMuteState)(_constants.AUDIO, this, audioEnabled);
6102
6118
  this.video = (0, _muteState.createMuteState)(_constants.VIDEO, this, videoEnabled);
6103
- _context27.prev = 17;
6104
- _context27.next = 20;
6119
+ _context27.prev = 18;
6120
+ _context27.next = 21;
6105
6121
  return this.setUpLocalStreamReferences(localStreams);
6106
- case 20:
6122
+ case 21:
6107
6123
  this.setMercuryListener();
6108
6124
  this.createStatsAnalyzer();
6109
- _context27.next = 24;
6125
+ _context27.next = 25;
6110
6126
  return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, false);
6111
- case 24:
6112
- _context27.next = 26;
6127
+ case 25:
6128
+ _context27.next = 27;
6113
6129
  return Meeting.handleDeviceLogging();
6114
- case 26:
6130
+ case 27:
6115
6131
  if (!this.mediaProperties.hasLocalShareStream()) {
6116
- _context27.next = 29;
6132
+ _context27.next = 30;
6117
6133
  break;
6118
6134
  }
6119
- _context27.next = 29;
6135
+ _context27.next = 30;
6120
6136
  return this.enqueueScreenShareFloorRequest();
6121
- case 29:
6122
- _context27.next = 31;
6137
+ case 30:
6138
+ _context27.next = 32;
6123
6139
  return this.mediaProperties.getCurrentConnectionType();
6124
- case 31:
6140
+ case 32:
6125
6141
  connectionType = _context27.sent;
6126
- _context27.next = 34;
6142
+ _context27.next = 35;
6127
6143
  return this.webex.meetings.reachability.getReachabilityMetrics();
6128
- case 34:
6144
+ case 35:
6129
6145
  reachabilityStats = _context27.sent;
6130
6146
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread({
6131
6147
  correlation_id: this.correlationId,
@@ -6145,17 +6161,17 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6145
6161
 
6146
6162
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
6147
6163
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
6148
- _context27.next = 53;
6164
+ _context27.next = 54;
6149
6165
  break;
6150
- case 41:
6151
- _context27.prev = 41;
6152
- _context27.t0 = _context27["catch"](17);
6166
+ case 42:
6167
+ _context27.prev = 42;
6168
+ _context27.t0 = _context27["catch"](18);
6153
6169
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context27.t0);
6154
6170
 
6155
6171
  // @ts-ignore
6156
- _context27.next = 46;
6172
+ _context27.next = 47;
6157
6173
  return this.webex.meetings.reachability.getReachabilityMetrics();
6158
- case 46:
6174
+ case 47:
6159
6175
  reachabilityMetrics = _context27.sent;
6160
6176
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_FAILURE, _objectSpread({
6161
6177
  correlation_id: this.correlationId,
@@ -6171,9 +6187,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6171
6187
  connectionState: ((_this$mediaProperties27 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties27 === void 0 ? void 0 : (_this$mediaProperties28 = _this$mediaProperties27.multistreamConnection) === null || _this$mediaProperties28 === void 0 ? void 0 : (_this$mediaProperties29 = _this$mediaProperties28.pc) === null || _this$mediaProperties29 === void 0 ? void 0 : (_this$mediaProperties30 = _this$mediaProperties29.pc) === null || _this$mediaProperties30 === void 0 ? void 0 : _this$mediaProperties30.connectionState) || ((_this$mediaProperties31 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties31 === void 0 ? void 0 : (_this$mediaProperties32 = _this$mediaProperties31.mediaConnection) === null || _this$mediaProperties32 === void 0 ? void 0 : (_this$mediaProperties33 = _this$mediaProperties32.pc) === null || _this$mediaProperties33 === void 0 ? void 0 : _this$mediaProperties33.connectionState) || 'unknown',
6172
6188
  iceConnectionState: ((_this$mediaProperties34 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties34 === void 0 ? void 0 : (_this$mediaProperties35 = _this$mediaProperties34.multistreamConnection) === null || _this$mediaProperties35 === void 0 ? void 0 : (_this$mediaProperties36 = _this$mediaProperties35.pc) === null || _this$mediaProperties36 === void 0 ? void 0 : (_this$mediaProperties37 = _this$mediaProperties36.pc) === null || _this$mediaProperties37 === void 0 ? void 0 : _this$mediaProperties37.iceConnectionState) || ((_this$mediaProperties38 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties38 === void 0 ? void 0 : (_this$mediaProperties39 = _this$mediaProperties38.mediaConnection) === null || _this$mediaProperties39 === void 0 ? void 0 : (_this$mediaProperties40 = _this$mediaProperties39.pc) === null || _this$mediaProperties40 === void 0 ? void 0 : _this$mediaProperties40.iceConnectionState) || 'unknown'
6173
6189
  }, reachabilityMetrics));
6174
- _context27.next = 50;
6190
+ _context27.next = 51;
6175
6191
  return this.cleanUpOnAddMediaFailure();
6176
- case 50:
6192
+ case 51:
6177
6193
  // Upload logs on error while adding media
6178
6194
  _triggerProxy.default.trigger(this, {
6179
6195
  file: 'meeting/index',
@@ -6185,11 +6201,11 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6185
6201
  });
6186
6202
  }
6187
6203
  throw _context27.t0;
6188
- case 53:
6204
+ case 54:
6189
6205
  case "end":
6190
6206
  return _context27.stop();
6191
6207
  }
6192
- }, _callee27, this, [[17, 41]]);
6208
+ }, _callee27, this, [[18, 42]]);
6193
6209
  }));
6194
6210
  function addMedia() {
6195
6211
  return _addMedia.apply(this, arguments);