@webex/plugin-meetings 3.0.0-beta.120 → 3.0.0-beta.122

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.
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["annotation.types.ts"],"sourcesContent":["/**\n * Type for an StrokeData Object\n */\ntype StrokeData = {\n fromUserId: string;\n fromDeviceUrl: string;\n toUserId: string;\n content: string;\n shareInstanceId: string;\n encryptionKeyUrl: string;\n version: string;\n};\n\ntype RequestData = {\n toUserId: string;\n toDeviceUrl: string;\n shareInstanceId: string;\n};\n\ntype CommandRequestBody = {\n actionType: string;\n resourceType: string;\n shareInstanceId: string;\n receivers?: any[];\n};\n\ninterface IAnnotationChannel {\n // === below is for presenter\n acceptRequest: (approval) => undefined | Promise<void>;\n declineRequest: (approval) => undefined | Promise<void>;\n closeAnnotation: (requestData: RequestData) => undefined | Promise<void>;\n changeAnnotationOptions: (options, meeting) => undefined | Promise<void>;\n // === below is for attendee\n approveAnnotation: (requestData: RequestData) => undefined | Promise<void>;\n cancelApproveAnnotation: (requestData: RequestData, approval) => undefined | Promise<void>;\n sendStrokeData: (strokeData: StrokeData) => void;\n // =====\n approvalUrlUpdate: (approvalUrl: string) => void;\n locusUrlUpdate: (locusUrl: string) => void;\n}\n\nexport type {StrokeData, RequestData, CommandRequestBody, IAnnotationChannel};\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["annotation.types.ts"],"sourcesContent":["/**\n * Type for an StrokeData Object\n */\ntype StrokeData = {\n deviceId: string;\n toUserId: string;\n requesterId: string;\n content: string;\n shareInstanceId: string;\n encryptionKeyUrl: string;\n version: string;\n};\n\ntype RequestData = {\n toUserId: string;\n toDeviceUrl: string;\n shareInstanceId: string;\n};\n\ntype CommandRequestBody = {\n actionType: string;\n resourceType: string;\n shareInstanceId: string;\n receivers?: any[];\n};\n\ninterface IAnnotationChannel {\n // === below is for presenter\n acceptRequest: (approval) => undefined | Promise<void>;\n declineRequest: (approval) => undefined | Promise<void>;\n closeAnnotation: (requestData: RequestData) => undefined | Promise<void>;\n changeAnnotationOptions: (options, meeting) => undefined | Promise<void>;\n // === below is for attendee\n approveAnnotation: (requestData: RequestData) => undefined | Promise<void>;\n cancelApproveAnnotation: (requestData: RequestData, approval) => undefined | Promise<void>;\n sendStrokeData: (strokeData: StrokeData) => void;\n // =====\n approvalUrlUpdate: (approvalUrl: string) => void;\n locusUrlUpdate: (locusUrl: string) => void;\n}\n\nexport type {StrokeData, RequestData, CommandRequestBody, IAnnotationChannel};\n"],"mappings":""}
@@ -326,15 +326,13 @@ var AnnotationChannel = /*#__PURE__*/function (_WebexPlugin) {
326
326
  relayType: _constants.ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT,
327
327
  request: {
328
328
  value: {
329
- sessionId: _uuid.default.v4(),
330
329
  type: _constants.ANNOTATION_REQUEST_TYPE.ANNOTATION_MESSAGE,
331
- locusUrl: this.locusUrl,
332
330
  content: encryptedContent,
331
+ deviceId: strokeData.deviceId,
332
+ seq: this.seqNum,
333
+ requesterId: strokeData.requesterId,
333
334
  version: strokeData.version,
334
- fromUserId: strokeData.fromUserId,
335
- fromDeviceUrl: strokeData.fromDeviceUrl,
336
335
  shareInstanceId: strokeData.shareInstanceId,
337
- locusId: this.locusUrl && this.locusUrl.split('/').pop(),
338
336
  encryptionKeyUrl: strokeData.encryptionKeyUrl
339
337
  }
340
338
  }
@@ -1 +1 @@
1
- {"version":3,"names":["AnnotationChannel","args","ANNOTATION","actionType","requestData","body","resourceType","shareInstanceId","toUserId","receivers","participantId","deviceUrl","toDeviceUrl","request","method","HTTP_VERBS","POST","url","approvalUrl","encryptionKeyUrl","content","webex","internal","encryption","decryptText","then","res","encryptText","strokeData","llm","isConnected","encryptContent","encryptedContent","publishEncrypted","seqNum","decryptContent","decryptedContent","TriggerProxy","trigger","file","function","EVENT_TRIGGERS","ANNOTATION_STROKE_DATA","data","e","eventType","approval","ANNOTATION_RESOURCE_TYPE","ANNOTATION_COMMAND","type","payload","sequenceNumber","relayType","ANNOTATION_RELAY_TYPES","ANNOTATION_CLIENT","processStrokeMessage","hasSubscribedToEvents","mercury","on","eventCommandProcessor","eventDataProcessor","locusUrl","listenToEvents","PUT","ANNOTATION_ACTION_TYPE","ACCEPTED","DECLINED","sendAnnotationAction","REQUESTED","CANCELED","CLOSED","options","meeting","meetingRequest","changeMeetingFloor","id","recipients","route","getBinding","headers","to","value","sessionId","uuid","v4","ANNOTATION_REQUEST_TYPE","ANNOTATION_MESSAGE","version","fromUserId","fromDeviceUrl","locusId","split","pop","trackingId","config","trackingIdPrefix","toString","timestamp","Date","getTime","filterMessage","socket","send","WebexPlugin"],"sources":["index.ts"],"sourcesContent":["import uuid from 'uuid';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {WebexPlugin, config} from '@webex/webex-core';\nimport TriggerProxy from '../common/events/trigger-proxy';\n\nimport {\n EVENT_TRIGGERS,\n ANNOTATION_RELAY_TYPES,\n ANNOTATION,\n ANNOTATION_REQUEST_TYPE,\n ANNOTATION_ACTION_TYPE,\n ANNOTATION_RESOURCE_TYPE,\n} from './constants';\n\nimport {StrokeData, RequestData, IAnnotationChannel, CommandRequestBody} from './annotation.types';\nimport {HTTP_VERBS} from '../constants';\n\n/**\n * @description Annotation to handle LLM and Mercury message and locus API\n * @class\n */\nclass AnnotationChannel extends WebexPlugin implements IAnnotationChannel {\n namespace = ANNOTATION;\n\n private seqNum: number;\n\n hasSubscribedToEvents: boolean;\n\n approvalUrl: string;\n locusUrl: string;\n deviceUrl: string;\n\n /**\n * Initializes annotation module\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n }\n\n /**\n * Process Stroke Data\n * @param {request} request stroke data\n * @returns {void}\n */\n private processStrokeMessage(request) {\n this.decryptContent(request.encryptionKeyUrl, request.content).then((decryptedContent) => {\n request.content = decryptedContent;\n TriggerProxy.trigger(\n this,\n {\n file: 'annotation',\n function: 'processStrokeMessage',\n },\n EVENT_TRIGGERS.ANNOTATION_STROKE_DATA,\n {\n data: request,\n }\n );\n });\n }\n\n /** bind all events from mercury\n * @param {Object} e\n * @returns {undefined}\n */\n private eventCommandProcessor(e) {\n if (\n e?.data?.eventType === 'locus.approval_request' &&\n e?.data?.approval?.resourceType === ANNOTATION_RESOURCE_TYPE &&\n e?.data?.approval?.actionType\n ) {\n TriggerProxy.trigger(\n this,\n {\n file: 'annotation',\n function: 'approval_request',\n },\n EVENT_TRIGGERS.ANNOTATION_COMMAND,\n {\n type: e.data.approval.actionType,\n payload: e.data.approval,\n }\n );\n this.seqNum = (e?.sequenceNumber || 0) + 1;\n }\n }\n\n /** bind all events from llm\n * @param {Object} e\n * @returns {undefined}\n */\n private eventDataProcessor(e) {\n switch (e?.data?.relayType) {\n case ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT:\n this.seqNum = (e?.sequenceNumber || 0) + 1;\n this.processStrokeMessage(e.data.request);\n break;\n default:\n break;\n }\n }\n\n /**\n * Listen to websocket messages\n * @returns {undefined}\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n // @ts-ignore\n this.webex.internal.mercury.on(\n 'event:locus.approval_request',\n this.eventCommandProcessor,\n this\n );\n // @ts-ignore\n this.webex.internal.llm.on('event:relay.event', this.eventDataProcessor, this);\n this.hasSubscribedToEvents = true;\n }\n }\n\n /**\n * set locusUrl\n * @param {string} locusUrl\n * @returns {void}\n */\n public locusUrlUpdate(locusUrl: string) {\n this.locusUrl = locusUrl;\n this.listenToEvents();\n }\n\n /**\n * set approved url\n * @param {string} approvalUrl\n * @returns {void}\n */\n public approvalUrlUpdate(approvalUrl: string) {\n this.approvalUrl = approvalUrl;\n }\n\n /**\n * accept request\n * @param {object} approval\n * @returns {Promise}\n */\n public acceptRequest(approval) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n url: approval.url,\n body: {\n resourceType: ANNOTATION_RESOURCE_TYPE,\n actionType: ANNOTATION_ACTION_TYPE.ACCEPTED,\n },\n });\n }\n\n /**\n * presenter declined request annotation\n * @param {approval} approval\n * @returns {Promise}\n */\n public declineRequest(approval) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n url: approval.url,\n body: {\n resourceType: ANNOTATION_RESOURCE_TYPE,\n actionType: ANNOTATION_ACTION_TYPE.DECLINED,\n },\n });\n }\n\n /**\n * request approved annotation\n * @param {RequestData} requestData\n * @returns {Promise}\n */\n public approveAnnotation(requestData: RequestData) {\n return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.REQUESTED, requestData);\n }\n\n /**\n * cancel approved annotation\n * @param {object} requestData\n * @param {object} approval\n * @returns {Promise}\n */\n public cancelApproveAnnotation(requestData: RequestData, approval) {\n const body: CommandRequestBody = {\n actionType: ANNOTATION_ACTION_TYPE.CANCELED,\n resourceType: 'AnnotationOnShare',\n shareInstanceId: requestData.shareInstanceId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n url: `${approval.url}`,\n body,\n });\n }\n\n /**\n * close annotation\n * @param {object} requestData\n * @returns {Promise}\n */\n public closeAnnotation(requestData: RequestData) {\n return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.CLOSED, requestData);\n }\n\n /**\n * send annotation command\n * @param {ANNOTATION_ACTION_TYPE} actionType\n * @param {RequestData} requestData\n * @returns {Promise}\n */\n private sendAnnotationAction = async (\n actionType: ANNOTATION_ACTION_TYPE,\n requestData: RequestData\n ): Promise<void> => {\n const body: CommandRequestBody = {\n actionType,\n resourceType: 'AnnotationOnShare',\n shareInstanceId: requestData.shareInstanceId,\n };\n if (requestData?.toUserId) {\n body.receivers = [{participantId: requestData.toUserId, deviceUrl: requestData.toDeviceUrl}];\n }\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n url: `${this.approvalUrl}`,\n body,\n });\n };\n\n /**\n * decrypt data\n * @param {string} encryptionKeyUrl\n * @param {string} content encrypted content\n * @returns {string} decrypted content\n */\n private decryptContent = (encryptionKeyUrl: string, content: string): Promise<any> => {\n // @ts-ignore\n return this.webex.internal.encryption.decryptText(encryptionKeyUrl, content).then((res) => {\n return res;\n });\n };\n\n /**\n * encrypt data\n * @param {string} encryptionKeyUrl\n * @param {string} content original content\n * @returns {string} encrypted content\n */\n private encryptContent = (encryptionKeyUrl: string, content: string): Promise<any> => {\n // @ts-ignore\n return this.webex.internal.encryption.encryptText(encryptionKeyUrl, content).then((res) => {\n return res;\n });\n };\n\n /**\n * Sends stroke data to presenter\n * @param {StrokeData} strokeData\n * @returns {void}\n */\n public sendStrokeData = (strokeData: StrokeData): void => {\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n this.encryptContent(strokeData.encryptionKeyUrl, strokeData.content).then(\n (encryptedContent) => {\n this.publishEncrypted(encryptedContent, strokeData);\n }\n );\n };\n\n /**\n * Change annotation options\n * @param {object} options\n * @param {object} meeting\n * @returns {Promise}\n */\n public changeAnnotationOptions(options, meeting) {\n return meeting?.meetingRequest.changeMeetingFloor(options);\n }\n\n /**\n * private encrypted the strokes data\n * @param {string} encryptedContent\n * @param {StrokeData} strokeData\n * @returns {void}\n */\n private publishEncrypted(encryptedContent: string, strokeData: StrokeData) {\n const data = {\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {\n to: strokeData.toUserId,\n },\n data: {\n eventType: 'relay.event',\n relayType: ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT,\n request: {\n value: {\n sessionId: uuid.v4(),\n type: ANNOTATION_REQUEST_TYPE.ANNOTATION_MESSAGE,\n locusUrl: this.locusUrl,\n content: encryptedContent,\n version: strokeData.version,\n fromUserId: strokeData.fromUserId,\n fromDeviceUrl: strokeData.fromDeviceUrl,\n shareInstanceId: strokeData.shareInstanceId,\n locusId: this.locusUrl && this.locusUrl.split('/').pop(),\n encryptionKeyUrl: strokeData.encryptionKeyUrl,\n },\n },\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n timestamp: new Date().getTime(),\n sequenceNumber: this.seqNum,\n filterMessage: false,\n };\n\n // @ts-ignore\n this.webex.internal.llm.socket.send(data);\n this.seqNum += 1;\n }\n}\n\nexport default AnnotationChannel;\n"],"mappings":"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"}
1
+ {"version":3,"names":["AnnotationChannel","args","ANNOTATION","actionType","requestData","body","resourceType","shareInstanceId","toUserId","receivers","participantId","deviceUrl","toDeviceUrl","request","method","HTTP_VERBS","POST","url","approvalUrl","encryptionKeyUrl","content","webex","internal","encryption","decryptText","then","res","encryptText","strokeData","llm","isConnected","encryptContent","encryptedContent","publishEncrypted","seqNum","decryptContent","decryptedContent","TriggerProxy","trigger","file","function","EVENT_TRIGGERS","ANNOTATION_STROKE_DATA","data","e","eventType","approval","ANNOTATION_RESOURCE_TYPE","ANNOTATION_COMMAND","type","payload","sequenceNumber","relayType","ANNOTATION_RELAY_TYPES","ANNOTATION_CLIENT","processStrokeMessage","hasSubscribedToEvents","mercury","on","eventCommandProcessor","eventDataProcessor","locusUrl","listenToEvents","PUT","ANNOTATION_ACTION_TYPE","ACCEPTED","DECLINED","sendAnnotationAction","REQUESTED","CANCELED","CLOSED","options","meeting","meetingRequest","changeMeetingFloor","id","recipients","route","getBinding","headers","to","value","ANNOTATION_REQUEST_TYPE","ANNOTATION_MESSAGE","deviceId","seq","requesterId","version","trackingId","config","trackingIdPrefix","uuid","v4","toString","timestamp","Date","getTime","filterMessage","socket","send","WebexPlugin"],"sources":["index.ts"],"sourcesContent":["import uuid from 'uuid';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {WebexPlugin, config} from '@webex/webex-core';\nimport TriggerProxy from '../common/events/trigger-proxy';\n\nimport {\n EVENT_TRIGGERS,\n ANNOTATION_RELAY_TYPES,\n ANNOTATION,\n ANNOTATION_REQUEST_TYPE,\n ANNOTATION_ACTION_TYPE,\n ANNOTATION_RESOURCE_TYPE,\n} from './constants';\n\nimport {StrokeData, RequestData, IAnnotationChannel, CommandRequestBody} from './annotation.types';\nimport {HTTP_VERBS} from '../constants';\n\n/**\n * @description Annotation to handle LLM and Mercury message and locus API\n * @class\n */\nclass AnnotationChannel extends WebexPlugin implements IAnnotationChannel {\n namespace = ANNOTATION;\n\n private seqNum: number;\n\n hasSubscribedToEvents: boolean;\n\n approvalUrl: string;\n locusUrl: string;\n deviceUrl: string;\n\n /**\n * Initializes annotation module\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n }\n\n /**\n * Process Stroke Data\n * @param {request} request stroke data\n * @returns {void}\n */\n private processStrokeMessage(request) {\n this.decryptContent(request.encryptionKeyUrl, request.content).then((decryptedContent) => {\n request.content = decryptedContent;\n TriggerProxy.trigger(\n this,\n {\n file: 'annotation',\n function: 'processStrokeMessage',\n },\n EVENT_TRIGGERS.ANNOTATION_STROKE_DATA,\n {\n data: request,\n }\n );\n });\n }\n\n /** bind all events from mercury\n * @param {Object} e\n * @returns {undefined}\n */\n private eventCommandProcessor(e) {\n if (\n e?.data?.eventType === 'locus.approval_request' &&\n e?.data?.approval?.resourceType === ANNOTATION_RESOURCE_TYPE &&\n e?.data?.approval?.actionType\n ) {\n TriggerProxy.trigger(\n this,\n {\n file: 'annotation',\n function: 'approval_request',\n },\n EVENT_TRIGGERS.ANNOTATION_COMMAND,\n {\n type: e.data.approval.actionType,\n payload: e.data.approval,\n }\n );\n this.seqNum = (e?.sequenceNumber || 0) + 1;\n }\n }\n\n /** bind all events from llm\n * @param {Object} e\n * @returns {undefined}\n */\n private eventDataProcessor(e) {\n switch (e?.data?.relayType) {\n case ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT:\n this.seqNum = (e?.sequenceNumber || 0) + 1;\n this.processStrokeMessage(e.data.request);\n break;\n default:\n break;\n }\n }\n\n /**\n * Listen to websocket messages\n * @returns {undefined}\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n // @ts-ignore\n this.webex.internal.mercury.on(\n 'event:locus.approval_request',\n this.eventCommandProcessor,\n this\n );\n // @ts-ignore\n this.webex.internal.llm.on('event:relay.event', this.eventDataProcessor, this);\n this.hasSubscribedToEvents = true;\n }\n }\n\n /**\n * set locusUrl\n * @param {string} locusUrl\n * @returns {void}\n */\n public locusUrlUpdate(locusUrl: string) {\n this.locusUrl = locusUrl;\n this.listenToEvents();\n }\n\n /**\n * set approved url\n * @param {string} approvalUrl\n * @returns {void}\n */\n public approvalUrlUpdate(approvalUrl: string) {\n this.approvalUrl = approvalUrl;\n }\n\n /**\n * accept request\n * @param {object} approval\n * @returns {Promise}\n */\n public acceptRequest(approval) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n url: approval.url,\n body: {\n resourceType: ANNOTATION_RESOURCE_TYPE,\n actionType: ANNOTATION_ACTION_TYPE.ACCEPTED,\n },\n });\n }\n\n /**\n * presenter declined request annotation\n * @param {approval} approval\n * @returns {Promise}\n */\n public declineRequest(approval) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n url: approval.url,\n body: {\n resourceType: ANNOTATION_RESOURCE_TYPE,\n actionType: ANNOTATION_ACTION_TYPE.DECLINED,\n },\n });\n }\n\n /**\n * request approved annotation\n * @param {RequestData} requestData\n * @returns {Promise}\n */\n public approveAnnotation(requestData: RequestData) {\n return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.REQUESTED, requestData);\n }\n\n /**\n * cancel approved annotation\n * @param {object} requestData\n * @param {object} approval\n * @returns {Promise}\n */\n public cancelApproveAnnotation(requestData: RequestData, approval) {\n const body: CommandRequestBody = {\n actionType: ANNOTATION_ACTION_TYPE.CANCELED,\n resourceType: 'AnnotationOnShare',\n shareInstanceId: requestData.shareInstanceId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n url: `${approval.url}`,\n body,\n });\n }\n\n /**\n * close annotation\n * @param {object} requestData\n * @returns {Promise}\n */\n public closeAnnotation(requestData: RequestData) {\n return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.CLOSED, requestData);\n }\n\n /**\n * send annotation command\n * @param {ANNOTATION_ACTION_TYPE} actionType\n * @param {RequestData} requestData\n * @returns {Promise}\n */\n private sendAnnotationAction = async (\n actionType: ANNOTATION_ACTION_TYPE,\n requestData: RequestData\n ): Promise<void> => {\n const body: CommandRequestBody = {\n actionType,\n resourceType: 'AnnotationOnShare',\n shareInstanceId: requestData.shareInstanceId,\n };\n if (requestData?.toUserId) {\n body.receivers = [{participantId: requestData.toUserId, deviceUrl: requestData.toDeviceUrl}];\n }\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n url: `${this.approvalUrl}`,\n body,\n });\n };\n\n /**\n * decrypt data\n * @param {string} encryptionKeyUrl\n * @param {string} content encrypted content\n * @returns {string} decrypted content\n */\n private decryptContent = (encryptionKeyUrl: string, content: string): Promise<any> => {\n // @ts-ignore\n return this.webex.internal.encryption.decryptText(encryptionKeyUrl, content).then((res) => {\n return res;\n });\n };\n\n /**\n * encrypt data\n * @param {string} encryptionKeyUrl\n * @param {string} content original content\n * @returns {string} encrypted content\n */\n private encryptContent = (encryptionKeyUrl: string, content: string): Promise<any> => {\n // @ts-ignore\n return this.webex.internal.encryption.encryptText(encryptionKeyUrl, content).then((res) => {\n return res;\n });\n };\n\n /**\n * Sends stroke data to presenter\n * @param {StrokeData} strokeData\n * @returns {void}\n */\n public sendStrokeData = (strokeData: StrokeData): void => {\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n this.encryptContent(strokeData.encryptionKeyUrl, strokeData.content).then(\n (encryptedContent) => {\n this.publishEncrypted(encryptedContent, strokeData);\n }\n );\n };\n\n /**\n * Change annotation options\n * @param {object} options\n * @param {object} meeting\n * @returns {Promise}\n */\n public changeAnnotationOptions(options, meeting) {\n return meeting?.meetingRequest.changeMeetingFloor(options);\n }\n\n /**\n * private encrypted the strokes data\n * @param {string} encryptedContent\n * @param {StrokeData} strokeData\n * @returns {void}\n */\n private publishEncrypted(encryptedContent: string, strokeData: StrokeData) {\n const data = {\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {\n to: strokeData.toUserId,\n },\n data: {\n eventType: 'relay.event',\n relayType: ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT,\n request: {\n value: {\n type: ANNOTATION_REQUEST_TYPE.ANNOTATION_MESSAGE,\n content: encryptedContent,\n deviceId: strokeData.deviceId,\n seq: this.seqNum,\n requesterId: strokeData.requesterId,\n version: strokeData.version,\n shareInstanceId: strokeData.shareInstanceId,\n encryptionKeyUrl: strokeData.encryptionKeyUrl,\n },\n },\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n timestamp: new Date().getTime(),\n sequenceNumber: this.seqNum,\n filterMessage: false,\n };\n\n // @ts-ignore\n this.webex.internal.llm.socket.send(data);\n this.seqNum += 1;\n }\n}\n\nexport default AnnotationChannel;\n"],"mappings":"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"}
@@ -186,7 +186,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
186
186
  sessionId: this.sessionId
187
187
  });
188
188
  },
189
- version: "3.0.0-beta.120"
189
+ version: "3.0.0-beta.122"
190
190
  });
191
191
  var _default = Breakout;
192
192
  exports.default = _default;
@@ -120,6 +120,18 @@ var Breakouts = _webexCore.WebexPlugin.extend({
120
120
  }
121
121
  return '';
122
122
  }
123
+ },
124
+ breakoutStatus: {
125
+ cache: false,
126
+ deps: ['isInMainSession', 'status', 'groups'],
127
+ /**
128
+ * Returns the breakout status
129
+ * @returns {boolean}
130
+ */
131
+ fn: function fn() {
132
+ var _this$groups, _this$groups$;
133
+ return this.isInMainSession ? (_this$groups = this.groups) === null || _this$groups === void 0 ? void 0 : (_this$groups$ = _this$groups[0]) === null || _this$groups$ === void 0 ? void 0 : _this$groups$.status : this.status;
134
+ }
123
135
  }
124
136
  },
125
137
  /**
@@ -128,8 +140,8 @@ var Breakouts = _webexCore.WebexPlugin.extend({
128
140
  */
129
141
  initialize: function initialize() {
130
142
  var _this = this;
131
- this.listenTo(this, 'change:status', function () {
132
- if (_this.status === _constants.BREAKOUTS.STATUS.CLOSING) {
143
+ this.listenTo(this, 'change:breakoutStatus', function () {
144
+ if (_this.breakoutStatus === _constants.BREAKOUTS.STATUS.CLOSING) {
133
145
  _this.trigger(_constants.BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);
134
146
  }
135
147
  });
@@ -976,7 +988,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
976
988
  this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
977
989
  }
978
990
  },
979
- version: "3.0.0-beta.120"
991
+ version: "3.0.0-beta.122"
980
992
  });
981
993
  var _default = Breakouts;
982
994
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["Breakouts","WebexPlugin","extend","namespace","MEETINGS","breakoutRequest","BreakoutRequest","collections","breakouts","BreakoutCollection","props","allowBackToMain","delayCloseTime","enableBreakoutSession","hasBreakoutPreAssignments","groupId","name","sessionId","sessionType","startTime","status","url","locusUrl","breakoutServiceUrl","mainLocusUrl","groups","manageGroups","preAssignments","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","_setManageGroups","breakoutInfo","create","boServiceErrorHandler","_clearEditLockInfo","clearSessions","action","ACTION","DELETE","start","START","allowToJoinLater","duration","DEFAULT_DURATION","refresh","end","CLOSE","update","unlockEdit","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 manageGroups: 'array', // appears when manage 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: ['manageGroups'],\n /**\n * Returns the actived group id\n * @returns {boolean}\n */\n fn() {\n if (this.manageGroups?.length) {\n return this.manageGroups[0].status !== BREAKOUTS.STATUS.CLOSED\n ? this.manageGroups[0].id\n : '';\n }\n\n return '';\n },\n },\n },\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 * set groups to manageGroups prop\n * @param {Object} breakoutInfo -- breakout groups\n * @returns {void}\n */\n _setManageGroups(breakoutInfo) {\n if (breakoutInfo?.body?.groups) {\n this.set('manageGroups', breakoutInfo.body.groups);\n }\n },\n\n /**\n * Create new breakout sessions\n * @param {object} params -- breakout session group\n * @returns {Promise}\n */\n async create(params) {\n const payload = {...params};\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{groups: [payload]},\n };\n // @ts-ignore\n const breakoutInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#create'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n // clear edit lock info after save breakout session info\n this._clearEditLockInfo();\n\n return breakoutInfo;\n },\n\n /**\n * Delete all breakout sessions\n * @returns {Promise}\n */\n async clearSessions() {\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{groups: [{action: BREAKOUTS.ACTION.DELETE}]},\n };\n // @ts-ignore\n const breakoutInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#clearSessions'));\n });\n\n this._setManageGroups(breakoutInfo);\n this.shouldFetchPreassignments = false;\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost starts breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n async start(params = {}) {\n const action = BREAKOUTS.ACTION.START;\n const payload = {\n id: this.breakoutGroupId,\n action,\n allowBackToMain: false,\n allowToJoinLater: false,\n 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 const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#start'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost ends breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n async end(params = {}) {\n const {delayCloseTime, breakoutGroupId: id} = this;\n const action = BREAKOUTS.ACTION.CLOSE;\n const payload = {\n id,\n action,\n delayCloseTime,\n ...params,\n };\n\n const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#end'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost update breakout sessions\n * @param {Object} params\n * @param {String} params.id\n * @param {Boolean} unlockEdit\n * @returns {Promise}\n */\n async update(params: {id: string}, unlockEdit?: boolean) {\n if (!params.id) {\n return Promise.reject(new Error('Missing breakout group id'));\n }\n const payload = {...params};\n\n const body = {\n ...(this.editLock?.token\n ? {editlock: {token: this.editLock.token, refresh: !unlockEdit}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#update'));\n });\n\n if (unlockEdit) {\n this._clearEditLockInfo();\n }\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * get existed breakout sessions\n * @param {boolean} editlock -- lock operations of the breakout sessions\n * @returns {Promise}\n */\n async getBreakout(editlock) {\n const breakout = await this.request({\n method: HTTP_VERBS.GET,\n uri: this.url + (editlock ? `?editlock=${editlock}` : ''),\n });\n\n this._setManageGroups(breakout);\n if (editlock && breakout.body?.editlock?.token) {\n this.set('editLock', breakout.body.editlock);\n this.keepEditLockAlive();\n }\n\n return breakout;\n },\n\n /**\n * enable and edit lock breakout\n * @returns {void}\n */\n async enableAndLockBreakout() {\n if (this.enableBreakoutSession) {\n this.lockBreakout();\n } else {\n const info = await this.enableBreakouts();\n\n if (info.body) {\n this.lockBreakout();\n }\n }\n },\n\n /**\n * 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","manageGroups","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","breakoutStatus","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","_setManageGroups","breakoutInfo","create","boServiceErrorHandler","_clearEditLockInfo","clearSessions","action","ACTION","DELETE","start","START","allowToJoinLater","duration","DEFAULT_DURATION","refresh","end","CLOSE","update","unlockEdit","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 manageGroups: 'array', // appears when manage 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: ['manageGroups'],\n /**\n * Returns the actived group id\n * @returns {boolean}\n */\n fn() {\n if (this.manageGroups?.length) {\n return this.manageGroups[0].status !== BREAKOUTS.STATUS.CLOSED\n ? this.manageGroups[0].id\n : '';\n }\n\n return '';\n },\n },\n breakoutStatus: {\n cache: false,\n deps: ['isInMainSession', 'status', 'groups'],\n /**\n * Returns the breakout status\n * @returns {boolean}\n */\n fn() {\n return this.isInMainSession ? this.groups?.[0]?.status : this.status;\n },\n },\n },\n\n /**\n * initialize for the breakouts\n * @returns {void}\n */\n initialize() {\n this.listenTo(this, 'change:breakoutStatus', () => {\n if (this.breakoutStatus === BREAKOUTS.STATUS.CLOSING) {\n this.trigger(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);\n }\n });\n this.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 * set groups to manageGroups prop\n * @param {Object} breakoutInfo -- breakout groups\n * @returns {void}\n */\n _setManageGroups(breakoutInfo) {\n if (breakoutInfo?.body?.groups) {\n this.set('manageGroups', breakoutInfo.body.groups);\n }\n },\n\n /**\n * Create new breakout sessions\n * @param {object} params -- breakout session group\n * @returns {Promise}\n */\n async create(params) {\n const payload = {...params};\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{groups: [payload]},\n };\n // @ts-ignore\n const breakoutInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#create'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n // clear edit lock info after save breakout session info\n this._clearEditLockInfo();\n\n return breakoutInfo;\n },\n\n /**\n * Delete all breakout sessions\n * @returns {Promise}\n */\n async clearSessions() {\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{groups: [{action: BREAKOUTS.ACTION.DELETE}]},\n };\n // @ts-ignore\n const breakoutInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#clearSessions'));\n });\n\n this._setManageGroups(breakoutInfo);\n this.shouldFetchPreassignments = false;\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost starts breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n async start(params = {}) {\n const action = BREAKOUTS.ACTION.START;\n const payload = {\n id: this.breakoutGroupId,\n action,\n allowBackToMain: false,\n allowToJoinLater: false,\n 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 const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#start'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost ends breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n async end(params = {}) {\n const {delayCloseTime, breakoutGroupId: id} = this;\n const action = BREAKOUTS.ACTION.CLOSE;\n const payload = {\n id,\n action,\n delayCloseTime,\n ...params,\n };\n\n const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#end'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost update breakout sessions\n * @param {Object} params\n * @param {String} params.id\n * @param {Boolean} unlockEdit\n * @returns {Promise}\n */\n async update(params: {id: string}, unlockEdit?: boolean) {\n if (!params.id) {\n return Promise.reject(new Error('Missing breakout group id'));\n }\n const payload = {...params};\n\n const body = {\n ...(this.editLock?.token\n ? {editlock: {token: this.editLock.token, refresh: !unlockEdit}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#update'));\n });\n\n if (unlockEdit) {\n this._clearEditLockInfo();\n }\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * get existed breakout sessions\n * @param {boolean} editlock -- lock operations of the breakout sessions\n * @returns {Promise}\n */\n async getBreakout(editlock) {\n const breakout = await this.request({\n method: HTTP_VERBS.GET,\n uri: this.url + (editlock ? `?editlock=${editlock}` : ''),\n });\n\n this._setManageGroups(breakout);\n if (editlock && breakout.body?.editlock?.token) {\n this.set('editLock', breakout.body.editlock);\n this.keepEditLockAlive();\n }\n\n return breakout;\n },\n\n /**\n * enable and edit lock breakout\n * @returns {void}\n */\n async enableAndLockBreakout() {\n if (this.enableBreakoutSession) {\n this.lockBreakout();\n } else {\n const info = await this.enableBreakouts();\n\n if (info.body) {\n this.lockBreakout();\n }\n }\n },\n\n /**\n * 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,YAAY,EAAE,OAAO;IAAE;IACvBC,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,CAACrB,WAAW,KAAKsB,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,CAACrB,WAAW,KAAKsB,oBAAS,CAACC,aAAa,CAACG,QAAQ,KACpD,IAAI,CAACxB,MAAM,KAAKoB,oBAAS,CAACK,MAAM,CAACC,IAAI,IAAI,IAAI,CAAC1B,MAAM,KAAKoB,oBAAS,CAACK,MAAM,CAACE,OAAO,CAAC;MAEvF;IACF,CAAC;IACDC,eAAe,EAAE;MACfX,KAAK,EAAE,KAAK;MACZC,IAAI,EAAE,CAAC,cAAc,CAAC;MACtB;AACN;AACA;AACA;MACMC,EAAE,gBAAG;QAAA;QACH,0BAAI,IAAI,CAACb,YAAY,+CAAjB,mBAAmBuB,MAAM,EAAE;UAC7B,OAAO,IAAI,CAACvB,YAAY,CAAC,CAAC,CAAC,CAACN,MAAM,KAAKoB,oBAAS,CAACK,MAAM,CAACK,MAAM,GAC1D,IAAI,CAACxB,YAAY,CAAC,CAAC,CAAC,CAACyB,EAAE,GACvB,EAAE;QACR;QAEA,OAAO,EAAE;MACX;IACF,CAAC;IACDC,cAAc,EAAE;MACdf,KAAK,EAAE,KAAK;MACZC,IAAI,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,CAAC;MAC7C;AACN;AACA;AACA;MACMC,EAAE,gBAAG;QAAA;QACH,OAAO,IAAI,CAACH,eAAe,mBAAG,IAAI,CAACX,MAAM,kEAAX,aAAc,CAAC,CAAC,kDAAhB,cAAkBL,MAAM,GAAG,IAAI,CAACA,MAAM;MACtE;IACF;EACF,CAAC;EAED;AACF;AACA;AACA;EACEiC,UAAU,wBAAG;IAAA;IACX,IAAI,CAACC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,EAAE,YAAM;MACjD,IAAI,KAAI,CAACF,cAAc,KAAKZ,oBAAS,CAACK,MAAM,CAACE,OAAO,EAAE;QACpD,KAAI,CAACQ,OAAO,CAACf,oBAAS,CAACgB,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,CAAC9C,SAAS,EAAE,KAAK,EAAE,UAACsD,QAAQ,EAAK;MACjD,KAAI,CAACJ,qBAAqB,EAAE;MAC5B,KAAI,CAACK,wBAAwB,CAACD,QAAQ,CAAC;IACzC,CAAC,CAAC;IACF,IAAI,CAACR,QAAQ,CAAC,IAAI,CAAC9C,SAAS,EAAE,kCAAkC,EAAE,UAACsD,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,CAAC9D,eAAe,GAAG,IAAIC,gBAAe,CAAC;MAAC8D,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,0BAACjD,QAAQ,EAAE;IACvB,IAAI,CAACkD,GAAG,CAAC,UAAU,EAAElD,QAAQ,CAAC;IAC9B,IAAOc,eAAe,GAAkB,IAAI,CAArCA,eAAe;MAAEZ,YAAY,GAAI,IAAI,CAApBA,YAAY;IACpC,IAAIY,eAAe,IAAI,CAACZ,YAAY,EAAE;MACpC,IAAI,CAACgD,GAAG,CAAC,cAAc,EAAElD,QAAQ,CAAC;IACpC;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;EACEmD,wBAAwB,oCAAClD,kBAAkB,EAAE;IAC3C,IAAI,CAACiD,GAAG,CAAC,oBAAoB,YAAKjD,kBAAkB,gBAAa;EACnE,CAAC;EAED;AACF;AACA;AACA;AACA;EACEoC,YAAY,0BAAG;IAAA;IACb,IAAI,CAACS,KAAK,CACPM,OAAO,CAAC;MAACC,GAAG,YAAK,IAAI,CAACtD,GAAG,YAAS;MAAEuD,EAAE,EAAE;QAACtD,QAAQ,EAAEuD,IAAI,CAAC,IAAI,CAACvD,QAAQ;MAAC;IAAC,CAAC,CAAC,CACzEwD,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,CAACf,oBAAS,CAACgB,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,IAAMlE,SAAS,sBAAGkE,KAAK,CAACO,QAAQ,6EAAd,gBAAgB5B,QAAQ,0DAAxB,sBAA0B7C,SAAS;IAErD,IAAM0E,OAAO,GAAG,IAAI,CAACnF,SAAS,CAACoF,GAAG,CAAC3E,SAAS,CAAC;IAE7C,IAAI,CAAC0E,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,CAACrB,sBAAsB,EAC3B,oBAAoB,EACpB,UAACA,sBAAsB,EAAEf,WAAW,EAAK;MACvC,IAAI,IAAA4E,4CAAqC,EAAC7D,sBAAsB,EAAEf,WAAW,CAAC,EAAE;QAC9E,MAAI,CAACqC,OAAO,CAACf,oBAAS,CAACgB,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,CAACf,oBAAS,CAACgB,MAAM,CAAC+C,OAAO,EAAE;QACrCH,YAAY,EAAZA,YAAY;QACZC,QAAQ,EAARA,QAAQ;QACRC,OAAO,EAAPA,OAAO;QACP;QACA;QACA;QACArF,SAAS,EAAE,MAAI,CAACgB,sBAAsB,CAAChB;MACzC,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;EACEiD,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,CAACf,oBAAS,CAACgB,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;QAAExF,SAAS,gBAATA,SAAS;MAE/B,MAAI,CAACsC,OAAO,CAACf,oBAAS,CAACgB,MAAM,CAACkD,YAAY,EAAE;QAACD,WAAW,EAAXA,WAAW;QAAExF,SAAS,EAATA;MAAS,CAAC,CAAC;IACvE,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACE0F,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,CAACnF,MAAM,CAAC;IACjC,IAAI,CAAC+C,GAAG,CAAC,WAAW,EAAEoC,MAAM,CAACzF,SAAS,CAAC;IACvC,IAAI,CAACqD,GAAG,CAAC,QAAQ,EAAEoC,MAAM,CAACxF,MAAM,CAAC;IAEjC,IAAI,CAACoD,GAAG,CAAC,wBAAwB;MAC/BvD,SAAS,EAAE2F,MAAM,CAAC3F,SAAS;MAC3BF,OAAO,EAAE6F,MAAM,CAAC7F,OAAO;MACvBC,IAAI,EAAE4F,MAAM,CAAC5F,IAAI;MACjB8F,OAAO,EAAE,IAAI;MACb5F,WAAW,EAAE0F,MAAM,CAAC1F,WAAW;MAC/BG,GAAG,EAAEuF,MAAM,CAACvF;IAAG,4CACdmB,oBAAS,CAACuE,cAAc,CAACC,MAAM,EAAG,KAAK,4CACvCxE,oBAAS,CAACuE,cAAc,CAACE,OAAO,EAAG,KAAK,4CACxCzE,oBAAS,CAACuE,cAAc,CAACE,OAAO,EAAG,KAAK,4CACxCzE,oBAAS,CAACuE,cAAc,CAACG,gBAAgB,EAAG,KAAK,4CACjD1E,oBAAS,CAACuE,cAAc,CAACI,SAAS,EAAG,KAAK,cAC3C;;IAEF;IACA,IAAIN,wBAAwB,KAAKD,MAAM,CAAC/F,qBAAqB,EAAE;MAC7D,IAAI,CAACuG,mBAAmB,CAACR,MAAM,CAAC;IAClC;IAEA,IACE,IAAI,CAAC3E,sBAAsB,CAACoF,QAAQ,CAAC,WAAW,CAAC,KAAK,IAAI,CAACpF,sBAAsB,CAAChB,SAAS,IAC3F,IAAI,CAACgB,sBAAsB,CAACoF,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,CAACpF,sBAAsB,CAAClB,OAAO,EACvF;MACA;MACA,IAAMuG,OAAO,GAAG,IAAI,CAAClD,KAAK,CAACmD,QAAQ,CAACC,gBAAgB,CAACC,eAAI,EAAE,IAAI,CAAC1F,SAAS,CAAC;MAC1E2F,eAAa,CAACC,sBAAsB,CAAC;QACnCC,cAAc,EAAE,IAAI,CAAC3F,sBAAsB;QAC3CqF,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,IAAMvH,SAAS,GAAG,CAAC,CAAC;IAEpB,IAAIuH,OAAO,CAACC,gBAAgB,EAAE;MAC5B,uBAAQxF,oBAAS,CAACuE,cAAc,EAAE,UAACkB,KAAK,EAAK;QAC3C,uBAAQF,OAAO,CAACC,gBAAgB,CAACC,KAAK,CAAC,EAAE,UAACnE,QAAQ,EAAK;UACrD,IAAO7C,SAAS,GAAI6C,QAAQ,CAArB7C,SAAS;UAEhB,IAAI,CAACT,SAAS,CAACS,SAAS,CAAC,EAAE;YACzBT,SAAS,CAACS,SAAS,CAAC,GAAG6C,QAAQ;YAC/BtD,SAAS,CAACS,SAAS,CAAC,CAACuB,oBAAS,CAACuE,cAAc,CAACC,MAAM,CAAC,GAAG,KAAK;YAC7DxG,SAAS,CAACS,SAAS,CAAC,CAACuB,oBAAS,CAACuE,cAAc,CAACmB,QAAQ,CAAC,GAAG,KAAK;YAC/D1H,SAAS,CAACS,SAAS,CAAC,CAACuB,oBAAS,CAACuE,cAAc,CAACE,OAAO,CAAC,GAAG,KAAK;YAC9DzG,SAAS,CAACS,SAAS,CAAC,CAACuB,oBAAS,CAACuE,cAAc,CAACG,gBAAgB,CAAC,GAAG,KAAK;YACvE1G,SAAS,CAACS,SAAS,CAAC,CAACuB,oBAAS,CAACuE,cAAc,CAACI,SAAS,CAAC,GAAG,KAAK;UAClE;UAEA3G,SAAS,CAACS,SAAS,CAAC,CAACgH,KAAK,CAAC,GAAG,IAAI;UAElC,IAAIA,KAAK,KAAKzF,oBAAS,CAACuE,cAAc,CAACI,SAAS,EAAE;YAChD3G,SAAS,CAACS,SAAS,CAAC,CAACkH,yBAAyB,GAAGrE,QAAQ,CAACsE,UAAU;UACtE;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;IAEA,uBAAQ5H,SAAS,EAAE,UAACsD,QAAyB,EAAK;MAChD;MACAA,QAAQ,CAACzC,GAAG,GAAG,MAAI,CAACA,GAAG;IACzB,CAAC,CAAC;IAEF,IAAI,CAACb,SAAS,CAACgE,GAAG,CAAC,qBAAchE,SAAS,CAAC,CAAC;EAC9C,CAAC;EACD;AACF;AACA;AACA;EACE6H,cAAc,4BAAG;IACf,IAAI,IAAI,CAACjG,eAAe,EAAE;MACxB,OAAO,IAAI,CAACH,sBAAsB;IACpC;IAEA,IAAMqG,WAAW,GAAG,IAAI,CAAC9H,SAAS,CAAC+H,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,CAACtD,GAAG,iBAAc;MAC9B4D,IAAI,EAAE;QACJlE,OAAO,EAAEuH,WAAW,CAACvH,OAAO;QAC5BE,SAAS,EAAEqH,WAAW,CAACrH;MACzB;IACF,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACE6H,SAAS,qBAACxC,OAAO,EAAEyC,OAAO,EAAE;IAC1B,IAAO/F,eAAe,GAAI,IAAI,CAAvBA,eAAe;IACtB,IAAI,CAACA,eAAe,EAAE;MACpB,MAAM,IAAIyF,KAAK,CAAC,6CAA6C,CAAC;IAChE;IAEA,OAAO,IAAI,CAACpI,eAAe,CAACyI,SAAS,CAAC;MACpCzH,GAAG,EAAE,IAAI,CAACA,GAAG;MACbiF,OAAO,EAAPA,OAAO;MACPyC,OAAO,EAAPA,OAAO;MACPhI,OAAO,EAAEiC;IACX,CAAC,CAAC;EACJ,CAAC;EACD;AACF;AACA;AACA;EACEgG,eAAe,6BAAG;IAChB,IAAI,IAAI,CAACzH,kBAAkB,EAAE;MAC3B;MACA,OAAO,IAAI,CAAC6C,KAAK,CACdM,OAAO,CAAC;QACPiE,MAAM,EAAEC,qBAAU,CAACC,IAAI;QACvBlE,GAAG,EAAE,IAAI,CAACpD,kBAAkB;QAC5B0D,IAAI,EAAE;UACJ3D,QAAQ,EAAE,IAAI,CAACA;QACjB;MACF,CAAC,CAAC,CACDgE,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,CAACvI,qBAAqB,KAAKwI,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,CAACpD,QAAQ,IAAI,CAAC,CAAC,IAAI,CAACA,QAAQ,CAAC2H,KAAK,GAAG;MAACC,QAAQ,EAAE;QAACD,KAAK,EAAE,IAAI,CAAC3H,QAAQ,CAAC2H;MAAK;IAAC,CAAC,GAAG,CAAC,CAAC,GACvF;MAAC3I,qBAAqB,EAAEuI;IAAM,CAAC,CACnC;;IAED;IACA,OAAO,IAAI,CAAChF,KAAK,CAACM,OAAO,CAAC;MACxBiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;MACtB/E,GAAG,EAAE,IAAI,CAACtD,GAAG;MACb4D,IAAI,EAAJA;IACF,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACE0E,gBAAgB,4BAACC,YAAY,EAAE;IAAA;IAC7B,IAAIA,YAAY,aAAZA,YAAY,qCAAZA,YAAY,CAAE3E,IAAI,+CAAlB,mBAAoBxD,MAAM,EAAE;MAC9B,IAAI,CAAC+C,GAAG,CAAC,cAAc,EAAEoF,YAAY,CAAC3E,IAAI,CAACxD,MAAM,CAAC;IACpD;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;EACQoI,MAAM,kBAACjD,MAAM,EAAE;IAAA;IAAA;MAAA;MAAA;QAAA;UAAA;YACbmB,OAAO,qBAAOnB,MAAM;YACpB3B,IAAI,mCACJ,MAAI,CAACpD,QAAQ,IAAI,CAAC,CAAC,MAAI,CAACA,QAAQ,CAAC2H,KAAK,GAAG;cAACC,QAAQ,EAAE;gBAACD,KAAK,EAAE,MAAI,CAAC3H,QAAQ,CAAC2H;cAAK;YAAC,CAAC,GAAG,CAAC,CAAC,GACvF;cAAC/H,MAAM,EAAE,CAACsG,OAAO;YAAC,CAAC,GAExB;YAAA;YAAA,OAC2B,MAAI,CAAC3D,KAAK,CAClCM,OAAO,CAAC;cACPiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;cACtB/E,GAAG,EAAE,MAAI,CAACtD,GAAG;cACb4D,IAAI,EAAJA;YACF,CAAC,CAAC,CACDK,KAAK,CAAC,UAACC,KAAK,EAAK;cAChB,OAAO,iBAAQ2D,MAAM,CAAC,IAAAY,4BAAqB,EAACvE,KAAK,EAAE,kBAAkB,CAAC,CAAC;YACzE,CAAC,CAAC;UAAA;YAREqE,YAAY;YAUlB,MAAI,CAACD,gBAAgB,CAACC,YAAY,CAAC;;YAEnC;YACA,MAAI,CAACG,kBAAkB,EAAE;YAAC,kCAEnBH,YAAY;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EACrB,CAAC;EAED;AACF;AACA;AACA;EACQI,aAAa,2BAAG;IAAA;IAAA;MAAA;MAAA;QAAA;UAAA;YACd/E,IAAI,mCACJ,OAAI,CAACpD,QAAQ,IAAI,CAAC,CAAC,OAAI,CAACA,QAAQ,CAAC2H,KAAK,GAAG;cAACC,QAAQ,EAAE;gBAACD,KAAK,EAAE,OAAI,CAAC3H,QAAQ,CAAC2H;cAAK;YAAC,CAAC,GAAG,CAAC,CAAC,GACvF;cAAC/H,MAAM,EAAE,CAAC;gBAACwI,MAAM,EAAEzH,oBAAS,CAAC0H,MAAM,CAACC;cAAM,CAAC;YAAC,CAAC,GAElD;YAAA;YAAA,OAC2B,OAAI,CAAC/F,KAAK,CAClCM,OAAO,CAAC;cACPiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;cACtB/E,GAAG,EAAE,OAAI,CAACtD,GAAG;cACb4D,IAAI,EAAJA;YACF,CAAC,CAAC,CACDK,KAAK,CAAC,UAACC,KAAK,EAAK;cAChB,OAAO,iBAAQ2D,MAAM,CAAC,IAAAY,4BAAqB,EAACvE,KAAK,EAAE,yBAAyB,CAAC,CAAC;YAChF,CAAC,CAAC;UAAA;YAREqE,YAAY;YAUlB,OAAI,CAACD,gBAAgB,CAACC,YAAY,CAAC;YACnC,OAAI,CAAChI,yBAAyB,GAAG,KAAK;YAAC,kCAEhCgI,YAAY;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EACrB,CAAC;EAED;AACF;AACA;AACA;AACA;EACQQ,KAAK,mBAAc;IAAA;MAAA;IAAA;MAAA;MAAA;QAAA;UAAA;YAAbxD,MAAM,0EAAG,CAAC,CAAC;YACfqD,MAAM,GAAGzH,oBAAS,CAAC0H,MAAM,CAACG,KAAK;YAC/BtC,OAAO;cACX5E,EAAE,EAAE,OAAI,CAACH,eAAe;cACxBiH,MAAM,EAANA,MAAM;cACNtJ,eAAe,EAAE,KAAK;cACtB2J,gBAAgB,EAAE,KAAK;cACvBC,QAAQ,EAAE/H,oBAAS,CAACgI;YAAgB,GACjC5D,MAAM;YAGL3B,IAAI,mCACJ,OAAI,CAACpD,QAAQ,IAAI,CAAC,CAAC,OAAI,CAACA,QAAQ,CAAC2H,KAAK,GACtC;cAACC,QAAQ,EAAE;gBAACD,KAAK,EAAE,OAAI,CAAC3H,QAAQ,CAAC2H,KAAK;gBAAEiB,OAAO,EAAE;cAAI;YAAC,CAAC,GACvD,CAAC,CAAC,GACH;cAAChJ,MAAM,EAAE,CAACsG,OAAO;YAAC,CAAC;YAAA;YAAA,OAGG,OAAI,CAACrD,OAAO,CAAC;cACtCiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;cACtB/E,GAAG,EAAE,OAAI,CAACtD,GAAG;cACb4D,IAAI,EAAJA;YACF,CAAC,CAAC,CAACK,KAAK,CAAC,UAACC,KAAK,EAAK;cAClB,OAAO,iBAAQ2D,MAAM,CAAC,IAAAY,4BAAqB,EAACvE,KAAK,EAAE,iBAAiB,CAAC,CAAC;YACxE,CAAC,CAAC;UAAA;YANIqE,YAAY;YAQlB,OAAI,CAACD,gBAAgB,CAACC,YAAY,CAAC;YAAC,kCAE7BA,YAAY;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EACrB,CAAC;EAED;AACF;AACA;AACA;AACA;EACQc,GAAG,iBAAc;IAAA;MAAA;IAAA;MAAA;MAAA;QAAA;UAAA;YAAb9D,MAAM,6EAAG,CAAC,CAAC;YACZhG,cAAc,GAAyB,OAAI,CAA3CA,cAAc,EAAmBuC,EAAE,GAAI,OAAI,CAA3BH,eAAe;YAChCiH,MAAM,GAAGzH,oBAAS,CAAC0H,MAAM,CAACS,KAAK;YAC/B5C,OAAO;cACX5E,EAAE,EAAFA,EAAE;cACF8G,MAAM,EAANA,MAAM;cACNrJ,cAAc,EAAdA;YAAc,GACXgG,MAAM;YAGL3B,IAAI,mCACJ,OAAI,CAACpD,QAAQ,IAAI,CAAC,CAAC,OAAI,CAACA,QAAQ,CAAC2H,KAAK,GACtC;cAACC,QAAQ,EAAE;gBAACD,KAAK,EAAE,OAAI,CAAC3H,QAAQ,CAAC2H,KAAK;gBAAEiB,OAAO,EAAE;cAAI;YAAC,CAAC,GACvD,CAAC,CAAC,GACH;cAAChJ,MAAM,EAAE,CAACsG,OAAO;YAAC,CAAC;YAAA;YAAA,OAGG,OAAI,CAACrD,OAAO,CAAC;cACtCiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;cACtB/E,GAAG,EAAE,OAAI,CAACtD,GAAG;cACb4D,IAAI,EAAJA;YACF,CAAC,CAAC,CAACK,KAAK,CAAC,UAACC,KAAK,EAAK;cAClB,OAAO,iBAAQ2D,MAAM,CAAC,IAAAY,4BAAqB,EAACvE,KAAK,EAAE,eAAe,CAAC,CAAC;YACtE,CAAC,CAAC;UAAA;YANIqE,YAAY;YAQlB,OAAI,CAACD,gBAAgB,CAACC,YAAY,CAAC;YAAC,kCAE7BA,YAAY;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EACrB,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACQgB,MAAM,kBAAChE,MAAoB,EAAEiE,UAAoB,EAAE;IAAA;IAAA;MAAA;MAAA;MAAA;QAAA;UAAA;YAAA,IAClDjE,MAAM,CAACzD,EAAE;cAAA;cAAA;YAAA;YAAA,kCACL,iBAAQ+F,MAAM,CAAC,IAAIT,KAAK,CAAC,2BAA2B,CAAC,CAAC;UAAA;YAEzDV,OAAO,qBAAOnB,MAAM;YAEpB3B,IAAI,mCACJ,2BAAI,CAACpD,QAAQ,6CAAb,iBAAe2H,KAAK,GACpB;cAACC,QAAQ,EAAE;gBAACD,KAAK,EAAE,OAAI,CAAC3H,QAAQ,CAAC2H,KAAK;gBAAEiB,OAAO,EAAE,CAACI;cAAU;YAAC,CAAC,GAC9D,CAAC,CAAC,GACH;cAACpJ,MAAM,EAAE,CAACsG,OAAO;YAAC,CAAC;YAAA;YAAA,OAGG,OAAI,CAACrD,OAAO,CAAC;cACtCiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;cACtB/E,GAAG,EAAE,OAAI,CAACtD,GAAG;cACb4D,IAAI,EAAJA;YACF,CAAC,CAAC,CAACK,KAAK,CAAC,UAACC,KAAK,EAAK;cAClB,OAAO,iBAAQ2D,MAAM,CAAC,IAAAY,4BAAqB,EAACvE,KAAK,EAAE,kBAAkB,CAAC,CAAC;YACzE,CAAC,CAAC;UAAA;YANIqE,YAAY;YAQlB,IAAIiB,UAAU,EAAE;cACd,OAAI,CAACd,kBAAkB,EAAE;YAC3B;YAEA,OAAI,CAACJ,gBAAgB,CAACC,YAAY,CAAC;YAAC,kCAE7BA,YAAY;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EACrB,CAAC;EAED;AACF;AACA;AACA;AACA;EACQkB,WAAW,uBAACrB,QAAQ,EAAE;IAAA;IAAA;MAAA;MAAA;MAAA;QAAA;UAAA;YAAA;YAAA,OACH,OAAI,CAAC/E,OAAO,CAAC;cAClCiE,MAAM,EAAEC,qBAAU,CAACmC,GAAG;cACtBpG,GAAG,EAAE,OAAI,CAACtD,GAAG,IAAIoI,QAAQ,uBAAgBA,QAAQ,IAAK,EAAE;YAC1D,CAAC,CAAC;UAAA;YAHI3F,QAAQ;YAKd,OAAI,CAAC6F,gBAAgB,CAAC7F,QAAQ,CAAC;YAC/B,IAAI2F,QAAQ,sBAAI3F,QAAQ,CAACmB,IAAI,oEAAb,eAAewE,QAAQ,kDAAvB,sBAAyBD,KAAK,EAAE;cAC9C,OAAI,CAAChF,GAAG,CAAC,UAAU,EAAEV,QAAQ,CAACmB,IAAI,CAACwE,QAAQ,CAAC;cAC5C,OAAI,CAACuB,iBAAiB,EAAE;YAC1B;YAAC,kCAEMlH,QAAQ;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EACjB,CAAC;EAED;AACF;AACA;AACA;EACQmH,qBAAqB,mCAAG;IAAA;IAAA;MAAA;MAAA;QAAA;UAAA;YAAA,KACxB,OAAI,CAACpK,qBAAqB;cAAA;cAAA;YAAA;YAC5B,OAAI,CAACqK,YAAY,EAAE;YAAC;YAAA;UAAA;YAAA;YAAA,OAED,OAAI,CAAClC,eAAe,EAAE;UAAA;YAAnCM,IAAI;YAEV,IAAIA,IAAI,CAACrE,IAAI,EAAE;cACb,OAAI,CAACiG,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,CAAC2H,KAAK;cAAA;cAAA;YAAA;YAAA,MACpC,OAAI,CAAC3H,QAAQ,CAACoG,KAAK,KAAKzF,oBAAS,CAAC2I,gBAAgB,CAACC,MAAM;cAAA;cAAA;YAAA;YAAA,MACrD,IAAI3C,KAAK,CAAC,yBAAyB,CAAC;UAAA;YAE1C,OAAI,CAACuC,iBAAiB,EAAE;UAAC;YAAA;YAAA;UAAA;YAAA;YAAA,OAGJ,OAAI,CAACF,WAAW,CAAC,IAAI,CAAC;UAAA;YAAvChH,QAAQ;YACd,uBAAIA,QAAQ,CAACmB,IAAI,4CAAb,gBAAewE,QAAQ,EAAE;cAC3B,OAAI,CAACuB,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,CAAC2H,KAAK,EAAE;MAC1C,IAAM6B,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,CAAC/G,OAAO,CAAC;UACXiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;UACtB/E,GAAG,YAAK,OAAI,CAACtD,GAAG,uBAAa,OAAI,CAACQ,QAAQ,CAAC2H,KAAK;QAClD,CAAC,CAAC,CAAClE,KAAK,CAAC,UAACC,KAAK,EAAK;UAClB,OAAI,CAACwE,kBAAkB,EAAE;UAEzB,OAAO,iBAAQb,MAAM,CAAC,IAAAY,4BAAqB,EAACvE,KAAK,EAAE,6BAA6B,CAAC,CAAC;QACpF,CAAC,CAAC;MACJ,CAAC,EAAG8F,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,CAAC2H,KAAK,EAAE;MAC1C,IAAI,CAAC9E,OAAO,CAAC;QACXiE,MAAM,EAAEC,qBAAU,CAACuB,MAAM;QACzBxF,GAAG,YAAK,IAAI,CAACtD,GAAG,uBAAa,IAAI,CAACQ,QAAQ,CAAC2H,KAAK;MAClD,CAAC,CAAC,CACC1E,IAAI,CAAC,YAAM;QACV,OAAI,CAACiF,kBAAkB,EAAE;MAC3B,CAAC,CAAC,CACDzE,KAAK,CAAC,UAACC,KAAK,EAAK;QAChB,OAAO,iBAAQ2D,MAAM,CAAC,IAAAY,4BAAqB,EAACvE,KAAK,EAAE,8BAA8B,CAAC,CAAC;MACrF,CAAC,CAAC;IACN;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;EACEwE,kBAAkB,gCAAG;IACnB,IAAI,IAAI,CAACjI,UAAU,EAAE;MACnB0J,aAAa,CAAC,IAAI,CAAC1J,UAAU,CAAC;IAChC;IACA,IAAI,CAAC0C,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;EAC1B,CAAC;EAED;AACF;AACA;AACA;AACA;EACEmH,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,IAAMpH,IAAI,mCACJ,IAAI,CAACpD,QAAQ,IAAI,CAAC,CAAC,IAAI,CAACA,QAAQ,CAAC2H,KAAK,GACtC;MAACC,QAAQ,EAAE;QAACD,KAAK,EAAE,IAAI,CAAC3H,QAAQ,CAAC2H,KAAK;QAAEiB,OAAO,EAAE;MAAI;IAAC,CAAC,GACvD,CAAC,CAAC,GACH;MACDhJ,MAAM,EAAE,CACN;QACE0B,EAAE,EAAE,IAAI,CAACH,eAAe;QACxB4I,QAAQ,EAAEC;MACZ,CAAC;IAEL,CAAC,CACF;IAED,OAAO,IAAI,CAACnH,OAAO,CAAC;MAClBiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;MACtB/E,GAAG,EAAE,IAAI,CAACtD,GAAG;MACb4D,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,CAAC/F,qBAAqB,IAAI,CAAC+F,MAAM,CAAC9F,yBAAyB,EAAE;MACjF;IACF;IACA,IAAI,CAAC,IAAI,CAACc,yBAAyB,EAAE;MACnC,IAAI,CAACwC,KAAK,CACPM,OAAO,CAAC;QAACC,GAAG,YAAK,IAAI,CAACtD,GAAG,oBAAiB;QAAEuD,EAAE,EAAE;UAACtD,QAAQ,EAAEuD,IAAI,CAAC,IAAI,CAACvD,QAAQ;QAAC;MAAC,CAAC,CAAC,CACjFwD,IAAI,CAAC,UAACC,MAAM,EAAK;QAAA;QAChB,oBAAIA,MAAM,CAACE,IAAI,yCAAX,aAAaxD,MAAM,EAAE;UACvB,OAAI,CAAC+C,GAAG,CAAC,gBAAgB,EAAEO,MAAM,CAACE,IAAI,CAACxD,MAAM,CAAC;QAChD;MACF,CAAC,CAAC,CACD6D,KAAK,CAAC,UAACC,KAAK,EAAK;QAChBC,oBAAW,CAACC,MAAM,CAACF,KAAK,CAAC,8CAA8C,EAAEA,KAAK,CAAC;MACjF,CAAC,CAAC;MACJ,IAAI,CAAC3D,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,IAAMxH,IAAI,GAAG;MACXxD,MAAM,EAAE,CACN;QACE0B,EAAE,EAAE,IAAI,CAACH,eAAe;QACxB4I,QAAQ,EAAEW;MACZ,CAAC,CACF;MACD9C,QAAQ,EAAE;IACZ,CAAC;IAED,IAAI,IAAI,CAAC5H,QAAQ,IAAI,IAAI,CAACA,QAAQ,CAAC2H,KAAK,EAAE;MACxCvE,IAAI,CAACwE,QAAQ,GAAG,IAAI,CAAC5H,QAAQ;IAC/B;IAEA,OAAO,IAAI,CAAC6C,OAAO,CAAC;MAClBiE,MAAM,EAAEC,qBAAU,CAACc,GAAG;MACtB/E,GAAG,YAAK,IAAI,CAACtD,GAAG,mBAAgB;MAChC4D,IAAI,EAAJA;IACF,CAAC,CAAC;EACJ,CAAC;EACD;AACF;AACA;AACA;AACA;EACElB,wBAAwB,oCAACD,QAAQ,EAAE;IACjC,IAAIA,QAAQ,CAAC0E,MAAM,IAAI1E,QAAQ,CAAC4I,SAAS,EAAE;MACzC,IAAI,CAACnJ,OAAO,CAACf,oBAAS,CAACgB,MAAM,CAACmJ,kBAAkB,CAAC;IACnD;EACF,CAAC;EAAA;AACH,CAAC,CAAC;AAAC,eAEY3M,SAAS;AAAA"}
@@ -115,7 +115,8 @@ var MeetingUtil = {
115
115
  asResourceOccupant: options.asResourceOccupant,
116
116
  breakoutsSupported: options.breakoutsSupported,
117
117
  locale: options.locale,
118
- deviceCapabilities: options.deviceCapabilities
118
+ deviceCapabilities: options.deviceCapabilities,
119
+ liveAnnotationSupported: options.liveAnnotationSupported
119
120
  }).then(function (res) {
120
121
  _metrics.default.postEvent({
121
122
  event: _config.eventType.LOCUS_JOIN_RESPONSE,
@@ -1 +1 @@
1
- {"version":3,"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","meeting","audioMuted","videoMuted","reject","ParameterError","locusMediaRequest","Metrics","postEvent","event","eventType","MEDIA_REQUEST","send","type","selfUrl","sequence","locusInfo","muteOptions","then","MEDIA_RESPONSE","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","options","LOCUS_JOIN_REQUEST","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","deviceUrl","correlationId","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","isMultistream","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","res","LOCUS_JOIN_RESPONSE","data","trigger","LOCI_UPDATE","trackingId","headers","trackingid","cleanUp","breakouts","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeLocalStream","closeLocalShare","closeRemoteTracks","closePeerConnections","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteTracks","unsetPeerConnections","reconnectionManager","stopKeepAlive","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","catch","LoggerProxy","logger","error","leaveMeeting","isUserInLeftState","UserNotJoinedError","defaultOptions","leaveOptions","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","CaptchaError","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","PIN_COLLECTED","setLocus","PIN_PROMPT","IntentToJoinError","JoinMeetingError","validateOptions","sendVideo","sendAudio","sendShare","localStream","localShare","getTrack","videoTrack","audioTrack","stream","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","userDisplayHints","canInviteNewParticipants","displayHints","DISPLAY_HINTS","ADD_GUEST","canAdmitParticipant","ROSTER_WAITING_TO_JOIN","canUserLock","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","isSuppressBreakoutSupport","UCF_SUPPRESS_BREAKOUTS_SUPPORT","canAdmitLobbyToBreakout","DISABLE_LOBBY_TO_BREAKOUT","isBreakoutPreassignmentsEnabled","DISABLE_BREAKOUT_PREASSIGNMENTS","canUserAskForHelp","DISABLE_ASK_FOR_HELP","lockMeeting","actions","request","canLock","lock","PermissionError","unlockMeeting","canUnlock","handleAudioLogging","LOG_HEADER","settings","underlyingTrack","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","isSaveTranscriptsEnabled","SAVE_TRANSCRIPTS_ENABLED","canStartTranscribing","TRANSCRIPTION_CONTROL_START","canStopTranscribing","TRANSCRIPTION_CONTROL_STOP","isClosedCaptionActive","CAPTION_STATUS_ACTIVE","isWebexAssistantActive","WEBEX_ASSISTANT_STATUS_ACTIVE","canViewCaptionPanel","ENABLE_CAPTION_PANEL","isRealTimeTranslationEnabled","DISPLAY_REAL_TIME_TRANSLATION","canSelectSpokenLanguages","DISPLAY_NON_ENGLISH_ASR","waitingForOthersToJoin","WAITING_FOR_OTHERS","canSendReactions","originalValue","REACTIONS_ACTIVE","REACTIONS_INACTIVE","canUserRenameSelfAndObserved","CAN_RENAME_SELF_AND_OBSERVED","canUserRenameOthers","CAN_RENAME_OTHERS","addSequence","requestBody","updateLocusWithDelta","onDeltaLocus","generateLocusDeltaRequest","originalMeeting","meetingRef","WeakRef","locusDeltaRequest","originalOptions","deref"],"sources":["util.ts"],"sourcesContent":["import {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\n\nimport {cloneDeep} from 'lodash';\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport Metrics from '../metrics';\nimport {eventType, trigger} from '../metrics/config';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\n} from '../constants';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\n\nconst MeetingUtil = {\n parseLocusJoin: (response) => {\n const parsed: any = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n },\n\n remoteUpdateAudioVideo: (meeting, audioMuted?: boolean, videoMuted?: boolean) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n if (!meeting.locusMediaRequest) {\n return Promise.reject(\n new ParameterError(\n 'You need a meeting with a media connection, call Meeting.addMedia() first.'\n )\n );\n }\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});\n\n return meeting.locusMediaRequest\n .send({\n type: 'LocalMute',\n selfUrl: meeting.selfUrl,\n mediaId: meeting.mediaId,\n sequence: meeting.locusInfo.sequence,\n muteOptions: {\n audioMuted,\n videoMuted,\n },\n })\n .then((response) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});\n\n return response?.body?.locus;\n });\n },\n\n hasOwner: (info) => info && info.owner,\n\n isOwnerSelf: (owner, selfId) => owner === selfId,\n\n isPinOrGuest: (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode),\n\n joinMeeting: (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n Metrics.postEvent({event: eventType.LOCUS_JOIN_REQUEST, meeting});\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n permissionToken: meeting.permissionToken,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: !meeting.isMultistream,\n asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\n locale: options.locale,\n deviceCapabilities: options.deviceCapabilities,\n })\n .then((res) => {\n Metrics.postEvent({\n event: eventType.LOCUS_JOIN_RESPONSE,\n meeting,\n data: {\n trigger: trigger.LOCI_UPDATE,\n locus: res.body.locus,\n mediaConnections: res.body.mediaConnections,\n trackingId: res.headers.trackingid,\n },\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n },\n\n cleanUp: (meeting) => {\n meeting.breakouts.cleanUp();\n\n // make sure we send last metrics before we close the peerconnection\n const stopStatsAnalyzer = meeting.statsAnalyzer\n ? meeting.statsAnalyzer.stopAnalyzer()\n : Promise.resolve();\n\n return stopStatsAnalyzer\n .then(() => meeting.closeLocalStream())\n .then(() => meeting.closeLocalShare())\n .then(() => meeting.closeRemoteTracks())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.unsetLocalVideoTrack();\n meeting.unsetLocalShareTrack();\n meeting.unsetRemoteTracks();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => meeting.updateLLMConnection());\n },\n\n disconnectPhoneAudio: (meeting, phoneUrl) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const options = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n phoneUrl,\n };\n\n return meeting.meetingRequest.disconnectPhoneAudio(options).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n // by default will leave on meeting's resourceId\n // if you explicity want it not to leave on resource id, pass\n // {resourceId: null}\n // TODO: chris, you can modify this however you want\n leaveMeeting: (meeting, options: any = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const defaultOptions = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n resourceId: meeting.resourceId,\n deviceUrl: meeting.deviceUrl,\n };\n\n const leaveOptions = {...defaultOptions, ...options};\n\n return meeting.meetingRequest\n .leaveMeeting(leaveOptions)\n .then(() => {\n if (options.moveMeeting) {\n return Promise.resolve();\n }\n\n return MeetingUtil.cleanUp(meeting);\n })\n .catch((err) => {\n // TODO: If the meeting state comes as LEFT or INACTIVE as response then\n // 1) on leave clean up the meeting or simply do a sync on the meeting\n // 2) If the error says meeting is inactive then destroy the meeting object\n LoggerProxy.logger.error(\n `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n declineMeeting: (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason,\n }),\n\n isUserInLeftState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_,\n\n isUserInIdleState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_,\n\n isUserInJoinedState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_,\n\n isMediaEstablished: (currentMediaStatus) =>\n currentMediaStatus &&\n (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share),\n\n joinMeetingOptions: (meeting, options: any = {}) => {\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (meeting.requiredCaptcha) {\n return Promise.reject(new CaptchaError());\n }\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n return Promise.reject(new PasswordError());\n }\n\n if (options.pin) {\n Metrics.postEvent({\n event: eventType.PIN_COLLECTED,\n meeting,\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n Metrics.postEvent({\n event: eventType.PIN_PROMPT,\n meeting,\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error(\n 'Meeting:util#joinMeetingOptions --> Error joining the call, ',\n err\n );\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n },\n\n validateOptions: (options) => {\n const {sendVideo, sendAudio, sendShare, localStream, localShare} = options;\n\n if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid video streams'));\n }\n\n if (sendAudio && !MeetingUtil.getTrack(localStream).audioTrack) {\n return Promise.reject(new ParameterError('please pass valid audio streams'));\n }\n\n if (sendShare && !MeetingUtil.getTrack(localShare).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid share streams'));\n }\n\n return Promise.resolve();\n },\n\n getTrack: (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n },\n\n getModeratorFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator,\n\n getPolicyFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy,\n\n getUserDisplayHintsFromLocusInfo: (locusInfo) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [],\n\n canInviteNewParticipants: (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST),\n\n canAdmitParticipant: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN),\n\n canUserLock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED),\n\n canUserUnlock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED),\n\n canUserRaiseHand: (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND),\n\n canUserLowerAllHands: (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS),\n\n canUserLowerSomeoneElsesHand: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND),\n\n bothLeaveAndEndMeetingAvailable: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING),\n\n canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),\n\n isSuppressBreakoutSupport: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT),\n\n canAdmitLobbyToBreakout: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT),\n\n isBreakoutPreassignmentsEnabled: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS),\n\n canUserAskForHelp: (displayHints) => !displayHints.includes(DISPLAY_HINTS.DISABLE_ASK_FOR_HELP),\n\n lockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canLock) {\n return request.lockMeeting({locusUrl, lock: true});\n }\n\n return Promise.reject(new PermissionError('Lock not allowed, due to joined property.'));\n },\n\n unlockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canUnlock) {\n return request.lockMeeting({locusUrl, lock: false});\n }\n\n return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));\n },\n\n handleAudioLogging: (audioTrack: LocalMicrophoneTrack | null) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleVideoLogging: (videoTrack: LocalCameraTrack | null) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleDeviceLogging: (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n },\n\n endMeetingForAll: (meeting) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const endOptions = {\n locusUrl: meeting.locusUrl,\n };\n\n return meeting.meetingRequest\n .endMeetingForAll(endOptions)\n .then(() => MeetingUtil.cleanUp(meeting))\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n canEnableClosedCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START),\n\n isSaveTranscriptsEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED),\n\n canStartTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START),\n\n canStopTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP),\n\n isClosedCaptionActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE),\n\n isWebexAssistantActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE),\n\n canViewCaptionPanel: (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL),\n\n isRealTimeTranslationEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION),\n\n canSelectSpokenLanguages: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR),\n\n waitingForOthersToJoin: (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS),\n\n canSendReactions: (originalValue, displayHints) => {\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {\n return true;\n }\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {\n return false;\n }\n\n return originalValue;\n },\n canUserRenameSelfAndObserved: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED),\n\n canUserRenameOthers: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS),\n\n /**\n * Adds the current locus sequence information to a request body\n * @param {Object} meeting The meeting object\n * @param {Object} requestBody The body of a request to locus\n * @returns {void}\n */\n addSequence: (meeting, requestBody) => {\n const sequence = meeting?.locusInfo?.sequence;\n\n if (!sequence) {\n return;\n }\n\n requestBody.sequence = sequence;\n },\n\n /**\n * Updates the locus info for the meeting with the delta locus\n * returned from requests that include the sequence information\n * Returns the original response object\n * @param {Object} meeting The meeting object\n * @param {Object} response The response of the http request\n * @returns {Object}\n */\n updateLocusWithDelta: (meeting, response) => {\n if (!meeting) {\n return response;\n }\n\n const locus = response?.body?.locus;\n\n if (locus) {\n meeting.locusInfo.onDeltaLocus(locus);\n }\n\n return response;\n },\n\n generateLocusDeltaRequest: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const locusDeltaRequest = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return Promise.resolve();\n }\n\n const options = cloneDeep(originalOptions);\n\n if (!options.body) {\n options.body = {};\n }\n\n MeetingUtil.addSequence(meeting, options.body);\n\n return meeting\n .request(options)\n .then((response) => MeetingUtil.updateLocusWithDelta(meeting, response));\n };\n\n return locusDeltaRequest;\n },\n};\n\nexport default MeetingUtil;\n"],"mappings":"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"}
1
+ {"version":3,"names":["MeetingUtil","parseLocusJoin","response","parsed","locus","body","mediaConnections","locusUrl","url","locusId","split","pop","selfId","self","id","forEach","mediaConnection","mediaId","remoteUpdateAudioVideo","meeting","audioMuted","videoMuted","reject","ParameterError","locusMediaRequest","Metrics","postEvent","event","eventType","MEDIA_REQUEST","send","type","selfUrl","sequence","locusInfo","muteOptions","then","MEDIA_RESPONSE","hasOwner","info","owner","isOwnerSelf","isPinOrGuest","err","errorCode","INTENT_TO_JOIN","includes","joinMeeting","options","LOCUS_JOIN_REQUEST","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","deviceUrl","correlationId","roapMessage","permissionToken","resourceId","moderator","pin","moveToResource","preferTranscoding","isMultistream","asResourceOccupant","breakoutsSupported","locale","deviceCapabilities","liveAnnotationSupported","res","LOCUS_JOIN_RESPONSE","data","trigger","LOCI_UPDATE","trackingId","headers","trackingid","cleanUp","breakouts","stopStatsAnalyzer","statsAnalyzer","stopAnalyzer","resolve","closeLocalStream","closeLocalShare","closeRemoteTracks","closePeerConnections","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteTracks","unsetPeerConnections","reconnectionManager","stopKeepAlive","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","FULL_STATE","INACTIVE","MeetingNotActiveError","catch","LoggerProxy","logger","error","leaveMeeting","isUserInLeftState","UserNotJoinedError","defaultOptions","leaveOptions","moveMeeting","declineMeeting","reason","parsedLocus","state","_LEFT_","isUserInIdleState","_IDLE_","isUserInJoinedState","_JOINED_","isMediaEstablished","currentMediaStatus","audio","video","share","joinMeetingOptions","requiredCaptcha","CaptchaError","passwordStatus","PASSWORD_STATUS","REQUIRED","PasswordError","PIN_COLLECTED","setLocus","PIN_PROMPT","IntentToJoinError","JoinMeetingError","validateOptions","sendVideo","sendAudio","sendShare","localStream","localShare","getTrack","videoTrack","audioTrack","stream","audioTracks","videoTracks","getAudioTracks","getVideoTracks","length","getModeratorFromLocusInfo","getPolicyFromLocusInfo","policy","getUserDisplayHintsFromLocusInfo","userDisplayHints","canInviteNewParticipants","displayHints","DISPLAY_HINTS","ADD_GUEST","canAdmitParticipant","ROSTER_WAITING_TO_JOIN","canUserLock","LOCK_CONTROL_LOCK","LOCK_STATUS_UNLOCKED","canUserUnlock","LOCK_CONTROL_UNLOCK","LOCK_STATUS_LOCKED","canUserRaiseHand","RAISE_HAND","canUserLowerAllHands","LOWER_ALL_HANDS","canUserLowerSomeoneElsesHand","LOWER_SOMEONE_ELSES_HAND","bothLeaveAndEndMeetingAvailable","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","canManageBreakout","BREAKOUT_MANAGEMENT","isSuppressBreakoutSupport","UCF_SUPPRESS_BREAKOUTS_SUPPORT","canAdmitLobbyToBreakout","DISABLE_LOBBY_TO_BREAKOUT","isBreakoutPreassignmentsEnabled","DISABLE_BREAKOUT_PREASSIGNMENTS","canUserAskForHelp","DISABLE_ASK_FOR_HELP","lockMeeting","actions","request","canLock","lock","PermissionError","unlockMeeting","canUnlock","handleAudioLogging","LOG_HEADER","settings","underlyingTrack","getSettings","deviceId","log","handleVideoLogging","handleDeviceLogging","devices","device","endMeetingForAll","endOptions","canEnableClosedCaption","CAPTION_START","isSaveTranscriptsEnabled","SAVE_TRANSCRIPTS_ENABLED","canStartTranscribing","TRANSCRIPTION_CONTROL_START","canStopTranscribing","TRANSCRIPTION_CONTROL_STOP","isClosedCaptionActive","CAPTION_STATUS_ACTIVE","isWebexAssistantActive","WEBEX_ASSISTANT_STATUS_ACTIVE","canViewCaptionPanel","ENABLE_CAPTION_PANEL","isRealTimeTranslationEnabled","DISPLAY_REAL_TIME_TRANSLATION","canSelectSpokenLanguages","DISPLAY_NON_ENGLISH_ASR","waitingForOthersToJoin","WAITING_FOR_OTHERS","canSendReactions","originalValue","REACTIONS_ACTIVE","REACTIONS_INACTIVE","canUserRenameSelfAndObserved","CAN_RENAME_SELF_AND_OBSERVED","canUserRenameOthers","CAN_RENAME_OTHERS","addSequence","requestBody","updateLocusWithDelta","onDeltaLocus","generateLocusDeltaRequest","originalMeeting","meetingRef","WeakRef","locusDeltaRequest","originalOptions","deref"],"sources":["util.ts"],"sourcesContent":["import {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\n\nimport {cloneDeep} from 'lodash';\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport Metrics from '../metrics';\nimport {eventType, trigger} from '../metrics/config';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\n} from '../constants';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\n\nconst MeetingUtil = {\n parseLocusJoin: (response) => {\n const parsed: any = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n },\n\n remoteUpdateAudioVideo: (meeting, audioMuted?: boolean, videoMuted?: boolean) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n if (!meeting.locusMediaRequest) {\n return Promise.reject(\n new ParameterError(\n 'You need a meeting with a media connection, call Meeting.addMedia() first.'\n )\n );\n }\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});\n\n return meeting.locusMediaRequest\n .send({\n type: 'LocalMute',\n selfUrl: meeting.selfUrl,\n mediaId: meeting.mediaId,\n sequence: meeting.locusInfo.sequence,\n muteOptions: {\n audioMuted,\n videoMuted,\n },\n })\n .then((response) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});\n\n return response?.body?.locus;\n });\n },\n\n hasOwner: (info) => info && info.owner,\n\n isOwnerSelf: (owner, selfId) => owner === selfId,\n\n isPinOrGuest: (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode),\n\n joinMeeting: (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n Metrics.postEvent({event: eventType.LOCUS_JOIN_REQUEST, meeting});\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n roapMessage: options.roapMessage,\n permissionToken: meeting.permissionToken,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: !meeting.isMultistream,\n asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\n locale: options.locale,\n deviceCapabilities: options.deviceCapabilities,\n liveAnnotationSupported: options.liveAnnotationSupported,\n })\n .then((res) => {\n Metrics.postEvent({\n event: eventType.LOCUS_JOIN_RESPONSE,\n meeting,\n data: {\n trigger: trigger.LOCI_UPDATE,\n locus: res.body.locus,\n mediaConnections: res.body.mediaConnections,\n trackingId: res.headers.trackingid,\n },\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n },\n\n cleanUp: (meeting) => {\n meeting.breakouts.cleanUp();\n\n // make sure we send last metrics before we close the peerconnection\n const stopStatsAnalyzer = meeting.statsAnalyzer\n ? meeting.statsAnalyzer.stopAnalyzer()\n : Promise.resolve();\n\n return stopStatsAnalyzer\n .then(() => meeting.closeLocalStream())\n .then(() => meeting.closeLocalShare())\n .then(() => meeting.closeRemoteTracks())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.unsetLocalVideoTrack();\n meeting.unsetLocalShareTrack();\n meeting.unsetRemoteTracks();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => meeting.updateLLMConnection());\n },\n\n disconnectPhoneAudio: (meeting, phoneUrl) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const options = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n phoneUrl,\n };\n\n return meeting.meetingRequest.disconnectPhoneAudio(options).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n // by default will leave on meeting's resourceId\n // if you explicity want it not to leave on resource id, pass\n // {resourceId: null}\n // TODO: chris, you can modify this however you want\n leaveMeeting: (meeting, options: any = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const defaultOptions = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n resourceId: meeting.resourceId,\n deviceUrl: meeting.deviceUrl,\n };\n\n const leaveOptions = {...defaultOptions, ...options};\n\n return meeting.meetingRequest\n .leaveMeeting(leaveOptions)\n .then(() => {\n if (options.moveMeeting) {\n return Promise.resolve();\n }\n\n return MeetingUtil.cleanUp(meeting);\n })\n .catch((err) => {\n // TODO: If the meeting state comes as LEFT or INACTIVE as response then\n // 1) on leave clean up the meeting or simply do a sync on the meeting\n // 2) If the error says meeting is inactive then destroy the meeting object\n LoggerProxy.logger.error(\n `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n declineMeeting: (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason,\n }),\n\n isUserInLeftState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_,\n\n isUserInIdleState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_,\n\n isUserInJoinedState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_,\n\n isMediaEstablished: (currentMediaStatus) =>\n currentMediaStatus &&\n (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share),\n\n joinMeetingOptions: (meeting, options: any = {}) => {\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (meeting.requiredCaptcha) {\n return Promise.reject(new CaptchaError());\n }\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n return Promise.reject(new PasswordError());\n }\n\n if (options.pin) {\n Metrics.postEvent({\n event: eventType.PIN_COLLECTED,\n meeting,\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n Metrics.postEvent({\n event: eventType.PIN_PROMPT,\n meeting,\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error(\n 'Meeting:util#joinMeetingOptions --> Error joining the call, ',\n err\n );\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n },\n\n validateOptions: (options) => {\n const {sendVideo, sendAudio, sendShare, localStream, localShare} = options;\n\n if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid video streams'));\n }\n\n if (sendAudio && !MeetingUtil.getTrack(localStream).audioTrack) {\n return Promise.reject(new ParameterError('please pass valid audio streams'));\n }\n\n if (sendShare && !MeetingUtil.getTrack(localShare).videoTrack) {\n return Promise.reject(new ParameterError('please pass valid share streams'));\n }\n\n return Promise.resolve();\n },\n\n getTrack: (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n },\n\n getModeratorFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator,\n\n getPolicyFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy,\n\n getUserDisplayHintsFromLocusInfo: (locusInfo) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [],\n\n canInviteNewParticipants: (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST),\n\n canAdmitParticipant: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN),\n\n canUserLock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED),\n\n canUserUnlock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED),\n\n canUserRaiseHand: (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND),\n\n canUserLowerAllHands: (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS),\n\n canUserLowerSomeoneElsesHand: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND),\n\n bothLeaveAndEndMeetingAvailable: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING),\n\n canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),\n\n isSuppressBreakoutSupport: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT),\n\n canAdmitLobbyToBreakout: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT),\n\n isBreakoutPreassignmentsEnabled: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS),\n\n canUserAskForHelp: (displayHints) => !displayHints.includes(DISPLAY_HINTS.DISABLE_ASK_FOR_HELP),\n\n lockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canLock) {\n return request.lockMeeting({locusUrl, lock: true});\n }\n\n return Promise.reject(new PermissionError('Lock not allowed, due to joined property.'));\n },\n\n unlockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canUnlock) {\n return request.lockMeeting({locusUrl, lock: false});\n }\n\n return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));\n },\n\n handleAudioLogging: (audioTrack: LocalMicrophoneTrack | null) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioTrack) {\n const settings = audioTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleVideoLogging: (videoTrack: LocalCameraTrack | null) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoTrack) {\n const settings = videoTrack.underlyingTrack.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleDeviceLogging: (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n },\n\n endMeetingForAll: (meeting) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const endOptions = {\n locusUrl: meeting.locusUrl,\n };\n\n return meeting.meetingRequest\n .endMeetingForAll(endOptions)\n .then(() => MeetingUtil.cleanUp(meeting))\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n canEnableClosedCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START),\n\n isSaveTranscriptsEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED),\n\n canStartTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START),\n\n canStopTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP),\n\n isClosedCaptionActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE),\n\n isWebexAssistantActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE),\n\n canViewCaptionPanel: (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL),\n\n isRealTimeTranslationEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION),\n\n canSelectSpokenLanguages: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR),\n\n waitingForOthersToJoin: (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS),\n\n canSendReactions: (originalValue, displayHints) => {\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {\n return true;\n }\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {\n return false;\n }\n\n return originalValue;\n },\n canUserRenameSelfAndObserved: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED),\n\n canUserRenameOthers: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS),\n\n /**\n * Adds the current locus sequence information to a request body\n * @param {Object} meeting The meeting object\n * @param {Object} requestBody The body of a request to locus\n * @returns {void}\n */\n addSequence: (meeting, requestBody) => {\n const sequence = meeting?.locusInfo?.sequence;\n\n if (!sequence) {\n return;\n }\n\n requestBody.sequence = sequence;\n },\n\n /**\n * Updates the locus info for the meeting with the delta locus\n * returned from requests that include the sequence information\n * Returns the original response object\n * @param {Object} meeting The meeting object\n * @param {Object} response The response of the http request\n * @returns {Object}\n */\n updateLocusWithDelta: (meeting, response) => {\n if (!meeting) {\n return response;\n }\n\n const locus = response?.body?.locus;\n\n if (locus) {\n meeting.locusInfo.onDeltaLocus(locus);\n }\n\n return response;\n },\n\n generateLocusDeltaRequest: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const locusDeltaRequest = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return Promise.resolve();\n }\n\n const options = cloneDeep(originalOptions);\n\n if (!options.body) {\n options.body = {};\n }\n\n MeetingUtil.addSequence(meeting, options.body);\n\n return meeting\n .request(options)\n .then((response) => MeetingUtil.updateLocusWithDelta(meeting, response));\n };\n\n return locusDeltaRequest;\n },\n};\n\nexport default MeetingUtil;\n"],"mappings":"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"}
@@ -2,9 +2,9 @@
2
2
  * Type for an StrokeData Object
3
3
  */
4
4
  type StrokeData = {
5
- fromUserId: string;
6
- fromDeviceUrl: string;
5
+ deviceId: string;
7
6
  toUserId: string;
7
+ requesterId: string;
8
8
  content: string;
9
9
  shareInstanceId: string;
10
10
  encryptionKeyUrl: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "3.0.0-beta.120",
3
+ "version": "3.0.0-beta.122",
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.120",
36
- "@webex/test-helper-chai": "3.0.0-beta.120",
37
- "@webex/test-helper-mocha": "3.0.0-beta.120",
38
- "@webex/test-helper-mock-webex": "3.0.0-beta.120",
39
- "@webex/test-helper-retry": "3.0.0-beta.120",
40
- "@webex/test-helper-test-users": "3.0.0-beta.120",
35
+ "@webex/plugin-meetings": "3.0.0-beta.122",
36
+ "@webex/test-helper-chai": "3.0.0-beta.122",
37
+ "@webex/test-helper-mocha": "3.0.0-beta.122",
38
+ "@webex/test-helper-mock-webex": "3.0.0-beta.122",
39
+ "@webex/test-helper-retry": "3.0.0-beta.122",
40
+ "@webex/test-helper-test-users": "3.0.0-beta.122",
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.120",
49
+ "@webex/common": "3.0.0-beta.122",
50
50
  "@webex/internal-media-core": "1.38.1",
51
- "@webex/internal-plugin-conversation": "3.0.0-beta.120",
52
- "@webex/internal-plugin-device": "3.0.0-beta.120",
53
- "@webex/internal-plugin-llm": "3.0.0-beta.120",
54
- "@webex/internal-plugin-mercury": "3.0.0-beta.120",
55
- "@webex/internal-plugin-metrics": "3.0.0-beta.120",
56
- "@webex/internal-plugin-support": "3.0.0-beta.120",
57
- "@webex/internal-plugin-user": "3.0.0-beta.120",
58
- "@webex/media-helpers": "3.0.0-beta.120",
59
- "@webex/plugin-people": "3.0.0-beta.120",
60
- "@webex/plugin-rooms": "3.0.0-beta.120",
61
- "@webex/webex-core": "3.0.0-beta.120",
51
+ "@webex/internal-plugin-conversation": "3.0.0-beta.122",
52
+ "@webex/internal-plugin-device": "3.0.0-beta.122",
53
+ "@webex/internal-plugin-llm": "3.0.0-beta.122",
54
+ "@webex/internal-plugin-mercury": "3.0.0-beta.122",
55
+ "@webex/internal-plugin-metrics": "3.0.0-beta.122",
56
+ "@webex/internal-plugin-support": "3.0.0-beta.122",
57
+ "@webex/internal-plugin-user": "3.0.0-beta.122",
58
+ "@webex/media-helpers": "3.0.0-beta.122",
59
+ "@webex/plugin-people": "3.0.0-beta.122",
60
+ "@webex/plugin-rooms": "3.0.0-beta.122",
61
+ "@webex/webex-core": "3.0.0-beta.122",
62
62
  "ampersand-collection": "^2.0.2",
63
63
  "bowser": "^2.11.0",
64
64
  "btoa": "^1.2.1",
@@ -2,9 +2,9 @@
2
2
  * Type for an StrokeData Object
3
3
  */
4
4
  type StrokeData = {
5
- fromUserId: string;
6
- fromDeviceUrl: string;
5
+ deviceId: string;
7
6
  toUserId: string;
7
+ requesterId: string;
8
8
  content: string;
9
9
  shareInstanceId: string;
10
10
  encryptionKeyUrl: string;
@@ -311,15 +311,13 @@ class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
311
311
  relayType: ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT,
312
312
  request: {
313
313
  value: {
314
- sessionId: uuid.v4(),
315
314
  type: ANNOTATION_REQUEST_TYPE.ANNOTATION_MESSAGE,
316
- locusUrl: this.locusUrl,
317
315
  content: encryptedContent,
316
+ deviceId: strokeData.deviceId,
317
+ seq: this.seqNum,
318
+ requesterId: strokeData.requesterId,
318
319
  version: strokeData.version,
319
- fromUserId: strokeData.fromUserId,
320
- fromDeviceUrl: strokeData.fromDeviceUrl,
321
320
  shareInstanceId: strokeData.shareInstanceId,
322
- locusId: this.locusUrl && this.locusUrl.split('/').pop(),
323
321
  encryptionKeyUrl: strokeData.encryptionKeyUrl,
324
322
  },
325
323
  },
@@ -93,6 +93,17 @@ const Breakouts = WebexPlugin.extend({
93
93
  return '';
94
94
  },
95
95
  },
96
+ breakoutStatus: {
97
+ cache: false,
98
+ deps: ['isInMainSession', 'status', 'groups'],
99
+ /**
100
+ * Returns the breakout status
101
+ * @returns {boolean}
102
+ */
103
+ fn() {
104
+ return this.isInMainSession ? this.groups?.[0]?.status : this.status;
105
+ },
106
+ },
96
107
  },
97
108
 
98
109
  /**
@@ -100,8 +111,8 @@ const Breakouts = WebexPlugin.extend({
100
111
  * @returns {void}
101
112
  */
102
113
  initialize() {
103
- this.listenTo(this, 'change:status', () => {
104
- if (this.status === BREAKOUTS.STATUS.CLOSING) {
114
+ this.listenTo(this, 'change:breakoutStatus', () => {
115
+ if (this.breakoutStatus === BREAKOUTS.STATUS.CLOSING) {
105
116
  this.trigger(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);
106
117
  }
107
118
  });
@@ -109,6 +109,7 @@ const MeetingUtil = {
109
109
  breakoutsSupported: options.breakoutsSupported,
110
110
  locale: options.locale,
111
111
  deviceCapabilities: options.deviceCapabilities,
112
+ liveAnnotationSupported: options.liveAnnotationSupported,
112
113
  })
113
114
  .then((res) => {
114
115
  Metrics.postEvent({
@@ -240,14 +240,13 @@ describe('live-annotation', () => {
240
240
  }], "type": "curve", "name": "contentUpdate"
241
241
  }], "action": "contentUpdate", "sender": {"name": "perfect", "id": "4dd5eaf9-4cf8-4f0f-a1d6-014bf5d00741"}
242
242
  },
243
- fromUserId: "525ead98-6c93-4fcb-899d-517305c47503",
244
- fromDeviceUrl: "https://wdm.wbx2.com/wdm/api/v1/devices/0bbecbf8-59ac-410a-b906-b310d1a50867",
243
+ deviceId: "525ead98-6c93-4fcb-899d-517305c47513",
244
+ requesterId: '525ead98-6c93-4fcb-899d-517305c47513',
245
245
  toUserId: "987ead98-6c93-4fcb-899d-517305c47503",
246
- locusUrl: "https://locus.wbx2.com/locus/api/v1/loci/163c1787-c1f5-47cc-95eb-ab2d660999e6",
247
- shareInstanceId: "7fa6fe07-dcb1-41ad-973d-7bcf65fab55d",
246
+ shareInstanceId: '7fa6fe07-dcb1-41ad-973d-7bcf65fab55d',
248
247
  encryptionKeyUrl: "encryptionKeyUrl",
249
248
  version: '1',
250
- };
249
+ } ;
251
250
 
252
251
  annotationService.publishEncrypted(strokeData.content, strokeData);
253
252
 
@@ -261,15 +260,13 @@ describe('live-annotation', () => {
261
260
  relayType: ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT,
262
261
  request: {
263
262
  value: {
264
- sessionId: sinon.match.string,
265
263
  type: ANNOTATION_REQUEST_TYPE.ANNOTATION_MESSAGE,
266
- locusUrl: locusUrl,
267
264
  content: strokeData.content,
268
265
  version: '1',
269
- fromUserId: strokeData.fromUserId,
270
- fromDeviceUrl: strokeData.fromDeviceUrl,
266
+ seq:sinon.match.number,
267
+ deviceId: sinon.match.string,
268
+ requesterId: sinon.match.string,
271
269
  shareInstanceId: strokeData.shareInstanceId,
272
- locusId: '163c1787-c1f5-47cc-95eb-ab2d660999e6',
273
270
  encryptionKeyUrl: 'encryptionKeyUrl',
274
271
  }
275
272
  }
@@ -106,19 +106,29 @@ describe('plugin-meetings', () => {
106
106
  assert.equal(breakouts.namespace, 'Meetings');
107
107
  });
108
108
 
109
- it('emits BREAKOUTS_CLOSING event when the status is CLOSING', () => {
110
- let called = false;
111
- breakouts.listenTo(breakouts, BREAKOUTS.EVENTS.BREAKOUTS_CLOSING, () => {
112
- called = true;
113
- });
114
-
115
- breakouts.set('status', 'something');
109
+ it('emits BREAKOUTS_CLOSING event when the breakoutStatus is CLOSING', () => {
110
+ const checkIsCalled = (deps) => {
111
+ let called = false;
112
+ breakouts.listenTo(breakouts, BREAKOUTS.EVENTS.BREAKOUTS_CLOSING, () => {
113
+ called = true;
114
+ });
115
+ assert.isFalse(called);
116
+ breakouts.set(deps);
117
+ assert.isTrue(called);
118
+ }
116
119
 
117
- assert.isFalse(called);
120
+ checkIsCalled({
121
+ sessionType: BREAKOUTS.SESSION_TYPES.MAIN,
122
+ groups: [{status: BREAKOUTS.STATUS.CLOSING}],
123
+ status: undefined
124
+ });
118
125
 
119
- breakouts.set({status: BREAKOUTS.STATUS.CLOSING});
126
+ checkIsCalled({
127
+ sessionType: BREAKOUTS.SESSION_TYPES.BREAKOUT,
128
+ groups: undefined,
129
+ status: BREAKOUTS.STATUS.CLOSING
130
+ });
120
131
 
121
- assert.isTrue(called);
122
132
  });
123
133
 
124
134
  it('debounces querying rosters on add', () => {
@@ -494,6 +504,20 @@ describe('plugin-meetings', () => {
494
504
  });
495
505
  });
496
506
 
507
+ describe('#breakoutStatus', () => {
508
+ it('return status from groups with session type', () => {
509
+ breakouts.set('groups', [{status: "OPEN"}]);
510
+ breakouts.set('status', "CLOSED");
511
+ breakouts.set('sessionType', BREAKOUTS.SESSION_TYPES.MAIN);
512
+
513
+ assert.equal(breakouts.breakoutStatus, "OPEN")
514
+
515
+ breakouts.set('sessionType', BREAKOUTS.SESSION_TYPES.BREAKOUT);
516
+
517
+ assert.equal(breakouts.breakoutStatus, "CLOSED")
518
+ });
519
+ });
520
+
497
521
  describe('#_setManageGroups', () => {
498
522
  it('do nothing if breakout info is empty', () => {
499
523
  breakouts._setManageGroups();
@@ -158,7 +158,7 @@ describe('plugin-meetings', () => {
158
158
 
159
159
  assert.deepEqual(body, {});
160
160
  });
161
-
161
+
162
162
  it('should work with an undefined locusInfo', () => {
163
163
  const body = {};
164
164
 
@@ -337,6 +337,24 @@ describe('plugin-meetings', () => {
337
337
  assert.equal(parameter.breakoutsSupported, true);
338
338
  });
339
339
 
340
+ it('#Should call meetingRequest.joinMeeting with liveAnnotationSupported=true when passed in as true', async () => {
341
+ const meeting = {
342
+ meetingRequest: {
343
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
344
+ },
345
+ };
346
+
347
+ MeetingUtil.parseLocusJoin = sinon.stub();
348
+ await MeetingUtil.joinMeeting(meeting, {
349
+ liveAnnotationSupported: true,
350
+ });
351
+
352
+ assert.calledOnce(meeting.meetingRequest.joinMeeting);
353
+ const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
354
+
355
+ assert.equal(parameter.liveAnnotationSupported, true);
356
+ });
357
+
340
358
  it('#Should call meetingRequest.joinMeeting with locale=en_UK, deviceCapabilities=["TEST"] when they are passed in as those values', async () => {
341
359
  const meeting = {
342
360
  meetingRequest: {