@webex/plugin-meetings 3.0.0-beta.105 → 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.105"
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.105"
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":";;;;;;;;;;;;;;;;;;;;AAGA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAqF;AAAA;AAErF;AACA;AACA;AACA,IAAMA,SAAS,GAAGC,sBAAW,CAACC,MAAM,CAAC;EACnCC,SAAS,EAAEC,mBAAQ;EACnBC,eAAe,EAAEC,gBAAe;EAChCC,WAAW,EAAE;IACXC,SAAS,EAAEC;EACb,CAAC;EAEDC,KAAK,EAAE;IACLC,eAAe,EAAE,SAAS;IAAE;IAC5BC,cAAc,EAAE,QAAQ;IAAE;IAC1BC,qBAAqB,EAAE,SAAS;IAAE;IAClCC,yBAAyB,EAAE,SAAS;IAAE;IACtCC,OAAO,EAAE,QAAQ;IAAE;IACnBC,IAAI,EAAE,QAAQ;IAAE;IAChBC,SAAS,EAAE,QAAQ;IAAE;IACrBC,WAAW,EAAE,QAAQ;IAAE;IACvBC,SAAS,EAAE,QAAQ;IAAE;IACrBC,MAAM,EAAE,QAAQ;IAAE;IAClBC,GAAG,EAAE,QAAQ;IAAE;IACfC,QAAQ,EAAE,QAAQ;IAAE;IACpBC,kBAAkB,EAAE,QAAQ;IAAE;IAC9BC,YAAY,EAAE,QAAQ;IAAE;IACxBC,MAAM,EAAE,OAAO;IAAE;IACjBC,cAAc,EAAE,OAAO;IAAE;IACzBC,yBAAyB,EAAE,SAAS;IAAE;IACtCC,QAAQ,EAAE,QAAQ;IAAE;IACpBC,UAAU,EAAE,QAAQ;IACpBC,SAAS,EAAE;EACb,CAAC;EACDC,QAAQ,EAAE;IACRC,sBAAsB,EAAEC;EAC1B,CAAC;EAEDC,OAAO,EAAE;IACPC,eAAe,EAAE;MACfC,KAAK,EAAE,KAAK;MACZC,IAAI,EAAE,CAAC,aAAa,CAAC;MACrB;AACN;AACA;AACA;MACMC,EAAE,gBAAG;QACH,OAAO,IAAI,CAACpB,WAAW,KAAKqB,oBAAS,CAACC,aAAa,CAACC,IAAI;MAC1D;IACF,CAAC;IACDC,gBAAgB,EAAE;MAChBN,KAAK,EAAE,KAAK;MAAE;MACdC,IAAI,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC;MAC/B;AACN;AACA;AACA;MACMC,EAAE,gBAAG;QACH,OACE,IAAI,CAACpB,WAAW,KAAKqB,oBAAS,CAACC,aAAa,CAACG,QAAQ,KACpD,IAAI,CAACvB,MAAM,KAAKmB,oBAAS,CAACK,MAAM,CAACC,IAAI,IAAI,IAAI,CAACzB,MAAM,KAAKmB,oBAAS,CAACK,MAAM,CAACE,OAAO,CAAC;MAEvF;IACF,CAAC;IACDC,eAAe,EAAE;MACfX,KAAK,EAAE,KAAK;MACZC,IAAI,EAAE,CAAC,QAAQ,CAAC;MAChB;AACN;AACA;AACA;MACMC,EAAE,gBAAG;QAAA;QACH,oBAAI,IAAI,CAACb,MAAM,yCAAX,aAAauB,MAAM,EAAE;UACvB,OAAO,IAAI,CAACvB,MAAM,CAAC,CAAC,CAAC,CAACL,MAAM,KAAKmB,oBAAS,CAACK,MAAM,CAACK,MAAM,GAAG,IAAI,CAACxB,MAAM,CAAC,CAAC,CAAC,CAACyB,EAAE,GAAG,EAAE;QACnF;QAEA,OAAO,EAAE;MACX;IACF;EACF,CAAC;EAED;AACF;AACA;AACA;EACEC,UAAU,wBAAG;IAAA;IACX,IAAI,CAACC,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,YAAM;MACzC,IAAI,KAAI,CAAChC,MAAM,KAAKmB,oBAAS,CAACK,MAAM,CAACE,OAAO,EAAE;QAC5C,KAAI,CAACO,OAAO,CAACd,oBAAS,CAACe,MAAM,CAACC,iBAAiB,CAAC;MAClD;IACF,CAAC,CAAC;IACF,IAAI,CAACC,qBAAqB,GAAG,wBAAS,IAAI,CAACC,YAAY,EAAE,EAAE,EAAE;MAC3DC,OAAO,EAAE,IAAI;MACbC,QAAQ,EAAE;IACZ,CAAC,CAAC;IACF,IAAI,CAACP,QAAQ,CAAC,IAAI,CAAC5C,SAAS,EAAE,KAAK,EAAE,UAACoD,QAAQ,EAAK;MACjD,KAAI,CAACJ,qBAAqB,EAAE;MAC5B,KAAI,CAACK,wBAAwB,CAACD,QAAQ,CAAC;IACzC,CAAC,CAAC;IACF,IAAI,CAACR,QAAQ,CAAC,IAAI,CAAC5C,SAAS,EAAE,kCAAkC,EAAE,UAACoD,QAAQ,EAAK;MAC9E,KAAI,CAACC,wBAAwB,CAACD,QAAQ,CAAC;IACzC,CAAC,CAAC;IACF,IAAI,CAACE,gCAAgC,EAAE;IACvC,IAAI,CAACC,yBAAyB,EAAE;IAChC,IAAI,CAACC,uBAAuB,EAAE;IAC9B,IAAI,CAACC,oBAAoB,EAAE;IAC3B;IACA,IAAI,CAAC5D,eAAe,GAAG,IAAIC,gBAAe,CAAC;MAAC4D,KAAK,EAAE,IAAI,CAACA;IAAK,CAAC,CAAC;EACjE,CAAC;EAED;AACF;AACA;AACA;EACEC,OAAO,qBAAG;IACR,IAAI,CAACC,aAAa,EAAE;EACtB,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,cAAc,0BAAC/C,QAAQ,EAAE;IACvB,IAAI,CAACgD,GAAG,CAAC,UAAU,EAAEhD,QAAQ,CAAC;IAC9B,IAAOa,eAAe,GAAkB,IAAI,CAArCA,eAAe;MAAEX,YAAY,GAAI,IAAI,CAApBA,YAAY;IACpC,IAAIW,eAAe,IAAI,CAACX,YAAY,EAAE;MACpC,IAAI,CAAC8C,GAAG,CAAC,cAAc,EAAEhD,QAAQ,CAAC;IACpC;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;EACEiD,wBAAwB,oCAAChD,kBAAkB,EAAE;IAC3C,IAAI,CAAC+C,GAAG,CAAC,oBAAoB,YAAK/C,kBAAkB,gBAAa;EACnE,CAAC;EAED;AACF;AACA;AACA;AACA;EACEkC,YAAY,0BAAG;IAAA;IACb,IAAI,CAACS,KAAK,CACPM,OAAO,CAAC;MAACC,GAAG,YAAK,IAAI,CAACpD,GAAG,YAAS;MAAEqD,EAAE,EAAE;QAACpD,QAAQ,EAAEqD,IAAI,CAAC,IAAI,CAACrD,QAAQ;MAAC;IAAC,CAAC,CAAC,CACzEsD,IAAI,CAAC,UAACC,MAAM,EAAK;MAChB,IACSC,OAAO,GACZD,MAAM,CADRE,IAAI,CAAGD,OAAO;MAGhBA,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEE,OAAO,CAAC,gBAAa;QAAA,IAAXC,KAAK,QAALA,KAAK;QACtB,MAAI,CAACC,kBAAkB,CAACD,KAAK,CAAC;MAChC,CAAC,CAAC;MAEF,MAAI,CAAC5B,OAAO,CAACd,oBAAS,CAACe,MAAM,CAAC6B,cAAc,CAAC;IAC/C,CAAC,CAAC,CACDC,KAAK,CAAC,UAACC,KAAK,EAAK;MAChBC,oBAAW,CAACC,MAAM,CAACF,KAAK,CAAC,uCAAuC,EAAEA,KAAK,CAAC;IAC1E,CAAC,CAAC;EACN,CAAC;EAED;AACF;AACA;AACA;AACA;EACEH,kBAAkB,8BAACD,KAAK,EAAE;IAAA;IACxB,IAAMhE,SAAS,sBAAGgE,KAAK,CAACO,QAAQ,6EAAd,gBAAgB5B,QAAQ,0DAAxB,sBAA0B3C,SAAS;IAErD,IAAMwE,OAAO,GAAG,IAAI,CAACjF,SAAS,CAACkF,GAAG,CAACzE,SAAS,CAAC;IAE7C,IAAI,CAACwE,OAAO,EAAE;MACZ;IACF;IAEAA,OAAO,CAACE,WAAW,CAACV,KAAK,CAAC;EAC5B,CAAC;EACD;AACF;AACA;AACA;EACEnB,gCAAgC,8CAAS;IAAA;IACvC,IAAI,CAACV,QAAQ,CACX,IAAI,CAACpB,sBAAsB,EAC3B,oBAAoB,EACpB,UAACA,sBAAsB,EAAEd,WAAW,EAAK;MACvC,IAAI,IAAA0E,4CAAqC,EAAC5D,sBAAsB,EAAEd,WAAW,CAAC,EAAE;QAC9E,MAAI,CAACmC,OAAO,CAACd,oBAAS,CAACe,MAAM,CAACuC,cAAc,CAAC;MAC/C;IACF,CAAC,CACF;EACH,CAAC;EAED;AACF;AACA;AACA;EACE9B,yBAAyB,uCAAG;IAAA;IAC1B,IAAI,CAACX,QAAQ,CAAC,IAAI,CAACc,KAAK,CAAC4B,QAAQ,CAACC,GAAG,EAAE,wBAAwB,EAAE,UAACC,KAAK,EAAK;MAC1E,kBAEIA,KAAK,CADPC,IAAI;QAAGC,YAAY,eAAZA,YAAY;QAAEC,QAAQ,eAARA,QAAQ;QAAEC,OAAO,eAAPA,OAAO;MAGxC,MAAI,CAAC/C,OAAO,CAACd,oBAAS,CAACe,MAAM,CAAC+C,OAAO,EAAE;QACrCH,YAAY,EAAZA,YAAY;QACZC,QAAQ,EAARA,QAAQ;QACRC,OAAO,EAAPA,OAAO;QACP;QACA;QACA;QACAnF,SAAS,EAAE,MAAI,CAACe,sBAAsB,CAACf;MACzC,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;EACE+C,uBAAuB,qCAAG;IAAA;IACxB,IAAI,CAACZ,QAAQ,CAAC,IAAI,CAACc,KAAK,CAAC4B,QAAQ,CAACQ,OAAO,EAAE,uBAAuB,EAAE,UAACN,KAAK,EAAK;MAC7E,MAAI,CAACd,kBAAkB,CAACc,KAAK,CAACC,IAAI,CAAChB,KAAK,CAAC;MACzC,MAAI,CAAC5B,OAAO,CAACd,oBAAS,CAACe,MAAM,CAAC6B,cAAc,CAAC;IAC/C,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;EACElB,oBAAoB,kCAAG;IAAA;IACrB,IAAI,CAACb,QAAQ,CAAC,IAAI,CAACc,KAAK,CAAC4B,QAAQ,CAACQ,OAAO,EAAE,qBAAqB,EAAE,UAACN,KAAK,EAAK;MAC3E,mBAEIA,KAAK,CADPC,IAAI;QAAGM,WAAW,gBAAXA,WAAW;QAAEtF,SAAS,gBAATA,SAAS;MAE/B,MAAI,CAACoC,OAAO,CAACd,oBAAS,CAACe,MAAM,CAACkD,YAAY,EAAE;QAACD,WAAW,EAAXA,WAAW;QAAEtF,SAAS,EAATA;MAAS,CAAC,CAAC;IACvE,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACEwF,cAAc,0BAACC,MAAM,EAAE;IAAA;IACrB,IAAMC,wBAAwB,GAAG,IAAI,CAACjB,GAAG,CAAC,uBAAuB,CAAC;IAClE,IAAI,CAACpB,GAAG,CAACoC,MAAM,CAAC;;IAEhB;IACA,IAAI,CAACpC,GAAG,CAAC,QAAQ,EAAEoC,MAAM,CAACjF,MAAM,CAAC;IACjC,IAAI,CAAC6C,GAAG,CAAC,WAAW,EAAEoC,MAAM,CAACvF,SAAS,CAAC;IACvC,IAAI,CAACmD,GAAG,CAAC,QAAQ,EAAEoC,MAAM,CAACtF,MAAM,CAAC;IAEjC,IAAI,CAACkD,GAAG,CAAC,wBAAwB;MAC/BrD,SAAS,EAAEyF,MAAM,CAACzF,SAAS;MAC3BF,OAAO,EAAE2F,MAAM,CAAC3F,OAAO;MACvBC,IAAI,EAAE0F,MAAM,CAAC1F,IAAI;MACjB4F,OAAO,EAAE,IAAI;MACb1F,WAAW,EAAEwF,MAAM,CAACxF,WAAW;MAC/BG,GAAG,EAAEqF,MAAM,CAACrF;IAAG,4CACdkB,oBAAS,CAACsE,cAAc,CAACC,MAAM,EAAG,KAAK,4CACvCvE,oBAAS,CAACsE,cAAc,CAACE,OAAO,EAAG,KAAK,4CACxCxE,oBAAS,CAACsE,cAAc,CAACE,OAAO,EAAG,KAAK,4CACxCxE,oBAAS,CAACsE,cAAc,CAACG,gBAAgB,EAAG,KAAK,4CACjDzE,oBAAS,CAACsE,cAAc,CAACI,SAAS,EAAG,KAAK,cAC3C;;IAEF;IACA,IAAIN,wBAAwB,KAAKD,MAAM,CAAC7F,qBAAqB,EAAE;MAC7D,IAAI,CAACqG,mBAAmB,CAACR,MAAM,CAAC;IAClC;IAEA,IACE,IAAI,CAAC1E,sBAAsB,CAACmF,QAAQ,CAAC,WAAW,CAAC,KAAK,IAAI,CAACnF,sBAAsB,CAACf,SAAS,IAC3F,IAAI,CAACe,sBAAsB,CAACmF,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,CAACnF,sBAAsB,CAACjB,OAAO,EACvF;MACA;MACA,IAAMqG,OAAO,GAAG,IAAI,CAAClD,KAAK,CAACmD,QAAQ,CAACC,gBAAgB,CAACC,eAAI,EAAE,IAAI,CAACzF,SAAS,CAAC;MAC1E0F,eAAa,CAACC,sBAAsB,CAAC;QACnCC,cAAc,EAAE,IAAI,CAAC1F,sBAAsB;QAC3CoF,OAAO,EAAPA,OAAO;QACPO,cAAc,EAAEjB,MAAM,CAACiB;MACzB,CAAC,CAAC;IACJ;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,sBAAsB,kCAACC,OAAO,EAAE;IAAA;IAC9B,IAAMrH,SAAS,GAAG,CAAC,CAAC;IAEpB,IAAIqH,OAAO,CAACC,gBAAgB,EAAE;MAC5B,uBAAQvF,oBAAS,CAACsE,cAAc,EAAE,UAACkB,KAAK,EAAK;QAC3C,uBAAQF,OAAO,CAACC,gBAAgB,CAACC,KAAK,CAAC,EAAE,UAACnE,QAAQ,EAAK;UACrD,IAAO3C,SAAS,GAAI2C,QAAQ,CAArB3C,SAAS;UAEhB,IAAI,CAACT,SAAS,CAACS,SAAS,CAAC,EAAE;YACzBT,SAAS,CAACS,SAAS,CAAC,GAAG2C,QAAQ;YAC/BpD,SAAS,CAACS,SAAS,CAAC,CAACsB,oBAAS,CAACsE,cAAc,CAACC,MAAM,CAAC,GAAG,KAAK;YAC7DtG,SAAS,CAACS,SAAS,CAAC,CAACsB,oBAAS,CAACsE,cAAc,CAACmB,QAAQ,CAAC,GAAG,KAAK;YAC/DxH,SAAS,CAACS,SAAS,CAAC,CAACsB,oBAAS,CAACsE,cAAc,CAACE,OAAO,CAAC,GAAG,KAAK;YAC9DvG,SAAS,CAACS,SAAS,CAAC,CAACsB,oBAAS,CAACsE,cAAc,CAACG,gBAAgB,CAAC,GAAG,KAAK;YACvExG,SAAS,CAACS,SAAS,CAAC,CAACsB,oBAAS,CAACsE,cAAc,CAACI,SAAS,CAAC,GAAG,KAAK;UAClE;UAEAzG,SAAS,CAACS,SAAS,CAAC,CAAC8G,KAAK,CAAC,GAAG,IAAI;UAElC,IAAIA,KAAK,KAAKxF,oBAAS,CAACsE,cAAc,CAACI,SAAS,EAAE;YAChDzG,SAAS,CAACS,SAAS,CAAC,CAACgH,yBAAyB,GAAGrE,QAAQ,CAACsE,UAAU;UACtE;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;IAEA,uBAAQ1H,SAAS,EAAE,UAACoD,QAAyB,EAAK;MAChD;MACAA,QAAQ,CAACvC,GAAG,GAAG,MAAI,CAACA,GAAG;IACzB,CAAC,CAAC;IAEF,IAAI,CAACb,SAAS,CAAC8D,GAAG,CAAC,qBAAc9D,SAAS,CAAC,CAAC;EAC9C,CAAC;EACD;AACF;AACA;AACA;EACE2H,cAAc,4BAAG;IACf,IAAI,IAAI,CAAChG,eAAe,EAAE;MACxB,OAAO,IAAI,CAACH,sBAAsB;IACpC;IAEA,IAAMoG,WAAW,GAAG,IAAI,CAAC5H,SAAS,CAAC6H,MAAM,CAAC,UAACzE,QAAQ;MAAA,OAAKA,QAAQ,CAAC0E,MAAM;IAAA,EAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,CAACF,WAAW,EAAE;MAChB,MAAM,IAAIG,KAAK,CAAC,uBAAuB,CAAC;IAC1C;IAEA,OAAOH,WAAW;EACpB,CAAC;EACD;AACF;AACA;AACA;EACEI,cAAc,4BAAG;IACf,IAAMJ,WAAW,GAAG,IAAI,CAACD,cAAc,EAAE;IAEzC,OAAO,IAAI,CAACjE,KAAK,CAACM,OAAO,CAAC;MACxBiE,MAAM,EAAEC,qBAAU,CAACC,IAAI;MACvBlE,GAAG,YAAK,IAAI,CAACpD,GAAG,iBAAc;MAC9B0D,IAAI,EAAE;QACJhE,OAAO,EAAEqH,WAAW,CAACrH,OAAO;QAC5BE,SAAS,EAAEmH,WAAW,CAACnH;MACzB;IACF,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACE2H,SAAS,qBAACxC,OAAO,EAAEyC,OAAO,EAAE;IAC1B,IAAO9F,eAAe,GAAI,IAAI,CAAvBA,eAAe;IACtB,IAAI,CAACA,eAAe,EAAE;MACpB,MAAM,IAAIwF,KAAK,CAAC,6CAA6C,CAAC;IAChE;IAEA,OAAO,IAAI,CAAClI,eAAe,CAACuI,SAAS,CAAC;MACpCvH,GAAG,EAAE,IAAI,CAACA,GAAG;MACb+E,OAAO,EAAPA,OAAO;MACPyC,OAAO,EAAPA,OAAO;MACP9H,OAAO,EAAEgC;IACX,CAAC,CAAC;EACJ,CAAC;EACD;AACF;AACA;AACA;EACE+F,eAAe,6BAAG;IAChB,IAAI,IAAI,CAACvH,kBAAkB,EAAE;MAC3B;MACA,OAAO,IAAI,CAAC2C,KAAK,CACdM,OAAO,CAAC;QACPiE,MAAM,EAAEC,qBAAU,CAACC,IAAI;QACvBlE,GAAG,EAAE,IAAI,CAAClD,kBAAkB;QAC5BwD,IAAI,EAAE;UACJzD,QAAQ,EAAE,IAAI,CAACA;QACjB;MACF,CAAC,CAAC,CACD8D,KAAK,CAAC,UAAC2D,GAAG,EAAK;QACdzD,oBAAW,CAACC,MAAM,CAACF,KAAK,sEACwC0D,GAAG,EAClE;QACD,MAAMA,GAAG;MACX,CAAC,CAAC;IACN;IAEA,OAAO,iBAAQC,MAAM,CAAC,IAAIT,KAAK,oDAAoD,CAAC;EACtF,CAAC;EAED;AACF;AACA;AACA;AACA;EACQU,cAAc,0BAACC,MAAM,EAAE;IAAA;IAAA;MAAA;MAAA;QAAA;UAAA;YAAA,MACvB,MAAI,CAACrI,qBAAqB,KAAKsI,SAAS;cAAA;cAAA;YAAA;YAAA;YAAA,OACvB,MAAI,CAACL,eAAe,EAAE;UAAA;YAAnCM,IAAI;YAAA,IACLF,MAAM;cAAA;cAAA;YAAA;YACT;YACA,MAAI,CAACzC,cAAc,CAAC2C,IAAI,CAACrE,IAAI,CAAC;YAAC;YAAA,OACzB,MAAI,CAACsE,gBAAgB,CAACH,MAAM,CAAC;UAAA;YAAA;YAAA;UAAA;YAAA;YAAA,OAG/B,MAAI,CAACG,gBAAgB,CAACH,MAAM,CAAC;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EAEvC,CAAC;EAED;AACF;AACA;AACA;AACA;EACEG,gBAAgB,4BAACH,MAAM,EAAE;IACvB,IAAMnE,IAAI,mCACJ,IAAI,CAACnD,QAAQ,IAAI,CAAC,CAAC,IAAI,CAACA,QAAQ,CAAC0H,KAAK,GAAG;MAACC,QAAQ,EAAE;QAACD,KAAK,EAAE,IAAI,CAAC1H,QAAQ,CAAC0H;MAAK;IAAC,CAAC,GAAG,CAAC,CAAC,GACvF;MAACzI,qBAAqB,EAAEqI;IAAM,CAAC,CACnC;;IAED;IACA,OAAO,IAAI,CAAChF,KAAK,CAACM,OAAO,CAAC;MACxBiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;MACtB/E,GAAG,EAAE,IAAI,CAACpD,GAAG;MACb0D,IAAI,EAAJA;IACF,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACQ0E,MAAM,kBAAC/C,MAAM,EAAE;IAAA;IAAA;MAAA;MAAA;MAAA;QAAA;UAAA;YACbmB,OAAO,qBAAOnB,MAAM;YACpB3B,IAAI,mCACJ,MAAI,CAACnD,QAAQ,IAAI,CAAC,CAAC,MAAI,CAACA,QAAQ,CAAC0H,KAAK,GAAG;cAACC,QAAQ,EAAE;gBAACD,KAAK,EAAE,MAAI,CAAC1H,QAAQ,CAAC0H;cAAK;YAAC,CAAC,GAAG,CAAC,CAAC,GACvF;cAAC7H,MAAM,EAAE,CAACoG,OAAO;YAAC,CAAC,GAExB;YAAA;YAAA,OACwB,MAAI,CAAC3D,KAAK,CAC/BM,OAAO,CAAC;cACPiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;cACtB/E,GAAG,EAAE,MAAI,CAACpD,GAAG;cACb0D,IAAI,EAAJA;YACF,CAAC,CAAC,CACDK,KAAK,CAAC,UAACC,KAAK,EAAK;cAChB,OAAO,iBAAQ2D,MAAM,CAAC,IAAAU,4BAAqB,EAACrE,KAAK,EAAE,kBAAkB,CAAC,CAAC;YACzE,CAAC,CAAC;UAAA;YAREsE,SAAS;YAUf,uBAAIA,SAAS,CAAC5E,IAAI,4CAAd,gBAAgBtD,MAAM,EAAE;cAC1B,MAAI,CAAC6C,GAAG,CAAC,QAAQ,EAAEqF,SAAS,CAAC5E,IAAI,CAACtD,MAAM,CAAC;YAC3C;;YAEA;YACA,MAAI,CAACmI,kBAAkB,EAAE;YAAC,kCAEnB,iBAAQC,OAAO,CAACF,SAAS,CAAC;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EACnC,CAAC;EAED;AACF;AACA;AACA;EACQG,aAAa,2BAAG;IAAA;IAAA;MAAA;MAAA;MAAA;QAAA;UAAA;YACd/E,IAAI,mCACJ,OAAI,CAACnD,QAAQ,IAAI,CAAC,CAAC,OAAI,CAACA,QAAQ,CAAC0H,KAAK,GAAG;cAACC,QAAQ,EAAE;gBAACD,KAAK,EAAE,OAAI,CAAC1H,QAAQ,CAAC0H;cAAK;YAAC,CAAC,GAAG,CAAC,CAAC,GACvF;cAAC7H,MAAM,EAAE,CAAC;gBAACsI,MAAM,EAAExH,oBAAS,CAACyH,MAAM,CAACC;cAAM,CAAC;YAAC,CAAC,GAElD;YAAA;YAAA,OACwB,OAAI,CAAC/F,KAAK,CAC/BM,OAAO,CAAC;cACPiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;cACtB/E,GAAG,EAAE,OAAI,CAACpD,GAAG;cACb0D,IAAI,EAAJA;YACF,CAAC,CAAC,CACDK,KAAK,CAAC,UAACC,KAAK,EAAK;cAChB,OAAO,iBAAQ2D,MAAM,CAAC,IAAAU,4BAAqB,EAACrE,KAAK,EAAE,yBAAyB,CAAC,CAAC;YAChF,CAAC,CAAC;UAAA;YAREsE,SAAS;YAUf,wBAAIA,SAAS,CAAC5E,IAAI,6CAAd,iBAAgBtD,MAAM,EAAE;cAC1B,OAAI,CAAC6C,GAAG,CAAC,QAAQ,EAAEqF,SAAS,CAAC5E,IAAI,CAACtD,MAAM,CAAC;YAC3C;YACA,OAAI,CAACE,yBAAyB,GAAG,KAAK;YAAC,kCAEhC,iBAAQkI,OAAO,CAACF,SAAS,CAAC;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EACnC,CAAC;EAED;AACF;AACA;AACA;AACA;EACEO,KAAK,mBAAc;IAAA,IAAbxD,MAAM,uEAAG,CAAC,CAAC;IACf,IAAMqD,MAAM,GAAGxH,oBAAS,CAACyH,MAAM,CAACG,KAAK;IACrC,IAAMtC,OAAO;MACX3E,EAAE,EAAE,IAAI,CAACH,eAAe;MACxBgH,MAAM,EAANA,MAAM;MACNpJ,eAAe,EAAE,KAAK;MACtByJ,gBAAgB,EAAE,KAAK;MACvBC,QAAQ,EAAE9H,oBAAS,CAAC+H;IAAgB,GACjC5D,MAAM,CACV;IAED,IAAM3B,IAAI,mCACJ,IAAI,CAACnD,QAAQ,IAAI,CAAC,CAAC,IAAI,CAACA,QAAQ,CAAC0H,KAAK,GACtC;MAACC,QAAQ,EAAE;QAACD,KAAK,EAAE,IAAI,CAAC1H,QAAQ,CAAC0H,KAAK;QAAEiB,OAAO,EAAE;MAAI;IAAC,CAAC,GACvD,CAAC,CAAC,GACH;MAAC9I,MAAM,EAAE,CAACoG,OAAO;IAAC,CAAC,CACvB;IAED,OAAO,IAAI,CAACrD,OAAO,CAAC;MAClBiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;MACtB/E,GAAG,EAAE,IAAI,CAACpD,GAAG;MACb0D,IAAI,EAAJA;IACF,CAAC,CAAC,CAACK,KAAK,CAAC,UAACC,KAAK,EAAK;MAClB,OAAO,iBAAQ2D,MAAM,CAAC,IAAAU,4BAAqB,EAACrE,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACxE,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACEmF,GAAG,iBAAc;IAAA,IAAb9D,MAAM,uEAAG,CAAC,CAAC;IACb,IAAO9F,cAAc,GAAyB,IAAI,CAA3CA,cAAc;MAAmBsC,EAAE,GAAI,IAAI,CAA3BH,eAAe;IACtC,IAAMgH,MAAM,GAAGxH,oBAAS,CAACyH,MAAM,CAACS,KAAK;IACrC,IAAM5C,OAAO;MACX3E,EAAE,EAAFA,EAAE;MACF6G,MAAM,EAANA,MAAM;MACNnJ,cAAc,EAAdA;IAAc,GACX8F,MAAM,CACV;IAED,IAAM3B,IAAI,mCACJ,IAAI,CAACnD,QAAQ,IAAI,CAAC,CAAC,IAAI,CAACA,QAAQ,CAAC0H,KAAK,GACtC;MAACC,QAAQ,EAAE;QAACD,KAAK,EAAE,IAAI,CAAC1H,QAAQ,CAAC0H,KAAK;QAAEiB,OAAO,EAAE;MAAI;IAAC,CAAC,GACvD,CAAC,CAAC,GACH;MAAC9I,MAAM,EAAE,CAACoG,OAAO;IAAC,CAAC,CACvB;IAED,OAAO,IAAI,CAACrD,OAAO,CAAC;MAClBiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;MACtB/E,GAAG,EAAE,IAAI,CAACpD,GAAG;MACb0D,IAAI,EAAJA;IACF,CAAC,CAAC,CAACK,KAAK,CAAC,UAACC,KAAK,EAAK;MAClB,OAAO,iBAAQ2D,MAAM,CAAC,IAAAU,4BAAqB,EAACrE,KAAK,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACQqF,MAAM,kBAAChE,MAAoB,EAAEiE,UAAoB,EAAE;IAAA;IAAA;MAAA;MAAA;MAAA;QAAA;UAAA;YAAA,IAClDjE,MAAM,CAACxD,EAAE;cAAA;cAAA;YAAA;YAAA,kCACL,iBAAQ8F,MAAM,CAAC,IAAIT,KAAK,CAAC,2BAA2B,CAAC,CAAC;UAAA;YAEzDV,OAAO,qBAAOnB,MAAM;YAEpB3B,IAAI,mCACJ,2BAAI,CAACnD,QAAQ,6CAAb,iBAAe0H,KAAK,GACpB;cAACC,QAAQ,EAAE;gBAACD,KAAK,EAAE,OAAI,CAAC1H,QAAQ,CAAC0H,KAAK;gBAAEiB,OAAO,EAAE,CAACI;cAAU;YAAC,CAAC,GAC9D,CAAC,CAAC,GACH;cAAClJ,MAAM,EAAE,CAACoG,OAAO;YAAC,CAAC;YAAA;YAAA,OAGG,OAAI,CAACrD,OAAO,CAAC;cACtCiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;cACtB/E,GAAG,EAAE,OAAI,CAACpD,GAAG;cACb0D,IAAI,EAAJA;YACF,CAAC,CAAC,CAACK,KAAK,CAAC,UAACC,KAAK,EAAK;cAClB,OAAO,iBAAQ2D,MAAM,CAAC,IAAAU,4BAAqB,EAACrE,KAAK,EAAE,kBAAkB,CAAC,CAAC;YACzE,CAAC,CAAC;UAAA;YANIuF,YAAY;YAQlB,IAAID,UAAU,EAAE;cACd,OAAI,CAACf,kBAAkB,EAAE;YAC3B;YAAC,kCAEMgB,YAAY;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EACrB,CAAC;EAED;AACF;AACA;AACA;AACA;EACQC,WAAW,uBAACtB,QAAQ,EAAE;IAAA;IAAA;MAAA;MAAA;MAAA;QAAA;UAAA;YAAA;YAAA,OACH,OAAI,CAAC/E,OAAO,CAAC;cAClCiE,MAAM,EAAEC,qBAAU,CAACoC,GAAG;cACtBrG,GAAG,EAAE,OAAI,CAACpD,GAAG,IAAIkI,QAAQ,uBAAgBA,QAAQ,IAAK,EAAE;YAC1D,CAAC,CAAC;UAAA;YAHI3F,QAAQ;YAKd,sBAAIA,QAAQ,CAACmB,IAAI,2CAAb,eAAetD,MAAM,EAAE;cACzB,OAAI,CAAC6C,GAAG,CAAC,QAAQ,EAAEV,QAAQ,CAACmB,IAAI,CAACtD,MAAM,CAAC;YAC1C;YACA,IAAI8H,QAAQ,uBAAI3F,QAAQ,CAACmB,IAAI,qEAAb,gBAAewE,QAAQ,kDAAvB,sBAAyBD,KAAK,EAAE;cAC9C,OAAI,CAAChF,GAAG,CAAC,UAAU,EAAEV,QAAQ,CAACmB,IAAI,CAACwE,QAAQ,CAAC;cAC5C,OAAI,CAACwB,iBAAiB,EAAE;YAC1B;YAAC,kCAEMnH,QAAQ;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EACjB,CAAC;EAED;AACF;AACA;AACA;EACQoH,qBAAqB,mCAAG;IAAA;IAAA;MAAA;MAAA;QAAA;UAAA;YAAA,KACxB,OAAI,CAACnK,qBAAqB;cAAA;cAAA;YAAA;YAC5B,OAAI,CAACoK,YAAY,EAAE;YAAC;YAAA;UAAA;YAAA;YAAA,OAED,OAAI,CAACnC,eAAe,EAAE;UAAA;YAAnCM,IAAI;YAEV,IAAIA,IAAI,CAACrE,IAAI,EAAE;cACb,OAAI,CAACkG,YAAY,EAAE;YACrB;UAAC;UAAA;YAAA;QAAA;MAAA;IAAA;EAEL,CAAC;EAED;AACF;AACA;AACA;EACQA,YAAY,0BAAG;IAAA;IAAA;MAAA;MAAA;QAAA;UAAA;YAAA,MACf,OAAI,CAACrJ,QAAQ,IAAI,CAAC,CAAC,OAAI,CAACA,QAAQ,CAAC0H,KAAK;cAAA;cAAA;YAAA;YAAA,MACpC,OAAI,CAAC1H,QAAQ,CAACmG,KAAK,KAAKxF,oBAAS,CAAC2I,gBAAgB,CAACC,MAAM;cAAA;cAAA;YAAA;YAAA,MACrD,IAAI5C,KAAK,CAAC,yBAAyB,CAAC;UAAA;YAE1C,OAAI,CAACwC,iBAAiB,EAAE;UAAC;YAAA;YAAA;UAAA;YAAA;YAAA,OAGJ,OAAI,CAACF,WAAW,CAAC,IAAI,CAAC;UAAA;YAAvCjH,QAAQ;YACd,uBAAIA,QAAQ,CAACmB,IAAI,4CAAb,gBAAewE,QAAQ,EAAE;cAC3B,OAAI,CAACwB,iBAAiB,EAAE;YAC1B;UAAC;UAAA;YAAA;QAAA;MAAA;IAAA;EAEL,CAAC;EAED;AACF;AACA;AACA;EACEA,iBAAiB,+BAAG;IAAA;IAClB,IAAI,IAAI,CAACnJ,QAAQ,IAAI,CAAC,CAAC,IAAI,CAACA,QAAQ,CAAC0H,KAAK,EAAE;MAC1C,IAAM8B,GAAG,GAAG,IAAI,CAACxJ,QAAQ,CAACwJ,GAAG,GAAG,EAAE,GAAG7I,oBAAS,CAAC8I,WAAW,GAAG,IAAI,CAACzJ,QAAQ,CAACwJ,GAAG;MAC9E,IAAI,IAAI,CAACvJ,UAAU,EAAE;QACnByJ,MAAM,CAACC,aAAa,CAAC,IAAI,CAAC1J,UAAU,CAAC;MACvC;MAEA,IAAI,CAACA,UAAU,GAAGyJ,MAAM,CAACE,WAAW,CAAC,YAAM;QACzC,OAAI,CAAChH,OAAO,CAAC;UACXiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;UACtB/E,GAAG,YAAK,OAAI,CAACpD,GAAG,uBAAa,OAAI,CAACO,QAAQ,CAAC0H,KAAK;QAClD,CAAC,CAAC,CAAClE,KAAK,CAAC,UAACC,KAAK,EAAK;UAClB,OAAI,CAACuE,kBAAkB,EAAE;UAEzB,OAAO,iBAAQZ,MAAM,CAAC,IAAAU,4BAAqB,EAACrE,KAAK,EAAE,6BAA6B,CAAC,CAAC;QACpF,CAAC,CAAC;MACJ,CAAC,EAAG+F,GAAG,GAAG,CAAC,GAAI,IAAI,CAAC;IACtB;EACF,CAAC;EAED;AACF;AACA;AACA;EACEK,kBAAkB,gCAAG;IAAA;IACnB,IAAI,IAAI,CAAC7J,QAAQ,IAAI,CAAC,CAAC,IAAI,CAACA,QAAQ,CAAC0H,KAAK,EAAE;MAC1C,IAAI,CAAC9E,OAAO,CAAC;QACXiE,MAAM,EAAEC,qBAAU,CAACuB,MAAM;QACzBxF,GAAG,YAAK,IAAI,CAACpD,GAAG,uBAAa,IAAI,CAACO,QAAQ,CAAC0H,KAAK;MAClD,CAAC,CAAC,CACC1E,IAAI,CAAC,YAAM;QACV,OAAI,CAACgF,kBAAkB,EAAE;MAC3B,CAAC,CAAC,CACDxE,KAAK,CAAC,UAACC,KAAK,EAAK;QAChB,OAAO,iBAAQ2D,MAAM,CAAC,IAAAU,4BAAqB,EAACrE,KAAK,EAAE,8BAA8B,CAAC,CAAC;MACrF,CAAC,CAAC;IACN;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;EACEuE,kBAAkB,gCAAG;IACnB,IAAI,IAAI,CAAC/H,UAAU,EAAE;MACnB0J,aAAa,CAAC,IAAI,CAAC1J,UAAU,CAAC;IAChC;IACA,IAAI,CAACyC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;EAC1B,CAAC;EAED;AACF;AACA;AACA;AACA;EACEoH,MAAM,kBAACC,QAAe,EAAE;IACtB,IAAMC,gBAAgB,GAAGD,QAAQ,CAACE,GAAG,CAAC,UAACC,IAAI,EAAK;MAC9C,OAAO;QACL5I,EAAE,EAAE4I,IAAI,CAAC5I,EAAE;QACX6I,QAAQ,EAAED,IAAI,CAACE,SAAS;QACxBC,cAAc,EAAEH,IAAI,CAACI,MAAM;QAC3BC,aAAa,EAAE,CAAC,CAACL,IAAI,CAACM;MACxB,CAAC;IACH,CAAC,CAAC;IAEF,IAAMrH,IAAI,mCACJ,IAAI,CAACnD,QAAQ,IAAI,CAAC,CAAC,IAAI,CAACA,QAAQ,CAAC0H,KAAK,GACtC;MAACC,QAAQ,EAAE;QAACD,KAAK,EAAE,IAAI,CAAC1H,QAAQ,CAAC0H,KAAK;QAAEiB,OAAO,EAAE;MAAI;IAAC,CAAC,GACvD,CAAC,CAAC,GACH;MACD9I,MAAM,EAAE,CACN;QACEyB,EAAE,EAAE,IAAI,CAACH,eAAe;QACxB4I,QAAQ,EAAEC;MACZ,CAAC;IAEL,CAAC,CACF;IAED,OAAO,IAAI,CAACpH,OAAO,CAAC;MAClBiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;MACtB/E,GAAG,EAAE,IAAI,CAACpD,GAAG;MACb0D,IAAI,EAAJA;IACF,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACEmC,mBAAmB,+BAACR,MAAM,EAAE;IAAA;IAC1B,IAAI,CAACA,MAAM,IAAI,CAACA,MAAM,CAAC7F,qBAAqB,IAAI,CAAC6F,MAAM,CAAC5F,yBAAyB,EAAE;MACjF;IACF;IACA,IAAI,CAAC,IAAI,CAACa,yBAAyB,EAAE;MACnC,IAAI,CAACuC,KAAK,CACPM,OAAO,CAAC;QAACC,GAAG,YAAK,IAAI,CAACpD,GAAG,oBAAiB;QAAEqD,EAAE,EAAE;UAACpD,QAAQ,EAAEqD,IAAI,CAAC,IAAI,CAACrD,QAAQ;QAAC;MAAC,CAAC,CAAC,CACjFsD,IAAI,CAAC,UAACC,MAAM,EAAK;QAAA;QAChB,oBAAIA,MAAM,CAACE,IAAI,yCAAX,aAAatD,MAAM,EAAE;UACvB,OAAI,CAAC6C,GAAG,CAAC,gBAAgB,EAAEO,MAAM,CAACE,IAAI,CAACtD,MAAM,CAAC;QAChD;MACF,CAAC,CAAC,CACD2D,KAAK,CAAC,UAACC,KAAK,EAAK;QAChBC,oBAAW,CAACC,MAAM,CAACF,KAAK,CAAC,8CAA8C,EAAEA,KAAK,CAAC;MACjF,CAAC,CAAC;MACJ,IAAI,CAAC1D,yBAAyB,GAAG,IAAI;IACvC;EACF,CAAC;EACD;AACF;AACA;AACA;AACA;AACA;EACE0K,aAAa,yBAACV,QAAe,EAAE;IAC7B,IAAMW,eAAe,GAAGX,QAAQ,CAACE,GAAG,CAAC,UAACC,IAAI,EAAK;MAC7C,OAAO;QACL5I,EAAE,EAAE4I,IAAI,CAAC5I,EAAE;QACXqJ,YAAY,EAAET,IAAI,CAACS,YAAY;QAC/BC,WAAW,EAAEV,IAAI,CAACU;MACpB,CAAC;IACH,CAAC,CAAC;IAEF,IAAMzH,IAAI,GAAG;MACXtD,MAAM,EAAE,CACN;QACEyB,EAAE,EAAE,IAAI,CAACH,eAAe;QACxB4I,QAAQ,EAAEW;MACZ,CAAC,CACF;MACD/C,QAAQ,EAAE;IACZ,CAAC;IAED,IAAI,IAAI,CAAC3H,QAAQ,IAAI,IAAI,CAACA,QAAQ,CAAC0H,KAAK,EAAE;MACxCvE,IAAI,CAACwE,QAAQ,GAAG,IAAI,CAAC3H,QAAQ;IAC/B;IAEA,OAAO,IAAI,CAAC4C,OAAO,CAAC;MAClBiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;MACtB/E,GAAG,YAAK,IAAI,CAACpD,GAAG,mBAAgB;MAChC0D,IAAI,EAAJA;IACF,CAAC,CAAC;EACJ,CAAC;EACD;AACF;AACA;AACA;AACA;EACElB,wBAAwB,oCAACD,QAAQ,EAAE;IACjC,IAAIA,QAAQ,CAAC0E,MAAM,IAAI1E,QAAQ,CAAC6I,SAAS,EAAE;MACzC,IAAI,CAACpJ,OAAO,CAACd,oBAAS,CAACe,MAAM,CAACoJ,kBAAkB,CAAC;IACnD;EACF,CAAC;EAAA;AACH,CAAC,CAAC;AAAC,eAEY1M,SAAS;AAAA"}
@@ -55,6 +55,7 @@ var Member = /*#__PURE__*/function () {
55
55
  (0, _defineProperty2.default)(this, "participant", void 0);
56
56
  (0, _defineProperty2.default)(this, "status", void 0);
57
57
  (0, _defineProperty2.default)(this, "supportsBreakouts", void 0);
58
+ (0, _defineProperty2.default)(this, "supportLiveAnnotation", void 0);
58
59
  (0, _defineProperty2.default)(this, "type", void 0);
59
60
  (0, _defineProperty2.default)(this, "namespace", _constants.MEETINGS);
60
61
  /**
@@ -109,6 +110,13 @@ var Member = /*#__PURE__*/function () {
109
110
  * @memberof Member
110
111
  */
111
112
  this.supportsBreakouts = null;
113
+ /**
114
+ * @instance
115
+ * @type {Boolean}
116
+ * @public
117
+ * @memberof Member
118
+ */
119
+ this.supportLiveAnnotation = null;
112
120
  /**
113
121
  * @instance
114
122
  * @type {Boolean}
@@ -262,6 +270,7 @@ var Member = /*#__PURE__*/function () {
262
270
  this.isVideoMuted = _util.default.isVideoMuted(participant);
263
271
  this.isHandRaised = _util.default.isHandRaised(participant);
264
272
  this.supportsBreakouts = _util.default.isBreakoutsSupported(participant);
273
+ this.supportLiveAnnotation = _util.default.isLiveAnnotationSupported(participant);
265
274
  this.isGuest = _util.default.isGuest(participant);
266
275
  this.isUser = _util.default.isUser(participant);
267
276
  this.isDevice = _util.default.isDevice(participant);
@@ -1 +1 @@
1
- {"version":3,"names":["Member","participant","options","MEETINGS","id","name","isAudioMuted","isVideoMuted","isHandRaised","supportsBreakouts","isSelf","isHost","isGuest","isInLobby","isInMeeting","isNotAdmitted","isContentSharing","status","isDevice","isUser","associatedUser","isRecording","isMutable","isRemovable","type","isModerator","isModeratorAssignmentProhibited","roles","processParticipant","processParticipantOptions","processMember","MemberUtil","extractId","extractName","isBreakoutsSupported","processStatus","processRoles","processIsSelf","selfId","processIsHost","hostId","processIsContentSharing","contentSharingId","processType","processIsRecording","recordingId","extractStatus","_IN_LOBBY_","_IN_MEETING_","_NOT_IN_MEETING_","flag","sharingId","isSame","isAssociatedSame","extractControlRoles"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport {MEETINGS, _IN_LOBBY_, _NOT_IN_MEETING_, _IN_MEETING_} from '../constants';\nimport {IExternalRoles, ParticipantWithRoles} from './types';\n\nimport MemberUtil from './util';\n\n/**\n * @class Member\n */\nexport default class Member {\n associatedUser: any;\n id: any;\n isAudioMuted: any;\n isContentSharing: any;\n isDevice: any;\n isGuest: any;\n isHandRaised: any;\n isHost: any;\n isInLobby: any;\n isInMeeting: any;\n isModerator: any;\n isModeratorAssignmentProhibited: any;\n isMutable: any;\n isNotAdmitted: any;\n isRecording: any;\n isRemovable: any;\n isSelf: any;\n isUser: any;\n isVideoMuted: any;\n roles: IExternalRoles;\n name: any;\n participant: any;\n status: any;\n supportsBreakouts: boolean;\n type: any;\n namespace = MEETINGS;\n\n /**\n * @param {Object} participant - the locus participant\n * @param {Object} [options] - constructor params\n * @param {String} options.selfId\n * @param {String} options.hostId\n * @param {String} options.contentSharingId\n * @param {String} options.type\n * @returns {Member}\n * @memberof Member\n */\n constructor(\n participant: object,\n options:\n | {\n selfId: string;\n hostId: string;\n contentSharingId: string;\n type: string;\n }\n | any = {}\n ) {\n /**\n * The server participant object\n * @instance\n * @type {Object}\n * @private\n * @memberof Member\n */\n this.participant = null;\n /**\n * The member id\n * @instance\n * @type {String}\n * @public\n * @memberof Member\n */\n this.id = null;\n /**\n * The member name\n * @instance\n * @type {String}\n * @public\n * @memberof Member\n */\n this.name = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isAudioMuted = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isVideoMuted = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isHandRaised = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.supportsBreakouts = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isSelf = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isHost = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isGuest = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isInLobby = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isInMeeting = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isNotAdmitted = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isContentSharing = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.status = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isDevice = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isUser = null;\n /**\n * Is this member associated to another user by way of pairing (typical of devices)\n * @instance\n * @type {String}\n * @public\n * @memberof Member\n */\n this.associatedUser = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isRecording = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isMutable = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isRemovable = null;\n /**\n * @instance\n * @type {String}\n * @private\n * @memberof Member\n */\n this.type = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isModerator = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isModeratorAssignmentProhibited = null;\n\n /**\n * @instance\n * @type {IExternalRoles}\n * @public\n * @memberof Member\n */\n this.roles = null;\n // TODO: more participant types\n // such as native client, web client, is a device, what type of phone, etc\n this.processParticipant(participant);\n this.processParticipantOptions(participant, options);\n this.processMember();\n }\n\n /**\n * set all the participant values extracted directly from locus participant\n * @param {Object} participant the locus participant object\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processParticipant(participant: object) {\n this.participant = participant;\n if (participant) {\n this.id = MemberUtil.extractId(participant);\n this.name = MemberUtil.extractName(participant);\n this.isAudioMuted = MemberUtil.isAudioMuted(participant);\n this.isVideoMuted = MemberUtil.isVideoMuted(participant);\n this.isHandRaised = MemberUtil.isHandRaised(participant);\n this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);\n this.isGuest = MemberUtil.isGuest(participant);\n this.isUser = MemberUtil.isUser(participant);\n this.isDevice = MemberUtil.isDevice(participant);\n this.isModerator = MemberUtil.isModerator(participant);\n this.isModeratorAssignmentProhibited =\n MemberUtil.isModeratorAssignmentProhibited(participant);\n this.processStatus(participant);\n this.processRoles(participant as ParticipantWithRoles);\n // must be done last\n this.isNotAdmitted = MemberUtil.isNotAdmitted(participant, this.isGuest, this.status);\n }\n }\n\n /**\n * Use the members options and participant values to set on the member\n * @param {Object} participant the locus participant object\n * @param {Object} options the passed in options, what was set on members\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processParticipantOptions(participant: object, options: any) {\n if (participant && options) {\n this.processIsSelf(participant, options.selfId);\n this.processIsHost(participant, options.hostId);\n this.processIsContentSharing(participant, options.contentSharingId);\n this.processType(options.type);\n this.processIsRecording(participant, options.recordingId);\n }\n }\n\n /**\n * processes what already exists on the member to determine other info about the member\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processMember() {\n // must occur after self, guest, meeting, and type properties are calculated\n this.isRemovable = MemberUtil.isRemovable(\n this.isSelf,\n this.isGuest,\n this.isInMeeting,\n this.type\n );\n // must occur after self, device, meeting, mute status, and type properties are calculated\n this.isMutable = MemberUtil.isMutable(\n this.isSelf,\n this.isDevice,\n this.isInMeeting,\n this.isAudioMuted,\n this.type\n );\n }\n\n /**\n * set the status on member object\n * @param {Object} participant the locus participant object\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processStatus(participant: object) {\n this.status = MemberUtil.extractStatus(participant);\n switch (this.status) {\n case _IN_LOBBY_:\n this.isInLobby = true;\n this.isInMeeting = false;\n break;\n case _IN_MEETING_:\n this.isInLobby = false;\n this.isInMeeting = true;\n break;\n case _NOT_IN_MEETING_:\n this.isInLobby = false;\n this.isInMeeting = false;\n break;\n default:\n this.isInLobby = false;\n this.isInMeeting = false;\n }\n }\n\n /**\n * set the isContentSharing on member\n * @param {Boolean} flag\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public setIsContentSharing(flag: boolean) {\n this.isContentSharing = flag;\n }\n\n /**\n * set the isHost on member\n * @param {Boolean} flag\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public setIsHost(flag: boolean) {\n this.isHost = flag;\n }\n\n /**\n * set the isSelf on member\n * @param {Boolean} flag\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public setIsSelf(flag: boolean) {\n this.isSelf = flag;\n }\n\n /**\n * determine if this member is content sharing\n * @param {Object} participant\n * @param {String} sharingId\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public processIsContentSharing(participant: object, sharingId: string) {\n if (MemberUtil.isUser(participant)) {\n this.isContentSharing = MemberUtil.isSame(participant, sharingId);\n } else if (MemberUtil.isDevice(participant)) {\n this.isContentSharing = MemberUtil.isAssociatedSame(participant, sharingId);\n }\n }\n\n /**\n * Determine if this member is recording\n * @param {Object} participant\n * @param {String} recordingId\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public processIsRecording(participant: object, recordingId: string) {\n this.isRecording = MemberUtil.isSame(participant, recordingId);\n }\n\n /**\n * determine if this member is the self\n * @param {Object} participant\n * @param {String} selfId\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processIsSelf(participant: object, selfId: string) {\n if (MemberUtil.isUser(participant)) {\n this.isSelf = MemberUtil.isSame(participant, selfId);\n } else if (MemberUtil.isDevice(participant)) {\n this.isSelf = MemberUtil.isAssociatedSame(participant, selfId);\n this.associatedUser = selfId;\n }\n }\n\n /**\n * determine if this member is the host\n * @param {Object} participant\n * @param {String} hostId\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processIsHost(participant: object, hostId: string) {\n if (MemberUtil.isUser(participant)) {\n this.isHost = MemberUtil.isSame(participant, hostId);\n } else if (MemberUtil.isDevice(participant)) {\n this.isHost = MemberUtil.isAssociatedSame(participant, hostId);\n }\n }\n\n /**\n * process the roles that have been applied to this member\n * @param {Object} participant\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processRoles(participant: ParticipantWithRoles) {\n this.roles = MemberUtil.extractControlRoles(participant);\n }\n\n /**\n * set the type for the member, could be MEETING or CALL\n * @param {String} type\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processType(type: string) {\n this.type = type;\n }\n}\n"],"mappings":";;;;;;;;;;;AAGA;AAGA;AANA;AACA;AACA;AAMA;AACA;AACA;AAFA,IAGqBA,MAAM;EA4BzB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,gBACEC,WAAmB,EASnB;IAAA,IARAC,OAOO,uEAAG,CAAC,CAAC;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA,iDArBFC,mBAAQ;IAuBlB;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,IAAI,CAACF,WAAW,GAAG,IAAI;IACvB;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,IAAI,CAACG,EAAE,GAAG,IAAI;IACd;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,IAAI,GAAG,IAAI;IAChB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,YAAY,GAAG,IAAI;IACxB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,YAAY,GAAG,IAAI;IACxB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,YAAY,GAAG,IAAI;IACxB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,iBAAiB,GAAG,IAAI;IAC7B;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,MAAM,GAAG,IAAI;IAClB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,MAAM,GAAG,IAAI;IAClB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,OAAO,GAAG,IAAI;IACnB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,SAAS,GAAG,IAAI;IACrB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,WAAW,GAAG,IAAI;IACvB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,aAAa,GAAG,IAAI;IACzB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,gBAAg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"}
1
+ {"version":3,"names":["Member","participant","options","MEETINGS","id","name","isAudioMuted","isVideoMuted","isHandRaised","supportsBreakouts","supportLiveAnnotation","isSelf","isHost","isGuest","isInLobby","isInMeeting","isNotAdmitted","isContentSharing","status","isDevice","isUser","associatedUser","isRecording","isMutable","isRemovable","type","isModerator","isModeratorAssignmentProhibited","roles","processParticipant","processParticipantOptions","processMember","MemberUtil","extractId","extractName","isBreakoutsSupported","isLiveAnnotationSupported","processStatus","processRoles","processIsSelf","selfId","processIsHost","hostId","processIsContentSharing","contentSharingId","processType","processIsRecording","recordingId","extractStatus","_IN_LOBBY_","_IN_MEETING_","_NOT_IN_MEETING_","flag","sharingId","isSame","isAssociatedSame","extractControlRoles"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport {MEETINGS, _IN_LOBBY_, _NOT_IN_MEETING_, _IN_MEETING_} from '../constants';\nimport {IExternalRoles, ParticipantWithRoles} from './types';\n\nimport MemberUtil from './util';\n\n/**\n * @class Member\n */\nexport default class Member {\n associatedUser: any;\n id: any;\n isAudioMuted: any;\n isContentSharing: any;\n isDevice: any;\n isGuest: any;\n isHandRaised: any;\n isHost: any;\n isInLobby: any;\n isInMeeting: any;\n isModerator: any;\n isModeratorAssignmentProhibited: any;\n isMutable: any;\n isNotAdmitted: any;\n isRecording: any;\n isRemovable: any;\n isSelf: any;\n isUser: any;\n isVideoMuted: any;\n roles: IExternalRoles;\n name: any;\n participant: any;\n status: any;\n supportsBreakouts: boolean;\n supportLiveAnnotation: boolean;\n type: any;\n namespace = MEETINGS;\n\n /**\n * @param {Object} participant - the locus participant\n * @param {Object} [options] - constructor params\n * @param {String} options.selfId\n * @param {String} options.hostId\n * @param {String} options.contentSharingId\n * @param {String} options.type\n * @returns {Member}\n * @memberof Member\n */\n constructor(\n participant: object,\n options:\n | {\n selfId: string;\n hostId: string;\n contentSharingId: string;\n type: string;\n }\n | any = {}\n ) {\n /**\n * The server participant object\n * @instance\n * @type {Object}\n * @private\n * @memberof Member\n */\n this.participant = null;\n /**\n * The member id\n * @instance\n * @type {String}\n * @public\n * @memberof Member\n */\n this.id = null;\n /**\n * The member name\n * @instance\n * @type {String}\n * @public\n * @memberof Member\n */\n this.name = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isAudioMuted = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isVideoMuted = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isHandRaised = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.supportsBreakouts = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.supportLiveAnnotation = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isSelf = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isHost = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isGuest = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isInLobby = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isInMeeting = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isNotAdmitted = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isContentSharing = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.status = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isDevice = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isUser = null;\n /**\n * Is this member associated to another user by way of pairing (typical of devices)\n * @instance\n * @type {String}\n * @public\n * @memberof Member\n */\n this.associatedUser = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isRecording = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isMutable = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isRemovable = null;\n /**\n * @instance\n * @type {String}\n * @private\n * @memberof Member\n */\n this.type = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isModerator = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isModeratorAssignmentProhibited = null;\n\n /**\n * @instance\n * @type {IExternalRoles}\n * @public\n * @memberof Member\n */\n this.roles = null;\n // TODO: more participant types\n // such as native client, web client, is a device, what type of phone, etc\n this.processParticipant(participant);\n this.processParticipantOptions(participant, options);\n this.processMember();\n }\n\n /**\n * set all the participant values extracted directly from locus participant\n * @param {Object} participant the locus participant object\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processParticipant(participant: object) {\n this.participant = participant;\n if (participant) {\n this.id = MemberUtil.extractId(participant);\n this.name = MemberUtil.extractName(participant);\n this.isAudioMuted = MemberUtil.isAudioMuted(participant);\n this.isVideoMuted = MemberUtil.isVideoMuted(participant);\n this.isHandRaised = MemberUtil.isHandRaised(participant);\n this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);\n this.supportLiveAnnotation = MemberUtil.isLiveAnnotationSupported(participant);\n this.isGuest = MemberUtil.isGuest(participant);\n this.isUser = MemberUtil.isUser(participant);\n this.isDevice = MemberUtil.isDevice(participant);\n this.isModerator = MemberUtil.isModerator(participant);\n this.isModeratorAssignmentProhibited =\n MemberUtil.isModeratorAssignmentProhibited(participant);\n this.processStatus(participant);\n this.processRoles(participant as ParticipantWithRoles);\n // must be done last\n this.isNotAdmitted = MemberUtil.isNotAdmitted(participant, this.isGuest, this.status);\n }\n }\n\n /**\n * Use the members options and participant values to set on the member\n * @param {Object} participant the locus participant object\n * @param {Object} options the passed in options, what was set on members\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processParticipantOptions(participant: object, options: any) {\n if (participant && options) {\n this.processIsSelf(participant, options.selfId);\n this.processIsHost(participant, options.hostId);\n this.processIsContentSharing(participant, options.contentSharingId);\n this.processType(options.type);\n this.processIsRecording(participant, options.recordingId);\n }\n }\n\n /**\n * processes what already exists on the member to determine other info about the member\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processMember() {\n // must occur after self, guest, meeting, and type properties are calculated\n this.isRemovable = MemberUtil.isRemovable(\n this.isSelf,\n this.isGuest,\n this.isInMeeting,\n this.type\n );\n // must occur after self, device, meeting, mute status, and type properties are calculated\n this.isMutable = MemberUtil.isMutable(\n this.isSelf,\n this.isDevice,\n this.isInMeeting,\n this.isAudioMuted,\n this.type\n );\n }\n\n /**\n * set the status on member object\n * @param {Object} participant the locus participant object\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processStatus(participant: object) {\n this.status = MemberUtil.extractStatus(participant);\n switch (this.status) {\n case _IN_LOBBY_:\n this.isInLobby = true;\n this.isInMeeting = false;\n break;\n case _IN_MEETING_:\n this.isInLobby = false;\n this.isInMeeting = true;\n break;\n case _NOT_IN_MEETING_:\n this.isInLobby = false;\n this.isInMeeting = false;\n break;\n default:\n this.isInLobby = false;\n this.isInMeeting = false;\n }\n }\n\n /**\n * set the isContentSharing on member\n * @param {Boolean} flag\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public setIsContentSharing(flag: boolean) {\n this.isContentSharing = flag;\n }\n\n /**\n * set the isHost on member\n * @param {Boolean} flag\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public setIsHost(flag: boolean) {\n this.isHost = flag;\n }\n\n /**\n * set the isSelf on member\n * @param {Boolean} flag\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public setIsSelf(flag: boolean) {\n this.isSelf = flag;\n }\n\n /**\n * determine if this member is content sharing\n * @param {Object} participant\n * @param {String} sharingId\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public processIsContentSharing(participant: object, sharingId: string) {\n if (MemberUtil.isUser(participant)) {\n this.isContentSharing = MemberUtil.isSame(participant, sharingId);\n } else if (MemberUtil.isDevice(participant)) {\n this.isContentSharing = MemberUtil.isAssociatedSame(participant, sharingId);\n }\n }\n\n /**\n * Determine if this member is recording\n * @param {Object} participant\n * @param {String} recordingId\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public processIsRecording(participant: object, recordingId: string) {\n this.isRecording = MemberUtil.isSame(participant, recordingId);\n }\n\n /**\n * determine if this member is the self\n * @param {Object} participant\n * @param {String} selfId\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processIsSelf(participant: object, selfId: string) {\n if (MemberUtil.isUser(participant)) {\n this.isSelf = MemberUtil.isSame(participant, selfId);\n } else if (MemberUtil.isDevice(participant)) {\n this.isSelf = MemberUtil.isAssociatedSame(participant, selfId);\n this.associatedUser = selfId;\n }\n }\n\n /**\n * determine if this member is the host\n * @param {Object} participant\n * @param {String} hostId\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processIsHost(participant: object, hostId: string) {\n if (MemberUtil.isUser(participant)) {\n this.isHost = MemberUtil.isSame(participant, hostId);\n } else if (MemberUtil.isDevice(participant)) {\n this.isHost = MemberUtil.isAssociatedSame(participant, hostId);\n }\n }\n\n /**\n * process the roles that have been applied to this member\n * @param {Object} participant\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processRoles(participant: ParticipantWithRoles) {\n this.roles = MemberUtil.extractControlRoles(participant);\n }\n\n /**\n * set the type for the member, could be MEETING or CALL\n * @param {String} type\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processType(type: string) {\n this.type = type;\n }\n}\n"],"mappings":";;;;;;;;;;;AAGA;AAGA;AANA;AACA;AACA;AAMA;AACA;AACA;AAFA,IAGqBA,MAAM;EA6BzB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,gBACEC,WAAmB,EASnB;IAAA,IARAC,OAOO,uEAAG,CAAC,CAAC;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA,iDArBFC,mBAAQ;IAuBlB;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,IAAI,CAACF,WAAW,GAAG,IAAI;IACvB;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,IAAI,CAACG,EAAE,GAAG,IAAI;IACd;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,IAAI,GAAG,IAAI;IAChB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,YAAY,GAAG,IAAI;IACxB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,YAAY,GAAG,IAAI;IACxB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,YAAY,GAAG,IAAI;IACxB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,iBAAiB,GAAG,IAAI;IAC7B;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,qBAAqB,GAAG,IAAI;IACjC;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,MAAM,GAAG,IAAI;IAClB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,MAAM,GAAG,IAAI;IAClB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,OAAO,GAAG,IAAI;IACnB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,SAAS,GAAG,IAAI;IACrB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,WAAW,GAAG,IAAI;IACvB;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAAC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"}
@@ -191,6 +191,17 @@ MemberUtil.isBreakoutsSupported = function (participant) {
191
191
  return !participant.doesNotSupportBreakouts;
192
192
  };
193
193
 
194
+ /**
195
+ * @param {Object} participant the locus participant
196
+ * @returns {Boolean}
197
+ */
198
+ MemberUtil.isLiveAnnotationSupported = function (participant) {
199
+ if (!participant) {
200
+ throw new _parameter.default('LiveAnnotation support could not be processed, participant is undefined.');
201
+ }
202
+ return !participant.annotatorAssignmentNotAllowed;
203
+ };
204
+
194
205
  /**
195
206
  * utility method for audio/video muted status
196
207
  * @param {String} status
@@ -1 +1 @@
1
- {"version":3,"names":["MemberUtil","getControlsRoles","participant","controls","role","roles","hasRole","controlRole","some","type","hasCohost","ServerRoles","Cohost","hasModerator","Moderator","hasPresenter","Presenter","extractControlRoles","cohost","moderator","presenter","isUser","_USER_","isModerator","isGuest","guest","isDevice","_RESOURCE_ROOM_","isModeratorAssignmentProhibited","moderatorAssignmentNotAllowed","isSame","id","person","isAssociatedSame","associatedUsers","user","isNotAdmitted","status","devices","intent","_WAIT_","_IN_LOBBY_","_IN_MEETING_","isAudioMuted","ParameterError","mutedStatus","isMuted","AUDIO_STATUS","audio","muted","isVideoMuted","VIDEO_STATUS","isHandRaised","hand","raised","isBreakoutsSupported","doesNotSupportBreakouts","accessor","_RECEIVE_ONLY_","_SEND_RECEIVE_","getRecordingMember","record","recording","meta","modifiedBy","isRecording","localRecord","isRemovable","isSelf","isInMeeting","_CALL_","isMutable","extractStatus","length","_NOT_IN_MEETING_","state","_JOINED_","_IDLE_","foundDevice","find","device","_OBSERVE_","_LEFT_","extractId","extractName","name"],"sources":["util.ts"],"sourcesContent":["import {IExternalRoles, ParticipantWithRoles, ServerRoles, ServerRoleShape} from './types';\nimport {\n _USER_,\n _RESOURCE_ROOM_,\n _OBSERVE_,\n _WAIT_,\n _LEFT_,\n _JOINED_,\n _IDLE_,\n _IN_LOBBY_,\n _NOT_IN_MEETING_,\n _IN_MEETING_,\n AUDIO_STATUS,\n VIDEO_STATUS,\n _SEND_RECEIVE_,\n _RECEIVE_ONLY_,\n _CALL_,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst MemberUtil: any = {};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {[ServerRoleShape]}\n */\nMemberUtil.getControlsRoles = (participant: ParticipantWithRoles): Array<ServerRoleShape> =>\n participant?.controls?.role?.roles;\n\n/**\n * @param {Object} participant the locus participant\n * @param {ServerRoles} controlRole the search role\n * @returns {Boolean}\n */\nMemberUtil.hasRole = (participant: any, controlRole: ServerRoles): boolean =>\n MemberUtil.getControlsRoles(participant)?.some(\n (role) => role.type === controlRole && role.hasRole\n );\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasCohost = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Cohost) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasModerator = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Moderator) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasPresenter = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Presenter) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {IExternalRoles}\n */\nMemberUtil.extractControlRoles = (participant: ParticipantWithRoles): IExternalRoles => {\n const roles = {\n cohost: MemberUtil.hasCohost(participant),\n moderator: MemberUtil.hasModerator(participant),\n presenter: MemberUtil.hasPresenter(participant),\n };\n\n return roles;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isUser = (participant: any) => participant && participant.type === _USER_;\n\nMemberUtil.isModerator = (participant) => participant && participant.moderator;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isGuest = (participant: any) => participant && participant.guest;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isDevice = (participant: any) => participant && participant.type === _RESOURCE_ROOM_;\n\nMemberUtil.isModeratorAssignmentProhibited = (participant) =>\n participant && participant.moderatorAssignmentNotAllowed;\n\n/**\n * checks to see if the participant id is the same as the passed id\n * there are multiple ids that can be used\n * @param {Object} participant the locus participant\n * @param {String} id\n * @returns {Boolean}\n */\nMemberUtil.isSame = (participant: any, id: string) =>\n participant && (participant.id === id || (participant.person && participant.person.id === id));\n\n/**\n * checks to see if the participant id is the same as the passed id for associated devices\n * there are multiple ids that can be used\n * @param {Object} participant the locus participant\n * @param {String} id\n * @returns {Boolean}\n */\nMemberUtil.isAssociatedSame = (participant: any, id: string) =>\n participant &&\n participant.associatedUsers &&\n participant.associatedUsers.some(\n (user) => user.id === id || (user.person && user.person.id === id)\n );\n\n/**\n * @param {Object} participant the locus participant\n * @param {Boolean} isGuest\n * @param {String} status\n * @returns {Boolean}\n */\nMemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string): boolean =>\n participant &&\n participant.guest &&\n ((participant.devices &&\n participant.devices[0] &&\n participant.devices[0].intent &&\n participant.devices[0].intent.type === _WAIT_ &&\n // @ts-ignore\n isGuest &&\n status === _IN_LOBBY_) ||\n // @ts-ignore\n !status === _IN_MEETING_);\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isAudioMuted = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Audio could not be processed, participant is undefined.');\n }\n const mutedStatus = MemberUtil.isMuted(participant.status, AUDIO_STATUS);\n\n if (participant.controls && participant.controls.audio) {\n if (participant.controls.audio.muted) {\n return true;\n }\n if (mutedStatus) {\n return true;\n }\n }\n\n return false;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isVideoMuted = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Video could not be processed, participant is undefined.');\n }\n\n return MemberUtil.isMuted(participant.status, VIDEO_STATUS);\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isHandRaised = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Raise hand could not be processed, participant is undefined.');\n }\n\n return participant.controls?.hand?.raised || false;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isBreakoutsSupported = (participant) => {\n if (!participant) {\n throw new ParameterError('Breakout support could not be processed, participant is undefined.');\n }\n\n return !participant.doesNotSupportBreakouts;\n};\n\n/**\n * utility method for audio/video muted status\n * @param {String} status\n * @param {String} accessor\n * @returns {Boolean}\n */\nMemberUtil.isMuted = (status: string, accessor: string) => {\n if (status) {\n if (status[accessor] === _RECEIVE_ONLY_) {\n return true;\n }\n if (status[accessor] === _SEND_RECEIVE_) {\n return false;\n }\n }\n\n return null;\n};\n\n/**\n * utility method for getting the recording member for later comparison\n * @param {Object} controls\n * @returns {String|null}\n */\nMemberUtil.getRecordingMember = (controls: any) => {\n if (!controls) {\n return null;\n }\n if (controls.record && controls.record.recording && controls.record.meta) {\n return controls.record.meta.modifiedBy;\n }\n\n return null;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isRecording = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Recording could not be processed, participant is undefined.');\n }\n if (participant.controls && participant.controls.localRecord) {\n return participant.controls.localRecord.recording;\n }\n\n return false;\n};\n\nMemberUtil.isRemovable = (isSelf, isGuest, isInMeeting, type) => {\n if (isGuest || isSelf) {\n return false;\n }\n if (type === _CALL_) {\n return false;\n }\n if (isInMeeting) {\n return true;\n }\n\n return false;\n};\n\nMemberUtil.isMutable = (isSelf, isDevice, isInMeeting, isMuted, type) => {\n if (!isInMeeting) {\n return false;\n }\n if (isMuted) {\n return false;\n }\n if (type === _CALL_) {\n return false;\n }\n if (isSelf || isDevice) {\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractStatus = (participant: any) => {\n if (!(participant && participant.devices && participant.devices.length)) {\n return _NOT_IN_MEETING_;\n }\n if (participant.state === _JOINED_) {\n return _IN_MEETING_;\n }\n if (participant.state === _IDLE_) {\n if (participant.devices && participant.devices.length > 0) {\n const foundDevice = participant.devices.find(\n (device) =>\n device.intent && (device.intent.type === _WAIT_ || device.intent.type === _OBSERVE_)\n );\n\n return foundDevice ? _IN_LOBBY_ : _NOT_IN_MEETING_;\n }\n\n return _NOT_IN_MEETING_;\n }\n if (participant.state === _LEFT_) {\n return _NOT_IN_MEETING_;\n }\n\n return _NOT_IN_MEETING_;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractId = (participant: any) => {\n if (participant) {\n return participant.id;\n }\n\n return null;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractName = (participant: any) => {\n if (participant && participant.person) {\n return participant.person.name;\n }\n\n return null;\n};\n\nexport default MemberUtil;\n"],"mappings":";;;;;;;;AAAA;AACA;AAiBA;AAEA,IAAMA,UAAe,GAAG,CAAC,CAAC;;AAE1B;AACA;AACA;AACA;AACAA,UAAU,CAACC,gBAAgB,GAAG,UAACC,WAAiC;EAAA;EAAA,OAC9DA,WAAW,aAAXA,WAAW,gDAAXA,WAAW,CAAEC,QAAQ,oFAArB,sBAAuBC,IAAI,2DAA3B,uBAA6BC,KAAK;AAAA;;AAEpC;AACA;AACA;AACA;AACA;AACAL,UAAU,CAACM,OAAO,GAAG,UAACJ,WAAgB,EAAEK,WAAwB;EAAA;EAAA,gCAC9DP,UAAU,CAACC,gBAAgB,CAACC,WAAW,CAAC,0DAAxC,sBAA0CM,IAAI,CAC5C,UAACJ,IAAI;IAAA,OAAKA,IAAI,CAACK,IAAI,KAAKF,WAAW,IAAIH,IAAI,CAACE,OAAO;EAAA,EACpD;AAAA;;AAEH;AACA;AACA;AACA;AACAN,UAAU,CAACU,SAAS,GAAG,UAACR,WAAiC;EAAA,OACvDF,UAAU,CAACM,OAAO,CAACJ,WAAW,EAAES,kBAAW,CAACC,MAAM,CAAC,IAAI,KAAK;AAAA;;AAE9D;AACA;AACA;AACA;AACAZ,UAAU,CAACa,YAAY,GAAG,UAACX,WAAiC;EAAA,OAC1DF,UAAU,CAACM,OAAO,CAACJ,WAAW,EAAES,kBAAW,CAACG,SAAS,CAAC,IAAI,KAAK;AAAA;;AAEjE;AACA;AACA;AACA;AACAd,UAAU,CAACe,YAAY,GAAG,UAACb,WAAiC;EAAA,OAC1DF,UAAU,CAACM,OAAO,CAACJ,WAAW,EAAES,kBAAW,CAACK,SAAS,CAAC,IAAI,KAAK;AAAA;;AAEjE;AACA;AACA;AACA;AACAhB,UAAU,CAACiB,mBAAmB,GAAG,UAACf,WAAiC,EAAqB;EACtF,IAAMG,KAAK,GAAG;IACZa,MAAM,EAAElB,UAAU,CAACU,SAAS,CAACR,WAAW,CAAC;IACzCiB,SAAS,EAAEnB,UAAU,CAACa,YAAY,CAACX,WAAW,CAAC;IAC/CkB,SAAS,EAAEpB,UAAU,CAACe,YAAY,CAACb,WAAW;EAChD,CAAC;EAED,OAAOG,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACAL,UAAU,CAACqB,MAAM,GAAG,UAACnB,WAAgB;EAAA,OAAKA,WAAW,IAAIA,WAAW,CAACO,IAAI,KAAKa,iBAAM;AAAA;AAEpFtB,UAAU,CAACuB,WAAW,GAAG,UAACrB,WAAW;EAAA,OAAKA,WAAW,IAAIA,WAAW,CAACiB,SAAS;AAAA;;AAE9E;AACA;AACA;AACA;AACAnB,UAAU,CAACwB,OAAO,GAAG,UAACtB,WAAgB;EAAA,OAAKA,WAAW,IAAIA,WAAW,CAACuB,KAAK;AAAA;;AAE3E;AACA;AACA;AACA;AACAzB,UAAU,CAAC0B,QAAQ,GAAG,UAACxB,WAAgB;EAAA,OAAKA,WAAW,IAAIA,WAAW,CAACO,IAAI,KAAKkB,0BAAe;AAAA;AAE/F3B,UAAU,CAAC4B,+BAA+B,GAAG,UAAC1B,WAAW;EAAA,OACvDA,WAAW,IAAIA,WAAW,CAAC2B,6BAA6B;AAAA;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA7B,UAAU,CAAC8B,MAAM,GAAG,UAAC5B,WAAgB,EAAE6B,EAAU;EAAA,OAC/C7B,WAAW,KAAKA,WAAW,CAAC6B,EAAE,KAAKA,EAAE,IAAK7B,WAAW,CAAC8B,MAAM,IAAI9B,WAAW,CAAC8B,MAAM,CAACD,EAAE,KAAKA,EAAG,CAAC;AAAA;;AAEhG;AACA;AACA;AACA;AACA;AACA;AACA;AACA/B,UAAU,CAACiC,gBAAgB,GAAG,UAAC/B,WAAgB,EAAE6B,EAAU;EAAA,OACzD7B,WAAW,IACXA,WAAW,CAACgC,eAAe,IAC3BhC,WAAW,CAACgC,eAAe,CAAC1B,IAAI,CAC9B,UAAC2B,IAAI;IAAA,OAAKA,IAAI,CAACJ,EAAE,KAAKA,EAAE,IAAKI,IAAI,CAACH,MAAM,IAAIG,IAAI,CAACH,MAAM,CAACD,EAAE,KAAKA,EAAG;EAAA,EACnE;AAAA;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA/B,UAAU,CAACoC,aAAa,GAAG,UAAClC,WAAgB,EAAEsB,OAAgB,EAAEa,MAAc;EAAA,OAC5EnC,WAAW,IACXA,WAAW,CAACuB,KAAK,KACfvB,WAAW,CAACoC,OAAO,IACnBpC,WAAW,CAACoC,OAAO,CAAC,CAAC,CAAC,IACtBpC,WAAW,CAACoC,OAAO,CAAC,CAAC,CAAC,CAACC,MAAM,IAC7BrC,WAAW,CAACoC,OAAO,CAAC,CAAC,CAAC,CAACC,MAAM,CAAC9B,IAAI,KAAK+B,iBAAM;EAC7C;EACAhB,OAAO,IACPa,MAAM,KAAKI,qBAAU;EACrB;EACA,CAACJ,MAAM,KAAKK,uBAAY,CAAC;AAAA;;AAE7B;AACA;AACA;AACA;AACA1C,UAAU,CAAC2C,YAAY,GAAG,UAACzC,WAAgB,EAAK;EAC9C,IAAI,CAACA,WAAW,EAAE;IAChB,MAAM,IAAI0C,kBAAc,CAAC,yDAAyD,CAAC;EACrF;EACA,IAAMC,WAAW,GAAG7C,UAAU,CAAC8C,OAAO,CAAC5C,WAAW,CAACmC,MAAM,EAAEU,uBAAY,CAAC;EAExE,IAAI7C,WAAW,CAACC,QAAQ,IAAID,WAAW,CAACC,QAAQ,CAAC6C,KAAK,EAAE;IACtD,IAAI9C,WAAW,CAACC,QAAQ,CAAC6C,KAAK,CAACC,KAAK,EAAE;MACpC,OAAO,IAAI;IACb;IACA,IAAIJ,WAAW,EAAE;MACf,OAAO,IAAI;IACb;EACF;EAEA,OAAO,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA7C,UAAU,CAACkD,YAAY,GAAG,UAAChD,WAAgB,EAAK;EAC9C,IAAI,CAACA,WAAW,EAAE;IAChB,MAAM,IAAI0C,kBAAc,CAAC,yDAAyD,CAAC;EACrF;EAEA,OAAO5C,UAAU,CAAC8C,OAAO,CAAC5C,WAAW,CAACmC,MAAM,EAAEc,uBAAY,CAAC;AAC7D,CAAC;;AAED;AACA;AACA;AACA;AACAnD,UAAU,CAACoD,YAAY,GAAG,UAAClD,WAAgB,EAAK;EAAA;EAC9C,IAAI,CAACA,WAAW,EAAE;IAChB,MAAM,IAAI0C,kBAAc,CAAC,8DAA8D,CAAC;EAC1F;EAEA,OAAO,2BAAA1C,WAAW,CAACC,QAAQ,qFAApB,uBAAsBkD,IAAI,2DAA1B,uBAA4BC,MAAM,KAAI,KAAK;AACpD,CAAC;;AAED;AACA;AACA;AACA;AACAtD,UAAU,CAACuD,oBAAoB,GAAG,UAACrD,WAAW,EAAK;EACjD,IAAI,CAACA,WAAW,EAAE;IAChB,MAAM,IAAI0C,kBAAc,CAAC,oEAAoE,CAAC;EAChG;EAEA,OAAO,CAAC1C,WAAW,CAACsD,uBAAuB;AAC7C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACAxD,UAAU,CAAC8C,OAAO,GAAG,UAACT,MAAc,EAAEoB,QAAgB,EAAK;EACzD,IAAIpB,MAAM,EAAE;IACV,IAAIA,MAAM,CAACoB,QAAQ,CAAC,KAAKC,yBAAc,EAAE;MACvC,OAAO,IAAI;IACb;IACA,IAAIrB,MAAM,CAACoB,QAAQ,CAAC,KAAKE,yBAAc,EAAE;MACvC,OAAO,KAAK;IACd;EACF;EAEA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA3D,UAAU,CAAC4D,kBAAkB,GAAG,UAACzD,QAAa,EAAK;EACjD,IAAI,CAACA,QAAQ,EAAE;IACb,OAAO,IAAI;EACb;EACA,IAAIA,QAAQ,CAAC0D,MAAM,IAAI1D,QAAQ,CAAC0D,MAAM,CAACC,SAAS,IAAI3D,QAAQ,CAAC0D,MAAM,CAACE,IAAI,EAAE;IACxE,OAAO5D,QAAQ,CAAC0D,MAAM,CAACE,IAAI,CAACC,UAAU;EACxC;EAEA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACAhE,UAAU,CAACiE,WAAW,GAAG,UAAC/D,WAAgB,EAAK;EAC7C,IAAI,CAACA,WAAW,EAAE;IAChB,MAAM,IAAI0C,kBAAc,CAAC,6DAA6D,CAAC;EACzF;EACA,IAAI1C,WAAW,CAACC,QAAQ,IAAID,WAAW,CAACC,QAAQ,CAAC+D,WAAW,EAAE;IAC5D,OAAOhE,WAAW,CAACC,QAAQ,CAAC+D,WAAW,CAACJ,SAAS;EACnD;EAEA,OAAO,KAAK;AACd,CAAC;AAED9D,UAAU,CAACmE,WAAW,GAAG,UAACC,MAAM,EAAE5C,OAAO,EAAE6C,WAAW,EAAE5D,IAAI,EAAK;EAC/D,IAAIe,OAAO,IAAI4C,MAAM,EAAE;IACrB,OAAO,KAAK;EACd;EACA,IAAI3D,IAAI,KAAK6D,iBAAM,EAAE;IACnB,OAAO,KAAK;EACd;EACA,IAAID,WAAW,EAAE;IACf,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd,CAAC;AAEDrE,UAAU,CAACuE,SAAS,GAAG,UAACH,MAAM,EAAE1C,QAAQ,EAAE2C,WAAW,EAAEvB,OAAO,EAAErC,IAAI,EAAK;EACvE,IAAI,CAAC4D,WAAW,EAAE;IAChB,OAAO,KAAK;EACd;EACA,IAAIvB,OAAO,EAAE;IACX,OAAO,KAAK;EACd;EACA,IAAIrC,IAAI,KAAK6D,iBAAM,EAAE;IACnB,OAAO,KAAK;EACd;EACA,IAAIF,MAAM,IAAI1C,QAAQ,EAAE;IACtB,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA1B,UAAU,CAACwE,aAAa,GAAG,UAACtE,WAAgB,EAAK;EAC/C,IAAI,EAAEA,WAAW,IAAIA,WAAW,CAACoC,OAAO,IAAIpC,WAAW,CAACoC,OAAO,CAACmC,MAAM,CAAC,EAAE;IACvE,OAAOC,2BAAgB;EACzB;EACA,IAAIxE,WAAW,CAACyE,KAAK,KAAKC,mBAAQ,EAAE;IAClC,OAAOlC,uBAAY;EACrB;EACA,IAAIxC,WAAW,CAACyE,KAAK,KAAKE,iBAAM,EAAE;IAChC,IAAI3E,WAAW,CAACoC,OAAO,IAAIpC,WAAW,CAACoC,OAAO,CAACmC,MAAM,GAAG,CAAC,EAAE;MACzD,IAAMK,WAAW,GAAG5E,WAAW,CAACoC,OAAO,CAACyC,IAAI,CAC1C,UAACC,MAAM;QAAA,OACLA,MAAM,CAACzC,MAAM,KAAKyC,MAAM,CAACzC,MAAM,CAAC9B,IAAI,KAAK+B,iBAAM,IAAIwC,MAAM,CAACzC,MAAM,CAAC9B,IAAI,KAAKwE,oBAAS,CAAC;MAAA,EACvF;MAED,OAAOH,WAAW,GAAGrC,qBAAU,GAAGiC,2BAAgB;IACpD;IAEA,OAAOA,2BAAgB;EACzB;EACA,IAAIxE,WAAW,CAACyE,KAAK,KAAKO,iBAAM,EAAE;IAChC,OAAOR,2BAAgB;EACzB;EAEA,OAAOA,2BAAgB;AACzB,CAAC;;AAED;AACA;AACA;AACA;AACA1E,UAAU,CAACmF,SAAS,GAAG,UAACjF,WAAgB,EAAK;EAC3C,IAAIA,WAAW,EAAE;IACf,OAAOA,WAAW,CAAC6B,EAAE;EACvB;EAEA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA/B,UAAU,CAACoF,WAAW,GAAG,UAAClF,WAAgB,EAAK;EAC7C,IAAIA,WAAW,IAAIA,WAAW,CAAC8B,MAAM,EAAE;IACrC,OAAO9B,WAAW,CAAC8B,MAAM,CAACqD,IAAI;EAChC;EAEA,OAAO,IAAI;AACb,CAAC;AAAC,eAEarF,UAAU;AAAA"}
1
+ {"version":3,"names":["MemberUtil","getControlsRoles","participant","controls","role","roles","hasRole","controlRole","some","type","hasCohost","ServerRoles","Cohost","hasModerator","Moderator","hasPresenter","Presenter","extractControlRoles","cohost","moderator","presenter","isUser","_USER_","isModerator","isGuest","guest","isDevice","_RESOURCE_ROOM_","isModeratorAssignmentProhibited","moderatorAssignmentNotAllowed","isSame","id","person","isAssociatedSame","associatedUsers","user","isNotAdmitted","status","devices","intent","_WAIT_","_IN_LOBBY_","_IN_MEETING_","isAudioMuted","ParameterError","mutedStatus","isMuted","AUDIO_STATUS","audio","muted","isVideoMuted","VIDEO_STATUS","isHandRaised","hand","raised","isBreakoutsSupported","doesNotSupportBreakouts","isLiveAnnotationSupported","annotatorAssignmentNotAllowed","accessor","_RECEIVE_ONLY_","_SEND_RECEIVE_","getRecordingMember","record","recording","meta","modifiedBy","isRecording","localRecord","isRemovable","isSelf","isInMeeting","_CALL_","isMutable","extractStatus","length","_NOT_IN_MEETING_","state","_JOINED_","_IDLE_","foundDevice","find","device","_OBSERVE_","_LEFT_","extractId","extractName","name"],"sources":["util.ts"],"sourcesContent":["import {IExternalRoles, ParticipantWithRoles, ServerRoles, ServerRoleShape} from './types';\nimport {\n _USER_,\n _RESOURCE_ROOM_,\n _OBSERVE_,\n _WAIT_,\n _LEFT_,\n _JOINED_,\n _IDLE_,\n _IN_LOBBY_,\n _NOT_IN_MEETING_,\n _IN_MEETING_,\n AUDIO_STATUS,\n VIDEO_STATUS,\n _SEND_RECEIVE_,\n _RECEIVE_ONLY_,\n _CALL_,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst MemberUtil: any = {};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {[ServerRoleShape]}\n */\nMemberUtil.getControlsRoles = (participant: ParticipantWithRoles): Array<ServerRoleShape> =>\n participant?.controls?.role?.roles;\n\n/**\n * @param {Object} participant the locus participant\n * @param {ServerRoles} controlRole the search role\n * @returns {Boolean}\n */\nMemberUtil.hasRole = (participant: any, controlRole: ServerRoles): boolean =>\n MemberUtil.getControlsRoles(participant)?.some(\n (role) => role.type === controlRole && role.hasRole\n );\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasCohost = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Cohost) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasModerator = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Moderator) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasPresenter = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Presenter) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {IExternalRoles}\n */\nMemberUtil.extractControlRoles = (participant: ParticipantWithRoles): IExternalRoles => {\n const roles = {\n cohost: MemberUtil.hasCohost(participant),\n moderator: MemberUtil.hasModerator(participant),\n presenter: MemberUtil.hasPresenter(participant),\n };\n\n return roles;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isUser = (participant: any) => participant && participant.type === _USER_;\n\nMemberUtil.isModerator = (participant) => participant && participant.moderator;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isGuest = (participant: any) => participant && participant.guest;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isDevice = (participant: any) => participant && participant.type === _RESOURCE_ROOM_;\n\nMemberUtil.isModeratorAssignmentProhibited = (participant) =>\n participant && participant.moderatorAssignmentNotAllowed;\n\n/**\n * checks to see if the participant id is the same as the passed id\n * there are multiple ids that can be used\n * @param {Object} participant the locus participant\n * @param {String} id\n * @returns {Boolean}\n */\nMemberUtil.isSame = (participant: any, id: string) =>\n participant && (participant.id === id || (participant.person && participant.person.id === id));\n\n/**\n * checks to see if the participant id is the same as the passed id for associated devices\n * there are multiple ids that can be used\n * @param {Object} participant the locus participant\n * @param {String} id\n * @returns {Boolean}\n */\nMemberUtil.isAssociatedSame = (participant: any, id: string) =>\n participant &&\n participant.associatedUsers &&\n participant.associatedUsers.some(\n (user) => user.id === id || (user.person && user.person.id === id)\n );\n\n/**\n * @param {Object} participant the locus participant\n * @param {Boolean} isGuest\n * @param {String} status\n * @returns {Boolean}\n */\nMemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string): boolean =>\n participant &&\n participant.guest &&\n ((participant.devices &&\n participant.devices[0] &&\n participant.devices[0].intent &&\n participant.devices[0].intent.type === _WAIT_ &&\n // @ts-ignore\n isGuest &&\n status === _IN_LOBBY_) ||\n // @ts-ignore\n !status === _IN_MEETING_);\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isAudioMuted = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Audio could not be processed, participant is undefined.');\n }\n const mutedStatus = MemberUtil.isMuted(participant.status, AUDIO_STATUS);\n\n if (participant.controls && participant.controls.audio) {\n if (participant.controls.audio.muted) {\n return true;\n }\n if (mutedStatus) {\n return true;\n }\n }\n\n return false;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isVideoMuted = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Video could not be processed, participant is undefined.');\n }\n\n return MemberUtil.isMuted(participant.status, VIDEO_STATUS);\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isHandRaised = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Raise hand could not be processed, participant is undefined.');\n }\n\n return participant.controls?.hand?.raised || false;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isBreakoutsSupported = (participant) => {\n if (!participant) {\n throw new ParameterError('Breakout support could not be processed, participant is undefined.');\n }\n\n return !participant.doesNotSupportBreakouts;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isLiveAnnotationSupported = (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'LiveAnnotation support could not be processed, participant is undefined.'\n );\n }\n\n return !participant.annotatorAssignmentNotAllowed;\n};\n\n/**\n * utility method for audio/video muted status\n * @param {String} status\n * @param {String} accessor\n * @returns {Boolean}\n */\nMemberUtil.isMuted = (status: string, accessor: string) => {\n if (status) {\n if (status[accessor] === _RECEIVE_ONLY_) {\n return true;\n }\n if (status[accessor] === _SEND_RECEIVE_) {\n return false;\n }\n }\n\n return null;\n};\n\n/**\n * utility method for getting the recording member for later comparison\n * @param {Object} controls\n * @returns {String|null}\n */\nMemberUtil.getRecordingMember = (controls: any) => {\n if (!controls) {\n return null;\n }\n if (controls.record && controls.record.recording && controls.record.meta) {\n return controls.record.meta.modifiedBy;\n }\n\n return null;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isRecording = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Recording could not be processed, participant is undefined.');\n }\n if (participant.controls && participant.controls.localRecord) {\n return participant.controls.localRecord.recording;\n }\n\n return false;\n};\n\nMemberUtil.isRemovable = (isSelf, isGuest, isInMeeting, type) => {\n if (isGuest || isSelf) {\n return false;\n }\n if (type === _CALL_) {\n return false;\n }\n if (isInMeeting) {\n return true;\n }\n\n return false;\n};\n\nMemberUtil.isMutable = (isSelf, isDevice, isInMeeting, isMuted, type) => {\n if (!isInMeeting) {\n return false;\n }\n if (isMuted) {\n return false;\n }\n if (type === _CALL_) {\n return false;\n }\n if (isSelf || isDevice) {\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractStatus = (participant: any) => {\n if (!(participant && participant.devices && participant.devices.length)) {\n return _NOT_IN_MEETING_;\n }\n if (participant.state === _JOINED_) {\n return _IN_MEETING_;\n }\n if (participant.state === _IDLE_) {\n if (participant.devices && participant.devices.length > 0) {\n const foundDevice = participant.devices.find(\n (device) =>\n device.intent && (device.intent.type === _WAIT_ || device.intent.type === _OBSERVE_)\n );\n\n return foundDevice ? _IN_LOBBY_ : _NOT_IN_MEETING_;\n }\n\n return _NOT_IN_MEETING_;\n }\n if (participant.state === _LEFT_) {\n return _NOT_IN_MEETING_;\n }\n\n return _NOT_IN_MEETING_;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractId = (participant: any) => {\n if (participant) {\n return participant.id;\n }\n\n return null;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractName = (participant: any) => {\n if (participant && participant.person) {\n return participant.person.name;\n }\n\n return null;\n};\n\nexport default MemberUtil;\n"],"mappings":"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"}
@@ -27,6 +27,7 @@ export default class Member {
27
27
  participant: any;
28
28
  status: any;
29
29
  supportsBreakouts: boolean;
30
+ supportLiveAnnotation: boolean;
30
31
  type: any;
31
32
  namespace: string;
32
33
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "3.0.0-beta.105",
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.105",
36
- "@webex/test-helper-chai": "3.0.0-beta.105",
37
- "@webex/test-helper-mocha": "3.0.0-beta.105",
38
- "@webex/test-helper-mock-webex": "3.0.0-beta.105",
39
- "@webex/test-helper-retry": "3.0.0-beta.105",
40
- "@webex/test-helper-test-users": "3.0.0-beta.105",
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.105",
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.105",
52
- "@webex/internal-plugin-device": "3.0.0-beta.105",
53
- "@webex/internal-plugin-llm": "3.0.0-beta.105",
54
- "@webex/internal-plugin-mercury": "3.0.0-beta.105",
55
- "@webex/internal-plugin-metrics": "3.0.0-beta.105",
56
- "@webex/internal-plugin-support": "3.0.0-beta.105",
57
- "@webex/internal-plugin-user": "3.0.0-beta.105",
58
- "@webex/media-helpers": "3.0.0-beta.105",
59
- "@webex/plugin-people": "3.0.0-beta.105",
60
- "@webex/plugin-rooms": "3.0.0-beta.105",
61
- "@webex/webex-core": "3.0.0-beta.105",
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
  /**
@@ -34,6 +34,7 @@ export default class Member {
34
34
  participant: any;
35
35
  status: any;
36
36
  supportsBreakouts: boolean;
37
+ supportLiveAnnotation: boolean;
37
38
  type: any;
38
39
  namespace = MEETINGS;
39
40
 
@@ -110,6 +111,13 @@ export default class Member {
110
111
  * @memberof Member
111
112
  */
112
113
  this.supportsBreakouts = null;
114
+ /**
115
+ * @instance
116
+ * @type {Boolean}
117
+ * @public
118
+ * @memberof Member
119
+ */
120
+ this.supportLiveAnnotation = null;
113
121
  /**
114
122
  * @instance
115
123
  * @type {Boolean}
@@ -261,6 +269,7 @@ export default class Member {
261
269
  this.isVideoMuted = MemberUtil.isVideoMuted(participant);
262
270
  this.isHandRaised = MemberUtil.isHandRaised(participant);
263
271
  this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);
272
+ this.supportLiveAnnotation = MemberUtil.isLiveAnnotationSupported(participant);
264
273
  this.isGuest = MemberUtil.isGuest(participant);
265
274
  this.isUser = MemberUtil.isUser(participant);
266
275
  this.isDevice = MemberUtil.isDevice(participant);
@@ -196,6 +196,20 @@ MemberUtil.isBreakoutsSupported = (participant) => {
196
196
  return !participant.doesNotSupportBreakouts;
197
197
  };
198
198
 
199
+ /**
200
+ * @param {Object} participant the locus participant
201
+ * @returns {Boolean}
202
+ */
203
+ MemberUtil.isLiveAnnotationSupported = (participant) => {
204
+ if (!participant) {
205
+ throw new ParameterError(
206
+ 'LiveAnnotation support could not be processed, participant is undefined.'
207
+ );
208
+ }
209
+
210
+ return !participant.annotatorAssignmentNotAllowed;
211
+ };
212
+
199
213
  /**
200
214
  * utility method for audio/video muted status
201
215
  * @param {String} status
@@ -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'}],
@@ -240,6 +240,7 @@ export default {
240
240
  },
241
241
  },
242
242
  doesNotSupportBreakouts: true,
243
+ annotatorAssignmentNotAllowed: true,
243
244
  identityTrustLevel: 'INTERNAL',
244
245
  id: 'e0d54e94-226c-3290-b75a-83cc1dbf',
245
246
  guest: false,
@@ -9,21 +9,21 @@ describe('plugin-meetings', () => {
9
9
  MemberUtil.isHandRaised();
10
10
  }, 'Raise hand could not be processed, participant is undefined.');
11
11
  });
12
-
12
+
13
13
  it('returns false when controls is not there', () => {
14
14
  const participant = {};
15
-
15
+
16
16
  assert.isFalse(MemberUtil.isHandRaised(participant));
17
17
  });
18
-
18
+
19
19
  it('returns false when hand is not there in controls', () => {
20
20
  const participant = {
21
21
  controls: {},
22
22
  };
23
-
23
+
24
24
  assert.isFalse(MemberUtil.isHandRaised(participant));
25
25
  });
26
-
26
+
27
27
  it('returns true when hand raised is true', () => {
28
28
  const participant = {
29
29
  controls: {
@@ -32,10 +32,10 @@ describe('plugin-meetings', () => {
32
32
  },
33
33
  },
34
34
  };
35
-
35
+
36
36
  assert.isTrue(MemberUtil.isHandRaised(participant));
37
37
  });
38
-
38
+
39
39
  it('returns false when hand raised is false', () => {
40
40
  const participant = {
41
41
  controls: {
@@ -44,7 +44,7 @@ describe('plugin-meetings', () => {
44
44
  },
45
45
  },
46
46
  };
47
-
47
+
48
48
  assert.isFalse(MemberUtil.isHandRaised(participant));
49
49
  });
50
50
  });
@@ -95,7 +95,7 @@ describe('plugin-meetings', () => {
95
95
  }
96
96
  }
97
97
  }
98
-
98
+
99
99
  assert.isTrue(MemberUtil.hasRole(participant, ServerRoles.Presenter));
100
100
  });
101
101
 
@@ -109,7 +109,7 @@ describe('plugin-meetings', () => {
109
109
  }
110
110
  }
111
111
  }
112
-
112
+
113
113
  assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Presenter));
114
114
  });
115
115
 
@@ -123,7 +123,7 @@ describe('plugin-meetings', () => {
123
123
  }
124
124
  }
125
125
  }
126
-
126
+
127
127
  assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Presenter));
128
128
  });
129
129
  })
@@ -139,7 +139,7 @@ describe('plugin-meetings', () => {
139
139
  }
140
140
  }
141
141
  }
142
-
142
+
143
143
  assert.isTrue(MemberUtil.hasRole(participant, ServerRoles.Moderator));
144
144
  });
145
145
 
@@ -153,7 +153,7 @@ describe('plugin-meetings', () => {
153
153
  }
154
154
  }
155
155
  }
156
-
156
+
157
157
  assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Moderator));
158
158
  });
159
159
 
@@ -167,7 +167,7 @@ describe('plugin-meetings', () => {
167
167
  }
168
168
  }
169
169
  }
170
-
170
+
171
171
  assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Moderator));
172
172
  });
173
173
  })
@@ -183,7 +183,7 @@ describe('plugin-meetings', () => {
183
183
  }
184
184
  }
185
185
  }
186
-
186
+
187
187
  assert.isTrue(MemberUtil.hasRole(participant, ServerRoles.Cohost));
188
188
  });
189
189
 
@@ -197,7 +197,7 @@ describe('plugin-meetings', () => {
197
197
  }
198
198
  }
199
199
  }
200
-
200
+
201
201
  assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Cohost));
202
202
  });
203
203
 
@@ -211,7 +211,7 @@ describe('plugin-meetings', () => {
211
211
  }
212
212
  }
213
213
  }
214
-
214
+
215
215
  assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Cohost));
216
216
  });
217
217
  })
@@ -229,7 +229,7 @@ describe('plugin-meetings', () => {
229
229
  }
230
230
  }
231
231
  }
232
-
232
+
233
233
  assert.isTrue(MemberUtil.hasPresenter(participant, ServerRoles.Presenter));
234
234
  });
235
235
 
@@ -243,7 +243,7 @@ describe('plugin-meetings', () => {
243
243
  }
244
244
  }
245
245
  }
246
-
246
+
247
247
  assert.isFalse(MemberUtil.hasPresenter(participant));
248
248
  });
249
249
 
@@ -257,7 +257,7 @@ describe('plugin-meetings', () => {
257
257
  }
258
258
  }
259
259
  }
260
-
260
+
261
261
  assert.isFalse(MemberUtil.hasPresenter(participant));
262
262
  });
263
263
  })
@@ -273,7 +273,7 @@ describe('plugin-meetings', () => {
273
273
  }
274
274
  }
275
275
  }
276
-
276
+
277
277
  assert.isTrue(MemberUtil.hasModerator(participant));
278
278
  });
279
279
 
@@ -287,7 +287,7 @@ describe('plugin-meetings', () => {
287
287
  }
288
288
  }
289
289
  }
290
-
290
+
291
291
  assert.isFalse(MemberUtil.hasModerator(participant));
292
292
  });
293
293
 
@@ -301,7 +301,7 @@ describe('plugin-meetings', () => {
301
301
  }
302
302
  }
303
303
  }
304
-
304
+
305
305
  assert.isFalse(MemberUtil.hasModerator(participant));
306
306
  });
307
307
  })
@@ -317,7 +317,7 @@ describe('plugin-meetings', () => {
317
317
  }
318
318
  }
319
319
  }
320
-
320
+
321
321
  assert.isTrue(MemberUtil.hasCohost(participant));
322
322
  });
323
323
 
@@ -331,7 +331,7 @@ describe('plugin-meetings', () => {
331
331
  }
332
332
  }
333
333
  }
334
-
334
+
335
335
  assert.isFalse(MemberUtil.hasCohost(participant));
336
336
  });
337
337
 
@@ -345,7 +345,7 @@ describe('plugin-meetings', () => {
345
345
  }
346
346
  }
347
347
  }
348
-
348
+
349
349
  assert.isFalse(MemberUtil.hasCohost(participant));
350
350
  });
351
351
  })
@@ -374,4 +374,28 @@ describe('plugin-meetings', () => {
374
374
  assert.isFalse(MemberUtil.isBreakoutsSupported(participant));
375
375
  });
376
376
  });
377
+
378
+ describe('MemberUtil.isLiveAnnotationSupported', () => {
379
+ it('throws error when there is no participant', () => {
380
+ assert.throws(() => {
381
+ MemberUtil.isLiveAnnotationSupported();
382
+ }, 'LiveAnnotation support could not be processed, participant is undefined.');
383
+ });
384
+
385
+ it('returns true when hand live annotation are supported', () => {
386
+ const participant = {
387
+ annotatorAssignmentNotAllowed: false
388
+ };
389
+
390
+ assert.isTrue(MemberUtil.isLiveAnnotationSupported(participant));
391
+ });
392
+
393
+ it('returns false when hand live annotation are not supported', () => {
394
+ const participant = {
395
+ annotatorAssignmentNotAllowed: true
396
+ };
397
+
398
+ assert.isFalse(MemberUtil.isLiveAnnotationSupported(participant));
399
+ });
400
+ });
377
401
  });