@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/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 the given LLMChannel
43
- * @param {LLMChannel} llmChannel - The LLM channel to use
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
- return _this.llmChannel.isConnected();
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 = _this.llmChannel.getSocket();
221
- var binding = _this.llmChannel.getBinding();
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.llmChannel.getLocusUrl(), "/controls/"),
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 socket = _this.llmChannel.getSocket();
277
- var binding = _this.llmChannel.getBinding();
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 socket = _this.llmChannel.getSocket();
313
- var binding = _this.llmChannel.getBinding();
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.llmChannel.getLocusUrl();
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 (!(_this.captionStatus === _constants.TURN_ON_CAPTION_STATUS.SENDING)) {
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.llmChannel.getLocusUrl(), "/controls/"),
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.llmChannel.getLocusUrl(), "/controls/"),
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 _this.llmChannel.isDataChannelTokenEnabled();
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 = _this.llmChannel.getSocket();
566
- datachannelUrl = _this.llmChannel.getDatachannelUrl();
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.on('event:relay.event', _this.eventProcessor);
616
- _this.hasSubscribedToEvents = true;
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
- this.llmChannel.off('event:relay.event', this.eventProcessor);
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
- * Switch to a different LLM channel while preserving caption state.
644
- * Used when transitioning between main meeting and practice session.
645
- * - Preserves keepTranscriptionSubscribed and spokenLanguage state
646
- * - Unsubscribes from old channel, subscribes to new channel
647
- * - Re-announces and re-enables captions if they were on
648
- * @param {LLMChannel} newLLMChannel - The new LLM channel to switch to
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: "switchLLMChannel",
653
- value: (function () {
654
- var _switchLLMChannel = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3(newLLMChannel) {
655
- var captionsWereOn, spokenLanguage;
656
- return _regenerator.default.wrap(function (_context3) {
657
- while (1) switch (_context3.prev = _context3.next) {
658
- case 0:
659
- // Save current state
660
- captionsWereOn = this.keepTranscriptionSubscribed;
661
- spokenLanguage = this.currentSpokenLanguage; // Unsubscribe from old channel
662
- if (this.hasSubscribedToEvents && this.llmChannel) {
663
- this.llmChannel.off('event:relay.event', this.eventProcessor);
664
- this.hasSubscribedToEvents = false;
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
- // Switch to new channel
668
- this.llmChannel = newLLMChannel;
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
- // Subscribe to new channel
671
- this.llmChannel.on('event:relay.event', this.eventProcessor);
672
- this.hasSubscribedToEvents = true;
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
- // Reset announcement state for new connection
675
- this.announceStatus = _constants.ANNOUNCE_STATUS.IDLE;
676
- this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.IDLE;
677
- this.captionServiceId = undefined;
678
- this.areCaptionsEnabled = false;
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
- // Re-announce and re-enable captions if they were on
681
- if (!captionsWereOn) {
682
- _context3.next = 1;
683
- break;
684
- }
685
- _context3.next = 1;
686
- return this.turnOnCaptions(spokenLanguage);
687
- case 1:
688
- case "end":
689
- return _context3.stop();
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
- return switchLLMChannel;
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;
@@ -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":";;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,UAAA,GAAAF,OAAA;AAIA,IAAAG,UAAA,GAAAH,OAAA;AAeA,IAAAI,MAAA,GAAAJ,OAAA;AAAkD,SAAAK,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,YAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,gCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,gCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAAA,SAAAqB,WAAAnB,CAAA,EAAAG,CAAA,EAAAL,CAAA,WAAAK,CAAA,OAAAiB,gBAAA,CAAAL,OAAA,EAAAZ,CAAA,OAAAkB,2BAAA,CAAAN,OAAA,EAAAf,CAAA,EAAAsB,yBAAA,KAAAC,kBAAA,CAAApB,CAAA,EAAAL,CAAA,YAAAsB,gBAAA,CAAAL,OAAA,EAAAf,CAAA,EAAAwB,WAAA,IAAArB,CAAA,CAAAK,KAAA,CAAAR,CAAA,EAAAF,CAAA;AAAA,SAAAwB,0BAAA,cAAAtB,CAAA,IAAAyB,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAL,kBAAA,CAAAE,OAAA,iCAAAzB,CAAA,aAAAsB,yBAAA,YAAAA,0BAAA,aAAAtB,CAAA,UApBlD;AAGA;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AANA,IAOa6B,aAAa,GAAAC,OAAA,CAAAD,aAAA,0BAAAE,aAAA;EAkBxB;AACF;AACA;AACA;AACA;EACE,SAAAF,cACEG,UAAsB,EACtBC,OAAgF,EAChF;IAAA,IAAAC,KAAA;IAAA,IAAAC,gBAAA,CAAApB,OAAA,QAAAc,aAAA;IACAK,KAAA,GAAAf,UAAA,OAAAU,aAAA;IAAQ,IAAAf,gBAAA,CAAAC,OAAA,EAAAmB,KAAA;IAAA,IAAApB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA;IAAA,IAAApB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA;IAAA,IAAApB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA;IAAA,IAAApB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,2BArBsB,KAAK;IAAA,IAAApB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA;IAAA,IAAApB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA;IAAA,IAAApB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA;IAAA,IAAApB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA;IAAA,IAAApB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA;IAAA,IAAApB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA;IAAA,IAAApB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,qBASD,EAAE;IAAA,IAAApB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA;IA+BtC;AACF;AACA;AACA;AACA;IAJE,IAAApB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,oBAKyB,UAACpC,CAAM,EAAW;MAAA,IAAAsC,UAAA;MACzCF,KAAA,CAAKG,MAAM,GAAGvC,CAAC,CAACwC,cAAc,GAAG,CAAC;MAClC,QAAQxC,CAAC,CAACyC,IAAI,CAACC,SAAS;QACtB,KAAKC,+BAAoB,CAACC,MAAM,CAACC,YAAY;UAC3CT,KAAA,CAAKU,wBAAwB,CAAC9C,CAAC,CAAC+C,OAAO,CAACC,IAAI,CAAC;UAC7CZ,KAAA,CAAKa,cAAc,GAAGC,0BAAe,CAACC,MAAM;UAC5Cf,KAAA,CAAKgB,0BAA0B,CAACpD,CAAC,CAACyC,IAAI,CAACY,aAAa,CAAC;UACrD;QACF,KAAKV,+BAAoB,CAACC,MAAM,CAACU,oBAAoB;UACnDlB,KAAA,CAAKmB,8BAA8B,CAACvD,CAAC,CAACyC,IAAI,CAACY,aAAa,CAAC;UACzD;QACF,KAAKV,+BAAoB,CAACC,MAAM,CAACY,aAAa;UAC5CpB,KAAA,CAAKqB,oBAAoB,CAACzD,CAAC,CAACyC,IAAI,CAACY,aAAa,CAAC;UAC/C;QACF,KAAKV,+BAAoB,CAACe,MAAM,CAACF,aAAa;QAC9C,KAAKb,+BAAoB,CAACe,MAAM,CAACC,SAAS;UACxCvB,KAAA,CAAKwB,0BAA0B,CAAAjD,aAAA,CAAAA,aAAA,KAC1BX,CAAC,CAACyC,IAAI,CAACoB,iBAAiB;YAC3BC,MAAM,GAAAxB,UAAA,GAAEtC,CAAC,CAAC+C,OAAO,cAAAT,UAAA,uBAATA,UAAA,CAAWU,IAAI;YACvBe,WAAW,EAAE/D,CAAC,CAACyC,IAAI,CAACC;UAAS,EAC9B,CAAC;UACF;QACF;UACE;MACJ;IACF,CAAC;IA8DD;AACF;AACA;AACA;AACA;IAJE,IAAA1B,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,gCAKqC,UAACyB,iBAAwC,EAAW;MACvF,IACEA,iBAAiB,CAACG,IAAI,KAAKC,6BAAkB,CAACC,2BAA2B,IACzEL,iBAAiB,CAACG,IAAI,KAAKC,6BAAkB,CAACE,6BAA6B,EAC3E;QACA/B,KAAA,CAAKgC,IAAI,CAACC,yBAAc,CAACC,kBAAkB,EAAE;UAC3CC,OAAO,EAAEV,iBAAiB,CAACG,IAAI,KAAKC,6BAAkB,CAACC,2BAA2B;UAClFM,YAAY,EAAEX,iBAAiB,CAACY,EAAE;UAClCC,WAAW,EAAEb,iBAAiB,CAACa,WAAW;UAC1CZ,MAAM,EAAED,iBAAiB,CAACC,MAAM;UAChCa,MAAM,EAAEd,iBAAiB,CAACE;QAC5B,CAAC,CAAC;MACJ;IACF,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAA/C,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,0BAK+B,UAACiB,aAAoC,EAAW;MAAA,IAAAuB,qBAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;MAC7E,QAAQ9B,aAAa,CAACW,IAAI;QACxB,KAAKC,6BAAkB,CAACmB,0BAA0B;UAChDhD,KAAA,CAAKgC,IAAI,CAACC,yBAAc,CAACgB,WAAW,EAAE;YACpCd,OAAO,EAAE,KAAK;YACdC,YAAY,EAAEnB,aAAa,CAACiC,aAAa;YACzCZ,WAAW,EAAErB,aAAa,CAACqB;UAC7B,CAAC,CAAC;UACF;QAEF,KAAKT,6BAAkB,CAACsB,uBAAuB;UAC7CnD,KAAA,CAAKgC,IAAI,CAACC,yBAAc,CAACgB,WAAW,EAAE;YACpCd,OAAO,EAAE,IAAI;YACbC,YAAY,EAAEnB,aAAa,CAACiC,aAAa;YACzCZ,WAAW,GAAAE,qBAAA,GAAEvB,aAAa,CAACqB,WAAW,cAAAE,qBAAA,uBAAzBA,qBAAA,CAA2BY,GAAG,CAAC,UAACC,UAAU,EAAK;cAC1DA,UAAU,CAACC,SAAS,GAAG,IAAAC,gCAAyB,EAACF,UAAU,CAACG,UAAU,CAAC;cAEvE,OAAOH,UAAU;YACnB,CAAC;UACH,CAAC,CAAC;UACF;QAEF,KAAKxB,6BAAkB,CAAC4B,iBAAiB;UACvCzD,KAAA,CAAKgC,IAAI,CAACC,yBAAc,CAACwB,iBAAiB,EAAE;YAC1CC,IAAI,GAAAjB,qBAAA,GAAExB,aAAa,CAAC0C,SAAS,cAAAlB,qBAAA,uBAAvBA,qBAAA,CAAyBiB,IAAI;YACnCE,WAAW,GAAAlB,sBAAA,GAAEzB,aAAa,CAAC0C,SAAS,cAAAjB,sBAAA,uBAAvBA,sBAAA,CAAyBmB,YAAY;YAClDC,IAAI,GAAAnB,sBAAA,GAAE1B,aAAa,CAAC0C,SAAS,cAAAhB,sBAAA,uBAAvBA,sBAAA,CAAyBU,UAAU;YACzCU,cAAc,GAAAnB,sBAAA,GAAE3B,aAAa,CAAC0C,SAAS,cAAAf,sBAAA,uBAAvBA,sBAAA,CAAyBoB,eAAe;YACxDC,eAAe,GAAApB,sBAAA,GAAE5B,aAAa,CAAC0C,SAAS,cAAAd,sBAAA,uBAAvBA,sBAAA,CAAyBqB,gBAAgB;YAC1DZ,SAAS,EAAE,IAAAC,gCAAyB,GAAAT,sBAAA,IAAAC,sBAAA,GAAC9B,aAAa,CAAC0C,SAAS,cAAAZ,sBAAA,uBAAvBA,sBAAA,CAAyBS,UAAU,cAAAV,sBAAA,cAAAA,sBAAA,GAAI,CAAC;UAC/E,CAAC,CAAC;UACF;QAEF,KAAKjB,6BAAkB,CAACsC,UAAU;UAChCnE,KAAA,CAAKgC,IAAI,CAACC,yBAAc,CAACmC,WAAW,EAAE;YACpCC,WAAW,EAAE,KAAK;YAClBP,IAAI,EAAE7C,aAAa,CAACqD;UACtB,CAAC,CAAC;UACF;QAEF,KAAKzC,6BAAkB,CAAC0C,QAAQ;QAChC,KAAK1C,6BAAkB,CAAC2C,UAAU;UAChCxE,KAAA,CAAKgC,IAAI,CAACC,yBAAc,CAACmC,WAAW,EAAE;YACpCC,WAAW,EAAEpD,aAAa,CAACW,IAAI,KAAKC,6BAAkB,CAAC0C;UACzD,CAAC,CAAC;UACF;QAEF,KAAK1C,6BAAkB,CAAC4C,iBAAiB;UAAE;YACzC,IAAMC,mBAAmB,GAAG1E,KAAA,CAAK2E,eAAe,CAACC,QAAQ,CAAC3D,aAAa,CAAC4D,QAAQ,CAAC;YACjF,IAAIH,mBAAmB,EAAE;cACvB1E,KAAA,CAAKgC,IAAI,CAACC,yBAAc,CAACwC,iBAAiB,EAAE;gBAC1CK,YAAY,EAAE7D,aAAa,CAAC4D;cAC9B,CAAC,CAAC;YACJ;YACA;UACF;QACA;UACE;MACJ;IACF,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAjG,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,oCAKyC,UAACiB,aAAsC,EAAW;MACzF,IAAIA,aAAa,CAAC8D,UAAU,KAAK,GAAG,EAAE;QACpC/E,KAAA,CAAKgC,IAAI,CAACC,yBAAc,CAAC+C,uBAAuB,EAAE;UAACD,UAAU,EAAE;QAAG,CAAC,CAAC;MACtE,CAAC,MAAM;QACL/E,KAAA,CAAKgC,IAAI,CAACC,yBAAc,CAAC+C,uBAAuB,EAAE;UAChDD,UAAU,EAAE9D,aAAa,CAACgE,SAAS;UACnCC,YAAY,EAAEjE,aAAa,CAACkE;QAC9B,CAAC,CAAC;MACJ;IACF,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAvG,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,gCAKqC,UAACiB,aAAkC,EAAW;MAAA,IAAAmE,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,kBAAA,EAAAC,sBAAA,EAAAC,mBAAA;MACjF,IAAMC,qBAAqB,GAAG;QAC5BC,gBAAgB,GAAAT,qBAAA,GAAEnE,aAAa,aAAbA,aAAa,wBAAAoE,sBAAA,GAAbpE,aAAa,CAAE6E,WAAW,cAAAT,sBAAA,uBAA1BA,sBAAA,CAA4BU,iBAAiB,cAAAX,qBAAA,cAAAA,qBAAA,GAAI,EAAE;QACrEY,YAAY,GAAAV,sBAAA,GAAErE,aAAa,aAAbA,aAAa,wBAAAsE,sBAAA,GAAbtE,aAAa,CAAE6E,WAAW,cAAAP,sBAAA,uBAA1BA,sBAAA,CAA4BU,aAAa,cAAAX,sBAAA,cAAAA,sBAAA,GAAI,CAAC;QAC5DX,eAAe,GAAAa,qBAAA,GAAEvE,aAAa,aAAbA,aAAa,wBAAAwE,kBAAA,GAAbxE,aAAa,CAAEiF,GAAG,cAAAT,kBAAA,uBAAlBA,kBAAA,CAAoBU,gBAAgB,cAAAX,qBAAA,cAAAA,qBAAA,GAAI,EAAE;QAC3DY,qBAAqB,EAAEpG,KAAA,CAAKoG;MAC9B,CAAC;MAEDpG,KAAA,CAAK2E,eAAe,IAAAe,sBAAA,GAAGzE,aAAa,aAAbA,aAAa,wBAAA0E,mBAAA,GAAb1E,aAAa,CAAEiF,GAAG,cAAAP,mBAAA,uBAAlBA,mBAAA,CAAoBQ,gBAAgB,cAAAT,sBAAA,cAAAA,sBAAA,GAAI,EAAE;MACjE1F,KAAA,CAAKgC,IAAI,CAACC,yBAAc,CAACoE,mBAAmB,EAAET,qBAAqB,CAAC;IACtE,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAAhH,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,oBAIwB;MAAA,OAAeA,KAAA,CAAKF,UAAU,CAACwG,WAAW,CAAC,CAAC;IAAA;IAAA,IAAA1H,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,oCAE5B;MAAA,OAAeA,KAAA,CAAKuG,2BAA2B;IAAA;IAEvF;AACF;AACA;AACA;IAHE,IAAA3H,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,sBAI0B,YAAY;MACpCA,KAAA,CAAKa,cAAc,GAAGC,0BAAe,CAAC0F,OAAO;MAC7C,IAAMC,MAAM,GAAGzG,KAAA,CAAKF,UAAU,CAAC4G,SAAS,CAAC,CAAC;MAC1C,IAAMC,OAAO,GAAG3G,KAAA,CAAKF,UAAU,CAAC8G,UAAU,CAAC,CAAC;MAE5C,IAAMC,OAAO,GAAG;QACdxE,EAAE,KAAAyE,MAAA,CAAK9G,KAAA,CAAKG,MAAM,CAAE;QACpByB,IAAI,EAAE,gBAAgB;QACtBmF,UAAU,EAAE,CACV;UACEC,KAAK,EAAEL;QACT,CAAC,CACF;QACD;QACAhG,OAAO,EAAEX,KAAA,CAAKiH,gBAAgB,GAAG;UAACC,EAAE,EAAElH,KAAA,CAAKiH;QAAgB,CAAC,GAAG,CAAC,CAAC;QACjE5G,IAAI,EAAE;UACJ8G,aAAa,EAAE;YACbC,OAAO,EAAE;UACX,CAAC;UACDC,SAAS,EAAE,aAAa;UACxB/G,SAAS,EAAEC,+BAAoB,CAACC,MAAM,CAAC8G;QACzC,CAAC;QACDC,UAAU,KAAAT,MAAA,CAAKU,iBAAM,CAACC,gBAAgB,OAAAX,MAAA,CAAIY,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MAChE,CAAC;MACDnB,MAAM,CAACoB,IAAI,CAAChB,OAAO,CAAC;MACpB7G,KAAA,CAAKG,MAAM,IAAI,CAAC;IAClB,CAAC;IAED;AACF;AACA;AACA;AACA;AACA;IALE,IAAAvB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,uBAM2B,UACzB8E,YAAoB,EACpBgD,kBAAkD;MAAA,OAElD9H,KAAA,CAAKD,OAAO,CAAC;QACXgI,MAAM,EAAE,KAAK;QACbC,GAAG,KAAAlB,MAAA,CAAK9G,KAAA,CAAKF,UAAU,CAACmI,WAAW,CAAC,CAAC,eAAY;QACjDC,IAAI,EAAE;UACJC,UAAU,EAAA5J,aAAA;YACR6J,cAAc,EAAEtD;UAAY,GACxBgD,kBAAkB,IAAI;YAACA,kBAAkB,EAAlBA;UAAkB,CAAC;QAElD;MACF,CAAC,CAAC,CAACO,IAAI,CAAC,YAAM;QACZrI,KAAA,CAAKgC,IAAI,CAACC,yBAAc,CAACqG,sBAAsB,EAAE;UAACxD,YAAY,EAAZA;QAAY,CAAC,CAAC;MAClE,CAAC,CAAC;IAAA;IAEJ;AACF;AACA;AACA;AACA;IAJE,IAAAlG,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,qBAKyB,UAAC8E,YAAoB,EAAW;MACvD,IAAI,CAAC9E,KAAA,CAAKuI,cAAc,CAAC,CAAC,EAAE;QAC1B;MACF;MAEA,IAAM9B,MAAM,GAAGzG,KAAA,CAAKF,UAAU,CAAC4G,SAAS,CAAC,CAAC;MAC1C,IAAMC,OAAO,GAAG3G,KAAA,CAAKF,UAAU,CAAC8G,UAAU,CAAC,CAAC;MAE5CH,MAAM,CAACoB,IAAI,CAAC;QACVxF,EAAE,KAAAyE,MAAA,CAAK9G,KAAA,CAAKG,MAAM,CAAE;QACpByB,IAAI,EAAE,gBAAgB;QACtBmF,UAAU,EAAE,CACV;UACEC,KAAK,EAAEL;QACT,CAAC,CACF;QACDhG,OAAO,EAAE;UACPuG,EAAE,EAAElH,KAAA,CAAKiH;QACX,CAAC;QACD5G,IAAI,EAAE;UACJ8G,aAAa,EAAE;YACbqB,mBAAmB,EAAE1D,YAAY;YACjCzC,EAAE,EAAEqF,aAAI,CAACC,EAAE,CAAC;UACd,CAAC;UACDN,SAAS,EAAE,aAAa;UACxB/G,SAAS,EAAEC,+BAAoB,CAACC,MAAM,CAACiI;QACzC,CAAC;QACDlB,UAAU,KAAAT,MAAA,CAAKU,iBAAM,CAACC,gBAAgB,OAAAX,MAAA,CAAIY,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MAChE,CAAC,CAAC;MACF5H,KAAA,CAAK0I,sBAAsB,GAAG5D,YAAY;MAC1C9E,KAAA,CAAKG,MAAM,IAAI,CAAC;IAClB,CAAC;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IAPE,IAAAvB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,6BAQiC,UAC/B8D,IAAY,EACZ6E,SAAiB,EACjBjF,IAAc,EACdvB,OAAgB,EACP;MACT,IAAI,CAACnC,KAAA,CAAKuI,cAAc,CAAC,CAAC,EAAE;QAC1B;MACF;MAEA,IAAM9B,MAAM,GAAGzG,KAAA,CAAKF,UAAU,CAAC4G,SAAS,CAAC,CAAC;MAC1C,IAAMC,OAAO,GAAG3G,KAAA,CAAKF,UAAU,CAAC8G,UAAU,CAAC,CAAC;MAE5CH,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEoB,IAAI,CAAC;QACXxF,EAAE,KAAAyE,MAAA,CAAK9G,KAAA,CAAKG,MAAM,CAAE;QACpByB,IAAI,EAAE,gBAAgB;QACtBmF,UAAU,EAAE,CACV;UACEC,KAAK,EAAEL;QACT,CAAC,CACF;QACDhG,OAAO,EAAE,CAAC,CAAC;QACXN,IAAI,EAAE;UACJgH,SAAS,EAAE,aAAa;UACxB/G,SAAS,EAAEC,+BAAoB,CAACe,MAAM,CAACC,SAAS;UAChDE,iBAAiB,EAAE;YACjBG,IAAI,EAAEO,OAAO,GACTN,6BAAkB,CAACC,2BAA2B,GAC9CD,6BAAkB,CAACE,6BAA6B;YACpDM,EAAE,EAAEqF,aAAI,CAACC,EAAE,CAAC,CAAC;YACbrF,WAAW,EAAE,CACX;cACEwB,IAAI,EAAJA,IAAI;cACJ8E,YAAY,EAAED,SAAS;cACvBnF,UAAU,EAAEmF,SAAS;cACrBjF,IAAI,EAAJA;YACF,CAAC,CACF;YACDR,aAAa,EAAEwE,aAAI,CAACC,EAAE,CAAC;UACzB;QACF,CAAC;QACDJ,UAAU,KAAAT,MAAA,CAAKU,iBAAM,CAACC,gBAAgB,OAAAX,MAAA,CAAIY,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MAChE,CAAC,CAAC;MACF5H,KAAA,CAAKG,MAAM,IAAI,CAAC;IAClB,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAvB,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,2BAKgC,UAAC8E,YAAqB,EAAgC;MACpF9E,KAAA,CAAK6I,aAAa,GAAGC,iCAAsB,CAACC,OAAO;MAEnD,IAAMC,QAAQ,GAAGhJ,KAAA,CAAKF,UAAU,CAACmI,WAAW,CAAC,CAAC;MAE9C,IAAMC,IAAI,GAAG;QACXC,UAAU,EAAE;UAACc,OAAO,EAAE;QAAI,CAAC;QAC3BnE,YAAY,EAAZA;MACF,CAAC;MAED,OAAO9E,KAAA,CAAKD,OAAO,CAAC;QAClBgI,MAAM,EAAE,KAAK;QACbC,GAAG,KAAAlB,MAAA,CAAKkC,QAAQ,eAAY;QAC5Bd,IAAI,EAAJA;MACF,CAAC,CAAC,CACCG,IAAI,CAAC,YAAM;QACVrI,KAAA,CAAKgC,IAAI,CAACC,yBAAc,CAACiH,kBAAkB,CAAC;QAE5ClJ,KAAA,CAAKmJ,kBAAkB,GAAG,IAAI;QAC9BnJ,KAAA,CAAK6I,aAAa,GAAGC,iCAAsB,CAACM,OAAO;QACnDpJ,KAAA,CAAKqJ,QAAQ,CAAC,CAAC;QACfrJ,KAAA,CAAKsJ,gDAAgD,CAAC;UAACC,SAAS,EAAE,CAAC,eAAe;QAAC,CAAC,EAAE,IAAI,CAAC;MAC7F,CAAC,CAAC,CACDC,KAAK,CAAC,UAACC,KAAK,EAAK;QAChBzJ,KAAA,CAAK6I,aAAa,GAAGC,iCAAsB,CAACY,IAAI;QAChD,MAAM,IAAIC,KAAK,CAAC,uBAAuB,CAAC;MAC1C,CAAC,CAAC;IACN,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAA/K,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,0BAI+B;MAAA,OAC7B,CAACc,0BAAe,CAAC0F,OAAO,EAAE1F,0BAAe,CAACC,MAAM,CAAC,CAAC6D,QAAQ,CAAC5E,KAAA,CAAKa,cAAc,CAAC;IAAA;IAEjF;AACF;AACA;AACA;IAHE,IAAAjC,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,yBAI8B;MAAA,OAAeA,KAAA,CAAKa,cAAc,KAAKC,0BAAe,CAACC,MAAM;IAAA;IAE3F;AACF;AACA;AACA;IAHE,IAAAnC,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,cAIkB,YAAY;MAC5B,IAAIA,KAAA,CAAK4J,mBAAmB,CAAC,CAAC,EAAE;QAC9B;MACF;MACA,IAAI,CAAC5J,KAAA,CAAKuI,cAAc,CAAC,CAAC,EAAE;QAC1B,MAAM,IAAIoB,KAAK,CAAC,8CAA8C,CAAC;MACjE;MACA3J,KAAA,CAAK6J,gBAAgB,CAAC,CAAC;IACzB,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAAjL,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,yBAI8B;MAAA,OAC5B,CAAC8I,iCAAsB,CAACC,OAAO,EAAED,iCAAsB,CAACM,OAAO,CAAC,CAACxE,QAAQ,CAAC5E,KAAA,CAAK6I,aAAa,CAAC;IAAA;IAE/F;AACF;AACA;AACA;AACA;IAJE,IAAAjK,gBAAA,CAAAC,OAAA,EAAAmB,KAAA;MAAA,IAAA8J,IAAA,OAAAC,kBAAA,CAAAlL,OAAA,eAAAmL,YAAA,CAAAnL,OAAA,CAAAoL,IAAA,CAKwB,SAAAC,QAAO9B,cAAuB;QAAA,OAAA4B,YAAA,CAAAnL,OAAA,CAAAsL,IAAA,WAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cAAA,MAChDtK,KAAA,CAAK6I,aAAa,KAAKC,iCAAsB,CAACC,OAAO;gBAAAqB,QAAA,CAAAE,IAAA;gBAAA;cAAA;cAAA,OAAAF,QAAA,CAAAG,MAAA,WAASC,SAAS;YAAA;cAAA,IAEtExK,KAAA,CAAKuI,cAAc,CAAC,CAAC;gBAAA6B,QAAA,CAAAE,IAAA;gBAAA;cAAA;cAAA,MAClB,IAAIX,KAAK,CAAC,+CAA+C,CAAC;YAAA;cAAA,OAAAS,QAAA,CAAAG,MAAA,WAG3DvK,KAAA,CAAKyK,qBAAqB,CAACrC,cAAc,CAAC;YAAA;YAAA;cAAA,OAAAgC,QAAA,CAAAM,IAAA;UAAA;QAAA,GAAAR,OAAA;MAAA,CAClD;MAAA,iBAAAS,EAAA;QAAA,OAAAb,IAAA,CAAAxL,KAAA,OAAAE,SAAA;MAAA;IAAA;IAED;AACF;AACA;AACA;AACA;AACA;IALE,IAAAI,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,wBAM4B,UAC1B4K,QAAiB,EACjBxC,cAAuB,EACO;MAC9B,OAAOpI,KAAA,CAAKD,OAAO,CAAC;QAClBgI,MAAM,EAAE,KAAK;QACbC,GAAG,KAAAlB,MAAA,CAAK9G,KAAA,CAAKF,UAAU,CAACmI,WAAW,CAAC,CAAC,eAAY;QACjDC,IAAI,EAAE;UACJC,UAAU,EAAE;YACV0C,YAAY,EAAED;UAChB,CAAC;UACDxC,cAAc,EAAdA;QACF;MACF,CAAC,CAAC,CAACC,IAAI,CAAC,YAAiC;QACvC,IAAIuC,QAAQ,IAAI,CAAC5K,KAAA,CAAKmJ,kBAAkB,EAAE;UACxC,OAAOnJ,KAAA,CAAK8K,cAAc,CAAC1C,cAAc,CAAC;QAC5C;QAEA,OAAOoC,SAAS;MAClB,CAAC,CAAC;IACJ,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAA5L,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,yBAK6B,UAAC+K,MAAe,EAAgC;MAC3E,IAAI/K,KAAA,CAAKgL,yBAAyB,KAAKC,uCAA4B,CAAClC,OAAO,EAAE,OAAOyB,SAAS;MAE7FxK,KAAA,CAAKgL,yBAAyB,GAAGC,uCAA4B,CAAClC,OAAO;MAErE,OAAO/I,KAAA,CAAKD,OAAO,CAAC;QAClBgI,MAAM,EAAE,KAAK;QACbC,GAAG,KAAAlB,MAAA,CAAK9G,KAAA,CAAKF,UAAU,CAACmI,WAAW,CAAC,CAAC,eAAY;QACjDC,IAAI,EAAE;UACJgD,aAAa,EAAE;YACbH,MAAM,EAANA;UACF;QACF;MACF,CAAC,CAAC,CACC1C,IAAI,CAAC,YAAiC;QACrCrI,KAAA,CAAKgL,yBAAyB,GAAGC,uCAA4B,CAACvB,IAAI;QAElE,OAAOc,SAAS;MAClB,CAAC,CAAC,CACDhB,KAAK,CAAC,YAAM;QACXxJ,KAAA,CAAKgL,yBAAyB,GAAGC,uCAA4B,CAACvB,IAAI;QAClE,MAAM,IAAIC,KAAK,CAAC,6BAA6B,CAAC;MAChD,CAAC,CAAC;IACN,CAAC;IAED;AACF;AACA;AACA;AACA;AACA;IALE,IAAA/K,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,4BAMgC,UAAC8E,YAAoB,EAAEqG,SAAiB,EAAW;MACjFnL,KAAA,CAAKgC,IAAI,CAACC,yBAAc,CAACqG,sBAAsB,EAAE;QAACxD,YAAY,EAAZA,YAAY;QAAEqG,SAAS,EAATA;MAAS,CAAC,CAAC;MAC3EnL,KAAA,CAAKoG,qBAAqB,GAAGtB,YAAY;IAC3C,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAlG,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,8BAKkC,UAACoL,SAAiB,EAAW;MAC7D,IAAI,CAACA,SAAS,EAAE;QACd;MACF;MACA,IAAIpL,KAAA,CAAKiH,gBAAgB,KAAKmE,SAAS,EAAE;QACvCpL,KAAA,CAAKiH,gBAAgB,GAAGmE,SAAS;QACjC,IAAIpL,KAAA,CAAK0I,sBAAsB,EAAE;UAC/B1I,KAAA,CAAKqL,eAAe,CAACrL,KAAA,CAAK0I,sBAAsB,CAAC;QACnD;MACF;IACF,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAA9J,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,sBAI0B;MAAA,OAAcA,KAAA,CAAK6I,aAAa;IAAA;IAE1D;AACF;AACA;AACA;IAHE,IAAAjK,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,uBAI2B;MAAA,OAAcA,KAAA,CAAKa,cAAc;IAAA;IAE5D;AACF;AACA;AACA;AACA;AACA;AACA;IANE,IAAAjC,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,oDAAA+J,kBAAA,CAAAlL,OAAA,eAAAmL,YAAA,CAAAnL,OAAA,CAAAoL,IAAA,CAOuC,SAAAqB,SAAA;MAAA,IAAAC,KAAA;QAAAC,eAAA;QAAAjC,SAAA;QAAAkC,iBAAA;QAAAC,WAAA;QAAAC,yBAAA;QAAAlF,MAAA;QAAAmF,cAAA;QAAAC,MAAA,GAAArN,SAAA;MAAA,OAAAwL,YAAA,CAAAnL,OAAA,CAAAsL,IAAA,WAAA2B,SAAA;QAAA,kBAAAA,SAAA,CAAAzB,IAAA,GAAAyB,SAAA,CAAAxB,IAAA;UAAA;YAAAiB,KAAA,GAAAM,MAAA,CAAApN,MAAA,QAAAoN,MAAA,QAAArB,SAAA,GAAAqB,MAAA,MAMnC,CAAC,CAAC,EAAAL,eAAA,GAAAD,KAAA,CALJhC,SAAS,EAATA,SAAS,GAAAiC,eAAA,cAAG,EAAE,GAAAA,eAAA,EAAAC,iBAAA,GAAAF,KAAA,CACdG,WAAW,EAAXA,WAAW,GAAAD,iBAAA,cAAG,EAAE,GAAAA,iBAAA;YAAA,IAKXzL,KAAA,CAAKuI,cAAc,CAAC,CAAC;cAAAuD,SAAA,CAAAxB,IAAA;cAAA;YAAA;YAAA,OAAAwB,SAAA,CAAAvB,MAAA;UAAA;YAAAuB,SAAA,CAAAxB,IAAA;YAAA,OAEctK,KAAA,CAAKF,UAAU,CAAC6L,yBAAyB,CAAC,CAAC;UAAA;YAA7EA,yBAAyB,GAAAG,SAAA,CAAAC,IAAA;YAAA,IAC1BJ,yBAAyB;cAAAG,SAAA,CAAAxB,IAAA;cAAA;YAAA;YAAA,OAAAwB,SAAA,CAAAvB,MAAA;UAAA;YAExB9D,MAAM,GAAGzG,KAAA,CAAKF,UAAU,CAAC4G,SAAS,CAAC,CAAC;YACpCkF,cAAc,GAAG5L,KAAA,CAAKF,UAAU,CAACkM,iBAAiB,CAAC,CAAC;YAE1DvF,MAAM,CAACoB,IAAI,CAAC;cACVxF,EAAE,KAAAyE,MAAA,CAAK9G,KAAA,CAAKG,MAAM,CAAE;cACpByB,IAAI,EAAE,+BAA+B;cACrCvB,IAAI,EAAE;gBACJ4L,cAAc,EAAEL,cAAc;gBAC9BrC,SAAS,EAATA,SAAS;gBACTmC,WAAW,EAAXA;cACF,CAAC;cACDnE,UAAU,KAAAT,MAAA,CAAKU,iBAAM,CAACC,gBAAgB,OAAAX,MAAA,CAAIY,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;YAChE,CAAC,CAAC;YAEF5H,KAAA,CAAKG,MAAM,IAAI,CAAC;UAAC;UAAA;YAAA,OAAA2L,SAAA,CAAApB,IAAA;QAAA;MAAA,GAAAY,QAAA;IAAA,CAClB;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IAXE,IAAA1M,gBAAA,CAAAC,OAAA,EAAAmB,KAAA,sDAY0D,YAMtC;MAAA,IALlBkM,OAGC,GAAA1N,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAgM,SAAA,GAAAhM,SAAA,MAAG,CAAC,CAAC;MAAA,IACN2N,cAAc,GAAA3N,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAgM,SAAA,GAAAhM,SAAA,MAAG,KAAK;MAEtBwB,KAAA,CAAKuG,2BAA2B,GAAG4F,cAAc;MAEjD,OAAOnM,KAAA,CAAKoM,6BAA6B,CAACF,OAAO,CAAC;IACpD,CAAC;IA/mBClM,KAAA,CAAKF,UAAU,GAAGA,UAAU;IAC5BE,KAAA,CAAKD,OAAO,GAAGA,OAAO;IAEtBC,KAAA,CAAKG,MAAM,GAAG,CAAC;IACfH,KAAA,CAAKmJ,kBAAkB,GAAG,KAAK;IAC/BnJ,KAAA,CAAKiH,gBAAgB,GAAGuD,SAAS;IACjCxK,KAAA,CAAKa,cAAc,GAAGC,0BAAe,CAAC4I,IAAI;IAC1C1J,KAAA,CAAK6I,aAAa,GAAGC,iCAAsB,CAACY,IAAI;IAChD1J,KAAA,CAAKgL,yBAAyB,GAAGC,uCAA4B,CAACvB,IAAI;IAClE1J,KAAA,CAAKoG,qBAAqB,GAAGiG,kCAAuB;IACpDrM,KAAA,CAAK0I,sBAAsB,GAAG8B,SAAS;IACvCxK,KAAA,CAAKuG,2BAA2B,GAAG,KAAK;;IAExC;IACAvG,KAAA,CAAKF,UAAU,CAACwM,EAAE,CAAC,mBAAmB,EAAEtM,KAAA,CAAKuM,cAAc,CAAC;IAC5DvM,KAAA,CAAKwM,qBAAqB,GAAG,IAAI;IAAC,OAAAxM,KAAA;EACpC;EAAC,IAAAyM,UAAA,CAAA5N,OAAA,EAAAc,aAAA,EAAAE,aAAA;EAAA,WAAA6M,aAAA,CAAA7N,OAAA,EAAAc,aAAA;IAAAgN,GAAA;IAAAC,KAAA;IAkCD;AACF;AACA;AACA;IACE,SAAOC,gBAAgBA,CAAA,EAAS;MAC9B,IAAI,CAAC1D,kBAAkB,GAAG,KAAK;MAC/B,IAAI,CAAC5C,2BAA2B,GAAG,KAAK;MACxC,IAAI,CAACU,gBAAgB,GAAGuD,SAAS;MAEjC,IAAI,IAAI,CAACgC,qBAAqB,EAAE;QAC9B,IAAI,CAAC1M,UAAU,CAACgN,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAACP,cAAc,CAAC;QAC7D,IAAI,CAACC,qBAAqB,GAAG,KAAK;MACpC;MAEA,IAAI,CAAC3L,cAAc,GAAGC,0BAAe,CAAC4I,IAAI;MAC1C,IAAI,CAACb,aAAa,GAAGC,iCAAsB,CAACY,IAAI;MAChD,IAAI,CAACsB,yBAAyB,GAAGC,uCAA4B,CAACvB,IAAI;MAClE,IAAI,CAACtD,qBAAqB,GAAGoE,SAAS;MACtC,IAAI,CAAC9B,sBAAsB,GAAG8B,SAAS;IACzC;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAAmC,GAAA;IAAAC,KAAA;MAAA,IAAAG,iBAAA,OAAAhD,kBAAA,CAAAlL,OAAA,eAAAmL,YAAA,CAAAnL,OAAA,CAAAoL,IAAA,CASA,SAAA+C,SAA8BC,aAAyB;QAAA,IAAAC,cAAA,EAAA9E,cAAA;QAAA,OAAA4B,YAAA,CAAAnL,OAAA,CAAAsL,IAAA,WAAAgD,SAAA;UAAA,kBAAAA,SAAA,CAAA9C,IAAA,GAAA8C,SAAA,CAAA7C,IAAA;YAAA;cACrD;cACM4C,cAAc,GAAG,IAAI,CAAC3G,2BAA2B;cACjD6B,cAAc,GAAG,IAAI,CAAChC,qBAAqB,EAEjD;cACA,IAAI,IAAI,CAACoG,qBAAqB,IAAI,IAAI,CAAC1M,UAAU,EAAE;gBACjD,IAAI,CAACA,UAAU,CAACgN,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAACP,cAAc,CAAC;gBAC7D,IAAI,CAACC,qBAAqB,GAAG,KAAK;cACpC;;cAEA;cACA,IAAI,CAAC1M,UAAU,GAAGmN,aAAa;;cAE/B;cACA,IAAI,CAACnN,UAAU,CAACwM,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAACC,cAAc,CAAC;cAC5D,IAAI,CAACC,qBAAqB,GAAG,IAAI;;cAEjC;cACA,IAAI,CAAC3L,cAAc,GAAGC,0BAAe,CAAC4I,IAAI;cAC1C,IAAI,CAACb,aAAa,GAAGC,iCAAsB,CAACY,IAAI;cAChD,IAAI,CAACzC,gBAAgB,GAAGuD,SAAS;cACjC,IAAI,CAACrB,kBAAkB,GAAG,KAAK;;cAE/B;cAAA,KACI+D,cAAc;gBAAAC,SAAA,CAAA7C,IAAA;gBAAA;cAAA;cAAA6C,SAAA,CAAA7C,IAAA;cAAA,OACV,IAAI,CAACQ,cAAc,CAAC1C,cAAc,CAAC;YAAA;YAAA;cAAA,OAAA+E,SAAA,CAAAzC,IAAA;UAAA;QAAA,GAAAsC,QAAA;MAAA,CAE5C;MAAA,SA5BYI,gBAAgBA,CAAAC,GAAA;QAAA,OAAAN,iBAAA,CAAAzO,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAhB4O,gBAAgB;IAAA;EAAA;AAAA,EA5GIE,eAAY;AAAA,IAAAC,QAAA,GAAA3N,OAAA,CAAAf,OAAA,GA8oBhCc,aAAa","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":[]}