@webex/plugin-meetings 3.12.0-next.1 → 3.12.0-next.10

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.
Files changed (38) hide show
  1. package/dist/aiEnableRequest/index.js +1 -1
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/hashTree/constants.js +10 -1
  5. package/dist/hashTree/constants.js.map +1 -1
  6. package/dist/hashTree/hashTreeParser.js +20 -11
  7. package/dist/hashTree/hashTreeParser.js.map +1 -1
  8. package/dist/hashTree/utils.js +22 -0
  9. package/dist/hashTree/utils.js.map +1 -1
  10. package/dist/interpretation/index.js +1 -1
  11. package/dist/interpretation/siLanguage.js +1 -1
  12. package/dist/meeting/index.js +427 -323
  13. package/dist/meeting/index.js.map +1 -1
  14. package/dist/metrics/constants.js +5 -1
  15. package/dist/metrics/constants.js.map +1 -1
  16. package/dist/multistream/sendSlotManager.js +116 -2
  17. package/dist/multistream/sendSlotManager.js.map +1 -1
  18. package/dist/types/hashTree/constants.d.ts +1 -0
  19. package/dist/types/hashTree/utils.d.ts +11 -0
  20. package/dist/types/meeting/index.d.ts +24 -1
  21. package/dist/types/metrics/constants.d.ts +4 -0
  22. package/dist/types/multistream/sendSlotManager.d.ts +23 -1
  23. package/dist/webinar/index.js +325 -220
  24. package/dist/webinar/index.js.map +1 -1
  25. package/package.json +15 -15
  26. package/src/hashTree/constants.ts +9 -0
  27. package/src/hashTree/hashTreeParser.ts +21 -14
  28. package/src/hashTree/utils.ts +17 -0
  29. package/src/meeting/index.ts +165 -57
  30. package/src/metrics/constants.ts +5 -0
  31. package/src/multistream/sendSlotManager.ts +97 -3
  32. package/src/webinar/index.ts +120 -18
  33. package/test/unit/spec/hashTree/hashTreeParser.ts +238 -0
  34. package/test/unit/spec/hashTree/utils.ts +88 -1
  35. package/test/unit/spec/meeting/index.js +179 -48
  36. package/test/unit/spec/meetings/index.js +3 -3
  37. package/test/unit/spec/multistream/sendSlotManager.ts +135 -36
  38. package/test/unit/spec/webinar/index.ts +193 -8
@@ -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":";;;;;;;;;;;;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;EACEE,kBAAkB,WAAlBA,kBAAkBA,CAAAC,IAAA,EAA0B;IAAA,IAAxBR,UAAU,GAAAQ,IAAA,CAAVR,UAAU;MAAEK,SAAS,GAAAG,IAAA,CAATH,SAAS;IACvC,IAAMI,OAAO,GAAG,IAAI,CAACC,KAAK,CAACC,QAAQ,CAACC,gBAAgB,CAACC,eAAI,EAAE,IAAI,CAACzB,SAAS,CAAC;IAE1E,IACGiB,SAAS,IAAI,CAAAI,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK,WAAW,MAAKC,uBAAY,CAACC,uBAAuB,IAC3EhB,UAAU,EACV;MAAA,IAAAiB,kBAAA,EAAAC,mBAAA;MACA;MACA;MACAT,OAAO,aAAPA,OAAO,wBAAAQ,kBAAA,GAAPR,OAAO,CAAEU,SAAS,cAAAF,kBAAA,uBAAlBA,kBAAA,CAAoBG,iBAAiB,CAACX,OAAO,aAAPA,OAAO,wBAAAS,mBAAA,GAAPT,OAAO,CAAEU,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,CAACtC,cAAc,IAAI,IAAI,CAACE,sBAAsB;EAC3D,CAAC;EAED;AACF;AACA;AACA;EACQG,oBAAoB,WAApBA,oBAAoBA,CAAA,EAAG;IAAA,IAAAkC,KAAA;IAAA,WAAAC,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAC,QAAA;MAAA,IAAApB,OAAA;MAAA,OAAAkB,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YACrBxB,OAAO,GAAGe,KAAI,CAACd,KAAK,CAACC,QAAQ,CAACC,gBAAgB,CAACC,eAAI,EAAEW,KAAI,CAACpC,SAAS,CAAC,EAE1E;YAAA2C,QAAA,CAAAE,IAAA;YAAA,OACMT,KAAI,CAACd,KAAK,CAACwB,QAAQ,CAACC,GAAG,CAACC,aAAa,CACzC;cACEC,IAAI,EAAE,IAAI;cACVC,MAAM,EAAE;YACV,CAAC,EACDC,+BACF,CAAC;UAAA;YACD;YACAf,KAAI,CAACd,KAAK,CAACwB,QAAQ,CAACC,GAAG,CAACK,GAAG,sBAAAC,MAAA,CACJF,+BAAoB,GACzC9B,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEiC,iBACX,CAAC;UAAC;UAAA;YAAA,OAAAX,QAAA,CAAAY,IAAA;QAAA;MAAA,GAAAd,OAAA;IAAA;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACQP,mBAAmB,WAAnBA,mBAAmBA,CAAA,EAAG;IAAA,IAAAsB,MAAA;IAAA,WAAAnB,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAiB,SAAA;MAAA,IAAApC,OAAA,EAAAqC,iBAAA,EAAAC,KAAA,EAAAC,SAAA,EAAAC,GAAA,EAAAC,UAAA,EAAAC,WAAA,EAAAC,qBAAA,EAAAC,6BAAA,EAAAC,UAAA,EAAAC,WAAA,EAAAC,qBAAA,EAAAC,+BAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,cAAA;MAAA,OAAAjC,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAA+B,SAAA;QAAA,kBAAAA,SAAA,CAAA7B,IAAA,GAAA6B,SAAA,CAAA5B,IAAA;UAAA;YACpBxB,OAAO,GAAGmC,MAAI,CAAClC,KAAK,CAACC,QAAQ,CAACC,gBAAgB,CAACC,eAAI,EAAE+B,MAAI,CAACxD,SAAS,CAAC;YACpE0D,iBAAiB,GAAG,CAAArC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEqD,QAAQ,CAAC,CAAC,KAAIlB,MAAI,CAACrB,gCAAgC,CAAC,CAAC;YAAA,IAEnFuB,iBAAiB;cAAAe,SAAA,CAAA5B,IAAA;cAAA;YAAA;YAAA4B,SAAA,CAAA5B,IAAA;YAAA,OACdW,MAAI,CAACtD,oBAAoB,CAAC,CAAC;UAAA;YAAA,OAAAuE,SAAA,CAAAE,MAAA,WAE1BC,SAAS;UAAA;YAGlB;YAAAjB,KAAA,GAKI,CAAAtC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEU,SAAS,KAAI,CAAC,CAAC,EAAA6B,SAAA,GAAAD,KAAA,CAH1BE,GAAG,EAAHA,GAAG,GAAAD,SAAA,cAAGgB,SAAS,GAAAhB,SAAA,EAAAE,UAAA,GAAAH,KAAA,CACfkB,IAAI,EAAAd,WAAA,GAAAD,UAAA,cAAgD,CAAC,CAAC,GAAAA,UAAA,EAAAE,qBAAA,GAAAD,WAAA,CAA/CE,6BAA6B,EAA7BA,6BAA6B,GAAAD,qBAAA,cAAGY,SAAS,GAAAZ,qBAAA,EAAAE,UAAA,GAAAP,KAAA,CAChDmB,IAAI,EAAAX,WAAA,GAAAD,UAAA,cAAkD,CAAC,CAAC,GAAAA,UAAA,EAAAE,qBAAA,GAAAD,WAAA,CAAjDE,+BAA+B,EAA/BA,+BAA+B,GAAAD,qBAAA,cAAGQ,SAAS,GAAAR,qBAAA,EAGpD;YACME,YAAY,GAAGd,MAAI,CAAClC,KAAK,CAACwB,QAAQ,CAACC,GAAG,CAACgC,mBAAmB,CAC9DC,uCAAoB,CAACC,eACvB,CAAC;YAEKV,UAAU,GAAGD,YAAY,aAAZA,YAAY,cAAZA,YAAY,GAAID,+BAA+B;YAE5DG,cAAc,GAAGhB,MAAI,CAAClC,KAAK,CAACwB,QAAQ,CAACoC,MAAM,CAACC,iBAAiB,CAAC,CAAC;YAErE,IAAI,CAACb,YAAY,IAAID,+BAA+B,EAAE;cACpD;cACAb,MAAI,CAAClC,KAAK,CAACwB,QAAQ,CAACC,GAAG,CAACqC,mBAAmB,CACzCf,+BAA+B,EAC/BW,uCAAoB,CAACC,eACvB,CAAC;YACH;YAAC,IAEIhB,6BAA6B;cAAAQ,SAAA,CAAA5B,IAAA;cAAA;YAAA;YAAA,OAAA4B,SAAA,CAAAE,MAAA,WACzBC,SAAS;UAAA;YAAA,KAGdpB,MAAI,CAAClC,KAAK,CAACwB,QAAQ,CAACC,GAAG,CAACsC,WAAW,CAAClC,+BAAoB,CAAC;cAAAsB,SAAA,CAAA5B,IAAA;cAAA;YAAA;YAAA;YAEzD;YACAgB,GAAG,KAAKL,MAAI,CAAClC,KAAK,CAACwB,QAAQ,CAACC,GAAG,CAACuC,WAAW,CAACnC,+BAAoB,CAAC;YACjE;YACAc,6BAA6B,KAC3BT,MAAI,CAAClC,KAAK,CAACwB,QAAQ,CAACC,GAAG,CAACwC,iBAAiB,CAACpC,+BAAoB,CAAC;cAAAsB,SAAA,CAAA5B,IAAA;cAAA;YAAA;YAAA,OAAA4B,SAAA,CAAAE,MAAA,WAE1DC,SAAS;UAAA;YAAAH,SAAA,CAAA5B,IAAA;YAAA,OAGZW,MAAI,CAACtD,oBAAoB,CAAC,CAAC;UAAA;YAAA,OAAAuE,SAAA,CAAAE,MAAA,WAI5BnB,MAAI,CAAClC,KAAK,CAACwB,QAAQ,CAACC,GAAG,CAC3ByC,kBAAkB,CAAC3B,GAAG,EAAEI,6BAA6B,EAAEM,UAAU,EAAEpB,+BAAoB,CAAC,CACxFsC,IAAI,CAAC,UAACC,wBAAwB,EAAK;cAAA,IAAAC,qBAAA,EAAAC,sBAAA;cAClC;cACApC,MAAI,CAAClC,KAAK,CAACwB,QAAQ,CAACC,GAAG,CAACK,GAAG,sBAAAC,MAAA,CACJF,+BAAoB,GACzC9B,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEiC,iBACX,CAAC;cACD;cACAE,MAAI,CAAClC,KAAK,CAACwB,QAAQ,CAACC,GAAG,CAAC8C,EAAE,sBAAAxC,MAAA,CACHF,+BAAoB,GACzC9B,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEiC,iBACX,CAAC;cACD;cACA,CAAAqC,qBAAA,GAAAnC,MAAI,CAAClC,KAAK,CAACwB,QAAQ,CAACoC,MAAM,cAAAS,qBAAA,wBAAAC,sBAAA,GAA1BD,qBAAA,CAA4BG,QAAQ,cAAAF,sBAAA,uBAApCA,sBAAA,CAAAG,IAAA,CAAAJ,qBAAuC,CAAC;cACxC,IAAInB,cAAc,EAAE;gBAClBhB,MAAI,CAAClC,KAAK,CAACwB,QAAQ,CAACoC,MAAM,CAACc,6BAA6B,CAAC;kBAACC,SAAS,EAAE,CAAC,eAAe;gBAAC,CAAC,CAAC;cAC1F;cACAC,oBAAW,CAACC,MAAM,CAACtB,IAAI,kGAAAxB,MAAA,CAC4EF,+BAAoB,MACvH,CAAC;cAED,OAAOiD,QAAA,CAAA9D,OAAA,CAAQ+D,OAAO,CAACX,wBAAwB,CAAC;YAClD,CAAC,CAAC;UAAA;UAAA;YAAA,OAAAjB,SAAA,CAAAlB,IAAA;QAAA;MAAA,GAAAE,QAAA;IAAA;EACN,CAAC;EAED;AACF;AACA;AACA;AACA;EACE6C,uBAAuB,WAAvBA,uBAAuBA,CAACC,OAAO,EAAE;IAC/B,OAAO,IAAI,CAACC,OAAO,CAAC;MAClBC,MAAM,EAAEC,qBAAU,CAACC,KAAK;MACxBC,GAAG,KAAAvD,MAAA,CAAK,IAAI,CAAC3D,QAAQ,cAAW;MAChCmH,IAAI,EAAE;QACJC,eAAe,EAAE;UACfP,OAAO,EAAPA;QACF;MACF;IACF,CAAC,CAAC,CAACQ,KAAK,CAAC,UAACC,KAAK,EAAK;MAClBd,oBAAW,CAACC,MAAM,CAACa,KAAK,CAAC,gDAAgD,EAAEA,KAAK,CAAC;MACjF,MAAMA,KAAK;IACb,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,2BAA2B,WAA3BA,2BAA2BA,CAAC3G,OAAO,EAAE;IACnC,IAAI,CAACF,GAAG,CAAC,wBAAwB,EAAE,CAAC,EAACE,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEiG,OAAO,EAAC;IACtD,IAAI,CAACrE,mBAAmB,CAAC,CAAC,CAACuD,IAAI,CAAC,YAAM,CAAC,CAAC,CAAC;EAC3C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACQyB,YAAY,WAAZA,YAAYA,CAAC7F,OAAO,EAAE8F,MAAM,EAAE;IAAA,IAAAC,MAAA;IAAA,WAAA/E,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAA6E,SAAA;MAAA,IAAAC,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA;MAAA,OAAAtF,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAoF,SAAA;QAAA,kBAAAA,SAAA,CAAAlF,IAAA,GAAAkF,SAAA,CAAAjF,IAAA;UAAA;YAAA,IAC7BxB,OAAO;cAAAyG,SAAA,CAAAjF,IAAA;cAAA;YAAA;YACVqD,oBAAW,CAACC,MAAM,CAACa,KAAK,gEAAA3D,MAAA,CACyChC,OAAO,CACxE,CAAC;YAAC,MACI,IAAI0G,KAAK,CAAC,8CAA8C,CAAC;UAAA;YAAAT,EAAA,GAG1DF,MAAI;YAAAG,GAAA,GACDb,qBAAU,CAACsB,GAAG;YAAAR,GAAA,MAAAnE,MAAA,CACd+D,MAAI,CAACzH,kBAAkB;YAAA8H,GAAA,GAAAQ,gBAAA,CAAA3F,OAAA;YAAAwF,SAAA,CAAAjF,IAAA;YAAA,OAERuE,MAAI,CAAC9F,KAAK,CAAC4G,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAAT,GAAA,GAAAI,SAAA,CAAAM,IAAA;YAAAT,GAAA,MAAAtE,MAAA,CAC3CgF,iBAAM,CAACC,gBAAgB,OAAAjF,MAAA,CAAIkF,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAAAb,GAAA,GAAAH,GAAA;cAD9DiB,aAAa,EAAAhB,GAAA;cACbiB,UAAU,EAAAhB;YAAA,GACTiB,kBAAO,CAACC,YAAY,EAAGD,kBAAO,CAACE,kBAAkB,CAACC,gBAAgB;YAAAlB,GAAA,GAE/D;cACJmB,MAAM,EAAE,OAAO;cACfC,WAAW,EAAE;gBACXC,OAAO,EAAE7H,OAAO,CAAC6H,OAAO;gBACxBC,aAAa,EAAE9H,OAAO,CAAC8H;cACzB,CAAC;cACDhC,MAAM,EAANA;YACF,CAAC;YAAA,OAAAW,SAAA,CAAAnD,MAAA,WAAA2C,EAAA,CAfSd,OAAO,CAAAT,IAAA,CAAAuB,EAAA;cACjBb,MAAM,EAAAc,GAAA;cACNX,GAAG,EAAAY,GAAA;cACH4B,OAAO,EAAAxB,GAAA;cAKPf,IAAI,EAAAgB;YAAA,GAQHd,KAAK,CAAC,UAACC,KAAK,EAAK;cAClBd,oBAAW,CAACC,MAAM,CAACa,KAAK,CAAC,qCAAqC,EAAEA,KAAK,CAAC;cACtE,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAAc,SAAA,CAAAvE,IAAA;QAAA;MAAA,GAAA8D,QAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;EACQgC,WAAW,WAAXA,WAAWA,CAAA,EAAG;IAAA,IAAAC,MAAA;IAAA,WAAAjH,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAA+G,SAAA;MAAA,IAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;MAAA,OAAAxH,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAsH,SAAA;QAAA,kBAAAA,SAAA,CAAApH,IAAA,GAAAoH,SAAA,CAAAnH,IAAA;UAAA;YAAA2G,GAAA,GACXF,MAAI;YAAAG,GAAA,GACD/C,qBAAU,CAACsB,GAAG;YAAA0B,GAAA,MAAArG,MAAA,CACdiG,MAAI,CAAC3J,kBAAkB;YAAAgK,IAAA,GAAA1B,gBAAA,CAAA3F,OAAA;YAAA0H,SAAA,CAAAnH,IAAA;YAAA,OAERyG,MAAI,CAAChI,KAAK,CAAC4G,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAAyB,IAAA,GAAAI,SAAA,CAAA5B,IAAA;YAAAyB,IAAA,MAAAxG,MAAA,CAC3CgF,iBAAM,CAACC,gBAAgB,OAAAjF,MAAA,CAAIkF,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,CAAArF,MAAA,WAAA6E,GAAA,CAVShD,OAAO,CAAAT,IAAA,CAAAyD,GAAA;cACjB/C,MAAM,EAAAgD,GAAA;cACN7C,GAAG,EAAA8C,GAAA;cACHN,OAAO,EAAAU,IAAA;cAKPjD,IAAI,EAAAkD;YAAA,GAGHhD,KAAK,CAAC,UAACC,KAAK,EAAK;cAClBd,oBAAW,CAACC,MAAM,CAACa,KAAK,CAAC,oCAAoC,EAAEA,KAAK,CAAC;cACrE,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAAgD,SAAA,CAAAzG,IAAA;QAAA;MAAA,GAAAgG,QAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;EACQU,kBAAkB,WAAlBA,kBAAkBA,CAAA,EAAG;IAAA,IAAAC,MAAA;IAAA,WAAA7H,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAA2H,SAAA;MAAA,IAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;MAAA,OAAAlI,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAgI,SAAA;QAAA,kBAAAA,SAAA,CAAA9H,IAAA,GAAA8H,SAAA,CAAA7H,IAAA;UAAA;YAAAuH,IAAA,GAClBF,MAAI;YAAAG,IAAA,GACD3D,qBAAU,CAACiE,GAAG;YAAAL,IAAA,MAAAjH,MAAA,CACd6G,MAAI,CAACvK,kBAAkB;YAAA+K,SAAA,CAAA7H,IAAA;YAAA,OAERqH,MAAI,CAAC5I,KAAK,CAAC4G,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAAoC,IAAA,GAAAG,SAAA,CAAAtC,IAAA;YAAAoC,IAAA,MAAAnH,MAAA,CAC3CgF,iBAAM,CAACC,gBAAgB,OAAAjF,MAAA,CAAIkF,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAAAgC,IAAA;cAD9D/B,aAAa,EAAA6B,IAAA;cACb5B,UAAU,EAAA6B;YAAA;YAAA,OAAAE,SAAA,CAAA/F,MAAA,WAAAyF,IAAA,CALF5D,OAAO,CAAAT,IAAA,CAAAqE,IAAA;cACjB3D,MAAM,EAAA4D,IAAA;cACNzD,GAAG,EAAA0D,IAAA;cACHlB,OAAO,EAAAqB;YAAA,GAIN1D,KAAK,CAAC,UAACC,KAAK,EAAK;cAClBd,oBAAW,CAACC,MAAM,CAACa,KAAK,CAAC,2CAA2C,EAAEA,KAAK,CAAC;cAC5E,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAA0D,SAAA,CAAAnH,IAAA;QAAA;MAAA,GAAA4G,QAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACQS,mBAAmB,WAAnBA,mBAAmBA,CAACzD,MAAM,EAAE;IAAA,IAAA0D,MAAA;IAAA,WAAAxI,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAsI,SAAA;MAAA,IAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;MAAA,OAAA/I,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAA6I,SAAA;QAAA,kBAAAA,SAAA,CAAA3I,IAAA,GAAA2I,SAAA,CAAA1I,IAAA;UAAA;YAAAkI,IAAA,GACzBF,MAAI;YAAAG,IAAA,GACDtE,qBAAU,CAACsB,GAAG;YAAAiD,IAAA,MAAA5H,MAAA,CACdwH,MAAI,CAAClL,kBAAkB;YAAAuL,IAAA,GAAAjD,gBAAA,CAAA3F,OAAA;YAAAiJ,SAAA,CAAA1I,IAAA;YAAA,OAERgI,MAAI,CAACvJ,KAAK,CAAC4G,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAAgD,IAAA,GAAAI,SAAA,CAAAnD,IAAA;YAAAgD,IAAA,MAAA/H,MAAA,CAC3CgF,iBAAM,CAACC,gBAAgB,OAAAjF,MAAA,CAAIkF,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,EAAErE,MAAM,CAACqE,WAAW;cAC/BC,aAAa,EAAEtE,MAAM,CAACsE,aAAa;cACnCC,eAAe,EAAEvE,MAAM,CAACuE,eAAe;cACvCC,kBAAkB,EAAExE,MAAM,CAACwE;YAC7B,CAAC;YAAA,OAAAJ,SAAA,CAAA5G,MAAA,WAAAoG,IAAA,CAbSvE,OAAO,CAAAT,IAAA,CAAAgF,IAAA;cACjBtE,MAAM,EAAAuE,IAAA;cACNpE,GAAG,EAAAqE,IAAA;cACH7B,OAAO,EAAAiC,IAAA;cAKPxE,IAAI,EAAAyE;YAAA,GAMHvE,KAAK,CAAC,UAACC,KAAK,EAAK;cAClBd,oBAAW,CAACC,MAAM,CAACa,KAAK,CAAC,4CAA4C,EAAEA,KAAK,CAAC;cAC7E,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAAuE,SAAA,CAAAhI,IAAA;QAAA;MAAA,GAAAuH,QAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACQc,uBAAuB,WAAvBA,uBAAuBA,CAAA,EAAG;IAAA,IAAAC,MAAA;IAAA,WAAAxJ,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAsJ,SAAA;MAAA,IAAAC,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;YAAAkJ,IAAA,GACvBF,MAAI;YAAAG,IAAA,GACDtF,qBAAU,CAACiE,GAAG;YAAAsB,IAAA,MAAA5I,MAAA,CACdwI,MAAI,CAAClM,kBAAkB;YAAA0M,SAAA,CAAAxJ,IAAA;YAAA,OAERgJ,MAAI,CAACvK,KAAK,CAAC4G,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAA+D,IAAA,GAAAG,SAAA,CAAAjE,IAAA;YAAA+D,IAAA,MAAA9I,MAAA,CAC3CgF,iBAAM,CAACC,gBAAgB,OAAAjF,MAAA,CAAIkF,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAAA2D,IAAA;cAD9D1D,aAAa,EAAAwD,IAAA;cACbvD,UAAU,EAAAwD;YAAA;YAAA,OAAAE,SAAA,CAAA1H,MAAA,WAAAoH,IAAA,CALFvF,OAAO,CAAAT,IAAA,CAAAgG,IAAA;cACjBtF,MAAM,EAAAuF,IAAA;cACNpF,GAAG,EAAAqF,IAAA;cACH7C,OAAO,EAAAgD;YAAA,GAINrF,KAAK,CAAC,UAACC,KAAK,EAAK;cAClBd,oBAAW,CAACC,MAAM,CAACa,KAAK,CAAC,gDAAgD,EAAEA,KAAK,CAAC;cACjF,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAAqF,SAAA,CAAA9I,IAAA;QAAA;MAAA,GAAAuI,QAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACQQ,sBAAsB,WAAtBA,sBAAsBA,CAAA,EAAmB;IAAA,IAAAC,UAAA,GAAAC,SAAA;MAAAC,MAAA;IAAA,WAAApK,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAkK,SAAA;MAAA,IAAAC,WAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;MAAA,OAAA1K,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAwK,SAAA;QAAA,kBAAAA,SAAA,CAAAtK,IAAA,GAAAsK,SAAA,CAAArK,IAAA;UAAA;YAAlB8J,WAAW,GAAAJ,UAAA,CAAAY,MAAA,QAAAZ,UAAA,QAAA3H,SAAA,GAAA2H,UAAA,MAAG,EAAE;YAAAK,IAAA,GACpCH,MAAI;YAAAI,IAAA,GACDnG,qBAAU,CAACiE,GAAG;YAAAmC,IAAA,MAAAzJ,MAAA,CACdoJ,MAAI,CAAC9M,kBAAkB,yBAAA0D,MAAA,CAAsB+J,kBAAkB,CAACT,WAAW,CAAC;YAAAO,SAAA,CAAArK,IAAA;YAAA,OAE7D4J,MAAI,CAACnL,KAAK,CAAC4G,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAA4E,IAAA,GAAAG,SAAA,CAAA9E,IAAA;YAAA4E,IAAA,MAAA3J,MAAA,CAC3CgF,iBAAM,CAACC,gBAAgB,OAAAjF,MAAA,CAAIkF,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAAAwE,IAAA;cAD9DvE,aAAa,EAAAqE,IAAA;cACbpE,UAAU,EAAAqE;YAAA;YAAA,OAAAE,SAAA,CAAAvI,MAAA,WAAAiI,IAAA,CALFpG,OAAO,CAAAT,IAAA,CAAA6G,IAAA;cACjBnG,MAAM,EAAAoG,IAAA;cACNjG,GAAG,EAAAkG,IAAA;cACH1D,OAAO,EAAA6D;YAAA,GAINlG,KAAK,CAAC,UAACC,KAAK,EAAK;cAClBd,oBAAW,CAACC,MAAM,CAACa,KAAK,CAAC,+CAA+C,EAAEA,KAAK,CAAC;cAChF,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAAkG,SAAA,CAAA3J,IAAA;QAAA;MAAA,GAAAmJ,QAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACQW,oBAAoB,WAApBA,oBAAoBA,CAACC,aAAa,EAAE;IAAA,IAAAC,MAAA;IAAA,WAAAlL,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAgL,SAAA;MAAA,IAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;MAAA,OAAAvL,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAqL,SAAA;QAAA,kBAAAA,SAAA,CAAAnL,IAAA,GAAAmL,SAAA,CAAAlL,IAAA;UAAA;YAAA4K,IAAA,GACjCF,MAAI;YAAAG,IAAA,GACDhH,qBAAU,CAACsH,MAAM;YAAAL,IAAA,MAAAtK,MAAA,CACjBkK,MAAI,CAAC5N,kBAAkB,iBAAA0D,MAAA,CAAciK,aAAa;YAAAS,SAAA,CAAAlL,IAAA;YAAA,OAEnC0K,MAAI,CAACjM,KAAK,CAAC4G,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAAyF,IAAA,GAAAG,SAAA,CAAA3F,IAAA;YAAAyF,IAAA,MAAAxK,MAAA,CAC3CgF,iBAAM,CAACC,gBAAgB,OAAAjF,MAAA,CAAIkF,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAAAqF,IAAA;cAD9DpF,aAAa,EAAAkF,IAAA;cACbjF,UAAU,EAAAkF;YAAA;YAAA,OAAAE,SAAA,CAAApJ,MAAA,WAAA8I,IAAA,CALFjH,OAAO,CAAAT,IAAA,CAAA0H,IAAA;cACjBhH,MAAM,EAAAiH,IAAA;cACN9G,GAAG,EAAA+G,IAAA;cACHvE,OAAO,EAAA0E;YAAA,GAIN/G,KAAK,CAAC,UAACC,KAAK,EAAK;cAClBd,oBAAW,CAACC,MAAM,CAACa,KAAK,CAAC,6CAA6C,EAAEA,KAAK,CAAC;cAC9E,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAA+G,SAAA,CAAAxK,IAAA;QAAA;MAAA,GAAAiK,QAAA;IAAA;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACQS,gCAAgC,WAAhCA,gCAAgCA,CAAC3N,OAAO,EAAE;IAAA,IAAA4N,MAAA;IAAA,WAAA7L,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAA2L,SAAA;MAAA,IAAAC,cAAA,EAAAC,mBAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;MAAA,IAAAnN,OAAA,EAAAoN,SAAA,EAAAC,iBAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;MAAA,OAAAzM,YAAA,CAAAD,OAAA,CAAAI,IAAA,WAAAuM,SAAA;QAAA,kBAAAA,SAAA,CAAArM,IAAA,GAAAqM,SAAA,CAAApM,IAAA;UAAA;YACxCxB,OAAO,GAAG6M,MAAI,CAAC5M,KAAK,CAACC,QAAQ,CAACC,gBAAgB,CAACC,eAAI,EAAEyM,MAAI,CAAClO,SAAS,CAAC;YACpEyO,SAAS,GAAG;cAChBS,WAAW,EAAE5O,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEqM,WAAW;cACjCwC,KAAK,GAAAf,cAAA,GAAE9N,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAE6O,KAAK,cAAAf,cAAA,cAAAA,cAAA,GAAIgB,4DAAiD;cAC1EvM,IAAI,EAAEvC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEuC;YACjB,CAAC;YACK6L,iBAAiB,GAAGrN,OAAO,aAAPA,OAAO,wBAAAgN,mBAAA,GAAPhN,OAAO,CAAEU,SAAS,cAAAsM,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,CAAsD3K,GAAG;YAAA,IAC9E6K,iBAAiB;cAAAO,SAAA,CAAApM,IAAA;cAAA;YAAA;YACpBqD,oBAAW,CAACC,MAAM,CAACa,KAAK,4DAA4D,CAAC;YAAC,MAChF,IAAIe,KAAK,CAAC,wDAAwD,CAAC;UAAA;YAAA4G,IAAA,GAGpET,MAAI;YAAAU,IAAA,GACDlI,qBAAU,CAACiE,GAAG;YAAAkE,IAAA,MAAAxL,MAAA,CACdqL,iBAAiB,OAAArL,MAAA,CAAI,IAAImM,eAAe,CAAC,IAAAC,qBAAc,EAAChB,SAAS,CAAC,CAAC,CAAChG,QAAQ,CAAC,CAAC;YAAAwG,SAAA,CAAApM,IAAA;YAAA,OAE/DqL,MAAI,CAAC5M,KAAK,CAAC4G,WAAW,CAACC,YAAY,CAAC,CAAC;UAAA;YAAA2G,IAAA,GAAAG,SAAA,CAAA7G,IAAA;YAAA2G,IAAA,MAAA1L,MAAA,CAC3CgF,iBAAM,CAACC,gBAAgB,OAAAjF,MAAA,CAAIkF,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAAAuG,IAAA;cAD9DtG,aAAa,EAAAoG,IAAA;cACbnG,UAAU,EAAAoG;YAAA;YAAA,OAAAE,SAAA,CAAAtK,MAAA,WAAAgK,IAAA,CALFnI,OAAO,CAAAT,IAAA,CAAA4I,IAAA;cACjBlI,MAAM,EAAAmI,IAAA;cACNhI,GAAG,EAAAiI,IAAA;cACHzF,OAAO,EAAA4F;YAAA,GAINjI,KAAK,CAAC,UAACC,KAAK,EAAK;cAClBd,oBAAW,CAACC,MAAM,CAACa,KAAK,CAAC,2DAA2D,EAAEA,KAAK,CAAC;cAC5F,MAAMA,KAAK;YACb,CAAC;UAAA;UAAA;YAAA,OAAAiI,SAAA,CAAA1L,IAAA;QAAA;MAAA,GAAA4K,QAAA;IAAA;EACH,CAAC;EAAAuB,OAAA;AACH,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAtN,OAAA,GAEYrD,OAAO","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","ensurePracticeSessionDatachannelToken","_this2","_callee2","isDataChannelTokenEnabled","cachedToken","_refreshResponse$body","refreshResponse","_ref2","datachannelToken","dataChannelTokenType","_t","_context2","sent","abrupt","undefined","getDatachannelToken","DataChannelTokenType","PracticeSession","refreshDataChannelToken","body","setDatachannelToken","LoggerProxy","logger","warn","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","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 * 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 * Ensures practice-session token exists before registering the practice LLM channel.\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.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 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 // @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.11.0-next.11",
47
+ "@webex/plugin-rooms": "3.12.0-next.3",
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",
@@ -62,21 +62,21 @@
62
62
  },
63
63
  "dependencies": {
64
64
  "@webex/common": "3.11.0-next.1",
65
- "@webex/internal-media-core": "2.23.1",
66
- "@webex/internal-plugin-conversation": "3.11.0-next.11",
67
- "@webex/internal-plugin-device": "3.11.0-next.8",
68
- "@webex/internal-plugin-llm": "3.11.0-next.12",
69
- "@webex/internal-plugin-mercury": "3.11.0-next.10",
70
- "@webex/internal-plugin-metrics": "3.11.0-next.8",
71
- "@webex/internal-plugin-support": "3.11.0-next.11",
72
- "@webex/internal-plugin-user": "3.11.0-next.8",
73
- "@webex/internal-plugin-voicea": "3.11.0-next.13",
74
- "@webex/media-helpers": "3.11.0-next.4",
75
- "@webex/plugin-people": "3.11.0-next.10",
76
- "@webex/plugin-rooms": "3.11.0-next.11",
65
+ "@webex/internal-media-core": "2.23.3",
66
+ "@webex/internal-plugin-conversation": "3.12.0-next.3",
67
+ "@webex/internal-plugin-device": "3.12.0-next.2",
68
+ "@webex/internal-plugin-llm": "3.12.0-next.4",
69
+ "@webex/internal-plugin-mercury": "3.12.0-next.3",
70
+ "@webex/internal-plugin-metrics": "3.12.0-next.2",
71
+ "@webex/internal-plugin-support": "3.12.0-next.3",
72
+ "@webex/internal-plugin-user": "3.12.0-next.2",
73
+ "@webex/internal-plugin-voicea": "3.12.0-next.4",
74
+ "@webex/media-helpers": "3.12.0-next.1",
75
+ "@webex/plugin-people": "3.12.0-next.3",
76
+ "@webex/plugin-rooms": "3.12.0-next.3",
77
77
  "@webex/ts-sdp": "^1.8.1",
78
78
  "@webex/web-capabilities": "^1.10.0",
79
- "@webex/webex-core": "3.11.0-next.8",
79
+ "@webex/webex-core": "3.12.0-next.2",
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.1"
97
+ "version": "3.12.0-next.10"
98
98
  }
@@ -8,3 +8,12 @@ export const DataSetNames = {
8
8
  SELF: 'self', // sent to web client, over Mercury
9
9
  UNJOINED: 'unjoined', // sent when you are not joined, but can still see some stuff from the meeting (mutually exclusive with "main")
10
10
  };
11
+
12
+ // Priority order for initializing data sets — higher priority names come first.
13
+ // Data sets not listed here will be initialized after all prioritized ones.
14
+ // MAIN must come before SELF because LocusInfo.updateFromHashTree processes the
15
+ // batch of updatedObjects in order, and the SELF handler in updateLocusFromHashTreeObject
16
+ // checks locus.info?.isWebinar (which comes from MAIN) to decide whether to create a
17
+ // participant object for webinar attendees. If SELF were initialized first, locus.info
18
+ // would not yet be populated and the attendee participant would be skipped.
19
+ export const DATA_SET_INIT_PRIORITY: string[] = [DataSetNames.MAIN, DataSetNames.SELF];
@@ -2,10 +2,10 @@ import {cloneDeep, isEmpty, zip} from 'lodash';
2
2
  import HashTree, {LeafDataItem} from './hashTree';
3
3
  import LoggerProxy from '../common/logs/logger-proxy';
4
4
  import {Enum, HTTP_VERBS} from '../constants';
5
- import {DataSetNames, EMPTY_HASH} from './constants';
5
+ import {DataSetNames, DATA_SET_INIT_PRIORITY, EMPTY_HASH} from './constants';
6
6
  import {ObjectType, HtMeta, HashTreeObject} from './types';
7
7
  import {LocusDTO} from '../locus-info/types';
8
- import {deleteNestedObjectsWithHtMeta, isMetadata} from './utils';
8
+ import {deleteNestedObjectsWithHtMeta, isMetadata, sortByInitPriority} from './utils';
9
9
 
10
10
  export interface DataSet {
11
11
  url: string;
@@ -382,9 +382,10 @@ class HashTreeParser {
382
382
  if (this.state === 'stopped') {
383
383
  return;
384
384
  }
385
+
385
386
  const updatedObjects: HashTreeObject[] = [];
386
387
 
387
- for (const dataSet of visibleDataSets) {
388
+ for (const dataSet of sortByInitPriority(visibleDataSets, DATA_SET_INIT_PRIORITY)) {
388
389
  const {name, leafCount, url} = dataSet;
389
390
 
390
391
  if (!this.dataSets[name]) {
@@ -450,7 +451,7 @@ class HashTreeParser {
450
451
  // object mapping dataset names to arrays of leaf data
451
452
  const leafInfo: Record<string, Array<LeafInfo>> = {};
452
453
 
453
- const findAndStoreMetaData = (currentLocusPart: any) => {
454
+ const findAndStoreMetaData = (currentLocusPart: any, currentLocusPartName: string) => {
454
455
  if (typeof currentLocusPart !== 'object' || currentLocusPart === null) {
455
456
  return;
456
457
  }
@@ -465,10 +466,18 @@ class HashTreeParser {
465
466
  };
466
467
 
467
468
  if (copyData) {
468
- newLeafInfo.data = cloneDeep(currentLocusPart);
469
+ if ((type as string).toLowerCase() === ObjectType.control) {
470
+ // control entries require special handling, because they are signalled by Locus
471
+ // differently when coming in messages vs API responses
472
+ newLeafInfo.data = {
473
+ [currentLocusPartName]: cloneDeep(currentLocusPart),
474
+ };
475
+ } else {
476
+ newLeafInfo.data = cloneDeep(currentLocusPart);
469
477
 
470
- // remove any nested other objects that have their own htMeta
471
- deleteNestedObjectsWithHtMeta(newLeafInfo.data);
478
+ // remove any nested other objects that have their own htMeta
479
+ deleteNestedObjectsWithHtMeta(newLeafInfo.data);
480
+ }
472
481
  }
473
482
 
474
483
  for (const dataSetName of dataSetNames) {
@@ -480,19 +489,19 @@ class HashTreeParser {
480
489
  }
481
490
 
482
491
  if (Array.isArray(currentLocusPart)) {
483
- for (const item of currentLocusPart) {
484
- findAndStoreMetaData(item);
492
+ for (const [index, item] of currentLocusPart.entries()) {
493
+ findAndStoreMetaData(item, index.toString());
485
494
  }
486
495
  } else {
487
496
  for (const key of Object.keys(currentLocusPart)) {
488
497
  if (Object.prototype.hasOwnProperty.call(currentLocusPart, key)) {
489
- findAndStoreMetaData(currentLocusPart[key]);
498
+ findAndStoreMetaData(currentLocusPart[key], key);
490
499
  }
491
500
  }
492
501
  }
493
502
  };
494
503
 
495
- findAndStoreMetaData(locus);
504
+ findAndStoreMetaData(locus, 'locus');
496
505
 
497
506
  return leafInfo;
498
507
  }
@@ -952,7 +961,7 @@ class HashTreeParser {
952
961
  }
953
962
  const allDataSets = await this.getAllVisibleDataSetsFromLocus();
954
963
 
955
- for (const ds of addedDataSets) {
964
+ for (const ds of sortByInitPriority(addedDataSets, DATA_SET_INIT_PRIORITY)) {
956
965
  const dataSetInfo = allDataSets.find((d) => d.name === ds.name);
957
966
 
958
967
  LoggerProxy.logger.info(
@@ -964,8 +973,6 @@ class HashTreeParser {
964
973
  `HashTreeParser#initializeNewVisibleDataSets --> ${this.debugId} missing info about data set "${ds.name}" in Locus response from visibleDataSetsUrl`
965
974
  );
966
975
  } else {
967
- // we're awaiting in a loop, because in practice there will be only one new data set at a time,
968
- // so no point in trying to parallelize this
969
976
  // eslint-disable-next-line no-await-in-loop
970
977
  const updates = await this.initializeNewVisibleDataSet(ds, dataSetInfo);
971
978
 
@@ -60,3 +60,20 @@ export const deleteNestedObjectsWithHtMeta = (
60
60
  }
61
61
  }
62
62
  };
63
+
64
+ /**
65
+ * Reorders items so that those matching the given priority list come first (in priority order),
66
+ * followed by everything else in their original order.
67
+ *
68
+ * @param {Array<T>} items - The items to reorder
69
+ * @param {string[]} priority - Ordered list of names that should come first
70
+ * @returns {Array<T>} A new array with prioritized items first
71
+ */
72
+ export function sortByInitPriority<T extends {name: string}>(items: T[], priority: string[]): T[] {
73
+ const prioritized = priority
74
+ .map((name) => items.find((item) => item.name === name))
75
+ .filter(Boolean) as T[];
76
+ const rest = items.filter((item) => !priority.includes(item.name));
77
+
78
+ return [...prioritized, ...rest];
79
+ }