@webex/plugin-meetings 3.12.0-next.7 → 3.12.0-next.70
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 +30 -7
- 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 +13 -1
- package/dist/hashTree/constants.js.map +1 -1
- package/dist/hashTree/hashTreeParser.js +880 -382
- package/dist/hashTree/hashTreeParser.js.map +1 -1
- package/dist/hashTree/utils.js +42 -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/dataChannelAuthToken.js +75 -15
- package/dist/interceptors/dataChannelAuthToken.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/interpretation.types.js +7 -0
- package/dist/interpretation/interpretation.types.js.map +1 -0
- 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 +298 -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 +1046 -689
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +10 -1
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +5 -2
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +20 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +2 -2
- package/dist/meeting-info/meeting-info-v2.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 +9 -1
- 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 +2 -0
- package/dist/types/hashTree/hashTreeParser.d.ts +146 -17
- package/dist/types/hashTree/utils.d.ts +18 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/interceptors/locusRetry.d.ts +4 -4
- package/dist/types/interpretation/interpretation.types.d.ts +10 -0
- package/dist/types/locus-info/index.d.ts +50 -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 +78 -5
- package/dist/types/meeting/request.d.ts +1 -0
- 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 +305 -159
- 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 +13 -2
- 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 +16 -0
- package/src/hashTree/hashTreeParser.ts +580 -196
- package/src/hashTree/utils.ts +36 -0
- package/src/index.ts +6 -0
- package/src/interceptors/dataChannelAuthToken.ts +88 -12
- package/src/interceptors/locusRetry.ts +25 -4
- package/src/interpretation/index.ts +27 -9
- package/src/interpretation/interpretation.types.ts +11 -0
- package/src/locus-info/controlsUtils.ts +3 -1
- package/src/locus-info/index.ts +293 -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 +386 -48
- package/src/meeting/muteState.ts +10 -1
- package/src/meeting/request.ts +11 -0
- package/src/meeting/util.ts +21 -2
- package/src/meeting-info/meeting-info-v2.ts +4 -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 +214 -36
- 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 +1838 -180
- package/test/unit/spec/hashTree/utils.ts +125 -1
- package/test/unit/spec/interceptors/dataChannelAuthToken.ts +196 -0
- 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 +487 -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 +1240 -37
- package/test/unit/spec/meeting/muteState.js +81 -0
- package/test/unit/spec/meeting/request.js +12 -0
- package/test/unit/spec/meeting/utils.js +33 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +19 -10
- 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 +329 -28
package/dist/webinar/index.js
CHANGED
|
@@ -13,15 +13,25 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/
|
|
|
13
13
|
var _webexCore = require("@webex/webex-core");
|
|
14
14
|
var _uuid = _interopRequireDefault(require("uuid"));
|
|
15
15
|
var _lodash = require("lodash");
|
|
16
|
-
var _internalPluginLlm = require("@webex/internal-plugin-llm");
|
|
17
16
|
var _constants = require("../constants");
|
|
18
17
|
var _collection = _interopRequireDefault(require("./collection"));
|
|
19
18
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
19
|
+
var _util = _interopRequireDefault(require("../meeting/util"));
|
|
20
20
|
var _utils = require("./utils");
|
|
21
21
|
/*!
|
|
22
22
|
* Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
|
+
var PS_LLM_EVENTS = [{
|
|
26
|
+
event: "event:relay.event:".concat(_constants.LLM_PRACTICE_SESSION),
|
|
27
|
+
listenerKey: 'relay',
|
|
28
|
+
handlerKey: 'processRelayEvent'
|
|
29
|
+
}, {
|
|
30
|
+
event: "".concat(_constants.LOCUS_LLM_EVENT, ":").concat(_constants.LLM_PRACTICE_SESSION),
|
|
31
|
+
listenerKey: 'locusLLM',
|
|
32
|
+
handlerKey: 'processLocusLLMEvent'
|
|
33
|
+
}];
|
|
34
|
+
|
|
25
35
|
/**
|
|
26
36
|
* @class Webinar
|
|
27
37
|
*/
|
|
@@ -100,6 +110,31 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
100
110
|
isDemoted: isDemoted
|
|
101
111
|
};
|
|
102
112
|
},
|
|
113
|
+
/**
|
|
114
|
+
* Resolves the meeting associated with this webinar instance, guarded against the
|
|
115
|
+
* meetingId pointer drifting onto an unrelated transient meeting (e.g. an inbound
|
|
116
|
+
* 1:1 call) that may exist in the meeting collection. Returns the meeting only when
|
|
117
|
+
* its locusUrl matches this webinar's tracked locusUrl. Returns undefined (with a
|
|
118
|
+
* warning) when the meeting cannot be resolved or when the webinar's locusUrl has
|
|
119
|
+
* not been initialized yet — callers must treat this as "no owned meeting" rather
|
|
120
|
+
* than fall through to an unvalidated lookup.
|
|
121
|
+
* @returns {object|undefined}
|
|
122
|
+
*/
|
|
123
|
+
getValidatedWebinarMeeting: function getValidatedWebinarMeeting() {
|
|
124
|
+
var meeting = this.webex.meetings.getMeetingByType(_constants._ID_, this.meetingId);
|
|
125
|
+
if (!meeting) {
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
if (!this.locusUrl) {
|
|
129
|
+
_loggerProxy.default.logger.warn("Webinar:index#getValidatedWebinarMeeting --> skipping; webinar locusUrl is not yet initialized for meetingId ".concat(this.meetingId));
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
if (meeting.locusUrl !== this.locusUrl) {
|
|
133
|
+
_loggerProxy.default.logger.warn("Webinar:index#getValidatedWebinarMeeting --> skipping; meeting ".concat(this.meetingId, " locusUrl ").concat(meeting.locusUrl, " does not match webinar locusUrl ").concat(this.locusUrl));
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
return meeting;
|
|
137
|
+
},
|
|
103
138
|
/**
|
|
104
139
|
* should join practice session data channel or not
|
|
105
140
|
* @param {Object} {isPromoted: boolean, isDemoted: boolean}} Role transition states
|
|
@@ -108,7 +143,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
108
143
|
updateStatusByRole: function updateStatusByRole(_ref) {
|
|
109
144
|
var isPromoted = _ref.isPromoted,
|
|
110
145
|
isDemoted = _ref.isDemoted;
|
|
111
|
-
var meeting = this.
|
|
146
|
+
var meeting = this.getValidatedWebinarMeeting();
|
|
112
147
|
if (isDemoted && (meeting === null || meeting === void 0 ? void 0 : meeting.shareStatus) === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE || isPromoted) {
|
|
113
148
|
var _meeting$locusInfo, _meeting$locusInfo2;
|
|
114
149
|
// attendees in webinar should subscribe streaming for whiteboard sharing
|
|
@@ -126,45 +161,82 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
126
161
|
},
|
|
127
162
|
/**
|
|
128
163
|
* Disconnects the practice session data channel and removes its relay listener.
|
|
164
|
+
* The listener reference removed here is the exact callback captured at subscribe
|
|
165
|
+
* time (see updatePSDataChannel) so that cleanup is correct even if the underlying
|
|
166
|
+
* meeting can no longer be resolved (e.g. locusUrl mismatch).
|
|
129
167
|
* @returns {Promise<void>}
|
|
130
168
|
*/
|
|
131
169
|
cleanupPSDataChannel: function cleanupPSDataChannel() {
|
|
132
170
|
var _this = this;
|
|
133
171
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
134
|
-
var
|
|
172
|
+
var _this$webex$internal$, isOwner, disconnected, _this$webex$internal$2, _this$webex$internal$3, _i, _PS_LLM_EVENTS, _PS_LLM_EVENTS$_i, event, listenerKey, _t;
|
|
135
173
|
return _regenerator.default.wrap(function (_context) {
|
|
136
174
|
while (1) switch (_context.prev = _context.next) {
|
|
137
175
|
case 0:
|
|
176
|
+
_this$webex$internal$ = _this.webex.internal.llm.resolveSessionOwnership(_this.meetingId, _constants.LLM_PRACTICE_SESSION), isOwner = _this$webex$internal$.isOwner;
|
|
177
|
+
_this.llmListeners = _this.llmListeners || {};
|
|
138
178
|
if (_this._pendingOnlineListener) {
|
|
139
179
|
// @ts-ignore - Fix type
|
|
140
180
|
_this.webex.internal.llm.off('online', _this._pendingOnlineListener);
|
|
141
181
|
_this._pendingOnlineListener = null;
|
|
142
182
|
}
|
|
143
|
-
|
|
144
|
-
_context.next =
|
|
183
|
+
_context.prev = 1;
|
|
184
|
+
_context.next = 2;
|
|
145
185
|
return _this.webex.internal.llm.disconnectLLM({
|
|
146
186
|
code: 3050,
|
|
147
187
|
reason: 'done (permanent)'
|
|
148
|
-
}, _constants.LLM_PRACTICE_SESSION);
|
|
149
|
-
case 1:
|
|
150
|
-
// @ts-ignore - Fix type
|
|
151
|
-
_this.webex.internal.llm.off("event:relay.event:".concat(_constants.LLM_PRACTICE_SESSION), meeting === null || meeting === void 0 ? void 0 : meeting.processRelayEvent);
|
|
188
|
+
}, _constants.LLM_PRACTICE_SESSION, _this.meetingId);
|
|
152
189
|
case 2:
|
|
190
|
+
disconnected = _context.sent;
|
|
191
|
+
if (!disconnected) {
|
|
192
|
+
_loggerProxy.default.logger.info("Webinar:index#cleanupPSDataChannel --> skipping disconnect; practice-session LLM is not owned by meeting ".concat(_this.meetingId));
|
|
193
|
+
}
|
|
194
|
+
_context.next = 4;
|
|
195
|
+
break;
|
|
196
|
+
case 3:
|
|
197
|
+
_context.prev = 3;
|
|
198
|
+
_t = _context["catch"](1);
|
|
199
|
+
// disconnectLLM clears ownership only on success; release a stale owner
|
|
200
|
+
// tag here so other meeting instances can reclaim practice-session LLM.
|
|
201
|
+
if (isOwner) {
|
|
202
|
+
// @ts-ignore - Fix type
|
|
203
|
+
(_this$webex$internal$2 = (_this$webex$internal$3 = _this.webex.internal.llm).setOwnerMeetingId) === null || _this$webex$internal$2 === void 0 ? void 0 : _this$webex$internal$2.call(_this$webex$internal$3, undefined, _constants.LLM_PRACTICE_SESSION);
|
|
204
|
+
}
|
|
205
|
+
throw _t;
|
|
206
|
+
case 4:
|
|
207
|
+
_context.prev = 4;
|
|
208
|
+
if (_this._practiceSessionRelayListener) {
|
|
209
|
+
// @ts-ignore - Fix type
|
|
210
|
+
_this.webex.internal.llm.off("event:relay.event:".concat(_constants.LLM_PRACTICE_SESSION), _this._practiceSessionRelayListener);
|
|
211
|
+
}
|
|
212
|
+
_this._practiceSessionRelayListener = null;
|
|
213
|
+
for (_i = 0, _PS_LLM_EVENTS = PS_LLM_EVENTS; _i < _PS_LLM_EVENTS.length; _i++) {
|
|
214
|
+
_PS_LLM_EVENTS$_i = _PS_LLM_EVENTS[_i], event = _PS_LLM_EVENTS$_i.event, listenerKey = _PS_LLM_EVENTS$_i.listenerKey;
|
|
215
|
+
if (_this.llmListeners[listenerKey]) {
|
|
216
|
+
// @ts-ignore - Fix type
|
|
217
|
+
_this.webex.internal.llm.off(event, _this.llmListeners[listenerKey]);
|
|
218
|
+
_this.llmListeners[listenerKey] = null;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return _context.finish(4);
|
|
222
|
+
case 5:
|
|
153
223
|
case "end":
|
|
154
224
|
return _context.stop();
|
|
155
225
|
}
|
|
156
|
-
}, _callee);
|
|
226
|
+
}, _callee, null, [[1, 3, 4, 5]]);
|
|
157
227
|
}))();
|
|
158
228
|
},
|
|
159
229
|
/**
|
|
160
230
|
* Ensures practice-session token exists before registering the practice LLM channel.
|
|
231
|
+
* Caller is responsible for passing a meeting that has already been resolved via
|
|
232
|
+
* getValidatedWebinarMeeting() — this method does not re-validate ownership.
|
|
161
233
|
* @param {object} meeting
|
|
162
234
|
* @returns {Promise<string|undefined>}
|
|
163
235
|
*/
|
|
164
236
|
ensurePracticeSessionDatachannelToken: function ensurePracticeSessionDatachannelToken(meeting) {
|
|
165
237
|
var _this2 = this;
|
|
166
238
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
167
|
-
var isDataChannelTokenEnabled, cachedToken, _refreshResponse$body, refreshResponse, _ref2, datachannelToken, dataChannelTokenType,
|
|
239
|
+
var isDataChannelTokenEnabled, cachedToken, _refreshResponse$body, refreshResponse, _ref2, datachannelToken, dataChannelTokenType, _t2;
|
|
168
240
|
return _regenerator.default.wrap(function (_context2) {
|
|
169
241
|
while (1) switch (_context2.prev = _context2.next) {
|
|
170
242
|
case 0:
|
|
@@ -179,7 +251,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
179
251
|
return _context2.abrupt("return", undefined);
|
|
180
252
|
case 2:
|
|
181
253
|
// @ts-ignore
|
|
182
|
-
cachedToken = _this2.webex.internal.llm.getDatachannelToken(
|
|
254
|
+
cachedToken = _this2.webex.internal.llm.getDatachannelToken(_constants.LLM_PRACTICE_SESSION, _this2.meetingId);
|
|
183
255
|
if (!cachedToken) {
|
|
184
256
|
_context2.next = 3;
|
|
185
257
|
break;
|
|
@@ -199,12 +271,12 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
199
271
|
return _context2.abrupt("return", undefined);
|
|
200
272
|
case 5:
|
|
201
273
|
// @ts-ignore
|
|
202
|
-
_this2.webex.internal.llm.setDatachannelToken(datachannelToken, dataChannelTokenType ||
|
|
274
|
+
_this2.webex.internal.llm.setDatachannelToken(datachannelToken, dataChannelTokenType || _constants.LLM_PRACTICE_SESSION, _this2.meetingId);
|
|
203
275
|
return _context2.abrupt("return", datachannelToken);
|
|
204
276
|
case 6:
|
|
205
277
|
_context2.prev = 6;
|
|
206
|
-
|
|
207
|
-
_loggerProxy.default.logger.warn("Webinar:index#ensurePracticeSessionDatachannelToken --> failed to proactively refresh practice-session token: ".concat((
|
|
278
|
+
_t2 = _context2["catch"](3);
|
|
279
|
+
_loggerProxy.default.logger.warn("Webinar:index#ensurePracticeSessionDatachannelToken --> failed to proactively refresh practice-session token: ".concat((_t2 === null || _t2 === void 0 ? void 0 : _t2.message) || String(_t2)));
|
|
208
280
|
return _context2.abrupt("return", undefined);
|
|
209
281
|
case 7:
|
|
210
282
|
case "end":
|
|
@@ -221,14 +293,17 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
221
293
|
updatePSDataChannel: function updatePSDataChannel() {
|
|
222
294
|
var _this3 = this;
|
|
223
295
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
|
|
224
|
-
var
|
|
296
|
+
var _this3$webex$internal3, _this3$webex$internal4;
|
|
297
|
+
var invocationSequence, meeting, isPracticeSession, _this3$webex$internal, currentOwner, isOwner, _ref3, _ref3$url, url, _ref3$info, _ref3$info2, _ref3$info2$practiceS, practiceSessionDatachannelUrl, practiceSessionDatachannelToken, isCaptionBoxOn, _onDefaultSessionConnected, refreshedPracticeSessionToken, latestPracticeSessionDatachannelUrl, isStillPracticeSession, _this3$webex$internal2, currentOwnerBeforeConnect, isOwnerBeforeConnect;
|
|
225
298
|
return _regenerator.default.wrap(function (_context3) {
|
|
226
299
|
while (1) switch (_context3.prev = _context3.next) {
|
|
227
300
|
case 0:
|
|
301
|
+
_this3.llmListeners = _this3.llmListeners || {};
|
|
228
302
|
_this3._updatePSDataChannelSequence = (_this3._updatePSDataChannelSequence || 0) + 1;
|
|
229
303
|
invocationSequence = _this3._updatePSDataChannelSequence;
|
|
230
|
-
meeting = _this3.
|
|
304
|
+
meeting = _this3.getValidatedWebinarMeeting();
|
|
231
305
|
isPracticeSession = (meeting === null || meeting === void 0 ? void 0 : meeting.isJoined()) && _this3.isJoinPracticeSessionDataChannel();
|
|
306
|
+
_this3$webex$internal = _this3.webex.internal.llm.resolveSessionOwnership(_this3.meetingId, _constants.LLM_PRACTICE_SESSION), currentOwner = _this3$webex$internal.currentOwner, isOwner = _this3$webex$internal.isOwner;
|
|
232
307
|
if (isPracticeSession) {
|
|
233
308
|
_context3.next = 2;
|
|
234
309
|
break;
|
|
@@ -238,18 +313,25 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
238
313
|
case 1:
|
|
239
314
|
return _context3.abrupt("return", undefined);
|
|
240
315
|
case 2:
|
|
316
|
+
if (isOwner) {
|
|
317
|
+
_context3.next = 3;
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
_loggerProxy.default.logger.info("Webinar:index#updatePSDataChannel --> skipping; practice-session LLM owned by meeting ".concat(currentOwner, ", not ").concat(_this3.meetingId));
|
|
321
|
+
return _context3.abrupt("return", undefined);
|
|
322
|
+
case 3:
|
|
241
323
|
// @ts-ignore - Fix type
|
|
242
324
|
_ref3 = (meeting === null || meeting === void 0 ? void 0 : meeting.locusInfo) || {}, _ref3$url = _ref3.url, url = _ref3$url === void 0 ? undefined : _ref3$url, _ref3$info = _ref3.info, _ref3$info2 = _ref3$info === void 0 ? {} : _ref3$info, _ref3$info2$practiceS = _ref3$info2.practiceSessionDatachannelUrl, practiceSessionDatachannelUrl = _ref3$info2$practiceS === void 0 ? undefined : _ref3$info2$practiceS; // @ts-ignore
|
|
243
|
-
practiceSessionDatachannelToken = _this3.webex.internal.llm.getDatachannelToken(
|
|
325
|
+
practiceSessionDatachannelToken = _this3.webex.internal.llm.getDatachannelToken(_constants.LLM_PRACTICE_SESSION, _this3.meetingId);
|
|
244
326
|
isCaptionBoxOn = _this3.webex.internal.voicea.getIsCaptionBoxOn();
|
|
245
327
|
if (practiceSessionDatachannelUrl) {
|
|
246
|
-
_context3.next =
|
|
328
|
+
_context3.next = 4;
|
|
247
329
|
break;
|
|
248
330
|
}
|
|
249
331
|
return _context3.abrupt("return", undefined);
|
|
250
|
-
case
|
|
332
|
+
case 4:
|
|
251
333
|
if (!_this3.webex.internal.llm.isConnected(_constants.LLM_PRACTICE_SESSION)) {
|
|
252
|
-
_context3.next =
|
|
334
|
+
_context3.next = 6;
|
|
253
335
|
break;
|
|
254
336
|
}
|
|
255
337
|
if (!(
|
|
@@ -257,14 +339,14 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
257
339
|
url === _this3.webex.internal.llm.getLocusUrl(_constants.LLM_PRACTICE_SESSION) &&
|
|
258
340
|
// @ts-ignore - Fix type
|
|
259
341
|
practiceSessionDatachannelUrl === _this3.webex.internal.llm.getDatachannelUrl(_constants.LLM_PRACTICE_SESSION))) {
|
|
260
|
-
_context3.next =
|
|
342
|
+
_context3.next = 5;
|
|
261
343
|
break;
|
|
262
344
|
}
|
|
263
345
|
return _context3.abrupt("return", undefined);
|
|
264
|
-
case 4:
|
|
265
|
-
_context3.next = 5;
|
|
266
|
-
return _this3.cleanupPSDataChannel();
|
|
267
346
|
case 5:
|
|
347
|
+
_context3.next = 6;
|
|
348
|
+
return _this3.cleanupPSDataChannel();
|
|
349
|
+
case 6:
|
|
268
350
|
// Ensure the default session data channel is connected before connecting the practice session.
|
|
269
351
|
// Subscribe before checking isConnected() to avoid a race where the 'online' event fires
|
|
270
352
|
// between the check and the subscription — Mercury does not replay missed events.
|
|
@@ -282,44 +364,85 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
282
364
|
|
|
283
365
|
// @ts-ignore - Fix type
|
|
284
366
|
if (_this3.webex.internal.llm.isConnected()) {
|
|
285
|
-
_context3.next =
|
|
367
|
+
_context3.next = 7;
|
|
286
368
|
break;
|
|
287
369
|
}
|
|
288
370
|
_loggerProxy.default.logger.info('Webinar:index#updatePSDataChannel --> default session not yet connected, deferring practice session connect.');
|
|
289
371
|
return _context3.abrupt("return", undefined);
|
|
290
|
-
case
|
|
372
|
+
case 7:
|
|
291
373
|
// Default session is already connected — cancel the pending listener and proceed
|
|
292
374
|
if (_this3._pendingOnlineListener) {
|
|
293
375
|
// @ts-ignore - Fix type
|
|
294
376
|
_this3.webex.internal.llm.off('online', _this3._pendingOnlineListener);
|
|
295
377
|
_this3._pendingOnlineListener = null;
|
|
296
378
|
}
|
|
297
|
-
_context3.next =
|
|
379
|
+
_context3.next = 8;
|
|
298
380
|
return _this3.ensurePracticeSessionDatachannelToken(meeting);
|
|
299
|
-
case
|
|
381
|
+
case 8:
|
|
300
382
|
refreshedPracticeSessionToken = _context3.sent;
|
|
301
383
|
latestPracticeSessionDatachannelUrl = (0, _lodash.get)(meeting, 'locusInfo.info.practiceSessionDatachannelUrl');
|
|
302
384
|
isStillPracticeSession = (meeting === null || meeting === void 0 ? void 0 : meeting.isJoined()) && _this3.isJoinPracticeSessionDataChannel(); // Skip stale invocations after async refresh to avoid reconnecting a session
|
|
303
385
|
// that was already updated/cleaned by a newer state transition.
|
|
304
386
|
if (!(invocationSequence !== _this3._updatePSDataChannelSequence || !isStillPracticeSession || !latestPracticeSessionDatachannelUrl || latestPracticeSessionDatachannelUrl !== practiceSessionDatachannelUrl)) {
|
|
305
|
-
_context3.next =
|
|
387
|
+
_context3.next = 9;
|
|
306
388
|
break;
|
|
307
389
|
}
|
|
308
390
|
return _context3.abrupt("return", undefined);
|
|
309
|
-
case
|
|
391
|
+
case 9:
|
|
310
392
|
if (refreshedPracticeSessionToken) {
|
|
311
393
|
practiceSessionDatachannelToken = refreshedPracticeSessionToken;
|
|
312
394
|
}
|
|
395
|
+
_this3$webex$internal2 = _this3.webex.internal.llm.resolveSessionOwnership(_this3.meetingId, _constants.LLM_PRACTICE_SESSION), currentOwnerBeforeConnect = _this3$webex$internal2.currentOwner, isOwnerBeforeConnect = _this3$webex$internal2.isOwner;
|
|
396
|
+
if (isOwnerBeforeConnect) {
|
|
397
|
+
_context3.next = 10;
|
|
398
|
+
break;
|
|
399
|
+
}
|
|
400
|
+
_loggerProxy.default.logger.info("Webinar:index#updatePSDataChannel --> skipping pre-connect owner write; practice-session LLM owned by meeting ".concat(currentOwnerBeforeConnect, ", not ").concat(_this3.meetingId));
|
|
401
|
+
return _context3.abrupt("return", undefined);
|
|
402
|
+
case 10:
|
|
403
|
+
// Ensure refresh for practice datachannel requests is routed to this
|
|
404
|
+
// meeting only when we are actually about to connect the practice session.
|
|
405
|
+
// This avoids claiming ownership in flows that return early (e.g. missing
|
|
406
|
+
// practiceSessionDatachannelUrl or waiting for default session online).
|
|
407
|
+
// @ts-ignore - Fix type
|
|
408
|
+
_this3.webex.internal.llm.setRefreshHandler(function () {
|
|
409
|
+
return meeting.refreshDataChannelToken();
|
|
410
|
+
}, _constants.LLM_PRACTICE_SESSION, _this3.meetingId);
|
|
411
|
+
// @ts-ignore - Fix type
|
|
412
|
+
(_this3$webex$internal3 = (_this3$webex$internal4 = _this3.webex.internal.llm).setOwnerMeetingId) === null || _this3$webex$internal3 === void 0 ? void 0 : _this3$webex$internal3.call(_this3$webex$internal4, _this3.meetingId, _constants.LLM_PRACTICE_SESSION);
|
|
313
413
|
|
|
314
414
|
// @ts-ignore - Fix type
|
|
315
415
|
return _context3.abrupt("return", _this3.webex.internal.llm.registerAndConnect(url, practiceSessionDatachannelUrl, practiceSessionDatachannelToken, _constants.LLM_PRACTICE_SESSION).then(function (registerAndConnectResult) {
|
|
316
|
-
var _this3$webex$
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
_this3.
|
|
416
|
+
var _this3$webex$internal8, _this3$webex$internal9;
|
|
417
|
+
var _this3$webex$internal5 = _this3.webex.internal.llm.resolveSessionOwnership(_this3.meetingId, _constants.LLM_PRACTICE_SESSION),
|
|
418
|
+
currentOwnerAfterConnect = _this3$webex$internal5.currentOwner,
|
|
419
|
+
isOwnerAfterConnect = _this3$webex$internal5.isOwner;
|
|
420
|
+
if (_this3.meetingId && isOwnerAfterConnect) {
|
|
421
|
+
var _this3$webex$internal6, _this3$webex$internal7;
|
|
422
|
+
// @ts-ignore - Fix type
|
|
423
|
+
(_this3$webex$internal6 = (_this3$webex$internal7 = _this3.webex.internal.llm).setOwnerMeetingId) === null || _this3$webex$internal6 === void 0 ? void 0 : _this3$webex$internal6.call(_this3$webex$internal7, _this3.meetingId, _constants.LLM_PRACTICE_SESSION);
|
|
424
|
+
} else {
|
|
425
|
+
_loggerProxy.default.logger.info("Webinar:index#updatePSDataChannel --> skipping post-connect owner write; practice-session LLM owned by meeting ".concat(currentOwnerAfterConnect, ", not ").concat(_this3.meetingId));
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
// Track the exact listener references so cleanupPSDataChannel can
|
|
429
|
+
// unsubscribe deterministically, even if the meeting can no longer
|
|
430
|
+
// be resolved at cleanup time.
|
|
431
|
+
for (var _i2 = 0, _PS_LLM_EVENTS2 = PS_LLM_EVENTS; _i2 < _PS_LLM_EVENTS2.length; _i2++) {
|
|
432
|
+
var _PS_LLM_EVENTS2$_i = _PS_LLM_EVENTS2[_i2],
|
|
433
|
+
event = _PS_LLM_EVENTS2$_i.event,
|
|
434
|
+
listenerKey = _PS_LLM_EVENTS2$_i.listenerKey,
|
|
435
|
+
handlerKey = _PS_LLM_EVENTS2$_i.handlerKey;
|
|
436
|
+
if (_this3.llmListeners[listenerKey]) {
|
|
437
|
+
// @ts-ignore - Fix type
|
|
438
|
+
_this3.webex.internal.llm.off(event, _this3.llmListeners[listenerKey]);
|
|
439
|
+
}
|
|
440
|
+
_this3.llmListeners[listenerKey] = meeting === null || meeting === void 0 ? void 0 : meeting[handlerKey];
|
|
441
|
+
// @ts-ignore - Fix type
|
|
442
|
+
_this3.webex.internal.llm.on(event, _this3.llmListeners[listenerKey]);
|
|
443
|
+
}
|
|
321
444
|
// @ts-ignore - Fix type
|
|
322
|
-
(_this3$webex$
|
|
445
|
+
(_this3$webex$internal8 = _this3.webex.internal.voicea) === null || _this3$webex$internal8 === void 0 ? void 0 : (_this3$webex$internal9 = _this3$webex$internal8.announce) === null || _this3$webex$internal9 === void 0 ? void 0 : _this3$webex$internal9.call(_this3$webex$internal8);
|
|
323
446
|
if (isCaptionBoxOn) {
|
|
324
447
|
_this3.webex.internal.voicea.updateSubchannelSubscriptions({
|
|
325
448
|
subscribe: ['transcription']
|
|
@@ -327,8 +450,20 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
327
450
|
}
|
|
328
451
|
_loggerProxy.default.logger.info("Webinar:index#updatePSDataChannel --> enabled to receive relay events for default session for ".concat(_constants.LLM_PRACTICE_SESSION, "!"));
|
|
329
452
|
return _promise.default.resolve(registerAndConnectResult);
|
|
453
|
+
}).catch(function (error) {
|
|
454
|
+
var _this3$webex$internal0 = _this3.webex.internal.llm.resolveSessionOwnership(_this3.meetingId, _constants.LLM_PRACTICE_SESSION),
|
|
455
|
+
currentOwnerAfterRegisterFailure = _this3$webex$internal0.currentOwner,
|
|
456
|
+
isOwnerAfterRegisterFailure = _this3$webex$internal0.isOwner;
|
|
457
|
+
if (isOwnerAfterRegisterFailure) {
|
|
458
|
+
var _this3$webex$internal1, _this3$webex$internal10;
|
|
459
|
+
// @ts-ignore - Fix type
|
|
460
|
+
(_this3$webex$internal1 = (_this3$webex$internal10 = _this3.webex.internal.llm).setOwnerMeetingId) === null || _this3$webex$internal1 === void 0 ? void 0 : _this3$webex$internal1.call(_this3$webex$internal10, undefined, _constants.LLM_PRACTICE_SESSION);
|
|
461
|
+
} else {
|
|
462
|
+
_loggerProxy.default.logger.info("Webinar:index#updatePSDataChannel --> skipping failure owner release; practice-session LLM owned by meeting ".concat(currentOwnerAfterRegisterFailure, ", not ").concat(_this3.meetingId));
|
|
463
|
+
}
|
|
464
|
+
throw error;
|
|
330
465
|
}));
|
|
331
|
-
case
|
|
466
|
+
case 11:
|
|
332
467
|
case "end":
|
|
333
468
|
return _context3.stop();
|
|
334
469
|
}
|
|
@@ -341,6 +476,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
341
476
|
* @returns {Promise}
|
|
342
477
|
*/
|
|
343
478
|
setPracticeSessionState: function setPracticeSessionState(enabled) {
|
|
479
|
+
var meeting = this.getValidatedWebinarMeeting();
|
|
344
480
|
return this.request({
|
|
345
481
|
method: _constants.HTTP_VERBS.PATCH,
|
|
346
482
|
uri: "".concat(this.locusUrl, "/controls"),
|
|
@@ -349,6 +485,9 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
349
485
|
enabled: enabled
|
|
350
486
|
}
|
|
351
487
|
}
|
|
488
|
+
}).then(function (response) {
|
|
489
|
+
_util.default.updateLocusFromApiResponse(meeting, response);
|
|
490
|
+
return response;
|
|
352
491
|
}).catch(function (error) {
|
|
353
492
|
_loggerProxy.default.logger.error('Meeting:webinar#setPracticeSessionState failed', error);
|
|
354
493
|
throw error;
|
|
@@ -372,7 +511,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
372
511
|
startWebcast: function startWebcast(meeting, layout) {
|
|
373
512
|
var _this4 = this;
|
|
374
513
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4() {
|
|
375
|
-
var
|
|
514
|
+
var _t3, _t4, _t5, _t6, _t7, _t8, _t9, _t0;
|
|
376
515
|
return _regenerator.default.wrap(function (_context4) {
|
|
377
516
|
while (1) switch (_context4.prev = _context4.next) {
|
|
378
517
|
case 0:
|
|
@@ -383,20 +522,20 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
383
522
|
_loggerProxy.default.logger.error("Meeting:webinar#startWebcast failed --> meeting parameter : ".concat(meeting));
|
|
384
523
|
throw new Error('Meeting parameter does not meet expectations');
|
|
385
524
|
case 1:
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
525
|
+
_t3 = _this4;
|
|
526
|
+
_t4 = _constants.HTTP_VERBS.PUT;
|
|
527
|
+
_t5 = "".concat(_this4.webcastInstanceUrl, "/streaming");
|
|
528
|
+
_t6 = _defineProperty2.default;
|
|
390
529
|
_context4.next = 2;
|
|
391
530
|
return _this4.webex.credentials.getUserToken();
|
|
392
531
|
case 2:
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
authorization:
|
|
397
|
-
trackingId:
|
|
532
|
+
_t7 = _context4.sent;
|
|
533
|
+
_t8 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
|
|
534
|
+
_t9 = _t6({
|
|
535
|
+
authorization: _t7,
|
|
536
|
+
trackingId: _t8
|
|
398
537
|
}, _constants.HEADERS.CONTENT_TYPE, _constants.HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON);
|
|
399
|
-
|
|
538
|
+
_t0 = {
|
|
400
539
|
action: 'start',
|
|
401
540
|
meetingInfo: {
|
|
402
541
|
locusId: meeting.locusId,
|
|
@@ -404,11 +543,11 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
404
543
|
},
|
|
405
544
|
layout: layout
|
|
406
545
|
};
|
|
407
|
-
return _context4.abrupt("return",
|
|
408
|
-
method:
|
|
409
|
-
uri:
|
|
410
|
-
headers:
|
|
411
|
-
body:
|
|
546
|
+
return _context4.abrupt("return", _t3.request.call(_t3, {
|
|
547
|
+
method: _t4,
|
|
548
|
+
uri: _t5,
|
|
549
|
+
headers: _t9,
|
|
550
|
+
body: _t0
|
|
412
551
|
}).catch(function (error) {
|
|
413
552
|
_loggerProxy.default.logger.error('Meeting:webinar#startWebcast failed', error);
|
|
414
553
|
throw error;
|
|
@@ -427,31 +566,31 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
427
566
|
stopWebcast: function stopWebcast() {
|
|
428
567
|
var _this5 = this;
|
|
429
568
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee5() {
|
|
430
|
-
var
|
|
569
|
+
var _t1, _t10, _t11, _t12, _t13, _t14, _t15, _t16;
|
|
431
570
|
return _regenerator.default.wrap(function (_context5) {
|
|
432
571
|
while (1) switch (_context5.prev = _context5.next) {
|
|
433
572
|
case 0:
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
573
|
+
_t1 = _this5;
|
|
574
|
+
_t10 = _constants.HTTP_VERBS.PUT;
|
|
575
|
+
_t11 = "".concat(_this5.webcastInstanceUrl, "/streaming");
|
|
576
|
+
_t12 = _defineProperty2.default;
|
|
438
577
|
_context5.next = 1;
|
|
439
578
|
return _this5.webex.credentials.getUserToken();
|
|
440
579
|
case 1:
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
authorization:
|
|
445
|
-
trackingId:
|
|
580
|
+
_t13 = _context5.sent;
|
|
581
|
+
_t14 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
|
|
582
|
+
_t15 = _t12({
|
|
583
|
+
authorization: _t13,
|
|
584
|
+
trackingId: _t14
|
|
446
585
|
}, _constants.HEADERS.CONTENT_TYPE, _constants.HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON);
|
|
447
|
-
|
|
586
|
+
_t16 = {
|
|
448
587
|
action: 'stop'
|
|
449
588
|
};
|
|
450
|
-
return _context5.abrupt("return",
|
|
451
|
-
method:
|
|
452
|
-
uri:
|
|
453
|
-
headers:
|
|
454
|
-
body:
|
|
589
|
+
return _context5.abrupt("return", _t1.request.call(_t1, {
|
|
590
|
+
method: _t10,
|
|
591
|
+
uri: _t11,
|
|
592
|
+
headers: _t15,
|
|
593
|
+
body: _t16
|
|
455
594
|
}).catch(function (error) {
|
|
456
595
|
_loggerProxy.default.logger.error('Meeting:webinar#stopWebcast failed', error);
|
|
457
596
|
throw error;
|
|
@@ -470,26 +609,26 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
470
609
|
queryWebcastLayout: function queryWebcastLayout() {
|
|
471
610
|
var _this6 = this;
|
|
472
611
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee6() {
|
|
473
|
-
var
|
|
612
|
+
var _t17, _t18, _t19, _t20, _t21, _t22;
|
|
474
613
|
return _regenerator.default.wrap(function (_context6) {
|
|
475
614
|
while (1) switch (_context6.prev = _context6.next) {
|
|
476
615
|
case 0:
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
616
|
+
_t17 = _this6;
|
|
617
|
+
_t18 = _constants.HTTP_VERBS.GET;
|
|
618
|
+
_t19 = "".concat(_this6.webcastInstanceUrl, "/layout");
|
|
480
619
|
_context6.next = 1;
|
|
481
620
|
return _this6.webex.credentials.getUserToken();
|
|
482
621
|
case 1:
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
authorization:
|
|
487
|
-
trackingId:
|
|
622
|
+
_t20 = _context6.sent;
|
|
623
|
+
_t21 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
|
|
624
|
+
_t22 = {
|
|
625
|
+
authorization: _t20,
|
|
626
|
+
trackingId: _t21
|
|
488
627
|
};
|
|
489
|
-
return _context6.abrupt("return",
|
|
490
|
-
method:
|
|
491
|
-
uri:
|
|
492
|
-
headers:
|
|
628
|
+
return _context6.abrupt("return", _t17.request.call(_t17, {
|
|
629
|
+
method: _t18,
|
|
630
|
+
uri: _t19,
|
|
631
|
+
headers: _t22
|
|
493
632
|
}).catch(function (error) {
|
|
494
633
|
_loggerProxy.default.logger.error('Meeting:webinar#queryWebcastLayout failed', error);
|
|
495
634
|
throw error;
|
|
@@ -509,34 +648,34 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
509
648
|
updateWebcastLayout: function updateWebcastLayout(layout) {
|
|
510
649
|
var _this7 = this;
|
|
511
650
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee7() {
|
|
512
|
-
var
|
|
651
|
+
var _t23, _t24, _t25, _t26, _t27, _t28, _t29, _t30;
|
|
513
652
|
return _regenerator.default.wrap(function (_context7) {
|
|
514
653
|
while (1) switch (_context7.prev = _context7.next) {
|
|
515
654
|
case 0:
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
655
|
+
_t23 = _this7;
|
|
656
|
+
_t24 = _constants.HTTP_VERBS.PUT;
|
|
657
|
+
_t25 = "".concat(_this7.webcastInstanceUrl, "/layout");
|
|
658
|
+
_t26 = _defineProperty2.default;
|
|
520
659
|
_context7.next = 1;
|
|
521
660
|
return _this7.webex.credentials.getUserToken();
|
|
522
661
|
case 1:
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
authorization:
|
|
527
|
-
trackingId:
|
|
662
|
+
_t27 = _context7.sent;
|
|
663
|
+
_t28 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
|
|
664
|
+
_t29 = _t26({
|
|
665
|
+
authorization: _t27,
|
|
666
|
+
trackingId: _t28
|
|
528
667
|
}, _constants.HEADERS.CONTENT_TYPE, _constants.HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON);
|
|
529
|
-
|
|
668
|
+
_t30 = {
|
|
530
669
|
videoLayout: layout.videoLayout,
|
|
531
670
|
contentLayout: layout.contentLayout,
|
|
532
671
|
syncStageLayout: layout.syncStageLayout,
|
|
533
672
|
syncStageInMeeting: layout.syncStageInMeeting
|
|
534
673
|
};
|
|
535
|
-
return _context7.abrupt("return",
|
|
536
|
-
method:
|
|
537
|
-
uri:
|
|
538
|
-
headers:
|
|
539
|
-
body:
|
|
674
|
+
return _context7.abrupt("return", _t23.request.call(_t23, {
|
|
675
|
+
method: _t24,
|
|
676
|
+
uri: _t25,
|
|
677
|
+
headers: _t29,
|
|
678
|
+
body: _t30
|
|
540
679
|
}).catch(function (error) {
|
|
541
680
|
_loggerProxy.default.logger.error('Meeting:webinar#updateWebcastLayout failed', error);
|
|
542
681
|
throw error;
|
|
@@ -555,26 +694,26 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
555
694
|
viewAllWebcastAttendees: function viewAllWebcastAttendees() {
|
|
556
695
|
var _this8 = this;
|
|
557
696
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee8() {
|
|
558
|
-
var
|
|
697
|
+
var _t31, _t32, _t33, _t34, _t35, _t36;
|
|
559
698
|
return _regenerator.default.wrap(function (_context8) {
|
|
560
699
|
while (1) switch (_context8.prev = _context8.next) {
|
|
561
700
|
case 0:
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
701
|
+
_t31 = _this8;
|
|
702
|
+
_t32 = _constants.HTTP_VERBS.GET;
|
|
703
|
+
_t33 = "".concat(_this8.webcastInstanceUrl, "/attendees");
|
|
565
704
|
_context8.next = 1;
|
|
566
705
|
return _this8.webex.credentials.getUserToken();
|
|
567
706
|
case 1:
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
authorization:
|
|
572
|
-
trackingId:
|
|
707
|
+
_t34 = _context8.sent;
|
|
708
|
+
_t35 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
|
|
709
|
+
_t36 = {
|
|
710
|
+
authorization: _t34,
|
|
711
|
+
trackingId: _t35
|
|
573
712
|
};
|
|
574
|
-
return _context8.abrupt("return",
|
|
575
|
-
method:
|
|
576
|
-
uri:
|
|
577
|
-
headers:
|
|
713
|
+
return _context8.abrupt("return", _t31.request.call(_t31, {
|
|
714
|
+
method: _t32,
|
|
715
|
+
uri: _t33,
|
|
716
|
+
headers: _t36
|
|
578
717
|
}).catch(function (error) {
|
|
579
718
|
_loggerProxy.default.logger.error('Meeting:webinar#viewAllWebcastAttendees failed', error);
|
|
580
719
|
throw error;
|
|
@@ -595,27 +734,27 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
595
734
|
var _arguments = arguments,
|
|
596
735
|
_this9 = this;
|
|
597
736
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee9() {
|
|
598
|
-
var queryString,
|
|
737
|
+
var queryString, _t37, _t38, _t39, _t40, _t41, _t42;
|
|
599
738
|
return _regenerator.default.wrap(function (_context9) {
|
|
600
739
|
while (1) switch (_context9.prev = _context9.next) {
|
|
601
740
|
case 0:
|
|
602
741
|
queryString = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : '';
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
742
|
+
_t37 = _this9;
|
|
743
|
+
_t38 = _constants.HTTP_VERBS.GET;
|
|
744
|
+
_t39 = "".concat(_this9.webcastInstanceUrl, "/attendees?keyword=").concat(encodeURIComponent(queryString));
|
|
606
745
|
_context9.next = 1;
|
|
607
746
|
return _this9.webex.credentials.getUserToken();
|
|
608
747
|
case 1:
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
authorization:
|
|
613
|
-
trackingId:
|
|
748
|
+
_t40 = _context9.sent;
|
|
749
|
+
_t41 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
|
|
750
|
+
_t42 = {
|
|
751
|
+
authorization: _t40,
|
|
752
|
+
trackingId: _t41
|
|
614
753
|
};
|
|
615
|
-
return _context9.abrupt("return",
|
|
616
|
-
method:
|
|
617
|
-
uri:
|
|
618
|
-
headers:
|
|
754
|
+
return _context9.abrupt("return", _t37.request.call(_t37, {
|
|
755
|
+
method: _t38,
|
|
756
|
+
uri: _t39,
|
|
757
|
+
headers: _t42
|
|
619
758
|
}).catch(function (error) {
|
|
620
759
|
_loggerProxy.default.logger.error('Meeting:webinar#searchWebcastAttendees failed', error);
|
|
621
760
|
throw error;
|
|
@@ -635,26 +774,26 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
635
774
|
expelWebcastAttendee: function expelWebcastAttendee(participantId) {
|
|
636
775
|
var _this0 = this;
|
|
637
776
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee0() {
|
|
638
|
-
var
|
|
777
|
+
var _t43, _t44, _t45, _t46, _t47, _t48;
|
|
639
778
|
return _regenerator.default.wrap(function (_context0) {
|
|
640
779
|
while (1) switch (_context0.prev = _context0.next) {
|
|
641
780
|
case 0:
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
781
|
+
_t43 = _this0;
|
|
782
|
+
_t44 = _constants.HTTP_VERBS.DELETE;
|
|
783
|
+
_t45 = "".concat(_this0.webcastInstanceUrl, "/attendees/").concat(participantId);
|
|
645
784
|
_context0.next = 1;
|
|
646
785
|
return _this0.webex.credentials.getUserToken();
|
|
647
786
|
case 1:
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
authorization:
|
|
652
|
-
trackingId:
|
|
787
|
+
_t46 = _context0.sent;
|
|
788
|
+
_t47 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
|
|
789
|
+
_t48 = {
|
|
790
|
+
authorization: _t46,
|
|
791
|
+
trackingId: _t47
|
|
653
792
|
};
|
|
654
|
-
return _context0.abrupt("return",
|
|
655
|
-
method:
|
|
656
|
-
uri:
|
|
657
|
-
headers:
|
|
793
|
+
return _context0.abrupt("return", _t43.request.call(_t43, {
|
|
794
|
+
method: _t44,
|
|
795
|
+
uri: _t45,
|
|
796
|
+
headers: _t48
|
|
658
797
|
}).catch(function (error) {
|
|
659
798
|
_loggerProxy.default.logger.error('Meeting:webinar#expelWebcastAttendee failed', error);
|
|
660
799
|
throw error;
|
|
@@ -678,11 +817,18 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
678
817
|
var _this1 = this;
|
|
679
818
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee1() {
|
|
680
819
|
var _payload$limit, _meeting$locusInfo3, _meeting$locusInfo3$l, _meeting$locusInfo3$l2, _meeting$locusInfo3$l3;
|
|
681
|
-
var meeting, rawParams, attendeeSearchUrl,
|
|
820
|
+
var meeting, rawParams, attendeeSearchUrl, _t49, _t50, _t51, _t52, _t53, _t54;
|
|
682
821
|
return _regenerator.default.wrap(function (_context1) {
|
|
683
822
|
while (1) switch (_context1.prev = _context1.next) {
|
|
684
823
|
case 0:
|
|
685
|
-
meeting = _this1.
|
|
824
|
+
meeting = _this1.getValidatedWebinarMeeting();
|
|
825
|
+
if (meeting) {
|
|
826
|
+
_context1.next = 1;
|
|
827
|
+
break;
|
|
828
|
+
}
|
|
829
|
+
_loggerProxy.default.logger.error('Meeting:webinar5k#searchLargeScaleWebinarAttendees failed --> webinar meeting could not be validated');
|
|
830
|
+
throw new Error('Meeting:webinar5k#Webinar meeting is not resolvable for the current locus');
|
|
831
|
+
case 1:
|
|
686
832
|
rawParams = {
|
|
687
833
|
search_text: payload === null || payload === void 0 ? void 0 : payload.queryString,
|
|
688
834
|
limit: (_payload$limit = payload === null || payload === void 0 ? void 0 : payload.limit) !== null && _payload$limit !== void 0 ? _payload$limit : _constants.DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT,
|
|
@@ -690,40 +836,40 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
690
836
|
};
|
|
691
837
|
attendeeSearchUrl = meeting === null || meeting === void 0 ? void 0 : (_meeting$locusInfo3 = meeting.locusInfo) === null || _meeting$locusInfo3 === void 0 ? void 0 : (_meeting$locusInfo3$l = _meeting$locusInfo3.links) === null || _meeting$locusInfo3$l === void 0 ? void 0 : (_meeting$locusInfo3$l2 = _meeting$locusInfo3$l.resources) === null || _meeting$locusInfo3$l2 === void 0 ? void 0 : (_meeting$locusInfo3$l3 = _meeting$locusInfo3$l2.attendeeSearch) === null || _meeting$locusInfo3$l3 === void 0 ? void 0 : _meeting$locusInfo3$l3.url;
|
|
692
838
|
if (attendeeSearchUrl) {
|
|
693
|
-
_context1.next =
|
|
839
|
+
_context1.next = 2;
|
|
694
840
|
break;
|
|
695
841
|
}
|
|
696
|
-
_loggerProxy.default.logger.error(
|
|
842
|
+
_loggerProxy.default.logger.error('Meeting:webinar5k#searchLargeScaleWebinarAttendees failed --> attendee search url unavailable');
|
|
697
843
|
throw new Error('Meeting:webinar5k#Attendee search url is not available');
|
|
698
|
-
case 1:
|
|
699
|
-
_t48 = _this1;
|
|
700
|
-
_t49 = _constants.HTTP_VERBS.GET;
|
|
701
|
-
_t50 = "".concat(attendeeSearchUrl, "?").concat(new URLSearchParams((0, _utils.sanitizeParams)(rawParams)).toString());
|
|
702
|
-
_context1.next = 2;
|
|
703
|
-
return _this1.webex.credentials.getUserToken();
|
|
704
844
|
case 2:
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
845
|
+
_t49 = _this1;
|
|
846
|
+
_t50 = _constants.HTTP_VERBS.GET;
|
|
847
|
+
_t51 = "".concat(attendeeSearchUrl, "?").concat(new URLSearchParams((0, _utils.sanitizeParams)(rawParams)).toString());
|
|
848
|
+
_context1.next = 3;
|
|
849
|
+
return _this1.webex.credentials.getUserToken();
|
|
850
|
+
case 3:
|
|
851
|
+
_t52 = _context1.sent;
|
|
852
|
+
_t53 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
|
|
853
|
+
_t54 = {
|
|
854
|
+
authorization: _t52,
|
|
855
|
+
trackingId: _t53
|
|
710
856
|
};
|
|
711
|
-
return _context1.abrupt("return",
|
|
712
|
-
method:
|
|
713
|
-
uri:
|
|
714
|
-
headers:
|
|
857
|
+
return _context1.abrupt("return", _t49.request.call(_t49, {
|
|
858
|
+
method: _t50,
|
|
859
|
+
uri: _t51,
|
|
860
|
+
headers: _t54
|
|
715
861
|
}).catch(function (error) {
|
|
716
862
|
_loggerProxy.default.logger.error('Meeting:webinar5k#searchLargeScaleWebinarAttendees failed', error);
|
|
717
863
|
throw error;
|
|
718
864
|
}));
|
|
719
|
-
case
|
|
865
|
+
case 4:
|
|
720
866
|
case "end":
|
|
721
867
|
return _context1.stop();
|
|
722
868
|
}
|
|
723
869
|
}, _callee1);
|
|
724
870
|
}))();
|
|
725
871
|
},
|
|
726
|
-
version: "3.12.0-next.
|
|
872
|
+
version: "3.12.0-next.70"
|
|
727
873
|
});
|
|
728
874
|
var _default = exports.default = Webinar;
|
|
729
875
|
//# sourceMappingURL=index.js.map
|