@webex/plugin-meetings 3.0.0-beta.106 → 3.0.0-beta.107

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.
@@ -169,7 +169,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
169
169
  sessionId: this.sessionId
170
170
  });
171
171
  },
172
- version: "3.0.0-beta.106"
172
+ version: "3.0.0-beta.107"
173
173
  });
174
174
  var _default = Breakout;
175
175
  exports.default = _default;
@@ -632,29 +632,52 @@ var Breakouts = _webexCore.WebexPlugin.extend({
632
632
  * Host or cohost update breakout sessions
633
633
  * @param {Object} params
634
634
  * @param {String} params.id
635
+ * @param {Boolean} unlockEdit
635
636
  * @returns {Promise}
636
637
  */
637
- update: function update(params) {
638
- var _this$editLock;
639
- if (!params.id) {
640
- return _promise.default.reject(new Error('Missing breakout group id'));
641
- }
642
- var payload = _objectSpread({}, params);
643
- var body = _objectSpread(_objectSpread({}, (_this$editLock = this.editLock) !== null && _this$editLock !== void 0 && _this$editLock.token ? {
644
- editlock: {
645
- token: this.editLock.token,
646
- refresh: true
647
- }
648
- } : {}), {
649
- groups: [payload]
650
- });
651
- return this.request({
652
- method: _constants.HTTP_VERBS.PUT,
653
- uri: this.url,
654
- body: body
655
- }).catch(function (error) {
656
- return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#update'));
657
- });
638
+ update: function update(params, unlockEdit) {
639
+ var _this11 = this;
640
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
641
+ var _this11$editLock;
642
+ var payload, body, breakoutInfo;
643
+ return _regenerator.default.wrap(function _callee4$(_context4) {
644
+ while (1) switch (_context4.prev = _context4.next) {
645
+ case 0:
646
+ if (params.id) {
647
+ _context4.next = 2;
648
+ break;
649
+ }
650
+ return _context4.abrupt("return", _promise.default.reject(new Error('Missing breakout group id')));
651
+ case 2:
652
+ payload = _objectSpread({}, params);
653
+ body = _objectSpread(_objectSpread({}, (_this11$editLock = _this11.editLock) !== null && _this11$editLock !== void 0 && _this11$editLock.token ? {
654
+ editlock: {
655
+ token: _this11.editLock.token,
656
+ refresh: !unlockEdit
657
+ }
658
+ } : {}), {
659
+ groups: [payload]
660
+ });
661
+ _context4.next = 6;
662
+ return _this11.request({
663
+ method: _constants.HTTP_VERBS.PUT,
664
+ uri: _this11.url,
665
+ body: body
666
+ }).catch(function (error) {
667
+ return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#update'));
668
+ });
669
+ case 6:
670
+ breakoutInfo = _context4.sent;
671
+ if (unlockEdit) {
672
+ _this11._clearEditLockInfo();
673
+ }
674
+ return _context4.abrupt("return", breakoutInfo);
675
+ case 9:
676
+ case "end":
677
+ return _context4.stop();
678
+ }
679
+ }, _callee4);
680
+ }))();
658
681
  },
659
682
  /**
660
683
  * get existed breakout sessions
@@ -662,33 +685,33 @@ var Breakouts = _webexCore.WebexPlugin.extend({
662
685
  * @returns {Promise}
663
686
  */
664
687
  getBreakout: function getBreakout(editlock) {
665
- var _this11 = this;
666
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
688
+ var _this12 = this;
689
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
667
690
  var _breakout$body, _breakout$body2, _breakout$body2$editl;
668
691
  var breakout;
669
- return _regenerator.default.wrap(function _callee4$(_context4) {
670
- while (1) switch (_context4.prev = _context4.next) {
692
+ return _regenerator.default.wrap(function _callee5$(_context5) {
693
+ while (1) switch (_context5.prev = _context5.next) {
671
694
  case 0:
672
- _context4.next = 2;
673
- return _this11.request({
695
+ _context5.next = 2;
696
+ return _this12.request({
674
697
  method: _constants.HTTP_VERBS.GET,
675
- uri: _this11.url + (editlock ? "?editlock=".concat(editlock) : '')
698
+ uri: _this12.url + (editlock ? "?editlock=".concat(editlock) : '')
676
699
  });
677
700
  case 2:
678
- breakout = _context4.sent;
701
+ breakout = _context5.sent;
679
702
  if ((_breakout$body = breakout.body) !== null && _breakout$body !== void 0 && _breakout$body.groups) {
680
- _this11.set('groups', breakout.body.groups);
703
+ _this12.set('groups', breakout.body.groups);
681
704
  }
682
705
  if (editlock && (_breakout$body2 = breakout.body) !== null && _breakout$body2 !== void 0 && (_breakout$body2$editl = _breakout$body2.editlock) !== null && _breakout$body2$editl !== void 0 && _breakout$body2$editl.token) {
683
- _this11.set('editLock', breakout.body.editlock);
684
- _this11.keepEditLockAlive();
706
+ _this12.set('editLock', breakout.body.editlock);
707
+ _this12.keepEditLockAlive();
685
708
  }
686
- return _context4.abrupt("return", breakout);
709
+ return _context5.abrupt("return", breakout);
687
710
  case 6:
688
711
  case "end":
689
- return _context4.stop();
712
+ return _context5.stop();
690
713
  }
691
- }, _callee4);
714
+ }, _callee5);
692
715
  }))();
693
716
  },
694
717
  /**
@@ -696,32 +719,32 @@ var Breakouts = _webexCore.WebexPlugin.extend({
696
719
  * @returns {void}
697
720
  */
698
721
  enableAndLockBreakout: function enableAndLockBreakout() {
699
- var _this12 = this;
700
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
722
+ var _this13 = this;
723
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
701
724
  var info;
702
- return _regenerator.default.wrap(function _callee5$(_context5) {
703
- while (1) switch (_context5.prev = _context5.next) {
725
+ return _regenerator.default.wrap(function _callee6$(_context6) {
726
+ while (1) switch (_context6.prev = _context6.next) {
704
727
  case 0:
705
- if (!_this12.enableBreakoutSession) {
706
- _context5.next = 4;
728
+ if (!_this13.enableBreakoutSession) {
729
+ _context6.next = 4;
707
730
  break;
708
731
  }
709
- _this12.lockBreakout();
710
- _context5.next = 8;
732
+ _this13.lockBreakout();
733
+ _context6.next = 8;
711
734
  break;
712
735
  case 4:
713
- _context5.next = 6;
714
- return _this12.enableBreakouts();
736
+ _context6.next = 6;
737
+ return _this13.enableBreakouts();
715
738
  case 6:
716
- info = _context5.sent;
739
+ info = _context6.sent;
717
740
  if (info.body) {
718
- _this12.lockBreakout();
741
+ _this13.lockBreakout();
719
742
  }
720
743
  case 8:
721
744
  case "end":
722
- return _context5.stop();
745
+ return _context6.stop();
723
746
  }
724
- }, _callee5);
747
+ }, _callee6);
725
748
  }))();
726
749
  },
727
750
  /**
@@ -729,39 +752,39 @@ var Breakouts = _webexCore.WebexPlugin.extend({
729
752
  * @returns {void}
730
753
  */
731
754
  lockBreakout: function lockBreakout() {
732
- var _this13 = this;
733
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
755
+ var _this14 = this;
756
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {
734
757
  var _breakout$body3, breakout;
735
- return _regenerator.default.wrap(function _callee6$(_context6) {
736
- while (1) switch (_context6.prev = _context6.next) {
758
+ return _regenerator.default.wrap(function _callee7$(_context7) {
759
+ while (1) switch (_context7.prev = _context7.next) {
737
760
  case 0:
738
- if (!(_this13.editLock && !!_this13.editLock.token)) {
739
- _context6.next = 8;
761
+ if (!(_this14.editLock && !!_this14.editLock.token)) {
762
+ _context7.next = 8;
740
763
  break;
741
764
  }
742
- if (!(_this13.editLock.state === _constants.BREAKOUTS.EDIT_LOCK_STATUS.LOCKED)) {
743
- _context6.next = 5;
765
+ if (!(_this14.editLock.state === _constants.BREAKOUTS.EDIT_LOCK_STATUS.LOCKED)) {
766
+ _context7.next = 5;
744
767
  break;
745
768
  }
746
769
  throw new Error('Breakout already locked');
747
770
  case 5:
748
- _this13.keepEditLockAlive();
771
+ _this14.keepEditLockAlive();
749
772
  case 6:
750
- _context6.next = 12;
773
+ _context7.next = 12;
751
774
  break;
752
775
  case 8:
753
- _context6.next = 10;
754
- return _this13.getBreakout(true);
776
+ _context7.next = 10;
777
+ return _this14.getBreakout(true);
755
778
  case 10:
756
- breakout = _context6.sent;
779
+ breakout = _context7.sent;
757
780
  if ((_breakout$body3 = breakout.body) !== null && _breakout$body3 !== void 0 && _breakout$body3.editlock) {
758
- _this13.keepEditLockAlive();
781
+ _this14.keepEditLockAlive();
759
782
  }
760
783
  case 12:
761
784
  case "end":
762
- return _context6.stop();
785
+ return _context7.stop();
763
786
  }
764
- }, _callee6);
787
+ }, _callee7);
765
788
  }))();
766
789
  },
767
790
  /**
@@ -769,18 +792,18 @@ var Breakouts = _webexCore.WebexPlugin.extend({
769
792
  * @returns {void}
770
793
  */
771
794
  keepEditLockAlive: function keepEditLockAlive() {
772
- var _this14 = this;
795
+ var _this15 = this;
773
796
  if (this.editLock && !!this.editLock.token) {
774
797
  var ttl = this.editLock.ttl < 30 ? _constants.BREAKOUTS.DEFAULT_TTL : this.editLock.ttl;
775
798
  if (this.intervalID) {
776
799
  window.clearInterval(this.intervalID);
777
800
  }
778
801
  this.intervalID = window.setInterval(function () {
779
- _this14.request({
802
+ _this15.request({
780
803
  method: _constants.HTTP_VERBS.PUT,
781
- uri: "".concat(_this14.url, "/editlock/").concat(_this14.editLock.token)
804
+ uri: "".concat(_this15.url, "/editlock/").concat(_this15.editLock.token)
782
805
  }).catch(function (error) {
783
- _this14._clearEditLockInfo();
806
+ _this15._clearEditLockInfo();
784
807
  return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#keepEditLockAlive'));
785
808
  });
786
809
  }, ttl / 2 * 1000);
@@ -791,13 +814,13 @@ var Breakouts = _webexCore.WebexPlugin.extend({
791
814
  * @returns {void}
792
815
  */
793
816
  unLockEditBreakout: function unLockEditBreakout() {
794
- var _this15 = this;
817
+ var _this16 = this;
795
818
  if (this.editLock && !!this.editLock.token) {
796
819
  this.request({
797
820
  method: _constants.HTTP_VERBS.DELETE,
798
821
  uri: "".concat(this.url, "/editlock/").concat(this.editLock.token)
799
822
  }).then(function () {
800
- _this15._clearEditLockInfo();
823
+ _this16._clearEditLockInfo();
801
824
  }).catch(function (error) {
802
825
  return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#unLockEditBreakout'));
803
826
  });
@@ -851,7 +874,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
851
874
  * @returns {void}
852
875
  */
853
876
  queryPreAssignments: function queryPreAssignments(params) {
854
- var _this16 = this;
877
+ var _this17 = this;
855
878
  if (!params || !params.enableBreakoutSession || !params.hasBreakoutPreAssignments) {
856
879
  return;
857
880
  }
@@ -864,7 +887,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
864
887
  }).then(function (result) {
865
888
  var _result$body;
866
889
  if ((_result$body = result.body) !== null && _result$body !== void 0 && _result$body.groups) {
867
- _this16.set('preAssignments', result.body.groups);
890
+ _this17.set('preAssignments', result.body.groups);
868
891
  }
869
892
  }).catch(function (error) {
870
893
  _loggerProxy.default.logger.error('Meeting:breakouts#queryPreAssignments failed', error);
@@ -912,7 +935,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
912
935
  this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
913
936
  }
914
937
  },
915
- version: "3.0.0-beta.106"
938
+ version: "3.0.0-beta.107"
916
939
  });
917
940
  var _default = Breakouts;
918
941
  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","preAssignments","shouldFetchPreassignments","editLock","intervalID","meetingId","children","currentBreakoutSession","Breakout","derived","isInMainSession","cache","deps","fn","BREAKOUTS","SESSION_TYPES","MAIN","isActiveBreakout","BREAKOUT","STATUS","OPEN","CLOSING","breakoutGroupId","length","CLOSED","id","initialize","listenTo","trigger","EVENTS","BREAKOUTS_CLOSING","debouncedQueryRosters","queryRosters","leading","trailing","breakout","triggerReturnToMainEvent","listenToCurrentSessionTypeChange","listenToBroadcastMessages","listenToBreakoutRosters","listenToBreakoutHelp","webex","cleanUp","stopListening","locusUrlUpdate","set","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","preEnableBreakoutSession","current","SESSION_STATES","ACTIVE","ALLOWED","ASSIGNED_CURRENT","REQUESTED","queryPreAssignments","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","create","boServiceErrorHandler","breakInfo","_clearEditLockInfo","resolve","clearSessions","action","ACTION","DELETE","start","START","allowToJoinLater","duration","DEFAULT_DURATION","refresh","end","CLOSE","update","getBreakout","GET","keepEditLockAlive","enableAndLockBreakout","lockBreakout","EDIT_LOCK_STATUS","LOCKED","ttl","DEFAULT_TTL","window","clearInterval","setInterval","unLockEditBreakout","assign","sessions","internalSessions","map","item","assigned","memberIds","assignedEmails","emails","anyoneCanJoin","anyone","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 preAssignments: 'array', // appears when getPreAssignments info hasBreakoutPreAssignments = true\n shouldFetchPreassignments: 'boolean', // Controlling the lifecycle of the pre-assign API\n editLock: 'object', // appears when getBreakout info editlock = true\n intervalID: 'number',\n meetingId: 'string',\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: ['groups'],\n /**\n * Returns the actived group id\n * @returns {boolean}\n */\n fn() {\n if (this.groups?.length) {\n return this.groups[0].status !== BREAKOUTS.STATUS.CLOSED ? this.groups[0].id : '';\n }\n\n return '';\n },\n },\n },\n\n /**\n * initialize for the breakouts\n * @returns {void}\n */\n initialize() {\n this.listenTo(this, 'change:status', () => {\n if (this.status === BREAKOUTS.STATUS.CLOSING) {\n this.trigger(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);\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 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 const preEnableBreakoutSession = this.get('enableBreakoutSession');\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 // We need to call queryPreAssignments when enableBreakoutSession become true\n if (preEnableBreakoutSession !== params.enableBreakoutSession) {\n this.queryPreAssignments(params);\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 if (!enable) {\n // if enable is false, updateBreakout set the param then set enableBreakoutSession as false\n this.updateBreakout(info.body);\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 * 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 breakInfo = 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 if (breakInfo.body?.groups) {\n this.set('groups', breakInfo.body.groups);\n }\n\n // clear edit lock info after save breakout session info\n this._clearEditLockInfo();\n\n return Promise.resolve(breakInfo);\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 breakInfo = 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 if (breakInfo.body?.groups) {\n this.set('groups', breakInfo.body.groups);\n }\n this.shouldFetchPreassignments = false;\n\n return Promise.resolve(breakInfo);\n },\n\n /**\n * Host or cohost starts breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n start(params = {}) {\n const action = BREAKOUTS.ACTION.START;\n const payload = {\n id: this.breakoutGroupId,\n action,\n allowBackToMain: false,\n allowToJoinLater: false,\n duration: BREAKOUTS.DEFAULT_DURATION,\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 return 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\n /**\n * Host or cohost ends breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n 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 return 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\n /**\n * Host or cohost update breakout sessions\n * @param {Object} params\n * @param {String} params.id\n * @returns {Promise}\n */\n update(params: {id: string}) {\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 ? {editlock: {token: this.editLock.token, refresh: true}} : {}),\n ...{groups: [payload]},\n };\n\n return 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\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 if (breakout.body?.groups) {\n this.set('groups', breakout.body.groups);\n }\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 * 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 * The pre-assignments need to be queried when \"hasBreakoutPreAssignments\" is true\n * @param {Object} params\n * @returns {void}\n */\n queryPreAssignments(params) {\n if (!params || !params.enableBreakoutSession || !params.hasBreakoutPreAssignments) {\n return;\n }\n if (!this.shouldFetchPreassignments) {\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 }\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:breakouts#queryPreAssignments failed', error);\n });\n this.shouldFetchPreassignments = true;\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","preAssignments","shouldFetchPreassignments","editLock","intervalID","meetingId","children","currentBreakoutSession","Breakout","derived","isInMainSession","cache","deps","fn","BREAKOUTS","SESSION_TYPES","MAIN","isActiveBreakout","BREAKOUT","STATUS","OPEN","CLOSING","breakoutGroupId","length","CLOSED","id","initialize","listenTo","trigger","EVENTS","BREAKOUTS_CLOSING","debouncedQueryRosters","queryRosters","leading","trailing","breakout","triggerReturnToMainEvent","listenToCurrentSessionTypeChange","listenToBroadcastMessages","listenToBreakoutRosters","listenToBreakoutHelp","webex","cleanUp","stopListening","locusUrlUpdate","set","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","preEnableBreakoutSession","current","SESSION_STATES","ACTIVE","ALLOWED","ASSIGNED_CURRENT","REQUESTED","queryPreAssignments","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","create","boServiceErrorHandler","breakInfo","_clearEditLockInfo","resolve","clearSessions","action","ACTION","DELETE","start","START","allowToJoinLater","duration","DEFAULT_DURATION","refresh","end","CLOSE","update","unlockEdit","breakoutInfo","getBreakout","GET","keepEditLockAlive","enableAndLockBreakout","lockBreakout","EDIT_LOCK_STATUS","LOCKED","ttl","DEFAULT_TTL","window","clearInterval","setInterval","unLockEditBreakout","assign","sessions","internalSessions","map","item","assigned","memberIds","assignedEmails","emails","anyoneCanJoin","anyone","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 preAssignments: 'array', // appears when getPreAssignments info hasBreakoutPreAssignments = true\n shouldFetchPreassignments: 'boolean', // Controlling the lifecycle of the pre-assign API\n editLock: 'object', // appears when getBreakout info editlock = true\n intervalID: 'number',\n meetingId: 'string',\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: ['groups'],\n /**\n * Returns the actived group id\n * @returns {boolean}\n */\n fn() {\n if (this.groups?.length) {\n return this.groups[0].status !== BREAKOUTS.STATUS.CLOSED ? this.groups[0].id : '';\n }\n\n return '';\n },\n },\n },\n\n /**\n * initialize for the breakouts\n * @returns {void}\n */\n initialize() {\n this.listenTo(this, 'change:status', () => {\n if (this.status === BREAKOUTS.STATUS.CLOSING) {\n this.trigger(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);\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 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 const preEnableBreakoutSession = this.get('enableBreakoutSession');\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 // We need to call queryPreAssignments when enableBreakoutSession become true\n if (preEnableBreakoutSession !== params.enableBreakoutSession) {\n this.queryPreAssignments(params);\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 if (!enable) {\n // if enable is false, updateBreakout set the param then set enableBreakoutSession as false\n this.updateBreakout(info.body);\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 * 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 breakInfo = 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 if (breakInfo.body?.groups) {\n this.set('groups', breakInfo.body.groups);\n }\n\n // clear edit lock info after save breakout session info\n this._clearEditLockInfo();\n\n return Promise.resolve(breakInfo);\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 breakInfo = 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 if (breakInfo.body?.groups) {\n this.set('groups', breakInfo.body.groups);\n }\n this.shouldFetchPreassignments = false;\n\n return Promise.resolve(breakInfo);\n },\n\n /**\n * Host or cohost starts breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n start(params = {}) {\n const action = BREAKOUTS.ACTION.START;\n const payload = {\n id: this.breakoutGroupId,\n action,\n allowBackToMain: false,\n allowToJoinLater: false,\n duration: BREAKOUTS.DEFAULT_DURATION,\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 return 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\n /**\n * Host or cohost ends breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n 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 return 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\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 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 if (breakout.body?.groups) {\n this.set('groups', breakout.body.groups);\n }\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 * 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 * The pre-assignments need to be queried when \"hasBreakoutPreAssignments\" is true\n * @param {Object} params\n * @returns {void}\n */\n queryPreAssignments(params) {\n if (!params || !params.enableBreakoutSession || !params.hasBreakoutPreAssignments) {\n return;\n }\n if (!this.shouldFetchPreassignments) {\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 }\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:breakouts#queryPreAssignments failed', error);\n });\n this.shouldFetchPreassignments = true;\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.106",
3
+ "version": "3.0.0-beta.107",
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.106",
36
- "@webex/test-helper-chai": "3.0.0-beta.106",
37
- "@webex/test-helper-mocha": "3.0.0-beta.106",
38
- "@webex/test-helper-mock-webex": "3.0.0-beta.106",
39
- "@webex/test-helper-retry": "3.0.0-beta.106",
40
- "@webex/test-helper-test-users": "3.0.0-beta.106",
35
+ "@webex/plugin-meetings": "3.0.0-beta.107",
36
+ "@webex/test-helper-chai": "3.0.0-beta.107",
37
+ "@webex/test-helper-mocha": "3.0.0-beta.107",
38
+ "@webex/test-helper-mock-webex": "3.0.0-beta.107",
39
+ "@webex/test-helper-retry": "3.0.0-beta.107",
40
+ "@webex/test-helper-test-users": "3.0.0-beta.107",
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.106",
49
+ "@webex/common": "3.0.0-beta.107",
50
50
  "@webex/internal-media-core": "1.38.0",
51
- "@webex/internal-plugin-conversation": "3.0.0-beta.106",
52
- "@webex/internal-plugin-device": "3.0.0-beta.106",
53
- "@webex/internal-plugin-llm": "3.0.0-beta.106",
54
- "@webex/internal-plugin-mercury": "3.0.0-beta.106",
55
- "@webex/internal-plugin-metrics": "3.0.0-beta.106",
56
- "@webex/internal-plugin-support": "3.0.0-beta.106",
57
- "@webex/internal-plugin-user": "3.0.0-beta.106",
58
- "@webex/media-helpers": "3.0.0-beta.106",
59
- "@webex/plugin-people": "3.0.0-beta.106",
60
- "@webex/plugin-rooms": "3.0.0-beta.106",
61
- "@webex/webex-core": "3.0.0-beta.106",
51
+ "@webex/internal-plugin-conversation": "3.0.0-beta.107",
52
+ "@webex/internal-plugin-device": "3.0.0-beta.107",
53
+ "@webex/internal-plugin-llm": "3.0.0-beta.107",
54
+ "@webex/internal-plugin-mercury": "3.0.0-beta.107",
55
+ "@webex/internal-plugin-metrics": "3.0.0-beta.107",
56
+ "@webex/internal-plugin-support": "3.0.0-beta.107",
57
+ "@webex/internal-plugin-user": "3.0.0-beta.107",
58
+ "@webex/media-helpers": "3.0.0-beta.107",
59
+ "@webex/plugin-people": "3.0.0-beta.107",
60
+ "@webex/plugin-rooms": "3.0.0-beta.107",
61
+ "@webex/webex-core": "3.0.0-beta.107",
62
62
  "ampersand-collection": "^2.0.2",
63
63
  "bowser": "^2.11.0",
64
64
  "btoa": "^1.2.1",
@@ -580,26 +580,35 @@ const Breakouts = WebexPlugin.extend({
580
580
  * Host or cohost update breakout sessions
581
581
  * @param {Object} params
582
582
  * @param {String} params.id
583
+ * @param {Boolean} unlockEdit
583
584
  * @returns {Promise}
584
585
  */
585
- update(params: {id: string}) {
586
+ async update(params: {id: string}, unlockEdit?: boolean) {
586
587
  if (!params.id) {
587
588
  return Promise.reject(new Error('Missing breakout group id'));
588
589
  }
589
590
  const payload = {...params};
590
591
 
591
592
  const body = {
592
- ...(this.editLock?.token ? {editlock: {token: this.editLock.token, refresh: true}} : {}),
593
+ ...(this.editLock?.token
594
+ ? {editlock: {token: this.editLock.token, refresh: !unlockEdit}}
595
+ : {}),
593
596
  ...{groups: [payload]},
594
597
  };
595
598
 
596
- return this.request({
599
+ const breakoutInfo = await this.request({
597
600
  method: HTTP_VERBS.PUT,
598
601
  uri: this.url,
599
602
  body,
600
603
  }).catch((error) => {
601
604
  return Promise.reject(boServiceErrorHandler(error, 'Breakouts#update'));
602
605
  });
606
+
607
+ if (unlockEdit) {
608
+ this._clearEditLockInfo();
609
+ }
610
+
611
+ return breakoutInfo;
603
612
  },
604
613
 
605
614
  /**
@@ -407,7 +407,8 @@ skipInNode(describe)('plugin-meetings', () => {
407
407
  });
408
408
  });
409
409
 
410
- it('alice Video Mute', () => {
410
+ // skipped for now, because it fails intermittently, it will be rewritten and re-enabled in SPARK-399695
411
+ it.skip('alice Video Mute', () => {
411
412
  const checkEvent = (event) =>
412
413
  !!event.delta.updated.find(
413
414
  (member) => alice.meeting.members.selfId === member.id && member.isVideoMuted === true
@@ -424,7 +425,8 @@ skipInNode(describe)('plugin-meetings', () => {
424
425
  });
425
426
  });
426
427
 
427
- it('alice video unMute', () => {
428
+ // skipped for now, because it fails intermittently, it will be rewritten and re-enabled in SPARK-399695
429
+ it.skip('alice video unMute', () => {
428
430
  const checkEvent = (event) =>
429
431
  !!event.delta.updated.find(
430
432
  (member) => alice.meeting.members.selfId === member.id && member.isVideoMuted === false
@@ -723,6 +723,26 @@ describe('plugin-meetings', () => {
723
723
  },
724
724
  });
725
725
  });
726
+ it('makes the request as expected when unlockEdit is true', async () => {
727
+ breakouts.editLock = {
728
+ token: 'token1',
729
+ };
730
+ const params = {
731
+ id: 'groupId',
732
+ sessions: [{name: 'Session 1'}],
733
+ };
734
+ breakouts._clearEditLockInfo = sinon.stub();
735
+ const result = await breakouts.update(params, true);
736
+ assert.calledOnceWithExactly(webex.request, {
737
+ method: 'PUT',
738
+ uri: 'url',
739
+ body: {
740
+ editlock: {token: 'token1', refresh: false},
741
+ groups: [params],
742
+ },
743
+ });
744
+ assert.calledOnceWithExactly(breakouts._clearEditLockInfo);
745
+ });
726
746
  it('throw error if missing id in params', async () => {
727
747
  const params = {
728
748
  sessions: [{name: 'Session 1'}],