@webex/plugin-meetings 3.0.0-beta.174 → 3.0.0-beta.175

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.
@@ -26,6 +26,8 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
26
26
  props: {
27
27
  locusUrl: 'string',
28
28
  // appears current meeting's locus url
29
+ approvalUrl: 'string',
30
+ // appears current meeting's approval url for handoff between interpreters
29
31
  originalLanguage: 'string',
30
32
  // appears current meeting's original language
31
33
  sourceLanguage: 'string',
@@ -44,19 +46,19 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
44
46
  // appears the ability to manage interpreters
45
47
  supportLanguages: 'array',
46
48
  // appears the support languages
47
- siEnabled: 'boolean' // appears the meeting enabled SI
49
+ hostSIEnabled: 'boolean' // appears the meeting host feature of SI enabled
48
50
  },
49
51
 
50
52
  derived: {
51
53
  shouldQuerySupportLanguages: {
52
54
  cache: false,
53
- deps: ['canManageInterpreters', 'siEnabled'],
55
+ deps: ['canManageInterpreters', 'hostSIEnabled'],
54
56
  /**
55
57
  * Returns should query support languages or not
56
58
  * @returns {boolean}
57
59
  */
58
60
  fn: function fn() {
59
- return !!(this.canManageInterpreters && this.siEnabled);
61
+ return !!(this.canManageInterpreters && this.hostSIEnabled);
60
62
  }
61
63
  }
62
64
  },
@@ -71,6 +73,7 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
71
73
  _this.querySupportLanguages();
72
74
  }
73
75
  });
76
+ this.listenToHandoffRequests();
74
77
  },
75
78
  /**
76
79
  * Calls this to clean up listeners
@@ -87,6 +90,14 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
87
90
  locusUrlUpdate: function locusUrlUpdate(locusUrl) {
88
91
  this.set('locusUrl', locusUrl);
89
92
  },
93
+ /**
94
+ * Update the approval url for handoff
95
+ * @param {string} approvalUrl // approval url
96
+ * @returns {void}
97
+ */
98
+ approvalUrlUpdate: function approvalUrlUpdate(approvalUrl) {
99
+ this.set('approvalUrl', approvalUrl);
100
+ },
90
101
  /**
91
102
  * Update whether self has capability to manage interpreters (only host can manage it)
92
103
  * @param {boolean} canManageInterpreters
@@ -95,13 +106,20 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
95
106
  updateCanManageInterpreters: function updateCanManageInterpreters(canManageInterpreters) {
96
107
  this.set('canManageInterpreters', canManageInterpreters);
97
108
  },
109
+ /**
110
+ * Update whether the meeting's host si is enabled or not
111
+ * @param {boolean} hostSIEnabled
112
+ * @returns {void}
113
+ */
114
+ updateHostSIEnabled: function updateHostSIEnabled(hostSIEnabled) {
115
+ this.set('hostSIEnabled', hostSIEnabled);
116
+ },
98
117
  /**
99
118
  * Update the interpretation languages channels which user can choose to subscribe
100
119
  * @param {Object} interpretation
101
120
  * @returns {void}
102
121
  */
103
122
  updateInterpretation: function updateInterpretation(interpretation) {
104
- this.set('siEnabled', !!interpretation);
105
123
  this.siLanguages.set((interpretation === null || interpretation === void 0 ? void 0 : interpretation.siLanguages) || []);
106
124
  },
107
125
  /**
@@ -207,7 +225,127 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
207
225
  throw error;
208
226
  });
209
227
  },
210
- version: "3.0.0-beta.174"
228
+ /**
229
+ * Sets up a listener for handoff requests from mercury
230
+ * @returns {void}
231
+ */
232
+ listenToHandoffRequests: function listenToHandoffRequests() {
233
+ var _this3 = this;
234
+ this.listenTo(this.webex.internal.mercury, 'event:locus.approval_request', function (event) {
235
+ var _event$data, _event$data$approval;
236
+ if ((event === null || event === void 0 ? void 0 : (_event$data = event.data) === null || _event$data === void 0 ? void 0 : (_event$data$approval = _event$data.approval) === null || _event$data$approval === void 0 ? void 0 : _event$data$approval.resourceType) === _constants.INTERPRETATION.RESOURCE_TYPE) {
237
+ var _receivers$;
238
+ var _event$data$approval2 = event.data.approval,
239
+ receivers = _event$data$approval2.receivers,
240
+ initiator = _event$data$approval2.initiator,
241
+ actionType = _event$data$approval2.actionType,
242
+ url = _event$data$approval2.url;
243
+ var receiverId = receivers === null || receivers === void 0 ? void 0 : (_receivers$ = receivers[0]) === null || _receivers$ === void 0 ? void 0 : _receivers$.participantId;
244
+ var isReceiver = !!receiverId && receiverId === _this3.selfParticipantId;
245
+ var senderId = initiator === null || initiator === void 0 ? void 0 : initiator.participantId;
246
+ var isSender = !!senderId && senderId === _this3.selfParticipantId;
247
+ if (!isReceiver && !isSender) {
248
+ return;
249
+ }
250
+ _this3.trigger(_constants.INTERPRETATION.EVENTS.HANDOFF_REQUESTS_ARRIVED, {
251
+ actionType: actionType,
252
+ isReceiver: isReceiver,
253
+ isSender: isSender,
254
+ senderId: senderId,
255
+ receiverId: receiverId,
256
+ url: url
257
+ });
258
+ }
259
+ });
260
+ },
261
+ /**
262
+ * handoff the active interpreter role to another interpreter in same group, only the interpreter is allowed to call this api
263
+ * @param {string} participantId the participant id you want to hand off
264
+ * @returns {Promise}
265
+ */
266
+ handoffInterpreter: function handoffInterpreter(participantId) {
267
+ if (!participantId) {
268
+ return _promise.default.reject(new Error('Missing target participant id'));
269
+ }
270
+ if (!this.approvalUrl) {
271
+ return _promise.default.reject(new Error('Missing approval url'));
272
+ }
273
+ return this.request({
274
+ method: _constants.HTTP_VERBS.POST,
275
+ uri: this.approvalUrl,
276
+ body: {
277
+ actionType: _constants.INTERPRETATION.ACTION_TYPE.OFFERED,
278
+ resourceType: _constants.INTERPRETATION.RESOURCE_TYPE,
279
+ receivers: [{
280
+ participantId: participantId
281
+ }]
282
+ }
283
+ }).catch(function (error) {
284
+ _loggerProxy.default.logger.error('Meeting:interpretation#handoffInterpreter failed', error);
285
+ throw error;
286
+ });
287
+ },
288
+ /**
289
+ * the in-active interpreter request to hand off the active role to self
290
+ * @returns {Promise}
291
+ */
292
+ requestHandoff: function requestHandoff() {
293
+ if (!this.approvalUrl) {
294
+ return _promise.default.reject(new Error('Missing approval url'));
295
+ }
296
+ return this.request({
297
+ method: _constants.HTTP_VERBS.POST,
298
+ uri: this.approvalUrl,
299
+ body: {
300
+ actionType: _constants.INTERPRETATION.ACTION_TYPE.REQUESTED,
301
+ resourceType: _constants.INTERPRETATION.RESOURCE_TYPE
302
+ }
303
+ }).catch(function (error) {
304
+ _loggerProxy.default.logger.error('Meeting:interpretation#requestHandoff failed', error);
305
+ throw error;
306
+ });
307
+ },
308
+ /**
309
+ * accept the request of handoff
310
+ * @param {String} url the url get from last approval event
311
+ * @returns {Promise}
312
+ */
313
+ acceptRequest: function acceptRequest(url) {
314
+ if (!url) {
315
+ return _promise.default.reject(new Error('Missing the url to accept'));
316
+ }
317
+ return this.request({
318
+ method: _constants.HTTP_VERBS.PUT,
319
+ uri: url,
320
+ body: {
321
+ actionType: _constants.INTERPRETATION.ACTION_TYPE.ACCEPTED
322
+ }
323
+ }).catch(function (error) {
324
+ _loggerProxy.default.logger.error('Meeting:interpretation#acceptRequest failed', error);
325
+ throw error;
326
+ });
327
+ },
328
+ /**
329
+ * decline the request of handoff
330
+ * @param {String} url the url get from last approval event
331
+ * @returns {Promise}
332
+ */
333
+ declineRequest: function declineRequest(url) {
334
+ if (!url) {
335
+ return _promise.default.reject(new Error('Missing the url to decline'));
336
+ }
337
+ return this.request({
338
+ method: _constants.HTTP_VERBS.PUT,
339
+ uri: url,
340
+ body: {
341
+ actionType: _constants.INTERPRETATION.ACTION_TYPE.DECLINED
342
+ }
343
+ }).catch(function (error) {
344
+ _loggerProxy.default.logger.error('Meeting:interpretation#declineRequest failed', error);
345
+ throw error;
346
+ });
347
+ },
348
+ version: "3.0.0-beta.175"
211
349
  });
212
350
  var _default = SimultaneousInterpretation;
213
351
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["SimultaneousInterpretation","WebexPlugin","extend","namespace","MEETINGS","collections","siLanguages","SILanguageCollection","props","locusUrl","originalLanguage","sourceLanguage","targetLanguage","receiveLanguage","order","isActive","selfParticipantId","canManageInterpreters","supportLanguages","siEnabled","derived","shouldQuerySupportLanguages","cache","deps","fn","initialize","listenTo","querySupportLanguages","cleanUp","stopListening","locusUrlUpdate","set","updateCanManageInterpreters","updateInterpretation","interpretation","updateSelfInterpretation","request","method","HTTP_VERBS","GET","uri","then","result","body","trigger","INTERPRETATION","EVENTS","SUPPORT_LANGUAGES_UPDATE","catch","error","LoggerProxy","logger","getInterpreters","updateInterpreters","interpreters","PATCH","changeDirection","reject","Error"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin} from '@webex/webex-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {HTTP_VERBS, INTERPRETATION, MEETINGS} from '../constants';\n\nimport SILanguageCollection from './collection';\n\n/**\n * @class SimultaneousInterpretation\n */\nconst SimultaneousInterpretation = WebexPlugin.extend({\n namespace: MEETINGS,\n collections: {\n siLanguages: SILanguageCollection,\n },\n\n props: {\n locusUrl: 'string', // appears current meeting's locus url\n originalLanguage: 'string', // appears current meeting's original language\n sourceLanguage: 'string', // appears self interpreter's source language\n targetLanguage: 'string', // appears self interpreter's target language\n receiveLanguage: 'string', // appears self's receive language\n order: 'number', // appears the order of self as interpreter\n isActive: 'boolean', // appears self is interpreter and is active\n selfParticipantId: 'string', // appears the self participant id\n canManageInterpreters: 'boolean', // appears the ability to manage interpreters\n supportLanguages: 'array', // appears the support languages\n siEnabled: 'boolean', // appears the meeting enabled SI\n },\n derived: {\n shouldQuerySupportLanguages: {\n cache: false,\n deps: ['canManageInterpreters', 'siEnabled'],\n /**\n * Returns should query support languages or not\n * @returns {boolean}\n */\n fn() {\n return !!(this.canManageInterpreters && this.siEnabled);\n },\n },\n },\n /**\n * initialize for interpretation\n * @returns {void}\n */\n initialize() {\n this.listenTo(this, 'change:shouldQuerySupportLanguages', () => {\n if (this.canManageInterpreters && !this.supportLanguages) {\n this.querySupportLanguages();\n }\n });\n },\n\n /**\n * Calls this to clean up listeners\n * @returns {void}\n */\n cleanUp() {\n this.stopListening();\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 },\n /**\n * Update whether self has capability to manage interpreters (only host can manage it)\n * @param {boolean} canManageInterpreters\n * @returns {void}\n */\n updateCanManageInterpreters(canManageInterpreters) {\n this.set('canManageInterpreters', canManageInterpreters);\n },\n /**\n * Update the interpretation languages channels which user can choose to subscribe\n * @param {Object} interpretation\n * @returns {void}\n */\n updateInterpretation(interpretation) {\n this.set('siEnabled', !!interpretation);\n this.siLanguages.set(interpretation?.siLanguages || []);\n },\n /**\n * Update self's interpretation information (self is interpreter)\n * @param {Object} interpretation\n * @param {String} selfParticipantId\n * @returns {void}\n */\n updateSelfInterpretation({interpretation, selfParticipantId}) {\n const {originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage} =\n interpretation || {};\n this.set({originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage});\n this.set('selfParticipantId', selfParticipantId);\n },\n /**\n * query interpretation languages\n * @returns {Promise}\n */\n querySupportLanguages() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.locusUrl}/languages/interpretation`,\n })\n .then((result) => {\n this.set('supportLanguages', result.body?.siLanguages);\n this.trigger(INTERPRETATION.EVENTS.SUPPORT_LANGUAGES_UPDATE);\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#querySupportLanguages failed', error);\n throw error;\n });\n },\n /**\n * get interpreters of the meeting\n * @returns {Promise}\n */\n getInterpreters() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.locusUrl}/interpretation/interpreters`,\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#getInterpreters failed', error);\n throw error;\n });\n },\n /**\n * update interpreters of the meeting\n * @param {Array} interpreters\n * @returns {Promise}\n */\n updateInterpreters(interpreters) {\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/controls`,\n body: {\n interpretation: {\n interpreters,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#updateInterpreters failed', error);\n throw error;\n });\n },\n /**\n * Change direction of interpretation for an interpreter participant\n * @returns {Promise}\n */\n changeDirection() {\n if (!this.sourceLanguage || !this.targetLanguage) {\n return Promise.reject(new Error('Missing sourceLanguage or targetLanguage'));\n }\n\n if (!this.selfParticipantId) {\n return Promise.reject(new Error('Missing self participant id'));\n }\n\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/participant/${this.selfParticipantId}/controls`,\n body: {\n interpretation: {\n sourceLanguage: this.targetLanguage,\n targetLanguage: this.sourceLanguage,\n isActive: this.isActive,\n order: this.order,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#changeDirection failed', error);\n throw error;\n });\n },\n});\n\nexport default SimultaneousInterpretation;\n"],"mappings":"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"}
1
+ {"version":3,"names":["SimultaneousInterpretation","WebexPlugin","extend","namespace","MEETINGS","collections","siLanguages","SILanguageCollection","props","locusUrl","approvalUrl","originalLanguage","sourceLanguage","targetLanguage","receiveLanguage","order","isActive","selfParticipantId","canManageInterpreters","supportLanguages","hostSIEnabled","derived","shouldQuerySupportLanguages","cache","deps","fn","initialize","listenTo","querySupportLanguages","listenToHandoffRequests","cleanUp","stopListening","locusUrlUpdate","set","approvalUrlUpdate","updateCanManageInterpreters","updateHostSIEnabled","updateInterpretation","interpretation","updateSelfInterpretation","request","method","HTTP_VERBS","GET","uri","then","result","body","trigger","INTERPRETATION","EVENTS","SUPPORT_LANGUAGES_UPDATE","catch","error","LoggerProxy","logger","getInterpreters","updateInterpreters","interpreters","PATCH","changeDirection","reject","Error","webex","internal","mercury","event","data","approval","resourceType","RESOURCE_TYPE","receivers","initiator","actionType","url","receiverId","participantId","isReceiver","senderId","isSender","HANDOFF_REQUESTS_ARRIVED","handoffInterpreter","POST","ACTION_TYPE","OFFERED","requestHandoff","REQUESTED","acceptRequest","PUT","ACCEPTED","declineRequest","DECLINED"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin} from '@webex/webex-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {HTTP_VERBS, INTERPRETATION, MEETINGS} from '../constants';\n\nimport SILanguageCollection from './collection';\n\n/**\n * @class SimultaneousInterpretation\n */\nconst SimultaneousInterpretation = WebexPlugin.extend({\n namespace: MEETINGS,\n collections: {\n siLanguages: SILanguageCollection,\n },\n\n props: {\n locusUrl: 'string', // appears current meeting's locus url\n approvalUrl: 'string', // appears current meeting's approval url for handoff between interpreters\n originalLanguage: 'string', // appears current meeting's original language\n sourceLanguage: 'string', // appears self interpreter's source language\n targetLanguage: 'string', // appears self interpreter's target language\n receiveLanguage: 'string', // appears self's receive language\n order: 'number', // appears the order of self as interpreter\n isActive: 'boolean', // appears self is interpreter and is active\n selfParticipantId: 'string', // appears the self participant id\n canManageInterpreters: 'boolean', // appears the ability to manage interpreters\n supportLanguages: 'array', // appears the support languages\n hostSIEnabled: 'boolean', // appears the meeting host feature of SI enabled\n },\n derived: {\n shouldQuerySupportLanguages: {\n cache: false,\n deps: ['canManageInterpreters', 'hostSIEnabled'],\n /**\n * Returns should query support languages or not\n * @returns {boolean}\n */\n fn() {\n return !!(this.canManageInterpreters && this.hostSIEnabled);\n },\n },\n },\n /**\n * initialize for interpretation\n * @returns {void}\n */\n initialize() {\n this.listenTo(this, 'change:shouldQuerySupportLanguages', () => {\n if (this.canManageInterpreters && !this.supportLanguages) {\n this.querySupportLanguages();\n }\n });\n this.listenToHandoffRequests();\n },\n\n /**\n * Calls this to clean up listeners\n * @returns {void}\n */\n cleanUp() {\n this.stopListening();\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 },\n /**\n * Update the approval url for handoff\n * @param {string} approvalUrl // approval url\n * @returns {void}\n */\n approvalUrlUpdate(approvalUrl) {\n this.set('approvalUrl', approvalUrl);\n },\n /**\n * Update whether self has capability to manage interpreters (only host can manage it)\n * @param {boolean} canManageInterpreters\n * @returns {void}\n */\n updateCanManageInterpreters(canManageInterpreters) {\n this.set('canManageInterpreters', canManageInterpreters);\n },\n /**\n * Update whether the meeting's host si is enabled or not\n * @param {boolean} hostSIEnabled\n * @returns {void}\n */\n updateHostSIEnabled(hostSIEnabled) {\n this.set('hostSIEnabled', hostSIEnabled);\n },\n /**\n * Update the interpretation languages channels which user can choose to subscribe\n * @param {Object} interpretation\n * @returns {void}\n */\n updateInterpretation(interpretation) {\n this.siLanguages.set(interpretation?.siLanguages || []);\n },\n /**\n * Update self's interpretation information (self is interpreter)\n * @param {Object} interpretation\n * @param {String} selfParticipantId\n * @returns {void}\n */\n updateSelfInterpretation({interpretation, selfParticipantId}) {\n const {originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage} =\n interpretation || {};\n this.set({originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage});\n this.set('selfParticipantId', selfParticipantId);\n },\n /**\n * query interpretation languages\n * @returns {Promise}\n */\n querySupportLanguages() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.locusUrl}/languages/interpretation`,\n })\n .then((result) => {\n this.set('supportLanguages', result.body?.siLanguages);\n this.trigger(INTERPRETATION.EVENTS.SUPPORT_LANGUAGES_UPDATE);\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#querySupportLanguages failed', error);\n throw error;\n });\n },\n /**\n * get interpreters of the meeting\n * @returns {Promise}\n */\n getInterpreters() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.locusUrl}/interpretation/interpreters`,\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#getInterpreters failed', error);\n throw error;\n });\n },\n /**\n * update interpreters of the meeting\n * @param {Array} interpreters\n * @returns {Promise}\n */\n updateInterpreters(interpreters) {\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/controls`,\n body: {\n interpretation: {\n interpreters,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#updateInterpreters failed', error);\n throw error;\n });\n },\n /**\n * Change direction of interpretation for an interpreter participant\n * @returns {Promise}\n */\n changeDirection() {\n if (!this.sourceLanguage || !this.targetLanguage) {\n return Promise.reject(new Error('Missing sourceLanguage or targetLanguage'));\n }\n\n if (!this.selfParticipantId) {\n return Promise.reject(new Error('Missing self participant id'));\n }\n\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/participant/${this.selfParticipantId}/controls`,\n body: {\n interpretation: {\n sourceLanguage: this.targetLanguage,\n targetLanguage: this.sourceLanguage,\n isActive: this.isActive,\n order: this.order,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#changeDirection failed', error);\n throw error;\n });\n },\n /**\n * Sets up a listener for handoff requests from mercury\n * @returns {void}\n */\n listenToHandoffRequests() {\n this.listenTo(this.webex.internal.mercury, 'event:locus.approval_request', (event) => {\n if (event?.data?.approval?.resourceType === INTERPRETATION.RESOURCE_TYPE) {\n const {receivers, initiator, actionType, url} = event.data.approval;\n const receiverId = receivers?.[0]?.participantId;\n const isReceiver = !!receiverId && receiverId === this.selfParticipantId;\n const senderId = initiator?.participantId;\n const isSender = !!senderId && senderId === this.selfParticipantId;\n if (!isReceiver && !isSender) {\n return;\n }\n this.trigger(INTERPRETATION.EVENTS.HANDOFF_REQUESTS_ARRIVED, {\n actionType,\n isReceiver,\n isSender,\n senderId,\n receiverId,\n url,\n });\n }\n });\n },\n /**\n * handoff the active interpreter role to another interpreter in same group, only the interpreter is allowed to call this api\n * @param {string} participantId the participant id you want to hand off\n * @returns {Promise}\n */\n handoffInterpreter(participantId) {\n if (!participantId) {\n return Promise.reject(new Error('Missing target participant id'));\n }\n if (!this.approvalUrl) {\n return Promise.reject(new Error('Missing approval url'));\n }\n\n return this.request({\n method: HTTP_VERBS.POST,\n uri: this.approvalUrl,\n body: {\n actionType: INTERPRETATION.ACTION_TYPE.OFFERED,\n resourceType: INTERPRETATION.RESOURCE_TYPE,\n receivers: [\n {\n participantId,\n },\n ],\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#handoffInterpreter failed', error);\n throw error;\n });\n },\n /**\n * the in-active interpreter request to hand off the active role to self\n * @returns {Promise}\n */\n requestHandoff() {\n if (!this.approvalUrl) {\n return Promise.reject(new Error('Missing approval url'));\n }\n\n return this.request({\n method: HTTP_VERBS.POST,\n uri: this.approvalUrl,\n body: {\n actionType: INTERPRETATION.ACTION_TYPE.REQUESTED,\n resourceType: INTERPRETATION.RESOURCE_TYPE,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#requestHandoff failed', error);\n throw error;\n });\n },\n /**\n * accept the request of handoff\n * @param {String} url the url get from last approval event\n * @returns {Promise}\n */\n acceptRequest(url) {\n if (!url) {\n return Promise.reject(new Error('Missing the url to accept'));\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: url,\n body: {\n actionType: INTERPRETATION.ACTION_TYPE.ACCEPTED,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#acceptRequest failed', error);\n throw error;\n });\n },\n /**\n * decline the request of handoff\n * @param {String} url the url get from last approval event\n * @returns {Promise}\n */\n declineRequest(url) {\n if (!url) {\n return Promise.reject(new Error('Missing the url to decline'));\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: url,\n body: {\n actionType: INTERPRETATION.ACTION_TYPE.DECLINED,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#declineRequest failed', error);\n throw error;\n });\n },\n});\n\nexport default SimultaneousInterpretation;\n"],"mappings":"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"}
@@ -18,7 +18,7 @@ var SILanguage = _webexCore.WebexPlugin.extend({
18
18
  languageCode: 'number',
19
19
  languageName: 'string'
20
20
  },
21
- version: "3.0.0-beta.174"
21
+ version: "3.0.0-beta.175"
22
22
  });
23
23
  var _default = SILanguage;
24
24
  exports.default = _default;
@@ -2041,6 +2041,12 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2041
2041
  function: 'setUpInterpretationListener'
2042
2042
  }, _constants.EVENT_TRIGGERS.MEETING_INTERPRETATION_SUPPORT_LANGUAGES_UPDATE);
2043
2043
  });
2044
+ this.simultaneousInterpretation.on(_constants.INTERPRETATION.EVENTS.HANDOFF_REQUESTS_ARRIVED, function (payload) {
2045
+ _triggerProxy.default.trigger(_this5, {
2046
+ file: 'meeting/index',
2047
+ function: 'setUpInterpretationListener'
2048
+ }, _constants.EVENT_TRIGGERS.MEETING_INTERPRETATION_HANDOFF_REQUESTS_ARRIVED, payload);
2049
+ });
2044
2050
  }
2045
2051
 
2046
2052
  /**
@@ -2708,11 +2714,12 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2708
2714
  value: function setUpLocusServicesListener() {
2709
2715
  var _this16 = this;
2710
2716
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LINKS_SERVICES, function (payload) {
2711
- var _payload$services, _payload$services$rec, _this16$locusInfo, _this16$locusInfo$ful, _payload$services2, _payload$services2$br, _payload$services3, _payload$services3$ap;
2717
+ var _payload$services, _payload$services$rec, _this16$locusInfo, _this16$locusInfo$ful, _payload$services2, _payload$services2$br, _payload$services3, _payload$services3$ap, _payload$services4, _payload$services4$ap;
2712
2718
  _this16.recordingController.setServiceUrl(payload === null || payload === void 0 ? void 0 : (_payload$services = payload.services) === null || _payload$services === void 0 ? void 0 : (_payload$services$rec = _payload$services.record) === null || _payload$services$rec === void 0 ? void 0 : _payload$services$rec.url);
2713
2719
  _this16.recordingController.setSessionId((_this16$locusInfo = _this16.locusInfo) === null || _this16$locusInfo === void 0 ? void 0 : (_this16$locusInfo$ful = _this16$locusInfo.fullState) === null || _this16$locusInfo$ful === void 0 ? void 0 : _this16$locusInfo$ful.sessionId);
2714
2720
  _this16.breakouts.breakoutServiceUrlUpdate(payload === null || payload === void 0 ? void 0 : (_payload$services2 = payload.services) === null || _payload$services2 === void 0 ? void 0 : (_payload$services2$br = _payload$services2.breakout) === null || _payload$services2$br === void 0 ? void 0 : _payload$services2$br.url);
2715
2721
  _this16.annotation.approvalUrlUpdate(payload === null || payload === void 0 ? void 0 : (_payload$services3 = payload.services) === null || _payload$services3 === void 0 ? void 0 : (_payload$services3$ap = _payload$services3.approval) === null || _payload$services3$ap === void 0 ? void 0 : _payload$services3$ap.url);
2722
+ _this16.simultaneousInterpretation.approvalUrlUpdate(payload === null || payload === void 0 ? void 0 : (_payload$services4 = payload.services) === null || _payload$services4 === void 0 ? void 0 : (_payload$services4$ap = _payload$services4.approval) === null || _payload$services4$ap === void 0 ? void 0 : _payload$services4$ap.url);
2716
2723
  });
2717
2724
  }
2718
2725
 
@@ -3349,6 +3356,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3349
3356
  }, {
3350
3357
  key: "parseMeetingInfo",
3351
3358
  value: function parseMeetingInfo(meetingInfo) {
3359
+ var _webexMeetingInfo$mee;
3352
3360
  var destination = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
3353
3361
  var webexMeetingInfo = meetingInfo === null || meetingInfo === void 0 ? void 0 : meetingInfo.body;
3354
3362
  // We try to use as much info from Locus meeting object, stored in destination
@@ -3379,6 +3387,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3379
3387
  // Need to populate environment when sending CA event
3380
3388
  this.environment = ((_locusMeetingObject7 = locusMeetingObject) === null || _locusMeetingObject7 === void 0 ? void 0 : _locusMeetingObject7.info.channel) || (webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.channel);
3381
3389
  }
3390
+ this.simultaneousInterpretation.updateHostSIEnabled(!!(webexMeetingInfo !== null && webexMeetingInfo !== void 0 && (_webexMeetingInfo$mee = webexMeetingInfo.meetingSiteSetting) !== null && _webexMeetingInfo$mee !== void 0 && _webexMeetingInfo$mee.enableHostInterpreterControlSI));
3382
3391
  }
3383
3392
 
3384
3393
  /**