@webex/plugin-meetings 3.0.0-beta.150 → 3.0.0-beta.151

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.
@@ -186,7 +186,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
186
186
  sessionId: this.sessionId
187
187
  });
188
188
  },
189
- version: "3.0.0-beta.150"
189
+ version: "3.0.0-beta.151"
190
190
  });
191
191
  var _default = Breakout;
192
192
  exports.default = _default;
@@ -315,6 +315,23 @@ var Breakouts = _webexCore.WebexPlugin.extend({
315
315
  });
316
316
  });
317
317
  },
318
+ /**
319
+ * get current breakout is in progress or not
320
+ * @returns {boolean}
321
+ */
322
+ isBreakoutInProgress: function isBreakoutInProgress() {
323
+ var _this$groups2, _this$groups2$;
324
+ var currentStatus = ((_this$groups2 = this.groups) === null || _this$groups2 === void 0 ? void 0 : (_this$groups2$ = _this$groups2[0]) === null || _this$groups2$ === void 0 ? void 0 : _this$groups2$.status) || this.status;
325
+ return currentStatus === _constants.BREAKOUTS.STATUS.OPEN || currentStatus === _constants.BREAKOUTS.STATUS.CLOSING;
326
+ },
327
+ /**
328
+ * get current breakout is in closing or not
329
+ * @returns {boolean}
330
+ */
331
+ isBreakoutIClosing: function isBreakoutIClosing() {
332
+ var _this$groups3, _this$groups3$;
333
+ return (((_this$groups3 = this.groups) === null || _this$groups3 === void 0 ? void 0 : (_this$groups3$ = _this$groups3[0]) === null || _this$groups3$ === void 0 ? void 0 : _this$groups3$.status) || this.status) === _constants.BREAKOUTS.STATUS.CLOSING;
334
+ },
318
335
  /**
319
336
  * Updates the information about the current breakout
320
337
  * @param {Object} params
@@ -323,7 +340,6 @@ var Breakouts = _webexCore.WebexPlugin.extend({
323
340
  updateBreakout: function updateBreakout(params) {
324
341
  var _this$set;
325
342
  this.set(params);
326
-
327
343
  // These values are set manually so they are unset when they are not included in params
328
344
  this.set('groups', params.groups);
329
345
  this.set('startTime', params.startTime);
@@ -336,6 +352,9 @@ var Breakouts = _webexCore.WebexPlugin.extend({
336
352
  sessionType: params.sessionType,
337
353
  url: params.url
338
354
  }, (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.ACTIVE, false), (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.ALLOWED, false), (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.ALLOWED, false), (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT, false), (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.REQUESTED, false), _this$set));
355
+ if (!this.isBreakoutInProgress()) {
356
+ this.clearBreakouts();
357
+ }
339
358
  if (this.currentBreakoutSession.previous('sessionId') !== this.currentBreakoutSession.sessionId || this.currentBreakoutSession.previous('groupId') !== this.currentBreakoutSession.groupId) {
340
359
  // should report joined session changed
341
360
  var meeting = this.webex.meetings.getMeetingByType(_constants._ID_, this.meetingId);
@@ -354,6 +373,12 @@ var Breakouts = _webexCore.WebexPlugin.extend({
354
373
  updateBreakoutSessions: function updateBreakoutSessions(payload) {
355
374
  var _this7 = this;
356
375
  var breakouts = {};
376
+ if (this.isBreakoutIClosing()) {
377
+ // fix issue: don't clear/update breakouts collection when in closing since locus DTO will send undefined or
378
+ // only the MAIN session info here, if just update it, will miss the breakout roster info during
379
+ // count down to end breakouts
380
+ return;
381
+ }
357
382
  if (payload.breakoutSessions) {
358
383
  (0, _forEach2.default)(_constants.BREAKOUTS.SESSION_STATES, function (state) {
359
384
  (0, _forEach2.default)(payload.breakoutSessions[state], function (breakout) {
@@ -379,6 +404,15 @@ var Breakouts = _webexCore.WebexPlugin.extend({
379
404
  });
380
405
  this.breakouts.set((0, _values.default)(breakouts));
381
406
  },
407
+ /**
408
+ * clear breakouts collection
409
+ * @returns {void}
410
+ */
411
+ clearBreakouts: function clearBreakouts() {
412
+ if (this.breakouts.length > 0) {
413
+ this.breakouts.reset();
414
+ }
415
+ },
382
416
  /**
383
417
  * get main session
384
418
  * @returns {Breakout}
@@ -1005,7 +1039,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
1005
1039
  this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
1006
1040
  }
1007
1041
  },
1008
- version: "3.0.0-beta.150"
1042
+ version: "3.0.0-beta.151"
1009
1043
  });
1010
1044
  var _default = Breakouts;
1011
1045
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["Breakouts","WebexPlugin","extend","namespace","MEETINGS","breakoutRequest","BreakoutRequest","collections","breakouts","BreakoutCollection","props","allowBackToMain","delayCloseTime","enableBreakoutSession","hasBreakoutPreAssignments","groupId","name","sessionId","sessionType","startTime","status","url","locusUrl","breakoutServiceUrl","mainLocusUrl","groups","manageGroups","preAssignments","editLock","intervalID","meetingId","canManageBreakouts","children","currentBreakoutSession","Breakout","derived","isInMainSession","cache","deps","fn","BREAKOUTS","SESSION_TYPES","MAIN","isActiveBreakout","BREAKOUT","STATUS","OPEN","CLOSING","breakoutGroupId","length","CLOSED","id","breakoutStatus","shouldQueryPreAssignments","initialize","listenTo","trigger","EVENTS","BREAKOUTS_CLOSING","queryPreAssignments","debouncedQueryRosters","queryRosters","leading","trailing","breakout","triggerReturnToMainEvent","listenToCurrentSessionTypeChange","listenToBroadcastMessages","listenToBreakoutRosters","listenToBreakoutHelp","webex","cleanUp","stopListening","locusUrlUpdate","set","updateCanManageBreakouts","breakoutServiceUrlUpdate","request","uri","qs","btoa","then","result","rosters","body","forEach","locus","handleRosterUpdate","MEMBERS_UPDATE","catch","error","LoggerProxy","logger","controls","session","get","parseRoster","isSessionTypeChangedFromSessionToMain","LEAVE_BREAKOUT","internal","llm","event","data","senderUserId","sentTime","message","MESSAGE","mercury","participant","ASK_FOR_HELP","updateBreakout","params","current","SESSION_STATES","ACTIVE","ALLOWED","ASSIGNED_CURRENT","REQUESTED","previous","meeting","meetings","getMeetingByType","_ID_","breakoutEvent","onBreakoutJoinResponse","currentSession","breakoutMoveId","updateBreakoutSessions","payload","breakoutSessions","state","ASSIGNED","requestedLastModifiedTime","modifiedAt","getMainSession","mainSession","filter","isMain","Error","askAllToReturn","method","HTTP_VERBS","POST","broadcast","options","enableBreakouts","err","reject","toggleBreakout","enable","undefined","info","doToggleBreakout","token","editlock","PUT","_setManageGroups","breakoutInfo","create","boServiceErrorHandler","_clearEditLockInfo","clearSessions","action","ACTION","DELETE","start","START","allowToJoinLater","refresh","end","CLOSE","update","unlockEdit","getBreakout","GET","keepEditLockAlive","enableAndLockBreakout","lockBreakout","hasBreakoutLocked","EDIT_LOCK_STATUS","LOCKED","ttl","DEFAULT_TTL","window","clearInterval","setInterval","unLockEditBreakout","assign","sessions","internalSessions","map","item","assigned","memberIds","assignedEmails","emails","anyoneCanJoin","anyone","PRE_ASSIGNMENTS_UPDATE","dynamicAssign","updatedSessions","participants","targetState","requested","ASK_RETURN_TO_MAIN"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin} from '@webex/webex-core';\nimport {debounce, forEach} from 'lodash';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport {BREAKOUTS, MEETINGS, HTTP_VERBS, _ID_} from '../constants';\n\nimport Breakout from './breakout';\nimport BreakoutCollection from './collection';\nimport BreakoutRequest from './request';\nimport breakoutEvent from './events';\nimport {boServiceErrorHandler, isSessionTypeChangedFromSessionToMain} from './utils';\n\n/**\n * @class Breakouts\n */\nconst Breakouts = WebexPlugin.extend({\n namespace: MEETINGS,\n breakoutRequest: BreakoutRequest,\n collections: {\n breakouts: BreakoutCollection,\n },\n\n props: {\n allowBackToMain: 'boolean', // only present when in a breakout session\n delayCloseTime: 'number', // appears once breakouts start\n enableBreakoutSession: 'boolean', // appears from the moment you enable breakouts\n hasBreakoutPreAssignments: 'boolean', // appears from the moment you enable breakouts\n groupId: 'string', // appears from the moment you enable breakouts\n name: 'string', // only present when in a breakout session\n sessionId: 'string', // appears from the moment you enable breakouts\n sessionType: 'string', // appears from the moment you enable breakouts\n startTime: 'string', // appears once breakouts start\n status: 'string', // only present when in a breakout session\n url: 'string', // appears from the moment you enable breakouts\n locusUrl: 'string', // the current locus url\n breakoutServiceUrl: 'string', // the current breakout resource url\n mainLocusUrl: 'string', // the locus url of the main session\n groups: 'array', // appears when create breakouts\n manageGroups: 'array', // appears when manage breakouts\n preAssignments: 'array', // appears when getPreAssignments info hasBreakoutPreAssignments = true\n editLock: 'object', // appears when getBreakout info editlock = true\n intervalID: 'number',\n meetingId: 'string',\n canManageBreakouts: 'boolean', // appear the ability to manage breakouts\n },\n children: {\n currentBreakoutSession: Breakout,\n },\n\n derived: {\n isInMainSession: {\n cache: false,\n deps: ['sessionType'],\n /**\n * Returns true if the user is in the main session\n * @returns {boolean}\n */\n fn() {\n return this.sessionType === BREAKOUTS.SESSION_TYPES.MAIN;\n },\n },\n isActiveBreakout: {\n cache: false, // fix issue: sometimes the derived will not change even if the deps changed\n deps: ['sessionType', 'status'],\n /**\n * Returns true if the breakout status is active\n * @returns {boolean}\n */\n fn() {\n return (\n this.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT &&\n (this.status === BREAKOUTS.STATUS.OPEN || this.status === BREAKOUTS.STATUS.CLOSING)\n );\n },\n },\n breakoutGroupId: {\n cache: false,\n deps: ['manageGroups'],\n /**\n * Returns the active group id\n * @returns {boolean}\n */\n fn() {\n if (this.manageGroups?.length) {\n return this.manageGroups[0].status !== BREAKOUTS.STATUS.CLOSED\n ? this.manageGroups[0].id\n : '';\n }\n\n return '';\n },\n },\n breakoutStatus: {\n cache: true,\n deps: ['isInMainSession', 'status', 'groups'],\n /**\n * Returns the breakout status\n * @returns {boolean}\n */\n fn() {\n return this.isInMainSession ? this.groups?.[0]?.status : this.status;\n },\n },\n shouldQueryPreAssignments: {\n cache: false,\n deps: ['canManageBreakouts', 'enableBreakoutSession', 'hasBreakoutPreAssignments'],\n /**\n * Returns should query preAssignments or not\n * @returns {boolean}\n */\n fn() {\n return !!(\n this.canManageBreakouts &&\n this.enableBreakoutSession &&\n this.hasBreakoutPreAssignments\n );\n },\n },\n },\n\n /**\n * initialize for the breakouts\n * @returns {void}\n */\n initialize() {\n this.listenTo(this, 'change:breakoutStatus', () => {\n if (this.breakoutStatus === BREAKOUTS.STATUS.CLOSING) {\n this.trigger(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);\n }\n });\n this.listenTo(this, 'change:shouldQueryPreAssignments', () => {\n if (this.shouldQueryPreAssignments && !this.preAssignments) {\n this.queryPreAssignments();\n }\n });\n this.debouncedQueryRosters = debounce(this.queryRosters, 10, {\n leading: true,\n trailing: false,\n });\n this.listenTo(this.breakouts, 'add', (breakout) => {\n this.debouncedQueryRosters();\n this.triggerReturnToMainEvent(breakout);\n });\n this.listenTo(this.breakouts, 'change:requestedLastModifiedTime', (breakout) => {\n this.triggerReturnToMainEvent(breakout);\n });\n this.listenToCurrentSessionTypeChange();\n this.listenToBroadcastMessages();\n this.listenToBreakoutRosters();\n this.listenToBreakoutHelp();\n // @ts-ignore\n this.breakoutRequest = new BreakoutRequest({webex: this.webex});\n },\n\n /**\n * Calls this to clean up listeners\n * @returns {void}\n */\n cleanUp() {\n this.stopListening();\n },\n\n /**\n * Update the current locus url of the meeting\n * @param {string} locusUrl // locus url\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n const {isInMainSession, mainLocusUrl} = this;\n if (isInMainSession || !mainLocusUrl) {\n this.set('mainLocusUrl', locusUrl);\n }\n },\n\n /**\n * Update whether self is moderator/cohost or not\n * @param {boolean} canManageBreakouts\n * @returns {void}\n */\n updateCanManageBreakouts(canManageBreakouts) {\n this.set('canManageBreakouts', canManageBreakouts);\n },\n\n /**\n * Update the current breakout resource url\n * @param {string} breakoutServiceUrl\n * @returns {void}\n */\n breakoutServiceUrlUpdate(breakoutServiceUrl) {\n this.set('breakoutServiceUrl', `${breakoutServiceUrl}/breakout/`);\n },\n\n /**\n * The initial roster lists need to be queried because you don't\n * get a breakout.roster event when you join the meeting\n * @returns {void}\n */\n queryRosters() {\n this.webex\n .request({uri: `${this.url}/roster`, qs: {locusUrl: btoa(this.locusUrl)}})\n .then((result) => {\n const {\n body: {rosters},\n } = result;\n\n rosters?.forEach(({locus}) => {\n this.handleRosterUpdate(locus);\n });\n\n this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:breakouts#queryRosters failed', error);\n });\n },\n\n /**\n *\n * @param {Object} locus // locus object\n * @returns {void}\n */\n handleRosterUpdate(locus) {\n const sessionId = locus.controls?.breakout?.sessionId;\n\n const session = this.breakouts.get(sessionId);\n\n if (!session) {\n return;\n }\n\n session.parseRoster(locus);\n },\n /**\n *Sets up listener for currentBreakoutSession sessionType changed\n * @returns {void}\n */\n listenToCurrentSessionTypeChange(): void {\n this.listenTo(\n this.currentBreakoutSession,\n 'change:sessionType',\n (currentBreakoutSession, sessionType) => {\n if (isSessionTypeChangedFromSessionToMain(currentBreakoutSession, sessionType)) {\n this.trigger(BREAKOUTS.EVENTS.LEAVE_BREAKOUT);\n }\n }\n );\n },\n\n /**\n * Sets up listener for broadcast messages sent to the breakout session\n * @returns {void}\n */\n listenToBroadcastMessages() {\n this.listenTo(this.webex.internal.llm, 'event:breakout.message', (event) => {\n const {\n data: {senderUserId, sentTime, message},\n } = event;\n\n this.trigger(BREAKOUTS.EVENTS.MESSAGE, {\n senderUserId,\n sentTime,\n message,\n // FIXME: This is only the current sessionId\n // We'd need to check that the dataChannelUrl is still the same\n // to guarantee that this message was sent to this session\n sessionId: this.currentBreakoutSession.sessionId,\n });\n });\n },\n\n /**\n * Sets up a listener for roster messags from mecury\n * @returns {void}\n */\n listenToBreakoutRosters() {\n this.listenTo(this.webex.internal.mercury, 'event:breakout.roster', (event) => {\n this.handleRosterUpdate(event.data.locus);\n this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);\n });\n },\n\n /**\n * Sets up a listener for ask help notify from mecury\n * @returns {void}\n */\n listenToBreakoutHelp() {\n this.listenTo(this.webex.internal.mercury, 'event:breakout.help', (event) => {\n const {\n data: {participant, sessionId},\n } = event;\n this.trigger(BREAKOUTS.EVENTS.ASK_FOR_HELP, {participant, sessionId});\n });\n },\n\n /**\n * Updates the information about the current breakout\n * @param {Object} params\n * @returns {void}\n */\n updateBreakout(params) {\n this.set(params);\n\n // These values are set manually so they are unset when they are not included in params\n this.set('groups', params.groups);\n this.set('startTime', params.startTime);\n this.set('status', params.status);\n\n this.set('currentBreakoutSession', {\n sessionId: params.sessionId,\n groupId: params.groupId,\n name: params.name,\n current: true,\n sessionType: params.sessionType,\n url: params.url,\n [BREAKOUTS.SESSION_STATES.ACTIVE]: false,\n [BREAKOUTS.SESSION_STATES.ALLOWED]: false,\n [BREAKOUTS.SESSION_STATES.ALLOWED]: false,\n [BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT]: false,\n [BREAKOUTS.SESSION_STATES.REQUESTED]: false,\n });\n\n if (\n this.currentBreakoutSession.previous('sessionId') !== this.currentBreakoutSession.sessionId ||\n this.currentBreakoutSession.previous('groupId') !== this.currentBreakoutSession.groupId\n ) {\n // should report joined session changed\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n breakoutEvent.onBreakoutJoinResponse({\n currentSession: this.currentBreakoutSession,\n meeting,\n breakoutMoveId: params.breakoutMoveId,\n });\n }\n },\n\n /**\n * Updates the information about available breakouts\n * @param {Object} payload\n * @returns {void}\n */\n updateBreakoutSessions(payload) {\n const breakouts = {};\n\n if (payload.breakoutSessions) {\n forEach(BREAKOUTS.SESSION_STATES, (state) => {\n forEach(payload.breakoutSessions[state], (breakout) => {\n const {sessionId} = breakout;\n\n if (!breakouts[sessionId]) {\n breakouts[sessionId] = breakout;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ACTIVE] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ALLOWED] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.REQUESTED] = false;\n }\n\n breakouts[sessionId][state] = true;\n\n if (state === BREAKOUTS.SESSION_STATES.REQUESTED) {\n breakouts[sessionId].requestedLastModifiedTime = breakout.modifiedAt;\n }\n });\n });\n }\n\n forEach(breakouts, (breakout: typeof Breakout) => {\n // eslint-disable-next-line no-param-reassign\n breakout.url = this.url;\n });\n\n this.breakouts.set(Object.values(breakouts));\n },\n /**\n * get main session\n * @returns {Breakout}\n */\n getMainSession() {\n if (this.isInMainSession) {\n return this.currentBreakoutSession;\n }\n\n const mainSession = this.breakouts.filter((breakout) => breakout.isMain)[0];\n if (!mainSession) {\n throw new Error('no main session found');\n }\n\n return mainSession;\n },\n /**\n * Host/CoHost ask all participants return to main session\n * @returns {Promise}\n */\n askAllToReturn() {\n const mainSession = this.getMainSession();\n\n return this.webex.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/requestMove`,\n body: {\n groupId: mainSession.groupId,\n sessionId: mainSession.sessionId,\n },\n });\n },\n\n /**\n * Broadcast message to all breakout session's participants\n * @param {String} message\n * @param {Object} options\n * @returns {Promise}\n */\n broadcast(message, options) {\n const {breakoutGroupId} = this;\n if (!breakoutGroupId) {\n throw new Error('Cannot broadcast, no breakout session found');\n }\n\n return this.breakoutRequest.broadcast({\n url: this.url,\n message,\n options,\n groupId: breakoutGroupId,\n });\n },\n /**\n * Make enable breakout resource\n * @returns {Promise}\n */\n enableBreakouts() {\n if (this.breakoutServiceUrl) {\n // @ts-ignore\n return this.webex\n .request({\n method: HTTP_VERBS.POST,\n uri: this.breakoutServiceUrl,\n body: {\n locusUrl: this.locusUrl,\n },\n })\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#touchBreakout --> Error provisioning error ${err}`\n );\n throw err;\n });\n }\n\n return Promise.reject(new Error(`enableBreakouts: the breakoutServiceUrl is empty`));\n },\n\n /**\n * Make the meeting enable or disable breakout session\n * @param {boolean} enable\n * @returns {Promise}\n */\n async toggleBreakout(enable) {\n if (this.enableBreakoutSession === undefined) {\n const info = await this.enableBreakouts();\n // first time enable, set the initial data\n this.updateBreakout(info?.body);\n if (!enable) {\n await this.doToggleBreakout(enable);\n }\n } else {\n await this.doToggleBreakout(enable);\n }\n },\n\n /**\n * do toggle meeting breakout session enable or disable\n * @param {boolean} enable\n * @returns {Promise}\n */\n doToggleBreakout(enable) {\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{enableBreakoutSession: enable},\n };\n\n // @ts-ignore\n return this.webex.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n });\n },\n\n /**\n * set groups to manageGroups prop\n * @param {Object} breakoutInfo -- breakout groups\n * @returns {void}\n */\n _setManageGroups(breakoutInfo) {\n if (breakoutInfo?.body?.groups) {\n this.set('manageGroups', breakoutInfo.body.groups);\n }\n },\n\n /**\n * Create new breakout sessions\n * @param {object} params -- breakout session group\n * @returns {Promise}\n */\n async create(params) {\n const payload = {...params};\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{groups: [payload]},\n };\n // @ts-ignore\n const breakoutInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#create'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n // clear edit lock info after save breakout session info\n this._clearEditLockInfo();\n\n return breakoutInfo;\n },\n\n /**\n * Delete all breakout sessions\n * @returns {Promise}\n */\n async clearSessions() {\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{groups: [{action: BREAKOUTS.ACTION.DELETE}]},\n };\n // @ts-ignore\n const breakoutInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#clearSessions'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost starts breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n async start(params = {}) {\n const action = BREAKOUTS.ACTION.START;\n const payload = {\n id: this.breakoutGroupId,\n action,\n allowBackToMain: false,\n allowToJoinLater: false,\n ...params,\n };\n\n const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#start'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost ends breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n async end(params = {}) {\n const {delayCloseTime, breakoutGroupId: id} = this;\n const action = BREAKOUTS.ACTION.CLOSE;\n const payload = {\n id,\n action,\n delayCloseTime,\n ...params,\n };\n\n const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#end'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost update breakout sessions\n * @param {Object} params\n * @param {String} params.id\n * @param {Boolean} unlockEdit\n * @returns {Promise}\n */\n async update(params: {id: string}, unlockEdit?: boolean) {\n if (!params.id) {\n return Promise.reject(new Error('Missing breakout group id'));\n }\n const payload = {...params};\n\n const body = {\n ...(this.editLock?.token\n ? {editlock: {token: this.editLock.token, refresh: !unlockEdit}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#update'));\n });\n\n if (unlockEdit) {\n this._clearEditLockInfo();\n }\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * get existed breakout sessions\n * @param {boolean} editlock -- lock operations of the breakout sessions\n * @returns {Promise}\n */\n async getBreakout(editlock) {\n const breakout = await this.request({\n method: HTTP_VERBS.GET,\n uri: this.url + (editlock ? `?editlock=${editlock}` : ''),\n });\n\n this._setManageGroups(breakout);\n if (editlock && breakout.body?.editlock?.token) {\n this.set('editLock', breakout.body.editlock);\n this.keepEditLockAlive();\n }\n\n return breakout;\n },\n\n /**\n * enable and edit lock breakout\n * @returns {void}\n */\n async enableAndLockBreakout() {\n if (this.enableBreakoutSession) {\n this.lockBreakout();\n } else {\n const info = await this.enableBreakouts();\n\n if (info.body) {\n this.lockBreakout();\n }\n }\n },\n\n /**\n * breakout edit locked by yourself or not\n * @returns {boolean}\n */\n hasBreakoutLocked() {\n return (\n this.editLock &&\n this.editLock.token &&\n this.editLock.state === BREAKOUTS.EDIT_LOCK_STATUS.LOCKED\n );\n },\n\n /**\n * send breakout edit lock\n * @returns {void}\n */\n async lockBreakout() {\n if (this.editLock && !!this.editLock.token) {\n if (this.editLock.state === BREAKOUTS.EDIT_LOCK_STATUS.LOCKED) {\n throw new Error('Breakout already locked');\n } else {\n this.keepEditLockAlive();\n }\n } else {\n const breakout = await this.getBreakout(true);\n if (breakout.body?.editlock) {\n this.keepEditLockAlive();\n }\n }\n },\n\n /**\n * keep edit lock alive\n * @returns {void}\n */\n keepEditLockAlive() {\n if (this.editLock && !!this.editLock.token) {\n const ttl = this.editLock.ttl < 30 ? BREAKOUTS.DEFAULT_TTL : this.editLock.ttl;\n if (this.intervalID) {\n window.clearInterval(this.intervalID);\n }\n\n this.intervalID = window.setInterval(() => {\n this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.url}/editlock/${this.editLock.token}`,\n }).catch((error) => {\n this._clearEditLockInfo();\n\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#keepEditLockAlive'));\n });\n }, (ttl / 2) * 1000);\n }\n },\n\n /**\n * unlock edit breakout\n * @returns {void}\n */\n unLockEditBreakout() {\n if (this.editLock && !!this.editLock.token) {\n this.request({\n method: HTTP_VERBS.DELETE,\n uri: `${this.url}/editlock/${this.editLock.token}`,\n })\n .then(() => {\n this._clearEditLockInfo();\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#unLockEditBreakout'));\n });\n }\n },\n\n /**\n * clear interval and edit lock info\n * @private\n * @returns {void}\n */\n _clearEditLockInfo() {\n if (this.intervalID) {\n clearInterval(this.intervalID);\n }\n this.set('editLock', {});\n },\n\n /**\n * assign participants to breakout session\n * @param {Array} sessions\n * @returns {void}\n */\n assign(sessions: any[]) {\n const internalSessions = sessions.map((item) => {\n return {\n id: item.id,\n assigned: item.memberIds,\n assignedEmails: item.emails,\n anyoneCanJoin: !!item.anyone,\n };\n });\n\n const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{\n groups: [\n {\n id: this.breakoutGroupId,\n sessions: internalSessions,\n },\n ],\n },\n };\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n });\n },\n\n /**\n * query preAssignments\n * @returns {void}\n */\n queryPreAssignments() {\n this.webex\n .request({uri: `${this.url}/preassignments`, qs: {locusUrl: btoa(this.locusUrl)}})\n .then((result) => {\n if (result.body?.groups) {\n this.set('preAssignments', result.body.groups);\n this.trigger(BREAKOUTS.EVENTS.PRE_ASSIGNMENTS_UPDATE);\n }\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:breakouts#queryPreAssignments failed', error);\n });\n },\n /**\n * assign participants dynamically after breakout sessions started,\n * but currently it only used for admitting participants from lobby into breakout directly\n * @param {Array} sessions\n * @returns {void}\n */\n dynamicAssign(sessions: any[]) {\n const updatedSessions = sessions.map((item) => {\n return {\n id: item.id,\n participants: item.participants,\n targetState: item.targetState,\n };\n });\n\n const body = {\n groups: [\n {\n id: this.breakoutGroupId,\n sessions: updatedSessions,\n },\n ],\n editlock: null,\n };\n\n if (this.editLock && this.editLock.token) {\n body.editlock = this.editLock;\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.url}/dynamicAssign`,\n body,\n });\n },\n /**\n * trigger ASK_RETURN_TO_MAIN event when main session requested\n * @param {Object} breakout\n * @returns {void}\n */\n triggerReturnToMainEvent(breakout) {\n if (breakout.isMain && breakout.requested) {\n this.trigger(BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);\n }\n },\n});\n\nexport default Breakouts;\n"],"mappings":"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"}
1
+ {"version":3,"names":["Breakouts","WebexPlugin","extend","namespace","MEETINGS","breakoutRequest","BreakoutRequest","collections","breakouts","BreakoutCollection","props","allowBackToMain","delayCloseTime","enableBreakoutSession","hasBreakoutPreAssignments","groupId","name","sessionId","sessionType","startTime","status","url","locusUrl","breakoutServiceUrl","mainLocusUrl","groups","manageGroups","preAssignments","editLock","intervalID","meetingId","canManageBreakouts","children","currentBreakoutSession","Breakout","derived","isInMainSession","cache","deps","fn","BREAKOUTS","SESSION_TYPES","MAIN","isActiveBreakout","BREAKOUT","STATUS","OPEN","CLOSING","breakoutGroupId","length","CLOSED","id","breakoutStatus","shouldQueryPreAssignments","initialize","listenTo","trigger","EVENTS","BREAKOUTS_CLOSING","queryPreAssignments","debouncedQueryRosters","queryRosters","leading","trailing","breakout","triggerReturnToMainEvent","listenToCurrentSessionTypeChange","listenToBroadcastMessages","listenToBreakoutRosters","listenToBreakoutHelp","webex","cleanUp","stopListening","locusUrlUpdate","set","updateCanManageBreakouts","breakoutServiceUrlUpdate","request","uri","qs","btoa","then","result","rosters","body","forEach","locus","handleRosterUpdate","MEMBERS_UPDATE","catch","error","LoggerProxy","logger","controls","session","get","parseRoster","isSessionTypeChangedFromSessionToMain","LEAVE_BREAKOUT","internal","llm","event","data","senderUserId","sentTime","message","MESSAGE","mercury","participant","ASK_FOR_HELP","isBreakoutInProgress","currentStatus","isBreakoutIClosing","updateBreakout","params","current","SESSION_STATES","ACTIVE","ALLOWED","ASSIGNED_CURRENT","REQUESTED","clearBreakouts","previous","meeting","meetings","getMeetingByType","_ID_","breakoutEvent","onBreakoutJoinResponse","currentSession","breakoutMoveId","updateBreakoutSessions","payload","breakoutSessions","state","ASSIGNED","requestedLastModifiedTime","modifiedAt","reset","getMainSession","mainSession","filter","isMain","Error","askAllToReturn","method","HTTP_VERBS","POST","broadcast","options","enableBreakouts","err","reject","toggleBreakout","enable","undefined","info","doToggleBreakout","token","editlock","PUT","_setManageGroups","breakoutInfo","create","boServiceErrorHandler","_clearEditLockInfo","clearSessions","action","ACTION","DELETE","start","START","allowToJoinLater","refresh","end","CLOSE","update","unlockEdit","getBreakout","GET","keepEditLockAlive","enableAndLockBreakout","lockBreakout","hasBreakoutLocked","EDIT_LOCK_STATUS","LOCKED","ttl","DEFAULT_TTL","window","clearInterval","setInterval","unLockEditBreakout","assign","sessions","internalSessions","map","item","assigned","memberIds","assignedEmails","emails","anyoneCanJoin","anyone","PRE_ASSIGNMENTS_UPDATE","dynamicAssign","updatedSessions","participants","targetState","requested","ASK_RETURN_TO_MAIN"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin} from '@webex/webex-core';\nimport {debounce, forEach} from 'lodash';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport {BREAKOUTS, MEETINGS, HTTP_VERBS, _ID_} from '../constants';\n\nimport Breakout from './breakout';\nimport BreakoutCollection from './collection';\nimport BreakoutRequest from './request';\nimport breakoutEvent from './events';\nimport {boServiceErrorHandler, isSessionTypeChangedFromSessionToMain} from './utils';\n\n/**\n * @class Breakouts\n */\nconst Breakouts = WebexPlugin.extend({\n namespace: MEETINGS,\n breakoutRequest: BreakoutRequest,\n collections: {\n breakouts: BreakoutCollection,\n },\n\n props: {\n allowBackToMain: 'boolean', // only present when in a breakout session\n delayCloseTime: 'number', // appears once breakouts start\n enableBreakoutSession: 'boolean', // appears from the moment you enable breakouts\n hasBreakoutPreAssignments: 'boolean', // appears from the moment you enable breakouts\n groupId: 'string', // appears from the moment you enable breakouts\n name: 'string', // only present when in a breakout session\n sessionId: 'string', // appears from the moment you enable breakouts\n sessionType: 'string', // appears from the moment you enable breakouts\n startTime: 'string', // appears once breakouts start\n status: 'string', // only present when in a breakout session\n url: 'string', // appears from the moment you enable breakouts\n locusUrl: 'string', // the current locus url\n breakoutServiceUrl: 'string', // the current breakout resource url\n mainLocusUrl: 'string', // the locus url of the main session\n groups: 'array', // appears when create breakouts\n manageGroups: 'array', // appears when manage breakouts\n preAssignments: 'array', // appears when getPreAssignments info hasBreakoutPreAssignments = true\n editLock: 'object', // appears when getBreakout info editlock = true\n intervalID: 'number',\n meetingId: 'string',\n canManageBreakouts: 'boolean', // appear the ability to manage breakouts\n },\n children: {\n currentBreakoutSession: Breakout,\n },\n\n derived: {\n isInMainSession: {\n cache: false,\n deps: ['sessionType'],\n /**\n * Returns true if the user is in the main session\n * @returns {boolean}\n */\n fn() {\n return this.sessionType === BREAKOUTS.SESSION_TYPES.MAIN;\n },\n },\n isActiveBreakout: {\n cache: false, // fix issue: sometimes the derived will not change even if the deps changed\n deps: ['sessionType', 'status'],\n /**\n * Returns true if the breakout status is active\n * @returns {boolean}\n */\n fn() {\n return (\n this.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT &&\n (this.status === BREAKOUTS.STATUS.OPEN || this.status === BREAKOUTS.STATUS.CLOSING)\n );\n },\n },\n breakoutGroupId: {\n cache: false,\n deps: ['manageGroups'],\n /**\n * Returns the active group id\n * @returns {boolean}\n */\n fn() {\n if (this.manageGroups?.length) {\n return this.manageGroups[0].status !== BREAKOUTS.STATUS.CLOSED\n ? this.manageGroups[0].id\n : '';\n }\n\n return '';\n },\n },\n breakoutStatus: {\n cache: true,\n deps: ['isInMainSession', 'status', 'groups'],\n /**\n * Returns the breakout status\n * @returns {boolean}\n */\n fn() {\n return this.isInMainSession ? this.groups?.[0]?.status : this.status;\n },\n },\n shouldQueryPreAssignments: {\n cache: false,\n deps: ['canManageBreakouts', 'enableBreakoutSession', 'hasBreakoutPreAssignments'],\n /**\n * Returns should query preAssignments or not\n * @returns {boolean}\n */\n fn() {\n return !!(\n this.canManageBreakouts &&\n this.enableBreakoutSession &&\n this.hasBreakoutPreAssignments\n );\n },\n },\n },\n\n /**\n * initialize for the breakouts\n * @returns {void}\n */\n initialize() {\n this.listenTo(this, 'change:breakoutStatus', () => {\n if (this.breakoutStatus === BREAKOUTS.STATUS.CLOSING) {\n this.trigger(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);\n }\n });\n this.listenTo(this, 'change:shouldQueryPreAssignments', () => {\n if (this.shouldQueryPreAssignments && !this.preAssignments) {\n this.queryPreAssignments();\n }\n });\n this.debouncedQueryRosters = debounce(this.queryRosters, 10, {\n leading: true,\n trailing: false,\n });\n this.listenTo(this.breakouts, 'add', (breakout) => {\n this.debouncedQueryRosters();\n this.triggerReturnToMainEvent(breakout);\n });\n this.listenTo(this.breakouts, 'change:requestedLastModifiedTime', (breakout) => {\n this.triggerReturnToMainEvent(breakout);\n });\n this.listenToCurrentSessionTypeChange();\n this.listenToBroadcastMessages();\n this.listenToBreakoutRosters();\n this.listenToBreakoutHelp();\n // @ts-ignore\n this.breakoutRequest = new BreakoutRequest({webex: this.webex});\n },\n\n /**\n * Calls this to clean up listeners\n * @returns {void}\n */\n cleanUp() {\n this.stopListening();\n },\n\n /**\n * Update the current locus url of the meeting\n * @param {string} locusUrl // locus url\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n const {isInMainSession, mainLocusUrl} = this;\n if (isInMainSession || !mainLocusUrl) {\n this.set('mainLocusUrl', locusUrl);\n }\n },\n\n /**\n * Update whether self is moderator/cohost or not\n * @param {boolean} canManageBreakouts\n * @returns {void}\n */\n updateCanManageBreakouts(canManageBreakouts) {\n this.set('canManageBreakouts', canManageBreakouts);\n },\n\n /**\n * Update the current breakout resource url\n * @param {string} breakoutServiceUrl\n * @returns {void}\n */\n breakoutServiceUrlUpdate(breakoutServiceUrl) {\n this.set('breakoutServiceUrl', `${breakoutServiceUrl}/breakout/`);\n },\n\n /**\n * The initial roster lists need to be queried because you don't\n * get a breakout.roster event when you join the meeting\n * @returns {void}\n */\n queryRosters() {\n this.webex\n .request({uri: `${this.url}/roster`, qs: {locusUrl: btoa(this.locusUrl)}})\n .then((result) => {\n const {\n body: {rosters},\n } = result;\n\n rosters?.forEach(({locus}) => {\n this.handleRosterUpdate(locus);\n });\n\n this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:breakouts#queryRosters failed', error);\n });\n },\n\n /**\n *\n * @param {Object} locus // locus object\n * @returns {void}\n */\n handleRosterUpdate(locus) {\n const sessionId = locus.controls?.breakout?.sessionId;\n\n const session = this.breakouts.get(sessionId);\n\n if (!session) {\n return;\n }\n\n session.parseRoster(locus);\n },\n /**\n *Sets up listener for currentBreakoutSession sessionType changed\n * @returns {void}\n */\n listenToCurrentSessionTypeChange(): void {\n this.listenTo(\n this.currentBreakoutSession,\n 'change:sessionType',\n (currentBreakoutSession, sessionType) => {\n if (isSessionTypeChangedFromSessionToMain(currentBreakoutSession, sessionType)) {\n this.trigger(BREAKOUTS.EVENTS.LEAVE_BREAKOUT);\n }\n }\n );\n },\n\n /**\n * Sets up listener for broadcast messages sent to the breakout session\n * @returns {void}\n */\n listenToBroadcastMessages() {\n this.listenTo(this.webex.internal.llm, 'event:breakout.message', (event) => {\n const {\n data: {senderUserId, sentTime, message},\n } = event;\n\n this.trigger(BREAKOUTS.EVENTS.MESSAGE, {\n senderUserId,\n sentTime,\n message,\n // FIXME: This is only the current sessionId\n // We'd need to check that the dataChannelUrl is still the same\n // to guarantee that this message was sent to this session\n sessionId: this.currentBreakoutSession.sessionId,\n });\n });\n },\n\n /**\n * Sets up a listener for roster messags from mecury\n * @returns {void}\n */\n listenToBreakoutRosters() {\n this.listenTo(this.webex.internal.mercury, 'event:breakout.roster', (event) => {\n this.handleRosterUpdate(event.data.locus);\n this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);\n });\n },\n\n /**\n * Sets up a listener for ask help notify from mecury\n * @returns {void}\n */\n listenToBreakoutHelp() {\n this.listenTo(this.webex.internal.mercury, 'event:breakout.help', (event) => {\n const {\n data: {participant, sessionId},\n } = event;\n this.trigger(BREAKOUTS.EVENTS.ASK_FOR_HELP, {participant, sessionId});\n });\n },\n\n /**\n * get current breakout is in progress or not\n * @returns {boolean}\n */\n isBreakoutInProgress() {\n const currentStatus = this.groups?.[0]?.status || this.status;\n\n return currentStatus === BREAKOUTS.STATUS.OPEN || currentStatus === BREAKOUTS.STATUS.CLOSING;\n },\n\n /**\n * get current breakout is in closing or not\n * @returns {boolean}\n */\n isBreakoutIClosing() {\n return (this.groups?.[0]?.status || this.status) === BREAKOUTS.STATUS.CLOSING;\n },\n /**\n * Updates the information about the current breakout\n * @param {Object} params\n * @returns {void}\n */\n updateBreakout(params) {\n this.set(params);\n // These values are set manually so they are unset when they are not included in params\n this.set('groups', params.groups);\n this.set('startTime', params.startTime);\n this.set('status', params.status);\n\n this.set('currentBreakoutSession', {\n sessionId: params.sessionId,\n groupId: params.groupId,\n name: params.name,\n current: true,\n sessionType: params.sessionType,\n url: params.url,\n [BREAKOUTS.SESSION_STATES.ACTIVE]: false,\n [BREAKOUTS.SESSION_STATES.ALLOWED]: false,\n [BREAKOUTS.SESSION_STATES.ALLOWED]: false,\n [BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT]: false,\n [BREAKOUTS.SESSION_STATES.REQUESTED]: false,\n });\n\n if (!this.isBreakoutInProgress()) {\n this.clearBreakouts();\n }\n\n if (\n this.currentBreakoutSession.previous('sessionId') !== this.currentBreakoutSession.sessionId ||\n this.currentBreakoutSession.previous('groupId') !== this.currentBreakoutSession.groupId\n ) {\n // should report joined session changed\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n breakoutEvent.onBreakoutJoinResponse({\n currentSession: this.currentBreakoutSession,\n meeting,\n breakoutMoveId: params.breakoutMoveId,\n });\n }\n },\n\n /**\n * Updates the information about available breakouts\n * @param {Object} payload\n * @returns {void}\n */\n updateBreakoutSessions(payload) {\n const breakouts = {};\n if (this.isBreakoutIClosing()) {\n // fix issue: don't clear/update breakouts collection when in closing since locus DTO will send undefined or\n // only the MAIN session info here, if just update it, will miss the breakout roster info during\n // count down to end breakouts\n return;\n }\n if (payload.breakoutSessions) {\n forEach(BREAKOUTS.SESSION_STATES, (state) => {\n forEach(payload.breakoutSessions[state], (breakout) => {\n const {sessionId} = breakout;\n\n if (!breakouts[sessionId]) {\n breakouts[sessionId] = breakout;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ACTIVE] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ALLOWED] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.REQUESTED] = false;\n }\n\n breakouts[sessionId][state] = true;\n\n if (state === BREAKOUTS.SESSION_STATES.REQUESTED) {\n breakouts[sessionId].requestedLastModifiedTime = breakout.modifiedAt;\n }\n });\n });\n }\n forEach(breakouts, (breakout: typeof Breakout) => {\n // eslint-disable-next-line no-param-reassign\n breakout.url = this.url;\n });\n\n this.breakouts.set(Object.values(breakouts));\n },\n /**\n * clear breakouts collection\n * @returns {void}\n */\n clearBreakouts() {\n if (this.breakouts.length > 0) {\n this.breakouts.reset();\n }\n },\n /**\n * get main session\n * @returns {Breakout}\n */\n getMainSession() {\n if (this.isInMainSession) {\n return this.currentBreakoutSession;\n }\n\n const mainSession = this.breakouts.filter((breakout) => breakout.isMain)[0];\n if (!mainSession) {\n throw new Error('no main session found');\n }\n\n return mainSession;\n },\n /**\n * Host/CoHost ask all participants return to main session\n * @returns {Promise}\n */\n askAllToReturn() {\n const mainSession = this.getMainSession();\n\n return this.webex.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/requestMove`,\n body: {\n groupId: mainSession.groupId,\n sessionId: mainSession.sessionId,\n },\n });\n },\n\n /**\n * Broadcast message to all breakout session's participants\n * @param {String} message\n * @param {Object} options\n * @returns {Promise}\n */\n broadcast(message, options) {\n const {breakoutGroupId} = this;\n if (!breakoutGroupId) {\n throw new Error('Cannot broadcast, no breakout session found');\n }\n\n return this.breakoutRequest.broadcast({\n url: this.url,\n message,\n options,\n groupId: breakoutGroupId,\n });\n },\n /**\n * Make enable breakout resource\n * @returns {Promise}\n */\n enableBreakouts() {\n if (this.breakoutServiceUrl) {\n // @ts-ignore\n return this.webex\n .request({\n method: HTTP_VERBS.POST,\n uri: this.breakoutServiceUrl,\n body: {\n locusUrl: this.locusUrl,\n },\n })\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#touchBreakout --> Error provisioning error ${err}`\n );\n throw err;\n });\n }\n\n return Promise.reject(new Error(`enableBreakouts: the breakoutServiceUrl is empty`));\n },\n\n /**\n * Make the meeting enable or disable breakout session\n * @param {boolean} enable\n * @returns {Promise}\n */\n async toggleBreakout(enable) {\n if (this.enableBreakoutSession === undefined) {\n const info = await this.enableBreakouts();\n // first time enable, set the initial data\n this.updateBreakout(info?.body);\n if (!enable) {\n await this.doToggleBreakout(enable);\n }\n } else {\n await this.doToggleBreakout(enable);\n }\n },\n\n /**\n * do toggle meeting breakout session enable or disable\n * @param {boolean} enable\n * @returns {Promise}\n */\n doToggleBreakout(enable) {\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{enableBreakoutSession: enable},\n };\n\n // @ts-ignore\n return this.webex.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n });\n },\n\n /**\n * set groups to manageGroups prop\n * @param {Object} breakoutInfo -- breakout groups\n * @returns {void}\n */\n _setManageGroups(breakoutInfo) {\n if (breakoutInfo?.body?.groups) {\n this.set('manageGroups', breakoutInfo.body.groups);\n }\n },\n\n /**\n * Create new breakout sessions\n * @param {object} params -- breakout session group\n * @returns {Promise}\n */\n async create(params) {\n const payload = {...params};\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{groups: [payload]},\n };\n // @ts-ignore\n const breakoutInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#create'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n // clear edit lock info after save breakout session info\n this._clearEditLockInfo();\n\n return breakoutInfo;\n },\n\n /**\n * Delete all breakout sessions\n * @returns {Promise}\n */\n async clearSessions() {\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{groups: [{action: BREAKOUTS.ACTION.DELETE}]},\n };\n // @ts-ignore\n const breakoutInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#clearSessions'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost starts breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n async start(params = {}) {\n const action = BREAKOUTS.ACTION.START;\n const payload = {\n id: this.breakoutGroupId,\n action,\n allowBackToMain: false,\n allowToJoinLater: false,\n ...params,\n };\n\n const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#start'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost ends breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n async end(params = {}) {\n const {delayCloseTime, breakoutGroupId: id} = this;\n const action = BREAKOUTS.ACTION.CLOSE;\n const payload = {\n id,\n action,\n delayCloseTime,\n ...params,\n };\n\n const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#end'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost update breakout sessions\n * @param {Object} params\n * @param {String} params.id\n * @param {Boolean} unlockEdit\n * @returns {Promise}\n */\n async update(params: {id: string}, unlockEdit?: boolean) {\n if (!params.id) {\n return Promise.reject(new Error('Missing breakout group id'));\n }\n const payload = {...params};\n\n const body = {\n ...(this.editLock?.token\n ? {editlock: {token: this.editLock.token, refresh: !unlockEdit}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#update'));\n });\n\n if (unlockEdit) {\n this._clearEditLockInfo();\n }\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * get existed breakout sessions\n * @param {boolean} editlock -- lock operations of the breakout sessions\n * @returns {Promise}\n */\n async getBreakout(editlock) {\n const breakout = await this.request({\n method: HTTP_VERBS.GET,\n uri: this.url + (editlock ? `?editlock=${editlock}` : ''),\n });\n\n this._setManageGroups(breakout);\n if (editlock && breakout.body?.editlock?.token) {\n this.set('editLock', breakout.body.editlock);\n this.keepEditLockAlive();\n }\n\n return breakout;\n },\n\n /**\n * enable and edit lock breakout\n * @returns {void}\n */\n async enableAndLockBreakout() {\n if (this.enableBreakoutSession) {\n this.lockBreakout();\n } else {\n const info = await this.enableBreakouts();\n\n if (info.body) {\n this.lockBreakout();\n }\n }\n },\n\n /**\n * breakout edit locked by yourself or not\n * @returns {boolean}\n */\n hasBreakoutLocked() {\n return (\n this.editLock &&\n this.editLock.token &&\n this.editLock.state === BREAKOUTS.EDIT_LOCK_STATUS.LOCKED\n );\n },\n\n /**\n * send breakout edit lock\n * @returns {void}\n */\n async lockBreakout() {\n if (this.editLock && !!this.editLock.token) {\n if (this.editLock.state === BREAKOUTS.EDIT_LOCK_STATUS.LOCKED) {\n throw new Error('Breakout already locked');\n } else {\n this.keepEditLockAlive();\n }\n } else {\n const breakout = await this.getBreakout(true);\n if (breakout.body?.editlock) {\n this.keepEditLockAlive();\n }\n }\n },\n\n /**\n * keep edit lock alive\n * @returns {void}\n */\n keepEditLockAlive() {\n if (this.editLock && !!this.editLock.token) {\n const ttl = this.editLock.ttl < 30 ? BREAKOUTS.DEFAULT_TTL : this.editLock.ttl;\n if (this.intervalID) {\n window.clearInterval(this.intervalID);\n }\n\n this.intervalID = window.setInterval(() => {\n this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.url}/editlock/${this.editLock.token}`,\n }).catch((error) => {\n this._clearEditLockInfo();\n\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#keepEditLockAlive'));\n });\n }, (ttl / 2) * 1000);\n }\n },\n\n /**\n * unlock edit breakout\n * @returns {void}\n */\n unLockEditBreakout() {\n if (this.editLock && !!this.editLock.token) {\n this.request({\n method: HTTP_VERBS.DELETE,\n uri: `${this.url}/editlock/${this.editLock.token}`,\n })\n .then(() => {\n this._clearEditLockInfo();\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#unLockEditBreakout'));\n });\n }\n },\n\n /**\n * clear interval and edit lock info\n * @private\n * @returns {void}\n */\n _clearEditLockInfo() {\n if (this.intervalID) {\n clearInterval(this.intervalID);\n }\n this.set('editLock', {});\n },\n\n /**\n * assign participants to breakout session\n * @param {Array} sessions\n * @returns {void}\n */\n assign(sessions: any[]) {\n const internalSessions = sessions.map((item) => {\n return {\n id: item.id,\n assigned: item.memberIds,\n assignedEmails: item.emails,\n anyoneCanJoin: !!item.anyone,\n };\n });\n\n const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{\n groups: [\n {\n id: this.breakoutGroupId,\n sessions: internalSessions,\n },\n ],\n },\n };\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n });\n },\n\n /**\n * query preAssignments\n * @returns {void}\n */\n queryPreAssignments() {\n this.webex\n .request({uri: `${this.url}/preassignments`, qs: {locusUrl: btoa(this.locusUrl)}})\n .then((result) => {\n if (result.body?.groups) {\n this.set('preAssignments', result.body.groups);\n this.trigger(BREAKOUTS.EVENTS.PRE_ASSIGNMENTS_UPDATE);\n }\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:breakouts#queryPreAssignments failed', error);\n });\n },\n /**\n * assign participants dynamically after breakout sessions started,\n * but currently it only used for admitting participants from lobby into breakout directly\n * @param {Array} sessions\n * @returns {void}\n */\n dynamicAssign(sessions: any[]) {\n const updatedSessions = sessions.map((item) => {\n return {\n id: item.id,\n participants: item.participants,\n targetState: item.targetState,\n };\n });\n\n const body = {\n groups: [\n {\n id: this.breakoutGroupId,\n sessions: updatedSessions,\n },\n ],\n editlock: null,\n };\n\n if (this.editLock && this.editLock.token) {\n body.editlock = this.editLock;\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.url}/dynamicAssign`,\n body,\n });\n },\n /**\n * trigger ASK_RETURN_TO_MAIN event when main session requested\n * @param {Object} breakout\n * @returns {void}\n */\n triggerReturnToMainEvent(breakout) {\n if (breakout.isMain && breakout.requested) {\n this.trigger(BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);\n }\n },\n});\n\nexport default Breakouts;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "3.0.0-beta.150",
3
+ "version": "3.0.0-beta.151",
4
4
  "description": "",
5
5
  "license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
6
6
  "contributors": [
@@ -32,12 +32,12 @@
32
32
  "build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
33
33
  },
34
34
  "devDependencies": {
35
- "@webex/plugin-meetings": "3.0.0-beta.150",
36
- "@webex/test-helper-chai": "3.0.0-beta.150",
37
- "@webex/test-helper-mocha": "3.0.0-beta.150",
38
- "@webex/test-helper-mock-webex": "3.0.0-beta.150",
39
- "@webex/test-helper-retry": "3.0.0-beta.150",
40
- "@webex/test-helper-test-users": "3.0.0-beta.150",
35
+ "@webex/plugin-meetings": "3.0.0-beta.151",
36
+ "@webex/test-helper-chai": "3.0.0-beta.151",
37
+ "@webex/test-helper-mocha": "3.0.0-beta.151",
38
+ "@webex/test-helper-mock-webex": "3.0.0-beta.151",
39
+ "@webex/test-helper-retry": "3.0.0-beta.151",
40
+ "@webex/test-helper-test-users": "3.0.0-beta.151",
41
41
  "chai": "^4.3.4",
42
42
  "chai-as-promised": "^7.1.1",
43
43
  "jsdom-global": "3.0.2",
@@ -46,19 +46,19 @@
46
46
  "typescript": "^4.7.4"
47
47
  },
48
48
  "dependencies": {
49
- "@webex/common": "3.0.0-beta.150",
49
+ "@webex/common": "3.0.0-beta.151",
50
50
  "@webex/internal-media-core": "1.38.3",
51
- "@webex/internal-plugin-conversation": "3.0.0-beta.150",
52
- "@webex/internal-plugin-device": "3.0.0-beta.150",
53
- "@webex/internal-plugin-llm": "3.0.0-beta.150",
54
- "@webex/internal-plugin-mercury": "3.0.0-beta.150",
55
- "@webex/internal-plugin-metrics": "3.0.0-beta.150",
56
- "@webex/internal-plugin-support": "3.0.0-beta.150",
57
- "@webex/internal-plugin-user": "3.0.0-beta.150",
58
- "@webex/media-helpers": "3.0.0-beta.150",
59
- "@webex/plugin-people": "3.0.0-beta.150",
60
- "@webex/plugin-rooms": "3.0.0-beta.150",
61
- "@webex/webex-core": "3.0.0-beta.150",
51
+ "@webex/internal-plugin-conversation": "3.0.0-beta.151",
52
+ "@webex/internal-plugin-device": "3.0.0-beta.151",
53
+ "@webex/internal-plugin-llm": "3.0.0-beta.151",
54
+ "@webex/internal-plugin-mercury": "3.0.0-beta.151",
55
+ "@webex/internal-plugin-metrics": "3.0.0-beta.151",
56
+ "@webex/internal-plugin-support": "3.0.0-beta.151",
57
+ "@webex/internal-plugin-user": "3.0.0-beta.151",
58
+ "@webex/media-helpers": "3.0.0-beta.151",
59
+ "@webex/plugin-people": "3.0.0-beta.151",
60
+ "@webex/plugin-rooms": "3.0.0-beta.151",
61
+ "@webex/webex-core": "3.0.0-beta.151",
62
62
  "ampersand-collection": "^2.0.2",
63
63
  "bowser": "^2.11.0",
64
64
  "btoa": "^1.2.1",
@@ -296,6 +296,23 @@ const Breakouts = WebexPlugin.extend({
296
296
  });
297
297
  },
298
298
 
299
+ /**
300
+ * get current breakout is in progress or not
301
+ * @returns {boolean}
302
+ */
303
+ isBreakoutInProgress() {
304
+ const currentStatus = this.groups?.[0]?.status || this.status;
305
+
306
+ return currentStatus === BREAKOUTS.STATUS.OPEN || currentStatus === BREAKOUTS.STATUS.CLOSING;
307
+ },
308
+
309
+ /**
310
+ * get current breakout is in closing or not
311
+ * @returns {boolean}
312
+ */
313
+ isBreakoutIClosing() {
314
+ return (this.groups?.[0]?.status || this.status) === BREAKOUTS.STATUS.CLOSING;
315
+ },
299
316
  /**
300
317
  * Updates the information about the current breakout
301
318
  * @param {Object} params
@@ -303,7 +320,6 @@ const Breakouts = WebexPlugin.extend({
303
320
  */
304
321
  updateBreakout(params) {
305
322
  this.set(params);
306
-
307
323
  // These values are set manually so they are unset when they are not included in params
308
324
  this.set('groups', params.groups);
309
325
  this.set('startTime', params.startTime);
@@ -323,6 +339,10 @@ const Breakouts = WebexPlugin.extend({
323
339
  [BREAKOUTS.SESSION_STATES.REQUESTED]: false,
324
340
  });
325
341
 
342
+ if (!this.isBreakoutInProgress()) {
343
+ this.clearBreakouts();
344
+ }
345
+
326
346
  if (
327
347
  this.currentBreakoutSession.previous('sessionId') !== this.currentBreakoutSession.sessionId ||
328
348
  this.currentBreakoutSession.previous('groupId') !== this.currentBreakoutSession.groupId
@@ -344,7 +364,12 @@ const Breakouts = WebexPlugin.extend({
344
364
  */
345
365
  updateBreakoutSessions(payload) {
346
366
  const breakouts = {};
347
-
367
+ if (this.isBreakoutIClosing()) {
368
+ // fix issue: don't clear/update breakouts collection when in closing since locus DTO will send undefined or
369
+ // only the MAIN session info here, if just update it, will miss the breakout roster info during
370
+ // count down to end breakouts
371
+ return;
372
+ }
348
373
  if (payload.breakoutSessions) {
349
374
  forEach(BREAKOUTS.SESSION_STATES, (state) => {
350
375
  forEach(payload.breakoutSessions[state], (breakout) => {
@@ -367,7 +392,6 @@ const Breakouts = WebexPlugin.extend({
367
392
  });
368
393
  });
369
394
  }
370
-
371
395
  forEach(breakouts, (breakout: typeof Breakout) => {
372
396
  // eslint-disable-next-line no-param-reassign
373
397
  breakout.url = this.url;
@@ -375,6 +399,15 @@ const Breakouts = WebexPlugin.extend({
375
399
 
376
400
  this.breakouts.set(Object.values(breakouts));
377
401
  },
402
+ /**
403
+ * clear breakouts collection
404
+ * @returns {void}
405
+ */
406
+ clearBreakouts() {
407
+ if (this.breakouts.length > 0) {
408
+ this.breakouts.reset();
409
+ }
410
+ },
378
411
  /**
379
412
  * get main session
380
413
  * @returns {Breakout}
@@ -367,7 +367,13 @@ describe('plugin-meetings', () => {
367
367
 
368
368
  breakouts.updateBreakout({})
369
369
  assert.equal(breakouts.status, undefined);
370
- })
370
+ });
371
+
372
+ it('call clearBreakouts if current breakout is not in-progress', () => {
373
+ breakouts.clearBreakouts = sinon.stub();
374
+ breakouts.updateBreakout({status: 'CLOSED'})
375
+ assert.calledOnce(breakouts.clearBreakouts);
376
+ });
371
377
 
372
378
  it('updates the current breakout session, call onBreakoutJoinResponse when session changed', () => {
373
379
  breakouts.webex.meetings = {
@@ -476,6 +482,12 @@ describe('plugin-meetings', () => {
476
482
  assert.equal(breakouts.breakouts.get('sessionId2').requestedLastModifiedTime, "2023-05-09T17:16:01.000Z")
477
483
  });
478
484
 
485
+ it('not update breakout sessions when breakouts is closing', () => {
486
+ breakouts.set('status', 'CLOSING');
487
+ breakouts.breakouts.set = sinon.stub();
488
+ breakouts.updateBreakoutSessions({breakoutSessions: {}});
489
+ assert.notCalled(breakouts.breakouts.set);
490
+ });
479
491
  });
480
492
 
481
493
  describe('#locusUrlUpdate', () => {
@@ -595,6 +607,53 @@ describe('plugin-meetings', () => {
595
607
  });
596
608
  });
597
609
 
610
+ describe('#isBreakoutInProgress', () => {
611
+ it('return breakout is in progress depends on the status(groups/breakouts)', () => {
612
+ breakouts.set('groups', [{status: 'CLOSING'}]);
613
+
614
+ assert.equal(breakouts.isBreakoutInProgress(), true)
615
+
616
+ breakouts.set('groups', undefined);
617
+ breakouts.set('status', 'OPEN');
618
+
619
+ assert.equal(breakouts.isBreakoutInProgress(), true);
620
+
621
+ breakouts.set('groups', [{status: 'CLOSED'}]);
622
+
623
+ assert.equal(breakouts.isBreakoutInProgress(), false);
624
+
625
+ breakouts.set('groups', undefined);
626
+ breakouts.set('status', 'CLOSED');
627
+
628
+ assert.equal(breakouts.isBreakoutInProgress(), false);
629
+
630
+ breakouts.set('status', undefined);
631
+
632
+ assert.equal(breakouts.isBreakoutInProgress(), false);
633
+ });
634
+ });
635
+
636
+ describe('#isBreakoutIClosing', () => {
637
+ it('return breakout is closing depends the status(groups/breakouts)', () => {
638
+ breakouts.set('groups', [{status: 'CLOSING'}]);
639
+
640
+ assert.equal(breakouts.isBreakoutIClosing(), true);
641
+
642
+ breakouts.set('groups', undefined);
643
+ breakouts.set('status', 'CLOSING');
644
+
645
+ assert.equal(breakouts.isBreakoutIClosing(), true);
646
+
647
+ breakouts.set('status', undefined);
648
+
649
+ assert.equal(breakouts.isBreakoutIClosing(), false);
650
+
651
+ breakouts.set('groups', [{status: 'OPEN'}]);
652
+
653
+ assert.equal(breakouts.isBreakoutIClosing(), false);
654
+ });
655
+ });
656
+
598
657
  describe('#queryRosters', () => {
599
658
  it('makes the expected query', async () => {
600
659
  webex.request.returns(
@@ -662,6 +721,22 @@ describe('plugin-meetings', () => {
662
721
  });
663
722
  });
664
723
 
724
+ describe('#clearBreakouts', () => {
725
+ it('call reset to clear breakouts', () => {
726
+ breakouts.set('breakouts', [{id: 'session1'}]);
727
+ breakouts.breakouts.reset = sinon.stub();
728
+ breakouts.clearBreakouts();
729
+ assert.calledWith(breakouts.breakouts.reset);
730
+ });
731
+
732
+ it('do nothing if breakouts already is empty', () => {
733
+ breakouts.set('breakouts', []);
734
+ breakouts.breakouts.reset = sinon.stub();
735
+ breakouts.clearBreakouts();
736
+ assert.notCalled(breakouts.breakouts.reset);
737
+ });
738
+ });
739
+
665
740
  describe('#getMainSession', () => {
666
741
  it('returns main session as expect', () => {
667
742
  breakouts.updateBreakout({