@webex/plugin-meetings 3.12.0-next.45 → 3.12.0-next.47
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/controls-options-manager/index.js +17 -5
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/hashTree/hashTreeParser.js +44 -13
- package/dist/hashTree/hashTreeParser.js.map +1 -1
- package/dist/interpretation/index.js +10 -1
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/util.js +15 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/metrics/constants.js +2 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/recording-controller/index.js +1 -3
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/types/controls-options-manager/index.d.ts +10 -0
- package/dist/types/hashTree/hashTreeParser.d.ts +8 -0
- package/dist/types/meeting/util.d.ts +7 -0
- package/dist/types/metrics/constants.d.ts +1 -0
- package/dist/webinar/index.js +6 -1
- package/dist/webinar/index.js.map +1 -1
- package/package.json +1 -1
- package/src/controls-options-manager/index.ts +22 -6
- package/src/hashTree/hashTreeParser.ts +29 -1
- package/src/interpretation/index.ts +25 -8
- package/src/meeting/util.ts +16 -2
- package/src/metrics/constants.ts +1 -0
- package/src/recording-controller/index.ts +1 -2
- package/src/webinar/index.ts +13 -4
- package/test/unit/spec/controls-options-manager/index.js +35 -32
- package/test/unit/spec/hashTree/hashTreeParser.ts +158 -0
- package/test/unit/spec/interpretation/index.ts +26 -4
- package/test/unit/spec/meeting/muteState.js +3 -0
- package/test/unit/spec/meeting/utils.js +25 -0
- package/test/unit/spec/recording-controller/index.js +9 -8
|
@@ -133,6 +133,13 @@ declare const MeetingUtil: {
|
|
|
133
133
|
* @returns {void}
|
|
134
134
|
*/
|
|
135
135
|
addSequence: (meeting: any, requestBody: any) => void;
|
|
136
|
+
/**
|
|
137
|
+
* Checks if Locus API response contains a Locus DTO
|
|
138
|
+
*
|
|
139
|
+
* @param {any} response http response from Locus API call
|
|
140
|
+
* @returns {boolean} true if response contains a Locus DTO
|
|
141
|
+
*/
|
|
142
|
+
isLocusDtoInAPIResponse(response: any): any;
|
|
136
143
|
/**
|
|
137
144
|
* Updates the locus info for the meeting with the locus
|
|
138
145
|
* information returned from API requests made to Locus
|
|
@@ -92,5 +92,6 @@ declare const BEHAVIORAL_METRICS: {
|
|
|
92
92
|
DEPRECATED_DELETE_CODEC_PARAMETERS_USED: string;
|
|
93
93
|
SET_CUSTOM_CODEC_PARAMETERS_USED: string;
|
|
94
94
|
MARK_CUSTOM_CODEC_PARAMETERS_FOR_DELETION_USED: string;
|
|
95
|
+
HASH_TREE_SYNC_FAILURE: string;
|
|
95
96
|
};
|
|
96
97
|
export { BEHAVIORAL_METRICS as default };
|
package/dist/webinar/index.js
CHANGED
|
@@ -17,6 +17,7 @@ var _internalPluginLlm = require("@webex/internal-plugin-llm");
|
|
|
17
17
|
var _constants = require("../constants");
|
|
18
18
|
var _collection = _interopRequireDefault(require("./collection"));
|
|
19
19
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
20
|
+
var _util = _interopRequireDefault(require("../meeting/util"));
|
|
20
21
|
var _utils = require("./utils");
|
|
21
22
|
/*!
|
|
22
23
|
* Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
|
|
@@ -380,6 +381,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
380
381
|
* @returns {Promise}
|
|
381
382
|
*/
|
|
382
383
|
setPracticeSessionState: function setPracticeSessionState(enabled) {
|
|
384
|
+
var meeting = this.getValidatedWebinarMeeting();
|
|
383
385
|
return this.request({
|
|
384
386
|
method: _constants.HTTP_VERBS.PATCH,
|
|
385
387
|
uri: "".concat(this.locusUrl, "/controls"),
|
|
@@ -388,6 +390,9 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
388
390
|
enabled: enabled
|
|
389
391
|
}
|
|
390
392
|
}
|
|
393
|
+
}).then(function (response) {
|
|
394
|
+
_util.default.updateLocusFromApiResponse(meeting, response);
|
|
395
|
+
return response;
|
|
391
396
|
}).catch(function (error) {
|
|
392
397
|
_loggerProxy.default.logger.error('Meeting:webinar#setPracticeSessionState failed', error);
|
|
393
398
|
throw error;
|
|
@@ -769,7 +774,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
769
774
|
}, _callee1);
|
|
770
775
|
}))();
|
|
771
776
|
},
|
|
772
|
-
version: "3.12.0-next.
|
|
777
|
+
version: "3.12.0-next.47"
|
|
773
778
|
});
|
|
774
779
|
var _default = exports.default = Webinar;
|
|
775
780
|
//# 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","getValidatedWebinarMeeting","meeting","webex","meetings","getMeetingByType","_ID_","undefined","LoggerProxy","logger","warn","concat","_ref","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","_practiceSessionRelayListener","stop","ensurePracticeSessionDatachannelToken","_this2","_callee2","isDataChannelTokenEnabled","cachedToken","_refreshResponse$body","refreshResponse","_ref2","datachannelToken","dataChannelTokenType","_t","_context2","sent","abrupt","getDatachannelToken","DataChannelTokenType","PracticeSession","refreshDataChannelToken","body","setDatachannelToken","message","String","_this3","_callee3","invocationSequence","isPracticeSession","_ref3","_ref3$url","url","_ref3$info","_ref3$info2","_ref3$info2$practiceS","practiceSessionDatachannelUrl","practiceSessionDatachannelToken","isCaptionBoxOn","_onDefaultSessionConnected","refreshedPracticeSessionToken","latestPracticeSessionDatachannelUrl","isStillPracticeSession","_context3","_updatePSDataChannelSequence","isJoined","info","voicea","getIsCaptionBoxOn","isConnected","getLocusUrl","getDatachannelUrl","onDefaultSessionConnected","on","registerAndConnect","then","registerAndConnectResult","_this3$webex$internal","_this3$webex$internal2","processRelayEvent","announce","call","updateSubchannelSubscriptions","subscribe","_promise","resolve","setPracticeSessionState","enabled","request","method","HTTP_VERBS","PATCH","uri","practiceSession","catch","error","updatePracticeSessionStatus","startWebcast","layout","_this4","_callee4","_t2","_t3","_t4","_t5","_t6","_t7","_t8","_t9","_context4","Error","PUT","_defineProperty2","credentials","getUserToken","config","trackingIdPrefix","uuid","v4","toString","authorization","trackingId","HEADERS","CONTENT_TYPE","CONTENT_TYPE_VALUE","APPLICATION_JSON","action","meetingInfo","locusId","correlationId","headers","stopWebcast","_this5","_callee5","_t0","_t1","_t10","_t11","_t12","_t13","_t14","_t15","_context5","queryWebcastLayout","_this6","_callee6","_t16","_t17","_t18","_t19","_t20","_t21","_context6","GET","updateWebcastLayout","_this7","_callee7","_t22","_t23","_t24","_t25","_t26","_t27","_t28","_t29","_context7","videoLayout","contentLayout","syncStageLayout","syncStageInMeeting","viewAllWebcastAttendees","_this8","_callee8","_t30","_t31","_t32","_t33","_t34","_t35","_context8","searchWebcastAttendees","_arguments","arguments","_this9","_callee9","queryString","_t36","_t37","_t38","_t39","_t40","_t41","_context9","length","encodeURIComponent","expelWebcastAttendee","participantId","_this0","_callee0","_t42","_t43","_t44","_t45","_t46","_t47","_context0","DELETE","searchLargeScaleWebinarAttendees","_this1","_callee1","_payload$limit","_meeting$locusInfo3","_meeting$locusInfo3$l","_meeting$locusInfo3$l2","_meeting$locusInfo3$l3","rawParams","attendeeSearchUrl","_t48","_t49","_t50","_t51","_t52","_t53","_context1","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 * Resolves the meeting associated with this webinar instance, guarded against the\n * meetingId pointer drifting onto an unrelated transient meeting (e.g. an inbound\n * 1:1 call) that may exist in the meeting collection. Returns the meeting only when\n * its locusUrl matches this webinar's tracked locusUrl. Returns undefined (with a\n * warning) when the meeting cannot be resolved or when the webinar's locusUrl has\n * not been initialized yet — callers must treat this as \"no owned meeting\" rather\n * than fall through to an unvalidated lookup.\n * @returns {object|undefined}\n */\n getValidatedWebinarMeeting() {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n\n if (!meeting) {\n return undefined;\n }\n\n if (!this.locusUrl) {\n LoggerProxy.logger.warn(\n `Webinar:index#getValidatedWebinarMeeting --> skipping; webinar locusUrl is not yet initialized for meetingId ${this.meetingId}`\n );\n\n return undefined;\n }\n\n if (meeting.locusUrl !== this.locusUrl) {\n LoggerProxy.logger.warn(\n `Webinar:index#getValidatedWebinarMeeting --> skipping; meeting ${this.meetingId} locusUrl ${meeting.locusUrl} does not match webinar locusUrl ${this.locusUrl}`\n );\n\n return undefined;\n }\n\n return meeting;\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.getValidatedWebinarMeeting();\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 * The listener reference removed here is the exact callback captured at subscribe\n * time (see updatePSDataChannel) so that cleanup is correct even if the underlying\n * meeting can no longer be resolved (e.g. locusUrl mismatch).\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 // @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\n if (this._practiceSessionRelayListener) {\n // @ts-ignore - Fix type\n this.webex.internal.llm.off(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n this._practiceSessionRelayListener\n );\n this._practiceSessionRelayListener = null;\n }\n },\n\n /**\n * Ensures practice-session token exists before registering the practice LLM channel.\n * Caller is responsible for passing a meeting that has already been resolved via\n * getValidatedWebinarMeeting() — this method does not re-validate ownership.\n * @param {object} meeting\n * @returns {Promise<string|undefined>}\n */\n async ensurePracticeSessionDatachannelToken(meeting) {\n // @ts-ignore\n const isDataChannelTokenEnabled = await this.webex.internal.llm.isDataChannelTokenEnabled();\n\n if (!isDataChannelTokenEnabled) {\n return undefined;\n }\n\n // @ts-ignore\n const cachedToken = this.webex.internal.llm.getDatachannelToken(\n DataChannelTokenType.PracticeSession\n );\n\n if (cachedToken) {\n return cachedToken;\n }\n\n try {\n const refreshResponse = await meeting.refreshDataChannelToken();\n const {datachannelToken, dataChannelTokenType} = refreshResponse?.body ?? {};\n\n if (!datachannelToken) {\n return undefined;\n }\n\n // @ts-ignore\n this.webex.internal.llm.setDatachannelToken(\n datachannelToken,\n dataChannelTokenType || DataChannelTokenType.PracticeSession\n );\n\n return datachannelToken;\n } catch (error) {\n LoggerProxy.logger.warn(\n `Webinar:index#ensurePracticeSessionDatachannelToken --> failed to proactively refresh practice-session token: ${\n error?.message || String(error)\n }`\n );\n\n return undefined;\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 this._updatePSDataChannelSequence = (this._updatePSDataChannelSequence || 0) + 1;\n const invocationSequence = this._updatePSDataChannelSequence;\n\n const meeting = this.getValidatedWebinarMeeting();\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 let 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 const refreshedPracticeSessionToken = await this.ensurePracticeSessionDatachannelToken(meeting);\n\n const latestPracticeSessionDatachannelUrl = get(\n meeting,\n 'locusInfo.info.practiceSessionDatachannelUrl'\n );\n const isStillPracticeSession = meeting?.isJoined() && this.isJoinPracticeSessionDataChannel();\n\n // Skip stale invocations after async refresh to avoid reconnecting a session\n // that was already updated/cleaned by a newer state transition.\n if (\n invocationSequence !== this._updatePSDataChannelSequence ||\n !isStillPracticeSession ||\n !latestPracticeSessionDatachannelUrl ||\n latestPracticeSessionDatachannelUrl !== practiceSessionDatachannelUrl\n ) {\n return undefined;\n }\n\n if (refreshedPracticeSessionToken) {\n practiceSessionDatachannelToken = refreshedPracticeSessionToken;\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 // Track the exact listener reference so cleanupPSDataChannel can\n // unsubscribe deterministically, even if the meeting can no longer\n // be resolved at cleanup time.\n if (this._practiceSessionRelayListener) {\n // @ts-ignore - Fix type\n this.webex.internal.llm.off(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n this._practiceSessionRelayListener\n );\n }\n this._practiceSessionRelayListener = meeting?.processRelayEvent;\n // @ts-ignore - Fix type\n this.webex.internal.llm.on(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n this._practiceSessionRelayListener\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.getValidatedWebinarMeeting();\n if (!meeting) {\n LoggerProxy.logger.error(\n 'Meeting:webinar5k#searchLargeScaleWebinarAttendees failed --> webinar meeting could not be validated'\n );\n throw new Error('Meeting:webinar5k#Webinar meeting is not resolvable for the current locus');\n }\n\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(\n 'Meeting:webinar5k#searchLargeScaleWebinarAttendees failed --> attendee search url unavailable'\n );\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":";;;;;;;;;;;;AAGA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,kBAAA,GAAAJ,OAAA;AACA,IAAAK,UAAA,GAAAL,OAAA;AAWA,IAAAM,WAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,YAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,MAAA,GAAAR,OAAA;AApBA;AACA;AACA;;AAoBA;AACA;AACA;AACA,IAAMS,OAAO,GAAGC,sBAAW,CAACC,MAAM,CAAC;EACjCC,SAAS,EAAEC,mBAAQ;EACnBC,WAAW,EAAE;IACXC,OAAO,EAAEC;EACX,CAAC;EAEDC,KAAK,EAAE;IACLC,QAAQ,EAAE,QAAQ;IAAE;IACpBC,kBAAkB,EAAE,QAAQ;IAAE;IAC9BC,gBAAgB,EAAE,SAAS;IAAE;IAC7BC,cAAc,EAAE,SAAS;IAAE;IAC3BC,cAAc,EAAE,SAAS;IAAE;IAC3BC,sBAAsB,EAAE,SAAS;IAAE;IACnCC,SAAS,EAAE;EACb,CAAC;EAED;AACF;AACA;AACA;EACEC,OAAO,WAAPA,OAAOA,CAAA,EAAG;IACR,IAAI,CAACC,oBAAoB,CAAC,CAAC;EAC7B,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,cAAc,WAAdA,cAAcA,CAACT,QAAQ,EAAE;IACvB,IAAI,CAACU,GAAG,CAAC,UAAU,EAAEV,QAAQ,CAAC;EAChC,CAAC;EAED;AACF;AACA;AACA;AACA;EACEW,gBAAgB,WAAhBA,gBAAgBA,CAACC,OAAO,EAAE;IACxB,IAAI,CAACF,GAAG,CAAC,oBAAoB,EAAE,IAAAG,WAAG,EAACD,OAAO,EAAE,+BAA+B,CAAC,CAAC;EAC/E,CAAC;EAED;AACF;AACA;AACA;AACA;EACEE,sBAAsB,WAAtBA,sBAAsBA,CAACZ,gBAAgB,EAAE;IACvC,IAAI,CAACQ,GAAG,CAAC,kBAAkB,EAAER,gBAAgB,CAAC;EAChD,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEa,iBAAiB,WAAjBA,iBAAiBA,CAACH,OAAO,EAAE;IACzB,IAAMI,QAAQ,GAAG,IAAAH,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC;IAC7C,IAAMK,QAAQ,GAAG,IAAAJ,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC;IAE7C,IAAMM,UAAU,GACdF,QAAQ,CAACG,QAAQ,CAACC,qBAAU,CAACC,QAAQ,CAAC,IAAIJ,QAAQ,CAACE,QAAQ,CAACC,qBAAU,CAACE,QAAQ,CAAC;IAClF,IAAMC,SAAS,GACZP,QAAQ,CAACG,QAAQ,CAACC,qBAAU,CAACE,QAAQ,CAAC,IAAIL,QAAQ,CAACE,QAAQ,CAACC,qBAAU,CAACC,QAAQ,CAAC,IAChF,CAACL,QAAQ,CAACG,QAAQ,CAACC,qBAAU,CAACC,QAAQ,CAAC,IAAIJ,QAAQ,CAACE,QAAQ,CAACC,qBAAU,CAACC,QAAQ,CAAE,CAAC,CAAC;IACvF,IAAI,CAACX,GAAG,CAAC,gBAAgB,EAAEO,QAAQ,CAACE,QAAQ,CAACC,qBAAU,CAACE,QAAQ,CAAC,CAAC;IAClE,IAAI,CAACZ,GAAG,CAAC,gBAAgB,EAAEO,QAAQ,CAACE,QAAQ,CAACC,qBAAU,CAACC,QAAQ,CAAC,CAAC;IAClE,IAAI,CAACP,sBAAsB,CAACG,QAAQ,CAACE,QAAQ,CAACC,qBAAU,CAACI,SAAS,CAAC,CAAC;IACpE,IAAI,CAACC,kBAAkB,CAAC;MAACP,UAAU,EAAVA,UAAU;MAAEK,SAAS,EAATA;IAAS,CAAC,CAAC;IAEhD,OAAO;MAACL,UAAU,EAAVA,UAAU;MAAEK,SAAS,EAATA;IAAS,CAAC;EAChC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEG,0BAA0B,WAA1BA,0BAA0BA,CAAA,EAAG;IAC3B,IAAMC,OAAO,GAAG,IAAI,CAACC,KAAK,CAACC,QAAQ,CAACC,gBAAgB,CAACC,eAAI,EAAE,IAAI,CAACzB,SAAS,CAAC;IAE1E,IAAI,CAACqB,OAAO,EAAE;MACZ,OAAOK,SAAS;IAClB;IAEA,IAAI,CAAC,IAAI,CAAChC,QAAQ,EAAE;MAClBiC,oBAAW,CAACC,MAAM,CAACC,IAAI,iHAAAC,MAAA,CAC2F,IAAI,CAAC9B,SAAS,CAChI,CAAC;MAED,OAAO0B,SAAS;IAClB;IAEA,IAAIL,OAAO,CAAC3B,QAAQ,KAAK,IAAI,CAACA,QAAQ,EAAE;MACtCiC,oBAAW,CAACC,MAAM,CAACC,IAAI,mEAAAC,MAAA,CAC6C,IAAI,CAAC9B,SAAS,gBAAA8B,MAAA,CAAaT,OAAO,CAAC3B,QAAQ,uCAAAoC,MAAA,CAAoC,IAAI,CAACpC,QAAQ,CAChK,CAAC;MAED,OAAOgC,SAAS;IAClB;IAEA,OAAOL,OAAO;EAChB,CAAC;EAED;AACF;AACA;AACA;AACA;EACEF,kBAAkB,WAAlBA,kBAAkBA,CAAAY,IAAA,EAA0B;IAAA,IAAxBnB,UAAU,GAAAmB,IAAA,CAAVnB,UAAU;MAAEK,SAAS,GAAAc,IAAA,CAATd,SAAS;IACvC,IAAMI,OAAO,GAAG,IAAI,CAACD,0BAA0B,CAAC,CAAC;IAEjD,IACGH,SAAS,IAAI,CAAAI,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEW,WAAW,MAAKC,uBAAY,CAACC,uBAAuB,IAC3EtB,UAAU,EACV;MAAA,IAAAuB,kBAAA,EAAAC,mBAAA;MACA;MACA;MACAf,OAAO,aAAPA,OAAO,wBAAAc,kBAAA,GAAPd,OAAO,CAAEgB,SAAS,cAAAF,kBAAA,uBAAlBA,kBAAA,CAAoBG,iBAAiB,CAACjB,OAAO,aAAPA,OAAO,wBAAAe,mBAAA,GAAPf,OAAO,CAAEgB,SAAS,cAAAD,mBAAA,uBAAlBA,mBAAA,CAAoBG,WAAW,EAAE,IAAI,CAAC;IAC9E;IAEA,IAAI,CAACC,mBAAmB,CAAC,CAAC;EAC5B,CAAC;EAED;AACF;AACA;AACA;EACEC,gCAAgC,WAAhCA,gCAAgCA,CAAA,EAAG;IACjC,OAAO,IAAI,CAAC5C,cAAc,IAAI,IAAI,CAACE,sBAAsB;EAC3D,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACQG,oBAAoB,WAApBA,oBAAoBA,CAAA,EAAG;IAAA,IAAAwC,KAAA;IAAA,WAAAC,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAC,QAAA;MAAA,OAAAF,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAC3B,IAAIT,KAAI,CAACU,sBAAsB,EAAE;cAC/B;cACAV,KAAI,CAACpB,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACC,GAAG,CAAC,QAAQ,EAAEb,KAAI,CAACU,sBAAsB,CAAC;cAClEV,KAAI,CAACU,sBAAsB,GAAG,IAAI;YACpC;;YAEA;YAAAH,QAAA,CAAAE,IAAA;YAAA,OACMT,KAAI,CAACpB,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACE,aAAa,CACzC;cACEC,IAAI,EAAE,IAAI;cACVC,MAAM,EAAE;YACV,CAAC,EACDC,+BACF,CAAC;UAAA;YAED,IAAIjB,KAAI,CAACkB,6BAA6B,EAAE;cACtC;cACAlB,KAAI,CAACpB,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACC,GAAG,sBAAAzB,MAAA,CACJ6B,+BAAoB,GACzCjB,KAAI,CAACkB,6BACP,CAAC;cACDlB,KAAI,CAACkB,6BAA6B,GAAG,IAAI;YAC3C;UAAC;UAAA;YAAA,OAAAX,QAAA,CAAAY,IAAA;QAAA;MAAA,GAAAd,OAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACQe,qCAAqC,WAArCA,qCAAqCA,CAACzC,OAAO,EAAE;IAAA,IAAA0C,MAAA;IAAA,WAAApB,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAkB,SAAA;MAAA,IAAAC,yBAAA,EAAAC,WAAA,EAAAC,qBAAA,EAAAC,eAAA,EAAAC,KAAA,EAAAC,gBAAA,EAAAC,oBAAA,EAAAC,EAAA;MAAA,OAAA3B,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAyB,SAAA;QAAA,kBAAAA,SAAA,CAAAvB,IAAA,GAAAuB,SAAA,CAAAtB,IAAA;UAAA;YAAAsB,SAAA,CAAAtB,IAAA;YAAA,OAEXY,MAAI,CAACzC,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACW,yBAAyB,CAAC,CAAC;UAAA;YAArFA,yBAAyB,GAAAQ,SAAA,CAAAC,IAAA;YAAA,IAE1BT,yBAAyB;cAAAQ,SAAA,CAAAtB,IAAA;cAAA;YAAA;YAAA,OAAAsB,SAAA,CAAAE,MAAA,WACrBjD,SAAS;UAAA;YAGlB;YACMwC,WAAW,GAAGH,MAAI,CAACzC,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACsB,mBAAmB,CAC7DC,uCAAoB,CAACC,eACvB,CAAC;YAAA,KAEGZ,WAAW;cAAAO,SAAA,CAAAtB,IAAA;cAAA;YAAA;YAAA,OAAAsB,SAAA,CAAAE,MAAA,WACNT,WAAW;UAAA;YAAAO,SAAA,CAAAvB,IAAA;YAAAuB,SAAA,CAAAtB,IAAA;YAAA,OAIY9B,OAAO,CAAC0D,uBAAuB,CAAC,CAAC;UAAA;YAAzDX,eAAe,GAAAK,SAAA,CAAAC,IAAA;YAAAL,KAAA,IAAAF,qBAAA,GAC4BC,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAEY,IAAI,cAAAb,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC,EAArEG,gBAAgB,GAAAD,KAAA,CAAhBC,gBAAgB,EAAEC,oBAAoB,GAAAF,KAAA,CAApBE,oBAAoB;YAAA,IAExCD,gBAAgB;cAAAG,SAAA,CAAAtB,IAAA;cAAA;YAAA;YAAA,OAAAsB,SAAA,CAAAE,MAAA,WACZjD,SAAS;UAAA;YAGlB;YACAqC,MAAI,CAACzC,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAAC2B,mBAAmB,CACzCX,gBAAgB,EAChBC,oBAAoB,IAAIM,uCAAoB,CAACC,eAC/C,CAAC;YAAC,OAAAL,SAAA,CAAAE,MAAA,WAEKL,gBAAgB;UAAA;YAAAG,SAAA,CAAAvB,IAAA;YAAAsB,EAAA,GAAAC,SAAA;YAEvB9C,oBAAW,CAACC,MAAM,CAACC,IAAI,kHAAAC,MAAA,CAEnB,CAAA0C,EAAA,aAAAA,EAAA,uBAAAA,EAAA,CAAOU,OAAO,KAAIC,MAAM,CAAAX,EAAM,CAAC,CAEnC,CAAC;YAAC,OAAAC,SAAA,CAAAE,MAAA,WAEKjD,SAAS;UAAA;UAAA;YAAA,OAAA+C,SAAA,CAAAZ,IAAA;QAAA;MAAA,GAAAG,QAAA;IAAA;EAEpB,CAAC;EAED;AACF;AACA;AACA;AACA;EACQxB,mBAAmB,WAAnBA,mBAAmBA,CAAA,EAAG;IAAA,IAAA4C,MAAA;IAAA,WAAAzC,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAuC,SAAA;MAAA,IAAAC,kBAAA,EAAAjE,OAAA,EAAAkE,iBAAA,EAAAC,KAAA,EAAAC,SAAA,EAAAC,GAAA,EAAAC,UAAA,EAAAC,WAAA,EAAAC,qBAAA,EAAAC,6BAAA,EAAAC,+BAAA,EAAAC,cAAA,EAAAC,0BAAA,EAAAC,6BAAA,EAAAC,mCAAA,EAAAC,sBAAA;MAAA,OAAAvD,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAqD,SAAA;QAAA,kBAAAA,SAAA,CAAAnD,IAAA,GAAAmD,SAAA,CAAAlD,IAAA;UAAA;YAC1BiC,MAAI,CAACkB,4BAA4B,GAAG,CAAClB,MAAI,CAACkB,4BAA4B,IAAI,CAAC,IAAI,CAAC;YAC1EhB,kBAAkB,GAAGF,MAAI,CAACkB,4BAA4B;YAEtDjF,OAAO,GAAG+D,MAAI,CAAChE,0BAA0B,CAAC,CAAC;YAC3CmE,iBAAiB,GAAG,CAAAlE,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEkF,QAAQ,CAAC,CAAC,KAAInB,MAAI,CAAC3C,gCAAgC,CAAC,CAAC;YAAA,IAEnF8C,iBAAiB;cAAAc,SAAA,CAAAlD,IAAA;cAAA;YAAA;YAAAkD,SAAA,CAAAlD,IAAA;YAAA,OACdiC,MAAI,CAAClF,oBAAoB,CAAC,CAAC;UAAA;YAAA,OAAAmG,SAAA,CAAA1B,MAAA,WAE1BjD,SAAS;UAAA;YAGlB;YAAA8D,KAAA,GAEE,CAAAnE,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEgB,SAAS,KAAI,CAAC,CAAC,EAAAoD,SAAA,GAAAD,KAAA,CADnBE,GAAG,EAAHA,GAAG,GAAAD,SAAA,cAAG/D,SAAS,GAAA+D,SAAA,EAAAE,UAAA,GAAAH,KAAA,CAAEgB,IAAI,EAAAZ,WAAA,GAAAD,UAAA,cAAgD,CAAC,CAAC,GAAAA,UAAA,EAAAE,qBAAA,GAAAD,WAAA,CAA/CE,6BAA6B,EAA7BA,6BAA6B,GAAAD,qBAAA,cAAGnE,SAAS,GAAAmE,qBAAA,EAGxE;YACIE,+BAA+B,GAAGX,MAAI,CAAC9D,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACsB,mBAAmB,CAC/EC,uCAAoB,CAACC,eACvB,CAAC;YAEKkB,cAAc,GAAGZ,MAAI,CAAC9D,KAAK,CAAC+B,QAAQ,CAACoD,MAAM,CAACC,iBAAiB,CAAC,CAAC;YAAA,IAEhEZ,6BAA6B;cAAAO,SAAA,CAAAlD,IAAA;cAAA;YAAA;YAAA,OAAAkD,SAAA,CAAA1B,MAAA,WACzBjD,SAAS;UAAA;YAAA,KAGd0D,MAAI,CAAC9D,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACqD,WAAW,CAAChD,+BAAoB,CAAC;cAAA0C,SAAA,CAAAlD,IAAA;cAAA;YAAA;YAAA;YAEzD;YACAuC,GAAG,KAAKN,MAAI,CAAC9D,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACsD,WAAW,CAACjD,+BAAoB,CAAC;YACjE;YACAmC,6BAA6B,KAC3BV,MAAI,CAAC9D,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACuD,iBAAiB,CAAClD,+BAAoB,CAAC;cAAA0C,SAAA,CAAAlD,IAAA;cAAA;YAAA;YAAA,OAAAkD,SAAA,CAAA1B,MAAA,WAE1DjD,SAAS;UAAA;YAAA2E,SAAA,CAAAlD,IAAA;YAAA,OAGZiC,MAAI,CAAClF,oBAAoB,CAAC,CAAC;UAAA;YAGnC;YACA;YACA;YACA,IAAI,CAACkF,MAAI,CAAChC,sBAAsB,EAAE;cAC1B0D,0BAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAS;gBACtC1B,MAAI,CAAChC,sBAAsB,GAAG,IAAI;gBAClC;gBACAgC,MAAI,CAAC9D,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACC,GAAG,CAAC,QAAQ,EAAEuD,0BAAyB,CAAC;gBAChE1B,MAAI,CAAC5C,mBAAmB,CAAC,CAAC;cAC5B,CAAC;cACD4C,MAAI,CAAChC,sBAAsB,GAAG0D,0BAAyB;cACvD;cACA1B,MAAI,CAAC9D,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACyD,EAAE,CAAC,QAAQ,EAAED,0BAAyB,CAAC;YACjE;;YAEA;YAAA,IACK1B,MAAI,CAAC9D,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACqD,WAAW,CAAC,CAAC;cAAAN,SAAA,CAAAlD,IAAA;cAAA;YAAA;YACxCxB,oBAAW,CAACC,MAAM,CAAC4E,IAAI,CACrB,8GACF,CAAC;YAAC,OAAAH,SAAA,CAAA1B,MAAA,WAEKjD,SAAS;UAAA;YAGlB;YACA,IAAI0D,MAAI,CAAChC,sBAAsB,EAAE;cAC/B;cACAgC,MAAI,CAAC9D,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACC,GAAG,CAAC,QAAQ,EAAE6B,MAAI,CAAChC,sBAAsB,CAAC;cAClEgC,MAAI,CAAChC,sBAAsB,GAAG,IAAI;YACpC;YAACiD,SAAA,CAAAlD,IAAA;YAAA,OAE2CiC,MAAI,CAACtB,qCAAqC,CAACzC,OAAO,CAAC;UAAA;YAAzF6E,6BAA6B,GAAAG,SAAA,CAAA3B,IAAA;YAE7ByB,mCAAmC,GAAG,IAAA5F,WAAG,EAC7Cc,OAAO,EACP,8CACF,CAAC;YACK+E,sBAAsB,GAAG,CAAA/E,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEkF,QAAQ,CAAC,CAAC,KAAInB,MAAI,CAAC3C,gCAAgC,CAAC,CAAC,EAE7F;YACA;YAAA,MAEE6C,kBAAkB,KAAKF,MAAI,CAACkB,4BAA4B,IACxD,CAACF,sBAAsB,IACvB,CAACD,mCAAmC,IACpCA,mCAAmC,KAAKL,6BAA6B;cAAAO,SAAA,CAAAlD,IAAA;cAAA;YAAA;YAAA,OAAAkD,SAAA,CAAA1B,MAAA,WAE9DjD,SAAS;UAAA;YAGlB,IAAIwE,6BAA6B,EAAE;cACjCH,+BAA+B,GAAGG,6BAA6B;YACjE;;YAEA;YAAA,OAAAG,SAAA,CAAA1B,MAAA,WACOS,MAAI,CAAC9D,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAC3B0D,kBAAkB,CACjBtB,GAAG,EACHI,6BAA6B,EAC7BC,+BAA+B,EAC/BpC,+BACF,CAAC,CACAsD,IAAI,CAAC,UAACC,wBAAwB,EAAK;cAAA,IAAAC,qBAAA,EAAAC,sBAAA;cAClC;cACA;cACA;cACA,IAAIhC,MAAI,CAACxB,6BAA6B,EAAE;gBACtC;gBACAwB,MAAI,CAAC9D,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACC,GAAG,sBAAAzB,MAAA,CACJ6B,+BAAoB,GACzCyB,MAAI,CAACxB,6BACP,CAAC;cACH;cACAwB,MAAI,CAACxB,6BAA6B,GAAGvC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEgG,iBAAiB;cAC/D;cACAjC,MAAI,CAAC9D,KAAK,CAAC+B,QAAQ,CAACC,GAAG,CAACyD,EAAE,sBAAAjF,MAAA,CACH6B,+BAAoB,GACzCyB,MAAI,CAACxB,6BACP,CAAC;cACD;cACA,CAAAuD,qBAAA,GAAA/B,MAAI,CAAC9D,KAAK,CAAC+B,QAAQ,CAACoD,MAAM,cAAAU,qBAAA,wBAAAC,sBAAA,GAA1BD,qBAAA,CAA4BG,QAAQ,cAAAF,sBAAA,uBAApCA,sBAAA,CAAAG,IAAA,CAAAJ,qBAAuC,CAAC;cACxC,IAAInB,cAAc,EAAE;gBAClBZ,MAAI,CAAC9D,KAAK,CAAC+B,QAAQ,CAACoD,MAAM,CAACe,6BAA6B,CAAC;kBAACC,SAAS,EAAE,CAAC,eAAe;gBAAC,CAAC,CAAC;cAC1F;cACA9F,oBAAW,CAACC,MAAM,CAAC4E,IAAI,kGAAA1E,MAAA,CAC4E6B,+BAAoB,MACvH,CAAC;cAED,OAAO+D,QAAA,CAAA9E,OAAA,CAAQ+E,OAAO,CAACT,wBAAwB,CAAC;YAClD,CAAC,CAAC;UAAA;UAAA;YAAA,OAAAb,SAAA,CAAAxC,IAAA;QAAA;MAAA,GAAAwB,QAAA;IAAA;EACN,CAAC;EAED;AACF;AACA;AACA;AACA;EACEuC,uBAAuB,WAAvBA,uBAAuBA,CAACC,OAAO,EAAE;IAC/B,OAAO,IAAI,CAACC,OAAO,CAAC;MAClBC,MAAM,EAAEC,qBAAU,CAACC,KAAK;MACxBC,GAAG,KAAApG,MAAA,CAAK,IAAI,CAACpC,QAAQ,cAAW;MAChCsF,IAAI,EAAE;QACJmD,eAAe,EAAE;UACfN,OAAO,EAAPA;QACF;MACF;IACF,CAAC,CAAC,CAACO,KAAK,CAAC,UAACC,KAAK,EAAK;MAClB1G,oBAAW,CAACC,MAAM,CAACyG,KAAK,CAAC,gDAAgD,EAAEA,KAAK,CAAC;MACjF,MAAMA,KAAK;IACb,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,2BAA2B,WAA3BA,2BAA2BA,CAAChI,OAAO,EAAE;IACnC,IAAI,CAACF,GAAG,CAAC,wBAAwB,EAAE,CAAC,EAACE,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEuH,OAAO,EAAC;IACtD,IAAI,CAACrF,mBAAmB,CAAC,CAAC,CAACyE,IAAI,CAAC,YAAM,CAAC,CAAC,CAAC;EAC3C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACQsB,YAAY,WAAZA,YAAYA,CAAClH,OAAO,EAAEmH,MAAM,EAAE;IAAA,IAAAC,MAAA;IAAA,WAAA9F,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAA4F,SAAA;MAAA,IAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA;MAAA,OAAArG,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAmG,SAAA;QAAA,kBAAAA,SAAA,CAAAjG,IAAA,GAAAiG,SAAA,CAAAhG,IAAA;UAAA;YAAA,IAC7B9B,OAAO;cAAA8H,SAAA,CAAAhG,IAAA;cAAA;YAAA;YACVxB,oBAAW,CAACC,MAAM,CAACyG,KAAK,gEAAAvG,MAAA,CACyCT,OAAO,CACxE,CAAC;YAAC,MACI,IAAI+H,KAAK,CAAC,8CAA8C,CAAC;UAAA;YAAAT,GAAA,GAG1DF,MAAI;YAAAG,GAAA,GACDZ,qBAAU,CAACqB,GAAG;YAAAR,GAAA,MAAA/G,MAAA,CACd2G,MAAI,CAAC9I,kBAAkB;YAAAmJ,GAAA,GAAAQ,gBAAA,CAAA1G,OAAA;YAAAuG,SAAA,CAAAhG,IAAA;YAAA,OAERsF,MAAI,CAACnH,KAAK,CAACiI,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAAT,GAAA,GAAAI,SAAA,CAAAzE,IAAA;YAAAsE,GAAA,MAAAlH,MAAA,CAC3C2H,iBAAM,CAACC,gBAAgB,OAAA5H,MAAA,CAAI6H,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAAAZ,GAAA,GAAAH,GAAA;cAD9DgB,aAAa,EAAAf,GAAA;cACbgB,UAAU,EAAAf;YAAA,GACTgB,kBAAO,CAACC,YAAY,EAAGD,kBAAO,CAACE,kBAAkB,CAACC,gBAAgB;YAAAjB,GAAA,GAE/D;cACJkB,MAAM,EAAE,OAAO;cACfC,WAAW,EAAE;gBACXC,OAAO,EAAEjJ,OAAO,CAACiJ,OAAO;gBACxBC,aAAa,EAAElJ,OAAO,CAACkJ;cACzB,CAAC;cACD/B,MAAM,EAANA;YACF,CAAC;YAAA,OAAAW,SAAA,CAAAxE,MAAA,WAAAgE,GAAA,CAfSb,OAAO,CAAAP,IAAA,CAAAoB,GAAA;cACjBZ,MAAM,EAAAa,GAAA;cACNV,GAAG,EAAAW,GAAA;cACH2B,OAAO,EAAAvB,GAAA;cAKPjE,IAAI,EAAAkE;YAAA,GAQHd,KAAK,CAAC,UAACC,KAAK,EAAK;cAClB1G,oBAAW,CAACC,MAAM,CAACyG,KAAK,CAAC,qCAAqC,EAAEA,KAAK,CAAC;cACtE,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAAc,SAAA,CAAAtF,IAAA;QAAA;MAAA,GAAA6E,QAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;EACQ+B,WAAW,WAAXA,WAAWA,CAAA,EAAG;IAAA,IAAAC,MAAA;IAAA,WAAA/H,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAA6H,SAAA;MAAA,IAAAC,GAAA,EAAAC,GAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;MAAA,OAAAtI,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAoI,SAAA;QAAA,kBAAAA,SAAA,CAAAlI,IAAA,GAAAkI,SAAA,CAAAjI,IAAA;UAAA;YAAAyH,GAAA,GACXF,MAAI;YAAAG,GAAA,GACD7C,qBAAU,CAACqB,GAAG;YAAAyB,IAAA,MAAAhJ,MAAA,CACd4I,MAAI,CAAC/K,kBAAkB;YAAAoL,IAAA,GAAAzB,gBAAA,CAAA1G,OAAA;YAAAwI,SAAA,CAAAjI,IAAA;YAAA,OAERuH,MAAI,CAACpJ,KAAK,CAACiI,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAAwB,IAAA,GAAAI,SAAA,CAAA1G,IAAA;YAAAuG,IAAA,MAAAnJ,MAAA,CAC3C2H,iBAAM,CAACC,gBAAgB,OAAA5H,MAAA,CAAI6H,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAAAqB,IAAA,GAAAH,IAAA;cAD9DjB,aAAa,EAAAkB,IAAA;cACbjB,UAAU,EAAAkB;YAAA,GACTjB,kBAAO,CAACC,YAAY,EAAGD,kBAAO,CAACE,kBAAkB,CAACC,gBAAgB;YAAAgB,IAAA,GAE/D;cACJf,MAAM,EAAE;YACV,CAAC;YAAA,OAAAgB,SAAA,CAAAzG,MAAA,WAAAiG,GAAA,CAVS9C,OAAO,CAAAP,IAAA,CAAAqD,GAAA;cACjB7C,MAAM,EAAA8C,GAAA;cACN3C,GAAG,EAAA4C,IAAA;cACHN,OAAO,EAAAU,IAAA;cAKPlG,IAAI,EAAAmG;YAAA,GAGH/C,KAAK,CAAC,UAACC,KAAK,EAAK;cAClB1G,oBAAW,CAACC,MAAM,CAACyG,KAAK,CAAC,oCAAoC,EAAEA,KAAK,CAAC;cACrE,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAA+C,SAAA,CAAAvH,IAAA;QAAA;MAAA,GAAA8G,QAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;EACQU,kBAAkB,WAAlBA,kBAAkBA,CAAA,EAAG;IAAA,IAAAC,MAAA;IAAA,WAAA3I,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAyI,SAAA;MAAA,IAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;MAAA,OAAAhJ,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAA8I,SAAA;QAAA,kBAAAA,SAAA,CAAA5I,IAAA,GAAA4I,SAAA,CAAA3I,IAAA;UAAA;YAAAqI,IAAA,GAClBF,MAAI;YAAAG,IAAA,GACDzD,qBAAU,CAAC+D,GAAG;YAAAL,IAAA,MAAA5J,MAAA,CACdwJ,MAAI,CAAC3L,kBAAkB;YAAAmM,SAAA,CAAA3I,IAAA;YAAA,OAERmI,MAAI,CAAChK,KAAK,CAACiI,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAAmC,IAAA,GAAAG,SAAA,CAAApH,IAAA;YAAAkH,IAAA,MAAA9J,MAAA,CAC3C2H,iBAAM,CAACC,gBAAgB,OAAA5H,MAAA,CAAI6H,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAAAgC,IAAA;cAD9D/B,aAAa,EAAA6B,IAAA;cACb5B,UAAU,EAAA6B;YAAA;YAAA,OAAAE,SAAA,CAAAnH,MAAA,WAAA6G,IAAA,CALF1D,OAAO,CAAAP,IAAA,CAAAiE,IAAA;cACjBzD,MAAM,EAAA0D,IAAA;cACNvD,GAAG,EAAAwD,IAAA;cACHlB,OAAO,EAAAqB;YAAA,GAINzD,KAAK,CAAC,UAACC,KAAK,EAAK;cAClB1G,oBAAW,CAACC,MAAM,CAACyG,KAAK,CAAC,2CAA2C,EAAEA,KAAK,CAAC;cAC5E,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAAyD,SAAA,CAAAjI,IAAA;QAAA;MAAA,GAAA0H,QAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACQS,mBAAmB,WAAnBA,mBAAmBA,CAACxD,MAAM,EAAE;IAAA,IAAAyD,MAAA;IAAA,WAAAtJ,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAoJ,SAAA;MAAA,IAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;MAAA,OAAA7J,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAA2J,SAAA;QAAA,kBAAAA,SAAA,CAAAzJ,IAAA,GAAAyJ,SAAA,CAAAxJ,IAAA;UAAA;YAAAgJ,IAAA,GACzBF,MAAI;YAAAG,IAAA,GACDpE,qBAAU,CAACqB,GAAG;YAAAgD,IAAA,MAAAvK,MAAA,CACdmK,MAAI,CAACtM,kBAAkB;YAAA2M,IAAA,GAAAhD,gBAAA,CAAA1G,OAAA;YAAA+J,SAAA,CAAAxJ,IAAA;YAAA,OAER8I,MAAI,CAAC3K,KAAK,CAACiI,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAA+C,IAAA,GAAAI,SAAA,CAAAjI,IAAA;YAAA8H,IAAA,MAAA1K,MAAA,CAC3C2H,iBAAM,CAACC,gBAAgB,OAAA5H,MAAA,CAAI6H,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAAA4C,IAAA,GAAAH,IAAA;cAD9DxC,aAAa,EAAAyC,IAAA;cACbxC,UAAU,EAAAyC;YAAA,GACTxC,kBAAO,CAACC,YAAY,EAAGD,kBAAO,CAACE,kBAAkB,CAACC,gBAAgB;YAAAuC,IAAA,GAE/D;cACJE,WAAW,EAAEpE,MAAM,CAACoE,WAAW;cAC/BC,aAAa,EAAErE,MAAM,CAACqE,aAAa;cACnCC,eAAe,EAAEtE,MAAM,CAACsE,eAAe;cACvCC,kBAAkB,EAAEvE,MAAM,CAACuE;YAC7B,CAAC;YAAA,OAAAJ,SAAA,CAAAhI,MAAA,WAAAwH,IAAA,CAbSrE,OAAO,CAAAP,IAAA,CAAA4E,IAAA;cACjBpE,MAAM,EAAAqE,IAAA;cACNlE,GAAG,EAAAmE,IAAA;cACH7B,OAAO,EAAAiC,IAAA;cAKPzH,IAAI,EAAA0H;YAAA,GAMHtE,KAAK,CAAC,UAACC,KAAK,EAAK;cAClB1G,oBAAW,CAACC,MAAM,CAACyG,KAAK,CAAC,4CAA4C,EAAEA,KAAK,CAAC;cAC7E,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAAsE,SAAA,CAAA9I,IAAA;QAAA;MAAA,GAAAqI,QAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;EACQc,uBAAuB,WAAvBA,uBAAuBA,CAAA,EAAG;IAAA,IAAAC,MAAA;IAAA,WAAAtK,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAoK,SAAA;MAAA,IAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;MAAA,OAAA3K,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAyK,SAAA;QAAA,kBAAAA,SAAA,CAAAvK,IAAA,GAAAuK,SAAA,CAAAtK,IAAA;UAAA;YAAAgK,IAAA,GACvBF,MAAI;YAAAG,IAAA,GACDpF,qBAAU,CAAC+D,GAAG;YAAAsB,IAAA,MAAAvL,MAAA,CACdmL,MAAI,CAACtN,kBAAkB;YAAA8N,SAAA,CAAAtK,IAAA;YAAA,OAER8J,MAAI,CAAC3L,KAAK,CAACiI,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAA8D,IAAA,GAAAG,SAAA,CAAA/I,IAAA;YAAA6I,IAAA,MAAAzL,MAAA,CAC3C2H,iBAAM,CAACC,gBAAgB,OAAA5H,MAAA,CAAI6H,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAAA2D,IAAA;cAD9D1D,aAAa,EAAAwD,IAAA;cACbvD,UAAU,EAAAwD;YAAA;YAAA,OAAAE,SAAA,CAAA9I,MAAA,WAAAwI,IAAA,CALFrF,OAAO,CAAAP,IAAA,CAAA4F,IAAA;cACjBpF,MAAM,EAAAqF,IAAA;cACNlF,GAAG,EAAAmF,IAAA;cACH7C,OAAO,EAAAgD;YAAA,GAINpF,KAAK,CAAC,UAACC,KAAK,EAAK;cAClB1G,oBAAW,CAACC,MAAM,CAACyG,KAAK,CAAC,gDAAgD,EAAEA,KAAK,CAAC;cACjF,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAAoF,SAAA,CAAA5J,IAAA;QAAA;MAAA,GAAAqJ,QAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACQQ,sBAAsB,WAAtBA,sBAAsBA,CAAA,EAAmB;IAAA,IAAAC,UAAA,GAAAC,SAAA;MAAAC,MAAA;IAAA,WAAAlL,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAgL,SAAA;MAAA,IAAAC,WAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;MAAA,OAAAxL,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAsL,SAAA;QAAA,kBAAAA,SAAA,CAAApL,IAAA,GAAAoL,SAAA,CAAAnL,IAAA;UAAA;YAAlB4K,WAAW,GAAAJ,UAAA,CAAAY,MAAA,QAAAZ,UAAA,QAAAjM,SAAA,GAAAiM,UAAA,MAAG,EAAE;YAAAK,IAAA,GACpCH,MAAI;YAAAI,IAAA,GACDjG,qBAAU,CAAC+D,GAAG;YAAAmC,IAAA,MAAApM,MAAA,CACd+L,MAAI,CAAClO,kBAAkB,yBAAAmC,MAAA,CAAsB0M,kBAAkB,CAACT,WAAW,CAAC;YAAAO,SAAA,CAAAnL,IAAA;YAAA,OAE7D0K,MAAI,CAACvM,KAAK,CAACiI,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAA2E,IAAA,GAAAG,SAAA,CAAA5J,IAAA;YAAA0J,IAAA,MAAAtM,MAAA,CAC3C2H,iBAAM,CAACC,gBAAgB,OAAA5H,MAAA,CAAI6H,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAAAwE,IAAA;cAD9DvE,aAAa,EAAAqE,IAAA;cACbpE,UAAU,EAAAqE;YAAA;YAAA,OAAAE,SAAA,CAAA3J,MAAA,WAAAqJ,IAAA,CALFlG,OAAO,CAAAP,IAAA,CAAAyG,IAAA;cACjBjG,MAAM,EAAAkG,IAAA;cACN/F,GAAG,EAAAgG,IAAA;cACH1D,OAAO,EAAA6D;YAAA,GAINjG,KAAK,CAAC,UAACC,KAAK,EAAK;cAClB1G,oBAAW,CAACC,MAAM,CAACyG,KAAK,CAAC,+CAA+C,EAAEA,KAAK,CAAC;cAChF,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAAiG,SAAA,CAAAzK,IAAA;QAAA;MAAA,GAAAiK,QAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACQW,oBAAoB,WAApBA,oBAAoBA,CAACC,aAAa,EAAE;IAAA,IAAAC,MAAA;IAAA,WAAAhM,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAA8L,SAAA;MAAA,IAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;MAAA,OAAArM,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAmM,SAAA;QAAA,kBAAAA,SAAA,CAAAjM,IAAA,GAAAiM,SAAA,CAAAhM,IAAA;UAAA;YAAA0L,IAAA,GACjCF,MAAI;YAAAG,IAAA,GACD9G,qBAAU,CAACoH,MAAM;YAAAL,IAAA,MAAAjN,MAAA,CACjB6M,MAAI,CAAChP,kBAAkB,iBAAAmC,MAAA,CAAc4M,aAAa;YAAAS,SAAA,CAAAhM,IAAA;YAAA,OAEnCwL,MAAI,CAACrN,KAAK,CAACiI,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAAwF,IAAA,GAAAG,SAAA,CAAAzK,IAAA;YAAAuK,IAAA,MAAAnN,MAAA,CAC3C2H,iBAAM,CAACC,gBAAgB,OAAA5H,MAAA,CAAI6H,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAAAqF,IAAA;cAD9DpF,aAAa,EAAAkF,IAAA;cACbjF,UAAU,EAAAkF;YAAA;YAAA,OAAAE,SAAA,CAAAxK,MAAA,WAAAkK,IAAA,CALF/G,OAAO,CAAAP,IAAA,CAAAsH,IAAA;cACjB9G,MAAM,EAAA+G,IAAA;cACN5G,GAAG,EAAA6G,IAAA;cACHvE,OAAO,EAAA0E;YAAA,GAIN9G,KAAK,CAAC,UAACC,KAAK,EAAK;cAClB1G,oBAAW,CAACC,MAAM,CAACyG,KAAK,CAAC,6CAA6C,EAAEA,KAAK,CAAC;cAC9E,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAA8G,SAAA,CAAAtL,IAAA;QAAA;MAAA,GAAA+K,QAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACQS,gCAAgC,WAAhCA,gCAAgCA,CAAC/O,OAAO,EAAE;IAAA,IAAAgP,MAAA;IAAA,WAAA3M,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAyM,SAAA;MAAA,IAAAC,cAAA,EAAAC,mBAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;MAAA,IAAAvO,OAAA,EAAAwO,SAAA,EAAAC,iBAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;MAAA,OAAAvN,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAqN,SAAA;QAAA,kBAAAA,SAAA,CAAAnN,IAAA,GAAAmN,SAAA,CAAAlN,IAAA;UAAA;YACxC9B,OAAO,GAAGiO,MAAI,CAAClO,0BAA0B,CAAC,CAAC;YAAA,IAC5CC,OAAO;cAAAgP,SAAA,CAAAlN,IAAA;cAAA;YAAA;YACVxB,oBAAW,CAACC,MAAM,CAACyG,KAAK,CACtB,sGACF,CAAC;YAAC,MACI,IAAIe,KAAK,CAAC,2EAA2E,CAAC;UAAA;YAGxFyG,SAAS,GAAG;cAChBS,WAAW,EAAEhQ,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEyN,WAAW;cACjCwC,KAAK,GAAAf,cAAA,GAAElP,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEiQ,KAAK,cAAAf,cAAA,cAAAA,cAAA,GAAIgB,4DAAiD;cAC1ErN,IAAI,EAAE7C,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAE6C;YACjB,CAAC;YACK2M,iBAAiB,GAAGzO,OAAO,aAAPA,OAAO,wBAAAoO,mBAAA,GAAPpO,OAAO,CAAEgB,SAAS,cAAAoN,mBAAA,wBAAAC,qBAAA,GAAlBD,mBAAA,CAAoBgB,KAAK,cAAAf,qBAAA,wBAAAC,sBAAA,GAAzBD,qBAAA,CAA2BgB,SAAS,cAAAf,sBAAA,wBAAAC,sBAAA,GAApCD,sBAAA,CAAsCgB,cAAc,cAAAf,sBAAA,uBAApDA,sBAAA,CAAsDlK,GAAG;YAAA,IAC9EoK,iBAAiB;cAAAO,SAAA,CAAAlN,IAAA;cAAA;YAAA;YACpBxB,oBAAW,CAACC,MAAM,CAACyG,KAAK,CACtB,+FACF,CAAC;YAAC,MACI,IAAIe,KAAK,CAAC,wDAAwD,CAAC;UAAA;YAAA2G,IAAA,GAGpET,MAAI;YAAAU,IAAA,GACDhI,qBAAU,CAAC+D,GAAG;YAAAkE,IAAA,MAAAnO,MAAA,CACdgO,iBAAiB,OAAAhO,MAAA,CAAI,IAAI8O,eAAe,CAAC,IAAAC,qBAAc,EAAChB,SAAS,CAAC,CAAC,CAAChG,QAAQ,CAAC,CAAC;YAAAwG,SAAA,CAAAlN,IAAA;YAAA,OAE/DmM,MAAI,CAAChO,KAAK,CAACiI,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAA0G,IAAA,GAAAG,SAAA,CAAA3L,IAAA;YAAAyL,IAAA,MAAArO,MAAA,CAC3C2H,iBAAM,CAACC,gBAAgB,OAAA5H,MAAA,CAAI6H,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAAAuG,IAAA;cAD9DtG,aAAa,EAAAoG,IAAA;cACbnG,UAAU,EAAAoG;YAAA;YAAA,OAAAE,SAAA,CAAA1L,MAAA,WAAAoL,IAAA,CALFjI,OAAO,CAAAP,IAAA,CAAAwI,IAAA;cACjBhI,MAAM,EAAAiI,IAAA;cACN9H,GAAG,EAAA+H,IAAA;cACHzF,OAAO,EAAA4F;YAAA,GAINhI,KAAK,CAAC,UAACC,KAAK,EAAK;cAClB1G,oBAAW,CAACC,MAAM,CAACyG,KAAK,CAAC,2DAA2D,EAAEA,KAAK,CAAC;cAC5F,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAAgI,SAAA,CAAAxM,IAAA;QAAA;MAAA,GAAA0L,QAAA;IAAA;EACH,CAAC;EAAAuB,OAAA;AACH,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAApO,OAAA,GAEY3D,OAAO","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_uuid","_interopRequireDefault","_lodash","_internalPluginLlm","_constants","_collection","_loggerProxy","_util","_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","getValidatedWebinarMeeting","meeting","webex","meetings","getMeetingByType","_ID_","undefined","LoggerProxy","logger","warn","concat","_ref","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","_practiceSessionRelayListener","stop","ensurePracticeSessionDatachannelToken","_this2","_callee2","isDataChannelTokenEnabled","cachedToken","_refreshResponse$body","refreshResponse","_ref2","datachannelToken","dataChannelTokenType","_t","_context2","sent","abrupt","getDatachannelToken","DataChannelTokenType","PracticeSession","refreshDataChannelToken","body","setDatachannelToken","message","String","_this3","_callee3","invocationSequence","isPracticeSession","_ref3","_ref3$url","url","_ref3$info","_ref3$info2","_ref3$info2$practiceS","practiceSessionDatachannelUrl","practiceSessionDatachannelToken","isCaptionBoxOn","_onDefaultSessionConnected","refreshedPracticeSessionToken","latestPracticeSessionDatachannelUrl","isStillPracticeSession","_context3","_updatePSDataChannelSequence","isJoined","info","voicea","getIsCaptionBoxOn","isConnected","getLocusUrl","getDatachannelUrl","onDefaultSessionConnected","on","registerAndConnect","then","registerAndConnectResult","_this3$webex$internal","_this3$webex$internal2","processRelayEvent","announce","call","updateSubchannelSubscriptions","subscribe","_promise","resolve","setPracticeSessionState","enabled","request","method","HTTP_VERBS","PATCH","uri","practiceSession","response","MeetingUtil","updateLocusFromApiResponse","catch","error","updatePracticeSessionStatus","startWebcast","layout","_this4","_callee4","_t2","_t3","_t4","_t5","_t6","_t7","_t8","_t9","_context4","Error","PUT","_defineProperty2","credentials","getUserToken","config","trackingIdPrefix","uuid","v4","toString","authorization","trackingId","HEADERS","CONTENT_TYPE","CONTENT_TYPE_VALUE","APPLICATION_JSON","action","meetingInfo","locusId","correlationId","headers","stopWebcast","_this5","_callee5","_t0","_t1","_t10","_t11","_t12","_t13","_t14","_t15","_context5","queryWebcastLayout","_this6","_callee6","_t16","_t17","_t18","_t19","_t20","_t21","_context6","GET","updateWebcastLayout","_this7","_callee7","_t22","_t23","_t24","_t25","_t26","_t27","_t28","_t29","_context7","videoLayout","contentLayout","syncStageLayout","syncStageInMeeting","viewAllWebcastAttendees","_this8","_callee8","_t30","_t31","_t32","_t33","_t34","_t35","_context8","searchWebcastAttendees","_arguments","arguments","_this9","_callee9","queryString","_t36","_t37","_t38","_t39","_t40","_t41","_context9","length","encodeURIComponent","expelWebcastAttendee","participantId","_this0","_callee0","_t42","_t43","_t44","_t45","_t46","_t47","_context0","DELETE","searchLargeScaleWebinarAttendees","_this1","_callee1","_payload$limit","_meeting$locusInfo3","_meeting$locusInfo3$l","_meeting$locusInfo3$l2","_meeting$locusInfo3$l3","rawParams","attendeeSearchUrl","_t48","_t49","_t50","_t51","_t52","_t53","_context1","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 MeetingUtil from '../meeting/util';\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 * Resolves the meeting associated with this webinar instance, guarded against the\n * meetingId pointer drifting onto an unrelated transient meeting (e.g. an inbound\n * 1:1 call) that may exist in the meeting collection. Returns the meeting only when\n * its locusUrl matches this webinar's tracked locusUrl. Returns undefined (with a\n * warning) when the meeting cannot be resolved or when the webinar's locusUrl has\n * not been initialized yet — callers must treat this as \"no owned meeting\" rather\n * than fall through to an unvalidated lookup.\n * @returns {object|undefined}\n */\n getValidatedWebinarMeeting() {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n\n if (!meeting) {\n return undefined;\n }\n\n if (!this.locusUrl) {\n LoggerProxy.logger.warn(\n `Webinar:index#getValidatedWebinarMeeting --> skipping; webinar locusUrl is not yet initialized for meetingId ${this.meetingId}`\n );\n\n return undefined;\n }\n\n if (meeting.locusUrl !== this.locusUrl) {\n LoggerProxy.logger.warn(\n `Webinar:index#getValidatedWebinarMeeting --> skipping; meeting ${this.meetingId} locusUrl ${meeting.locusUrl} does not match webinar locusUrl ${this.locusUrl}`\n );\n\n return undefined;\n }\n\n return meeting;\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.getValidatedWebinarMeeting();\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 * The listener reference removed here is the exact callback captured at subscribe\n * time (see updatePSDataChannel) so that cleanup is correct even if the underlying\n * meeting can no longer be resolved (e.g. locusUrl mismatch).\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 // @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\n if (this._practiceSessionRelayListener) {\n // @ts-ignore - Fix type\n this.webex.internal.llm.off(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n this._practiceSessionRelayListener\n );\n this._practiceSessionRelayListener = null;\n }\n },\n\n /**\n * Ensures practice-session token exists before registering the practice LLM channel.\n * Caller is responsible for passing a meeting that has already been resolved via\n * getValidatedWebinarMeeting() — this method does not re-validate ownership.\n * @param {object} meeting\n * @returns {Promise<string|undefined>}\n */\n async ensurePracticeSessionDatachannelToken(meeting) {\n // @ts-ignore\n const isDataChannelTokenEnabled = await this.webex.internal.llm.isDataChannelTokenEnabled();\n\n if (!isDataChannelTokenEnabled) {\n return undefined;\n }\n\n // @ts-ignore\n const cachedToken = this.webex.internal.llm.getDatachannelToken(\n DataChannelTokenType.PracticeSession\n );\n\n if (cachedToken) {\n return cachedToken;\n }\n\n try {\n const refreshResponse = await meeting.refreshDataChannelToken();\n const {datachannelToken, dataChannelTokenType} = refreshResponse?.body ?? {};\n\n if (!datachannelToken) {\n return undefined;\n }\n\n // @ts-ignore\n this.webex.internal.llm.setDatachannelToken(\n datachannelToken,\n dataChannelTokenType || DataChannelTokenType.PracticeSession\n );\n\n return datachannelToken;\n } catch (error) {\n LoggerProxy.logger.warn(\n `Webinar:index#ensurePracticeSessionDatachannelToken --> failed to proactively refresh practice-session token: ${\n error?.message || String(error)\n }`\n );\n\n return undefined;\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 this._updatePSDataChannelSequence = (this._updatePSDataChannelSequence || 0) + 1;\n const invocationSequence = this._updatePSDataChannelSequence;\n\n const meeting = this.getValidatedWebinarMeeting();\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 let 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 const refreshedPracticeSessionToken = await this.ensurePracticeSessionDatachannelToken(meeting);\n\n const latestPracticeSessionDatachannelUrl = get(\n meeting,\n 'locusInfo.info.practiceSessionDatachannelUrl'\n );\n const isStillPracticeSession = meeting?.isJoined() && this.isJoinPracticeSessionDataChannel();\n\n // Skip stale invocations after async refresh to avoid reconnecting a session\n // that was already updated/cleaned by a newer state transition.\n if (\n invocationSequence !== this._updatePSDataChannelSequence ||\n !isStillPracticeSession ||\n !latestPracticeSessionDatachannelUrl ||\n latestPracticeSessionDatachannelUrl !== practiceSessionDatachannelUrl\n ) {\n return undefined;\n }\n\n if (refreshedPracticeSessionToken) {\n practiceSessionDatachannelToken = refreshedPracticeSessionToken;\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 // Track the exact listener reference so cleanupPSDataChannel can\n // unsubscribe deterministically, even if the meeting can no longer\n // be resolved at cleanup time.\n if (this._practiceSessionRelayListener) {\n // @ts-ignore - Fix type\n this.webex.internal.llm.off(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n this._practiceSessionRelayListener\n );\n }\n this._practiceSessionRelayListener = meeting?.processRelayEvent;\n // @ts-ignore - Fix type\n this.webex.internal.llm.on(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n this._practiceSessionRelayListener\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 const meeting = this.getValidatedWebinarMeeting();\n\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/controls`,\n body: {\n practiceSession: {\n enabled,\n },\n },\n })\n .then((response) => {\n MeetingUtil.updateLocusFromApiResponse(meeting, response);\n\n return response;\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.getValidatedWebinarMeeting();\n if (!meeting) {\n LoggerProxy.logger.error(\n 'Meeting:webinar5k#searchLargeScaleWebinarAttendees failed --> webinar meeting could not be validated'\n );\n throw new Error('Meeting:webinar5k#Webinar meeting is not resolvable for the current locus');\n }\n\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(\n 'Meeting:webinar5k#searchLargeScaleWebinarAttendees failed --> attendee search url unavailable'\n );\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
|
@@ -184,10 +184,7 @@ export default class ControlsOptionsManager {
|
|
|
184
184
|
mainLocusUrl: this.mainLocusUrl,
|
|
185
185
|
});
|
|
186
186
|
|
|
187
|
-
return previous.then(() =>
|
|
188
|
-
// @ts-ignore
|
|
189
|
-
this.request.request(requestParams)
|
|
190
|
-
);
|
|
187
|
+
return previous.then(() => this.sendControlsRequest(requestParams));
|
|
191
188
|
}, Promise.resolve());
|
|
192
189
|
}
|
|
193
190
|
|
|
@@ -274,8 +271,27 @@ export default class ControlsOptionsManager {
|
|
|
274
271
|
mainLocusUrl: this.mainLocusUrl,
|
|
275
272
|
});
|
|
276
273
|
|
|
277
|
-
|
|
278
|
-
|
|
274
|
+
return this.sendControlsRequest(requestParams);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Sends a controls request to Locus. When authorizingLocusUrl is present in the body,
|
|
279
|
+
* we use a plain request() because the response contains the main session Locus DTO
|
|
280
|
+
* instead of the breakout we're in, so we don't want to parse it as a delta.
|
|
281
|
+
* Otherwise we use locusDeltaRequest() for normal delta processing.
|
|
282
|
+
*
|
|
283
|
+
* @param {Object} requestParams - The request parameters from getControlsRequestParams.
|
|
284
|
+
* @returns {Promise<any>}
|
|
285
|
+
*/
|
|
286
|
+
private sendControlsRequest(requestParams: {
|
|
287
|
+
uri: string;
|
|
288
|
+
body: Record<string, any>;
|
|
289
|
+
method: string;
|
|
290
|
+
}): Promise<any> {
|
|
291
|
+
return requestParams.body.authorizingLocusUrl
|
|
292
|
+
? // @ts-ignore
|
|
293
|
+
this.request.request(requestParams)
|
|
294
|
+
: this.request.locusDeltaRequest(requestParams);
|
|
279
295
|
}
|
|
280
296
|
|
|
281
297
|
/**
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import {cloneDeep, isEmpty, zip} from 'lodash';
|
|
2
2
|
import HashTree, {LeafDataItem} from './hashTree';
|
|
3
3
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
4
|
+
import Metrics from '../metrics';
|
|
5
|
+
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
4
6
|
import {Enum, HTTP_VERBS} from '../constants';
|
|
5
7
|
import {DataSetNames, DATA_SET_INIT_PRIORITY, EMPTY_HASH} from './constants';
|
|
6
8
|
import {ObjectType, HtMeta, HashTreeObject} from './types';
|
|
@@ -753,6 +755,18 @@ class HashTreeParser {
|
|
|
753
755
|
}
|
|
754
756
|
}
|
|
755
757
|
|
|
758
|
+
/**
|
|
759
|
+
* Updates the leaf count for a data set, resizing its hash tree accordingly.
|
|
760
|
+
*
|
|
761
|
+
* @param {InternalDataSet} dataSet - The data set to update
|
|
762
|
+
* @param {number} newLeafCount - The new leaf count
|
|
763
|
+
* @returns {void}
|
|
764
|
+
*/
|
|
765
|
+
private updateDataSetLeafCount(dataSet: InternalDataSet, newLeafCount: number): void {
|
|
766
|
+
dataSet.hashTree?.resize(newLeafCount);
|
|
767
|
+
dataSet.leafCount = newLeafCount;
|
|
768
|
+
}
|
|
769
|
+
|
|
756
770
|
/**
|
|
757
771
|
* Checks for changes in the visible data sets based on the updated objects.
|
|
758
772
|
* @param {HashTreeObject[]} updatedObjects - The list of updated hash tree objects.
|
|
@@ -1213,7 +1227,7 @@ class HashTreeParser {
|
|
|
1213
1227
|
|
|
1214
1228
|
receivedHashes = hashesResult.hashes;
|
|
1215
1229
|
|
|
1216
|
-
|
|
1230
|
+
this.updateDataSetLeafCount(dataSet, hashesResult.dataSet.leafCount);
|
|
1217
1231
|
} catch (error: any) {
|
|
1218
1232
|
if (error?.statusCode === 409) {
|
|
1219
1233
|
// this is a leaf count mismatch, we should do nothing, just wait for another heartbeat message from Locus
|
|
@@ -1667,6 +1681,13 @@ class HashTreeParser {
|
|
|
1667
1681
|
error
|
|
1668
1682
|
);
|
|
1669
1683
|
this.checkForSentinelHttpResponse(error, dataSet.name);
|
|
1684
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.HASH_TREE_SYNC_FAILURE, {
|
|
1685
|
+
debugId: this.debugId,
|
|
1686
|
+
dataSetName,
|
|
1687
|
+
request: 'GET /hashtree',
|
|
1688
|
+
statusCode: error.statusCode,
|
|
1689
|
+
reason: error.message,
|
|
1690
|
+
});
|
|
1670
1691
|
|
|
1671
1692
|
throw error;
|
|
1672
1693
|
});
|
|
@@ -1745,6 +1766,13 @@ class HashTreeParser {
|
|
|
1745
1766
|
error
|
|
1746
1767
|
);
|
|
1747
1768
|
this.checkForSentinelHttpResponse(error, dataSet.name);
|
|
1769
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.HASH_TREE_SYNC_FAILURE, {
|
|
1770
|
+
debugId: this.debugId,
|
|
1771
|
+
dataSetName: dataSet.name,
|
|
1772
|
+
request: 'POST /sync',
|
|
1773
|
+
statusCode: error.statusCode,
|
|
1774
|
+
reason: error.message,
|
|
1775
|
+
});
|
|
1748
1776
|
|
|
1749
1777
|
throw error;
|
|
1750
1778
|
});
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import {WebexPlugin} from '@webex/webex-core';
|
|
5
5
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
6
6
|
import {HTTP_VERBS, INTERPRETATION, LOCUSEVENT, MEETINGS} from '../constants';
|
|
7
|
+
import MeetingUtil from '../meeting/util';
|
|
7
8
|
|
|
8
9
|
import SILanguageCollection from './collection';
|
|
9
10
|
|
|
@@ -183,6 +184,8 @@ const SimultaneousInterpretation = WebexPlugin.extend({
|
|
|
183
184
|
* @returns {Promise}
|
|
184
185
|
*/
|
|
185
186
|
updateInterpreters(interpreters) {
|
|
187
|
+
const meeting = this.webex.meetings.meetingCollection.getByKey('locusUrl', this.locusUrl);
|
|
188
|
+
|
|
186
189
|
return this.request({
|
|
187
190
|
method: HTTP_VERBS.PATCH,
|
|
188
191
|
uri: `${this.locusUrl}/controls`,
|
|
@@ -191,10 +194,16 @@ const SimultaneousInterpretation = WebexPlugin.extend({
|
|
|
191
194
|
interpreters,
|
|
192
195
|
},
|
|
193
196
|
},
|
|
194
|
-
})
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
197
|
+
})
|
|
198
|
+
.then((response) => {
|
|
199
|
+
MeetingUtil.updateLocusFromApiResponse(meeting, response);
|
|
200
|
+
|
|
201
|
+
return response;
|
|
202
|
+
})
|
|
203
|
+
.catch((error) => {
|
|
204
|
+
LoggerProxy.logger.error('Meeting:interpretation#updateInterpreters failed', error);
|
|
205
|
+
throw error;
|
|
206
|
+
});
|
|
198
207
|
},
|
|
199
208
|
/**
|
|
200
209
|
* Change direction of interpretation for an interpreter participant
|
|
@@ -209,6 +218,8 @@ const SimultaneousInterpretation = WebexPlugin.extend({
|
|
|
209
218
|
return Promise.reject(new Error('Missing self participant id'));
|
|
210
219
|
}
|
|
211
220
|
|
|
221
|
+
const meeting = this.webex.meetings.meetingCollection.getByKey('locusUrl', this.locusUrl);
|
|
222
|
+
|
|
212
223
|
return this.request({
|
|
213
224
|
method: HTTP_VERBS.PATCH,
|
|
214
225
|
uri: `${this.locusUrl}/participant/${this.selfParticipantId}/controls`,
|
|
@@ -220,10 +231,16 @@ const SimultaneousInterpretation = WebexPlugin.extend({
|
|
|
220
231
|
order: this.order,
|
|
221
232
|
},
|
|
222
233
|
},
|
|
223
|
-
})
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
234
|
+
})
|
|
235
|
+
.then((response) => {
|
|
236
|
+
MeetingUtil.updateLocusFromApiResponse(meeting, response);
|
|
237
|
+
|
|
238
|
+
return response;
|
|
239
|
+
})
|
|
240
|
+
.catch((error) => {
|
|
241
|
+
LoggerProxy.logger.error('Meeting:interpretation#changeDirection failed', error);
|
|
242
|
+
throw error;
|
|
243
|
+
});
|
|
227
244
|
},
|
|
228
245
|
/**
|
|
229
246
|
* Sets up a listener for handoff requests from mercury
|
package/src/meeting/util.ts
CHANGED
|
@@ -846,6 +846,19 @@ const MeetingUtil = {
|
|
|
846
846
|
requestBody.sequence = sequence;
|
|
847
847
|
},
|
|
848
848
|
|
|
849
|
+
/**
|
|
850
|
+
* Checks if Locus API response contains a Locus DTO
|
|
851
|
+
*
|
|
852
|
+
* @param {any} response http response from Locus API call
|
|
853
|
+
* @returns {boolean} true if response contains a Locus DTO
|
|
854
|
+
*/
|
|
855
|
+
isLocusDtoInAPIResponse(response: any) {
|
|
856
|
+
return (
|
|
857
|
+
response?.body?.locus || // for APIs called on our participant - locus is one of props in the response body
|
|
858
|
+
response?.body?.url // for APIs that act on locus itself (like mute all), the body is the locus
|
|
859
|
+
);
|
|
860
|
+
},
|
|
861
|
+
|
|
849
862
|
/**
|
|
850
863
|
* Updates the locus info for the meeting with the locus
|
|
851
864
|
* information returned from API requests made to Locus
|
|
@@ -854,12 +867,13 @@ const MeetingUtil = {
|
|
|
854
867
|
* @param {Object} response The response of the http request
|
|
855
868
|
* @returns {Object}
|
|
856
869
|
*/
|
|
857
|
-
updateLocusFromApiResponse: (meeting, response) => {
|
|
870
|
+
updateLocusFromApiResponse: (meeting: any, response: any) => {
|
|
858
871
|
if (!meeting) {
|
|
859
872
|
return response;
|
|
860
873
|
}
|
|
861
874
|
|
|
862
|
-
|
|
875
|
+
// locus API responses can come in different shapes:
|
|
876
|
+
if (MeetingUtil.isLocusDtoInAPIResponse(response)) {
|
|
863
877
|
meeting.locusInfo.handleLocusAPIResponse(meeting, response.body);
|
|
864
878
|
}
|
|
865
879
|
|
package/src/metrics/constants.ts
CHANGED
|
@@ -96,6 +96,7 @@ const BEHAVIORAL_METRICS = {
|
|
|
96
96
|
SET_CUSTOM_CODEC_PARAMETERS_USED: 'js_sdk_set_custom_codec_parameters_used',
|
|
97
97
|
MARK_CUSTOM_CODEC_PARAMETERS_FOR_DELETION_USED:
|
|
98
98
|
'js_sdk_mark_custom_codec_parameters_for_deletion_used',
|
|
99
|
+
HASH_TREE_SYNC_FAILURE: 'js_sdk_hash_tree_sync_failure',
|
|
99
100
|
};
|
|
100
101
|
|
|
101
102
|
export {BEHAVIORAL_METRICS as default};
|
|
@@ -261,8 +261,7 @@ export default class RecordingController {
|
|
|
261
261
|
|
|
262
262
|
LoggerProxy.logger.log(`RecordingController:index#recordingControls --> ${record}`);
|
|
263
263
|
|
|
264
|
-
|
|
265
|
-
return this.request.request({
|
|
264
|
+
return this.request.locusDeltaRequest({
|
|
266
265
|
uri: `${this.locusUrl}/${CONTROLS}`,
|
|
267
266
|
body: {
|
|
268
267
|
record,
|
package/src/webinar/index.ts
CHANGED
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
|
|
19
19
|
import WebinarCollection from './collection';
|
|
20
20
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
21
|
+
import MeetingUtil from '../meeting/util';
|
|
21
22
|
import {sanitizeParams} from './utils';
|
|
22
23
|
|
|
23
24
|
/**
|
|
@@ -390,6 +391,8 @@ const Webinar = WebexPlugin.extend({
|
|
|
390
391
|
* @returns {Promise}
|
|
391
392
|
*/
|
|
392
393
|
setPracticeSessionState(enabled) {
|
|
394
|
+
const meeting = this.getValidatedWebinarMeeting();
|
|
395
|
+
|
|
393
396
|
return this.request({
|
|
394
397
|
method: HTTP_VERBS.PATCH,
|
|
395
398
|
uri: `${this.locusUrl}/controls`,
|
|
@@ -398,10 +401,16 @@ const Webinar = WebexPlugin.extend({
|
|
|
398
401
|
enabled,
|
|
399
402
|
},
|
|
400
403
|
},
|
|
401
|
-
})
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
404
|
+
})
|
|
405
|
+
.then((response) => {
|
|
406
|
+
MeetingUtil.updateLocusFromApiResponse(meeting, response);
|
|
407
|
+
|
|
408
|
+
return response;
|
|
409
|
+
})
|
|
410
|
+
.catch((error) => {
|
|
411
|
+
LoggerProxy.logger.error('Meeting:webinar#setPracticeSessionState failed', error);
|
|
412
|
+
throw error;
|
|
413
|
+
});
|
|
405
414
|
},
|
|
406
415
|
|
|
407
416
|
/**
|