@webex/internal-plugin-voicea 2.23.0
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 +90 -0
- package/dist/constants.js +40 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/utils.js +19 -0
- package/dist/utils.js.map +1 -0
- package/dist/voicea.js +376 -0
- package/dist/voicea.js.map +1 -0
- package/dist/voicea.types.js +8 -0
- package/dist/voicea.types.js.map +1 -0
- package/package.json +23 -0
- package/src/constants.ts +31 -0
- package/src/index.js +6 -0
- package/src/utils.ts +8 -0
- package/src/voicea.ts +306 -0
- package/src/voicea.types.ts +81 -0
- package/test/unit/spec/utils.js +12 -0
- package/test/unit/spec/voicea.js +580 -0
package/README.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# @webex/internal-plugin-voicea
|
|
2
|
+
|
|
3
|
+
[](https://github.com/RichardLitt/standard-readme)
|
|
4
|
+
|
|
5
|
+
> Plugin for the Voicea service
|
|
6
|
+
|
|
7
|
+
This is an internal Cisco Webex plugin. As such, it does not strictly adhere to semantic versioning. Use at your own risk. If you're not working on one of our first party clients, please look at our [developer api](https://developer.webex.com/) and stick to our public plugins.
|
|
8
|
+
|
|
9
|
+
- [@webex/internal-plugin-voicea](#webexinternal-plugin-voicea)
|
|
10
|
+
- [Install](#install)
|
|
11
|
+
- [Usage](#usage)
|
|
12
|
+
- [Maintainers](#maintainers)
|
|
13
|
+
- [Contribute](#contribute)
|
|
14
|
+
- [License](#license)
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install --save @webex/internal-plugin-voicea
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
|
|
26
|
+
import '@webex/internal-plugin-voicea';
|
|
27
|
+
|
|
28
|
+
import WebexCore from '@webex/webex-core';
|
|
29
|
+
|
|
30
|
+
const webex = new WebexCore();
|
|
31
|
+
// locusUrl is got from meeting.locusInfo.url;
|
|
32
|
+
// datachannelUrl is got from meeting.locusInfo.info.datachannelUrl;
|
|
33
|
+
// internally uses LLM plugin
|
|
34
|
+
webex.internal.voicea.registerAndConnect(locusUrl, datachannelUrl);
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
Toggle Transcribing
|
|
38
|
+
|
|
39
|
+
* Enable/Disable Transcribing in a meeting
|
|
40
|
+
* Automatically activates Closed Captions(CC) if enabled.
|
|
41
|
+
* Triggers voicea:transcribingOn / voicea:transcribingOff
|
|
42
|
+
|
|
43
|
+
```js
|
|
44
|
+
await webex.internal.voicea.toggleTranscribing(true);
|
|
45
|
+
await webex.internal.voicea.toggleTranscribing(false);
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
Toggle Captions
|
|
50
|
+
|
|
51
|
+
* Enable Captioning in a meeting
|
|
52
|
+
* Closed Caption cannot be turned off in a meeting
|
|
53
|
+
* Triggers voicea:captionOn
|
|
54
|
+
|
|
55
|
+
```js
|
|
56
|
+
await webex.internal.voicea.toggleTranscribing(true);
|
|
57
|
+
await webex.internal.voicea.toggleTranscribing(false);
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Set Spoken Language
|
|
61
|
+
* Host can set the spoken language of the meeting
|
|
62
|
+
* Triggers voicea:spokenLanguageSet
|
|
63
|
+
```js
|
|
64
|
+
webex.internal.voicea.setSpokenLanguage('en');
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Set Caption Language
|
|
68
|
+
* Anyone can request caption languages for the meeting
|
|
69
|
+
```js
|
|
70
|
+
webex.internal.voicea.requestLanguage('en');
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
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
|
|
80
|
+
## Maintainers
|
|
81
|
+
|
|
82
|
+
This package is maintained by [Cisco Webex for Developers](https://developer.webex.com/).
|
|
83
|
+
|
|
84
|
+
## Contribute
|
|
85
|
+
|
|
86
|
+
Pull requests welcome. Please see [CONTRIBUTING.md](https://github.com/webex/webex-js-sdk/blob/master/CONTRIBUTING.md) for more details.
|
|
87
|
+
|
|
88
|
+
## License
|
|
89
|
+
|
|
90
|
+
© 2016-2022 Cisco and/or its affiliates. All Rights Reserved.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
|
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
exports.VOICEA_RELAY_TYPES = exports.TRANSCRIPTION_TYPE = exports.EVENT_TRIGGERS = void 0;
|
|
10
|
+
var EVENT_TRIGGERS = {
|
|
11
|
+
VOICEA_ANNOUNCEMENT: 'voicea:announcement',
|
|
12
|
+
CAPTION_LANGUAGE_UPDATE: 'voicea:captionLanguageUpdate',
|
|
13
|
+
SPOKEN_LANGUAGE_UPDATE: 'voicea:spokenLanguageUpdate',
|
|
14
|
+
CAPTIONS_TURNED_ON: 'voicea:captionOn',
|
|
15
|
+
TRANSCRIBING_ON: 'voicea:transcribingOn',
|
|
16
|
+
TRANSCRIBING_OFF: 'voicea:transcribingOff',
|
|
17
|
+
NEW_CAPTION: 'voicea:newCaption',
|
|
18
|
+
EVA_COMMAND: 'voicea:wxa',
|
|
19
|
+
HIGHLIGHT_CREATED: 'voicea:highlightCreated'
|
|
20
|
+
};
|
|
21
|
+
exports.EVENT_TRIGGERS = EVENT_TRIGGERS;
|
|
22
|
+
var VOICEA_RELAY_TYPES = {
|
|
23
|
+
ANNOUNCEMENT: 'voicea.annc',
|
|
24
|
+
CLIENT_ANNOUNCEMENT: 'client.annc',
|
|
25
|
+
TRANSLATION_REQUEST: 'voicea.transl.req',
|
|
26
|
+
TRANSLATION_RESPONSE: 'voicea.transl.rsp',
|
|
27
|
+
TRANSCRIPTION: 'voicea.transcription'
|
|
28
|
+
};
|
|
29
|
+
exports.VOICEA_RELAY_TYPES = VOICEA_RELAY_TYPES;
|
|
30
|
+
var TRANSCRIPTION_TYPE = {
|
|
31
|
+
UNKNOWN: 'unknown',
|
|
32
|
+
EVA_WAKE: 'eva_wake',
|
|
33
|
+
EVA_THANKS: 'eva_thanks',
|
|
34
|
+
EVA_CANCEL: 'eva_cancel',
|
|
35
|
+
HIGHLIGHT_CREATED: 'highlight_created',
|
|
36
|
+
TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',
|
|
37
|
+
TRANSCRIPT_FINAL_RESULT: 'transcript_final_result'
|
|
38
|
+
};
|
|
39
|
+
exports.TRANSCRIPTION_TYPE = TRANSCRIPTION_TYPE;
|
|
40
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +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"],"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};\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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
|
|
4
|
+
|
|
5
|
+
var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
|
|
6
|
+
|
|
7
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
8
|
+
|
|
9
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
10
|
+
|
|
11
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
12
|
+
|
|
13
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
14
|
+
value: true
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
_Object$defineProperty(exports, "default", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function get() {
|
|
20
|
+
return _voicea.default;
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
var WebexCore = _interopRequireWildcard(require("@webex/webex-core"));
|
|
25
|
+
|
|
26
|
+
var _voicea = _interopRequireDefault(require("@webex/internal-plugin-voicea/src/voicea"));
|
|
27
|
+
|
|
28
|
+
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
|
+
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
|
+
WebexCore.registerInternalPlugin('voicea', _voicea.default, {});
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["WebexCore","registerInternalPlugin","VoiceaChannel"],"sources":["index.js"],"sourcesContent":["import * as WebexCore from '@webex/webex-core';\nimport VoiceaChannel from '@webex/internal-plugin-voicea/src/voicea';\n\nWebexCore.registerInternalPlugin('voicea', VoiceaChannel, {});\n\nexport {default} from '@webex/internal-plugin-voicea/src/voicea';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;AAEAA,SAAS,CAACC,sBAAV,CAAiC,QAAjC,EAA2CC,eAA3C,EAA0D,EAA1D"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
|
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
exports.millisToMinutesAndSeconds = void 0;
|
|
10
|
+
|
|
11
|
+
// eslint-disable-next-line import/prefer-default-export
|
|
12
|
+
var millisToMinutesAndSeconds = function millisToMinutesAndSeconds(millis) {
|
|
13
|
+
var minutes = Math.floor(millis / 60000);
|
|
14
|
+
var seconds = (millis % 60000 / 1000).toFixed(0);
|
|
15
|
+
return "".concat(minutes, ":").concat(+seconds < 10 ? '0' : '').concat(seconds);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
exports.millisToMinutesAndSeconds = millisToMinutesAndSeconds;
|
|
19
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +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"}
|
package/dist/voicea.js
ADDED
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
+
|
|
5
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
6
|
+
|
|
7
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
8
|
+
|
|
9
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
10
|
+
value: true
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
exports.default = exports.VoiceaChannel = void 0;
|
|
14
|
+
|
|
15
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
16
|
+
|
|
17
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
18
|
+
|
|
19
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
20
|
+
|
|
21
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
22
|
+
|
|
23
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
|
|
24
|
+
|
|
25
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
26
|
+
|
|
27
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
28
|
+
|
|
29
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
30
|
+
|
|
31
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
32
|
+
|
|
33
|
+
var _uuid = _interopRequireDefault(require("uuid"));
|
|
34
|
+
|
|
35
|
+
var _internalPluginLlm = _interopRequireDefault(require("@webex/internal-plugin-llm"));
|
|
36
|
+
|
|
37
|
+
var _config = _interopRequireDefault(require("@webex/webex-core/src/config"));
|
|
38
|
+
|
|
39
|
+
var _triggerProxy = _interopRequireDefault(require("@webex/plugin-meetings/src/common/events/trigger-proxy"));
|
|
40
|
+
|
|
41
|
+
var _constants = require("./constants");
|
|
42
|
+
|
|
43
|
+
var _utils = require("./utils");
|
|
44
|
+
|
|
45
|
+
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); }; }
|
|
46
|
+
|
|
47
|
+
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; } }
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* VoiceaChannel to hold single instance of LLM
|
|
51
|
+
*/
|
|
52
|
+
var VoiceaChannel = /*#__PURE__*/function (_LLMChannel) {
|
|
53
|
+
(0, _inherits2.default)(VoiceaChannel, _LLMChannel);
|
|
54
|
+
|
|
55
|
+
var _super = _createSuper(VoiceaChannel);
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Initializes Voicea plugin
|
|
59
|
+
* @param {any} args
|
|
60
|
+
*/
|
|
61
|
+
function VoiceaChannel() {
|
|
62
|
+
var _this;
|
|
63
|
+
|
|
64
|
+
(0, _classCallCheck2.default)(this, VoiceaChannel);
|
|
65
|
+
|
|
66
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
67
|
+
args[_key] = arguments[_key];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
71
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "seqNum", void 0);
|
|
72
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hasVoiceaJoined", void 0);
|
|
73
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "areCaptionsEnabled", void 0);
|
|
74
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isTranscribingEnabled", void 0);
|
|
75
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "vmcDeviceId", void 0);
|
|
76
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "processTranscription", function (voiceaPayload) {
|
|
77
|
+
switch (voiceaPayload.type) {
|
|
78
|
+
case _constants.TRANSCRIPTION_TYPE.TRANSCRIPT_INTERIM_RESULTS:
|
|
79
|
+
_triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
|
|
80
|
+
file: 'voicea',
|
|
81
|
+
function: 'processTranscription'
|
|
82
|
+
}, _constants.EVENT_TRIGGERS.NEW_CAPTION, {
|
|
83
|
+
isFinal: false,
|
|
84
|
+
transcriptId: voiceaPayload.transcript_id,
|
|
85
|
+
translations: voiceaPayload.translations,
|
|
86
|
+
transcript: {
|
|
87
|
+
csis: voiceaPayload.csis,
|
|
88
|
+
text: voiceaPayload.data
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
break;
|
|
93
|
+
|
|
94
|
+
case _constants.TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:
|
|
95
|
+
_triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
|
|
96
|
+
file: 'voicea',
|
|
97
|
+
function: 'processTranscription'
|
|
98
|
+
}, _constants.EVENT_TRIGGERS.NEW_CAPTION, {
|
|
99
|
+
isFinal: true,
|
|
100
|
+
transcriptId: voiceaPayload.transcript_id,
|
|
101
|
+
translations: voiceaPayload.translations,
|
|
102
|
+
transcript: {
|
|
103
|
+
csis: voiceaPayload.csis,
|
|
104
|
+
text: voiceaPayload.data
|
|
105
|
+
},
|
|
106
|
+
timestamp: (0, _utils.millisToMinutesAndSeconds)(voiceaPayload.transcript.end_millis - voiceaPayload.transcript.start_millis)
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
break;
|
|
110
|
+
|
|
111
|
+
case _constants.TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:
|
|
112
|
+
_triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
|
|
113
|
+
file: 'voicea',
|
|
114
|
+
function: 'processTranscription'
|
|
115
|
+
}, _constants.EVENT_TRIGGERS.HIGHLIGHT_CREATED, {
|
|
116
|
+
csis: voiceaPayload.highlight.csis,
|
|
117
|
+
highlightId: voiceaPayload.highlight.highlight_id,
|
|
118
|
+
text: voiceaPayload.highlight.transcript,
|
|
119
|
+
highlightLabel: voiceaPayload.highlight.highlight_label,
|
|
120
|
+
highlightSource: voiceaPayload.highlight.highlight_source,
|
|
121
|
+
timestamp: (0, _utils.millisToMinutesAndSeconds)(voiceaPayload.highlight.end_millis - voiceaPayload.highlight.start_millis)
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
break;
|
|
125
|
+
|
|
126
|
+
case _constants.TRANSCRIPTION_TYPE.EVA_THANKS:
|
|
127
|
+
_triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
|
|
128
|
+
file: 'voicea',
|
|
129
|
+
function: 'processTranscription'
|
|
130
|
+
}, _constants.EVENT_TRIGGERS.EVA_COMMAND, {
|
|
131
|
+
isListening: false,
|
|
132
|
+
text: voiceaPayload.command_response
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
break;
|
|
136
|
+
|
|
137
|
+
case _constants.TRANSCRIPTION_TYPE.EVA_WAKE:
|
|
138
|
+
case _constants.TRANSCRIPTION_TYPE.EVA_CANCEL:
|
|
139
|
+
_triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
|
|
140
|
+
file: 'voicea',
|
|
141
|
+
function: 'processTranscription'
|
|
142
|
+
}, _constants.EVENT_TRIGGERS.EVA_COMMAND, {
|
|
143
|
+
isListening: voiceaPayload.type === _constants.TRANSCRIPTION_TYPE.EVA_WAKE
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
break;
|
|
147
|
+
|
|
148
|
+
default:
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "processCaptionLanguageResponse", function (voiceaPayload) {
|
|
153
|
+
if (voiceaPayload.statusCode === 200) {
|
|
154
|
+
_triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
|
|
155
|
+
file: 'voicea',
|
|
156
|
+
function: 'processCaptionLanguageResponse'
|
|
157
|
+
}, _constants.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {
|
|
158
|
+
statusCode: 200
|
|
159
|
+
});
|
|
160
|
+
} else {
|
|
161
|
+
_triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
|
|
162
|
+
file: 'voicea',
|
|
163
|
+
function: 'processCaptionLanguageResponse'
|
|
164
|
+
}, _constants.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {
|
|
165
|
+
statusCode: voiceaPayload.errorCode,
|
|
166
|
+
errorMessage: voiceaPayload.message
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "processAnnouncementMessage", function (voiceaPayload) {
|
|
171
|
+
var _voiceaPayload$transl, _voiceaPayload$transl2, _voiceaPayload$transl3, _voiceaPayload$transl4, _voiceaPayload$ASR$sp, _voiceaPayload$ASR;
|
|
172
|
+
|
|
173
|
+
var voiceaLanguageOptions = {
|
|
174
|
+
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 : [],
|
|
175
|
+
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,
|
|
176
|
+
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 : []
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
_triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
|
|
180
|
+
file: 'voicea',
|
|
181
|
+
function: 'processAnnouncementMessage'
|
|
182
|
+
}, _constants.EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);
|
|
183
|
+
});
|
|
184
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sendAnnouncement", function () {
|
|
185
|
+
if (_this.hasVoiceaJoined) return;
|
|
186
|
+
|
|
187
|
+
_this.socket.send({
|
|
188
|
+
id: "".concat(_this.seqNum),
|
|
189
|
+
type: 'publishRequest',
|
|
190
|
+
recipients: {
|
|
191
|
+
route: _this.getBinding()
|
|
192
|
+
},
|
|
193
|
+
headers: {},
|
|
194
|
+
data: {
|
|
195
|
+
clientPayload: {
|
|
196
|
+
version: 'v2'
|
|
197
|
+
},
|
|
198
|
+
eventType: 'relay.event',
|
|
199
|
+
relayType: _constants.VOICEA_RELAY_TYPES.CLIENT_ANNOUNCEMENT
|
|
200
|
+
},
|
|
201
|
+
trackingId: "".concat(_config.default.trackingIdPrefix, "_").concat(_uuid.default.v4().toString())
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
_this.seqNum += 1;
|
|
205
|
+
});
|
|
206
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "setSpokenLanguage", function (languageCode) {
|
|
207
|
+
return _this.request({
|
|
208
|
+
method: 'PUT',
|
|
209
|
+
url: "".concat(_this.locusUrl, "/controls/"),
|
|
210
|
+
body: {
|
|
211
|
+
languageCode: languageCode
|
|
212
|
+
}
|
|
213
|
+
}).then(function () {
|
|
214
|
+
_triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
|
|
215
|
+
file: 'voicea',
|
|
216
|
+
function: 'setSpokenLanguage'
|
|
217
|
+
}, _constants.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {
|
|
218
|
+
languageCode: languageCode
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "requestLanguage", function (languageCode) {
|
|
223
|
+
_this.socket.send({
|
|
224
|
+
id: "".concat(_this.seqNum),
|
|
225
|
+
type: 'publishRequest',
|
|
226
|
+
recipients: {
|
|
227
|
+
route: _this.getBinding()
|
|
228
|
+
},
|
|
229
|
+
headers: {
|
|
230
|
+
to: _this.vmcDeviceId
|
|
231
|
+
},
|
|
232
|
+
data: {
|
|
233
|
+
clientPayload: {
|
|
234
|
+
translationLanguage: languageCode,
|
|
235
|
+
id: _uuid.default.v4()
|
|
236
|
+
},
|
|
237
|
+
eventType: 'relay.event',
|
|
238
|
+
relayType: _constants.VOICEA_RELAY_TYPES.TRANSLATION_REQUEST
|
|
239
|
+
},
|
|
240
|
+
trackingId: "".concat(_config.default.trackingIdPrefix, "_").concat(_uuid.default.v4().toString())
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
_this.seqNum += 1;
|
|
244
|
+
});
|
|
245
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "turnOnCaptions", /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
246
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
247
|
+
while (1) {
|
|
248
|
+
switch (_context.prev = _context.next) {
|
|
249
|
+
case 0:
|
|
250
|
+
if (!(_this.hasVoiceaJoined && _this.areCaptionsEnabled)) {
|
|
251
|
+
_context.next = 2;
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return _context.abrupt("return", undefined);
|
|
256
|
+
|
|
257
|
+
case 2:
|
|
258
|
+
return _context.abrupt("return", _this.request({
|
|
259
|
+
method: 'PUT',
|
|
260
|
+
url: "".concat(_this.locusUrl, "/controls/"),
|
|
261
|
+
body: {
|
|
262
|
+
transcribe: {
|
|
263
|
+
caption: true
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}).then(function () {
|
|
267
|
+
_triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
|
|
268
|
+
file: 'voicea',
|
|
269
|
+
function: 'turnOnCaptions'
|
|
270
|
+
}, _constants.EVENT_TRIGGERS.CAPTIONS_TURNED_ON);
|
|
271
|
+
|
|
272
|
+
_this.areCaptionsEnabled = true;
|
|
273
|
+
|
|
274
|
+
_this.sendAnnouncement();
|
|
275
|
+
}));
|
|
276
|
+
|
|
277
|
+
case 3:
|
|
278
|
+
case "end":
|
|
279
|
+
return _context.stop();
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}, _callee);
|
|
283
|
+
})));
|
|
284
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "toggleTranscribing", /*#__PURE__*/function () {
|
|
285
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(activate) {
|
|
286
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
287
|
+
while (1) {
|
|
288
|
+
switch (_context2.prev = _context2.next) {
|
|
289
|
+
case 0:
|
|
290
|
+
if (!(_this.isTranscribingEnabled === activate)) {
|
|
291
|
+
_context2.next = 2;
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
return _context2.abrupt("return", undefined);
|
|
296
|
+
|
|
297
|
+
case 2:
|
|
298
|
+
return _context2.abrupt("return", _this.request({
|
|
299
|
+
method: 'PUT',
|
|
300
|
+
url: "".concat(_this.locusUrl, "/controls/"),
|
|
301
|
+
body: {
|
|
302
|
+
transcribe: {
|
|
303
|
+
transcribing: activate
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}).then(function () {
|
|
307
|
+
_triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
|
|
308
|
+
file: 'voicea',
|
|
309
|
+
function: 'toggleTranscribing'
|
|
310
|
+
}, activate ? _constants.EVENT_TRIGGERS.TRANSCRIBING_ON : _constants.EVENT_TRIGGERS.TRANSCRIBING_OFF);
|
|
311
|
+
|
|
312
|
+
_this.isTranscribingEnabled = activate;
|
|
313
|
+
if (activate && !_this.areCaptionsEnabled && !_this.hasVoiceaJoined) _this.turnOnCaptions();
|
|
314
|
+
}));
|
|
315
|
+
|
|
316
|
+
case 3:
|
|
317
|
+
case "end":
|
|
318
|
+
return _context2.stop();
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}, _callee2);
|
|
322
|
+
}));
|
|
323
|
+
|
|
324
|
+
return function (_x) {
|
|
325
|
+
return _ref2.apply(this, arguments);
|
|
326
|
+
};
|
|
327
|
+
}());
|
|
328
|
+
_this.seqNum = 1;
|
|
329
|
+
_this.hasVoiceaJoined = false;
|
|
330
|
+
_this.areCaptionsEnabled = false;
|
|
331
|
+
_this.isTranscribingEnabled = false;
|
|
332
|
+
_this.vmcDeviceId = undefined;
|
|
333
|
+
|
|
334
|
+
_this.on('event:relay.event', function (e) {
|
|
335
|
+
_this.seqNum = e.sequenceNumber + 1;
|
|
336
|
+
|
|
337
|
+
switch (e.data.relayType) {
|
|
338
|
+
case _constants.VOICEA_RELAY_TYPES.ANNOUNCEMENT:
|
|
339
|
+
_this.vmcDeviceId = e.headers.from;
|
|
340
|
+
_this.hasVoiceaJoined = true;
|
|
341
|
+
|
|
342
|
+
_this.processAnnouncementMessage(e.voiceaPayload);
|
|
343
|
+
|
|
344
|
+
break;
|
|
345
|
+
|
|
346
|
+
case _constants.VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:
|
|
347
|
+
_this.processCaptionLanguageResponse(e.voiceaPayload);
|
|
348
|
+
|
|
349
|
+
break;
|
|
350
|
+
|
|
351
|
+
case _constants.VOICEA_RELAY_TYPES.TRANSCRIPTION:
|
|
352
|
+
_this.processTranscription(e.voiceaPayload);
|
|
353
|
+
|
|
354
|
+
break;
|
|
355
|
+
|
|
356
|
+
default:
|
|
357
|
+
break;
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
return _this;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Process Transcript and send alert
|
|
365
|
+
* @param {TranscriptionResponse} voiceaPayload
|
|
366
|
+
* @returns {void}
|
|
367
|
+
*/
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
return (0, _createClass2.default)(VoiceaChannel);
|
|
371
|
+
}(_internalPluginLlm.default);
|
|
372
|
+
|
|
373
|
+
exports.VoiceaChannel = VoiceaChannel;
|
|
374
|
+
var _default = VoiceaChannel;
|
|
375
|
+
exports.default = _default;
|
|
376
|
+
//# sourceMappingURL=voicea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["VoiceaChannel","args","voiceaPayload","type","TRANSCRIPTION_TYPE","TRANSCRIPT_INTERIM_RESULTS","Trigger","trigger","file","function","EVENT_TRIGGERS","NEW_CAPTION","isFinal","transcriptId","transcript_id","translations","transcript","csis","text","data","TRANSCRIPT_FINAL_RESULT","timestamp","millisToMinutesAndSeconds","end_millis","start_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","hasVoiceaJoined","socket","send","id","seqNum","recipients","route","getBinding","headers","clientPayload","version","eventType","relayType","VOICEA_RELAY_TYPES","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","languageCode","request","method","url","locusUrl","body","then","SPOKEN_LANGUAGE_UPDATE","to","vmcDeviceId","translationLanguage","TRANSLATION_REQUEST","areCaptionsEnabled","undefined","transcribe","caption","CAPTIONS_TURNED_ON","sendAnnouncement","activate","isTranscribingEnabled","transcribing","TRANSCRIBING_ON","TRANSCRIBING_OFF","turnOnCaptions","on","e","sequenceNumber","ANNOUNCEMENT","from","processAnnouncementMessage","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","LLMChannel"],"sources":["voicea.ts"],"sourcesContent":["import uuid from 'uuid';\nimport LLMChannel from '@webex/internal-plugin-llm';\nimport config from '@webex/webex-core/src/config';\nimport Trigger from '@webex/plugin-meetings/src/common/events/trigger-proxy';\n\nimport {EVENT_TRIGGERS, VOICEA_RELAY_TYPES, TRANSCRIPTION_TYPE} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {AnnouncementPayload, CaptionLanguageResponse, TranscriptionResponse, IVoiceaChannel} from './voicea.types';\nimport {millisToMinutesAndSeconds} from './utils';\n/**\n * VoiceaChannel to hold single instance of LLM\n */\nexport class VoiceaChannel extends LLMChannel implements IVoiceaChannel {\n private seqNum: number;\n\n private hasVoiceaJoined: boolean;\n\n private areCaptionsEnabled: boolean;\n\n private isTranscribingEnabled:boolean;\n\n private vmcDeviceId: string;\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 this.on('event:relay.event', (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.voiceaPayload);\n break;\n case VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.voiceaPayload);\n break;\n case VOICEA_RELAY_TYPES.TRANSCRIPTION:\n this.processTranscription(e.voiceaPayload);\n break;\n default:\n break;\n }\n });\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(this, {\n file: 'voicea',\n function: 'processTranscription'\n },\n EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n translations: voiceaPayload.translations,\n transcript: {\n csis: voiceaPayload.csis,\n text: voiceaPayload.data\n },\n });\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n Trigger.trigger(this, {\n file: 'voicea',\n function: 'processTranscription'\n },\n EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n translations: voiceaPayload.translations,\n transcript: {\n csis: voiceaPayload.csis,\n text: voiceaPayload.data\n },\n timestamp: millisToMinutesAndSeconds(voiceaPayload.transcript.end_millis - voiceaPayload.transcript.start_millis)\n });\n break;\n\n case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:\n Trigger.trigger(this, {\n file: 'voicea',\n function: 'processTranscription'\n },\n EVENT_TRIGGERS.HIGHLIGHT_CREATED, {\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 - voiceaPayload.highlight.start_millis)\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n Trigger.trigger(this, {\n file: 'voicea',\n function: 'processTranscription'\n },\n EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: false, text: voiceaPayload.command_response\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_WAKE:\n case TRANSCRIPTION_TYPE.EVA_CANCEL:\n Trigger.trigger(this, {\n file: 'voicea',\n function: 'processTranscription'\n },\n EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: voiceaPayload.type === TRANSCRIPTION_TYPE.EVA_WAKE\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(this, {\n file: 'voicea',\n function: 'processCaptionLanguageResponse'\n },\n EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {statusCode: 200});\n }\n else {\n Trigger.trigger(this, {\n file: 'voicea',\n function: 'processCaptionLanguageResponse'\n },\n EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {statusCode: voiceaPayload.errorCode, errorMessage: voiceaPayload.message});\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 /**\n * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n private sendAnnouncement = ():void => {\n if (this.hasVoiceaJoined) return;\n this.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n route: this.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> => this.request({\n method: 'PUT',\n url: `${this.locusUrl}/controls/`,\n body: {\n languageCode\n }\n }).then(() => {\n Trigger.trigger(this, {\n file: 'voicea',\n function: 'setSpokenLanguage'\n },\n EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE,\n {languageCode});\n });\n\n /**\n * Request Language translation\n * @param {string} languageCode\n * @returns {void}\n */\n public requestLanguage = (languageCode: string): void => {\n this.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n route: this.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.locusUrl}/controls/`,\n body: {\n transcribe: {caption: true}\n }\n }).then(() => {\n Trigger.trigger(this, {\n file: 'voicea',\n function: 'turnOnCaptions'\n },\n EVENT_TRIGGERS.CAPTIONS_TURNED_ON);\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.locusUrl}/controls/`,\n body: {\n transcribe: {transcribing: activate}\n }\n }).then(() => {\n Trigger.trigger(this, {\n file: 'voicea',\n function: 'toggleTranscribing'\n },\n activate ? EVENT_TRIGGERS.TRANSCRIBING_ON : EVENT_TRIGGERS.TRANSCRIBING_OFF);\n this.isTranscribingEnabled = activate;\n if (activate && !this.areCaptionsEnabled && !this.hasVoiceaJoined) this.turnOnCaptions();\n });\n };\n}\n\nexport default VoiceaChannel;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AAGA;;;;;;AACA;AACA;AACA;IACaA,a;;;;;EAWX;AACF;AACA;AACA;EACE,yBAAqB;IAAA;;IAAA;;IAAA,kCAANC,IAAM;MAANA,IAAM;IAAA;;IACnB,gDAASA,IAAT;IADmB;IAAA;IAAA;IAAA;IAAA;IAAA,mGAiCU,UAACC,aAAD,EAAgD;MAC7E,QAAQA,aAAa,CAACC,IAAtB;QACE,KAAKC,6BAAA,CAAmBC,0BAAxB;UACEC,qBAAA,CAAQC,OAAR,8CAAsB;YACpBC,IAAI,EAAE,QADc;YAEpBC,QAAQ,EAAE;UAFU,CAAtB,EAIAC,yBAAA,CAAeC,WAJf,EAI4B;YAC1BC,OAAO,EAAE,KADiB;YAE1BC,YAAY,EAAEX,aAAa,CAACY,aAFF;YAG1BC,YAAY,EAAEb,aAAa,CAACa,YAHF;YAI1BC,UAAU,EAAE;cACVC,IAAI,EAAEf,aAAa,CAACe,IADV;cAEVC,IAAI,EAAEhB,aAAa,CAACiB;YAFV;UAJc,CAJ5B;;UAaA;;QAEF,KAAKf,6BAAA,CAAmBgB,uBAAxB;UACEd,qBAAA,CAAQC,OAAR,8CAAsB;YACpBC,IAAI,EAAE,QADc;YAEpBC,QAAQ,EAAE;UAFU,CAAtB,EAIAC,yBAAA,CAAeC,WAJf,EAI4B;YAC1BC,OAAO,EAAE,IADiB;YAE1BC,YAAY,EAAEX,aAAa,CAACY,aAFF;YAG1BC,YAAY,EAAEb,aAAa,CAACa,YAHF;YAI1BC,UAAU,EAAE;cACVC,IAAI,EAAEf,aAAa,CAACe,IADV;cAEVC,IAAI,EAAEhB,aAAa,CAACiB;YAFV,CAJc;YAQ1BE,SAAS,EAAE,IAAAC,gCAAA,EAA0BpB,aAAa,CAACc,UAAd,CAAyBO,UAAzB,GAAsCrB,aAAa,CAACc,UAAd,CAAyBQ,YAAzF;UARe,CAJ5B;;UAcA;;QAEF,KAAKpB,6BAAA,CAAmBqB,iBAAxB;UACEnB,qBAAA,CAAQC,OAAR,8CAAsB;YACpBC,IAAI,EAAE,QADc;YAEpBC,QAAQ,EAAE;UAFU,CAAtB,EAIAC,yBAAA,CAAee,iBAJf,EAIkC;YAChCR,IAAI,EAAEf,aAAa,CAACwB,SAAd,CAAwBT,IADE;YAEhCU,WAAW,EAAEzB,aAAa,CAACwB,SAAd,CAAwBE,YAFL;YAGhCV,IAAI,EAAEhB,aAAa,CAACwB,SAAd,CAAwBV,UAHE;YAIhCa,cAAc,EAAE3B,aAAa,CAACwB,SAAd,CAAwBI,eAJR;YAKhCC,eAAe,EAAE7B,aAAa,CAACwB,SAAd,CAAwBM,gBALT;YAMhCX,SAAS,EAAE,IAAAC,gCAAA,EAA0BpB,aAAa,CAACwB,SAAd,CAAwBH,UAAxB,GAAqCrB,aAAa,CAACwB,SAAd,CAAwBF,YAAvF;UANqB,CAJlC;;UAYA;;QAEF,KAAKpB,6BAAA,CAAmB6B,UAAxB;UACE3B,qBAAA,CAAQC,OAAR,8CAAsB;YACpBC,IAAI,EAAE,QADc;YAEpBC,QAAQ,EAAE;UAFU,CAAtB,EAIAC,yBAAA,CAAewB,WAJf,EAI4B;YAC1BC,WAAW,EAAE,KADa;YACNjB,IAAI,EAAEhB,aAAa,CAACkC;UADd,CAJ5B;;UAOA;;QAEF,KAAKhC,6BAAA,CAAmBiC,QAAxB;QACA,KAAKjC,6BAAA,CAAmBkC,UAAxB;UACEhC,qBAAA,CAAQC,OAAR,8CAAsB;YACpBC,IAAI,EAAE,QADc;YAEpBC,QAAQ,EAAE;UAFU,CAAtB,EAIAC,yBAAA,CAAewB,WAJf,EAI4B;YAC1BC,WAAW,EAAEjC,aAAa,CAACC,IAAd,KAAuBC,6BAAA,CAAmBiC;UAD7B,CAJ5B;;UAOA;;QAEF;UACE;MAvEJ;IAyED,CA3GoB;IAAA,6GAkHoB,UAACnC,aAAD,EAAiD;MACxF,IAAIA,aAAa,CAACqC,UAAd,KAA6B,GAAjC,EAAsC;QACpCjC,qBAAA,CAAQC,OAAR,8CAAsB;UACpBC,IAAI,EAAE,QADc;UAEpBC,QAAQ,EAAE;QAFU,CAAtB,EAIAC,yBAAA,CAAe8B,uBAJf,EAIwC;UAACD,UAAU,EAAE;QAAb,CAJxC;MAKD,CAND,MAOK;QACHjC,qBAAA,CAAQC,OAAR,8CAAsB;UACpBC,IAAI,EAAE,QADc;UAEpBC,QAAQ,EAAE;QAFU,CAAtB,EAIAC,yBAAA,CAAe8B,uBAJf,EAIwC;UAACD,UAAU,EAAErC,aAAa,CAACuC,SAA3B;UAAsCC,YAAY,EAAExC,aAAa,CAACyC;QAAlE,CAJxC;MAKD;IACF,CAjIoB;IAAA,yGAwIgB,UAACzC,aAAD,EAA6C;MAAA;;MAChF,IAAM0C,qBAAqB,GAAG;QAC5BC,gBAAgB,2BAAE3C,aAAF,aAAEA,aAAF,iDAAEA,aAAa,CAAE4C,WAAjB,2DAAE,uBAA4BC,iBAA9B,yEAAmD,EADvC;QAE5BC,YAAY,4BAAE9C,aAAF,aAAEA,aAAF,iDAAEA,aAAa,CAAE4C,WAAjB,2DAAE,uBAA4BG,aAA9B,2EAA+C,CAF/B;QAG5BC,eAAe,2BAAEhD,aAAF,aAAEA,aAAF,6CAAEA,aAAa,CAAEiD,GAAjB,uDAAE,mBAAoBC,gBAAtB,yEAA0C;MAH7B,CAA9B;;MAMA9C,qBAAA,CAAQC,OAAR,8CAEE;QACEC,IAAI,EAAE,QADR;QAEEC,QAAQ,EAAE;MAFZ,CAFF,EAMEC,yBAAA,CAAe2C,mBANjB,EAOET,qBAPF;IASD,CAxJoB;IAAA,+FA+JM,YAAW;MACpC,IAAI,MAAKU,eAAT,EAA0B;;MAC1B,MAAKC,MAAL,CAAYC,IAAZ,CAAiB;QACfC,EAAE,YAAK,MAAKC,MAAV,CADa;QAEfvD,IAAI,EAAE,gBAFS;QAGfwD,UAAU,EAAE;UACVC,KAAK,EAAE,MAAKC,UAAL;QADG,CAHG;QAMfC,OAAO,EAAE,EANM;QAOf3C,IAAI,EAAE;UACJ4C,aAAa,EAAE;YACbC,OAAO,EAAE;UADI,CADX;UAIJC,SAAS,EAAE,aAJP;UAKJC,SAAS,EAAEC,6BAAA,CAAmBC;QAL1B,CAPS;QAcfC,UAAU,YAAKC,eAAA,CAAOC,gBAAZ,cAAgCC,aAAA,CAAKC,EAAL,GAAUC,QAAV,EAAhC;MAdK,CAAjB;;MAgBA,MAAKhB,MAAL,IAAe,CAAf;IACD,CAlLoB;IAAA,gGAyLM,UAACiB,YAAD;MAAA,OAAwC,MAAKC,OAAL,CAAa;QAC9EC,MAAM,EAAE,KADsE;QAE9EC,GAAG,YAAK,MAAKC,QAAV,eAF2E;QAG9EC,IAAI,EAAE;UACJL,YAAY,EAAZA;QADI;MAHwE,CAAb,EAMhEM,IANgE,CAM3D,YAAM;QACZ3E,qBAAA,CAAQC,OAAR,8CAAsB;UACpBC,IAAI,EAAE,QADc;UAEpBC,QAAQ,EAAE;QAFU,CAAtB,EAIAC,yBAAA,CAAewE,sBAJf,EAKA;UAACP,YAAY,EAAZA;QAAD,CALA;MAMD,CAbkE,CAAxC;IAAA,CAzLN;IAAA,8FA6MI,UAACA,YAAD,EAAgC;MACvD,MAAKpB,MAAL,CAAYC,IAAZ,CAAiB;QACfC,EAAE,YAAK,MAAKC,MAAV,CADa;QAEfvD,IAAI,EAAE,gBAFS;QAGfwD,UAAU,EAAE;UACVC,KAAK,EAAE,MAAKC,UAAL;QADG,CAHG;QAMfC,OAAO,EAAE;UACPqB,EAAE,EAAE,MAAKC;QADF,CANM;QASfjE,IAAI,EAAE;UACJ4C,aAAa,EAAE;YACbsB,mBAAmB,EAAEV,YADR;YAEblB,EAAE,EAAEe,aAAA,CAAKC,EAAL;UAFS,CADX;UAKJR,SAAS,EAAE,aALP;UAMJC,SAAS,EAAEC,6BAAA,CAAmBmB;QAN1B,CATS;QAiBfjB,UAAU,YAAKC,eAAA,CAAOC,gBAAZ,cAAgCC,aAAA,CAAKC,EAAL,GAAUC,QAAV,EAAhC;MAjBK,CAAjB;;MAmBA,MAAKhB,MAAL,IAAe,CAAf;IACD,CAlOoB;IAAA,kLAwOG;MAAA;QAAA;UAAA;YAAA;cAAA,MAClB,MAAKJ,eAAL,IAAwB,MAAKiC,kBADX;gBAAA;gBAAA;cAAA;;cAAA,iCACsCC,SADtC;;YAAA;cAAA,iCAGf,MAAKZ,OAAL,CAAa;gBAClBC,MAAM,EAAE,KADU;gBAElBC,GAAG,YAAK,MAAKC,QAAV,eAFe;gBAGlBC,IAAI,EAAE;kBACJS,UAAU,EAAE;oBAACC,OAAO,EAAE;kBAAV;gBADR;cAHY,CAAb,EAMJT,IANI,CAMC,YAAM;gBACZ3E,qBAAA,CAAQC,OAAR,8CAAsB;kBACpBC,IAAI,EAAE,QADc;kBAEpBC,QAAQ,EAAE;gBAFU,CAAtB,EAIAC,yBAAA,CAAeiF,kBAJf;;gBAKA,MAAKJ,kBAAL,GAA0B,IAA1B;;gBACA,MAAKK,gBAAL;cACD,CAdM,CAHe;;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CAxOH;IAAA;MAAA,oFAiQO,kBAAOC,QAAP;QAAA;UAAA;YAAA;cAAA;gBAAA,MACtB,MAAKC,qBAAL,KAA+BD,QADT;kBAAA;kBAAA;gBAAA;;gBAAA,kCAC0BL,SAD1B;;cAAA;gBAAA,kCAGnB,MAAKZ,OAAL,CAAa;kBAClBC,MAAM,EAAE,KADU;kBAElBC,GAAG,YAAK,MAAKC,QAAV,eAFe;kBAGlBC,IAAI,EAAE;oBACJS,UAAU,EAAE;sBAACM,YAAY,EAAEF;oBAAf;kBADR;gBAHY,CAAb,EAMJZ,IANI,CAMC,YAAM;kBACZ3E,qBAAA,CAAQC,OAAR,8CAAsB;oBACpBC,IAAI,EAAE,QADc;oBAEpBC,QAAQ,EAAE;kBAFU,CAAtB,EAIAoF,QAAQ,GAAGnF,yBAAA,CAAesF,eAAlB,GAAoCtF,yBAAA,CAAeuF,gBAJ3D;;kBAKA,MAAKH,qBAAL,GAA6BD,QAA7B;kBACA,IAAIA,QAAQ,IAAI,CAAC,MAAKN,kBAAlB,IAAwC,CAAC,MAAKjC,eAAlD,EAAmE,MAAK4C,cAAL;gBACpE,CAdM,CAHmB;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAjQP;;MAAA;QAAA;MAAA;IAAA;IAEnB,MAAKxC,MAAL,GAAc,CAAd;IACA,MAAKJ,eAAL,GAAuB,KAAvB;IACA,MAAKiC,kBAAL,GAA0B,KAA1B;IACA,MAAKO,qBAAL,GAA6B,KAA7B;IACA,MAAKV,WAAL,GAAmBI,SAAnB;;IAEA,MAAKW,EAAL,CAAQ,mBAAR,EAA6B,UAACC,CAAD,EAAO;MAClC,MAAK1C,MAAL,GAAc0C,CAAC,CAACC,cAAF,GAAmB,CAAjC;;MACA,QAAQD,CAAC,CAACjF,IAAF,CAAO+C,SAAf;QACE,KAAKC,6BAAA,CAAmBmC,YAAxB;UACE,MAAKlB,WAAL,GAAmBgB,CAAC,CAACtC,OAAF,CAAUyC,IAA7B;UACA,MAAKjD,eAAL,GAAuB,IAAvB;;UACA,MAAKkD,0BAAL,CAAgCJ,CAAC,CAAClG,aAAlC;;UACA;;QACF,KAAKiE,6BAAA,CAAmBsC,oBAAxB;UACE,MAAKC,8BAAL,CAAoCN,CAAC,CAAClG,aAAtC;;UACA;;QACF,KAAKiE,6BAAA,CAAmBwC,aAAxB;UACE,MAAKC,oBAAL,CAA0BR,CAAC,CAAClG,aAA5B;;UACA;;QACF;UACE;MAbJ;IAeD,CAjBD;;IARmB;EA0BpB;EAED;AACF;AACA;AACA;AACA;;;;EA/CmC2G,0B;;;eAqSpB7G,a"}
|
|
@@ -0,0 +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 = '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}\n\n/**\n * Highlights\n */\n interface 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}\nexport {AnnouncementPayload, CaptionLanguageResponse, TranscriptionResponse, Transcription, Highlight, IVoiceaChannel};\n"],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@webex/internal-plugin-voicea",
|
|
3
|
+
"version": "2.23.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"devMain": "src/index.js",
|
|
8
|
+
"repository": "https://github.com/webex/webex-js-sdk/tree/master/packages/node_modules/@webex/internal-plugin-voicea",
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=8"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@babel/runtime-corejs2": "^7.14.8",
|
|
14
|
+
"@webex/webex-core": "2.23.0",
|
|
15
|
+
"@webex/internal-plugin-voicea": "2.23.0",
|
|
16
|
+
"envify": "^4.1.0"
|
|
17
|
+
},
|
|
18
|
+
"browserify": {
|
|
19
|
+
"transform": [
|
|
20
|
+
"envify"
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
}
|