@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.
- package/dist/aiEnableRequest/index.js +1 -1
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/hashTree/constants.js +10 -1
- package/dist/hashTree/constants.js.map +1 -1
- package/dist/hashTree/hashTreeParser.js +20 -11
- package/dist/hashTree/hashTreeParser.js.map +1 -1
- package/dist/hashTree/utils.js +22 -0
- package/dist/hashTree/utils.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/index.js +427 -323
- package/dist/meeting/index.js.map +1 -1
- package/dist/metrics/constants.js +5 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +116 -2
- package/dist/multistream/sendSlotManager.js.map +1 -1
- package/dist/types/hashTree/constants.d.ts +1 -0
- package/dist/types/hashTree/utils.d.ts +11 -0
- package/dist/types/meeting/index.d.ts +24 -1
- package/dist/types/metrics/constants.d.ts +4 -0
- package/dist/types/multistream/sendSlotManager.d.ts +23 -1
- package/dist/webinar/index.js +325 -220
- package/dist/webinar/index.js.map +1 -1
- package/package.json +15 -15
- package/src/hashTree/constants.ts +9 -0
- package/src/hashTree/hashTreeParser.ts +21 -14
- package/src/hashTree/utils.ts +17 -0
- package/src/meeting/index.ts +165 -57
- package/src/metrics/constants.ts +5 -0
- package/src/multistream/sendSlotManager.ts +97 -3
- package/src/webinar/index.ts +120 -18
- package/test/unit/spec/hashTree/hashTreeParser.ts +238 -0
- package/test/unit/spec/hashTree/utils.ts +88 -1
- package/test/unit/spec/meeting/index.js +179 -48
- package/test/unit/spec/meetings/index.js +3 -3
- package/test/unit/spec/multistream/sendSlotManager.ts +135 -36
- 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":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_uuid","_interopRequireDefault","_lodash","_internalPluginLlm","_constants","_collection","_loggerProxy","_utils","Webinar","WebexPlugin","extend","namespace","MEETINGS","collections","webinar","WebinarCollection","props","locusUrl","webcastInstanceUrl","canManageWebcast","selfIsPanelist","selfIsAttendee","practiceSessionEnabled","meetingId","cleanUp","cleanupPSDataChannel","locusUrlUpdate","set","updateWebcastUrl","payload","get","updateCanManageWebcast","updateRoleChanged","oldRoles","newRoles","isPromoted","includes","SELF_ROLES","ATTENDEE","PANELIST","isDemoted","MODERATOR","updateStatusByRole","_ref","meeting","webex","meetings","getMeetingByType","_ID_","shareStatus","SHARE_STATUS","WHITEBOARD_SHARE_ACTIVE","_meeting$locusInfo","_meeting$locusInfo2","locusInfo","updateMediaShares","mediaShares","updatePSDataChannel","isJoinPracticeSessionDataChannel","_this","_asyncToGenerator2","default","_regenerator","mark","_callee","wrap","_context","prev","next","_pendingOnlineListener","internal","llm","off","disconnectLLM","code","reason","LLM_PRACTICE_SESSION","concat","processRelayEvent","stop","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.
|
|
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.
|
|
66
|
-
"@webex/internal-plugin-conversation": "3.
|
|
67
|
-
"@webex/internal-plugin-device": "3.
|
|
68
|
-
"@webex/internal-plugin-llm": "3.
|
|
69
|
-
"@webex/internal-plugin-mercury": "3.
|
|
70
|
-
"@webex/internal-plugin-metrics": "3.
|
|
71
|
-
"@webex/internal-plugin-support": "3.
|
|
72
|
-
"@webex/internal-plugin-user": "3.
|
|
73
|
-
"@webex/internal-plugin-voicea": "3.
|
|
74
|
-
"@webex/media-helpers": "3.
|
|
75
|
-
"@webex/plugin-people": "3.
|
|
76
|
-
"@webex/plugin-rooms": "3.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
471
|
-
|
|
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
|
|
package/src/hashTree/utils.ts
CHANGED
|
@@ -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
|
+
}
|