@webex/plugin-meetings 3.7.0-next.64 → 3.7.0-next.65

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.
@@ -458,7 +458,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
458
458
  }, _callee7);
459
459
  }))();
460
460
  },
461
- version: "3.7.0-next.64"
461
+ version: "3.7.0-next.65"
462
462
  });
463
463
  var _default = exports.default = Webinar;
464
464
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -43,7 +43,7 @@
43
43
  "@webex/eslint-config-legacy": "0.0.0",
44
44
  "@webex/jest-config-legacy": "0.0.0",
45
45
  "@webex/legacy-tools": "0.0.0",
46
- "@webex/plugin-meetings": "3.7.0-next.64",
46
+ "@webex/plugin-meetings": "3.7.0-next.65",
47
47
  "@webex/plugin-rooms": "3.7.0-next.25",
48
48
  "@webex/test-helper-chai": "3.7.0-next.18",
49
49
  "@webex/test-helper-mocha": "3.7.0-next.18",
@@ -63,7 +63,7 @@
63
63
  "dependencies": {
64
64
  "@webex/common": "3.7.0-next.18",
65
65
  "@webex/event-dictionary-ts": "^1.0.1688",
66
- "@webex/internal-media-core": "2.14.3",
66
+ "@webex/internal-media-core": "2.14.4",
67
67
  "@webex/internal-plugin-conversation": "3.7.0-next.25",
68
68
  "@webex/internal-plugin-device": "3.7.0-next.18",
69
69
  "@webex/internal-plugin-llm": "3.7.0-next.23",
@@ -71,8 +71,8 @@
71
71
  "@webex/internal-plugin-metrics": "3.7.0-next.18",
72
72
  "@webex/internal-plugin-support": "3.7.0-next.26",
73
73
  "@webex/internal-plugin-user": "3.7.0-next.18",
74
- "@webex/internal-plugin-voicea": "3.7.0-next.64",
75
- "@webex/media-helpers": "3.7.0-next.24",
74
+ "@webex/internal-plugin-voicea": "3.7.0-next.65",
75
+ "@webex/media-helpers": "3.7.0-next.25",
76
76
  "@webex/plugin-people": "3.7.0-next.23",
77
77
  "@webex/plugin-rooms": "3.7.0-next.25",
78
78
  "@webex/web-capabilities": "^1.4.0",
@@ -92,5 +92,5 @@
92
92
  "//": [
93
93
  "TODO: upgrade jwt-decode when moving to node 18"
94
94
  ],
95
- "version": "3.7.0-next.64"
95
+ "version": "3.7.0-next.65"
96
96
  }
@@ -111,6 +111,8 @@ export default class MediaConnectionAwaiter {
111
111
 
112
112
  this.clearCallbacks();
113
113
 
114
+ LoggerProxy.logger.warn('Media:MediaConnectionAwaiter#connectionStateChange --> Resolving');
115
+
114
116
  this.defer.resolve();
115
117
  }
116
118
 
@@ -287,24 +287,45 @@ export default class MediaProperties {
287
287
  selectedCandidatePairChanges: number;
288
288
  numTransports: number;
289
289
  }> {
290
- const allStatsReports = [];
291
-
292
290
  try {
293
- const statsResult = await this.webrtcMediaConnection.getStats();
294
- statsResult.forEach((report) => allStatsReports.push(report));
291
+ const allStatsReports = [];
292
+
293
+ await new Promise((resolve, reject) => {
294
+ const timeout = setTimeout(() => {
295
+ reject(new Error('timed out'));
296
+ }, 1000);
297
+
298
+ this.webrtcMediaConnection
299
+ .getStats()
300
+ .then((statsResult) => {
301
+ clearTimeout(timeout);
302
+ statsResult.forEach((report) => allStatsReports.push(report));
303
+ resolve(allStatsReports);
304
+ })
305
+ .catch((error) => {
306
+ clearTimeout(timeout);
307
+ reject(error);
308
+ });
309
+ });
310
+
311
+ const connectionType = this.getConnectionType(allStatsReports);
312
+ const {selectedCandidatePairChanges, numTransports} = this.getTransportInfo(allStatsReports);
313
+
314
+ return {
315
+ connectionType,
316
+ selectedCandidatePairChanges,
317
+ numTransports,
318
+ };
295
319
  } catch (error) {
296
320
  LoggerProxy.logger.warn(
297
321
  `Media:properties#getCurrentConnectionInfo --> getStats() failed: ${error}`
298
322
  );
299
- }
300
-
301
- const connectionType = this.getConnectionType(allStatsReports);
302
- const {selectedCandidatePairChanges, numTransports} = this.getTransportInfo(allStatsReports);
303
323
 
304
- return {
305
- connectionType,
306
- selectedCandidatePairChanges,
307
- numTransports,
308
- };
324
+ return {
325
+ connectionType: 'unknown',
326
+ selectedCandidatePairChanges: -1,
327
+ numTransports: 0,
328
+ };
329
+ }
309
330
  }
310
331
  }
@@ -3431,6 +3431,10 @@ export default class Meeting extends StatelessWebexPlugin {
3431
3431
  // The second on is if the audio is muted, we need to tell the statsAnalyzer when
3432
3432
  // the audio is muted or the user is not willing to send media
3433
3433
  this.locusInfo.on(LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE, (status) => {
3434
+ LoggerProxy.logger.info(
3435
+ 'Meeting:index#setUpLocusInfoSelfListener --> MEDIA_STATUS_CHANGE received, processing...'
3436
+ );
3437
+
3434
3438
  if (this.statsAnalyzer) {
3435
3439
  this.statsAnalyzer.updateMediaStatus({
3436
3440
  actual: status,
@@ -3444,6 +3448,10 @@ export default class Meeting extends StatelessWebexPlugin {
3444
3448
  receiveShare: this.mediaProperties.mediaDirection?.receiveShare,
3445
3449
  },
3446
3450
  });
3451
+ } else {
3452
+ LoggerProxy.logger.warn(
3453
+ 'Meeting:index#setUpLocusInfoSelfListener --> MEDIA_STATUS_CHANGE, statsAnalyzer is not available.'
3454
+ );
3447
3455
  }
3448
3456
  });
3449
3457
 
@@ -7542,6 +7550,9 @@ export default class Meeting extends StatelessWebexPlugin {
7542
7550
  throw error;
7543
7551
  }
7544
7552
  }
7553
+
7554
+ LoggerProxy.logger.info(`${LOG_HEADER} media connected, finalizing...`);
7555
+
7545
7556
  if (this.mediaProperties.hasLocalShareStream()) {
7546
7557
  await this.enqueueScreenShareFloorRequest();
7547
7558
  }
@@ -66,6 +66,21 @@ describe('MediaProperties', () => {
66
66
  assert.equal(numTransports, 0);
67
67
  });
68
68
 
69
+ it('handles time out in the case when getStats() is not resolving', async () => {
70
+ // Promise that never resolves
71
+ mockMC.getStats = new Promise(() => {});
72
+
73
+ const promise = mediaProperties.getCurrentConnectionInfo();
74
+
75
+ await clock.tickAsync(1000);
76
+
77
+ const {connectionType, selectedCandidatePairChanges, numTransports} = await promise;
78
+
79
+ assert.equal(connectionType, 'unknown');
80
+ assert.equal(selectedCandidatePairChanges, -1);
81
+ assert.equal(numTransports, 0);
82
+ });
83
+
69
84
  describe('selectedCandidatePairChanges and numTransports', () => {
70
85
  it('returns correct values when getStats() returns no transport stats at all', async () => {
71
86
  mockMC.getStats.resolves([{type: 'something', id: '1234'}]);