@webex/internal-plugin-voicea 3.12.0-llmrefactor.5 → 3.12.0-llmrefactor.6

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
@@ -13,6 +13,7 @@ var EVENT_TRIGGERS = exports.EVENT_TRIGGERS = {
13
13
  TRANSCRIBING_ON: 'voicea:transcribingOn',
14
14
  TRANSCRIBING_OFF: 'voicea:transcribingOff',
15
15
  NEW_CAPTION: 'voicea:newCaption',
16
+ SPEAKER_NAME_UPDATED: 'voicea:speakerNameUpdated',
16
17
  EVA_COMMAND: 'voicea:wxa',
17
18
  HIGHLIGHT_CREATED: 'voicea:highlightCreated',
18
19
  NEW_MANUAL_CAPTION: 'aibridge:newManualCaption',
@@ -24,7 +25,8 @@ var AIBRIDGE_RELAY_TYPES = exports.AIBRIDGE_RELAY_TYPES = {
24
25
  CLIENT_ANNOUNCEMENT: 'client.annc',
25
26
  TRANSLATION_REQUEST: 'voicea.transl.req',
26
27
  TRANSLATION_RESPONSE: 'voicea.transl.rsp',
27
- TRANSCRIPTION: 'voicea.transcription'
28
+ TRANSCRIPTION: 'voicea.transcription',
29
+ SPEAKER_NAME_UPDATE: 'voicea.update_speakername'
28
30
  },
29
31
  MANUAL: {
30
32
  TRANSCRIPTION: 'aibridge.manual_transcription',
@@ -1 +1 @@
1
- {"version":3,"names":["EVENT_TRIGGERS","exports","VOICEA_ANNOUNCEMENT","CAPTION_LANGUAGE_UPDATE","SPOKEN_LANGUAGE_UPDATE","CAPTIONS_TURNED_ON","TRANSCRIBING_ON","TRANSCRIBING_OFF","NEW_CAPTION","EVA_COMMAND","HIGHLIGHT_CREATED","NEW_MANUAL_CAPTION","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 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":";;;;;;;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,2BAA2B;EAE/CC,iBAAiB,EAAE;AACrB,CAAC;AAEM,IAAMC,oBAAoB,GAAAZ,OAAA,CAAAY,oBAAA,GAAG;EAClCC,MAAM,EAAE;IACNC,YAAY,EAAE,aAAa;IAC3BC,mBAAmB,EAAE,aAAa;IAClCC,mBAAmB,EAAE,mBAAmB;IACxCC,oBAAoB,EAAE,mBAAmB;IACzCC,aAAa,EAAE;EACjB,CAAC;EACDC,MAAM,EAAE;IACND,aAAa,EAAE,+BAA+B;IAC9CE,SAAS,EAAE;EACb;AACF,CAAC;AAEM,IAAMC,kBAAkB,GAAArB,OAAA,CAAAqB,kBAAA,GAAG;EAChCC,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE,YAAY;EACxBhB,iBAAiB,EAAE,mBAAmB;EACtCiB,0BAA0B,EAAE,4BAA4B;EACxDC,uBAAuB,EAAE,yBAAyB;EAClDC,8BAA8B,EAAE,gCAAgC;EAChEC,6BAA6B,EAAE,+BAA+B;EAC9DC,2BAA2B,EAAE,6BAA6B;EAC1DnB,iBAAiB,EAAE;AACrB,CAAC;AAEM,IAAME,MAAM,GAAAb,OAAA,CAAAa,MAAA,GAAG,QAAQ;AACvB,IAAMkB,uBAAuB,GAAA/B,OAAA,CAAA+B,uBAAA,GAAG,IAAI;AAEpC,IAAMC,eAAe,GAAAhC,OAAA,CAAAgC,eAAA,GAAG;EAC7BC,IAAI,EAAE,MAAM;EACZC,MAAM,EAAE,QAAQ;EAChBC,OAAO,EAAE;AACX,CAAC;AAEM,IAAMC,sBAAsB,GAAApC,OAAA,CAAAoC,sBAAA,GAAG;EACpCH,IAAI,EAAE,MAAM;EACZI,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE;AACX,CAAC;AAEM,IAAMC,4BAA4B,GAAAvC,OAAA,CAAAuC,4BAAA,GAAG;EAC1CN,IAAI,EAAE,MAAM;EACZK,OAAO,EAAE;AACX,CAAC;AAEM,IAAME,mBAAmB,GAAAxC,OAAA,CAAAwC,mBAAA,GAAG;EACjCC,IAAI,EAAE,MAAM;EACZtB,MAAM,EAAE,QAAQ;EAChBuB,OAAO,EAAE;AACX,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["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 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":";;;;;;;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,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","_voiceaPlugin","_interopRequireDefault","_voicea","_constants","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","registerInternalPlugin","Voicea","_default","exports"],"sources":["index.ts"],"sourcesContent":["import * as WebexCore from '@webex/webex-core';\n\nimport Voicea from './voicea-plugin';\nimport {VoiceaChannel} from './voicea';\nimport type {MeetingTranscriptPayload} from './voicea.types';\n\nWebexCore.registerInternalPlugin('voicea', Voicea, {});\n\nexport {Voicea as VoiceaPlugin, VoiceaChannel};\nexport default Voicea;\nexport {type MeetingTranscriptPayload};\nexport {EVENT_TRIGGERS, TURN_ON_CAPTION_STATUS} from './constants';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,aAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AAQA,IAAAI,UAAA,GAAAJ,OAAA;AAAmE,SAAAD,wBAAAM,CAAA,EAAAC,CAAA,6BAAAC,QAAA,MAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAR,uBAAA,YAAAA,wBAAAM,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;AALnER,SAAS,CAAC2B,sBAAsB,CAAC,QAAQ,EAAEC,qBAAM,EAAE,CAAC,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAb,OAAA,GAGxCW,qBAAM","ignoreList":[]}
1
+ {"version":3,"names":["WebexCore","_interopRequireWildcard","require","_voiceaPlugin","_interopRequireDefault","_voicea","_constants","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","registerInternalPlugin","Voicea","_default","exports"],"sources":["index.ts"],"sourcesContent":["import * as WebexCore from '@webex/webex-core';\n\nimport Voicea from './voicea-plugin';\nimport {VoiceaChannel} from './voicea';\nimport type {MeetingTranscriptPayload, SpeakerNameUpdatePayload} from './voicea.types';\n\nWebexCore.registerInternalPlugin('voicea', Voicea, {});\n\nexport {Voicea as VoiceaPlugin, VoiceaChannel};\nexport default Voicea;\nexport {type MeetingTranscriptPayload, type SpeakerNameUpdatePayload};\nexport {EVENT_TRIGGERS, TURN_ON_CAPTION_STATUS} from './constants';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,aAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AAQA,IAAAI,UAAA,GAAAJ,OAAA;AAAmE,SAAAD,wBAAAM,CAAA,EAAAC,CAAA,6BAAAC,QAAA,MAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAR,uBAAA,YAAAA,wBAAAM,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;AALnER,SAAS,CAAC2B,sBAAsB,CAAC,QAAQ,EAAEC,qBAAM,EAAE,CAAC,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAb,OAAA,GAGxCW,qBAAM","ignoreList":[]}
@@ -6,6 +6,7 @@ export declare const EVENT_TRIGGERS: {
6
6
  TRANSCRIBING_ON: string;
7
7
  TRANSCRIBING_OFF: string;
8
8
  NEW_CAPTION: string;
9
+ SPEAKER_NAME_UPDATED: string;
9
10
  EVA_COMMAND: string;
10
11
  HIGHLIGHT_CREATED: string;
11
12
  NEW_MANUAL_CAPTION: string;
@@ -18,6 +19,7 @@ export declare const AIBRIDGE_RELAY_TYPES: {
18
19
  TRANSLATION_REQUEST: string;
19
20
  TRANSLATION_RESPONSE: string;
20
21
  TRANSCRIPTION: string;
22
+ SPEAKER_NAME_UPDATE: string;
21
23
  };
22
24
  MANUAL: {
23
25
  TRANSCRIPTION: string;
@@ -1,7 +1,7 @@
1
1
  import Voicea from './voicea-plugin';
2
2
  import { VoiceaChannel } from './voicea';
3
- import type { MeetingTranscriptPayload } from './voicea.types';
3
+ import type { MeetingTranscriptPayload, SpeakerNameUpdatePayload } from './voicea.types';
4
4
  export { Voicea as VoiceaPlugin, VoiceaChannel };
5
5
  export default Voicea;
6
- export { type MeetingTranscriptPayload };
6
+ export { type MeetingTranscriptPayload, type SpeakerNameUpdatePayload };
7
7
  export { EVENT_TRIGGERS, TURN_ON_CAPTION_STATUS } from './constants';
@@ -60,6 +60,12 @@ export declare class VoiceaChannel extends EventEmitter implements IVoiceaChanne
60
60
  * @returns {void}
61
61
  */
62
62
  private processManualTranscription;
63
+ /**
64
+ * Process speaker name update and send alert
65
+ * @param {SpeakerNameUpdatePayload} voiceaPayload
66
+ * @returns {void}
67
+ */
68
+ private processSpeakerNameUpdate;
63
69
  /**
64
70
  * Process Transcript and send alert
65
71
  * @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
@@ -89,10 +102,14 @@ type MeetingTranscripts = {
89
102
  [key: string]: string;
90
103
  };
91
104
  timestamp?: string;
105
+ taggedSpeaker?: {
106
+ speakerId?: string[];
107
+ newName?: string;
108
+ };
92
109
  };
93
110
  type MeetingTranscriptPayload = {
94
111
  isFinal: boolean;
95
112
  transcriptId: string;
96
113
  transcripts: Array<MeetingTranscripts>;
97
114
  };
98
- export type { AnnouncementPayload, CaptionLanguageResponse, TranscriptionResponse, Transcription, Highlight, IVoiceaChannel, MeetingTranscriptPayload, };
115
+ export type { AnnouncementPayload, CaptionLanguageResponse, TranscriptionResponse, Transcription, Highlight, TaggedSpeaker, SpeakerNameUpdatePayload, IVoiceaChannel, MeetingTranscriptPayload, };
package/dist/voicea.js CHANGED
@@ -80,6 +80,9 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
80
80
  case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:
81
81
  _this.processTranscription(e.data.voiceaPayload);
82
82
  break;
83
+ case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.SPEAKER_NAME_UPDATE:
84
+ _this.processSpeakerNameUpdate(e.data.voiceaPayload);
85
+ break;
83
86
  case _constants.AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:
84
87
  case _constants.AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:
85
88
  _this.processManualTranscription(_objectSpread(_objectSpread({}, e.data.transcriptPayload), {}, {
@@ -107,6 +110,15 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
107
110
  });
108
111
  }
109
112
  });
113
+ /**
114
+ * Process speaker name update and send alert
115
+ * @param {SpeakerNameUpdatePayload} voiceaPayload
116
+ * @returns {void}
117
+ */
118
+ (0, _defineProperty2.default)(_this, "processSpeakerNameUpdate", function (voiceaPayload) {
119
+ // @ts-ignore
120
+ _this.emit(_constants.EVENT_TRIGGERS.SPEAKER_NAME_UPDATED, voiceaPayload);
121
+ });
110
122
  /**
111
123
  * Process Transcript and send alert
112
124
  * @param {TranscriptionResponse} voiceaPayload
@@ -1 +1 @@
1
- {"version":3,"names":["_events","_interopRequireDefault","require","_uuid","_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","_EventEmitter","llmChannel","request","_this","_classCallCheck2","_e$headers","seqNum","sequenceNumber","data","relayType","AIBRIDGE_RELAY_TYPES","VOICEA","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","emit","EVENT_TRIGGERS","NEW_MANUAL_CAPTION","isFinal","transcriptId","id","transcripts","source","_voiceaPayload$transc","_voiceaPayload$highli","_voiceaPayload$highli2","_voiceaPayload$highli3","_voiceaPayload$highli4","_voiceaPayload$highli5","_voiceaPayload$highli6","_voiceaPayload$highli7","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","isConnected","keepTranscriptionSubscribed","JOINING","socket","getSocket","binding","getBinding","payload","concat","recipients","route","captionServiceId","to","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","send","languageAssignment","method","url","getLocusUrl","body","transcribe","spokenLanguage","then","SPOKEN_LANGUAGE_UPDATE","isLLMConnected","translationLanguage","TRANSLATION_REQUEST","currentCaptionLanguage","timeStamp","start_millis","captionStatus","TURN_ON_CAPTION_STATUS","SENDING","locusUrl","caption","CAPTIONS_TURNED_ON","areCaptionsEnabled","ENABLED","announce","updateSubchannelSubscriptionsAndSyncCaptionState","subscribe","catch","error","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","datachannelUrl","_args2","_context2","sent","getDatachannelUrl","datachannelUri","options","keepSubscribed","updateSubchannelSubscriptions","DEFAULT_SPOKEN_LANGUAGE","on","eventProcessor","hasSubscribedToEvents","_inherits2","_createClass2","key","value","deregisterEvents","off","_switchLLMChannel","_callee3","newLLMChannel","captionsWereOn","_context3","switchLLMChannel","_x2","EventEmitter","_default"],"sources":["voicea.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport uuid from 'uuid';\n// @ts-ignore - webex-core types\nimport {config} from '@webex/webex-core';\n\n// @ts-ignore - internal-plugin-llm types\nimport type LLMChannel from '@webex/internal-plugin-llm';\nimport {\n EVENT_TRIGGERS,\n AIBRIDGE_RELAY_TYPES,\n TRANSCRIPTION_TYPE,\n ANNOUNCE_STATUS,\n TURN_ON_CAPTION_STATUS,\n TOGGLE_MANUAL_CAPTION_STATUS,\n DEFAULT_SPOKEN_LANGUAGE,\n} from './constants';\nimport {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n IVoiceaChannel,\n} from './voicea.types';\nimport {millisToMinutesAndSeconds} from './utils';\n\n/**\n * @description VoiceaChannel — handles voicea/transcription functionality for a single LLM connection.\n * Created via `webex.internal.voicea.createChannel(llmChannel)`. The caller owns the\n * channel and is responsible for its lifecycle.\n * @export\n * @class VoiceaChannel\n */\nexport class VoiceaChannel extends EventEmitter implements IVoiceaChannel {\n private request: (options: {method: string; url: string; body?: object}) => Promise<any>;\n private llmChannel: LLMChannel;\n\n private seqNum: number;\n private areCaptionsEnabled: boolean;\n private hasSubscribedToEvents = false;\n private captionServiceId?: string;\n private announceStatus: string;\n private captionStatus: string;\n\n private keepTranscriptionSubscribed: boolean;\n\n private toggleManualCaptionStatus: string;\n private currentSpokenLanguage?: string;\n private spokenLanguages: string[] = [];\n private currentCaptionLanguage?: string;\n\n /**\n * Creates a VoiceaChannel bound to the given LLMChannel\n * @param {LLMChannel} llmChannel - The LLM channel to use\n * @param {Function} request - The request function for making API calls (typically webex.request bound to webex)\n */\n constructor(\n llmChannel: LLMChannel,\n request: (options: {method: string; url: string; body?: object}) => Promise<any>\n ) {\n super();\n this.llmChannel = llmChannel;\n this.request = request;\n\n this.seqNum = 1;\n this.areCaptionsEnabled = 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 this.keepTranscriptionSubscribed = false;\n\n // Subscribe to relay events from the LLM channel\n this.llmChannel.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n }\n\n /**\n * Process events from LLM channel\n * @param {Object} e - Event data\n * @returns {void}\n */\n private eventProcessor = (e: any): void => {\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 * Deregister events and clean up\n * @returns {void}\n */\n public deregisterEvents(): void {\n this.areCaptionsEnabled = false;\n this.keepTranscriptionSubscribed = false;\n this.captionServiceId = undefined;\n\n if (this.hasSubscribedToEvents) {\n this.llmChannel.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n }\n\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 * Switch to a different LLM channel while preserving caption state.\n * Used when transitioning between main meeting and practice session.\n * - Preserves keepTranscriptionSubscribed and spokenLanguage state\n * - Unsubscribes from old channel, subscribes to new channel\n * - Re-announces and re-enables captions if they were on\n * @param {LLMChannel} newLLMChannel - The new LLM channel to switch to\n * @returns {Promise<void>}\n */\n public async switchLLMChannel(newLLMChannel: LLMChannel): Promise<void> {\n // Save current state\n const captionsWereOn = this.keepTranscriptionSubscribed;\n const spokenLanguage = this.currentSpokenLanguage;\n\n // Unsubscribe from old channel\n if (this.hasSubscribedToEvents && this.llmChannel) {\n this.llmChannel.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n }\n\n // Switch to new channel\n this.llmChannel = newLLMChannel;\n\n // Subscribe to new channel\n this.llmChannel.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n\n // Reset announcement state for new connection\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n this.captionServiceId = undefined;\n this.areCaptionsEnabled = false;\n\n // Re-announce and re-enable captions if they were on\n if (captionsWereOn) {\n await this.turnOnCaptions(spokenLanguage);\n }\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 this.emit(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 this.emit(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 this.emit(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 this.emit(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 ?? 0),\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n this.emit(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 this.emit(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 if (isInSpokenLanguages) {\n this.emit(EVENT_TRIGGERS.LANGUAGE_DETECTED, {\n languageCode: voiceaPayload.language,\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 this.emit(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {statusCode: 200});\n } else {\n this.emit(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 this.emit(EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);\n };\n\n /**\n * Indicates whether the LLM channel is connected.\n * @returns {boolean}\n */\n public isLLMConnected = (): boolean => this.llmChannel.isConnected();\n\n public getKeepTranscriptionSubscribed = (): boolean => this.keepTranscriptionSubscribed;\n\n /**\n * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n public sendAnnouncement = (): void => {\n this.announceStatus = ANNOUNCE_STATUS.JOINING;\n const socket = this.llmChannel.getSocket();\n const binding = this.llmChannel.getBinding();\n\n const payload = {\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 socket.send(payload);\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 this.request({\n method: 'PUT',\n url: `${this.llmChannel.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n spokenLanguage: languageCode,\n ...(languageAssignment && {languageAssignment}),\n },\n },\n }).then(() => {\n this.emit(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 = this.llmChannel.getSocket();\n const binding = this.llmChannel.getBinding();\n\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 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 = this.llmChannel.getSocket();\n const binding = this.llmChannel.getBinding();\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\n * @returns {Promise}\n */\n private requestTurnOnCaptions = (languageCode?: string): undefined | Promise<void> => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.SENDING;\n\n const locusUrl = this.llmChannel.getLocusUrl();\n\n const body = {\n transcribe: {caption: true},\n languageCode,\n };\n\n return this.request({\n method: 'PUT',\n url: `${locusUrl}/controls/`,\n body,\n })\n .then(() => {\n this.emit(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((error) => {\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 = (): boolean =>\n [ANNOUNCE_STATUS.JOINING, ANNOUNCE_STATUS.JOINED].includes(this.announceStatus);\n\n /**\n * is announce processed\n * @returns {boolean}\n */\n private isAnnounceProcessed = (): boolean => this.announceStatus === ANNOUNCE_STATUS.JOINED;\n\n /**\n * announce to voicea data channel\n * @returns {void}\n */\n public announce = (): void => {\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 = (): boolean =>\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?: string): Promise<void | undefined> => {\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 return this.request({\n method: 'PUT',\n url: `${this.llmChannel.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 return this.request({\n method: 'PUT',\n url: `${this.llmChannel.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: string): void => {\n this.emit(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 (this.currentCaptionLanguage) {\n this.requestLanguage(this.currentCaptionLanguage);\n }\n }\n };\n\n /**\n * get caption status\n * @returns {string}\n */\n public getCaptionStatus = (): string => this.captionStatus;\n\n /**\n * get announce status\n * @returns {string}\n */\n public getAnnounceStatus = (): string => this.announceStatus;\n\n /**\n * update LLM sub‑channel subscriptions.\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 if (!this.isLLMConnected()) return;\n\n const isDataChannelTokenEnabled = await this.llmChannel.isDataChannelTokenEnabled();\n if (!isDataChannelTokenEnabled) return;\n\n const socket = this.llmChannel.getSocket();\n const datachannelUrl = this.llmChannel.getDatachannelUrl();\n\n socket.send({\n id: `${this.seqNum}`,\n type: 'subchannelSubscriptionRequest',\n data: {\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":["_events","_interopRequireDefault","require","_uuid","_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","_EventEmitter","llmChannel","request","_this","_classCallCheck2","_e$headers","seqNum","sequenceNumber","data","relayType","AIBRIDGE_RELAY_TYPES","VOICEA","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","emit","EVENT_TRIGGERS","NEW_MANUAL_CAPTION","isFinal","transcriptId","id","transcripts","source","SPEAKER_NAME_UPDATED","_voiceaPayload$transc","_voiceaPayload$highli","_voiceaPayload$highli2","_voiceaPayload$highli3","_voiceaPayload$highli4","_voiceaPayload$highli5","_voiceaPayload$highli6","_voiceaPayload$highli7","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","isConnected","keepTranscriptionSubscribed","JOINING","socket","getSocket","binding","getBinding","payload","concat","recipients","route","captionServiceId","to","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","send","languageAssignment","method","url","getLocusUrl","body","transcribe","spokenLanguage","then","SPOKEN_LANGUAGE_UPDATE","isLLMConnected","translationLanguage","TRANSLATION_REQUEST","currentCaptionLanguage","timeStamp","start_millis","captionStatus","TURN_ON_CAPTION_STATUS","SENDING","locusUrl","caption","CAPTIONS_TURNED_ON","areCaptionsEnabled","ENABLED","announce","updateSubchannelSubscriptionsAndSyncCaptionState","subscribe","catch","error","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","datachannelUrl","_args2","_context2","sent","getDatachannelUrl","datachannelUri","options","keepSubscribed","updateSubchannelSubscriptions","DEFAULT_SPOKEN_LANGUAGE","on","eventProcessor","hasSubscribedToEvents","_inherits2","_createClass2","key","value","deregisterEvents","off","_switchLLMChannel","_callee3","newLLMChannel","captionsWereOn","_context3","switchLLMChannel","_x2","EventEmitter","_default"],"sources":["voicea.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport uuid from 'uuid';\n// @ts-ignore - webex-core types\nimport {config} from '@webex/webex-core';\n\n// @ts-ignore - internal-plugin-llm types\nimport type LLMChannel from '@webex/internal-plugin-llm';\nimport {\n EVENT_TRIGGERS,\n AIBRIDGE_RELAY_TYPES,\n TRANSCRIPTION_TYPE,\n ANNOUNCE_STATUS,\n TURN_ON_CAPTION_STATUS,\n TOGGLE_MANUAL_CAPTION_STATUS,\n DEFAULT_SPOKEN_LANGUAGE,\n} from './constants';\nimport {\n AnnouncementPayload,\n CaptionLanguageResponse,\n SpeakerNameUpdatePayload,\n TranscriptionResponse,\n IVoiceaChannel,\n} from './voicea.types';\nimport {millisToMinutesAndSeconds} from './utils';\n\n/**\n * @description VoiceaChannel — handles voicea/transcription functionality for a single LLM connection.\n * Created via `webex.internal.voicea.createChannel(llmChannel)`. The caller owns the\n * channel and is responsible for its lifecycle.\n * @export\n * @class VoiceaChannel\n */\nexport class VoiceaChannel extends EventEmitter implements IVoiceaChannel {\n private request: (options: {method: string; url: string; body?: object}) => Promise<any>;\n private llmChannel: LLMChannel;\n\n private seqNum: number;\n private areCaptionsEnabled: boolean;\n private hasSubscribedToEvents = false;\n private captionServiceId?: string;\n private announceStatus: string;\n private captionStatus: string;\n\n private keepTranscriptionSubscribed: boolean;\n\n private toggleManualCaptionStatus: string;\n private currentSpokenLanguage?: string;\n private spokenLanguages: string[] = [];\n private currentCaptionLanguage?: string;\n\n /**\n * Creates a VoiceaChannel bound to the given LLMChannel\n * @param {LLMChannel} llmChannel - The LLM channel to use\n * @param {Function} request - The request function for making API calls (typically webex.request bound to webex)\n */\n constructor(\n llmChannel: LLMChannel,\n request: (options: {method: string; url: string; body?: object}) => Promise<any>\n ) {\n super();\n this.llmChannel = llmChannel;\n this.request = request;\n\n this.seqNum = 1;\n this.areCaptionsEnabled = 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 this.keepTranscriptionSubscribed = false;\n\n // Subscribe to relay events from the LLM channel\n this.llmChannel.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n }\n\n /**\n * Process events from LLM channel\n * @param {Object} e - Event data\n * @returns {void}\n */\n private eventProcessor = (e: any): void => {\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 * Deregister events and clean up\n * @returns {void}\n */\n public deregisterEvents(): void {\n this.areCaptionsEnabled = false;\n this.keepTranscriptionSubscribed = false;\n this.captionServiceId = undefined;\n\n if (this.hasSubscribedToEvents) {\n this.llmChannel.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n }\n\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 * Switch to a different LLM channel while preserving caption state.\n * Used when transitioning between main meeting and practice session.\n * - Preserves keepTranscriptionSubscribed and spokenLanguage state\n * - Unsubscribes from old channel, subscribes to new channel\n * - Re-announces and re-enables captions if they were on\n * @param {LLMChannel} newLLMChannel - The new LLM channel to switch to\n * @returns {Promise<void>}\n */\n public async switchLLMChannel(newLLMChannel: LLMChannel): Promise<void> {\n // Save current state\n const captionsWereOn = this.keepTranscriptionSubscribed;\n const spokenLanguage = this.currentSpokenLanguage;\n\n // Unsubscribe from old channel\n if (this.hasSubscribedToEvents && this.llmChannel) {\n this.llmChannel.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n }\n\n // Switch to new channel\n this.llmChannel = newLLMChannel;\n\n // Subscribe to new channel\n this.llmChannel.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n\n // Reset announcement state for new connection\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n this.captionServiceId = undefined;\n this.areCaptionsEnabled = false;\n\n // Re-announce and re-enable captions if they were on\n if (captionsWereOn) {\n await this.turnOnCaptions(spokenLanguage);\n }\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 this.emit(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.emit(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 this.emit(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 this.emit(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 this.emit(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 ?? 0),\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n this.emit(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 this.emit(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 if (isInSpokenLanguages) {\n this.emit(EVENT_TRIGGERS.LANGUAGE_DETECTED, {\n languageCode: voiceaPayload.language,\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 this.emit(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {statusCode: 200});\n } else {\n this.emit(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 this.emit(EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);\n };\n\n /**\n * Indicates whether the LLM channel is connected.\n * @returns {boolean}\n */\n public isLLMConnected = (): boolean => this.llmChannel.isConnected();\n\n public getKeepTranscriptionSubscribed = (): boolean => this.keepTranscriptionSubscribed;\n\n /**\n * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n public sendAnnouncement = (): void => {\n this.announceStatus = ANNOUNCE_STATUS.JOINING;\n const socket = this.llmChannel.getSocket();\n const binding = this.llmChannel.getBinding();\n\n const payload = {\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 socket.send(payload);\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 this.request({\n method: 'PUT',\n url: `${this.llmChannel.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n spokenLanguage: languageCode,\n ...(languageAssignment && {languageAssignment}),\n },\n },\n }).then(() => {\n this.emit(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 = this.llmChannel.getSocket();\n const binding = this.llmChannel.getBinding();\n\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 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 = this.llmChannel.getSocket();\n const binding = this.llmChannel.getBinding();\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\n * @returns {Promise}\n */\n private requestTurnOnCaptions = (languageCode?: string): undefined | Promise<void> => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.SENDING;\n\n const locusUrl = this.llmChannel.getLocusUrl();\n\n const body = {\n transcribe: {caption: true},\n languageCode,\n };\n\n return this.request({\n method: 'PUT',\n url: `${locusUrl}/controls/`,\n body,\n })\n .then(() => {\n this.emit(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((error) => {\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 = (): boolean =>\n [ANNOUNCE_STATUS.JOINING, ANNOUNCE_STATUS.JOINED].includes(this.announceStatus);\n\n /**\n * is announce processed\n * @returns {boolean}\n */\n private isAnnounceProcessed = (): boolean => this.announceStatus === ANNOUNCE_STATUS.JOINED;\n\n /**\n * announce to voicea data channel\n * @returns {void}\n */\n public announce = (): void => {\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 = (): boolean =>\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?: string): Promise<void | undefined> => {\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 return this.request({\n method: 'PUT',\n url: `${this.llmChannel.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 return this.request({\n method: 'PUT',\n url: `${this.llmChannel.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: string): void => {\n this.emit(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 (this.currentCaptionLanguage) {\n this.requestLanguage(this.currentCaptionLanguage);\n }\n }\n };\n\n /**\n * get caption status\n * @returns {string}\n */\n public getCaptionStatus = (): string => this.captionStatus;\n\n /**\n * get announce status\n * @returns {string}\n */\n public getAnnounceStatus = (): string => this.announceStatus;\n\n /**\n * update LLM sub‑channel subscriptions.\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 if (!this.isLLMConnected()) return;\n\n const isDataChannelTokenEnabled = await this.llmChannel.isDataChannelTokenEnabled();\n if (!isDataChannelTokenEnabled) return;\n\n const socket = this.llmChannel.getSocket();\n const datachannelUrl = this.llmChannel.getDatachannelUrl();\n\n socket.send({\n id: `${this.seqNum}`,\n type: 'subchannelSubscriptionRequest',\n data: {\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 +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 getKeepTranscriptionSubscribed: () => boolean;\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 getKeepTranscriptionSubscribed: () => boolean;\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
@@ -49,5 +49,5 @@
49
49
  "test:style": "eslint ./src/**/*.*",
50
50
  "test:unit": "webex-legacy-tools test --unit --runner jest"
51
51
  },
52
- "version": "3.12.0-llmrefactor.5"
52
+ "version": "3.12.0-llmrefactor.6"
53
53
  }
package/src/constants.ts CHANGED
@@ -7,6 +7,7 @@ export const EVENT_TRIGGERS = {
7
7
  TRANSCRIBING_OFF: 'voicea:transcribingOff',
8
8
 
9
9
  NEW_CAPTION: 'voicea:newCaption',
10
+ SPEAKER_NAME_UPDATED: 'voicea:speakerNameUpdated',
10
11
  EVA_COMMAND: 'voicea:wxa',
11
12
  HIGHLIGHT_CREATED: 'voicea:highlightCreated',
12
13
  NEW_MANUAL_CAPTION: 'aibridge:newManualCaption',
@@ -21,6 +22,7 @@ export const AIBRIDGE_RELAY_TYPES = {
21
22
  TRANSLATION_REQUEST: 'voicea.transl.req',
22
23
  TRANSLATION_RESPONSE: 'voicea.transl.rsp',
23
24
  TRANSCRIPTION: 'voicea.transcription',
25
+ SPEAKER_NAME_UPDATE: 'voicea.update_speakername',
24
26
  },
25
27
  MANUAL: {
26
28
  TRANSCRIPTION: 'aibridge.manual_transcription',
package/src/index.ts CHANGED
@@ -2,11 +2,11 @@ import * as WebexCore from '@webex/webex-core';
2
2
 
3
3
  import Voicea from './voicea-plugin';
4
4
  import {VoiceaChannel} from './voicea';
5
- import type {MeetingTranscriptPayload} from './voicea.types';
5
+ import type {MeetingTranscriptPayload, SpeakerNameUpdatePayload} from './voicea.types';
6
6
 
7
7
  WebexCore.registerInternalPlugin('voicea', Voicea, {});
8
8
 
9
9
  export {Voicea as VoiceaPlugin, VoiceaChannel};
10
10
  export default Voicea;
11
- export {type MeetingTranscriptPayload};
11
+ export {type MeetingTranscriptPayload, type SpeakerNameUpdatePayload};
12
12
  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';
@@ -94,6 +95,9 @@ export class VoiceaChannel extends EventEmitter implements IVoiceaChannel {
94
95
  case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:
95
96
  this.processTranscription(e.data.voiceaPayload);
96
97
  break;
98
+ case AIBRIDGE_RELAY_TYPES.VOICEA.SPEAKER_NAME_UPDATE:
99
+ this.processSpeakerNameUpdate(e.data.voiceaPayload);
100
+ break;
97
101
  case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:
98
102
  case AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:
99
103
  this.processManualTranscription({
@@ -187,6 +191,16 @@ export class VoiceaChannel extends EventEmitter implements IVoiceaChannel {
187
191
  }
188
192
  };
189
193
 
194
+ /**
195
+ * Process speaker name update and send alert
196
+ * @param {SpeakerNameUpdatePayload} voiceaPayload
197
+ * @returns {void}
198
+ */
199
+ private processSpeakerNameUpdate = (voiceaPayload: SpeakerNameUpdatePayload): void => {
200
+ // @ts-ignore
201
+ this.emit(EVENT_TRIGGERS.SPEAKER_NAME_UPDATED, voiceaPayload);
202
+ };
203
+
190
204
  /**
191
205
  * Process Transcript and send alert
192
206
  * @param {TranscriptionResponse} voiceaPayload
@@ -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
  /**
@@ -110,6 +125,10 @@ type MeetingTranscripts = {
110
125
  [key: string]: string;
111
126
  };
112
127
  timestamp?: string;
128
+ taggedSpeaker?: {
129
+ speakerId?: string[];
130
+ newName?: string;
131
+ };
113
132
  };
114
133
 
115
134
  type MeetingTranscriptPayload = {
@@ -124,6 +143,8 @@ export type {
124
143
  TranscriptionResponse,
125
144
  Transcription,
126
145
  Highlight,
146
+ TaggedSpeaker,
147
+ SpeakerNameUpdatePayload,
127
148
  IVoiceaChannel,
128
149
  MeetingTranscriptPayload,
129
150
  };
@@ -701,6 +701,50 @@ describe('plugin-voicea', () => {
701
701
  });
702
702
  });
703
703
 
704
+ it('processes speaker name updates and advances the message sequence', () => {
705
+ const spy = sinon.spy();
706
+ const voiceaPayload = {
707
+ id: 'speaker-name-update-1',
708
+ taggedSpeakers: [
709
+ {
710
+ csiId: 3556942592,
711
+ speakerId: '1',
712
+ newName: 'Alice',
713
+ },
714
+ ],
715
+ };
716
+
717
+ voiceaChannel.on(EVENT_TRIGGERS.SPEAKER_NAME_UPDATED, spy);
718
+
719
+ eventHandler({
720
+ sequenceNumber: 23,
721
+ headers: {from: 'ws'},
722
+ data: {
723
+ relayType: 'voicea.update_speakername',
724
+ voiceaPayload,
725
+ },
726
+ });
727
+
728
+ assert.calledOnceWithExactly(spy, voiceaPayload);
729
+
730
+ voiceaChannel.sendAnnouncement();
731
+
732
+ assert.calledOnceWithExactly(mockLLMChannel.socket.send, {
733
+ id: '24',
734
+ type: 'publishRequest',
735
+ recipients: [{route: 'binding'}],
736
+ headers: {},
737
+ data: {
738
+ clientPayload: {
739
+ version: 'v2',
740
+ },
741
+ eventType: 'relay.event',
742
+ relayType: 'client.annc',
743
+ },
744
+ trackingId: sinon.match.string,
745
+ });
746
+ });
747
+
704
748
  it('processes transcription interim results', () => {
705
749
  const spy = sinon.spy();
706
750
  voiceaChannel.on(EVENT_TRIGGERS.NEW_CAPTION, spy);