@webex/plugin-meetings 3.11.0 → 3.12.0-next.2

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 (170) hide show
  1. package/dist/aiEnableRequest/index.js +184 -0
  2. package/dist/aiEnableRequest/index.js.map +1 -0
  3. package/dist/aiEnableRequest/utils.js +36 -0
  4. package/dist/aiEnableRequest/utils.js.map +1 -0
  5. package/dist/annotation/index.js +14 -5
  6. package/dist/annotation/index.js.map +1 -1
  7. package/dist/breakouts/breakout.js +1 -1
  8. package/dist/breakouts/index.js +1 -1
  9. package/dist/config.js +7 -2
  10. package/dist/config.js.map +1 -1
  11. package/dist/constants.js +28 -6
  12. package/dist/constants.js.map +1 -1
  13. package/dist/hashTree/constants.js +3 -1
  14. package/dist/hashTree/constants.js.map +1 -1
  15. package/dist/hashTree/hashTree.js +18 -0
  16. package/dist/hashTree/hashTree.js.map +1 -1
  17. package/dist/hashTree/hashTreeParser.js +850 -410
  18. package/dist/hashTree/hashTreeParser.js.map +1 -1
  19. package/dist/hashTree/types.js +4 -2
  20. package/dist/hashTree/types.js.map +1 -1
  21. package/dist/hashTree/utils.js +10 -0
  22. package/dist/hashTree/utils.js.map +1 -1
  23. package/dist/index.js +11 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/interceptors/constant.js +12 -0
  26. package/dist/interceptors/constant.js.map +1 -0
  27. package/dist/interceptors/dataChannelAuthToken.js +290 -0
  28. package/dist/interceptors/dataChannelAuthToken.js.map +1 -0
  29. package/dist/interceptors/index.js +7 -0
  30. package/dist/interceptors/index.js.map +1 -1
  31. package/dist/interceptors/utils.js +27 -0
  32. package/dist/interceptors/utils.js.map +1 -0
  33. package/dist/interpretation/index.js +2 -2
  34. package/dist/interpretation/index.js.map +1 -1
  35. package/dist/interpretation/siLanguage.js +1 -1
  36. package/dist/locus-info/controlsUtils.js +5 -3
  37. package/dist/locus-info/controlsUtils.js.map +1 -1
  38. package/dist/locus-info/index.js +522 -131
  39. package/dist/locus-info/index.js.map +1 -1
  40. package/dist/locus-info/selfUtils.js +1 -0
  41. package/dist/locus-info/selfUtils.js.map +1 -1
  42. package/dist/locus-info/types.js.map +1 -1
  43. package/dist/media/MediaConnectionAwaiter.js +57 -1
  44. package/dist/media/MediaConnectionAwaiter.js.map +1 -1
  45. package/dist/media/properties.js +4 -2
  46. package/dist/media/properties.js.map +1 -1
  47. package/dist/meeting/in-meeting-actions.js +7 -1
  48. package/dist/meeting/in-meeting-actions.js.map +1 -1
  49. package/dist/meeting/index.js +1173 -877
  50. package/dist/meeting/index.js.map +1 -1
  51. package/dist/meeting/request.js +50 -0
  52. package/dist/meeting/request.js.map +1 -1
  53. package/dist/meeting/request.type.js.map +1 -1
  54. package/dist/meeting/util.js +133 -3
  55. package/dist/meeting/util.js.map +1 -1
  56. package/dist/meetings/index.js +117 -48
  57. package/dist/meetings/index.js.map +1 -1
  58. package/dist/member/index.js +10 -0
  59. package/dist/member/index.js.map +1 -1
  60. package/dist/member/util.js +10 -0
  61. package/dist/member/util.js.map +1 -1
  62. package/dist/metrics/constants.js +2 -1
  63. package/dist/metrics/constants.js.map +1 -1
  64. package/dist/multistream/mediaRequestManager.js +9 -60
  65. package/dist/multistream/mediaRequestManager.js.map +1 -1
  66. package/dist/multistream/remoteMediaManager.js +11 -0
  67. package/dist/multistream/remoteMediaManager.js.map +1 -1
  68. package/dist/reachability/index.js +18 -10
  69. package/dist/reachability/index.js.map +1 -1
  70. package/dist/reactions/reactions.type.js.map +1 -1
  71. package/dist/reconnection-manager/index.js +0 -1
  72. package/dist/reconnection-manager/index.js.map +1 -1
  73. package/dist/types/aiEnableRequest/index.d.ts +5 -0
  74. package/dist/types/aiEnableRequest/utils.d.ts +2 -0
  75. package/dist/types/config.d.ts +4 -0
  76. package/dist/types/constants.d.ts +23 -1
  77. package/dist/types/hashTree/constants.d.ts +1 -0
  78. package/dist/types/hashTree/hashTree.d.ts +7 -0
  79. package/dist/types/hashTree/hashTreeParser.d.ts +122 -14
  80. package/dist/types/hashTree/types.d.ts +3 -0
  81. package/dist/types/hashTree/utils.d.ts +6 -0
  82. package/dist/types/index.d.ts +1 -0
  83. package/dist/types/interceptors/constant.d.ts +5 -0
  84. package/dist/types/interceptors/dataChannelAuthToken.d.ts +43 -0
  85. package/dist/types/interceptors/index.d.ts +2 -1
  86. package/dist/types/interceptors/utils.d.ts +1 -0
  87. package/dist/types/locus-info/index.d.ts +60 -8
  88. package/dist/types/locus-info/types.d.ts +7 -0
  89. package/dist/types/media/MediaConnectionAwaiter.d.ts +10 -1
  90. package/dist/types/media/properties.d.ts +2 -1
  91. package/dist/types/meeting/in-meeting-actions.d.ts +6 -0
  92. package/dist/types/meeting/index.d.ts +61 -7
  93. package/dist/types/meeting/request.d.ts +16 -1
  94. package/dist/types/meeting/request.type.d.ts +5 -0
  95. package/dist/types/meeting/util.d.ts +31 -0
  96. package/dist/types/meetings/index.d.ts +4 -2
  97. package/dist/types/member/index.d.ts +1 -0
  98. package/dist/types/member/util.d.ts +5 -0
  99. package/dist/types/metrics/constants.d.ts +1 -0
  100. package/dist/types/multistream/mediaRequestManager.d.ts +0 -23
  101. package/dist/types/reactions/reactions.type.d.ts +1 -0
  102. package/dist/types/webinar/utils.d.ts +6 -0
  103. package/dist/webinar/index.js +291 -91
  104. package/dist/webinar/index.js.map +1 -1
  105. package/dist/webinar/utils.js +25 -0
  106. package/dist/webinar/utils.js.map +1 -0
  107. package/package.json +24 -23
  108. package/src/aiEnableRequest/README.md +84 -0
  109. package/src/aiEnableRequest/index.ts +170 -0
  110. package/src/aiEnableRequest/utils.ts +25 -0
  111. package/src/annotation/index.ts +27 -7
  112. package/src/config.ts +4 -0
  113. package/src/constants.ts +29 -1
  114. package/src/hashTree/constants.ts +1 -0
  115. package/src/hashTree/hashTree.ts +17 -0
  116. package/src/hashTree/hashTreeParser.ts +745 -252
  117. package/src/hashTree/types.ts +4 -0
  118. package/src/hashTree/utils.ts +9 -0
  119. package/src/index.ts +8 -1
  120. package/src/interceptors/constant.ts +6 -0
  121. package/src/interceptors/dataChannelAuthToken.ts +170 -0
  122. package/src/interceptors/index.ts +2 -1
  123. package/src/interceptors/utils.ts +16 -0
  124. package/src/interpretation/index.ts +2 -2
  125. package/src/locus-info/controlsUtils.ts +11 -0
  126. package/src/locus-info/index.ts +579 -113
  127. package/src/locus-info/selfUtils.ts +1 -0
  128. package/src/locus-info/types.ts +8 -0
  129. package/src/media/MediaConnectionAwaiter.ts +41 -1
  130. package/src/media/properties.ts +3 -1
  131. package/src/meeting/in-meeting-actions.ts +12 -0
  132. package/src/meeting/index.ts +291 -76
  133. package/src/meeting/request.ts +42 -0
  134. package/src/meeting/request.type.ts +6 -0
  135. package/src/meeting/util.ts +160 -2
  136. package/src/meetings/index.ts +157 -44
  137. package/src/member/index.ts +10 -0
  138. package/src/member/util.ts +12 -0
  139. package/src/metrics/constants.ts +1 -0
  140. package/src/multistream/mediaRequestManager.ts +4 -54
  141. package/src/multistream/remoteMediaManager.ts +13 -0
  142. package/src/reachability/index.ts +9 -0
  143. package/src/reactions/reactions.type.ts +1 -0
  144. package/src/reconnection-manager/index.ts +0 -1
  145. package/src/webinar/index.ts +191 -6
  146. package/src/webinar/utils.ts +16 -0
  147. package/test/unit/spec/aiEnableRequest/index.ts +981 -0
  148. package/test/unit/spec/aiEnableRequest/utils.ts +130 -0
  149. package/test/unit/spec/annotation/index.ts +69 -7
  150. package/test/unit/spec/hashTree/hashTree.ts +66 -0
  151. package/test/unit/spec/hashTree/hashTreeParser.ts +2225 -189
  152. package/test/unit/spec/interceptors/dataChannelAuthToken.ts +210 -0
  153. package/test/unit/spec/interceptors/utils.ts +75 -0
  154. package/test/unit/spec/locus-info/controlsUtils.js +29 -0
  155. package/test/unit/spec/locus-info/index.js +1134 -55
  156. package/test/unit/spec/media/MediaConnectionAwaiter.ts +41 -1
  157. package/test/unit/spec/media/properties.ts +12 -3
  158. package/test/unit/spec/meeting/in-meeting-actions.ts +8 -2
  159. package/test/unit/spec/meeting/index.js +829 -115
  160. package/test/unit/spec/meeting/request.js +70 -0
  161. package/test/unit/spec/meeting/utils.js +438 -26
  162. package/test/unit/spec/meetings/index.js +653 -32
  163. package/test/unit/spec/member/index.js +28 -4
  164. package/test/unit/spec/member/util.js +65 -27
  165. package/test/unit/spec/multistream/mediaRequestManager.ts +2 -85
  166. package/test/unit/spec/multistream/remoteMediaManager.ts +30 -0
  167. package/test/unit/spec/reachability/index.ts +23 -0
  168. package/test/unit/spec/reconnection-manager/index.js +4 -8
  169. package/test/unit/spec/webinar/index.ts +474 -37
  170. package/test/unit/spec/webinar/utils.ts +39 -0
@@ -1 +1 @@
1
- {"version":3,"names":["_webexCore","require","_uuid","_interopRequireDefault","_lodash","_constants","_collection","_loggerProxy","Webinar","WebexPlugin","extend","namespace","MEETINGS","collections","webinar","WebinarCollection","props","locusUrl","webcastInstanceUrl","canManageWebcast","selfIsPanelist","selfIsAttendee","practiceSessionEnabled","meetingId","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","updateLLMConnection","isJoinPracticeSessionDataChannel","setPracticeSessionState","enabled","request","method","HTTP_VERBS","PATCH","uri","concat","body","practiceSession","catch","error","LoggerProxy","logger","updatePracticeSessionStatus","startWebcast","layout","_this","_asyncToGenerator2","default","_regenerator","mark","_callee","_t","_t2","_t3","_t4","_t5","_t6","_t7","_t8","wrap","_context","prev","next","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","abrupt","call","headers","stop","stopWebcast","_this2","_callee2","_t9","_t0","_t1","_t10","_t11","_t12","_t13","_t14","_context2","queryWebcastLayout","_this3","_callee3","_t15","_t16","_t17","_t18","_t19","_t20","_context3","GET","updateWebcastLayout","_this4","_callee4","_t21","_t22","_t23","_t24","_t25","_t26","_t27","_t28","_context4","videoLayout","contentLayout","syncStageLayout","syncStageInMeeting","viewAllWebcastAttendees","_this5","_callee5","_t29","_t30","_t31","_t32","_t33","_t34","_context5","searchWebcastAttendees","_arguments","arguments","_this6","_callee6","queryString","_t35","_t36","_t37","_t38","_t39","_t40","_context6","length","undefined","encodeURIComponent","expelWebcastAttendee","participantId","_this7","_callee7","_t41","_t42","_t43","_t44","_t45","_t46","_context7","DELETE","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 {_ID_, HEADERS, HTTP_VERBS, MEETINGS, SELF_ROLES, SHARE_STATUS} from '../constants';\n\nimport WebinarCollection from './collection';\nimport LoggerProxy from '../common/logs/logger-proxy';\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 * 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 if (this.practiceSessionEnabled) {\n // may need change data channel in practice session\n meeting?.updateLLMConnection();\n }\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 * 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 },\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\nexport default Webinar;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_webexCore","require","_uuid","_interopRequireDefault","_lodash","_internalPluginLlm","_constants","_collection","_loggerProxy","_utils","Webinar","WebexPlugin","extend","namespace","MEETINGS","collections","webinar","WebinarCollection","props","locusUrl","webcastInstanceUrl","canManageWebcast","selfIsPanelist","selfIsAttendee","practiceSessionEnabled","meetingId","cleanUp","cleanupPSDataChannel","locusUrlUpdate","set","updateWebcastUrl","payload","get","updateCanManageWebcast","updateRoleChanged","oldRoles","newRoles","isPromoted","includes","SELF_ROLES","ATTENDEE","PANELIST","isDemoted","MODERATOR","updateStatusByRole","_ref","meeting","webex","meetings","getMeetingByType","_ID_","shareStatus","SHARE_STATUS","WHITEBOARD_SHARE_ACTIVE","_meeting$locusInfo","_meeting$locusInfo2","locusInfo","updateMediaShares","mediaShares","updatePSDataChannel","isJoinPracticeSessionDataChannel","_this","_asyncToGenerator2","default","_regenerator","mark","_callee","wrap","_context","prev","next","_pendingOnlineListener","internal","llm","off","disconnectLLM","code","reason","LLM_PRACTICE_SESSION","concat","processRelayEvent","stop","_this2","_callee2","isPracticeSession","_ref2","_ref2$url","url","_ref2$info","_ref2$info2","_ref2$info2$practiceS","practiceSessionDatachannelUrl","practiceSessionDatachannelToken","isCaptionBoxOn","_onDefaultSessionConnected","_context2","isJoined","abrupt","undefined","info","getDatachannelToken","DataChannelTokenType","PracticeSession","voicea","getIsCaptionBoxOn","isConnected","getLocusUrl","getDatachannelUrl","onDefaultSessionConnected","on","LoggerProxy","logger","registerAndConnect","then","registerAndConnectResult","_this2$webex$internal","_this2$webex$internal2","announce","call","updateSubchannelSubscriptions","subscribe","_promise","resolve","setPracticeSessionState","enabled","request","method","HTTP_VERBS","PATCH","uri","body","practiceSession","catch","error","updatePracticeSessionStatus","startWebcast","layout","_this3","_callee3","_t","_t2","_t3","_t4","_t5","_t6","_t7","_t8","_context3","Error","PUT","_defineProperty2","credentials","getUserToken","sent","config","trackingIdPrefix","uuid","v4","toString","authorization","trackingId","HEADERS","CONTENT_TYPE","CONTENT_TYPE_VALUE","APPLICATION_JSON","action","meetingInfo","locusId","correlationId","headers","stopWebcast","_this4","_callee4","_t9","_t0","_t1","_t10","_t11","_t12","_t13","_t14","_context4","queryWebcastLayout","_this5","_callee5","_t15","_t16","_t17","_t18","_t19","_t20","_context5","GET","updateWebcastLayout","_this6","_callee6","_t21","_t22","_t23","_t24","_t25","_t26","_t27","_t28","_context6","videoLayout","contentLayout","syncStageLayout","syncStageInMeeting","viewAllWebcastAttendees","_this7","_callee7","_t29","_t30","_t31","_t32","_t33","_t34","_context7","searchWebcastAttendees","_arguments","arguments","_this8","_callee8","queryString","_t35","_t36","_t37","_t38","_t39","_t40","_context8","length","encodeURIComponent","expelWebcastAttendee","participantId","_this9","_callee9","_t41","_t42","_t43","_t44","_t45","_t46","_context9","DELETE","searchLargeScaleWebinarAttendees","_this0","_callee0","_payload$limit","_meeting$locusInfo3","_meeting$locusInfo3$l","_meeting$locusInfo3$l2","_meeting$locusInfo3$l3","rawParams","attendeeSearchUrl","_t47","_t48","_t49","_t50","_t51","_t52","_context0","search_text","limit","DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT","links","resources","attendeeSearch","URLSearchParams","sanitizeParams","version","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin, config} from '@webex/webex-core';\nimport uuid from 'uuid';\nimport {get} from 'lodash';\nimport {DataChannelTokenType} from '@webex/internal-plugin-llm';\nimport {\n _ID_,\n HEADERS,\n HTTP_VERBS,\n MEETINGS,\n SELF_ROLES,\n SHARE_STATUS,\n DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT,\n LLM_PRACTICE_SESSION,\n} from '../constants';\n\nimport WebinarCollection from './collection';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {sanitizeParams} from './utils';\n\n/**\n * @class Webinar\n */\nconst Webinar = WebexPlugin.extend({\n namespace: MEETINGS,\n collections: {\n webinar: WebinarCollection,\n },\n\n props: {\n locusUrl: 'string', // appears current webinar's locus url\n webcastInstanceUrl: 'string', // current webinar's webcast instance url\n canManageWebcast: 'boolean', // appears the ability to manage webcast\n selfIsPanelist: 'boolean', // self is panelist\n selfIsAttendee: 'boolean', // self is attendee\n practiceSessionEnabled: 'boolean', // practice session enabled\n meetingId: 'string',\n },\n\n /**\n * Calls this to clean up listeners\n * @returns {void}\n */\n cleanUp() {\n this.cleanupPSDataChannel();\n },\n\n /**\n * Update the current locus url of the webinar\n * @param {string} locusUrl\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n },\n\n /**\n * Update the current webcast instance url of the meeting\n * @param {object} payload\n * @returns {void}\n */\n updateWebcastUrl(payload) {\n this.set('webcastInstanceUrl', get(payload, 'resources.webcastInstance.url'));\n },\n\n /**\n * Update whether self has capability to manage start/stop webcast (only host can manage it)\n * @param {boolean} canManageWebcast\n * @returns {void}\n */\n updateCanManageWebcast(canManageWebcast) {\n this.set('canManageWebcast', canManageWebcast);\n },\n\n /**\n * Updates user roles and manages associated state transitions\n * @param {object} payload\n * @param {string[]} payload.oldRoles - Previous roles of the user\n * @param {string[]} payload.newRoles - New roles of the user\n * @returns {{isPromoted: boolean, isDemoted: boolean}} Role transition states\n */\n updateRoleChanged(payload) {\n const oldRoles = get(payload, 'oldRoles', []);\n const newRoles = get(payload, 'newRoles', []);\n\n const isPromoted =\n oldRoles.includes(SELF_ROLES.ATTENDEE) && newRoles.includes(SELF_ROLES.PANELIST);\n const isDemoted =\n (oldRoles.includes(SELF_ROLES.PANELIST) && newRoles.includes(SELF_ROLES.ATTENDEE)) ||\n (!oldRoles.includes(SELF_ROLES.ATTENDEE) && newRoles.includes(SELF_ROLES.ATTENDEE)); // for attendee just join meeting case\n this.set('selfIsPanelist', newRoles.includes(SELF_ROLES.PANELIST));\n this.set('selfIsAttendee', newRoles.includes(SELF_ROLES.ATTENDEE));\n this.updateCanManageWebcast(newRoles.includes(SELF_ROLES.MODERATOR));\n this.updateStatusByRole({isPromoted, isDemoted});\n\n return {isPromoted, isDemoted};\n },\n\n /**\n * should join practice session data channel or not\n * @param {Object} {isPromoted: boolean, isDemoted: boolean}} Role transition states\n * @returns {void}\n */\n updateStatusByRole({isPromoted, isDemoted}) {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n\n if (\n (isDemoted && meeting?.shareStatus === SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE) ||\n isPromoted\n ) {\n // attendees in webinar should subscribe streaming for whiteboard sharing\n // while panelist still need subscribe native mode so trigger force update here\n meeting?.locusInfo?.updateMediaShares(meeting?.locusInfo?.mediaShares, true);\n }\n\n this.updatePSDataChannel();\n },\n\n /**\n * should join practice session data channel or not\n * @returns {boolean}\n */\n isJoinPracticeSessionDataChannel() {\n return this.selfIsPanelist && this.practiceSessionEnabled;\n },\n\n /**\n * Disconnects the practice session data channel and removes its relay listener.\n * @returns {Promise<void>}\n */\n async cleanupPSDataChannel() {\n if (this._pendingOnlineListener) {\n // @ts-ignore - Fix type\n this.webex.internal.llm.off('online', this._pendingOnlineListener);\n this._pendingOnlineListener = null;\n }\n\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n\n // @ts-ignore - Fix type\n await this.webex.internal.llm.disconnectLLM(\n {\n code: 3050,\n reason: 'done (permanent)',\n },\n LLM_PRACTICE_SESSION\n );\n // @ts-ignore - Fix type\n this.webex.internal.llm.off(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n },\n\n /**\n * Connects to low latency mercury and reconnects if the address has changed\n * It will also disconnect if called when the meeting has ended\n * @returns {Promise}\n */\n async updatePSDataChannel() {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n const isPracticeSession = meeting?.isJoined() && this.isJoinPracticeSessionDataChannel();\n\n if (!isPracticeSession) {\n await this.cleanupPSDataChannel();\n\n return undefined;\n }\n\n // @ts-ignore - Fix type\n const {url = undefined, info: {practiceSessionDatachannelUrl = undefined} = {}} =\n meeting?.locusInfo || {};\n\n // @ts-ignore\n const practiceSessionDatachannelToken = this.webex.internal.llm.getDatachannelToken(\n DataChannelTokenType.PracticeSession\n );\n\n const isCaptionBoxOn = this.webex.internal.voicea.getIsCaptionBoxOn();\n\n if (!practiceSessionDatachannelUrl) {\n return undefined;\n }\n // @ts-ignore - Fix type\n if (this.webex.internal.llm.isConnected(LLM_PRACTICE_SESSION)) {\n if (\n // @ts-ignore - Fix type\n url === this.webex.internal.llm.getLocusUrl(LLM_PRACTICE_SESSION) &&\n // @ts-ignore - Fix type\n practiceSessionDatachannelUrl ===\n this.webex.internal.llm.getDatachannelUrl(LLM_PRACTICE_SESSION)\n ) {\n return undefined;\n }\n\n await this.cleanupPSDataChannel();\n }\n\n // Ensure the default session data channel is connected before connecting the practice session.\n // Subscribe before checking isConnected() to avoid a race where the 'online' event fires\n // between the check and the subscription — Mercury does not replay missed events.\n if (!this._pendingOnlineListener) {\n const onDefaultSessionConnected = () => {\n this._pendingOnlineListener = null;\n // @ts-ignore - Fix type\n this.webex.internal.llm.off('online', onDefaultSessionConnected);\n this.updatePSDataChannel();\n };\n this._pendingOnlineListener = onDefaultSessionConnected;\n // @ts-ignore - Fix type\n this.webex.internal.llm.on('online', onDefaultSessionConnected);\n }\n\n // @ts-ignore - Fix type\n if (!this.webex.internal.llm.isConnected()) {\n LoggerProxy.logger.info(\n 'Webinar:index#updatePSDataChannel --> default session not yet connected, deferring practice session connect.'\n );\n\n return undefined;\n }\n\n // Default session is already connected — cancel the pending listener and proceed\n if (this._pendingOnlineListener) {\n // @ts-ignore - Fix type\n this.webex.internal.llm.off('online', this._pendingOnlineListener);\n this._pendingOnlineListener = null;\n }\n\n // @ts-ignore - Fix type\n return this.webex.internal.llm\n .registerAndConnect(\n url,\n practiceSessionDatachannelUrl,\n practiceSessionDatachannelToken,\n LLM_PRACTICE_SESSION\n )\n .then((registerAndConnectResult) => {\n // @ts-ignore - Fix type\n this.webex.internal.llm.off(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n // @ts-ignore - Fix type\n this.webex.internal.llm.on(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n // @ts-ignore - Fix type\n this.webex.internal.voicea?.announce?.();\n if (isCaptionBoxOn) {\n this.webex.internal.voicea.updateSubchannelSubscriptions({subscribe: ['transcription']});\n }\n LoggerProxy.logger.info(\n `Webinar:index#updatePSDataChannel --> enabled to receive relay events for default session for ${LLM_PRACTICE_SESSION}!`\n );\n\n return Promise.resolve(registerAndConnectResult);\n });\n },\n\n /**\n * start or stop practice session for webinar\n * @param {boolean} enabled\n * @returns {Promise}\n */\n setPracticeSessionState(enabled) {\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/controls`,\n body: {\n practiceSession: {\n enabled,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#setPracticeSessionState failed', error);\n throw error;\n });\n },\n\n /**\n * update practice session status\n * @param {object} payload\n * @returns {void}\n */\n updatePracticeSessionStatus(payload) {\n this.set('practiceSessionEnabled', !!payload?.enabled);\n this.updatePSDataChannel().then(() => {});\n },\n\n /**\n * start webcast mode for webinar\n * @param {object} meeting\n * @param {object} layout\n * @returns {Promise}\n */\n async startWebcast(meeting, layout) {\n if (!meeting) {\n LoggerProxy.logger.error(\n `Meeting:webinar#startWebcast failed --> meeting parameter : ${meeting}`\n );\n throw new Error('Meeting parameter does not meet expectations');\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/streaming`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n action: 'start',\n meetingInfo: {\n locusId: meeting.locusId,\n correlationId: meeting.correlationId,\n },\n layout,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#startWebcast failed', error);\n throw error;\n });\n },\n\n /**\n * stop webcast mode for webinar\n * @returns {Promise}\n */\n async stopWebcast() {\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/streaming`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n action: 'stop',\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#stopWebcast failed', error);\n throw error;\n });\n },\n\n /**\n * query webcast layout for webinar\n * @returns {Promise}\n */\n async queryWebcastLayout() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/layout`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#queryWebcastLayout failed', error);\n throw error;\n });\n },\n\n /**\n * update webcast layout for webinar\n * @param {object} layout\n * @returns {Promise}\n */\n async updateWebcastLayout(layout) {\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/layout`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n videoLayout: layout.videoLayout,\n contentLayout: layout.contentLayout,\n syncStageLayout: layout.syncStageLayout,\n syncStageInMeeting: layout.syncStageInMeeting,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#updateWebcastLayout failed', error);\n throw error;\n });\n },\n\n /**\n * view all webcast attendees\n * @returns {Promise}\n */\n async viewAllWebcastAttendees() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/attendees`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#viewAllWebcastAttendees failed', error);\n throw error;\n });\n },\n\n /**\n * search webcast attendees by query string\n * @param {string} queryString\n * @returns {Promise}\n */\n async searchWebcastAttendees(queryString = '') {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/attendees?keyword=${encodeURIComponent(queryString)}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#searchWebcastAttendees failed', error);\n throw error;\n });\n },\n\n /**\n * expel webcast attendee by participantId\n * @param {string} participantId\n * @returns {Promise}\n */\n async expelWebcastAttendee(participantId) {\n return this.request({\n method: HTTP_VERBS.DELETE,\n uri: `${this.webcastInstanceUrl}/attendees/${participantId}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#expelWebcastAttendee failed', error);\n throw error;\n });\n },\n\n /**\n * search large scale webinar attendees\n * @param {object} payload\n * @param {string} payload.queryString\n * @param {number} payload.limit\n * @param {string} payload.next\n * @returns {Promise}\n */\n async searchLargeScaleWebinarAttendees(payload) {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n const rawParams = {\n search_text: payload?.queryString,\n limit: payload?.limit ?? DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT,\n next: payload?.next,\n };\n const attendeeSearchUrl = meeting?.locusInfo?.links?.resources?.attendeeSearch?.url;\n if (!attendeeSearchUrl) {\n LoggerProxy.logger.error(`Meeting:webinar5k#searchLargeScaleWebinarAttendees failed`);\n throw new Error('Meeting:webinar5k#Attendee search url is not available');\n }\n\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${attendeeSearchUrl}?${new URLSearchParams(sanitizeParams(rawParams)).toString()}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar5k#searchLargeScaleWebinarAttendees failed', error);\n throw error;\n });\n },\n});\n\nexport default Webinar;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.sanitizeParams = void 0;
9
+ var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
10
+ /**
11
+ * Remove null/undefined/empty string values from an object
12
+ * @param {object} params
13
+ * @returns {object}
14
+ */
15
+ var sanitizeParams = exports.sanitizeParams = function sanitizeParams(params) {
16
+ var result = {};
17
+ (0, _keys.default)(params).forEach(function (key) {
18
+ var value = params[key];
19
+ if (value !== null && value !== undefined && value !== '') {
20
+ result[key] = value;
21
+ }
22
+ });
23
+ return result;
24
+ };
25
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["sanitizeParams","exports","params","result","_keys","default","forEach","key","value","undefined"],"sources":["utils.ts"],"sourcesContent":["/**\n * Remove null/undefined/empty string values from an object\n * @param {object} params\n * @returns {object}\n */\nexport const sanitizeParams = (params: Record<string, any>) => {\n const result: Record<string, any> = {};\n Object.keys(params).forEach((key) => {\n const value = params[key];\n if (value !== null && value !== undefined && value !== '') {\n result[key] = value;\n }\n });\n\n return result;\n};\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACO,IAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG,SAAjBA,cAAcA,CAAIE,MAA2B,EAAK;EAC7D,IAAMC,MAA2B,GAAG,CAAC,CAAC;EACtC,IAAAC,KAAA,CAAAC,OAAA,EAAYH,MAAM,CAAC,CAACI,OAAO,CAAC,UAACC,GAAG,EAAK;IACnC,IAAMC,KAAK,GAAGN,MAAM,CAACK,GAAG,CAAC;IACzB,IAAIC,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAKC,SAAS,IAAID,KAAK,KAAK,EAAE,EAAE;MACzDL,MAAM,CAACI,GAAG,CAAC,GAAGC,KAAK;IACrB;EACF,CAAC,CAAC;EAEF,OAAOL,MAAM;AACf,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -41,14 +41,15 @@
41
41
  "@types/jsdom": "^21",
42
42
  "@webex/babel-config-legacy": "0.0.0",
43
43
  "@webex/eslint-config-legacy": "0.0.0",
44
+ "@webex/event-dictionary-ts": "^1.0.2073",
44
45
  "@webex/jest-config-legacy": "0.0.0",
45
46
  "@webex/legacy-tools": "0.0.0",
46
- "@webex/plugin-rooms": "3.11.0",
47
- "@webex/test-helper-chai": "3.11.0",
48
- "@webex/test-helper-mocha": "3.11.0",
49
- "@webex/test-helper-mock-webex": "3.11.0",
50
- "@webex/test-helper-retry": "3.11.0",
51
- "@webex/test-helper-test-users": "3.11.0",
47
+ "@webex/plugin-rooms": "3.11.0-next.11",
48
+ "@webex/test-helper-chai": "3.11.0-next.1",
49
+ "@webex/test-helper-mocha": "3.11.0-next.1",
50
+ "@webex/test-helper-mock-webex": "3.11.0-next.1",
51
+ "@webex/test-helper-retry": "3.11.0-next.1",
52
+ "@webex/test-helper-test-users": "3.11.0-next.1",
52
53
  "chai": "^4.3.4",
53
54
  "chai-as-promised": "^7.1.1",
54
55
  "eslint": "^8.24.0",
@@ -60,23 +61,22 @@
60
61
  "typescript": "^4.7.4"
61
62
  },
62
63
  "dependencies": {
63
- "@webex/common": "3.11.0",
64
- "@webex/event-dictionary-ts": "^1.0.1930",
65
- "@webex/internal-media-core": "2.20.3",
66
- "@webex/internal-plugin-conversation": "3.11.0",
67
- "@webex/internal-plugin-device": "3.11.0",
68
- "@webex/internal-plugin-llm": "3.11.0",
69
- "@webex/internal-plugin-mercury": "3.11.0",
70
- "@webex/internal-plugin-metrics": "3.11.0",
71
- "@webex/internal-plugin-support": "3.11.0",
72
- "@webex/internal-plugin-user": "3.11.0",
73
- "@webex/internal-plugin-voicea": "3.11.0",
74
- "@webex/media-helpers": "3.11.0",
75
- "@webex/plugin-people": "3.11.0",
76
- "@webex/plugin-rooms": "3.11.0",
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.12.0-next.1",
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.12.0-next.1",
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",
77
77
  "@webex/ts-sdp": "^1.8.1",
78
- "@webex/web-capabilities": "^1.7.1",
79
- "@webex/webex-core": "3.11.0",
78
+ "@webex/web-capabilities": "^1.10.0",
79
+ "@webex/webex-core": "3.11.0-next.8",
80
80
  "ampersand-collection": "^2.0.2",
81
81
  "bowser": "^2.11.0",
82
82
  "btoa": "^1.2.1",
@@ -84,6 +84,7 @@
84
84
  "global": "^4.4.0",
85
85
  "ip-anonymize": "^0.1.0",
86
86
  "javascript-state-machine": "^3.1.0",
87
+ "jose": "^5.8.0",
87
88
  "jwt-decode": "3.1.2",
88
89
  "lodash": "^4.17.21",
89
90
  "uuid": "^3.3.2",
@@ -93,5 +94,5 @@
93
94
  "//": [
94
95
  "TODO: upgrade jwt-decode when moving to node 18"
95
96
  ],
96
- "version": "3.11.0"
97
+ "version": "3.12.0-next.2"
97
98
  }
@@ -0,0 +1,84 @@
1
+ # AI Assistant Enable Request
2
+
3
+ The AI Assistant Enable Request feature provides support for requesting and approving the enablement of AI assistant capabilities during a meeting. This feature implements a permission-based workflow where one participant can request to enable the AI assistant, and another participant (typically the host or a cohost) can accept or decline that request.
4
+
5
+ ### Structure
6
+
7
+ The AI Enable Request plugin manages the approval workflow for enabling AI assistant functionality in meetings. It handles sending requests, receiving approval events, and processing responses.
8
+
9
+ ### Events
10
+
11
+ The plugin emits events when approval requests are received:
12
+
13
+ ```javascript
14
+ // Listen for approval request events
15
+ meeting.aiEnableRequest.on('approval-request-arrived', (event) => {
16
+ const {actionType, isApprover, isInitiator, initiatorId, approverId, url} = event;
17
+
18
+ if (isApprover) {
19
+ // This participant received a request
20
+ console.log(`Received ${actionType} from ${initiatorId}`);
21
+ }
22
+
23
+ if (isInitiator) {
24
+ // This participant sent a request that was processed
25
+ console.log(`Your ${actionType} request was processed`);
26
+ }
27
+ });
28
+ ```
29
+
30
+ ### Initiator (requester) functionality
31
+
32
+ The following method is available to participants who want to request AI assistant enablement:
33
+
34
+ ```javascript
35
+ // Request to enable AI assistant, specifying the approver's participant ID
36
+ meeting.aiEnableRequest.requestEnableAIAssistant({
37
+ approverId: 'approver-participant-id',
38
+ });
39
+ ```
40
+
41
+ ### Approver functionality
42
+
43
+ The following methods are available to participants who receive AI assistant enable requests:
44
+
45
+ ```javascript
46
+ // Accept an AI assistant enable request
47
+ // url and initiatorId come from the 'approval-request-arrived' event
48
+ meeting.aiEnableRequest.acceptEnableAIAssistantRequest({
49
+ url: approvalUrl,
50
+ initiatorId,
51
+ });
52
+
53
+ // Decline an AI assistant enable request
54
+ meeting.aiEnableRequest.declineEnableAIAssistantRequest({
55
+ url: approvalUrl,
56
+ initiatorId,
57
+ });
58
+
59
+ // Decline all pending AI assistant enable requests
60
+ meeting.aiEnableRequest.declineAllEnableAIAssistantRequests({
61
+ url: approvalUrl,
62
+ initiatorId,
63
+ });
64
+ ```
65
+
66
+ ### Example workflow
67
+
68
+ ```javascript
69
+ // Participant A requests to enable AI assistant
70
+ await meeting.aiEnableRequest.requestEnableAIAssistant({
71
+ approverId: participantB.id,
72
+ });
73
+
74
+ // Participant B receives the request via event
75
+ meeting.aiEnableRequest.on('approval-request-arrived', async (event) => {
76
+ if (event.isApprover && event.actionType === 'REQUESTED') {
77
+ // User can now choose to accept or decline
78
+ await meeting.aiEnableRequest.acceptEnableAIAssistantRequest({
79
+ url: event.url,
80
+ initiatorId: event.initiatorId,
81
+ });
82
+ }
83
+ });
84
+ ```
@@ -0,0 +1,170 @@
1
+ /*!
2
+ * Copyright (c) 2015-2026 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+ import {WebexPlugin} from '@webex/webex-core';
5
+ import {AI_ENABLE_REQUEST, HTTP_VERBS, LOCUSEVENT, MEETINGS} from '../constants';
6
+
7
+ /**
8
+ * @class AIEnableRequest
9
+ */
10
+ const AIEnableRequest = WebexPlugin.extend({
11
+ namespace: MEETINGS,
12
+
13
+ props: {
14
+ approvalUrl: 'string',
15
+ selfParticipantId: 'string',
16
+ hasSubscribedToEvents: 'boolean',
17
+ },
18
+
19
+ /**
20
+ * Update the approval url for handoff
21
+ * @param {string} approvalUrl
22
+ * @returns {void}
23
+ */
24
+ approvalUrlUpdate(approvalUrl) {
25
+ this.set('approvalUrl', approvalUrl);
26
+ },
27
+
28
+ /**
29
+ * Update the self participant id
30
+ * @param {string} selfParticipantId
31
+ * @returns {void}
32
+ */
33
+ selfParticipantIdUpdate(selfParticipantId) {
34
+ this.set('selfParticipantId', selfParticipantId);
35
+
36
+ if (!this.hasSubscribedToEvents) {
37
+ this.listenToApprovalRequests();
38
+ this.set('hasSubscribedToEvents', true);
39
+ }
40
+ },
41
+
42
+ /**
43
+ * Listen to locus approval request events and trigger a new event with necessary details when an AI enablement approval request is received
44
+ * @returns {void}
45
+ */
46
+ listenToApprovalRequests() {
47
+ this.listenTo(this.webex.internal.mercury, `event:${LOCUSEVENT.APPROVAL_REQUEST}`, (event) => {
48
+ if (event?.data?.approval?.resourceType === AI_ENABLE_REQUEST.RESOURCE_TYPE) {
49
+ const {receivers, initiator, actionType, url} = event.data.approval;
50
+ const approverId = receivers?.[0]?.participantId;
51
+ const isApprover = !!approverId && approverId === this.selfParticipantId;
52
+ const initiatorId = initiator?.participantId;
53
+ const isInitiator = !!initiatorId && initiatorId === this.selfParticipantId;
54
+ if (
55
+ !isApprover &&
56
+ !isInitiator &&
57
+ // Not just the initiator needs to know about declined all because
58
+ // all future requests will be rejected if the meeting is in the declined all state
59
+ actionType !== AI_ENABLE_REQUEST.ACTION_TYPE.DECLINED_ALL
60
+ ) {
61
+ return;
62
+ }
63
+ this.trigger(AI_ENABLE_REQUEST.EVENTS.APPROVAL_REQUEST_ARRIVED, {
64
+ actionType,
65
+ isApprover,
66
+ isInitiator,
67
+ initiatorId,
68
+ approverId,
69
+ url,
70
+ });
71
+ }
72
+ });
73
+ },
74
+
75
+ /**
76
+ * Helper method to send AI assistant request
77
+ * @param {Object} params
78
+ * @param {string} params.url approval url
79
+ * @param {string} params.actionType the type of action (REQUESTED, ACCEPTED, DECLINED, DECLINED_ALL)
80
+ * @param {string} params.initiatorId
81
+ * @param {string} params.approverId
82
+ * @param {string} params.method HTTP method to use for the request
83
+ * @returns {Promise}
84
+ */
85
+ sendApprovalRequest({url, actionType, initiatorId, approverId, method}) {
86
+ return this.request({
87
+ method,
88
+ uri: url,
89
+ body: {
90
+ actionType,
91
+ resourceType: AI_ENABLE_REQUEST.RESOURCE_TYPE,
92
+ initiator: {
93
+ participantId: initiatorId,
94
+ },
95
+ approver: {
96
+ participantId: approverId,
97
+ },
98
+ },
99
+ });
100
+ },
101
+
102
+ /**
103
+ * Sends a request to enable the AI assistant
104
+ * @param {Object} params
105
+ * @param {string} params.approverId
106
+ * @returns {Promise}
107
+ */
108
+ requestEnableAIAssistant({approverId}) {
109
+ return this.sendApprovalRequest({
110
+ url: this.approvalUrl,
111
+ actionType: AI_ENABLE_REQUEST.ACTION_TYPE.REQUESTED,
112
+ initiatorId: this.selfParticipantId,
113
+ approverId,
114
+ method: HTTP_VERBS.POST,
115
+ });
116
+ },
117
+
118
+ /**
119
+ * Sends a request to accept the AI assistant enablement
120
+ * @param {Object} params
121
+ * @param {string} params.url approval url
122
+ * @param {string} params.initiatorId
123
+ * @returns {Promise}
124
+ */
125
+ acceptEnableAIAssistantRequest({url, initiatorId}) {
126
+ return this.sendApprovalRequest({
127
+ url,
128
+ actionType: AI_ENABLE_REQUEST.ACTION_TYPE.ACCEPTED,
129
+ initiatorId,
130
+ approverId: this.selfParticipantId,
131
+ method: HTTP_VERBS.PUT,
132
+ });
133
+ },
134
+
135
+ /**
136
+ * Sends a request to decline the AI assistant enablement
137
+ * @param {Object} params
138
+ * @param {string} params.url approval url
139
+ * @param {string} params.initiatorId
140
+ * @returns {Promise}
141
+ */
142
+ declineEnableAIAssistantRequest({url, initiatorId}) {
143
+ return this.sendApprovalRequest({
144
+ url,
145
+ actionType: AI_ENABLE_REQUEST.ACTION_TYPE.DECLINED,
146
+ initiatorId,
147
+ approverId: this.selfParticipantId,
148
+ method: HTTP_VERBS.PUT,
149
+ });
150
+ },
151
+
152
+ /**
153
+ * Sends a request to decline all AI assistant enablement requests
154
+ * @param {Object} params
155
+ * @param {string} params.url approval url
156
+ * @param {string} params.initiatorId
157
+ * @returns {Promise}
158
+ */
159
+ declineAllEnableAIAssistantRequests({url, initiatorId}) {
160
+ return this.sendApprovalRequest({
161
+ url,
162
+ actionType: AI_ENABLE_REQUEST.ACTION_TYPE.DECLINED_ALL,
163
+ initiatorId,
164
+ approverId: this.selfParticipantId,
165
+ method: HTTP_VERBS.PUT,
166
+ });
167
+ },
168
+ });
169
+
170
+ export default AIEnableRequest;
@@ -0,0 +1,25 @@
1
+ /* eslint-disable import/prefer-default-export */
2
+ import Meeting from '../meeting';
3
+
4
+ export const getAIEnablementApprover = (meeting: Meeting) => {
5
+ const members = Object.values(meeting.members.membersCollection.members);
6
+
7
+ // find the host, if the host has the capability, return the host id
8
+ const host = members.find((member) => member.roles.moderator && member.canApproveAIEnablement);
9
+
10
+ if (host) {
11
+ return host.id;
12
+ }
13
+
14
+ // find the cohosts, if the host has the capability, return the host id
15
+ const cohosts = members
16
+ .filter((member) => member.roles.cohost && member.canApproveAIEnablement)
17
+ .sort((a, b) => a.id.localeCompare(b.id));
18
+
19
+ if (cohosts.length > 0) {
20
+ return cohosts[0].id;
21
+ }
22
+
23
+ // if no cohost has the capability, return null
24
+ return null;
25
+ };
@@ -13,7 +13,7 @@ import {
13
13
  } from './constants';
14
14
 
15
15
  import {StrokeData, RequestData, IAnnotationChannel, CommandRequestBody} from './annotation.types';
16
- import {HTTP_VERBS} from '../constants';
16
+ import {HTTP_VERBS, LOCUSEVENT, LLM_PRACTICE_SESSION} from '../constants';
17
17
 
18
18
  /**
19
19
  * @description Annotation to handle LLM and Mercury message and locus API
@@ -69,7 +69,7 @@ class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
69
69
  */
70
70
  private eventCommandProcessor(e) {
71
71
  if (
72
- e?.data?.eventType === 'locus.approval_request' &&
72
+ e?.data?.eventType === LOCUSEVENT.APPROVAL_REQUEST &&
73
73
  e?.data?.approval?.resourceType === ANNOTATION_RESOURCE_TYPE &&
74
74
  e?.data?.approval?.actionType
75
75
  ) {
@@ -110,12 +110,18 @@ class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
110
110
  if (!this.hasSubscribedToEvents) {
111
111
  // @ts-ignore
112
112
  this.webex.internal.mercury.on(
113
- 'event:locus.approval_request',
113
+ `event:${LOCUSEVENT.APPROVAL_REQUEST}`,
114
114
  this.eventCommandProcessor,
115
115
  this
116
116
  );
117
117
  // @ts-ignore
118
118
  this.webex.internal.llm.on('event:relay.event', this.eventDataProcessor, this);
119
+ // @ts-ignore
120
+ this.webex.internal.llm.on(
121
+ `event:relay.event:${LLM_PRACTICE_SESSION}`,
122
+ this.eventDataProcessor,
123
+ this
124
+ );
119
125
  this.hasSubscribedToEvents = true;
120
126
  }
121
127
  }
@@ -127,11 +133,18 @@ class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
127
133
  public deregisterEvents() {
128
134
  if (this.hasSubscribedToEvents) {
129
135
  // @ts-ignore
130
- this.webex.internal.mercury.off('event:locus.approval_request', this.eventCommandProcessor);
136
+ this.webex.internal.mercury.off(
137
+ `event:${LOCUSEVENT.APPROVAL_REQUEST}`,
138
+ this.eventCommandProcessor
139
+ );
131
140
 
132
141
  // @ts-ignore
133
142
  this.webex.internal.llm.off('event:relay.event', this.eventDataProcessor);
134
-
143
+ // @ts-ignore
144
+ this.webex.internal.llm.off(
145
+ `event:relay.event:${LLM_PRACTICE_SESSION}`,
146
+ this.eventDataProcessor
147
+ );
135
148
  this.hasSubscribedToEvents = false;
136
149
  }
137
150
  }
@@ -303,12 +316,19 @@ class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
303
316
  * @returns {void}
304
317
  */
305
318
  private publishEncrypted(encryptedContent: string, strokeData: StrokeData) {
319
+ // @ts-ignore
320
+ const {llm} = this.webex.internal;
321
+ const isPracticeSessionConnected = llm.isConnected(LLM_PRACTICE_SESSION);
322
+ const socket =
323
+ (isPracticeSessionConnected && llm.getSocket(LLM_PRACTICE_SESSION)) || llm.socket;
324
+ const binding =
325
+ (isPracticeSessionConnected && llm.getBinding(LLM_PRACTICE_SESSION)) || llm.getBinding();
306
326
  const data = {
307
327
  id: `${this.seqNum}`,
308
328
  type: 'publishRequest',
309
329
  recipients: {
310
330
  // @ts-ignore
311
- route: this.webex.internal.llm.getBinding(),
331
+ route: binding,
312
332
  },
313
333
  headers: {
314
334
  to: strokeData.toUserId,
@@ -336,7 +356,7 @@ class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
336
356
  };
337
357
 
338
358
  // @ts-ignore
339
- this.webex.internal.llm.socket.send(data);
359
+ socket.send(data);
340
360
  this.seqNum += 1;
341
361
  }
342
362
  }
package/src/config.ts CHANGED
@@ -88,6 +88,7 @@ export default {
88
88
  enableAdhocMeetings: true,
89
89
  enableTcpReachability: false,
90
90
  enableTlsReachability: false,
91
+ storeLocusHashTreeEventsForDebugging: false,
91
92
  },
92
93
  degradationPreferences: {
93
94
  maxMacroblocksLimit: 8192,
@@ -101,5 +102,8 @@ export default {
101
102
  stopIceGatheringAfterFirstRelayCandidate: false,
102
103
  enableAudioTwccForMultistream: false,
103
104
  enablePerUdpUrlReachability: false, // true: separate peer connection per each UDP URL; false: single peer connection for all URLs
105
+ locus: {
106
+ excludedDataSets: ['attendees'], // attendees data set only applies to webinar attendees and we never really need that
107
+ },
104
108
  },
105
109
  };