@webex/internal-plugin-voicea 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["WebexCore","_interopRequireWildcard","require","_voicea","_interopRequireDefault","_constants","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","registerInternalPlugin","VoiceaChannel"],"sources":["index.ts"],"sourcesContent":["import * as WebexCore from '@webex/webex-core';\n\nimport VoiceaChannel from './voicea';\n\nWebexCore.registerInternalPlugin('voicea', VoiceaChannel, {});\n\nexport {default} from './voicea';\nexport {EVENT_TRIGGERS, TURN_ON_CAPTION_STATUS} from './constants';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAC,sBAAA,CAAAF,OAAA;AAKA,IAAAG,UAAA,GAAAH,OAAA;AAAmE,SAAAI,yBAAAC,CAAA,6BAAAC,QAAA,mBAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAF,wBAAA,YAAAA,yBAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAN,wBAAAM,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,gBAAAK,OAAA,CAAAL,CAAA,0BAAAA,CAAA,WAAAM,OAAA,EAAAN,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAI,GAAA,CAAAP,CAAA,UAAAG,CAAA,CAAAK,GAAA,CAAAR,CAAA,OAAAS,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,sBAAA,IAAAC,gCAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAC,MAAA,CAAAC,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAlB,CAAA,EAAAc,CAAA,SAAAK,CAAA,GAAAR,CAAA,GAAAE,gCAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAK,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,sBAAA,CAAAH,CAAA,EAAAK,CAAA,EAAAK,CAAA,IAAAV,CAAA,CAAAK,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAL,CAAA,CAAAH,OAAA,GAAAN,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAiB,GAAA,CAAApB,CAAA,EAAAS,CAAA,GAAAA,CAAA;AAHnEhB,SAAS,CAAC4B,sBAAsB,CAAC,QAAQ,EAAEC,eAAa,EAAE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"names":["WebexCore","_interopRequireWildcard","require","_voicea","_interopRequireDefault","_constants","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","registerInternalPlugin","VoiceaChannel"],"sources":["index.ts"],"sourcesContent":["import * as WebexCore from '@webex/webex-core';\n\nimport VoiceaChannel from './voicea';\nimport type {MeetingTranscriptPayload} from './voicea.types';\n\nWebexCore.registerInternalPlugin('voicea', VoiceaChannel, {});\n\nexport {default} from './voicea';\nexport {type MeetingTranscriptPayload};\nexport {EVENT_TRIGGERS, TURN_ON_CAPTION_STATUS} from './constants';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAC,sBAAA,CAAAF,OAAA;AAOA,IAAAG,UAAA,GAAAH,OAAA;AAAmE,SAAAI,yBAAAC,CAAA,6BAAAC,QAAA,mBAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAF,wBAAA,YAAAA,yBAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAN,wBAAAM,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,gBAAAK,OAAA,CAAAL,CAAA,0BAAAA,CAAA,WAAAM,OAAA,EAAAN,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAI,GAAA,CAAAP,CAAA,UAAAG,CAAA,CAAAK,GAAA,CAAAR,CAAA,OAAAS,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,sBAAA,IAAAC,gCAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAC,MAAA,CAAAC,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAlB,CAAA,EAAAc,CAAA,SAAAK,CAAA,GAAAR,CAAA,GAAAE,gCAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAK,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,sBAAA,CAAAH,CAAA,EAAAK,CAAA,EAAAK,CAAA,IAAAV,CAAA,CAAAK,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAL,CAAA,CAAAH,OAAA,GAAAN,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAiB,GAAA,CAAApB,CAAA,EAAAS,CAAA,GAAAA,CAAA;AAJnEhB,SAAS,CAAC4B,sBAAsB,CAAC,QAAQ,EAAEC,eAAa,EAAE,CAAC,CAAC,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,4 @@
1
+ import type { MeetingTranscriptPayload } from './voicea.types';
2
+ export { default } from './voicea';
3
+ export { type MeetingTranscriptPayload };
4
+ 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,91 @@
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
+ timestamp: string;
28
+ }
29
+ /**
30
+ * Highlights
31
+ */
32
+ interface Highlight {
33
+ highlight_id: string;
34
+ transcript: string;
35
+ highlight_label: string;
36
+ highlight_source: string;
37
+ start_millis: number;
38
+ end_millis: number;
39
+ csis: number[];
40
+ }
41
+ /**
42
+ * Type for Transcription message
43
+ */
44
+ interface TranscriptionResponse {
45
+ type: TRANSCRIPTION_TYPES;
46
+ id: string;
47
+ transcript_id: string;
48
+ translations?: {
49
+ [x: string]: string;
50
+ };
51
+ transcripts?: Transcription[];
52
+ transcript?: Transcription;
53
+ highlight?: Highlight;
54
+ csis: number[];
55
+ data: string;
56
+ command_response: string;
57
+ }
58
+ /**
59
+ * Type for CaptionLanguageResponse
60
+ */
61
+ interface CaptionLanguageResponse {
62
+ requestId: string;
63
+ statusCode: number;
64
+ errorCode: number;
65
+ message: string;
66
+ }
67
+ interface IVoiceaChannel {
68
+ setSpokenLanguage: (languageCode: string) => Promise<void>;
69
+ requestLanguage: (languageCode: string) => void;
70
+ turnOnCaptions: () => undefined | Promise<void>;
71
+ toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;
72
+ deregisterEvents: () => void;
73
+ }
74
+ type MeetingTranscripts = {
75
+ start_mills?: number;
76
+ end_mills?: number;
77
+ text: string;
78
+ last_packet_timestamp_ms?: number;
79
+ csis: Array<number>;
80
+ transcript_language_code: string;
81
+ translations?: {
82
+ [key: string]: string;
83
+ };
84
+ timestamp?: string;
85
+ };
86
+ type MeetingTranscriptPayload = {
87
+ isFinal: boolean;
88
+ transcriptId: string;
89
+ transcripts: Array<MeetingTranscripts>;
90
+ };
91
+ export type { AnnouncementPayload, CaptionLanguageResponse, TranscriptionResponse, Transcription, Highlight, IVoiceaChannel, MeetingTranscriptPayload, };
package/dist/voicea.js CHANGED
@@ -55,17 +55,40 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
55
55
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "eventProcessor", function (e) {
56
56
  _this.seqNum = e.sequenceNumber + 1;
57
57
  switch (e.data.relayType) {
58
- case _constants.VOICEA_RELAY_TYPES.ANNOUNCEMENT:
58
+ case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:
59
59
  _this.vmcDeviceId = e.headers.from;
60
60
  _this.announceStatus = _constants.ANNOUNCE_STATUS.JOINED;
61
61
  _this.processAnnouncementMessage(e.data.voiceaPayload);
62
62
  break;
63
- case _constants.VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:
63
+ case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_RESPONSE:
64
64
  _this.processCaptionLanguageResponse(e.data.voiceaPayload);
65
65
  break;
66
- case _constants.VOICEA_RELAY_TYPES.TRANSCRIPTION:
66
+ case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:
67
67
  _this.processTranscription(e.data.voiceaPayload);
68
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;
69
92
  default:
70
93
  break;
71
94
  }
@@ -90,13 +113,10 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
90
113
  _this.trigger(_constants.EVENT_TRIGGERS.NEW_CAPTION, {
91
114
  isFinal: true,
92
115
  transcriptId: voiceaPayload.transcript_id,
93
- translations: voiceaPayload.translations,
94
- transcript: {
95
- csis: voiceaPayload.csis,
96
- text: voiceaPayload.transcript.text,
97
- transcriptLanguageCode: voiceaPayload.transcript.transcript_language_code
98
- },
99
- timestamp: (0, _utils.millisToMinutesAndSeconds)(voiceaPayload.transcript.end_millis)
116
+ transcripts: voiceaPayload.transcripts.map(function (transcript) {
117
+ transcript.timestamp = (0, _utils.millisToMinutesAndSeconds)(transcript.end_millis);
118
+ return transcript;
119
+ })
100
120
  });
101
121
  break;
102
122
  case _constants.TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:
@@ -184,7 +204,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
184
204
  version: 'v2'
185
205
  },
186
206
  eventType: 'relay.event',
187
- relayType: _constants.VOICEA_RELAY_TYPES.CLIENT_ANNOUNCEMENT
207
+ relayType: _constants.AIBRIDGE_RELAY_TYPES.VOICEA.CLIENT_ANNOUNCEMENT
188
208
  },
189
209
  trackingId: "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString())
190
210
  });
@@ -240,7 +260,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
240
260
  id: _uuid.default.v4()
241
261
  },
242
262
  eventType: 'relay.event',
243
- relayType: _constants.VOICEA_RELAY_TYPES.TRANSLATION_REQUEST
263
+ relayType: _constants.AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_REQUEST
244
264
  },
245
265
  trackingId: "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString())
246
266
  });
@@ -364,6 +384,26 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
364
384
  return undefined;
365
385
  });
366
386
  });
387
+ /**
388
+ * Toggle turn on manual caption
389
+ * @param {bool} enable if true manual caption is turned on
390
+ * @returns {Promise}
391
+ */
392
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "toggleManualCaption", function (enable) {
393
+ // @ts-ignore
394
+ return _this.request({
395
+ method: 'PUT',
396
+ // @ts-ignore
397
+ url: "".concat(_this.webex.internal.llm.getLocusUrl(), "/controls/"),
398
+ body: {
399
+ manualCaption: {
400
+ enable: enable
401
+ }
402
+ }
403
+ }).then(function () {
404
+ return undefined;
405
+ });
406
+ });
367
407
  /**
368
408
  * get caption status
369
409
  * @returns {string}
@@ -1 +1 @@
1
- {"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_constants","_utils","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","VoiceaChannel","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","VOICEA","seqNum","sequenceNumber","data","relayType","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","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 {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 // @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 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 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: 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 // @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: 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 // @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 * 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","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","VoiceaChannel","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","VOICEA","seqNum","sequenceNumber","data","relayType","AIBRIDGE_RELAY_TYPES","ANNOUNCEMENT","vmcDeviceId","headers","from","announceStatus","ANNOUNCE_STATUS","JOINED","processAnnouncementMessage","voiceaPayload","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","MANUAL","processManualTranscription","transcriptPayload","type","TRANSCRIPTION_TYPE","MANUAL_CAPTION_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULTS","trigger","EVENT_TRIGGERS","NEW_MANUAL_CAPTION","isFinal","transcriptId","id","transcripts","TRANSCRIPT_INTERIM_RESULTS","NEW_CAPTION","transcript_id","TRANSCRIPT_FINAL_RESULT","map","transcript","timestamp","millisToMinutesAndSeconds","end_millis","HIGHLIGHT_CREATED","csis","highlight","highlightId","highlight_id","text","highlightLabel","highlight_label","highlightSource","highlight_source","EVA_THANKS","EVA_COMMAND","isListening","command_response","EVA_WAKE","EVA_CANCEL","statusCode","CAPTION_LANGUAGE_UPDATE","errorCode","errorMessage","message","_voiceaPayload$transl","_voiceaPayload$transl2","_voiceaPayload$transl3","_voiceaPayload$transl4","_voiceaPayload$ASR$sp","_voiceaPayload$ASR","voiceaLanguageOptions","captionLanguages","translation","allowed_languages","maxLanguages","max_languages","spokenLanguages","ASR","spoken_languages","VOICEA_ANNOUNCEMENT","JOINING","listenToEvents","webex","internal","llm","socket","send","recipients","route","getBinding","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","languageCode","request","method","url","getLocusUrl","body","transcribe","spokenLanguage","then","SPOKEN_LANGUAGE_UPDATE","isConnected","to","translationLanguage","TRANSLATION_REQUEST","captionStatus","TURN_ON_CAPTION_STATUS","SENDING","caption","CAPTIONS_TURNED_ON","areCaptionsEnabled","ENABLED","announce","catch","IDLE","Error","includes","isAnnounceProcessing","sendAnnouncement","_ref","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","isCaptionProcessing","abrupt","undefined","requestTurnOnCaptions","stop","_x","activate","transcribing","turnOnCaptions","enable","manualCaption","_createClass2","key","value","hasSubscribedToEvents","on","eventProcessor","deregisterEvents","off","WebexPlugin","_default"],"sources":["voicea.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {WebexPlugin, config} from '@webex/webex-core';\n\nimport {\n EVENT_TRIGGERS,\n AIBRIDGE_RELAY_TYPES,\n TRANSCRIPTION_TYPE,\n VOICEA,\n ANNOUNCE_STATUS,\n TURN_ON_CAPTION_STATUS,\n} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n IVoiceaChannel,\n} from './voicea.types';\nimport {millisToMinutesAndSeconds} from './utils';\n\n/**\n * @description VoiceaChannel to hold single instance of LLM\n * @export\n * @class VoiceaChannel\n */\nexport class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {\n namespace = VOICEA;\n\n private seqNum: number;\n\n private areCaptionsEnabled: boolean;\n\n private hasSubscribedToEvents = false;\n\n private vmcDeviceId?: string;\n\n private announceStatus: string;\n\n private captionStatus: string;\n\n /**\n * @param {Object} e\n * @returns {undefined}\n */\n\n private eventProcessor = (e) => {\n this.seqNum = e.sequenceNumber + 1;\n switch (e.data.relayType) {\n case AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:\n this.vmcDeviceId = e.headers.from;\n this.announceStatus = ANNOUNCE_STATUS.JOINED;\n this.processAnnouncementMessage(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:\n this.processTranscription(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:\n this.processManualTranscription(e.data.transcriptPayload);\n break;\n default:\n break;\n }\n };\n\n /**\n * Listen to websocket messages\n * @returns {undefined}\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n // @ts-ignore\n this.webex.internal.llm.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n }\n }\n\n /**\n * Listen to websocket messages\n * @returns {void}\n */\n public deregisterEvents() {\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n // @ts-ignore\n this.webex.internal.llm.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n }\n\n /**\n * Initializes Voicea plugin\n * @param {any} args\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n }\n\n /**\n * Process manual Transcript and send alert\n * @param {TranscriptionResponse} transcriptPayload\n * @returns {void}\n */\n private processManualTranscription = (transcriptPayload: TranscriptionResponse): void => {\n switch (transcriptPayload.type) {\n case TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT:\n case TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULTS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {\n isFinal: transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,\n transcriptId: transcriptPayload.id,\n transcripts: transcriptPayload.transcripts,\n });\n break;\n\n default:\n break;\n }\n };\n\n /**\n * Process Transcript and send alert\n * @param {TranscriptionResponse} voiceaPayload\n * @returns {void}\n */\n private processTranscription = (voiceaPayload: TranscriptionResponse): void => {\n switch (voiceaPayload.type) {\n case TRANSCRIPTION_TYPE.TRANSCRIPT_INTERIM_RESULTS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\n });\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts.map((transcript) => {\n transcript.timestamp = millisToMinutesAndSeconds(transcript.end_millis);\n\n return transcript;\n }),\n });\n break;\n\n case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.HIGHLIGHT_CREATED, {\n csis: voiceaPayload.highlight.csis,\n highlightId: voiceaPayload.highlight.highlight_id,\n text: voiceaPayload.highlight.transcript,\n highlightLabel: voiceaPayload.highlight.highlight_label,\n highlightSource: voiceaPayload.highlight.highlight_source,\n timestamp: millisToMinutesAndSeconds(voiceaPayload.highlight.end_millis),\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: false,\n text: voiceaPayload.command_response,\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_WAKE:\n case TRANSCRIPTION_TYPE.EVA_CANCEL:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: voiceaPayload.type === TRANSCRIPTION_TYPE.EVA_WAKE,\n });\n break;\n\n default:\n break;\n }\n };\n\n /**\n * Processes Caption Language Response\n * @param {CaptionLanguageResponse} voiceaPayload\n * @returns {void}\n */\n private processCaptionLanguageResponse = (voiceaPayload: CaptionLanguageResponse): void => {\n if (voiceaPayload.statusCode === 200) {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {statusCode: 200});\n } else {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {\n statusCode: voiceaPayload.errorCode,\n errorMessage: voiceaPayload.message,\n });\n }\n };\n\n /**\n * processes voicea announcement response and triggers event\n * @param {Object} voiceaPayload\n * @returns {void}\n */\n private processAnnouncementMessage = (voiceaPayload: AnnouncementPayload): void => {\n const voiceaLanguageOptions = {\n captionLanguages: voiceaPayload?.translation?.allowed_languages ?? [],\n maxLanguages: voiceaPayload?.translation?.max_languages ?? 0,\n spokenLanguages: voiceaPayload?.ASR?.spoken_languages ?? [],\n };\n\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);\n };\n\n /**\n * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n private sendAnnouncement = (): void => {\n this.announceStatus = ANNOUNCE_STATUS.JOINING;\n this.listenToEvents();\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {},\n data: {\n clientPayload: {\n version: 'v2',\n },\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.VOICEA.CLIENT_ANNOUNCEMENT,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Set Spoken Language for the meeting\n * @param {string} languageCode\n * @returns {Promise}\n */\n public setSpokenLanguage = (languageCode: string): Promise<void> =>\n // @ts-ignore\n this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n spokenLanguage: languageCode,\n },\n },\n }).then(() => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {languageCode});\n });\n\n /**\n * Request Language translation\n * @param {string} languageCode\n * @returns {void}\n */\n public requestLanguage = (languageCode: string): void => {\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {\n to: this.vmcDeviceId,\n },\n data: {\n clientPayload: {\n translationLanguage: languageCode,\n id: uuid.v4(),\n },\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_REQUEST,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * request turn on Captions\n * @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English\n * @returns {Promise}\n */\n private requestTurnOnCaptions = (languageCode?): undefined | Promise<void> => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.SENDING;\n\n // only set the spoken language if it is provided\n const body = {\n transcribe: {caption: true},\n languageCode,\n };\n\n // @ts-ignore\n // eslint-disable-next-line newline-before-return\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body,\n })\n .then(() => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTIONS_TURNED_ON);\n\n this.areCaptionsEnabled = true;\n this.captionStatus = TURN_ON_CAPTION_STATUS.ENABLED;\n this.announce();\n })\n .catch(() => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n throw new Error('turn on captions fail');\n });\n };\n\n /**\n * is announce processing\n * @returns {boolean}\n */\n private isAnnounceProcessing = () =>\n [ANNOUNCE_STATUS.JOINING, ANNOUNCE_STATUS.JOINED].includes(this.announceStatus);\n\n /**\n * announce to voicea data chanel\n * @returns {void}\n */\n public announce = () => {\n if (this.isAnnounceProcessing()) return;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('voicea can not announce before llm connected');\n }\n this.sendAnnouncement();\n };\n\n /**\n * is turn on caption processing\n * @returns {boolean}\n */\n private isCaptionProcessing = () =>\n [TURN_ON_CAPTION_STATUS.SENDING, TURN_ON_CAPTION_STATUS.ENABLED].includes(this.captionStatus);\n\n /**\n * Turn on Captions\n * @param {string} [spokenLanguage] - Optional Spoken language code\n * @returns {Promise}\n */\n public turnOnCaptions = async (spokenLanguage?): undefined | Promise<void> => {\n if (this.isCaptionProcessing()) return undefined;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('can not turn on captions before llm connected');\n }\n\n return this.requestTurnOnCaptions(spokenLanguage);\n };\n\n /**\n * Toggle transcribing for highlights\n * @param {bool} activate if true transcribing is turned on\n * @param {string} spokenLanguage language code for spoken language\n * @returns {Promise}\n */\n public toggleTranscribing = (\n activate: boolean,\n spokenLanguage?: string\n ): undefined | Promise<void> => {\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n transcribing: activate,\n },\n spokenLanguage,\n },\n }).then((): undefined | Promise<void> => {\n if (activate && !this.areCaptionsEnabled) {\n return this.turnOnCaptions(spokenLanguage);\n }\n\n return undefined;\n });\n };\n\n /**\n * Toggle turn on manual caption\n * @param {bool} enable if true manual caption is turned on\n * @returns {Promise}\n */\n public toggleManualCaption = (enable: boolean): undefined | Promise<void> => {\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n manualCaption: {\n enable,\n },\n },\n }).then((): undefined | Promise<void> => {\n return undefined;\n });\n };\n\n /**\n * get caption status\n * @returns {string}\n */\n public getCaptionStatus = () => this.captionStatus;\n\n /**\n * get announce status\n * @returns {string}\n */\n public getAnnounceStatus = () => this.announceStatus;\n}\n\nexport default VoiceaChannel;\n"],"mappings":"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"}
@@ -1 +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 timestamp: string;\n}\n\n/**\n * Highlights\n */\ninterface Highlight {\n highlight_id: string;\n transcript: string;\n highlight_label: string;\n highlight_source: string;\n start_millis: number;\n end_millis: number;\n csis: number[];\n}\n/**\n * Type for Transcription message\n */\ninterface TranscriptionResponse {\n type: TRANSCRIPTION_TYPES;\n id: string;\n transcript_id: string;\n translations?: {[x: string]: string};\n transcripts?: Transcription[];\n transcript?: Transcription;\n highlight?: Highlight;\n csis: number[];\n data: string;\n command_response: string;\n}\n/**\n * Type for CaptionLanguageResponse\n */\ninterface CaptionLanguageResponse {\n requestId: string;\n statusCode: number;\n errorCode: number;\n message: string;\n}\n\ninterface IVoiceaChannel {\n setSpokenLanguage: (languageCode: string) => Promise<void>;\n requestLanguage: (languageCode: string) => void;\n turnOnCaptions: () => undefined | Promise<void>;\n toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;\n deregisterEvents: () => void;\n}\n\ntype MeetingTranscripts = {\n start_mills?: number;\n end_mills?: number;\n text: string;\n last_packet_timestamp_ms?: number;\n csis: Array<number>;\n transcript_language_code: string;\n translations?: {\n [key: string]: string;\n };\n timestamp?: string;\n};\n\ntype MeetingTranscriptPayload = {\n isFinal: boolean;\n transcriptId: string;\n transcripts: Array<MeetingTranscripts>;\n};\n\nexport type {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n Transcription,\n Highlight,\n IVoiceaChannel,\n MeetingTranscriptPayload,\n};\n"],"mappings":""}
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.1.0",
17
- "@webex/internal-plugin-mercury": "3.1.0",
18
- "@webex/plugin-meetings": "3.1.0",
19
- "@webex/webex-core": "3.1.0",
17
+ "@webex/internal-plugin-llm": "3.2.0",
18
+ "@webex/internal-plugin-mercury": "3.2.0",
19
+ "@webex/plugin-meetings": "3.2.0",
20
+ "@webex/webex-core": "3.2.0",
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.1.0",
35
- "@webex/test-helper-mocha": "3.1.0",
36
- "@webex/test-helper-mock-web-socket": "3.1.0",
37
- "@webex/test-helper-mock-webex": "3.1.0",
38
- "@webex/test-helper-test-users": "3.1.0",
35
+ "@webex/test-helper-chai": "3.2.0",
36
+ "@webex/test-helper-mocha": "3.2.0",
37
+ "@webex/test-helper-mock-web-socket": "3.2.0",
38
+ "@webex/test-helper-mock-webex": "3.2.0",
39
+ "@webex/test-helper-test-users": "3.2.0",
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.1.0"
53
+ "version": "3.2.0"
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/index.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  import * as WebexCore from '@webex/webex-core';
2
2
 
3
3
  import VoiceaChannel from './voicea';
4
+ import type {MeetingTranscriptPayload} from './voicea.types';
4
5
 
5
6
  WebexCore.registerInternalPlugin('voicea', VoiceaChannel, {});
6
7
 
7
8
  export {default} from './voicea';
9
+ export {type MeetingTranscriptPayload};
8
10
  export {EVENT_TRIGGERS, TURN_ON_CAPTION_STATUS} from './constants';
package/src/voicea.ts CHANGED
@@ -3,7 +3,7 @@ import {WebexPlugin, config} from '@webex/webex-core';
3
3
 
4
4
  import {
5
5
  EVENT_TRIGGERS,
6
- VOICEA_RELAY_TYPES,
6
+ AIBRIDGE_RELAY_TYPES,
7
7
  TRANSCRIPTION_TYPE,
8
8
  VOICEA,
9
9
  ANNOUNCE_STATUS,
@@ -46,17 +46,20 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
46
46
  private eventProcessor = (e) => {
47
47
  this.seqNum = e.sequenceNumber + 1;
48
48
  switch (e.data.relayType) {
49
- case VOICEA_RELAY_TYPES.ANNOUNCEMENT:
49
+ case AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:
50
50
  this.vmcDeviceId = e.headers.from;
51
51
  this.announceStatus = ANNOUNCE_STATUS.JOINED;
52
52
  this.processAnnouncementMessage(e.data.voiceaPayload);
53
53
  break;
54
- case VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:
54
+ case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_RESPONSE:
55
55
  this.processCaptionLanguageResponse(e.data.voiceaPayload);
56
56
  break;
57
- case VOICEA_RELAY_TYPES.TRANSCRIPTION:
57
+ case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:
58
58
  this.processTranscription(e.data.voiceaPayload);
59
59
  break;
60
+ case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:
61
+ this.processManualTranscription(e.data.transcriptPayload);
62
+ break;
60
63
  default:
61
64
  break;
62
65
  }
@@ -101,6 +104,28 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
101
104
  this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;
102
105
  }
103
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
+
104
129
  /**
105
130
  * Process Transcript and send alert
106
131
  * @param {TranscriptionResponse} voiceaPayload
@@ -122,13 +147,11 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
122
147
  this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {
123
148
  isFinal: true,
124
149
  transcriptId: voiceaPayload.transcript_id,
125
- translations: voiceaPayload.translations,
126
- transcript: {
127
- csis: voiceaPayload.csis,
128
- text: voiceaPayload.transcript.text,
129
- transcriptLanguageCode: voiceaPayload.transcript.transcript_language_code,
130
- },
131
- timestamp: millisToMinutesAndSeconds(voiceaPayload.transcript.end_millis),
150
+ transcripts: voiceaPayload.transcripts.map((transcript) => {
151
+ transcript.timestamp = millisToMinutesAndSeconds(transcript.end_millis);
152
+
153
+ return transcript;
154
+ }),
132
155
  });
133
156
  break;
134
157
 
@@ -220,7 +243,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
220
243
  version: 'v2',
221
244
  },
222
245
  eventType: 'relay.event',
223
- relayType: VOICEA_RELAY_TYPES.CLIENT_ANNOUNCEMENT,
246
+ relayType: AIBRIDGE_RELAY_TYPES.VOICEA.CLIENT_ANNOUNCEMENT,
224
247
  },
225
248
  trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
226
249
  });
@@ -273,7 +296,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
273
296
  id: uuid.v4(),
274
297
  },
275
298
  eventType: 'relay.event',
276
- relayType: VOICEA_RELAY_TYPES.TRANSLATION_REQUEST,
299
+ relayType: AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_REQUEST,
277
300
  },
278
301
  trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
279
302
  });
@@ -388,6 +411,27 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
388
411
  });
389
412
  };
390
413
 
414
+ /**
415
+ * Toggle turn on manual caption
416
+ * @param {bool} enable if true manual caption is turned on
417
+ * @returns {Promise}
418
+ */
419
+ public toggleManualCaption = (enable: boolean): undefined | Promise<void> => {
420
+ // @ts-ignore
421
+ return this.request({
422
+ method: 'PUT',
423
+ // @ts-ignore
424
+ url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,
425
+ body: {
426
+ manualCaption: {
427
+ enable,
428
+ },
429
+ },
430
+ }).then((): undefined | Promise<void> => {
431
+ return undefined;
432
+ });
433
+ };
434
+
391
435
  /**
392
436
  * get caption status
393
437
  * @returns {string}
@@ -36,6 +36,7 @@ interface Transcription {
36
36
  translations: {[x: string]: string};
37
37
  csis: number[];
38
38
  last_packet_timestamp_ms: number;
39
+ timestamp: string;
39
40
  }
40
41
 
41
42
  /**
@@ -55,6 +56,7 @@ interface Highlight {
55
56
  */
56
57
  interface TranscriptionResponse {
57
58
  type: TRANSCRIPTION_TYPES;
59
+ id: string;
58
60
  transcript_id: string;
59
61
  translations?: {[x: string]: string};
60
62
  transcripts?: Transcription[];
@@ -82,6 +84,25 @@ interface IVoiceaChannel {
82
84
  deregisterEvents: () => void;
83
85
  }
84
86
 
87
+ type MeetingTranscripts = {
88
+ start_mills?: number;
89
+ end_mills?: number;
90
+ text: string;
91
+ last_packet_timestamp_ms?: number;
92
+ csis: Array<number>;
93
+ transcript_language_code: string;
94
+ translations?: {
95
+ [key: string]: string;
96
+ };
97
+ timestamp?: string;
98
+ };
99
+
100
+ type MeetingTranscriptPayload = {
101
+ isFinal: boolean;
102
+ transcriptId: string;
103
+ transcripts: Array<MeetingTranscripts>;
104
+ };
105
+
85
106
  export type {
86
107
  AnnouncementPayload,
87
108
  CaptionLanguageResponse,
@@ -89,4 +110,5 @@ export type {
89
110
  Transcription,
90
111
  Highlight,
91
112
  IVoiceaChannel,
113
+ MeetingTranscriptPayload,
92
114
  };
@@ -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();
@@ -568,6 +618,7 @@ describe('plugin-voicea', () => {
568
618
  start_millis: 12204,
569
619
  text: 'Hello?',
570
620
  transcript_language_code: 'en',
621
+ timestamp: '0:13'
571
622
  },
572
623
  transcripts: [
573
624
  {
@@ -579,6 +630,7 @@ describe('plugin-voicea', () => {
579
630
  translations: {
580
631
  fr: 'Bonjour.',
581
632
  },
633
+ timestamp: '0:13'
582
634
  },
583
635
  {
584
636
  start_millis: 12204,
@@ -589,6 +641,7 @@ describe('plugin-voicea', () => {
589
641
  translations: {
590
642
  fr: "C'est Webex",
591
643
  },
644
+ timestamp: '0:13'
592
645
  },
593
646
  ],
594
647
  };
@@ -603,15 +656,7 @@ describe('plugin-voicea', () => {
603
656
  assert.calledOnceWithExactly(triggerSpy, {
604
657
  isFinal: true,
605
658
  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',
659
+ transcripts: voiceaPayload.transcripts,
615
660
  });
616
661
  });
617
662
 
@@ -741,6 +786,71 @@ describe('plugin-voicea', () => {
741
786
  });
742
787
  });
743
788
 
789
+ describe('#processManualTranscription', () => {
790
+ let triggerSpy, functionSpy;
791
+
792
+ beforeEach(() => {
793
+ triggerSpy = sinon.spy();
794
+ functionSpy = sinon.spy(voiceaService, 'processManualTranscription');
795
+ voiceaService.listenToEvents();
796
+ });
797
+
798
+ it('processes interim manual transcription', async () => {
799
+ voiceaService.on(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, triggerSpy);
800
+ const transcriptPayload = {
801
+ id: "747d711d-3414-fd69-7081-e842649f2d28",
802
+ transcripts: [
803
+ {
804
+ "text": "Good",
805
+ }
806
+ ],
807
+ type: "manual_caption_interim_results",
808
+ };
809
+
810
+ // eslint-disable-next-line no-underscore-dangle
811
+ await voiceaService.webex.internal.llm._emit('event:relay.event', {
812
+ headers: {from: 'ws'},
813
+ data: {relayType: 'aibridge.manual_transcription', transcriptPayload},
814
+ });
815
+
816
+ assert.calledOnceWithExactly(functionSpy, transcriptPayload);
817
+ assert.calledOnceWithExactly(triggerSpy, {
818
+ isFinal: false,
819
+ transcriptId: '747d711d-3414-fd69-7081-e842649f2d28',
820
+ transcripts: transcriptPayload.transcripts,
821
+ });
822
+ });
823
+
824
+ it('processes final manual transcription', async () => {
825
+ voiceaService.on(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, triggerSpy);
826
+
827
+ const transcriptPayload = {
828
+ id: "8d226d31-044a-8d11-cc39-cedbde183154",
829
+ transcripts: [
830
+ {
831
+ text: "Good Morning",
832
+ start_millis: 10420,
833
+ end_millis: 11380,
834
+ }
835
+ ],
836
+ type: "manual_caption_final_result",
837
+ };
838
+
839
+ // eslint-disable-next-line no-underscore-dangle
840
+ await voiceaService.webex.internal.llm._emit('event:relay.event', {
841
+ headers: {from: 'ws'},
842
+ data: {relayType: 'aibridge.manual_transcription', transcriptPayload},
843
+ });
844
+
845
+ assert.calledOnceWithExactly(functionSpy, transcriptPayload);
846
+ assert.calledOnceWithExactly(triggerSpy, {
847
+ isFinal: true,
848
+ transcriptId: '8d226d31-044a-8d11-cc39-cedbde183154',
849
+ transcripts: transcriptPayload.transcripts,
850
+ });
851
+ });
852
+ });
853
+
744
854
  describe("#getCaptionStatus", () => {
745
855
  it('works correctly', () => {
746
856
  voiceaService.captionStatus = "enabled"
package/tsconfig.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "extends": "../../../tsconfig.json",
3
+ "include": [
4
+ "src"
5
+ ],
6
+ }