@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 +24 -19
- package/dist/constants.js +0 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.js +0 -11
- package/dist/index.js.map +1 -1
- package/dist/utils.js +0 -4
- package/dist/utils.js.map +1 -1
- package/dist/voicea.js +79 -120
- package/dist/voicea.js.map +1 -1
- package/dist/voicea.types.js +0 -1
- package/dist/voicea.types.js.map +1 -1
- package/package.json +9 -9
- package/src/constants.ts +3 -3
- package/src/utils.ts +1 -2
- package/src/voicea.ts +27 -5
- package/src/voicea.types.ts +1 -1
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
|
-
|
|
40
|
-
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
60
|
-
|
|
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
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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',
|
package/dist/constants.js.map
CHANGED
|
@@ -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'
|
|
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":"
|
|
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}:${+
|
|
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
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
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
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
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
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
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
|
-
|
|
275
|
+
transcribing: activate
|
|
290
276
|
}
|
|
291
277
|
}
|
|
292
278
|
}).then(function () {
|
|
293
|
-
|
|
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
|
|
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;
|
package/dist/voicea.js.map
CHANGED
|
@@ -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":";;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AAEA;AAQA;AAAkD;AAAA;AAElD;AACA;AACA;AACA;AACA;AAJA,IAKaA,aAAa;EAAA;EAAA;EA2DxB;AACF;AACA;AACA;EACE,yBAAqB;IAAA;IAAA;IAAA,kCAANC,IAAI;MAAJA,IAAI;IAAA;IACjB,gDAASA,IAAI;IAAE,wFA/DLC,iBAAM;IAAA;IAAA;IAAA;IAAA,oGAQc,KAAK;IAAA;IAAA,6FASZ,UAACC,CAAC,EAAK;MAC9B,MAAKC,MAAM,GAAGD,CAAC,CAACE,cAAc,GAAG,CAAC;MAClC,QAAQF,CAAC,CAACG,IAAI,CAACC,SAAS;QACtB,KAAKC,6BAAkB,CAACC,YAAY;UAClC,MAAKC,WAAW,GAAGP,CAAC,CAACQ,OAAO,CAACC,IAAI;UACjC,MAAKC,eAAe,GAAG,IAAI;UAC3B,MAAKC,0BAA0B,CAACX,CAAC,CAACG,IAAI,CAACS,aAAa,CAAC;UACrD;QACF,KAAKP,6BAAkB,CAACQ,oBAAoB;UAC1C,MAAKC,8BAA8B,CAACd,CAAC,CAACG,IAAI,CAACS,aAAa,CAAC;UACzD;QACF,KAAKP,6BAAkB,CAACU,aAAa;UACnC,MAAKC,oBAAoB,CAAChB,CAAC,CAACG,IAAI,CAACS,aAAa,CAAC;UAC/C;QACF;UACE;MAAM;IAEZ,CAAC;IAAA,mGAyC8B,UAACA,aAAoC,EAAW;MAC7E,QAAQA,aAAa,CAACK,IAAI;QACxB,KAAKC,6BAAkB,CAACC,0BAA0B;UAChDC,4BAAO,CAACC,OAAO,8CAEb;YACEC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACC,WAAW,EAC1B;YACEC,OAAO,EAAE,KAAK;YACdC,YAAY,EAAEf,aAAa,CAACgB,aAAa;YACzCC,WAAW,EAAEjB,aAAa,CAACiB;UAC7B,CAAC,CACF;UACD;QAEF,KAAKX,6BAAkB,CAACY,uBAAuB;UAC7CV,4BAAO,CAACC,OAAO,8CAEb;YACEC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACC,WAAW,EAC1B;YACEC,OAAO,EAAE,IAAI;YACbC,YAAY,EAAEf,aAAa,CAACgB,aAAa;YACzCG,UAAU,EAAE;cACVC,IAAI,EAAEpB,aAAa,CAACoB,IAAI;cACxBC,IAAI,EAAErB,aAAa,CAACmB,UAAU,CAACE,IAAI;cACnCC,sBAAsB,EAAEtB,aAAa,CAACmB,UAAU,CAACI;YACnD,CAAC;YACDC,SAAS,EAAE,IAAAC,gCAAyB,EAACzB,aAAa,CAACmB,UAAU,CAACO,UAAU;UAC1E,CAAC,CACF;UACD;QAEF,KAAKpB,6BAAkB,CAACqB,iBAAiB;UACvCnB,4BAAO,CAACC,OAAO,8CAEb;YACEC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACe,iBAAiB,EAChC;YACEP,IAAI,EAAEpB,aAAa,CAAC4B,SAAS,CAACR,IAAI;YAClCS,WAAW,EAAE7B,aAAa,CAAC4B,SAAS,CAACE,YAAY;YACjDT,IAAI,EAAErB,aAAa,CAAC4B,SAAS,CAACT,UAAU;YACxCY,cAAc,EAAE/B,aAAa,CAAC4B,SAAS,CAACI,eAAe;YACvDC,eAAe,EAAEjC,aAAa,CAAC4B,SAAS,CAACM,gBAAgB;YACzDV,SAAS,EAAE,IAAAC,gCAAyB,EAACzB,aAAa,CAAC4B,SAAS,CAACF,UAAU;UACzE,CAAC,CACF;UACD;QAEF,KAAKpB,6BAAkB,CAAC6B,UAAU;UAChC3B,4BAAO,CAACC,OAAO,8CAEb;YACEC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACwB,WAAW,EAC1B;YACEC,WAAW,EAAE,KAAK;YAClBhB,IAAI,EAAErB,aAAa,CAACsC;UACtB,CAAC,CACF;UACD;QAEF,KAAKhC,6BAAkB,CAACiC,QAAQ;QAChC,KAAKjC,6BAAkB,CAACkC,UAAU;UAChChC,4BAAO,CAACC,OAAO,8CAEb;YACEC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACwB,WAAW,EAC1B;YACEC,WAAW,EAAErC,aAAa,CAACK,IAAI,KAAKC,6BAAkB,CAACiC;UACzD,CAAC,CACF;UACD;QAEF;UACE;MAAM;IAEZ,CAAC;IAAA,6GAOwC,UAACvC,aAAsC,EAAW;MACzF,IAAIA,aAAa,CAACyC,UAAU,KAAK,GAAG,EAAE;QACpCjC,4BAAO,CAACC,OAAO,8CAEb;UACEC,IAAI,EAAE,QAAQ;UACdC,QAAQ,EAAE;QACZ,CAAC,EACDC,yBAAc,CAAC8B,uBAAuB,EACtC;UAACD,UAAU,EAAE;QAAG,CAAC,CAClB;MACH,CAAC,MAAM;QACLjC,4BAAO,CAACC,OAAO,8CAEb;UACEC,IAAI,EAAE,QAAQ;UACdC,QAAQ,EAAE;QACZ,CAAC,EACDC,yBAAc,CAAC8B,uBAAuB,EACtC;UAACD,UAAU,EAAEzC,aAAa,CAAC2C,SAAS;UAAEC,YAAY,EAAE5C,aAAa,CAAC6C;QAAO,CAAC,CAC3E;MACH;IACF,CAAC;IAAA,yGAOoC,UAAC7C,aAAkC,EAAW;MAAA;MACjF,IAAM8C,qBAAqB,GAAG;QAC5BC,gBAAgB,2BAAE/C,aAAa,aAAbA,aAAa,iDAAbA,aAAa,CAAEgD,WAAW,2DAA1B,uBAA4BC,iBAAiB,yEAAI,EAAE;QACrEC,YAAY,4BAAElD,aAAa,aAAbA,aAAa,iDAAbA,aAAa,CAAEgD,WAAW,2DAA1B,uBAA4BG,aAAa,2EAAI,CAAC;QAC5DC,eAAe,2BAAEpD,aAAa,aAAbA,aAAa,6CAAbA,aAAa,CAAEqD,GAAG,uDAAlB,mBAAoBC,gBAAgB,yEAAI;MAC3D,CAAC;MAED9C,4BAAO,CAACC,OAAO,8CAEb;QACEC,IAAI,EAAE,QAAQ;QACdC,QAAQ,EAAE;MACZ,CAAC,EACDC,yBAAc,CAAC2C,mBAAmB,EAClCT,qBAAqB,CACtB;IACH,CAAC;IAAA,+FAM0B,YAAY;MACrC;MACA,IAAI,MAAKhD,eAAe,IAAI,CAAC,MAAK0D,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACC,WAAW,EAAE,EAAE;MAEpE,MAAKC,cAAc,EAAE;MACrB;MACA,MAAKJ,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACG,MAAM,CAACC,IAAI,CAAC;QAClCC,EAAE,YAAK,MAAK1E,MAAM,CAAE;QACpBgB,IAAI,EAAE,gBAAgB;QACtB2D,UAAU,EAAE;UACV;UACAC,KAAK,EAAE,MAAKT,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACQ,UAAU;QAC3C,CAAC;QACDtE,OAAO,EAAE,CAAC,CAAC;QACXL,IAAI,EAAE;UACJ4E,aAAa,EAAE;YACbC,OAAO,EAAE;UACX,CAAC;UACDC,SAAS,EAAE,aAAa;UACxB7E,SAAS,EAAEC,6BAAkB,CAAC6E;QAChC,CAAC;QACDC,UAAU,YAAKC,iBAAM,CAACC,gBAAgB,cAAIC,aAAI,CAACC,EAAE,EAAE,CAACC,QAAQ,EAAE;MAChE,CAAC,CAAC;MACF,MAAKvF,MAAM,IAAI,CAAC;IAClB,CAAC;IAAA,gGAO0B,UAACwF,YAAoB;MAAA;QAC9C;QACA,MAAKC,OAAO,CAAC;UACXC,MAAM,EAAE,KAAK;UACb;UACAC,GAAG,YAAK,MAAKxB,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACuB,WAAW,EAAE,eAAY;UACzDC,IAAI,EAAE;YACJL,YAAY,EAAZA;UACF;QACF,CAAC,CAAC,CAACM,IAAI,CAAC,YAAM;UACZ3E,4BAAO,CAACC,OAAO,8CAEb;YACEC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACwE,sBAAsB,EACrC;YAACP,YAAY,EAAZA;UAAY,CAAC,CACf;QACH,CAAC;MAAC;IAAA;IAAA,8FAOqB,UAACA,YAAoB,EAAW;MACvD;MACA,IAAI,CAAC,MAAKrB,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACC,WAAW,EAAE,EAAE;MAC5C;MACA,MAAKH,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACG,MAAM,CAACC,IAAI,CAAC;QAClCC,EAAE,YAAK,MAAK1E,MAAM,CAAE;QACpBgB,IAAI,EAAE,gBAAgB;QACtB2D,UAAU,EAAE;UACV;UACAC,KAAK,EAAE,MAAKT,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACQ,UAAU;QAC3C,CAAC;QACDtE,OAAO,EAAE;UACPyF,EAAE,EAAE,MAAK1F;QACX,CAAC;QACDJ,IAAI,EAAE;UACJ4E,aAAa,EAAE;YACbmB,mBAAmB,EAAET,YAAY;YACjCd,EAAE,EAAEW,aAAI,CAACC,EAAE;UACb,CAAC;UACDN,SAAS,EAAE,aAAa;UACxB7E,SAAS,EAAEC,6BAAkB,CAAC8F;QAChC,CAAC;QACDhB,UAAU,YAAKC,iBAAM,CAACC,gBAAgB,cAAIC,aAAI,CAACC,EAAE,EAAE,CAACC,QAAQ,EAAE;MAChE,CAAC,CAAC;MACF,MAAKvF,MAAM,IAAI,CAAC;IAClB,CAAC;IAAA,kLAMuB;MAAA;QAAA;UAAA;YAAA,MAClB,MAAKS,eAAe,IAAI,MAAK0F,kBAAkB;cAAA;cAAA;YAAA;YAAA,iCAASC,SAAS;UAAA;YAAA,iCAG9D,MAAKX,OAAO,CAAC;cAClBC,MAAM,EAAE,KAAK;cACb;cACAC,GAAG,YAAK,MAAKxB,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACuB,WAAW,EAAE,eAAY;cACzDC,IAAI,EAAE;gBACJQ,UAAU,EAAE;kBAACC,OAAO,EAAE;gBAAI;cAC5B;YACF,CAAC,CAAC,CAACR,IAAI,CAAC,YAAM;cACZ3E,4BAAO,CAACC,OAAO,8CAEb;gBACEC,IAAI,EAAE,QAAQ;gBACdC,QAAQ,EAAE;cACZ,CAAC,EACDC,yBAAc,CAACgF,kBAAkB,CAClC;cACD,MAAKJ,kBAAkB,GAAG,IAAI;cAC9B,MAAKK,gBAAgB,EAAE;YACzB,CAAC,CAAC;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA,CACH;IAAA;MAAA,oFAO2B,kBAAOC,QAAiB;QAAA;UAAA;YAAA;cAAA,kCAE3C,MAAKhB,OAAO,CAAC;gBAClBC,MAAM,EAAE,KAAK;gBACb;gBACAC,GAAG,YAAK,MAAKxB,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACuB,WAAW,EAAE,eAAY;gBACzDC,IAAI,EAAE;kBACJQ,UAAU,EAAE;oBAACK,YAAY,EAAED;kBAAQ;gBACrC;cACF,CAAC,CAAC,CAACX,IAAI,CAAC,YAAM;gBACZ,IAAIW,QAAQ,IAAI,CAAC,MAAKN,kBAAkB,IAAI,CAAC,MAAK1F,eAAe,EAAE,MAAKkG,cAAc,EAAE;cAC1F,CAAC,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA,CACH;MAAA;QAAA;MAAA;IAAA;IAlSC,MAAK3G,MAAM,GAAG,CAAC;IACf,MAAKS,eAAe,GAAG,KAAK;IAC5B,MAAK0F,kBAAkB,GAAG,KAAK;IAC/B,MAAK7F,WAAW,GAAG8F,SAAS;IAAC;EAC/B;;EAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA;IA1DA;AACF;AACA;AACA;;IAqBE;AACF;AACA;AACA;IACE,0BAAyB;MACvB,IAAI,CAAC,IAAI,CAACQ,qBAAqB,EAAE;QAC/B;QACA,IAAI,CAACzC,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACwC,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAACC,cAAc,CAAC;QACpE,IAAI,CAACF,qBAAqB,GAAG,IAAI;MACnC;IACF;;IAEA;EAAA;IAAA;IAAA,OACA,4BAA0B;MACxB,IAAI,CAACnG,eAAe,GAAG,KAAK;MAC5B,IAAI,CAAC0F,kBAAkB,GAAG,KAAK;MAC/B,IAAI,CAAC7F,WAAW,GAAG8F,SAAS;MAC5B;MACA,IAAI,CAACjC,KAAK,CAACC,QAAQ,CAACC,GAAG,CAAC0C,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAACD,cAAc,CAAC;MACrE,IAAI,CAACF,qBAAqB,GAAG,KAAK;IACpC;EAAC;EAAA;AAAA,EAzDgCI,sBAAW;AAAA;AAAA,eAsW/BpH,aAAa;AAAA"}
|
package/dist/voicea.types.js
CHANGED
package/dist/voicea.types.js.map
CHANGED
|
@@ -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.
|
|
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.
|
|
18
|
-
"@webex/internal-plugin-mercury": "3.0.0-beta.
|
|
19
|
-
"@webex/internal-plugin-voicea": "3.0.0-beta.
|
|
20
|
-
"@webex/plugin-meetings": "3.0.0-beta.
|
|
21
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
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.
|
|
32
|
-
"@webex/test-helper-mock-web-socket": "3.0.0-beta.
|
|
33
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
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}:${+
|
|
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
|
|
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},
|