@webex/internal-plugin-voicea 3.12.0-next.53 → 3.12.0-next.54
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 +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types/constants.d.ts +2 -0
- package/dist/types/index.d.ts +2 -2
- package/dist/types/voicea.d.ts +6 -0
- package/dist/types/voicea.types.d.ts +18 -1
- package/dist/voicea.js +12 -0
- package/dist/voicea.js.map +1 -1
- package/dist/voicea.types.js.map +1 -1
- package/package.json +1 -1
- package/src/constants.ts +2 -0
- package/src/index.ts +2 -2
- package/src/voicea.ts +14 -0
- package/src/voicea.types.ts +21 -0
- package/test/unit/spec/voicea.js +29 -0
package/dist/constants.js
CHANGED
|
@@ -21,6 +21,7 @@ var EVENT_TRIGGERS = exports.EVENT_TRIGGERS = {
|
|
|
21
21
|
TRANSCRIBING_ON: 'voicea:transcribingOn',
|
|
22
22
|
TRANSCRIBING_OFF: 'voicea:transcribingOff',
|
|
23
23
|
NEW_CAPTION: 'voicea:newCaption',
|
|
24
|
+
SPEAKER_NAME_UPDATED: 'voicea:speakerNameUpdated',
|
|
24
25
|
EVA_COMMAND: 'voicea:wxa',
|
|
25
26
|
HIGHLIGHT_CREATED: 'voicea:highlightCreated',
|
|
26
27
|
NEW_MANUAL_CAPTION: 'aibridge:newManualCaption',
|
|
@@ -32,7 +33,8 @@ var AIBRIDGE_RELAY_TYPES = exports.AIBRIDGE_RELAY_TYPES = {
|
|
|
32
33
|
CLIENT_ANNOUNCEMENT: 'client.annc',
|
|
33
34
|
TRANSLATION_REQUEST: 'voicea.transl.req',
|
|
34
35
|
TRANSLATION_RESPONSE: 'voicea.transl.rsp',
|
|
35
|
-
TRANSCRIPTION: 'voicea.transcription'
|
|
36
|
+
TRANSCRIPTION: 'voicea.transcription',
|
|
37
|
+
SPEAKER_NAME_UPDATE: 'voicea.update_speakername'
|
|
36
38
|
},
|
|
37
39
|
MANUAL: {
|
|
38
40
|
TRANSCRIPTION: 'aibridge.manual_transcription',
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_internalPluginLlm","require","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","LANGUAGE_DETECTED","AIBRIDGE_RELAY_TYPES","VOICEA","ANNOUNCEMENT","CLIENT_ANNOUNCEMENT","TRANSLATION_REQUEST","TRANSLATION_RESPONSE","TRANSCRIPTION","MANUAL","CAPTIONER","TRANSCRIPTION_TYPE","UNKNOWN","EVA_WAKE","EVA_THANKS","EVA_CANCEL","TRANSCRIPT_INTERIM_RESULTS","TRANSCRIPT_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULTS","MANUAL_CAPTION_INTERIM_RESULT","MANUAL_CAPTION_FINAL_RESULT","DEFAULT_SPOKEN_LANGUAGE","ANNOUNCE_STATUS","IDLE","JOINED","JOINING","TURN_ON_CAPTION_STATUS","ENABLED","SENDING","TOGGLE_MANUAL_CAPTION_STATUS","LANGUAGE_ASSIGNMENT","AUTO","DEFAULT"],"sources":["constants.ts"],"sourcesContent":["export {LLM_PRACTICE_SESSION} from '@webex/internal-plugin-llm';\n\nexport 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 LANGUAGE_DETECTED: 'voicea:languageDetected',\n};\n\nexport const AIBRIDGE_RELAY_TYPES = {\n VOICEA: {\n ANNOUNCEMENT: 'voicea.annc',\n CLIENT_ANNOUNCEMENT: 'client.annc',\n TRANSLATION_REQUEST: 'voicea.transl.req',\n TRANSLATION_RESPONSE: 'voicea.transl.rsp',\n TRANSCRIPTION: 'voicea.transcription',\n },\n MANUAL: {\n TRANSCRIPTION: 'aibridge.manual_transcription',\n CAPTIONER: 'client.manual_transcription',\n },\n};\n\nexport const TRANSCRIPTION_TYPE = {\n UNKNOWN: 'unknown',\n EVA_WAKE: 'eva_wake',\n EVA_THANKS: 'eva_thanks',\n EVA_CANCEL: 'eva_cancel',\n HIGHLIGHT_CREATED: 'highlight_created',\n TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',\n TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',\n MANUAL_CAPTION_INTERIM_RESULTS: 'manual_caption_interim_results',\n MANUAL_CAPTION_INTERIM_RESULT: 'manual_caption_interim_result',\n MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result',\n LANGUAGE_DETECTED: 'language_detected',\n};\n\nexport const VOICEA = 'voicea';\nexport const DEFAULT_SPOKEN_LANGUAGE = 'en';\n\nexport const ANNOUNCE_STATUS = {\n IDLE: 'idle',\n JOINED: 'joined',\n JOINING: 'joining',\n};\n\nexport const TURN_ON_CAPTION_STATUS = {\n IDLE: 'idle',\n ENABLED: 'enabled',\n SENDING: 'sending',\n};\n\nexport const TOGGLE_MANUAL_CAPTION_STATUS = {\n IDLE: 'idle',\n SENDING: 'sending',\n};\n\nexport const LANGUAGE_ASSIGNMENT = {\n AUTO: 'AUTO',\n MANUAL: 'MANUAL',\n DEFAULT: 'DEFAULT',\n};\n"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AAEO,IAAMC,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,2BAA2B;EAE/CC,iBAAiB,EAAE;AACrB,CAAC;AAEM,IAAMC,oBAAoB,
|
|
1
|
+
{"version":3,"names":["_internalPluginLlm","require","EVENT_TRIGGERS","exports","VOICEA_ANNOUNCEMENT","CAPTION_LANGUAGE_UPDATE","SPOKEN_LANGUAGE_UPDATE","CAPTIONS_TURNED_ON","TRANSCRIBING_ON","TRANSCRIBING_OFF","NEW_CAPTION","SPEAKER_NAME_UPDATED","EVA_COMMAND","HIGHLIGHT_CREATED","NEW_MANUAL_CAPTION","LANGUAGE_DETECTED","AIBRIDGE_RELAY_TYPES","VOICEA","ANNOUNCEMENT","CLIENT_ANNOUNCEMENT","TRANSLATION_REQUEST","TRANSLATION_RESPONSE","TRANSCRIPTION","SPEAKER_NAME_UPDATE","MANUAL","CAPTIONER","TRANSCRIPTION_TYPE","UNKNOWN","EVA_WAKE","EVA_THANKS","EVA_CANCEL","TRANSCRIPT_INTERIM_RESULTS","TRANSCRIPT_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULTS","MANUAL_CAPTION_INTERIM_RESULT","MANUAL_CAPTION_FINAL_RESULT","DEFAULT_SPOKEN_LANGUAGE","ANNOUNCE_STATUS","IDLE","JOINED","JOINING","TURN_ON_CAPTION_STATUS","ENABLED","SENDING","TOGGLE_MANUAL_CAPTION_STATUS","LANGUAGE_ASSIGNMENT","AUTO","DEFAULT"],"sources":["constants.ts"],"sourcesContent":["export {LLM_PRACTICE_SESSION} from '@webex/internal-plugin-llm';\n\nexport 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 SPEAKER_NAME_UPDATED: 'voicea:speakerNameUpdated',\n EVA_COMMAND: 'voicea:wxa',\n HIGHLIGHT_CREATED: 'voicea:highlightCreated',\n NEW_MANUAL_CAPTION: 'aibridge:newManualCaption',\n\n LANGUAGE_DETECTED: 'voicea:languageDetected',\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 SPEAKER_NAME_UPDATE: 'voicea.update_speakername',\n },\n MANUAL: {\n TRANSCRIPTION: 'aibridge.manual_transcription',\n CAPTIONER: 'client.manual_transcription',\n },\n};\n\nexport const TRANSCRIPTION_TYPE = {\n UNKNOWN: 'unknown',\n EVA_WAKE: 'eva_wake',\n EVA_THANKS: 'eva_thanks',\n EVA_CANCEL: 'eva_cancel',\n HIGHLIGHT_CREATED: 'highlight_created',\n TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',\n TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',\n MANUAL_CAPTION_INTERIM_RESULTS: 'manual_caption_interim_results',\n MANUAL_CAPTION_INTERIM_RESULT: 'manual_caption_interim_result',\n MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result',\n LANGUAGE_DETECTED: 'language_detected',\n};\n\nexport const VOICEA = 'voicea';\nexport const DEFAULT_SPOKEN_LANGUAGE = 'en';\n\nexport const ANNOUNCE_STATUS = {\n IDLE: 'idle',\n JOINED: 'joined',\n JOINING: 'joining',\n};\n\nexport const TURN_ON_CAPTION_STATUS = {\n IDLE: 'idle',\n ENABLED: 'enabled',\n SENDING: 'sending',\n};\n\nexport const TOGGLE_MANUAL_CAPTION_STATUS = {\n IDLE: 'idle',\n SENDING: 'sending',\n};\n\nexport const LANGUAGE_ASSIGNMENT = {\n AUTO: 'AUTO',\n MANUAL: 'MANUAL',\n DEFAULT: 'DEFAULT',\n};\n"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AAEO,IAAMC,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,oBAAoB,EAAE,2BAA2B;EACjDC,WAAW,EAAE,YAAY;EACzBC,iBAAiB,EAAE,yBAAyB;EAC5CC,kBAAkB,EAAE,2BAA2B;EAE/CC,iBAAiB,EAAE;AACrB,CAAC;AAEM,IAAMC,oBAAoB,GAAAb,OAAA,CAAAa,oBAAA,GAAG;EAClCC,MAAM,EAAE;IACNC,YAAY,EAAE,aAAa;IAC3BC,mBAAmB,EAAE,aAAa;IAClCC,mBAAmB,EAAE,mBAAmB;IACxCC,oBAAoB,EAAE,mBAAmB;IACzCC,aAAa,EAAE,sBAAsB;IACrCC,mBAAmB,EAAE;EACvB,CAAC;EACDC,MAAM,EAAE;IACNF,aAAa,EAAE,+BAA+B;IAC9CG,SAAS,EAAE;EACb;AACF,CAAC;AAEM,IAAMC,kBAAkB,GAAAvB,OAAA,CAAAuB,kBAAA,GAAG;EAChCC,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE,YAAY;EACxBjB,iBAAiB,EAAE,mBAAmB;EACtCkB,0BAA0B,EAAE,4BAA4B;EACxDC,uBAAuB,EAAE,yBAAyB;EAClDC,8BAA8B,EAAE,gCAAgC;EAChEC,6BAA6B,EAAE,+BAA+B;EAC9DC,2BAA2B,EAAE,6BAA6B;EAC1DpB,iBAAiB,EAAE;AACrB,CAAC;AAEM,IAAME,MAAM,GAAAd,OAAA,CAAAc,MAAA,GAAG,QAAQ;AACvB,IAAMmB,uBAAuB,GAAAjC,OAAA,CAAAiC,uBAAA,GAAG,IAAI;AAEpC,IAAMC,eAAe,GAAAlC,OAAA,CAAAkC,eAAA,GAAG;EAC7BC,IAAI,EAAE,MAAM;EACZC,MAAM,EAAE,QAAQ;EAChBC,OAAO,EAAE;AACX,CAAC;AAEM,IAAMC,sBAAsB,GAAAtC,OAAA,CAAAsC,sBAAA,GAAG;EACpCH,IAAI,EAAE,MAAM;EACZI,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE;AACX,CAAC;AAEM,IAAMC,4BAA4B,GAAAzC,OAAA,CAAAyC,4BAAA,GAAG;EAC1CN,IAAI,EAAE,MAAM;EACZK,OAAO,EAAE;AACX,CAAC;AAEM,IAAME,mBAAmB,GAAA1C,OAAA,CAAA0C,mBAAA,GAAG;EACjCC,IAAI,EAAE,MAAM;EACZtB,MAAM,EAAE,QAAQ;EAChBuB,OAAO,EAAE;AACX,CAAC","ignoreList":[]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["WebexCore","_interopRequireWildcard","require","_voicea","_interopRequireDefault","_constants","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","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,SAAAD,wBAAAK,CAAA,EAAAC,CAAA,6BAAAC,QAAA,MAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAP,uBAAA,YAAAA,wBAAAK,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,gBAAAW,OAAA,CAAAX,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAM,GAAA,CAAAZ,CAAA,UAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,GAAAM,CAAA,CAAAQ,GAAA,CAAAd,CAAA,EAAAQ,CAAA,cAAAO,EAAA,IAAAf,CAAA,gBAAAe,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAe,EAAA,OAAAR,CAAA,IAAAD,CAAA,GAAAY,sBAAA,KAAAC,gCAAA,CAAAnB,CAAA,EAAAe,EAAA,OAAAR,CAAA,CAAAM,GAAA,IAAAN,CAAA,CAAAO,GAAA,IAAAR,CAAA,CAAAE,CAAA,EAAAO,EAAA,EAAAR,CAAA,IAAAC,CAAA,CAAAO,EAAA,IAAAf,CAAA,CAAAe,EAAA,WAAAP,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAJnEP,SAAS,CAAC0B,sBAAsB,CAAC,QAAQ,EAAEC,eAAa,EAAE,CAAC,CAAC,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["WebexCore","_interopRequireWildcard","require","_voicea","_interopRequireDefault","_constants","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","registerInternalPlugin","VoiceaChannel"],"sources":["index.ts"],"sourcesContent":["import * as WebexCore from '@webex/webex-core';\n\nimport VoiceaChannel from './voicea';\nimport type {MeetingTranscriptPayload, SpeakerNameUpdatePayload} from './voicea.types';\n\nWebexCore.registerInternalPlugin('voicea', VoiceaChannel, {});\n\nexport {default} from './voicea';\nexport {type MeetingTranscriptPayload, SpeakerNameUpdatePayload};\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,SAAAD,wBAAAK,CAAA,EAAAC,CAAA,6BAAAC,QAAA,MAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAP,uBAAA,YAAAA,wBAAAK,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,gBAAAW,OAAA,CAAAX,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAM,GAAA,CAAAZ,CAAA,UAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,GAAAM,CAAA,CAAAQ,GAAA,CAAAd,CAAA,EAAAQ,CAAA,cAAAO,EAAA,IAAAf,CAAA,gBAAAe,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAe,EAAA,OAAAR,CAAA,IAAAD,CAAA,GAAAY,sBAAA,KAAAC,gCAAA,CAAAnB,CAAA,EAAAe,EAAA,OAAAR,CAAA,CAAAM,GAAA,IAAAN,CAAA,CAAAO,GAAA,IAAAR,CAAA,CAAAE,CAAA,EAAAO,EAAA,EAAAR,CAAA,IAAAC,CAAA,CAAAO,EAAA,IAAAf,CAAA,CAAAe,EAAA,WAAAP,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAJnEP,SAAS,CAAC0B,sBAAsB,CAAC,QAAQ,EAAEC,eAAa,EAAE,CAAC,CAAC,CAAC","ignoreList":[]}
|
|
@@ -7,6 +7,7 @@ export declare const EVENT_TRIGGERS: {
|
|
|
7
7
|
TRANSCRIBING_ON: string;
|
|
8
8
|
TRANSCRIBING_OFF: string;
|
|
9
9
|
NEW_CAPTION: string;
|
|
10
|
+
SPEAKER_NAME_UPDATED: string;
|
|
10
11
|
EVA_COMMAND: string;
|
|
11
12
|
HIGHLIGHT_CREATED: string;
|
|
12
13
|
NEW_MANUAL_CAPTION: string;
|
|
@@ -19,6 +20,7 @@ export declare const AIBRIDGE_RELAY_TYPES: {
|
|
|
19
20
|
TRANSLATION_REQUEST: string;
|
|
20
21
|
TRANSLATION_RESPONSE: string;
|
|
21
22
|
TRANSCRIPTION: string;
|
|
23
|
+
SPEAKER_NAME_UPDATE: string;
|
|
22
24
|
};
|
|
23
25
|
MANUAL: {
|
|
24
26
|
TRANSCRIPTION: string;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MeetingTranscriptPayload } from './voicea.types';
|
|
1
|
+
import type { MeetingTranscriptPayload, SpeakerNameUpdatePayload } from './voicea.types';
|
|
2
2
|
export { default } from './voicea';
|
|
3
|
-
export { type MeetingTranscriptPayload };
|
|
3
|
+
export { type MeetingTranscriptPayload, SpeakerNameUpdatePayload };
|
|
4
4
|
export { EVENT_TRIGGERS, TURN_ON_CAPTION_STATUS } from './constants';
|
package/dist/types/voicea.d.ts
CHANGED
|
@@ -44,6 +44,12 @@ export declare class VoiceaChannel extends WebexPlugin implements IVoiceaChannel
|
|
|
44
44
|
* @returns {void}
|
|
45
45
|
*/
|
|
46
46
|
private processManualTranscription;
|
|
47
|
+
/**
|
|
48
|
+
* Process speaker name update and send alert
|
|
49
|
+
* @param {SpeakerNameUpdatePayload} voiceaPayload
|
|
50
|
+
* @returns {void}
|
|
51
|
+
*/
|
|
52
|
+
private processSpeakerNameUpdate;
|
|
47
53
|
/**
|
|
48
54
|
* Process Transcript and send alert
|
|
49
55
|
* @param {TranscriptionResponse} voiceaPayload
|
|
@@ -25,6 +25,19 @@ interface Transcription {
|
|
|
25
25
|
csis: number[];
|
|
26
26
|
last_packet_timestamp_ms: number;
|
|
27
27
|
timestamp: string;
|
|
28
|
+
taggedSpeaker?: {
|
|
29
|
+
speakerId?: string[];
|
|
30
|
+
newName?: string;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
interface TaggedSpeaker {
|
|
34
|
+
csiId: number;
|
|
35
|
+
speakerId: string;
|
|
36
|
+
newName: string;
|
|
37
|
+
}
|
|
38
|
+
interface SpeakerNameUpdatePayload {
|
|
39
|
+
id?: string;
|
|
40
|
+
taggedSpeakers: TaggedSpeaker[];
|
|
28
41
|
}
|
|
29
42
|
/**
|
|
30
43
|
* Highlights
|
|
@@ -88,10 +101,14 @@ type MeetingTranscripts = {
|
|
|
88
101
|
[key: string]: string;
|
|
89
102
|
};
|
|
90
103
|
timestamp?: string;
|
|
104
|
+
taggedSpeaker?: {
|
|
105
|
+
speakerId?: string[];
|
|
106
|
+
newName?: string;
|
|
107
|
+
};
|
|
91
108
|
};
|
|
92
109
|
type MeetingTranscriptPayload = {
|
|
93
110
|
isFinal: boolean;
|
|
94
111
|
transcriptId: string;
|
|
95
112
|
transcripts: Array<MeetingTranscripts>;
|
|
96
113
|
};
|
|
97
|
-
export type { AnnouncementPayload, CaptionLanguageResponse, TranscriptionResponse, Transcription, Highlight, IVoiceaChannel, MeetingTranscriptPayload, };
|
|
114
|
+
export type { AnnouncementPayload, CaptionLanguageResponse, TranscriptionResponse, Transcription, Highlight, TaggedSpeaker, SpeakerNameUpdatePayload, IVoiceaChannel, MeetingTranscriptPayload, };
|
package/dist/voicea.js
CHANGED
|
@@ -76,6 +76,9 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
76
76
|
case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:
|
|
77
77
|
_this.processTranscription(e.data.voiceaPayload);
|
|
78
78
|
break;
|
|
79
|
+
case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.SPEAKER_NAME_UPDATE:
|
|
80
|
+
_this.processSpeakerNameUpdate(e.data.voiceaPayload);
|
|
81
|
+
break;
|
|
79
82
|
case _constants.AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:
|
|
80
83
|
case _constants.AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:
|
|
81
84
|
_this.processManualTranscription(_objectSpread(_objectSpread({}, e.data.transcriptPayload), {}, {
|
|
@@ -104,6 +107,15 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
104
107
|
});
|
|
105
108
|
}
|
|
106
109
|
});
|
|
110
|
+
/**
|
|
111
|
+
* Process speaker name update and send alert
|
|
112
|
+
* @param {SpeakerNameUpdatePayload} voiceaPayload
|
|
113
|
+
* @returns {void}
|
|
114
|
+
*/
|
|
115
|
+
(0, _defineProperty2.default)(_this, "processSpeakerNameUpdate", function (voiceaPayload) {
|
|
116
|
+
// @ts-ignore
|
|
117
|
+
_this.trigger(_constants.EVENT_TRIGGERS.SPEAKER_NAME_UPDATED, voiceaPayload);
|
|
118
|
+
});
|
|
107
119
|
/**
|
|
108
120
|
* Process Transcript and send alert
|
|
109
121
|
* @param {TranscriptionResponse} voiceaPayload
|
package/dist/voicea.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_constants","_utils","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","Boolean","prototype","valueOf","call","VoiceaChannel","exports","_WebexPlugin","_this","_classCallCheck2","_len","args","Array","_key","concat","VOICEA","_e$headers","seqNum","sequenceNumber","data","relayType","AIBRIDGE_RELAY_TYPES","ANNOUNCEMENT","onCaptionServiceIdUpdate","headers","from","announceStatus","ANNOUNCE_STATUS","JOINED","processAnnouncementMessage","voiceaPayload","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","MANUAL","CAPTIONER","processManualTranscription","transcriptPayload","sender","data_source","type","TRANSCRIPTION_TYPE","MANUAL_CAPTION_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULT","trigger","EVENT_TRIGGERS","NEW_MANUAL_CAPTION","isFinal","transcriptId","id","transcripts","source","TRANSCRIPT_INTERIM_RESULTS","NEW_CAPTION","transcript_id","TRANSCRIPT_FINAL_RESULT","map","transcript","timestamp","millisToMinutesAndSeconds","end_millis","HIGHLIGHT_CREATED","csis","highlight","highlightId","highlight_id","text","highlightLabel","highlight_label","highlightSource","highlight_source","EVA_THANKS","EVA_COMMAND","isListening","command_response","EVA_WAKE","EVA_CANCEL","LANGUAGE_DETECTED","isInSpokenLanguages","spokenLanguages","includes","language","languageCode","statusCode","CAPTION_LANGUAGE_UPDATE","errorCode","errorMessage","message","_voiceaPayload$transl","_voiceaPayload$transl2","_voiceaPayload$transl3","_voiceaPayload$transl4","_voiceaPayload$ASR$sp","_voiceaPayload$ASR","_voiceaPayload$ASR$sp2","_voiceaPayload$ASR2","voiceaLanguageOptions","captionLanguages","translation","allowed_languages","maxLanguages","max_languages","ASR","spoken_languages","currentSpokenLanguage","VOICEA_ANNOUNCEMENT","webex","internal","llm","isConnected","LLM_PRACTICE_SESSION","keepTranscriptionSubscribed","isPracticeSessionConnected","socket","getSocket","binding","getBinding","datachannelUrl","getDatachannelUrl","JOINING","listenToEvents","_this$getPublishTrans","getPublishTransport","send","recipients","route","captionServiceId","to","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","languageAssignment","request","method","url","getLocusUrl","body","transcribe","spokenLanguage","then","SPOKEN_LANGUAGE_UPDATE","isLLMConnected","_this$getPublishTrans2","translationLanguage","TRANSLATION_REQUEST","currentCaptionLanguage","timeStamp","_this$getPublishTrans3","start_millis","captionStatus","TURN_ON_CAPTION_STATUS","SENDING","caption","CAPTIONS_TURNED_ON","areCaptionsEnabled","ENABLED","announce","updateSubchannelSubscriptionsAndSyncCaptionState","subscribe","catch","IDLE","Error","isAnnounceProcessed","sendAnnouncement","_ref","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","abrupt","undefined","requestTurnOnCaptions","stop","_x","activate","transcribing","turnOnCaptions","enable","toggleManualCaptionStatus","TOGGLE_MANUAL_CAPTION_STATUS","manualCaption","meetingId","serviceId","requestLanguage","_callee2","_ref3","_ref3$subscribe","_ref3$unsubscribe","unsubscribe","isDataChannelTokenEnabled","_this$getPublishTrans4","_args2","_context2","sent","datachannelUri","options","keepSubscribed","updateSubchannelSubscriptions","DEFAULT_SPOKEN_LANGUAGE","_inherits2","_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 LLM_PRACTICE_SESSION,\n ANNOUNCE_STATUS,\n TURN_ON_CAPTION_STATUS,\n TOGGLE_MANUAL_CAPTION_STATUS,\n DEFAULT_SPOKEN_LANGUAGE,\n LANGUAGE_ASSIGNMENT,\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 captionServiceId?: string;\n\n private announceStatus: string;\n\n private captionStatus: string;\n\n private keepTranscriptionSubscribed: boolean;\n\n private toggleManualCaptionStatus: string;\n\n private currentSpokenLanguage?: string;\n\n private spokenLanguages: string[] = [];\n\n private currentCaptionLanguage?: 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.onCaptionServiceIdUpdate(e.headers.from);\n this.announceStatus = ANNOUNCE_STATUS.JOINED;\n this.processAnnouncementMessage(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:\n this.processTranscription(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:\n case AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:\n this.processManualTranscription({\n ...e.data.transcriptPayload,\n sender: e.headers?.from,\n data_source: e.data.relayType,\n });\n break;\n default:\n break;\n }\n };\n\n /**\n * Listen to websocket messages\n * @returns {undefined}\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n // @ts-ignore\n this.webex.internal.llm.on('event:relay.event', this.eventProcessor);\n // @ts-ignore\n this.webex.internal.llm.on(`event:relay.event:${LLM_PRACTICE_SESSION}`, 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.keepTranscriptionSubscribed = false;\n this.captionServiceId = undefined;\n // @ts-ignore\n this.webex.internal.llm.off('event:relay.event', this.eventProcessor);\n // @ts-ignore\n this.webex.internal.llm.off(`event:relay.event:${LLM_PRACTICE_SESSION}`, this.eventProcessor);\n this.hasSubscribedToEvents = false;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n this.currentSpokenLanguage = undefined;\n this.currentCaptionLanguage = undefined;\n }\n\n /**\n * Initializes Voicea plugin\n * @param {any} args\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n this.areCaptionsEnabled = false;\n this.keepTranscriptionSubscribed = false;\n this.captionServiceId = undefined;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n this.currentSpokenLanguage = DEFAULT_SPOKEN_LANGUAGE;\n this.currentCaptionLanguage = undefined;\n }\n\n /**\n * Process manual Transcript and send alert\n * @param {TranscriptionResponse} transcriptPayload\n * @returns {void}\n */\n private processManualTranscription = (transcriptPayload: TranscriptionResponse): void => {\n if (\n transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT ||\n transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT\n ) {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {\n isFinal: transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,\n transcriptId: transcriptPayload.id,\n transcripts: transcriptPayload.transcripts,\n sender: transcriptPayload.sender,\n source: transcriptPayload.data_source,\n });\n }\n };\n\n /**\n * Process Transcript and send alert\n * @param {TranscriptionResponse} voiceaPayload\n * @returns {void}\n */\n private processTranscription = (voiceaPayload: TranscriptionResponse): void => {\n switch (voiceaPayload.type) {\n case TRANSCRIPTION_TYPE.TRANSCRIPT_INTERIM_RESULTS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\n });\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts.map((transcript) => {\n transcript.timestamp = millisToMinutesAndSeconds(transcript.end_millis);\n\n return transcript;\n }),\n });\n break;\n\n case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.HIGHLIGHT_CREATED, {\n csis: voiceaPayload.highlight.csis,\n highlightId: voiceaPayload.highlight.highlight_id,\n text: voiceaPayload.highlight.transcript,\n highlightLabel: voiceaPayload.highlight.highlight_label,\n highlightSource: voiceaPayload.highlight.highlight_source,\n timestamp: millisToMinutesAndSeconds(voiceaPayload.highlight.end_millis),\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: false,\n text: voiceaPayload.command_response,\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_WAKE:\n case TRANSCRIPTION_TYPE.EVA_CANCEL:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: voiceaPayload.type === TRANSCRIPTION_TYPE.EVA_WAKE,\n });\n break;\n\n case TRANSCRIPTION_TYPE.LANGUAGE_DETECTED: {\n const isInSpokenLanguages = this.spokenLanguages.includes(voiceaPayload.language);\n\n if (isInSpokenLanguages) {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.LANGUAGE_DETECTED, {\n languageCode: voiceaPayload.language,\n });\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 // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {statusCode: 200});\n } else {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {\n statusCode: voiceaPayload.errorCode,\n errorMessage: voiceaPayload.message,\n });\n }\n };\n\n /**\n * processes voicea announcement response and triggers event\n * @param {Object} voiceaPayload\n * @returns {void}\n */\n private processAnnouncementMessage = (voiceaPayload: AnnouncementPayload): void => {\n const voiceaLanguageOptions = {\n captionLanguages: voiceaPayload?.translation?.allowed_languages ?? [],\n maxLanguages: voiceaPayload?.translation?.max_languages ?? 0,\n spokenLanguages: voiceaPayload?.ASR?.spoken_languages ?? [],\n currentSpokenLanguage: this.currentSpokenLanguage,\n };\n\n this.spokenLanguages = voiceaPayload?.ASR?.spoken_languages ?? [];\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);\n };\n\n /**\n * Indicates whether the default or practice-session LLM connection is active.\n * @returns {boolean}\n */\n private isLLMConnected = (): boolean =>\n // @ts-ignore\n this.webex.internal.llm.isConnected() ||\n // @ts-ignore\n this.webex.internal.llm.isConnected(LLM_PRACTICE_SESSION);\n\n public getKeepTranscriptionSubscribed = (): boolean => this.keepTranscriptionSubscribed;\n\n /**\n * Resolves the active LLM publish transport, preferring the practice-session\n * connection only when that session is fully connected.\n * @returns {Object}\n */\n private getPublishTransport = () => {\n // @ts-ignore\n const {llm} = this.webex.internal;\n const isPracticeSessionConnected = llm.isConnected(LLM_PRACTICE_SESSION);\n\n return {\n socket: (isPracticeSessionConnected && llm.getSocket(LLM_PRACTICE_SESSION)) || llm.socket,\n binding:\n (isPracticeSessionConnected && llm.getBinding(LLM_PRACTICE_SESSION)) || llm.getBinding(),\n datachannelUrl:\n (isPracticeSessionConnected && llm.getDatachannelUrl(LLM_PRACTICE_SESSION)) ||\n llm.getDatachannelUrl(),\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 const {socket, binding} = this.getPublishTransport();\n socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: [\n {\n route: binding,\n },\n ],\n // If captionServiceId exists, send it as the 'to' header; otherwise keep headers empty.\n headers: this.captionServiceId ? {to: this.captionServiceId} : {},\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 * @param {\"DEFAULT\" | \"AUTO\" | \"MANUAL\"} languageAssignment\n * @returns {Promise}\n */\n public setSpokenLanguage = (\n languageCode: string,\n languageAssignment?: 'DEFAULT' | 'AUTO' | 'MANUAL'\n ): 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 ...(languageAssignment && {languageAssignment}),\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 if (!this.isLLMConnected()) {\n return;\n }\n\n const {socket, binding} = this.getPublishTransport();\n socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: [\n {\n route: binding,\n },\n ],\n headers: {\n to: this.captionServiceId,\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.currentCaptionLanguage = languageCode;\n\n this.seqNum += 1;\n };\n\n /**\n * Send manual closed captions to voicea service\n * @param {string} text\n * @param {number} timeStamp\n * @param {number[]} csis\n * @param {boolean} isFinal\n * @returns {void}\n */\n public sendManualClosedCaption = (\n text: string,\n timeStamp: number,\n csis: number[],\n isFinal: boolean\n ): void => {\n if (!this.isLLMConnected()) {\n return;\n }\n\n const {socket, binding} = this.getPublishTransport();\n\n socket?.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: [\n {\n route: binding,\n },\n ],\n headers: {},\n data: {\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER,\n transcriptPayload: {\n type: isFinal\n ? TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT\n : TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT,\n id: uuid.v4(),\n transcripts: [\n {\n text,\n start_millis: timeStamp,\n end_millis: timeStamp,\n csis,\n },\n ],\n transcript_id: uuid.v4(),\n },\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * request turn on Captions\n * @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English\n * @returns {Promise}\n */\n private requestTurnOnCaptions = (languageCode?): undefined | Promise<void> => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.SENDING;\n\n // only set the spoken language if it is provided\n const body = {\n transcribe: {caption: true},\n languageCode,\n };\n\n // @ts-ignore\n // eslint-disable-next-line newline-before-return\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body,\n })\n .then(() => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTIONS_TURNED_ON);\n\n this.areCaptionsEnabled = true;\n this.captionStatus = TURN_ON_CAPTION_STATUS.ENABLED;\n this.announce();\n this.updateSubchannelSubscriptionsAndSyncCaptionState({subscribe: ['transcription']}, true);\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 * is announce processed\n * @returns {boolean}\n */\n private isAnnounceProcessed = () => this.announceStatus === ANNOUNCE_STATUS.JOINED;\n\n /**\n * announce to voicea data chanel\n * @returns {void}\n */\n public announce = () => {\n if (this.isAnnounceProcessed()) {\n return;\n }\n if (!this.isLLMConnected()) {\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.captionStatus === TURN_ON_CAPTION_STATUS.SENDING) return undefined;\n\n if (!this.isLLMConnected()) {\n throw new Error('can not turn on captions before llm connected');\n }\n\n return this.requestTurnOnCaptions(spokenLanguage);\n };\n\n /**\n * Toggle transcribing for highlights\n * @param {boolean} activate true means to turn on transcribing and false means to turn off\n * @param {string} spokenLanguage language code for spoken language\n * @returns {Promise}\n */\n public toggleTranscribing = (\n activate: boolean,\n spokenLanguage?: string\n ): undefined | Promise<void> => {\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n transcribing: activate,\n },\n spokenLanguage,\n },\n }).then((): undefined | Promise<void> => {\n if (activate && !this.areCaptionsEnabled) {\n return this.turnOnCaptions(spokenLanguage);\n }\n\n return undefined;\n });\n };\n\n /**\n * Toggle turn on manual caption\n * @param {boolean} enable true means to turn on manual caption, false means to turn off\n * @returns {Promise}\n */\n public toggleManualCaption = (enable: boolean): undefined | Promise<void> => {\n if (this.toggleManualCaptionStatus === TOGGLE_MANUAL_CAPTION_STATUS.SENDING) return undefined;\n\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.SENDING;\n\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n manualCaption: {\n enable,\n },\n },\n })\n .then((): undefined | Promise<void> => {\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n\n return undefined;\n })\n .catch(() => {\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n throw new Error('toggle manual captions fail');\n });\n };\n\n /**\n * In meeting Spoken Language changed event\n * @param {string} languageCode\n * @param {string} meetingId\n * @returns {void}\n */\n public onSpokenLanguageUpdate = (languageCode: string, meetingId): void => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {languageCode, meetingId});\n this.currentSpokenLanguage = languageCode;\n };\n\n /**\n * In meeting Spoken Language changed event\n * @param {string} serviceId\n * @returns {void}\n */\n public onCaptionServiceIdUpdate = (serviceId: string): void => {\n if (!serviceId) {\n return;\n }\n if (this.captionServiceId !== serviceId) {\n this.captionServiceId = serviceId;\n // if service id value has changed and the translation language has been set, client needs to resend the translator language message to the LLM.\n if (this.currentCaptionLanguage) {\n this.requestLanguage(this.currentCaptionLanguage);\n }\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 * update LLM sub‑channel subscriptions.\n *\n * sends a single `subchannelSubscriptionRequest` to LLM,\n * allowing subscribe and unsubscribe subchannel.\n *\n * @param {string[]} options.subscribe Sub‑channels to subscribe to.\n * @param {string[]} options.unsubscribe Sub‑channels to unsubscribe from.\n * @returns {Promise}\n */\n public updateSubchannelSubscriptions = async ({\n subscribe = [],\n unsubscribe = [],\n }: {\n subscribe?: string[];\n unsubscribe?: string[];\n } = {}): Promise<void> => {\n // @ts-ignore\n const isDataChannelTokenEnabled = await this.webex.internal.llm.isDataChannelTokenEnabled();\n // @ts-ignore\n if (!this.isLLMConnected() || !isDataChannelTokenEnabled) return;\n\n const {socket, datachannelUrl} = this.getPublishTransport();\n\n // @ts-ignore\n socket.send({\n id: `${this.seqNum}`,\n type: 'subchannelSubscriptionRequest',\n data: {\n // @ts-ignore\n datachannelUri: datachannelUrl,\n subscribe,\n unsubscribe,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n\n this.seqNum += 1;\n };\n\n /**\n * Updates transcription subchannel subscriptions and records whether the\n * transcription subscription should be kept (and restored on reconnect).\n *\n * @param {Object} [options] - Subscription options.\n * @param {string[]} [options.subscribe] - Subchannels to subscribe to.\n * @param {string[]} [options.unsubscribe] - Subchannels to unsubscribe from.\n * @param {boolean} [keepSubscribed=false] - Whether the transcription\n * subscription should be kept and restored on reconnect.\n *\n * @returns {Promise<void>}\n */\n public updateSubchannelSubscriptionsAndSyncCaptionState = (\n options: {\n subscribe?: string[];\n unsubscribe?: string[];\n } = {},\n keepSubscribed = false\n ): Promise<void> => {\n this.keepTranscriptionSubscribed = keepSubscribed;\n\n return this.updateSubchannelSubscriptions(options);\n };\n}\n\nexport default VoiceaChannel;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_constants","_utils","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","Boolean","prototype","valueOf","call","VoiceaChannel","exports","_WebexPlugin","_this","_classCallCheck2","_len","args","Array","_key","concat","VOICEA","_e$headers","seqNum","sequenceNumber","data","relayType","AIBRIDGE_RELAY_TYPES","ANNOUNCEMENT","onCaptionServiceIdUpdate","headers","from","announceStatus","ANNOUNCE_STATUS","JOINED","processAnnouncementMessage","voiceaPayload","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","SPEAKER_NAME_UPDATE","processSpeakerNameUpdate","MANUAL","CAPTIONER","processManualTranscription","transcriptPayload","sender","data_source","type","TRANSCRIPTION_TYPE","MANUAL_CAPTION_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULT","trigger","EVENT_TRIGGERS","NEW_MANUAL_CAPTION","isFinal","transcriptId","id","transcripts","source","SPEAKER_NAME_UPDATED","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","LANGUAGE_DETECTED","isInSpokenLanguages","spokenLanguages","includes","language","languageCode","statusCode","CAPTION_LANGUAGE_UPDATE","errorCode","errorMessage","message","_voiceaPayload$transl","_voiceaPayload$transl2","_voiceaPayload$transl3","_voiceaPayload$transl4","_voiceaPayload$ASR$sp","_voiceaPayload$ASR","_voiceaPayload$ASR$sp2","_voiceaPayload$ASR2","voiceaLanguageOptions","captionLanguages","translation","allowed_languages","maxLanguages","max_languages","ASR","spoken_languages","currentSpokenLanguage","VOICEA_ANNOUNCEMENT","webex","internal","llm","isConnected","LLM_PRACTICE_SESSION","keepTranscriptionSubscribed","isPracticeSessionConnected","socket","getSocket","binding","getBinding","datachannelUrl","getDatachannelUrl","JOINING","listenToEvents","_this$getPublishTrans","getPublishTransport","send","recipients","route","captionServiceId","to","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","languageAssignment","request","method","url","getLocusUrl","body","transcribe","spokenLanguage","then","SPOKEN_LANGUAGE_UPDATE","isLLMConnected","_this$getPublishTrans2","translationLanguage","TRANSLATION_REQUEST","currentCaptionLanguage","timeStamp","_this$getPublishTrans3","start_millis","captionStatus","TURN_ON_CAPTION_STATUS","SENDING","caption","CAPTIONS_TURNED_ON","areCaptionsEnabled","ENABLED","announce","updateSubchannelSubscriptionsAndSyncCaptionState","subscribe","catch","IDLE","Error","isAnnounceProcessed","sendAnnouncement","_ref","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","abrupt","undefined","requestTurnOnCaptions","stop","_x","activate","transcribing","turnOnCaptions","enable","toggleManualCaptionStatus","TOGGLE_MANUAL_CAPTION_STATUS","manualCaption","meetingId","serviceId","requestLanguage","_callee2","_ref3","_ref3$subscribe","_ref3$unsubscribe","unsubscribe","isDataChannelTokenEnabled","_this$getPublishTrans4","_args2","_context2","sent","datachannelUri","options","keepSubscribed","updateSubchannelSubscriptions","DEFAULT_SPOKEN_LANGUAGE","_inherits2","_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 LLM_PRACTICE_SESSION,\n ANNOUNCE_STATUS,\n TURN_ON_CAPTION_STATUS,\n TOGGLE_MANUAL_CAPTION_STATUS,\n DEFAULT_SPOKEN_LANGUAGE,\n LANGUAGE_ASSIGNMENT,\n} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {\n AnnouncementPayload,\n CaptionLanguageResponse,\n SpeakerNameUpdatePayload,\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 captionServiceId?: string;\n\n private announceStatus: string;\n\n private captionStatus: string;\n\n private keepTranscriptionSubscribed: boolean;\n\n private toggleManualCaptionStatus: string;\n\n private currentSpokenLanguage?: string;\n\n private spokenLanguages: string[] = [];\n\n private currentCaptionLanguage?: 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.onCaptionServiceIdUpdate(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.VOICEA.SPEAKER_NAME_UPDATE:\n this.processSpeakerNameUpdate(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:\n case AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:\n this.processManualTranscription({\n ...e.data.transcriptPayload,\n sender: e.headers?.from,\n data_source: e.data.relayType,\n });\n break;\n default:\n break;\n }\n };\n\n /**\n * Listen to websocket messages\n * @returns {undefined}\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n // @ts-ignore\n this.webex.internal.llm.on('event:relay.event', this.eventProcessor);\n // @ts-ignore\n this.webex.internal.llm.on(`event:relay.event:${LLM_PRACTICE_SESSION}`, 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.keepTranscriptionSubscribed = false;\n this.captionServiceId = undefined;\n // @ts-ignore\n this.webex.internal.llm.off('event:relay.event', this.eventProcessor);\n // @ts-ignore\n this.webex.internal.llm.off(`event:relay.event:${LLM_PRACTICE_SESSION}`, this.eventProcessor);\n this.hasSubscribedToEvents = false;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n this.currentSpokenLanguage = undefined;\n this.currentCaptionLanguage = undefined;\n }\n\n /**\n * Initializes Voicea plugin\n * @param {any} args\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n this.areCaptionsEnabled = false;\n this.keepTranscriptionSubscribed = false;\n this.captionServiceId = undefined;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n this.currentSpokenLanguage = DEFAULT_SPOKEN_LANGUAGE;\n this.currentCaptionLanguage = undefined;\n }\n\n /**\n * Process manual Transcript and send alert\n * @param {TranscriptionResponse} transcriptPayload\n * @returns {void}\n */\n private processManualTranscription = (transcriptPayload: TranscriptionResponse): void => {\n if (\n transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT ||\n transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT\n ) {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {\n isFinal: transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,\n transcriptId: transcriptPayload.id,\n transcripts: transcriptPayload.transcripts,\n sender: transcriptPayload.sender,\n source: transcriptPayload.data_source,\n });\n }\n };\n\n /**\n * Process speaker name update and send alert\n * @param {SpeakerNameUpdatePayload} voiceaPayload\n * @returns {void}\n */\n private processSpeakerNameUpdate = (voiceaPayload: SpeakerNameUpdatePayload): void => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.SPEAKER_NAME_UPDATED, voiceaPayload);\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 case TRANSCRIPTION_TYPE.LANGUAGE_DETECTED: {\n const isInSpokenLanguages = this.spokenLanguages.includes(voiceaPayload.language);\n\n if (isInSpokenLanguages) {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.LANGUAGE_DETECTED, {\n languageCode: voiceaPayload.language,\n });\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 // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {statusCode: 200});\n } else {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {\n statusCode: voiceaPayload.errorCode,\n errorMessage: voiceaPayload.message,\n });\n }\n };\n\n /**\n * processes voicea announcement response and triggers event\n * @param {Object} voiceaPayload\n * @returns {void}\n */\n private processAnnouncementMessage = (voiceaPayload: AnnouncementPayload): void => {\n const voiceaLanguageOptions = {\n captionLanguages: voiceaPayload?.translation?.allowed_languages ?? [],\n maxLanguages: voiceaPayload?.translation?.max_languages ?? 0,\n spokenLanguages: voiceaPayload?.ASR?.spoken_languages ?? [],\n currentSpokenLanguage: this.currentSpokenLanguage,\n };\n\n this.spokenLanguages = voiceaPayload?.ASR?.spoken_languages ?? [];\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);\n };\n\n /**\n * Indicates whether the default or practice-session LLM connection is active.\n * @returns {boolean}\n */\n private isLLMConnected = (): boolean =>\n // @ts-ignore\n this.webex.internal.llm.isConnected() ||\n // @ts-ignore\n this.webex.internal.llm.isConnected(LLM_PRACTICE_SESSION);\n\n public getKeepTranscriptionSubscribed = (): boolean => this.keepTranscriptionSubscribed;\n\n /**\n * Resolves the active LLM publish transport, preferring the practice-session\n * connection only when that session is fully connected.\n * @returns {Object}\n */\n private getPublishTransport = () => {\n // @ts-ignore\n const {llm} = this.webex.internal;\n const isPracticeSessionConnected = llm.isConnected(LLM_PRACTICE_SESSION);\n\n return {\n socket: (isPracticeSessionConnected && llm.getSocket(LLM_PRACTICE_SESSION)) || llm.socket,\n binding:\n (isPracticeSessionConnected && llm.getBinding(LLM_PRACTICE_SESSION)) || llm.getBinding(),\n datachannelUrl:\n (isPracticeSessionConnected && llm.getDatachannelUrl(LLM_PRACTICE_SESSION)) ||\n llm.getDatachannelUrl(),\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 const {socket, binding} = this.getPublishTransport();\n socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: [\n {\n route: binding,\n },\n ],\n // If captionServiceId exists, send it as the 'to' header; otherwise keep headers empty.\n headers: this.captionServiceId ? {to: this.captionServiceId} : {},\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 * @param {\"DEFAULT\" | \"AUTO\" | \"MANUAL\"} languageAssignment\n * @returns {Promise}\n */\n public setSpokenLanguage = (\n languageCode: string,\n languageAssignment?: 'DEFAULT' | 'AUTO' | 'MANUAL'\n ): 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 ...(languageAssignment && {languageAssignment}),\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 if (!this.isLLMConnected()) {\n return;\n }\n\n const {socket, binding} = this.getPublishTransport();\n socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: [\n {\n route: binding,\n },\n ],\n headers: {\n to: this.captionServiceId,\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.currentCaptionLanguage = languageCode;\n\n this.seqNum += 1;\n };\n\n /**\n * Send manual closed captions to voicea service\n * @param {string} text\n * @param {number} timeStamp\n * @param {number[]} csis\n * @param {boolean} isFinal\n * @returns {void}\n */\n public sendManualClosedCaption = (\n text: string,\n timeStamp: number,\n csis: number[],\n isFinal: boolean\n ): void => {\n if (!this.isLLMConnected()) {\n return;\n }\n\n const {socket, binding} = this.getPublishTransport();\n\n socket?.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: [\n {\n route: binding,\n },\n ],\n headers: {},\n data: {\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER,\n transcriptPayload: {\n type: isFinal\n ? TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT\n : TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT,\n id: uuid.v4(),\n transcripts: [\n {\n text,\n start_millis: timeStamp,\n end_millis: timeStamp,\n csis,\n },\n ],\n transcript_id: uuid.v4(),\n },\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * request turn on Captions\n * @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English\n * @returns {Promise}\n */\n private requestTurnOnCaptions = (languageCode?): undefined | Promise<void> => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.SENDING;\n\n // only set the spoken language if it is provided\n const body = {\n transcribe: {caption: true},\n languageCode,\n };\n\n // @ts-ignore\n // eslint-disable-next-line newline-before-return\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body,\n })\n .then(() => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTIONS_TURNED_ON);\n\n this.areCaptionsEnabled = true;\n this.captionStatus = TURN_ON_CAPTION_STATUS.ENABLED;\n this.announce();\n this.updateSubchannelSubscriptionsAndSyncCaptionState({subscribe: ['transcription']}, true);\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 * is announce processed\n * @returns {boolean}\n */\n private isAnnounceProcessed = () => this.announceStatus === ANNOUNCE_STATUS.JOINED;\n\n /**\n * announce to voicea data chanel\n * @returns {void}\n */\n public announce = () => {\n if (this.isAnnounceProcessed()) {\n return;\n }\n if (!this.isLLMConnected()) {\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.captionStatus === TURN_ON_CAPTION_STATUS.SENDING) return undefined;\n\n if (!this.isLLMConnected()) {\n throw new Error('can not turn on captions before llm connected');\n }\n\n return this.requestTurnOnCaptions(spokenLanguage);\n };\n\n /**\n * Toggle transcribing for highlights\n * @param {boolean} activate true means to turn on transcribing and false means to turn off\n * @param {string} spokenLanguage language code for spoken language\n * @returns {Promise}\n */\n public toggleTranscribing = (\n activate: boolean,\n spokenLanguage?: string\n ): undefined | Promise<void> => {\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n transcribing: activate,\n },\n spokenLanguage,\n },\n }).then((): undefined | Promise<void> => {\n if (activate && !this.areCaptionsEnabled) {\n return this.turnOnCaptions(spokenLanguage);\n }\n\n return undefined;\n });\n };\n\n /**\n * Toggle turn on manual caption\n * @param {boolean} enable true means to turn on manual caption, false means to turn off\n * @returns {Promise}\n */\n public toggleManualCaption = (enable: boolean): undefined | Promise<void> => {\n if (this.toggleManualCaptionStatus === TOGGLE_MANUAL_CAPTION_STATUS.SENDING) return undefined;\n\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.SENDING;\n\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n manualCaption: {\n enable,\n },\n },\n })\n .then((): undefined | Promise<void> => {\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n\n return undefined;\n })\n .catch(() => {\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n throw new Error('toggle manual captions fail');\n });\n };\n\n /**\n * In meeting Spoken Language changed event\n * @param {string} languageCode\n * @param {string} meetingId\n * @returns {void}\n */\n public onSpokenLanguageUpdate = (languageCode: string, meetingId): void => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {languageCode, meetingId});\n this.currentSpokenLanguage = languageCode;\n };\n\n /**\n * In meeting Spoken Language changed event\n * @param {string} serviceId\n * @returns {void}\n */\n public onCaptionServiceIdUpdate = (serviceId: string): void => {\n if (!serviceId) {\n return;\n }\n if (this.captionServiceId !== serviceId) {\n this.captionServiceId = serviceId;\n // if service id value has changed and the translation language has been set, client needs to resend the translator language message to the LLM.\n if (this.currentCaptionLanguage) {\n this.requestLanguage(this.currentCaptionLanguage);\n }\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 * update LLM sub‑channel subscriptions.\n *\n * sends a single `subchannelSubscriptionRequest` to LLM,\n * allowing subscribe and unsubscribe subchannel.\n *\n * @param {string[]} options.subscribe Sub‑channels to subscribe to.\n * @param {string[]} options.unsubscribe Sub‑channels to unsubscribe from.\n * @returns {Promise}\n */\n public updateSubchannelSubscriptions = async ({\n subscribe = [],\n unsubscribe = [],\n }: {\n subscribe?: string[];\n unsubscribe?: string[];\n } = {}): Promise<void> => {\n // @ts-ignore\n const isDataChannelTokenEnabled = await this.webex.internal.llm.isDataChannelTokenEnabled();\n // @ts-ignore\n if (!this.isLLMConnected() || !isDataChannelTokenEnabled) return;\n\n const {socket, datachannelUrl} = this.getPublishTransport();\n\n // @ts-ignore\n socket.send({\n id: `${this.seqNum}`,\n type: 'subchannelSubscriptionRequest',\n data: {\n // @ts-ignore\n datachannelUri: datachannelUrl,\n subscribe,\n unsubscribe,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n\n this.seqNum += 1;\n };\n\n /**\n * Updates transcription subchannel subscriptions and records whether the\n * transcription subscription should be kept (and restored on reconnect).\n *\n * @param {Object} [options] - Subscription options.\n * @param {string[]} [options.subscribe] - Subchannels to subscribe to.\n * @param {string[]} [options.unsubscribe] - Subchannels to unsubscribe from.\n * @param {boolean} [keepSubscribed=false] - Whether the transcription\n * subscription should be kept and restored on reconnect.\n *\n * @returns {Promise<void>}\n */\n public updateSubchannelSubscriptionsAndSyncCaptionState = (\n options: {\n subscribe?: string[];\n unsubscribe?: string[];\n } = {},\n keepSubscribed = false\n ): Promise<void> => {\n this.keepTranscriptionSubscribed = keepSubscribed;\n\n return this.updateSubchannelSubscriptions(options);\n };\n}\n\nexport default VoiceaChannel;\n"],"mappings":"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","ignoreList":[]}
|
package/dist/voicea.types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["voicea.types.ts"],"sourcesContent":["/* eslint-disable camelcase */\n/* eslint-disable no-undef */\n\n/**\n * Type for payload\n */\ninterface AnnouncementPayload {\n translation: {\n max_languages: number;\n allowed_languages: string[];\n };\n\n ASR: {\n spoken_languages: string[];\n };\n}\n\n// eslint-disable-next-line no-undef\ntype TRANSCRIPTION_TYPES =\n | 'unknown'\n | 'eva_wake'\n | 'eva_thanks'\n | 'eva_cancel'\n | 'highlight_created'\n | 'transcript_interim_results'\n | 'transcript_final_result'\n | 'manual_caption_interim_results'\n | 'manual_caption_interim_result'\n | 'manual_caption_final_result';\n\n/**\n * Class for an Transcription Object\n */\ninterface Transcription {\n start_millis: number;\n end_millis: number;\n text: string;\n transcript_language_code: string;\n translations: {[x: string]: string};\n csis: number[];\n last_packet_timestamp_ms: number;\n timestamp: string;\n}\n\n/**\n * Highlights\n */\ninterface Highlight {\n highlight_id: string;\n transcript: string;\n highlight_label: string;\n highlight_source: string;\n start_millis: number;\n end_millis: number;\n csis: number[];\n}\n/**\n * Type for Transcription message\n */\ninterface TranscriptionResponse {\n type: TRANSCRIPTION_TYPES;\n id: string;\n sender: string;\n data_source: string;\n transcript_id: string;\n translations?: {[x: string]: string};\n transcripts?: Transcription[];\n transcript?: Transcription;\n highlight?: Highlight;\n csis: number[];\n data: string;\n command_response: string;\n language: string;\n}\n/**\n * Type for CaptionLanguageResponse\n */\ninterface CaptionLanguageResponse {\n requestId: string;\n statusCode: number;\n errorCode: number;\n message: string;\n}\n\ninterface IVoiceaChannel {\n setSpokenLanguage: (languageCode: string) => Promise<void>;\n onSpokenLanguageUpdate: (languageCode: string, meetingId: string) => void;\n requestLanguage: (languageCode: string) => void;\n turnOnCaptions: () => undefined | Promise<void>;\n toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;\n deregisterEvents: () => void;\n toggleManualCaption: (enable: boolean) => undefined | Promise<void>;\n sendManualClosedCaption: (\n text: string,\n timeStamp: number,\n csis: number[],\n isFinal: boolean\n ) => void;\n}\n\ntype MeetingTranscripts = {\n start_mills?: number;\n end_mills?: number;\n text: string;\n last_packet_timestamp_ms?: number;\n csis: Array<number>;\n transcript_language_code: string;\n translations?: {\n [key: string]: string;\n };\n timestamp?: string;\n};\n\ntype MeetingTranscriptPayload = {\n isFinal: boolean;\n transcriptId: string;\n transcripts: Array<MeetingTranscripts>;\n};\n\nexport type {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n Transcription,\n Highlight,\n IVoiceaChannel,\n MeetingTranscriptPayload,\n};\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["voicea.types.ts"],"sourcesContent":["/* eslint-disable camelcase */\n/* eslint-disable no-undef */\n\n/**\n * Type for payload\n */\ninterface AnnouncementPayload {\n translation: {\n max_languages: number;\n allowed_languages: string[];\n };\n\n ASR: {\n spoken_languages: string[];\n };\n}\n\n// eslint-disable-next-line no-undef\ntype TRANSCRIPTION_TYPES =\n | 'unknown'\n | 'eva_wake'\n | 'eva_thanks'\n | 'eva_cancel'\n | 'highlight_created'\n | 'transcript_interim_results'\n | 'transcript_final_result'\n | 'manual_caption_interim_results'\n | 'manual_caption_interim_result'\n | 'manual_caption_final_result';\n\n/**\n * Class for an Transcription Object\n */\ninterface Transcription {\n start_millis: number;\n end_millis: number;\n text: string;\n transcript_language_code: string;\n translations: {[x: string]: string};\n csis: number[];\n last_packet_timestamp_ms: number;\n timestamp: string;\n taggedSpeaker?: {\n speakerId?: string[];\n newName?: string;\n };\n}\n\ninterface TaggedSpeaker {\n csiId: number;\n speakerId: string;\n newName: string;\n}\n\ninterface SpeakerNameUpdatePayload {\n id?: string;\n taggedSpeakers: TaggedSpeaker[];\n}\n\n/**\n * Highlights\n */\ninterface Highlight {\n highlight_id: string;\n transcript: string;\n highlight_label: string;\n highlight_source: string;\n start_millis: number;\n end_millis: number;\n csis: number[];\n}\n/**\n * Type for Transcription message\n */\ninterface TranscriptionResponse {\n type: TRANSCRIPTION_TYPES;\n id: string;\n sender: string;\n data_source: string;\n transcript_id: string;\n translations?: {[x: string]: string};\n transcripts?: Transcription[];\n transcript?: Transcription;\n highlight?: Highlight;\n csis: number[];\n data: string;\n command_response: string;\n language: string;\n}\n/**\n * Type for CaptionLanguageResponse\n */\ninterface CaptionLanguageResponse {\n requestId: string;\n statusCode: number;\n errorCode: number;\n message: string;\n}\n\ninterface IVoiceaChannel {\n setSpokenLanguage: (languageCode: string) => Promise<void>;\n onSpokenLanguageUpdate: (languageCode: string, meetingId: string) => void;\n requestLanguage: (languageCode: string) => void;\n turnOnCaptions: () => undefined | Promise<void>;\n toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;\n deregisterEvents: () => void;\n toggleManualCaption: (enable: boolean) => undefined | Promise<void>;\n sendManualClosedCaption: (\n text: string,\n timeStamp: number,\n csis: number[],\n isFinal: boolean\n ) => void;\n}\n\ntype MeetingTranscripts = {\n start_mills?: number;\n end_mills?: number;\n text: string;\n last_packet_timestamp_ms?: number;\n csis: Array<number>;\n transcript_language_code: string;\n translations?: {\n [key: string]: string;\n };\n timestamp?: string;\n taggedSpeaker?: {\n speakerId?: string[];\n newName?: string;\n };\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 TaggedSpeaker,\n SpeakerNameUpdatePayload,\n IVoiceaChannel,\n MeetingTranscriptPayload,\n};\n"],"mappings":"","ignoreList":[]}
|
package/package.json
CHANGED
package/src/constants.ts
CHANGED
|
@@ -9,6 +9,7 @@ export const EVENT_TRIGGERS = {
|
|
|
9
9
|
TRANSCRIBING_OFF: 'voicea:transcribingOff',
|
|
10
10
|
|
|
11
11
|
NEW_CAPTION: 'voicea:newCaption',
|
|
12
|
+
SPEAKER_NAME_UPDATED: 'voicea:speakerNameUpdated',
|
|
12
13
|
EVA_COMMAND: 'voicea:wxa',
|
|
13
14
|
HIGHLIGHT_CREATED: 'voicea:highlightCreated',
|
|
14
15
|
NEW_MANUAL_CAPTION: 'aibridge:newManualCaption',
|
|
@@ -23,6 +24,7 @@ export const AIBRIDGE_RELAY_TYPES = {
|
|
|
23
24
|
TRANSLATION_REQUEST: 'voicea.transl.req',
|
|
24
25
|
TRANSLATION_RESPONSE: 'voicea.transl.rsp',
|
|
25
26
|
TRANSCRIPTION: 'voicea.transcription',
|
|
27
|
+
SPEAKER_NAME_UPDATE: 'voicea.update_speakername',
|
|
26
28
|
},
|
|
27
29
|
MANUAL: {
|
|
28
30
|
TRANSCRIPTION: 'aibridge.manual_transcription',
|
package/src/index.ts
CHANGED
|
@@ -1,10 +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
|
+
import type {MeetingTranscriptPayload, SpeakerNameUpdatePayload} from './voicea.types';
|
|
5
5
|
|
|
6
6
|
WebexCore.registerInternalPlugin('voicea', VoiceaChannel, {});
|
|
7
7
|
|
|
8
8
|
export {default} from './voicea';
|
|
9
|
-
export {type MeetingTranscriptPayload};
|
|
9
|
+
export {type MeetingTranscriptPayload, SpeakerNameUpdatePayload};
|
|
10
10
|
export {EVENT_TRIGGERS, TURN_ON_CAPTION_STATUS} from './constants';
|
package/src/voicea.ts
CHANGED
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
import {
|
|
18
18
|
AnnouncementPayload,
|
|
19
19
|
CaptionLanguageResponse,
|
|
20
|
+
SpeakerNameUpdatePayload,
|
|
20
21
|
TranscriptionResponse,
|
|
21
22
|
IVoiceaChannel,
|
|
22
23
|
} from './voicea.types';
|
|
@@ -71,6 +72,9 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
71
72
|
case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:
|
|
72
73
|
this.processTranscription(e.data.voiceaPayload);
|
|
73
74
|
break;
|
|
75
|
+
case AIBRIDGE_RELAY_TYPES.VOICEA.SPEAKER_NAME_UPDATE:
|
|
76
|
+
this.processSpeakerNameUpdate(e.data.voiceaPayload);
|
|
77
|
+
break;
|
|
74
78
|
case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:
|
|
75
79
|
case AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:
|
|
76
80
|
this.processManualTranscription({
|
|
@@ -156,6 +160,16 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
156
160
|
}
|
|
157
161
|
};
|
|
158
162
|
|
|
163
|
+
/**
|
|
164
|
+
* Process speaker name update and send alert
|
|
165
|
+
* @param {SpeakerNameUpdatePayload} voiceaPayload
|
|
166
|
+
* @returns {void}
|
|
167
|
+
*/
|
|
168
|
+
private processSpeakerNameUpdate = (voiceaPayload: SpeakerNameUpdatePayload): void => {
|
|
169
|
+
// @ts-ignore
|
|
170
|
+
this.trigger(EVENT_TRIGGERS.SPEAKER_NAME_UPDATED, voiceaPayload);
|
|
171
|
+
};
|
|
172
|
+
|
|
159
173
|
/**
|
|
160
174
|
* Process Transcript and send alert
|
|
161
175
|
* @param {TranscriptionResponse} voiceaPayload
|
package/src/voicea.types.ts
CHANGED
|
@@ -40,6 +40,21 @@ interface Transcription {
|
|
|
40
40
|
csis: number[];
|
|
41
41
|
last_packet_timestamp_ms: number;
|
|
42
42
|
timestamp: string;
|
|
43
|
+
taggedSpeaker?: {
|
|
44
|
+
speakerId?: string[];
|
|
45
|
+
newName?: string;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
interface TaggedSpeaker {
|
|
50
|
+
csiId: number;
|
|
51
|
+
speakerId: string;
|
|
52
|
+
newName: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
interface SpeakerNameUpdatePayload {
|
|
56
|
+
id?: string;
|
|
57
|
+
taggedSpeakers: TaggedSpeaker[];
|
|
43
58
|
}
|
|
44
59
|
|
|
45
60
|
/**
|
|
@@ -109,6 +124,10 @@ type MeetingTranscripts = {
|
|
|
109
124
|
[key: string]: string;
|
|
110
125
|
};
|
|
111
126
|
timestamp?: string;
|
|
127
|
+
taggedSpeaker?: {
|
|
128
|
+
speakerId?: string[];
|
|
129
|
+
newName?: string;
|
|
130
|
+
};
|
|
112
131
|
};
|
|
113
132
|
|
|
114
133
|
type MeetingTranscriptPayload = {
|
|
@@ -123,6 +142,8 @@ export type {
|
|
|
123
142
|
TranscriptionResponse,
|
|
124
143
|
Transcription,
|
|
125
144
|
Highlight,
|
|
145
|
+
TaggedSpeaker,
|
|
146
|
+
SpeakerNameUpdatePayload,
|
|
126
147
|
IVoiceaChannel,
|
|
127
148
|
MeetingTranscriptPayload,
|
|
128
149
|
};
|
package/test/unit/spec/voicea.js
CHANGED
|
@@ -908,6 +908,35 @@ describe('plugin-voicea', () => {
|
|
|
908
908
|
});
|
|
909
909
|
});
|
|
910
910
|
|
|
911
|
+
it('processes speaker name update', async () => {
|
|
912
|
+
const triggerSpy = sinon.spy();
|
|
913
|
+
const voiceaPayload = {
|
|
914
|
+
id: 'speaker-name-update-1',
|
|
915
|
+
taggedSpeakers: [
|
|
916
|
+
{
|
|
917
|
+
csiId: 3556942592,
|
|
918
|
+
speakerId: '1',
|
|
919
|
+
newName: 'Alice',
|
|
920
|
+
},
|
|
921
|
+
],
|
|
922
|
+
};
|
|
923
|
+
|
|
924
|
+
voiceaService.on(EVENT_TRIGGERS.SPEAKER_NAME_UPDATED, triggerSpy);
|
|
925
|
+
|
|
926
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
927
|
+
await voiceaService.webex.internal.llm._emit('event:relay.event', {
|
|
928
|
+
headers: {from: 'ws'},
|
|
929
|
+
data: {
|
|
930
|
+
relayType: 'voicea.update_speakername',
|
|
931
|
+
voiceaPayload,
|
|
932
|
+
},
|
|
933
|
+
sequenceNumber: 23,
|
|
934
|
+
});
|
|
935
|
+
|
|
936
|
+
assert.calledOnceWithExactly(triggerSpy, voiceaPayload);
|
|
937
|
+
assert.equal(voiceaService.seqNum, 24);
|
|
938
|
+
});
|
|
939
|
+
|
|
911
940
|
it('processes a eva wake up', async () => {
|
|
912
941
|
voiceaService.on(EVENT_TRIGGERS.EVA_COMMAND, triggerSpy);
|
|
913
942
|
|