@webex/internal-plugin-voicea 3.0.0-beta.8 → 3.0.0-beta.81

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,61 +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.
41
- * Triggers voicea:transcribingOn / voicea:transcribingOff
42
-
38
+ - Enable/Disable Transcribing in a meeting
39
+ - Automatically activates Closed Captions(CC) if enabled.
40
+
43
41
  ```js
44
42
  await webex.internal.voicea.toggleTranscribing(true);
45
43
  await webex.internal.voicea.toggleTranscribing(false);
46
44
  ```
47
45
 
48
-
49
46
  Toggle Captions
50
47
 
51
- * Enable Captioning in a meeting
52
- * Closed Caption cannot be turned off in a meeting
53
- * Triggers voicea:captionOn
54
-
48
+ - Enable Captioning in a meeting
49
+ - Closed Caption cannot be turned off in a meeting
50
+ - Triggers voicea:captionOn
51
+
55
52
  ```js
56
53
  await webex.internal.voicea.toggleTranscribing(true);
57
54
  await webex.internal.voicea.toggleTranscribing(false);
58
55
  ```
59
56
 
60
57
  Set Spoken Language
61
- * Host can set the spoken language of the meeting
62
- * Triggers voicea:spokenLanguageSet
58
+
59
+ - Host can set the spoken language of the meeting
60
+ - Triggers voicea:spokenLanguageSet
61
+
63
62
  ```js
64
63
  webex.internal.voicea.setSpokenLanguage('en');
65
64
  ```
66
65
 
67
66
  Set Caption Language
68
- * Anyone can request caption languages for the meeting
67
+
68
+ - Anyone can request caption languages for the meeting
69
+
69
70
  ```js
70
71
  webex.internal.voicea.requestLanguage('en');
71
72
  ```
72
73
 
73
74
  Other Triggers:
74
- * voicea:announcement - Triggered when voicea has
75
- joined the meeting
76
- * voicea:captionLanguageUpdate - Triggered when a response for requesting caption language is recieved.
77
- * voicea:newCaption - Returns a caption sent by voicea
78
- * voicea:wxa - Triggers whenever WXA is listening or finished listening, along with any action taken
79
- * 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
+
80
83
  ## Maintainers
81
84
 
82
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,101 +1,67 @@
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);
71
47
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hasVoiceaJoined", void 0);
72
48
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "areCaptionsEnabled", void 0);
73
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isTranscribingEnabled", void 0);
74
49
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hasSubscribedToEvents", false);
75
50
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "vmcDeviceId", void 0);
76
51
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "eventProcessor", function (e) {
77
- e;
78
52
  _this.seqNum = e.sequenceNumber + 1;
79
-
80
53
  switch (e.data.relayType) {
81
54
  case _constants.VOICEA_RELAY_TYPES.ANNOUNCEMENT:
82
55
  _this.vmcDeviceId = e.headers.from;
83
56
  _this.hasVoiceaJoined = true;
84
-
85
57
  _this.processAnnouncementMessage(e.data.voiceaPayload);
86
-
87
58
  break;
88
-
89
59
  case _constants.VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:
90
60
  _this.processCaptionLanguageResponse(e.data.voiceaPayload);
91
-
92
61
  break;
93
-
94
62
  case _constants.VOICEA_RELAY_TYPES.TRANSCRIPTION:
95
63
  _this.processTranscription(e.data.voiceaPayload);
96
-
97
64
  break;
98
-
99
65
  default:
100
66
  break;
101
67
  }
@@ -111,9 +77,7 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
111
77
  transcriptId: voiceaPayload.transcript_id,
112
78
  transcripts: voiceaPayload.transcripts
113
79
  });
114
-
115
80
  break;
116
-
117
81
  case _constants.TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:
118
82
  _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
119
83
  file: 'voicea',
@@ -128,9 +92,7 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
128
92
  },
129
93
  timestamp: (0, _utils.millisToMinutesAndSeconds)(voiceaPayload.transcript.end_millis)
130
94
  });
131
-
132
95
  break;
133
-
134
96
  case _constants.TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:
135
97
  _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
136
98
  file: 'voicea',
@@ -143,9 +105,7 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
143
105
  highlightSource: voiceaPayload.highlight.highlight_source,
144
106
  timestamp: (0, _utils.millisToMinutesAndSeconds)(voiceaPayload.highlight.end_millis)
145
107
  });
146
-
147
108
  break;
148
-
149
109
  case _constants.TRANSCRIPTION_TYPE.EVA_THANKS:
150
110
  _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
151
111
  file: 'voicea',
@@ -154,9 +114,7 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
154
114
  isListening: false,
155
115
  text: voiceaPayload.command_response
156
116
  });
157
-
158
117
  break;
159
-
160
118
  case _constants.TRANSCRIPTION_TYPE.EVA_WAKE:
161
119
  case _constants.TRANSCRIPTION_TYPE.EVA_CANCEL:
162
120
  _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
@@ -165,9 +123,7 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
165
123
  }, _constants.EVENT_TRIGGERS.EVA_COMMAND, {
166
124
  isListening: voiceaPayload.type === _constants.TRANSCRIPTION_TYPE.EVA_WAKE
167
125
  });
168
-
169
126
  break;
170
-
171
127
  default:
172
128
  break;
173
129
  }
@@ -192,27 +148,26 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
192
148
  });
193
149
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "processAnnouncementMessage", function (voiceaPayload) {
194
150
  var _voiceaPayload$transl, _voiceaPayload$transl2, _voiceaPayload$transl3, _voiceaPayload$transl4, _voiceaPayload$ASR$sp, _voiceaPayload$ASR;
195
-
196
151
  var voiceaLanguageOptions = {
197
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 : [],
198
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,
199
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 : []
200
155
  };
201
-
202
156
  _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
203
157
  file: 'voicea',
204
158
  function: 'processAnnouncementMessage'
205
159
  }, _constants.EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);
206
160
  });
207
161
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sendAnnouncement", function () {
162
+ // @ts-ignore
208
163
  if (_this.hasVoiceaJoined || !_this.webex.internal.llm.isConnected()) return;
209
-
210
164
  _this.listenToEvents();
211
-
165
+ // @ts-ignore
212
166
  _this.webex.internal.llm.socket.send({
213
167
  id: "".concat(_this.seqNum),
214
168
  type: 'publishRequest',
215
169
  recipients: {
170
+ // @ts-ignore
216
171
  route: _this.webex.internal.llm.getBinding()
217
172
  },
218
173
  headers: {},
@@ -225,32 +180,37 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
225
180
  },
226
181
  trackingId: "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString())
227
182
  });
228
-
229
183
  _this.seqNum += 1;
230
184
  });
231
185
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "setSpokenLanguage", function (languageCode) {
232
- return _this.request({
233
- method: 'PUT',
234
- url: "".concat(_this.webex.internal.llm.getLocusUrl(), "/controls/"),
235
- body: {
236
- languageCode: languageCode
237
- }
238
- }).then(function () {
239
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
240
- file: 'voicea',
241
- function: 'setSpokenLanguage'
242
- }, _constants.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {
243
- languageCode: languageCode
244
- });
245
- });
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
+ );
246
204
  });
247
205
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "requestLanguage", function (languageCode) {
206
+ // @ts-ignore
248
207
  if (!_this.webex.internal.llm.isConnected()) return;
249
-
208
+ // @ts-ignore
250
209
  _this.webex.internal.llm.socket.send({
251
210
  id: "".concat(_this.seqNum),
252
211
  type: 'publishRequest',
253
212
  recipients: {
213
+ // @ts-ignore
254
214
  route: _this.webex.internal.llm.getBinding()
255
215
  },
256
216
  headers: {
@@ -266,88 +226,64 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
266
226
  },
267
227
  trackingId: "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString())
268
228
  });
269
-
270
229
  _this.seqNum += 1;
271
230
  });
272
231
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "turnOnCaptions", /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
273
232
  return _regenerator.default.wrap(function _callee$(_context) {
274
- while (1) {
275
- switch (_context.prev = _context.next) {
276
- case 0:
277
- if (!(_this.hasVoiceaJoined && _this.areCaptionsEnabled)) {
278
- _context.next = 2;
279
- 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
+ }
280
249
  }
281
-
282
- return _context.abrupt("return", undefined);
283
-
284
- case 2:
285
- 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({
286
270
  method: 'PUT',
271
+ // @ts-ignore
287
272
  url: "".concat(_this.webex.internal.llm.getLocusUrl(), "/controls/"),
288
273
  body: {
289
274
  transcribe: {
290
- caption: true
275
+ transcribing: activate
291
276
  }
292
277
  }
293
278
  }).then(function () {
294
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
295
- file: 'voicea',
296
- function: 'turnOnCaptions'
297
- }, _constants.EVENT_TRIGGERS.CAPTIONS_TURNED_ON);
298
-
299
- _this.areCaptionsEnabled = true;
300
-
301
- _this.sendAnnouncement();
279
+ if (activate && !_this.areCaptionsEnabled && !_this.hasVoiceaJoined) _this.turnOnCaptions();
302
280
  }));
303
-
304
- case 3:
281
+ case 1:
305
282
  case "end":
306
- return _context.stop();
307
- }
308
- }
309
- }, _callee);
310
- })));
311
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "toggleTranscribing", /*#__PURE__*/function () {
312
- var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(activate) {
313
- return _regenerator.default.wrap(function _callee2$(_context2) {
314
- while (1) {
315
- switch (_context2.prev = _context2.next) {
316
- case 0:
317
- if (!(_this.isTranscribingEnabled === activate)) {
318
- _context2.next = 2;
319
- break;
320
- }
321
-
322
- return _context2.abrupt("return", undefined);
323
-
324
- case 2:
325
- return _context2.abrupt("return", _this.request({
326
- method: 'PUT',
327
- url: "".concat(_this.webex.internal.llm.getLocusUrl(), "/controls/"),
328
- body: {
329
- transcribe: {
330
- transcribing: activate
331
- }
332
- }
333
- }).then(function () {
334
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
335
- file: 'voicea',
336
- function: 'toggleTranscribing'
337
- }, activate ? _constants.EVENT_TRIGGERS.TRANSCRIBING_ON : _constants.EVENT_TRIGGERS.TRANSCRIBING_OFF);
338
-
339
- _this.isTranscribingEnabled = activate;
340
- if (activate && !_this.areCaptionsEnabled && !_this.hasVoiceaJoined) _this.turnOnCaptions();
341
- }));
342
-
343
- case 3:
344
- case "end":
345
- return _context2.stop();
346
- }
283
+ return _context2.stop();
347
284
  }
348
285
  }, _callee2);
349
286
  }));
350
-
351
287
  return function (_x) {
352
288
  return _ref2.apply(this, arguments);
353
289
  };
@@ -355,43 +291,49 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
355
291
  _this.seqNum = 1;
356
292
  _this.hasVoiceaJoined = false;
357
293
  _this.areCaptionsEnabled = false;
358
- _this.isTranscribingEnabled = false;
359
294
  _this.vmcDeviceId = undefined;
360
295
  return _this;
361
296
  }
297
+
362
298
  /**
363
299
  * Process Transcript and send alert
364
300
  * @param {TranscriptionResponse} voiceaPayload
365
301
  * @returns {void}
366
302
  */
367
-
368
-
369
303
  (0, _createClass2.default)(VoiceaChannel, [{
370
304
  key: "listenToEvents",
371
305
  value:
306
+ /**
307
+ * @param {Object} e
308
+ * @returns {undefined}
309
+ */
310
+
372
311
  /**
373
312
  * Listen to websocket messages
313
+ * @returns {undefined}
374
314
  */
375
315
  function listenToEvents() {
376
316
  if (!this.hasSubscribedToEvents) {
317
+ // @ts-ignore
377
318
  this.webex.internal.llm.on('event:relay.event', this.eventProcessor);
378
319
  this.hasSubscribedToEvents = true;
379
320
  }
380
321
  }
322
+
323
+ // @ts-ignore
381
324
  }, {
382
325
  key: "deregisterEvents",
383
326
  value: function deregisterEvents() {
384
327
  this.hasVoiceaJoined = false;
385
328
  this.areCaptionsEnabled = false;
386
- this.isTranscribingEnabled = false;
387
329
  this.vmcDeviceId = undefined;
330
+ // @ts-ignore
388
331
  this.webex.internal.llm.off('event:relay.event', this.eventProcessor);
389
332
  this.hasSubscribedToEvents = false;
390
333
  }
391
334
  }]);
392
335
  return VoiceaChannel;
393
336
  }(_webexCore.WebexPlugin);
394
-
395
337
  exports.VoiceaChannel = VoiceaChannel;
396
338
  var _default = VoiceaChannel;
397
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","isTranscribingEnabled","transcribing","TRANSCRIBING_ON","TRANSCRIBING_OFF","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 isTranscribingEnabled: 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.isTranscribingEnabled = 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.isTranscribingEnabled = 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 if (this.isTranscribingEnabled === activate) return undefined;\n\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 Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'toggleTranscribing',\n },\n activate ? EVENT_TRIGGERS.TRANSCRIBING_ON : EVENT_TRIGGERS.TRANSCRIBING_OFF\n );\n this.isTranscribingEnabled = activate;\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.8",
3
+ "version": "3.0.0-beta.81",
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.8",
18
- "@webex/internal-plugin-mercury": "3.0.0-beta.8",
19
- "@webex/internal-plugin-voicea": "3.0.0-beta.8",
20
- "@webex/plugin-meetings": "3.0.0-beta.8",
21
- "@webex/webex-core": "3.0.0-beta.8",
17
+ "@webex/internal-plugin-llm": "3.0.0-beta.81",
18
+ "@webex/internal-plugin-mercury": "3.0.0-beta.81",
19
+ "@webex/internal-plugin-voicea": "3.0.0-beta.81",
20
+ "@webex/plugin-meetings": "3.0.0-beta.81",
21
+ "@webex/webex-core": "3.0.0-beta.81",
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.8",
32
- "@webex/test-helper-mock-web-socket": "3.0.0-beta.8",
33
- "@webex/test-helper-mock-webex": "3.0.0-beta.8",
31
+ "@webex/test-helper-chai": "3.0.0-beta.81",
32
+ "@webex/test-helper-mock-web-socket": "3.0.0-beta.81",
33
+ "@webex/test-helper-mock-webex": "3.0.0-beta.81",
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,14 +26,16 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
24
26
 
25
27
  private areCaptionsEnabled: boolean;
26
28
 
27
- private isTranscribingEnabled: boolean;
28
-
29
- private hasSubscribedToEvents: boolean = false;
29
+ private hasSubscribedToEvents = false;
30
30
 
31
31
  private vmcDeviceId?: string;
32
32
 
33
+ /**
34
+ * @param {Object} e
35
+ * @returns {undefined}
36
+ */
37
+
33
38
  private eventProcessor = (e) => {
34
- e;
35
39
  this.seqNum = e.sequenceNumber + 1;
36
40
  switch (e.data.relayType) {
37
41
  case VOICEA_RELAY_TYPES.ANNOUNCEMENT:
@@ -49,21 +53,25 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
49
53
  break;
50
54
  }
51
55
  };
56
+
52
57
  /**
53
58
  * Listen to websocket messages
59
+ * @returns {undefined}
54
60
  */
55
61
  private listenToEvents() {
56
62
  if (!this.hasSubscribedToEvents) {
63
+ // @ts-ignore
57
64
  this.webex.internal.llm.on('event:relay.event', this.eventProcessor);
58
65
  this.hasSubscribedToEvents = true;
59
66
  }
60
67
  }
61
68
 
69
+ // @ts-ignore
62
70
  public deregisterEvents() {
63
71
  this.hasVoiceaJoined = false;
64
72
  this.areCaptionsEnabled = false;
65
- this.isTranscribingEnabled = false;
66
73
  this.vmcDeviceId = undefined;
74
+ // @ts-ignore
67
75
  this.webex.internal.llm.off('event:relay.event', this.eventProcessor);
68
76
  this.hasSubscribedToEvents = false;
69
77
  }
@@ -77,7 +85,6 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
77
85
  this.seqNum = 1;
78
86
  this.hasVoiceaJoined = false;
79
87
  this.areCaptionsEnabled = false;
80
- this.isTranscribingEnabled = false;
81
88
  this.vmcDeviceId = undefined;
82
89
  }
83
90
 
@@ -236,14 +243,16 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
236
243
  * @returns {void}
237
244
  */
238
245
  private sendAnnouncement = (): void => {
246
+ // @ts-ignore
239
247
  if (this.hasVoiceaJoined || !this.webex.internal.llm.isConnected()) return;
240
248
 
241
249
  this.listenToEvents();
242
-
250
+ // @ts-ignore
243
251
  this.webex.internal.llm.socket.send({
244
252
  id: `${this.seqNum}`,
245
253
  type: 'publishRequest',
246
254
  recipients: {
255
+ // @ts-ignore
247
256
  route: this.webex.internal.llm.getBinding(),
248
257
  },
249
258
  headers: {},
@@ -265,8 +274,10 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
265
274
  * @returns {Promise}
266
275
  */
267
276
  public setSpokenLanguage = (languageCode: string): Promise<void> =>
277
+ // @ts-ignore
268
278
  this.request({
269
279
  method: 'PUT',
280
+ // @ts-ignore
270
281
  url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,
271
282
  body: {
272
283
  languageCode,
@@ -289,11 +300,14 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
289
300
  * @returns {void}
290
301
  */
291
302
  public requestLanguage = (languageCode: string): void => {
303
+ // @ts-ignore
292
304
  if (!this.webex.internal.llm.isConnected()) return;
305
+ // @ts-ignore
293
306
  this.webex.internal.llm.socket.send({
294
307
  id: `${this.seqNum}`,
295
308
  type: 'publishRequest',
296
309
  recipients: {
310
+ // @ts-ignore
297
311
  route: this.webex.internal.llm.getBinding(),
298
312
  },
299
313
  headers: {
@@ -318,9 +332,11 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
318
332
  */
319
333
  public turnOnCaptions = async (): undefined | Promise<void> => {
320
334
  if (this.hasVoiceaJoined && this.areCaptionsEnabled) return undefined;
321
-
335
+ // @ts-ignore
336
+ // eslint-disable-next-line newline-before-return
322
337
  return this.request({
323
338
  method: 'PUT',
339
+ // @ts-ignore
324
340
  url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,
325
341
  body: {
326
342
  transcribe: {caption: true},
@@ -345,24 +361,15 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
345
361
  * @returns {Promise}
346
362
  */
347
363
  public toggleTranscribing = async (activate: boolean): undefined | Promise<void> => {
348
- if (this.isTranscribingEnabled === activate) return undefined;
349
-
364
+ // @ts-ignore
350
365
  return this.request({
351
366
  method: 'PUT',
367
+ // @ts-ignore
352
368
  url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,
353
369
  body: {
354
370
  transcribe: {transcribing: activate},
355
371
  },
356
372
  }).then(() => {
357
- Trigger.trigger(
358
- this,
359
- {
360
- file: 'voicea',
361
- function: 'toggleTranscribing',
362
- },
363
- activate ? EVENT_TRIGGERS.TRANSCRIBING_ON : EVENT_TRIGGERS.TRANSCRIBING_OFF
364
- );
365
- this.isTranscribingEnabled = activate;
366
373
  if (activate && !this.areCaptionsEnabled && !this.hasVoiceaJoined) this.turnOnCaptions();
367
374
  });
368
375
  };
@@ -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,
@@ -100,13 +100,11 @@ describe('plugin-voicea', () => {
100
100
 
101
101
  assert.equal(voiceaService.hasVoiceaJoined, true);
102
102
  assert.equal(voiceaService.areCaptionsEnabled, true);
103
- assert.equal(voiceaService.isTranscribingEnabled, true);
104
103
  assert.equal(voiceaService.vmcDeviceId, 'ws');
105
104
 
106
105
  voiceaService.deregisterEvents();
107
106
  assert.equal(voiceaService.hasVoiceaJoined, false);
108
107
  assert.equal(voiceaService.areCaptionsEnabled, false);
109
- assert.equal(voiceaService.isTranscribingEnabled, false);
110
108
  assert.equal(voiceaService.vmcDeviceId, undefined);
111
109
  });
112
110
  });
@@ -263,9 +261,6 @@ describe('plugin-voicea', () => {
263
261
  data: {relayType: 'voicea.annc', voiceaPayload: {}},
264
262
  });
265
263
 
266
- const triggerSpy = sinon.spy();
267
-
268
- voiceaService.on(EVENT_TRIGGERS.TRANSCRIBING_ON, triggerSpy);
269
264
  voiceaService.listenToEvents();
270
265
 
271
266
  await voiceaService.toggleTranscribing(true);
@@ -278,16 +273,12 @@ describe('plugin-voicea', () => {
278
273
  })
279
274
  );
280
275
 
281
- assert.calledOnce(triggerSpy);
282
276
  assert.notCalled(announcementSpy);
283
277
  });
284
278
 
285
279
  it('turns on transcribing with CC disabled', async () => {
286
280
  const announcementSpy = sinon.spy(voiceaService, 'sendAnnouncement');
287
281
 
288
- const triggerSpy = sinon.spy();
289
-
290
- voiceaService.on(EVENT_TRIGGERS.TRANSCRIBING_ON, triggerSpy);
291
282
  voiceaService.listenToEvents();
292
283
 
293
284
  await voiceaService.toggleTranscribing(true);
@@ -300,7 +291,6 @@ describe('plugin-voicea', () => {
300
291
  })
301
292
  );
302
293
 
303
- assert.calledOnce(triggerSpy);
304
294
  assert.calledOnce(announcementSpy);
305
295
  });
306
296
 
@@ -309,9 +299,6 @@ describe('plugin-voicea', () => {
309
299
 
310
300
  const announcementSpy = sinon.spy(voiceaService, 'sendAnnouncement');
311
301
 
312
- const triggerSpy = sinon.spy();
313
-
314
- voiceaService.on(EVENT_TRIGGERS.TRANSCRIBING_OFF, triggerSpy);
315
302
  voiceaService.listenToEvents();
316
303
 
317
304
  await voiceaService.toggleTranscribing(false);
@@ -324,24 +311,8 @@ describe('plugin-voicea', () => {
324
311
  })
325
312
  );
326
313
 
327
- assert.calledOnce(triggerSpy);
328
314
  assert.notCalled(announcementSpy);
329
315
  });
330
-
331
- it("doesn't call API on same value", async () => {
332
- await voiceaService.toggleTranscribing(true);
333
- const triggerSpy = sinon.spy();
334
- const announcementSpy = sinon.spy(voiceaService, 'sendAnnouncement');
335
-
336
- voiceaService.on(EVENT_TRIGGERS.TRANSCRIBING_OFF, triggerSpy);
337
-
338
- await voiceaService.toggleTranscribing(true);
339
-
340
- assert.notCalled(triggerSpy);
341
- assert.notCalled(announcementSpy);
342
-
343
- assert.calledTwice(voiceaService.request);
344
- });
345
316
  });
346
317
 
347
318
  describe('#processCaptionLanguageResponse', () => {