@webex/internal-plugin-voicea 3.12.0-llmrefactor.1 → 3.12.0-llmrefactor.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.js +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types/constants.d.ts +2 -0
- package/dist/types/index.d.ts +2 -2
- package/dist/types/voicea-plugin.d.ts +3 -3
- package/dist/types/voicea.d.ts +51 -7
- package/dist/types/voicea.types.d.ts +18 -1
- package/dist/voicea-plugin.js +2 -2
- package/dist/voicea-plugin.js.map +1 -1
- package/dist/voicea.js +169 -70
- package/dist/voicea.js.map +1 -1
- package/dist/voicea.types.js.map +1 -1
- package/package.json +8 -8
- package/src/constants.ts +2 -0
- package/src/index.ts +2 -2
- package/src/voicea-plugin.ts +3 -3
- package/src/voicea.ts +156 -50
- package/src/voicea.types.ts +21 -0
- package/test/unit/spec/voicea-plugin.js +12 -0
- package/test/unit/spec/voicea.js +282 -4
package/dist/voicea.js
CHANGED
|
@@ -12,6 +12,7 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
12
12
|
value: true
|
|
13
13
|
});
|
|
14
14
|
exports.default = exports.VoiceaChannel = void 0;
|
|
15
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
15
16
|
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
16
17
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
17
18
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
@@ -39,8 +40,9 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
|
|
|
39
40
|
*/
|
|
40
41
|
var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter) {
|
|
41
42
|
/**
|
|
42
|
-
* Creates a VoiceaChannel bound to
|
|
43
|
-
*
|
|
43
|
+
* Creates a VoiceaChannel, optionally bound to an LLMChannel.
|
|
44
|
+
* If no llmChannel is provided, call switchLLMChannel() later to attach one.
|
|
45
|
+
* @param {LLMChannel} [llmChannel] - The LLM channel to use (optional)
|
|
44
46
|
* @param {Function} request - The request function for making API calls (typically webex.request bound to webex)
|
|
45
47
|
*/
|
|
46
48
|
function VoiceaChannel(llmChannel, request) {
|
|
@@ -60,6 +62,12 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
60
62
|
(0, _defineProperty2.default)(_this, "currentSpokenLanguage", void 0);
|
|
61
63
|
(0, _defineProperty2.default)(_this, "spokenLanguages", []);
|
|
62
64
|
(0, _defineProperty2.default)(_this, "currentCaptionLanguage", void 0);
|
|
65
|
+
// Target channel for reconciler pattern - the channel voicea WANTS to be bound to
|
|
66
|
+
(0, _defineProperty2.default)(_this, "targetLLMChannel", void 0);
|
|
67
|
+
// Single pending 'online' listener for deferred reconciliation
|
|
68
|
+
(0, _defineProperty2.default)(_this, "_pendingOnlineListener", void 0);
|
|
69
|
+
// Tracks whether caption restoration is pending (set on switch, cleared on restore)
|
|
70
|
+
(0, _defineProperty2.default)(_this, "_pendingCaptionRestore", false);
|
|
63
71
|
/**
|
|
64
72
|
* Process events from LLM channel
|
|
65
73
|
* @param {Object} e - Event data
|
|
@@ -80,6 +88,9 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
80
88
|
case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:
|
|
81
89
|
_this.processTranscription(e.data.voiceaPayload);
|
|
82
90
|
break;
|
|
91
|
+
case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.SPEAKER_NAME_UPDATE:
|
|
92
|
+
_this.processSpeakerNameUpdate(e.data.voiceaPayload);
|
|
93
|
+
break;
|
|
83
94
|
case _constants.AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:
|
|
84
95
|
case _constants.AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:
|
|
85
96
|
_this.processManualTranscription(_objectSpread(_objectSpread({}, e.data.transcriptPayload), {}, {
|
|
@@ -107,6 +118,15 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
107
118
|
});
|
|
108
119
|
}
|
|
109
120
|
});
|
|
121
|
+
/**
|
|
122
|
+
* Process speaker name update and send alert
|
|
123
|
+
* @param {SpeakerNameUpdatePayload} voiceaPayload
|
|
124
|
+
* @returns {void}
|
|
125
|
+
*/
|
|
126
|
+
(0, _defineProperty2.default)(_this, "processSpeakerNameUpdate", function (voiceaPayload) {
|
|
127
|
+
// @ts-ignore
|
|
128
|
+
_this.emit(_constants.EVENT_TRIGGERS.SPEAKER_NAME_UPDATED, voiceaPayload);
|
|
129
|
+
});
|
|
110
130
|
/**
|
|
111
131
|
* Process Transcript and send alert
|
|
112
132
|
* @param {TranscriptionResponse} voiceaPayload
|
|
@@ -206,7 +226,8 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
206
226
|
* @returns {boolean}
|
|
207
227
|
*/
|
|
208
228
|
(0, _defineProperty2.default)(_this, "isLLMConnected", function () {
|
|
209
|
-
|
|
229
|
+
var _this$llmChannel$isCo, _this$llmChannel;
|
|
230
|
+
return (_this$llmChannel$isCo = (_this$llmChannel = _this.llmChannel) === null || _this$llmChannel === void 0 ? void 0 : _this$llmChannel.isConnected()) !== null && _this$llmChannel$isCo !== void 0 ? _this$llmChannel$isCo : false;
|
|
210
231
|
});
|
|
211
232
|
(0, _defineProperty2.default)(_this, "getKeepTranscriptionSubscribed", function () {
|
|
212
233
|
return _this.keepTranscriptionSubscribed;
|
|
@@ -216,9 +237,10 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
216
237
|
* @returns {void}
|
|
217
238
|
*/
|
|
218
239
|
(0, _defineProperty2.default)(_this, "sendAnnouncement", function () {
|
|
240
|
+
var llm = _this.requireLLMChannel();
|
|
219
241
|
_this.announceStatus = _constants.ANNOUNCE_STATUS.JOINING;
|
|
220
|
-
var socket =
|
|
221
|
-
var binding =
|
|
242
|
+
var socket = llm.getSocket();
|
|
243
|
+
var binding = llm.getBinding();
|
|
222
244
|
var payload = {
|
|
223
245
|
id: "".concat(_this.seqNum),
|
|
224
246
|
type: 'publishRequest',
|
|
@@ -250,7 +272,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
250
272
|
(0, _defineProperty2.default)(_this, "setSpokenLanguage", function (languageCode, languageAssignment) {
|
|
251
273
|
return _this.request({
|
|
252
274
|
method: 'PUT',
|
|
253
|
-
url: "".concat(_this.
|
|
275
|
+
url: "".concat(_this.requireLLMChannel().getLocusUrl(), "/controls/"),
|
|
254
276
|
body: {
|
|
255
277
|
transcribe: _objectSpread({
|
|
256
278
|
spokenLanguage: languageCode
|
|
@@ -273,8 +295,9 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
273
295
|
if (!_this.isLLMConnected()) {
|
|
274
296
|
return;
|
|
275
297
|
}
|
|
276
|
-
var
|
|
277
|
-
var
|
|
298
|
+
var llm = _this.requireLLMChannel();
|
|
299
|
+
var socket = llm.getSocket();
|
|
300
|
+
var binding = llm.getBinding();
|
|
278
301
|
socket.send({
|
|
279
302
|
id: "".concat(_this.seqNum),
|
|
280
303
|
type: 'publishRequest',
|
|
@@ -309,8 +332,9 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
309
332
|
if (!_this.isLLMConnected()) {
|
|
310
333
|
return;
|
|
311
334
|
}
|
|
312
|
-
var
|
|
313
|
-
var
|
|
335
|
+
var llm = _this.requireLLMChannel();
|
|
336
|
+
var socket = llm.getSocket();
|
|
337
|
+
var binding = llm.getBinding();
|
|
314
338
|
socket === null || socket === void 0 ? void 0 : socket.send({
|
|
315
339
|
id: "".concat(_this.seqNum),
|
|
316
340
|
type: 'publishRequest',
|
|
@@ -344,7 +368,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
344
368
|
*/
|
|
345
369
|
(0, _defineProperty2.default)(_this, "requestTurnOnCaptions", function (languageCode) {
|
|
346
370
|
_this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.SENDING;
|
|
347
|
-
var locusUrl = _this.
|
|
371
|
+
var locusUrl = _this.requireLLMChannel().getLocusUrl();
|
|
348
372
|
var body = {
|
|
349
373
|
transcribe: {
|
|
350
374
|
caption: true
|
|
@@ -365,7 +389,9 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
365
389
|
}, true);
|
|
366
390
|
}).catch(function (error) {
|
|
367
391
|
_this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.IDLE;
|
|
368
|
-
throw new Error('turn on captions fail'
|
|
392
|
+
throw new Error('turn on captions fail', {
|
|
393
|
+
cause: error
|
|
394
|
+
});
|
|
369
395
|
});
|
|
370
396
|
});
|
|
371
397
|
/**
|
|
@@ -412,7 +438,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
412
438
|
return _regenerator.default.wrap(function (_context) {
|
|
413
439
|
while (1) switch (_context.prev = _context.next) {
|
|
414
440
|
case 0:
|
|
415
|
-
if (!
|
|
441
|
+
if (!_this.isCaptionProcessing()) {
|
|
416
442
|
_context.next = 1;
|
|
417
443
|
break;
|
|
418
444
|
}
|
|
@@ -444,7 +470,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
444
470
|
(0, _defineProperty2.default)(_this, "toggleTranscribing", function (activate, spokenLanguage) {
|
|
445
471
|
return _this.request({
|
|
446
472
|
method: 'PUT',
|
|
447
|
-
url: "".concat(_this.
|
|
473
|
+
url: "".concat(_this.requireLLMChannel().getLocusUrl(), "/controls/"),
|
|
448
474
|
body: {
|
|
449
475
|
transcribe: {
|
|
450
476
|
transcribing: activate
|
|
@@ -468,7 +494,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
468
494
|
_this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.SENDING;
|
|
469
495
|
return _this.request({
|
|
470
496
|
method: 'PUT',
|
|
471
|
-
url: "".concat(_this.
|
|
497
|
+
url: "".concat(_this.requireLLMChannel().getLocusUrl(), "/controls/"),
|
|
472
498
|
body: {
|
|
473
499
|
manualCaption: {
|
|
474
500
|
enable: enable
|
|
@@ -538,6 +564,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
538
564
|
subscribe,
|
|
539
565
|
_ref3$unsubscribe,
|
|
540
566
|
unsubscribe,
|
|
567
|
+
llm,
|
|
541
568
|
isDataChannelTokenEnabled,
|
|
542
569
|
socket,
|
|
543
570
|
datachannelUrl,
|
|
@@ -552,8 +579,9 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
552
579
|
}
|
|
553
580
|
return _context2.abrupt("return");
|
|
554
581
|
case 1:
|
|
582
|
+
llm = _this.requireLLMChannel();
|
|
555
583
|
_context2.next = 2;
|
|
556
|
-
return
|
|
584
|
+
return llm.isDataChannelTokenEnabled();
|
|
557
585
|
case 2:
|
|
558
586
|
isDataChannelTokenEnabled = _context2.sent;
|
|
559
587
|
if (isDataChannelTokenEnabled) {
|
|
@@ -562,8 +590,8 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
562
590
|
}
|
|
563
591
|
return _context2.abrupt("return");
|
|
564
592
|
case 3:
|
|
565
|
-
socket =
|
|
566
|
-
datachannelUrl =
|
|
593
|
+
socket = llm.getSocket();
|
|
594
|
+
datachannelUrl = llm.getDatachannelUrl();
|
|
567
595
|
socket.send({
|
|
568
596
|
id: "".concat(_this.seqNum),
|
|
569
597
|
type: 'subchannelSubscriptionRequest',
|
|
@@ -611,13 +639,30 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
611
639
|
_this.currentCaptionLanguage = undefined;
|
|
612
640
|
_this.keepTranscriptionSubscribed = false;
|
|
613
641
|
|
|
614
|
-
// Subscribe to relay events from the LLM channel
|
|
615
|
-
_this.llmChannel
|
|
616
|
-
|
|
642
|
+
// Subscribe to relay events from the LLM channel if provided
|
|
643
|
+
if (_this.llmChannel) {
|
|
644
|
+
_this.llmChannel.on('event:relay.event', _this.eventProcessor);
|
|
645
|
+
_this.hasSubscribedToEvents = true;
|
|
646
|
+
}
|
|
617
647
|
return _this;
|
|
618
648
|
}
|
|
649
|
+
|
|
650
|
+
/**
|
|
651
|
+
* Returns the LLM channel, throwing if not available.
|
|
652
|
+
* @private
|
|
653
|
+
* @returns {LLMChannel}
|
|
654
|
+
* @throws {Error} If LLM channel is not available
|
|
655
|
+
*/
|
|
619
656
|
(0, _inherits2.default)(VoiceaChannel, _EventEmitter);
|
|
620
657
|
return (0, _createClass2.default)(VoiceaChannel, [{
|
|
658
|
+
key: "requireLLMChannel",
|
|
659
|
+
value: function requireLLMChannel() {
|
|
660
|
+
if (!this.llmChannel) {
|
|
661
|
+
throw new Error('VoiceaChannel: LLM channel not available');
|
|
662
|
+
}
|
|
663
|
+
return this.llmChannel;
|
|
664
|
+
}
|
|
665
|
+
}, {
|
|
621
666
|
key: "deregisterEvents",
|
|
622
667
|
value:
|
|
623
668
|
/**
|
|
@@ -628,8 +673,14 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
628
673
|
this.areCaptionsEnabled = false;
|
|
629
674
|
this.keepTranscriptionSubscribed = false;
|
|
630
675
|
this.captionServiceId = undefined;
|
|
676
|
+
this.targetLLMChannel = undefined;
|
|
677
|
+
this._pendingCaptionRestore = false;
|
|
678
|
+
|
|
679
|
+
// Remove any pending online listener
|
|
680
|
+
this.detachPendingOnline();
|
|
631
681
|
if (this.hasSubscribedToEvents) {
|
|
632
|
-
|
|
682
|
+
var _this$llmChannel2;
|
|
683
|
+
(_this$llmChannel2 = this.llmChannel) === null || _this$llmChannel2 === void 0 ? void 0 : _this$llmChannel2.off('event:relay.event', this.eventProcessor);
|
|
633
684
|
this.hasSubscribedToEvents = false;
|
|
634
685
|
}
|
|
635
686
|
this.announceStatus = _constants.ANNOUNCE_STATUS.IDLE;
|
|
@@ -640,61 +691,109 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_EventEmitter
|
|
|
640
691
|
}
|
|
641
692
|
|
|
642
693
|
/**
|
|
643
|
-
*
|
|
644
|
-
*
|
|
645
|
-
* -
|
|
646
|
-
*
|
|
647
|
-
*
|
|
648
|
-
* @
|
|
649
|
-
* @returns {Promise<void>}
|
|
694
|
+
* Attach a pending 'online' listener to a channel for deferred reconciliation.
|
|
695
|
+
* Detaches any existing listener first.
|
|
696
|
+
* @param {LLMChannel} channel - The channel to attach to
|
|
697
|
+
* @param {Function} callback - The callback to run when 'online' fires
|
|
698
|
+
* @private
|
|
699
|
+
* @returns {void}
|
|
650
700
|
*/
|
|
651
701
|
}, {
|
|
652
|
-
key: "
|
|
653
|
-
value:
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
702
|
+
key: "attachPendingOnline",
|
|
703
|
+
value: function attachPendingOnline(channel, callback) {
|
|
704
|
+
this.detachPendingOnline();
|
|
705
|
+
this._pendingOnlineListener = callback;
|
|
706
|
+
channel.once('online', this._pendingOnlineListener);
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
/**
|
|
710
|
+
* Detach any pending 'online' listener.
|
|
711
|
+
* @private
|
|
712
|
+
* @returns {void}
|
|
713
|
+
*/
|
|
714
|
+
}, {
|
|
715
|
+
key: "detachPendingOnline",
|
|
716
|
+
value: function detachPendingOnline() {
|
|
717
|
+
if (this._pendingOnlineListener && this.llmChannel) {
|
|
718
|
+
this.llmChannel.off('online', this._pendingOnlineListener);
|
|
719
|
+
}
|
|
720
|
+
this._pendingOnlineListener = undefined;
|
|
721
|
+
}
|
|
666
722
|
|
|
667
|
-
|
|
668
|
-
|
|
723
|
+
/**
|
|
724
|
+
* Reset announcement state for a new connection.
|
|
725
|
+
* @private
|
|
726
|
+
* @returns {void}
|
|
727
|
+
*/
|
|
728
|
+
}, {
|
|
729
|
+
key: "resetAnnounceState",
|
|
730
|
+
value: function resetAnnounceState() {
|
|
731
|
+
this.announceStatus = _constants.ANNOUNCE_STATUS.IDLE;
|
|
732
|
+
this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.IDLE;
|
|
733
|
+
this.captionServiceId = undefined;
|
|
734
|
+
this.areCaptionsEnabled = false;
|
|
735
|
+
}
|
|
669
736
|
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
737
|
+
/**
|
|
738
|
+
* Reconcile voicea binding and caption state to match the desired target.
|
|
739
|
+
* This is idempotent - always re-reads targetLLMChannel and current state.
|
|
740
|
+
* A deferred 'online' callback that fires late self-corrects automatically.
|
|
741
|
+
* @private
|
|
742
|
+
* @returns {Promise<void>}
|
|
743
|
+
*/
|
|
744
|
+
}, {
|
|
745
|
+
key: "reconcile",
|
|
746
|
+
value: function reconcile() {
|
|
747
|
+
var _this2 = this;
|
|
748
|
+
var target = this.targetLLMChannel;
|
|
749
|
+
if (!target) return _promise.default.resolve();
|
|
673
750
|
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
751
|
+
// 1. Rebind relay-event subscription if actual != desired
|
|
752
|
+
if (this.llmChannel !== target) {
|
|
753
|
+
if (this.hasSubscribedToEvents && this.llmChannel) {
|
|
754
|
+
this.llmChannel.off('event:relay.event', this.eventProcessor);
|
|
755
|
+
}
|
|
756
|
+
this.detachPendingOnline();
|
|
757
|
+
this.llmChannel = target;
|
|
758
|
+
this.llmChannel.on('event:relay.event', this.eventProcessor);
|
|
759
|
+
this.hasSubscribedToEvents = true;
|
|
760
|
+
this.resetAnnounceState();
|
|
761
|
+
// Mark caption restoration as pending if captions were subscribed
|
|
762
|
+
this._pendingCaptionRestore = this.keepTranscriptionSubscribed;
|
|
763
|
+
}
|
|
679
764
|
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
}
|
|
691
|
-
}, _callee3, this);
|
|
692
|
-
}));
|
|
693
|
-
function switchLLMChannel(_x2) {
|
|
694
|
-
return _switchLLMChannel.apply(this, arguments);
|
|
765
|
+
// 2. Restore captions if pending
|
|
766
|
+
if (!this._pendingCaptionRestore) return _promise.default.resolve();
|
|
767
|
+
if (this.isLLMConnected()) {
|
|
768
|
+
// Channel is connected, restore captions immediately
|
|
769
|
+
this._pendingCaptionRestore = false;
|
|
770
|
+
return this.turnOnCaptions(this.currentSpokenLanguage).then(function () {
|
|
771
|
+
return undefined;
|
|
772
|
+
}).catch(function () {
|
|
773
|
+
// Best-effort restoration
|
|
774
|
+
});
|
|
695
775
|
}
|
|
696
|
-
|
|
697
|
-
|
|
776
|
+
// Channel not yet connected - defer until 'online' then re-reconcile.
|
|
777
|
+
// If target changes meanwhile, reconcile() self-corrects.
|
|
778
|
+
this.attachPendingOnline(target, function () {
|
|
779
|
+
_this2.reconcile();
|
|
780
|
+
});
|
|
781
|
+
return _promise.default.resolve();
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
/**
|
|
785
|
+
* Switch to a different LLM channel while preserving caption state.
|
|
786
|
+
* Used when transitioning between main meeting and practice session.
|
|
787
|
+
* This is a thin intent-setter - actual binding happens in reconcile().
|
|
788
|
+
* @param {LLMChannel} newLLMChannel - The new LLM channel to switch to
|
|
789
|
+
* @returns {Promise<void>}
|
|
790
|
+
*/
|
|
791
|
+
}, {
|
|
792
|
+
key: "switchLLMChannel",
|
|
793
|
+
value: function switchLLMChannel(newLLMChannel) {
|
|
794
|
+
this.targetLLMChannel = newLLMChannel;
|
|
795
|
+
return this.reconcile();
|
|
796
|
+
}
|
|
698
797
|
}]);
|
|
699
798
|
}(_events.default);
|
|
700
799
|
var _default = exports.default = VoiceaChannel;
|
package/dist/voicea.js.map
CHANGED
|
@@ -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","_this$llmChannel$isCo","_this$llmChannel","isConnected","keepTranscriptionSubscribed","llm","requireLLMChannel","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","cause","isAnnounceProcessed","sendAnnouncement","_ref","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","isCaptionProcessing","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","targetLLMChannel","_pendingCaptionRestore","detachPendingOnline","_this$llmChannel2","off","attachPendingOnline","channel","callback","_pendingOnlineListener","once","resetAnnounceState","reconcile","_this2","target","_promise","resolve","switchLLMChannel","newLLMChannel","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 // Target channel for reconciler pattern - the channel voicea WANTS to be bound to\n private targetLLMChannel?: LLMChannel;\n // Single pending 'online' listener for deferred reconciliation\n private _pendingOnlineListener?: () => void;\n // Tracks whether caption restoration is pending (set on switch, cleared on restore)\n private _pendingCaptionRestore = false;\n\n /**\n * Creates a VoiceaChannel, optionally bound to an LLMChannel.\n * If no llmChannel is provided, call switchLLMChannel() later to attach one.\n * @param {LLMChannel} [llmChannel] - The LLM channel to use (optional)\n * @param {Function} request - The request function for making API calls (typically webex.request bound to webex)\n */\n constructor(\n llmChannel: LLMChannel | undefined,\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 if provided\n if (this.llmChannel) {\n this.llmChannel.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n }\n }\n\n /**\n * Returns the LLM channel, throwing if not available.\n * @private\n * @returns {LLMChannel}\n * @throws {Error} If LLM channel is not available\n */\n private requireLLMChannel(): LLMChannel {\n if (!this.llmChannel) {\n throw new Error('VoiceaChannel: LLM channel not available');\n }\n\n return this.llmChannel;\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 this.targetLLMChannel = undefined;\n this._pendingCaptionRestore = false;\n\n // Remove any pending online listener\n this.detachPendingOnline();\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 * Attach a pending 'online' listener to a channel for deferred reconciliation.\n * Detaches any existing listener first.\n * @param {LLMChannel} channel - The channel to attach to\n * @param {Function} callback - The callback to run when 'online' fires\n * @private\n * @returns {void}\n */\n private attachPendingOnline(channel: LLMChannel, callback: () => void): void {\n this.detachPendingOnline();\n this._pendingOnlineListener = callback;\n channel.once('online', this._pendingOnlineListener);\n }\n\n /**\n * Detach any pending 'online' listener.\n * @private\n * @returns {void}\n */\n private detachPendingOnline(): void {\n if (this._pendingOnlineListener && this.llmChannel) {\n this.llmChannel.off('online', this._pendingOnlineListener);\n }\n this._pendingOnlineListener = undefined;\n }\n\n /**\n * Reset announcement state for a new connection.\n * @private\n * @returns {void}\n */\n private resetAnnounceState(): void {\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n this.captionServiceId = undefined;\n this.areCaptionsEnabled = false;\n }\n\n /**\n * Reconcile voicea binding and caption state to match the desired target.\n * This is idempotent - always re-reads targetLLMChannel and current state.\n * A deferred 'online' callback that fires late self-corrects automatically.\n * @private\n * @returns {Promise<void>}\n */\n private reconcile(): Promise<void> {\n const target = this.targetLLMChannel;\n if (!target) return Promise.resolve();\n\n // 1. Rebind relay-event subscription if actual != desired\n if (this.llmChannel !== target) {\n if (this.hasSubscribedToEvents && this.llmChannel) {\n this.llmChannel.off('event:relay.event', this.eventProcessor);\n }\n this.detachPendingOnline();\n this.llmChannel = target;\n this.llmChannel.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n this.resetAnnounceState();\n // Mark caption restoration as pending if captions were subscribed\n this._pendingCaptionRestore = this.keepTranscriptionSubscribed;\n }\n\n // 2. Restore captions if pending\n if (!this._pendingCaptionRestore) return Promise.resolve();\n\n if (this.isLLMConnected()) {\n // Channel is connected, restore captions immediately\n this._pendingCaptionRestore = false;\n\n return this.turnOnCaptions(this.currentSpokenLanguage)\n .then(() => undefined)\n .catch(() => {\n // Best-effort restoration\n });\n }\n // Channel not yet connected - defer until 'online' then re-reconcile.\n // If target changes meanwhile, reconcile() self-corrects.\n this.attachPendingOnline(target, () => {\n this.reconcile();\n });\n\n return Promise.resolve();\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 * This is a thin intent-setter - actual binding happens in reconcile().\n * @param {LLMChannel} newLLMChannel - The new LLM channel to switch to\n * @returns {Promise<void>}\n */\n public switchLLMChannel(newLLMChannel: LLMChannel): Promise<void> {\n this.targetLLMChannel = newLLMChannel;\n\n return this.reconcile();\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() ?? false;\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 const llm = this.requireLLMChannel();\n this.announceStatus = ANNOUNCE_STATUS.JOINING;\n const socket = llm.getSocket();\n const binding = llm.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.requireLLMChannel().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 llm = this.requireLLMChannel();\n const socket = llm.getSocket();\n const binding = llm.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 llm = this.requireLLMChannel();\n const socket = llm.getSocket();\n const binding = llm.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.requireLLMChannel().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', {cause: error});\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.isCaptionProcessing()) 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.requireLLMChannel().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.requireLLMChannel().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 llm = this.requireLLMChannel();\n const isDataChannelTokenEnabled = await llm.isDataChannelTokenEnabled();\n if (!isDataChannelTokenEnabled) return;\n\n const socket = llm.getSocket();\n const datachannelUrl = llm.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":[]}
|