@webex/internal-plugin-voicea 3.8.0-next.7 → 3.8.0-next.71
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 +17 -0
- package/dist/constants.js +8 -2
- package/dist/constants.js.map +1 -1
- package/dist/types/constants.d.ts +6 -0
- package/dist/types/voicea.d.ts +12 -2
- package/dist/types/voicea.types.d.ts +4 -0
- package/dist/voicea.js +73 -15
- package/dist/voicea.js.map +1 -1
- package/dist/voicea.types.js.map +1 -1
- package/package.json +10 -10
- package/src/constants.ts +7 -0
- package/src/voicea.ts +88 -19
- package/src/voicea.types.ts +9 -0
- package/test/unit/spec/voicea.js +179 -22
package/README.md
CHANGED
|
@@ -54,6 +54,15 @@ await webex.internal.voicea.toggleTranscribing(true);
|
|
|
54
54
|
await webex.internal.voicea.toggleTranscribing(false);
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
+
Toggle Manual Captions
|
|
58
|
+
|
|
59
|
+
- Enable/Disable Manual Captioning in a meeting
|
|
60
|
+
|
|
61
|
+
```js
|
|
62
|
+
await webex.internal.voicea.toggleManualCaption(true);
|
|
63
|
+
await webex.internal.voicea.toggleManualCaption(false);
|
|
64
|
+
```
|
|
65
|
+
|
|
57
66
|
Set Spoken Language
|
|
58
67
|
|
|
59
68
|
- Host can set the spoken language of the meeting
|
|
@@ -71,6 +80,14 @@ Set Caption Language
|
|
|
71
80
|
webex.internal.voicea.requestLanguage('en');
|
|
72
81
|
```
|
|
73
82
|
|
|
83
|
+
Send Manual Closed Caption Messages
|
|
84
|
+
|
|
85
|
+
- Only captioner can send manual closed captions messages
|
|
86
|
+
|
|
87
|
+
```js
|
|
88
|
+
webex.internal.voicea.sendManualClosedCaption('Hello World', 9876543210, [654321, 123456, 789034, 893628], true);
|
|
89
|
+
```
|
|
90
|
+
|
|
74
91
|
Other Triggers:
|
|
75
92
|
|
|
76
93
|
- voicea:announcement - Triggered when voicea has
|
package/dist/constants.js
CHANGED
|
@@ -4,7 +4,7 @@ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/defi
|
|
|
4
4
|
_Object$defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.VOICEA = exports.TURN_ON_CAPTION_STATUS = exports.TRANSCRIPTION_TYPE = exports.EVENT_TRIGGERS = exports.ANNOUNCE_STATUS = exports.AIBRIDGE_RELAY_TYPES = void 0;
|
|
7
|
+
exports.VOICEA = exports.TURN_ON_CAPTION_STATUS = exports.TRANSCRIPTION_TYPE = exports.TOGGLE_MANUAL_CAPTION_STATUS = exports.EVENT_TRIGGERS = exports.ANNOUNCE_STATUS = exports.AIBRIDGE_RELAY_TYPES = void 0;
|
|
8
8
|
var EVENT_TRIGGERS = exports.EVENT_TRIGGERS = {
|
|
9
9
|
VOICEA_ANNOUNCEMENT: 'voicea:announcement',
|
|
10
10
|
CAPTION_LANGUAGE_UPDATE: 'voicea:captionLanguageUpdate',
|
|
@@ -26,7 +26,8 @@ var AIBRIDGE_RELAY_TYPES = exports.AIBRIDGE_RELAY_TYPES = {
|
|
|
26
26
|
TRANSCRIPTION: 'voicea.transcription'
|
|
27
27
|
},
|
|
28
28
|
MANUAL: {
|
|
29
|
-
TRANSCRIPTION: 'aibridge.manual_transcription'
|
|
29
|
+
TRANSCRIPTION: 'aibridge.manual_transcription',
|
|
30
|
+
CAPTIONER: 'client.manual_transcription'
|
|
30
31
|
}
|
|
31
32
|
};
|
|
32
33
|
var TRANSCRIPTION_TYPE = exports.TRANSCRIPTION_TYPE = {
|
|
@@ -38,6 +39,7 @@ var TRANSCRIPTION_TYPE = exports.TRANSCRIPTION_TYPE = {
|
|
|
38
39
|
TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',
|
|
39
40
|
TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',
|
|
40
41
|
MANUAL_CAPTION_INTERIM_RESULTS: 'manual_caption_interim_results',
|
|
42
|
+
MANUAL_CAPTION_INTERIM_RESULT: 'manual_caption_interim_result',
|
|
41
43
|
MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result'
|
|
42
44
|
};
|
|
43
45
|
var VOICEA = exports.VOICEA = 'voicea';
|
|
@@ -51,4 +53,8 @@ var TURN_ON_CAPTION_STATUS = exports.TURN_ON_CAPTION_STATUS = {
|
|
|
51
53
|
ENABLED: 'enabled',
|
|
52
54
|
SENDING: 'sending'
|
|
53
55
|
};
|
|
56
|
+
var TOGGLE_MANUAL_CAPTION_STATUS = exports.TOGGLE_MANUAL_CAPTION_STATUS = {
|
|
57
|
+
IDLE: 'idle',
|
|
58
|
+
SENDING: 'sending'
|
|
59
|
+
};
|
|
54
60
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EVENT_TRIGGERS","exports","VOICEA_ANNOUNCEMENT","CAPTION_LANGUAGE_UPDATE","SPOKEN_LANGUAGE_UPDATE","CAPTIONS_TURNED_ON","TRANSCRIBING_ON","TRANSCRIBING_OFF","NEW_CAPTION","EVA_COMMAND","HIGHLIGHT_CREATED","NEW_MANUAL_CAPTION","AIBRIDGE_RELAY_TYPES","VOICEA","ANNOUNCEMENT","CLIENT_ANNOUNCEMENT","TRANSLATION_REQUEST","TRANSLATION_RESPONSE","TRANSCRIPTION","MANUAL","TRANSCRIPTION_TYPE","UNKNOWN","EVA_WAKE","EVA_THANKS","EVA_CANCEL","TRANSCRIPT_INTERIM_RESULTS","TRANSCRIPT_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULTS","MANUAL_CAPTION_FINAL_RESULT","ANNOUNCE_STATUS","IDLE","JOINED","JOINING","TURN_ON_CAPTION_STATUS","ENABLED","SENDING"],"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 NEW_MANUAL_CAPTION: 'aibridge:newManualCaption',\n};\n\nexport const AIBRIDGE_RELAY_TYPES = {\n VOICEA: {\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 MANUAL: {\n TRANSCRIPTION: 'aibridge.manual_transcription',\n },\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 MANUAL_CAPTION_INTERIM_RESULTS: 'manual_caption_interim_results',\n MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result',\n};\n\nexport const VOICEA = 'voicea';\n\nexport const ANNOUNCE_STATUS = {\n IDLE: 'idle',\n JOINED: 'joined',\n JOINING: 'joining',\n};\n\nexport const TURN_ON_CAPTION_STATUS = {\n IDLE: 'idle',\n ENABLED: 'enabled',\n SENDING: 'sending',\n};\n"],"mappings":";;;;;;;AAAO,IAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG;EAC5BE,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,yBAAyB;EAC5CC,kBAAkB,EAAE;AACtB,CAAC;AAEM,IAAMC,oBAAoB,GAAAX,OAAA,CAAAW,oBAAA,GAAG;EAClCC,MAAM,EAAE;IACNC,YAAY,EAAE,aAAa;IAC3BC,mBAAmB,EAAE,aAAa;IAClCC,mBAAmB,EAAE,mBAAmB;IACxCC,oBAAoB,EAAE,mBAAmB;IACzCC,aAAa,EAAE;EACjB,CAAC;EACDC,MAAM,EAAE;IACND,aAAa,EAAE;
|
|
1
|
+
{"version":3,"names":["EVENT_TRIGGERS","exports","VOICEA_ANNOUNCEMENT","CAPTION_LANGUAGE_UPDATE","SPOKEN_LANGUAGE_UPDATE","CAPTIONS_TURNED_ON","TRANSCRIBING_ON","TRANSCRIBING_OFF","NEW_CAPTION","EVA_COMMAND","HIGHLIGHT_CREATED","NEW_MANUAL_CAPTION","AIBRIDGE_RELAY_TYPES","VOICEA","ANNOUNCEMENT","CLIENT_ANNOUNCEMENT","TRANSLATION_REQUEST","TRANSLATION_RESPONSE","TRANSCRIPTION","MANUAL","CAPTIONER","TRANSCRIPTION_TYPE","UNKNOWN","EVA_WAKE","EVA_THANKS","EVA_CANCEL","TRANSCRIPT_INTERIM_RESULTS","TRANSCRIPT_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULTS","MANUAL_CAPTION_INTERIM_RESULT","MANUAL_CAPTION_FINAL_RESULT","ANNOUNCE_STATUS","IDLE","JOINED","JOINING","TURN_ON_CAPTION_STATUS","ENABLED","SENDING","TOGGLE_MANUAL_CAPTION_STATUS"],"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 NEW_MANUAL_CAPTION: 'aibridge:newManualCaption',\n};\n\nexport const AIBRIDGE_RELAY_TYPES = {\n VOICEA: {\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 MANUAL: {\n TRANSCRIPTION: 'aibridge.manual_transcription',\n CAPTIONER: 'client.manual_transcription',\n },\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 MANUAL_CAPTION_INTERIM_RESULTS: 'manual_caption_interim_results',\n MANUAL_CAPTION_INTERIM_RESULT: 'manual_caption_interim_result',\n MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result',\n};\n\nexport const VOICEA = 'voicea';\n\nexport const ANNOUNCE_STATUS = {\n IDLE: 'idle',\n JOINED: 'joined',\n JOINING: 'joining',\n};\n\nexport const TURN_ON_CAPTION_STATUS = {\n IDLE: 'idle',\n ENABLED: 'enabled',\n SENDING: 'sending',\n};\n\nexport const TOGGLE_MANUAL_CAPTION_STATUS = {\n IDLE: 'idle',\n SENDING: 'sending',\n};\n"],"mappings":";;;;;;;AAAO,IAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG;EAC5BE,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,yBAAyB;EAC5CC,kBAAkB,EAAE;AACtB,CAAC;AAEM,IAAMC,oBAAoB,GAAAX,OAAA,CAAAW,oBAAA,GAAG;EAClCC,MAAM,EAAE;IACNC,YAAY,EAAE,aAAa;IAC3BC,mBAAmB,EAAE,aAAa;IAClCC,mBAAmB,EAAE,mBAAmB;IACxCC,oBAAoB,EAAE,mBAAmB;IACzCC,aAAa,EAAE;EACjB,CAAC;EACDC,MAAM,EAAE;IACND,aAAa,EAAE,+BAA+B;IAC9CE,SAAS,EAAE;EACb;AACF,CAAC;AAEM,IAAMC,kBAAkB,GAAApB,OAAA,CAAAoB,kBAAA,GAAG;EAChCC,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE,YAAY;EACxBf,iBAAiB,EAAE,mBAAmB;EACtCgB,0BAA0B,EAAE,4BAA4B;EACxDC,uBAAuB,EAAE,yBAAyB;EAClDC,8BAA8B,EAAE,gCAAgC;EAChEC,6BAA6B,EAAE,+BAA+B;EAC9DC,2BAA2B,EAAE;AAC/B,CAAC;AAEM,IAAMjB,MAAM,GAAAZ,OAAA,CAAAY,MAAA,GAAG,QAAQ;AAEvB,IAAMkB,eAAe,GAAA9B,OAAA,CAAA8B,eAAA,GAAG;EAC7BC,IAAI,EAAE,MAAM;EACZC,MAAM,EAAE,QAAQ;EAChBC,OAAO,EAAE;AACX,CAAC;AAEM,IAAMC,sBAAsB,GAAAlC,OAAA,CAAAkC,sBAAA,GAAG;EACpCH,IAAI,EAAE,MAAM;EACZI,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE;AACX,CAAC;AAEM,IAAMC,4BAA4B,GAAArC,OAAA,CAAAqC,4BAAA,GAAG;EAC1CN,IAAI,EAAE,MAAM;EACZK,OAAO,EAAE;AACX,CAAC"}
|
|
@@ -20,6 +20,7 @@ export declare const AIBRIDGE_RELAY_TYPES: {
|
|
|
20
20
|
};
|
|
21
21
|
MANUAL: {
|
|
22
22
|
TRANSCRIPTION: string;
|
|
23
|
+
CAPTIONER: string;
|
|
23
24
|
};
|
|
24
25
|
};
|
|
25
26
|
export declare const TRANSCRIPTION_TYPE: {
|
|
@@ -31,6 +32,7 @@ export declare const TRANSCRIPTION_TYPE: {
|
|
|
31
32
|
TRANSCRIPT_INTERIM_RESULTS: string;
|
|
32
33
|
TRANSCRIPT_FINAL_RESULT: string;
|
|
33
34
|
MANUAL_CAPTION_INTERIM_RESULTS: string;
|
|
35
|
+
MANUAL_CAPTION_INTERIM_RESULT: string;
|
|
34
36
|
MANUAL_CAPTION_FINAL_RESULT: string;
|
|
35
37
|
};
|
|
36
38
|
export declare const VOICEA = "voicea";
|
|
@@ -44,3 +46,7 @@ export declare const TURN_ON_CAPTION_STATUS: {
|
|
|
44
46
|
ENABLED: string;
|
|
45
47
|
SENDING: string;
|
|
46
48
|
};
|
|
49
|
+
export declare const TOGGLE_MANUAL_CAPTION_STATUS: {
|
|
50
|
+
IDLE: string;
|
|
51
|
+
SENDING: string;
|
|
52
|
+
};
|
package/dist/types/voicea.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export declare class VoiceaChannel extends WebexPlugin implements IVoiceaChannel
|
|
|
13
13
|
private vmcDeviceId?;
|
|
14
14
|
private announceStatus;
|
|
15
15
|
private captionStatus;
|
|
16
|
+
private toggleManualCaptionStatus;
|
|
16
17
|
/**
|
|
17
18
|
* @param {Object} e
|
|
18
19
|
* @returns {undefined}
|
|
@@ -74,6 +75,15 @@ export declare class VoiceaChannel extends WebexPlugin implements IVoiceaChannel
|
|
|
74
75
|
* @returns {void}
|
|
75
76
|
*/
|
|
76
77
|
requestLanguage: (languageCode: string) => void;
|
|
78
|
+
/**
|
|
79
|
+
* Send manual closed captions to voicea service
|
|
80
|
+
* @param {string} text
|
|
81
|
+
* @param {number} timeStamp
|
|
82
|
+
* @param {number[]} csis
|
|
83
|
+
* @param {boolean} isFinal
|
|
84
|
+
* @returns {void}
|
|
85
|
+
*/
|
|
86
|
+
sendManualClosedCaption: (text: string, timeStamp: number, csis: number[], isFinal: boolean) => void;
|
|
77
87
|
/**
|
|
78
88
|
* request turn on Captions
|
|
79
89
|
* @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English
|
|
@@ -103,14 +113,14 @@ export declare class VoiceaChannel extends WebexPlugin implements IVoiceaChannel
|
|
|
103
113
|
turnOnCaptions: (spokenLanguage?: any) => undefined | Promise<void>;
|
|
104
114
|
/**
|
|
105
115
|
* Toggle transcribing for highlights
|
|
106
|
-
* @param {
|
|
116
|
+
* @param {boolean} activate true means to turn on transcribing and false means to turn off
|
|
107
117
|
* @param {string} spokenLanguage language code for spoken language
|
|
108
118
|
* @returns {Promise}
|
|
109
119
|
*/
|
|
110
120
|
toggleTranscribing: (activate: boolean, spokenLanguage?: string) => undefined | Promise<void>;
|
|
111
121
|
/**
|
|
112
122
|
* Toggle turn on manual caption
|
|
113
|
-
* @param {
|
|
123
|
+
* @param {boolean} enable true means to turn on manual caption, false means to turn off
|
|
114
124
|
* @returns {Promise}
|
|
115
125
|
*/
|
|
116
126
|
toggleManualCaption: (enable: boolean) => undefined | Promise<void>;
|
|
@@ -44,6 +44,8 @@ interface Highlight {
|
|
|
44
44
|
interface TranscriptionResponse {
|
|
45
45
|
type: TRANSCRIPTION_TYPES;
|
|
46
46
|
id: string;
|
|
47
|
+
sender: string;
|
|
48
|
+
data_source: string;
|
|
47
49
|
transcript_id: string;
|
|
48
50
|
translations?: {
|
|
49
51
|
[x: string]: string;
|
|
@@ -70,6 +72,8 @@ interface IVoiceaChannel {
|
|
|
70
72
|
turnOnCaptions: () => undefined | Promise<void>;
|
|
71
73
|
toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;
|
|
72
74
|
deregisterEvents: () => void;
|
|
75
|
+
toggleManualCaption: (enable: boolean) => undefined | Promise<void>;
|
|
76
|
+
sendManualClosedCaption: (text: string, timeStamp: number, csis: number[], isFinal: boolean) => void;
|
|
73
77
|
}
|
|
74
78
|
type MeetingTranscripts = {
|
|
75
79
|
start_mills?: number;
|
package/dist/voicea.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
+
var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
5
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
6
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
7
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
8
|
+
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
4
9
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
5
10
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
11
|
_Object$defineProperty(exports, "__esModule", {
|
|
@@ -20,6 +25,8 @@ var _uuid = _interopRequireDefault(require("uuid"));
|
|
|
20
25
|
var _webexCore = require("@webex/webex-core");
|
|
21
26
|
var _constants = require("./constants");
|
|
22
27
|
var _utils = require("./utils");
|
|
28
|
+
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
29
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
23
30
|
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); }; }
|
|
24
31
|
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; } } // eslint-disable-next-line no-unused-vars
|
|
25
32
|
/**
|
|
@@ -48,11 +55,13 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
48
55
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "vmcDeviceId", void 0);
|
|
49
56
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "announceStatus", void 0);
|
|
50
57
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "captionStatus", void 0);
|
|
58
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "toggleManualCaptionStatus", void 0);
|
|
51
59
|
/**
|
|
52
60
|
* @param {Object} e
|
|
53
61
|
* @returns {undefined}
|
|
54
62
|
*/
|
|
55
63
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "eventProcessor", function (e) {
|
|
64
|
+
var _e$headers;
|
|
56
65
|
_this.seqNum = e.sequenceNumber + 1;
|
|
57
66
|
switch (e.data.relayType) {
|
|
58
67
|
case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:
|
|
@@ -67,7 +76,11 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
67
76
|
_this.processTranscription(e.data.voiceaPayload);
|
|
68
77
|
break;
|
|
69
78
|
case _constants.AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:
|
|
70
|
-
|
|
79
|
+
case _constants.AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:
|
|
80
|
+
_this.processManualTranscription(_objectSpread(_objectSpread({}, e.data.transcriptPayload), {}, {
|
|
81
|
+
sender: (_e$headers = e.headers) === null || _e$headers === void 0 ? void 0 : _e$headers.from,
|
|
82
|
+
data_source: e.data.relayType
|
|
83
|
+
}));
|
|
71
84
|
break;
|
|
72
85
|
default:
|
|
73
86
|
break;
|
|
@@ -79,18 +92,15 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
79
92
|
* @returns {void}
|
|
80
93
|
*/
|
|
81
94
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "processManualTranscription", function (transcriptPayload) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
break;
|
|
92
|
-
default:
|
|
93
|
-
break;
|
|
95
|
+
if (transcriptPayload.type === _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT || transcriptPayload.type === _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT) {
|
|
96
|
+
// @ts-ignore
|
|
97
|
+
_this.trigger(_constants.EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {
|
|
98
|
+
isFinal: transcriptPayload.type === _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,
|
|
99
|
+
transcriptId: transcriptPayload.id,
|
|
100
|
+
transcripts: transcriptPayload.transcripts,
|
|
101
|
+
sender: transcriptPayload.sender,
|
|
102
|
+
source: transcriptPayload.data_source
|
|
103
|
+
});
|
|
94
104
|
}
|
|
95
105
|
});
|
|
96
106
|
/**
|
|
@@ -266,6 +276,45 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
266
276
|
});
|
|
267
277
|
_this.seqNum += 1;
|
|
268
278
|
});
|
|
279
|
+
/**
|
|
280
|
+
* Send manual closed captions to voicea service
|
|
281
|
+
* @param {string} text
|
|
282
|
+
* @param {number} timeStamp
|
|
283
|
+
* @param {number[]} csis
|
|
284
|
+
* @param {boolean} isFinal
|
|
285
|
+
* @returns {void}
|
|
286
|
+
*/
|
|
287
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sendManualClosedCaption", function (text, timeStamp, csis, isFinal) {
|
|
288
|
+
// @ts-ignore
|
|
289
|
+
if (!_this.webex.internal.llm.isConnected()) return;
|
|
290
|
+
|
|
291
|
+
// @ts-ignore
|
|
292
|
+
_this.webex.internal.llm.socket.send({
|
|
293
|
+
id: "".concat(_this.seqNum),
|
|
294
|
+
type: 'publishRequest',
|
|
295
|
+
recipients: {
|
|
296
|
+
// @ts-ignore
|
|
297
|
+
route: _this.webex.internal.llm.getBinding()
|
|
298
|
+
},
|
|
299
|
+
headers: {},
|
|
300
|
+
data: {
|
|
301
|
+
eventType: 'relay.event',
|
|
302
|
+
relayType: _constants.AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER,
|
|
303
|
+
transcriptPayload: {
|
|
304
|
+
type: isFinal ? _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT : _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT,
|
|
305
|
+
id: _uuid.default.v4(),
|
|
306
|
+
transcripts: [{
|
|
307
|
+
text: text,
|
|
308
|
+
start_millis: timeStamp,
|
|
309
|
+
end_millis: timeStamp,
|
|
310
|
+
csis: csis
|
|
311
|
+
}]
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
trackingId: "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString())
|
|
315
|
+
});
|
|
316
|
+
_this.seqNum += 1;
|
|
317
|
+
});
|
|
269
318
|
/**
|
|
270
319
|
* request turn on Captions
|
|
271
320
|
* @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English
|
|
@@ -361,7 +410,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
361
410
|
}());
|
|
362
411
|
/**
|
|
363
412
|
* Toggle transcribing for highlights
|
|
364
|
-
* @param {
|
|
413
|
+
* @param {boolean} activate true means to turn on transcribing and false means to turn off
|
|
365
414
|
* @param {string} spokenLanguage language code for spoken language
|
|
366
415
|
* @returns {Promise}
|
|
367
416
|
*/
|
|
@@ -386,10 +435,13 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
386
435
|
});
|
|
387
436
|
/**
|
|
388
437
|
* Toggle turn on manual caption
|
|
389
|
-
* @param {
|
|
438
|
+
* @param {boolean} enable true means to turn on manual caption, false means to turn off
|
|
390
439
|
* @returns {Promise}
|
|
391
440
|
*/
|
|
392
441
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "toggleManualCaption", function (enable) {
|
|
442
|
+
if (_this.toggleManualCaptionStatus === _constants.TOGGLE_MANUAL_CAPTION_STATUS.SENDING) return undefined;
|
|
443
|
+
_this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.SENDING;
|
|
444
|
+
|
|
393
445
|
// @ts-ignore
|
|
394
446
|
return _this.request({
|
|
395
447
|
method: 'PUT',
|
|
@@ -401,7 +453,11 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
401
453
|
}
|
|
402
454
|
}
|
|
403
455
|
}).then(function () {
|
|
456
|
+
_this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
404
457
|
return undefined;
|
|
458
|
+
}).catch(function () {
|
|
459
|
+
_this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
460
|
+
throw new Error('toggle manual captions fail');
|
|
405
461
|
});
|
|
406
462
|
});
|
|
407
463
|
/**
|
|
@@ -423,6 +479,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
423
479
|
_this.vmcDeviceId = undefined;
|
|
424
480
|
_this.announceStatus = _constants.ANNOUNCE_STATUS.IDLE;
|
|
425
481
|
_this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.IDLE;
|
|
482
|
+
_this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
426
483
|
return _this;
|
|
427
484
|
}
|
|
428
485
|
(0, _createClass2.default)(VoiceaChannel, [{
|
|
@@ -454,6 +511,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
454
511
|
this.hasSubscribedToEvents = false;
|
|
455
512
|
this.announceStatus = _constants.ANNOUNCE_STATUS.IDLE;
|
|
456
513
|
this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.IDLE;
|
|
514
|
+
this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
457
515
|
}
|
|
458
516
|
}]);
|
|
459
517
|
return VoiceaChannel;
|
package/dist/voicea.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_constants","_utils","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","VoiceaChannel","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","VOICEA","seqNum","sequenceNumber","data","relayType","AIBRIDGE_RELAY_TYPES","ANNOUNCEMENT","vmcDeviceId","headers","from","announceStatus","ANNOUNCE_STATUS","JOINED","processAnnouncementMessage","voiceaPayload","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","MANUAL","processManualTranscription","transcriptPayload","type","TRANSCRIPTION_TYPE","MANUAL_CAPTION_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULTS","trigger","EVENT_TRIGGERS","NEW_MANUAL_CAPTION","isFinal","transcriptId","id","transcripts","TRANSCRIPT_INTERIM_RESULTS","NEW_CAPTION","transcript_id","TRANSCRIPT_FINAL_RESULT","map","transcript","timestamp","millisToMinutesAndSeconds","end_millis","HIGHLIGHT_CREATED","csis","highlight","highlightId","highlight_id","text","highlightLabel","highlight_label","highlightSource","highlight_source","EVA_THANKS","EVA_COMMAND","isListening","command_response","EVA_WAKE","EVA_CANCEL","statusCode","CAPTION_LANGUAGE_UPDATE","errorCode","errorMessage","message","_voiceaPayload$transl","_voiceaPayload$transl2","_voiceaPayload$transl3","_voiceaPayload$transl4","_voiceaPayload$ASR$sp","_voiceaPayload$ASR","voiceaLanguageOptions","captionLanguages","translation","allowed_languages","maxLanguages","max_languages","spokenLanguages","ASR","spoken_languages","VOICEA_ANNOUNCEMENT","JOINING","listenToEvents","webex","internal","llm","socket","send","recipients","route","getBinding","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","languageCode","request","method","url","getLocusUrl","body","transcribe","spokenLanguage","then","SPOKEN_LANGUAGE_UPDATE","isConnected","to","translationLanguage","TRANSLATION_REQUEST","captionStatus","TURN_ON_CAPTION_STATUS","SENDING","caption","CAPTIONS_TURNED_ON","areCaptionsEnabled","ENABLED","announce","catch","IDLE","Error","includes","isAnnounceProcessing","sendAnnouncement","_ref","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","isCaptionProcessing","abrupt","undefined","requestTurnOnCaptions","stop","_x","activate","transcribing","turnOnCaptions","enable","manualCaption","_createClass2","key","value","hasSubscribedToEvents","on","eventProcessor","deregisterEvents","off","WebexPlugin","_default"],"sources":["voicea.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {WebexPlugin, config} from '@webex/webex-core';\n\nimport {\n EVENT_TRIGGERS,\n AIBRIDGE_RELAY_TYPES,\n TRANSCRIPTION_TYPE,\n VOICEA,\n ANNOUNCE_STATUS,\n TURN_ON_CAPTION_STATUS,\n} 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 areCaptionsEnabled: boolean;\n\n private hasSubscribedToEvents = false;\n\n private vmcDeviceId?: string;\n\n private announceStatus: string;\n\n private captionStatus: 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 AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:\n this.vmcDeviceId = e.headers.from;\n this.announceStatus = ANNOUNCE_STATUS.JOINED;\n this.processAnnouncementMessage(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:\n this.processTranscription(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:\n this.processManualTranscription(e.data.transcriptPayload);\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 /**\n * Listen to websocket messages\n * @returns {void}\n */\n public deregisterEvents() {\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 this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n }\n\n /**\n * Initializes Voicea plugin\n * @param {any} args\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n }\n\n /**\n * Process manual Transcript and send alert\n * @param {TranscriptionResponse} transcriptPayload\n * @returns {void}\n */\n private processManualTranscription = (transcriptPayload: TranscriptionResponse): void => {\n switch (transcriptPayload.type) {\n case TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT:\n case TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULTS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {\n isFinal: transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,\n transcriptId: transcriptPayload.id,\n transcripts: transcriptPayload.transcripts,\n });\n break;\n\n default:\n break;\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 // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\n });\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts.map((transcript) => {\n transcript.timestamp = millisToMinutesAndSeconds(transcript.end_millis);\n\n return transcript;\n }),\n });\n break;\n\n case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:\n // @ts-ignore\n this.trigger(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),\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: false,\n text: voiceaPayload.command_response,\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_WAKE:\n case TRANSCRIPTION_TYPE.EVA_CANCEL:\n // @ts-ignore\n this.trigger(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 // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {statusCode: 200});\n } else {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {\n statusCode: voiceaPayload.errorCode,\n 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 // @ts-ignore\n this.trigger(EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);\n };\n\n /**\n * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n private sendAnnouncement = (): void => {\n this.announceStatus = ANNOUNCE_STATUS.JOINING;\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: AIBRIDGE_RELAY_TYPES.VOICEA.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 transcribe: {\n spokenLanguage: languageCode,\n },\n },\n }).then(() => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {languageCode});\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: AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_REQUEST,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * request turn on Captions\n * @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English\n * @returns {Promise}\n */\n private requestTurnOnCaptions = (languageCode?): undefined | Promise<void> => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.SENDING;\n\n // only set the spoken language if it is provided\n const body = {\n transcribe: {caption: true},\n languageCode,\n };\n\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 })\n .then(() => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTIONS_TURNED_ON);\n\n this.areCaptionsEnabled = true;\n this.captionStatus = TURN_ON_CAPTION_STATUS.ENABLED;\n this.announce();\n })\n .catch(() => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n throw new Error('turn on captions fail');\n });\n };\n\n /**\n * is announce processing\n * @returns {boolean}\n */\n private isAnnounceProcessing = () =>\n [ANNOUNCE_STATUS.JOINING, ANNOUNCE_STATUS.JOINED].includes(this.announceStatus);\n\n /**\n * announce to voicea data chanel\n * @returns {void}\n */\n public announce = () => {\n if (this.isAnnounceProcessing()) return;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('voicea can not announce before llm connected');\n }\n this.sendAnnouncement();\n };\n\n /**\n * is turn on caption processing\n * @returns {boolean}\n */\n private isCaptionProcessing = () =>\n [TURN_ON_CAPTION_STATUS.SENDING, TURN_ON_CAPTION_STATUS.ENABLED].includes(this.captionStatus);\n\n /**\n * Turn on Captions\n * @param {string} [spokenLanguage] - Optional Spoken language code\n * @returns {Promise}\n */\n public turnOnCaptions = async (spokenLanguage?): undefined | Promise<void> => {\n if (this.isCaptionProcessing()) return undefined;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('can not turn on captions before llm connected');\n }\n\n return this.requestTurnOnCaptions(spokenLanguage);\n };\n\n /**\n * Toggle transcribing for highlights\n * @param {bool} activate if true transcribing is turned on\n * @param {string} spokenLanguage language code for spoken language\n * @returns {Promise}\n */\n public toggleTranscribing = (\n activate: boolean,\n spokenLanguage?: string\n ): 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: {\n transcribing: activate,\n },\n spokenLanguage,\n },\n }).then((): undefined | Promise<void> => {\n if (activate && !this.areCaptionsEnabled) {\n return this.turnOnCaptions(spokenLanguage);\n }\n\n return undefined;\n });\n };\n\n /**\n * Toggle turn on manual caption\n * @param {bool} enable if true manual caption is turned on\n * @returns {Promise}\n */\n public toggleManualCaption = (enable: 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 manualCaption: {\n enable,\n },\n },\n }).then((): undefined | Promise<void> => {\n return undefined;\n });\n };\n\n /**\n * get caption status\n * @returns {string}\n */\n public getCaptionStatus = () => this.captionStatus;\n\n /**\n * get announce status\n * @returns {string}\n */\n public getAnnounceStatus = () => this.announceStatus;\n}\n\nexport default VoiceaChannel;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_constants","_utils","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","VoiceaChannel","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","args","Array","_key","concat","_assertThisInitialized2","VOICEA","_e$headers","seqNum","sequenceNumber","data","relayType","AIBRIDGE_RELAY_TYPES","ANNOUNCEMENT","vmcDeviceId","headers","from","announceStatus","ANNOUNCE_STATUS","JOINED","processAnnouncementMessage","voiceaPayload","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","MANUAL","CAPTIONER","processManualTranscription","transcriptPayload","sender","data_source","type","TRANSCRIPTION_TYPE","MANUAL_CAPTION_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULT","trigger","EVENT_TRIGGERS","NEW_MANUAL_CAPTION","isFinal","transcriptId","id","transcripts","source","TRANSCRIPT_INTERIM_RESULTS","NEW_CAPTION","transcript_id","TRANSCRIPT_FINAL_RESULT","map","transcript","timestamp","millisToMinutesAndSeconds","end_millis","HIGHLIGHT_CREATED","csis","highlight","highlightId","highlight_id","text","highlightLabel","highlight_label","highlightSource","highlight_source","EVA_THANKS","EVA_COMMAND","isListening","command_response","EVA_WAKE","EVA_CANCEL","statusCode","CAPTION_LANGUAGE_UPDATE","errorCode","errorMessage","message","_voiceaPayload$transl","_voiceaPayload$transl2","_voiceaPayload$transl3","_voiceaPayload$transl4","_voiceaPayload$ASR$sp","_voiceaPayload$ASR","voiceaLanguageOptions","captionLanguages","translation","allowed_languages","maxLanguages","max_languages","spokenLanguages","ASR","spoken_languages","VOICEA_ANNOUNCEMENT","JOINING","listenToEvents","webex","internal","llm","socket","send","recipients","route","getBinding","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","languageCode","request","method","url","getLocusUrl","body","transcribe","spokenLanguage","then","SPOKEN_LANGUAGE_UPDATE","isConnected","to","translationLanguage","TRANSLATION_REQUEST","timeStamp","start_millis","captionStatus","TURN_ON_CAPTION_STATUS","SENDING","caption","CAPTIONS_TURNED_ON","areCaptionsEnabled","ENABLED","announce","catch","IDLE","Error","includes","isAnnounceProcessing","sendAnnouncement","_ref","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","isCaptionProcessing","abrupt","undefined","requestTurnOnCaptions","stop","_x","activate","transcribing","turnOnCaptions","enable","toggleManualCaptionStatus","TOGGLE_MANUAL_CAPTION_STATUS","manualCaption","_createClass2","key","value","hasSubscribedToEvents","on","eventProcessor","deregisterEvents","off","WebexPlugin","_default"],"sources":["voicea.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {WebexPlugin, config} from '@webex/webex-core';\n\nimport {\n EVENT_TRIGGERS,\n AIBRIDGE_RELAY_TYPES,\n TRANSCRIPTION_TYPE,\n VOICEA,\n ANNOUNCE_STATUS,\n TURN_ON_CAPTION_STATUS,\n TOGGLE_MANUAL_CAPTION_STATUS,\n} 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 areCaptionsEnabled: boolean;\n\n private hasSubscribedToEvents = false;\n\n private vmcDeviceId?: string;\n\n private announceStatus: string;\n\n private captionStatus: string;\n\n private toggleManualCaptionStatus: 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 AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:\n this.vmcDeviceId = e.headers.from;\n this.announceStatus = ANNOUNCE_STATUS.JOINED;\n this.processAnnouncementMessage(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:\n this.processTranscription(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:\n case AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:\n this.processManualTranscription({\n ...e.data.transcriptPayload,\n sender: e.headers?.from,\n data_source: e.data.relayType,\n });\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 /**\n * Listen to websocket messages\n * @returns {void}\n */\n public deregisterEvents() {\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 this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n }\n\n /**\n * Initializes Voicea plugin\n * @param {any} args\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n }\n\n /**\n * Process manual Transcript and send alert\n * @param {TranscriptionResponse} transcriptPayload\n * @returns {void}\n */\n private processManualTranscription = (transcriptPayload: TranscriptionResponse): void => {\n if (\n transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT ||\n transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT\n ) {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {\n isFinal: transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,\n transcriptId: transcriptPayload.id,\n transcripts: transcriptPayload.transcripts,\n sender: transcriptPayload.sender,\n source: transcriptPayload.data_source,\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 // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\n });\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts.map((transcript) => {\n transcript.timestamp = millisToMinutesAndSeconds(transcript.end_millis);\n\n return transcript;\n }),\n });\n break;\n\n case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:\n // @ts-ignore\n this.trigger(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),\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: false,\n text: voiceaPayload.command_response,\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_WAKE:\n case TRANSCRIPTION_TYPE.EVA_CANCEL:\n // @ts-ignore\n this.trigger(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 // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {statusCode: 200});\n } else {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {\n statusCode: voiceaPayload.errorCode,\n 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 // @ts-ignore\n this.trigger(EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);\n };\n\n /**\n * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n private sendAnnouncement = (): void => {\n this.announceStatus = ANNOUNCE_STATUS.JOINING;\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: AIBRIDGE_RELAY_TYPES.VOICEA.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 transcribe: {\n spokenLanguage: languageCode,\n },\n },\n }).then(() => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {languageCode});\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: AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_REQUEST,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Send manual closed captions to voicea service\n * @param {string} text\n * @param {number} timeStamp\n * @param {number[]} csis\n * @param {boolean} isFinal\n * @returns {void}\n */\n public sendManualClosedCaption = (\n text: string,\n timeStamp: number,\n csis: number[],\n isFinal: boolean\n ): void => {\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n\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 eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER,\n transcriptPayload: {\n type: isFinal\n ? TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT\n : TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT,\n id: uuid.v4(),\n transcripts: [\n {\n text,\n start_millis: timeStamp,\n end_millis: timeStamp,\n csis,\n },\n ],\n },\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * request turn on Captions\n * @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English\n * @returns {Promise}\n */\n private requestTurnOnCaptions = (languageCode?): undefined | Promise<void> => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.SENDING;\n\n // only set the spoken language if it is provided\n const body = {\n transcribe: {caption: true},\n languageCode,\n };\n\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 })\n .then(() => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTIONS_TURNED_ON);\n\n this.areCaptionsEnabled = true;\n this.captionStatus = TURN_ON_CAPTION_STATUS.ENABLED;\n this.announce();\n })\n .catch(() => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n throw new Error('turn on captions fail');\n });\n };\n\n /**\n * is announce processing\n * @returns {boolean}\n */\n private isAnnounceProcessing = () =>\n [ANNOUNCE_STATUS.JOINING, ANNOUNCE_STATUS.JOINED].includes(this.announceStatus);\n\n /**\n * announce to voicea data chanel\n * @returns {void}\n */\n public announce = () => {\n if (this.isAnnounceProcessing()) return;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('voicea can not announce before llm connected');\n }\n this.sendAnnouncement();\n };\n\n /**\n * is turn on caption processing\n * @returns {boolean}\n */\n private isCaptionProcessing = () =>\n [TURN_ON_CAPTION_STATUS.SENDING, TURN_ON_CAPTION_STATUS.ENABLED].includes(this.captionStatus);\n\n /**\n * Turn on Captions\n * @param {string} [spokenLanguage] - Optional Spoken language code\n * @returns {Promise}\n */\n public turnOnCaptions = async (spokenLanguage?): undefined | Promise<void> => {\n if (this.isCaptionProcessing()) return undefined;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('can not turn on captions before llm connected');\n }\n\n return this.requestTurnOnCaptions(spokenLanguage);\n };\n\n /**\n * Toggle transcribing for highlights\n * @param {boolean} activate true means to turn on transcribing and false means to turn off\n * @param {string} spokenLanguage language code for spoken language\n * @returns {Promise}\n */\n public toggleTranscribing = (\n activate: boolean,\n spokenLanguage?: string\n ): 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: {\n transcribing: activate,\n },\n spokenLanguage,\n },\n }).then((): undefined | Promise<void> => {\n if (activate && !this.areCaptionsEnabled) {\n return this.turnOnCaptions(spokenLanguage);\n }\n\n return undefined;\n });\n };\n\n /**\n * Toggle turn on manual caption\n * @param {boolean} enable true means to turn on manual caption, false means to turn off\n * @returns {Promise}\n */\n public toggleManualCaption = (enable: boolean): undefined | Promise<void> => {\n if (this.toggleManualCaptionStatus === TOGGLE_MANUAL_CAPTION_STATUS.SENDING) return undefined;\n\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.SENDING;\n\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n manualCaption: {\n enable,\n },\n },\n })\n .then((): undefined | Promise<void> => {\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n\n return undefined;\n })\n .catch(() => {\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n throw new Error('toggle manual captions fail');\n });\n };\n\n /**\n * get caption status\n * @returns {string}\n */\n public getCaptionStatus = () => this.captionStatus;\n\n /**\n * get announce status\n * @returns {string}\n */\n public getAnnounceStatus = () => this.announceStatus;\n}\n\nexport default VoiceaChannel;\n"],"mappings":"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"}
|
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 timestamp: string;\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 id: string;\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, spokenLanguage: string) => undefined | Promise<void>;\n deregisterEvents: () => void;\n}\n\ntype MeetingTranscripts = {\n start_mills?: number;\n end_mills?: number;\n text: string;\n last_packet_timestamp_ms?: number;\n csis: Array<number>;\n transcript_language_code: string;\n translations?: {\n [key: string]: string;\n };\n timestamp?: string;\n};\n\ntype MeetingTranscriptPayload = {\n isFinal: boolean;\n transcriptId: string;\n transcripts: Array<MeetingTranscripts>;\n};\n\nexport type {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n Transcription,\n Highlight,\n IVoiceaChannel,\n MeetingTranscriptPayload,\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 timestamp: string;\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 id: string;\n sender: string;\n data_source: string;\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, spokenLanguage: string) => undefined | Promise<void>;\n deregisterEvents: () => void;\n toggleManualCaption: (enable: boolean) => undefined | Promise<void>;\n sendManualClosedCaption: (\n text: string,\n timeStamp: number,\n csis: number[],\n isFinal: boolean\n ) => void;\n}\n\ntype MeetingTranscripts = {\n start_mills?: number;\n end_mills?: number;\n text: string;\n last_packet_timestamp_ms?: number;\n csis: Array<number>;\n transcript_language_code: string;\n translations?: {\n [key: string]: string;\n };\n timestamp?: string;\n};\n\ntype MeetingTranscriptPayload = {\n isFinal: boolean;\n transcriptId: string;\n transcripts: Array<MeetingTranscripts>;\n};\n\nexport type {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n Transcription,\n Highlight,\n IVoiceaChannel,\n MeetingTranscriptPayload,\n};\n"],"mappings":""}
|
package/package.json
CHANGED
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
"node": ">=16"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@webex/internal-plugin-llm": "3.8.0-next.
|
|
18
|
-
"@webex/internal-plugin-mercury": "3.8.0-next.
|
|
19
|
-
"@webex/plugin-meetings": "3.8.0-next.
|
|
20
|
-
"@webex/webex-core": "3.8.0-next.
|
|
17
|
+
"@webex/internal-plugin-llm": "3.8.0-next.23",
|
|
18
|
+
"@webex/internal-plugin-mercury": "3.8.0-next.22",
|
|
19
|
+
"@webex/plugin-meetings": "3.8.0-next.71",
|
|
20
|
+
"@webex/webex-core": "3.8.0-next.20",
|
|
21
21
|
"uuid": "^3.3.2"
|
|
22
22
|
},
|
|
23
23
|
"browserify": {
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
33
33
|
"@webex/jest-config-legacy": "0.0.0",
|
|
34
34
|
"@webex/legacy-tools": "0.0.0",
|
|
35
|
-
"@webex/test-helper-chai": "3.8.0-next.
|
|
36
|
-
"@webex/test-helper-mocha": "3.8.0-next.
|
|
37
|
-
"@webex/test-helper-mock-web-socket": "3.8.0-next.
|
|
38
|
-
"@webex/test-helper-mock-webex": "3.8.0-next.
|
|
39
|
-
"@webex/test-helper-test-users": "3.8.0-next.
|
|
35
|
+
"@webex/test-helper-chai": "3.8.0-next.20",
|
|
36
|
+
"@webex/test-helper-mocha": "3.8.0-next.20",
|
|
37
|
+
"@webex/test-helper-mock-web-socket": "3.8.0-next.20",
|
|
38
|
+
"@webex/test-helper-mock-webex": "3.8.0-next.20",
|
|
39
|
+
"@webex/test-helper-test-users": "3.8.0-next.20",
|
|
40
40
|
"eslint": "^8.24.0",
|
|
41
41
|
"prettier": "^2.7.1",
|
|
42
42
|
"sinon": "^9.2.4"
|
|
@@ -50,5 +50,5 @@
|
|
|
50
50
|
"test:style": "eslint ./src/**/*.*",
|
|
51
51
|
"test:unit": "webex-legacy-tools test --unit --runner jest"
|
|
52
52
|
},
|
|
53
|
-
"version": "3.8.0-next.
|
|
53
|
+
"version": "3.8.0-next.71"
|
|
54
54
|
}
|
package/src/constants.ts
CHANGED
|
@@ -22,6 +22,7 @@ export const AIBRIDGE_RELAY_TYPES = {
|
|
|
22
22
|
},
|
|
23
23
|
MANUAL: {
|
|
24
24
|
TRANSCRIPTION: 'aibridge.manual_transcription',
|
|
25
|
+
CAPTIONER: 'client.manual_transcription',
|
|
25
26
|
},
|
|
26
27
|
};
|
|
27
28
|
|
|
@@ -34,6 +35,7 @@ export const TRANSCRIPTION_TYPE = {
|
|
|
34
35
|
TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',
|
|
35
36
|
TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',
|
|
36
37
|
MANUAL_CAPTION_INTERIM_RESULTS: 'manual_caption_interim_results',
|
|
38
|
+
MANUAL_CAPTION_INTERIM_RESULT: 'manual_caption_interim_result',
|
|
37
39
|
MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result',
|
|
38
40
|
};
|
|
39
41
|
|
|
@@ -50,3 +52,8 @@ export const TURN_ON_CAPTION_STATUS = {
|
|
|
50
52
|
ENABLED: 'enabled',
|
|
51
53
|
SENDING: 'sending',
|
|
52
54
|
};
|
|
55
|
+
|
|
56
|
+
export const TOGGLE_MANUAL_CAPTION_STATUS = {
|
|
57
|
+
IDLE: 'idle',
|
|
58
|
+
SENDING: 'sending',
|
|
59
|
+
};
|
package/src/voicea.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
VOICEA,
|
|
9
9
|
ANNOUNCE_STATUS,
|
|
10
10
|
TURN_ON_CAPTION_STATUS,
|
|
11
|
+
TOGGLE_MANUAL_CAPTION_STATUS,
|
|
11
12
|
} from './constants';
|
|
12
13
|
// eslint-disable-next-line no-unused-vars
|
|
13
14
|
import {
|
|
@@ -38,6 +39,8 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
38
39
|
|
|
39
40
|
private captionStatus: string;
|
|
40
41
|
|
|
42
|
+
private toggleManualCaptionStatus: string;
|
|
43
|
+
|
|
41
44
|
/**
|
|
42
45
|
* @param {Object} e
|
|
43
46
|
* @returns {undefined}
|
|
@@ -58,7 +61,12 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
58
61
|
this.processTranscription(e.data.voiceaPayload);
|
|
59
62
|
break;
|
|
60
63
|
case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:
|
|
61
|
-
|
|
64
|
+
case AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:
|
|
65
|
+
this.processManualTranscription({
|
|
66
|
+
...e.data.transcriptPayload,
|
|
67
|
+
sender: e.headers?.from,
|
|
68
|
+
data_source: e.data.relayType,
|
|
69
|
+
});
|
|
62
70
|
break;
|
|
63
71
|
default:
|
|
64
72
|
break;
|
|
@@ -89,6 +97,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
89
97
|
this.hasSubscribedToEvents = false;
|
|
90
98
|
this.announceStatus = ANNOUNCE_STATUS.IDLE;
|
|
91
99
|
this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;
|
|
100
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
92
101
|
}
|
|
93
102
|
|
|
94
103
|
/**
|
|
@@ -102,6 +111,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
102
111
|
this.vmcDeviceId = undefined;
|
|
103
112
|
this.announceStatus = ANNOUNCE_STATUS.IDLE;
|
|
104
113
|
this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;
|
|
114
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
105
115
|
}
|
|
106
116
|
|
|
107
117
|
/**
|
|
@@ -110,19 +120,18 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
110
120
|
* @returns {void}
|
|
111
121
|
*/
|
|
112
122
|
private processManualTranscription = (transcriptPayload: TranscriptionResponse): void => {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
break;
|
|
123
|
+
if (
|
|
124
|
+
transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT ||
|
|
125
|
+
transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT
|
|
126
|
+
) {
|
|
127
|
+
// @ts-ignore
|
|
128
|
+
this.trigger(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {
|
|
129
|
+
isFinal: transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,
|
|
130
|
+
transcriptId: transcriptPayload.id,
|
|
131
|
+
transcripts: transcriptPayload.transcripts,
|
|
132
|
+
sender: transcriptPayload.sender,
|
|
133
|
+
source: transcriptPayload.data_source,
|
|
134
|
+
});
|
|
126
135
|
}
|
|
127
136
|
};
|
|
128
137
|
|
|
@@ -303,6 +312,55 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
303
312
|
this.seqNum += 1;
|
|
304
313
|
};
|
|
305
314
|
|
|
315
|
+
/**
|
|
316
|
+
* Send manual closed captions to voicea service
|
|
317
|
+
* @param {string} text
|
|
318
|
+
* @param {number} timeStamp
|
|
319
|
+
* @param {number[]} csis
|
|
320
|
+
* @param {boolean} isFinal
|
|
321
|
+
* @returns {void}
|
|
322
|
+
*/
|
|
323
|
+
public sendManualClosedCaption = (
|
|
324
|
+
text: string,
|
|
325
|
+
timeStamp: number,
|
|
326
|
+
csis: number[],
|
|
327
|
+
isFinal: boolean
|
|
328
|
+
): void => {
|
|
329
|
+
// @ts-ignore
|
|
330
|
+
if (!this.webex.internal.llm.isConnected()) return;
|
|
331
|
+
|
|
332
|
+
// @ts-ignore
|
|
333
|
+
this.webex.internal.llm.socket.send({
|
|
334
|
+
id: `${this.seqNum}`,
|
|
335
|
+
type: 'publishRequest',
|
|
336
|
+
recipients: {
|
|
337
|
+
// @ts-ignore
|
|
338
|
+
route: this.webex.internal.llm.getBinding(),
|
|
339
|
+
},
|
|
340
|
+
headers: {},
|
|
341
|
+
data: {
|
|
342
|
+
eventType: 'relay.event',
|
|
343
|
+
relayType: AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER,
|
|
344
|
+
transcriptPayload: {
|
|
345
|
+
type: isFinal
|
|
346
|
+
? TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT
|
|
347
|
+
: TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT,
|
|
348
|
+
id: uuid.v4(),
|
|
349
|
+
transcripts: [
|
|
350
|
+
{
|
|
351
|
+
text,
|
|
352
|
+
start_millis: timeStamp,
|
|
353
|
+
end_millis: timeStamp,
|
|
354
|
+
csis,
|
|
355
|
+
},
|
|
356
|
+
],
|
|
357
|
+
},
|
|
358
|
+
},
|
|
359
|
+
trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
|
|
360
|
+
});
|
|
361
|
+
this.seqNum += 1;
|
|
362
|
+
};
|
|
363
|
+
|
|
306
364
|
/**
|
|
307
365
|
* request turn on Captions
|
|
308
366
|
* @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English
|
|
@@ -383,7 +441,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
383
441
|
|
|
384
442
|
/**
|
|
385
443
|
* Toggle transcribing for highlights
|
|
386
|
-
* @param {
|
|
444
|
+
* @param {boolean} activate true means to turn on transcribing and false means to turn off
|
|
387
445
|
* @param {string} spokenLanguage language code for spoken language
|
|
388
446
|
* @returns {Promise}
|
|
389
447
|
*/
|
|
@@ -413,10 +471,14 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
413
471
|
|
|
414
472
|
/**
|
|
415
473
|
* Toggle turn on manual caption
|
|
416
|
-
* @param {
|
|
474
|
+
* @param {boolean} enable true means to turn on manual caption, false means to turn off
|
|
417
475
|
* @returns {Promise}
|
|
418
476
|
*/
|
|
419
477
|
public toggleManualCaption = (enable: boolean): undefined | Promise<void> => {
|
|
478
|
+
if (this.toggleManualCaptionStatus === TOGGLE_MANUAL_CAPTION_STATUS.SENDING) return undefined;
|
|
479
|
+
|
|
480
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.SENDING;
|
|
481
|
+
|
|
420
482
|
// @ts-ignore
|
|
421
483
|
return this.request({
|
|
422
484
|
method: 'PUT',
|
|
@@ -427,9 +489,16 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
427
489
|
enable,
|
|
428
490
|
},
|
|
429
491
|
},
|
|
430
|
-
})
|
|
431
|
-
|
|
432
|
-
|
|
492
|
+
})
|
|
493
|
+
.then((): undefined | Promise<void> => {
|
|
494
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
495
|
+
|
|
496
|
+
return undefined;
|
|
497
|
+
})
|
|
498
|
+
.catch(() => {
|
|
499
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
500
|
+
throw new Error('toggle manual captions fail');
|
|
501
|
+
});
|
|
433
502
|
};
|
|
434
503
|
|
|
435
504
|
/**
|
package/src/voicea.types.ts
CHANGED
|
@@ -57,6 +57,8 @@ interface Highlight {
|
|
|
57
57
|
interface TranscriptionResponse {
|
|
58
58
|
type: TRANSCRIPTION_TYPES;
|
|
59
59
|
id: string;
|
|
60
|
+
sender: string;
|
|
61
|
+
data_source: string;
|
|
60
62
|
transcript_id: string;
|
|
61
63
|
translations?: {[x: string]: string};
|
|
62
64
|
transcripts?: Transcription[];
|
|
@@ -82,6 +84,13 @@ interface IVoiceaChannel {
|
|
|
82
84
|
turnOnCaptions: () => undefined | Promise<void>;
|
|
83
85
|
toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;
|
|
84
86
|
deregisterEvents: () => void;
|
|
87
|
+
toggleManualCaption: (enable: boolean) => undefined | Promise<void>;
|
|
88
|
+
sendManualClosedCaption: (
|
|
89
|
+
text: string,
|
|
90
|
+
timeStamp: number,
|
|
91
|
+
csis: number[],
|
|
92
|
+
isFinal: boolean
|
|
93
|
+
) => void;
|
|
85
94
|
}
|
|
86
95
|
|
|
87
96
|
type MeetingTranscripts = {
|
package/test/unit/spec/voicea.js
CHANGED
|
@@ -7,7 +7,7 @@ import Mercury from '@webex/internal-plugin-mercury';
|
|
|
7
7
|
import LLMChannel from '@webex/internal-plugin-llm';
|
|
8
8
|
|
|
9
9
|
import VoiceaService from '../../../src/index';
|
|
10
|
-
import {EVENT_TRIGGERS} from '../../../src/constants';
|
|
10
|
+
import {EVENT_TRIGGERS, TOGGLE_MANUAL_CAPTION_STATUS} from '../../../src/constants';
|
|
11
11
|
|
|
12
12
|
describe('plugin-voicea', () => {
|
|
13
13
|
const locusUrl = 'locusUrl';
|
|
@@ -91,6 +91,103 @@ describe('plugin-voicea', () => {
|
|
|
91
91
|
});
|
|
92
92
|
});
|
|
93
93
|
|
|
94
|
+
describe('#sendManualClosedCaption', () => {
|
|
95
|
+
beforeEach(async () => {
|
|
96
|
+
const mockWebSocket = new MockWebSocket();
|
|
97
|
+
voiceaService.webex.internal.llm.socket = mockWebSocket;
|
|
98
|
+
voiceaService.seqNum = 1;
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('sends interim manual closed caption when connected', () => {
|
|
102
|
+
const text = 'Test interim caption';
|
|
103
|
+
const timeStamp = 1234567890;
|
|
104
|
+
const csis = [123456];
|
|
105
|
+
const isFinal = false;
|
|
106
|
+
|
|
107
|
+
voiceaService.sendManualClosedCaption(text, timeStamp, csis, isFinal);
|
|
108
|
+
|
|
109
|
+
assert.calledOnceWithExactly(
|
|
110
|
+
voiceaService.webex.internal.llm.socket.send,
|
|
111
|
+
{
|
|
112
|
+
id: '1',
|
|
113
|
+
type: 'publishRequest',
|
|
114
|
+
recipients: {route: undefined},
|
|
115
|
+
headers: {},
|
|
116
|
+
data: {
|
|
117
|
+
eventType: 'relay.event',
|
|
118
|
+
relayType: 'client.manual_transcription',
|
|
119
|
+
transcriptPayload: {
|
|
120
|
+
type: 'manual_caption_interim_result',
|
|
121
|
+
id: sinon.match.string,
|
|
122
|
+
transcripts: [
|
|
123
|
+
{
|
|
124
|
+
text: 'Test interim caption',
|
|
125
|
+
start_millis: 1234567890,
|
|
126
|
+
end_millis: 1234567890,
|
|
127
|
+
csis: [123456],
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
trackingId: sinon.match.string,
|
|
133
|
+
}
|
|
134
|
+
);
|
|
135
|
+
// seqNum should increment
|
|
136
|
+
assert.equal(voiceaService.seqNum, 2);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it('sends final manual closed caption when connected', () => {
|
|
140
|
+
const text = 'Test final caption';
|
|
141
|
+
const timeStamp = 9876543210;
|
|
142
|
+
const csis = [654321];
|
|
143
|
+
const isFinal = true;
|
|
144
|
+
|
|
145
|
+
voiceaService.sendManualClosedCaption(text, timeStamp, csis, isFinal);
|
|
146
|
+
|
|
147
|
+
assert.calledOnceWithExactly(
|
|
148
|
+
voiceaService.webex.internal.llm.socket.send,
|
|
149
|
+
{
|
|
150
|
+
id: '1',
|
|
151
|
+
type: 'publishRequest',
|
|
152
|
+
recipients: {route: undefined},
|
|
153
|
+
headers: {},
|
|
154
|
+
data: {
|
|
155
|
+
eventType: 'relay.event',
|
|
156
|
+
relayType: 'client.manual_transcription',
|
|
157
|
+
transcriptPayload: {
|
|
158
|
+
type: 'manual_caption_final_result',
|
|
159
|
+
id: sinon.match.string,
|
|
160
|
+
transcripts: [
|
|
161
|
+
{
|
|
162
|
+
text: 'Test final caption',
|
|
163
|
+
start_millis: 9876543210,
|
|
164
|
+
end_millis: 9876543210,
|
|
165
|
+
csis: [654321],
|
|
166
|
+
},
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
trackingId: sinon.match.string,
|
|
171
|
+
}
|
|
172
|
+
);
|
|
173
|
+
// seqNum should increment
|
|
174
|
+
assert.equal(voiceaService.seqNum, 2);
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it('does not send if not connected', () => {
|
|
178
|
+
voiceaService.webex.internal.llm.isConnected.returns(false);
|
|
179
|
+
|
|
180
|
+
const text = 'Should not send';
|
|
181
|
+
const timeStamp = 111;
|
|
182
|
+
const csis = [1];
|
|
183
|
+
const isFinal = true;
|
|
184
|
+
|
|
185
|
+
voiceaService.sendManualClosedCaption(text, timeStamp, csis, isFinal);
|
|
186
|
+
|
|
187
|
+
assert.notCalled(voiceaService.webex.internal.llm.socket.send);
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
|
|
94
191
|
describe('#deregisterEvents', () => {
|
|
95
192
|
beforeEach(async () => {
|
|
96
193
|
const mockWebSocket = new MockWebSocket();
|
|
@@ -441,20 +538,10 @@ describe('plugin-voicea', () => {
|
|
|
441
538
|
const mockWebSocket = new MockWebSocket();
|
|
442
539
|
|
|
443
540
|
voiceaService.webex.internal.llm.socket = mockWebSocket;
|
|
541
|
+
voiceaService.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
444
542
|
});
|
|
445
543
|
|
|
446
544
|
it('turns on manual caption', async () => {
|
|
447
|
-
// Turn on captions
|
|
448
|
-
await voiceaService.turnOnCaptions();
|
|
449
|
-
|
|
450
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
451
|
-
voiceaService.webex.internal.llm._emit('event:relay.event', {
|
|
452
|
-
headers: {from: 'ws'},
|
|
453
|
-
data: {relayType: 'voicea.annc', voiceaPayload: {}},
|
|
454
|
-
});
|
|
455
|
-
|
|
456
|
-
voiceaService.listenToEvents();
|
|
457
|
-
|
|
458
545
|
await voiceaService.toggleManualCaption(true);
|
|
459
546
|
sinon.assert.calledWith(
|
|
460
547
|
voiceaService.request,
|
|
@@ -469,10 +556,6 @@ describe('plugin-voicea', () => {
|
|
|
469
556
|
|
|
470
557
|
|
|
471
558
|
it('turns off manual caption', async () => {
|
|
472
|
-
await voiceaService.toggleManualCaption(true);
|
|
473
|
-
|
|
474
|
-
voiceaService.listenToEvents();
|
|
475
|
-
|
|
476
559
|
await voiceaService.toggleManualCaption(false);
|
|
477
560
|
sinon.assert.calledWith(
|
|
478
561
|
voiceaService.request,
|
|
@@ -484,6 +567,14 @@ describe('plugin-voicea', () => {
|
|
|
484
567
|
);
|
|
485
568
|
|
|
486
569
|
});
|
|
570
|
+
|
|
571
|
+
it('ignore toggle manual caption', async () => {
|
|
572
|
+
voiceaService.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.SENDING;
|
|
573
|
+
await voiceaService.toggleManualCaption(true);
|
|
574
|
+
|
|
575
|
+
sinon.assert.notCalled(voiceaService.request);
|
|
576
|
+
|
|
577
|
+
});
|
|
487
578
|
});
|
|
488
579
|
|
|
489
580
|
describe('#processCaptionLanguageResponse', () => {
|
|
@@ -795,16 +886,17 @@ describe('plugin-voicea', () => {
|
|
|
795
886
|
voiceaService.listenToEvents();
|
|
796
887
|
});
|
|
797
888
|
|
|
798
|
-
it('processes interim manual transcription', async () => {
|
|
889
|
+
it('processes interim manual transcription from aibridge', async () => {
|
|
799
890
|
voiceaService.on(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, triggerSpy);
|
|
891
|
+
|
|
800
892
|
const transcriptPayload = {
|
|
801
893
|
id: "747d711d-3414-fd69-7081-e842649f2d28",
|
|
802
894
|
transcripts: [
|
|
803
895
|
{
|
|
804
|
-
|
|
896
|
+
text: "Good",
|
|
805
897
|
}
|
|
806
898
|
],
|
|
807
|
-
type: "
|
|
899
|
+
type: "manual_caption_interim_result",
|
|
808
900
|
};
|
|
809
901
|
|
|
810
902
|
// eslint-disable-next-line no-underscore-dangle
|
|
@@ -813,15 +905,17 @@ describe('plugin-voicea', () => {
|
|
|
813
905
|
data: {relayType: 'aibridge.manual_transcription', transcriptPayload},
|
|
814
906
|
});
|
|
815
907
|
|
|
816
|
-
assert.calledOnceWithExactly(functionSpy, transcriptPayload);
|
|
908
|
+
assert.calledOnceWithExactly(functionSpy, {...transcriptPayload, sender: 'ws', data_source: 'aibridge.manual_transcription'});
|
|
817
909
|
assert.calledOnceWithExactly(triggerSpy, {
|
|
818
910
|
isFinal: false,
|
|
819
911
|
transcriptId: '747d711d-3414-fd69-7081-e842649f2d28',
|
|
820
912
|
transcripts: transcriptPayload.transcripts,
|
|
913
|
+
sender: 'ws',
|
|
914
|
+
source: 'aibridge.manual_transcription'
|
|
821
915
|
});
|
|
822
916
|
});
|
|
823
917
|
|
|
824
|
-
it('processes final manual transcription', async () => {
|
|
918
|
+
it('processes final manual transcription from aibridge', async () => {
|
|
825
919
|
voiceaService.on(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, triggerSpy);
|
|
826
920
|
|
|
827
921
|
const transcriptPayload = {
|
|
@@ -842,11 +936,73 @@ describe('plugin-voicea', () => {
|
|
|
842
936
|
data: {relayType: 'aibridge.manual_transcription', transcriptPayload},
|
|
843
937
|
});
|
|
844
938
|
|
|
845
|
-
assert.calledOnceWithExactly(functionSpy, transcriptPayload);
|
|
939
|
+
assert.calledOnceWithExactly(functionSpy, {...transcriptPayload, sender: 'ws', data_source: 'aibridge.manual_transcription'});
|
|
940
|
+
assert.calledOnceWithExactly(triggerSpy, {
|
|
941
|
+
isFinal: true,
|
|
942
|
+
transcriptId: '8d226d31-044a-8d11-cc39-cedbde183154',
|
|
943
|
+
transcripts: transcriptPayload.transcripts,
|
|
944
|
+
sender: 'ws',
|
|
945
|
+
source: 'aibridge.manual_transcription'
|
|
946
|
+
});
|
|
947
|
+
});
|
|
948
|
+
|
|
949
|
+
it('processes interim manual transcription from captioner', async () => {
|
|
950
|
+
voiceaService.on(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, triggerSpy);
|
|
951
|
+
|
|
952
|
+
const transcriptPayload = {
|
|
953
|
+
id: "747d711d-3414-fd69-7081-e842649f2d28",
|
|
954
|
+
transcripts: [
|
|
955
|
+
{
|
|
956
|
+
text: "Good",
|
|
957
|
+
}
|
|
958
|
+
],
|
|
959
|
+
type: "manual_caption_interim_result",
|
|
960
|
+
};
|
|
961
|
+
|
|
962
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
963
|
+
await voiceaService.webex.internal.llm._emit('event:relay.event', {
|
|
964
|
+
headers: {from: '654321'},
|
|
965
|
+
data: {relayType: 'client.manual_transcription', transcriptPayload},
|
|
966
|
+
});
|
|
967
|
+
|
|
968
|
+
assert.calledOnceWithExactly(functionSpy, {...transcriptPayload, sender: '654321', data_source: 'client.manual_transcription'});
|
|
969
|
+
assert.calledOnceWithExactly(triggerSpy, {
|
|
970
|
+
isFinal: false,
|
|
971
|
+
transcriptId: '747d711d-3414-fd69-7081-e842649f2d28',
|
|
972
|
+
transcripts: transcriptPayload.transcripts,
|
|
973
|
+
sender: '654321',
|
|
974
|
+
source: 'client.manual_transcription'
|
|
975
|
+
});
|
|
976
|
+
});
|
|
977
|
+
|
|
978
|
+
it('processes final manual transcription from captioner', async () => {
|
|
979
|
+
voiceaService.on(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, triggerSpy);
|
|
980
|
+
|
|
981
|
+
const transcriptPayload = {
|
|
982
|
+
id: "8d226d31-044a-8d11-cc39-cedbde183154",
|
|
983
|
+
transcripts: [
|
|
984
|
+
{
|
|
985
|
+
text: "Good Morning",
|
|
986
|
+
start_millis: 10420,
|
|
987
|
+
end_millis: 11380,
|
|
988
|
+
}
|
|
989
|
+
],
|
|
990
|
+
type: "manual_caption_final_result",
|
|
991
|
+
};
|
|
992
|
+
|
|
993
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
994
|
+
await voiceaService.webex.internal.llm._emit('event:relay.event', {
|
|
995
|
+
headers: {from: '654321'},
|
|
996
|
+
data: {relayType: 'client.manual_transcription', transcriptPayload},
|
|
997
|
+
});
|
|
998
|
+
|
|
999
|
+
assert.calledOnceWithExactly(functionSpy, {...transcriptPayload, sender: '654321', data_source: 'client.manual_transcription'});
|
|
846
1000
|
assert.calledOnceWithExactly(triggerSpy, {
|
|
847
1001
|
isFinal: true,
|
|
848
1002
|
transcriptId: '8d226d31-044a-8d11-cc39-cedbde183154',
|
|
849
1003
|
transcripts: transcriptPayload.transcripts,
|
|
1004
|
+
sender: '654321',
|
|
1005
|
+
source: 'client.manual_transcription'
|
|
850
1006
|
});
|
|
851
1007
|
});
|
|
852
1008
|
});
|
|
@@ -866,3 +1022,4 @@ describe('plugin-voicea', () => {
|
|
|
866
1022
|
});
|
|
867
1023
|
});
|
|
868
1024
|
});
|
|
1025
|
+
|