@webex/plugin-meetings 3.12.0-next.6 → 3.12.0-next.61
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/AGENTS.md +9 -0
- package/dist/aiEnableRequest/index.js +15 -2
- package/dist/aiEnableRequest/index.js.map +1 -1
- package/dist/breakouts/breakout.js +8 -3
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/index.js +26 -2
- package/dist/breakouts/index.js.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +6 -3
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +11 -1
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/index.js +38 -24
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/util.js +91 -0
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/hashTree/constants.js +10 -1
- package/dist/hashTree/constants.js.map +1 -1
- package/dist/hashTree/hashTreeParser.js +716 -370
- package/dist/hashTree/hashTreeParser.js.map +1 -1
- package/dist/hashTree/utils.js +22 -0
- package/dist/hashTree/utils.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/interceptors/locusRetry.js +23 -8
- package/dist/interceptors/locusRetry.js.map +1 -1
- package/dist/interpretation/index.js +10 -1
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +4 -1
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +289 -87
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/types.js +19 -0
- package/dist/locus-info/types.js.map +1 -1
- package/dist/media/index.js +3 -1
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +1 -0
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +3 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +907 -535
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +19 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +231 -78
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +6 -1
- package/dist/meetings/meetings.types.js.map +1 -1
- package/dist/meetings/request.js +39 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +79 -5
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +10 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js.map +1 -1
- package/dist/member/util.js +3 -0
- package/dist/member/util.js.map +1 -1
- package/dist/metrics/constants.js +4 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/codec/constants.js +63 -0
- package/dist/multistream/codec/constants.js.map +1 -0
- package/dist/multistream/mediaRequestManager.js +62 -15
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +9 -0
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/recording-controller/index.js +1 -3
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/types/config.d.ts +2 -0
- package/dist/types/constants.d.ts +2 -0
- package/dist/types/controls-options-manager/constants.d.ts +6 -1
- package/dist/types/controls-options-manager/index.d.ts +10 -0
- package/dist/types/hashTree/constants.d.ts +1 -0
- package/dist/types/hashTree/hashTreeParser.d.ts +92 -16
- package/dist/types/hashTree/utils.d.ts +11 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/interceptors/locusRetry.d.ts +4 -4
- package/dist/types/locus-info/index.d.ts +46 -6
- package/dist/types/locus-info/types.d.ts +21 -1
- package/dist/types/media/properties.d.ts +1 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
- package/dist/types/meeting/index.d.ts +87 -3
- package/dist/types/meeting/util.d.ts +8 -0
- package/dist/types/meetings/index.d.ts +30 -2
- package/dist/types/meetings/meetings.types.d.ts +15 -0
- package/dist/types/meetings/request.d.ts +14 -0
- package/dist/types/member/index.d.ts +1 -0
- package/dist/types/member/types.d.ts +1 -0
- package/dist/types/member/util.d.ts +1 -0
- package/dist/types/metrics/constants.d.ts +3 -0
- package/dist/types/multistream/codec/constants.d.ts +7 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +22 -5
- package/dist/types/reactions/reactions.type.d.ts +3 -0
- package/dist/webinar/index.js +361 -235
- package/dist/webinar/index.js.map +1 -1
- package/package.json +22 -22
- package/src/aiEnableRequest/index.ts +16 -0
- package/src/breakouts/breakout.ts +3 -1
- package/src/breakouts/index.ts +31 -0
- package/src/config.ts +2 -0
- package/src/constants.ts +5 -1
- package/src/controls-options-manager/constants.ts +14 -1
- package/src/controls-options-manager/index.ts +47 -24
- package/src/controls-options-manager/util.ts +81 -1
- package/src/hashTree/constants.ts +9 -0
- package/src/hashTree/hashTreeParser.ts +429 -183
- package/src/hashTree/utils.ts +17 -0
- package/src/index.ts +5 -0
- package/src/interceptors/locusRetry.ts +25 -4
- package/src/interpretation/index.ts +25 -8
- package/src/locus-info/controlsUtils.ts +3 -1
- package/src/locus-info/index.ts +291 -97
- package/src/locus-info/types.ts +25 -1
- package/src/media/index.ts +3 -0
- package/src/media/properties.ts +1 -0
- package/src/meeting/in-meeting-actions.ts +4 -0
- package/src/meeting/index.ts +388 -33
- package/src/meeting/util.ts +20 -2
- package/src/meetings/index.ts +134 -44
- package/src/meetings/meetings.types.ts +19 -0
- package/src/meetings/request.ts +43 -0
- package/src/meetings/util.ts +97 -1
- package/src/member/index.ts +10 -0
- package/src/member/types.ts +1 -0
- package/src/member/util.ts +3 -0
- package/src/metrics/constants.ts +3 -0
- package/src/multistream/codec/constants.ts +58 -0
- package/src/multistream/mediaRequestManager.ts +119 -28
- package/src/multistream/receiveSlot.ts +18 -0
- package/src/reactions/reactions.type.ts +3 -0
- package/src/recording-controller/index.ts +1 -2
- package/src/webinar/index.ts +162 -21
- package/test/unit/spec/aiEnableRequest/index.ts +86 -0
- package/test/unit/spec/breakouts/breakout.ts +9 -3
- package/test/unit/spec/breakouts/index.ts +49 -0
- package/test/unit/spec/controls-options-manager/index.js +140 -29
- package/test/unit/spec/controls-options-manager/util.js +165 -0
- package/test/unit/spec/hashTree/hashTreeParser.ts +1508 -149
- package/test/unit/spec/hashTree/utils.ts +88 -1
- package/test/unit/spec/interceptors/locusRetry.ts +205 -4
- package/test/unit/spec/interpretation/index.ts +26 -4
- package/test/unit/spec/locus-info/controlsUtils.js +172 -57
- package/test/unit/spec/locus-info/index.js +475 -81
- package/test/unit/spec/media/index.ts +31 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
- package/test/unit/spec/meeting/index.js +1131 -49
- package/test/unit/spec/meeting/muteState.js +3 -0
- package/test/unit/spec/meeting/utils.js +33 -0
- package/test/unit/spec/meetings/index.js +360 -10
- package/test/unit/spec/meetings/request.js +141 -0
- package/test/unit/spec/meetings/utils.js +189 -0
- package/test/unit/spec/member/index.js +7 -0
- package/test/unit/spec/member/util.js +24 -0
- package/test/unit/spec/multistream/mediaRequestManager.ts +501 -37
- package/test/unit/spec/recording-controller/index.js +9 -8
- package/test/unit/spec/webinar/index.ts +141 -16
package/dist/meeting/index.js
CHANGED
|
@@ -496,6 +496,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
496
496
|
(0, _defineProperty3.default)(_this, "floorGrantPending", void 0);
|
|
497
497
|
(0, _defineProperty3.default)(_this, "hasJoinedOnce", void 0);
|
|
498
498
|
(0, _defineProperty3.default)(_this, "hasWebsocketConnected", void 0);
|
|
499
|
+
(0, _defineProperty3.default)(_this, "mercuryOnlineHandler", void 0);
|
|
500
|
+
(0, _defineProperty3.default)(_this, "mercuryOfflineHandler", void 0);
|
|
499
501
|
(0, _defineProperty3.default)(_this, "inMeetingActions", void 0);
|
|
500
502
|
(0, _defineProperty3.default)(_this, "isLocalShareLive", void 0);
|
|
501
503
|
(0, _defineProperty3.default)(_this, "isRoapInProgress", void 0);
|
|
@@ -641,6 +643,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
641
643
|
* @returns {void}
|
|
642
644
|
*/
|
|
643
645
|
(0, _defineProperty3.default)(_this, "processRelayEvent", function (e) {
|
|
646
|
+
if (!_this.isRelayEventRouteValid(e)) {
|
|
647
|
+
return;
|
|
648
|
+
}
|
|
644
649
|
switch (e.data.relayType) {
|
|
645
650
|
case _constants3.REACTION_RELAY_TYPES.REACTION:
|
|
646
651
|
if (
|
|
@@ -679,8 +684,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
679
684
|
* @returns {null}
|
|
680
685
|
*/
|
|
681
686
|
(0, _defineProperty3.default)(_this, "handleLLMOnline", function () {
|
|
682
|
-
|
|
683
|
-
_this.webex.internal.llm.off('online', _this.handleLLMOnline);
|
|
687
|
+
_this.restoreLLMSubscriptionsIfNeeded();
|
|
684
688
|
_triggerProxy.default.trigger(_this, {
|
|
685
689
|
file: 'meeting/index',
|
|
686
690
|
function: 'handleLLMOnline'
|
|
@@ -688,6 +692,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
688
692
|
});
|
|
689
693
|
/**
|
|
690
694
|
* Disconnects and cleans up the default LLM session listeners/timers.
|
|
695
|
+
*
|
|
696
|
+
* Ownership-aware: only calls `disconnectLLM` when this meeting is the
|
|
697
|
+
* current owner of the default LLM session (or when no owner is recorded).
|
|
698
|
+
* Event listeners belonging to this meeting instance are always detached
|
|
699
|
+
* so they do not receive another meeting's relay events.
|
|
700
|
+
*
|
|
691
701
|
* @param {Object} options
|
|
692
702
|
* @param {boolean} [options.removeOnlineListener=true] removes the one-time online listener
|
|
693
703
|
* @param {boolean} [options.throwOnError=true] rethrows disconnect errors when true
|
|
@@ -699,13 +709,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
699
709
|
removeOnlineListener,
|
|
700
710
|
_ref3$throwOnError,
|
|
701
711
|
throwOnError,
|
|
712
|
+
currentOwner,
|
|
713
|
+
isOwner,
|
|
714
|
+
_this$webex$internal$,
|
|
715
|
+
_this$webex$internal$2,
|
|
702
716
|
_args = arguments,
|
|
703
717
|
_t;
|
|
704
718
|
return _regenerator.default.wrap(function (_context) {
|
|
705
719
|
while (1) switch (_context.prev = _context.next) {
|
|
706
720
|
case 0:
|
|
707
721
|
_ref3 = _args.length > 0 && _args[0] !== undefined ? _args[0] : {}, _ref3$removeOnlineLis = _ref3.removeOnlineListener, removeOnlineListener = _ref3$removeOnlineLis === void 0 ? true : _ref3$removeOnlineLis, _ref3$throwOnError = _ref3.throwOnError, throwOnError = _ref3$throwOnError === void 0 ? true : _ref3$throwOnError;
|
|
722
|
+
// @ts-ignore - Fix type
|
|
723
|
+
currentOwner = _this.webex.internal.llm.getOwnerMeetingId();
|
|
724
|
+
isOwner = !currentOwner || currentOwner === _this.id;
|
|
708
725
|
_context.prev = 1;
|
|
726
|
+
if (!isOwner) {
|
|
727
|
+
_context.next = 3;
|
|
728
|
+
break;
|
|
729
|
+
}
|
|
709
730
|
_context.next = 2;
|
|
710
731
|
return _this.webex.internal.llm.disconnectLLM({
|
|
711
732
|
code: 3050,
|
|
@@ -715,31 +736,43 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
715
736
|
_context.next = 4;
|
|
716
737
|
break;
|
|
717
738
|
case 3:
|
|
718
|
-
|
|
739
|
+
_loggerProxy.default.logger.info("Meeting:index#cleanupLLMConneciton --> skipping disconnect; LLM owned by meeting ".concat(currentOwner, ", not ").concat(_this.id));
|
|
740
|
+
case 4:
|
|
741
|
+
_context.next = 6;
|
|
742
|
+
break;
|
|
743
|
+
case 5:
|
|
744
|
+
_context.prev = 5;
|
|
719
745
|
_t = _context["catch"](1);
|
|
720
746
|
_loggerProxy.default.logger.error('Meeting:index#cleanupLLMConneciton --> Failed to disconnect default LLM session', _t);
|
|
721
747
|
if (!throwOnError) {
|
|
722
|
-
_context.next =
|
|
748
|
+
_context.next = 6;
|
|
723
749
|
break;
|
|
724
750
|
}
|
|
725
751
|
throw _t;
|
|
726
|
-
case
|
|
727
|
-
_context.prev =
|
|
752
|
+
case 6:
|
|
753
|
+
_context.prev = 6;
|
|
728
754
|
if (removeOnlineListener) {
|
|
729
755
|
// @ts-ignore - Fix type
|
|
730
756
|
_this.webex.internal.llm.off('online', _this.handleLLMOnline);
|
|
731
757
|
}
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
//
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
758
|
+
_this.stopListeningForLLMEvents();
|
|
759
|
+
|
|
760
|
+
// If this meeting owned (or could have owned) the default LLM session,
|
|
761
|
+
// always release the owner tag here regardless of whether disconnectLLM
|
|
762
|
+
// resolved. `disconnectLLM` only clears the owner on its success path,
|
|
763
|
+
// so a failed disconnect would otherwise leave a stale owner pointing
|
|
764
|
+
// at a torn-down meeting and permanently block other meetings'
|
|
765
|
+
// `updateLLMConnection` calls via the ownership guard.
|
|
766
|
+
if (isOwner) {
|
|
767
|
+
// @ts-ignore - Fix type
|
|
768
|
+
(_this$webex$internal$ = (_this$webex$internal$2 = _this.webex.internal.llm).setOwnerMeetingId) === null || _this$webex$internal$ === void 0 ? void 0 : _this$webex$internal$.call(_this$webex$internal$2, undefined);
|
|
769
|
+
}
|
|
770
|
+
return _context.finish(6);
|
|
771
|
+
case 7:
|
|
739
772
|
case "end":
|
|
740
773
|
return _context.stop();
|
|
741
774
|
}
|
|
742
|
-
}, _callee, null, [[1,
|
|
775
|
+
}, _callee, null, [[1, 5, 6, 7]]);
|
|
743
776
|
})));
|
|
744
777
|
/**
|
|
745
778
|
* Handles ROAP_FAILURE event from the webrtc media connection
|
|
@@ -1322,6 +1355,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
1322
1355
|
}
|
|
1323
1356
|
}
|
|
1324
1357
|
});
|
|
1358
|
+
_this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.STATS_UPDATE, function (data) {
|
|
1359
|
+
// Extract srtpCipher from transport stats
|
|
1360
|
+
var srtpCipher;
|
|
1361
|
+
var _iterator = _createForOfIteratorHelper(data.stats.values()),
|
|
1362
|
+
_step;
|
|
1363
|
+
try {
|
|
1364
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
1365
|
+
var stats = _step.value;
|
|
1366
|
+
if (stats.type === 'transport' && stats.srtpCipher) {
|
|
1367
|
+
srtpCipher = stats.srtpCipher;
|
|
1368
|
+
break;
|
|
1369
|
+
}
|
|
1370
|
+
}
|
|
1371
|
+
|
|
1372
|
+
// Only emit event if srtpCipher has changed
|
|
1373
|
+
} catch (err) {
|
|
1374
|
+
_iterator.e(err);
|
|
1375
|
+
} finally {
|
|
1376
|
+
_iterator.f();
|
|
1377
|
+
}
|
|
1378
|
+
if (srtpCipher && srtpCipher !== _this.mediaProperties.srtpCipher) {
|
|
1379
|
+
_loggerProxy.default.logger.info("Meeting:index#setupStatsAnalyzerEventHandlers --> SRTP cipher changed from ".concat(_this.mediaProperties.srtpCipher, " to ").concat(srtpCipher));
|
|
1380
|
+
_this.mediaProperties.srtpCipher = srtpCipher;
|
|
1381
|
+
_triggerProxy.default.trigger(_this, {
|
|
1382
|
+
file: 'meeting/index',
|
|
1383
|
+
function: 'setupStatsAnalyzerEventHandlers'
|
|
1384
|
+
}, _constants.EVENT_TRIGGERS.MEETING_SRTP_CIPHER_UPDATED, {
|
|
1385
|
+
srtpCipher: srtpCipher
|
|
1386
|
+
});
|
|
1387
|
+
}
|
|
1388
|
+
});
|
|
1325
1389
|
});
|
|
1326
1390
|
/**
|
|
1327
1391
|
* media failed, so collect a stats report from webrtc using the wcme connection to grab the rtc stats report
|
|
@@ -1540,6 +1604,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
1540
1604
|
* @memberof Meeting
|
|
1541
1605
|
*/
|
|
1542
1606
|
(0, _defineProperty3.default)(_this, "clearMeetingData", /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee5() {
|
|
1607
|
+
var currentOwner, isOwner;
|
|
1543
1608
|
return _regenerator.default.wrap(function (_context5) {
|
|
1544
1609
|
while (1) switch (_context5.prev = _context5.next) {
|
|
1545
1610
|
case 0:
|
|
@@ -1550,10 +1615,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
1550
1615
|
_this.shareStatus = _constants.SHARE_STATUS.NO_SHARE;
|
|
1551
1616
|
}
|
|
1552
1617
|
_this.queuedMediaUpdates = [];
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1618
|
+
|
|
1619
|
+
// Listener teardown (transcription, annotation, llm/mercury) runs in
|
|
1620
|
+
// stopListeningForMeetingEvents() before /leave and /end so events
|
|
1621
|
+
// received mid-teardown do not trigger Locus syncs. Calling it here
|
|
1622
|
+
// again would double-emit MEETING_STOPPED_RECEIVING_TRANSCRIPTION
|
|
1623
|
+
// because stopTranscription() always fires its trigger.
|
|
1624
|
+
//
|
|
1625
|
+
// Ownership-aware token clear: only clear the shared LLM data channel
|
|
1626
|
+
// tokens when this meeting owns (or no meeting owns) the default LLM
|
|
1627
|
+
// session. Otherwise we would wipe tokens still in use by another
|
|
1628
|
+
// meeting's active LLM connection.
|
|
1629
|
+
// @ts-ignore - Fix type
|
|
1630
|
+
currentOwner = _this.webex.internal.llm.getOwnerMeetingId();
|
|
1631
|
+
isOwner = !currentOwner || currentOwner === _this.id;
|
|
1632
|
+
if (isOwner) {
|
|
1633
|
+
_this.clearDataChannelToken();
|
|
1634
|
+
} else {
|
|
1635
|
+
_loggerProxy.default.logger.info("Meeting:index#clearMeetingData --> skipping clearDataChannelToken; LLM owned by meeting ".concat(currentOwner, ", not ").concat(_this.id));
|
|
1636
|
+
}
|
|
1557
1637
|
_context5.next = 1;
|
|
1558
1638
|
return _this.cleanupLLMConneciton({
|
|
1559
1639
|
throwOnError: false
|
|
@@ -1728,7 +1808,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
1728
1808
|
});
|
|
1729
1809
|
|
|
1730
1810
|
// @ts-ignore
|
|
1731
|
-
_this.aiEnableRequest = new _aiEnableRequest.default({
|
|
1811
|
+
_this.aiEnableRequest = new _aiEnableRequest.default({
|
|
1812
|
+
locusUrl: _this.locusUrl
|
|
1813
|
+
}, {
|
|
1732
1814
|
parent: _this.webex
|
|
1733
1815
|
});
|
|
1734
1816
|
|
|
@@ -1767,6 +1849,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
1767
1849
|
var _this$members$findMem2;
|
|
1768
1850
|
return (_this$members$findMem2 = _this.members.findMemberByCsi(csi)) === null || _this$members$findMem2 === void 0 ? void 0 : _this$members$findMem2.id;
|
|
1769
1851
|
});
|
|
1852
|
+
|
|
1770
1853
|
/**
|
|
1771
1854
|
* Object containing helper classes for managing media requests for audio/video/screenshare (for multistream media connections)
|
|
1772
1855
|
* All multistream media requests sent out for this meeting have to go through them.
|
|
@@ -1778,7 +1861,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
1778
1861
|
return;
|
|
1779
1862
|
}
|
|
1780
1863
|
_this.mediaProperties.webrtcMediaConnection.requestMedia(_internalMediaCore.MediaType.AudioMain, mediaRequests);
|
|
1781
|
-
}, {
|
|
1864
|
+
}, _this.getIngressPayloadTypeCallback.bind(_this), {
|
|
1782
1865
|
// @ts-ignore - config coming from registerPlugin
|
|
1783
1866
|
degradationPreferences: _this.config.degradationPreferences,
|
|
1784
1867
|
kind: 'audio',
|
|
@@ -1790,7 +1873,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
1790
1873
|
return;
|
|
1791
1874
|
}
|
|
1792
1875
|
_this.mediaProperties.webrtcMediaConnection.requestMedia(_internalMediaCore.MediaType.VideoMain, mediaRequests);
|
|
1793
|
-
}, {
|
|
1876
|
+
}, _this.getIngressPayloadTypeCallback.bind(_this), {
|
|
1794
1877
|
// @ts-ignore - config coming from registerPlugin
|
|
1795
1878
|
degradationPreferences: _this.config.degradationPreferences,
|
|
1796
1879
|
kind: 'video',
|
|
@@ -1802,7 +1885,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
1802
1885
|
return;
|
|
1803
1886
|
}
|
|
1804
1887
|
_this.mediaProperties.webrtcMediaConnection.requestMedia(_internalMediaCore.MediaType.AudioSlides, mediaRequests);
|
|
1805
|
-
}, {
|
|
1888
|
+
}, _this.getIngressPayloadTypeCallback.bind(_this), {
|
|
1806
1889
|
// @ts-ignore - config coming from registerPlugin
|
|
1807
1890
|
degradationPreferences: _this.config.degradationPreferences,
|
|
1808
1891
|
kind: 'audio',
|
|
@@ -1814,11 +1897,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
1814
1897
|
return;
|
|
1815
1898
|
}
|
|
1816
1899
|
_this.mediaProperties.webrtcMediaConnection.requestMedia(_internalMediaCore.MediaType.VideoSlides, mediaRequests);
|
|
1817
|
-
}, {
|
|
1900
|
+
}, _this.getIngressPayloadTypeCallback.bind(_this), {
|
|
1818
1901
|
// @ts-ignore - config coming from registerPlugin
|
|
1819
1902
|
degradationPreferences: _this.config.degradationPreferences,
|
|
1820
1903
|
kind: 'video',
|
|
1821
|
-
trimRequestsToNumOfSources: false
|
|
1904
|
+
trimRequestsToNumOfSources: false,
|
|
1905
|
+
// @ts-ignore - config coming from registerPlugin
|
|
1906
|
+
enableAv1: _this.config.enableAv1SlidesSupport
|
|
1822
1907
|
})
|
|
1823
1908
|
};
|
|
1824
1909
|
/**
|
|
@@ -2487,14 +2572,36 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
2487
2572
|
}
|
|
2488
2573
|
|
|
2489
2574
|
/**
|
|
2490
|
-
*
|
|
2491
|
-
*
|
|
2492
|
-
*
|
|
2493
|
-
* @
|
|
2494
|
-
* @
|
|
2575
|
+
* Get the ingress payload type for a given media type and codec mime type
|
|
2576
|
+
* @param {MediaType} mediaType - The media type
|
|
2577
|
+
* @param {MediaCodecMimeType} codecMimeType - The codec mime type
|
|
2578
|
+
* @returns {number | undefined} - The ingress payload type
|
|
2579
|
+
* @private
|
|
2580
|
+
* @memberof Meeting
|
|
2495
2581
|
*/
|
|
2496
2582
|
(0, _inherits2.default)(Meeting, _StatelessWebexPlugin);
|
|
2497
2583
|
return (0, _createClass2.default)(Meeting, [{
|
|
2584
|
+
key: "getIngressPayloadTypeCallback",
|
|
2585
|
+
value: function getIngressPayloadTypeCallback(mediaType, codecMimeType) {
|
|
2586
|
+
if (this.isMultistream) {
|
|
2587
|
+
try {
|
|
2588
|
+
return this.mediaProperties.webrtcMediaConnection.getIngressPayloadType(mediaType, codecMimeType);
|
|
2589
|
+
} catch (error) {
|
|
2590
|
+
_loggerProxy.default.logger.info("Meeting:index#mediaRequestManager --> failed to get ingress payload type for mediaType=".concat(mediaType, ", codecMimeType=").concat(codecMimeType), error);
|
|
2591
|
+
return undefined;
|
|
2592
|
+
}
|
|
2593
|
+
}
|
|
2594
|
+
return undefined;
|
|
2595
|
+
}
|
|
2596
|
+
|
|
2597
|
+
/**
|
|
2598
|
+
* Temporary func to return webex object,
|
|
2599
|
+
* in order to access internal plugin metrics
|
|
2600
|
+
* in the utils file.
|
|
2601
|
+
* @internal
|
|
2602
|
+
* @returns {object} webex object
|
|
2603
|
+
*/
|
|
2604
|
+
}, {
|
|
2498
2605
|
key: "getWebexObject",
|
|
2499
2606
|
value: function getWebexObject() {
|
|
2500
2607
|
// @ts-ignore
|
|
@@ -3526,7 +3633,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
3526
3633
|
this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED, function (_ref10) {
|
|
3527
3634
|
var state = _ref10.state,
|
|
3528
3635
|
modifiedBy = _ref10.modifiedBy,
|
|
3529
|
-
lastModified = _ref10.lastModified
|
|
3636
|
+
lastModified = _ref10.lastModified,
|
|
3637
|
+
modifiedByServiceAppName = _ref10.modifiedByServiceAppName,
|
|
3638
|
+
modifiedByServiceAppId = _ref10.modifiedByServiceAppId;
|
|
3530
3639
|
var event;
|
|
3531
3640
|
switch (state) {
|
|
3532
3641
|
case _constants.RECORDING_STATE.RECORDING:
|
|
@@ -3550,7 +3659,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
3550
3659
|
_this12.recording = {
|
|
3551
3660
|
state: state === _constants.RECORDING_STATE.RESUMED ? _constants.RECORDING_STATE.RECORDING : state,
|
|
3552
3661
|
modifiedBy: modifiedBy,
|
|
3553
|
-
lastModified: lastModified
|
|
3662
|
+
lastModified: lastModified,
|
|
3663
|
+
modifiedByServiceAppName: modifiedByServiceAppName,
|
|
3664
|
+
modifiedByServiceAppId: modifiedByServiceAppId
|
|
3554
3665
|
};
|
|
3555
3666
|
_triggerProxy.default.trigger(_this12, {
|
|
3556
3667
|
file: 'meeting/index',
|
|
@@ -4087,6 +4198,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
4087
4198
|
_this14.breakouts.locusUrlUpdate(url);
|
|
4088
4199
|
_this14.simultaneousInterpretation.locusUrlUpdate(url);
|
|
4089
4200
|
_this14.annotation.locusUrlUpdate(url);
|
|
4201
|
+
_this14.aiEnableRequest.locusUrlUpdate(url);
|
|
4090
4202
|
_this14.locusUrl = url;
|
|
4091
4203
|
_this14.locusId = (_this14$locusUrl = _this14.locusUrl) === null || _this14$locusUrl === void 0 ? void 0 : _this14$locusUrl.split('/').pop();
|
|
4092
4204
|
_this14.recordingController.setLocusUrl(_this14.locusUrl);
|
|
@@ -4325,44 +4437,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
4325
4437
|
});
|
|
4326
4438
|
_this19.updateLLMConnection();
|
|
4327
4439
|
});
|
|
4328
|
-
this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,
|
|
4329
|
-
var
|
|
4330
|
-
|
|
4331
|
-
|
|
4332
|
-
|
|
4333
|
-
|
|
4334
|
-
|
|
4335
|
-
|
|
4336
|
-
|
|
4337
|
-
|
|
4338
|
-
function: 'setUpLocusInfoSelfListener'
|
|
4339
|
-
}, _constants.EVENT_TRIGGERS.MEETING_SELF_GUEST_ADMITTED, {
|
|
4340
|
-
payload: payload
|
|
4341
|
-
});
|
|
4440
|
+
this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, function (payload) {
|
|
4441
|
+
var _this19$rtcMetrics;
|
|
4442
|
+
_this19.stopKeepAlive();
|
|
4443
|
+
if (payload) {
|
|
4444
|
+
_triggerProxy.default.trigger(_this19, {
|
|
4445
|
+
file: 'meeting/index',
|
|
4446
|
+
function: 'setUpLocusInfoSelfListener'
|
|
4447
|
+
}, _constants.EVENT_TRIGGERS.MEETING_SELF_GUEST_ADMITTED, {
|
|
4448
|
+
payload: payload
|
|
4449
|
+
});
|
|
4342
4450
|
|
|
4343
|
-
|
|
4344
|
-
|
|
4345
|
-
|
|
4346
|
-
|
|
4347
|
-
|
|
4348
|
-
}
|
|
4349
|
-
});
|
|
4350
|
-
_metrics.default.sendBehavioralMetric(_constants2.default.GUEST_EXITED_LOBBY, {
|
|
4351
|
-
correlation_id: _this19.correlationId
|
|
4352
|
-
});
|
|
4353
|
-
}
|
|
4354
|
-
(_this19$rtcMetrics = _this19.rtcMetrics) === null || _this19$rtcMetrics === void 0 ? void 0 : _this19$rtcMetrics.sendNextMetrics();
|
|
4355
|
-
_this19.updateLLMConnection();
|
|
4356
|
-
case 1:
|
|
4357
|
-
case "end":
|
|
4358
|
-
return _context1.stop();
|
|
4451
|
+
// @ts-ignore
|
|
4452
|
+
_this19.webex.internal.newMetrics.submitClientEvent({
|
|
4453
|
+
name: 'client.lobby.exited',
|
|
4454
|
+
options: {
|
|
4455
|
+
meetingId: _this19.id
|
|
4359
4456
|
}
|
|
4360
|
-
}
|
|
4361
|
-
|
|
4362
|
-
|
|
4363
|
-
|
|
4364
|
-
}
|
|
4365
|
-
|
|
4457
|
+
});
|
|
4458
|
+
_metrics.default.sendBehavioralMetric(_constants2.default.GUEST_EXITED_LOBBY, {
|
|
4459
|
+
correlation_id: _this19.correlationId
|
|
4460
|
+
});
|
|
4461
|
+
}
|
|
4462
|
+
(_this19$rtcMetrics = _this19.rtcMetrics) === null || _this19$rtcMetrics === void 0 ? void 0 : _this19$rtcMetrics.sendNextMetrics();
|
|
4463
|
+
_this19.ensureDefaultDatachannelTokenAfterAdmit().catch(function (error) {
|
|
4464
|
+
_loggerProxy.default.logger.warn("Meeting:index#setUpLocusInfoSelfListener --> failed post-admit token prefetch flow: ".concat((error === null || error === void 0 ? void 0 : error.message) || String(error)));
|
|
4465
|
+
});
|
|
4466
|
+
_this19.updateLLMConnection();
|
|
4467
|
+
});
|
|
4366
4468
|
|
|
4367
4469
|
// @ts-ignore - check if MEDIA_INACTIVITY exists
|
|
4368
4470
|
this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEDIA_INACTIVITY, function () {
|
|
@@ -4482,49 +4584,49 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
4482
4584
|
}
|
|
4483
4585
|
});
|
|
4484
4586
|
this.locusInfo.on(_constants.EVENTS.DESTROY_MEETING, /*#__PURE__*/function () {
|
|
4485
|
-
var
|
|
4587
|
+
var _ref37 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee1(payload) {
|
|
4486
4588
|
var _t9;
|
|
4487
|
-
return _regenerator.default.wrap(function (
|
|
4488
|
-
while (1) switch (
|
|
4589
|
+
return _regenerator.default.wrap(function (_context1) {
|
|
4590
|
+
while (1) switch (_context1.prev = _context1.next) {
|
|
4489
4591
|
case 0:
|
|
4490
4592
|
if (!_this20.wirelessShare) {
|
|
4491
|
-
|
|
4593
|
+
_context1.next = 2;
|
|
4492
4594
|
break;
|
|
4493
4595
|
}
|
|
4494
4596
|
if (!_this20.mediaProperties.shareVideoStream) {
|
|
4495
|
-
|
|
4597
|
+
_context1.next = 1;
|
|
4496
4598
|
break;
|
|
4497
4599
|
}
|
|
4498
|
-
|
|
4600
|
+
_context1.next = 1;
|
|
4499
4601
|
return _this20.setLocalShareVideoStream(undefined);
|
|
4500
4602
|
case 1:
|
|
4501
4603
|
if (!_this20.mediaProperties.shareAudioStream) {
|
|
4502
|
-
|
|
4604
|
+
_context1.next = 2;
|
|
4503
4605
|
break;
|
|
4504
4606
|
}
|
|
4505
|
-
|
|
4607
|
+
_context1.next = 2;
|
|
4506
4608
|
return _this20.setLocalShareAudioStream(undefined);
|
|
4507
4609
|
case 2:
|
|
4508
4610
|
if (!payload.shouldLeave) {
|
|
4509
|
-
|
|
4611
|
+
_context1.next = 7;
|
|
4510
4612
|
break;
|
|
4511
4613
|
}
|
|
4512
|
-
|
|
4513
|
-
|
|
4614
|
+
_context1.prev = 3;
|
|
4615
|
+
_context1.next = 4;
|
|
4514
4616
|
return _this20.leave({
|
|
4515
4617
|
reason: payload.reason
|
|
4516
4618
|
});
|
|
4517
4619
|
case 4:
|
|
4518
4620
|
_loggerProxy.default.logger.warn('Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. The meeting has been left, but has not been destroyed, you should see a later event for leave.');
|
|
4519
|
-
|
|
4621
|
+
_context1.next = 6;
|
|
4520
4622
|
break;
|
|
4521
4623
|
case 5:
|
|
4522
|
-
|
|
4523
|
-
_t9 =
|
|
4624
|
+
_context1.prev = 5;
|
|
4625
|
+
_t9 = _context1["catch"](3);
|
|
4524
4626
|
// @ts-ignore
|
|
4525
4627
|
_loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. Issue with leave for meeting, meeting still in collection: ".concat(_this20, ", error: ").concat(_t9));
|
|
4526
4628
|
case 6:
|
|
4527
|
-
|
|
4629
|
+
_context1.next = 8;
|
|
4528
4630
|
break;
|
|
4529
4631
|
case 7:
|
|
4530
4632
|
_loggerProxy.default.logger.info('Meeting:index#setUpLocusInfoMeetingListener --> MEETING_REMOVED_REASON', payload.reason);
|
|
@@ -4538,12 +4640,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
4538
4640
|
});
|
|
4539
4641
|
case 8:
|
|
4540
4642
|
case "end":
|
|
4541
|
-
return
|
|
4643
|
+
return _context1.stop();
|
|
4542
4644
|
}
|
|
4543
|
-
},
|
|
4645
|
+
}, _callee1, null, [[3, 5]]);
|
|
4544
4646
|
}));
|
|
4545
|
-
return function (
|
|
4546
|
-
return
|
|
4647
|
+
return function (_x9) {
|
|
4648
|
+
return _ref37.apply(this, arguments);
|
|
4547
4649
|
};
|
|
4548
4650
|
}());
|
|
4549
4651
|
}
|
|
@@ -4661,31 +4763,31 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
4661
4763
|
}, {
|
|
4662
4764
|
key: "beRightBack",
|
|
4663
4765
|
value: (function () {
|
|
4664
|
-
var _beRightBack = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
4766
|
+
var _beRightBack = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee10(enabled) {
|
|
4665
4767
|
var _this22 = this;
|
|
4666
4768
|
var errorMessage, error, _errorMessage, _error;
|
|
4667
|
-
return _regenerator.default.wrap(function (
|
|
4668
|
-
while (1) switch (
|
|
4769
|
+
return _regenerator.default.wrap(function (_context10) {
|
|
4770
|
+
while (1) switch (_context10.prev = _context10.next) {
|
|
4669
4771
|
case 0:
|
|
4670
4772
|
if (this.isMultistream) {
|
|
4671
|
-
|
|
4773
|
+
_context10.next = 1;
|
|
4672
4774
|
break;
|
|
4673
4775
|
}
|
|
4674
4776
|
errorMessage = 'Meeting:index#beRightBack --> Not a multistream meeting';
|
|
4675
4777
|
error = new Error(errorMessage);
|
|
4676
4778
|
_loggerProxy.default.logger.error(error);
|
|
4677
|
-
return
|
|
4779
|
+
return _context10.abrupt("return", _promise.default.reject(error));
|
|
4678
4780
|
case 1:
|
|
4679
4781
|
if (this.mediaProperties.webrtcMediaConnection) {
|
|
4680
|
-
|
|
4782
|
+
_context10.next = 2;
|
|
4681
4783
|
break;
|
|
4682
4784
|
}
|
|
4683
4785
|
_errorMessage = 'Meeting:index#beRightBack --> WebRTC media connection is not defined';
|
|
4684
4786
|
_error = new Error(_errorMessage);
|
|
4685
4787
|
_loggerProxy.default.logger.error(_error);
|
|
4686
|
-
return
|
|
4788
|
+
return _context10.abrupt("return", _promise.default.reject(_error));
|
|
4687
4789
|
case 2:
|
|
4688
|
-
return
|
|
4790
|
+
return _context10.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager).then(function () {
|
|
4689
4791
|
if (_this22.audio && enabled) {
|
|
4690
4792
|
// locus mutes the participant with brb enabled request,
|
|
4691
4793
|
// so we need to explicitly update remote mute for correct logic flow
|
|
@@ -4696,11 +4798,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
4696
4798
|
}));
|
|
4697
4799
|
case 3:
|
|
4698
4800
|
case "end":
|
|
4699
|
-
return
|
|
4801
|
+
return _context10.stop();
|
|
4700
4802
|
}
|
|
4701
|
-
},
|
|
4803
|
+
}, _callee10, this);
|
|
4702
4804
|
}));
|
|
4703
|
-
function beRightBack(
|
|
4805
|
+
function beRightBack(_x0) {
|
|
4704
4806
|
return _beRightBack.apply(this, arguments);
|
|
4705
4807
|
}
|
|
4706
4808
|
return beRightBack;
|
|
@@ -5128,7 +5230,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
5128
5230
|
displayHints: this.userDisplayHints
|
|
5129
5231
|
}),
|
|
5130
5232
|
canAttendeeRequestAiAssistantEnabled: _util2.default.canAttendeeRequestAiAssistantEnabled(this.userDisplayHints, this.roles),
|
|
5131
|
-
isAttendeeRequestAiAssistantDeclinedAll: _util2.default.attendeeRequestAiAssistantDeclinedAll(this.userDisplayHints)
|
|
5233
|
+
isAttendeeRequestAiAssistantDeclinedAll: _util2.default.attendeeRequestAiAssistantDeclinedAll(this.userDisplayHints),
|
|
5234
|
+
isAnonymizeDisplayNamesEnabled: _util2.default.isAnonymizeDisplayNamesEnabled(this.userDisplayHints)
|
|
5132
5235
|
}) || changed;
|
|
5133
5236
|
}
|
|
5134
5237
|
if (changed) {
|
|
@@ -5179,6 +5282,51 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
5179
5282
|
this.sipUri = sipUri;
|
|
5180
5283
|
}
|
|
5181
5284
|
|
|
5285
|
+
/**
|
|
5286
|
+
* After initial locus setup, refreshes destination with synced locus data and optionally
|
|
5287
|
+
* performs deferred meeting info fetch when initial locus was incomplete.
|
|
5288
|
+
* @param {LocusDTO} locus
|
|
5289
|
+
* @returns {void}
|
|
5290
|
+
*/
|
|
5291
|
+
}, {
|
|
5292
|
+
key: "finalizeMeetingAfterInitialLocusSetup",
|
|
5293
|
+
value: (function () {
|
|
5294
|
+
var _finalizeMeetingAfterInitialLocusSetup = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee11(locus) {
|
|
5295
|
+
var _this$destination;
|
|
5296
|
+
var _t0;
|
|
5297
|
+
return _regenerator.default.wrap(function (_context11) {
|
|
5298
|
+
while (1) switch (_context11.prev = _context11.next) {
|
|
5299
|
+
case 0:
|
|
5300
|
+
if (locus && (this === null || this === void 0 ? void 0 : this.destinationType) === _constants.DESTINATION_TYPE.LOCUS_ID) {
|
|
5301
|
+
// destination is initialized from the initial locus snapshot in constructor,
|
|
5302
|
+
// so refresh it after locus sync to avoid stale partial hash-tree data.
|
|
5303
|
+
this.destination = locus;
|
|
5304
|
+
}
|
|
5305
|
+
if (!((!this.meetingInfo || (0, _lodash.isEmpty)(this.meetingInfo)) && (_this$destination = this.destination) !== null && _this$destination !== void 0 && _this$destination.info && !this.fetchMeetingInfoTimeoutId && !_util3.default.isOneOnOneCall(locus))) {
|
|
5306
|
+
_context11.next = 4;
|
|
5307
|
+
break;
|
|
5308
|
+
}
|
|
5309
|
+
_context11.prev = 1;
|
|
5310
|
+
_context11.next = 2;
|
|
5311
|
+
return this.fetchMeetingInfo({});
|
|
5312
|
+
case 2:
|
|
5313
|
+
_context11.next = 4;
|
|
5314
|
+
break;
|
|
5315
|
+
case 3:
|
|
5316
|
+
_context11.prev = 3;
|
|
5317
|
+
_t0 = _context11["catch"](1);
|
|
5318
|
+
_loggerProxy.default.logger.info("Meeting:index#finalizeMeetingAfterInitialLocusSetup --> deferred fetchMeetingInfo failed: ".concat(_t0.message));
|
|
5319
|
+
case 4:
|
|
5320
|
+
case "end":
|
|
5321
|
+
return _context11.stop();
|
|
5322
|
+
}
|
|
5323
|
+
}, _callee11, this, [[1, 3]]);
|
|
5324
|
+
}));
|
|
5325
|
+
function finalizeMeetingAfterInitialLocusSetup(_x1) {
|
|
5326
|
+
return _finalizeMeetingAfterInitialLocusSetup.apply(this, arguments);
|
|
5327
|
+
}
|
|
5328
|
+
return finalizeMeetingAfterInitialLocusSetup;
|
|
5329
|
+
}()
|
|
5182
5330
|
/**
|
|
5183
5331
|
* Set the locus info the class instance. Should be called with the parsed locus
|
|
5184
5332
|
* we got in the join response.
|
|
@@ -5194,6 +5342,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
5194
5342
|
* @private
|
|
5195
5343
|
* @memberof Meeting
|
|
5196
5344
|
*/
|
|
5345
|
+
)
|
|
5197
5346
|
}, {
|
|
5198
5347
|
key: "setLocus",
|
|
5199
5348
|
value: function setLocus(data) {
|
|
@@ -5653,8 +5802,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
5653
5802
|
var _this25 = this;
|
|
5654
5803
|
// Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury
|
|
5655
5804
|
// if the meeting has active peer connections, it should try to reconnect.
|
|
5656
|
-
|
|
5657
|
-
this.webex.internal.mercury.on(_constants.ONLINE, function () {
|
|
5805
|
+
this.mercuryOnlineHandler = function () {
|
|
5658
5806
|
_loggerProxy.default.logger.info('Meeting:index#setMercuryListener --> Web socket online');
|
|
5659
5807
|
|
|
5660
5808
|
// Only send restore event when it was disconnected before and for connected later
|
|
@@ -5664,15 +5812,48 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
5664
5812
|
});
|
|
5665
5813
|
}
|
|
5666
5814
|
_this25.hasWebsocketConnected = true;
|
|
5667
|
-
}
|
|
5668
|
-
|
|
5669
|
-
// @ts-ignore
|
|
5670
|
-
this.webex.internal.mercury.on(_constants.OFFLINE, function () {
|
|
5815
|
+
};
|
|
5816
|
+
this.mercuryOfflineHandler = function () {
|
|
5671
5817
|
_loggerProxy.default.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
|
|
5672
5818
|
_metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_FAILURE, {
|
|
5673
5819
|
correlation_id: _this25.correlationId
|
|
5674
5820
|
});
|
|
5675
|
-
}
|
|
5821
|
+
};
|
|
5822
|
+
|
|
5823
|
+
// @ts-ignore
|
|
5824
|
+
this.webex.internal.mercury.on(_constants.ONLINE, this.mercuryOnlineHandler);
|
|
5825
|
+
// @ts-ignore
|
|
5826
|
+
this.webex.internal.mercury.on(_constants.OFFLINE, this.mercuryOfflineHandler);
|
|
5827
|
+
}
|
|
5828
|
+
|
|
5829
|
+
/**
|
|
5830
|
+
* Removes this meeting's Mercury ONLINE/OFFLINE event listeners registered
|
|
5831
|
+
* by setMercuryListener(). Must be called before Locus /leave to avoid
|
|
5832
|
+
* unnecessary syncs/metrics triggered by events received while leaving
|
|
5833
|
+
* (per Locus team recommendation).
|
|
5834
|
+
*
|
|
5835
|
+
* Mercury is a process-wide singleton shared with other plugins, so we
|
|
5836
|
+
* pass the bound handler refs to .off() to avoid clearing every listener
|
|
5837
|
+
* for ONLINE/OFFLINE on the shared emitter.
|
|
5838
|
+
*
|
|
5839
|
+
* Idempotent: subsequent calls are no-ops because the handler refs are
|
|
5840
|
+
* cleared after detaching.
|
|
5841
|
+
* @private
|
|
5842
|
+
* @returns {void}
|
|
5843
|
+
*/
|
|
5844
|
+
}, {
|
|
5845
|
+
key: "stopListeningForMercuryEvents",
|
|
5846
|
+
value: function stopListeningForMercuryEvents() {
|
|
5847
|
+
if (this.mercuryOnlineHandler) {
|
|
5848
|
+
// @ts-ignore
|
|
5849
|
+
this.webex.internal.mercury.off(_constants.ONLINE, this.mercuryOnlineHandler);
|
|
5850
|
+
this.mercuryOnlineHandler = undefined;
|
|
5851
|
+
}
|
|
5852
|
+
if (this.mercuryOfflineHandler) {
|
|
5853
|
+
// @ts-ignore
|
|
5854
|
+
this.webex.internal.mercury.off(_constants.OFFLINE, this.mercuryOfflineHandler);
|
|
5855
|
+
this.mercuryOfflineHandler = undefined;
|
|
5856
|
+
}
|
|
5676
5857
|
}
|
|
5677
5858
|
|
|
5678
5859
|
/**
|
|
@@ -6007,8 +6188,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6007
6188
|
_error2,
|
|
6008
6189
|
_error3,
|
|
6009
6190
|
_args16 = arguments,
|
|
6010
|
-
|
|
6011
|
-
|
|
6191
|
+
_t1,
|
|
6192
|
+
_t10;
|
|
6012
6193
|
return _regenerator.default.wrap(function (_context16) {
|
|
6013
6194
|
while (1) switch (_context16.prev = _context16.next) {
|
|
6014
6195
|
case 0:
|
|
@@ -6097,26 +6278,26 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6097
6278
|
});
|
|
6098
6279
|
case 10:
|
|
6099
6280
|
_context16.prev = 10;
|
|
6100
|
-
|
|
6101
|
-
_loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> ',
|
|
6281
|
+
_t1 = _context16["catch"](2);
|
|
6282
|
+
_loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> ', _t1);
|
|
6102
6283
|
this.roap.abortTurnDiscovery();
|
|
6103
6284
|
|
|
6104
6285
|
// if this was the first attempt, let's do a retry
|
|
6105
6286
|
shouldRetry = !isRetry;
|
|
6106
|
-
if (_internalPluginMetrics.CallDiagnosticUtils.isSdpOfferCreationError(
|
|
6287
|
+
if (_internalPluginMetrics.CallDiagnosticUtils.isSdpOfferCreationError(_t1) || _internalPluginMetrics.CallDiagnosticUtils.isWebrtcApiNotAvailableError(_t1)) {
|
|
6107
6288
|
// errors related to offer creation (for example missing H264 codec) will happen again no matter how many times we try,
|
|
6108
6289
|
// so there is no point doing a retry
|
|
6109
6290
|
shouldRetry = false;
|
|
6110
6291
|
}
|
|
6111
|
-
if (_internalPluginMetrics.CallDiagnosticUtils.isBrowserMediaError(
|
|
6292
|
+
if (_internalPluginMetrics.CallDiagnosticUtils.isBrowserMediaError(_t1)) {
|
|
6112
6293
|
shouldRetry = false;
|
|
6113
6294
|
// eslint-disable-next-line no-ex-assign
|
|
6114
|
-
|
|
6295
|
+
_t1 = (0, _lodash.merge)({
|
|
6115
6296
|
error: {
|
|
6116
6297
|
body: {
|
|
6117
|
-
errorCode: _internalPluginMetrics.CallDiagnosticUtils.getBrowserMediaErrorCode(
|
|
6118
|
-
message: (_error2 =
|
|
6119
|
-
name: (_error3 =
|
|
6298
|
+
errorCode: _internalPluginMetrics.CallDiagnosticUtils.getBrowserMediaErrorCode(_t1),
|
|
6299
|
+
message: (_error2 = _t1) === null || _error2 === void 0 ? void 0 : _error2.message,
|
|
6300
|
+
name: (_error3 = _t1) === null || _error3 === void 0 ? void 0 : _error3.name
|
|
6120
6301
|
}
|
|
6121
6302
|
}
|
|
6122
6303
|
});
|
|
@@ -6138,20 +6319,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6138
6319
|
break;
|
|
6139
6320
|
case 13:
|
|
6140
6321
|
_context16.prev = 13;
|
|
6141
|
-
|
|
6142
|
-
_loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> leave error',
|
|
6143
|
-
leaveError =
|
|
6322
|
+
_t10 = _context16["catch"](11);
|
|
6323
|
+
_loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> leave error', _t10);
|
|
6324
|
+
leaveError = _t10;
|
|
6144
6325
|
case 14:
|
|
6145
6326
|
_metrics.default.sendBehavioralMetric(_constants2.default.JOIN_WITH_MEDIA_FAILURE, {
|
|
6146
6327
|
correlation_id: this.correlationId,
|
|
6147
6328
|
locus_id: (_this$locusUrl = this.locusUrl) === null || _this$locusUrl === void 0 ? void 0 : _this$locusUrl.split('/').pop(),
|
|
6148
6329
|
// if join fails, we may end up with no locusUrl
|
|
6149
|
-
reason:
|
|
6150
|
-
stack:
|
|
6330
|
+
reason: _t1.message,
|
|
6331
|
+
stack: _t1.stack,
|
|
6151
6332
|
leaveErrorReason: (_leaveError = leaveError) === null || _leaveError === void 0 ? void 0 : _leaveError.message,
|
|
6152
6333
|
isRetry: isRetry
|
|
6153
6334
|
}, {
|
|
6154
|
-
type:
|
|
6335
|
+
type: _t1.name
|
|
6155
6336
|
});
|
|
6156
6337
|
if (!shouldRetry) {
|
|
6157
6338
|
_context16.next = 15;
|
|
@@ -6166,7 +6347,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6166
6347
|
isRetry: false,
|
|
6167
6348
|
prevJoinResponse: undefined
|
|
6168
6349
|
};
|
|
6169
|
-
throw
|
|
6350
|
+
throw _t1;
|
|
6170
6351
|
case 16:
|
|
6171
6352
|
case "end":
|
|
6172
6353
|
return _context16.stop();
|
|
@@ -6356,7 +6537,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6356
6537
|
key: "startTranscription",
|
|
6357
6538
|
value: (function () {
|
|
6358
6539
|
var _startTranscription = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee18(options) {
|
|
6359
|
-
var
|
|
6540
|
+
var _t11;
|
|
6360
6541
|
return _regenerator.default.wrap(function (_context18) {
|
|
6361
6542
|
while (1) switch (_context18.prev = _context18.next) {
|
|
6362
6543
|
case 0:
|
|
@@ -6378,12 +6559,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6378
6559
|
break;
|
|
6379
6560
|
case 3:
|
|
6380
6561
|
_context18.prev = 3;
|
|
6381
|
-
|
|
6382
|
-
_loggerProxy.default.logger.error("Meeting:index#startTranscription --> ".concat(
|
|
6562
|
+
_t11 = _context18["catch"](1);
|
|
6563
|
+
_loggerProxy.default.logger.error("Meeting:index#startTranscription --> ".concat(_t11));
|
|
6383
6564
|
_metrics.default.sendBehavioralMetric(_constants2.default.RECEIVE_TRANSCRIPTION_FAILURE, {
|
|
6384
6565
|
correlation_id: this.correlationId,
|
|
6385
|
-
reason:
|
|
6386
|
-
stack:
|
|
6566
|
+
reason: _t11.message,
|
|
6567
|
+
stack: _t11.stack
|
|
6387
6568
|
});
|
|
6388
6569
|
case 4:
|
|
6389
6570
|
_context18.next = 6;
|
|
@@ -6402,6 +6583,28 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6402
6583
|
}
|
|
6403
6584
|
return startTranscription;
|
|
6404
6585
|
}())
|
|
6586
|
+
}, {
|
|
6587
|
+
key: "isRelayEventRouteValid",
|
|
6588
|
+
value:
|
|
6589
|
+
/**
|
|
6590
|
+
* Verifies the relay event was delivered for the active LLM session binding.
|
|
6591
|
+
* @param {RelayEvent} event Event object coming from LLM Connection
|
|
6592
|
+
* @returns {boolean}
|
|
6593
|
+
*/
|
|
6594
|
+
function isRelayEventRouteValid(event) {
|
|
6595
|
+
var _event$headers;
|
|
6596
|
+
var route = event === null || event === void 0 ? void 0 : (_event$headers = event.headers) === null || _event$headers === void 0 ? void 0 : _event$headers.route;
|
|
6597
|
+
if (!route) {
|
|
6598
|
+
return true;
|
|
6599
|
+
}
|
|
6600
|
+
var llm = this.webex.internal.llm;
|
|
6601
|
+
var isPracticeSession = llm.isConnected(_constants.LLM_PRACTICE_SESSION);
|
|
6602
|
+
var expectedBinding = isPracticeSession ? llm.getBinding(_constants.LLM_PRACTICE_SESSION) : llm.getBinding();
|
|
6603
|
+
if (!expectedBinding || route === expectedBinding) {
|
|
6604
|
+
return true;
|
|
6605
|
+
}
|
|
6606
|
+
return false;
|
|
6607
|
+
}
|
|
6405
6608
|
}, {
|
|
6406
6609
|
key: "stopTranscription",
|
|
6407
6610
|
value:
|
|
@@ -6443,6 +6646,31 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6443
6646
|
function: 'triggerStopReceivingTranscriptionEvent'
|
|
6444
6647
|
}, _constants.EVENT_TRIGGERS.MEETING_STOPPED_RECEIVING_TRANSCRIPTION);
|
|
6445
6648
|
}
|
|
6649
|
+
|
|
6650
|
+
/**
|
|
6651
|
+
* Restores LLM subchannel subscriptions after reconnect when captions are active.
|
|
6652
|
+
* @returns {void}
|
|
6653
|
+
*/
|
|
6654
|
+
}, {
|
|
6655
|
+
key: "restoreLLMSubscriptionsIfNeeded",
|
|
6656
|
+
value: function restoreLLMSubscriptionsIfNeeded() {
|
|
6657
|
+
try {
|
|
6658
|
+
var _this$webex$internal$3, _this$webex$internal$4;
|
|
6659
|
+
// @ts-ignore
|
|
6660
|
+
var isCaptionBoxOn = (_this$webex$internal$3 = this.webex.internal.voicea) === null || _this$webex$internal$3 === void 0 ? void 0 : (_this$webex$internal$4 = _this$webex$internal$3.getIsCaptionBoxOn) === null || _this$webex$internal$4 === void 0 ? void 0 : _this$webex$internal$4.call(_this$webex$internal$3);
|
|
6661
|
+
if (!isCaptionBoxOn) {
|
|
6662
|
+
return;
|
|
6663
|
+
}
|
|
6664
|
+
|
|
6665
|
+
// @ts-ignore
|
|
6666
|
+
this.webex.internal.voicea.updateSubchannelSubscriptions({
|
|
6667
|
+
subscribe: ['transcription']
|
|
6668
|
+
});
|
|
6669
|
+
} catch (error) {
|
|
6670
|
+
var msg = (error === null || error === void 0 ? void 0 : error.message) || String(error);
|
|
6671
|
+
_loggerProxy.default.logger.warn("Meeting:index#restoreLLMSubscriptionsIfNeeded --> failed to restore subscriptions after LLM online: ".concat(msg));
|
|
6672
|
+
}
|
|
6673
|
+
}
|
|
6446
6674
|
}, {
|
|
6447
6675
|
key: "join",
|
|
6448
6676
|
value: (
|
|
@@ -6471,7 +6699,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6471
6699
|
_errorMessage3,
|
|
6472
6700
|
_error5,
|
|
6473
6701
|
_args19 = arguments,
|
|
6474
|
-
|
|
6702
|
+
_t12;
|
|
6475
6703
|
return _regenerator.default.wrap(function (_context19) {
|
|
6476
6704
|
while (1) switch (_context19.prev = _context19.next) {
|
|
6477
6705
|
case 0:
|
|
@@ -6589,25 +6817,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6589
6817
|
break;
|
|
6590
6818
|
case 9:
|
|
6591
6819
|
_context19.prev = 9;
|
|
6592
|
-
|
|
6593
|
-
_loggerProxy.default.logger.error('Meeting:index#join --> Failed to refresh permission token:',
|
|
6594
|
-
if (!(
|
|
6820
|
+
_t12 = _context19["catch"](7);
|
|
6821
|
+
_loggerProxy.default.logger.error('Meeting:index#join --> Failed to refresh permission token:', _t12);
|
|
6822
|
+
if (!(_t12 instanceof _captchaError.default || _t12 instanceof _passwordError.default || _t12 instanceof _permission.default)) {
|
|
6595
6823
|
_context19.next = 10;
|
|
6596
6824
|
break;
|
|
6597
6825
|
}
|
|
6598
|
-
this.meetingFiniteStateMachine.fail(
|
|
6826
|
+
this.meetingFiniteStateMachine.fail(_t12);
|
|
6599
6827
|
|
|
6600
6828
|
// Upload logs on refreshpermissionToken refresh Failure
|
|
6601
6829
|
_triggerProxy.default.trigger(this, {
|
|
6602
6830
|
file: 'meeting/index',
|
|
6603
6831
|
function: 'join'
|
|
6604
6832
|
}, _constants.EVENTS.REQUEST_UPLOAD_LOGS, this);
|
|
6605
|
-
joinFailed(
|
|
6833
|
+
joinFailed(_t12);
|
|
6606
6834
|
this.deferJoin = undefined;
|
|
6607
6835
|
|
|
6608
6836
|
// if refresh permission token requires captcha, password or permission, we are throwing the errors
|
|
6609
6837
|
// and bubble it up to client
|
|
6610
|
-
return _context19.abrupt("return", _promise.default.reject(
|
|
6838
|
+
return _context19.abrupt("return", _promise.default.reject(_t12));
|
|
6611
6839
|
case 10:
|
|
6612
6840
|
return _context19.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
|
|
6613
6841
|
_this34.meetingFiniteStateMachine.join();
|
|
@@ -6646,6 +6874,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6646
6874
|
_this34.saveDataChannelToken(join);
|
|
6647
6875
|
// @ts-ignore - config coming from registerPlugin
|
|
6648
6876
|
if (_this34.config.enableAutomaticLLM) {
|
|
6877
|
+
// @ts-ignore
|
|
6878
|
+
_this34.webex.internal.llm.off('online', _this34.handleLLMOnline);
|
|
6649
6879
|
// @ts-ignore
|
|
6650
6880
|
_this34.webex.internal.llm.on('online', _this34.handleLLMOnline);
|
|
6651
6881
|
_this34.updateLLMConnection().catch(function (error) {
|
|
@@ -6714,6 +6944,53 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6714
6944
|
this.llmHealthCheckTimer = undefined;
|
|
6715
6945
|
}
|
|
6716
6946
|
}
|
|
6947
|
+
|
|
6948
|
+
/**
|
|
6949
|
+
* Removes LLM event listeners and clears the health check timer.
|
|
6950
|
+
* Must be called before Locus /leave to avoid unnecessary syncs triggered
|
|
6951
|
+
* by events received while leaving (per Locus team recommendation).
|
|
6952
|
+
* Idempotent: safe to call multiple times; .off() is a no-op when no
|
|
6953
|
+
* matching listener is registered.
|
|
6954
|
+
* @private
|
|
6955
|
+
* @returns {void}
|
|
6956
|
+
*/
|
|
6957
|
+
}, {
|
|
6958
|
+
key: "stopListeningForLLMEvents",
|
|
6959
|
+
value: function stopListeningForLLMEvents() {
|
|
6960
|
+
// @ts-ignore - fix types
|
|
6961
|
+
this.webex.internal.llm.off('event:relay.event', this.processRelayEvent);
|
|
6962
|
+
// @ts-ignore - fix types
|
|
6963
|
+
this.webex.internal.llm.off(_constants.LOCUS_LLM_EVENT, this.processLocusLLMEvent);
|
|
6964
|
+
this.clearLLMHealthCheckTimer();
|
|
6965
|
+
}
|
|
6966
|
+
|
|
6967
|
+
/**
|
|
6968
|
+
* Stops listening on every event bus (LLM, Mercury, voicea/transcription,
|
|
6969
|
+
* annotation) that could otherwise deliver events to this meeting while
|
|
6970
|
+
* Locus is processing /leave or /end. Per the Locus team recommendation,
|
|
6971
|
+
* this must run before the Locus request is dispatched to avoid
|
|
6972
|
+
* unnecessary syncs triggered by in-flight events.
|
|
6973
|
+
*
|
|
6974
|
+
* Voicea (transcription) subscribes to llm 'event:relay.event' internally,
|
|
6975
|
+
* and the annotation plugin subscribes to both mercury and llm, so both
|
|
6976
|
+
* must be torn down alongside the direct LLM/Mercury listeners.
|
|
6977
|
+
*
|
|
6978
|
+
* Idempotent: safe to call multiple times; .off() is a no-op when no
|
|
6979
|
+
* matching listener is registered, and stopTranscription is guarded.
|
|
6980
|
+
* @private
|
|
6981
|
+
* @returns {void}
|
|
6982
|
+
*/
|
|
6983
|
+
}, {
|
|
6984
|
+
key: "stopListeningForMeetingEvents",
|
|
6985
|
+
value: function stopListeningForMeetingEvents() {
|
|
6986
|
+
this.stopListeningForLLMEvents();
|
|
6987
|
+
this.stopListeningForMercuryEvents();
|
|
6988
|
+
if (this.transcription) {
|
|
6989
|
+
this.stopTranscription();
|
|
6990
|
+
this.transcription = undefined;
|
|
6991
|
+
}
|
|
6992
|
+
this.annotation.deregisterEvents();
|
|
6993
|
+
}
|
|
6717
6994
|
}, {
|
|
6718
6995
|
key: "clearDataChannelToken",
|
|
6719
6996
|
value:
|
|
@@ -6749,51 +7026,143 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6749
7026
|
}
|
|
6750
7027
|
}
|
|
6751
7028
|
|
|
7029
|
+
/**
|
|
7030
|
+
* Ensures default-session data channel token exists after lobby admission.
|
|
7031
|
+
* Some lobby users do not receive a token until they are admitted.
|
|
7032
|
+
* @returns {Promise<boolean>} true when a new token is fetched and cached
|
|
7033
|
+
*/
|
|
7034
|
+
}, {
|
|
7035
|
+
key: "ensureDefaultDatachannelTokenAfterAdmit",
|
|
7036
|
+
value: (function () {
|
|
7037
|
+
var _ensureDefaultDatachannelTokenAfterAdmit = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee20() {
|
|
7038
|
+
var _response$body, datachannelToken, isDataChannelTokenEnabled, response, fetchedDatachannelToken, msg, _t13;
|
|
7039
|
+
return _regenerator.default.wrap(function (_context20) {
|
|
7040
|
+
while (1) switch (_context20.prev = _context20.next) {
|
|
7041
|
+
case 0:
|
|
7042
|
+
_context20.prev = 0;
|
|
7043
|
+
// @ts-ignore
|
|
7044
|
+
datachannelToken = this.webex.internal.llm.getDatachannelToken(); // @ts-ignore
|
|
7045
|
+
_context20.next = 1;
|
|
7046
|
+
return this.webex.internal.llm.isDataChannelTokenEnabled();
|
|
7047
|
+
case 1:
|
|
7048
|
+
isDataChannelTokenEnabled = _context20.sent;
|
|
7049
|
+
if (!(!isDataChannelTokenEnabled || datachannelToken)) {
|
|
7050
|
+
_context20.next = 2;
|
|
7051
|
+
break;
|
|
7052
|
+
}
|
|
7053
|
+
return _context20.abrupt("return", false);
|
|
7054
|
+
case 2:
|
|
7055
|
+
_context20.next = 3;
|
|
7056
|
+
return this.meetingRequest.fetchDatachannelToken({
|
|
7057
|
+
locusUrl: this.locusUrl,
|
|
7058
|
+
requestingParticipantId: this.members.selfId,
|
|
7059
|
+
isPracticeSession: false
|
|
7060
|
+
});
|
|
7061
|
+
case 3:
|
|
7062
|
+
response = _context20.sent;
|
|
7063
|
+
fetchedDatachannelToken = response === null || response === void 0 ? void 0 : (_response$body = response.body) === null || _response$body === void 0 ? void 0 : _response$body.datachannelToken;
|
|
7064
|
+
if (fetchedDatachannelToken) {
|
|
7065
|
+
_context20.next = 4;
|
|
7066
|
+
break;
|
|
7067
|
+
}
|
|
7068
|
+
return _context20.abrupt("return", false);
|
|
7069
|
+
case 4:
|
|
7070
|
+
// @ts-ignore
|
|
7071
|
+
this.webex.internal.llm.setDatachannelToken(fetchedDatachannelToken, _internalPluginLlm.DataChannelTokenType.Default);
|
|
7072
|
+
return _context20.abrupt("return", true);
|
|
7073
|
+
case 5:
|
|
7074
|
+
_context20.prev = 5;
|
|
7075
|
+
_t13 = _context20["catch"](0);
|
|
7076
|
+
msg = (_t13 === null || _t13 === void 0 ? void 0 : _t13.message) || String(_t13);
|
|
7077
|
+
_loggerProxy.default.logger.warn("Meeting:index#ensureDefaultDatachannelTokenAfterAdmit --> failed to proactively fetch default data channel token after admit: ".concat(msg), {
|
|
7078
|
+
statusCode: _t13 === null || _t13 === void 0 ? void 0 : _t13.statusCode
|
|
7079
|
+
});
|
|
7080
|
+
return _context20.abrupt("return", false);
|
|
7081
|
+
case 6:
|
|
7082
|
+
case "end":
|
|
7083
|
+
return _context20.stop();
|
|
7084
|
+
}
|
|
7085
|
+
}, _callee20, this, [[0, 5]]);
|
|
7086
|
+
}));
|
|
7087
|
+
function ensureDefaultDatachannelTokenAfterAdmit() {
|
|
7088
|
+
return _ensureDefaultDatachannelTokenAfterAdmit.apply(this, arguments);
|
|
7089
|
+
}
|
|
7090
|
+
return ensureDefaultDatachannelTokenAfterAdmit;
|
|
7091
|
+
}()
|
|
6752
7092
|
/**
|
|
6753
7093
|
* Connects to low latency mercury and reconnects if the address has changed
|
|
6754
7094
|
* It will also disconnect if called when the meeting has ended
|
|
6755
7095
|
* @returns {Promise}
|
|
6756
7096
|
*/
|
|
7097
|
+
)
|
|
6757
7098
|
}, {
|
|
6758
7099
|
key: "updateLLMConnection",
|
|
6759
7100
|
value: (function () {
|
|
6760
|
-
var _updateLLMConnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
7101
|
+
var _updateLLMConnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee21() {
|
|
6761
7102
|
var _this36 = this;
|
|
6762
|
-
var
|
|
6763
|
-
return _regenerator.default.wrap(function (
|
|
6764
|
-
while (1) switch (
|
|
7103
|
+
var _ref39, _ref39$url, url, _ref39$info, _ref39$info2, _ref39$info2$datachan, datachannelUrl, isJoined, datachannelToken, dataChannelUrl, currentOwner;
|
|
7104
|
+
return _regenerator.default.wrap(function (_context21) {
|
|
7105
|
+
while (1) switch (_context21.prev = _context21.next) {
|
|
6765
7106
|
case 0:
|
|
6766
7107
|
// @ts-ignore - Fix type
|
|
6767
|
-
|
|
7108
|
+
_ref39 = this.locusInfo || {}, _ref39$url = _ref39.url, url = _ref39$url === void 0 ? undefined : _ref39$url, _ref39$info = _ref39.info, _ref39$info2 = _ref39$info === void 0 ? {} : _ref39$info, _ref39$info2$datachan = _ref39$info2.datachannelUrl, datachannelUrl = _ref39$info2$datachan === void 0 ? undefined : _ref39$info2$datachan;
|
|
6768
7109
|
isJoined = this.isJoined(); // @ts-ignore
|
|
6769
7110
|
datachannelToken = this.webex.internal.llm.getDatachannelToken(_internalPluginLlm.DataChannelTokenType.Default);
|
|
6770
|
-
dataChannelUrl = datachannelUrl; //
|
|
7111
|
+
dataChannelUrl = datachannelUrl; // Ownership guard: when the default LLM session is already connected and
|
|
7112
|
+
// owned by a *different* Meeting instance, do not disconnect or reconfigure
|
|
7113
|
+
// it. Another meeting's `updateLLMConnection` must be ignored here to
|
|
7114
|
+
// avoid killing the socket it relies on. We only proceed to manage the
|
|
7115
|
+
// connection when this meeting is the current owner, or when no owner is
|
|
7116
|
+
// set yet (first claim).
|
|
7117
|
+
// @ts-ignore - Fix type
|
|
7118
|
+
currentOwner = this.webex.internal.llm.getOwnerMeetingId(); // @ts-ignore - Fix type
|
|
6771
7119
|
if (!this.webex.internal.llm.isConnected()) {
|
|
6772
|
-
|
|
7120
|
+
_context21.next = 3;
|
|
7121
|
+
break;
|
|
7122
|
+
}
|
|
7123
|
+
if (!(currentOwner && currentOwner !== this.id)) {
|
|
7124
|
+
_context21.next = 1;
|
|
6773
7125
|
break;
|
|
6774
7126
|
}
|
|
7127
|
+
// Another meeting owns the live LLM socket. We must not disconnect
|
|
7128
|
+
// or reconfigure it -- doing so would tear down a session the
|
|
7129
|
+
// owning meeting still relies on. Locus/datachannel URL mismatch is
|
|
7130
|
+
// expected here (each meeting has its own locus URL) and is NOT a
|
|
7131
|
+
// valid signal of staleness, so we never reclaim from this path.
|
|
7132
|
+
// The only safe reclaim mechanism is the `finally`-block owner-tag
|
|
7133
|
+
// release in `cleanupLLMConneciton`, which fires when this meeting
|
|
7134
|
+
// itself is being torn down.
|
|
7135
|
+
_loggerProxy.default.logger.info("Meeting:index#updateLLMConnection --> skipping; LLM owned by meeting ".concat(currentOwner, ", not ").concat(this.id));
|
|
7136
|
+
return _context21.abrupt("return", undefined);
|
|
7137
|
+
case 1:
|
|
6775
7138
|
if (!(
|
|
6776
7139
|
// @ts-ignore - Fix type
|
|
6777
7140
|
url === this.webex.internal.llm.getLocusUrl() &&
|
|
6778
7141
|
// @ts-ignore - Fix type
|
|
6779
7142
|
dataChannelUrl === this.webex.internal.llm.getDatachannelUrl() && isJoined)) {
|
|
6780
|
-
|
|
7143
|
+
_context21.next = 2;
|
|
6781
7144
|
break;
|
|
6782
7145
|
}
|
|
6783
|
-
return
|
|
6784
|
-
case
|
|
6785
|
-
|
|
7146
|
+
return _context21.abrupt("return", undefined);
|
|
7147
|
+
case 2:
|
|
7148
|
+
_context21.next = 3;
|
|
6786
7149
|
return this.cleanupLLMConneciton({
|
|
6787
7150
|
removeOnlineListener: false
|
|
6788
7151
|
});
|
|
6789
|
-
case
|
|
7152
|
+
case 3:
|
|
6790
7153
|
if (isJoined) {
|
|
6791
|
-
|
|
7154
|
+
_context21.next = 4;
|
|
6792
7155
|
break;
|
|
6793
7156
|
}
|
|
6794
|
-
return
|
|
6795
|
-
case
|
|
6796
|
-
return
|
|
7157
|
+
return _context21.abrupt("return", undefined);
|
|
7158
|
+
case 4:
|
|
7159
|
+
return _context21.abrupt("return", this.webex.internal.llm.registerAndConnect(url, dataChannelUrl, datachannelToken).then(function (registerAndConnectResult) {
|
|
7160
|
+
var _this36$webex$interna, _this36$webex$interna2;
|
|
7161
|
+
// Record ownership of the default LLM session for this meeting so
|
|
7162
|
+
// subsequent cross-meeting `updateLLMConnection` / `cleanupLLMConneciton`
|
|
7163
|
+
// calls can detect and skip work that doesn't belong to them.
|
|
7164
|
+
// @ts-ignore - Fix type
|
|
7165
|
+
(_this36$webex$interna = (_this36$webex$interna2 = _this36.webex.internal.llm).setOwnerMeetingId) === null || _this36$webex$interna === void 0 ? void 0 : _this36$webex$interna.call(_this36$webex$interna2, _this36.id);
|
|
6797
7166
|
// @ts-ignore - Fix type
|
|
6798
7167
|
_this36.webex.internal.llm.off('event:relay.event', _this36.processRelayEvent);
|
|
6799
7168
|
// @ts-ignore - Fix type
|
|
@@ -6806,11 +7175,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6806
7175
|
_this36.startLLMHealthCheckTimer();
|
|
6807
7176
|
return _promise.default.resolve(registerAndConnectResult);
|
|
6808
7177
|
}));
|
|
6809
|
-
case
|
|
7178
|
+
case 5:
|
|
6810
7179
|
case "end":
|
|
6811
|
-
return
|
|
7180
|
+
return _context21.stop();
|
|
6812
7181
|
}
|
|
6813
|
-
},
|
|
7182
|
+
}, _callee21, this);
|
|
6814
7183
|
}));
|
|
6815
7184
|
function updateLLMConnection() {
|
|
6816
7185
|
return _updateLLMConnection.apply(this, arguments);
|
|
@@ -6996,17 +7365,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6996
7365
|
meetingId: this.id
|
|
6997
7366
|
}
|
|
6998
7367
|
});
|
|
6999
|
-
this.locusInfo.once(_constants.LOCUSINFO.EVENTS.SELF_OBSERVING, /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
7000
|
-
var mediaSettings,
|
|
7001
|
-
return _regenerator.default.wrap(function (
|
|
7002
|
-
while (1) switch (
|
|
7368
|
+
this.locusInfo.once(_constants.LOCUSINFO.EVENTS.SELF_OBSERVING, /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee22() {
|
|
7369
|
+
var mediaSettings, _t14;
|
|
7370
|
+
return _regenerator.default.wrap(function (_context22) {
|
|
7371
|
+
while (1) switch (_context22.prev = _context22.next) {
|
|
7003
7372
|
case 0:
|
|
7004
|
-
|
|
7373
|
+
_context22.prev = 0;
|
|
7005
7374
|
if (!(_this40.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
|
|
7006
|
-
|
|
7375
|
+
_context22.next = 1;
|
|
7007
7376
|
break;
|
|
7008
7377
|
}
|
|
7009
|
-
|
|
7378
|
+
_context22.next = 1;
|
|
7010
7379
|
return _this40.releaseScreenShareFloor();
|
|
7011
7380
|
case 1:
|
|
7012
7381
|
mediaSettings = {
|
|
@@ -7025,23 +7394,23 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7025
7394
|
// 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
|
|
7026
7395
|
// once the device answers we close the old connection and create new media server connection with only share enabled
|
|
7027
7396
|
if (!_this40.statsAnalyzer) {
|
|
7028
|
-
|
|
7397
|
+
_context22.next = 2;
|
|
7029
7398
|
break;
|
|
7030
7399
|
}
|
|
7031
|
-
|
|
7400
|
+
_context22.next = 2;
|
|
7032
7401
|
return _this40.statsAnalyzer.stopAnalyzer();
|
|
7033
7402
|
case 2:
|
|
7034
|
-
|
|
7403
|
+
_context22.next = 3;
|
|
7035
7404
|
return _this40.closeRemoteStreams();
|
|
7036
7405
|
case 3:
|
|
7037
|
-
|
|
7406
|
+
_context22.next = 4;
|
|
7038
7407
|
return _this40.closePeerConnections();
|
|
7039
7408
|
case 4:
|
|
7040
7409
|
_this40.cleanupLocalStreams();
|
|
7041
7410
|
_this40.unsetRemoteStreams();
|
|
7042
7411
|
_this40.unsetPeerConnections();
|
|
7043
7412
|
_this40.reconnectionManager.cleanUp();
|
|
7044
|
-
|
|
7413
|
+
_context22.next = 5;
|
|
7045
7414
|
return _this40.addMedia({
|
|
7046
7415
|
audioEnabled: false,
|
|
7047
7416
|
videoEnabled: false,
|
|
@@ -7050,24 +7419,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7050
7419
|
case 5:
|
|
7051
7420
|
_metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
|
|
7052
7421
|
_this40.isMoveToInProgress = false;
|
|
7053
|
-
|
|
7422
|
+
_context22.next = 7;
|
|
7054
7423
|
break;
|
|
7055
7424
|
case 6:
|
|
7056
|
-
|
|
7057
|
-
|
|
7058
|
-
_loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId',
|
|
7425
|
+
_context22.prev = 6;
|
|
7426
|
+
_t14 = _context22["catch"](0);
|
|
7427
|
+
_loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _t14);
|
|
7059
7428
|
_metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
|
|
7060
7429
|
correlation_id: _this40.correlationId,
|
|
7061
7430
|
locus_id: _this40.locusUrl.split('/').pop(),
|
|
7062
|
-
reason:
|
|
7063
|
-
stack:
|
|
7431
|
+
reason: _t14.message,
|
|
7432
|
+
stack: _t14.stack
|
|
7064
7433
|
});
|
|
7065
7434
|
_this40.isMoveToInProgress = false;
|
|
7066
7435
|
case 7:
|
|
7067
7436
|
case "end":
|
|
7068
|
-
return
|
|
7437
|
+
return _context22.stop();
|
|
7069
7438
|
}
|
|
7070
|
-
},
|
|
7439
|
+
}, _callee22, null, [[0, 6]]);
|
|
7071
7440
|
})));
|
|
7072
7441
|
_loggerProxy.default.logger.info('Meeting:index#moveTo --> Initated moved to using resourceId', resourceId);
|
|
7073
7442
|
|
|
@@ -7155,10 +7524,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7155
7524
|
}, {
|
|
7156
7525
|
key: "createMediaConnection",
|
|
7157
7526
|
value: (function () {
|
|
7158
|
-
var _createMediaConnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
7527
|
+
var _createMediaConnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee23(turnServerInfo, bundlePolicy) {
|
|
7159
7528
|
var mc, audioEnabled, videoEnabled, shareEnabled;
|
|
7160
|
-
return _regenerator.default.wrap(function (
|
|
7161
|
-
while (1) switch (
|
|
7529
|
+
return _regenerator.default.wrap(function (_context23) {
|
|
7530
|
+
while (1) switch (_context23.prev = _context23.next) {
|
|
7162
7531
|
case 0:
|
|
7163
7532
|
this.rtcMetrics = this.isMultistream ?
|
|
7164
7533
|
// @ts-ignore
|
|
@@ -7184,6 +7553,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7184
7553
|
disableAudioMainDtx: this.config.experimental.disableAudioMainDtx,
|
|
7185
7554
|
// @ts-ignore - config coming from registerPlugin
|
|
7186
7555
|
enableAudioTwcc: this.config.enableAudioTwccForMultistream,
|
|
7556
|
+
// @ts-ignore - config coming from registerPlugin
|
|
7557
|
+
enableAv1SlidesSupport: this.config.enableAv1SlidesSupport,
|
|
7187
7558
|
stopIceGatheringAfterFirstRelayCandidate:
|
|
7188
7559
|
// @ts-ignore - config coming from registerPlugin
|
|
7189
7560
|
this.config.stopIceGatheringAfterFirstRelayCandidate
|
|
@@ -7200,40 +7571,40 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7200
7571
|
|
|
7201
7572
|
// publish the streams
|
|
7202
7573
|
if (!this.mediaProperties.audioStream) {
|
|
7203
|
-
|
|
7574
|
+
_context23.next = 1;
|
|
7204
7575
|
break;
|
|
7205
7576
|
}
|
|
7206
7577
|
this.setSendNamedMediaGroup(_internalMediaCore.MediaType.AudioMain);
|
|
7207
|
-
|
|
7578
|
+
_context23.next = 1;
|
|
7208
7579
|
return this.publishStream(_internalMediaCore.MediaType.AudioMain, this.mediaProperties.audioStream);
|
|
7209
7580
|
case 1:
|
|
7210
7581
|
if (!this.mediaProperties.videoStream) {
|
|
7211
|
-
|
|
7582
|
+
_context23.next = 2;
|
|
7212
7583
|
break;
|
|
7213
7584
|
}
|
|
7214
|
-
|
|
7585
|
+
_context23.next = 2;
|
|
7215
7586
|
return this.publishStream(_internalMediaCore.MediaType.VideoMain, this.mediaProperties.videoStream);
|
|
7216
7587
|
case 2:
|
|
7217
7588
|
if (!this.mediaProperties.shareVideoStream) {
|
|
7218
|
-
|
|
7589
|
+
_context23.next = 3;
|
|
7219
7590
|
break;
|
|
7220
7591
|
}
|
|
7221
|
-
|
|
7592
|
+
_context23.next = 3;
|
|
7222
7593
|
return this.publishStream(_internalMediaCore.MediaType.VideoSlides, this.mediaProperties.shareVideoStream);
|
|
7223
7594
|
case 3:
|
|
7224
7595
|
if (!(this.isMultistream && this.mediaProperties.shareAudioStream)) {
|
|
7225
|
-
|
|
7596
|
+
_context23.next = 4;
|
|
7226
7597
|
break;
|
|
7227
7598
|
}
|
|
7228
|
-
|
|
7599
|
+
_context23.next = 4;
|
|
7229
7600
|
return this.publishStream(_internalMediaCore.MediaType.AudioSlides, this.mediaProperties.shareAudioStream);
|
|
7230
7601
|
case 4:
|
|
7231
|
-
return
|
|
7602
|
+
return _context23.abrupt("return", mc);
|
|
7232
7603
|
case 5:
|
|
7233
7604
|
case "end":
|
|
7234
|
-
return
|
|
7605
|
+
return _context23.stop();
|
|
7235
7606
|
}
|
|
7236
|
-
},
|
|
7607
|
+
}, _callee23, this);
|
|
7237
7608
|
}));
|
|
7238
7609
|
function createMediaConnection(_x15, _x16) {
|
|
7239
7610
|
return _createMediaConnection.apply(this, arguments);
|
|
@@ -7273,11 +7644,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7273
7644
|
}, {
|
|
7274
7645
|
key: "setUpLocalStreamReferences",
|
|
7275
7646
|
value: (function () {
|
|
7276
|
-
var _setUpLocalStreamReferences = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
7647
|
+
var _setUpLocalStreamReferences = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee24(localStreams) {
|
|
7277
7648
|
var _localStreams$microph, _localStreams$camera, _localStreams$screenS, _localStreams$screenS2, _localStreams$screenS3, _localStreams$screenS4, _localStreams$screenS5, _localStreams$screenS6;
|
|
7278
|
-
var setUpStreamPromises,
|
|
7279
|
-
return _regenerator.default.wrap(function (
|
|
7280
|
-
while (1) switch (
|
|
7649
|
+
var setUpStreamPromises, _t15;
|
|
7650
|
+
return _regenerator.default.wrap(function (_context24) {
|
|
7651
|
+
while (1) switch (_context24.prev = _context24.next) {
|
|
7281
7652
|
case 0:
|
|
7282
7653
|
setUpStreamPromises = [];
|
|
7283
7654
|
if (localStreams !== null && localStreams !== void 0 && localStreams.microphone && (localStreams === null || localStreams === void 0 ? void 0 : (_localStreams$microph = localStreams.microphone) === null || _localStreams$microph === void 0 ? void 0 : _localStreams$microph.readyState) !== 'ended') {
|
|
@@ -7292,22 +7663,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7292
7663
|
if (localStreams !== null && localStreams !== void 0 && (_localStreams$screenS4 = localStreams.screenShare) !== null && _localStreams$screenS4 !== void 0 && _localStreams$screenS4.audio && (localStreams === null || localStreams === void 0 ? void 0 : (_localStreams$screenS5 = localStreams.screenShare) === null || _localStreams$screenS5 === void 0 ? void 0 : (_localStreams$screenS6 = _localStreams$screenS5.audio) === null || _localStreams$screenS6 === void 0 ? void 0 : _localStreams$screenS6.readyState) !== 'ended') {
|
|
7293
7664
|
setUpStreamPromises.push(this.setLocalShareAudioStream(localStreams.screenShare.audio));
|
|
7294
7665
|
}
|
|
7295
|
-
|
|
7296
|
-
|
|
7666
|
+
_context24.prev = 1;
|
|
7667
|
+
_context24.next = 2;
|
|
7297
7668
|
return _promise.default.all(setUpStreamPromises);
|
|
7298
7669
|
case 2:
|
|
7299
|
-
|
|
7670
|
+
_context24.next = 4;
|
|
7300
7671
|
break;
|
|
7301
7672
|
case 3:
|
|
7302
|
-
|
|
7303
|
-
|
|
7304
|
-
_loggerProxy.default.logger.error("Meeting:index#addMedia():setUpLocalStreamReferences --> Error , ",
|
|
7305
|
-
throw
|
|
7673
|
+
_context24.prev = 3;
|
|
7674
|
+
_t15 = _context24["catch"](1);
|
|
7675
|
+
_loggerProxy.default.logger.error("Meeting:index#addMedia():setUpLocalStreamReferences --> Error , ", _t15);
|
|
7676
|
+
throw _t15;
|
|
7306
7677
|
case 4:
|
|
7307
7678
|
case "end":
|
|
7308
|
-
return
|
|
7679
|
+
return _context24.stop();
|
|
7309
7680
|
}
|
|
7310
|
-
},
|
|
7681
|
+
}, _callee24, this, [[1, 3]]);
|
|
7311
7682
|
}));
|
|
7312
7683
|
function setUpLocalStreamReferences(_x17) {
|
|
7313
7684
|
return _setUpLocalStreamReferences.apply(this, arguments);
|
|
@@ -7324,72 +7695,72 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7324
7695
|
}, {
|
|
7325
7696
|
key: "waitForMediaConnectionConnected",
|
|
7326
7697
|
value: (function () {
|
|
7327
|
-
var _waitForMediaConnectionConnected = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
7328
|
-
var iceConnected, _this$mediaProperties9, _this$mediaProperties0, _this$mediaProperties1, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, timedOutError,
|
|
7329
|
-
return _regenerator.default.wrap(function (
|
|
7330
|
-
while (1) switch (
|
|
7698
|
+
var _waitForMediaConnectionConnected = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee25() {
|
|
7699
|
+
var iceConnected, _this$mediaProperties9, _this$mediaProperties0, _this$mediaProperties1, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, timedOutError, _t16, _t17, _t18, _t19, _t20, _t21, _t22, _t23, _t24, _t25, _t26, _t27, _t28, _t29, _t30;
|
|
7700
|
+
return _regenerator.default.wrap(function (_context25) {
|
|
7701
|
+
while (1) switch (_context25.prev = _context25.next) {
|
|
7331
7702
|
case 0:
|
|
7332
|
-
|
|
7333
|
-
|
|
7703
|
+
_context25.prev = 0;
|
|
7704
|
+
_context25.next = 1;
|
|
7334
7705
|
return this.mediaProperties.waitForMediaConnectionConnected(this.correlationId);
|
|
7335
7706
|
case 1:
|
|
7336
|
-
|
|
7707
|
+
_context25.next = 5;
|
|
7337
7708
|
break;
|
|
7338
7709
|
case 2:
|
|
7339
|
-
|
|
7340
|
-
|
|
7341
|
-
iceConnected =
|
|
7710
|
+
_context25.prev = 2;
|
|
7711
|
+
_t16 = _context25["catch"](0);
|
|
7712
|
+
iceConnected = _t16.iceConnected;
|
|
7342
7713
|
if (this.hasMediaConnectionConnectedAtLeastOnce) {
|
|
7343
|
-
|
|
7714
|
+
_context25.next = 4;
|
|
7344
7715
|
break;
|
|
7345
7716
|
}
|
|
7346
|
-
|
|
7347
|
-
|
|
7348
|
-
|
|
7349
|
-
|
|
7350
|
-
|
|
7351
|
-
|
|
7352
|
-
|
|
7353
|
-
|
|
7354
|
-
|
|
7717
|
+
_t17 = this.webex.internal.newMetrics;
|
|
7718
|
+
_t18 = !this.turnServerUsed;
|
|
7719
|
+
_t19 = this.addMediaData.icePhaseCallback();
|
|
7720
|
+
_t20 = this.webex.internal.newMetrics.callDiagnosticMetrics;
|
|
7721
|
+
_t21 = _internalPluginMetrics.CallDiagnosticUtils;
|
|
7722
|
+
_t22 = ((_this$mediaProperties9 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties9 === void 0 ? void 0 : (_this$mediaProperties0 = _this$mediaProperties9.multistreamConnection) === null || _this$mediaProperties0 === void 0 ? void 0 : (_this$mediaProperties1 = _this$mediaProperties0.pc) === null || _this$mediaProperties1 === void 0 ? void 0 : (_this$mediaProperties10 = _this$mediaProperties1.pc) === null || _this$mediaProperties10 === void 0 ? void 0 : _this$mediaProperties10.signalingState) || ((_this$mediaProperties11 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties11 === void 0 ? void 0 : (_this$mediaProperties12 = _this$mediaProperties11.mediaConnection) === null || _this$mediaProperties12 === void 0 ? void 0 : (_this$mediaProperties13 = _this$mediaProperties12.pc) === null || _this$mediaProperties13 === void 0 ? void 0 : _this$mediaProperties13.signalingState) || 'unknown';
|
|
7723
|
+
_t23 = iceConnected;
|
|
7724
|
+
_t24 = this.turnServerUsed;
|
|
7725
|
+
_context25.next = 3;
|
|
7355
7726
|
return this.webex.meetings.reachability.isWebexMediaBackendUnreachable().catch(function () {
|
|
7356
7727
|
return false;
|
|
7357
7728
|
});
|
|
7358
7729
|
case 3:
|
|
7359
|
-
|
|
7360
|
-
|
|
7361
|
-
signalingState:
|
|
7362
|
-
iceConnected:
|
|
7363
|
-
turnServerUsed:
|
|
7364
|
-
unreachable:
|
|
7730
|
+
_t25 = _context25.sent;
|
|
7731
|
+
_t26 = _t21.generateClientErrorCodeForIceFailure.call(_t21, {
|
|
7732
|
+
signalingState: _t22,
|
|
7733
|
+
iceConnected: _t23,
|
|
7734
|
+
turnServerUsed: _t24,
|
|
7735
|
+
unreachable: _t25
|
|
7365
7736
|
});
|
|
7366
|
-
|
|
7367
|
-
clientErrorCode:
|
|
7737
|
+
_t27 = _t20.getErrorPayloadForClientErrorCode.call(_t20, {
|
|
7738
|
+
clientErrorCode: _t26
|
|
7368
7739
|
});
|
|
7369
|
-
|
|
7370
|
-
|
|
7371
|
-
canProceed:
|
|
7372
|
-
icePhase:
|
|
7373
|
-
errors:
|
|
7740
|
+
_t28 = [_t27];
|
|
7741
|
+
_t29 = {
|
|
7742
|
+
canProceed: _t18,
|
|
7743
|
+
icePhase: _t19,
|
|
7744
|
+
errors: _t28
|
|
7374
7745
|
};
|
|
7375
|
-
|
|
7746
|
+
_t30 = {
|
|
7376
7747
|
meetingId: this.id,
|
|
7377
|
-
rawError:
|
|
7748
|
+
rawError: _t16
|
|
7378
7749
|
};
|
|
7379
|
-
|
|
7750
|
+
_t17.submitClientEvent.call(_t17, {
|
|
7380
7751
|
name: 'client.ice.end',
|
|
7381
|
-
payload:
|
|
7382
|
-
options:
|
|
7752
|
+
payload: _t29,
|
|
7753
|
+
options: _t30
|
|
7383
7754
|
});
|
|
7384
7755
|
case 4:
|
|
7385
7756
|
timedOutError = new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
|
|
7386
|
-
timedOutError.cause =
|
|
7757
|
+
timedOutError.cause = _t16;
|
|
7387
7758
|
throw timedOutError;
|
|
7388
7759
|
case 5:
|
|
7389
7760
|
case "end":
|
|
7390
|
-
return
|
|
7761
|
+
return _context25.stop();
|
|
7391
7762
|
}
|
|
7392
|
-
},
|
|
7763
|
+
}, _callee25, this, [[0, 2]]);
|
|
7393
7764
|
}));
|
|
7394
7765
|
function waitForMediaConnectionConnected() {
|
|
7395
7766
|
return _waitForMediaConnectionConnected.apply(this, arguments);
|
|
@@ -7456,19 +7827,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7456
7827
|
}, {
|
|
7457
7828
|
key: "waitForRemoteSDPAnswer",
|
|
7458
7829
|
value: (function () {
|
|
7459
|
-
var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
7830
|
+
var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee26() {
|
|
7460
7831
|
var _this44 = this;
|
|
7461
7832
|
var LOG_HEADER, deferSDPAnswer;
|
|
7462
|
-
return _regenerator.default.wrap(function (
|
|
7463
|
-
while (1) switch (
|
|
7833
|
+
return _regenerator.default.wrap(function (_context26) {
|
|
7834
|
+
while (1) switch (_context26.prev = _context26.next) {
|
|
7464
7835
|
case 0:
|
|
7465
7836
|
LOG_HEADER = 'Meeting:index#addMedia():waitForRemoteSDPAnswer -->';
|
|
7466
7837
|
if (this.deferSDPAnswer) {
|
|
7467
|
-
|
|
7838
|
+
_context26.next = 1;
|
|
7468
7839
|
break;
|
|
7469
7840
|
}
|
|
7470
7841
|
_loggerProxy.default.logger.warn("".concat(LOG_HEADER, " offer not created yet"));
|
|
7471
|
-
return
|
|
7842
|
+
return _context26.abrupt("return", _promise.default.reject(new Error('waitForRemoteSDPAnswer() called before local sdp offer created')));
|
|
7472
7843
|
case 1:
|
|
7473
7844
|
deferSDPAnswer = this.deferSDPAnswer;
|
|
7474
7845
|
this.sdpResponseTimer = setTimeout(function () {
|
|
@@ -7494,12 +7865,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7494
7865
|
deferSDPAnswer.reject(error);
|
|
7495
7866
|
}, _constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT);
|
|
7496
7867
|
_loggerProxy.default.logger.info("".concat(LOG_HEADER, " waiting for REMOTE SDP ANSWER..."));
|
|
7497
|
-
return
|
|
7868
|
+
return _context26.abrupt("return", deferSDPAnswer.promise);
|
|
7498
7869
|
case 2:
|
|
7499
7870
|
case "end":
|
|
7500
|
-
return
|
|
7871
|
+
return _context26.stop();
|
|
7501
7872
|
}
|
|
7502
|
-
},
|
|
7873
|
+
}, _callee26, this);
|
|
7503
7874
|
}));
|
|
7504
7875
|
function waitForRemoteSDPAnswer() {
|
|
7505
7876
|
return _waitForRemoteSDPAnswer.apply(this, arguments);
|
|
@@ -7518,28 +7889,28 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7518
7889
|
}, {
|
|
7519
7890
|
key: "retryEstablishMediaConnectionWithForcedTurnDiscovery",
|
|
7520
7891
|
value: (function () {
|
|
7521
|
-
var _retryEstablishMediaConnectionWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
7522
|
-
var LOG_HEADER,
|
|
7523
|
-
return _regenerator.default.wrap(function (
|
|
7524
|
-
while (1) switch (
|
|
7892
|
+
var _retryEstablishMediaConnectionWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee27(remoteMediaManagerConfig, bundlePolicy) {
|
|
7893
|
+
var LOG_HEADER, _t31;
|
|
7894
|
+
return _regenerator.default.wrap(function (_context27) {
|
|
7895
|
+
while (1) switch (_context27.prev = _context27.next) {
|
|
7525
7896
|
case 0:
|
|
7526
7897
|
LOG_HEADER = 'Meeting:index#addMedia():retryEstablishMediaConnectionWithForcedTurnDiscovery -->';
|
|
7527
|
-
|
|
7528
|
-
|
|
7898
|
+
_context27.prev = 1;
|
|
7899
|
+
_context27.next = 2;
|
|
7529
7900
|
return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, true);
|
|
7530
7901
|
case 2:
|
|
7531
|
-
|
|
7902
|
+
_context27.next = 4;
|
|
7532
7903
|
break;
|
|
7533
7904
|
case 3:
|
|
7534
|
-
|
|
7535
|
-
|
|
7536
|
-
_loggerProxy.default.logger.error("".concat(LOG_HEADER, " retry with TURN-TLS failed, media connection unable to connect, "),
|
|
7537
|
-
throw
|
|
7905
|
+
_context27.prev = 3;
|
|
7906
|
+
_t31 = _context27["catch"](1);
|
|
7907
|
+
_loggerProxy.default.logger.error("".concat(LOG_HEADER, " retry with TURN-TLS failed, media connection unable to connect, "), _t31);
|
|
7908
|
+
throw _t31;
|
|
7538
7909
|
case 4:
|
|
7539
7910
|
case "end":
|
|
7540
|
-
return
|
|
7911
|
+
return _context27.stop();
|
|
7541
7912
|
}
|
|
7542
|
-
},
|
|
7913
|
+
}, _callee27, this, [[1, 3]]);
|
|
7543
7914
|
}));
|
|
7544
7915
|
function retryEstablishMediaConnectionWithForcedTurnDiscovery(_x18, _x19) {
|
|
7545
7916
|
return _retryEstablishMediaConnectionWithForcedTurnDiscovery.apply(this, arguments);
|
|
@@ -7559,14 +7930,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7559
7930
|
}, {
|
|
7560
7931
|
key: "retryWithForcedTurnDiscovery",
|
|
7561
7932
|
value: (function () {
|
|
7562
|
-
var _retryWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
7933
|
+
var _retryWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee28(remoteMediaManagerConfig, bundlePolicy) {
|
|
7563
7934
|
var LOG_HEADER;
|
|
7564
|
-
return _regenerator.default.wrap(function (
|
|
7565
|
-
while (1) switch (
|
|
7935
|
+
return _regenerator.default.wrap(function (_context28) {
|
|
7936
|
+
while (1) switch (_context28.prev = _context28.next) {
|
|
7566
7937
|
case 0:
|
|
7567
7938
|
this.addMediaData.retriedWithTurnServer = true;
|
|
7568
7939
|
LOG_HEADER = 'Meeting:index#addMedia():retryWithForcedTurnDiscovery -->';
|
|
7569
|
-
|
|
7940
|
+
_context28.next = 1;
|
|
7570
7941
|
return this.cleanUpBeforeRetryWithTurnServer();
|
|
7571
7942
|
case 1:
|
|
7572
7943
|
_metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_RETRY, {
|
|
@@ -7576,22 +7947,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7576
7947
|
reason: 'forcingTurnTls'
|
|
7577
7948
|
});
|
|
7578
7949
|
if (!(this.state === _constants.MEETING_STATE.STATES.LEFT)) {
|
|
7579
|
-
|
|
7950
|
+
_context28.next = 2;
|
|
7580
7951
|
break;
|
|
7581
7952
|
}
|
|
7582
7953
|
_loggerProxy.default.logger.info("".concat(LOG_HEADER, " meeting state was LEFT after first attempt to establish media connection. Attempting to rejoin. "));
|
|
7583
|
-
|
|
7954
|
+
_context28.next = 2;
|
|
7584
7955
|
return this.join({
|
|
7585
7956
|
rejoin: true
|
|
7586
7957
|
});
|
|
7587
7958
|
case 2:
|
|
7588
|
-
|
|
7959
|
+
_context28.next = 3;
|
|
7589
7960
|
return this.retryEstablishMediaConnectionWithForcedTurnDiscovery(remoteMediaManagerConfig, bundlePolicy);
|
|
7590
7961
|
case 3:
|
|
7591
7962
|
case "end":
|
|
7592
|
-
return
|
|
7963
|
+
return _context28.stop();
|
|
7593
7964
|
}
|
|
7594
|
-
},
|
|
7965
|
+
}, _callee28, this);
|
|
7595
7966
|
}));
|
|
7596
7967
|
function retryWithForcedTurnDiscovery(_x20, _x21) {
|
|
7597
7968
|
return _retryWithForcedTurnDiscovery.apply(this, arguments);
|
|
@@ -7613,30 +7984,30 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7613
7984
|
}, {
|
|
7614
7985
|
key: "handleWaitForMediaConnectionConnectedError",
|
|
7615
7986
|
value: (function () {
|
|
7616
|
-
var _handleWaitForMediaConnectionConnectedError = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
7987
|
+
var _handleWaitForMediaConnectionConnectedError = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee29(error, remoteMediaManagerConfig, bundlePolicy) {
|
|
7617
7988
|
var LOG_HEADER;
|
|
7618
|
-
return _regenerator.default.wrap(function (
|
|
7619
|
-
while (1) switch (
|
|
7989
|
+
return _regenerator.default.wrap(function (_context29) {
|
|
7990
|
+
while (1) switch (_context29.prev = _context29.next) {
|
|
7620
7991
|
case 0:
|
|
7621
7992
|
LOG_HEADER = 'Meeting:index#addMedia():handleWaitForMediaConnectionConnectedError -->'; // @ts-ignore - config coming from registerPlugin
|
|
7622
7993
|
if (this.turnServerUsed) {
|
|
7623
|
-
|
|
7994
|
+
_context29.next = 2;
|
|
7624
7995
|
break;
|
|
7625
7996
|
}
|
|
7626
7997
|
_loggerProxy.default.logger.info("".concat(LOG_HEADER, " error waiting for media to connect on UDP, TCP, retrying using TURN-TLS, "), error);
|
|
7627
|
-
|
|
7998
|
+
_context29.next = 1;
|
|
7628
7999
|
return this.retryWithForcedTurnDiscovery(remoteMediaManagerConfig, bundlePolicy);
|
|
7629
8000
|
case 1:
|
|
7630
|
-
|
|
8001
|
+
_context29.next = 3;
|
|
7631
8002
|
break;
|
|
7632
8003
|
case 2:
|
|
7633
8004
|
_loggerProxy.default.logger.error("".concat(LOG_HEADER, " error waiting for media to connect using UDP, TCP and TURN-TLS"), error);
|
|
7634
8005
|
throw new _webexErrors.AddMediaFailed(error);
|
|
7635
8006
|
case 3:
|
|
7636
8007
|
case "end":
|
|
7637
|
-
return
|
|
8008
|
+
return _context29.stop();
|
|
7638
8009
|
}
|
|
7639
|
-
},
|
|
8010
|
+
}, _callee29, this);
|
|
7640
8011
|
}));
|
|
7641
8012
|
function handleWaitForMediaConnectionConnectedError(_x22, _x23, _x24) {
|
|
7642
8013
|
return _handleWaitForMediaConnectionConnectedError.apply(this, arguments);
|
|
@@ -7654,20 +8025,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7654
8025
|
}, {
|
|
7655
8026
|
key: "doTurnDiscovery",
|
|
7656
8027
|
value: (function () {
|
|
7657
|
-
var _doTurnDiscovery = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
8028
|
+
var _doTurnDiscovery = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee30(isReconnecting, isForced) {
|
|
7658
8029
|
var cdl, turnDiscoveryResult;
|
|
7659
|
-
return _regenerator.default.wrap(function (
|
|
7660
|
-
while (1) switch (
|
|
8030
|
+
return _regenerator.default.wrap(function (_context30) {
|
|
8031
|
+
while (1) switch (_context30.prev = _context30.next) {
|
|
7661
8032
|
case 0:
|
|
7662
8033
|
// @ts-ignore
|
|
7663
8034
|
cdl = this.webex.internal.newMetrics.callDiagnosticLatencies; // @ts-ignore
|
|
7664
8035
|
this.webex.internal.newMetrics.submitInternalEvent({
|
|
7665
8036
|
name: 'internal.client.add-media.turn-discovery.start'
|
|
7666
8037
|
});
|
|
7667
|
-
|
|
8038
|
+
_context30.next = 1;
|
|
7668
8039
|
return this.roap.doTurnDiscovery(this, isReconnecting, isForced);
|
|
7669
8040
|
case 1:
|
|
7670
|
-
turnDiscoveryResult =
|
|
8041
|
+
turnDiscoveryResult = _context30.sent;
|
|
7671
8042
|
this.turnDiscoverySkippedReason = turnDiscoveryResult === null || turnDiscoveryResult === void 0 ? void 0 : turnDiscoveryResult.turnDiscoverySkippedReason;
|
|
7672
8043
|
this.turnServerUsed = !this.turnDiscoverySkippedReason;
|
|
7673
8044
|
|
|
@@ -7683,12 +8054,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7683
8054
|
retriedWithTurnServer: this.addMediaData.retriedWithTurnServer
|
|
7684
8055
|
});
|
|
7685
8056
|
}
|
|
7686
|
-
return
|
|
8057
|
+
return _context30.abrupt("return", turnDiscoveryResult);
|
|
7687
8058
|
case 2:
|
|
7688
8059
|
case "end":
|
|
7689
|
-
return
|
|
8060
|
+
return _context30.stop();
|
|
7690
8061
|
}
|
|
7691
|
-
},
|
|
8062
|
+
}, _callee30, this);
|
|
7692
8063
|
}));
|
|
7693
8064
|
function doTurnDiscovery(_x25, _x26) {
|
|
7694
8065
|
return _doTurnDiscovery.apply(this, arguments);
|
|
@@ -7709,35 +8080,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7709
8080
|
}, {
|
|
7710
8081
|
key: "establishMediaConnection",
|
|
7711
8082
|
value: (function () {
|
|
7712
|
-
var _establishMediaConnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
8083
|
+
var _establishMediaConnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee31(remoteMediaManagerConfig, bundlePolicy, isForced, turnServerInfo) {
|
|
7713
8084
|
var _this$locusMediaReque;
|
|
7714
|
-
var LOG_HEADER, isReconnecting, _yield$this$doTurnDis, mc,
|
|
7715
|
-
return _regenerator.default.wrap(function (
|
|
7716
|
-
while (1) switch (
|
|
8085
|
+
var LOG_HEADER, isReconnecting, _yield$this$doTurnDis, mc, _t32, _t33;
|
|
8086
|
+
return _regenerator.default.wrap(function (_context31) {
|
|
8087
|
+
while (1) switch (_context31.prev = _context31.next) {
|
|
7717
8088
|
case 0:
|
|
7718
8089
|
LOG_HEADER = 'Meeting:index#addMedia():establishMediaConnection -->';
|
|
7719
8090
|
isReconnecting = this.isMoveToInProgress || !!((_this$locusMediaReque = this.locusMediaRequest) !== null && _this$locusMediaReque !== void 0 && _this$locusMediaReque.isConfluenceCreated()); // We are forcing turn discovery if the case is moveTo and a turn server was used already
|
|
7720
8091
|
if (this.isMoveToInProgress && this.turnServerUsed) {
|
|
7721
8092
|
isForced = true;
|
|
7722
8093
|
}
|
|
7723
|
-
|
|
8094
|
+
_context31.prev = 1;
|
|
7724
8095
|
if (turnServerInfo) {
|
|
7725
|
-
|
|
8096
|
+
_context31.next = 3;
|
|
7726
8097
|
break;
|
|
7727
8098
|
}
|
|
7728
|
-
|
|
8099
|
+
_context31.next = 2;
|
|
7729
8100
|
return this.doTurnDiscovery(isReconnecting, isForced);
|
|
7730
8101
|
case 2:
|
|
7731
|
-
_yield$this$doTurnDis =
|
|
8102
|
+
_yield$this$doTurnDis = _context31.sent;
|
|
7732
8103
|
turnServerInfo = _yield$this$doTurnDis.turnServerInfo;
|
|
7733
8104
|
case 3:
|
|
7734
|
-
|
|
8105
|
+
_context31.next = 4;
|
|
7735
8106
|
return this.createMediaConnection(turnServerInfo, bundlePolicy);
|
|
7736
8107
|
case 4:
|
|
7737
|
-
mc =
|
|
8108
|
+
mc = _context31.sent;
|
|
7738
8109
|
_loggerProxy.default.logger.info("".concat(LOG_HEADER, " media connection created this.isMultistream=").concat(this.isMultistream));
|
|
7739
8110
|
if (!this.isMultistream) {
|
|
7740
|
-
|
|
8111
|
+
_context31.next = 5;
|
|
7741
8112
|
break;
|
|
7742
8113
|
}
|
|
7743
8114
|
this.remoteMediaManager = new _remoteMediaManager.RemoteMediaManager(this.receiveSlotManager, this.mediaRequestManagers, remoteMediaManagerConfig);
|
|
@@ -7745,40 +8116,40 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7745
8116
|
this.forwardEvent(this.remoteMediaManager, _remoteMediaManager.Event.InterpretationAudioCreated, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_INTERPRETATION_AUDIO_CREATED);
|
|
7746
8117
|
this.forwardEvent(this.remoteMediaManager, _remoteMediaManager.Event.ScreenShareAudioCreated, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED);
|
|
7747
8118
|
this.forwardEvent(this.remoteMediaManager, _remoteMediaManager.Event.VideoLayoutChanged, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED);
|
|
7748
|
-
|
|
8119
|
+
_context31.next = 5;
|
|
7749
8120
|
return this.remoteMediaManager.start();
|
|
7750
8121
|
case 5:
|
|
7751
|
-
|
|
8122
|
+
_context31.next = 6;
|
|
7752
8123
|
return mc.initiateOffer();
|
|
7753
8124
|
case 6:
|
|
7754
|
-
|
|
8125
|
+
_context31.next = 7;
|
|
7755
8126
|
return this.waitForRemoteSDPAnswer();
|
|
7756
8127
|
case 7:
|
|
7757
8128
|
this.handleMediaLogging(this.mediaProperties);
|
|
7758
|
-
|
|
8129
|
+
_context31.next = 9;
|
|
7759
8130
|
break;
|
|
7760
8131
|
case 8:
|
|
7761
|
-
|
|
7762
|
-
|
|
7763
|
-
_loggerProxy.default.logger.error("".concat(LOG_HEADER, " error establishing media connection, "),
|
|
7764
|
-
throw
|
|
8132
|
+
_context31.prev = 8;
|
|
8133
|
+
_t32 = _context31["catch"](1);
|
|
8134
|
+
_loggerProxy.default.logger.error("".concat(LOG_HEADER, " error establishing media connection, "), _t32);
|
|
8135
|
+
throw _t32;
|
|
7765
8136
|
case 9:
|
|
7766
|
-
|
|
7767
|
-
|
|
8137
|
+
_context31.prev = 9;
|
|
8138
|
+
_context31.next = 10;
|
|
7768
8139
|
return this.waitForMediaConnectionConnected();
|
|
7769
8140
|
case 10:
|
|
7770
|
-
|
|
8141
|
+
_context31.next = 12;
|
|
7771
8142
|
break;
|
|
7772
8143
|
case 11:
|
|
7773
|
-
|
|
7774
|
-
|
|
7775
|
-
|
|
7776
|
-
return this.handleWaitForMediaConnectionConnectedError(
|
|
8144
|
+
_context31.prev = 11;
|
|
8145
|
+
_t33 = _context31["catch"](9);
|
|
8146
|
+
_context31.next = 12;
|
|
8147
|
+
return this.handleWaitForMediaConnectionConnectedError(_t33, remoteMediaManagerConfig, bundlePolicy);
|
|
7777
8148
|
case 12:
|
|
7778
8149
|
case "end":
|
|
7779
|
-
return
|
|
8150
|
+
return _context31.stop();
|
|
7780
8151
|
}
|
|
7781
|
-
},
|
|
8152
|
+
}, _callee31, this, [[1, 8], [9, 11]]);
|
|
7782
8153
|
}));
|
|
7783
8154
|
function establishMediaConnection(_x27, _x28, _x29, _x30) {
|
|
7784
8155
|
return _establishMediaConnection.apply(this, arguments);
|
|
@@ -7795,16 +8166,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7795
8166
|
}, {
|
|
7796
8167
|
key: "cleanUpOnAddMediaFailure",
|
|
7797
8168
|
value: (function () {
|
|
7798
|
-
var _cleanUpOnAddMediaFailure = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
8169
|
+
var _cleanUpOnAddMediaFailure = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee32() {
|
|
7799
8170
|
var _this$networkQualityM, _this$statsMonitor;
|
|
7800
|
-
return _regenerator.default.wrap(function (
|
|
7801
|
-
while (1) switch (
|
|
8171
|
+
return _regenerator.default.wrap(function (_context32) {
|
|
8172
|
+
while (1) switch (_context32.prev = _context32.next) {
|
|
7802
8173
|
case 0:
|
|
7803
8174
|
if (!this.statsAnalyzer) {
|
|
7804
|
-
|
|
8175
|
+
_context32.next = 1;
|
|
7805
8176
|
break;
|
|
7806
8177
|
}
|
|
7807
|
-
|
|
8178
|
+
_context32.next = 1;
|
|
7808
8179
|
return this.statsAnalyzer.stopAnalyzer();
|
|
7809
8180
|
case 1:
|
|
7810
8181
|
this.statsAnalyzer = null;
|
|
@@ -7815,7 +8186,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7815
8186
|
|
|
7816
8187
|
// when media fails, we want to upload a webrtc dump to see whats going on
|
|
7817
8188
|
// this function is async, but returns once the stats have been gathered
|
|
7818
|
-
|
|
8189
|
+
_context32.next = 2;
|
|
7819
8190
|
return this.forceSendStatsReport({
|
|
7820
8191
|
callFrom: 'addMedia'
|
|
7821
8192
|
});
|
|
@@ -7826,9 +8197,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7826
8197
|
}
|
|
7827
8198
|
case 3:
|
|
7828
8199
|
case "end":
|
|
7829
|
-
return
|
|
8200
|
+
return _context32.stop();
|
|
7830
8201
|
}
|
|
7831
|
-
},
|
|
8202
|
+
}, _callee32, this);
|
|
7832
8203
|
}));
|
|
7833
8204
|
function cleanUpOnAddMediaFailure() {
|
|
7834
8205
|
return _cleanUpOnAddMediaFailure.apply(this, arguments);
|
|
@@ -7846,16 +8217,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7846
8217
|
}, {
|
|
7847
8218
|
key: "downgradeFromMultistreamToTranscoded",
|
|
7848
8219
|
value: (function () {
|
|
7849
|
-
var _downgradeFromMultistreamToTranscoded = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
8220
|
+
var _downgradeFromMultistreamToTranscoded = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee33() {
|
|
7850
8221
|
var _this$networkQualityM2, _this$statsMonitor2, _this$locusMediaReque2;
|
|
7851
|
-
return _regenerator.default.wrap(function (
|
|
7852
|
-
while (1) switch (
|
|
8222
|
+
return _regenerator.default.wrap(function (_context33) {
|
|
8223
|
+
while (1) switch (_context33.prev = _context33.next) {
|
|
7853
8224
|
case 0:
|
|
7854
8225
|
if (!this.statsAnalyzer) {
|
|
7855
|
-
|
|
8226
|
+
_context33.next = 1;
|
|
7856
8227
|
break;
|
|
7857
8228
|
}
|
|
7858
|
-
|
|
8229
|
+
_context33.next = 1;
|
|
7859
8230
|
return this.statsAnalyzer.stopAnalyzer();
|
|
7860
8231
|
case 1:
|
|
7861
8232
|
this.statsAnalyzer = null;
|
|
@@ -7873,9 +8244,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7873
8244
|
this.createStatsAnalyzer();
|
|
7874
8245
|
case 2:
|
|
7875
8246
|
case "end":
|
|
7876
|
-
return
|
|
8247
|
+
return _context33.stop();
|
|
7877
8248
|
}
|
|
7878
|
-
},
|
|
8249
|
+
}, _callee33, this);
|
|
7879
8250
|
}));
|
|
7880
8251
|
function downgradeFromMultistreamToTranscoded() {
|
|
7881
8252
|
return _downgradeFromMultistreamToTranscoded.apply(this, arguments);
|
|
@@ -7893,11 +8264,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7893
8264
|
}, {
|
|
7894
8265
|
key: "cleanUpBeforeRetryWithTurnServer",
|
|
7895
8266
|
value: (function () {
|
|
7896
|
-
var _cleanUpBeforeRetryWithTurnServer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
7897
|
-
return _regenerator.default.wrap(function (
|
|
7898
|
-
while (1) switch (
|
|
8267
|
+
var _cleanUpBeforeRetryWithTurnServer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee34() {
|
|
8268
|
+
return _regenerator.default.wrap(function (_context34) {
|
|
8269
|
+
while (1) switch (_context34.prev = _context34.next) {
|
|
7899
8270
|
case 0:
|
|
7900
|
-
|
|
8271
|
+
_context34.next = 1;
|
|
7901
8272
|
return this.forceSendStatsReport({
|
|
7902
8273
|
callFrom: 'cleanUpBeforeRetryWithTurnServer'
|
|
7903
8274
|
});
|
|
@@ -7917,9 +8288,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7917
8288
|
}
|
|
7918
8289
|
case 2:
|
|
7919
8290
|
case "end":
|
|
7920
|
-
return
|
|
8291
|
+
return _context34.stop();
|
|
7921
8292
|
}
|
|
7922
|
-
},
|
|
8293
|
+
}, _callee34, this);
|
|
7923
8294
|
}));
|
|
7924
8295
|
function cleanUpBeforeRetryWithTurnServer() {
|
|
7925
8296
|
return _cleanUpBeforeRetryWithTurnServer.apply(this, arguments);
|
|
@@ -7929,35 +8300,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7929
8300
|
}, {
|
|
7930
8301
|
key: "cleanUpBeforeReconnection",
|
|
7931
8302
|
value: function () {
|
|
7932
|
-
var _cleanUpBeforeReconnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
7933
|
-
var
|
|
7934
|
-
return _regenerator.default.wrap(function (
|
|
7935
|
-
while (1) switch (
|
|
8303
|
+
var _cleanUpBeforeReconnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee35() {
|
|
8304
|
+
var _t34;
|
|
8305
|
+
return _regenerator.default.wrap(function (_context35) {
|
|
8306
|
+
while (1) switch (_context35.prev = _context35.next) {
|
|
7936
8307
|
case 0:
|
|
7937
|
-
|
|
7938
|
-
|
|
8308
|
+
_context35.prev = 0;
|
|
8309
|
+
_context35.next = 1;
|
|
7939
8310
|
return this.forceSendStatsReport({
|
|
7940
8311
|
callFrom: 'cleanUpBeforeReconnection'
|
|
7941
8312
|
});
|
|
7942
8313
|
case 1:
|
|
7943
8314
|
if (!this.statsAnalyzer) {
|
|
7944
|
-
|
|
8315
|
+
_context35.next = 2;
|
|
7945
8316
|
break;
|
|
7946
8317
|
}
|
|
7947
|
-
|
|
8318
|
+
_context35.next = 2;
|
|
7948
8319
|
return this.statsAnalyzer.stopAnalyzer();
|
|
7949
8320
|
case 2:
|
|
7950
|
-
|
|
8321
|
+
_context35.next = 4;
|
|
7951
8322
|
break;
|
|
7952
8323
|
case 3:
|
|
7953
|
-
|
|
7954
|
-
|
|
7955
|
-
_loggerProxy.default.logger.error('Meeting:index#cleanUpBeforeReconnection --> Error during cleanup: ',
|
|
8324
|
+
_context35.prev = 3;
|
|
8325
|
+
_t34 = _context35["catch"](0);
|
|
8326
|
+
_loggerProxy.default.logger.error('Meeting:index#cleanUpBeforeReconnection --> Error during cleanup: ', _t34);
|
|
7956
8327
|
case 4:
|
|
7957
8328
|
case "end":
|
|
7958
|
-
return
|
|
8329
|
+
return _context35.stop();
|
|
7959
8330
|
}
|
|
7960
|
-
},
|
|
8331
|
+
}, _callee35, this, [[0, 3]]);
|
|
7961
8332
|
}));
|
|
7962
8333
|
function cleanUpBeforeReconnection() {
|
|
7963
8334
|
return _cleanUpBeforeReconnection.apply(this, arguments);
|
|
@@ -8025,7 +8396,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
8025
8396
|
}, {
|
|
8026
8397
|
key: "addMediaInternal",
|
|
8027
8398
|
value: (function () {
|
|
8028
|
-
var _addMediaInternal = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
8399
|
+
var _addMediaInternal = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee36(icePhaseCallback, turnServerInfo, forceTurnDiscovery) {
|
|
8029
8400
|
var options,
|
|
8030
8401
|
LOG_HEADER,
|
|
8031
8402
|
localStreams,
|
|
@@ -8087,26 +8458,26 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
8087
8458
|
_selectedCandidatePairChanges,
|
|
8088
8459
|
_numTransports,
|
|
8089
8460
|
_iceCandidateErrors,
|
|
8090
|
-
|
|
8091
|
-
|
|
8092
|
-
|
|
8093
|
-
return _regenerator.default.wrap(function (
|
|
8094
|
-
while (1) switch (
|
|
8461
|
+
_args36 = arguments,
|
|
8462
|
+
_t35,
|
|
8463
|
+
_t36;
|
|
8464
|
+
return _regenerator.default.wrap(function (_context36) {
|
|
8465
|
+
while (1) switch (_context36.prev = _context36.next) {
|
|
8095
8466
|
case 0:
|
|
8096
|
-
options =
|
|
8467
|
+
options = _args36.length > 3 && _args36[3] !== undefined ? _args36[3] : {};
|
|
8097
8468
|
this.addMediaData.retriedWithTurnServer = false;
|
|
8098
8469
|
this.addMediaData.icePhaseCallback = icePhaseCallback;
|
|
8099
8470
|
this.hasMediaConnectionConnectedAtLeastOnce = false;
|
|
8100
8471
|
LOG_HEADER = 'Meeting:index#addMedia -->';
|
|
8101
8472
|
_loggerProxy.default.logger.info("".concat(LOG_HEADER, " called with: options=").concat((0, _stringify.default)(options), ", turnServerInfo=").concat((0, _stringify.default)(turnServerInfo), ", forceTurnDiscovery=").concat(forceTurnDiscovery));
|
|
8102
8473
|
if (!(options.allowMediaInLobby !== true && this.meetingState !== _constants.FULL_STATE.ACTIVE)) {
|
|
8103
|
-
|
|
8474
|
+
_context36.next = 1;
|
|
8104
8475
|
break;
|
|
8105
8476
|
}
|
|
8106
8477
|
throw new _webexErrors.MeetingNotActiveError();
|
|
8107
8478
|
case 1:
|
|
8108
8479
|
if (!_util2.default.isUserInLeftState(this.locusInfo)) {
|
|
8109
|
-
|
|
8480
|
+
_context36.next = 2;
|
|
8110
8481
|
break;
|
|
8111
8482
|
}
|
|
8112
8483
|
throw new _webexErrors.UserNotJoinedError();
|
|
@@ -8123,7 +8494,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
8123
8494
|
ipver = _util2.default.getIpVersion(this.webex); // used just for metrics
|
|
8124
8495
|
// If the user is unjoined or guest waiting in lobby dont allow the user to addMedia
|
|
8125
8496
|
if (!(this.isUserUnadmitted && !this.wirelessShare && !this.allowMediaInLobby)) {
|
|
8126
|
-
|
|
8497
|
+
_context36.next = 3;
|
|
8127
8498
|
break;
|
|
8128
8499
|
}
|
|
8129
8500
|
throw new _webexErrors.UserInLobbyError();
|
|
@@ -8167,62 +8538,62 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
8167
8538
|
this.audio = (0, _muteState.createMuteState)(_constants.AUDIO, this, audioEnabled);
|
|
8168
8539
|
this.video = (0, _muteState.createMuteState)(_constants.VIDEO, this, videoEnabled);
|
|
8169
8540
|
this.brbState = (0, _brbState.createBrbState)(this, false);
|
|
8170
|
-
|
|
8541
|
+
_context36.prev = 4;
|
|
8171
8542
|
if (!(allowPublishMediaInLobby || !this.isUserUnadmitted)) {
|
|
8172
|
-
|
|
8543
|
+
_context36.next = 5;
|
|
8173
8544
|
break;
|
|
8174
8545
|
}
|
|
8175
|
-
|
|
8546
|
+
_context36.next = 5;
|
|
8176
8547
|
return this.setUpLocalStreamReferences(localStreams);
|
|
8177
8548
|
case 5:
|
|
8178
8549
|
this.setMercuryListener();
|
|
8179
8550
|
this.createStatsAnalyzer();
|
|
8180
|
-
|
|
8181
|
-
|
|
8551
|
+
_context36.prev = 6;
|
|
8552
|
+
_context36.next = 7;
|
|
8182
8553
|
return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, forceTurnDiscovery, turnServerInfo);
|
|
8183
8554
|
case 7:
|
|
8184
|
-
|
|
8555
|
+
_context36.next = 12;
|
|
8185
8556
|
break;
|
|
8186
8557
|
case 8:
|
|
8187
|
-
|
|
8188
|
-
|
|
8189
|
-
if (!(
|
|
8190
|
-
|
|
8558
|
+
_context36.prev = 8;
|
|
8559
|
+
_t35 = _context36["catch"](6);
|
|
8560
|
+
if (!(_t35 instanceof _multistreamNotSupportedError.default)) {
|
|
8561
|
+
_context36.next = 11;
|
|
8191
8562
|
break;
|
|
8192
8563
|
}
|
|
8193
8564
|
_loggerProxy.default.logger.warn("".concat(LOG_HEADER, " we asked for multistream backend (Homer), but got transcoded backend, recreating media connection..."));
|
|
8194
|
-
|
|
8565
|
+
_context36.next = 9;
|
|
8195
8566
|
return this.downgradeFromMultistreamToTranscoded();
|
|
8196
8567
|
case 9:
|
|
8197
|
-
|
|
8568
|
+
_context36.next = 10;
|
|
8198
8569
|
return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, true, undefined);
|
|
8199
8570
|
case 10:
|
|
8200
|
-
|
|
8571
|
+
_context36.next = 12;
|
|
8201
8572
|
break;
|
|
8202
8573
|
case 11:
|
|
8203
|
-
throw
|
|
8574
|
+
throw _t35;
|
|
8204
8575
|
case 12:
|
|
8205
8576
|
_loggerProxy.default.logger.info("".concat(LOG_HEADER, " media connected, finalizing..."));
|
|
8206
8577
|
if (!this.mediaProperties.hasLocalShareStream()) {
|
|
8207
|
-
|
|
8578
|
+
_context36.next = 13;
|
|
8208
8579
|
break;
|
|
8209
8580
|
}
|
|
8210
|
-
|
|
8581
|
+
_context36.next = 13;
|
|
8211
8582
|
return this.enqueueScreenShareFloorRequest();
|
|
8212
8583
|
case 13:
|
|
8213
|
-
|
|
8584
|
+
_context36.next = 14;
|
|
8214
8585
|
return this.mediaProperties.getCurrentConnectionInfo();
|
|
8215
8586
|
case 14:
|
|
8216
|
-
_yield$this$mediaProp =
|
|
8587
|
+
_yield$this$mediaProp = _context36.sent;
|
|
8217
8588
|
connectionType = _yield$this$mediaProp.connectionType;
|
|
8218
8589
|
ipVersion = _yield$this$mediaProp.ipVersion;
|
|
8219
8590
|
selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
|
|
8220
8591
|
numTransports = _yield$this$mediaProp.numTransports;
|
|
8221
8592
|
iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
|
|
8222
|
-
|
|
8593
|
+
_context36.next = 15;
|
|
8223
8594
|
return this.getMediaReachabilityMetricFields();
|
|
8224
8595
|
case 15:
|
|
8225
|
-
reachabilityMetrics =
|
|
8596
|
+
reachabilityMetrics = _context36.sent;
|
|
8226
8597
|
_metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
|
|
8227
8598
|
correlation_id: this.correlationId,
|
|
8228
8599
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -8252,31 +8623,31 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
8252
8623
|
// We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
|
|
8253
8624
|
(_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
|
|
8254
8625
|
this.startPeriodicLogUpload();
|
|
8255
|
-
|
|
8626
|
+
_context36.next = 20;
|
|
8256
8627
|
break;
|
|
8257
8628
|
case 16:
|
|
8258
|
-
|
|
8259
|
-
|
|
8260
|
-
_loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "),
|
|
8629
|
+
_context36.prev = 16;
|
|
8630
|
+
_t36 = _context36["catch"](4);
|
|
8631
|
+
_loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _t36);
|
|
8261
8632
|
|
|
8262
8633
|
// @ts-ignore
|
|
8263
|
-
|
|
8634
|
+
_context36.next = 17;
|
|
8264
8635
|
return this.getMediaReachabilityMetricFields();
|
|
8265
8636
|
case 17:
|
|
8266
|
-
_reachabilityMetrics =
|
|
8267
|
-
|
|
8637
|
+
_reachabilityMetrics = _context36.sent;
|
|
8638
|
+
_context36.next = 18;
|
|
8268
8639
|
return this.mediaProperties.getCurrentConnectionInfo();
|
|
8269
8640
|
case 18:
|
|
8270
|
-
_yield$this$mediaProp2 =
|
|
8641
|
+
_yield$this$mediaProp2 = _context36.sent;
|
|
8271
8642
|
_selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
|
|
8272
8643
|
_numTransports = _yield$this$mediaProp2.numTransports;
|
|
8273
8644
|
_iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
|
|
8274
8645
|
_metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_FAILURE, _objectSpread(_objectSpread(_objectSpread({
|
|
8275
8646
|
correlation_id: this.correlationId,
|
|
8276
8647
|
locus_id: this.locusUrl.split('/').pop(),
|
|
8277
|
-
reason:
|
|
8278
|
-
stack:
|
|
8279
|
-
code:
|
|
8648
|
+
reason: _t36.message,
|
|
8649
|
+
stack: _t36.stack,
|
|
8650
|
+
code: _t36.code,
|
|
8280
8651
|
selectedCandidatePairChanges: _selectedCandidatePairChanges,
|
|
8281
8652
|
numTransports: _numTransports,
|
|
8282
8653
|
turnDiscoverySkippedReason: this.turnDiscoverySkippedReason,
|
|
@@ -8291,7 +8662,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
8291
8662
|
iceCandidatesCount: this.iceCandidatesCount,
|
|
8292
8663
|
ipver: ipver
|
|
8293
8664
|
}));
|
|
8294
|
-
|
|
8665
|
+
_context36.next = 19;
|
|
8295
8666
|
return this.cleanUpOnAddMediaFailure();
|
|
8296
8667
|
case 19:
|
|
8297
8668
|
// Upload logs on error while adding media
|
|
@@ -8299,21 +8670,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
8299
8670
|
file: 'meeting/index',
|
|
8300
8671
|
function: 'addMedia'
|
|
8301
8672
|
}, _constants.EVENTS.REQUEST_UPLOAD_LOGS, this);
|
|
8302
|
-
if (
|
|
8673
|
+
if (_t36 instanceof _internalMediaCore.Errors.SdpError) {
|
|
8303
8674
|
this.leave({
|
|
8304
8675
|
reason: _constants.MEETING_REMOVED_REASON.MEETING_CONNECTION_FAILED
|
|
8305
8676
|
});
|
|
8306
8677
|
}
|
|
8307
|
-
throw
|
|
8678
|
+
throw _t36;
|
|
8308
8679
|
case 20:
|
|
8309
|
-
|
|
8680
|
+
_context36.prev = 20;
|
|
8310
8681
|
this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
|
|
8311
|
-
return
|
|
8682
|
+
return _context36.finish(20);
|
|
8312
8683
|
case 21:
|
|
8313
8684
|
case "end":
|
|
8314
|
-
return
|
|
8685
|
+
return _context36.stop();
|
|
8315
8686
|
}
|
|
8316
|
-
},
|
|
8687
|
+
}, _callee36, this, [[4, 16, 20, 21], [6, 8]]);
|
|
8317
8688
|
}));
|
|
8318
8689
|
function addMediaInternal(_x31, _x32, _x33) {
|
|
8319
8690
|
return _addMediaInternal.apply(this, arguments);
|
|
@@ -8381,35 +8752,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
8381
8752
|
* @memberof Meeting
|
|
8382
8753
|
*/
|
|
8383
8754
|
function () {
|
|
8384
|
-
var _updateMedia = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
8755
|
+
var _updateMedia = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee37(options) {
|
|
8385
8756
|
var audioEnabled, videoEnabled, shareAudioEnabled, shareVideoEnabled, _this$audio3, _this$video3;
|
|
8386
|
-
return _regenerator.default.wrap(function (
|
|
8387
|
-
while (1) switch (
|
|
8757
|
+
return _regenerator.default.wrap(function (_context37) {
|
|
8758
|
+
while (1) switch (_context37.prev = _context37.next) {
|
|
8388
8759
|
case 0:
|
|
8389
8760
|
this.checkMediaConnection();
|
|
8390
8761
|
audioEnabled = options.audioEnabled, videoEnabled = options.videoEnabled, shareAudioEnabled = options.shareAudioEnabled, shareVideoEnabled = options.shareVideoEnabled;
|
|
8391
8762
|
_loggerProxy.default.logger.log("Meeting:index#updateMedia --> called with options=".concat((0, _stringify.default)(options)));
|
|
8392
8763
|
if (this.canUpdateMedia()) {
|
|
8393
|
-
|
|
8764
|
+
_context37.next = 1;
|
|
8394
8765
|
break;
|
|
8395
8766
|
}
|
|
8396
|
-
return
|
|
8767
|
+
return _context37.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.UPDATE_MEDIA, options));
|
|
8397
8768
|
case 1:
|
|
8398
8769
|
if (!this.isMultistream) {
|
|
8399
|
-
|
|
8770
|
+
_context37.next = 3;
|
|
8400
8771
|
break;
|
|
8401
8772
|
}
|
|
8402
8773
|
if (!(shareAudioEnabled !== undefined || shareVideoEnabled !== undefined)) {
|
|
8403
|
-
|
|
8774
|
+
_context37.next = 2;
|
|
8404
8775
|
break;
|
|
8405
8776
|
}
|
|
8406
8777
|
throw new Error('toggling shareAudioEnabled or shareVideoEnabled in a multistream meeting is not supported, to control receiving screen share call meeting.remoteMediaManager.setLayout() with appropriate layout');
|
|
8407
8778
|
case 2:
|
|
8408
|
-
|
|
8779
|
+
_context37.next = 4;
|
|
8409
8780
|
break;
|
|
8410
8781
|
case 3:
|
|
8411
8782
|
if (!(shareAudioEnabled !== undefined)) {
|
|
8412
|
-
|
|
8783
|
+
_context37.next = 4;
|
|
8413
8784
|
break;
|
|
8414
8785
|
}
|
|
8415
8786
|
throw new Error('toggling shareAudioEnabled in a transcoded meeting is not supported as of now');
|
|
@@ -8434,18 +8805,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
8434
8805
|
this.mediaProperties.mediaDirection.receiveShare = !!(shareAudioEnabled || shareVideoEnabled);
|
|
8435
8806
|
}
|
|
8436
8807
|
if (this.isMultistream) {
|
|
8437
|
-
|
|
8808
|
+
_context37.next = 5;
|
|
8438
8809
|
break;
|
|
8439
8810
|
}
|
|
8440
|
-
|
|
8811
|
+
_context37.next = 5;
|
|
8441
8812
|
return this.updateTranscodedMediaConnection();
|
|
8442
8813
|
case 5:
|
|
8443
|
-
return
|
|
8814
|
+
return _context37.abrupt("return", undefined);
|
|
8444
8815
|
case 6:
|
|
8445
8816
|
case "end":
|
|
8446
|
-
return
|
|
8817
|
+
return _context37.stop();
|
|
8447
8818
|
}
|
|
8448
|
-
},
|
|
8819
|
+
}, _callee37, this);
|
|
8449
8820
|
}));
|
|
8450
8821
|
function updateMedia(_x34) {
|
|
8451
8822
|
return _updateMedia.apply(this, arguments);
|
|
@@ -8587,15 +8958,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
8587
8958
|
);
|
|
8588
8959
|
};
|
|
8589
8960
|
_loggerProxy.default.logger.log('Meeting:index#leave --> Leaving a meeting');
|
|
8961
|
+
this.stopListeningForMeetingEvents();
|
|
8590
8962
|
return _util2.default.leaveMeeting(this, options).then(/*#__PURE__*/function () {
|
|
8591
|
-
var
|
|
8592
|
-
return _regenerator.default.wrap(function (
|
|
8593
|
-
while (1) switch (
|
|
8963
|
+
var _ref41 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee38(leave) {
|
|
8964
|
+
return _regenerator.default.wrap(function (_context38) {
|
|
8965
|
+
while (1) switch (_context38.prev = _context38.next) {
|
|
8594
8966
|
case 0:
|
|
8595
8967
|
// CA team recommends submitting this *after* locus /leave
|
|
8596
8968
|
submitLeaveMetric();
|
|
8597
8969
|
_this49.meetingFiniteStateMachine.leave();
|
|
8598
|
-
|
|
8970
|
+
_context38.next = 1;
|
|
8599
8971
|
return _this49.clearMeetingData();
|
|
8600
8972
|
case 1:
|
|
8601
8973
|
// upload logs on leave irrespective of meeting delete
|
|
@@ -8616,15 +8988,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
8616
8988
|
});
|
|
8617
8989
|
}
|
|
8618
8990
|
_loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
|
|
8619
|
-
return
|
|
8991
|
+
return _context38.abrupt("return", leave);
|
|
8620
8992
|
case 2:
|
|
8621
8993
|
case "end":
|
|
8622
|
-
return
|
|
8994
|
+
return _context38.stop();
|
|
8623
8995
|
}
|
|
8624
|
-
},
|
|
8996
|
+
}, _callee38);
|
|
8625
8997
|
}));
|
|
8626
8998
|
return function (_x35) {
|
|
8627
|
-
return
|
|
8999
|
+
return _ref41.apply(this, arguments);
|
|
8628
9000
|
};
|
|
8629
9001
|
}()).catch(function (error) {
|
|
8630
9002
|
// CA team recommends submitting this *after* locus /leave
|
|
@@ -9288,13 +9660,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9288
9660
|
correlation_id: this.correlationId,
|
|
9289
9661
|
locus_id: this.locusId
|
|
9290
9662
|
});
|
|
9663
|
+
this.stopListeningForMeetingEvents();
|
|
9291
9664
|
return _util2.default.endMeetingForAll(this).then(/*#__PURE__*/function () {
|
|
9292
|
-
var
|
|
9293
|
-
return _regenerator.default.wrap(function (
|
|
9294
|
-
while (1) switch (
|
|
9665
|
+
var _ref42 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee39(end) {
|
|
9666
|
+
return _regenerator.default.wrap(function (_context39) {
|
|
9667
|
+
while (1) switch (_context39.prev = _context39.next) {
|
|
9295
9668
|
case 0:
|
|
9296
9669
|
_this56.meetingFiniteStateMachine.end();
|
|
9297
|
-
|
|
9670
|
+
_context39.next = 1;
|
|
9298
9671
|
return _this56.clearMeetingData();
|
|
9299
9672
|
case 1:
|
|
9300
9673
|
// upload logs on leave irrespective of meeting delete
|
|
@@ -9302,15 +9675,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9302
9675
|
file: 'meeting/index',
|
|
9303
9676
|
function: 'endMeetingForAll'
|
|
9304
9677
|
}, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this56);
|
|
9305
|
-
return
|
|
9678
|
+
return _context39.abrupt("return", end);
|
|
9306
9679
|
case 2:
|
|
9307
9680
|
case "end":
|
|
9308
|
-
return
|
|
9681
|
+
return _context39.stop();
|
|
9309
9682
|
}
|
|
9310
|
-
},
|
|
9683
|
+
}, _callee39);
|
|
9311
9684
|
}));
|
|
9312
9685
|
return function (_x36) {
|
|
9313
|
-
return
|
|
9686
|
+
return _ref42.apply(this, arguments);
|
|
9314
9687
|
};
|
|
9315
9688
|
}()).catch(function (error) {
|
|
9316
9689
|
_this56.meetingFiniteStateMachine.fail(error);
|
|
@@ -9346,10 +9719,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9346
9719
|
var _this$locusInfo7, _this$locusInfo7$cont, _this$locusInfo7$cont2;
|
|
9347
9720
|
var reactionChannelUrl = (_this$locusInfo7 = this.locusInfo) === null || _this$locusInfo7 === void 0 ? void 0 : (_this$locusInfo7$cont = _this$locusInfo7.controls) === null || _this$locusInfo7$cont === void 0 ? void 0 : (_this$locusInfo7$cont2 = _this$locusInfo7$cont.reactions) === null || _this$locusInfo7$cont2 === void 0 ? void 0 : _this$locusInfo7$cont2.reactionChannelUrl;
|
|
9348
9721
|
var participantId = this.members.selfId;
|
|
9349
|
-
var reactionData = _reactions.Reactions[reactionType]
|
|
9350
|
-
|
|
9351
|
-
|
|
9352
|
-
}
|
|
9722
|
+
var reactionData = _reactions.Reactions[reactionType] || {
|
|
9723
|
+
type: reactionType
|
|
9724
|
+
};
|
|
9353
9725
|
var skinToneData = _reactions.SkinTones[skinToneType] || _reactions.SkinTones.normal;
|
|
9354
9726
|
var reaction = _objectSpread(_objectSpread({}, reactionData), {}, {
|
|
9355
9727
|
tone: skinToneData
|
|
@@ -9374,12 +9746,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9374
9746
|
*/
|
|
9375
9747
|
}, {
|
|
9376
9748
|
key: "extendMeeting",
|
|
9377
|
-
value: function extendMeeting(
|
|
9378
|
-
var meetingPolicyUrl =
|
|
9379
|
-
meetingInstanceId =
|
|
9380
|
-
participantId =
|
|
9381
|
-
|
|
9382
|
-
extensionMinutes =
|
|
9749
|
+
value: function extendMeeting(_ref43) {
|
|
9750
|
+
var meetingPolicyUrl = _ref43.meetingPolicyUrl,
|
|
9751
|
+
meetingInstanceId = _ref43.meetingInstanceId,
|
|
9752
|
+
participantId = _ref43.participantId,
|
|
9753
|
+
_ref43$extensionMinut = _ref43.extensionMinutes,
|
|
9754
|
+
extensionMinutes = _ref43$extensionMinut === void 0 ? 30 : _ref43$extensionMinut;
|
|
9383
9755
|
if (!meetingInstanceId || !participantId) {
|
|
9384
9756
|
return _promise.default.reject(new Error('Missing meetingInstanceId or participantId'));
|
|
9385
9757
|
}
|
|
@@ -9460,37 +9832,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9460
9832
|
}, {
|
|
9461
9833
|
key: "enableMusicMode",
|
|
9462
9834
|
value: (function () {
|
|
9463
|
-
var _enableMusicMode = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
9464
|
-
return _regenerator.default.wrap(function (
|
|
9465
|
-
while (1) switch (
|
|
9835
|
+
var _enableMusicMode = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee40(shouldEnableMusicMode) {
|
|
9836
|
+
return _regenerator.default.wrap(function (_context40) {
|
|
9837
|
+
while (1) switch (_context40.prev = _context40.next) {
|
|
9466
9838
|
case 0:
|
|
9467
9839
|
this.checkMediaConnection();
|
|
9468
9840
|
if (this.isMultistream) {
|
|
9469
|
-
|
|
9841
|
+
_context40.next = 1;
|
|
9470
9842
|
break;
|
|
9471
9843
|
}
|
|
9472
9844
|
throw new Error('enableMusicMode() only supported with multistream');
|
|
9473
9845
|
case 1:
|
|
9474
9846
|
if (!shouldEnableMusicMode) {
|
|
9475
|
-
|
|
9847
|
+
_context40.next = 3;
|
|
9476
9848
|
break;
|
|
9477
9849
|
}
|
|
9478
|
-
|
|
9850
|
+
_context40.next = 2;
|
|
9479
9851
|
return this.sendSlotManager.setCustomCodecParameters(_internalMediaCore.MediaType.AudioMain, _internalMediaCore.MediaCodecMimeType.OPUS, {
|
|
9480
9852
|
maxaveragebitrate: '64000',
|
|
9481
9853
|
maxplaybackrate: '48000'
|
|
9482
9854
|
});
|
|
9483
9855
|
case 2:
|
|
9484
|
-
|
|
9856
|
+
_context40.next = 4;
|
|
9485
9857
|
break;
|
|
9486
9858
|
case 3:
|
|
9487
|
-
|
|
9859
|
+
_context40.next = 4;
|
|
9488
9860
|
return this.sendSlotManager.markCustomCodecParametersForDeletion(_internalMediaCore.MediaType.AudioMain, _internalMediaCore.MediaCodecMimeType.OPUS, ['maxaveragebitrate', 'maxplaybackrate']);
|
|
9489
9861
|
case 4:
|
|
9490
9862
|
case "end":
|
|
9491
|
-
return
|
|
9863
|
+
return _context40.stop();
|
|
9492
9864
|
}
|
|
9493
|
-
},
|
|
9865
|
+
}, _callee40, this);
|
|
9494
9866
|
}));
|
|
9495
9867
|
function enableMusicMode(_x37) {
|
|
9496
9868
|
return _enableMusicMode.apply(this, arguments);
|
|
@@ -9583,25 +9955,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9583
9955
|
}, {
|
|
9584
9956
|
key: "publishStream",
|
|
9585
9957
|
value: (function () {
|
|
9586
|
-
var _publishStream = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
9587
|
-
return _regenerator.default.wrap(function (
|
|
9588
|
-
while (1) switch (
|
|
9958
|
+
var _publishStream = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee41(mediaType, stream) {
|
|
9959
|
+
return _regenerator.default.wrap(function (_context41) {
|
|
9960
|
+
while (1) switch (_context41.prev = _context41.next) {
|
|
9589
9961
|
case 0:
|
|
9590
9962
|
if (stream) {
|
|
9591
|
-
|
|
9963
|
+
_context41.next = 1;
|
|
9592
9964
|
break;
|
|
9593
9965
|
}
|
|
9594
|
-
return
|
|
9966
|
+
return _context41.abrupt("return");
|
|
9595
9967
|
case 1:
|
|
9596
9968
|
if (!this.mediaProperties.webrtcMediaConnection) {
|
|
9597
|
-
|
|
9969
|
+
_context41.next = 3;
|
|
9598
9970
|
break;
|
|
9599
9971
|
}
|
|
9600
9972
|
if (!(this.isMultistream && this.mediaProperties.webrtcMediaConnection)) {
|
|
9601
|
-
|
|
9973
|
+
_context41.next = 2;
|
|
9602
9974
|
break;
|
|
9603
9975
|
}
|
|
9604
|
-
|
|
9976
|
+
_context41.next = 2;
|
|
9605
9977
|
return this.sendSlotManager.publishStream(mediaType, stream);
|
|
9606
9978
|
case 2:
|
|
9607
9979
|
this.emitPublishStateChangeEvent({
|
|
@@ -9612,9 +9984,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9612
9984
|
});
|
|
9613
9985
|
case 3:
|
|
9614
9986
|
case "end":
|
|
9615
|
-
return
|
|
9987
|
+
return _context41.stop();
|
|
9616
9988
|
}
|
|
9617
|
-
},
|
|
9989
|
+
}, _callee41, this);
|
|
9618
9990
|
}));
|
|
9619
9991
|
function publishStream(_x38, _x39) {
|
|
9620
9992
|
return _publishStream.apply(this, arguments);
|
|
@@ -9632,21 +10004,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9632
10004
|
}, {
|
|
9633
10005
|
key: "unpublishStream",
|
|
9634
10006
|
value: (function () {
|
|
9635
|
-
var _unpublishStream = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
9636
|
-
return _regenerator.default.wrap(function (
|
|
9637
|
-
while (1) switch (
|
|
10007
|
+
var _unpublishStream = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee42(mediaType, stream) {
|
|
10008
|
+
return _regenerator.default.wrap(function (_context42) {
|
|
10009
|
+
while (1) switch (_context42.prev = _context42.next) {
|
|
9638
10010
|
case 0:
|
|
9639
10011
|
if (stream) {
|
|
9640
|
-
|
|
10012
|
+
_context42.next = 1;
|
|
9641
10013
|
break;
|
|
9642
10014
|
}
|
|
9643
|
-
return
|
|
10015
|
+
return _context42.abrupt("return");
|
|
9644
10016
|
case 1:
|
|
9645
10017
|
if (!(this.isMultistream && this.mediaProperties.webrtcMediaConnection)) {
|
|
9646
|
-
|
|
10018
|
+
_context42.next = 2;
|
|
9647
10019
|
break;
|
|
9648
10020
|
}
|
|
9649
|
-
|
|
10021
|
+
_context42.next = 2;
|
|
9650
10022
|
return this.sendSlotManager.unpublishStream(mediaType);
|
|
9651
10023
|
case 2:
|
|
9652
10024
|
this.emitPublishStateChangeEvent({
|
|
@@ -9657,9 +10029,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9657
10029
|
});
|
|
9658
10030
|
case 3:
|
|
9659
10031
|
case "end":
|
|
9660
|
-
return
|
|
10032
|
+
return _context42.stop();
|
|
9661
10033
|
}
|
|
9662
|
-
},
|
|
10034
|
+
}, _callee42, this);
|
|
9663
10035
|
}));
|
|
9664
10036
|
function unpublishStream(_x40, _x41) {
|
|
9665
10037
|
return _unpublishStream.apply(this, arguments);
|
|
@@ -9676,19 +10048,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9676
10048
|
}, {
|
|
9677
10049
|
key: "publishStreams",
|
|
9678
10050
|
value: (function () {
|
|
9679
|
-
var _publishStreams = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
10051
|
+
var _publishStreams = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee43(streams) {
|
|
9680
10052
|
var _streams$screenShare, _streams$screenShare2, _streams$screenShare3, _streams$screenShare4, _streams$screenShare5, _streams$screenShare6;
|
|
9681
10053
|
var streamChecks, _i, _streamChecks, _streamChecks$_i, stream, name, floorRequestNeeded, _streams$screenShare7;
|
|
9682
|
-
return _regenerator.default.wrap(function (
|
|
9683
|
-
while (1) switch (
|
|
10054
|
+
return _regenerator.default.wrap(function (_context43) {
|
|
10055
|
+
while (1) switch (_context43.prev = _context43.next) {
|
|
9684
10056
|
case 0:
|
|
9685
10057
|
_loggerProxy.default.logger.info("Meeting:index#publishStreams --> called with: ".concat((0, _stringify.default)(streams)));
|
|
9686
10058
|
this.checkMediaConnection();
|
|
9687
10059
|
if (!(!streams.microphone && !streams.camera && !((_streams$screenShare = streams.screenShare) !== null && _streams$screenShare !== void 0 && _streams$screenShare.audio) && !((_streams$screenShare2 = streams.screenShare) !== null && _streams$screenShare2 !== void 0 && _streams$screenShare2.video))) {
|
|
9688
|
-
|
|
10060
|
+
_context43.next = 1;
|
|
9689
10061
|
break;
|
|
9690
10062
|
}
|
|
9691
|
-
return
|
|
10063
|
+
return _context43.abrupt("return");
|
|
9692
10064
|
case 1:
|
|
9693
10065
|
streamChecks = [{
|
|
9694
10066
|
stream: streams === null || streams === void 0 ? void 0 : streams.microphone,
|
|
@@ -9706,62 +10078,62 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9706
10078
|
_i = 0, _streamChecks = streamChecks;
|
|
9707
10079
|
case 2:
|
|
9708
10080
|
if (!(_i < _streamChecks.length)) {
|
|
9709
|
-
|
|
10081
|
+
_context43.next = 4;
|
|
9710
10082
|
break;
|
|
9711
10083
|
}
|
|
9712
10084
|
_streamChecks$_i = _streamChecks[_i], stream = _streamChecks$_i.stream, name = _streamChecks$_i.name;
|
|
9713
10085
|
if (!((stream === null || stream === void 0 ? void 0 : stream.readyState) === 'ended')) {
|
|
9714
|
-
|
|
10086
|
+
_context43.next = 3;
|
|
9715
10087
|
break;
|
|
9716
10088
|
}
|
|
9717
10089
|
throw new Error("Attempted to publish ".concat(name, " stream with ended readyState, correlationId=").concat(this.correlationId));
|
|
9718
10090
|
case 3:
|
|
9719
10091
|
_i++;
|
|
9720
|
-
|
|
10092
|
+
_context43.next = 2;
|
|
9721
10093
|
break;
|
|
9722
10094
|
case 4:
|
|
9723
10095
|
floorRequestNeeded = false; // Screenshare Audio is supported only in multi stream. So we check for screenshare audio presence only if it's a multi stream meeting
|
|
9724
10096
|
if (!(this.isMultistream && (_streams$screenShare5 = streams.screenShare) !== null && _streams$screenShare5 !== void 0 && _streams$screenShare5.audio)) {
|
|
9725
|
-
|
|
10097
|
+
_context43.next = 6;
|
|
9726
10098
|
break;
|
|
9727
10099
|
}
|
|
9728
|
-
|
|
10100
|
+
_context43.next = 5;
|
|
9729
10101
|
return this.setLocalShareAudioStream(streams.screenShare.audio);
|
|
9730
10102
|
case 5:
|
|
9731
10103
|
floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
|
|
9732
10104
|
case 6:
|
|
9733
10105
|
if (!((_streams$screenShare6 = streams.screenShare) !== null && _streams$screenShare6 !== void 0 && _streams$screenShare6.video)) {
|
|
9734
|
-
|
|
10106
|
+
_context43.next = 8;
|
|
9735
10107
|
break;
|
|
9736
10108
|
}
|
|
9737
|
-
|
|
10109
|
+
_context43.next = 7;
|
|
9738
10110
|
return this.setLocalShareVideoStream((_streams$screenShare7 = streams.screenShare) === null || _streams$screenShare7 === void 0 ? void 0 : _streams$screenShare7.video);
|
|
9739
10111
|
case 7:
|
|
9740
10112
|
floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
|
|
9741
10113
|
case 8:
|
|
9742
10114
|
if (!streams.microphone) {
|
|
9743
|
-
|
|
10115
|
+
_context43.next = 9;
|
|
9744
10116
|
break;
|
|
9745
10117
|
}
|
|
9746
|
-
|
|
10118
|
+
_context43.next = 9;
|
|
9747
10119
|
return this.setLocalAudioStream(streams.microphone);
|
|
9748
10120
|
case 9:
|
|
9749
10121
|
if (!streams.camera) {
|
|
9750
|
-
|
|
10122
|
+
_context43.next = 10;
|
|
9751
10123
|
break;
|
|
9752
10124
|
}
|
|
9753
|
-
|
|
10125
|
+
_context43.next = 10;
|
|
9754
10126
|
return this.setLocalVideoStream(streams.camera);
|
|
9755
10127
|
case 10:
|
|
9756
10128
|
if (this.isMultistream) {
|
|
9757
|
-
|
|
10129
|
+
_context43.next = 11;
|
|
9758
10130
|
break;
|
|
9759
10131
|
}
|
|
9760
|
-
|
|
10132
|
+
_context43.next = 11;
|
|
9761
10133
|
return this.updateTranscodedMediaConnection();
|
|
9762
10134
|
case 11:
|
|
9763
10135
|
if (!floorRequestNeeded) {
|
|
9764
|
-
|
|
10136
|
+
_context43.next = 12;
|
|
9765
10137
|
break;
|
|
9766
10138
|
}
|
|
9767
10139
|
this.localShareInstanceId = _uuid.default.v4();
|
|
@@ -9792,13 +10164,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9792
10164
|
// we're sending the http request to Locus to request the screen share floor
|
|
9793
10165
|
// only after the SDP update, because that's how it's always been done for transcoded meetings
|
|
9794
10166
|
// and also if sharing from the start, we need confluence to have been created
|
|
9795
|
-
|
|
10167
|
+
_context43.next = 12;
|
|
9796
10168
|
return this.enqueueScreenShareFloorRequest();
|
|
9797
10169
|
case 12:
|
|
9798
10170
|
case "end":
|
|
9799
|
-
return
|
|
10171
|
+
return _context43.stop();
|
|
9800
10172
|
}
|
|
9801
|
-
},
|
|
10173
|
+
}, _callee43, this);
|
|
9802
10174
|
}));
|
|
9803
10175
|
function publishStreams(_x42) {
|
|
9804
10176
|
return _publishStreams.apply(this, arguments);
|
|
@@ -9815,20 +10187,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9815
10187
|
}, {
|
|
9816
10188
|
key: "unpublishStreams",
|
|
9817
10189
|
value: (function () {
|
|
9818
|
-
var _unpublishStreams = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
9819
|
-
var promises,
|
|
9820
|
-
return _regenerator.default.wrap(function (
|
|
9821
|
-
while (1) switch (
|
|
10190
|
+
var _unpublishStreams = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee44(streams) {
|
|
10191
|
+
var promises, _iterator2, _step2, stream;
|
|
10192
|
+
return _regenerator.default.wrap(function (_context44) {
|
|
10193
|
+
while (1) switch (_context44.prev = _context44.next) {
|
|
9822
10194
|
case 0:
|
|
9823
10195
|
_loggerProxy.default.logger.info("Meeting:index#unpublishStreams --> called with: ".concat((0, _stringify.default)(streams)));
|
|
9824
10196
|
this.checkMediaConnection();
|
|
9825
10197
|
promises = [];
|
|
9826
|
-
|
|
10198
|
+
_iterator2 = _createForOfIteratorHelper(streams.filter(function (t) {
|
|
9827
10199
|
return !!t;
|
|
9828
10200
|
}));
|
|
9829
10201
|
try {
|
|
9830
|
-
for (
|
|
9831
|
-
stream =
|
|
10202
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
10203
|
+
stream = _step2.value;
|
|
9832
10204
|
if (stream === this.mediaProperties.shareAudioStream) {
|
|
9833
10205
|
promises.push(this.setLocalShareAudioStream(undefined));
|
|
9834
10206
|
}
|
|
@@ -9843,14 +10215,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9843
10215
|
}
|
|
9844
10216
|
}
|
|
9845
10217
|
} catch (err) {
|
|
9846
|
-
|
|
10218
|
+
_iterator2.e(err);
|
|
9847
10219
|
} finally {
|
|
9848
|
-
|
|
10220
|
+
_iterator2.f();
|
|
9849
10221
|
}
|
|
9850
10222
|
if (!this.isMultistream) {
|
|
9851
10223
|
promises.push(this.updateTranscodedMediaConnection());
|
|
9852
10224
|
}
|
|
9853
|
-
|
|
10225
|
+
_context44.next = 1;
|
|
9854
10226
|
return _promise.default.all(promises);
|
|
9855
10227
|
case 1:
|
|
9856
10228
|
// we're allowing for the SDK to support just audio share as well
|
|
@@ -9871,9 +10243,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9871
10243
|
}
|
|
9872
10244
|
case 2:
|
|
9873
10245
|
case "end":
|
|
9874
|
-
return
|
|
10246
|
+
return _context44.stop();
|
|
9875
10247
|
}
|
|
9876
|
-
},
|
|
10248
|
+
}, _callee44, this);
|
|
9877
10249
|
}));
|
|
9878
10250
|
function unpublishStreams(_x43) {
|
|
9879
10251
|
return _unpublishStreams.apply(this, arguments);
|
|
@@ -9941,16 +10313,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9941
10313
|
}, {
|
|
9942
10314
|
key: "getMediaReachabilityMetricFields",
|
|
9943
10315
|
value: (function () {
|
|
9944
|
-
var _getMediaReachabilityMetricFields = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
10316
|
+
var _getMediaReachabilityMetricFields = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee45() {
|
|
9945
10317
|
var _this$mediaServerIp, _this$mediaConnection, _this$mediaConnection2, _this$mediaConnection3;
|
|
9946
10318
|
var reachabilityMetrics, successKeys, totalSuccessCases, selectedSubnetFirstOctet, isSubnetReachable, selectedCluster;
|
|
9947
|
-
return _regenerator.default.wrap(function (
|
|
9948
|
-
while (1) switch (
|
|
10319
|
+
return _regenerator.default.wrap(function (_context45) {
|
|
10320
|
+
while (1) switch (_context45.prev = _context45.next) {
|
|
9949
10321
|
case 0:
|
|
9950
|
-
|
|
10322
|
+
_context45.next = 1;
|
|
9951
10323
|
return this.webex.meetings.reachability.getReachabilityMetrics();
|
|
9952
10324
|
case 1:
|
|
9953
|
-
reachabilityMetrics =
|
|
10325
|
+
reachabilityMetrics = _context45.sent;
|
|
9954
10326
|
successKeys = ['reachability_public_udp_success', 'reachability_public_tcp_success', 'reachability_public_xtls_success', 'reachability_vmn_udp_success', 'reachability_vmn_tcp_success', 'reachability_vmn_xtls_success'];
|
|
9955
10327
|
totalSuccessCases = successKeys.reduce(function (total, key) {
|
|
9956
10328
|
var value = reachabilityMetrics[key];
|
|
@@ -9967,16 +10339,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9967
10339
|
this.webex.meetings.reachability.isSubnetReachable(selectedSubnetFirstOctet);
|
|
9968
10340
|
}
|
|
9969
10341
|
selectedCluster = (_this$mediaConnection = (_this$mediaConnection2 = this.mediaConnections) === null || _this$mediaConnection2 === void 0 ? void 0 : (_this$mediaConnection3 = _this$mediaConnection2[0]) === null || _this$mediaConnection3 === void 0 ? void 0 : _this$mediaConnection3.mediaAgentCluster) !== null && _this$mediaConnection !== void 0 ? _this$mediaConnection : null;
|
|
9970
|
-
return
|
|
10342
|
+
return _context45.abrupt("return", _objectSpread(_objectSpread({}, reachabilityMetrics), {}, {
|
|
9971
10343
|
subnet_reachable: isSubnetReachable,
|
|
9972
10344
|
selected_cluster: selectedCluster,
|
|
9973
10345
|
selected_subnet: selectedSubnetFirstOctet ? "".concat(selectedSubnetFirstOctet, ".X.X.X") : null
|
|
9974
10346
|
}));
|
|
9975
10347
|
case 2:
|
|
9976
10348
|
case "end":
|
|
9977
|
-
return
|
|
10349
|
+
return _context45.stop();
|
|
9978
10350
|
}
|
|
9979
|
-
},
|
|
10351
|
+
}, _callee45, this);
|
|
9980
10352
|
}));
|
|
9981
10353
|
function getMediaReachabilityMetricFields() {
|
|
9982
10354
|
return _getMediaReachabilityMetricFields.apply(this, arguments);
|
|
@@ -9993,17 +10365,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9993
10365
|
}, {
|
|
9994
10366
|
key: "setStage",
|
|
9995
10367
|
value: function setStage() {
|
|
9996
|
-
var
|
|
9997
|
-
|
|
9998
|
-
activeSpeakerProportion =
|
|
9999
|
-
customBackground =
|
|
10000
|
-
customLogo =
|
|
10001
|
-
customNameLabel =
|
|
10002
|
-
importantParticipants =
|
|
10003
|
-
|
|
10004
|
-
lockAttendeeViewOnStage =
|
|
10005
|
-
|
|
10006
|
-
showActiveSpeaker =
|
|
10368
|
+
var _ref44 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
10369
|
+
_ref44$activeSpeakerP = _ref44.activeSpeakerProportion,
|
|
10370
|
+
activeSpeakerProportion = _ref44$activeSpeakerP === void 0 ? 0.5 : _ref44$activeSpeakerP,
|
|
10371
|
+
customBackground = _ref44.customBackground,
|
|
10372
|
+
customLogo = _ref44.customLogo,
|
|
10373
|
+
customNameLabel = _ref44.customNameLabel,
|
|
10374
|
+
importantParticipants = _ref44.importantParticipants,
|
|
10375
|
+
_ref44$lockAttendeeVi = _ref44.lockAttendeeViewOnStage,
|
|
10376
|
+
lockAttendeeViewOnStage = _ref44$lockAttendeeVi === void 0 ? false : _ref44$lockAttendeeVi,
|
|
10377
|
+
_ref44$showActiveSpea = _ref44.showActiveSpeaker,
|
|
10378
|
+
showActiveSpeaker = _ref44$showActiveSpea === void 0 ? false : _ref44$showActiveSpea;
|
|
10007
10379
|
var videoLayout = {
|
|
10008
10380
|
overrideDefault: true,
|
|
10009
10381
|
lockAttendeeViewOnStageOnly: lockAttendeeViewOnStage,
|
|
@@ -10107,41 +10479,41 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
10107
10479
|
}, {
|
|
10108
10480
|
key: "refreshDataChannelToken",
|
|
10109
10481
|
value: (function () {
|
|
10110
|
-
var _refreshDataChannelToken = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function
|
|
10111
|
-
var isPracticeSession, dataChannelTokenType, res, msg,
|
|
10112
|
-
return _regenerator.default.wrap(function (
|
|
10113
|
-
while (1) switch (
|
|
10482
|
+
var _refreshDataChannelToken = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee46() {
|
|
10483
|
+
var isPracticeSession, dataChannelTokenType, res, msg, _t37;
|
|
10484
|
+
return _regenerator.default.wrap(function (_context46) {
|
|
10485
|
+
while (1) switch (_context46.prev = _context46.next) {
|
|
10114
10486
|
case 0:
|
|
10115
10487
|
isPracticeSession = this.webinar.isJoinPracticeSessionDataChannel();
|
|
10116
10488
|
dataChannelTokenType = this.getDataChannelTokenType();
|
|
10117
|
-
|
|
10118
|
-
|
|
10489
|
+
_context46.prev = 1;
|
|
10490
|
+
_context46.next = 2;
|
|
10119
10491
|
return this.meetingRequest.fetchDatachannelToken({
|
|
10120
10492
|
locusUrl: this.locusUrl,
|
|
10121
10493
|
requestingParticipantId: this.members.selfId,
|
|
10122
10494
|
isPracticeSession: isPracticeSession
|
|
10123
10495
|
});
|
|
10124
10496
|
case 2:
|
|
10125
|
-
res =
|
|
10126
|
-
return
|
|
10497
|
+
res = _context46.sent;
|
|
10498
|
+
return _context46.abrupt("return", {
|
|
10127
10499
|
body: {
|
|
10128
10500
|
datachannelToken: res.body.datachannelToken,
|
|
10129
10501
|
dataChannelTokenType: dataChannelTokenType
|
|
10130
10502
|
}
|
|
10131
10503
|
});
|
|
10132
10504
|
case 3:
|
|
10133
|
-
|
|
10134
|
-
|
|
10135
|
-
msg = (
|
|
10505
|
+
_context46.prev = 3;
|
|
10506
|
+
_t37 = _context46["catch"](1);
|
|
10507
|
+
msg = (_t37 === null || _t37 === void 0 ? void 0 : _t37.message) || String(_t37);
|
|
10136
10508
|
_loggerProxy.default.logger.warn("Meeting:index#refreshDataChannelToken --> DataChannel token refresh failed (likely locus changed or participant left): ".concat(msg), {
|
|
10137
|
-
statusCode:
|
|
10509
|
+
statusCode: _t37 === null || _t37 === void 0 ? void 0 : _t37.statusCode
|
|
10138
10510
|
});
|
|
10139
|
-
return
|
|
10511
|
+
return _context46.abrupt("return", null);
|
|
10140
10512
|
case 4:
|
|
10141
10513
|
case "end":
|
|
10142
|
-
return
|
|
10514
|
+
return _context46.stop();
|
|
10143
10515
|
}
|
|
10144
|
-
},
|
|
10516
|
+
}, _callee46, this, [[1, 3]]);
|
|
10145
10517
|
}));
|
|
10146
10518
|
function refreshDataChannelToken() {
|
|
10147
10519
|
return _refreshDataChannelToken.apply(this, arguments);
|