@webex/internal-plugin-voicea 3.0.0-beta.9 → 3.0.0-beta.90

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.
package/README.md CHANGED
@@ -22,59 +22,64 @@ npm install --save @webex/internal-plugin-voicea
22
22
  ## Usage
23
23
 
24
24
  ```js
25
-
26
25
  import '@webex/internal-plugin-voicea';
27
26
 
28
27
  import WebexCore from '@webex/webex-core';
29
28
 
30
29
  const webex = new WebexCore();
31
30
  // locusUrl is got from meeting.locusInfo.url;
32
- // datachannelUrl is got from meeting.locusInfo.info.datachannelUrl;
31
+ // datachannelUrl is got from meeting.locusInfo.info.datachannelUrl;
33
32
  // internally uses LLM plugin
34
33
  webex.internal.voicea.registerAndConnect(locusUrl, datachannelUrl);
35
-
36
34
  ```
35
+
37
36
  Toggle Transcribing
38
37
 
39
- * Enable/Disable Transcribing in a meeting
40
- * Automatically activates Closed Captions(CC) if enabled.
38
+ - Enable/Disable Transcribing in a meeting
39
+ - Automatically activates Closed Captions(CC) if enabled.
40
+
41
41
  ```js
42
42
  await webex.internal.voicea.toggleTranscribing(true);
43
43
  await webex.internal.voicea.toggleTranscribing(false);
44
44
  ```
45
45
 
46
-
47
46
  Toggle Captions
48
47
 
49
- * Enable Captioning in a meeting
50
- * Closed Caption cannot be turned off in a meeting
51
- * Triggers voicea:captionOn
52
-
48
+ - Enable Captioning in a meeting
49
+ - Closed Caption cannot be turned off in a meeting
50
+ - Triggers voicea:captionOn
51
+
53
52
  ```js
54
53
  await webex.internal.voicea.toggleTranscribing(true);
55
54
  await webex.internal.voicea.toggleTranscribing(false);
56
55
  ```
57
56
 
58
57
  Set Spoken Language
59
- * Host can set the spoken language of the meeting
60
- * Triggers voicea:spokenLanguageSet
58
+
59
+ - Host can set the spoken language of the meeting
60
+ - Triggers voicea:spokenLanguageSet
61
+
61
62
  ```js
62
63
  webex.internal.voicea.setSpokenLanguage('en');
63
64
  ```
64
65
 
65
66
  Set Caption Language
66
- * Anyone can request caption languages for the meeting
67
+
68
+ - Anyone can request caption languages for the meeting
69
+
67
70
  ```js
68
71
  webex.internal.voicea.requestLanguage('en');
69
72
  ```
70
73
 
71
74
  Other Triggers:
72
- * voicea:announcement - Triggered when voicea has
73
- joined the meeting
74
- * voicea:captionLanguageUpdate - Triggered when a response for requesting caption language is recieved.
75
- * voicea:newCaption - Returns a caption sent by voicea
76
- * voicea:wxa - Triggers whenever WXA is listening or finished listening, along with any action taken
77
- * voicea:highlightCreated - Returns the created highlight
75
+
76
+ - voicea:announcement - Triggered when voicea has
77
+ joined the meeting
78
+ - voicea:captionLanguageUpdate - Triggered when a response for requesting caption language is recieved.
79
+ - voicea:newCaption - Returns a caption sent by voicea
80
+ - voicea:wxa - Triggers whenever WXA is listening or finished listening, along with any action taken
81
+ - voicea:highlightCreated - Returns the created highlight
82
+
78
83
  ## Maintainers
79
84
 
80
85
  This package is maintained by [Cisco Webex for Developers](https://developer.webex.com/).
package/dist/constants.js CHANGED
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  _Object$defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
-
9
7
  exports.VOICEA_RELAY_TYPES = exports.VOICEA = exports.TRANSCRIPTION_TYPE = exports.EVENT_TRIGGERS = void 0;
10
8
  var EVENT_TRIGGERS = {
11
9
  VOICEA_ANNOUNCEMENT: 'voicea:announcement',
@@ -1 +1 @@
1
- {"version":3,"names":["EVENT_TRIGGERS","VOICEA_ANNOUNCEMENT","CAPTION_LANGUAGE_UPDATE","SPOKEN_LANGUAGE_UPDATE","CAPTIONS_TURNED_ON","TRANSCRIBING_ON","TRANSCRIBING_OFF","NEW_CAPTION","EVA_COMMAND","HIGHLIGHT_CREATED","VOICEA_RELAY_TYPES","ANNOUNCEMENT","CLIENT_ANNOUNCEMENT","TRANSLATION_REQUEST","TRANSLATION_RESPONSE","TRANSCRIPTION","TRANSCRIPTION_TYPE","UNKNOWN","EVA_WAKE","EVA_THANKS","EVA_CANCEL","TRANSCRIPT_INTERIM_RESULTS","TRANSCRIPT_FINAL_RESULT","VOICEA"],"sources":["constants.ts"],"sourcesContent":["export const EVENT_TRIGGERS = {\n VOICEA_ANNOUNCEMENT: 'voicea:announcement',\n CAPTION_LANGUAGE_UPDATE: 'voicea:captionLanguageUpdate',\n SPOKEN_LANGUAGE_UPDATE: 'voicea:spokenLanguageUpdate',\n CAPTIONS_TURNED_ON: 'voicea:captionOn',\n TRANSCRIBING_ON: 'voicea:transcribingOn',\n TRANSCRIBING_OFF: 'voicea:transcribingOff',\n\n NEW_CAPTION: 'voicea:newCaption',\n EVA_COMMAND: 'voicea:wxa',\n HIGHLIGHT_CREATED: 'voicea:highlightCreated'\n};\n\nexport const VOICEA_RELAY_TYPES = {\n ANNOUNCEMENT: 'voicea.annc',\n CLIENT_ANNOUNCEMENT: 'client.annc',\n TRANSLATION_REQUEST: 'voicea.transl.req',\n TRANSLATION_RESPONSE: 'voicea.transl.rsp',\n TRANSCRIPTION: 'voicea.transcription'\n};\n\nexport const TRANSCRIPTION_TYPE = {\n UNKNOWN: 'unknown',\n EVA_WAKE: 'eva_wake',\n EVA_THANKS: 'eva_thanks',\n EVA_CANCEL: 'eva_cancel',\n HIGHLIGHT_CREATED: 'highlight_created',\n TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',\n TRANSCRIPT_FINAL_RESULT: 'transcript_final_result'\n};\n\nexport const VOICEA = 'voicea';\n"],"mappings":";;;;;;;;;AAAO,IAAMA,cAAc,GAAG;EAC5BC,mBAAmB,EAAE,qBADO;EAE5BC,uBAAuB,EAAE,8BAFG;EAG5BC,sBAAsB,EAAE,6BAHI;EAI5BC,kBAAkB,EAAE,kBAJQ;EAK5BC,eAAe,EAAE,uBALW;EAM5BC,gBAAgB,EAAE,wBANU;EAQ5BC,WAAW,EAAE,mBARe;EAS5BC,WAAW,EAAE,YATe;EAU5BC,iBAAiB,EAAE;AAVS,CAAvB;;AAaA,IAAMC,kBAAkB,GAAG;EAChCC,YAAY,EAAE,aADkB;EAEhCC,mBAAmB,EAAE,aAFW;EAGhCC,mBAAmB,EAAE,mBAHW;EAIhCC,oBAAoB,EAAE,mBAJU;EAKhCC,aAAa,EAAE;AALiB,CAA3B;;AAQA,IAAMC,kBAAkB,GAAG;EAChCC,OAAO,EAAE,SADuB;EAEhCC,QAAQ,EAAE,UAFsB;EAGhCC,UAAU,EAAE,YAHoB;EAIhCC,UAAU,EAAE,YAJoB;EAKhCX,iBAAiB,EAAE,mBALa;EAMhCY,0BAA0B,EAAE,4BANI;EAOhCC,uBAAuB,EAAE;AAPO,CAA3B;;AAUA,IAAMC,MAAM,GAAG,QAAf"}
1
+ {"version":3,"names":["EVENT_TRIGGERS","VOICEA_ANNOUNCEMENT","CAPTION_LANGUAGE_UPDATE","SPOKEN_LANGUAGE_UPDATE","CAPTIONS_TURNED_ON","TRANSCRIBING_ON","TRANSCRIBING_OFF","NEW_CAPTION","EVA_COMMAND","HIGHLIGHT_CREATED","VOICEA_RELAY_TYPES","ANNOUNCEMENT","CLIENT_ANNOUNCEMENT","TRANSLATION_REQUEST","TRANSLATION_RESPONSE","TRANSCRIPTION","TRANSCRIPTION_TYPE","UNKNOWN","EVA_WAKE","EVA_THANKS","EVA_CANCEL","TRANSCRIPT_INTERIM_RESULTS","TRANSCRIPT_FINAL_RESULT","VOICEA"],"sources":["constants.ts"],"sourcesContent":["export const EVENT_TRIGGERS = {\n VOICEA_ANNOUNCEMENT: 'voicea:announcement',\n CAPTION_LANGUAGE_UPDATE: 'voicea:captionLanguageUpdate',\n SPOKEN_LANGUAGE_UPDATE: 'voicea:spokenLanguageUpdate',\n CAPTIONS_TURNED_ON: 'voicea:captionOn',\n TRANSCRIBING_ON: 'voicea:transcribingOn',\n TRANSCRIBING_OFF: 'voicea:transcribingOff',\n\n NEW_CAPTION: 'voicea:newCaption',\n EVA_COMMAND: 'voicea:wxa',\n HIGHLIGHT_CREATED: 'voicea:highlightCreated',\n};\n\nexport const VOICEA_RELAY_TYPES = {\n ANNOUNCEMENT: 'voicea.annc',\n CLIENT_ANNOUNCEMENT: 'client.annc',\n TRANSLATION_REQUEST: 'voicea.transl.req',\n TRANSLATION_RESPONSE: 'voicea.transl.rsp',\n TRANSCRIPTION: 'voicea.transcription',\n};\n\nexport const TRANSCRIPTION_TYPE = {\n UNKNOWN: 'unknown',\n EVA_WAKE: 'eva_wake',\n EVA_THANKS: 'eva_thanks',\n EVA_CANCEL: 'eva_cancel',\n HIGHLIGHT_CREATED: 'highlight_created',\n TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',\n TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',\n};\n\nexport const VOICEA = 'voicea';\n"],"mappings":";;;;;;;AAAO,IAAMA,cAAc,GAAG;EAC5BC,mBAAmB,EAAE,qBAAqB;EAC1CC,uBAAuB,EAAE,8BAA8B;EACvDC,sBAAsB,EAAE,6BAA6B;EACrDC,kBAAkB,EAAE,kBAAkB;EACtCC,eAAe,EAAE,uBAAuB;EACxCC,gBAAgB,EAAE,wBAAwB;EAE1CC,WAAW,EAAE,mBAAmB;EAChCC,WAAW,EAAE,YAAY;EACzBC,iBAAiB,EAAE;AACrB,CAAC;AAAC;AAEK,IAAMC,kBAAkB,GAAG;EAChCC,YAAY,EAAE,aAAa;EAC3BC,mBAAmB,EAAE,aAAa;EAClCC,mBAAmB,EAAE,mBAAmB;EACxCC,oBAAoB,EAAE,mBAAmB;EACzCC,aAAa,EAAE;AACjB,CAAC;AAAC;AAEK,IAAMC,kBAAkB,GAAG;EAChCC,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE,YAAY;EACxBX,iBAAiB,EAAE,mBAAmB;EACtCY,0BAA0B,EAAE,4BAA4B;EACxDC,uBAAuB,EAAE;AAC3B,CAAC;AAAC;AAEK,IAAMC,MAAM,GAAG,QAAQ;AAAC"}
package/dist/index.js CHANGED
@@ -1,33 +1,22 @@
1
1
  "use strict";
2
2
 
3
3
  var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
4
-
5
4
  var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
6
-
7
5
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
8
-
9
6
  var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
10
-
11
7
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
12
-
13
8
  _Object$defineProperty(exports, "__esModule", {
14
9
  value: true
15
10
  });
16
-
17
11
  _Object$defineProperty(exports, "default", {
18
12
  enumerable: true,
19
13
  get: function get() {
20
14
  return _voicea.default;
21
15
  }
22
16
  });
23
-
24
17
  var WebexCore = _interopRequireWildcard(require("@webex/webex-core"));
25
-
26
18
  var _voicea = _interopRequireDefault(require("./voicea"));
27
-
28
19
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
-
30
20
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
-
32
21
  WebexCore.registerInternalPlugin('voicea', _voicea.default, {});
33
22
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["WebexCore","registerInternalPlugin","VoiceaChannel"],"sources":["index.ts"],"sourcesContent":["import * as WebexCore from '@webex/webex-core';\n\nimport VoiceaChannel from './voicea';\n\nWebexCore.registerInternalPlugin('voicea', VoiceaChannel, {});\n\nexport {default} from './voicea';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;AAEAA,SAAS,CAACC,sBAAV,CAAiC,QAAjC,EAA2CC,eAA3C,EAA0D,EAA1D"}
1
+ {"version":3,"names":["WebexCore","registerInternalPlugin","VoiceaChannel"],"sources":["index.ts"],"sourcesContent":["import * as WebexCore from '@webex/webex-core';\n\nimport VoiceaChannel from './voicea';\n\nWebexCore.registerInternalPlugin('voicea', VoiceaChannel, {});\n\nexport {default} from './voicea';\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAEA;AAAqC;AAAA;AAErCA,SAAS,CAACC,sBAAsB,CAAC,QAAQ,EAAEC,eAAa,EAAE,CAAC,CAAC,CAAC"}
package/dist/utils.js CHANGED
@@ -1,19 +1,15 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  _Object$defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
-
9
7
  exports.millisToMinutesAndSeconds = void 0;
10
-
11
8
  // eslint-disable-next-line import/prefer-default-export
12
9
  var millisToMinutesAndSeconds = function millisToMinutesAndSeconds(millis) {
13
10
  var minutes = Math.floor(millis / 60000);
14
11
  var seconds = (millis % 60000 / 1000).toFixed(0);
15
12
  return "".concat(minutes, ":").concat(+seconds < 10 ? '0' : '').concat(seconds);
16
13
  };
17
-
18
14
  exports.millisToMinutesAndSeconds = millisToMinutesAndSeconds;
19
15
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["millisToMinutesAndSeconds","millis","minutes","Math","floor","seconds","toFixed"],"sources":["utils.ts"],"sourcesContent":["// eslint-disable-next-line import/prefer-default-export\nexport const millisToMinutesAndSeconds = (millis: number) => {\n const minutes = Math.floor(millis / 60000);\n const seconds = ((millis % 60000) / 1000).toFixed(0);\n\n return `${minutes}:${+(seconds) < 10 ? '0' : ''}${seconds}`;\n};\n\n"],"mappings":";;;;;;;;;;AAAA;AACO,IAAMA,yBAAyB,GAAG,SAA5BA,yBAA4B,CAACC,MAAD,EAAoB;EAC3D,IAAMC,OAAO,GAAGC,IAAI,CAACC,KAAL,CAAWH,MAAM,GAAG,KAApB,CAAhB;EACA,IAAMI,OAAO,GAAG,CAAEJ,MAAM,GAAG,KAAV,GAAmB,IAApB,EAA0BK,OAA1B,CAAkC,CAAlC,CAAhB;EAEA,iBAAUJ,OAAV,cAAqB,CAAEG,OAAF,GAAa,EAAb,GAAkB,GAAlB,GAAwB,EAA7C,SAAkDA,OAAlD;AACD,CALM"}
1
+ {"version":3,"names":["millisToMinutesAndSeconds","millis","minutes","Math","floor","seconds","toFixed"],"sources":["utils.ts"],"sourcesContent":["// eslint-disable-next-line import/prefer-default-export\nexport const millisToMinutesAndSeconds = (millis: number) => {\n const minutes = Math.floor(millis / 60000);\n const seconds = ((millis % 60000) / 1000).toFixed(0);\n\n return `${minutes}:${+seconds < 10 ? '0' : ''}${seconds}`;\n};\n"],"mappings":";;;;;;;AAAA;AACO,IAAMA,yBAAyB,GAAG,SAA5BA,yBAAyB,CAAIC,MAAc,EAAK;EAC3D,IAAMC,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACH,MAAM,GAAG,KAAK,CAAC;EAC1C,IAAMI,OAAO,GAAG,CAAEJ,MAAM,GAAG,KAAK,GAAI,IAAI,EAAEK,OAAO,CAAC,CAAC,CAAC;EAEpD,iBAAUJ,OAAO,cAAI,CAACG,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,SAAGA,OAAO;AACzD,CAAC;AAAC"}
package/dist/voicea.js CHANGED
@@ -1,70 +1,46 @@
1
1
  "use strict";
2
2
 
3
3
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
-
5
4
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
6
-
7
5
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
8
-
9
6
  _Object$defineProperty(exports, "__esModule", {
10
7
  value: true
11
8
  });
12
-
13
9
  exports.default = exports.VoiceaChannel = void 0;
14
-
15
10
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
16
-
17
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
18
-
19
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
20
-
21
13
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
22
-
23
14
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
24
-
25
15
  var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
26
-
27
16
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
28
-
29
17
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
30
-
31
18
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
32
-
33
19
  var _uuid = _interopRequireDefault(require("uuid"));
34
-
35
20
  var _pluginMeetings = require("@webex/plugin-meetings");
36
-
37
21
  var _webexCore = require("@webex/webex-core");
38
-
39
22
  var _constants = require("./constants");
40
-
41
23
  var _utils = require("./utils");
42
-
43
24
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
44
-
45
25
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
46
-
47
26
  /**
48
- * VoiceaChannel to hold single instance of LLM
27
+ * @description VoiceaChannel to hold single instance of LLM
28
+ * @export
29
+ * @class VoiceaChannel
49
30
  */
50
31
  var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
51
32
  (0, _inherits2.default)(VoiceaChannel, _WebexPlugin);
52
-
53
33
  var _super = _createSuper(VoiceaChannel);
54
-
55
34
  /**
56
35
  * Initializes Voicea plugin
57
36
  * @param {any} args
58
37
  */
59
38
  function VoiceaChannel() {
60
39
  var _this;
61
-
62
40
  (0, _classCallCheck2.default)(this, VoiceaChannel);
63
-
64
41
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
65
42
  args[_key] = arguments[_key];
66
43
  }
67
-
68
44
  _this = _super.call.apply(_super, [this].concat(args));
69
45
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "namespace", _constants.VOICEA);
70
46
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "seqNum", void 0);
@@ -73,28 +49,19 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
73
49
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hasSubscribedToEvents", false);
74
50
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "vmcDeviceId", void 0);
75
51
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "eventProcessor", function (e) {
76
- e;
77
52
  _this.seqNum = e.sequenceNumber + 1;
78
-
79
53
  switch (e.data.relayType) {
80
54
  case _constants.VOICEA_RELAY_TYPES.ANNOUNCEMENT:
81
55
  _this.vmcDeviceId = e.headers.from;
82
56
  _this.hasVoiceaJoined = true;
83
-
84
57
  _this.processAnnouncementMessage(e.data.voiceaPayload);
85
-
86
58
  break;
87
-
88
59
  case _constants.VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:
89
60
  _this.processCaptionLanguageResponse(e.data.voiceaPayload);
90
-
91
61
  break;
92
-
93
62
  case _constants.VOICEA_RELAY_TYPES.TRANSCRIPTION:
94
63
  _this.processTranscription(e.data.voiceaPayload);
95
-
96
64
  break;
97
-
98
65
  default:
99
66
  break;
100
67
  }
@@ -110,9 +77,7 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
110
77
  transcriptId: voiceaPayload.transcript_id,
111
78
  transcripts: voiceaPayload.transcripts
112
79
  });
113
-
114
80
  break;
115
-
116
81
  case _constants.TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:
117
82
  _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
118
83
  file: 'voicea',
@@ -127,9 +92,7 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
127
92
  },
128
93
  timestamp: (0, _utils.millisToMinutesAndSeconds)(voiceaPayload.transcript.end_millis)
129
94
  });
130
-
131
95
  break;
132
-
133
96
  case _constants.TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:
134
97
  _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
135
98
  file: 'voicea',
@@ -142,9 +105,7 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
142
105
  highlightSource: voiceaPayload.highlight.highlight_source,
143
106
  timestamp: (0, _utils.millisToMinutesAndSeconds)(voiceaPayload.highlight.end_millis)
144
107
  });
145
-
146
108
  break;
147
-
148
109
  case _constants.TRANSCRIPTION_TYPE.EVA_THANKS:
149
110
  _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
150
111
  file: 'voicea',
@@ -153,9 +114,7 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
153
114
  isListening: false,
154
115
  text: voiceaPayload.command_response
155
116
  });
156
-
157
117
  break;
158
-
159
118
  case _constants.TRANSCRIPTION_TYPE.EVA_WAKE:
160
119
  case _constants.TRANSCRIPTION_TYPE.EVA_CANCEL:
161
120
  _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
@@ -164,9 +123,7 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
164
123
  }, _constants.EVENT_TRIGGERS.EVA_COMMAND, {
165
124
  isListening: voiceaPayload.type === _constants.TRANSCRIPTION_TYPE.EVA_WAKE
166
125
  });
167
-
168
126
  break;
169
-
170
127
  default:
171
128
  break;
172
129
  }
@@ -191,27 +148,26 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
191
148
  });
192
149
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "processAnnouncementMessage", function (voiceaPayload) {
193
150
  var _voiceaPayload$transl, _voiceaPayload$transl2, _voiceaPayload$transl3, _voiceaPayload$transl4, _voiceaPayload$ASR$sp, _voiceaPayload$ASR;
194
-
195
151
  var voiceaLanguageOptions = {
196
152
  captionLanguages: (_voiceaPayload$transl = voiceaPayload === null || voiceaPayload === void 0 ? void 0 : (_voiceaPayload$transl2 = voiceaPayload.translation) === null || _voiceaPayload$transl2 === void 0 ? void 0 : _voiceaPayload$transl2.allowed_languages) !== null && _voiceaPayload$transl !== void 0 ? _voiceaPayload$transl : [],
197
153
  maxLanguages: (_voiceaPayload$transl3 = voiceaPayload === null || voiceaPayload === void 0 ? void 0 : (_voiceaPayload$transl4 = voiceaPayload.translation) === null || _voiceaPayload$transl4 === void 0 ? void 0 : _voiceaPayload$transl4.max_languages) !== null && _voiceaPayload$transl3 !== void 0 ? _voiceaPayload$transl3 : 0,
198
154
  spokenLanguages: (_voiceaPayload$ASR$sp = voiceaPayload === null || voiceaPayload === void 0 ? void 0 : (_voiceaPayload$ASR = voiceaPayload.ASR) === null || _voiceaPayload$ASR === void 0 ? void 0 : _voiceaPayload$ASR.spoken_languages) !== null && _voiceaPayload$ASR$sp !== void 0 ? _voiceaPayload$ASR$sp : []
199
155
  };
200
-
201
156
  _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
202
157
  file: 'voicea',
203
158
  function: 'processAnnouncementMessage'
204
159
  }, _constants.EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);
205
160
  });
206
161
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sendAnnouncement", function () {
162
+ // @ts-ignore
207
163
  if (_this.hasVoiceaJoined || !_this.webex.internal.llm.isConnected()) return;
208
-
209
164
  _this.listenToEvents();
210
-
165
+ // @ts-ignore
211
166
  _this.webex.internal.llm.socket.send({
212
167
  id: "".concat(_this.seqNum),
213
168
  type: 'publishRequest',
214
169
  recipients: {
170
+ // @ts-ignore
215
171
  route: _this.webex.internal.llm.getBinding()
216
172
  },
217
173
  headers: {},
@@ -224,32 +180,37 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
224
180
  },
225
181
  trackingId: "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString())
226
182
  });
227
-
228
183
  _this.seqNum += 1;
229
184
  });
230
185
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "setSpokenLanguage", function (languageCode) {
231
- return _this.request({
232
- method: 'PUT',
233
- url: "".concat(_this.webex.internal.llm.getLocusUrl(), "/controls/"),
234
- body: {
235
- languageCode: languageCode
236
- }
237
- }).then(function () {
238
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
239
- file: 'voicea',
240
- function: 'setSpokenLanguage'
241
- }, _constants.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {
242
- languageCode: languageCode
243
- });
244
- });
186
+ return (
187
+ // @ts-ignore
188
+ _this.request({
189
+ method: 'PUT',
190
+ // @ts-ignore
191
+ url: "".concat(_this.webex.internal.llm.getLocusUrl(), "/controls/"),
192
+ body: {
193
+ languageCode: languageCode
194
+ }
195
+ }).then(function () {
196
+ _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
197
+ file: 'voicea',
198
+ function: 'setSpokenLanguage'
199
+ }, _constants.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {
200
+ languageCode: languageCode
201
+ });
202
+ })
203
+ );
245
204
  });
246
205
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "requestLanguage", function (languageCode) {
206
+ // @ts-ignore
247
207
  if (!_this.webex.internal.llm.isConnected()) return;
248
-
208
+ // @ts-ignore
249
209
  _this.webex.internal.llm.socket.send({
250
210
  id: "".concat(_this.seqNum),
251
211
  type: 'publishRequest',
252
212
  recipients: {
213
+ // @ts-ignore
253
214
  route: _this.webex.internal.llm.getBinding()
254
215
  },
255
216
  headers: {
@@ -265,74 +226,64 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
265
226
  },
266
227
  trackingId: "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString())
267
228
  });
268
-
269
229
  _this.seqNum += 1;
270
230
  });
271
231
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "turnOnCaptions", /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
272
232
  return _regenerator.default.wrap(function _callee$(_context) {
273
- while (1) {
274
- switch (_context.prev = _context.next) {
275
- case 0:
276
- if (!(_this.hasVoiceaJoined && _this.areCaptionsEnabled)) {
277
- _context.next = 2;
278
- break;
233
+ while (1) switch (_context.prev = _context.next) {
234
+ case 0:
235
+ if (!(_this.hasVoiceaJoined && _this.areCaptionsEnabled)) {
236
+ _context.next = 2;
237
+ break;
238
+ }
239
+ return _context.abrupt("return", undefined);
240
+ case 2:
241
+ return _context.abrupt("return", _this.request({
242
+ method: 'PUT',
243
+ // @ts-ignore
244
+ url: "".concat(_this.webex.internal.llm.getLocusUrl(), "/controls/"),
245
+ body: {
246
+ transcribe: {
247
+ caption: true
248
+ }
279
249
  }
280
-
281
- return _context.abrupt("return", undefined);
282
-
283
- case 2:
284
- return _context.abrupt("return", _this.request({
250
+ }).then(function () {
251
+ _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
252
+ file: 'voicea',
253
+ function: 'turnOnCaptions'
254
+ }, _constants.EVENT_TRIGGERS.CAPTIONS_TURNED_ON);
255
+ _this.areCaptionsEnabled = true;
256
+ _this.sendAnnouncement();
257
+ }));
258
+ case 3:
259
+ case "end":
260
+ return _context.stop();
261
+ }
262
+ }, _callee);
263
+ })));
264
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "toggleTranscribing", /*#__PURE__*/function () {
265
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(activate) {
266
+ return _regenerator.default.wrap(function _callee2$(_context2) {
267
+ while (1) switch (_context2.prev = _context2.next) {
268
+ case 0:
269
+ return _context2.abrupt("return", _this.request({
285
270
  method: 'PUT',
271
+ // @ts-ignore
286
272
  url: "".concat(_this.webex.internal.llm.getLocusUrl(), "/controls/"),
287
273
  body: {
288
274
  transcribe: {
289
- caption: true
275
+ transcribing: activate
290
276
  }
291
277
  }
292
278
  }).then(function () {
293
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
294
- file: 'voicea',
295
- function: 'turnOnCaptions'
296
- }, _constants.EVENT_TRIGGERS.CAPTIONS_TURNED_ON);
297
-
298
- _this.areCaptionsEnabled = true;
299
-
300
- _this.sendAnnouncement();
279
+ if (activate && !_this.areCaptionsEnabled && !_this.hasVoiceaJoined) _this.turnOnCaptions();
301
280
  }));
302
-
303
- case 3:
281
+ case 1:
304
282
  case "end":
305
- return _context.stop();
306
- }
307
- }
308
- }, _callee);
309
- })));
310
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "toggleTranscribing", /*#__PURE__*/function () {
311
- var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(activate) {
312
- return _regenerator.default.wrap(function _callee2$(_context2) {
313
- while (1) {
314
- switch (_context2.prev = _context2.next) {
315
- case 0:
316
- return _context2.abrupt("return", _this.request({
317
- method: 'PUT',
318
- url: "".concat(_this.webex.internal.llm.getLocusUrl(), "/controls/"),
319
- body: {
320
- transcribe: {
321
- transcribing: activate
322
- }
323
- }
324
- }).then(function () {
325
- if (activate && !_this.areCaptionsEnabled && !_this.hasVoiceaJoined) _this.turnOnCaptions();
326
- }));
327
-
328
- case 1:
329
- case "end":
330
- return _context2.stop();
331
- }
283
+ return _context2.stop();
332
284
  }
333
285
  }, _callee2);
334
286
  }));
335
-
336
287
  return function (_x) {
337
288
  return _ref2.apply(this, arguments);
338
289
  };
@@ -343,38 +294,46 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
343
294
  _this.vmcDeviceId = undefined;
344
295
  return _this;
345
296
  }
297
+
346
298
  /**
347
299
  * Process Transcript and send alert
348
300
  * @param {TranscriptionResponse} voiceaPayload
349
301
  * @returns {void}
350
302
  */
351
-
352
-
353
303
  (0, _createClass2.default)(VoiceaChannel, [{
354
304
  key: "listenToEvents",
355
305
  value:
306
+ /**
307
+ * @param {Object} e
308
+ * @returns {undefined}
309
+ */
310
+
356
311
  /**
357
312
  * Listen to websocket messages
313
+ * @returns {undefined}
358
314
  */
359
315
  function listenToEvents() {
360
316
  if (!this.hasSubscribedToEvents) {
317
+ // @ts-ignore
361
318
  this.webex.internal.llm.on('event:relay.event', this.eventProcessor);
362
319
  this.hasSubscribedToEvents = true;
363
320
  }
364
321
  }
322
+
323
+ // @ts-ignore
365
324
  }, {
366
325
  key: "deregisterEvents",
367
326
  value: function deregisterEvents() {
368
327
  this.hasVoiceaJoined = false;
369
328
  this.areCaptionsEnabled = false;
370
329
  this.vmcDeviceId = undefined;
330
+ // @ts-ignore
371
331
  this.webex.internal.llm.off('event:relay.event', this.eventProcessor);
372
332
  this.hasSubscribedToEvents = false;
373
333
  }
374
334
  }]);
375
335
  return VoiceaChannel;
376
336
  }(_webexCore.WebexPlugin);
377
-
378
337
  exports.VoiceaChannel = VoiceaChannel;
379
338
  var _default = VoiceaChannel;
380
339
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["VoiceaChannel","args","VOICEA","e","seqNum","sequenceNumber","data","relayType","VOICEA_RELAY_TYPES","ANNOUNCEMENT","vmcDeviceId","headers","from","hasVoiceaJoined","processAnnouncementMessage","voiceaPayload","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","type","TRANSCRIPTION_TYPE","TRANSCRIPT_INTERIM_RESULTS","Trigger","trigger","file","function","EVENT_TRIGGERS","NEW_CAPTION","isFinal","transcriptId","transcript_id","transcripts","TRANSCRIPT_FINAL_RESULT","transcript","csis","text","transcriptLanguageCode","transcript_language_code","timestamp","millisToMinutesAndSeconds","end_millis","HIGHLIGHT_CREATED","highlight","highlightId","highlight_id","highlightLabel","highlight_label","highlightSource","highlight_source","EVA_THANKS","EVA_COMMAND","isListening","command_response","EVA_WAKE","EVA_CANCEL","statusCode","CAPTION_LANGUAGE_UPDATE","errorCode","errorMessage","message","voiceaLanguageOptions","captionLanguages","translation","allowed_languages","maxLanguages","max_languages","spokenLanguages","ASR","spoken_languages","VOICEA_ANNOUNCEMENT","webex","internal","llm","isConnected","listenToEvents","socket","send","id","recipients","route","getBinding","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","languageCode","request","method","url","getLocusUrl","body","then","SPOKEN_LANGUAGE_UPDATE","to","translationLanguage","TRANSLATION_REQUEST","areCaptionsEnabled","undefined","transcribe","caption","CAPTIONS_TURNED_ON","sendAnnouncement","activate","transcribing","turnOnCaptions","hasSubscribedToEvents","on","eventProcessor","off","WebexPlugin"],"sources":["voicea.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {TriggerProxy as Trigger} from '@webex/plugin-meetings';\nimport {WebexPlugin, config} from '@webex/webex-core';\n\nimport {EVENT_TRIGGERS, VOICEA_RELAY_TYPES, TRANSCRIPTION_TYPE, VOICEA} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n IVoiceaChannel,\n} from './voicea.types';\nimport {millisToMinutesAndSeconds} from './utils';\n\n/**\n * VoiceaChannel to hold single instance of LLM\n */\nexport class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {\n namespace = VOICEA;\n\n private seqNum: number;\n\n private hasVoiceaJoined: boolean;\n\n private areCaptionsEnabled: boolean;\n\n private hasSubscribedToEvents: boolean = false;\n\n private vmcDeviceId?: string;\n\n private eventProcessor = (e) => {\n e;\n this.seqNum = e.sequenceNumber + 1;\n switch (e.data.relayType) {\n case VOICEA_RELAY_TYPES.ANNOUNCEMENT:\n this.vmcDeviceId = e.headers.from;\n this.hasVoiceaJoined = true;\n this.processAnnouncementMessage(e.data.voiceaPayload);\n break;\n case VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.data.voiceaPayload);\n break;\n case VOICEA_RELAY_TYPES.TRANSCRIPTION:\n this.processTranscription(e.data.voiceaPayload);\n break;\n default:\n break;\n }\n };\n /**\n * Listen to websocket messages\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n this.webex.internal.llm.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n }\n }\n\n public deregisterEvents() {\n this.hasVoiceaJoined = false;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n this.webex.internal.llm.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n }\n\n /**\n * Initializes Voicea plugin\n * @param {any} args\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n this.hasVoiceaJoined = false;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n }\n\n /**\n * Process Transcript and send alert\n * @param {TranscriptionResponse} voiceaPayload\n * @returns {void}\n */\n private processTranscription = (voiceaPayload: TranscriptionResponse): void => {\n switch (voiceaPayload.type) {\n case TRANSCRIPTION_TYPE.TRANSCRIPT_INTERIM_RESULTS:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.NEW_CAPTION,\n {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.NEW_CAPTION,\n {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n transcript: {\n csis: voiceaPayload.csis,\n text: voiceaPayload.transcript.text,\n transcriptLanguageCode: voiceaPayload.transcript.transcript_language_code,\n },\n timestamp: millisToMinutesAndSeconds(voiceaPayload.transcript.end_millis),\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.HIGHLIGHT_CREATED,\n {\n csis: voiceaPayload.highlight.csis,\n highlightId: voiceaPayload.highlight.highlight_id,\n text: voiceaPayload.highlight.transcript,\n highlightLabel: voiceaPayload.highlight.highlight_label,\n highlightSource: voiceaPayload.highlight.highlight_source,\n timestamp: millisToMinutesAndSeconds(voiceaPayload.highlight.end_millis),\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.EVA_COMMAND,\n {\n isListening: false,\n text: voiceaPayload.command_response,\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.EVA_WAKE:\n case TRANSCRIPTION_TYPE.EVA_CANCEL:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.EVA_COMMAND,\n {\n isListening: voiceaPayload.type === TRANSCRIPTION_TYPE.EVA_WAKE,\n }\n );\n break;\n\n default:\n break;\n }\n };\n\n /**\n * Processes Caption Language Response\n * @param {CaptionLanguageResponse} voiceaPayload\n * @returns {void}\n */\n private processCaptionLanguageResponse = (voiceaPayload: CaptionLanguageResponse): void => {\n if (voiceaPayload.statusCode === 200) {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processCaptionLanguageResponse',\n },\n EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE,\n {statusCode: 200}\n );\n } else {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processCaptionLanguageResponse',\n },\n EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE,\n {statusCode: voiceaPayload.errorCode, errorMessage: voiceaPayload.message}\n );\n }\n };\n\n /**\n * processes voicea announcement response and triggers event\n * @param {Object} voiceaPayload\n * @returns {void}\n */\n private processAnnouncementMessage = (voiceaPayload: AnnouncementPayload): void => {\n const voiceaLanguageOptions = {\n captionLanguages: voiceaPayload?.translation?.allowed_languages ?? [],\n maxLanguages: voiceaPayload?.translation?.max_languages ?? 0,\n spokenLanguages: voiceaPayload?.ASR?.spoken_languages ?? [],\n };\n\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processAnnouncementMessage',\n },\n EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT,\n voiceaLanguageOptions\n );\n };\n\n /**\n * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n private sendAnnouncement = (): void => {\n if (this.hasVoiceaJoined || !this.webex.internal.llm.isConnected()) return;\n\n this.listenToEvents();\n\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {},\n data: {\n clientPayload: {\n version: 'v2',\n },\n eventType: 'relay.event',\n relayType: VOICEA_RELAY_TYPES.CLIENT_ANNOUNCEMENT,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Set Spoken Language for the meeting\n * @param {string} languageCode\n * @returns {Promise}\n */\n public setSpokenLanguage = (languageCode: string): Promise<void> =>\n this.request({\n method: 'PUT',\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n languageCode,\n },\n }).then(() => {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'setSpokenLanguage',\n },\n EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE,\n {languageCode}\n );\n });\n\n /**\n * Request Language translation\n * @param {string} languageCode\n * @returns {void}\n */\n public requestLanguage = (languageCode: string): void => {\n if (!this.webex.internal.llm.isConnected()) return;\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {\n to: this.vmcDeviceId,\n },\n data: {\n clientPayload: {\n translationLanguage: languageCode,\n id: uuid.v4(),\n },\n eventType: 'relay.event',\n relayType: VOICEA_RELAY_TYPES.TRANSLATION_REQUEST,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Turn on Captions\n * @returns {Promise}\n */\n public turnOnCaptions = async (): undefined | Promise<void> => {\n if (this.hasVoiceaJoined && this.areCaptionsEnabled) return undefined;\n\n return this.request({\n method: 'PUT',\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {caption: true},\n },\n }).then(() => {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'turnOnCaptions',\n },\n EVENT_TRIGGERS.CAPTIONS_TURNED_ON\n );\n this.areCaptionsEnabled = true;\n this.sendAnnouncement();\n });\n };\n\n /**\n * Toggle transcribing for highlights\n * @param {bool} activate if true transcribing is turned on\n * @returns {Promise}\n */\n public toggleTranscribing = async (activate: boolean): undefined | Promise<void> => {\n return this.request({\n method: 'PUT',\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {transcribing: activate},\n },\n }).then(() => {\n if (activate && !this.areCaptionsEnabled && !this.hasVoiceaJoined) this.turnOnCaptions();\n });\n };\n}\n\nexport default VoiceaChannel;\n"],"mappings":"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"}
1
+ {"version":3,"names":["VoiceaChannel","args","VOICEA","e","seqNum","sequenceNumber","data","relayType","VOICEA_RELAY_TYPES","ANNOUNCEMENT","vmcDeviceId","headers","from","hasVoiceaJoined","processAnnouncementMessage","voiceaPayload","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","type","TRANSCRIPTION_TYPE","TRANSCRIPT_INTERIM_RESULTS","Trigger","trigger","file","function","EVENT_TRIGGERS","NEW_CAPTION","isFinal","transcriptId","transcript_id","transcripts","TRANSCRIPT_FINAL_RESULT","transcript","csis","text","transcriptLanguageCode","transcript_language_code","timestamp","millisToMinutesAndSeconds","end_millis","HIGHLIGHT_CREATED","highlight","highlightId","highlight_id","highlightLabel","highlight_label","highlightSource","highlight_source","EVA_THANKS","EVA_COMMAND","isListening","command_response","EVA_WAKE","EVA_CANCEL","statusCode","CAPTION_LANGUAGE_UPDATE","errorCode","errorMessage","message","voiceaLanguageOptions","captionLanguages","translation","allowed_languages","maxLanguages","max_languages","spokenLanguages","ASR","spoken_languages","VOICEA_ANNOUNCEMENT","webex","internal","llm","isConnected","listenToEvents","socket","send","id","recipients","route","getBinding","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","languageCode","request","method","url","getLocusUrl","body","then","SPOKEN_LANGUAGE_UPDATE","to","translationLanguage","TRANSLATION_REQUEST","areCaptionsEnabled","undefined","transcribe","caption","CAPTIONS_TURNED_ON","sendAnnouncement","activate","transcribing","turnOnCaptions","hasSubscribedToEvents","on","eventProcessor","off","WebexPlugin"],"sources":["voicea.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {TriggerProxy as Trigger} from '@webex/plugin-meetings';\nimport {WebexPlugin, config} from '@webex/webex-core';\n\nimport {EVENT_TRIGGERS, VOICEA_RELAY_TYPES, TRANSCRIPTION_TYPE, VOICEA} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n IVoiceaChannel,\n} from './voicea.types';\nimport {millisToMinutesAndSeconds} from './utils';\n\n/**\n * @description VoiceaChannel to hold single instance of LLM\n * @export\n * @class VoiceaChannel\n */\nexport class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {\n namespace = VOICEA;\n\n private seqNum: number;\n\n private hasVoiceaJoined: boolean;\n\n private areCaptionsEnabled: boolean;\n\n private hasSubscribedToEvents = false;\n\n private vmcDeviceId?: string;\n\n /**\n * @param {Object} e\n * @returns {undefined}\n */\n\n private eventProcessor = (e) => {\n this.seqNum = e.sequenceNumber + 1;\n switch (e.data.relayType) {\n case VOICEA_RELAY_TYPES.ANNOUNCEMENT:\n this.vmcDeviceId = e.headers.from;\n this.hasVoiceaJoined = true;\n this.processAnnouncementMessage(e.data.voiceaPayload);\n break;\n case VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.data.voiceaPayload);\n break;\n case VOICEA_RELAY_TYPES.TRANSCRIPTION:\n this.processTranscription(e.data.voiceaPayload);\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.llm.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n }\n }\n\n // @ts-ignore\n public deregisterEvents() {\n this.hasVoiceaJoined = false;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n // @ts-ignore\n this.webex.internal.llm.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n }\n\n /**\n * Initializes Voicea plugin\n * @param {any} args\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n this.hasVoiceaJoined = false;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n }\n\n /**\n * Process Transcript and send alert\n * @param {TranscriptionResponse} voiceaPayload\n * @returns {void}\n */\n private processTranscription = (voiceaPayload: TranscriptionResponse): void => {\n switch (voiceaPayload.type) {\n case TRANSCRIPTION_TYPE.TRANSCRIPT_INTERIM_RESULTS:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.NEW_CAPTION,\n {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.NEW_CAPTION,\n {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n transcript: {\n csis: voiceaPayload.csis,\n text: voiceaPayload.transcript.text,\n transcriptLanguageCode: voiceaPayload.transcript.transcript_language_code,\n },\n timestamp: millisToMinutesAndSeconds(voiceaPayload.transcript.end_millis),\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.HIGHLIGHT_CREATED,\n {\n csis: voiceaPayload.highlight.csis,\n highlightId: voiceaPayload.highlight.highlight_id,\n text: voiceaPayload.highlight.transcript,\n highlightLabel: voiceaPayload.highlight.highlight_label,\n highlightSource: voiceaPayload.highlight.highlight_source,\n timestamp: millisToMinutesAndSeconds(voiceaPayload.highlight.end_millis),\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.EVA_COMMAND,\n {\n isListening: false,\n text: voiceaPayload.command_response,\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.EVA_WAKE:\n case TRANSCRIPTION_TYPE.EVA_CANCEL:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.EVA_COMMAND,\n {\n isListening: voiceaPayload.type === TRANSCRIPTION_TYPE.EVA_WAKE,\n }\n );\n break;\n\n default:\n break;\n }\n };\n\n /**\n * Processes Caption Language Response\n * @param {CaptionLanguageResponse} voiceaPayload\n * @returns {void}\n */\n private processCaptionLanguageResponse = (voiceaPayload: CaptionLanguageResponse): void => {\n if (voiceaPayload.statusCode === 200) {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processCaptionLanguageResponse',\n },\n EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE,\n {statusCode: 200}\n );\n } else {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processCaptionLanguageResponse',\n },\n EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE,\n {statusCode: voiceaPayload.errorCode, errorMessage: voiceaPayload.message}\n );\n }\n };\n\n /**\n * processes voicea announcement response and triggers event\n * @param {Object} voiceaPayload\n * @returns {void}\n */\n private processAnnouncementMessage = (voiceaPayload: AnnouncementPayload): void => {\n const voiceaLanguageOptions = {\n captionLanguages: voiceaPayload?.translation?.allowed_languages ?? [],\n maxLanguages: voiceaPayload?.translation?.max_languages ?? 0,\n spokenLanguages: voiceaPayload?.ASR?.spoken_languages ?? [],\n };\n\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processAnnouncementMessage',\n },\n EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT,\n voiceaLanguageOptions\n );\n };\n\n /**\n * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n private sendAnnouncement = (): void => {\n // @ts-ignore\n if (this.hasVoiceaJoined || !this.webex.internal.llm.isConnected()) return;\n\n this.listenToEvents();\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {},\n data: {\n clientPayload: {\n version: 'v2',\n },\n eventType: 'relay.event',\n relayType: VOICEA_RELAY_TYPES.CLIENT_ANNOUNCEMENT,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Set Spoken Language for the meeting\n * @param {string} languageCode\n * @returns {Promise}\n */\n public setSpokenLanguage = (languageCode: string): Promise<void> =>\n // @ts-ignore\n this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n languageCode,\n },\n }).then(() => {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'setSpokenLanguage',\n },\n EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE,\n {languageCode}\n );\n });\n\n /**\n * Request Language translation\n * @param {string} languageCode\n * @returns {void}\n */\n public requestLanguage = (languageCode: string): void => {\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {\n to: this.vmcDeviceId,\n },\n data: {\n clientPayload: {\n translationLanguage: languageCode,\n id: uuid.v4(),\n },\n eventType: 'relay.event',\n relayType: VOICEA_RELAY_TYPES.TRANSLATION_REQUEST,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Turn on Captions\n * @returns {Promise}\n */\n public turnOnCaptions = async (): undefined | Promise<void> => {\n if (this.hasVoiceaJoined && this.areCaptionsEnabled) return undefined;\n // @ts-ignore\n // eslint-disable-next-line newline-before-return\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {caption: true},\n },\n }).then(() => {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'turnOnCaptions',\n },\n EVENT_TRIGGERS.CAPTIONS_TURNED_ON\n );\n this.areCaptionsEnabled = true;\n this.sendAnnouncement();\n });\n };\n\n /**\n * Toggle transcribing for highlights\n * @param {bool} activate if true transcribing is turned on\n * @returns {Promise}\n */\n public toggleTranscribing = async (activate: boolean): undefined | Promise<void> => {\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {transcribing: activate},\n },\n }).then(() => {\n if (activate && !this.areCaptionsEnabled && !this.hasVoiceaJoined) this.turnOnCaptions();\n });\n };\n}\n\nexport default VoiceaChannel;\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  _Object$defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["voicea.types.ts"],"sourcesContent":["/* eslint-disable camelcase */\n/* eslint-disable no-undef */\n\n/**\n * Type for payload\n */\ninterface AnnouncementPayload {\n translation: {\n max_languages: number;\n allowed_languages: string[];\n };\n\n ASR: {\n spoken_languages: string[];\n };\n}\n\n// eslint-disable-next-line no-undef\ntype TRANSCRIPTION_TYPES =\n | 'unknown'\n | 'eva_wake'\n | 'eva_thanks'\n | 'eva_cancel'\n | 'highlight_created'\n | 'transcript_interim_results'\n | 'transcript_final_result';\n\n/**\n * Class for an Transcription Object\n */\ninterface Transcription {\n start_millis: number;\n end_millis: number;\n text: string;\n transcript_language_code: string;\n translations: {[x: string]: string};\n csis: number[];\n last_packet_timestamp_ms: number;\n}\n\n/**\n * Highlights\n */\ninterface Highlight {\n highlight_id: string;\n transcript: string;\n highlight_label: string;\n highlight_source: string;\n start_millis: number;\n end_millis: number;\n csis: number[];\n}\n/**\n * Type for Transcription message\n */\ninterface TranscriptionResponse {\n type: TRANSCRIPTION_TYPES;\n transcript_id: string;\n translations?: {[x: string]: string};\n transcripts?: Transcription[];\n transcript?: Transcription;\n highlight?: Highlight;\n csis: number[];\n data: string;\n command_response: string;\n}\n/**\n * Type for CaptionLanguageResponse\n */\ninterface CaptionLanguageResponse {\n requestId: string;\n statusCode: number;\n errorCode: number;\n message: string;\n}\n\ninterface IVoiceaChannel {\n setSpokenLanguage: (languageCode: string) => Promise<void>;\n requestLanguage: (languageCode: string) => void;\n turnOnCaptions: () => undefined | Promise<void>;\n toggleTranscribing: (activate: boolean) => undefined | Promise<void>;\n deregisterEvents: () => undefined | Promise<void>;\n}\n\nexport {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n Transcription,\n Highlight,\n IVoiceaChannel,\n};\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["voicea.types.ts"],"sourcesContent":["/* eslint-disable camelcase */\n/* eslint-disable no-undef */\n\n/**\n * Type for payload\n */\ninterface AnnouncementPayload {\n translation: {\n max_languages: number;\n allowed_languages: string[];\n };\n\n ASR: {\n spoken_languages: string[];\n };\n}\n\n// eslint-disable-next-line no-undef\ntype TRANSCRIPTION_TYPES =\n | 'unknown'\n | 'eva_wake'\n | 'eva_thanks'\n | 'eva_cancel'\n | 'highlight_created'\n | 'transcript_interim_results'\n | 'transcript_final_result';\n\n/**\n * Class for an Transcription Object\n */\ninterface Transcription {\n start_millis: number;\n end_millis: number;\n text: string;\n transcript_language_code: string;\n translations: {[x: string]: string};\n csis: number[];\n last_packet_timestamp_ms: number;\n}\n\n/**\n * Highlights\n */\ninterface Highlight {\n highlight_id: string;\n transcript: string;\n highlight_label: string;\n highlight_source: string;\n start_millis: number;\n end_millis: number;\n csis: number[];\n}\n/**\n * Type for Transcription message\n */\ninterface TranscriptionResponse {\n type: TRANSCRIPTION_TYPES;\n transcript_id: string;\n translations?: {[x: string]: string};\n transcripts?: Transcription[];\n transcript?: Transcription;\n highlight?: Highlight;\n csis: number[];\n data: string;\n command_response: string;\n}\n/**\n * Type for CaptionLanguageResponse\n */\ninterface CaptionLanguageResponse {\n requestId: string;\n statusCode: number;\n errorCode: number;\n message: string;\n}\n\ninterface IVoiceaChannel {\n setSpokenLanguage: (languageCode: string) => Promise<void>;\n requestLanguage: (languageCode: string) => void;\n turnOnCaptions: () => undefined | Promise<void>;\n toggleTranscribing: (activate: boolean) => undefined | Promise<void>;\n deregisterEvents: () => undefined | Promise<void>;\n}\n\nexport type {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n Transcription,\n Highlight,\n IVoiceaChannel,\n};\n"],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/internal-plugin-voicea",
3
- "version": "3.0.0-beta.9",
3
+ "version": "3.0.0-beta.90",
4
4
  "description": "",
5
5
  "license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
6
6
  "main": "dist/index.js",
@@ -14,11 +14,11 @@
14
14
  "node": ">=16"
15
15
  },
16
16
  "dependencies": {
17
- "@webex/internal-plugin-llm": "3.0.0-beta.9",
18
- "@webex/internal-plugin-mercury": "3.0.0-beta.9",
19
- "@webex/internal-plugin-voicea": "3.0.0-beta.9",
20
- "@webex/plugin-meetings": "3.0.0-beta.9",
21
- "@webex/webex-core": "3.0.0-beta.9",
17
+ "@webex/internal-plugin-llm": "3.0.0-beta.90",
18
+ "@webex/internal-plugin-mercury": "3.0.0-beta.90",
19
+ "@webex/internal-plugin-voicea": "3.0.0-beta.90",
20
+ "@webex/plugin-meetings": "3.0.0-beta.90",
21
+ "@webex/webex-core": "3.0.0-beta.90",
22
22
  "uuid": "^3.3.2"
23
23
  },
24
24
  "browserify": {
@@ -28,9 +28,9 @@
28
28
  ]
29
29
  },
30
30
  "devDependencies": {
31
- "@webex/test-helper-chai": "3.0.0-beta.9",
32
- "@webex/test-helper-mock-web-socket": "3.0.0-beta.9",
33
- "@webex/test-helper-mock-webex": "3.0.0-beta.9",
31
+ "@webex/test-helper-chai": "3.0.0-beta.90",
32
+ "@webex/test-helper-mock-web-socket": "3.0.0-beta.90",
33
+ "@webex/test-helper-mock-webex": "3.0.0-beta.90",
34
34
  "sinon": "^9.2.4"
35
35
  }
36
36
  }
package/src/constants.ts CHANGED
@@ -8,7 +8,7 @@ export const EVENT_TRIGGERS = {
8
8
 
9
9
  NEW_CAPTION: 'voicea:newCaption',
10
10
  EVA_COMMAND: 'voicea:wxa',
11
- HIGHLIGHT_CREATED: 'voicea:highlightCreated'
11
+ HIGHLIGHT_CREATED: 'voicea:highlightCreated',
12
12
  };
13
13
 
14
14
  export const VOICEA_RELAY_TYPES = {
@@ -16,7 +16,7 @@ export const VOICEA_RELAY_TYPES = {
16
16
  CLIENT_ANNOUNCEMENT: 'client.annc',
17
17
  TRANSLATION_REQUEST: 'voicea.transl.req',
18
18
  TRANSLATION_RESPONSE: 'voicea.transl.rsp',
19
- TRANSCRIPTION: 'voicea.transcription'
19
+ TRANSCRIPTION: 'voicea.transcription',
20
20
  };
21
21
 
22
22
  export const TRANSCRIPTION_TYPE = {
@@ -26,7 +26,7 @@ export const TRANSCRIPTION_TYPE = {
26
26
  EVA_CANCEL: 'eva_cancel',
27
27
  HIGHLIGHT_CREATED: 'highlight_created',
28
28
  TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',
29
- TRANSCRIPT_FINAL_RESULT: 'transcript_final_result'
29
+ TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',
30
30
  };
31
31
 
32
32
  export const VOICEA = 'voicea';
package/src/utils.ts CHANGED
@@ -3,6 +3,5 @@ export const millisToMinutesAndSeconds = (millis: number) => {
3
3
  const minutes = Math.floor(millis / 60000);
4
4
  const seconds = ((millis % 60000) / 1000).toFixed(0);
5
5
 
6
- return `${minutes}:${+(seconds) < 10 ? '0' : ''}${seconds}`;
6
+ return `${minutes}:${+seconds < 10 ? '0' : ''}${seconds}`;
7
7
  };
8
-
package/src/voicea.ts CHANGED
@@ -13,7 +13,9 @@ import {
13
13
  import {millisToMinutesAndSeconds} from './utils';
14
14
 
15
15
  /**
16
- * VoiceaChannel to hold single instance of LLM
16
+ * @description VoiceaChannel to hold single instance of LLM
17
+ * @export
18
+ * @class VoiceaChannel
17
19
  */
18
20
  export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
19
21
  namespace = VOICEA;
@@ -24,12 +26,16 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
24
26
 
25
27
  private areCaptionsEnabled: boolean;
26
28
 
27
- private hasSubscribedToEvents: boolean = false;
29
+ private hasSubscribedToEvents = false;
28
30
 
29
31
  private vmcDeviceId?: string;
30
32
 
33
+ /**
34
+ * @param {Object} e
35
+ * @returns {undefined}
36
+ */
37
+
31
38
  private eventProcessor = (e) => {
32
- e;
33
39
  this.seqNum = e.sequenceNumber + 1;
34
40
  switch (e.data.relayType) {
35
41
  case VOICEA_RELAY_TYPES.ANNOUNCEMENT:
@@ -47,20 +53,25 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
47
53
  break;
48
54
  }
49
55
  };
56
+
50
57
  /**
51
58
  * Listen to websocket messages
59
+ * @returns {undefined}
52
60
  */
53
61
  private listenToEvents() {
54
62
  if (!this.hasSubscribedToEvents) {
63
+ // @ts-ignore
55
64
  this.webex.internal.llm.on('event:relay.event', this.eventProcessor);
56
65
  this.hasSubscribedToEvents = true;
57
66
  }
58
67
  }
59
68
 
69
+ // @ts-ignore
60
70
  public deregisterEvents() {
61
71
  this.hasVoiceaJoined = false;
62
72
  this.areCaptionsEnabled = false;
63
73
  this.vmcDeviceId = undefined;
74
+ // @ts-ignore
64
75
  this.webex.internal.llm.off('event:relay.event', this.eventProcessor);
65
76
  this.hasSubscribedToEvents = false;
66
77
  }
@@ -232,14 +243,16 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
232
243
  * @returns {void}
233
244
  */
234
245
  private sendAnnouncement = (): void => {
246
+ // @ts-ignore
235
247
  if (this.hasVoiceaJoined || !this.webex.internal.llm.isConnected()) return;
236
248
 
237
249
  this.listenToEvents();
238
-
250
+ // @ts-ignore
239
251
  this.webex.internal.llm.socket.send({
240
252
  id: `${this.seqNum}`,
241
253
  type: 'publishRequest',
242
254
  recipients: {
255
+ // @ts-ignore
243
256
  route: this.webex.internal.llm.getBinding(),
244
257
  },
245
258
  headers: {},
@@ -261,8 +274,10 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
261
274
  * @returns {Promise}
262
275
  */
263
276
  public setSpokenLanguage = (languageCode: string): Promise<void> =>
277
+ // @ts-ignore
264
278
  this.request({
265
279
  method: 'PUT',
280
+ // @ts-ignore
266
281
  url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,
267
282
  body: {
268
283
  languageCode,
@@ -285,11 +300,14 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
285
300
  * @returns {void}
286
301
  */
287
302
  public requestLanguage = (languageCode: string): void => {
303
+ // @ts-ignore
288
304
  if (!this.webex.internal.llm.isConnected()) return;
305
+ // @ts-ignore
289
306
  this.webex.internal.llm.socket.send({
290
307
  id: `${this.seqNum}`,
291
308
  type: 'publishRequest',
292
309
  recipients: {
310
+ // @ts-ignore
293
311
  route: this.webex.internal.llm.getBinding(),
294
312
  },
295
313
  headers: {
@@ -314,9 +332,11 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
314
332
  */
315
333
  public turnOnCaptions = async (): undefined | Promise<void> => {
316
334
  if (this.hasVoiceaJoined && this.areCaptionsEnabled) return undefined;
317
-
335
+ // @ts-ignore
336
+ // eslint-disable-next-line newline-before-return
318
337
  return this.request({
319
338
  method: 'PUT',
339
+ // @ts-ignore
320
340
  url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,
321
341
  body: {
322
342
  transcribe: {caption: true},
@@ -341,8 +361,10 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
341
361
  * @returns {Promise}
342
362
  */
343
363
  public toggleTranscribing = async (activate: boolean): undefined | Promise<void> => {
364
+ // @ts-ignore
344
365
  return this.request({
345
366
  method: 'PUT',
367
+ // @ts-ignore
346
368
  url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,
347
369
  body: {
348
370
  transcribe: {transcribing: activate},
@@ -82,7 +82,7 @@ interface IVoiceaChannel {
82
82
  deregisterEvents: () => undefined | Promise<void>;
83
83
  }
84
84
 
85
- export {
85
+ export type {
86
86
  AnnouncementPayload,
87
87
  CaptionLanguageResponse,
88
88
  TranscriptionResponse,