@webex/plugin-meetings 3.11.0-next.29 → 3.11.0-next.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/interceptors/constant.js +12 -0
- package/dist/interceptors/constant.js.map +1 -0
- package/dist/interceptors/dataChannelAuthToken.js +233 -0
- package/dist/interceptors/dataChannelAuthToken.js.map +1 -0
- package/dist/interceptors/index.js +7 -0
- package/dist/interceptors/index.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/index.js +109 -26
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +50 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/types/interceptors/constant.d.ts +5 -0
- package/dist/types/interceptors/dataChannelAuthToken.d.ts +35 -0
- package/dist/types/interceptors/index.d.ts +2 -1
- package/dist/types/meeting/index.d.ts +19 -0
- package/dist/types/meeting/request.d.ts +16 -1
- package/dist/types/meeting/request.type.d.ts +5 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +3 -3
- package/src/index.ts +6 -1
- package/src/interceptors/constant.ts +6 -0
- package/src/interceptors/dataChannelAuthToken.ts +142 -0
- package/src/interceptors/index.ts +2 -1
- package/src/meeting/index.ts +73 -3
- package/src/meeting/request.ts +42 -0
- package/src/meeting/request.type.ts +6 -0
- package/test/unit/spec/interceptors/dataChannelAuthToken.ts +141 -0
- package/test/unit/spec/meeting/index.js +250 -59
- package/test/unit/spec/meeting/request.js +64 -0
package/dist/breakouts/index.js
CHANGED
|
@@ -1109,7 +1109,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
1109
1109
|
this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
|
|
1110
1110
|
}
|
|
1111
1111
|
},
|
|
1112
|
-
version: "3.11.0-next.
|
|
1112
|
+
version: "3.11.0-next.30"
|
|
1113
1113
|
});
|
|
1114
1114
|
var _default = exports.default = Breakouts;
|
|
1115
1115
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js
CHANGED
|
@@ -248,7 +248,8 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof _WeakMap) var
|
|
|
248
248
|
config: _config.default,
|
|
249
249
|
interceptors: {
|
|
250
250
|
LocusRetryStatusInterceptor: _interceptors.LocusRetryStatusInterceptor.create,
|
|
251
|
-
LocusRouteTokenInterceptor: _interceptors.LocusRouteTokenInterceptor.create
|
|
251
|
+
LocusRouteTokenInterceptor: _interceptors.LocusRouteTokenInterceptor.create,
|
|
252
|
+
DataChannelAuthTokenInterceptor: _interceptors.DataChannelAuthTokenInterceptor.create
|
|
252
253
|
}
|
|
253
254
|
});
|
|
254
255
|
var _default = exports.default = _meetings.default;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_webexCore","require","_meetings","_interopRequireDefault","_config","_interceptors","_captchaError","_intentToJoin","_passwordError","_permission","_joinWebinarError","_reclaimHostRoleErrors","_meeting","_utilv","_joinMeeting","_webexErrors","_mediaHelpers","_CONSTANTS","_interopRequireWildcard","exports","CONSTANTS","_REACTIONS","REACTIONS","_sdkAnnotationTypes","sdkAnnotationTypes","_MeetingInfoV","MeetingInfoV2","_remoteMedia","_triggerProxy","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","registerPlugin","Meetings","config","interceptors","LocusRetryStatusInterceptor","create","LocusRouteTokenInterceptor","_default"],"sources":["index.ts"],"sourcesContent":["/* eslint-env browser */\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Meetings from './meetings';\nimport config from './config';\nimport {LocusRetryStatusInterceptor
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_meetings","_interopRequireDefault","_config","_interceptors","_captchaError","_intentToJoin","_passwordError","_permission","_joinWebinarError","_reclaimHostRoleErrors","_meeting","_utilv","_joinMeeting","_webexErrors","_mediaHelpers","_CONSTANTS","_interopRequireWildcard","exports","CONSTANTS","_REACTIONS","REACTIONS","_sdkAnnotationTypes","sdkAnnotationTypes","_MeetingInfoV","MeetingInfoV2","_remoteMedia","_triggerProxy","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","registerPlugin","Meetings","config","interceptors","LocusRetryStatusInterceptor","create","LocusRouteTokenInterceptor","DataChannelAuthTokenInterceptor","_default"],"sources":["index.ts"],"sourcesContent":["/* eslint-env browser */\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Meetings from './meetings';\nimport config from './config';\nimport {\n LocusRetryStatusInterceptor,\n LocusRouteTokenInterceptor,\n DataChannelAuthTokenInterceptor,\n} from './interceptors';\nimport CaptchaError from './common/errors/captcha-error';\nimport IntentToJoinError from './common/errors/intent-to-join';\nimport PasswordError from './common/errors/password-error';\nimport PermissionError from './common/errors/permission';\nimport JoinWebinarError from './common/errors/join-webinar-error';\nimport {\n ReclaimHostEmptyWrongKeyError,\n ReclaimHostIsHostAlreadyError,\n ReclaimHostNotAllowedError,\n ReclaimHostNotSupportedError,\n} from './common/errors/reclaim-host-role-errors';\nimport Meeting from './meeting';\nimport MeetingInfoUtil from './meeting-info/utilv2';\nimport JoinMeetingError from './common/errors/join-meeting';\nimport {SdpResponseTimeoutError} from './common/errors/webex-errors';\n\nregisterPlugin('meetings', Meetings, {\n config,\n interceptors: {\n LocusRetryStatusInterceptor: LocusRetryStatusInterceptor.create,\n LocusRouteTokenInterceptor: LocusRouteTokenInterceptor.create,\n DataChannelAuthTokenInterceptor: DataChannelAuthTokenInterceptor.create,\n },\n});\n\nexport {\n LocalStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n LocalStreamEventNames,\n StreamEventNames,\n RemoteStreamEventNames,\n type ServerMuteReason,\n LocalMicrophoneStreamEventNames,\n LocalCameraStreamEventNames,\n LocalMicrophoneStream,\n LocalCameraStream,\n createMicrophoneStream,\n createCameraStream,\n createCameraAndMicrophoneStreams,\n createDisplayStream,\n createDisplayStreamWithAudio,\n createDisplayMedia,\n FacingMode,\n DisplaySurface,\n PresetCameraConstraints,\n type VideoContentHint,\n type StreamState,\n} from '@webex/media-helpers';\n\nexport default Meetings;\n\nexport * as CONSTANTS from './constants';\nexport * as REACTIONS from './reactions/reactions';\nexport * as sdkAnnotationTypes from './annotation/annotation.types';\nexport * as MeetingInfoV2 from './meeting-info/meeting-info-v2';\nexport {type Reaction} from './reactions/reactions.type';\n\nexport {\n CaptchaError,\n IntentToJoinError,\n JoinMeetingError,\n PasswordError,\n PermissionError,\n ReclaimHostIsHostAlreadyError,\n ReclaimHostNotAllowedError,\n ReclaimHostNotSupportedError,\n ReclaimHostEmptyWrongKeyError,\n Meeting,\n MeetingInfoUtil,\n JoinWebinarError,\n SdpResponseTimeoutError,\n};\n\nexport {RemoteMedia} from './multistream/remoteMedia';\n\nexport {default as TriggerProxy} from './common/events/trigger-proxy';\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.RETRY_KEY = exports.RETRY_INTERVAL = exports.MAX_RETRY = exports.DATA_CHANNEL_AUTH_HEADER = void 0;
|
|
8
|
+
var DATA_CHANNEL_AUTH_HEADER = exports.DATA_CHANNEL_AUTH_HEADER = 'Data-Channel-Auth-Token';
|
|
9
|
+
var MAX_RETRY = exports.MAX_RETRY = 1;
|
|
10
|
+
var RETRY_INTERVAL = exports.RETRY_INTERVAL = 2000;
|
|
11
|
+
var RETRY_KEY = exports.RETRY_KEY = '_dcRetryKey';
|
|
12
|
+
//# sourceMappingURL=constant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DATA_CHANNEL_AUTH_HEADER","exports","MAX_RETRY","RETRY_INTERVAL","RETRY_KEY"],"sources":["constant.ts"],"sourcesContent":["const DATA_CHANNEL_AUTH_HEADER = 'Data-Channel-Auth-Token';\nconst MAX_RETRY = 1;\nconst RETRY_INTERVAL = 2000;\nconst RETRY_KEY = '_dcRetryKey';\n\nexport {DATA_CHANNEL_AUTH_HEADER, MAX_RETRY, RETRY_INTERVAL, RETRY_KEY};\n"],"mappings":";;;;;;;AAAA,IAAMA,wBAAwB,GAAAC,OAAA,CAAAD,wBAAA,GAAG,yBAAyB;AAC1D,IAAME,SAAS,GAAAD,OAAA,CAAAC,SAAA,GAAG,CAAC;AACnB,IAAMC,cAAc,GAAAF,OAAA,CAAAE,cAAA,GAAG,IAAI;AAC3B,IAAMC,SAAS,GAAAH,OAAA,CAAAG,SAAA,GAAG,aAAa","ignoreList":[]}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.default = void 0;
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
11
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
12
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
13
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
14
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
15
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
16
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
17
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
18
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
|
|
19
|
+
var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
|
|
20
|
+
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
21
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
22
|
+
var _httpCore = require("@webex/http-core");
|
|
23
|
+
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
24
|
+
var _constant = require("./constant");
|
|
25
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? _Reflect$construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
|
|
26
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /*!
|
|
27
|
+
* Copyright (c) 2015-2026 Cisco Systems, Inc. See LICENSE file.
|
|
28
|
+
*/
|
|
29
|
+
/*!
|
|
30
|
+
* Copyright (c) 2015-2026 Cisco Systems, Inc. See LICENSE file.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
var retryCountMap = new _map.default();
|
|
34
|
+
/**
|
|
35
|
+
* @class
|
|
36
|
+
*/
|
|
37
|
+
var DataChannelAuthTokenInterceptor = exports.default = /*#__PURE__*/function (_Interceptor) {
|
|
38
|
+
function DataChannelAuthTokenInterceptor(options) {
|
|
39
|
+
var _this;
|
|
40
|
+
(0, _classCallCheck2.default)(this, DataChannelAuthTokenInterceptor);
|
|
41
|
+
_this = _callSuper(this, DataChannelAuthTokenInterceptor, [options]);
|
|
42
|
+
(0, _defineProperty2.default)(_this, "_refreshDataChannelToken", void 0);
|
|
43
|
+
(0, _defineProperty2.default)(_this, "_isDataChannelTokenEnabled", void 0);
|
|
44
|
+
_this._refreshDataChannelToken = options.refreshDataChannelToken;
|
|
45
|
+
_this._isDataChannelTokenEnabled = options.isDataChannelTokenEnabled;
|
|
46
|
+
return _this;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @returns {DataChannelAuthTokenInterceptor}
|
|
51
|
+
*/
|
|
52
|
+
(0, _inherits2.default)(DataChannelAuthTokenInterceptor, _Interceptor);
|
|
53
|
+
return (0, _createClass2.default)(DataChannelAuthTokenInterceptor, [{
|
|
54
|
+
key: "getRetryKey",
|
|
55
|
+
value: function getRetryKey(options) {
|
|
56
|
+
if (!options[_constant.RETRY_KEY]) {
|
|
57
|
+
options[_constant.RETRY_KEY] = "".concat((0, _now.default)(), "-").concat(Math.random());
|
|
58
|
+
}
|
|
59
|
+
return options[_constant.RETRY_KEY];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Helper function to get header value case insensitively
|
|
63
|
+
}, {
|
|
64
|
+
key: "getHeader",
|
|
65
|
+
value: function getHeader(headers, name) {
|
|
66
|
+
var key = (0, _keys.default)(headers).find(function (k) {
|
|
67
|
+
return k.toLowerCase() === name.toLowerCase();
|
|
68
|
+
});
|
|
69
|
+
return key ? headers[key] : undefined;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Intercept responses and, on 401/403 with `Data-Channel-Auth-Token` header,
|
|
74
|
+
* attempt to refresh the data channel token and retry the original request once.
|
|
75
|
+
*
|
|
76
|
+
* @param {Object} options
|
|
77
|
+
* @param {Object} reason
|
|
78
|
+
* @returns {Promise<HttpResponse>}
|
|
79
|
+
*/
|
|
80
|
+
}, {
|
|
81
|
+
key: "onResponseError",
|
|
82
|
+
value: (function () {
|
|
83
|
+
var _onResponseError = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(options, reason) {
|
|
84
|
+
var token, enabled, key, retryCount;
|
|
85
|
+
return _regenerator.default.wrap(function (_context) {
|
|
86
|
+
while (1) switch (_context.prev = _context.next) {
|
|
87
|
+
case 0:
|
|
88
|
+
token = this.getHeader(options.headers, _constant.DATA_CHANNEL_AUTH_HEADER);
|
|
89
|
+
_context.next = 1;
|
|
90
|
+
return this._isDataChannelTokenEnabled();
|
|
91
|
+
case 1:
|
|
92
|
+
enabled = _context.sent;
|
|
93
|
+
if (!(!token || !enabled)) {
|
|
94
|
+
_context.next = 2;
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
return _context.abrupt("return", _promise.default.reject(reason));
|
|
98
|
+
case 2:
|
|
99
|
+
if (!(reason.statusCode !== 401 && reason.statusCode !== 403)) {
|
|
100
|
+
_context.next = 3;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
return _context.abrupt("return", _promise.default.reject(reason));
|
|
104
|
+
case 3:
|
|
105
|
+
key = this.getRetryKey(options);
|
|
106
|
+
retryCount = retryCountMap.get(key) || 0;
|
|
107
|
+
if (!(retryCount >= _constant.MAX_RETRY)) {
|
|
108
|
+
_context.next = 4;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
_loggerProxy.default.logger.error("data channel token refresh exceeded max retry (".concat(_constant.MAX_RETRY, ")"));
|
|
112
|
+
retryCountMap.delete(key);
|
|
113
|
+
return _context.abrupt("return", _promise.default.reject(reason));
|
|
114
|
+
case 4:
|
|
115
|
+
retryCountMap.set(key, retryCount + 1);
|
|
116
|
+
return _context.abrupt("return", this.refreshTokenAndRetryWithDelay(options));
|
|
117
|
+
case 5:
|
|
118
|
+
case "end":
|
|
119
|
+
return _context.stop();
|
|
120
|
+
}
|
|
121
|
+
}, _callee, this);
|
|
122
|
+
}));
|
|
123
|
+
function onResponseError(_x, _x2) {
|
|
124
|
+
return _onResponseError.apply(this, arguments);
|
|
125
|
+
}
|
|
126
|
+
return onResponseError;
|
|
127
|
+
}()
|
|
128
|
+
/**
|
|
129
|
+
* Retry the failed data channel request after a delay.
|
|
130
|
+
* Refreshes the Data-Channel-Auth-Token and re-sends the original request.
|
|
131
|
+
*
|
|
132
|
+
* @param {Object} options - Original request options.
|
|
133
|
+
* @returns {Promise<HttpResponse>} - Resolves on successful retry.
|
|
134
|
+
*/
|
|
135
|
+
)
|
|
136
|
+
}, {
|
|
137
|
+
key: "refreshTokenAndRetryWithDelay",
|
|
138
|
+
value: function refreshTokenAndRetryWithDelay(options) {
|
|
139
|
+
var _this2 = this;
|
|
140
|
+
return new _promise.default(function (resolve, reject) {
|
|
141
|
+
setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
142
|
+
var key, newToken, res, msg, err, _t;
|
|
143
|
+
return _regenerator.default.wrap(function (_context2) {
|
|
144
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
145
|
+
case 0:
|
|
146
|
+
key = _this2.getRetryKey(options);
|
|
147
|
+
_context2.prev = 1;
|
|
148
|
+
_context2.next = 2;
|
|
149
|
+
return _this2._refreshDataChannelToken();
|
|
150
|
+
case 2:
|
|
151
|
+
newToken = _context2.sent;
|
|
152
|
+
options.headers[_constant.DATA_CHANNEL_AUTH_HEADER] = newToken;
|
|
153
|
+
|
|
154
|
+
// @ts-ignore
|
|
155
|
+
_context2.next = 3;
|
|
156
|
+
return _this2.webex.request(options);
|
|
157
|
+
case 3:
|
|
158
|
+
res = _context2.sent;
|
|
159
|
+
retryCountMap.delete(key);
|
|
160
|
+
resolve(res);
|
|
161
|
+
_context2.next = 5;
|
|
162
|
+
break;
|
|
163
|
+
case 4:
|
|
164
|
+
_context2.prev = 4;
|
|
165
|
+
_t = _context2["catch"](1);
|
|
166
|
+
retryCountMap.delete(key);
|
|
167
|
+
msg = (_t === null || _t === void 0 ? void 0 : _t.message) || String(_t);
|
|
168
|
+
err = new Error("DataChannel token refresh failed: ".concat(msg));
|
|
169
|
+
err.statusCode = _t === null || _t === void 0 ? void 0 : _t.statusCode;
|
|
170
|
+
err.original = _t;
|
|
171
|
+
reject(err);
|
|
172
|
+
case 5:
|
|
173
|
+
case "end":
|
|
174
|
+
return _context2.stop();
|
|
175
|
+
}
|
|
176
|
+
}, _callee2, null, [[1, 4]]);
|
|
177
|
+
})), _constant.RETRY_INTERVAL);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}], [{
|
|
181
|
+
key: "create",
|
|
182
|
+
value: function create() {
|
|
183
|
+
var _this3 = this;
|
|
184
|
+
// @ts-ignore
|
|
185
|
+
return new DataChannelAuthTokenInterceptor({
|
|
186
|
+
webex: this,
|
|
187
|
+
isDataChannelTokenEnabled: function () {
|
|
188
|
+
var _isDataChannelTokenEnabled = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
|
|
189
|
+
return _regenerator.default.wrap(function (_context3) {
|
|
190
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
191
|
+
case 0:
|
|
192
|
+
return _context3.abrupt("return", _this3.internal.llm.isDataChannelTokenEnabled());
|
|
193
|
+
case 1:
|
|
194
|
+
case "end":
|
|
195
|
+
return _context3.stop();
|
|
196
|
+
}
|
|
197
|
+
}, _callee3);
|
|
198
|
+
}));
|
|
199
|
+
function isDataChannelTokenEnabled() {
|
|
200
|
+
return _isDataChannelTokenEnabled.apply(this, arguments);
|
|
201
|
+
}
|
|
202
|
+
return isDataChannelTokenEnabled;
|
|
203
|
+
}(),
|
|
204
|
+
refreshDataChannelToken: function () {
|
|
205
|
+
var _refreshDataChannelToken = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4() {
|
|
206
|
+
var _yield$_this3$interna, body, _ref2, datachannelToken, dataChannelTokenType;
|
|
207
|
+
return _regenerator.default.wrap(function (_context4) {
|
|
208
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
209
|
+
case 0:
|
|
210
|
+
_context4.next = 1;
|
|
211
|
+
return _this3.internal.llm.refreshDataChannelToken();
|
|
212
|
+
case 1:
|
|
213
|
+
_yield$_this3$interna = _context4.sent;
|
|
214
|
+
body = _yield$_this3$interna.body;
|
|
215
|
+
_ref2 = body !== null && body !== void 0 ? body : {}, datachannelToken = _ref2.datachannelToken, dataChannelTokenType = _ref2.dataChannelTokenType; // @ts-ignore
|
|
216
|
+
_this3.internal.llm.setDatachannelToken(datachannelToken, dataChannelTokenType);
|
|
217
|
+
return _context4.abrupt("return", datachannelToken);
|
|
218
|
+
case 2:
|
|
219
|
+
case "end":
|
|
220
|
+
return _context4.stop();
|
|
221
|
+
}
|
|
222
|
+
}, _callee4);
|
|
223
|
+
}));
|
|
224
|
+
function refreshDataChannelToken() {
|
|
225
|
+
return _refreshDataChannelToken.apply(this, arguments);
|
|
226
|
+
}
|
|
227
|
+
return refreshDataChannelToken;
|
|
228
|
+
}()
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}]);
|
|
232
|
+
}(_httpCore.Interceptor);
|
|
233
|
+
//# sourceMappingURL=dataChannelAuthToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_httpCore","require","_loggerProxy","_interopRequireDefault","_constant","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","retryCountMap","_map","DataChannelAuthTokenInterceptor","exports","_Interceptor","options","_this","_classCallCheck2","_defineProperty2","_refreshDataChannelToken","refreshDataChannelToken","_isDataChannelTokenEnabled","isDataChannelTokenEnabled","_inherits2","_createClass2","key","value","getRetryKey","RETRY_KEY","concat","_now","Math","random","getHeader","headers","name","_keys","find","k","toLowerCase","undefined","_onResponseError","_asyncToGenerator2","_regenerator","mark","_callee","reason","token","enabled","retryCount","wrap","_context","prev","next","DATA_CHANNEL_AUTH_HEADER","sent","abrupt","_promise","reject","statusCode","get","MAX_RETRY","LoggerProxy","logger","error","delete","set","refreshTokenAndRetryWithDelay","stop","onResponseError","_x","_x2","arguments","_this2","resolve","setTimeout","_callee2","newToken","res","msg","err","_t","_context2","webex","request","message","String","Error","original","RETRY_INTERVAL","create","_this3","_callee3","_context3","internal","llm","_callee4","_yield$_this3$interna","body","_ref2","datachannelToken","dataChannelTokenType","_context4","setDatachannelToken","Interceptor"],"sources":["dataChannelAuthToken.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2026 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {DATA_CHANNEL_AUTH_HEADER, MAX_RETRY, RETRY_INTERVAL, RETRY_KEY} from './constant';\n\n/*!\n * Copyright (c) 2015-2026 Cisco Systems, Inc. See LICENSE file.\n */\n\nconst retryCountMap = new Map();\ninterface HttpLikeError extends Error {\n statusCode?: number;\n original?: any;\n}\n/**\n * @class\n */\nexport default class DataChannelAuthTokenInterceptor extends Interceptor {\n private _refreshDataChannelToken: () => Promise<string>;\n private _isDataChannelTokenEnabled: () => Promise<boolean>;\n constructor(options) {\n super(options);\n\n this._refreshDataChannelToken = options.refreshDataChannelToken;\n this._isDataChannelTokenEnabled = options.isDataChannelTokenEnabled;\n }\n\n /**\n * @returns {DataChannelAuthTokenInterceptor}\n */\n static create() {\n // @ts-ignore\n return new DataChannelAuthTokenInterceptor({\n webex: this,\n\n isDataChannelTokenEnabled: async () => {\n // @ts-ignore\n return this.internal.llm.isDataChannelTokenEnabled();\n },\n\n refreshDataChannelToken: async () => {\n // @ts-ignore\n const {body} = await this.internal.llm.refreshDataChannelToken();\n const {datachannelToken, dataChannelTokenType} = body ?? {};\n\n // @ts-ignore\n this.internal.llm.setDatachannelToken(datachannelToken, dataChannelTokenType);\n\n return datachannelToken;\n },\n });\n }\n\n private getRetryKey(options) {\n if (!options[RETRY_KEY]) {\n options[RETRY_KEY] = `${Date.now()}-${Math.random()}`;\n }\n\n return options[RETRY_KEY];\n }\n\n // Helper function to get header value case insensitively\n private getHeader(headers: Record<string, string>, name: string) {\n const key = Object.keys(headers).find((k) => k.toLowerCase() === name.toLowerCase());\n\n return key ? headers[key] : undefined;\n }\n\n /**\n * Intercept responses and, on 401/403 with `Data-Channel-Auth-Token` header,\n * attempt to refresh the data channel token and retry the original request once.\n *\n * @param {Object} options\n * @param {Object} reason\n * @returns {Promise<HttpResponse>}\n */\n async onResponseError(options, reason) {\n const token = this.getHeader(options.headers, DATA_CHANNEL_AUTH_HEADER);\n const enabled = await this._isDataChannelTokenEnabled();\n\n if (!token || !enabled) {\n return Promise.reject(reason);\n }\n\n if (reason.statusCode !== 401 && reason.statusCode !== 403) {\n return Promise.reject(reason);\n }\n\n const key = this.getRetryKey(options);\n const retryCount = retryCountMap.get(key) || 0;\n\n if (retryCount >= MAX_RETRY) {\n LoggerProxy.logger.error(`data channel token refresh exceeded max retry (${MAX_RETRY})`);\n retryCountMap.delete(key);\n\n return Promise.reject(reason);\n }\n\n retryCountMap.set(key, retryCount + 1);\n\n return this.refreshTokenAndRetryWithDelay(options);\n }\n\n /**\n * Retry the failed data channel request after a delay.\n * Refreshes the Data-Channel-Auth-Token and re-sends the original request.\n *\n * @param {Object} options - Original request options.\n * @returns {Promise<HttpResponse>} - Resolves on successful retry.\n */\n refreshTokenAndRetryWithDelay(options) {\n return new Promise((resolve, reject) => {\n setTimeout(async () => {\n const key = this.getRetryKey(options);\n try {\n const newToken = await this._refreshDataChannelToken();\n\n options.headers[DATA_CHANNEL_AUTH_HEADER] = newToken;\n\n // @ts-ignore\n const res = await this.webex.request(options);\n retryCountMap.delete(key);\n\n resolve(res);\n } catch (e) {\n retryCountMap.delete(key);\n\n const msg = e?.message || String(e);\n\n const err: HttpLikeError = new Error(`DataChannel token refresh failed: ${msg}`);\n err.statusCode = e?.statusCode;\n err.original = e;\n\n reject(err);\n }\n }, RETRY_INTERVAL);\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,6 +5,12 @@ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequ
|
|
|
5
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
+
_Object$defineProperty(exports, "DataChannelAuthTokenInterceptor", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _dataChannelAuthToken.default;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
8
14
|
_Object$defineProperty(exports, "LocusRetryStatusInterceptor", {
|
|
9
15
|
enumerable: true,
|
|
10
16
|
get: function get() {
|
|
@@ -19,4 +25,5 @@ _Object$defineProperty(exports, "LocusRouteTokenInterceptor", {
|
|
|
19
25
|
});
|
|
20
26
|
var _locusRetry = _interopRequireDefault(require("./locusRetry"));
|
|
21
27
|
var _locusRouteToken = _interopRequireDefault(require("./locusRouteToken"));
|
|
28
|
+
var _dataChannelAuthToken = _interopRequireDefault(require("./dataChannelAuthToken"));
|
|
22
29
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_locusRetry","_interopRequireDefault","require","_locusRouteToken"],"sources":["index.ts"],"sourcesContent":["import LocusRetryStatusInterceptor from './locusRetry';\nimport LocusRouteTokenInterceptor from './locusRouteToken';\n\nexport {LocusRetryStatusInterceptor, LocusRouteTokenInterceptor};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_locusRetry","_interopRequireDefault","require","_locusRouteToken","_dataChannelAuthToken"],"sources":["index.ts"],"sourcesContent":["import LocusRetryStatusInterceptor from './locusRetry';\nimport LocusRouteTokenInterceptor from './locusRouteToken';\nimport DataChannelAuthTokenInterceptor from './dataChannelAuthToken';\n\nexport {LocusRetryStatusInterceptor, LocusRouteTokenInterceptor, DataChannelAuthTokenInterceptor};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,qBAAA,GAAAH,sBAAA,CAAAC,OAAA","ignoreList":[]}
|
|
@@ -372,7 +372,7 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
|
|
|
372
372
|
throw error;
|
|
373
373
|
});
|
|
374
374
|
},
|
|
375
|
-
version: "3.11.0-next.
|
|
375
|
+
version: "3.11.0-next.30"
|
|
376
376
|
});
|
|
377
377
|
var _default = exports.default = SimultaneousInterpretation;
|
|
378
378
|
//# sourceMappingURL=index.js.map
|
|
@@ -18,7 +18,7 @@ var SILanguage = _webexCore.WebexPlugin.extend({
|
|
|
18
18
|
languageCode: 'number',
|
|
19
19
|
languageName: 'string'
|
|
20
20
|
},
|
|
21
|
-
version: "3.11.0-next.
|
|
21
|
+
version: "3.11.0-next.30"
|
|
22
22
|
});
|
|
23
23
|
var _default = exports.default = SILanguage;
|
|
24
24
|
//# sourceMappingURL=siLanguage.js.map
|
package/dist/meeting/index.js
CHANGED
|
@@ -23,6 +23,7 @@ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/pr
|
|
|
23
23
|
var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
|
|
24
24
|
var _isNan = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/number/is-nan"));
|
|
25
25
|
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
26
|
+
var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign"));
|
|
26
27
|
var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
|
|
27
28
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
|
|
28
29
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
@@ -40,6 +41,7 @@ var _common = require("@webex/common");
|
|
|
40
41
|
var _commonTimers = require("@webex/common-timers");
|
|
41
42
|
var _internalPluginMetrics = require("@webex/internal-plugin-metrics");
|
|
42
43
|
var _internalMediaCore = require("@webex/internal-media-core");
|
|
44
|
+
var _internalPluginLlm = require("@webex/internal-plugin-llm");
|
|
43
45
|
var _mediaHelpers = require("@webex/media-helpers");
|
|
44
46
|
var _internalPluginVoicea = require("@webex/internal-plugin-voicea");
|
|
45
47
|
var _webCapabilities = require("@webex/web-capabilities");
|
|
@@ -3956,6 +3958,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
3956
3958
|
_this14.recordingController.setLocusUrl(_this14.locusUrl);
|
|
3957
3959
|
_this14.controlsOptionsManager.setLocusUrl(_this14.locusUrl, !!isMainLocus);
|
|
3958
3960
|
_this14.webinar.locusUrlUpdate(url);
|
|
3961
|
+
// @ts-ignore
|
|
3962
|
+
_this14.webex.internal.llm.setRefreshHandler(function () {
|
|
3963
|
+
return _this14.refreshDataChannelToken();
|
|
3964
|
+
});
|
|
3959
3965
|
_triggerProxy.default.trigger(_this14, {
|
|
3960
3966
|
file: 'meeting/index',
|
|
3961
3967
|
function: 'setUpLocusSelfListener'
|
|
@@ -6574,14 +6580,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6574
6580
|
value: (function () {
|
|
6575
6581
|
var _updateLLMConnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee18() {
|
|
6576
6582
|
var _this36 = this;
|
|
6577
|
-
var
|
|
6583
|
+
var _ref36, _ref36$url, url, _ref36$info, _ref36$info2, _ref36$info2$datachan, datachannelUrl, _ref36$info2$practice, practiceSessionDatachannelUrl, _ref36$self, _ref36$self2, _ref36$self2$datachan, datachannelToken, _ref36$self2$practice, practiceSessionDatachannelToken, isJoined, dataChannelTokenType, isPracticeSession, currentToken, locusToken, finalToken, dataChannelUrl;
|
|
6578
6584
|
return _regenerator.default.wrap(function (_context18) {
|
|
6579
6585
|
while (1) switch (_context18.prev = _context18.next) {
|
|
6580
6586
|
case 0:
|
|
6581
6587
|
// @ts-ignore - Fix type
|
|
6582
|
-
|
|
6583
|
-
isJoined = this.isJoined();
|
|
6584
|
-
|
|
6588
|
+
_ref36 = this.locusInfo || {}, _ref36$url = _ref36.url, url = _ref36$url === void 0 ? undefined : _ref36$url, _ref36$info = _ref36.info, _ref36$info2 = _ref36$info === void 0 ? {} : _ref36$info, _ref36$info2$datachan = _ref36$info2.datachannelUrl, datachannelUrl = _ref36$info2$datachan === void 0 ? undefined : _ref36$info2$datachan, _ref36$info2$practice = _ref36$info2.practiceSessionDatachannelUrl, practiceSessionDatachannelUrl = _ref36$info2$practice === void 0 ? undefined : _ref36$info2$practice, _ref36$self = _ref36.self, _ref36$self2 = _ref36$self === void 0 ? {} : _ref36$self, _ref36$self2$datachan = _ref36$self2.datachannelToken, datachannelToken = _ref36$self2$datachan === void 0 ? undefined : _ref36$self2$datachan, _ref36$self2$practice = _ref36$self2.practiceSessionDatachannelToken, practiceSessionDatachannelToken = _ref36$self2$practice === void 0 ? undefined : _ref36$self2$practice;
|
|
6589
|
+
isJoined = this.isJoined();
|
|
6590
|
+
dataChannelTokenType = this.getDataChannelTokenType();
|
|
6591
|
+
isPracticeSession = dataChannelTokenType === _internalPluginLlm.DataChannelTokenType.PracticeSession; // @ts-ignore
|
|
6592
|
+
currentToken = this.webex.internal.llm.getDatachannelToken(dataChannelTokenType);
|
|
6593
|
+
locusToken = isPracticeSession ? practiceSessionDatachannelToken : datachannelToken;
|
|
6594
|
+
finalToken = currentToken !== null && currentToken !== void 0 ? currentToken : locusToken;
|
|
6595
|
+
if (!currentToken && locusToken) {
|
|
6596
|
+
// @ts-ignore
|
|
6597
|
+
this.webex.internal.llm.setDatachannelToken(locusToken, dataChannelTokenType);
|
|
6598
|
+
}
|
|
6599
|
+
|
|
6600
|
+
// webinar panelist should use new data channel in practice session
|
|
6601
|
+
dataChannelUrl = isPracticeSession && practiceSessionDatachannelUrl ? practiceSessionDatachannelUrl : datachannelUrl; // @ts-ignore - Fix type
|
|
6585
6602
|
if (!this.webex.internal.llm.isConnected()) {
|
|
6586
6603
|
_context18.next = 3;
|
|
6587
6604
|
break;
|
|
@@ -6614,7 +6631,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6614
6631
|
}
|
|
6615
6632
|
return _context18.abrupt("return", undefined);
|
|
6616
6633
|
case 4:
|
|
6617
|
-
return _context18.abrupt("return", this.webex.internal.llm.registerAndConnect(url, dataChannelUrl).then(function (registerAndConnectResult) {
|
|
6634
|
+
return _context18.abrupt("return", this.webex.internal.llm.registerAndConnect(url, dataChannelUrl, finalToken).then(function (registerAndConnectResult) {
|
|
6618
6635
|
// @ts-ignore - Fix type
|
|
6619
6636
|
_this36.webex.internal.llm.off('event:relay.event', _this36.processRelayEvent);
|
|
6620
6637
|
// @ts-ignore - Fix type
|
|
@@ -9135,8 +9152,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9135
9152
|
* @memberof Meeting
|
|
9136
9153
|
*/
|
|
9137
9154
|
function sendReaction(reactionType, skinToneType) {
|
|
9138
|
-
var _this$
|
|
9139
|
-
var reactionChannelUrl = (_this$
|
|
9155
|
+
var _this$locusInfo7, _this$locusInfo7$cont, _this$locusInfo7$cont2;
|
|
9156
|
+
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;
|
|
9140
9157
|
var participantId = this.members.selfId;
|
|
9141
9158
|
var reactionData = _reactions.Reactions[reactionType];
|
|
9142
9159
|
if (!reactionData) {
|
|
@@ -9166,12 +9183,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9166
9183
|
*/
|
|
9167
9184
|
}, {
|
|
9168
9185
|
key: "extendMeeting",
|
|
9169
|
-
value: function extendMeeting(
|
|
9170
|
-
var meetingPolicyUrl =
|
|
9171
|
-
meetingInstanceId =
|
|
9172
|
-
participantId =
|
|
9173
|
-
|
|
9174
|
-
extensionMinutes =
|
|
9186
|
+
value: function extendMeeting(_ref38) {
|
|
9187
|
+
var meetingPolicyUrl = _ref38.meetingPolicyUrl,
|
|
9188
|
+
meetingInstanceId = _ref38.meetingInstanceId,
|
|
9189
|
+
participantId = _ref38.participantId,
|
|
9190
|
+
_ref38$extensionMinut = _ref38.extensionMinutes,
|
|
9191
|
+
extensionMinutes = _ref38$extensionMinut === void 0 ? 30 : _ref38$extensionMinut;
|
|
9175
9192
|
if (!meetingInstanceId || !participantId) {
|
|
9176
9193
|
return _promise.default.reject(new Error('Missing meetingInstanceId or participantId'));
|
|
9177
9194
|
}
|
|
@@ -9197,8 +9214,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9197
9214
|
}, {
|
|
9198
9215
|
key: "toggleReactions",
|
|
9199
9216
|
value: function toggleReactions(enable) {
|
|
9200
|
-
var _this$
|
|
9201
|
-
var isEnabled = (_this$
|
|
9217
|
+
var _this$locusInfo8, _this$locusInfo8$cont, _this$locusInfo8$cont2;
|
|
9218
|
+
var isEnabled = (_this$locusInfo8 = this.locusInfo) === null || _this$locusInfo8 === void 0 ? void 0 : (_this$locusInfo8$cont = _this$locusInfo8.controls) === null || _this$locusInfo8$cont === void 0 ? void 0 : (_this$locusInfo8$cont2 = _this$locusInfo8$cont.reactions) === null || _this$locusInfo8$cont2 === void 0 ? void 0 : _this$locusInfo8$cont2.enabled;
|
|
9202
9219
|
if (isEnabled && enable || !isEnabled && !enable) {
|
|
9203
9220
|
return _promise.default.resolve("Reactions are already ".concat(isEnabled ? 'enabled' : 'disabled', "."));
|
|
9204
9221
|
}
|
|
@@ -9785,17 +9802,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9785
9802
|
}, {
|
|
9786
9803
|
key: "setStage",
|
|
9787
9804
|
value: function setStage() {
|
|
9788
|
-
var
|
|
9789
|
-
|
|
9790
|
-
activeSpeakerProportion =
|
|
9791
|
-
customBackground =
|
|
9792
|
-
customLogo =
|
|
9793
|
-
customNameLabel =
|
|
9794
|
-
importantParticipants =
|
|
9795
|
-
|
|
9796
|
-
lockAttendeeViewOnStage =
|
|
9797
|
-
|
|
9798
|
-
showActiveSpeaker =
|
|
9805
|
+
var _ref39 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
9806
|
+
_ref39$activeSpeakerP = _ref39.activeSpeakerProportion,
|
|
9807
|
+
activeSpeakerProportion = _ref39$activeSpeakerP === void 0 ? 0.5 : _ref39$activeSpeakerP,
|
|
9808
|
+
customBackground = _ref39.customBackground,
|
|
9809
|
+
customLogo = _ref39.customLogo,
|
|
9810
|
+
customNameLabel = _ref39.customNameLabel,
|
|
9811
|
+
importantParticipants = _ref39.importantParticipants,
|
|
9812
|
+
_ref39$lockAttendeeVi = _ref39.lockAttendeeViewOnStage,
|
|
9813
|
+
lockAttendeeViewOnStage = _ref39$lockAttendeeVi === void 0 ? false : _ref39$lockAttendeeVi,
|
|
9814
|
+
_ref39$showActiveSpea = _ref39.showActiveSpeaker,
|
|
9815
|
+
showActiveSpeaker = _ref39$showActiveSpea === void 0 ? false : _ref39$showActiveSpea;
|
|
9799
9816
|
var videoLayout = {
|
|
9800
9817
|
overrideDefault: true,
|
|
9801
9818
|
lockAttendeeViewOnStageOnly: lockAttendeeViewOnStage,
|
|
@@ -9891,6 +9908,72 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9891
9908
|
value: function cancelSipCallOut(participantId) {
|
|
9892
9909
|
return this.meetingRequest.cancelSipCallOut(participantId);
|
|
9893
9910
|
}
|
|
9911
|
+
|
|
9912
|
+
/**
|
|
9913
|
+
* Method to get new data
|
|
9914
|
+
* @returns {Promise}
|
|
9915
|
+
*/
|
|
9916
|
+
}, {
|
|
9917
|
+
key: "refreshDataChannelToken",
|
|
9918
|
+
value: (function () {
|
|
9919
|
+
var _refreshDataChannelToken = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee41() {
|
|
9920
|
+
var isPracticeSession, dataChannelTokenType, res, msg, err, _t34;
|
|
9921
|
+
return _regenerator.default.wrap(function (_context41) {
|
|
9922
|
+
while (1) switch (_context41.prev = _context41.next) {
|
|
9923
|
+
case 0:
|
|
9924
|
+
isPracticeSession = this.webinar.isJoinPracticeSessionDataChannel();
|
|
9925
|
+
dataChannelTokenType = this.getDataChannelTokenType();
|
|
9926
|
+
_context41.prev = 1;
|
|
9927
|
+
_context41.next = 2;
|
|
9928
|
+
return this.meetingRequest.fetchDatachannelToken({
|
|
9929
|
+
locusUrl: this.locusUrl,
|
|
9930
|
+
requestingParticipantId: this.members.selfId,
|
|
9931
|
+
isPracticeSession: isPracticeSession
|
|
9932
|
+
});
|
|
9933
|
+
case 2:
|
|
9934
|
+
res = _context41.sent;
|
|
9935
|
+
return _context41.abrupt("return", {
|
|
9936
|
+
body: {
|
|
9937
|
+
datachannelToken: res.body.datachannelToken,
|
|
9938
|
+
dataChannelTokenType: dataChannelTokenType
|
|
9939
|
+
}
|
|
9940
|
+
});
|
|
9941
|
+
case 3:
|
|
9942
|
+
_context41.prev = 3;
|
|
9943
|
+
_t34 = _context41["catch"](1);
|
|
9944
|
+
msg = (_t34 === null || _t34 === void 0 ? void 0 : _t34.message) || String(_t34);
|
|
9945
|
+
err = (0, _assign.default)(new Error("Failed to refresh data channel token: ".concat(msg)), {
|
|
9946
|
+
statusCode: _t34 === null || _t34 === void 0 ? void 0 : _t34.statusCode,
|
|
9947
|
+
original: _t34
|
|
9948
|
+
});
|
|
9949
|
+
throw err;
|
|
9950
|
+
case 4:
|
|
9951
|
+
case "end":
|
|
9952
|
+
return _context41.stop();
|
|
9953
|
+
}
|
|
9954
|
+
}, _callee41, this, [[1, 3]]);
|
|
9955
|
+
}));
|
|
9956
|
+
function refreshDataChannelToken() {
|
|
9957
|
+
return _refreshDataChannelToken.apply(this, arguments);
|
|
9958
|
+
}
|
|
9959
|
+
return refreshDataChannelToken;
|
|
9960
|
+
}()
|
|
9961
|
+
/**
|
|
9962
|
+
* Determines the current data channel token type based on the meeting state.
|
|
9963
|
+
*
|
|
9964
|
+
* variant should be used when connecting to the LLM data channel.
|
|
9965
|
+
*
|
|
9966
|
+
* @returns {DataChannelTokenType} The token type representing the current session mode.
|
|
9967
|
+
*/
|
|
9968
|
+
)
|
|
9969
|
+
}, {
|
|
9970
|
+
key: "getDataChannelTokenType",
|
|
9971
|
+
value: function getDataChannelTokenType() {
|
|
9972
|
+
if (this.webinar.isJoinPracticeSessionDataChannel()) {
|
|
9973
|
+
return _internalPluginLlm.DataChannelTokenType.PracticeSession;
|
|
9974
|
+
}
|
|
9975
|
+
return _internalPluginLlm.DataChannelTokenType.Default;
|
|
9976
|
+
}
|
|
9894
9977
|
}]);
|
|
9895
9978
|
}(_webexCore.StatelessWebexPlugin);
|
|
9896
9979
|
//# sourceMappingURL=index.js.map
|