@webex/internal-plugin-voicea 3.0.0 → 3.1.0-next.10

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/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_RELAY_TYPES = exports.VOICEA = exports.TURN_ON_CAPTION_STATUS = exports.TRANSCRIPTION_TYPE = exports.EVENT_TRIGGERS = exports.ANNOUNCE_STATUS = void 0;
7
+ exports.VOICEA = exports.TURN_ON_CAPTION_STATUS = exports.TRANSCRIPTION_TYPE = exports.EVENT_TRIGGERS = exports.ANNOUNCE_STATUS = exports.AIBRIDGE_RELAY_TYPES = void 0;
8
8
  var EVENT_TRIGGERS = exports.EVENT_TRIGGERS = {
9
9
  VOICEA_ANNOUNCEMENT: 'voicea:announcement',
10
10
  CAPTION_LANGUAGE_UPDATE: 'voicea:captionLanguageUpdate',
@@ -14,14 +14,20 @@ var EVENT_TRIGGERS = exports.EVENT_TRIGGERS = {
14
14
  TRANSCRIBING_OFF: 'voicea:transcribingOff',
15
15
  NEW_CAPTION: 'voicea:newCaption',
16
16
  EVA_COMMAND: 'voicea:wxa',
17
- HIGHLIGHT_CREATED: 'voicea:highlightCreated'
17
+ HIGHLIGHT_CREATED: 'voicea:highlightCreated',
18
+ NEW_MANUAL_CAPTION: 'aibridge:newManualCaption'
18
19
  };
19
- var VOICEA_RELAY_TYPES = exports.VOICEA_RELAY_TYPES = {
20
- ANNOUNCEMENT: 'voicea.annc',
21
- CLIENT_ANNOUNCEMENT: 'client.annc',
22
- TRANSLATION_REQUEST: 'voicea.transl.req',
23
- TRANSLATION_RESPONSE: 'voicea.transl.rsp',
24
- TRANSCRIPTION: 'voicea.transcription'
20
+ var AIBRIDGE_RELAY_TYPES = exports.AIBRIDGE_RELAY_TYPES = {
21
+ VOICEA: {
22
+ ANNOUNCEMENT: 'voicea.annc',
23
+ CLIENT_ANNOUNCEMENT: 'client.annc',
24
+ TRANSLATION_REQUEST: 'voicea.transl.req',
25
+ TRANSLATION_RESPONSE: 'voicea.transl.rsp',
26
+ TRANSCRIPTION: 'voicea.transcription'
27
+ },
28
+ MANUAL: {
29
+ TRANSCRIPTION: 'aibridge.manual_transcription'
30
+ }
25
31
  };
26
32
  var TRANSCRIPTION_TYPE = exports.TRANSCRIPTION_TYPE = {
27
33
  UNKNOWN: 'unknown',
@@ -30,7 +36,9 @@ var TRANSCRIPTION_TYPE = exports.TRANSCRIPTION_TYPE = {
30
36
  EVA_CANCEL: 'eva_cancel',
31
37
  HIGHLIGHT_CREATED: 'highlight_created',
32
38
  TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',
33
- TRANSCRIPT_FINAL_RESULT: 'transcript_final_result'
39
+ TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',
40
+ MANUAL_CAPTION_INTERIM_RESULTS: 'manual_caption_interim_results',
41
+ MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result'
34
42
  };
35
43
  var VOICEA = exports.VOICEA = 'voicea';
36
44
  var ANNOUNCE_STATUS = exports.ANNOUNCE_STATUS = {
@@ -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","VOICEA_RELAY_TYPES","ANNOUNCEMENT","CLIENT_ANNOUNCEMENT","TRANSLATION_REQUEST","TRANSLATION_RESPONSE","TRANSCRIPTION","TRANSCRIPTION_TYPE","UNKNOWN","EVA_WAKE","EVA_THANKS","EVA_CANCEL","TRANSCRIPT_INTERIM_RESULTS","TRANSCRIPT_FINAL_RESULT","VOICEA","ANNOUNCE_STATUS","IDLE","JOINED","JOINING","TURN_ON_CAPTION_STATUS","ENABLED","SENDING"],"sources":["constants.ts"],"sourcesContent":["export const EVENT_TRIGGERS = {\n VOICEA_ANNOUNCEMENT: 'voicea:announcement',\n CAPTION_LANGUAGE_UPDATE: 'voicea:captionLanguageUpdate',\n SPOKEN_LANGUAGE_UPDATE: 'voicea:spokenLanguageUpdate',\n CAPTIONS_TURNED_ON: 'voicea:captionOn',\n TRANSCRIBING_ON: 'voicea:transcribingOn',\n TRANSCRIBING_OFF: 'voicea:transcribingOff',\n\n NEW_CAPTION: 'voicea:newCaption',\n EVA_COMMAND: 'voicea:wxa',\n HIGHLIGHT_CREATED: 'voicea:highlightCreated',\n};\n\nexport const VOICEA_RELAY_TYPES = {\n ANNOUNCEMENT: 'voicea.annc',\n CLIENT_ANNOUNCEMENT: 'client.annc',\n TRANSLATION_REQUEST: 'voicea.transl.req',\n TRANSLATION_RESPONSE: 'voicea.transl.rsp',\n TRANSCRIPTION: 'voicea.transcription',\n};\n\nexport const TRANSCRIPTION_TYPE = {\n UNKNOWN: 'unknown',\n EVA_WAKE: 'eva_wake',\n EVA_THANKS: 'eva_thanks',\n EVA_CANCEL: 'eva_cancel',\n HIGHLIGHT_CREATED: 'highlight_created',\n TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',\n TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',\n};\n\nexport const VOICEA = 'voicea';\n\nexport const ANNOUNCE_STATUS = {\n IDLE: 'idle',\n JOINED: 'joined',\n JOINING: 'joining',\n};\n\nexport const TURN_ON_CAPTION_STATUS = {\n IDLE: 'idle',\n ENABLED: 'enabled',\n SENDING: 'sending',\n};\n"],"mappings":";;;;;;;AAAO,IAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG;EAC5BE,mBAAmB,EAAE,qBAAqB;EAC1CC,uBAAuB,EAAE,8BAA8B;EACvDC,sBAAsB,EAAE,6BAA6B;EACrDC,kBAAkB,EAAE,kBAAkB;EACtCC,eAAe,EAAE,uBAAuB;EACxCC,gBAAgB,EAAE,wBAAwB;EAE1CC,WAAW,EAAE,mBAAmB;EAChCC,WAAW,EAAE,YAAY;EACzBC,iBAAiB,EAAE;AACrB,CAAC;AAEM,IAAMC,kBAAkB,GAAAV,OAAA,CAAAU,kBAAA,GAAG;EAChCC,YAAY,EAAE,aAAa;EAC3BC,mBAAmB,EAAE,aAAa;EAClCC,mBAAmB,EAAE,mBAAmB;EACxCC,oBAAoB,EAAE,mBAAmB;EACzCC,aAAa,EAAE;AACjB,CAAC;AAEM,IAAMC,kBAAkB,GAAAhB,OAAA,CAAAgB,kBAAA,GAAG;EAChCC,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE,YAAY;EACxBX,iBAAiB,EAAE,mBAAmB;EACtCY,0BAA0B,EAAE,4BAA4B;EACxDC,uBAAuB,EAAE;AAC3B,CAAC;AAEM,IAAMC,MAAM,GAAAvB,OAAA,CAAAuB,MAAA,GAAG,QAAQ;AAEvB,IAAMC,eAAe,GAAAxB,OAAA,CAAAwB,eAAA,GAAG;EAC7BC,IAAI,EAAE,MAAM;EACZC,MAAM,EAAE,QAAQ;EAChBC,OAAO,EAAE;AACX,CAAC;AAEM,IAAMC,sBAAsB,GAAA5B,OAAA,CAAA4B,sBAAA,GAAG;EACpCH,IAAI,EAAE,MAAM;EACZI,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE;AACX,CAAC"}
1
+ {"version":3,"names":["EVENT_TRIGGERS","exports","VOICEA_ANNOUNCEMENT","CAPTION_LANGUAGE_UPDATE","SPOKEN_LANGUAGE_UPDATE","CAPTIONS_TURNED_ON","TRANSCRIBING_ON","TRANSCRIBING_OFF","NEW_CAPTION","EVA_COMMAND","HIGHLIGHT_CREATED","NEW_MANUAL_CAPTION","AIBRIDGE_RELAY_TYPES","VOICEA","ANNOUNCEMENT","CLIENT_ANNOUNCEMENT","TRANSLATION_REQUEST","TRANSLATION_RESPONSE","TRANSCRIPTION","MANUAL","TRANSCRIPTION_TYPE","UNKNOWN","EVA_WAKE","EVA_THANKS","EVA_CANCEL","TRANSCRIPT_INTERIM_RESULTS","TRANSCRIPT_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULTS","MANUAL_CAPTION_FINAL_RESULT","ANNOUNCE_STATUS","IDLE","JOINED","JOINING","TURN_ON_CAPTION_STATUS","ENABLED","SENDING"],"sources":["constants.ts"],"sourcesContent":["export const EVENT_TRIGGERS = {\n VOICEA_ANNOUNCEMENT: 'voicea:announcement',\n CAPTION_LANGUAGE_UPDATE: 'voicea:captionLanguageUpdate',\n SPOKEN_LANGUAGE_UPDATE: 'voicea:spokenLanguageUpdate',\n CAPTIONS_TURNED_ON: 'voicea:captionOn',\n TRANSCRIBING_ON: 'voicea:transcribingOn',\n TRANSCRIBING_OFF: 'voicea:transcribingOff',\n\n NEW_CAPTION: 'voicea:newCaption',\n EVA_COMMAND: 'voicea:wxa',\n HIGHLIGHT_CREATED: 'voicea:highlightCreated',\n NEW_MANUAL_CAPTION: 'aibridge:newManualCaption',\n};\n\nexport const AIBRIDGE_RELAY_TYPES = {\n VOICEA: {\n ANNOUNCEMENT: 'voicea.annc',\n CLIENT_ANNOUNCEMENT: 'client.annc',\n TRANSLATION_REQUEST: 'voicea.transl.req',\n TRANSLATION_RESPONSE: 'voicea.transl.rsp',\n TRANSCRIPTION: 'voicea.transcription',\n },\n MANUAL: {\n TRANSCRIPTION: 'aibridge.manual_transcription',\n },\n};\n\nexport const TRANSCRIPTION_TYPE = {\n UNKNOWN: 'unknown',\n EVA_WAKE: 'eva_wake',\n EVA_THANKS: 'eva_thanks',\n EVA_CANCEL: 'eva_cancel',\n HIGHLIGHT_CREATED: 'highlight_created',\n TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',\n TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',\n MANUAL_CAPTION_INTERIM_RESULTS: 'manual_caption_interim_results',\n MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result',\n};\n\nexport const VOICEA = 'voicea';\n\nexport const ANNOUNCE_STATUS = {\n IDLE: 'idle',\n JOINED: 'joined',\n JOINING: 'joining',\n};\n\nexport const TURN_ON_CAPTION_STATUS = {\n IDLE: 'idle',\n ENABLED: 'enabled',\n SENDING: 'sending',\n};\n"],"mappings":";;;;;;;AAAO,IAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG;EAC5BE,mBAAmB,EAAE,qBAAqB;EAC1CC,uBAAuB,EAAE,8BAA8B;EACvDC,sBAAsB,EAAE,6BAA6B;EACrDC,kBAAkB,EAAE,kBAAkB;EACtCC,eAAe,EAAE,uBAAuB;EACxCC,gBAAgB,EAAE,wBAAwB;EAE1CC,WAAW,EAAE,mBAAmB;EAChCC,WAAW,EAAE,YAAY;EACzBC,iBAAiB,EAAE,yBAAyB;EAC5CC,kBAAkB,EAAE;AACtB,CAAC;AAEM,IAAMC,oBAAoB,GAAAX,OAAA,CAAAW,oBAAA,GAAG;EAClCC,MAAM,EAAE;IACNC,YAAY,EAAE,aAAa;IAC3BC,mBAAmB,EAAE,aAAa;IAClCC,mBAAmB,EAAE,mBAAmB;IACxCC,oBAAoB,EAAE,mBAAmB;IACzCC,aAAa,EAAE;EACjB,CAAC;EACDC,MAAM,EAAE;IACND,aAAa,EAAE;EACjB;AACF,CAAC;AAEM,IAAME,kBAAkB,GAAAnB,OAAA,CAAAmB,kBAAA,GAAG;EAChCC,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE,YAAY;EACxBd,iBAAiB,EAAE,mBAAmB;EACtCe,0BAA0B,EAAE,4BAA4B;EACxDC,uBAAuB,EAAE,yBAAyB;EAClDC,8BAA8B,EAAE,gCAAgC;EAChEC,2BAA2B,EAAE;AAC/B,CAAC;AAEM,IAAMf,MAAM,GAAAZ,OAAA,CAAAY,MAAA,GAAG,QAAQ;AAEvB,IAAMgB,eAAe,GAAA5B,OAAA,CAAA4B,eAAA,GAAG;EAC7BC,IAAI,EAAE,MAAM;EACZC,MAAM,EAAE,QAAQ;EAChBC,OAAO,EAAE;AACX,CAAC;AAEM,IAAMC,sBAAsB,GAAAhC,OAAA,CAAAgC,sBAAA,GAAG;EACpCH,IAAI,EAAE,MAAM;EACZI,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE;AACX,CAAC"}
@@ -0,0 +1,46 @@
1
+ export declare const EVENT_TRIGGERS: {
2
+ VOICEA_ANNOUNCEMENT: string;
3
+ CAPTION_LANGUAGE_UPDATE: string;
4
+ SPOKEN_LANGUAGE_UPDATE: string;
5
+ CAPTIONS_TURNED_ON: string;
6
+ TRANSCRIBING_ON: string;
7
+ TRANSCRIBING_OFF: string;
8
+ NEW_CAPTION: string;
9
+ EVA_COMMAND: string;
10
+ HIGHLIGHT_CREATED: string;
11
+ NEW_MANUAL_CAPTION: string;
12
+ };
13
+ export declare const AIBRIDGE_RELAY_TYPES: {
14
+ VOICEA: {
15
+ ANNOUNCEMENT: string;
16
+ CLIENT_ANNOUNCEMENT: string;
17
+ TRANSLATION_REQUEST: string;
18
+ TRANSLATION_RESPONSE: string;
19
+ TRANSCRIPTION: string;
20
+ };
21
+ MANUAL: {
22
+ TRANSCRIPTION: string;
23
+ };
24
+ };
25
+ export declare const TRANSCRIPTION_TYPE: {
26
+ UNKNOWN: string;
27
+ EVA_WAKE: string;
28
+ EVA_THANKS: string;
29
+ EVA_CANCEL: string;
30
+ HIGHLIGHT_CREATED: string;
31
+ TRANSCRIPT_INTERIM_RESULTS: string;
32
+ TRANSCRIPT_FINAL_RESULT: string;
33
+ MANUAL_CAPTION_INTERIM_RESULTS: string;
34
+ MANUAL_CAPTION_FINAL_RESULT: string;
35
+ };
36
+ export declare const VOICEA = "voicea";
37
+ export declare const ANNOUNCE_STATUS: {
38
+ IDLE: string;
39
+ JOINED: string;
40
+ JOINING: string;
41
+ };
42
+ export declare const TURN_ON_CAPTION_STATUS: {
43
+ IDLE: string;
44
+ ENABLED: string;
45
+ SENDING: string;
46
+ };
@@ -0,0 +1,2 @@
1
+ export { default } from './voicea';
2
+ export { EVENT_TRIGGERS, TURN_ON_CAPTION_STATUS } from './constants';
@@ -0,0 +1 @@
1
+ export declare const millisToMinutesAndSeconds: (millis: number) => string;
@@ -0,0 +1,128 @@
1
+ import { WebexPlugin } from '@webex/webex-core';
2
+ import { IVoiceaChannel } from './voicea.types';
3
+ /**
4
+ * @description VoiceaChannel to hold single instance of LLM
5
+ * @export
6
+ * @class VoiceaChannel
7
+ */
8
+ export declare class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
9
+ namespace: string;
10
+ private seqNum;
11
+ private areCaptionsEnabled;
12
+ private hasSubscribedToEvents;
13
+ private vmcDeviceId?;
14
+ private announceStatus;
15
+ private captionStatus;
16
+ /**
17
+ * @param {Object} e
18
+ * @returns {undefined}
19
+ */
20
+ private eventProcessor;
21
+ /**
22
+ * Listen to websocket messages
23
+ * @returns {undefined}
24
+ */
25
+ private listenToEvents;
26
+ /**
27
+ * Listen to websocket messages
28
+ * @returns {void}
29
+ */
30
+ deregisterEvents(): void;
31
+ /**
32
+ * Initializes Voicea plugin
33
+ * @param {any} args
34
+ */
35
+ constructor(...args: any[]);
36
+ /**
37
+ * Process manual Transcript and send alert
38
+ * @param {TranscriptionResponse} transcriptPayload
39
+ * @returns {void}
40
+ */
41
+ private processManualTranscription;
42
+ /**
43
+ * Process Transcript and send alert
44
+ * @param {TranscriptionResponse} voiceaPayload
45
+ * @returns {void}
46
+ */
47
+ private processTranscription;
48
+ /**
49
+ * Processes Caption Language Response
50
+ * @param {CaptionLanguageResponse} voiceaPayload
51
+ * @returns {void}
52
+ */
53
+ private processCaptionLanguageResponse;
54
+ /**
55
+ * processes voicea announcement response and triggers event
56
+ * @param {Object} voiceaPayload
57
+ * @returns {void}
58
+ */
59
+ private processAnnouncementMessage;
60
+ /**
61
+ * Sends Announcement to add voicea to the meeting
62
+ * @returns {void}
63
+ */
64
+ private sendAnnouncement;
65
+ /**
66
+ * Set Spoken Language for the meeting
67
+ * @param {string} languageCode
68
+ * @returns {Promise}
69
+ */
70
+ setSpokenLanguage: (languageCode: string) => Promise<void>;
71
+ /**
72
+ * Request Language translation
73
+ * @param {string} languageCode
74
+ * @returns {void}
75
+ */
76
+ requestLanguage: (languageCode: string) => void;
77
+ /**
78
+ * request turn on Captions
79
+ * @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English
80
+ * @returns {Promise}
81
+ */
82
+ private requestTurnOnCaptions;
83
+ /**
84
+ * is announce processing
85
+ * @returns {boolean}
86
+ */
87
+ private isAnnounceProcessing;
88
+ /**
89
+ * announce to voicea data chanel
90
+ * @returns {void}
91
+ */
92
+ announce: () => void;
93
+ /**
94
+ * is turn on caption processing
95
+ * @returns {boolean}
96
+ */
97
+ private isCaptionProcessing;
98
+ /**
99
+ * Turn on Captions
100
+ * @param {string} [spokenLanguage] - Optional Spoken language code
101
+ * @returns {Promise}
102
+ */
103
+ turnOnCaptions: (spokenLanguage?: any) => undefined | Promise<void>;
104
+ /**
105
+ * Toggle transcribing for highlights
106
+ * @param {bool} activate if true transcribing is turned on
107
+ * @param {string} spokenLanguage language code for spoken language
108
+ * @returns {Promise}
109
+ */
110
+ toggleTranscribing: (activate: boolean, spokenLanguage?: string) => undefined | Promise<void>;
111
+ /**
112
+ * Toggle turn on manual caption
113
+ * @param {bool} enable if true manual caption is turned on
114
+ * @returns {Promise}
115
+ */
116
+ toggleManualCaption: (enable: boolean) => undefined | Promise<void>;
117
+ /**
118
+ * get caption status
119
+ * @returns {string}
120
+ */
121
+ getCaptionStatus: () => string;
122
+ /**
123
+ * get announce status
124
+ * @returns {string}
125
+ */
126
+ getAnnounceStatus: () => string;
127
+ }
128
+ export default VoiceaChannel;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Type for payload
3
+ */
4
+ interface AnnouncementPayload {
5
+ translation: {
6
+ max_languages: number;
7
+ allowed_languages: string[];
8
+ };
9
+ ASR: {
10
+ spoken_languages: string[];
11
+ };
12
+ }
13
+ type TRANSCRIPTION_TYPES = 'unknown' | 'eva_wake' | 'eva_thanks' | 'eva_cancel' | 'highlight_created' | 'transcript_interim_results' | 'transcript_final_result';
14
+ /**
15
+ * Class for an Transcription Object
16
+ */
17
+ interface Transcription {
18
+ start_millis: number;
19
+ end_millis: number;
20
+ text: string;
21
+ transcript_language_code: string;
22
+ translations: {
23
+ [x: string]: string;
24
+ };
25
+ csis: number[];
26
+ last_packet_timestamp_ms: number;
27
+ }
28
+ /**
29
+ * Highlights
30
+ */
31
+ interface Highlight {
32
+ highlight_id: string;
33
+ transcript: string;
34
+ highlight_label: string;
35
+ highlight_source: string;
36
+ start_millis: number;
37
+ end_millis: number;
38
+ csis: number[];
39
+ }
40
+ /**
41
+ * Type for Transcription message
42
+ */
43
+ interface TranscriptionResponse {
44
+ type: TRANSCRIPTION_TYPES;
45
+ id: string;
46
+ transcript_id: string;
47
+ translations?: {
48
+ [x: string]: string;
49
+ };
50
+ transcripts?: Transcription[];
51
+ transcript?: Transcription;
52
+ highlight?: Highlight;
53
+ csis: number[];
54
+ data: string;
55
+ command_response: string;
56
+ }
57
+ /**
58
+ * Type for CaptionLanguageResponse
59
+ */
60
+ interface CaptionLanguageResponse {
61
+ requestId: string;
62
+ statusCode: number;
63
+ errorCode: number;
64
+ message: string;
65
+ }
66
+ interface IVoiceaChannel {
67
+ setSpokenLanguage: (languageCode: string) => Promise<void>;
68
+ requestLanguage: (languageCode: string) => void;
69
+ turnOnCaptions: () => undefined | Promise<void>;
70
+ toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;
71
+ deregisterEvents: () => void;
72
+ }
73
+ export type { AnnouncementPayload, CaptionLanguageResponse, TranscriptionResponse, Transcription, Highlight, IVoiceaChannel, };
package/dist/voicea.js CHANGED
@@ -17,7 +17,6 @@ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime
17
17
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
18
18
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
19
19
  var _uuid = _interopRequireDefault(require("uuid"));
20
- var _pluginMeetings = require("@webex/plugin-meetings");
21
20
  var _webexCore = require("@webex/webex-core");
22
21
  var _constants = require("./constants");
23
22
  var _utils = require("./utils");
@@ -56,17 +55,40 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
56
55
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "eventProcessor", function (e) {
57
56
  _this.seqNum = e.sequenceNumber + 1;
58
57
  switch (e.data.relayType) {
59
- case _constants.VOICEA_RELAY_TYPES.ANNOUNCEMENT:
58
+ case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:
60
59
  _this.vmcDeviceId = e.headers.from;
61
60
  _this.announceStatus = _constants.ANNOUNCE_STATUS.JOINED;
62
61
  _this.processAnnouncementMessage(e.data.voiceaPayload);
63
62
  break;
64
- case _constants.VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:
63
+ case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_RESPONSE:
65
64
  _this.processCaptionLanguageResponse(e.data.voiceaPayload);
66
65
  break;
67
- case _constants.VOICEA_RELAY_TYPES.TRANSCRIPTION:
66
+ case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:
68
67
  _this.processTranscription(e.data.voiceaPayload);
69
68
  break;
69
+ case _constants.AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:
70
+ _this.processManualTranscription(e.data.transcriptPayload);
71
+ break;
72
+ default:
73
+ break;
74
+ }
75
+ });
76
+ /**
77
+ * Process manual Transcript and send alert
78
+ * @param {TranscriptionResponse} transcriptPayload
79
+ * @returns {void}
80
+ */
81
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "processManualTranscription", function (transcriptPayload) {
82
+ switch (transcriptPayload.type) {
83
+ case _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT:
84
+ case _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULTS:
85
+ // @ts-ignore
86
+ _this.trigger(_constants.EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {
87
+ isFinal: transcriptPayload.type === _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,
88
+ transcriptId: transcriptPayload.id,
89
+ transcripts: transcriptPayload.transcripts
90
+ });
91
+ break;
70
92
  default:
71
93
  break;
72
94
  }
@@ -79,36 +101,24 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
79
101
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "processTranscription", function (voiceaPayload) {
80
102
  switch (voiceaPayload.type) {
81
103
  case _constants.TRANSCRIPTION_TYPE.TRANSCRIPT_INTERIM_RESULTS:
82
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
83
- file: 'voicea',
84
- function: 'processTranscription'
85
- }, _constants.EVENT_TRIGGERS.NEW_CAPTION, {
104
+ // @ts-ignore
105
+ _this.trigger(_constants.EVENT_TRIGGERS.NEW_CAPTION, {
86
106
  isFinal: false,
87
107
  transcriptId: voiceaPayload.transcript_id,
88
108
  transcripts: voiceaPayload.transcripts
89
109
  });
90
110
  break;
91
111
  case _constants.TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:
92
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
93
- file: 'voicea',
94
- function: 'processTranscription'
95
- }, _constants.EVENT_TRIGGERS.NEW_CAPTION, {
112
+ // @ts-ignore
113
+ _this.trigger(_constants.EVENT_TRIGGERS.NEW_CAPTION, {
96
114
  isFinal: true,
97
115
  transcriptId: voiceaPayload.transcript_id,
98
- translations: voiceaPayload.translations,
99
- transcript: {
100
- csis: voiceaPayload.csis,
101
- text: voiceaPayload.transcript.text,
102
- transcriptLanguageCode: voiceaPayload.transcript.transcript_language_code
103
- },
104
- timestamp: (0, _utils.millisToMinutesAndSeconds)(voiceaPayload.transcript.end_millis)
116
+ transcripts: voiceaPayload.transcripts
105
117
  });
106
118
  break;
107
119
  case _constants.TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:
108
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
109
- file: 'voicea',
110
- function: 'processTranscription'
111
- }, _constants.EVENT_TRIGGERS.HIGHLIGHT_CREATED, {
120
+ // @ts-ignore
121
+ _this.trigger(_constants.EVENT_TRIGGERS.HIGHLIGHT_CREATED, {
112
122
  csis: voiceaPayload.highlight.csis,
113
123
  highlightId: voiceaPayload.highlight.highlight_id,
114
124
  text: voiceaPayload.highlight.transcript,
@@ -118,20 +128,16 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
118
128
  });
119
129
  break;
120
130
  case _constants.TRANSCRIPTION_TYPE.EVA_THANKS:
121
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
122
- file: 'voicea',
123
- function: 'processTranscription'
124
- }, _constants.EVENT_TRIGGERS.EVA_COMMAND, {
131
+ // @ts-ignore
132
+ _this.trigger(_constants.EVENT_TRIGGERS.EVA_COMMAND, {
125
133
  isListening: false,
126
134
  text: voiceaPayload.command_response
127
135
  });
128
136
  break;
129
137
  case _constants.TRANSCRIPTION_TYPE.EVA_WAKE:
130
138
  case _constants.TRANSCRIPTION_TYPE.EVA_CANCEL:
131
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
132
- file: 'voicea',
133
- function: 'processTranscription'
134
- }, _constants.EVENT_TRIGGERS.EVA_COMMAND, {
139
+ // @ts-ignore
140
+ _this.trigger(_constants.EVENT_TRIGGERS.EVA_COMMAND, {
135
141
  isListening: voiceaPayload.type === _constants.TRANSCRIPTION_TYPE.EVA_WAKE
136
142
  });
137
143
  break;
@@ -146,17 +152,13 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
146
152
  */
147
153
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "processCaptionLanguageResponse", function (voiceaPayload) {
148
154
  if (voiceaPayload.statusCode === 200) {
149
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
150
- file: 'voicea',
151
- function: 'processCaptionLanguageResponse'
152
- }, _constants.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {
155
+ // @ts-ignore
156
+ _this.trigger(_constants.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {
153
157
  statusCode: 200
154
158
  });
155
159
  } else {
156
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
157
- file: 'voicea',
158
- function: 'processCaptionLanguageResponse'
159
- }, _constants.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {
160
+ // @ts-ignore
161
+ _this.trigger(_constants.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {
160
162
  statusCode: voiceaPayload.errorCode,
161
163
  errorMessage: voiceaPayload.message
162
164
  });
@@ -174,10 +176,9 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
174
176
  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,
175
177
  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 : []
176
178
  };
177
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
178
- file: 'voicea',
179
- function: 'processAnnouncementMessage'
180
- }, _constants.EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);
179
+
180
+ // @ts-ignore
181
+ _this.trigger(_constants.EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);
181
182
  });
182
183
  /**
183
184
  * Sends Announcement to add voicea to the meeting
@@ -200,7 +201,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
200
201
  version: 'v2'
201
202
  },
202
203
  eventType: 'relay.event',
203
- relayType: _constants.VOICEA_RELAY_TYPES.CLIENT_ANNOUNCEMENT
204
+ relayType: _constants.AIBRIDGE_RELAY_TYPES.VOICEA.CLIENT_ANNOUNCEMENT
204
205
  },
205
206
  trackingId: "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString())
206
207
  });
@@ -224,10 +225,8 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
224
225
  }
225
226
  }
226
227
  }).then(function () {
227
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
228
- file: 'voicea',
229
- function: 'setSpokenLanguage'
230
- }, _constants.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {
228
+ // @ts-ignore
229
+ _this.trigger(_constants.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {
231
230
  languageCode: languageCode
232
231
  });
233
232
  })
@@ -258,7 +257,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
258
257
  id: _uuid.default.v4()
259
258
  },
260
259
  eventType: 'relay.event',
261
- relayType: _constants.VOICEA_RELAY_TYPES.TRANSLATION_REQUEST
260
+ relayType: _constants.AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_REQUEST
262
261
  },
263
262
  trackingId: "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString())
264
263
  });
@@ -288,10 +287,8 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
288
287
  url: "".concat(_this.webex.internal.llm.getLocusUrl(), "/controls/"),
289
288
  body: body
290
289
  }).then(function () {
291
- _pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
292
- file: 'voicea',
293
- function: 'turnOnCaptions'
294
- }, _constants.EVENT_TRIGGERS.CAPTIONS_TURNED_ON);
290
+ // @ts-ignore
291
+ _this.trigger(_constants.EVENT_TRIGGERS.CAPTIONS_TURNED_ON);
295
292
  _this.areCaptionsEnabled = true;
296
293
  _this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.ENABLED;
297
294
  _this.announce();
@@ -384,6 +381,26 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
384
381
  return undefined;
385
382
  });
386
383
  });
384
+ /**
385
+ * Toggle turn on manual caption
386
+ * @param {bool} enable if true manual caption is turned on
387
+ * @returns {Promise}
388
+ */
389
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "toggleManualCaption", function (enable) {
390
+ // @ts-ignore
391
+ return _this.request({
392
+ method: 'PUT',
393
+ // @ts-ignore
394
+ url: "".concat(_this.webex.internal.llm.getLocusUrl(), "/controls/"),
395
+ body: {
396
+ manualCaption: {
397
+ enable: enable
398
+ }
399
+ }
400
+ }).then(function () {
401
+ return undefined;
402
+ });
403
+ });
387
404
  /**
388
405
  * get caption status
389
406
  * @returns {string}
@@ -1 +1 @@
1
- {"version":3,"names":["_uuid","_interopRequireDefault","require","_pluginMeetings","_webexCore","_constants","_utils","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","VoiceaChannel","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","VOICEA","seqNum","sequenceNumber","data","relayType","VOICEA_RELAY_TYPES","ANNOUNCEMENT","vmcDeviceId","headers","from","announceStatus","ANNOUNCE_STATUS","JOINED","processAnnouncementMessage","voiceaPayload","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","type","TRANSCRIPTION_TYPE","TRANSCRIPT_INTERIM_RESULTS","Trigger","trigger","file","function","EVENT_TRIGGERS","NEW_CAPTION","isFinal","transcriptId","transcript_id","transcripts","TRANSCRIPT_FINAL_RESULT","translations","transcript","csis","text","transcriptLanguageCode","transcript_language_code","timestamp","millisToMinutesAndSeconds","end_millis","HIGHLIGHT_CREATED","highlight","highlightId","highlight_id","highlightLabel","highlight_label","highlightSource","highlight_source","EVA_THANKS","EVA_COMMAND","isListening","command_response","EVA_WAKE","EVA_CANCEL","statusCode","CAPTION_LANGUAGE_UPDATE","errorCode","errorMessage","message","_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","id","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","_createClass2","key","value","hasSubscribedToEvents","on","eventProcessor","deregisterEvents","off","WebexPlugin","_default"],"sources":["voicea.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {TriggerProxy as Trigger} from '@webex/plugin-meetings';\nimport {WebexPlugin, config} from '@webex/webex-core';\n\nimport {\n EVENT_TRIGGERS,\n VOICEA_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 VOICEA_RELAY_TYPES.ANNOUNCEMENT:\n this.vmcDeviceId = e.headers.from;\n this.announceStatus = ANNOUNCE_STATUS.JOINED;\n this.processAnnouncementMessage(e.data.voiceaPayload);\n break;\n case VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.data.voiceaPayload);\n break;\n case VOICEA_RELAY_TYPES.TRANSCRIPTION:\n this.processTranscription(e.data.voiceaPayload);\n break;\n default:\n break;\n }\n };\n\n /**\n * Listen to websocket messages\n * @returns {undefined}\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n // @ts-ignore\n this.webex.internal.llm.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n }\n }\n\n /**\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 Transcript and send alert\n * @param {TranscriptionResponse} voiceaPayload\n * @returns {void}\n */\n private processTranscription = (voiceaPayload: TranscriptionResponse): void => {\n switch (voiceaPayload.type) {\n case TRANSCRIPTION_TYPE.TRANSCRIPT_INTERIM_RESULTS:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.NEW_CAPTION,\n {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.NEW_CAPTION,\n {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n translations: voiceaPayload.translations,\n transcript: {\n csis: voiceaPayload.csis,\n text: voiceaPayload.transcript.text,\n transcriptLanguageCode: voiceaPayload.transcript.transcript_language_code,\n },\n timestamp: millisToMinutesAndSeconds(voiceaPayload.transcript.end_millis),\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.HIGHLIGHT_CREATED,\n {\n csis: voiceaPayload.highlight.csis,\n highlightId: voiceaPayload.highlight.highlight_id,\n text: voiceaPayload.highlight.transcript,\n highlightLabel: voiceaPayload.highlight.highlight_label,\n highlightSource: voiceaPayload.highlight.highlight_source,\n timestamp: millisToMinutesAndSeconds(voiceaPayload.highlight.end_millis),\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.EVA_COMMAND,\n {\n isListening: false,\n text: voiceaPayload.command_response,\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.EVA_WAKE:\n case TRANSCRIPTION_TYPE.EVA_CANCEL:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.EVA_COMMAND,\n {\n isListening: voiceaPayload.type === TRANSCRIPTION_TYPE.EVA_WAKE,\n }\n );\n break;\n\n default:\n break;\n }\n };\n\n /**\n * Processes Caption Language Response\n * @param {CaptionLanguageResponse} voiceaPayload\n * @returns {void}\n */\n private processCaptionLanguageResponse = (voiceaPayload: CaptionLanguageResponse): void => {\n if (voiceaPayload.statusCode === 200) {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processCaptionLanguageResponse',\n },\n EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE,\n {statusCode: 200}\n );\n } else {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processCaptionLanguageResponse',\n },\n EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE,\n {statusCode: voiceaPayload.errorCode, errorMessage: voiceaPayload.message}\n );\n }\n };\n\n /**\n * processes voicea announcement response and triggers event\n * @param {Object} voiceaPayload\n * @returns {void}\n */\n private processAnnouncementMessage = (voiceaPayload: AnnouncementPayload): void => {\n const voiceaLanguageOptions = {\n captionLanguages: voiceaPayload?.translation?.allowed_languages ?? [],\n maxLanguages: voiceaPayload?.translation?.max_languages ?? 0,\n spokenLanguages: voiceaPayload?.ASR?.spoken_languages ?? [],\n };\n\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processAnnouncementMessage',\n },\n EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT,\n voiceaLanguageOptions\n );\n };\n\n /**\n * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n private sendAnnouncement = (): void => {\n 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: VOICEA_RELAY_TYPES.CLIENT_ANNOUNCEMENT,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Set Spoken Language for the meeting\n * @param {string} languageCode\n * @returns {Promise}\n */\n public setSpokenLanguage = (languageCode: string): Promise<void> =>\n // @ts-ignore\n this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n spokenLanguage: languageCode,\n },\n },\n }).then(() => {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'setSpokenLanguage',\n },\n EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE,\n {languageCode}\n );\n });\n\n /**\n * Request Language translation\n * @param {string} languageCode\n * @returns {void}\n */\n public requestLanguage = (languageCode: string): void => {\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {\n to: this.vmcDeviceId,\n },\n data: {\n clientPayload: {\n translationLanguage: languageCode,\n id: uuid.v4(),\n },\n eventType: 'relay.event',\n relayType: VOICEA_RELAY_TYPES.TRANSLATION_REQUEST,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * 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 Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'turnOnCaptions',\n },\n EVENT_TRIGGERS.CAPTIONS_TURNED_ON\n );\n this.areCaptionsEnabled = true;\n this.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 * 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,eAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEA,IAAAG,UAAA,GAAAH,OAAA;AAeA,IAAAI,MAAA,GAAAJ,OAAA;AAAkD,SAAAK,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAAC,OAAA,EAAAN,OAAA,GAAAO,MAAA,MAAAN,yBAAA,QAAAO,SAAA,OAAAH,gBAAA,CAAAC,OAAA,QAAAG,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAN,KAAA,EAAAO,SAAA,EAAAH,SAAA,YAAAD,MAAA,GAAAH,KAAA,CAAAQ,KAAA,OAAAD,SAAA,gBAAAE,2BAAA,CAAAP,OAAA,QAAAC,MAAA;AAAA,SAAAL,0BAAA,eAAAY,OAAA,qBAAAJ,kBAAA,oBAAAA,kBAAA,CAAAK,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAV,kBAAA,CAAAO,OAAA,8CAAAI,CAAA,sBAPlD;AASA;AACA;AACA;AACA;AACA;AAJA,IAKaC,aAAa,GAAAC,OAAA,CAAAD,aAAA,0BAAAE,YAAA;EAAA,IAAAC,UAAA,CAAAnB,OAAA,EAAAgB,aAAA,EAAAE,YAAA;EAAA,IAAAE,MAAA,GAAA3B,YAAA,CAAAuB,aAAA;EAiExB;AACF;AACA;AACA;EACE,SAAAA,cAAA,EAAqB;IAAA,IAAAK,KAAA;IAAA,IAAAC,gBAAA,CAAAtB,OAAA,QAAAgB,aAAA;IAAA,SAAAO,IAAA,GAAAlB,SAAA,CAAAmB,MAAA,EAANC,IAAI,OAAAC,KAAA,CAAAH,IAAA,GAAAI,IAAA,MAAAA,IAAA,GAAAJ,IAAA,EAAAI,IAAA;MAAJF,IAAI,CAAAE,IAAA,IAAAtB,SAAA,CAAAsB,IAAA;IAAA;IACjBN,KAAA,GAAAD,MAAA,CAAAN,IAAA,CAAAR,KAAA,CAAAc,MAAA,SAAAQ,MAAA,CAASH,IAAI;IAAE,IAAAI,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,gBArELU,iBAAM;IAAA,IAAAF,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;IAAA,IAAAQ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;IAAA,IAAAQ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,4BAMc,KAAK;IAAA,IAAAQ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;IAAA,IAAAQ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;IAAA,IAAAQ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;IAQrC;AACF;AACA;AACA;IAHE,IAAAQ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,qBAKyB,UAACN,CAAC,EAAK;MAC9BM,KAAA,CAAKW,MAAM,GAAGjB,CAAC,CAACkB,cAAc,GAAG,CAAC;MAClC,QAAQlB,CAAC,CAACmB,IAAI,CAACC,SAAS;QACtB,KAAKC,6BAAkB,CAACC,YAAY;UAClChB,KAAA,CAAKiB,WAAW,GAAGvB,CAAC,CAACwB,OAAO,CAACC,IAAI;UACjCnB,KAAA,CAAKoB,cAAc,GAAGC,0BAAe,CAACC,MAAM;UAC5CtB,KAAA,CAAKuB,0BAA0B,CAAC7B,CAAC,CAACmB,IAAI,CAACW,aAAa,CAAC;UACrD;QACF,KAAKT,6BAAkB,CAACU,oBAAoB;UAC1CzB,KAAA,CAAK0B,8BAA8B,CAAChC,CAAC,CAACmB,IAAI,CAACW,aAAa,CAAC;UACzD;QACF,KAAKT,6BAAkB,CAACY,aAAa;UACnC3B,KAAA,CAAK4B,oBAAoB,CAAClC,CAAC,CAACmB,IAAI,CAACW,aAAa,CAAC;UAC/C;QACF;UACE;MACJ;IACF,CAAC;IAyCD;AACF;AACA;AACA;AACA;IAJE,IAAAhB,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,2BAK+B,UAACwB,aAAoC,EAAW;MAC7E,QAAQA,aAAa,CAACK,IAAI;QACxB,KAAKC,6BAAkB,CAACC,0BAA0B;UAChDC,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;YACEkC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACC,WAAW,EAC1B;YACEC,OAAO,EAAE,KAAK;YACdC,YAAY,EAAEf,aAAa,CAACgB,aAAa;YACzCC,WAAW,EAAEjB,aAAa,CAACiB;UAC7B,CACF,CAAC;UACD;QAEF,KAAKX,6BAAkB,CAACY,uBAAuB;UAC7CV,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;YACEkC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACC,WAAW,EAC1B;YACEC,OAAO,EAAE,IAAI;YACbC,YAAY,EAAEf,aAAa,CAACgB,aAAa;YACzCG,YAAY,EAAEnB,aAAa,CAACmB,YAAY;YACxCC,UAAU,EAAE;cACVC,IAAI,EAAErB,aAAa,CAACqB,IAAI;cACxBC,IAAI,EAAEtB,aAAa,CAACoB,UAAU,CAACE,IAAI;cACnCC,sBAAsB,EAAEvB,aAAa,CAACoB,UAAU,CAACI;YACnD,CAAC;YACDC,SAAS,EAAE,IAAAC,gCAAyB,EAAC1B,aAAa,CAACoB,UAAU,CAACO,UAAU;UAC1E,CACF,CAAC;UACD;QAEF,KAAKrB,6BAAkB,CAACsB,iBAAiB;UACvCpB,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;YACEkC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACgB,iBAAiB,EAChC;YACEP,IAAI,EAAErB,aAAa,CAAC6B,SAAS,CAACR,IAAI;YAClCS,WAAW,EAAE9B,aAAa,CAAC6B,SAAS,CAACE,YAAY;YACjDT,IAAI,EAAEtB,aAAa,CAAC6B,SAAS,CAACT,UAAU;YACxCY,cAAc,EAAEhC,aAAa,CAAC6B,SAAS,CAACI,eAAe;YACvDC,eAAe,EAAElC,aAAa,CAAC6B,SAAS,CAACM,gBAAgB;YACzDV,SAAS,EAAE,IAAAC,gCAAyB,EAAC1B,aAAa,CAAC6B,SAAS,CAACF,UAAU;UACzE,CACF,CAAC;UACD;QAEF,KAAKrB,6BAAkB,CAAC8B,UAAU;UAChC5B,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;YACEkC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACyB,WAAW,EAC1B;YACEC,WAAW,EAAE,KAAK;YAClBhB,IAAI,EAAEtB,aAAa,CAACuC;UACtB,CACF,CAAC;UACD;QAEF,KAAKjC,6BAAkB,CAACkC,QAAQ;QAChC,KAAKlC,6BAAkB,CAACmC,UAAU;UAChCjC,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;YACEkC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACyB,WAAW,EAC1B;YACEC,WAAW,EAAEtC,aAAa,CAACK,IAAI,KAAKC,6BAAkB,CAACkC;UACzD,CACF,CAAC;UACD;QAEF;UACE;MACJ;IACF,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAxD,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,qCAKyC,UAACwB,aAAsC,EAAW;MACzF,IAAIA,aAAa,CAAC0C,UAAU,KAAK,GAAG,EAAE;QACpClC,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;UACEkC,IAAI,EAAE,QAAQ;UACdC,QAAQ,EAAE;QACZ,CAAC,EACDC,yBAAc,CAAC+B,uBAAuB,EACtC;UAACD,UAAU,EAAE;QAAG,CAClB,CAAC;MACH,CAAC,MAAM;QACLlC,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;UACEkC,IAAI,EAAE,QAAQ;UACdC,QAAQ,EAAE;QACZ,CAAC,EACDC,yBAAc,CAAC+B,uBAAuB,EACtC;UAACD,UAAU,EAAE1C,aAAa,CAAC4C,SAAS;UAAEC,YAAY,EAAE7C,aAAa,CAAC8C;QAAO,CAC3E,CAAC;MACH;IACF,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAA9D,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,iCAKqC,UAACwB,aAAkC,EAAW;MAAA,IAAA+C,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,kBAAA;MACjF,IAAMC,qBAAqB,GAAG;QAC5BC,gBAAgB,GAAAP,qBAAA,GAAE/C,aAAa,aAAbA,aAAa,wBAAAgD,sBAAA,GAAbhD,aAAa,CAAEuD,WAAW,cAAAP,sBAAA,uBAA1BA,sBAAA,CAA4BQ,iBAAiB,cAAAT,qBAAA,cAAAA,qBAAA,GAAI,EAAE;QACrEU,YAAY,GAAAR,sBAAA,GAAEjD,aAAa,aAAbA,aAAa,wBAAAkD,sBAAA,GAAblD,aAAa,CAAEuD,WAAW,cAAAL,sBAAA,uBAA1BA,sBAAA,CAA4BQ,aAAa,cAAAT,sBAAA,cAAAA,sBAAA,GAAI,CAAC;QAC5DU,eAAe,GAAAR,qBAAA,GAAEnD,aAAa,aAAbA,aAAa,wBAAAoD,kBAAA,GAAbpD,aAAa,CAAE4D,GAAG,cAAAR,kBAAA,uBAAlBA,kBAAA,CAAoBS,gBAAgB,cAAAV,qBAAA,cAAAA,qBAAA,GAAI;MAC3D,CAAC;MAED3C,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;QACEkC,IAAI,EAAE,QAAQ;QACdC,QAAQ,EAAE;MACZ,CAAC,EACDC,yBAAc,CAACkD,mBAAmB,EAClCT,qBACF,CAAC;IACH,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAArE,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,uBAI2B,YAAY;MACrCA,KAAA,CAAKoB,cAAc,GAAGC,0BAAe,CAACkE,OAAO;MAC7CvF,KAAA,CAAKwF,cAAc,CAAC,CAAC;MACrB;MACAxF,KAAA,CAAKyF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACC,MAAM,CAACC,IAAI,CAAC;QAClCC,EAAE,KAAAvF,MAAA,CAAKP,KAAA,CAAKW,MAAM,CAAE;QACpBkB,IAAI,EAAE,gBAAgB;QACtBkE,UAAU,EAAE;UACV;UACAC,KAAK,EAAEhG,KAAA,CAAKyF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACM,UAAU,CAAC;QAC5C,CAAC;QACD/E,OAAO,EAAE,CAAC,CAAC;QACXL,IAAI,EAAE;UACJqF,aAAa,EAAE;YACbC,OAAO,EAAE;UACX,CAAC;UACDC,SAAS,EAAE,aAAa;UACxBtF,SAAS,EAAEC,6BAAkB,CAACsF;QAChC,CAAC;QACDC,UAAU,KAAA/F,MAAA,CAAKgG,iBAAM,CAACC,gBAAgB,OAAAjG,MAAA,CAAIkG,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MAChE,CAAC,CAAC;MACF3G,KAAA,CAAKW,MAAM,IAAI,CAAC;IAClB,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAH,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,wBAK2B,UAAC4G,YAAoB;MAAA;QAC9C;QACA5G,KAAA,CAAK6G,OAAO,CAAC;UACXC,MAAM,EAAE,KAAK;UACb;UACAC,GAAG,KAAAxG,MAAA,CAAKP,KAAA,CAAKyF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACqB,WAAW,CAAC,CAAC,eAAY;UACzDC,IAAI,EAAE;YACJC,UAAU,EAAE;cACVC,cAAc,EAAEP;YAClB;UACF;QACF,CAAC,CAAC,CAACQ,IAAI,CAAC,YAAM;UACZpF,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;YACEkC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACiF,sBAAsB,EACrC;YAACT,YAAY,EAAZA;UAAY,CACf,CAAC;QACH,CAAC;MAAC;IAAA;IAEJ;AACF;AACA;AACA;AACA;IAJE,IAAApG,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,sBAKyB,UAAC4G,YAAoB,EAAW;MACvD;MACA,IAAI,CAAC5G,KAAA,CAAKyF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAAC2B,WAAW,CAAC,CAAC,EAAE;MAC5C;MACAtH,KAAA,CAAKyF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACC,MAAM,CAACC,IAAI,CAAC;QAClCC,EAAE,KAAAvF,MAAA,CAAKP,KAAA,CAAKW,MAAM,CAAE;QACpBkB,IAAI,EAAE,gBAAgB;QACtBkE,UAAU,EAAE;UACV;UACAC,KAAK,EAAEhG,KAAA,CAAKyF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACM,UAAU,CAAC;QAC5C,CAAC;QACD/E,OAAO,EAAE;UACPqG,EAAE,EAAEvH,KAAA,CAAKiB;QACX,CAAC;QACDJ,IAAI,EAAE;UACJqF,aAAa,EAAE;YACbsB,mBAAmB,EAAEZ,YAAY;YACjCd,EAAE,EAAEW,aAAI,CAACC,EAAE,CAAC;UACd,CAAC;UACDN,SAAS,EAAE,aAAa;UACxBtF,SAAS,EAAEC,6BAAkB,CAAC0G;QAChC,CAAC;QACDnB,UAAU,KAAA/F,MAAA,CAAKgG,iBAAM,CAACC,gBAAgB,OAAAjG,MAAA,CAAIkG,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MAChE,CAAC,CAAC;MACF3G,KAAA,CAAKW,MAAM,IAAI,CAAC;IAClB,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAH,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,4BAKgC,UAAC4G,YAAa,EAAgC;MAC5E5G,KAAA,CAAK0H,aAAa,GAAGC,iCAAsB,CAACC,OAAO;;MAEnD;MACA,IAAMX,IAAI,GAAG;QACXC,UAAU,EAAE;UAACW,OAAO,EAAE;QAAI,CAAC;QAC3BjB,YAAY,EAAZA;MACF,CAAC;;MAED;MACA;MACA,OAAO5G,KAAA,CAAK6G,OAAO,CAAC;QAClBC,MAAM,EAAE,KAAK;QACb;QACAC,GAAG,KAAAxG,MAAA,CAAKP,KAAA,CAAKyF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACqB,WAAW,CAAC,CAAC,eAAY;QACzDC,IAAI,EAAJA;MACF,CAAC,CAAC,CACCG,IAAI,CAAC,YAAM;QACVpF,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;UACEkC,IAAI,EAAE,QAAQ;UACdC,QAAQ,EAAE;QACZ,CAAC,EACDC,yBAAc,CAAC0F,kBACjB,CAAC;QACD9H,KAAA,CAAK+H,kBAAkB,GAAG,IAAI;QAC9B/H,KAAA,CAAK0H,aAAa,GAAGC,iCAAsB,CAACK,OAAO;QACnDhI,KAAA,CAAKiI,QAAQ,CAAC,CAAC;MACjB,CAAC,CAAC,CACDC,KAAK,CAAC,YAAM;QACXlI,KAAA,CAAK0H,aAAa,GAAGC,iCAAsB,CAACQ,IAAI;QAChD,MAAM,IAAIC,KAAK,CAAC,uBAAuB,CAAC;MAC1C,CAAC,CAAC;IACN,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAA5H,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,2BAI+B;MAAA,OAC7B,CAACqB,0BAAe,CAACkE,OAAO,EAAElE,0BAAe,CAACC,MAAM,CAAC,CAAC+G,QAAQ,CAACrI,KAAA,CAAKoB,cAAc,CAAC;IAAA;IAEjF;AACF;AACA;AACA;IAHE,IAAAZ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,eAIkB,YAAM;MACtB,IAAIA,KAAA,CAAKsI,oBAAoB,CAAC,CAAC,EAAE;MACjC;MACA,IAAI,CAACtI,KAAA,CAAKyF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAAC2B,WAAW,CAAC,CAAC,EAAE;QAC1C,MAAM,IAAIc,KAAK,CAAC,8CAA8C,CAAC;MACjE;MACApI,KAAA,CAAKuI,gBAAgB,CAAC,CAAC;IACzB,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAA/H,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,0BAI8B;MAAA,OAC5B,CAAC2H,iCAAsB,CAACC,OAAO,EAAED,iCAAsB,CAACK,OAAO,CAAC,CAACK,QAAQ,CAACrI,KAAA,CAAK0H,aAAa,CAAC;IAAA;IAE/F;AACF;AACA;AACA;AACA;IAJE,IAAAlH,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;MAAA,IAAAwI,IAAA,OAAAC,kBAAA,CAAA9J,OAAA,gBAAA+J,YAAA,CAAA/J,OAAA,CAAAgK,IAAA,CAKwB,SAAAC,QAAOzB,cAAe;QAAA,OAAAuB,YAAA,CAAA/J,OAAA,CAAAkK,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cAAA,KACxCjJ,KAAA,CAAKkJ,mBAAmB,CAAC,CAAC;gBAAAH,QAAA,CAAAE,IAAA;gBAAA;cAAA;cAAA,OAAAF,QAAA,CAAAI,MAAA,WAASC,SAAS;YAAA;cAAA,IAE3CpJ,KAAA,CAAKyF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAAC2B,WAAW,CAAC,CAAC;gBAAAyB,QAAA,CAAAE,IAAA;gBAAA;cAAA;cAAA,MAClC,IAAIb,KAAK,CAAC,+CAA+C,CAAC;YAAA;cAAA,OAAAW,QAAA,CAAAI,MAAA,WAG3DnJ,KAAA,CAAKqJ,qBAAqB,CAAClC,cAAc,CAAC;YAAA;YAAA;cAAA,OAAA4B,QAAA,CAAAO,IAAA;UAAA;QAAA,GAAAV,OAAA;MAAA,CAClD;MAAA,iBAAAW,EAAA;QAAA,OAAAf,IAAA,CAAAvJ,KAAA,OAAAD,SAAA;MAAA;IAAA;IAED;AACF;AACA;AACA;AACA;AACA;IALE,IAAAwB,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,yBAM4B,UAC1BwJ,QAAiB,EACjBrC,cAAuB,EACO;MAC9B;MACA,OAAOnH,KAAA,CAAK6G,OAAO,CAAC;QAClBC,MAAM,EAAE,KAAK;QACb;QACAC,GAAG,KAAAxG,MAAA,CAAKP,KAAA,CAAKyF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACqB,WAAW,CAAC,CAAC,eAAY;QACzDC,IAAI,EAAE;UACJC,UAAU,EAAE;YACVuC,YAAY,EAAED;UAChB,CAAC;UACDrC,cAAc,EAAdA;QACF;MACF,CAAC,CAAC,CAACC,IAAI,CAAC,YAAiC;QACvC,IAAIoC,QAAQ,IAAI,CAACxJ,KAAA,CAAK+H,kBAAkB,EAAE;UACxC,OAAO/H,KAAA,CAAK0J,cAAc,CAACvC,cAAc,CAAC;QAC5C;QAEA,OAAOiC,SAAS;MAClB,CAAC,CAAC;IACJ,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAA5I,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,uBAI0B;MAAA,OAAMA,KAAA,CAAK0H,aAAa;IAAA;IAElD;AACF;AACA;AACA;IAHE,IAAAlH,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,wBAI2B;MAAA,OAAMA,KAAA,CAAKoB,cAAc;IAAA;IAjXlDpB,KAAA,CAAKW,MAAM,GAAG,CAAC;IACfX,KAAA,CAAK+H,kBAAkB,GAAG,KAAK;IAC/B/H,KAAA,CAAKiB,WAAW,GAAGmI,SAAS;IAC5BpJ,KAAA,CAAKoB,cAAc,GAAGC,0BAAe,CAAC8G,IAAI;IAC1CnI,KAAA,CAAK0H,aAAa,GAAGC,iCAAsB,CAACQ,IAAI;IAAC,OAAAnI,KAAA;EACnD;EAAC,IAAA2J,aAAA,CAAAhL,OAAA,EAAAgB,aAAA;IAAAiK,GAAA;IAAAC,KAAA;IArCD;AACF;AACA;AACA;IACE,SAAArE,eAAA,EAAyB;MACvB,IAAI,CAAC,IAAI,CAACsE,qBAAqB,EAAE;QAC/B;QACA,IAAI,CAACrE,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACoE,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,CAAClC,kBAAkB,GAAG,KAAK;MAC/B,IAAI,CAAC9G,WAAW,GAAGmI,SAAS;MAC5B;MACA,IAAI,CAAC3D,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACuE,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAACF,cAAc,CAAC;MACrE,IAAI,CAACF,qBAAqB,GAAG,KAAK;MAClC,IAAI,CAAC1I,cAAc,GAAGC,0BAAe,CAAC8G,IAAI;MAC1C,IAAI,CAACT,aAAa,GAAGC,iCAAsB,CAACQ,IAAI;IAClD;EAAC;EAAA,OAAAxI,aAAA;AAAA,EA/DgCwK,sBAAW;AAAA,IAAAC,QAAA,GAAAxK,OAAA,CAAAjB,OAAA,GA2b/BgB,aAAa"}
1
+ {"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_constants","_utils","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","VoiceaChannel","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","VOICEA","seqNum","sequenceNumber","data","relayType","AIBRIDGE_RELAY_TYPES","ANNOUNCEMENT","vmcDeviceId","headers","from","announceStatus","ANNOUNCE_STATUS","JOINED","processAnnouncementMessage","voiceaPayload","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","MANUAL","processManualTranscription","transcriptPayload","type","TRANSCRIPTION_TYPE","MANUAL_CAPTION_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULTS","trigger","EVENT_TRIGGERS","NEW_MANUAL_CAPTION","isFinal","transcriptId","id","transcripts","TRANSCRIPT_INTERIM_RESULTS","NEW_CAPTION","transcript_id","TRANSCRIPT_FINAL_RESULT","HIGHLIGHT_CREATED","csis","highlight","highlightId","highlight_id","text","transcript","highlightLabel","highlight_label","highlightSource","highlight_source","timestamp","millisToMinutesAndSeconds","end_millis","EVA_THANKS","EVA_COMMAND","isListening","command_response","EVA_WAKE","EVA_CANCEL","statusCode","CAPTION_LANGUAGE_UPDATE","errorCode","errorMessage","message","_voiceaPayload$transl","_voiceaPayload$transl2","_voiceaPayload$transl3","_voiceaPayload$transl4","_voiceaPayload$ASR$sp","_voiceaPayload$ASR","voiceaLanguageOptions","captionLanguages","translation","allowed_languages","maxLanguages","max_languages","spokenLanguages","ASR","spoken_languages","VOICEA_ANNOUNCEMENT","JOINING","listenToEvents","webex","internal","llm","socket","send","recipients","route","getBinding","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","languageCode","request","method","url","getLocusUrl","body","transcribe","spokenLanguage","then","SPOKEN_LANGUAGE_UPDATE","isConnected","to","translationLanguage","TRANSLATION_REQUEST","captionStatus","TURN_ON_CAPTION_STATUS","SENDING","caption","CAPTIONS_TURNED_ON","areCaptionsEnabled","ENABLED","announce","catch","IDLE","Error","includes","isAnnounceProcessing","sendAnnouncement","_ref","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","isCaptionProcessing","abrupt","undefined","requestTurnOnCaptions","stop","_x","activate","transcribing","turnOnCaptions","enable","manualCaption","_createClass2","key","value","hasSubscribedToEvents","on","eventProcessor","deregisterEvents","off","WebexPlugin","_default"],"sources":["voicea.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {WebexPlugin, config} from '@webex/webex-core';\n\nimport {\n EVENT_TRIGGERS,\n AIBRIDGE_RELAY_TYPES,\n TRANSCRIPTION_TYPE,\n VOICEA,\n ANNOUNCE_STATUS,\n TURN_ON_CAPTION_STATUS,\n} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n IVoiceaChannel,\n} from './voicea.types';\nimport {millisToMinutesAndSeconds} from './utils';\n\n/**\n * @description VoiceaChannel to hold single instance of LLM\n * @export\n * @class VoiceaChannel\n */\nexport class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {\n namespace = VOICEA;\n\n private seqNum: number;\n\n private areCaptionsEnabled: boolean;\n\n private hasSubscribedToEvents = false;\n\n private vmcDeviceId?: string;\n\n private announceStatus: string;\n\n private captionStatus: string;\n\n /**\n * @param {Object} e\n * @returns {undefined}\n */\n\n private eventProcessor = (e) => {\n this.seqNum = e.sequenceNumber + 1;\n switch (e.data.relayType) {\n case AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:\n this.vmcDeviceId = e.headers.from;\n this.announceStatus = ANNOUNCE_STATUS.JOINED;\n this.processAnnouncementMessage(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:\n this.processTranscription(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:\n this.processManualTranscription(e.data.transcriptPayload);\n break;\n default:\n break;\n }\n };\n\n /**\n * Listen to websocket messages\n * @returns {undefined}\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n // @ts-ignore\n this.webex.internal.llm.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n }\n }\n\n /**\n * Listen to websocket messages\n * @returns {void}\n */\n public deregisterEvents() {\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n // @ts-ignore\n this.webex.internal.llm.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n }\n\n /**\n * Initializes Voicea plugin\n * @param {any} args\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n }\n\n /**\n * Process manual Transcript and send alert\n * @param {TranscriptionResponse} transcriptPayload\n * @returns {void}\n */\n private processManualTranscription = (transcriptPayload: TranscriptionResponse): void => {\n switch (transcriptPayload.type) {\n case TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT:\n case TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULTS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {\n isFinal: transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,\n transcriptId: transcriptPayload.id,\n transcripts: transcriptPayload.transcripts,\n });\n break;\n\n default:\n break;\n }\n };\n\n /**\n * Process Transcript and send alert\n * @param {TranscriptionResponse} voiceaPayload\n * @returns {void}\n */\n private processTranscription = (voiceaPayload: TranscriptionResponse): void => {\n switch (voiceaPayload.type) {\n case TRANSCRIPTION_TYPE.TRANSCRIPT_INTERIM_RESULTS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\n });\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\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 +1 @@
1
- {"version":3,"names":[],"sources":["voicea.types.ts"],"sourcesContent":["/* eslint-disable camelcase */\n/* eslint-disable no-undef */\n\n/**\n * Type for payload\n */\ninterface AnnouncementPayload {\n translation: {\n max_languages: number;\n allowed_languages: string[];\n };\n\n ASR: {\n spoken_languages: string[];\n };\n}\n\n// eslint-disable-next-line no-undef\ntype TRANSCRIPTION_TYPES =\n | 'unknown'\n | 'eva_wake'\n | 'eva_thanks'\n | 'eva_cancel'\n | 'highlight_created'\n | 'transcript_interim_results'\n | 'transcript_final_result';\n\n/**\n * Class for an Transcription Object\n */\ninterface Transcription {\n start_millis: number;\n end_millis: number;\n text: string;\n transcript_language_code: string;\n translations: {[x: string]: string};\n csis: number[];\n last_packet_timestamp_ms: number;\n}\n\n/**\n * Highlights\n */\ninterface Highlight {\n highlight_id: string;\n transcript: string;\n highlight_label: string;\n highlight_source: string;\n start_millis: number;\n end_millis: number;\n csis: number[];\n}\n/**\n * Type for Transcription message\n */\ninterface TranscriptionResponse {\n type: TRANSCRIPTION_TYPES;\n transcript_id: string;\n translations?: {[x: string]: string};\n transcripts?: Transcription[];\n transcript?: Transcription;\n highlight?: Highlight;\n csis: number[];\n data: string;\n command_response: string;\n}\n/**\n * Type for CaptionLanguageResponse\n */\ninterface CaptionLanguageResponse {\n requestId: string;\n statusCode: number;\n errorCode: number;\n message: string;\n}\n\ninterface IVoiceaChannel {\n setSpokenLanguage: (languageCode: string) => Promise<void>;\n requestLanguage: (languageCode: string) => void;\n turnOnCaptions: () => undefined | Promise<void>;\n toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;\n deregisterEvents: () => void;\n}\n\nexport type {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n Transcription,\n Highlight,\n IVoiceaChannel,\n};\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["voicea.types.ts"],"sourcesContent":["/* eslint-disable camelcase */\n/* eslint-disable no-undef */\n\n/**\n * Type for payload\n */\ninterface AnnouncementPayload {\n translation: {\n max_languages: number;\n allowed_languages: string[];\n };\n\n ASR: {\n spoken_languages: string[];\n };\n}\n\n// eslint-disable-next-line no-undef\ntype TRANSCRIPTION_TYPES =\n | 'unknown'\n | 'eva_wake'\n | 'eva_thanks'\n | 'eva_cancel'\n | 'highlight_created'\n | 'transcript_interim_results'\n | 'transcript_final_result';\n\n/**\n * Class for an Transcription Object\n */\ninterface Transcription {\n start_millis: number;\n end_millis: number;\n text: string;\n transcript_language_code: string;\n translations: {[x: string]: string};\n csis: number[];\n last_packet_timestamp_ms: number;\n}\n\n/**\n * Highlights\n */\ninterface Highlight {\n highlight_id: string;\n transcript: string;\n highlight_label: string;\n highlight_source: string;\n start_millis: number;\n end_millis: number;\n csis: number[];\n}\n/**\n * Type for Transcription message\n */\ninterface TranscriptionResponse {\n type: TRANSCRIPTION_TYPES;\n id: string;\n transcript_id: string;\n translations?: {[x: string]: string};\n transcripts?: Transcription[];\n transcript?: Transcription;\n highlight?: Highlight;\n csis: number[];\n data: string;\n command_response: string;\n}\n/**\n * Type for CaptionLanguageResponse\n */\ninterface CaptionLanguageResponse {\n requestId: string;\n statusCode: number;\n errorCode: number;\n message: string;\n}\n\ninterface IVoiceaChannel {\n setSpokenLanguage: (languageCode: string) => Promise<void>;\n requestLanguage: (languageCode: string) => void;\n turnOnCaptions: () => undefined | Promise<void>;\n toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;\n deregisterEvents: () => void;\n}\n\nexport type {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n Transcription,\n Highlight,\n IVoiceaChannel,\n};\n"],"mappings":""}
package/package.json CHANGED
@@ -3,6 +3,7 @@
3
3
  "description": "",
4
4
  "license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
5
5
  "main": "dist/index.js",
6
+ "types": "dist/types/index.d.ts",
6
7
  "devMain": "src/index.js",
7
8
  "repository": {
8
9
  "type": "git",
@@ -13,10 +14,10 @@
13
14
  "node": ">=16"
14
15
  },
15
16
  "dependencies": {
16
- "@webex/internal-plugin-llm": "3.0.0",
17
- "@webex/internal-plugin-mercury": "3.0.0",
18
- "@webex/plugin-meetings": "3.0.0",
19
- "@webex/webex-core": "3.0.0",
17
+ "@webex/internal-plugin-llm": "3.1.0-next.1",
18
+ "@webex/internal-plugin-mercury": "3.1.0-next.1",
19
+ "@webex/plugin-meetings": "3.1.0-next.10",
20
+ "@webex/webex-core": "3.1.0-next.1",
20
21
  "uuid": "^3.3.2"
21
22
  },
22
23
  "browserify": {
@@ -31,23 +32,23 @@
31
32
  "@webex/eslint-config-legacy": "0.0.0",
32
33
  "@webex/jest-config-legacy": "0.0.0",
33
34
  "@webex/legacy-tools": "0.0.0",
34
- "@webex/test-helper-chai": "3.0.0",
35
- "@webex/test-helper-mocha": "3.0.0",
36
- "@webex/test-helper-mock-web-socket": "3.0.0",
37
- "@webex/test-helper-mock-webex": "3.0.0",
38
- "@webex/test-helper-test-users": "3.0.0",
35
+ "@webex/test-helper-chai": "3.1.0-next.1",
36
+ "@webex/test-helper-mocha": "3.1.0-next.1",
37
+ "@webex/test-helper-mock-web-socket": "3.1.0-next.1",
38
+ "@webex/test-helper-mock-webex": "3.1.0-next.1",
39
+ "@webex/test-helper-test-users": "3.1.0-next.1",
39
40
  "eslint": "^8.24.0",
40
41
  "prettier": "^2.7.1",
41
42
  "sinon": "^9.2.4"
42
43
  },
43
44
  "scripts": {
44
- "build": "yarn build:src",
45
- "build:src": "webex-legacy-tools build -dest \"./dist\" -src \"./src\" -js -ts -maps",
45
+ "build": "yarn run -T tsc --declaration true --declarationDir ./dist/types",
46
+ "build:src": "webex-legacy-tools build -dest \"./dist\" -src \"./src\" -js -ts -maps && yarn build",
46
47
  "deploy:npm": "yarn npm publish",
47
48
  "test": "yarn test:style && yarn test:unit && yarn test:integration && yarn test:browser",
48
49
  "test:browser": "webex-legacy-tools test --integration --runner karma",
49
50
  "test:style": "eslint ./src/**/*.*",
50
51
  "test:unit": "webex-legacy-tools test --unit --runner jest"
51
52
  },
52
- "version": "3.0.0"
53
+ "version": "3.1.0-next.10"
53
54
  }
package/src/constants.ts CHANGED
@@ -9,14 +9,20 @@ export const EVENT_TRIGGERS = {
9
9
  NEW_CAPTION: 'voicea:newCaption',
10
10
  EVA_COMMAND: 'voicea:wxa',
11
11
  HIGHLIGHT_CREATED: 'voicea:highlightCreated',
12
+ NEW_MANUAL_CAPTION: 'aibridge:newManualCaption',
12
13
  };
13
14
 
14
- export const VOICEA_RELAY_TYPES = {
15
- ANNOUNCEMENT: 'voicea.annc',
16
- CLIENT_ANNOUNCEMENT: 'client.annc',
17
- TRANSLATION_REQUEST: 'voicea.transl.req',
18
- TRANSLATION_RESPONSE: 'voicea.transl.rsp',
19
- TRANSCRIPTION: 'voicea.transcription',
15
+ export const AIBRIDGE_RELAY_TYPES = {
16
+ VOICEA: {
17
+ ANNOUNCEMENT: 'voicea.annc',
18
+ CLIENT_ANNOUNCEMENT: 'client.annc',
19
+ TRANSLATION_REQUEST: 'voicea.transl.req',
20
+ TRANSLATION_RESPONSE: 'voicea.transl.rsp',
21
+ TRANSCRIPTION: 'voicea.transcription',
22
+ },
23
+ MANUAL: {
24
+ TRANSCRIPTION: 'aibridge.manual_transcription',
25
+ },
20
26
  };
21
27
 
22
28
  export const TRANSCRIPTION_TYPE = {
@@ -27,6 +33,8 @@ export const TRANSCRIPTION_TYPE = {
27
33
  HIGHLIGHT_CREATED: 'highlight_created',
28
34
  TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',
29
35
  TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',
36
+ MANUAL_CAPTION_INTERIM_RESULTS: 'manual_caption_interim_results',
37
+ MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result',
30
38
  };
31
39
 
32
40
  export const VOICEA = 'voicea';
package/src/voicea.ts CHANGED
@@ -1,10 +1,9 @@
1
1
  import uuid from 'uuid';
2
- import {TriggerProxy as Trigger} from '@webex/plugin-meetings';
3
2
  import {WebexPlugin, config} from '@webex/webex-core';
4
3
 
5
4
  import {
6
5
  EVENT_TRIGGERS,
7
- VOICEA_RELAY_TYPES,
6
+ AIBRIDGE_RELAY_TYPES,
8
7
  TRANSCRIPTION_TYPE,
9
8
  VOICEA,
10
9
  ANNOUNCE_STATUS,
@@ -47,17 +46,20 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
47
46
  private eventProcessor = (e) => {
48
47
  this.seqNum = e.sequenceNumber + 1;
49
48
  switch (e.data.relayType) {
50
- case VOICEA_RELAY_TYPES.ANNOUNCEMENT:
49
+ case AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:
51
50
  this.vmcDeviceId = e.headers.from;
52
51
  this.announceStatus = ANNOUNCE_STATUS.JOINED;
53
52
  this.processAnnouncementMessage(e.data.voiceaPayload);
54
53
  break;
55
- case VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:
54
+ case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_RESPONSE:
56
55
  this.processCaptionLanguageResponse(e.data.voiceaPayload);
57
56
  break;
58
- case VOICEA_RELAY_TYPES.TRANSCRIPTION:
57
+ case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:
59
58
  this.processTranscription(e.data.voiceaPayload);
60
59
  break;
60
+ case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:
61
+ this.processManualTranscription(e.data.transcriptPayload);
62
+ break;
61
63
  default:
62
64
  break;
63
65
  }
@@ -102,6 +104,28 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
102
104
  this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;
103
105
  }
104
106
 
107
+ /**
108
+ * Process manual Transcript and send alert
109
+ * @param {TranscriptionResponse} transcriptPayload
110
+ * @returns {void}
111
+ */
112
+ private processManualTranscription = (transcriptPayload: TranscriptionResponse): void => {
113
+ switch (transcriptPayload.type) {
114
+ case TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT:
115
+ case TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULTS:
116
+ // @ts-ignore
117
+ this.trigger(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {
118
+ isFinal: transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,
119
+ transcriptId: transcriptPayload.id,
120
+ transcripts: transcriptPayload.transcripts,
121
+ });
122
+ break;
123
+
124
+ default:
125
+ break;
126
+ }
127
+ };
128
+
105
129
  /**
106
130
  * Process Transcript and send alert
107
131
  * @param {TranscriptionResponse} voiceaPayload
@@ -110,90 +134,49 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
110
134
  private processTranscription = (voiceaPayload: TranscriptionResponse): void => {
111
135
  switch (voiceaPayload.type) {
112
136
  case TRANSCRIPTION_TYPE.TRANSCRIPT_INTERIM_RESULTS:
113
- Trigger.trigger(
114
- this,
115
- {
116
- file: 'voicea',
117
- function: 'processTranscription',
118
- },
119
- EVENT_TRIGGERS.NEW_CAPTION,
120
- {
121
- isFinal: false,
122
- transcriptId: voiceaPayload.transcript_id,
123
- transcripts: voiceaPayload.transcripts,
124
- }
125
- );
137
+ // @ts-ignore
138
+ this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {
139
+ isFinal: false,
140
+ transcriptId: voiceaPayload.transcript_id,
141
+ transcripts: voiceaPayload.transcripts,
142
+ });
126
143
  break;
127
144
 
128
145
  case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:
129
- Trigger.trigger(
130
- this,
131
- {
132
- file: 'voicea',
133
- function: 'processTranscription',
134
- },
135
- EVENT_TRIGGERS.NEW_CAPTION,
136
- {
137
- isFinal: true,
138
- transcriptId: voiceaPayload.transcript_id,
139
- translations: voiceaPayload.translations,
140
- transcript: {
141
- csis: voiceaPayload.csis,
142
- text: voiceaPayload.transcript.text,
143
- transcriptLanguageCode: voiceaPayload.transcript.transcript_language_code,
144
- },
145
- timestamp: millisToMinutesAndSeconds(voiceaPayload.transcript.end_millis),
146
- }
147
- );
146
+ // @ts-ignore
147
+ this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {
148
+ isFinal: true,
149
+ transcriptId: voiceaPayload.transcript_id,
150
+ transcripts: voiceaPayload.transcripts,
151
+ });
148
152
  break;
149
153
 
150
154
  case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:
151
- Trigger.trigger(
152
- this,
153
- {
154
- file: 'voicea',
155
- function: 'processTranscription',
156
- },
157
- EVENT_TRIGGERS.HIGHLIGHT_CREATED,
158
- {
159
- csis: voiceaPayload.highlight.csis,
160
- highlightId: voiceaPayload.highlight.highlight_id,
161
- text: voiceaPayload.highlight.transcript,
162
- highlightLabel: voiceaPayload.highlight.highlight_label,
163
- highlightSource: voiceaPayload.highlight.highlight_source,
164
- timestamp: millisToMinutesAndSeconds(voiceaPayload.highlight.end_millis),
165
- }
166
- );
155
+ // @ts-ignore
156
+ this.trigger(EVENT_TRIGGERS.HIGHLIGHT_CREATED, {
157
+ csis: voiceaPayload.highlight.csis,
158
+ highlightId: voiceaPayload.highlight.highlight_id,
159
+ text: voiceaPayload.highlight.transcript,
160
+ highlightLabel: voiceaPayload.highlight.highlight_label,
161
+ highlightSource: voiceaPayload.highlight.highlight_source,
162
+ timestamp: millisToMinutesAndSeconds(voiceaPayload.highlight.end_millis),
163
+ });
167
164
  break;
168
165
 
169
166
  case TRANSCRIPTION_TYPE.EVA_THANKS:
170
- Trigger.trigger(
171
- this,
172
- {
173
- file: 'voicea',
174
- function: 'processTranscription',
175
- },
176
- EVENT_TRIGGERS.EVA_COMMAND,
177
- {
178
- isListening: false,
179
- text: voiceaPayload.command_response,
180
- }
181
- );
167
+ // @ts-ignore
168
+ this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {
169
+ isListening: false,
170
+ text: voiceaPayload.command_response,
171
+ });
182
172
  break;
183
173
 
184
174
  case TRANSCRIPTION_TYPE.EVA_WAKE:
185
175
  case TRANSCRIPTION_TYPE.EVA_CANCEL:
186
- Trigger.trigger(
187
- this,
188
- {
189
- file: 'voicea',
190
- function: 'processTranscription',
191
- },
192
- EVENT_TRIGGERS.EVA_COMMAND,
193
- {
194
- isListening: voiceaPayload.type === TRANSCRIPTION_TYPE.EVA_WAKE,
195
- }
196
- );
176
+ // @ts-ignore
177
+ this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {
178
+ isListening: voiceaPayload.type === TRANSCRIPTION_TYPE.EVA_WAKE,
179
+ });
197
180
  break;
198
181
 
199
182
  default:
@@ -208,25 +191,14 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
208
191
  */
209
192
  private processCaptionLanguageResponse = (voiceaPayload: CaptionLanguageResponse): void => {
210
193
  if (voiceaPayload.statusCode === 200) {
211
- Trigger.trigger(
212
- this,
213
- {
214
- file: 'voicea',
215
- function: 'processCaptionLanguageResponse',
216
- },
217
- EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE,
218
- {statusCode: 200}
219
- );
194
+ // @ts-ignore
195
+ this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {statusCode: 200});
220
196
  } else {
221
- Trigger.trigger(
222
- this,
223
- {
224
- file: 'voicea',
225
- function: 'processCaptionLanguageResponse',
226
- },
227
- EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE,
228
- {statusCode: voiceaPayload.errorCode, errorMessage: voiceaPayload.message}
229
- );
197
+ // @ts-ignore
198
+ this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {
199
+ statusCode: voiceaPayload.errorCode,
200
+ errorMessage: voiceaPayload.message,
201
+ });
230
202
  }
231
203
  };
232
204
 
@@ -242,15 +214,8 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
242
214
  spokenLanguages: voiceaPayload?.ASR?.spoken_languages ?? [],
243
215
  };
244
216
 
245
- Trigger.trigger(
246
- this,
247
- {
248
- file: 'voicea',
249
- function: 'processAnnouncementMessage',
250
- },
251
- EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT,
252
- voiceaLanguageOptions
253
- );
217
+ // @ts-ignore
218
+ this.trigger(EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);
254
219
  };
255
220
 
256
221
  /**
@@ -274,7 +239,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
274
239
  version: 'v2',
275
240
  },
276
241
  eventType: 'relay.event',
277
- relayType: VOICEA_RELAY_TYPES.CLIENT_ANNOUNCEMENT,
242
+ relayType: AIBRIDGE_RELAY_TYPES.VOICEA.CLIENT_ANNOUNCEMENT,
278
243
  },
279
244
  trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
280
245
  });
@@ -298,15 +263,8 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
298
263
  },
299
264
  },
300
265
  }).then(() => {
301
- Trigger.trigger(
302
- this,
303
- {
304
- file: 'voicea',
305
- function: 'setSpokenLanguage',
306
- },
307
- EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE,
308
- {languageCode}
309
- );
266
+ // @ts-ignore
267
+ this.trigger(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {languageCode});
310
268
  });
311
269
 
312
270
  /**
@@ -334,7 +292,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
334
292
  id: uuid.v4(),
335
293
  },
336
294
  eventType: 'relay.event',
337
- relayType: VOICEA_RELAY_TYPES.TRANSLATION_REQUEST,
295
+ relayType: AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_REQUEST,
338
296
  },
339
297
  trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
340
298
  });
@@ -364,14 +322,9 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
364
322
  body,
365
323
  })
366
324
  .then(() => {
367
- Trigger.trigger(
368
- this,
369
- {
370
- file: 'voicea',
371
- function: 'turnOnCaptions',
372
- },
373
- EVENT_TRIGGERS.CAPTIONS_TURNED_ON
374
- );
325
+ // @ts-ignore
326
+ this.trigger(EVENT_TRIGGERS.CAPTIONS_TURNED_ON);
327
+
375
328
  this.areCaptionsEnabled = true;
376
329
  this.captionStatus = TURN_ON_CAPTION_STATUS.ENABLED;
377
330
  this.announce();
@@ -454,6 +407,27 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
454
407
  });
455
408
  };
456
409
 
410
+ /**
411
+ * Toggle turn on manual caption
412
+ * @param {bool} enable if true manual caption is turned on
413
+ * @returns {Promise}
414
+ */
415
+ public toggleManualCaption = (enable: boolean): undefined | Promise<void> => {
416
+ // @ts-ignore
417
+ return this.request({
418
+ method: 'PUT',
419
+ // @ts-ignore
420
+ url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,
421
+ body: {
422
+ manualCaption: {
423
+ enable,
424
+ },
425
+ },
426
+ }).then((): undefined | Promise<void> => {
427
+ return undefined;
428
+ });
429
+ };
430
+
457
431
  /**
458
432
  * get caption status
459
433
  * @returns {string}
@@ -55,6 +55,7 @@ interface Highlight {
55
55
  */
56
56
  interface TranscriptionResponse {
57
57
  type: TRANSCRIPTION_TYPES;
58
+ id: string;
58
59
  transcript_id: string;
59
60
  translations?: {[x: string]: string};
60
61
  transcripts?: Transcription[];
@@ -243,7 +243,7 @@ describe('plugin-voicea', () => {
243
243
  })
244
244
  );
245
245
 
246
- assert.calledOnceWithExactly(triggerSpy, undefined);
246
+ assert.calledOnceWithExactly(triggerSpy);
247
247
 
248
248
  assert.calledOnce(announcementSpy);
249
249
  });
@@ -251,7 +251,7 @@ describe('plugin-voicea', () => {
251
251
  it("should handle request fail", async () => {
252
252
  voiceaService.captionStatus = 'sending';
253
253
  voiceaService.request = sinon.stub().rejects();
254
-
254
+
255
255
  try {
256
256
  await voiceaService.requestTurnOnCaptions();
257
257
  } catch (error) {
@@ -436,6 +436,56 @@ describe('plugin-voicea', () => {
436
436
  });
437
437
  });
438
438
 
439
+ describe('#toggleManualCaption', () => {
440
+ beforeEach(async () => {
441
+ const mockWebSocket = new MockWebSocket();
442
+
443
+ voiceaService.webex.internal.llm.socket = mockWebSocket;
444
+ });
445
+
446
+ 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
+ await voiceaService.toggleManualCaption(true);
459
+ sinon.assert.calledWith(
460
+ voiceaService.request,
461
+ sinon.match({
462
+ method: 'PUT',
463
+ url: `${locusUrl}/controls/`,
464
+ body: {manualCaption: {enable: true}},
465
+ })
466
+ );
467
+
468
+ });
469
+
470
+
471
+ it('turns off manual caption', async () => {
472
+ await voiceaService.toggleManualCaption(true);
473
+
474
+ voiceaService.listenToEvents();
475
+
476
+ await voiceaService.toggleManualCaption(false);
477
+ sinon.assert.calledWith(
478
+ voiceaService.request,
479
+ sinon.match({
480
+ method: 'PUT',
481
+ url: `${locusUrl}/controls/`,
482
+ body: {manualCaption: {enable: false}},
483
+ })
484
+ );
485
+
486
+ });
487
+ });
488
+
439
489
  describe('#processCaptionLanguageResponse', () => {
440
490
  it('responds to process caption language', async () => {
441
491
  const triggerSpy = sinon.spy();
@@ -603,15 +653,7 @@ describe('plugin-voicea', () => {
603
653
  assert.calledOnceWithExactly(triggerSpy, {
604
654
  isFinal: true,
605
655
  transcriptId: '3ec73890-bffb-f28b-e77f-99dc13caea7e',
606
- translations: {
607
- en: "Hello?"
608
- },
609
- transcript: {
610
- csis: [3556942592],
611
- text: 'Hello?',
612
- transcriptLanguageCode: 'en',
613
- },
614
- timestamp: '0:13',
656
+ transcripts: voiceaPayload.transcripts,
615
657
  });
616
658
  });
617
659
 
@@ -741,6 +783,71 @@ describe('plugin-voicea', () => {
741
783
  });
742
784
  });
743
785
 
786
+ describe('#processManualTranscription', () => {
787
+ let triggerSpy, functionSpy;
788
+
789
+ beforeEach(() => {
790
+ triggerSpy = sinon.spy();
791
+ functionSpy = sinon.spy(voiceaService, 'processManualTranscription');
792
+ voiceaService.listenToEvents();
793
+ });
794
+
795
+ it('processes interim manual transcription', async () => {
796
+ voiceaService.on(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, triggerSpy);
797
+ const transcriptPayload = {
798
+ id: "747d711d-3414-fd69-7081-e842649f2d28",
799
+ transcripts: [
800
+ {
801
+ "text": "Good",
802
+ }
803
+ ],
804
+ type: "manual_caption_interim_results",
805
+ };
806
+
807
+ // eslint-disable-next-line no-underscore-dangle
808
+ await voiceaService.webex.internal.llm._emit('event:relay.event', {
809
+ headers: {from: 'ws'},
810
+ data: {relayType: 'aibridge.manual_transcription', transcriptPayload},
811
+ });
812
+
813
+ assert.calledOnceWithExactly(functionSpy, transcriptPayload);
814
+ assert.calledOnceWithExactly(triggerSpy, {
815
+ isFinal: false,
816
+ transcriptId: '747d711d-3414-fd69-7081-e842649f2d28',
817
+ transcripts: transcriptPayload.transcripts,
818
+ });
819
+ });
820
+
821
+ it('processes final manual transcription', async () => {
822
+ voiceaService.on(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, triggerSpy);
823
+
824
+ const transcriptPayload = {
825
+ id: "8d226d31-044a-8d11-cc39-cedbde183154",
826
+ transcripts: [
827
+ {
828
+ text: "Good Morning",
829
+ start_millis: 10420,
830
+ end_millis: 11380,
831
+ }
832
+ ],
833
+ type: "manual_caption_final_result",
834
+ };
835
+
836
+ // eslint-disable-next-line no-underscore-dangle
837
+ await voiceaService.webex.internal.llm._emit('event:relay.event', {
838
+ headers: {from: 'ws'},
839
+ data: {relayType: 'aibridge.manual_transcription', transcriptPayload},
840
+ });
841
+
842
+ assert.calledOnceWithExactly(functionSpy, transcriptPayload);
843
+ assert.calledOnceWithExactly(triggerSpy, {
844
+ isFinal: true,
845
+ transcriptId: '8d226d31-044a-8d11-cc39-cedbde183154',
846
+ transcripts: transcriptPayload.transcripts,
847
+ });
848
+ });
849
+ });
850
+
744
851
  describe("#getCaptionStatus", () => {
745
852
  it('works correctly', () => {
746
853
  voiceaService.captionStatus = "enabled"
package/tsconfig.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "extends": "../../../tsconfig.json",
3
+ "include": [
4
+ "src"
5
+ ],
6
+ }