@webex/plugin-meetings 3.0.0-beta.50 → 3.0.0-beta.52

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.
@@ -115,7 +115,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
115
115
  parseRoster: function parseRoster(locus) {
116
116
  this.members.locusParticipantsUpdate(locus);
117
117
  },
118
- /**
118
+ /*
119
119
  * Broadcast message to this breakout session's participants
120
120
  * @param {String} message
121
121
  * @param {Object} options
@@ -130,7 +130,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
130
130
  sessionId: this.sessionId
131
131
  });
132
132
  },
133
- version: "3.0.0-beta.50"
133
+ version: "3.0.0-beta.52"
134
134
  });
135
135
  var _default = Breakout;
136
136
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["Breakout","WebexPlugin","extend","idAttribute","namespace","MEETINGS","breakoutRequest","BreakoutRequest","props","active","allowed","assigned","assignedCurrent","requested","current","name","sessionId","sessionType","groupId","url","derived","isMain","deps","fn","initialize","members","Members","parent","webex","join","request","method","HTTP_VERBS","POST","uri","body","leave","Error","mainSession","breakouts","filter","breakout","askForHelp","parseRoster","locus","locusParticipantsUpdate","broadcast","message","options"],"sources":["breakout.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport {HTTP_VERBS, MEETINGS} from '../constants';\nimport LocusInfo from '../locus-info';\nimport Members from '../members';\nimport BreakoutRequest from './request';\n\n/**\n * @class\n */\nconst Breakout = WebexPlugin.extend({\n idAttribute: 'sessionId',\n\n namespace: MEETINGS,\n\n breakoutRequest: BreakoutRequest,\n props: {\n active: ['boolean', false, false], // this session is active\n allowed: ['boolean', false, false], // allowed to join this session\n assigned: ['boolean', false, false], // assigned to this session, but not necessarily joined yet\n assignedCurrent: ['boolean', false, false], // assigned AND current session\n requested: ['boolean', false, false], // requested by the host to join this session\n current: ['boolean', false, false], // the current joined session\n name: 'string',\n sessionId: 'string',\n sessionType: 'string',\n groupId: 'string',\n url: 'string', // where to send requests to\n },\n\n derived: {\n isMain: {\n deps: ['sessionType'],\n /**\n * If the breakout has no name, assume it is the main session\n * @returns {boolean}\n */\n fn() {\n return this.sessionType === 'MAIN';\n },\n },\n },\n\n initialize() {\n this.members = new Members({}, {parent: this.webex});\n // @ts-ignore\n this.breakoutRequest = new BreakoutRequest({webex: this.webex});\n },\n\n /**\n * Joins the breakout session\n * @returns {Promise}\n */\n join() {\n return this.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/move`,\n body: {\n groupId: this.groupId,\n sessionId: this.sessionId,\n },\n });\n },\n\n /**\n * Leaves the breakout session to return to the main session\n * @returns {Promise}\n * @throws {Error} if an attempt is made to leave the main session or if the main session cannot be found\n */\n leave() {\n if (this.isMain) {\n throw new Error('Cannot leave the main session');\n }\n\n const mainSession = this.parent.breakouts.filter((breakout) => breakout.isMain)[0];\n\n if (!mainSession) {\n throw new Error('Cannot leave, no main session found');\n }\n\n return mainSession.join();\n },\n\n /**\n * Sends a help request for the current breakout\n * @returns {Promise}\n */\n askForHelp() {\n return this.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/help`,\n body: {\n groupId: this.groupId,\n sessionId: this.sessionId,\n },\n });\n },\n\n /**\n * Parses the participants from the locus object\n * @param locus Locus object\n * @returns {void}\n */\n\n parseRoster(locus) {\n this.members.locusParticipantsUpdate(locus);\n },\n\n /**\n * Broadcast message to this breakout session's participants\n * @param {String} message\n * @param {Object} options\n * @returns {Promise}\n */\n broadcast(message, options) {\n return this.breakoutRequest.broadcast({\n url: this.url,\n message,\n options,\n groupId: this.groupId,\n sessionId: this.sessionId,\n });\n },\n});\n\nexport default Breakout;\n"],"mappings":"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"}
1
+ {"version":3,"names":["Breakout","WebexPlugin","extend","idAttribute","namespace","MEETINGS","breakoutRequest","BreakoutRequest","props","active","allowed","assigned","assignedCurrent","requested","current","name","sessionId","sessionType","groupId","url","derived","isMain","deps","fn","initialize","members","Members","parent","webex","join","request","method","HTTP_VERBS","POST","uri","body","leave","Error","mainSession","breakouts","filter","breakout","askForHelp","parseRoster","locus","locusParticipantsUpdate","broadcast","message","options"],"sources":["breakout.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport {HTTP_VERBS, MEETINGS} from '../constants';\nimport LocusInfo from '../locus-info';\nimport Members from '../members';\nimport BreakoutRequest from './request';\n\n/**\n * @class\n */\nconst Breakout = WebexPlugin.extend({\n idAttribute: 'sessionId',\n\n namespace: MEETINGS,\n\n breakoutRequest: BreakoutRequest,\n props: {\n active: ['boolean', false, false], // this session is active\n allowed: ['boolean', false, false], // allowed to join this session\n assigned: ['boolean', false, false], // assigned to this session, but not necessarily joined yet\n assignedCurrent: ['boolean', false, false], // assigned AND current session\n requested: ['boolean', false, false], // requested by the host to join this session\n current: ['boolean', false, false], // the current joined session\n name: 'string',\n sessionId: 'string',\n sessionType: 'string',\n groupId: 'string',\n url: 'string', // where to send requests to\n },\n\n derived: {\n isMain: {\n deps: ['sessionType'],\n /**\n * If the breakout has no name, assume it is the main session\n * @returns {boolean}\n */\n fn() {\n return this.sessionType === 'MAIN';\n },\n },\n },\n\n initialize() {\n this.members = new Members({}, {parent: this.webex});\n // @ts-ignore\n this.breakoutRequest = new BreakoutRequest({webex: this.webex});\n },\n\n /**\n * Joins the breakout session\n * @returns {Promise}\n */\n join() {\n return this.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/move`,\n body: {\n groupId: this.groupId,\n sessionId: this.sessionId,\n },\n });\n },\n\n /**\n * Leaves the breakout session to return to the main session\n * @returns {Promise}\n * @throws {Error} if an attempt is made to leave the main session or if the main session cannot be found\n */\n leave() {\n if (this.isMain) {\n throw new Error('Cannot leave the main session');\n }\n\n const mainSession = this.parent.breakouts.filter((breakout) => breakout.isMain)[0];\n\n if (!mainSession) {\n throw new Error('Cannot leave, no main session found');\n }\n\n return mainSession.join();\n },\n\n /**\n * Sends a help request for the current breakout\n * @returns {Promise}\n */\n askForHelp() {\n return this.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/help`,\n body: {\n groupId: this.groupId,\n sessionId: this.sessionId,\n },\n });\n },\n\n /**\n * Parses the participants from the locus object\n * @param locus Locus object\n * @returns {void}\n */\n\n parseRoster(locus) {\n this.members.locusParticipantsUpdate(locus);\n },\n /*\n * Broadcast message to this breakout session's participants\n * @param {String} message\n * @param {Object} options\n * @returns {Promise}\n */\n broadcast(message, options) {\n return this.breakoutRequest.broadcast({\n url: this.url,\n message,\n options,\n groupId: this.groupId,\n sessionId: this.sessionId,\n });\n },\n});\n\nexport default Breakout;\n"],"mappings":"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"}
@@ -60,12 +60,15 @@ var Breakouts = _webexCore.WebexPlugin.extend({
60
60
  locusUrl: 'string',
61
61
  // the current locus url
62
62
  breakoutServiceUrl: 'string',
63
- // the current breakout resouce url
63
+ // the current breakout resource url
64
64
  mainLocusUrl: 'string',
65
65
  // the locus url of the main session
66
- groups: 'array' // appears when create breakouts
66
+ groups: 'array',
67
+ // appears when create breakouts
68
+ editLock: 'object',
69
+ // appears when getBreakout info editlock = true
70
+ intervalID: 'number'
67
71
  },
68
-
69
72
  children: {
70
73
  currentBreakoutSession: _breakout.default
71
74
  },
@@ -141,7 +144,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
141
144
  }
142
145
  },
143
146
  /**
144
- * Update the current breakout resouce url
147
+ * Update the current breakout resource url
145
148
  * @param {string} breakoutServiceUrl
146
149
  * @returns {void}
147
150
  */
@@ -337,7 +340,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
337
340
  return _promise.default.reject(new Error("enableBreakouts: the breakoutServiceUrl is empty"));
338
341
  },
339
342
  /**
340
- * Make the meeting enbale or disable breakout session
343
+ * Make the meeting enable or disable breakout session
341
344
  * @param {boolean} enable
342
345
  * @returns {Promise}
343
346
  */
@@ -401,29 +404,41 @@ var Breakouts = _webexCore.WebexPlugin.extend({
401
404
  var _this7 = this;
402
405
  return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
403
406
  var _breakInfo$body;
404
- var breakInfo;
407
+ var bodyInfo, breakInfo;
405
408
  return _regenerator.default.wrap(function _callee2$(_context2) {
406
409
  while (1) switch (_context2.prev = _context2.next) {
407
410
  case 0:
408
- _context2.next = 2;
411
+ // @ts-ignore
412
+ bodyInfo = _this7.editLock && !!_this7.editLock.token ? {
413
+ groups: [{
414
+ sessions: sessions
415
+ }],
416
+ editlock: {
417
+ token: _this7.editLock.token
418
+ }
419
+ } : {
420
+ groups: [{
421
+ sessions: sessions
422
+ }]
423
+ };
424
+ _context2.next = 3;
409
425
  return _this7.webex.request({
410
426
  method: _constants.HTTP_VERBS.PUT,
411
427
  uri: _this7.url,
412
- body: {
413
- groups: [{
414
- sessions: sessions
415
- }]
416
- }
428
+ body: bodyInfo
417
429
  }).catch(function (error) {
418
430
  return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#create --> Edit lock token mismatch'));
419
431
  });
420
- case 2:
432
+ case 3:
421
433
  breakInfo = _context2.sent;
422
434
  if ((_breakInfo$body = breakInfo.body) !== null && _breakInfo$body !== void 0 && _breakInfo$body.groups) {
423
435
  _this7.set('groups', breakInfo.body.groups);
424
436
  }
437
+
438
+ // clear edit lock info after save breakout session info
439
+ _this7._clearEditLockInfo();
425
440
  return _context2.abrupt("return", _promise.default.resolve(breakInfo));
426
- case 5:
441
+ case 7:
427
442
  case "end":
428
443
  return _context2.stop();
429
444
  }
@@ -438,29 +453,38 @@ var Breakouts = _webexCore.WebexPlugin.extend({
438
453
  var _this8 = this;
439
454
  return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
440
455
  var _breakInfo$body2;
441
- var breakInfo;
456
+ var bodyInfo, breakInfo;
442
457
  return _regenerator.default.wrap(function _callee3$(_context3) {
443
458
  while (1) switch (_context3.prev = _context3.next) {
444
459
  case 0:
445
- _context3.next = 2;
460
+ // @ts-ignore
461
+ bodyInfo = _this8.editLock && !!_this8.editLock.token ? {
462
+ groups: [{
463
+ action: _constants.BREAKOUTS.ACTION.DELETE
464
+ }],
465
+ editlock: {
466
+ token: _this8.editLock.token
467
+ }
468
+ } : {
469
+ groups: [{
470
+ action: _constants.BREAKOUTS.ACTION.DELETE
471
+ }]
472
+ };
473
+ _context3.next = 3;
446
474
  return _this8.webex.request({
447
475
  method: _constants.HTTP_VERBS.PUT,
448
476
  uri: _this8.url,
449
- body: {
450
- groups: [{
451
- action: _constants.BREAKOUTS.ACTION.DELETE
452
- }]
453
- }
477
+ body: bodyInfo
454
478
  }).catch(function (error) {
455
479
  return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#clearSessions --> Edit lock token mismatch'));
456
480
  });
457
- case 2:
481
+ case 3:
458
482
  breakInfo = _context3.sent;
459
483
  if ((_breakInfo$body2 = breakInfo.body) !== null && _breakInfo$body2 !== void 0 && _breakInfo$body2.groups) {
460
484
  _this8.set('groups', breakInfo.body.groups);
461
485
  }
462
486
  return _context3.abrupt("return", _promise.default.resolve(breakInfo));
463
- case 5:
487
+ case 6:
464
488
  case "end":
465
489
  return _context3.stop();
466
490
  }
@@ -525,7 +549,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
525
549
  getBreakout: function getBreakout(editlock) {
526
550
  var _this9 = this;
527
551
  return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
528
- var _breakout$body;
552
+ var _breakout$body, _breakout$body2;
529
553
  var breakout;
530
554
  return _regenerator.default.wrap(function _callee4$(_context4) {
531
555
  while (1) switch (_context4.prev = _context4.next) {
@@ -540,15 +564,160 @@ var Breakouts = _webexCore.WebexPlugin.extend({
540
564
  if ((_breakout$body = breakout.body) !== null && _breakout$body !== void 0 && _breakout$body.groups) {
541
565
  _this9.set('groups', breakout.body.groups);
542
566
  }
567
+ if ((_breakout$body2 = breakout.body) !== null && _breakout$body2 !== void 0 && _breakout$body2.editlock && editlock) {
568
+ _this9.set('editLock', breakout.body.editlock);
569
+ }
543
570
  return _context4.abrupt("return", breakout);
544
- case 5:
571
+ case 6:
545
572
  case "end":
546
573
  return _context4.stop();
547
574
  }
548
575
  }, _callee4);
549
576
  }))();
550
577
  },
551
- version: "3.0.0-beta.50"
578
+ /**
579
+ * enable and edit lock breakout
580
+ * @returns {void}
581
+ */
582
+ enableAndLockBreakout: function enableAndLockBreakout() {
583
+ var _this10 = this;
584
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
585
+ var info;
586
+ return _regenerator.default.wrap(function _callee5$(_context5) {
587
+ while (1) switch (_context5.prev = _context5.next) {
588
+ case 0:
589
+ if (!_this10.enableBreakoutSession) {
590
+ _context5.next = 4;
591
+ break;
592
+ }
593
+ _this10.lockBreakout();
594
+ _context5.next = 8;
595
+ break;
596
+ case 4:
597
+ _context5.next = 6;
598
+ return _this10.enableBreakouts();
599
+ case 6:
600
+ info = _context5.sent;
601
+ if (info.body) {
602
+ _this10.lockBreakout();
603
+ }
604
+ case 8:
605
+ case "end":
606
+ return _context5.stop();
607
+ }
608
+ }, _callee5);
609
+ }))();
610
+ },
611
+ /**
612
+ * send breakout edit lock
613
+ * @returns {void}
614
+ */
615
+ lockBreakout: function lockBreakout() {
616
+ var _this11 = this;
617
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
618
+ var _breakout$body3, breakout;
619
+ return _regenerator.default.wrap(function _callee6$(_context6) {
620
+ while (1) switch (_context6.prev = _context6.next) {
621
+ case 0:
622
+ if (!(_this11.editLock && !!_this11.editLock.token)) {
623
+ _context6.next = 8;
624
+ break;
625
+ }
626
+ if (!(_this11.editLock.state === _constants.BREAKOUTS.EDIT_LOCK_STATUS.LOCKED)) {
627
+ _context6.next = 5;
628
+ break;
629
+ }
630
+ throw new Error('Breakout already locked');
631
+ case 5:
632
+ _this11.keepEditLockAlive();
633
+ case 6:
634
+ _context6.next = 12;
635
+ break;
636
+ case 8:
637
+ _context6.next = 10;
638
+ return _this11.getBreakout(true);
639
+ case 10:
640
+ breakout = _context6.sent;
641
+ if ((_breakout$body3 = breakout.body) !== null && _breakout$body3 !== void 0 && _breakout$body3.editlock) {
642
+ _this11.keepEditLockAlive();
643
+ }
644
+ case 12:
645
+ case "end":
646
+ return _context6.stop();
647
+ }
648
+ }, _callee6);
649
+ }))();
650
+ },
651
+ /**
652
+ * keep edit lock alive
653
+ * @returns {void}
654
+ */
655
+ keepEditLockAlive: function keepEditLockAlive() {
656
+ var _this12 = this;
657
+ if (this.editLock && !!this.editLock.token) {
658
+ var ttl = this.editLock.ttl < 30 ? _constants.BREAKOUTS.DEFAULT_TTL : this.editLock.ttl;
659
+ this.intervalID = window.setInterval(function () {
660
+ _this12.request({
661
+ method: _constants.HTTP_VERBS.PUT,
662
+ uri: "".concat(_this12.url, "/editlock/").concat(_this12.editLock.token)
663
+ }).catch(function (error) {
664
+ _this12._clearEditLockInfo();
665
+ return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#keepEditLockAlive'));
666
+ });
667
+ }, ttl / 2 * 1000);
668
+ }
669
+ },
670
+ /**
671
+ * unlock edit breakout
672
+ * @returns {void}
673
+ */
674
+ unLockEditBreakout: function unLockEditBreakout() {
675
+ var _this13 = this;
676
+ this.request({
677
+ method: _constants.HTTP_VERBS.DELETE,
678
+ uri: "".concat(this.url, "/editlock/").concat(this.editLock.token)
679
+ }).then(function () {
680
+ _this13._clearEditLockInfo();
681
+ }).catch(function (error) {
682
+ return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#unLockEditBreakout'));
683
+ });
684
+ },
685
+ /**
686
+ * clear interval and edit lock info
687
+ * @private
688
+ * @returns {void}
689
+ */
690
+ _clearEditLockInfo: function _clearEditLockInfo() {
691
+ if (this.intervalID) {
692
+ clearInterval(this.intervalID);
693
+ }
694
+ this.set('editLock', {});
695
+ },
696
+ /**
697
+ * assign participants to breakout session
698
+ * @param {Array} sessions
699
+ * @returns {void}
700
+ */
701
+ assign: function assign(sessions) {
702
+ var internalSessions = sessions.map(function (item) {
703
+ return {
704
+ id: item.id,
705
+ assigned: item.memberIds,
706
+ assignedEmails: item.emails
707
+ };
708
+ });
709
+ return this.request({
710
+ method: _constants.HTTP_VERBS.PUT,
711
+ uri: this.url,
712
+ body: {
713
+ groups: [{
714
+ id: this.breakoutGroupId,
715
+ sessions: internalSessions
716
+ }]
717
+ }
718
+ });
719
+ },
720
+ version: "3.0.0-beta.52"
552
721
  });
553
722
  var _default = Breakouts;
554
723
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["Breakouts","WebexPlugin","extend","namespace","MEETINGS","breakoutRequest","BreakoutRequest","collections","breakouts","BreakoutCollection","props","allowBackToMain","delayCloseTime","enableBreakoutSession","groupId","name","sessionId","sessionType","startTime","status","url","locusUrl","breakoutServiceUrl","mainLocusUrl","groups","children","currentBreakoutSession","Breakout","derived","isInMainSession","deps","fn","BREAKOUTS","SESSION_TYPES","MAIN","breakoutGroupId","length","id","initialize","listenTo","STATUS","CLOSING","trigger","EVENTS","BREAKOUTS_CLOSING","debouncedQueryRosters","queryRosters","leading","trailing","listenToBroadcastMessages","listenToBreakoutRosters","webex","cleanUp","stopListening","locusUrlUpdate","set","breakoutServiceUrlUpdate","request","uri","qs","btoa","then","result","rosters","body","forEach","locus","handleRosterUpdate","MEMBERS_UPDATE","catch","error","LoggerProxy","logger","controls","breakout","session","get","parseRoster","internal","llm","event","data","senderUserId","sentTime","message","MESSAGE","mercury","updateBreakout","params","current","SESSION_STATES","ACTIVE","ALLOWED","ASSIGNED_CURRENT","REQUESTED","updateBreakoutSessions","payload","breakoutSessions","state","ASSIGNED","getMainSession","mainSession","filter","isMain","Error","askAllToReturn","method","HTTP_VERBS","POST","broadcast","options","enableBreakouts","err","reject","toggleBreakout","enable","undefined","info","doToggleBreakout","PUT","create","sessions","boServiceErrorHandler","breakInfo","resolve","clearSessions","action","ACTION","DELETE","start","START","allowToJoinLater","duration","DEFAULT_DURATION","end","CLOSE","getBreakout","editlock","GET"],"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} from '../constants';\n\nimport Breakout from './breakout';\nimport BreakoutCollection from './collection';\nimport BreakoutRequest from './request';\nimport {boServiceErrorHandler} 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 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 resouce url\n mainLocusUrl: 'string', // the locus url of the main session\n groups: 'array', // appears when create breakouts\n },\n\n children: {\n currentBreakoutSession: Breakout,\n },\n\n derived: {\n isInMainSession: {\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 breakoutGroupId: {\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].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', () => {\n this.debouncedQueryRosters();\n });\n this.listenToBroadcastMessages();\n this.listenToBreakoutRosters();\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 resouce 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 /**\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 * Updates the information about the current breakout\n * @param {Object} params\n * @returns {void}\n */\n updateBreakout(params) {\n this.set(params);\n this.set('groups', params.groups);\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 this.set('enableBreakoutSession', params.enableBreakoutSession);\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 });\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 enbale 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 // @ts-ignore\n return this.webex.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n enableBreakoutSession: enable,\n },\n });\n },\n\n /**\n * Create new breakout sessions\n * @param {object} sessions -- breakout session group\n * @returns {Promise}\n */\n async create(sessions) {\n // @ts-ignore\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [\n {\n sessions,\n },\n ],\n },\n })\n .catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#create --> Edit lock token mismatch')\n );\n });\n\n if (breakInfo.body?.groups) {\n this.set('groups', breakInfo.body.groups);\n }\n\n return Promise.resolve(breakInfo);\n },\n\n /**\n * Delete all breakout sessions\n * @returns {Promise}\n */\n async clearSessions() {\n // @ts-ignore\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [\n {\n action: BREAKOUTS.ACTION.DELETE,\n },\n ],\n },\n })\n .catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#clearSessions --> Edit lock token mismatch')\n );\n });\n\n if (breakInfo.body?.groups) {\n this.set('groups', breakInfo.body.groups);\n }\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 return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [payload],\n },\n }).catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#start --> Edit lock token mismatch')\n );\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 return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [payload],\n },\n }).catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#end --> Edit lock token mismatch')\n );\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\n return breakout;\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","groupId","name","sessionId","sessionType","startTime","status","url","locusUrl","breakoutServiceUrl","mainLocusUrl","groups","editLock","intervalID","children","currentBreakoutSession","Breakout","derived","isInMainSession","deps","fn","BREAKOUTS","SESSION_TYPES","MAIN","breakoutGroupId","length","id","initialize","listenTo","STATUS","CLOSING","trigger","EVENTS","BREAKOUTS_CLOSING","debouncedQueryRosters","queryRosters","leading","trailing","listenToBroadcastMessages","listenToBreakoutRosters","webex","cleanUp","stopListening","locusUrlUpdate","set","breakoutServiceUrlUpdate","request","uri","qs","btoa","then","result","rosters","body","forEach","locus","handleRosterUpdate","MEMBERS_UPDATE","catch","error","LoggerProxy","logger","controls","breakout","session","get","parseRoster","internal","llm","event","data","senderUserId","sentTime","message","MESSAGE","mercury","updateBreakout","params","current","SESSION_STATES","ACTIVE","ALLOWED","ASSIGNED_CURRENT","REQUESTED","updateBreakoutSessions","payload","breakoutSessions","state","ASSIGNED","getMainSession","mainSession","filter","isMain","Error","askAllToReturn","method","HTTP_VERBS","POST","broadcast","options","enableBreakouts","err","reject","toggleBreakout","enable","undefined","info","doToggleBreakout","PUT","create","sessions","bodyInfo","token","editlock","boServiceErrorHandler","breakInfo","_clearEditLockInfo","resolve","clearSessions","action","ACTION","DELETE","start","START","allowToJoinLater","duration","DEFAULT_DURATION","end","CLOSE","getBreakout","GET","enableAndLockBreakout","lockBreakout","EDIT_LOCK_STATUS","LOCKED","keepEditLockAlive","ttl","DEFAULT_TTL","window","setInterval","unLockEditBreakout","clearInterval","assign","internalSessions","map","item","assigned","memberIds","assignedEmails","emails"],"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} from '../constants';\n\nimport Breakout from './breakout';\nimport BreakoutCollection from './collection';\nimport BreakoutRequest from './request';\nimport {boServiceErrorHandler} 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 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 editLock: 'object', // appears when getBreakout info editlock = true\n intervalID: 'number',\n },\n\n children: {\n currentBreakoutSession: Breakout,\n },\n\n derived: {\n isInMainSession: {\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 breakoutGroupId: {\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].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', () => {\n this.debouncedQueryRosters();\n });\n this.listenToBroadcastMessages();\n this.listenToBreakoutRosters();\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 /**\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 * Updates the information about the current breakout\n * @param {Object} params\n * @returns {void}\n */\n updateBreakout(params) {\n this.set(params);\n this.set('groups', params.groups);\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 this.set('enableBreakoutSession', params.enableBreakoutSession);\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 });\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 // @ts-ignore\n return this.webex.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n enableBreakoutSession: enable,\n },\n });\n },\n\n /**\n * Create new breakout sessions\n * @param {object} sessions -- breakout session group\n * @returns {Promise}\n */\n async create(sessions) {\n // @ts-ignore\n const bodyInfo =\n this.editLock && !!this.editLock.token\n ? {\n groups: [\n {\n sessions,\n },\n ],\n editlock: {\n token: this.editLock.token,\n },\n }\n : {\n groups: [\n {\n sessions,\n },\n ],\n };\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: bodyInfo,\n })\n .catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#create --> Edit lock token mismatch')\n );\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 // @ts-ignore\n const bodyInfo =\n this.editLock && !!this.editLock.token\n ? {\n groups: [\n {\n action: BREAKOUTS.ACTION.DELETE,\n },\n ],\n editlock: {\n token: this.editLock.token,\n },\n }\n : {\n groups: [\n {\n action: BREAKOUTS.ACTION.DELETE,\n },\n ],\n };\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: bodyInfo,\n })\n .catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#clearSessions --> Edit lock token mismatch')\n );\n });\n\n if (breakInfo.body?.groups) {\n this.set('groups', breakInfo.body.groups);\n }\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 return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [payload],\n },\n }).catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#start --> Edit lock token mismatch')\n );\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 return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [payload],\n },\n }).catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#end --> Edit lock token mismatch')\n );\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 (breakout.body?.editlock && editlock) {\n this.set('editLock', breakout.body.editlock);\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\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 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 * 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 };\n });\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [\n {\n id: this.breakoutGroupId,\n sessions: internalSessions,\n },\n ],\n },\n });\n },\n});\n\nexport default Breakouts;\n"],"mappings":"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"}
@@ -35,11 +35,15 @@ exports.getBroadcastRoles = getBroadcastRoles;
35
35
  var boServiceErrorHandler = function boServiceErrorHandler(error, message) {
36
36
  var _error$body;
37
37
  var errorCode = error === null || error === void 0 ? void 0 : (_error$body = error.body) === null || _error$body === void 0 ? void 0 : _error$body.errorCode;
38
- var EDIT_LOCK_TOKEN_MISMATCH = _constants.BREAKOUTS.ERROR_CODE.EDIT_LOCK_TOKEN_MISMATCH;
38
+ var _BREAKOUTS$ERROR_CODE = _constants.BREAKOUTS.ERROR_CODE,
39
+ EDIT_LOCK_TOKEN_MISMATCH = _BREAKOUTS$ERROR_CODE.EDIT_LOCK_TOKEN_MISMATCH,
40
+ EDIT_NOT_AUTHORIZED = _BREAKOUTS$ERROR_CODE.EDIT_NOT_AUTHORIZED;
41
+ _loggerProxy.default.logger.info(message);
39
42
  switch (errorCode) {
40
43
  case EDIT_LOCK_TOKEN_MISMATCH:
41
- _loggerProxy.default.logger.info(message);
42
44
  return new _editLockError.default('Edit lock token mismatch', error);
45
+ case EDIT_NOT_AUTHORIZED:
46
+ return new _editLockError.default('Not authorized to interact with edit lock', error);
43
47
  default:
44
48
  return error;
45
49
  }
@@ -1 +1 @@
1
- {"version":3,"names":["getBroadcastRoles","options","recipientRoles","cohosts","presenters","push","boServiceErrorHandler","error","message","errorCode","body","EDIT_LOCK_TOKEN_MISMATCH","BREAKOUTS","ERROR_CODE","LoggerProxy","logger","info","BreakoutEditLockedError"],"sources":["utils.ts"],"sourcesContent":["// eslint-disable-next-line import/prefer-default-export\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport BreakoutEditLockedError from './edit-lock-error';\nimport {BREAKOUTS} from '../constants';\n\nexport const getBroadcastRoles = (options): string[] => {\n const recipientRoles = [];\n if (!options || (!options.cohosts && !options.presenters)) {\n return recipientRoles;\n }\n if (options.cohosts) {\n recipientRoles.push('COHOST');\n }\n if (options.presenters) {\n recipientRoles.push('PRESENTER');\n }\n\n return recipientRoles;\n};\n\n/**\n * Deals with all kinds of errors of breakout service\n * @param {object} error // one of the breakout service error\n * @param {string} message // message to log\n * @returns {object}\n */\nexport const boServiceErrorHandler = (error: any, message: string): any => {\n const errorCode = error?.body?.errorCode;\n const {EDIT_LOCK_TOKEN_MISMATCH} = BREAKOUTS.ERROR_CODE;\n switch (errorCode) {\n case EDIT_LOCK_TOKEN_MISMATCH:\n LoggerProxy.logger.info(message);\n\n return new BreakoutEditLockedError('Edit lock token mismatch', error);\n\n default:\n return error;\n }\n};\n"],"mappings":";;;;;;;;AACA;AACA;AACA;AAHA;;AAKO,IAAMA,iBAAiB,GAAG,SAApBA,iBAAiB,CAAIC,OAAO,EAAe;EACtD,IAAMC,cAAc,GAAG,EAAE;EACzB,IAAI,CAACD,OAAO,IAAK,CAACA,OAAO,CAACE,OAAO,IAAI,CAACF,OAAO,CAACG,UAAW,EAAE;IACzD,OAAOF,cAAc;EACvB;EACA,IAAID,OAAO,CAACE,OAAO,EAAE;IACnBD,cAAc,CAACG,IAAI,CAAC,QAAQ,CAAC;EAC/B;EACA,IAAIJ,OAAO,CAACG,UAAU,EAAE;IACtBF,cAAc,CAACG,IAAI,CAAC,WAAW,CAAC;EAClC;EAEA,OAAOH,cAAc;AACvB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AALA;AAMO,IAAMI,qBAAqB,GAAG,SAAxBA,qBAAqB,CAAIC,KAAU,EAAEC,OAAe,EAAU;EAAA;EACzE,IAAMC,SAAS,GAAGF,KAAK,aAALA,KAAK,sCAALA,KAAK,CAAEG,IAAI,gDAAX,YAAaD,SAAS;EACxC,IAAOE,wBAAwB,GAAIC,oBAAS,CAACC,UAAU,CAAhDF,wBAAwB;EAC/B,QAAQF,SAAS;IACf,KAAKE,wBAAwB;MAC3BG,oBAAW,CAACC,MAAM,CAACC,IAAI,CAACR,OAAO,CAAC;MAEhC,OAAO,IAAIS,sBAAuB,CAAC,0BAA0B,EAAEV,KAAK,CAAC;IAEvE;MACE,OAAOA,KAAK;EAAC;AAEnB,CAAC;AAAC"}
1
+ {"version":3,"names":["getBroadcastRoles","options","recipientRoles","cohosts","presenters","push","boServiceErrorHandler","error","message","errorCode","body","BREAKOUTS","ERROR_CODE","EDIT_LOCK_TOKEN_MISMATCH","EDIT_NOT_AUTHORIZED","LoggerProxy","logger","info","BreakoutEditLockedError"],"sources":["utils.ts"],"sourcesContent":["// eslint-disable-next-line import/prefer-default-export\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport BreakoutEditLockedError from './edit-lock-error';\nimport {BREAKOUTS} from '../constants';\n\nexport const getBroadcastRoles = (options): string[] => {\n const recipientRoles = [];\n if (!options || (!options.cohosts && !options.presenters)) {\n return recipientRoles;\n }\n if (options.cohosts) {\n recipientRoles.push('COHOST');\n }\n if (options.presenters) {\n recipientRoles.push('PRESENTER');\n }\n\n return recipientRoles;\n};\n\n/**\n * Deals with all kinds of errors of breakout service\n * @param {object} error // one of the breakout service error\n * @param {string} message // message to log\n * @returns {object}\n */\nexport const boServiceErrorHandler = (error: any, message: string): any => {\n const errorCode = error?.body?.errorCode;\n const {EDIT_LOCK_TOKEN_MISMATCH, EDIT_NOT_AUTHORIZED} = BREAKOUTS.ERROR_CODE;\n LoggerProxy.logger.info(message);\n switch (errorCode) {\n case EDIT_LOCK_TOKEN_MISMATCH:\n return new BreakoutEditLockedError('Edit lock token mismatch', error);\n case EDIT_NOT_AUTHORIZED:\n return new BreakoutEditLockedError('Not authorized to interact with edit lock', error);\n default:\n return error;\n }\n};\n"],"mappings":";;;;;;;;AACA;AACA;AACA;AAHA;;AAKO,IAAMA,iBAAiB,GAAG,SAApBA,iBAAiB,CAAIC,OAAO,EAAe;EACtD,IAAMC,cAAc,GAAG,EAAE;EACzB,IAAI,CAACD,OAAO,IAAK,CAACA,OAAO,CAACE,OAAO,IAAI,CAACF,OAAO,CAACG,UAAW,EAAE;IACzD,OAAOF,cAAc;EACvB;EACA,IAAID,OAAO,CAACE,OAAO,EAAE;IACnBD,cAAc,CAACG,IAAI,CAAC,QAAQ,CAAC;EAC/B;EACA,IAAIJ,OAAO,CAACG,UAAU,EAAE;IACtBF,cAAc,CAACG,IAAI,CAAC,WAAW,CAAC;EAClC;EAEA,OAAOH,cAAc;AACvB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AALA;AAMO,IAAMI,qBAAqB,GAAG,SAAxBA,qBAAqB,CAAIC,KAAU,EAAEC,OAAe,EAAU;EAAA;EACzE,IAAMC,SAAS,GAAGF,KAAK,aAALA,KAAK,sCAALA,KAAK,CAAEG,IAAI,gDAAX,YAAaD,SAAS;EACxC,4BAAwDE,oBAAS,CAACC,UAAU;IAArEC,wBAAwB,yBAAxBA,wBAAwB;IAAEC,mBAAmB,yBAAnBA,mBAAmB;EACpDC,oBAAW,CAACC,MAAM,CAACC,IAAI,CAACT,OAAO,CAAC;EAChC,QAAQC,SAAS;IACf,KAAKI,wBAAwB;MAC3B,OAAO,IAAIK,sBAAuB,CAAC,0BAA0B,EAAEX,KAAK,CAAC;IACvE,KAAKO,mBAAmB;MACtB,OAAO,IAAII,sBAAuB,CAAC,2CAA2C,EAAEX,KAAK,CAAC;IACxF;MACE,OAAOA,KAAK;EAAC;AAEnB,CAAC;AAAC"}
package/dist/constants.js CHANGED
@@ -558,7 +558,8 @@ var HTTP_VERBS = {
558
558
  PUT: 'PUT',
559
559
  POST: 'POST',
560
560
  GET: 'GET',
561
- PATCH: 'PATCH'
561
+ PATCH: 'PATCH',
562
+ DELETE: 'DELETE'
562
563
  };
563
564
 
564
565
  // https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/iceGatheringState
@@ -636,9 +637,16 @@ var BREAKOUTS = {
636
637
  DELETE: 'DELETE'
637
638
  },
638
639
  ERROR_CODE: {
639
- EDIT_LOCK_TOKEN_MISMATCH: 201409024
640
+ EDIT_LOCK_TOKEN_MISMATCH: 201409024,
641
+ EDIT_NOT_AUTHORIZED: 201403007
640
642
  },
641
- DEFAULT_DURATION: 60000
643
+ DEFAULT_DURATION: 60000,
644
+ EDIT_LOCK_STATUS: {
645
+ LOCKED: 'LOCKED',
646
+ NOT_LOCKED: 'NOT_LOCKED',
647
+ UNKNOWN: 'UNKNOWN'
648
+ },
649
+ DEFAULT_TTL: 30
642
650
  };
643
651
  exports.BREAKOUTS = BREAKOUTS;
644
652
  var LOCUSINFO = {