@webex/internal-plugin-voicea 3.8.0-web-workers-keepalive.1 → 3.8.1-next.1
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 +7 -2
- package/dist/constants.js.map +1 -1
- package/dist/types/constants.d.ts +6 -1
- package/dist/types/voicea.d.ts +19 -2
- package/dist/types/voicea.types.d.ts +4 -1
- package/dist/voicea.js +69 -4
- 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 -1
- package/src/voicea.ts +88 -6
- package/src/voicea.types.ts +12 -1
- package/test/unit/spec/voicea.js +122 -16
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.DEFAULT_SPOKEN_LANGUAGE = 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',
|
|
@@ -27,7 +27,7 @@ var AIBRIDGE_RELAY_TYPES = exports.AIBRIDGE_RELAY_TYPES = {
|
|
|
27
27
|
},
|
|
28
28
|
MANUAL: {
|
|
29
29
|
TRANSCRIPTION: 'aibridge.manual_transcription',
|
|
30
|
-
|
|
30
|
+
CAPTIONER: 'client.manual_transcription'
|
|
31
31
|
}
|
|
32
32
|
};
|
|
33
33
|
var TRANSCRIPTION_TYPE = exports.TRANSCRIPTION_TYPE = {
|
|
@@ -43,6 +43,7 @@ var TRANSCRIPTION_TYPE = exports.TRANSCRIPTION_TYPE = {
|
|
|
43
43
|
MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result'
|
|
44
44
|
};
|
|
45
45
|
var VOICEA = exports.VOICEA = 'voicea';
|
|
46
|
+
var DEFAULT_SPOKEN_LANGUAGE = exports.DEFAULT_SPOKEN_LANGUAGE = 'en';
|
|
46
47
|
var ANNOUNCE_STATUS = exports.ANNOUNCE_STATUS = {
|
|
47
48
|
IDLE: 'idle',
|
|
48
49
|
JOINED: 'joined',
|
|
@@ -53,4 +54,8 @@ var TURN_ON_CAPTION_STATUS = exports.TURN_ON_CAPTION_STATUS = {
|
|
|
53
54
|
ENABLED: 'enabled',
|
|
54
55
|
SENDING: 'sending'
|
|
55
56
|
};
|
|
57
|
+
var TOGGLE_MANUAL_CAPTION_STATUS = exports.TOGGLE_MANUAL_CAPTION_STATUS = {
|
|
58
|
+
IDLE: 'idle',
|
|
59
|
+
SENDING: 'sending'
|
|
60
|
+
};
|
|
56
61
|
//# 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","
|
|
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","DEFAULT_SPOKEN_LANGUAGE","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';\nexport const DEFAULT_SPOKEN_LANGUAGE = 'en';\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;AACvB,IAAMkB,uBAAuB,GAAA9B,OAAA,CAAA8B,uBAAA,GAAG,IAAI;AAEpC,IAAMC,eAAe,GAAA/B,OAAA,CAAA+B,eAAA,GAAG;EAC7BC,IAAI,EAAE,MAAM;EACZC,MAAM,EAAE,QAAQ;EAChBC,OAAO,EAAE;AACX,CAAC;AAEM,IAAMC,sBAAsB,GAAAnC,OAAA,CAAAmC,sBAAA,GAAG;EACpCH,IAAI,EAAE,MAAM;EACZI,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE;AACX,CAAC;AAEM,IAAMC,4BAA4B,GAAAtC,OAAA,CAAAsC,4BAAA,GAAG;EAC1CN,IAAI,EAAE,MAAM;EACZK,OAAO,EAAE;AACX,CAAC"}
|
|
@@ -20,7 +20,7 @@ export declare const AIBRIDGE_RELAY_TYPES: {
|
|
|
20
20
|
};
|
|
21
21
|
MANUAL: {
|
|
22
22
|
TRANSCRIPTION: string;
|
|
23
|
-
|
|
23
|
+
CAPTIONER: string;
|
|
24
24
|
};
|
|
25
25
|
};
|
|
26
26
|
export declare const TRANSCRIPTION_TYPE: {
|
|
@@ -36,6 +36,7 @@ export declare const TRANSCRIPTION_TYPE: {
|
|
|
36
36
|
MANUAL_CAPTION_FINAL_RESULT: string;
|
|
37
37
|
};
|
|
38
38
|
export declare const VOICEA = "voicea";
|
|
39
|
+
export declare const DEFAULT_SPOKEN_LANGUAGE = "en";
|
|
39
40
|
export declare const ANNOUNCE_STATUS: {
|
|
40
41
|
IDLE: string;
|
|
41
42
|
JOINED: string;
|
|
@@ -46,3 +47,7 @@ export declare const TURN_ON_CAPTION_STATUS: {
|
|
|
46
47
|
ENABLED: string;
|
|
47
48
|
SENDING: string;
|
|
48
49
|
};
|
|
50
|
+
export declare const TOGGLE_MANUAL_CAPTION_STATUS: {
|
|
51
|
+
IDLE: string;
|
|
52
|
+
SENDING: string;
|
|
53
|
+
};
|
package/dist/types/voicea.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export declare class VoiceaChannel extends WebexPlugin implements IVoiceaChannel
|
|
|
13
13
|
private vmcDeviceId?;
|
|
14
14
|
private announceStatus;
|
|
15
15
|
private captionStatus;
|
|
16
|
+
private toggleManualCaptionStatus;
|
|
17
|
+
private currentSpokenLanguage?;
|
|
16
18
|
/**
|
|
17
19
|
* @param {Object} e
|
|
18
20
|
* @returns {undefined}
|
|
@@ -74,6 +76,15 @@ export declare class VoiceaChannel extends WebexPlugin implements IVoiceaChannel
|
|
|
74
76
|
* @returns {void}
|
|
75
77
|
*/
|
|
76
78
|
requestLanguage: (languageCode: string) => void;
|
|
79
|
+
/**
|
|
80
|
+
* Send manual closed captions to voicea service
|
|
81
|
+
* @param {string} text
|
|
82
|
+
* @param {number} timeStamp
|
|
83
|
+
* @param {number[]} csis
|
|
84
|
+
* @param {boolean} isFinal
|
|
85
|
+
* @returns {void}
|
|
86
|
+
*/
|
|
87
|
+
sendManualClosedCaption: (text: string, timeStamp: number, csis: number[], isFinal: boolean) => void;
|
|
77
88
|
/**
|
|
78
89
|
* request turn on Captions
|
|
79
90
|
* @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English
|
|
@@ -103,17 +114,23 @@ export declare class VoiceaChannel extends WebexPlugin implements IVoiceaChannel
|
|
|
103
114
|
turnOnCaptions: (spokenLanguage?: any) => undefined | Promise<void>;
|
|
104
115
|
/**
|
|
105
116
|
* Toggle transcribing for highlights
|
|
106
|
-
* @param {
|
|
117
|
+
* @param {boolean} activate true means to turn on transcribing and false means to turn off
|
|
107
118
|
* @param {string} spokenLanguage language code for spoken language
|
|
108
119
|
* @returns {Promise}
|
|
109
120
|
*/
|
|
110
121
|
toggleTranscribing: (activate: boolean, spokenLanguage?: string) => undefined | Promise<void>;
|
|
111
122
|
/**
|
|
112
123
|
* Toggle turn on manual caption
|
|
113
|
-
* @param {
|
|
124
|
+
* @param {boolean} enable true means to turn on manual caption, false means to turn off
|
|
114
125
|
* @returns {Promise}
|
|
115
126
|
*/
|
|
116
127
|
toggleManualCaption: (enable: boolean) => undefined | Promise<void>;
|
|
128
|
+
/**
|
|
129
|
+
* In meeting Spoken Language changed event
|
|
130
|
+
* @param {string} languageCode
|
|
131
|
+
* @returns {void}
|
|
132
|
+
*/
|
|
133
|
+
onSpokenLanguageUpdate: (languageCode: string) => void;
|
|
117
134
|
/**
|
|
118
135
|
* get caption status
|
|
119
136
|
* @returns {string}
|
|
@@ -10,7 +10,7 @@ interface AnnouncementPayload {
|
|
|
10
10
|
spoken_languages: string[];
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
|
-
type TRANSCRIPTION_TYPES = 'unknown' | 'eva_wake' | 'eva_thanks' | 'eva_cancel' | 'highlight_created' | 'transcript_interim_results' | 'transcript_final_result';
|
|
13
|
+
type TRANSCRIPTION_TYPES = 'unknown' | 'eva_wake' | 'eva_thanks' | 'eva_cancel' | 'highlight_created' | 'transcript_interim_results' | 'transcript_final_result' | 'manual_caption_interim_results' | 'manual_caption_interim_result' | 'manual_caption_final_result';
|
|
14
14
|
/**
|
|
15
15
|
* Class for an Transcription Object
|
|
16
16
|
*/
|
|
@@ -68,10 +68,13 @@ interface CaptionLanguageResponse {
|
|
|
68
68
|
}
|
|
69
69
|
interface IVoiceaChannel {
|
|
70
70
|
setSpokenLanguage: (languageCode: string) => Promise<void>;
|
|
71
|
+
onSpokenLanguageUpdate: (languageCode: string) => void;
|
|
71
72
|
requestLanguage: (languageCode: string) => void;
|
|
72
73
|
turnOnCaptions: () => undefined | Promise<void>;
|
|
73
74
|
toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;
|
|
74
75
|
deregisterEvents: () => void;
|
|
76
|
+
toggleManualCaption: (enable: boolean) => undefined | Promise<void>;
|
|
77
|
+
sendManualClosedCaption: (text: string, timeStamp: number, csis: number[], isFinal: boolean) => void;
|
|
75
78
|
}
|
|
76
79
|
type MeetingTranscripts = {
|
|
77
80
|
start_mills?: number;
|
package/dist/voicea.js
CHANGED
|
@@ -55,6 +55,8 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
55
55
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "vmcDeviceId", void 0);
|
|
56
56
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "announceStatus", void 0);
|
|
57
57
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "captionStatus", void 0);
|
|
58
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "toggleManualCaptionStatus", void 0);
|
|
59
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "currentSpokenLanguage", void 0);
|
|
58
60
|
/**
|
|
59
61
|
* @param {Object} e
|
|
60
62
|
* @returns {undefined}
|
|
@@ -75,7 +77,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
75
77
|
_this.processTranscription(e.data.voiceaPayload);
|
|
76
78
|
break;
|
|
77
79
|
case _constants.AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:
|
|
78
|
-
case _constants.AIBRIDGE_RELAY_TYPES.MANUAL.
|
|
80
|
+
case _constants.AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:
|
|
79
81
|
_this.processManualTranscription(_objectSpread(_objectSpread({}, e.data.transcriptPayload), {}, {
|
|
80
82
|
sender: (_e$headers = e.headers) === null || _e$headers === void 0 ? void 0 : _e$headers.from,
|
|
81
83
|
data_source: e.data.relayType
|
|
@@ -186,7 +188,8 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
186
188
|
var voiceaLanguageOptions = {
|
|
187
189
|
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 : [],
|
|
188
190
|
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,
|
|
189
|
-
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 : []
|
|
191
|
+
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 : [],
|
|
192
|
+
currentSpokenLanguage: _this.currentSpokenLanguage
|
|
190
193
|
};
|
|
191
194
|
|
|
192
195
|
// @ts-ignore
|
|
@@ -275,6 +278,45 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
275
278
|
});
|
|
276
279
|
_this.seqNum += 1;
|
|
277
280
|
});
|
|
281
|
+
/**
|
|
282
|
+
* Send manual closed captions to voicea service
|
|
283
|
+
* @param {string} text
|
|
284
|
+
* @param {number} timeStamp
|
|
285
|
+
* @param {number[]} csis
|
|
286
|
+
* @param {boolean} isFinal
|
|
287
|
+
* @returns {void}
|
|
288
|
+
*/
|
|
289
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sendManualClosedCaption", function (text, timeStamp, csis, isFinal) {
|
|
290
|
+
// @ts-ignore
|
|
291
|
+
if (!_this.webex.internal.llm.isConnected()) return;
|
|
292
|
+
|
|
293
|
+
// @ts-ignore
|
|
294
|
+
_this.webex.internal.llm.socket.send({
|
|
295
|
+
id: "".concat(_this.seqNum),
|
|
296
|
+
type: 'publishRequest',
|
|
297
|
+
recipients: {
|
|
298
|
+
// @ts-ignore
|
|
299
|
+
route: _this.webex.internal.llm.getBinding()
|
|
300
|
+
},
|
|
301
|
+
headers: {},
|
|
302
|
+
data: {
|
|
303
|
+
eventType: 'relay.event',
|
|
304
|
+
relayType: _constants.AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER,
|
|
305
|
+
transcriptPayload: {
|
|
306
|
+
type: isFinal ? _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT : _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT,
|
|
307
|
+
id: _uuid.default.v4(),
|
|
308
|
+
transcripts: [{
|
|
309
|
+
text: text,
|
|
310
|
+
start_millis: timeStamp,
|
|
311
|
+
end_millis: timeStamp,
|
|
312
|
+
csis: csis
|
|
313
|
+
}]
|
|
314
|
+
}
|
|
315
|
+
},
|
|
316
|
+
trackingId: "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString())
|
|
317
|
+
});
|
|
318
|
+
_this.seqNum += 1;
|
|
319
|
+
});
|
|
278
320
|
/**
|
|
279
321
|
* request turn on Captions
|
|
280
322
|
* @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English
|
|
@@ -370,7 +412,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
370
412
|
}());
|
|
371
413
|
/**
|
|
372
414
|
* Toggle transcribing for highlights
|
|
373
|
-
* @param {
|
|
415
|
+
* @param {boolean} activate true means to turn on transcribing and false means to turn off
|
|
374
416
|
* @param {string} spokenLanguage language code for spoken language
|
|
375
417
|
* @returns {Promise}
|
|
376
418
|
*/
|
|
@@ -395,10 +437,13 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
395
437
|
});
|
|
396
438
|
/**
|
|
397
439
|
* Toggle turn on manual caption
|
|
398
|
-
* @param {
|
|
440
|
+
* @param {boolean} enable true means to turn on manual caption, false means to turn off
|
|
399
441
|
* @returns {Promise}
|
|
400
442
|
*/
|
|
401
443
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "toggleManualCaption", function (enable) {
|
|
444
|
+
if (_this.toggleManualCaptionStatus === _constants.TOGGLE_MANUAL_CAPTION_STATUS.SENDING) return undefined;
|
|
445
|
+
_this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.SENDING;
|
|
446
|
+
|
|
402
447
|
// @ts-ignore
|
|
403
448
|
return _this.request({
|
|
404
449
|
method: 'PUT',
|
|
@@ -410,8 +455,24 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
410
455
|
}
|
|
411
456
|
}
|
|
412
457
|
}).then(function () {
|
|
458
|
+
_this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
413
459
|
return undefined;
|
|
460
|
+
}).catch(function () {
|
|
461
|
+
_this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
462
|
+
throw new Error('toggle manual captions fail');
|
|
463
|
+
});
|
|
464
|
+
});
|
|
465
|
+
/**
|
|
466
|
+
* In meeting Spoken Language changed event
|
|
467
|
+
* @param {string} languageCode
|
|
468
|
+
* @returns {void}
|
|
469
|
+
*/
|
|
470
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onSpokenLanguageUpdate", function (languageCode) {
|
|
471
|
+
// @ts-ignore
|
|
472
|
+
_this.trigger(_constants.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {
|
|
473
|
+
languageCode: languageCode
|
|
414
474
|
});
|
|
475
|
+
_this.currentSpokenLanguage = languageCode;
|
|
415
476
|
});
|
|
416
477
|
/**
|
|
417
478
|
* get caption status
|
|
@@ -432,6 +493,8 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
432
493
|
_this.vmcDeviceId = undefined;
|
|
433
494
|
_this.announceStatus = _constants.ANNOUNCE_STATUS.IDLE;
|
|
434
495
|
_this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.IDLE;
|
|
496
|
+
_this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
497
|
+
_this.currentSpokenLanguage = _constants.DEFAULT_SPOKEN_LANGUAGE;
|
|
435
498
|
return _this;
|
|
436
499
|
}
|
|
437
500
|
(0, _createClass2.default)(VoiceaChannel, [{
|
|
@@ -463,6 +526,8 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
463
526
|
this.hasSubscribedToEvents = false;
|
|
464
527
|
this.announceStatus = _constants.ANNOUNCE_STATUS.IDLE;
|
|
465
528
|
this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.IDLE;
|
|
529
|
+
this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
530
|
+
this.currentSpokenLanguage = undefined;
|
|
466
531
|
}
|
|
467
532
|
}]);
|
|
468
533
|
return VoiceaChannel;
|
package/dist/voicea.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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","CAPIONER","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","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 case AIBRIDGE_RELAY_TYPES.MANUAL.CAPIONER:\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 }\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 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 * 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","currentSpokenLanguage","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","DEFAULT_SPOKEN_LANGUAGE","_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 DEFAULT_SPOKEN_LANGUAGE,\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 private currentSpokenLanguage?: 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 this.currentSpokenLanguage = undefined;\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 this.currentSpokenLanguage = DEFAULT_SPOKEN_LANGUAGE;\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 currentSpokenLanguage: this.currentSpokenLanguage,\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 * In meeting Spoken Language changed event\n * @param {string} languageCode\n * @returns {void}\n */\n public onSpokenLanguageUpdate = (languageCode: string): void => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {languageCode});\n this.currentSpokenLanguage = languageCode;\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":";;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA,IAAAE,UAAA,GAAAF,OAAA;AAiBA,IAAAG,MAAA,GAAAH,OAAA;AAAkD,SAAAI,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,YAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,gCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,gCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAAA,SAAAqB,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAAV,OAAA,EAAAK,OAAA,GAAAM,MAAA,MAAAL,yBAAA,QAAAM,SAAA,OAAAF,gBAAA,CAAAV,OAAA,QAAAa,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAL,KAAA,EAAAd,SAAA,EAAAiB,SAAA,YAAAD,MAAA,GAAAF,KAAA,CAAAhB,KAAA,OAAAE,SAAA,gBAAAoB,2BAAA,CAAAf,OAAA,QAAAW,MAAA;AAAA,SAAAJ,0BAAA,eAAAS,OAAA,qBAAAF,kBAAA,oBAAAA,kBAAA,CAAAG,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAR,kBAAA,CAAAK,OAAA,8CAAApC,CAAA,sBAPlD;AASA;AACA;AACA;AACA;AACA;AAJA,IAKawC,aAAa,GAAAC,OAAA,CAAAD,aAAA,0BAAAE,YAAA;EAAA,IAAAC,UAAA,CAAA1B,OAAA,EAAAuB,aAAA,EAAAE,YAAA;EAAA,IAAAE,MAAA,GAAAvB,YAAA,CAAAmB,aAAA;EA+ExB;AACF;AACA;AACA;EACE,SAAAA,cAAA,EAAqB;IAAA,IAAAK,KAAA;IAAA,IAAAC,gBAAA,CAAA7B,OAAA,QAAAuB,aAAA;IAAA,SAAAO,IAAA,GAAAnC,SAAA,CAAAC,MAAA,EAANmC,IAAI,OAAAC,KAAA,CAAAF,IAAA,GAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;MAAJF,IAAI,CAAAE,IAAA,IAAAtC,SAAA,CAAAsC,IAAA;IAAA;IACjBL,KAAA,GAAAD,MAAA,CAAAL,IAAA,CAAA7B,KAAA,CAAAkC,MAAA,SAAAO,MAAA,CAASH,IAAI;IAAE,IAAAhC,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,gBAnFLQ,iBAAM;IAAA,IAAArC,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA;IAAA,IAAA7B,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA;IAAA,IAAA7B,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,4BAMc,KAAK;IAAA,IAAA7B,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA;IAAA,IAAA7B,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA;IAAA,IAAA7B,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA;IAAA,IAAA7B,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA;IAAA,IAAA7B,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA;IAYrC;AACF;AACA;AACA;IAHE,IAAA7B,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,qBAKyB,UAAC7C,CAAC,EAAK;MAAA,IAAAsD,UAAA;MAC9BT,KAAA,CAAKU,MAAM,GAAGvD,CAAC,CAACwD,cAAc,GAAG,CAAC;MAClC,QAAQxD,CAAC,CAACyD,IAAI,CAACC,SAAS;QACtB,KAAKC,+BAAoB,CAACN,MAAM,CAACO,YAAY;UAC3Cf,KAAA,CAAKgB,WAAW,GAAG7D,CAAC,CAAC8D,OAAO,CAACC,IAAI;UACjClB,KAAA,CAAKmB,cAAc,GAAGC,0BAAe,CAACC,MAAM;UAC5CrB,KAAA,CAAKsB,0BAA0B,CAACnE,CAAC,CAACyD,IAAI,CAACW,aAAa,CAAC;UACrD;QACF,KAAKT,+BAAoB,CAACN,MAAM,CAACgB,oBAAoB;UACnDxB,KAAA,CAAKyB,8BAA8B,CAACtE,CAAC,CAACyD,IAAI,CAACW,aAAa,CAAC;UACzD;QACF,KAAKT,+BAAoB,CAACN,MAAM,CAACkB,aAAa;UAC5C1B,KAAA,CAAK2B,oBAAoB,CAACxE,CAAC,CAACyD,IAAI,CAACW,aAAa,CAAC;UAC/C;QACF,KAAKT,+BAAoB,CAACc,MAAM,CAACF,aAAa;QAC9C,KAAKZ,+BAAoB,CAACc,MAAM,CAACC,SAAS;UACxC7B,KAAA,CAAK8B,0BAA0B,CAAAhE,aAAA,CAAAA,aAAA,KAC1BX,CAAC,CAACyD,IAAI,CAACmB,iBAAiB;YAC3BC,MAAM,GAAAvB,UAAA,GAAEtD,CAAC,CAAC8D,OAAO,cAAAR,UAAA,uBAATA,UAAA,CAAWS,IAAI;YACvBe,WAAW,EAAE9E,CAAC,CAACyD,IAAI,CAACC;UAAS,EAC9B,CAAC;UACF;QACF;UACE;MACJ;IACF,CAAC;IA6CD;AACF;AACA;AACA;AACA;IAJE,IAAA1C,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,iCAKqC,UAAC+B,iBAAwC,EAAW;MACvF,IACEA,iBAAiB,CAACG,IAAI,KAAKC,6BAAkB,CAACC,2BAA2B,IACzEL,iBAAiB,CAACG,IAAI,KAAKC,6BAAkB,CAACE,6BAA6B,EAC3E;QACA;QACArC,KAAA,CAAKsC,OAAO,CAACC,yBAAc,CAACC,kBAAkB,EAAE;UAC9CC,OAAO,EAAEV,iBAAiB,CAACG,IAAI,KAAKC,6BAAkB,CAACC,2BAA2B;UAClFM,YAAY,EAAEX,iBAAiB,CAACY,EAAE;UAClCC,WAAW,EAAEb,iBAAiB,CAACa,WAAW;UAC1CZ,MAAM,EAAED,iBAAiB,CAACC,MAAM;UAChCa,MAAM,EAAEd,iBAAiB,CAACE;QAC5B,CAAC,CAAC;MACJ;IACF,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAA9D,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,2BAK+B,UAACuB,aAAoC,EAAW;MAC7E,QAAQA,aAAa,CAACW,IAAI;QACxB,KAAKC,6BAAkB,CAACW,0BAA0B;UAChD;UACA9C,KAAA,CAAKsC,OAAO,CAACC,yBAAc,CAACQ,WAAW,EAAE;YACvCN,OAAO,EAAE,KAAK;YACdC,YAAY,EAAEnB,aAAa,CAACyB,aAAa;YACzCJ,WAAW,EAAErB,aAAa,CAACqB;UAC7B,CAAC,CAAC;UACF;QAEF,KAAKT,6BAAkB,CAACc,uBAAuB;UAC7C;UACAjD,KAAA,CAAKsC,OAAO,CAACC,yBAAc,CAACQ,WAAW,EAAE;YACvCN,OAAO,EAAE,IAAI;YACbC,YAAY,EAAEnB,aAAa,CAACyB,aAAa;YACzCJ,WAAW,EAAErB,aAAa,CAACqB,WAAW,CAACM,GAAG,CAAC,UAACC,UAAU,EAAK;cACzDA,UAAU,CAACC,SAAS,GAAG,IAAAC,gCAAyB,EAACF,UAAU,CAACG,UAAU,CAAC;cAEvE,OAAOH,UAAU;YACnB,CAAC;UACH,CAAC,CAAC;UACF;QAEF,KAAKhB,6BAAkB,CAACoB,iBAAiB;UACvC;UACAvD,KAAA,CAAKsC,OAAO,CAACC,yBAAc,CAACgB,iBAAiB,EAAE;YAC7CC,IAAI,EAAEjC,aAAa,CAACkC,SAAS,CAACD,IAAI;YAClCE,WAAW,EAAEnC,aAAa,CAACkC,SAAS,CAACE,YAAY;YACjDC,IAAI,EAAErC,aAAa,CAACkC,SAAS,CAACN,UAAU;YACxCU,cAAc,EAAEtC,aAAa,CAACkC,SAAS,CAACK,eAAe;YACvDC,eAAe,EAAExC,aAAa,CAACkC,SAAS,CAACO,gBAAgB;YACzDZ,SAAS,EAAE,IAAAC,gCAAyB,EAAC9B,aAAa,CAACkC,SAAS,CAACH,UAAU;UACzE,CAAC,CAAC;UACF;QAEF,KAAKnB,6BAAkB,CAAC8B,UAAU;UAChC;UACAjE,KAAA,CAAKsC,OAAO,CAACC,yBAAc,CAAC2B,WAAW,EAAE;YACvCC,WAAW,EAAE,KAAK;YAClBP,IAAI,EAAErC,aAAa,CAAC6C;UACtB,CAAC,CAAC;UACF;QAEF,KAAKjC,6BAAkB,CAACkC,QAAQ;QAChC,KAAKlC,6BAAkB,CAACmC,UAAU;UAChC;UACAtE,KAAA,CAAKsC,OAAO,CAACC,yBAAc,CAAC2B,WAAW,EAAE;YACvCC,WAAW,EAAE5C,aAAa,CAACW,IAAI,KAAKC,6BAAkB,CAACkC;UACzD,CAAC,CAAC;UACF;QAEF;UACE;MACJ;IACF,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAlG,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,qCAKyC,UAACuB,aAAsC,EAAW;MACzF,IAAIA,aAAa,CAACgD,UAAU,KAAK,GAAG,EAAE;QACpC;QACAvE,KAAA,CAAKsC,OAAO,CAACC,yBAAc,CAACiC,uBAAuB,EAAE;UAACD,UAAU,EAAE;QAAG,CAAC,CAAC;MACzE,CAAC,MAAM;QACL;QACAvE,KAAA,CAAKsC,OAAO,CAACC,yBAAc,CAACiC,uBAAuB,EAAE;UACnDD,UAAU,EAAEhD,aAAa,CAACkD,SAAS;UACnCC,YAAY,EAAEnD,aAAa,CAACoD;QAC9B,CAAC,CAAC;MACJ;IACF,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAxG,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,iCAKqC,UAACuB,aAAkC,EAAW;MAAA,IAAAqD,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,kBAAA;MACjF,IAAMC,qBAAqB,GAAG;QAC5BC,gBAAgB,GAAAP,qBAAA,GAAErD,aAAa,aAAbA,aAAa,wBAAAsD,sBAAA,GAAbtD,aAAa,CAAE6D,WAAW,cAAAP,sBAAA,uBAA1BA,sBAAA,CAA4BQ,iBAAiB,cAAAT,qBAAA,cAAAA,qBAAA,GAAI,EAAE;QACrEU,YAAY,GAAAR,sBAAA,GAAEvD,aAAa,aAAbA,aAAa,wBAAAwD,sBAAA,GAAbxD,aAAa,CAAE6D,WAAW,cAAAL,sBAAA,uBAA1BA,sBAAA,CAA4BQ,aAAa,cAAAT,sBAAA,cAAAA,sBAAA,GAAI,CAAC;QAC5DU,eAAe,GAAAR,qBAAA,GAAEzD,aAAa,aAAbA,aAAa,wBAAA0D,kBAAA,GAAb1D,aAAa,CAAEkE,GAAG,cAAAR,kBAAA,uBAAlBA,kBAAA,CAAoBS,gBAAgB,cAAAV,qBAAA,cAAAA,qBAAA,GAAI,EAAE;QAC3DW,qBAAqB,EAAE3F,KAAA,CAAK2F;MAC9B,CAAC;;MAED;MACA3F,KAAA,CAAKsC,OAAO,CAACC,yBAAc,CAACqD,mBAAmB,EAAEV,qBAAqB,CAAC;IACzE,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAA/G,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,uBAI2B,YAAY;MACrCA,KAAA,CAAKmB,cAAc,GAAGC,0BAAe,CAACyE,OAAO;MAC7C7F,KAAA,CAAK8F,cAAc,CAAC,CAAC;MACrB;MACA9F,KAAA,CAAK+F,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACC,MAAM,CAACC,IAAI,CAAC;QAClCxD,EAAE,KAAArC,MAAA,CAAKN,KAAA,CAAKU,MAAM,CAAE;QACpBwB,IAAI,EAAE,gBAAgB;QACtBkE,UAAU,EAAE;UACV;UACAC,KAAK,EAAErG,KAAA,CAAK+F,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACK,UAAU,CAAC;QAC5C,CAAC;QACDrF,OAAO,EAAE,CAAC,CAAC;QACXL,IAAI,EAAE;UACJ2F,aAAa,EAAE;YACbC,OAAO,EAAE;UACX,CAAC;UACDC,SAAS,EAAE,aAAa;UACxB5F,SAAS,EAAEC,+BAAoB,CAACN,MAAM,CAACkG;QACzC,CAAC;QACDC,UAAU,KAAArG,MAAA,CAAKsG,iBAAM,CAACC,gBAAgB,OAAAvG,MAAA,CAAIwG,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MAChE,CAAC,CAAC;MACFhH,KAAA,CAAKU,MAAM,IAAI,CAAC;IAClB,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAvC,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,wBAK2B,UAACiH,YAAoB;MAAA;QAC9C;QACAjH,KAAA,CAAKkH,OAAO,CAAC;UACXC,MAAM,EAAE,KAAK;UACb;UACAC,GAAG,KAAA9G,MAAA,CAAKN,KAAA,CAAK+F,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACoB,WAAW,CAAC,CAAC,eAAY;UACzDC,IAAI,EAAE;YACJC,UAAU,EAAE;cACVC,cAAc,EAAEP;YAClB;UACF;QACF,CAAC,CAAC,CAACQ,IAAI,CAAC,YAAM;UACZ;UACAzH,KAAA,CAAKsC,OAAO,CAACC,yBAAc,CAACmF,sBAAsB,EAAE;YAACT,YAAY,EAAZA;UAAY,CAAC,CAAC;QACrE,CAAC;MAAC;IAAA;IAEJ;AACF;AACA;AACA;AACA;IAJE,IAAA9I,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,sBAKyB,UAACiH,YAAoB,EAAW;MACvD;MACA,IAAI,CAACjH,KAAA,CAAK+F,KAAK,CAACC,QAAQ,CAACC,GAAG,CAAC0B,WAAW,CAAC,CAAC,EAAE;MAC5C;MACA3H,KAAA,CAAK+F,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACC,MAAM,CAACC,IAAI,CAAC;QAClCxD,EAAE,KAAArC,MAAA,CAAKN,KAAA,CAAKU,MAAM,CAAE;QACpBwB,IAAI,EAAE,gBAAgB;QACtBkE,UAAU,EAAE;UACV;UACAC,KAAK,EAAErG,KAAA,CAAK+F,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACK,UAAU,CAAC;QAC5C,CAAC;QACDrF,OAAO,EAAE;UACP2G,EAAE,EAAE5H,KAAA,CAAKgB;QACX,CAAC;QACDJ,IAAI,EAAE;UACJ2F,aAAa,EAAE;YACbsB,mBAAmB,EAAEZ,YAAY;YACjCtE,EAAE,EAAEmE,aAAI,CAACC,EAAE,CAAC;UACd,CAAC;UACDN,SAAS,EAAE,aAAa;UACxB5F,SAAS,EAAEC,+BAAoB,CAACN,MAAM,CAACsH;QACzC,CAAC;QACDnB,UAAU,KAAArG,MAAA,CAAKsG,iBAAM,CAACC,gBAAgB,OAAAvG,MAAA,CAAIwG,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MAChE,CAAC,CAAC;MACFhH,KAAA,CAAKU,MAAM,IAAI,CAAC;IAClB,CAAC;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IAPE,IAAAvC,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,8BAQiC,UAC/B4D,IAAY,EACZmE,SAAiB,EACjBvE,IAAc,EACdf,OAAgB,EACP;MACT;MACA,IAAI,CAACzC,KAAA,CAAK+F,KAAK,CAACC,QAAQ,CAACC,GAAG,CAAC0B,WAAW,CAAC,CAAC,EAAE;;MAE5C;MACA3H,KAAA,CAAK+F,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACC,MAAM,CAACC,IAAI,CAAC;QAClCxD,EAAE,KAAArC,MAAA,CAAKN,KAAA,CAAKU,MAAM,CAAE;QACpBwB,IAAI,EAAE,gBAAgB;QACtBkE,UAAU,EAAE;UACV;UACAC,KAAK,EAAErG,KAAA,CAAK+F,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACK,UAAU,CAAC;QAC5C,CAAC;QACDrF,OAAO,EAAE,CAAC,CAAC;QACXL,IAAI,EAAE;UACJ6F,SAAS,EAAE,aAAa;UACxB5F,SAAS,EAAEC,+BAAoB,CAACc,MAAM,CAACC,SAAS;UAChDE,iBAAiB,EAAE;YACjBG,IAAI,EAAEO,OAAO,GACTN,6BAAkB,CAACC,2BAA2B,GAC9CD,6BAAkB,CAACE,6BAA6B;YACpDM,EAAE,EAAEmE,aAAI,CAACC,EAAE,CAAC,CAAC;YACbnE,WAAW,EAAE,CACX;cACEgB,IAAI,EAAJA,IAAI;cACJoE,YAAY,EAAED,SAAS;cACvBzE,UAAU,EAAEyE,SAAS;cACrBvE,IAAI,EAAJA;YACF,CAAC;UAEL;QACF,CAAC;QACDmD,UAAU,KAAArG,MAAA,CAAKsG,iBAAM,CAACC,gBAAgB,OAAAvG,MAAA,CAAIwG,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MAChE,CAAC,CAAC;MACFhH,KAAA,CAAKU,MAAM,IAAI,CAAC;IAClB,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAvC,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,4BAKgC,UAACiH,YAAa,EAAgC;MAC5EjH,KAAA,CAAKiI,aAAa,GAAGC,iCAAsB,CAACC,OAAO;;MAEnD;MACA,IAAMb,IAAI,GAAG;QACXC,UAAU,EAAE;UAACa,OAAO,EAAE;QAAI,CAAC;QAC3BnB,YAAY,EAAZA;MACF,CAAC;;MAED;MACA;MACA,OAAOjH,KAAA,CAAKkH,OAAO,CAAC;QAClBC,MAAM,EAAE,KAAK;QACb;QACAC,GAAG,KAAA9G,MAAA,CAAKN,KAAA,CAAK+F,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACoB,WAAW,CAAC,CAAC,eAAY;QACzDC,IAAI,EAAJA;MACF,CAAC,CAAC,CACCG,IAAI,CAAC,YAAM;QACV;QACAzH,KAAA,CAAKsC,OAAO,CAACC,yBAAc,CAAC8F,kBAAkB,CAAC;QAE/CrI,KAAA,CAAKsI,kBAAkB,GAAG,IAAI;QAC9BtI,KAAA,CAAKiI,aAAa,GAAGC,iCAAsB,CAACK,OAAO;QACnDvI,KAAA,CAAKwI,QAAQ,CAAC,CAAC;MACjB,CAAC,CAAC,CACDC,KAAK,CAAC,YAAM;QACXzI,KAAA,CAAKiI,aAAa,GAAGC,iCAAsB,CAACQ,IAAI;QAChD,MAAM,IAAIC,KAAK,CAAC,uBAAuB,CAAC;MAC1C,CAAC,CAAC;IACN,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAAxK,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,2BAI+B;MAAA,OAC7B,CAACoB,0BAAe,CAACyE,OAAO,EAAEzE,0BAAe,CAACC,MAAM,CAAC,CAACuH,QAAQ,CAAC5I,KAAA,CAAKmB,cAAc,CAAC;IAAA;IAEjF;AACF;AACA;AACA;IAHE,IAAAhD,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,eAIkB,YAAM;MACtB,IAAIA,KAAA,CAAK6I,oBAAoB,CAAC,CAAC,EAAE;MACjC;MACA,IAAI,CAAC7I,KAAA,CAAK+F,KAAK,CAACC,QAAQ,CAACC,GAAG,CAAC0B,WAAW,CAAC,CAAC,EAAE;QAC1C,MAAM,IAAIgB,KAAK,CAAC,8CAA8C,CAAC;MACjE;MACA3I,KAAA,CAAK8I,gBAAgB,CAAC,CAAC;IACzB,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAA3K,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,0BAI8B;MAAA,OAC5B,CAACkI,iCAAsB,CAACC,OAAO,EAAED,iCAAsB,CAACK,OAAO,CAAC,CAACK,QAAQ,CAAC5I,KAAA,CAAKiI,aAAa,CAAC;IAAA;IAE/F;AACF;AACA;AACA;AACA;IAJE,IAAA9J,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA;MAAA,IAAA+I,IAAA,OAAAC,kBAAA,CAAA5K,OAAA,gBAAA6K,YAAA,CAAA7K,OAAA,CAAA8K,IAAA,CAKwB,SAAAC,QAAO3B,cAAe;QAAA,OAAAyB,YAAA,CAAA7K,OAAA,CAAAgL,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cAAA,KACxCxJ,KAAA,CAAKyJ,mBAAmB,CAAC,CAAC;gBAAAH,QAAA,CAAAE,IAAA;gBAAA;cAAA;cAAA,OAAAF,QAAA,CAAAI,MAAA,WAASC,SAAS;YAAA;cAAA,IAE3C3J,KAAA,CAAK+F,KAAK,CAACC,QAAQ,CAACC,GAAG,CAAC0B,WAAW,CAAC,CAAC;gBAAA2B,QAAA,CAAAE,IAAA;gBAAA;cAAA;cAAA,MAClC,IAAIb,KAAK,CAAC,+CAA+C,CAAC;YAAA;cAAA,OAAAW,QAAA,CAAAI,MAAA,WAG3D1J,KAAA,CAAK4J,qBAAqB,CAACpC,cAAc,CAAC;YAAA;YAAA;cAAA,OAAA8B,QAAA,CAAAO,IAAA;UAAA;QAAA,GAAAV,OAAA;MAAA,CAClD;MAAA,iBAAAW,EAAA;QAAA,OAAAf,IAAA,CAAAlL,KAAA,OAAAE,SAAA;MAAA;IAAA;IAED;AACF;AACA;AACA;AACA;AACA;IALE,IAAAI,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,yBAM4B,UAC1B+J,QAAiB,EACjBvC,cAAuB,EACO;MAC9B;MACA,OAAOxH,KAAA,CAAKkH,OAAO,CAAC;QAClBC,MAAM,EAAE,KAAK;QACb;QACAC,GAAG,KAAA9G,MAAA,CAAKN,KAAA,CAAK+F,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACoB,WAAW,CAAC,CAAC,eAAY;QACzDC,IAAI,EAAE;UACJC,UAAU,EAAE;YACVyC,YAAY,EAAED;UAChB,CAAC;UACDvC,cAAc,EAAdA;QACF;MACF,CAAC,CAAC,CAACC,IAAI,CAAC,YAAiC;QACvC,IAAIsC,QAAQ,IAAI,CAAC/J,KAAA,CAAKsI,kBAAkB,EAAE;UACxC,OAAOtI,KAAA,CAAKiK,cAAc,CAACzC,cAAc,CAAC;QAC5C;QAEA,OAAOmC,SAAS;MAClB,CAAC,CAAC;IACJ,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAxL,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,0BAK6B,UAACkK,MAAe,EAAgC;MAC3E,IAAIlK,KAAA,CAAKmK,yBAAyB,KAAKC,uCAA4B,CAACjC,OAAO,EAAE,OAAOwB,SAAS;MAE7F3J,KAAA,CAAKmK,yBAAyB,GAAGC,uCAA4B,CAACjC,OAAO;;MAErE;MACA,OAAOnI,KAAA,CAAKkH,OAAO,CAAC;QAClBC,MAAM,EAAE,KAAK;QACb;QACAC,GAAG,KAAA9G,MAAA,CAAKN,KAAA,CAAK+F,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACoB,WAAW,CAAC,CAAC,eAAY;QACzDC,IAAI,EAAE;UACJ+C,aAAa,EAAE;YACbH,MAAM,EAANA;UACF;QACF;MACF,CAAC,CAAC,CACCzC,IAAI,CAAC,YAAiC;QACrCzH,KAAA,CAAKmK,yBAAyB,GAAGC,uCAA4B,CAAC1B,IAAI;QAElE,OAAOiB,SAAS;MAClB,CAAC,CAAC,CACDlB,KAAK,CAAC,YAAM;QACXzI,KAAA,CAAKmK,yBAAyB,GAAGC,uCAA4B,CAAC1B,IAAI;QAClE,MAAM,IAAIC,KAAK,CAAC,6BAA6B,CAAC;MAChD,CAAC,CAAC;IACN,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAxK,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,6BAKgC,UAACiH,YAAoB,EAAW;MAC9D;MACAjH,KAAA,CAAKsC,OAAO,CAACC,yBAAc,CAACmF,sBAAsB,EAAE;QAACT,YAAY,EAAZA;MAAY,CAAC,CAAC;MACnEjH,KAAA,CAAK2F,qBAAqB,GAAGsB,YAAY;IAC3C,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAA9I,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,uBAI0B;MAAA,OAAMA,KAAA,CAAKiI,aAAa;IAAA;IAElD;AACF;AACA;AACA;IAHE,IAAA9J,gBAAA,CAAAC,OAAA,MAAAmC,uBAAA,CAAAnC,OAAA,EAAA4B,KAAA,wBAI2B;MAAA,OAAMA,KAAA,CAAKmB,cAAc;IAAA;IAlalDnB,KAAA,CAAKU,MAAM,GAAG,CAAC;IACfV,KAAA,CAAKsI,kBAAkB,GAAG,KAAK;IAC/BtI,KAAA,CAAKgB,WAAW,GAAG2I,SAAS;IAC5B3J,KAAA,CAAKmB,cAAc,GAAGC,0BAAe,CAACsH,IAAI;IAC1C1I,KAAA,CAAKiI,aAAa,GAAGC,iCAAsB,CAACQ,IAAI;IAChD1I,KAAA,CAAKmK,yBAAyB,GAAGC,uCAA4B,CAAC1B,IAAI;IAClE1I,KAAA,CAAK2F,qBAAqB,GAAG2E,kCAAuB;IAAC,OAAAtK,KAAA;EACvD;EAAC,IAAAuK,aAAA,CAAAnM,OAAA,EAAAuB,aAAA;IAAA6K,GAAA;IAAAC,KAAA;IAzCD;AACF;AACA;AACA;IACE,SAAA3E,eAAA,EAAyB;MACvB,IAAI,CAAC,IAAI,CAAC4E,qBAAqB,EAAE;QAC/B;QACA,IAAI,CAAC3E,KAAK,CAACC,QAAQ,CAACC,GAAG,CAAC0E,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAACC,cAAc,CAAC;QACpE,IAAI,CAACF,qBAAqB,GAAG,IAAI;MACnC;IACF;;IAEA;AACF;AACA;AACA;EAHE;IAAAF,GAAA;IAAAC,KAAA,EAIA,SAAAI,iBAAA,EAA0B;MACxB,IAAI,CAACvC,kBAAkB,GAAG,KAAK;MAC/B,IAAI,CAACtH,WAAW,GAAG2I,SAAS;MAC5B;MACA,IAAI,CAAC5D,KAAK,CAACC,QAAQ,CAACC,GAAG,CAAC6E,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAACF,cAAc,CAAC;MACrE,IAAI,CAACF,qBAAqB,GAAG,KAAK;MAClC,IAAI,CAACvJ,cAAc,GAAGC,0BAAe,CAACsH,IAAI;MAC1C,IAAI,CAACT,aAAa,GAAGC,iCAAsB,CAACQ,IAAI;MAChD,IAAI,CAACyB,yBAAyB,GAAGC,uCAA4B,CAAC1B,IAAI;MAClE,IAAI,CAAC/C,qBAAqB,GAAGgE,SAAS;IACxC;EAAC;EAAA,OAAAhK,aAAA;AAAA,EA7EgCoL,sBAAW;AAAA,IAAAC,QAAA,GAAApL,OAAA,CAAAxB,OAAA,GA0f/BuB,aAAa"}
|
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 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}\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 | 'manual_caption_interim_results'\n | 'manual_caption_interim_result'\n | 'manual_caption_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 onSpokenLanguageUpdate: (languageCode: string) => 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-
|
|
18
|
-
"@webex/internal-plugin-mercury": "3.8.0-
|
|
19
|
-
"@webex/plugin-meetings": "3.8.
|
|
20
|
-
"@webex/webex-core": "3.8.0-
|
|
17
|
+
"@webex/internal-plugin-llm": "3.8.0-next.27",
|
|
18
|
+
"@webex/internal-plugin-mercury": "3.8.0-next.26",
|
|
19
|
+
"@webex/plugin-meetings": "3.8.1-next.1",
|
|
20
|
+
"@webex/webex-core": "3.8.0-next.24",
|
|
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-
|
|
36
|
-
"@webex/test-helper-mocha": "3.8.0-
|
|
37
|
-
"@webex/test-helper-mock-web-socket": "3.8.0-
|
|
38
|
-
"@webex/test-helper-mock-webex": "3.8.0-
|
|
39
|
-
"@webex/test-helper-test-users": "3.8.0-
|
|
35
|
+
"@webex/test-helper-chai": "3.8.0-next.24",
|
|
36
|
+
"@webex/test-helper-mocha": "3.8.0-next.24",
|
|
37
|
+
"@webex/test-helper-mock-web-socket": "3.8.0-next.24",
|
|
38
|
+
"@webex/test-helper-mock-webex": "3.8.0-next.24",
|
|
39
|
+
"@webex/test-helper-test-users": "3.8.0-next.24",
|
|
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.
|
|
53
|
+
"version": "3.8.1-next.1"
|
|
54
54
|
}
|
package/src/constants.ts
CHANGED
|
@@ -22,7 +22,7 @@ export const AIBRIDGE_RELAY_TYPES = {
|
|
|
22
22
|
},
|
|
23
23
|
MANUAL: {
|
|
24
24
|
TRANSCRIPTION: 'aibridge.manual_transcription',
|
|
25
|
-
|
|
25
|
+
CAPTIONER: 'client.manual_transcription',
|
|
26
26
|
},
|
|
27
27
|
};
|
|
28
28
|
|
|
@@ -40,6 +40,7 @@ export const TRANSCRIPTION_TYPE = {
|
|
|
40
40
|
};
|
|
41
41
|
|
|
42
42
|
export const VOICEA = 'voicea';
|
|
43
|
+
export const DEFAULT_SPOKEN_LANGUAGE = 'en';
|
|
43
44
|
|
|
44
45
|
export const ANNOUNCE_STATUS = {
|
|
45
46
|
IDLE: 'idle',
|
|
@@ -52,3 +53,8 @@ export const TURN_ON_CAPTION_STATUS = {
|
|
|
52
53
|
ENABLED: 'enabled',
|
|
53
54
|
SENDING: 'sending',
|
|
54
55
|
};
|
|
56
|
+
|
|
57
|
+
export const TOGGLE_MANUAL_CAPTION_STATUS = {
|
|
58
|
+
IDLE: 'idle',
|
|
59
|
+
SENDING: 'sending',
|
|
60
|
+
};
|
package/src/voicea.ts
CHANGED
|
@@ -8,6 +8,8 @@ import {
|
|
|
8
8
|
VOICEA,
|
|
9
9
|
ANNOUNCE_STATUS,
|
|
10
10
|
TURN_ON_CAPTION_STATUS,
|
|
11
|
+
TOGGLE_MANUAL_CAPTION_STATUS,
|
|
12
|
+
DEFAULT_SPOKEN_LANGUAGE,
|
|
11
13
|
} from './constants';
|
|
12
14
|
// eslint-disable-next-line no-unused-vars
|
|
13
15
|
import {
|
|
@@ -38,6 +40,10 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
38
40
|
|
|
39
41
|
private captionStatus: string;
|
|
40
42
|
|
|
43
|
+
private toggleManualCaptionStatus: string;
|
|
44
|
+
|
|
45
|
+
private currentSpokenLanguage?: string;
|
|
46
|
+
|
|
41
47
|
/**
|
|
42
48
|
* @param {Object} e
|
|
43
49
|
* @returns {undefined}
|
|
@@ -58,7 +64,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
58
64
|
this.processTranscription(e.data.voiceaPayload);
|
|
59
65
|
break;
|
|
60
66
|
case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:
|
|
61
|
-
case AIBRIDGE_RELAY_TYPES.MANUAL.
|
|
67
|
+
case AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:
|
|
62
68
|
this.processManualTranscription({
|
|
63
69
|
...e.data.transcriptPayload,
|
|
64
70
|
sender: e.headers?.from,
|
|
@@ -94,6 +100,8 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
94
100
|
this.hasSubscribedToEvents = false;
|
|
95
101
|
this.announceStatus = ANNOUNCE_STATUS.IDLE;
|
|
96
102
|
this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;
|
|
103
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
104
|
+
this.currentSpokenLanguage = undefined;
|
|
97
105
|
}
|
|
98
106
|
|
|
99
107
|
/**
|
|
@@ -107,6 +115,8 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
107
115
|
this.vmcDeviceId = undefined;
|
|
108
116
|
this.announceStatus = ANNOUNCE_STATUS.IDLE;
|
|
109
117
|
this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;
|
|
118
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
119
|
+
this.currentSpokenLanguage = DEFAULT_SPOKEN_LANGUAGE;
|
|
110
120
|
}
|
|
111
121
|
|
|
112
122
|
/**
|
|
@@ -220,6 +230,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
220
230
|
captionLanguages: voiceaPayload?.translation?.allowed_languages ?? [],
|
|
221
231
|
maxLanguages: voiceaPayload?.translation?.max_languages ?? 0,
|
|
222
232
|
spokenLanguages: voiceaPayload?.ASR?.spoken_languages ?? [],
|
|
233
|
+
currentSpokenLanguage: this.currentSpokenLanguage,
|
|
223
234
|
};
|
|
224
235
|
|
|
225
236
|
// @ts-ignore
|
|
@@ -307,6 +318,55 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
307
318
|
this.seqNum += 1;
|
|
308
319
|
};
|
|
309
320
|
|
|
321
|
+
/**
|
|
322
|
+
* Send manual closed captions to voicea service
|
|
323
|
+
* @param {string} text
|
|
324
|
+
* @param {number} timeStamp
|
|
325
|
+
* @param {number[]} csis
|
|
326
|
+
* @param {boolean} isFinal
|
|
327
|
+
* @returns {void}
|
|
328
|
+
*/
|
|
329
|
+
public sendManualClosedCaption = (
|
|
330
|
+
text: string,
|
|
331
|
+
timeStamp: number,
|
|
332
|
+
csis: number[],
|
|
333
|
+
isFinal: boolean
|
|
334
|
+
): void => {
|
|
335
|
+
// @ts-ignore
|
|
336
|
+
if (!this.webex.internal.llm.isConnected()) return;
|
|
337
|
+
|
|
338
|
+
// @ts-ignore
|
|
339
|
+
this.webex.internal.llm.socket.send({
|
|
340
|
+
id: `${this.seqNum}`,
|
|
341
|
+
type: 'publishRequest',
|
|
342
|
+
recipients: {
|
|
343
|
+
// @ts-ignore
|
|
344
|
+
route: this.webex.internal.llm.getBinding(),
|
|
345
|
+
},
|
|
346
|
+
headers: {},
|
|
347
|
+
data: {
|
|
348
|
+
eventType: 'relay.event',
|
|
349
|
+
relayType: AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER,
|
|
350
|
+
transcriptPayload: {
|
|
351
|
+
type: isFinal
|
|
352
|
+
? TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT
|
|
353
|
+
: TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT,
|
|
354
|
+
id: uuid.v4(),
|
|
355
|
+
transcripts: [
|
|
356
|
+
{
|
|
357
|
+
text,
|
|
358
|
+
start_millis: timeStamp,
|
|
359
|
+
end_millis: timeStamp,
|
|
360
|
+
csis,
|
|
361
|
+
},
|
|
362
|
+
],
|
|
363
|
+
},
|
|
364
|
+
},
|
|
365
|
+
trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
|
|
366
|
+
});
|
|
367
|
+
this.seqNum += 1;
|
|
368
|
+
};
|
|
369
|
+
|
|
310
370
|
/**
|
|
311
371
|
* request turn on Captions
|
|
312
372
|
* @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English
|
|
@@ -387,7 +447,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
387
447
|
|
|
388
448
|
/**
|
|
389
449
|
* Toggle transcribing for highlights
|
|
390
|
-
* @param {
|
|
450
|
+
* @param {boolean} activate true means to turn on transcribing and false means to turn off
|
|
391
451
|
* @param {string} spokenLanguage language code for spoken language
|
|
392
452
|
* @returns {Promise}
|
|
393
453
|
*/
|
|
@@ -417,10 +477,14 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
417
477
|
|
|
418
478
|
/**
|
|
419
479
|
* Toggle turn on manual caption
|
|
420
|
-
* @param {
|
|
480
|
+
* @param {boolean} enable true means to turn on manual caption, false means to turn off
|
|
421
481
|
* @returns {Promise}
|
|
422
482
|
*/
|
|
423
483
|
public toggleManualCaption = (enable: boolean): undefined | Promise<void> => {
|
|
484
|
+
if (this.toggleManualCaptionStatus === TOGGLE_MANUAL_CAPTION_STATUS.SENDING) return undefined;
|
|
485
|
+
|
|
486
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.SENDING;
|
|
487
|
+
|
|
424
488
|
// @ts-ignore
|
|
425
489
|
return this.request({
|
|
426
490
|
method: 'PUT',
|
|
@@ -431,9 +495,27 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
431
495
|
enable,
|
|
432
496
|
},
|
|
433
497
|
},
|
|
434
|
-
})
|
|
435
|
-
|
|
436
|
-
|
|
498
|
+
})
|
|
499
|
+
.then((): undefined | Promise<void> => {
|
|
500
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
501
|
+
|
|
502
|
+
return undefined;
|
|
503
|
+
})
|
|
504
|
+
.catch(() => {
|
|
505
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
506
|
+
throw new Error('toggle manual captions fail');
|
|
507
|
+
});
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* In meeting Spoken Language changed event
|
|
512
|
+
* @param {string} languageCode
|
|
513
|
+
* @returns {void}
|
|
514
|
+
*/
|
|
515
|
+
public onSpokenLanguageUpdate = (languageCode: string): void => {
|
|
516
|
+
// @ts-ignore
|
|
517
|
+
this.trigger(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {languageCode});
|
|
518
|
+
this.currentSpokenLanguage = languageCode;
|
|
437
519
|
};
|
|
438
520
|
|
|
439
521
|
/**
|
package/src/voicea.types.ts
CHANGED
|
@@ -23,7 +23,10 @@ type TRANSCRIPTION_TYPES =
|
|
|
23
23
|
| 'eva_cancel'
|
|
24
24
|
| 'highlight_created'
|
|
25
25
|
| 'transcript_interim_results'
|
|
26
|
-
| 'transcript_final_result'
|
|
26
|
+
| 'transcript_final_result'
|
|
27
|
+
| 'manual_caption_interim_results'
|
|
28
|
+
| 'manual_caption_interim_result'
|
|
29
|
+
| 'manual_caption_final_result';
|
|
27
30
|
|
|
28
31
|
/**
|
|
29
32
|
* Class for an Transcription Object
|
|
@@ -80,10 +83,18 @@ interface CaptionLanguageResponse {
|
|
|
80
83
|
|
|
81
84
|
interface IVoiceaChannel {
|
|
82
85
|
setSpokenLanguage: (languageCode: string) => Promise<void>;
|
|
86
|
+
onSpokenLanguageUpdate: (languageCode: string) => void;
|
|
83
87
|
requestLanguage: (languageCode: string) => void;
|
|
84
88
|
turnOnCaptions: () => undefined | Promise<void>;
|
|
85
89
|
toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;
|
|
86
90
|
deregisterEvents: () => void;
|
|
91
|
+
toggleManualCaption: (enable: boolean) => undefined | Promise<void>;
|
|
92
|
+
sendManualClosedCaption: (
|
|
93
|
+
text: string,
|
|
94
|
+
timeStamp: number,
|
|
95
|
+
csis: number[],
|
|
96
|
+
isFinal: boolean
|
|
97
|
+
) => void;
|
|
87
98
|
}
|
|
88
99
|
|
|
89
100
|
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();
|
|
@@ -141,6 +238,7 @@ describe('plugin-voicea', () => {
|
|
|
141
238
|
captionLanguages: ['af', 'am'],
|
|
142
239
|
spokenLanguages: ['en'],
|
|
143
240
|
maxLanguages: 5,
|
|
241
|
+
currentSpokenLanguage: 'en',
|
|
144
242
|
});
|
|
145
243
|
});
|
|
146
244
|
|
|
@@ -149,11 +247,13 @@ describe('plugin-voicea', () => {
|
|
|
149
247
|
|
|
150
248
|
voiceaService.on(EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, spy);
|
|
151
249
|
voiceaService.listenToEvents();
|
|
250
|
+
voiceaService.onSpokenLanguageUpdate('fr-FR');
|
|
152
251
|
await voiceaService.processAnnouncementMessage({});
|
|
153
252
|
assert.calledOnceWithExactly(spy, {
|
|
154
253
|
captionLanguages: [],
|
|
155
254
|
spokenLanguages: [],
|
|
156
255
|
maxLanguages: 0,
|
|
256
|
+
currentSpokenLanguage: 'fr-FR',
|
|
157
257
|
});
|
|
158
258
|
});
|
|
159
259
|
});
|
|
@@ -441,20 +541,10 @@ describe('plugin-voicea', () => {
|
|
|
441
541
|
const mockWebSocket = new MockWebSocket();
|
|
442
542
|
|
|
443
543
|
voiceaService.webex.internal.llm.socket = mockWebSocket;
|
|
544
|
+
voiceaService.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
444
545
|
});
|
|
445
546
|
|
|
446
547
|
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
548
|
await voiceaService.toggleManualCaption(true);
|
|
459
549
|
sinon.assert.calledWith(
|
|
460
550
|
voiceaService.request,
|
|
@@ -469,10 +559,6 @@ describe('plugin-voicea', () => {
|
|
|
469
559
|
|
|
470
560
|
|
|
471
561
|
it('turns off manual caption', async () => {
|
|
472
|
-
await voiceaService.toggleManualCaption(true);
|
|
473
|
-
|
|
474
|
-
voiceaService.listenToEvents();
|
|
475
|
-
|
|
476
562
|
await voiceaService.toggleManualCaption(false);
|
|
477
563
|
sinon.assert.calledWith(
|
|
478
564
|
voiceaService.request,
|
|
@@ -484,6 +570,14 @@ describe('plugin-voicea', () => {
|
|
|
484
570
|
);
|
|
485
571
|
|
|
486
572
|
});
|
|
573
|
+
|
|
574
|
+
it('ignore toggle manual caption', async () => {
|
|
575
|
+
voiceaService.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.SENDING;
|
|
576
|
+
await voiceaService.toggleManualCaption(true);
|
|
577
|
+
|
|
578
|
+
sinon.assert.notCalled(voiceaService.request);
|
|
579
|
+
|
|
580
|
+
});
|
|
487
581
|
});
|
|
488
582
|
|
|
489
583
|
describe('#processCaptionLanguageResponse', () => {
|
|
@@ -929,5 +1023,17 @@ describe('plugin-voicea', () => {
|
|
|
929
1023
|
assert.equal(voiceaService.getAnnounceStatus(), "joined");
|
|
930
1024
|
});
|
|
931
1025
|
});
|
|
1026
|
+
|
|
1027
|
+
describe('#onSpokenLanguageUpdate', () => {
|
|
1028
|
+
it('should trigger SPOKEN_LANGUAGE_UPDATE event with correct languageCode', () => {
|
|
1029
|
+
const triggerSpy = sinon.spy();
|
|
1030
|
+
voiceaService.on(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, triggerSpy);
|
|
1031
|
+
|
|
1032
|
+
const languageCode = 'fr-FR';
|
|
1033
|
+
voiceaService.onSpokenLanguageUpdate(languageCode);
|
|
1034
|
+
assert.equal(voiceaService.currentSpokenLanguage, languageCode);
|
|
1035
|
+
assert.calledOnceWithExactly(triggerSpy, {languageCode});
|
|
1036
|
+
});
|
|
1037
|
+
});
|
|
932
1038
|
});
|
|
933
1039
|
});
|