@webex/internal-plugin-voicea 3.10.0-next.15 → 3.10.0-next.16
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/types/voicea.d.ts +8 -1
- package/dist/voicea.js +30 -6
- package/dist/voicea.js.map +1 -1
- package/package.json +1 -1
- package/src/voicea.ts +31 -6
- package/test/unit/spec/voicea.js +106 -2
package/dist/types/voicea.d.ts
CHANGED
|
@@ -10,12 +10,13 @@ export declare class VoiceaChannel extends WebexPlugin implements IVoiceaChannel
|
|
|
10
10
|
private seqNum;
|
|
11
11
|
private areCaptionsEnabled;
|
|
12
12
|
private hasSubscribedToEvents;
|
|
13
|
-
private
|
|
13
|
+
private captionServiceId?;
|
|
14
14
|
private announceStatus;
|
|
15
15
|
private captionStatus;
|
|
16
16
|
private toggleManualCaptionStatus;
|
|
17
17
|
private currentSpokenLanguage?;
|
|
18
18
|
private spokenLanguages;
|
|
19
|
+
private currentCaptionLanguage?;
|
|
19
20
|
/**
|
|
20
21
|
* @param {Object} e
|
|
21
22
|
* @returns {undefined}
|
|
@@ -134,6 +135,12 @@ export declare class VoiceaChannel extends WebexPlugin implements IVoiceaChannel
|
|
|
134
135
|
* @returns {void}
|
|
135
136
|
*/
|
|
136
137
|
onSpokenLanguageUpdate: (languageCode: string, meetingId: any) => void;
|
|
138
|
+
/**
|
|
139
|
+
* In meeting Spoken Language changed event
|
|
140
|
+
* @param {string} serviceId
|
|
141
|
+
* @returns {void}
|
|
142
|
+
*/
|
|
143
|
+
onCaptionServiceIdUpdate: (serviceId: string) => void;
|
|
137
144
|
/**
|
|
138
145
|
* get caption status
|
|
139
146
|
* @returns {string}
|
package/dist/voicea.js
CHANGED
|
@@ -49,12 +49,13 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
49
49
|
(0, _defineProperty2.default)(_this, "seqNum", void 0);
|
|
50
50
|
(0, _defineProperty2.default)(_this, "areCaptionsEnabled", void 0);
|
|
51
51
|
(0, _defineProperty2.default)(_this, "hasSubscribedToEvents", false);
|
|
52
|
-
(0, _defineProperty2.default)(_this, "
|
|
52
|
+
(0, _defineProperty2.default)(_this, "captionServiceId", void 0);
|
|
53
53
|
(0, _defineProperty2.default)(_this, "announceStatus", void 0);
|
|
54
54
|
(0, _defineProperty2.default)(_this, "captionStatus", void 0);
|
|
55
55
|
(0, _defineProperty2.default)(_this, "toggleManualCaptionStatus", void 0);
|
|
56
56
|
(0, _defineProperty2.default)(_this, "currentSpokenLanguage", void 0);
|
|
57
57
|
(0, _defineProperty2.default)(_this, "spokenLanguages", []);
|
|
58
|
+
(0, _defineProperty2.default)(_this, "currentCaptionLanguage", void 0);
|
|
58
59
|
/**
|
|
59
60
|
* @param {Object} e
|
|
60
61
|
* @returns {undefined}
|
|
@@ -64,7 +65,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
64
65
|
_this.seqNum = e.sequenceNumber + 1;
|
|
65
66
|
switch (e.data.relayType) {
|
|
66
67
|
case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:
|
|
67
|
-
_this.
|
|
68
|
+
_this.onCaptionServiceIdUpdate(e.headers.from);
|
|
68
69
|
_this.announceStatus = _constants.ANNOUNCE_STATUS.JOINED;
|
|
69
70
|
_this.processAnnouncementMessage(e.data.voiceaPayload);
|
|
70
71
|
break;
|
|
@@ -219,7 +220,10 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
219
220
|
// @ts-ignore
|
|
220
221
|
route: _this.webex.internal.llm.getBinding()
|
|
221
222
|
},
|
|
222
|
-
headers
|
|
223
|
+
// If captionServiceId exists, send it as the 'to' header; otherwise keep headers empty.
|
|
224
|
+
headers: _this.captionServiceId ? {
|
|
225
|
+
to: _this.captionServiceId
|
|
226
|
+
} : {},
|
|
223
227
|
data: {
|
|
224
228
|
clientPayload: {
|
|
225
229
|
version: 'v2'
|
|
@@ -276,7 +280,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
276
280
|
route: _this.webex.internal.llm.getBinding()
|
|
277
281
|
},
|
|
278
282
|
headers: {
|
|
279
|
-
to: _this.
|
|
283
|
+
to: _this.captionServiceId
|
|
280
284
|
},
|
|
281
285
|
data: {
|
|
282
286
|
clientPayload: {
|
|
@@ -288,6 +292,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
288
292
|
},
|
|
289
293
|
trackingId: "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString())
|
|
290
294
|
});
|
|
295
|
+
_this.currentCaptionLanguage = languageCode;
|
|
291
296
|
_this.seqNum += 1;
|
|
292
297
|
});
|
|
293
298
|
/**
|
|
@@ -489,6 +494,23 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
489
494
|
});
|
|
490
495
|
_this.currentSpokenLanguage = languageCode;
|
|
491
496
|
});
|
|
497
|
+
/**
|
|
498
|
+
* In meeting Spoken Language changed event
|
|
499
|
+
* @param {string} serviceId
|
|
500
|
+
* @returns {void}
|
|
501
|
+
*/
|
|
502
|
+
(0, _defineProperty2.default)(_this, "onCaptionServiceIdUpdate", function (serviceId) {
|
|
503
|
+
if (!serviceId) {
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
if (_this.captionServiceId !== serviceId) {
|
|
507
|
+
_this.captionServiceId = serviceId;
|
|
508
|
+
// if service id value has changed and the translation language has been set, client needs to resend the translator language message to the LLM.
|
|
509
|
+
if (_this.currentCaptionLanguage) {
|
|
510
|
+
_this.requestLanguage(_this.currentCaptionLanguage);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
});
|
|
492
514
|
/**
|
|
493
515
|
* get caption status
|
|
494
516
|
* @returns {string}
|
|
@@ -505,11 +527,12 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
505
527
|
});
|
|
506
528
|
_this.seqNum = 1;
|
|
507
529
|
_this.areCaptionsEnabled = false;
|
|
508
|
-
_this.
|
|
530
|
+
_this.captionServiceId = undefined;
|
|
509
531
|
_this.announceStatus = _constants.ANNOUNCE_STATUS.IDLE;
|
|
510
532
|
_this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.IDLE;
|
|
511
533
|
_this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
512
534
|
_this.currentSpokenLanguage = _constants.DEFAULT_SPOKEN_LANGUAGE;
|
|
535
|
+
_this.currentCaptionLanguage = undefined;
|
|
513
536
|
return _this;
|
|
514
537
|
}
|
|
515
538
|
(0, _inherits2.default)(VoiceaChannel, _WebexPlugin);
|
|
@@ -536,7 +559,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
536
559
|
key: "deregisterEvents",
|
|
537
560
|
value: function deregisterEvents() {
|
|
538
561
|
this.areCaptionsEnabled = false;
|
|
539
|
-
this.
|
|
562
|
+
this.captionServiceId = undefined;
|
|
540
563
|
// @ts-ignore
|
|
541
564
|
this.webex.internal.llm.off('event:relay.event', this.eventProcessor);
|
|
542
565
|
this.hasSubscribedToEvents = false;
|
|
@@ -544,6 +567,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
544
567
|
this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.IDLE;
|
|
545
568
|
this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
546
569
|
this.currentSpokenLanguage = undefined;
|
|
570
|
+
this.currentCaptionLanguage = undefined;
|
|
547
571
|
}
|
|
548
572
|
}]);
|
|
549
573
|
}(_webexCore.WebexPlugin);
|
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","vmcDeviceId","headers","from","announceStatus","ANNOUNCE_STATUS","JOINED","processAnnouncementMessage","voiceaPayload","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","MANUAL","CAPTIONER","processManualTranscription","transcriptPayload","sender","data_source","type","TRANSCRIPTION_TYPE","MANUAL_CAPTION_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULT","trigger","EVENT_TRIGGERS","NEW_MANUAL_CAPTION","isFinal","transcriptId","id","transcripts","source","TRANSCRIPT_INTERIM_RESULTS","NEW_CAPTION","transcript_id","TRANSCRIPT_FINAL_RESULT","map","transcript","timestamp","millisToMinutesAndSeconds","end_millis","HIGHLIGHT_CREATED","csis","highlight","highlightId","highlight_id","text","highlightLabel","highlight_label","highlightSource","highlight_source","EVA_THANKS","EVA_COMMAND","isListening","command_response","EVA_WAKE","EVA_CANCEL","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","JOINING","listenToEvents","webex","internal","llm","socket","send","recipients","route","getBinding","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","languageAssignment","request","method","url","getLocusUrl","body","transcribe","spokenLanguage","then","SPOKEN_LANGUAGE_UPDATE","isConnected","to","translationLanguage","TRANSLATION_REQUEST","timeStamp","start_millis","captionStatus","TURN_ON_CAPTION_STATUS","SENDING","caption","CAPTIONS_TURNED_ON","areCaptionsEnabled","ENABLED","announce","catch","IDLE","Error","isAnnounceProcessing","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","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 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 vmcDeviceId?: string;\n\n private announceStatus: string;\n\n private captionStatus: string;\n\n private toggleManualCaptionStatus: string;\n\n private currentSpokenLanguage?: string;\n\n private spokenLanguages: string[] = [];\n\n /**\n * @param {Object} e\n * @returns {undefined}\n */\n\n private eventProcessor = (e) => {\n this.seqNum = e.sequenceNumber + 1;\n switch (e.data.relayType) {\n case AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:\n this.vmcDeviceId = e.headers.from;\n this.announceStatus = ANNOUNCE_STATUS.JOINED;\n this.processAnnouncementMessage(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:\n this.processTranscription(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:\n case AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:\n this.processManualTranscription({\n ...e.data.transcriptPayload,\n sender: e.headers?.from,\n data_source: e.data.relayType,\n });\n break;\n default:\n break;\n }\n };\n\n /**\n * Listen to websocket messages\n * @returns {undefined}\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n // @ts-ignore\n this.webex.internal.llm.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n }\n }\n\n /**\n * Listen to websocket messages\n * @returns {void}\n */\n public deregisterEvents() {\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n // @ts-ignore\n this.webex.internal.llm.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n this.currentSpokenLanguage = undefined;\n }\n\n /**\n * Initializes Voicea plugin\n * @param {any} args\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n this.currentSpokenLanguage = DEFAULT_SPOKEN_LANGUAGE;\n }\n\n /**\n * Process manual Transcript and send alert\n * @param {TranscriptionResponse} transcriptPayload\n * @returns {void}\n */\n private processManualTranscription = (transcriptPayload: TranscriptionResponse): void => {\n if (\n transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT ||\n transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT\n ) {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {\n isFinal: transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,\n transcriptId: transcriptPayload.id,\n transcripts: transcriptPayload.transcripts,\n sender: transcriptPayload.sender,\n source: transcriptPayload.data_source,\n });\n }\n };\n\n /**\n * Process Transcript and send alert\n * @param {TranscriptionResponse} voiceaPayload\n * @returns {void}\n */\n private processTranscription = (voiceaPayload: TranscriptionResponse): void => {\n switch (voiceaPayload.type) {\n case TRANSCRIPTION_TYPE.TRANSCRIPT_INTERIM_RESULTS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\n });\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts.map((transcript) => {\n transcript.timestamp = millisToMinutesAndSeconds(transcript.end_millis);\n\n return transcript;\n }),\n });\n break;\n\n case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.HIGHLIGHT_CREATED, {\n csis: voiceaPayload.highlight.csis,\n highlightId: voiceaPayload.highlight.highlight_id,\n text: voiceaPayload.highlight.transcript,\n highlightLabel: voiceaPayload.highlight.highlight_label,\n highlightSource: voiceaPayload.highlight.highlight_source,\n timestamp: millisToMinutesAndSeconds(voiceaPayload.highlight.end_millis),\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: false,\n text: voiceaPayload.command_response,\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_WAKE:\n case TRANSCRIPTION_TYPE.EVA_CANCEL:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: voiceaPayload.type === TRANSCRIPTION_TYPE.EVA_WAKE,\n });\n break;\n\n 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 * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n private sendAnnouncement = (): void => {\n this.announceStatus = ANNOUNCE_STATUS.JOINING;\n this.listenToEvents();\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {},\n data: {\n clientPayload: {\n version: 'v2',\n },\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.VOICEA.CLIENT_ANNOUNCEMENT,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Set Spoken Language for the meeting\n * @param {string} languageCode\n * @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 // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {\n to: this.vmcDeviceId,\n },\n data: {\n clientPayload: {\n translationLanguage: languageCode,\n id: uuid.v4(),\n },\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_REQUEST,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Send manual closed captions to voicea service\n * @param {string} text\n * @param {number} timeStamp\n * @param {number[]} csis\n * @param {boolean} isFinal\n * @returns {void}\n */\n public sendManualClosedCaption = (\n text: string,\n timeStamp: number,\n csis: number[],\n isFinal: boolean\n ): void => {\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {},\n data: {\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER,\n transcriptPayload: {\n type: isFinal\n ? TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT\n : TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT,\n id: uuid.v4(),\n transcripts: [\n {\n text,\n start_millis: timeStamp,\n end_millis: timeStamp,\n csis,\n },\n ],\n 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 })\n .catch(() => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n throw new Error('turn on captions fail');\n });\n };\n\n /**\n * is announce processing\n * @returns {boolean}\n */\n private isAnnounceProcessing = () =>\n [ANNOUNCE_STATUS.JOINING, ANNOUNCE_STATUS.JOINED].includes(this.announceStatus);\n\n /**\n * announce to voicea data chanel\n * @returns {void}\n */\n public announce = () => {\n if (this.isAnnounceProcessing()) return;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('voicea can not announce before llm connected');\n }\n this.sendAnnouncement();\n };\n\n /**\n * is turn on caption processing\n * @returns {boolean}\n */\n private isCaptionProcessing = () =>\n [TURN_ON_CAPTION_STATUS.SENDING, TURN_ON_CAPTION_STATUS.ENABLED].includes(this.captionStatus);\n\n /**\n * Turn on Captions\n * @param {string} [spokenLanguage] - Optional Spoken language code\n * @returns {Promise}\n */\n public turnOnCaptions = async (spokenLanguage?): undefined | Promise<void> => {\n if (this.captionStatus === TURN_ON_CAPTION_STATUS.SENDING) return undefined;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('can not turn on captions before llm connected');\n }\n\n return this.requestTurnOnCaptions(spokenLanguage);\n };\n\n /**\n * Toggle transcribing for highlights\n * @param {boolean} activate true means to turn on transcribing and false means to turn off\n * @param {string} spokenLanguage language code for spoken language\n * @returns {Promise}\n */\n public toggleTranscribing = (\n activate: boolean,\n spokenLanguage?: string\n ): undefined | Promise<void> => {\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n transcribing: activate,\n },\n spokenLanguage,\n },\n }).then((): undefined | Promise<void> => {\n if (activate && !this.areCaptionsEnabled) {\n return this.turnOnCaptions(spokenLanguage);\n }\n\n return undefined;\n });\n };\n\n /**\n * Toggle turn on manual caption\n * @param {boolean} enable true means to turn on manual caption, false means to turn off\n * @returns {Promise}\n */\n public toggleManualCaption = (enable: boolean): undefined | Promise<void> => {\n if (this.toggleManualCaptionStatus === TOGGLE_MANUAL_CAPTION_STATUS.SENDING) return undefined;\n\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.SENDING;\n\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n manualCaption: {\n enable,\n },\n },\n })\n .then((): undefined | Promise<void> => {\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n\n return undefined;\n })\n .catch(() => {\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n throw new Error('toggle manual captions fail');\n });\n };\n\n /**\n * In meeting Spoken Language changed event\n * @param {string} languageCode\n * @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 * get caption status\n * @returns {string}\n */\n public getCaptionStatus = () => this.captionStatus;\n\n /**\n * get announce status\n * @returns {string}\n */\n public getAnnounceStatus = () => this.announceStatus;\n}\n\nexport default VoiceaChannel;\n"],"mappings":"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","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","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","JOINING","listenToEvents","webex","internal","llm","socket","send","recipients","route","getBinding","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","isConnected","translationLanguage","TRANSLATION_REQUEST","currentCaptionLanguage","timeStamp","start_millis","captionStatus","TURN_ON_CAPTION_STATUS","SENDING","caption","CAPTIONS_TURNED_ON","areCaptionsEnabled","ENABLED","announce","catch","IDLE","Error","isAnnounceProcessing","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","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 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 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 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.captionServiceId = undefined;\n // @ts-ignore\n this.webex.internal.llm.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n this.currentSpokenLanguage = undefined;\n 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.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 * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n private sendAnnouncement = (): void => {\n this.announceStatus = ANNOUNCE_STATUS.JOINING;\n this.listenToEvents();\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n // 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 // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {\n to: this.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 // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {},\n data: {\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER,\n transcriptPayload: {\n type: isFinal\n ? TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT\n : TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT,\n id: uuid.v4(),\n transcripts: [\n {\n text,\n start_millis: timeStamp,\n end_millis: timeStamp,\n csis,\n },\n ],\n 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 })\n .catch(() => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n throw new Error('turn on captions fail');\n });\n };\n\n /**\n * is announce processing\n * @returns {boolean}\n */\n private isAnnounceProcessing = () =>\n [ANNOUNCE_STATUS.JOINING, ANNOUNCE_STATUS.JOINED].includes(this.announceStatus);\n\n /**\n * announce to voicea data chanel\n * @returns {void}\n */\n public announce = () => {\n if (this.isAnnounceProcessing()) return;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('voicea can not announce before llm connected');\n }\n this.sendAnnouncement();\n };\n\n /**\n * is turn on caption processing\n * @returns {boolean}\n */\n private isCaptionProcessing = () =>\n [TURN_ON_CAPTION_STATUS.SENDING, TURN_ON_CAPTION_STATUS.ENABLED].includes(this.captionStatus);\n\n /**\n * Turn on Captions\n * @param {string} [spokenLanguage] - Optional Spoken language code\n * @returns {Promise}\n */\n public turnOnCaptions = async (spokenLanguage?): undefined | Promise<void> => {\n if (this.captionStatus === TURN_ON_CAPTION_STATUS.SENDING) return undefined;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('can not turn on captions before llm connected');\n }\n\n return this.requestTurnOnCaptions(spokenLanguage);\n };\n\n /**\n * Toggle transcribing for highlights\n * @param {boolean} activate true means to turn on transcribing and false means to turn off\n * @param {string} spokenLanguage language code for spoken language\n * @returns {Promise}\n */\n public toggleTranscribing = (\n activate: boolean,\n spokenLanguage?: string\n ): undefined | Promise<void> => {\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n transcribing: activate,\n },\n spokenLanguage,\n },\n }).then((): undefined | Promise<void> => {\n if (activate && !this.areCaptionsEnabled) {\n return this.turnOnCaptions(spokenLanguage);\n }\n\n return undefined;\n });\n };\n\n /**\n * Toggle turn on manual caption\n * @param {boolean} enable true means to turn on manual caption, false means to turn off\n * @returns {Promise}\n */\n public toggleManualCaption = (enable: boolean): undefined | Promise<void> => {\n if (this.toggleManualCaptionStatus === TOGGLE_MANUAL_CAPTION_STATUS.SENDING) return undefined;\n\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.SENDING;\n\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n manualCaption: {\n enable,\n },\n },\n })\n .then((): undefined | Promise<void> => {\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n\n return undefined;\n })\n .catch(() => {\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n throw new Error('toggle manual captions fail');\n });\n };\n\n /**\n * In meeting Spoken Language changed event\n * @param {string} languageCode\n * @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\nexport default VoiceaChannel;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
package/src/voicea.ts
CHANGED
|
@@ -35,7 +35,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
35
35
|
|
|
36
36
|
private hasSubscribedToEvents = false;
|
|
37
37
|
|
|
38
|
-
private
|
|
38
|
+
private captionServiceId?: string;
|
|
39
39
|
|
|
40
40
|
private announceStatus: string;
|
|
41
41
|
|
|
@@ -47,6 +47,8 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
47
47
|
|
|
48
48
|
private spokenLanguages: string[] = [];
|
|
49
49
|
|
|
50
|
+
private currentCaptionLanguage?: string;
|
|
51
|
+
|
|
50
52
|
/**
|
|
51
53
|
* @param {Object} e
|
|
52
54
|
* @returns {undefined}
|
|
@@ -56,7 +58,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
56
58
|
this.seqNum = e.sequenceNumber + 1;
|
|
57
59
|
switch (e.data.relayType) {
|
|
58
60
|
case AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:
|
|
59
|
-
this.
|
|
61
|
+
this.onCaptionServiceIdUpdate(e.headers.from);
|
|
60
62
|
this.announceStatus = ANNOUNCE_STATUS.JOINED;
|
|
61
63
|
this.processAnnouncementMessage(e.data.voiceaPayload);
|
|
62
64
|
break;
|
|
@@ -97,7 +99,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
97
99
|
*/
|
|
98
100
|
public deregisterEvents() {
|
|
99
101
|
this.areCaptionsEnabled = false;
|
|
100
|
-
this.
|
|
102
|
+
this.captionServiceId = undefined;
|
|
101
103
|
// @ts-ignore
|
|
102
104
|
this.webex.internal.llm.off('event:relay.event', this.eventProcessor);
|
|
103
105
|
this.hasSubscribedToEvents = false;
|
|
@@ -105,6 +107,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
105
107
|
this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;
|
|
106
108
|
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
107
109
|
this.currentSpokenLanguage = undefined;
|
|
110
|
+
this.currentCaptionLanguage = undefined;
|
|
108
111
|
}
|
|
109
112
|
|
|
110
113
|
/**
|
|
@@ -115,11 +118,12 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
115
118
|
super(...args);
|
|
116
119
|
this.seqNum = 1;
|
|
117
120
|
this.areCaptionsEnabled = false;
|
|
118
|
-
this.
|
|
121
|
+
this.captionServiceId = undefined;
|
|
119
122
|
this.announceStatus = ANNOUNCE_STATUS.IDLE;
|
|
120
123
|
this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;
|
|
121
124
|
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
122
125
|
this.currentSpokenLanguage = DEFAULT_SPOKEN_LANGUAGE;
|
|
126
|
+
this.currentCaptionLanguage = undefined;
|
|
123
127
|
}
|
|
124
128
|
|
|
125
129
|
/**
|
|
@@ -268,7 +272,8 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
268
272
|
// @ts-ignore
|
|
269
273
|
route: this.webex.internal.llm.getBinding(),
|
|
270
274
|
},
|
|
271
|
-
headers
|
|
275
|
+
// If captionServiceId exists, send it as the 'to' header; otherwise keep headers empty.
|
|
276
|
+
headers: this.captionServiceId ? {to: this.captionServiceId} : {},
|
|
272
277
|
data: {
|
|
273
278
|
clientPayload: {
|
|
274
279
|
version: 'v2',
|
|
@@ -324,7 +329,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
324
329
|
route: this.webex.internal.llm.getBinding(),
|
|
325
330
|
},
|
|
326
331
|
headers: {
|
|
327
|
-
to: this.
|
|
332
|
+
to: this.captionServiceId,
|
|
328
333
|
},
|
|
329
334
|
data: {
|
|
330
335
|
clientPayload: {
|
|
@@ -336,6 +341,8 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
336
341
|
},
|
|
337
342
|
trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
|
|
338
343
|
});
|
|
344
|
+
this.currentCaptionLanguage = languageCode;
|
|
345
|
+
|
|
339
346
|
this.seqNum += 1;
|
|
340
347
|
};
|
|
341
348
|
|
|
@@ -541,6 +548,24 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
541
548
|
this.currentSpokenLanguage = languageCode;
|
|
542
549
|
};
|
|
543
550
|
|
|
551
|
+
/**
|
|
552
|
+
* In meeting Spoken Language changed event
|
|
553
|
+
* @param {string} serviceId
|
|
554
|
+
* @returns {void}
|
|
555
|
+
*/
|
|
556
|
+
public onCaptionServiceIdUpdate = (serviceId: string): void => {
|
|
557
|
+
if (!serviceId) {
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
if (this.captionServiceId !== serviceId) {
|
|
561
|
+
this.captionServiceId = serviceId;
|
|
562
|
+
// if service id value has changed and the translation language has been set, client needs to resend the translator language message to the LLM.
|
|
563
|
+
if (this.currentCaptionLanguage) {
|
|
564
|
+
this.requestLanguage(this.currentCaptionLanguage);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
};
|
|
568
|
+
|
|
544
569
|
/**
|
|
545
570
|
* get caption status
|
|
546
571
|
* @returns {string}
|
package/test/unit/spec/voicea.js
CHANGED
|
@@ -89,6 +89,31 @@ describe('plugin-voicea', () => {
|
|
|
89
89
|
|
|
90
90
|
assert.calledOnceWithExactly(spy, 'event:relay.event', sinon.match.func);
|
|
91
91
|
});
|
|
92
|
+
|
|
93
|
+
it('includes captionServiceId in headers when set', () => {
|
|
94
|
+
const mockWebSocket = new MockWebSocket();
|
|
95
|
+
|
|
96
|
+
voiceaService.webex.internal.llm.socket = mockWebSocket;
|
|
97
|
+
voiceaService.announceStatus = 'idle';
|
|
98
|
+
voiceaService.captionServiceId = 'svc-123';
|
|
99
|
+
|
|
100
|
+
voiceaService.sendAnnouncement();
|
|
101
|
+
|
|
102
|
+
assert.calledOnceWithExactly(voiceaService.webex.internal.llm.socket.send, {
|
|
103
|
+
id: '1',
|
|
104
|
+
type: 'publishRequest',
|
|
105
|
+
recipients: {route: undefined},
|
|
106
|
+
headers: {to: 'svc-123'},
|
|
107
|
+
data: {
|
|
108
|
+
clientPayload: {
|
|
109
|
+
version: 'v2',
|
|
110
|
+
},
|
|
111
|
+
eventType: 'relay.event',
|
|
112
|
+
relayType: 'client.annc',
|
|
113
|
+
},
|
|
114
|
+
trackingId: sinon.match.string,
|
|
115
|
+
});
|
|
116
|
+
});
|
|
92
117
|
});
|
|
93
118
|
|
|
94
119
|
describe('#sendManualClosedCaption', () => {
|
|
@@ -208,11 +233,11 @@ describe('plugin-voicea', () => {
|
|
|
208
233
|
});
|
|
209
234
|
|
|
210
235
|
assert.equal(voiceaService.areCaptionsEnabled, true);
|
|
211
|
-
assert.equal(voiceaService.
|
|
236
|
+
assert.equal(voiceaService.captionServiceId, 'ws');
|
|
212
237
|
|
|
213
238
|
voiceaService.deregisterEvents();
|
|
214
239
|
assert.equal(voiceaService.areCaptionsEnabled, false);
|
|
215
|
-
assert.equal(voiceaService.
|
|
240
|
+
assert.equal(voiceaService.captionServiceId, undefined);
|
|
216
241
|
assert.equal(voiceaService.announceStatus, 'idle');
|
|
217
242
|
assert.equal(voiceaService.captionStatus, 'idle');
|
|
218
243
|
});
|
|
@@ -286,6 +311,28 @@ describe('plugin-voicea', () => {
|
|
|
286
311
|
trackingId: sinon.match.string,
|
|
287
312
|
});
|
|
288
313
|
});
|
|
314
|
+
|
|
315
|
+
it('uses captionServiceId as "to" header when set', () => {
|
|
316
|
+
voiceaService.captionServiceId = 'svc-456';
|
|
317
|
+
|
|
318
|
+
voiceaService.requestLanguage('fr');
|
|
319
|
+
|
|
320
|
+
assert.calledOnceWithExactly(voiceaService.webex.internal.llm.socket.send, {
|
|
321
|
+
id: '1',
|
|
322
|
+
type: 'publishRequest',
|
|
323
|
+
recipients: {route: undefined},
|
|
324
|
+
headers: {to: 'svc-456'},
|
|
325
|
+
data: {
|
|
326
|
+
clientPayload: {
|
|
327
|
+
translationLanguage: 'fr',
|
|
328
|
+
id: sinon.match.string,
|
|
329
|
+
},
|
|
330
|
+
eventType: 'relay.event',
|
|
331
|
+
relayType: 'voicea.transl.req',
|
|
332
|
+
},
|
|
333
|
+
trackingId: sinon.match.string,
|
|
334
|
+
});
|
|
335
|
+
});
|
|
289
336
|
});
|
|
290
337
|
|
|
291
338
|
describe('#setSpokenLanguage', () => {
|
|
@@ -1101,5 +1148,62 @@ describe('plugin-voicea', () => {
|
|
|
1101
1148
|
assert.calledOnceWithExactly(triggerSpy, {languageCode, meetingId: '123'});
|
|
1102
1149
|
});
|
|
1103
1150
|
});
|
|
1151
|
+
|
|
1152
|
+
describe('#onCaptionServiceIdUpdate', () => {
|
|
1153
|
+
let mockWebSocket;
|
|
1154
|
+
|
|
1155
|
+
beforeEach(() => {
|
|
1156
|
+
mockWebSocket = new MockWebSocket();
|
|
1157
|
+
voiceaService.webex.internal.llm.socket = mockWebSocket;
|
|
1158
|
+
voiceaService.webex.internal.llm.isConnected.returns(true);
|
|
1159
|
+
voiceaService.seqNum = 1;
|
|
1160
|
+
});
|
|
1161
|
+
|
|
1162
|
+
it('does nothing when serviceId is falsy', () => {
|
|
1163
|
+
voiceaService.captionServiceId = 'existing-id';
|
|
1164
|
+
voiceaService.currentCaptionLanguage = 'en';
|
|
1165
|
+
|
|
1166
|
+
voiceaService.onCaptionServiceIdUpdate(undefined);
|
|
1167
|
+
voiceaService.onCaptionServiceIdUpdate('');
|
|
1168
|
+
|
|
1169
|
+
assert.equal(voiceaService.captionServiceId, 'existing-id');
|
|
1170
|
+
assert.notCalled(voiceaService.webex.internal.llm.socket.send);
|
|
1171
|
+
});
|
|
1172
|
+
|
|
1173
|
+
it('sets captionServiceId when no currentCaptionLanguage', () => {
|
|
1174
|
+
voiceaService.captionServiceId = undefined;
|
|
1175
|
+
voiceaService.currentCaptionLanguage = undefined;
|
|
1176
|
+
|
|
1177
|
+
voiceaService.onCaptionServiceIdUpdate('svc-new');
|
|
1178
|
+
|
|
1179
|
+
assert.equal(voiceaService.captionServiceId, 'svc-new');
|
|
1180
|
+
assert.notCalled(voiceaService.webex.internal.llm.socket.send);
|
|
1181
|
+
});
|
|
1182
|
+
|
|
1183
|
+
it('re-sends language when serviceId changes and currentCaptionLanguage is set', () => {
|
|
1184
|
+
voiceaService.captionServiceId = 'old-svc';
|
|
1185
|
+
voiceaService.currentCaptionLanguage = 'es';
|
|
1186
|
+
|
|
1187
|
+
voiceaService.onCaptionServiceIdUpdate('new-svc');
|
|
1188
|
+
|
|
1189
|
+
assert.equal(voiceaService.captionServiceId, 'new-svc');
|
|
1190
|
+
assert.calledOnce(voiceaService.webex.internal.llm.socket.send);
|
|
1191
|
+
|
|
1192
|
+
const callArgs = voiceaService.webex.internal.llm.socket.send.getCall(0).args[0];
|
|
1193
|
+
expect(callArgs).to.have.nested.property('headers.to', 'new-svc');
|
|
1194
|
+
expect(callArgs).to.have.nested.property('data.clientPayload.translationLanguage', 'es');
|
|
1195
|
+
});
|
|
1196
|
+
|
|
1197
|
+
it('does not re-send language when serviceId is unchanged', () => {
|
|
1198
|
+
voiceaService.captionServiceId = 'same-svc';
|
|
1199
|
+
voiceaService.currentCaptionLanguage = 'de';
|
|
1200
|
+
|
|
1201
|
+
voiceaService.onCaptionServiceIdUpdate('same-svc');
|
|
1202
|
+
|
|
1203
|
+
assert.equal(voiceaService.captionServiceId, 'same-svc');
|
|
1204
|
+
assert.notCalled(voiceaService.webex.internal.llm.socket.send);
|
|
1205
|
+
});
|
|
1206
|
+
});
|
|
1207
|
+
|
|
1104
1208
|
});
|
|
1105
1209
|
});
|