@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.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/media/MediaConnectionAwaiter.js +1 -0
- package/dist/media/MediaConnectionAwaiter.js.map +1 -1
- package/dist/media/properties.js +30 -16
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/index.js +25 -21
- package/dist/meeting/index.js.map +1 -1
- package/dist/webinar/index.js +1 -1
- package/package.json +5 -5
- package/src/media/MediaConnectionAwaiter.ts +2 -0
- package/src/media/properties.ts +34 -13
- package/src/meeting/index.ts +11 -0
- package/test/unit/spec/media/properties.ts +15 -0
package/dist/webinar/index.js
CHANGED
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.
|
|
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.
|
|
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.
|
|
75
|
-
"@webex/media-helpers": "3.7.0-next.
|
|
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.
|
|
95
|
+
"version": "3.7.0-next.65"
|
|
96
96
|
}
|
package/src/media/properties.ts
CHANGED
|
@@ -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
|
|
294
|
-
|
|
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
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
324
|
+
return {
|
|
325
|
+
connectionType: 'unknown',
|
|
326
|
+
selectedCandidatePairChanges: -1,
|
|
327
|
+
numTransports: 0,
|
|
328
|
+
};
|
|
329
|
+
}
|
|
309
330
|
}
|
|
310
331
|
}
|
package/src/meeting/index.ts
CHANGED
|
@@ -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'}]);
|