@webex/plugin-meetings 3.12.0-next.1 → 3.12.0-next.3
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/aiEnableRequest/index.js +1 -1
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/index.js +57 -33
- package/dist/meeting/index.js.map +1 -1
- package/dist/types/meeting/index.d.ts +13 -1
- package/dist/webinar/index.js +42 -12
- package/dist/webinar/index.js.map +1 -1
- package/package.json +13 -13
- package/src/meeting/index.ts +67 -46
- package/src/webinar/index.ts +46 -18
- package/test/unit/spec/meeting/index.js +125 -12
- package/test/unit/spec/webinar/index.ts +133 -8
|
@@ -1359,10 +1359,22 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1359
1359
|
* @returns {Promise<void>}
|
|
1360
1360
|
*/
|
|
1361
1361
|
private cleanupLLMConneciton;
|
|
1362
|
+
/**
|
|
1363
|
+
* Clears all data channel tokens stored in LLM.
|
|
1364
|
+
* Called during meeting cleanup to ensure stale tokens are not reused.
|
|
1365
|
+
* @returns {void}
|
|
1366
|
+
*/
|
|
1367
|
+
clearDataChannelToken(): void;
|
|
1368
|
+
/**
|
|
1369
|
+
* Saves the data channel tokens from the join response into LLM so that
|
|
1370
|
+
* updateLLMConnection / updatePSDataChannel don't need to fetch them from locusInfo.
|
|
1371
|
+
* @param {Object} join - The parsed join response (from MeetingUtil.parseLocusJoin)
|
|
1372
|
+
* @returns {void}
|
|
1373
|
+
*/
|
|
1374
|
+
saveDataChannelToken(join: any): void;
|
|
1362
1375
|
/**
|
|
1363
1376
|
* Connects to low latency mercury and reconnects if the address has changed
|
|
1364
1377
|
* It will also disconnect if called when the meeting has ended
|
|
1365
|
-
* @param {String} datachannelUrl
|
|
1366
1378
|
* @returns {Promise}
|
|
1367
1379
|
*/
|
|
1368
1380
|
updateLLMConnection(): Promise<any>;
|
package/dist/webinar/index.js
CHANGED
|
@@ -135,6 +135,11 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
135
135
|
return _regenerator.default.wrap(function (_context) {
|
|
136
136
|
while (1) switch (_context.prev = _context.next) {
|
|
137
137
|
case 0:
|
|
138
|
+
if (_this._pendingOnlineListener) {
|
|
139
|
+
// @ts-ignore - Fix type
|
|
140
|
+
_this.webex.internal.llm.off('online', _this._pendingOnlineListener);
|
|
141
|
+
_this._pendingOnlineListener = null;
|
|
142
|
+
}
|
|
138
143
|
meeting = _this.webex.meetings.getMeetingByType(_constants._ID_, _this.meetingId); // @ts-ignore - Fix type
|
|
139
144
|
_context.next = 1;
|
|
140
145
|
return _this.webex.internal.llm.disconnectLLM({
|
|
@@ -159,7 +164,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
159
164
|
updatePSDataChannel: function updatePSDataChannel() {
|
|
160
165
|
var _this2 = this;
|
|
161
166
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
162
|
-
var meeting, isPracticeSession, _ref2, _ref2$url, url, _ref2$info, _ref2$info2, _ref2$info2$practiceS, practiceSessionDatachannelUrl,
|
|
167
|
+
var meeting, isPracticeSession, _ref2, _ref2$url, url, _ref2$info, _ref2$info2, _ref2$info2$practiceS, practiceSessionDatachannelUrl, practiceSessionDatachannelToken, isCaptionBoxOn, _onDefaultSessionConnected;
|
|
163
168
|
return _regenerator.default.wrap(function (_context2) {
|
|
164
169
|
while (1) switch (_context2.prev = _context2.next) {
|
|
165
170
|
case 0:
|
|
@@ -175,14 +180,9 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
175
180
|
return _context2.abrupt("return", undefined);
|
|
176
181
|
case 2:
|
|
177
182
|
// @ts-ignore - Fix type
|
|
178
|
-
_ref2 = (meeting === null || meeting === void 0 ? void 0 : meeting.locusInfo) || {}, _ref2$url = _ref2.url, url = _ref2$url === void 0 ? undefined : _ref2$url, _ref2$info = _ref2.info, _ref2$info2 = _ref2$info === void 0 ? {} : _ref2$info, _ref2$info2$practiceS = _ref2$info2.practiceSessionDatachannelUrl, practiceSessionDatachannelUrl = _ref2$info2$practiceS === void 0 ? undefined : _ref2$info2$practiceS
|
|
179
|
-
|
|
180
|
-
finalToken = currentToken !== null && currentToken !== void 0 ? currentToken : practiceSessionDatachannelToken;
|
|
183
|
+
_ref2 = (meeting === null || meeting === void 0 ? void 0 : meeting.locusInfo) || {}, _ref2$url = _ref2.url, url = _ref2$url === void 0 ? undefined : _ref2$url, _ref2$info = _ref2.info, _ref2$info2 = _ref2$info === void 0 ? {} : _ref2$info, _ref2$info2$practiceS = _ref2$info2.practiceSessionDatachannelUrl, practiceSessionDatachannelUrl = _ref2$info2$practiceS === void 0 ? undefined : _ref2$info2$practiceS; // @ts-ignore
|
|
184
|
+
practiceSessionDatachannelToken = _this2.webex.internal.llm.getDatachannelToken(_internalPluginLlm.DataChannelTokenType.PracticeSession);
|
|
181
185
|
isCaptionBoxOn = _this2.webex.internal.voicea.getIsCaptionBoxOn();
|
|
182
|
-
if (!currentToken && practiceSessionDatachannelToken) {
|
|
183
|
-
// @ts-ignore
|
|
184
|
-
_this2.webex.internal.llm.setDatachannelToken(practiceSessionDatachannelToken, _internalPluginLlm.DataChannelTokenType.PracticeSession);
|
|
185
|
-
}
|
|
186
186
|
if (practiceSessionDatachannelUrl) {
|
|
187
187
|
_context2.next = 3;
|
|
188
188
|
break;
|
|
@@ -206,7 +206,38 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
206
206
|
_context2.next = 5;
|
|
207
207
|
return _this2.cleanupPSDataChannel();
|
|
208
208
|
case 5:
|
|
209
|
-
|
|
209
|
+
// Ensure the default session data channel is connected before connecting the practice session.
|
|
210
|
+
// Subscribe before checking isConnected() to avoid a race where the 'online' event fires
|
|
211
|
+
// between the check and the subscription — Mercury does not replay missed events.
|
|
212
|
+
if (!_this2._pendingOnlineListener) {
|
|
213
|
+
_onDefaultSessionConnected = function onDefaultSessionConnected() {
|
|
214
|
+
_this2._pendingOnlineListener = null;
|
|
215
|
+
// @ts-ignore - Fix type
|
|
216
|
+
_this2.webex.internal.llm.off('online', _onDefaultSessionConnected);
|
|
217
|
+
_this2.updatePSDataChannel();
|
|
218
|
+
};
|
|
219
|
+
_this2._pendingOnlineListener = _onDefaultSessionConnected;
|
|
220
|
+
// @ts-ignore - Fix type
|
|
221
|
+
_this2.webex.internal.llm.on('online', _onDefaultSessionConnected);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// @ts-ignore - Fix type
|
|
225
|
+
if (_this2.webex.internal.llm.isConnected()) {
|
|
226
|
+
_context2.next = 6;
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
_loggerProxy.default.logger.info('Webinar:index#updatePSDataChannel --> default session not yet connected, deferring practice session connect.');
|
|
230
|
+
return _context2.abrupt("return", undefined);
|
|
231
|
+
case 6:
|
|
232
|
+
// Default session is already connected — cancel the pending listener and proceed
|
|
233
|
+
if (_this2._pendingOnlineListener) {
|
|
234
|
+
// @ts-ignore - Fix type
|
|
235
|
+
_this2.webex.internal.llm.off('online', _this2._pendingOnlineListener);
|
|
236
|
+
_this2._pendingOnlineListener = null;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// @ts-ignore - Fix type
|
|
240
|
+
return _context2.abrupt("return", _this2.webex.internal.llm.registerAndConnect(url, practiceSessionDatachannelUrl, practiceSessionDatachannelToken, _constants.LLM_PRACTICE_SESSION).then(function (registerAndConnectResult) {
|
|
210
241
|
var _this2$webex$internal, _this2$webex$internal2;
|
|
211
242
|
// @ts-ignore - Fix type
|
|
212
243
|
_this2.webex.internal.llm.off("event:relay.event:".concat(_constants.LLM_PRACTICE_SESSION), meeting === null || meeting === void 0 ? void 0 : meeting.processRelayEvent);
|
|
@@ -222,7 +253,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
222
253
|
_loggerProxy.default.logger.info("Webinar:index#updatePSDataChannel --> enabled to receive relay events for default session for ".concat(_constants.LLM_PRACTICE_SESSION, "!"));
|
|
223
254
|
return _promise.default.resolve(registerAndConnectResult);
|
|
224
255
|
}));
|
|
225
|
-
case
|
|
256
|
+
case 7:
|
|
226
257
|
case "end":
|
|
227
258
|
return _context2.stop();
|
|
228
259
|
}
|
|
@@ -444,7 +475,6 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
444
475
|
},
|
|
445
476
|
/**
|
|
446
477
|
* view all webcast attendees
|
|
447
|
-
* @param {string} queryString
|
|
448
478
|
* @returns {Promise}
|
|
449
479
|
*/
|
|
450
480
|
viewAllWebcastAttendees: function viewAllWebcastAttendees() {
|
|
@@ -618,7 +648,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
618
648
|
}, _callee0);
|
|
619
649
|
}))();
|
|
620
650
|
},
|
|
621
|
-
version: "3.12.0-next.
|
|
651
|
+
version: "3.12.0-next.3"
|
|
622
652
|
});
|
|
623
653
|
var _default = exports.default = Webinar;
|
|
624
654
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_webexCore","require","_uuid","_interopRequireDefault","_lodash","_internalPluginLlm","_constants","_collection","_loggerProxy","_utils","Webinar","WebexPlugin","extend","namespace","MEETINGS","collections","webinar","WebinarCollection","props","locusUrl","webcastInstanceUrl","canManageWebcast","selfIsPanelist","selfIsAttendee","practiceSessionEnabled","meetingId","cleanUp","cleanupPSDataChannel","locusUrlUpdate","set","updateWebcastUrl","payload","get","updateCanManageWebcast","updateRoleChanged","oldRoles","newRoles","isPromoted","includes","SELF_ROLES","ATTENDEE","PANELIST","isDemoted","MODERATOR","updateStatusByRole","_ref","meeting","webex","meetings","getMeetingByType","_ID_","shareStatus","SHARE_STATUS","WHITEBOARD_SHARE_ACTIVE","_meeting$locusInfo","_meeting$locusInfo2","locusInfo","updateMediaShares","mediaShares","updatePSDataChannel","isJoinPracticeSessionDataChannel","_this","_asyncToGenerator2","default","_regenerator","mark","_callee","wrap","_context","prev","next","internal","llm","disconnectLLM","code","reason","LLM_PRACTICE_SESSION","off","concat","processRelayEvent","stop","_this2","_callee2","isPracticeSession","_ref2","_ref2$url","url","_ref2$info","_ref2$info2","_ref2$info2$practiceS","practiceSessionDatachannelUrl","_ref2$self","_ref2$self2","_ref2$self2$practiceS","practiceSessionDatachannelToken","currentToken","finalToken","isCaptionBoxOn","_context2","isJoined","abrupt","undefined","info","self","getDatachannelToken","DataChannelTokenType","PracticeSession","voicea","getIsCaptionBoxOn","setDatachannelToken","isConnected","getLocusUrl","getDatachannelUrl","registerAndConnect","then","registerAndConnectResult","_this2$webex$internal","_this2$webex$internal2","on","announce","call","updateSubchannelSubscriptions","subscribe","LoggerProxy","logger","_promise","resolve","setPracticeSessionState","enabled","request","method","HTTP_VERBS","PATCH","uri","body","practiceSession","catch","error","updatePracticeSessionStatus","startWebcast","layout","_this3","_callee3","_t","_t2","_t3","_t4","_t5","_t6","_t7","_t8","_context3","Error","PUT","_defineProperty2","credentials","getUserToken","sent","config","trackingIdPrefix","uuid","v4","toString","authorization","trackingId","HEADERS","CONTENT_TYPE","CONTENT_TYPE_VALUE","APPLICATION_JSON","action","meetingInfo","locusId","correlationId","headers","stopWebcast","_this4","_callee4","_t9","_t0","_t1","_t10","_t11","_t12","_t13","_t14","_context4","queryWebcastLayout","_this5","_callee5","_t15","_t16","_t17","_t18","_t19","_t20","_context5","GET","updateWebcastLayout","_this6","_callee6","_t21","_t22","_t23","_t24","_t25","_t26","_t27","_t28","_context6","videoLayout","contentLayout","syncStageLayout","syncStageInMeeting","viewAllWebcastAttendees","_this7","_callee7","_t29","_t30","_t31","_t32","_t33","_t34","_context7","searchWebcastAttendees","_arguments","arguments","_this8","_callee8","queryString","_t35","_t36","_t37","_t38","_t39","_t40","_context8","length","encodeURIComponent","expelWebcastAttendee","participantId","_this9","_callee9","_t41","_t42","_t43","_t44","_t45","_t46","_context9","DELETE","searchLargeScaleWebinarAttendees","_this0","_callee0","_payload$limit","_meeting$locusInfo3","_meeting$locusInfo3$l","_meeting$locusInfo3$l2","_meeting$locusInfo3$l3","rawParams","attendeeSearchUrl","_t47","_t48","_t49","_t50","_t51","_t52","_context0","search_text","limit","DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT","links","resources","attendeeSearch","URLSearchParams","sanitizeParams","version","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin, config} from '@webex/webex-core';\nimport uuid from 'uuid';\nimport {get} from 'lodash';\nimport {DataChannelTokenType} from '@webex/internal-plugin-llm';\nimport {\n _ID_,\n HEADERS,\n HTTP_VERBS,\n MEETINGS,\n SELF_ROLES,\n SHARE_STATUS,\n DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT,\n LLM_PRACTICE_SESSION,\n} from '../constants';\n\nimport WebinarCollection from './collection';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {sanitizeParams} from './utils';\n\n/**\n * @class Webinar\n */\nconst Webinar = WebexPlugin.extend({\n namespace: MEETINGS,\n collections: {\n webinar: WebinarCollection,\n },\n\n props: {\n locusUrl: 'string', // appears current webinar's locus url\n webcastInstanceUrl: 'string', // current webinar's webcast instance url\n canManageWebcast: 'boolean', // appears the ability to manage webcast\n selfIsPanelist: 'boolean', // self is panelist\n selfIsAttendee: 'boolean', // self is attendee\n practiceSessionEnabled: 'boolean', // practice session enabled\n meetingId: 'string',\n },\n\n /**\n * Calls this to clean up listeners\n * @returns {void}\n */\n cleanUp() {\n this.cleanupPSDataChannel();\n },\n\n /**\n * Update the current locus url of the webinar\n * @param {string} locusUrl\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n },\n\n /**\n * Update the current webcast instance url of the meeting\n * @param {object} payload\n * @returns {void}\n */\n updateWebcastUrl(payload) {\n this.set('webcastInstanceUrl', get(payload, 'resources.webcastInstance.url'));\n },\n\n /**\n * Update whether self has capability to manage start/stop webcast (only host can manage it)\n * @param {boolean} canManageWebcast\n * @returns {void}\n */\n updateCanManageWebcast(canManageWebcast) {\n this.set('canManageWebcast', canManageWebcast);\n },\n\n /**\n * Updates user roles and manages associated state transitions\n * @param {object} payload\n * @param {string[]} payload.oldRoles - Previous roles of the user\n * @param {string[]} payload.newRoles - New roles of the user\n * @returns {{isPromoted: boolean, isDemoted: boolean}} Role transition states\n */\n updateRoleChanged(payload) {\n const oldRoles = get(payload, 'oldRoles', []);\n const newRoles = get(payload, 'newRoles', []);\n\n const isPromoted =\n oldRoles.includes(SELF_ROLES.ATTENDEE) && newRoles.includes(SELF_ROLES.PANELIST);\n const isDemoted =\n (oldRoles.includes(SELF_ROLES.PANELIST) && newRoles.includes(SELF_ROLES.ATTENDEE)) ||\n (!oldRoles.includes(SELF_ROLES.ATTENDEE) && newRoles.includes(SELF_ROLES.ATTENDEE)); // for attendee just join meeting case\n this.set('selfIsPanelist', newRoles.includes(SELF_ROLES.PANELIST));\n this.set('selfIsAttendee', newRoles.includes(SELF_ROLES.ATTENDEE));\n this.updateCanManageWebcast(newRoles.includes(SELF_ROLES.MODERATOR));\n this.updateStatusByRole({isPromoted, isDemoted});\n\n return {isPromoted, isDemoted};\n },\n\n /**\n * should join practice session data channel or not\n * @param {Object} {isPromoted: boolean, isDemoted: boolean}} Role transition states\n * @returns {void}\n */\n updateStatusByRole({isPromoted, isDemoted}) {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n\n if (\n (isDemoted && meeting?.shareStatus === SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE) ||\n isPromoted\n ) {\n // attendees in webinar should subscribe streaming for whiteboard sharing\n // while panelist still need subscribe native mode so trigger force update here\n meeting?.locusInfo?.updateMediaShares(meeting?.locusInfo?.mediaShares, true);\n }\n\n this.updatePSDataChannel();\n },\n\n /**\n * should join practice session data channel or not\n * @returns {boolean}\n */\n isJoinPracticeSessionDataChannel() {\n return this.selfIsPanelist && this.practiceSessionEnabled;\n },\n\n /**\n * Disconnects the practice session data channel and removes its relay listener.\n * @returns {Promise<void>}\n */\n async cleanupPSDataChannel() {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n\n // @ts-ignore - Fix type\n await this.webex.internal.llm.disconnectLLM(\n {\n code: 3050,\n reason: 'done (permanent)',\n },\n LLM_PRACTICE_SESSION\n );\n // @ts-ignore - Fix type\n this.webex.internal.llm.off(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n },\n\n /**\n * Connects to low latency mercury and reconnects if the address has changed\n * It will also disconnect if called when the meeting has ended\n * @returns {Promise}\n */\n async updatePSDataChannel() {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n const isPracticeSession = meeting?.isJoined() && this.isJoinPracticeSessionDataChannel();\n\n if (!isPracticeSession) {\n await this.cleanupPSDataChannel();\n\n return undefined;\n }\n\n // @ts-ignore - Fix type\n const {\n url = undefined,\n info: {practiceSessionDatachannelUrl = undefined} = {},\n self: {practiceSessionDatachannelToken = undefined} = {},\n } = meeting?.locusInfo || {};\n\n // @ts-ignore\n const currentToken = this.webex.internal.llm.getDatachannelToken(\n DataChannelTokenType.PracticeSession\n );\n\n const finalToken = currentToken ?? practiceSessionDatachannelToken;\n\n const isCaptionBoxOn = this.webex.internal.voicea.getIsCaptionBoxOn();\n\n if (!currentToken && practiceSessionDatachannelToken) {\n // @ts-ignore\n this.webex.internal.llm.setDatachannelToken(\n practiceSessionDatachannelToken,\n DataChannelTokenType.PracticeSession\n );\n }\n\n if (!practiceSessionDatachannelUrl) {\n return undefined;\n }\n // @ts-ignore - Fix type\n if (this.webex.internal.llm.isConnected(LLM_PRACTICE_SESSION)) {\n if (\n // @ts-ignore - Fix type\n url === this.webex.internal.llm.getLocusUrl(LLM_PRACTICE_SESSION) &&\n // @ts-ignore - Fix type\n practiceSessionDatachannelUrl ===\n this.webex.internal.llm.getDatachannelUrl(LLM_PRACTICE_SESSION)\n ) {\n return undefined;\n }\n\n await this.cleanupPSDataChannel();\n }\n\n // @ts-ignore - Fix type\n return this.webex.internal.llm\n .registerAndConnect(url, practiceSessionDatachannelUrl, finalToken, LLM_PRACTICE_SESSION)\n .then((registerAndConnectResult) => {\n // @ts-ignore - Fix type\n this.webex.internal.llm.off(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n // @ts-ignore - Fix type\n this.webex.internal.llm.on(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n // @ts-ignore - Fix type\n this.webex.internal.voicea?.announce?.();\n if (isCaptionBoxOn) {\n this.webex.internal.voicea.updateSubchannelSubscriptions({subscribe: ['transcription']});\n }\n LoggerProxy.logger.info(\n `Webinar:index#updatePSDataChannel --> enabled to receive relay events for default session for ${LLM_PRACTICE_SESSION}!`\n );\n\n return Promise.resolve(registerAndConnectResult);\n });\n },\n\n /**\n * start or stop practice session for webinar\n * @param {boolean} enabled\n * @returns {Promise}\n */\n setPracticeSessionState(enabled) {\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/controls`,\n body: {\n practiceSession: {\n enabled,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#setPracticeSessionState failed', error);\n throw error;\n });\n },\n\n /**\n * update practice session status\n * @param {object} payload\n * @returns {void}\n */\n updatePracticeSessionStatus(payload) {\n this.set('practiceSessionEnabled', !!payload?.enabled);\n this.updatePSDataChannel().then(() => {});\n },\n\n /**\n * start webcast mode for webinar\n * @param {object} meeting\n * @param {object} layout\n * @returns {Promise}\n */\n async startWebcast(meeting, layout) {\n if (!meeting) {\n LoggerProxy.logger.error(\n `Meeting:webinar#startWebcast failed --> meeting parameter : ${meeting}`\n );\n throw new Error('Meeting parameter does not meet expectations');\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/streaming`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n action: 'start',\n meetingInfo: {\n locusId: meeting.locusId,\n correlationId: meeting.correlationId,\n },\n layout,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#startWebcast failed', error);\n throw error;\n });\n },\n\n /**\n * stop webcast mode for webinar\n * @returns {Promise}\n */\n async stopWebcast() {\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/streaming`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n action: 'stop',\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#stopWebcast failed', error);\n throw error;\n });\n },\n\n /**\n * query webcast layout for webinar\n * @returns {Promise}\n */\n async queryWebcastLayout() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/layout`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#queryWebcastLayout failed', error);\n throw error;\n });\n },\n\n /**\n * update webcast layout for webinar\n * @param {object} layout\n * @returns {Promise}\n */\n async updateWebcastLayout(layout) {\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/layout`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n videoLayout: layout.videoLayout,\n contentLayout: layout.contentLayout,\n syncStageLayout: layout.syncStageLayout,\n syncStageInMeeting: layout.syncStageInMeeting,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#updateWebcastLayout failed', error);\n throw error;\n });\n },\n\n /**\n * view all webcast attendees\n * @param {string} queryString\n * @returns {Promise}\n */\n async viewAllWebcastAttendees() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/attendees`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#viewAllWebcastAttendees failed', error);\n throw error;\n });\n },\n\n /**\n * search webcast attendees by query string\n * @param {string} queryString\n * @returns {Promise}\n */\n async searchWebcastAttendees(queryString = '') {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/attendees?keyword=${encodeURIComponent(queryString)}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#searchWebcastAttendees failed', error);\n throw error;\n });\n },\n\n /**\n * expel webcast attendee by participantId\n * @param {string} participantId\n * @returns {Promise}\n */\n async expelWebcastAttendee(participantId) {\n return this.request({\n method: HTTP_VERBS.DELETE,\n uri: `${this.webcastInstanceUrl}/attendees/${participantId}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#expelWebcastAttendee failed', error);\n throw error;\n });\n },\n\n /**\n * search large scale webinar attendees\n * @param {object} payload\n * @param {string} payload.queryString\n * @param {number} payload.limit\n * @param {string} payload.next\n * @returns {Promise}\n */\n async searchLargeScaleWebinarAttendees(payload) {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n const rawParams = {\n search_text: payload?.queryString,\n limit: payload?.limit ?? DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT,\n next: payload?.next,\n };\n const attendeeSearchUrl = meeting?.locusInfo?.links?.resources?.attendeeSearch?.url;\n if (!attendeeSearchUrl) {\n LoggerProxy.logger.error(`Meeting:webinar5k#searchLargeScaleWebinarAttendees failed`);\n throw new Error('Meeting:webinar5k#Attendee search url is not available');\n }\n\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${attendeeSearchUrl}?${new URLSearchParams(sanitizeParams(rawParams)).toString()}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar5k#searchLargeScaleWebinarAttendees failed', error);\n throw error;\n });\n },\n});\n\nexport default Webinar;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_uuid","_interopRequireDefault","_lodash","_internalPluginLlm","_constants","_collection","_loggerProxy","_utils","Webinar","WebexPlugin","extend","namespace","MEETINGS","collections","webinar","WebinarCollection","props","locusUrl","webcastInstanceUrl","canManageWebcast","selfIsPanelist","selfIsAttendee","practiceSessionEnabled","meetingId","cleanUp","cleanupPSDataChannel","locusUrlUpdate","set","updateWebcastUrl","payload","get","updateCanManageWebcast","updateRoleChanged","oldRoles","newRoles","isPromoted","includes","SELF_ROLES","ATTENDEE","PANELIST","isDemoted","MODERATOR","updateStatusByRole","_ref","meeting","webex","meetings","getMeetingByType","_ID_","shareStatus","SHARE_STATUS","WHITEBOARD_SHARE_ACTIVE","_meeting$locusInfo","_meeting$locusInfo2","locusInfo","updateMediaShares","mediaShares","updatePSDataChannel","isJoinPracticeSessionDataChannel","_this","_asyncToGenerator2","default","_regenerator","mark","_callee","wrap","_context","prev","next","_pendingOnlineListener","internal","llm","off","disconnectLLM","code","reason","LLM_PRACTICE_SESSION","concat","processRelayEvent","stop","_this2","_callee2","isPracticeSession","_ref2","_ref2$url","url","_ref2$info","_ref2$info2","_ref2$info2$practiceS","practiceSessionDatachannelUrl","practiceSessionDatachannelToken","isCaptionBoxOn","_onDefaultSessionConnected","_context2","isJoined","abrupt","undefined","info","getDatachannelToken","DataChannelTokenType","PracticeSession","voicea","getIsCaptionBoxOn","isConnected","getLocusUrl","getDatachannelUrl","onDefaultSessionConnected","on","LoggerProxy","logger","registerAndConnect","then","registerAndConnectResult","_this2$webex$internal","_this2$webex$internal2","announce","call","updateSubchannelSubscriptions","subscribe","_promise","resolve","setPracticeSessionState","enabled","request","method","HTTP_VERBS","PATCH","uri","body","practiceSession","catch","error","updatePracticeSessionStatus","startWebcast","layout","_this3","_callee3","_t","_t2","_t3","_t4","_t5","_t6","_t7","_t8","_context3","Error","PUT","_defineProperty2","credentials","getUserToken","sent","config","trackingIdPrefix","uuid","v4","toString","authorization","trackingId","HEADERS","CONTENT_TYPE","CONTENT_TYPE_VALUE","APPLICATION_JSON","action","meetingInfo","locusId","correlationId","headers","stopWebcast","_this4","_callee4","_t9","_t0","_t1","_t10","_t11","_t12","_t13","_t14","_context4","queryWebcastLayout","_this5","_callee5","_t15","_t16","_t17","_t18","_t19","_t20","_context5","GET","updateWebcastLayout","_this6","_callee6","_t21","_t22","_t23","_t24","_t25","_t26","_t27","_t28","_context6","videoLayout","contentLayout","syncStageLayout","syncStageInMeeting","viewAllWebcastAttendees","_this7","_callee7","_t29","_t30","_t31","_t32","_t33","_t34","_context7","searchWebcastAttendees","_arguments","arguments","_this8","_callee8","queryString","_t35","_t36","_t37","_t38","_t39","_t40","_context8","length","encodeURIComponent","expelWebcastAttendee","participantId","_this9","_callee9","_t41","_t42","_t43","_t44","_t45","_t46","_context9","DELETE","searchLargeScaleWebinarAttendees","_this0","_callee0","_payload$limit","_meeting$locusInfo3","_meeting$locusInfo3$l","_meeting$locusInfo3$l2","_meeting$locusInfo3$l3","rawParams","attendeeSearchUrl","_t47","_t48","_t49","_t50","_t51","_t52","_context0","search_text","limit","DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT","links","resources","attendeeSearch","URLSearchParams","sanitizeParams","version","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin, config} from '@webex/webex-core';\nimport uuid from 'uuid';\nimport {get} from 'lodash';\nimport {DataChannelTokenType} from '@webex/internal-plugin-llm';\nimport {\n _ID_,\n HEADERS,\n HTTP_VERBS,\n MEETINGS,\n SELF_ROLES,\n SHARE_STATUS,\n DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT,\n LLM_PRACTICE_SESSION,\n} from '../constants';\n\nimport WebinarCollection from './collection';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {sanitizeParams} from './utils';\n\n/**\n * @class Webinar\n */\nconst Webinar = WebexPlugin.extend({\n namespace: MEETINGS,\n collections: {\n webinar: WebinarCollection,\n },\n\n props: {\n locusUrl: 'string', // appears current webinar's locus url\n webcastInstanceUrl: 'string', // current webinar's webcast instance url\n canManageWebcast: 'boolean', // appears the ability to manage webcast\n selfIsPanelist: 'boolean', // self is panelist\n selfIsAttendee: 'boolean', // self is attendee\n practiceSessionEnabled: 'boolean', // practice session enabled\n meetingId: 'string',\n },\n\n /**\n * Calls this to clean up listeners\n * @returns {void}\n */\n cleanUp() {\n this.cleanupPSDataChannel();\n },\n\n /**\n * Update the current locus url of the webinar\n * @param {string} locusUrl\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n },\n\n /**\n * Update the current webcast instance url of the meeting\n * @param {object} payload\n * @returns {void}\n */\n updateWebcastUrl(payload) {\n this.set('webcastInstanceUrl', get(payload, 'resources.webcastInstance.url'));\n },\n\n /**\n * Update whether self has capability to manage start/stop webcast (only host can manage it)\n * @param {boolean} canManageWebcast\n * @returns {void}\n */\n updateCanManageWebcast(canManageWebcast) {\n this.set('canManageWebcast', canManageWebcast);\n },\n\n /**\n * Updates user roles and manages associated state transitions\n * @param {object} payload\n * @param {string[]} payload.oldRoles - Previous roles of the user\n * @param {string[]} payload.newRoles - New roles of the user\n * @returns {{isPromoted: boolean, isDemoted: boolean}} Role transition states\n */\n updateRoleChanged(payload) {\n const oldRoles = get(payload, 'oldRoles', []);\n const newRoles = get(payload, 'newRoles', []);\n\n const isPromoted =\n oldRoles.includes(SELF_ROLES.ATTENDEE) && newRoles.includes(SELF_ROLES.PANELIST);\n const isDemoted =\n (oldRoles.includes(SELF_ROLES.PANELIST) && newRoles.includes(SELF_ROLES.ATTENDEE)) ||\n (!oldRoles.includes(SELF_ROLES.ATTENDEE) && newRoles.includes(SELF_ROLES.ATTENDEE)); // for attendee just join meeting case\n this.set('selfIsPanelist', newRoles.includes(SELF_ROLES.PANELIST));\n this.set('selfIsAttendee', newRoles.includes(SELF_ROLES.ATTENDEE));\n this.updateCanManageWebcast(newRoles.includes(SELF_ROLES.MODERATOR));\n this.updateStatusByRole({isPromoted, isDemoted});\n\n return {isPromoted, isDemoted};\n },\n\n /**\n * should join practice session data channel or not\n * @param {Object} {isPromoted: boolean, isDemoted: boolean}} Role transition states\n * @returns {void}\n */\n updateStatusByRole({isPromoted, isDemoted}) {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n\n if (\n (isDemoted && meeting?.shareStatus === SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE) ||\n isPromoted\n ) {\n // attendees in webinar should subscribe streaming for whiteboard sharing\n // while panelist still need subscribe native mode so trigger force update here\n meeting?.locusInfo?.updateMediaShares(meeting?.locusInfo?.mediaShares, true);\n }\n\n this.updatePSDataChannel();\n },\n\n /**\n * should join practice session data channel or not\n * @returns {boolean}\n */\n isJoinPracticeSessionDataChannel() {\n return this.selfIsPanelist && this.practiceSessionEnabled;\n },\n\n /**\n * Disconnects the practice session data channel and removes its relay listener.\n * @returns {Promise<void>}\n */\n async cleanupPSDataChannel() {\n if (this._pendingOnlineListener) {\n // @ts-ignore - Fix type\n this.webex.internal.llm.off('online', this._pendingOnlineListener);\n this._pendingOnlineListener = null;\n }\n\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n\n // @ts-ignore - Fix type\n await this.webex.internal.llm.disconnectLLM(\n {\n code: 3050,\n reason: 'done (permanent)',\n },\n LLM_PRACTICE_SESSION\n );\n // @ts-ignore - Fix type\n this.webex.internal.llm.off(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n },\n\n /**\n * Connects to low latency mercury and reconnects if the address has changed\n * It will also disconnect if called when the meeting has ended\n * @returns {Promise}\n */\n async updatePSDataChannel() {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n const isPracticeSession = meeting?.isJoined() && this.isJoinPracticeSessionDataChannel();\n\n if (!isPracticeSession) {\n await this.cleanupPSDataChannel();\n\n return undefined;\n }\n\n // @ts-ignore - Fix type\n const {url = undefined, info: {practiceSessionDatachannelUrl = undefined} = {}} =\n meeting?.locusInfo || {};\n\n // @ts-ignore\n const practiceSessionDatachannelToken = this.webex.internal.llm.getDatachannelToken(\n DataChannelTokenType.PracticeSession\n );\n\n const isCaptionBoxOn = this.webex.internal.voicea.getIsCaptionBoxOn();\n\n if (!practiceSessionDatachannelUrl) {\n return undefined;\n }\n // @ts-ignore - Fix type\n if (this.webex.internal.llm.isConnected(LLM_PRACTICE_SESSION)) {\n if (\n // @ts-ignore - Fix type\n url === this.webex.internal.llm.getLocusUrl(LLM_PRACTICE_SESSION) &&\n // @ts-ignore - Fix type\n practiceSessionDatachannelUrl ===\n this.webex.internal.llm.getDatachannelUrl(LLM_PRACTICE_SESSION)\n ) {\n return undefined;\n }\n\n await this.cleanupPSDataChannel();\n }\n\n // Ensure the default session data channel is connected before connecting the practice session.\n // Subscribe before checking isConnected() to avoid a race where the 'online' event fires\n // between the check and the subscription — Mercury does not replay missed events.\n if (!this._pendingOnlineListener) {\n const onDefaultSessionConnected = () => {\n this._pendingOnlineListener = null;\n // @ts-ignore - Fix type\n this.webex.internal.llm.off('online', onDefaultSessionConnected);\n this.updatePSDataChannel();\n };\n this._pendingOnlineListener = onDefaultSessionConnected;\n // @ts-ignore - Fix type\n this.webex.internal.llm.on('online', onDefaultSessionConnected);\n }\n\n // @ts-ignore - Fix type\n if (!this.webex.internal.llm.isConnected()) {\n LoggerProxy.logger.info(\n 'Webinar:index#updatePSDataChannel --> default session not yet connected, deferring practice session connect.'\n );\n\n return undefined;\n }\n\n // Default session is already connected — cancel the pending listener and proceed\n if (this._pendingOnlineListener) {\n // @ts-ignore - Fix type\n this.webex.internal.llm.off('online', this._pendingOnlineListener);\n this._pendingOnlineListener = null;\n }\n\n // @ts-ignore - Fix type\n return this.webex.internal.llm\n .registerAndConnect(\n url,\n practiceSessionDatachannelUrl,\n practiceSessionDatachannelToken,\n LLM_PRACTICE_SESSION\n )\n .then((registerAndConnectResult) => {\n // @ts-ignore - Fix type\n this.webex.internal.llm.off(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n // @ts-ignore - Fix type\n this.webex.internal.llm.on(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n // @ts-ignore - Fix type\n this.webex.internal.voicea?.announce?.();\n if (isCaptionBoxOn) {\n this.webex.internal.voicea.updateSubchannelSubscriptions({subscribe: ['transcription']});\n }\n LoggerProxy.logger.info(\n `Webinar:index#updatePSDataChannel --> enabled to receive relay events for default session for ${LLM_PRACTICE_SESSION}!`\n );\n\n return Promise.resolve(registerAndConnectResult);\n });\n },\n\n /**\n * start or stop practice session for webinar\n * @param {boolean} enabled\n * @returns {Promise}\n */\n setPracticeSessionState(enabled) {\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/controls`,\n body: {\n practiceSession: {\n enabled,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#setPracticeSessionState failed', error);\n throw error;\n });\n },\n\n /**\n * update practice session status\n * @param {object} payload\n * @returns {void}\n */\n updatePracticeSessionStatus(payload) {\n this.set('practiceSessionEnabled', !!payload?.enabled);\n this.updatePSDataChannel().then(() => {});\n },\n\n /**\n * start webcast mode for webinar\n * @param {object} meeting\n * @param {object} layout\n * @returns {Promise}\n */\n async startWebcast(meeting, layout) {\n if (!meeting) {\n LoggerProxy.logger.error(\n `Meeting:webinar#startWebcast failed --> meeting parameter : ${meeting}`\n );\n throw new Error('Meeting parameter does not meet expectations');\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/streaming`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n action: 'start',\n meetingInfo: {\n locusId: meeting.locusId,\n correlationId: meeting.correlationId,\n },\n layout,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#startWebcast failed', error);\n throw error;\n });\n },\n\n /**\n * stop webcast mode for webinar\n * @returns {Promise}\n */\n async stopWebcast() {\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/streaming`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n action: 'stop',\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#stopWebcast failed', error);\n throw error;\n });\n },\n\n /**\n * query webcast layout for webinar\n * @returns {Promise}\n */\n async queryWebcastLayout() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/layout`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#queryWebcastLayout failed', error);\n throw error;\n });\n },\n\n /**\n * update webcast layout for webinar\n * @param {object} layout\n * @returns {Promise}\n */\n async updateWebcastLayout(layout) {\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/layout`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n videoLayout: layout.videoLayout,\n contentLayout: layout.contentLayout,\n syncStageLayout: layout.syncStageLayout,\n syncStageInMeeting: layout.syncStageInMeeting,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#updateWebcastLayout failed', error);\n throw error;\n });\n },\n\n /**\n * view all webcast attendees\n * @returns {Promise}\n */\n async viewAllWebcastAttendees() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/attendees`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#viewAllWebcastAttendees failed', error);\n throw error;\n });\n },\n\n /**\n * search webcast attendees by query string\n * @param {string} queryString\n * @returns {Promise}\n */\n async searchWebcastAttendees(queryString = '') {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/attendees?keyword=${encodeURIComponent(queryString)}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#searchWebcastAttendees failed', error);\n throw error;\n });\n },\n\n /**\n * expel webcast attendee by participantId\n * @param {string} participantId\n * @returns {Promise}\n */\n async expelWebcastAttendee(participantId) {\n return this.request({\n method: HTTP_VERBS.DELETE,\n uri: `${this.webcastInstanceUrl}/attendees/${participantId}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#expelWebcastAttendee failed', error);\n throw error;\n });\n },\n\n /**\n * search large scale webinar attendees\n * @param {object} payload\n * @param {string} payload.queryString\n * @param {number} payload.limit\n * @param {string} payload.next\n * @returns {Promise}\n */\n async searchLargeScaleWebinarAttendees(payload) {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n const rawParams = {\n search_text: payload?.queryString,\n limit: payload?.limit ?? DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT,\n next: payload?.next,\n };\n const attendeeSearchUrl = meeting?.locusInfo?.links?.resources?.attendeeSearch?.url;\n if (!attendeeSearchUrl) {\n LoggerProxy.logger.error(`Meeting:webinar5k#searchLargeScaleWebinarAttendees failed`);\n throw new Error('Meeting:webinar5k#Attendee search url is not available');\n }\n\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${attendeeSearchUrl}?${new URLSearchParams(sanitizeParams(rawParams)).toString()}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar5k#searchLargeScaleWebinarAttendees failed', error);\n throw error;\n });\n },\n});\n\nexport default Webinar;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@webex/event-dictionary-ts": "^1.0.2073",
|
|
45
45
|
"@webex/jest-config-legacy": "0.0.0",
|
|
46
46
|
"@webex/legacy-tools": "0.0.0",
|
|
47
|
-
"@webex/plugin-rooms": "3.
|
|
47
|
+
"@webex/plugin-rooms": "3.12.0-next.1",
|
|
48
48
|
"@webex/test-helper-chai": "3.11.0-next.1",
|
|
49
49
|
"@webex/test-helper-mocha": "3.11.0-next.1",
|
|
50
50
|
"@webex/test-helper-mock-webex": "3.11.0-next.1",
|
|
@@ -63,20 +63,20 @@
|
|
|
63
63
|
"dependencies": {
|
|
64
64
|
"@webex/common": "3.11.0-next.1",
|
|
65
65
|
"@webex/internal-media-core": "2.23.1",
|
|
66
|
-
"@webex/internal-plugin-conversation": "3.
|
|
67
|
-
"@webex/internal-plugin-device": "3.
|
|
68
|
-
"@webex/internal-plugin-llm": "3.
|
|
69
|
-
"@webex/internal-plugin-mercury": "3.
|
|
70
|
-
"@webex/internal-plugin-metrics": "3.
|
|
71
|
-
"@webex/internal-plugin-support": "3.
|
|
72
|
-
"@webex/internal-plugin-user": "3.
|
|
73
|
-
"@webex/internal-plugin-voicea": "3.
|
|
66
|
+
"@webex/internal-plugin-conversation": "3.12.0-next.1",
|
|
67
|
+
"@webex/internal-plugin-device": "3.12.0-next.1",
|
|
68
|
+
"@webex/internal-plugin-llm": "3.12.0-next.2",
|
|
69
|
+
"@webex/internal-plugin-mercury": "3.12.0-next.1",
|
|
70
|
+
"@webex/internal-plugin-metrics": "3.12.0-next.1",
|
|
71
|
+
"@webex/internal-plugin-support": "3.12.0-next.1",
|
|
72
|
+
"@webex/internal-plugin-user": "3.12.0-next.1",
|
|
73
|
+
"@webex/internal-plugin-voicea": "3.12.0-next.2",
|
|
74
74
|
"@webex/media-helpers": "3.11.0-next.4",
|
|
75
|
-
"@webex/plugin-people": "3.
|
|
76
|
-
"@webex/plugin-rooms": "3.
|
|
75
|
+
"@webex/plugin-people": "3.12.0-next.1",
|
|
76
|
+
"@webex/plugin-rooms": "3.12.0-next.1",
|
|
77
77
|
"@webex/ts-sdp": "^1.8.1",
|
|
78
78
|
"@webex/web-capabilities": "^1.10.0",
|
|
79
|
-
"@webex/webex-core": "3.
|
|
79
|
+
"@webex/webex-core": "3.12.0-next.1",
|
|
80
80
|
"ampersand-collection": "^2.0.2",
|
|
81
81
|
"bowser": "^2.11.0",
|
|
82
82
|
"btoa": "^1.2.1",
|
|
@@ -94,5 +94,5 @@
|
|
|
94
94
|
"//": [
|
|
95
95
|
"TODO: upgrade jwt-decode when moving to node 18"
|
|
96
96
|
],
|
|
97
|
-
"version": "3.12.0-next.
|
|
97
|
+
"version": "3.12.0-next.3"
|
|
98
98
|
}
|
package/src/meeting/index.ts
CHANGED
|
@@ -5907,37 +5907,35 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
5907
5907
|
* @returns {void}
|
|
5908
5908
|
*/
|
|
5909
5909
|
stopTranscription() {
|
|
5910
|
-
|
|
5911
|
-
|
|
5912
|
-
|
|
5913
|
-
|
|
5914
|
-
|
|
5915
|
-
);
|
|
5910
|
+
// @ts-ignore
|
|
5911
|
+
this.webex.internal.voicea.off(
|
|
5912
|
+
VOICEAEVENTS.VOICEA_ANNOUNCEMENT,
|
|
5913
|
+
this.voiceaListenerCallbacks[VOICEAEVENTS.VOICEA_ANNOUNCEMENT]
|
|
5914
|
+
);
|
|
5916
5915
|
|
|
5917
|
-
|
|
5918
|
-
|
|
5919
|
-
|
|
5920
|
-
|
|
5921
|
-
|
|
5916
|
+
// @ts-ignore
|
|
5917
|
+
this.webex.internal.voicea.off(
|
|
5918
|
+
VOICEAEVENTS.CAPTIONS_TURNED_ON,
|
|
5919
|
+
this.voiceaListenerCallbacks[VOICEAEVENTS.CAPTIONS_TURNED_ON]
|
|
5920
|
+
);
|
|
5922
5921
|
|
|
5923
|
-
|
|
5924
|
-
|
|
5925
|
-
|
|
5926
|
-
|
|
5927
|
-
|
|
5922
|
+
// @ts-ignore
|
|
5923
|
+
this.webex.internal.voicea.off(
|
|
5924
|
+
VOICEAEVENTS.EVA_COMMAND,
|
|
5925
|
+
this.voiceaListenerCallbacks[VOICEAEVENTS.EVA_COMMAND]
|
|
5926
|
+
);
|
|
5928
5927
|
|
|
5929
|
-
|
|
5930
|
-
|
|
5931
|
-
|
|
5932
|
-
|
|
5933
|
-
|
|
5928
|
+
// @ts-ignore
|
|
5929
|
+
this.webex.internal.voicea.off(
|
|
5930
|
+
VOICEAEVENTS.NEW_CAPTION,
|
|
5931
|
+
this.voiceaListenerCallbacks[VOICEAEVENTS.NEW_CAPTION]
|
|
5932
|
+
);
|
|
5934
5933
|
|
|
5935
|
-
|
|
5936
|
-
|
|
5934
|
+
// @ts-ignore
|
|
5935
|
+
this.webex.internal.voicea.deregisterEvents();
|
|
5937
5936
|
|
|
5938
|
-
|
|
5939
|
-
|
|
5940
|
-
}
|
|
5937
|
+
this.areVoiceaEventsSetup = false;
|
|
5938
|
+
this.triggerStopReceivingTranscriptionEvent();
|
|
5941
5939
|
}
|
|
5942
5940
|
|
|
5943
5941
|
/**
|
|
@@ -6198,6 +6196,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
6198
6196
|
return Promise.reject(error);
|
|
6199
6197
|
})
|
|
6200
6198
|
.then((join) => {
|
|
6199
|
+
this.saveDataChannelToken(join);
|
|
6201
6200
|
// @ts-ignore - config coming from registerPlugin
|
|
6202
6201
|
if (this.config.enableAutomaticLLM) {
|
|
6203
6202
|
// @ts-ignore
|
|
@@ -6309,33 +6308,56 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
6309
6308
|
}
|
|
6310
6309
|
};
|
|
6311
6310
|
|
|
6311
|
+
/**
|
|
6312
|
+
* Clears all data channel tokens stored in LLM.
|
|
6313
|
+
* Called during meeting cleanup to ensure stale tokens are not reused.
|
|
6314
|
+
* @returns {void}
|
|
6315
|
+
*/
|
|
6316
|
+
clearDataChannelToken(): void {
|
|
6317
|
+
// @ts-ignore
|
|
6318
|
+
this.webex.internal.llm.resetDatachannelTokens();
|
|
6319
|
+
}
|
|
6320
|
+
|
|
6321
|
+
/**
|
|
6322
|
+
* Saves the data channel tokens from the join response into LLM so that
|
|
6323
|
+
* updateLLMConnection / updatePSDataChannel don't need to fetch them from locusInfo.
|
|
6324
|
+
* @param {Object} join - The parsed join response (from MeetingUtil.parseLocusJoin)
|
|
6325
|
+
* @returns {void}
|
|
6326
|
+
*/
|
|
6327
|
+
saveDataChannelToken(join: any): void {
|
|
6328
|
+
const datachannelToken = join?.locus?.self?.datachannelToken;
|
|
6329
|
+
const practiceSessionDatachannelToken = join?.locus?.self?.practiceSessionDatachannelToken;
|
|
6330
|
+
|
|
6331
|
+
if (datachannelToken) {
|
|
6332
|
+
// @ts-ignore
|
|
6333
|
+
this.webex.internal.llm.setDatachannelToken(datachannelToken, DataChannelTokenType.Default);
|
|
6334
|
+
}
|
|
6335
|
+
|
|
6336
|
+
if (practiceSessionDatachannelToken) {
|
|
6337
|
+
// @ts-ignore
|
|
6338
|
+
this.webex.internal.llm.setDatachannelToken(
|
|
6339
|
+
practiceSessionDatachannelToken,
|
|
6340
|
+
DataChannelTokenType.PracticeSession
|
|
6341
|
+
);
|
|
6342
|
+
}
|
|
6343
|
+
}
|
|
6344
|
+
|
|
6312
6345
|
/**
|
|
6313
6346
|
* Connects to low latency mercury and reconnects if the address has changed
|
|
6314
6347
|
* It will also disconnect if called when the meeting has ended
|
|
6315
|
-
* @param {String} datachannelUrl
|
|
6316
6348
|
* @returns {Promise}
|
|
6317
6349
|
*/
|
|
6318
6350
|
async updateLLMConnection() {
|
|
6319
6351
|
// @ts-ignore - Fix type
|
|
6320
|
-
const {
|
|
6321
|
-
url = undefined,
|
|
6322
|
-
info: {datachannelUrl = undefined} = {},
|
|
6323
|
-
self: {datachannelToken = undefined} = {},
|
|
6324
|
-
} = this.locusInfo || {};
|
|
6352
|
+
const {url = undefined, info: {datachannelUrl = undefined} = {}} = this.locusInfo || {};
|
|
6325
6353
|
|
|
6326
6354
|
const isJoined = this.isJoined();
|
|
6327
6355
|
|
|
6328
6356
|
// @ts-ignore
|
|
6329
|
-
const
|
|
6330
|
-
|
|
6331
|
-
|
|
6332
|
-
|
|
6333
|
-
if (!currentToken && datachannelToken) {
|
|
6334
|
-
// @ts-ignore
|
|
6335
|
-
this.webex.internal.llm.setDatachannelToken(datachannelToken, DataChannelTokenType.Default);
|
|
6336
|
-
}
|
|
6357
|
+
const datachannelToken = this.webex.internal.llm.getDatachannelToken(
|
|
6358
|
+
DataChannelTokenType.Default
|
|
6359
|
+
);
|
|
6337
6360
|
|
|
6338
|
-
// webinar panelist should use new data channel in practice session
|
|
6339
6361
|
const dataChannelUrl = datachannelUrl;
|
|
6340
6362
|
|
|
6341
6363
|
// @ts-ignore - Fix type
|
|
@@ -6358,7 +6380,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
6358
6380
|
|
|
6359
6381
|
// @ts-ignore - Fix type
|
|
6360
6382
|
return this.webex.internal.llm
|
|
6361
|
-
.registerAndConnect(url, dataChannelUrl,
|
|
6383
|
+
.registerAndConnect(url, dataChannelUrl, datachannelToken)
|
|
6362
6384
|
.then((registerAndConnectResult) => {
|
|
6363
6385
|
// @ts-ignore - Fix type
|
|
6364
6386
|
this.webex.internal.llm.off('event:relay.event', this.processRelayEvent);
|
|
@@ -9618,13 +9640,12 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
9618
9640
|
}
|
|
9619
9641
|
this.queuedMediaUpdates = [];
|
|
9620
9642
|
|
|
9621
|
-
|
|
9622
|
-
|
|
9623
|
-
this.transcription = undefined;
|
|
9624
|
-
}
|
|
9643
|
+
this.stopTranscription();
|
|
9644
|
+
this.transcription = undefined;
|
|
9625
9645
|
|
|
9626
9646
|
this.annotation.deregisterEvents();
|
|
9627
9647
|
|
|
9648
|
+
this.clearDataChannelToken();
|
|
9628
9649
|
await this.cleanupLLMConneciton({throwOnError: false});
|
|
9629
9650
|
};
|
|
9630
9651
|
|
package/src/webinar/index.ts
CHANGED
|
@@ -131,6 +131,12 @@ const Webinar = WebexPlugin.extend({
|
|
|
131
131
|
* @returns {Promise<void>}
|
|
132
132
|
*/
|
|
133
133
|
async cleanupPSDataChannel() {
|
|
134
|
+
if (this._pendingOnlineListener) {
|
|
135
|
+
// @ts-ignore - Fix type
|
|
136
|
+
this.webex.internal.llm.off('online', this._pendingOnlineListener);
|
|
137
|
+
this._pendingOnlineListener = null;
|
|
138
|
+
}
|
|
139
|
+
|
|
134
140
|
const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);
|
|
135
141
|
|
|
136
142
|
// @ts-ignore - Fix type
|
|
@@ -164,29 +170,16 @@ const Webinar = WebexPlugin.extend({
|
|
|
164
170
|
}
|
|
165
171
|
|
|
166
172
|
// @ts-ignore - Fix type
|
|
167
|
-
const {
|
|
168
|
-
|
|
169
|
-
info: {practiceSessionDatachannelUrl = undefined} = {},
|
|
170
|
-
self: {practiceSessionDatachannelToken = undefined} = {},
|
|
171
|
-
} = meeting?.locusInfo || {};
|
|
173
|
+
const {url = undefined, info: {practiceSessionDatachannelUrl = undefined} = {}} =
|
|
174
|
+
meeting?.locusInfo || {};
|
|
172
175
|
|
|
173
176
|
// @ts-ignore
|
|
174
|
-
const
|
|
177
|
+
const practiceSessionDatachannelToken = this.webex.internal.llm.getDatachannelToken(
|
|
175
178
|
DataChannelTokenType.PracticeSession
|
|
176
179
|
);
|
|
177
180
|
|
|
178
|
-
const finalToken = currentToken ?? practiceSessionDatachannelToken;
|
|
179
|
-
|
|
180
181
|
const isCaptionBoxOn = this.webex.internal.voicea.getIsCaptionBoxOn();
|
|
181
182
|
|
|
182
|
-
if (!currentToken && practiceSessionDatachannelToken) {
|
|
183
|
-
// @ts-ignore
|
|
184
|
-
this.webex.internal.llm.setDatachannelToken(
|
|
185
|
-
practiceSessionDatachannelToken,
|
|
186
|
-
DataChannelTokenType.PracticeSession
|
|
187
|
-
);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
183
|
if (!practiceSessionDatachannelUrl) {
|
|
191
184
|
return undefined;
|
|
192
185
|
}
|
|
@@ -205,9 +198,45 @@ const Webinar = WebexPlugin.extend({
|
|
|
205
198
|
await this.cleanupPSDataChannel();
|
|
206
199
|
}
|
|
207
200
|
|
|
201
|
+
// Ensure the default session data channel is connected before connecting the practice session.
|
|
202
|
+
// Subscribe before checking isConnected() to avoid a race where the 'online' event fires
|
|
203
|
+
// between the check and the subscription — Mercury does not replay missed events.
|
|
204
|
+
if (!this._pendingOnlineListener) {
|
|
205
|
+
const onDefaultSessionConnected = () => {
|
|
206
|
+
this._pendingOnlineListener = null;
|
|
207
|
+
// @ts-ignore - Fix type
|
|
208
|
+
this.webex.internal.llm.off('online', onDefaultSessionConnected);
|
|
209
|
+
this.updatePSDataChannel();
|
|
210
|
+
};
|
|
211
|
+
this._pendingOnlineListener = onDefaultSessionConnected;
|
|
212
|
+
// @ts-ignore - Fix type
|
|
213
|
+
this.webex.internal.llm.on('online', onDefaultSessionConnected);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// @ts-ignore - Fix type
|
|
217
|
+
if (!this.webex.internal.llm.isConnected()) {
|
|
218
|
+
LoggerProxy.logger.info(
|
|
219
|
+
'Webinar:index#updatePSDataChannel --> default session not yet connected, deferring practice session connect.'
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
return undefined;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Default session is already connected — cancel the pending listener and proceed
|
|
226
|
+
if (this._pendingOnlineListener) {
|
|
227
|
+
// @ts-ignore - Fix type
|
|
228
|
+
this.webex.internal.llm.off('online', this._pendingOnlineListener);
|
|
229
|
+
this._pendingOnlineListener = null;
|
|
230
|
+
}
|
|
231
|
+
|
|
208
232
|
// @ts-ignore - Fix type
|
|
209
233
|
return this.webex.internal.llm
|
|
210
|
-
.registerAndConnect(
|
|
234
|
+
.registerAndConnect(
|
|
235
|
+
url,
|
|
236
|
+
practiceSessionDatachannelUrl,
|
|
237
|
+
practiceSessionDatachannelToken,
|
|
238
|
+
LLM_PRACTICE_SESSION
|
|
239
|
+
)
|
|
211
240
|
.then((registerAndConnectResult) => {
|
|
212
241
|
// @ts-ignore - Fix type
|
|
213
242
|
this.webex.internal.llm.off(
|
|
@@ -366,7 +395,6 @@ const Webinar = WebexPlugin.extend({
|
|
|
366
395
|
|
|
367
396
|
/**
|
|
368
397
|
* view all webcast attendees
|
|
369
|
-
* @param {string} queryString
|
|
370
398
|
* @returns {Promise}
|
|
371
399
|
*/
|
|
372
400
|
async viewAllWebcastAttendees() {
|