@webex/internal-plugin-voicea 2.60.0 → 2.60.1-next.1
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 +15 -9
- package/dist/constants.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/utils.js +1 -2
- package/dist/utils.js.map +1 -1
- package/dist/voicea.js +95 -32
- package/dist/voicea.js.map +1 -1
- package/dist/voicea.types.js.map +1 -1
- package/package.json +18 -17
- package/src/constants.ts +12 -0
- package/src/voicea.ts +97 -26
- package/src/voicea.types.ts +1 -1
- package/test/unit/spec/voicea.js +145 -14
package/dist/constants.js
CHANGED
|
@@ -4,8 +4,8 @@ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/defi
|
|
|
4
4
|
_Object$defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.VOICEA_RELAY_TYPES = exports.VOICEA = exports.TRANSCRIPTION_TYPE = exports.EVENT_TRIGGERS = void 0;
|
|
8
|
-
var EVENT_TRIGGERS = {
|
|
7
|
+
exports.VOICEA_RELAY_TYPES = exports.VOICEA = exports.TURN_ON_CAPTION_STATUS = exports.TRANSCRIPTION_TYPE = exports.EVENT_TRIGGERS = exports.ANNOUNCE_STATUS = void 0;
|
|
8
|
+
var EVENT_TRIGGERS = exports.EVENT_TRIGGERS = {
|
|
9
9
|
VOICEA_ANNOUNCEMENT: 'voicea:announcement',
|
|
10
10
|
CAPTION_LANGUAGE_UPDATE: 'voicea:captionLanguageUpdate',
|
|
11
11
|
SPOKEN_LANGUAGE_UPDATE: 'voicea:spokenLanguageUpdate',
|
|
@@ -16,16 +16,14 @@ var EVENT_TRIGGERS = {
|
|
|
16
16
|
EVA_COMMAND: 'voicea:wxa',
|
|
17
17
|
HIGHLIGHT_CREATED: 'voicea:highlightCreated'
|
|
18
18
|
};
|
|
19
|
-
exports.
|
|
20
|
-
var VOICEA_RELAY_TYPES = {
|
|
19
|
+
var VOICEA_RELAY_TYPES = exports.VOICEA_RELAY_TYPES = {
|
|
21
20
|
ANNOUNCEMENT: 'voicea.annc',
|
|
22
21
|
CLIENT_ANNOUNCEMENT: 'client.annc',
|
|
23
22
|
TRANSLATION_REQUEST: 'voicea.transl.req',
|
|
24
23
|
TRANSLATION_RESPONSE: 'voicea.transl.rsp',
|
|
25
24
|
TRANSCRIPTION: 'voicea.transcription'
|
|
26
25
|
};
|
|
27
|
-
exports.
|
|
28
|
-
var TRANSCRIPTION_TYPE = {
|
|
26
|
+
var TRANSCRIPTION_TYPE = exports.TRANSCRIPTION_TYPE = {
|
|
29
27
|
UNKNOWN: 'unknown',
|
|
30
28
|
EVA_WAKE: 'eva_wake',
|
|
31
29
|
EVA_THANKS: 'eva_thanks',
|
|
@@ -34,7 +32,15 @@ var TRANSCRIPTION_TYPE = {
|
|
|
34
32
|
TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',
|
|
35
33
|
TRANSCRIPT_FINAL_RESULT: 'transcript_final_result'
|
|
36
34
|
};
|
|
37
|
-
exports.
|
|
38
|
-
var
|
|
39
|
-
|
|
35
|
+
var VOICEA = exports.VOICEA = 'voicea';
|
|
36
|
+
var ANNOUNCE_STATUS = exports.ANNOUNCE_STATUS = {
|
|
37
|
+
IDLE: 'idle',
|
|
38
|
+
JOINED: 'joined',
|
|
39
|
+
JOINING: 'joining'
|
|
40
|
+
};
|
|
41
|
+
var TURN_ON_CAPTION_STATUS = exports.TURN_ON_CAPTION_STATUS = {
|
|
42
|
+
IDLE: 'idle',
|
|
43
|
+
ENABLED: 'enabled',
|
|
44
|
+
SENDING: 'sending'
|
|
45
|
+
};
|
|
40
46
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EVENT_TRIGGERS","VOICEA_ANNOUNCEMENT","CAPTION_LANGUAGE_UPDATE","SPOKEN_LANGUAGE_UPDATE","CAPTIONS_TURNED_ON","TRANSCRIBING_ON","TRANSCRIBING_OFF","NEW_CAPTION","EVA_COMMAND","HIGHLIGHT_CREATED","
|
|
1
|
+
{"version":3,"names":["EVENT_TRIGGERS","exports","VOICEA_ANNOUNCEMENT","CAPTION_LANGUAGE_UPDATE","SPOKEN_LANGUAGE_UPDATE","CAPTIONS_TURNED_ON","TRANSCRIBING_ON","TRANSCRIBING_OFF","NEW_CAPTION","EVA_COMMAND","HIGHLIGHT_CREATED","VOICEA_RELAY_TYPES","ANNOUNCEMENT","CLIENT_ANNOUNCEMENT","TRANSLATION_REQUEST","TRANSLATION_RESPONSE","TRANSCRIPTION","TRANSCRIPTION_TYPE","UNKNOWN","EVA_WAKE","EVA_THANKS","EVA_CANCEL","TRANSCRIPT_INTERIM_RESULTS","TRANSCRIPT_FINAL_RESULT","VOICEA","ANNOUNCE_STATUS","IDLE","JOINED","JOINING","TURN_ON_CAPTION_STATUS","ENABLED","SENDING"],"sources":["constants.ts"],"sourcesContent":["export const EVENT_TRIGGERS = {\n VOICEA_ANNOUNCEMENT: 'voicea:announcement',\n CAPTION_LANGUAGE_UPDATE: 'voicea:captionLanguageUpdate',\n SPOKEN_LANGUAGE_UPDATE: 'voicea:spokenLanguageUpdate',\n CAPTIONS_TURNED_ON: 'voicea:captionOn',\n TRANSCRIBING_ON: 'voicea:transcribingOn',\n TRANSCRIBING_OFF: 'voicea:transcribingOff',\n\n NEW_CAPTION: 'voicea:newCaption',\n EVA_COMMAND: 'voicea:wxa',\n HIGHLIGHT_CREATED: 'voicea:highlightCreated',\n};\n\nexport const VOICEA_RELAY_TYPES = {\n ANNOUNCEMENT: 'voicea.annc',\n CLIENT_ANNOUNCEMENT: 'client.annc',\n TRANSLATION_REQUEST: 'voicea.transl.req',\n TRANSLATION_RESPONSE: 'voicea.transl.rsp',\n TRANSCRIPTION: 'voicea.transcription',\n};\n\nexport const TRANSCRIPTION_TYPE = {\n UNKNOWN: 'unknown',\n EVA_WAKE: 'eva_wake',\n EVA_THANKS: 'eva_thanks',\n EVA_CANCEL: 'eva_cancel',\n HIGHLIGHT_CREATED: 'highlight_created',\n TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',\n TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',\n};\n\nexport const VOICEA = 'voicea';\n\nexport const ANNOUNCE_STATUS = {\n IDLE: 'idle',\n JOINED: 'joined',\n JOINING: 'joining',\n};\n\nexport const TURN_ON_CAPTION_STATUS = {\n IDLE: 'idle',\n ENABLED: 'enabled',\n SENDING: 'sending',\n};\n"],"mappings":";;;;;;;AAAO,IAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG;EAC5BE,mBAAmB,EAAE,qBAAqB;EAC1CC,uBAAuB,EAAE,8BAA8B;EACvDC,sBAAsB,EAAE,6BAA6B;EACrDC,kBAAkB,EAAE,kBAAkB;EACtCC,eAAe,EAAE,uBAAuB;EACxCC,gBAAgB,EAAE,wBAAwB;EAE1CC,WAAW,EAAE,mBAAmB;EAChCC,WAAW,EAAE,YAAY;EACzBC,iBAAiB,EAAE;AACrB,CAAC;AAEM,IAAMC,kBAAkB,GAAAV,OAAA,CAAAU,kBAAA,GAAG;EAChCC,YAAY,EAAE,aAAa;EAC3BC,mBAAmB,EAAE,aAAa;EAClCC,mBAAmB,EAAE,mBAAmB;EACxCC,oBAAoB,EAAE,mBAAmB;EACzCC,aAAa,EAAE;AACjB,CAAC;AAEM,IAAMC,kBAAkB,GAAAhB,OAAA,CAAAgB,kBAAA,GAAG;EAChCC,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE,YAAY;EACxBX,iBAAiB,EAAE,mBAAmB;EACtCY,0BAA0B,EAAE,4BAA4B;EACxDC,uBAAuB,EAAE;AAC3B,CAAC;AAEM,IAAMC,MAAM,GAAAvB,OAAA,CAAAuB,MAAA,GAAG,QAAQ;AAEvB,IAAMC,eAAe,GAAAxB,OAAA,CAAAwB,eAAA,GAAG;EAC7BC,IAAI,EAAE,MAAM;EACZC,MAAM,EAAE,QAAQ;EAChBC,OAAO,EAAE;AACX,CAAC;AAEM,IAAMC,sBAAsB,GAAA5B,OAAA,CAAA4B,sBAAA,GAAG;EACpCH,IAAI,EAAE,MAAM;EACZI,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE;AACX,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -16,7 +16,7 @@ _Object$defineProperty(exports, "default", {
|
|
|
16
16
|
});
|
|
17
17
|
var WebexCore = _interopRequireWildcard(require("@webex/webex-core"));
|
|
18
18
|
var _voicea = _interopRequireDefault(require("./voicea"));
|
|
19
|
-
function _getRequireWildcardCache(
|
|
20
|
-
function _interopRequireWildcard(
|
|
19
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof _WeakMap) return null; var r = new _WeakMap(), t = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
20
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? _Object$getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? _Object$defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
21
21
|
WebexCore.registerInternalPlugin('voicea', _voicea.default, {});
|
|
22
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["WebexCore","_interopRequireWildcard","require","_voicea","_interopRequireDefault","_getRequireWildcardCache","
|
|
1
|
+
{"version":3,"names":["WebexCore","_interopRequireWildcard","require","_voicea","_interopRequireDefault","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","registerInternalPlugin","VoiceaChannel"],"sources":["index.ts"],"sourcesContent":["import * as WebexCore from '@webex/webex-core';\n\nimport VoiceaChannel from './voicea';\n\nWebexCore.registerInternalPlugin('voicea', VoiceaChannel, {});\n\nexport {default} from './voicea';\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAqC,SAAAG,yBAAAC,CAAA,6BAAAC,QAAA,mBAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAF,wBAAA,YAAAA,yBAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAL,wBAAAK,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,gBAAAK,OAAA,CAAAL,CAAA,0BAAAA,CAAA,WAAAM,OAAA,EAAAN,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAI,GAAA,CAAAP,CAAA,UAAAG,CAAA,CAAAK,GAAA,CAAAR,CAAA,OAAAS,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,sBAAA,IAAAC,gCAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAC,MAAA,CAAAC,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAlB,CAAA,EAAAc,CAAA,SAAAK,CAAA,GAAAR,CAAA,GAAAE,gCAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAK,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,sBAAA,CAAAH,CAAA,EAAAK,CAAA,EAAAK,CAAA,IAAAV,CAAA,CAAAK,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAL,CAAA,CAAAH,OAAA,GAAAN,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAiB,GAAA,CAAApB,CAAA,EAAAS,CAAA,GAAAA,CAAA;AAErCf,SAAS,CAAC2B,sBAAsB,CAAC,QAAQ,EAAEC,eAAa,EAAE,CAAC,CAAC,CAAC"}
|
package/dist/utils.js
CHANGED
|
@@ -6,10 +6,9 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.millisToMinutesAndSeconds = void 0;
|
|
8
8
|
// eslint-disable-next-line import/prefer-default-export
|
|
9
|
-
var millisToMinutesAndSeconds = function millisToMinutesAndSeconds(millis) {
|
|
9
|
+
var millisToMinutesAndSeconds = exports.millisToMinutesAndSeconds = function millisToMinutesAndSeconds(millis) {
|
|
10
10
|
var minutes = Math.floor(millis / 60000);
|
|
11
11
|
var seconds = (millis % 60000 / 1000).toFixed(0);
|
|
12
12
|
return "".concat(minutes, ":").concat(+seconds < 10 ? '0' : '').concat(seconds);
|
|
13
13
|
};
|
|
14
|
-
exports.millisToMinutesAndSeconds = millisToMinutesAndSeconds;
|
|
15
14
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["millisToMinutesAndSeconds","millis","minutes","Math","floor","seconds","toFixed","concat"
|
|
1
|
+
{"version":3,"names":["millisToMinutesAndSeconds","exports","millis","minutes","Math","floor","seconds","toFixed","concat"],"sources":["utils.ts"],"sourcesContent":["// eslint-disable-next-line import/prefer-default-export\nexport const millisToMinutesAndSeconds = (millis: number) => {\n const minutes = Math.floor(millis / 60000);\n const seconds = ((millis % 60000) / 1000).toFixed(0);\n\n return `${minutes}:${+seconds < 10 ? '0' : ''}${seconds}`;\n};\n"],"mappings":";;;;;;;AAAA;AACO,IAAMA,yBAAyB,GAAAC,OAAA,CAAAD,yBAAA,GAAG,SAA5BA,yBAAyBA,CAAIE,MAAc,EAAK;EAC3D,IAAMC,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACH,MAAM,GAAG,KAAK,CAAC;EAC1C,IAAMI,OAAO,GAAG,CAAEJ,MAAM,GAAG,KAAK,GAAI,IAAI,EAAEK,OAAO,CAAC,CAAC,CAAC;EAEpD,UAAAC,MAAA,CAAUL,OAAO,OAAAK,MAAA,CAAI,CAACF,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAAE,MAAA,CAAGF,OAAO;AACzD,CAAC"}
|
package/dist/voicea.js
CHANGED
|
@@ -22,13 +22,13 @@ var _webexCore = require("@webex/webex-core");
|
|
|
22
22
|
var _constants = require("./constants");
|
|
23
23
|
var _utils = require("./utils");
|
|
24
24
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
25
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
25
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // eslint-disable-next-line no-unused-vars
|
|
26
26
|
/**
|
|
27
27
|
* @description VoiceaChannel to hold single instance of LLM
|
|
28
28
|
* @export
|
|
29
29
|
* @class VoiceaChannel
|
|
30
30
|
*/
|
|
31
|
-
var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
|
|
31
|
+
var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
|
|
32
32
|
(0, _inherits2.default)(VoiceaChannel, _WebexPlugin);
|
|
33
33
|
var _super = _createSuper(VoiceaChannel);
|
|
34
34
|
/**
|
|
@@ -44,10 +44,11 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
44
44
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
45
45
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "namespace", _constants.VOICEA);
|
|
46
46
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "seqNum", void 0);
|
|
47
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hasVoiceaJoined", void 0);
|
|
48
47
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "areCaptionsEnabled", void 0);
|
|
49
48
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hasSubscribedToEvents", false);
|
|
50
49
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "vmcDeviceId", void 0);
|
|
50
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "announceStatus", void 0);
|
|
51
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "captionStatus", void 0);
|
|
51
52
|
/**
|
|
52
53
|
* @param {Object} e
|
|
53
54
|
* @returns {undefined}
|
|
@@ -57,7 +58,7 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
57
58
|
switch (e.data.relayType) {
|
|
58
59
|
case _constants.VOICEA_RELAY_TYPES.ANNOUNCEMENT:
|
|
59
60
|
_this.vmcDeviceId = e.headers.from;
|
|
60
|
-
_this.
|
|
61
|
+
_this.announceStatus = _constants.ANNOUNCE_STATUS.JOINED;
|
|
61
62
|
_this.processAnnouncementMessage(e.data.voiceaPayload);
|
|
62
63
|
break;
|
|
63
64
|
case _constants.VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:
|
|
@@ -182,8 +183,7 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
182
183
|
* @returns {void}
|
|
183
184
|
*/
|
|
184
185
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sendAnnouncement", function () {
|
|
185
|
-
|
|
186
|
-
if (_this.hasVoiceaJoined || !_this.webex.internal.llm.isConnected()) return;
|
|
186
|
+
_this.announceStatus = _constants.ANNOUNCE_STATUS.JOINING;
|
|
187
187
|
_this.listenToEvents();
|
|
188
188
|
// @ts-ignore
|
|
189
189
|
_this.webex.internal.llm.socket.send({
|
|
@@ -261,6 +261,62 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
261
261
|
});
|
|
262
262
|
_this.seqNum += 1;
|
|
263
263
|
});
|
|
264
|
+
/**
|
|
265
|
+
* request turn on Captions
|
|
266
|
+
* @returns {Promise}
|
|
267
|
+
*/
|
|
268
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "requestTurnOnCaptions", function () {
|
|
269
|
+
_this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.SENDING;
|
|
270
|
+
// @ts-ignore
|
|
271
|
+
// eslint-disable-next-line newline-before-return
|
|
272
|
+
return _this.request({
|
|
273
|
+
method: 'PUT',
|
|
274
|
+
// @ts-ignore
|
|
275
|
+
url: "".concat(_this.webex.internal.llm.getLocusUrl(), "/controls/"),
|
|
276
|
+
body: {
|
|
277
|
+
transcribe: {
|
|
278
|
+
caption: true
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}).then(function () {
|
|
282
|
+
_pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
|
|
283
|
+
file: 'voicea',
|
|
284
|
+
function: 'turnOnCaptions'
|
|
285
|
+
}, _constants.EVENT_TRIGGERS.CAPTIONS_TURNED_ON);
|
|
286
|
+
_this.areCaptionsEnabled = true;
|
|
287
|
+
_this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.ENABLED;
|
|
288
|
+
_this.announce();
|
|
289
|
+
}).catch(function () {
|
|
290
|
+
_this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.IDLE;
|
|
291
|
+
throw new Error('turn on captions fail');
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
/**
|
|
295
|
+
* is announce processing
|
|
296
|
+
* @returns {boolean}
|
|
297
|
+
*/
|
|
298
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isAnnounceProcessing", function () {
|
|
299
|
+
return [_constants.ANNOUNCE_STATUS.JOINING, _constants.ANNOUNCE_STATUS.JOINED].includes(_this.announceStatus);
|
|
300
|
+
});
|
|
301
|
+
/**
|
|
302
|
+
* announce to voicea data chanel
|
|
303
|
+
* @returns {void}
|
|
304
|
+
*/
|
|
305
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "announce", function () {
|
|
306
|
+
if (_this.isAnnounceProcessing()) return;
|
|
307
|
+
// @ts-ignore
|
|
308
|
+
if (!_this.webex.internal.llm.isConnected()) {
|
|
309
|
+
throw new Error('voicea can not announce before llm connected');
|
|
310
|
+
}
|
|
311
|
+
_this.sendAnnouncement();
|
|
312
|
+
});
|
|
313
|
+
/**
|
|
314
|
+
* is turn on caption processing
|
|
315
|
+
* @returns {boolean}
|
|
316
|
+
*/
|
|
317
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isCaptionProcessing", function () {
|
|
318
|
+
return [_constants.TURN_ON_CAPTION_STATUS.SENDING, _constants.TURN_ON_CAPTION_STATUS.ENABLED].includes(_this.captionStatus);
|
|
319
|
+
});
|
|
264
320
|
/**
|
|
265
321
|
* Turn on Captions
|
|
266
322
|
* @returns {Promise}
|
|
@@ -269,30 +325,20 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
269
325
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
270
326
|
while (1) switch (_context.prev = _context.next) {
|
|
271
327
|
case 0:
|
|
272
|
-
if (!
|
|
328
|
+
if (!_this.isCaptionProcessing()) {
|
|
273
329
|
_context.next = 2;
|
|
274
330
|
break;
|
|
275
331
|
}
|
|
276
332
|
return _context.abrupt("return", undefined);
|
|
277
333
|
case 2:
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
}
|
|
287
|
-
}).then(function () {
|
|
288
|
-
_pluginMeetings.TriggerProxy.trigger((0, _assertThisInitialized2.default)(_this), {
|
|
289
|
-
file: 'voicea',
|
|
290
|
-
function: 'turnOnCaptions'
|
|
291
|
-
}, _constants.EVENT_TRIGGERS.CAPTIONS_TURNED_ON);
|
|
292
|
-
_this.areCaptionsEnabled = true;
|
|
293
|
-
_this.sendAnnouncement();
|
|
294
|
-
}));
|
|
295
|
-
case 3:
|
|
334
|
+
if (_this.webex.internal.llm.isConnected()) {
|
|
335
|
+
_context.next = 4;
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
338
|
+
throw new Error('can not turn on captions before llm connected');
|
|
339
|
+
case 4:
|
|
340
|
+
return _context.abrupt("return", _this.requestTurnOnCaptions());
|
|
341
|
+
case 5:
|
|
296
342
|
case "end":
|
|
297
343
|
return _context.stop();
|
|
298
344
|
}
|
|
@@ -318,7 +364,7 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
318
364
|
}
|
|
319
365
|
}
|
|
320
366
|
}).then(function () {
|
|
321
|
-
if (activate && !_this.areCaptionsEnabled
|
|
367
|
+
if (activate && !_this.areCaptionsEnabled) _this.turnOnCaptions();
|
|
322
368
|
}));
|
|
323
369
|
case 1:
|
|
324
370
|
case "end":
|
|
@@ -330,10 +376,25 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
330
376
|
return _ref2.apply(this, arguments);
|
|
331
377
|
};
|
|
332
378
|
}());
|
|
379
|
+
/**
|
|
380
|
+
* get caption status
|
|
381
|
+
* @returns {string}
|
|
382
|
+
*/
|
|
383
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getCaptionStatus", function () {
|
|
384
|
+
return _this.captionStatus;
|
|
385
|
+
});
|
|
386
|
+
/**
|
|
387
|
+
* get announce status
|
|
388
|
+
* @returns {string}
|
|
389
|
+
*/
|
|
390
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getAnnounceStatus", function () {
|
|
391
|
+
return _this.announceStatus;
|
|
392
|
+
});
|
|
333
393
|
_this.seqNum = 1;
|
|
334
|
-
_this.hasVoiceaJoined = false;
|
|
335
394
|
_this.areCaptionsEnabled = false;
|
|
336
395
|
_this.vmcDeviceId = undefined;
|
|
396
|
+
_this.announceStatus = _constants.ANNOUNCE_STATUS.IDLE;
|
|
397
|
+
_this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.IDLE;
|
|
337
398
|
return _this;
|
|
338
399
|
}
|
|
339
400
|
(0, _createClass2.default)(VoiceaChannel, [{
|
|
@@ -351,21 +412,23 @@ var VoiceaChannel = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
351
412
|
}
|
|
352
413
|
}
|
|
353
414
|
|
|
354
|
-
|
|
415
|
+
/**
|
|
416
|
+
* Listen to websocket messages
|
|
417
|
+
* @returns {void}
|
|
418
|
+
*/
|
|
355
419
|
}, {
|
|
356
420
|
key: "deregisterEvents",
|
|
357
421
|
value: function deregisterEvents() {
|
|
358
|
-
this.hasVoiceaJoined = false;
|
|
359
422
|
this.areCaptionsEnabled = false;
|
|
360
423
|
this.vmcDeviceId = undefined;
|
|
361
424
|
// @ts-ignore
|
|
362
425
|
this.webex.internal.llm.off('event:relay.event', this.eventProcessor);
|
|
363
426
|
this.hasSubscribedToEvents = false;
|
|
427
|
+
this.announceStatus = _constants.ANNOUNCE_STATUS.IDLE;
|
|
428
|
+
this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.IDLE;
|
|
364
429
|
}
|
|
365
430
|
}]);
|
|
366
431
|
return VoiceaChannel;
|
|
367
432
|
}(_webexCore.WebexPlugin);
|
|
368
|
-
exports.
|
|
369
|
-
var _default = VoiceaChannel;
|
|
370
|
-
exports.default = _default;
|
|
433
|
+
var _default = exports.default = VoiceaChannel;
|
|
371
434
|
//# sourceMappingURL=voicea.js.map
|
package/dist/voicea.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uuid","_interopRequireDefault","require","_pluginMeetings","_webexCore","_constants","_utils","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","VoiceaChannel","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","VOICEA","seqNum","sequenceNumber","data","relayType","VOICEA_RELAY_TYPES","ANNOUNCEMENT","vmcDeviceId","headers","from","hasVoiceaJoined","processAnnouncementMessage","voiceaPayload","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","type","TRANSCRIPTION_TYPE","TRANSCRIPT_INTERIM_RESULTS","Trigger","trigger","file","function","EVENT_TRIGGERS","NEW_CAPTION","isFinal","transcriptId","transcript_id","transcripts","TRANSCRIPT_FINAL_RESULT","transcript","csis","text","transcriptLanguageCode","transcript_language_code","timestamp","millisToMinutesAndSeconds","end_millis","HIGHLIGHT_CREATED","highlight","highlightId","highlight_id","highlightLabel","highlight_label","highlightSource","highlight_source","EVA_THANKS","EVA_COMMAND","isListening","command_response","EVA_WAKE","EVA_CANCEL","statusCode","CAPTION_LANGUAGE_UPDATE","errorCode","errorMessage","message","_voiceaPayload$transl","_voiceaPayload$transl2","_voiceaPayload$transl3","_voiceaPayload$transl4","_voiceaPayload$ASR$sp","_voiceaPayload$ASR","voiceaLanguageOptions","captionLanguages","translation","allowed_languages","maxLanguages","max_languages","spokenLanguages","ASR","spoken_languages","VOICEA_ANNOUNCEMENT","webex","internal","llm","isConnected","listenToEvents","socket","send","id","recipients","route","getBinding","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","languageCode","request","method","url","getLocusUrl","body","then","SPOKEN_LANGUAGE_UPDATE","to","translationLanguage","TRANSLATION_REQUEST","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","areCaptionsEnabled","abrupt","undefined","transcribe","caption","CAPTIONS_TURNED_ON","sendAnnouncement","stop","_ref2","_callee2","activate","_callee2$","_context2","transcribing","turnOnCaptions","_x","_createClass2","key","value","hasSubscribedToEvents","on","eventProcessor","deregisterEvents","off","WebexPlugin","exports","_default"],"sources":["voicea.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {TriggerProxy as Trigger} from '@webex/plugin-meetings';\nimport {WebexPlugin, config} from '@webex/webex-core';\n\nimport {EVENT_TRIGGERS, VOICEA_RELAY_TYPES, TRANSCRIPTION_TYPE, VOICEA} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n IVoiceaChannel,\n} from './voicea.types';\nimport {millisToMinutesAndSeconds} from './utils';\n\n/**\n * @description VoiceaChannel to hold single instance of LLM\n * @export\n * @class VoiceaChannel\n */\nexport class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {\n namespace = VOICEA;\n\n private seqNum: number;\n\n private hasVoiceaJoined: boolean;\n\n private areCaptionsEnabled: boolean;\n\n private hasSubscribedToEvents = false;\n\n private vmcDeviceId?: string;\n\n /**\n * @param {Object} e\n * @returns {undefined}\n */\n\n private eventProcessor = (e) => {\n this.seqNum = e.sequenceNumber + 1;\n switch (e.data.relayType) {\n case VOICEA_RELAY_TYPES.ANNOUNCEMENT:\n this.vmcDeviceId = e.headers.from;\n this.hasVoiceaJoined = true;\n this.processAnnouncementMessage(e.data.voiceaPayload);\n break;\n case VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.data.voiceaPayload);\n break;\n case VOICEA_RELAY_TYPES.TRANSCRIPTION:\n this.processTranscription(e.data.voiceaPayload);\n break;\n default:\n break;\n }\n };\n\n /**\n * Listen to websocket messages\n * @returns {undefined}\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n // @ts-ignore\n this.webex.internal.llm.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n }\n }\n\n // @ts-ignore\n public deregisterEvents() {\n this.hasVoiceaJoined = false;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n // @ts-ignore\n this.webex.internal.llm.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n }\n\n /**\n * Initializes Voicea plugin\n * @param {any} args\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n this.hasVoiceaJoined = false;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\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 Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.NEW_CAPTION,\n {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.NEW_CAPTION,\n {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n transcript: {\n csis: voiceaPayload.csis,\n text: voiceaPayload.transcript.text,\n transcriptLanguageCode: voiceaPayload.transcript.transcript_language_code,\n },\n timestamp: millisToMinutesAndSeconds(voiceaPayload.transcript.end_millis),\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.HIGHLIGHT_CREATED,\n {\n csis: voiceaPayload.highlight.csis,\n highlightId: voiceaPayload.highlight.highlight_id,\n text: voiceaPayload.highlight.transcript,\n highlightLabel: voiceaPayload.highlight.highlight_label,\n highlightSource: voiceaPayload.highlight.highlight_source,\n timestamp: millisToMinutesAndSeconds(voiceaPayload.highlight.end_millis),\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.EVA_COMMAND,\n {\n isListening: false,\n text: voiceaPayload.command_response,\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.EVA_WAKE:\n case TRANSCRIPTION_TYPE.EVA_CANCEL:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.EVA_COMMAND,\n {\n isListening: voiceaPayload.type === TRANSCRIPTION_TYPE.EVA_WAKE,\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 Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processCaptionLanguageResponse',\n },\n EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE,\n {statusCode: 200}\n );\n } else {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processCaptionLanguageResponse',\n },\n EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE,\n {statusCode: voiceaPayload.errorCode, 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 };\n\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processAnnouncementMessage',\n },\n EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT,\n voiceaLanguageOptions\n );\n };\n\n /**\n * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n private sendAnnouncement = (): void => {\n // @ts-ignore\n if (this.hasVoiceaJoined || !this.webex.internal.llm.isConnected()) return;\n\n this.listenToEvents();\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {},\n data: {\n clientPayload: {\n version: 'v2',\n },\n eventType: 'relay.event',\n relayType: VOICEA_RELAY_TYPES.CLIENT_ANNOUNCEMENT,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Set Spoken Language for the meeting\n * @param {string} languageCode\n * @returns {Promise}\n */\n public setSpokenLanguage = (languageCode: string): Promise<void> =>\n // @ts-ignore\n this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n languageCode,\n },\n }).then(() => {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'setSpokenLanguage',\n },\n EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE,\n {languageCode}\n );\n });\n\n /**\n * Request Language translation\n * @param {string} languageCode\n * @returns {void}\n */\n public requestLanguage = (languageCode: string): void => {\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {\n to: this.vmcDeviceId,\n },\n data: {\n clientPayload: {\n translationLanguage: languageCode,\n id: uuid.v4(),\n },\n eventType: 'relay.event',\n relayType: VOICEA_RELAY_TYPES.TRANSLATION_REQUEST,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Turn on Captions\n * @returns {Promise}\n */\n public turnOnCaptions = async (): undefined | Promise<void> => {\n if (this.hasVoiceaJoined && this.areCaptionsEnabled) return undefined;\n // @ts-ignore\n // eslint-disable-next-line newline-before-return\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {caption: true},\n },\n }).then(() => {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'turnOnCaptions',\n },\n EVENT_TRIGGERS.CAPTIONS_TURNED_ON\n );\n this.areCaptionsEnabled = true;\n this.sendAnnouncement();\n });\n };\n\n /**\n * Toggle transcribing for highlights\n * @param {bool} activate if true transcribing is turned on\n * @returns {Promise}\n */\n public toggleTranscribing = async (activate: boolean): undefined | Promise<void> => {\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {transcribing: activate},\n },\n }).then(() => {\n if (activate && !this.areCaptionsEnabled && !this.hasVoiceaJoined) this.turnOnCaptions();\n });\n };\n}\n\nexport default VoiceaChannel;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_uuid","_interopRequireDefault","require","_pluginMeetings","_webexCore","_constants","_utils","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","VoiceaChannel","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","VOICEA","seqNum","sequenceNumber","data","relayType","VOICEA_RELAY_TYPES","ANNOUNCEMENT","vmcDeviceId","headers","from","announceStatus","ANNOUNCE_STATUS","JOINED","processAnnouncementMessage","voiceaPayload","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","type","TRANSCRIPTION_TYPE","TRANSCRIPT_INTERIM_RESULTS","Trigger","trigger","file","function","EVENT_TRIGGERS","NEW_CAPTION","isFinal","transcriptId","transcript_id","transcripts","TRANSCRIPT_FINAL_RESULT","transcript","csis","text","transcriptLanguageCode","transcript_language_code","timestamp","millisToMinutesAndSeconds","end_millis","HIGHLIGHT_CREATED","highlight","highlightId","highlight_id","highlightLabel","highlight_label","highlightSource","highlight_source","EVA_THANKS","EVA_COMMAND","isListening","command_response","EVA_WAKE","EVA_CANCEL","statusCode","CAPTION_LANGUAGE_UPDATE","errorCode","errorMessage","message","_voiceaPayload$transl","_voiceaPayload$transl2","_voiceaPayload$transl3","_voiceaPayload$transl4","_voiceaPayload$ASR$sp","_voiceaPayload$ASR","voiceaLanguageOptions","captionLanguages","translation","allowed_languages","maxLanguages","max_languages","spokenLanguages","ASR","spoken_languages","VOICEA_ANNOUNCEMENT","JOINING","listenToEvents","webex","internal","llm","socket","send","id","recipients","route","getBinding","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","languageCode","request","method","url","getLocusUrl","body","then","SPOKEN_LANGUAGE_UPDATE","isConnected","to","translationLanguage","TRANSLATION_REQUEST","captionStatus","TURN_ON_CAPTION_STATUS","SENDING","transcribe","caption","CAPTIONS_TURNED_ON","areCaptionsEnabled","ENABLED","announce","catch","IDLE","Error","includes","isAnnounceProcessing","sendAnnouncement","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","isCaptionProcessing","abrupt","undefined","requestTurnOnCaptions","stop","_ref2","_callee2","activate","_callee2$","_context2","transcribing","turnOnCaptions","_x","_createClass2","key","value","hasSubscribedToEvents","on","eventProcessor","deregisterEvents","off","WebexPlugin","_default"],"sources":["voicea.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {TriggerProxy as Trigger} from '@webex/plugin-meetings';\nimport {WebexPlugin, config} from '@webex/webex-core';\n\nimport {\n EVENT_TRIGGERS,\n VOICEA_RELAY_TYPES,\n TRANSCRIPTION_TYPE,\n VOICEA,\n ANNOUNCE_STATUS,\n TURN_ON_CAPTION_STATUS,\n} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n IVoiceaChannel,\n} from './voicea.types';\nimport {millisToMinutesAndSeconds} from './utils';\n\n/**\n * @description VoiceaChannel to hold single instance of LLM\n * @export\n * @class VoiceaChannel\n */\nexport class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {\n namespace = VOICEA;\n\n private seqNum: number;\n\n private areCaptionsEnabled: boolean;\n\n private hasSubscribedToEvents = false;\n\n private vmcDeviceId?: string;\n\n private announceStatus: string;\n\n private captionStatus: string;\n\n /**\n * @param {Object} e\n * @returns {undefined}\n */\n\n private eventProcessor = (e) => {\n this.seqNum = e.sequenceNumber + 1;\n switch (e.data.relayType) {\n case VOICEA_RELAY_TYPES.ANNOUNCEMENT:\n this.vmcDeviceId = e.headers.from;\n this.announceStatus = ANNOUNCE_STATUS.JOINED;\n this.processAnnouncementMessage(e.data.voiceaPayload);\n break;\n case VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.data.voiceaPayload);\n break;\n case VOICEA_RELAY_TYPES.TRANSCRIPTION:\n this.processTranscription(e.data.voiceaPayload);\n break;\n default:\n break;\n }\n };\n\n /**\n * Listen to websocket messages\n * @returns {undefined}\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n // @ts-ignore\n this.webex.internal.llm.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n }\n }\n\n /**\n * Listen to websocket messages\n * @returns {void}\n */\n public deregisterEvents() {\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n // @ts-ignore\n this.webex.internal.llm.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n }\n\n /**\n * Initializes Voicea plugin\n * @param {any} args\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n }\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 Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.NEW_CAPTION,\n {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.NEW_CAPTION,\n {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n transcript: {\n csis: voiceaPayload.csis,\n text: voiceaPayload.transcript.text,\n transcriptLanguageCode: voiceaPayload.transcript.transcript_language_code,\n },\n timestamp: millisToMinutesAndSeconds(voiceaPayload.transcript.end_millis),\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.HIGHLIGHT_CREATED,\n {\n csis: voiceaPayload.highlight.csis,\n highlightId: voiceaPayload.highlight.highlight_id,\n text: voiceaPayload.highlight.transcript,\n highlightLabel: voiceaPayload.highlight.highlight_label,\n highlightSource: voiceaPayload.highlight.highlight_source,\n timestamp: millisToMinutesAndSeconds(voiceaPayload.highlight.end_millis),\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.EVA_COMMAND,\n {\n isListening: false,\n text: voiceaPayload.command_response,\n }\n );\n break;\n\n case TRANSCRIPTION_TYPE.EVA_WAKE:\n case TRANSCRIPTION_TYPE.EVA_CANCEL:\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processTranscription',\n },\n EVENT_TRIGGERS.EVA_COMMAND,\n {\n isListening: voiceaPayload.type === TRANSCRIPTION_TYPE.EVA_WAKE,\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 Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processCaptionLanguageResponse',\n },\n EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE,\n {statusCode: 200}\n );\n } else {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processCaptionLanguageResponse',\n },\n EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE,\n {statusCode: voiceaPayload.errorCode, 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 };\n\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'processAnnouncementMessage',\n },\n EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT,\n voiceaLanguageOptions\n );\n };\n\n /**\n * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n private sendAnnouncement = (): void => {\n this.announceStatus = ANNOUNCE_STATUS.JOINING;\n this.listenToEvents();\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {},\n data: {\n clientPayload: {\n version: 'v2',\n },\n eventType: 'relay.event',\n relayType: VOICEA_RELAY_TYPES.CLIENT_ANNOUNCEMENT,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Set Spoken Language for the meeting\n * @param {string} languageCode\n * @returns {Promise}\n */\n public setSpokenLanguage = (languageCode: string): Promise<void> =>\n // @ts-ignore\n this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n languageCode,\n },\n }).then(() => {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'setSpokenLanguage',\n },\n EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE,\n {languageCode}\n );\n });\n\n /**\n * Request Language translation\n * @param {string} languageCode\n * @returns {void}\n */\n public requestLanguage = (languageCode: string): void => {\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {\n to: this.vmcDeviceId,\n },\n data: {\n clientPayload: {\n translationLanguage: languageCode,\n id: uuid.v4(),\n },\n eventType: 'relay.event',\n relayType: VOICEA_RELAY_TYPES.TRANSLATION_REQUEST,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * request turn on Captions\n * @returns {Promise}\n */\n private requestTurnOnCaptions = (): undefined | Promise<void> => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.SENDING;\n // @ts-ignore\n // eslint-disable-next-line newline-before-return\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {caption: true},\n },\n })\n .then(() => {\n Trigger.trigger(\n this,\n {\n file: 'voicea',\n function: 'turnOnCaptions',\n },\n EVENT_TRIGGERS.CAPTIONS_TURNED_ON\n );\n this.areCaptionsEnabled = true;\n this.captionStatus = TURN_ON_CAPTION_STATUS.ENABLED;\n this.announce();\n })\n .catch(() => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n throw new Error('turn on captions fail');\n });\n };\n\n /**\n * is announce processing\n * @returns {boolean}\n */\n private isAnnounceProcessing = () =>\n [ANNOUNCE_STATUS.JOINING, ANNOUNCE_STATUS.JOINED].includes(this.announceStatus);\n\n /**\n * announce to voicea data chanel\n * @returns {void}\n */\n public announce = () => {\n if (this.isAnnounceProcessing()) return;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('voicea can not announce before llm connected');\n }\n this.sendAnnouncement();\n };\n\n /**\n * is turn on caption processing\n * @returns {boolean}\n */\n private isCaptionProcessing = () =>\n [TURN_ON_CAPTION_STATUS.SENDING, TURN_ON_CAPTION_STATUS.ENABLED].includes(this.captionStatus);\n\n /**\n * Turn on Captions\n * @returns {Promise}\n */\n public turnOnCaptions = async (): undefined | Promise<void> => {\n if (this.isCaptionProcessing()) return undefined;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('can not turn on captions before llm connected');\n }\n\n return this.requestTurnOnCaptions();\n };\n\n /**\n * Toggle transcribing for highlights\n * @param {bool} activate if true transcribing is turned on\n * @returns {Promise}\n */\n public toggleTranscribing = async (activate: boolean): undefined | Promise<void> => {\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {transcribing: activate},\n },\n }).then(() => {\n if (activate && !this.areCaptionsEnabled) this.turnOnCaptions();\n });\n };\n\n /**\n * get caption status\n * @returns {string}\n */\n public getCaptionStatus = () => this.captionStatus;\n\n /**\n * get announce status\n * @returns {string}\n */\n public getAnnounceStatus = () => this.announceStatus;\n}\n\nexport default VoiceaChannel;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEA,IAAAG,UAAA,GAAAH,OAAA;AAeA,IAAAI,MAAA,GAAAJ,OAAA;AAAkD,SAAAK,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAAC,OAAA,EAAAN,OAAA,GAAAO,MAAA,MAAAN,yBAAA,QAAAO,SAAA,OAAAH,gBAAA,CAAAC,OAAA,QAAAG,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAN,KAAA,EAAAO,SAAA,EAAAH,SAAA,YAAAD,MAAA,GAAAH,KAAA,CAAAQ,KAAA,OAAAD,SAAA,gBAAAE,2BAAA,CAAAP,OAAA,QAAAC,MAAA;AAAA,SAAAL,0BAAA,eAAAY,OAAA,qBAAAJ,kBAAA,oBAAAA,kBAAA,CAAAK,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAV,kBAAA,CAAAO,OAAA,8CAAAI,CAAA,sBAPlD;AASA;AACA;AACA;AACA;AACA;AAJA,IAKaC,aAAa,GAAAC,OAAA,CAAAD,aAAA,0BAAAE,YAAA;EAAA,IAAAC,UAAA,CAAAnB,OAAA,EAAAgB,aAAA,EAAAE,YAAA;EAAA,IAAAE,MAAA,GAAA3B,YAAA,CAAAuB,aAAA;EAiExB;AACF;AACA;AACA;EACE,SAAAA,cAAA,EAAqB;IAAA,IAAAK,KAAA;IAAA,IAAAC,gBAAA,CAAAtB,OAAA,QAAAgB,aAAA;IAAA,SAAAO,IAAA,GAAAlB,SAAA,CAAAmB,MAAA,EAANC,IAAI,OAAAC,KAAA,CAAAH,IAAA,GAAAI,IAAA,MAAAA,IAAA,GAAAJ,IAAA,EAAAI,IAAA;MAAJF,IAAI,CAAAE,IAAA,IAAAtB,SAAA,CAAAsB,IAAA;IAAA;IACjBN,KAAA,GAAAD,MAAA,CAAAN,IAAA,CAAAR,KAAA,CAAAc,MAAA,SAAAQ,MAAA,CAASH,IAAI;IAAE,IAAAI,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,gBArELU,iBAAM;IAAA,IAAAF,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;IAAA,IAAAQ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;IAAA,IAAAQ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,4BAMc,KAAK;IAAA,IAAAQ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;IAAA,IAAAQ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;IAAA,IAAAQ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;IAQrC;AACF;AACA;AACA;IAHE,IAAAQ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,qBAKyB,UAACN,CAAC,EAAK;MAC9BM,KAAA,CAAKW,MAAM,GAAGjB,CAAC,CAACkB,cAAc,GAAG,CAAC;MAClC,QAAQlB,CAAC,CAACmB,IAAI,CAACC,SAAS;QACtB,KAAKC,6BAAkB,CAACC,YAAY;UAClChB,KAAA,CAAKiB,WAAW,GAAGvB,CAAC,CAACwB,OAAO,CAACC,IAAI;UACjCnB,KAAA,CAAKoB,cAAc,GAAGC,0BAAe,CAACC,MAAM;UAC5CtB,KAAA,CAAKuB,0BAA0B,CAAC7B,CAAC,CAACmB,IAAI,CAACW,aAAa,CAAC;UACrD;QACF,KAAKT,6BAAkB,CAACU,oBAAoB;UAC1CzB,KAAA,CAAK0B,8BAA8B,CAAChC,CAAC,CAACmB,IAAI,CAACW,aAAa,CAAC;UACzD;QACF,KAAKT,6BAAkB,CAACY,aAAa;UACnC3B,KAAA,CAAK4B,oBAAoB,CAAClC,CAAC,CAACmB,IAAI,CAACW,aAAa,CAAC;UAC/C;QACF;UACE;MACJ;IACF,CAAC;IAyCD;AACF;AACA;AACA;AACA;IAJE,IAAAhB,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,2BAK+B,UAACwB,aAAoC,EAAW;MAC7E,QAAQA,aAAa,CAACK,IAAI;QACxB,KAAKC,6BAAkB,CAACC,0BAA0B;UAChDC,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;YACEkC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACC,WAAW,EAC1B;YACEC,OAAO,EAAE,KAAK;YACdC,YAAY,EAAEf,aAAa,CAACgB,aAAa;YACzCC,WAAW,EAAEjB,aAAa,CAACiB;UAC7B,CACF,CAAC;UACD;QAEF,KAAKX,6BAAkB,CAACY,uBAAuB;UAC7CV,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;YACEkC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACC,WAAW,EAC1B;YACEC,OAAO,EAAE,IAAI;YACbC,YAAY,EAAEf,aAAa,CAACgB,aAAa;YACzCG,UAAU,EAAE;cACVC,IAAI,EAAEpB,aAAa,CAACoB,IAAI;cACxBC,IAAI,EAAErB,aAAa,CAACmB,UAAU,CAACE,IAAI;cACnCC,sBAAsB,EAAEtB,aAAa,CAACmB,UAAU,CAACI;YACnD,CAAC;YACDC,SAAS,EAAE,IAAAC,gCAAyB,EAACzB,aAAa,CAACmB,UAAU,CAACO,UAAU;UAC1E,CACF,CAAC;UACD;QAEF,KAAKpB,6BAAkB,CAACqB,iBAAiB;UACvCnB,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;YACEkC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACe,iBAAiB,EAChC;YACEP,IAAI,EAAEpB,aAAa,CAAC4B,SAAS,CAACR,IAAI;YAClCS,WAAW,EAAE7B,aAAa,CAAC4B,SAAS,CAACE,YAAY;YACjDT,IAAI,EAAErB,aAAa,CAAC4B,SAAS,CAACT,UAAU;YACxCY,cAAc,EAAE/B,aAAa,CAAC4B,SAAS,CAACI,eAAe;YACvDC,eAAe,EAAEjC,aAAa,CAAC4B,SAAS,CAACM,gBAAgB;YACzDV,SAAS,EAAE,IAAAC,gCAAyB,EAACzB,aAAa,CAAC4B,SAAS,CAACF,UAAU;UACzE,CACF,CAAC;UACD;QAEF,KAAKpB,6BAAkB,CAAC6B,UAAU;UAChC3B,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;YACEkC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACwB,WAAW,EAC1B;YACEC,WAAW,EAAE,KAAK;YAClBhB,IAAI,EAAErB,aAAa,CAACsC;UACtB,CACF,CAAC;UACD;QAEF,KAAKhC,6BAAkB,CAACiC,QAAQ;QAChC,KAAKjC,6BAAkB,CAACkC,UAAU;UAChChC,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;YACEkC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACwB,WAAW,EAC1B;YACEC,WAAW,EAAErC,aAAa,CAACK,IAAI,KAAKC,6BAAkB,CAACiC;UACzD,CACF,CAAC;UACD;QAEF;UACE;MACJ;IACF,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAvD,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,qCAKyC,UAACwB,aAAsC,EAAW;MACzF,IAAIA,aAAa,CAACyC,UAAU,KAAK,GAAG,EAAE;QACpCjC,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;UACEkC,IAAI,EAAE,QAAQ;UACdC,QAAQ,EAAE;QACZ,CAAC,EACDC,yBAAc,CAAC8B,uBAAuB,EACtC;UAACD,UAAU,EAAE;QAAG,CAClB,CAAC;MACH,CAAC,MAAM;QACLjC,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;UACEkC,IAAI,EAAE,QAAQ;UACdC,QAAQ,EAAE;QACZ,CAAC,EACDC,yBAAc,CAAC8B,uBAAuB,EACtC;UAACD,UAAU,EAAEzC,aAAa,CAAC2C,SAAS;UAAEC,YAAY,EAAE5C,aAAa,CAAC6C;QAAO,CAC3E,CAAC;MACH;IACF,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAA7D,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,iCAKqC,UAACwB,aAAkC,EAAW;MAAA,IAAA8C,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,kBAAA;MACjF,IAAMC,qBAAqB,GAAG;QAC5BC,gBAAgB,GAAAP,qBAAA,GAAE9C,aAAa,aAAbA,aAAa,wBAAA+C,sBAAA,GAAb/C,aAAa,CAAEsD,WAAW,cAAAP,sBAAA,uBAA1BA,sBAAA,CAA4BQ,iBAAiB,cAAAT,qBAAA,cAAAA,qBAAA,GAAI,EAAE;QACrEU,YAAY,GAAAR,sBAAA,GAAEhD,aAAa,aAAbA,aAAa,wBAAAiD,sBAAA,GAAbjD,aAAa,CAAEsD,WAAW,cAAAL,sBAAA,uBAA1BA,sBAAA,CAA4BQ,aAAa,cAAAT,sBAAA,cAAAA,sBAAA,GAAI,CAAC;QAC5DU,eAAe,GAAAR,qBAAA,GAAElD,aAAa,aAAbA,aAAa,wBAAAmD,kBAAA,GAAbnD,aAAa,CAAE2D,GAAG,cAAAR,kBAAA,uBAAlBA,kBAAA,CAAoBS,gBAAgB,cAAAV,qBAAA,cAAAA,qBAAA,GAAI;MAC3D,CAAC;MAED1C,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;QACEkC,IAAI,EAAE,QAAQ;QACdC,QAAQ,EAAE;MACZ,CAAC,EACDC,yBAAc,CAACiD,mBAAmB,EAClCT,qBACF,CAAC;IACH,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAApE,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,uBAI2B,YAAY;MACrCA,KAAA,CAAKoB,cAAc,GAAGC,0BAAe,CAACiE,OAAO;MAC7CtF,KAAA,CAAKuF,cAAc,CAAC,CAAC;MACrB;MACAvF,KAAA,CAAKwF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACC,MAAM,CAACC,IAAI,CAAC;QAClCC,EAAE,KAAAtF,MAAA,CAAKP,KAAA,CAAKW,MAAM,CAAE;QACpBkB,IAAI,EAAE,gBAAgB;QACtBiE,UAAU,EAAE;UACV;UACAC,KAAK,EAAE/F,KAAA,CAAKwF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACM,UAAU,CAAC;QAC5C,CAAC;QACD9E,OAAO,EAAE,CAAC,CAAC;QACXL,IAAI,EAAE;UACJoF,aAAa,EAAE;YACbC,OAAO,EAAE;UACX,CAAC;UACDC,SAAS,EAAE,aAAa;UACxBrF,SAAS,EAAEC,6BAAkB,CAACqF;QAChC,CAAC;QACDC,UAAU,KAAA9F,MAAA,CAAK+F,iBAAM,CAACC,gBAAgB,OAAAhG,MAAA,CAAIiG,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MAChE,CAAC,CAAC;MACF1G,KAAA,CAAKW,MAAM,IAAI,CAAC;IAClB,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAH,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,wBAK2B,UAAC2G,YAAoB;MAAA;QAC9C;QACA3G,KAAA,CAAK4G,OAAO,CAAC;UACXC,MAAM,EAAE,KAAK;UACb;UACAC,GAAG,KAAAvG,MAAA,CAAKP,KAAA,CAAKwF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACqB,WAAW,CAAC,CAAC,eAAY;UACzDC,IAAI,EAAE;YACJL,YAAY,EAAZA;UACF;QACF,CAAC,CAAC,CAACM,IAAI,CAAC,YAAM;UACZjF,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;YACEkC,IAAI,EAAE,QAAQ;YACdC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAAC8E,sBAAsB,EACrC;YAACP,YAAY,EAAZA;UAAY,CACf,CAAC;QACH,CAAC;MAAC;IAAA;IAEJ;AACF;AACA;AACA;AACA;IAJE,IAAAnG,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,sBAKyB,UAAC2G,YAAoB,EAAW;MACvD;MACA,IAAI,CAAC3G,KAAA,CAAKwF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACyB,WAAW,CAAC,CAAC,EAAE;MAC5C;MACAnH,KAAA,CAAKwF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACC,MAAM,CAACC,IAAI,CAAC;QAClCC,EAAE,KAAAtF,MAAA,CAAKP,KAAA,CAAKW,MAAM,CAAE;QACpBkB,IAAI,EAAE,gBAAgB;QACtBiE,UAAU,EAAE;UACV;UACAC,KAAK,EAAE/F,KAAA,CAAKwF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACM,UAAU,CAAC;QAC5C,CAAC;QACD9E,OAAO,EAAE;UACPkG,EAAE,EAAEpH,KAAA,CAAKiB;QACX,CAAC;QACDJ,IAAI,EAAE;UACJoF,aAAa,EAAE;YACboB,mBAAmB,EAAEV,YAAY;YACjCd,EAAE,EAAEW,aAAI,CAACC,EAAE,CAAC;UACd,CAAC;UACDN,SAAS,EAAE,aAAa;UACxBrF,SAAS,EAAEC,6BAAkB,CAACuG;QAChC,CAAC;QACDjB,UAAU,KAAA9F,MAAA,CAAK+F,iBAAM,CAACC,gBAAgB,OAAAhG,MAAA,CAAIiG,aAAI,CAACC,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MAChE,CAAC,CAAC;MACF1G,KAAA,CAAKW,MAAM,IAAI,CAAC;IAClB,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAAH,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,4BAIgC,YAAiC;MAC/DA,KAAA,CAAKuH,aAAa,GAAGC,iCAAsB,CAACC,OAAO;MACnD;MACA;MACA,OAAOzH,KAAA,CAAK4G,OAAO,CAAC;QAClBC,MAAM,EAAE,KAAK;QACb;QACAC,GAAG,KAAAvG,MAAA,CAAKP,KAAA,CAAKwF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACqB,WAAW,CAAC,CAAC,eAAY;QACzDC,IAAI,EAAE;UACJU,UAAU,EAAE;YAACC,OAAO,EAAE;UAAI;QAC5B;MACF,CAAC,CAAC,CACCV,IAAI,CAAC,YAAM;QACVjF,4BAAO,CAACC,OAAO,KAAAxB,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,GAEb;UACEkC,IAAI,EAAE,QAAQ;UACdC,QAAQ,EAAE;QACZ,CAAC,EACDC,yBAAc,CAACwF,kBACjB,CAAC;QACD5H,KAAA,CAAK6H,kBAAkB,GAAG,IAAI;QAC9B7H,KAAA,CAAKuH,aAAa,GAAGC,iCAAsB,CAACM,OAAO;QACnD9H,KAAA,CAAK+H,QAAQ,CAAC,CAAC;MACjB,CAAC,CAAC,CACDC,KAAK,CAAC,YAAM;QACXhI,KAAA,CAAKuH,aAAa,GAAGC,iCAAsB,CAACS,IAAI;QAChD,MAAM,IAAIC,KAAK,CAAC,uBAAuB,CAAC;MAC1C,CAAC,CAAC;IACN,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAA1H,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,2BAI+B;MAAA,OAC7B,CAACqB,0BAAe,CAACiE,OAAO,EAAEjE,0BAAe,CAACC,MAAM,CAAC,CAAC6G,QAAQ,CAACnI,KAAA,CAAKoB,cAAc,CAAC;IAAA;IAEjF;AACF;AACA;AACA;IAHE,IAAAZ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,eAIkB,YAAM;MACtB,IAAIA,KAAA,CAAKoI,oBAAoB,CAAC,CAAC,EAAE;MACjC;MACA,IAAI,CAACpI,KAAA,CAAKwF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACyB,WAAW,CAAC,CAAC,EAAE;QAC1C,MAAM,IAAIe,KAAK,CAAC,8CAA8C,CAAC;MACjE;MACAlI,KAAA,CAAKqI,gBAAgB,CAAC,CAAC;IACzB,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAA7H,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,0BAI8B;MAAA,OAC5B,CAACwH,iCAAsB,CAACC,OAAO,EAAED,iCAAsB,CAACM,OAAO,CAAC,CAACK,QAAQ,CAACnI,KAAA,CAAKuH,aAAa,CAAC;IAAA;IAE/F;AACF;AACA;AACA;IAHE,IAAA/G,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,sCAAAsI,kBAAA,CAAA3J,OAAA,gBAAA4J,YAAA,CAAA5J,OAAA,CAAA6J,IAAA,CAIwB,SAAAC,QAAA;MAAA,OAAAF,YAAA,CAAA5J,OAAA,CAAA+J,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAA,KAClB9I,KAAA,CAAK+I,mBAAmB,CAAC,CAAC;cAAAH,QAAA,CAAAE,IAAA;cAAA;YAAA;YAAA,OAAAF,QAAA,CAAAI,MAAA,WAASC,SAAS;UAAA;YAAA,IAE3CjJ,KAAA,CAAKwF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACyB,WAAW,CAAC,CAAC;cAAAyB,QAAA,CAAAE,IAAA;cAAA;YAAA;YAAA,MAClC,IAAIZ,KAAK,CAAC,+CAA+C,CAAC;UAAA;YAAA,OAAAU,QAAA,CAAAI,MAAA,WAG3DhJ,KAAA,CAAKkJ,qBAAqB,CAAC,CAAC;UAAA;UAAA;YAAA,OAAAN,QAAA,CAAAO,IAAA;QAAA;MAAA,GAAAV,OAAA;IAAA,CACpC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAjI,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;MAAA,IAAAoJ,KAAA,OAAAd,kBAAA,CAAA3J,OAAA,gBAAA4J,YAAA,CAAA5J,OAAA,CAAA6J,IAAA,CAK4B,SAAAa,SAAOC,QAAiB;QAAA,OAAAf,YAAA,CAAA5J,OAAA,CAAA+J,IAAA,UAAAa,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAAX,IAAA,GAAAW,SAAA,CAAAV,IAAA;YAAA;cAAA,OAAAU,SAAA,CAAAR,MAAA,WAE3ChJ,KAAA,CAAK4G,OAAO,CAAC;gBAClBC,MAAM,EAAE,KAAK;gBACb;gBACAC,GAAG,KAAAvG,MAAA,CAAKP,KAAA,CAAKwF,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACqB,WAAW,CAAC,CAAC,eAAY;gBACzDC,IAAI,EAAE;kBACJU,UAAU,EAAE;oBAAC+B,YAAY,EAAEH;kBAAQ;gBACrC;cACF,CAAC,CAAC,CAACrC,IAAI,CAAC,YAAM;gBACZ,IAAIqC,QAAQ,IAAI,CAACtJ,KAAA,CAAK6H,kBAAkB,EAAE7H,KAAA,CAAK0J,cAAc,CAAC,CAAC;cACjE,CAAC,CAAC;YAAA;YAAA;cAAA,OAAAF,SAAA,CAAAL,IAAA;UAAA;QAAA,GAAAE,QAAA;MAAA,CACH;MAAA,iBAAAM,EAAA;QAAA,OAAAP,KAAA,CAAAnK,KAAA,OAAAD,SAAA;MAAA;IAAA;IAED;AACF;AACA;AACA;IAHE,IAAAwB,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,uBAI0B;MAAA,OAAMA,KAAA,CAAKuH,aAAa;IAAA;IAElD;AACF;AACA;AACA;IAHE,IAAA/G,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA,wBAI2B;MAAA,OAAMA,KAAA,CAAKoB,cAAc;IAAA;IA5VlDpB,KAAA,CAAKW,MAAM,GAAG,CAAC;IACfX,KAAA,CAAK6H,kBAAkB,GAAG,KAAK;IAC/B7H,KAAA,CAAKiB,WAAW,GAAGgI,SAAS;IAC5BjJ,KAAA,CAAKoB,cAAc,GAAGC,0BAAe,CAAC4G,IAAI;IAC1CjI,KAAA,CAAKuH,aAAa,GAAGC,iCAAsB,CAACS,IAAI;IAAC,OAAAjI,KAAA;EACnD;EAAC,IAAA4J,aAAA,CAAAjL,OAAA,EAAAgB,aAAA;IAAAkK,GAAA;IAAAC,KAAA;IArCD;AACF;AACA;AACA;IACE,SAAAvE,eAAA,EAAyB;MACvB,IAAI,CAAC,IAAI,CAACwE,qBAAqB,EAAE;QAC/B;QACA,IAAI,CAACvE,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACsE,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAACC,cAAc,CAAC;QACpE,IAAI,CAACF,qBAAqB,GAAG,IAAI;MACnC;IACF;;IAEA;AACF;AACA;AACA;EAHE;IAAAF,GAAA;IAAAC,KAAA,EAIA,SAAAI,iBAAA,EAA0B;MACxB,IAAI,CAACrC,kBAAkB,GAAG,KAAK;MAC/B,IAAI,CAAC5G,WAAW,GAAGgI,SAAS;MAC5B;MACA,IAAI,CAACzD,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACyE,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAACF,cAAc,CAAC;MACrE,IAAI,CAACF,qBAAqB,GAAG,KAAK;MAClC,IAAI,CAAC3I,cAAc,GAAGC,0BAAe,CAAC4G,IAAI;MAC1C,IAAI,CAACV,aAAa,GAAGC,iCAAsB,CAACS,IAAI;IAClD;EAAC;EAAA,OAAAtI,aAAA;AAAA,EA/DgCyK,sBAAW;AAAA,IAAAC,QAAA,GAAAzK,OAAA,CAAAjB,OAAA,GAsa/BgB,aAAa"}
|
package/dist/voicea.types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["voicea.types.ts"],"sourcesContent":["/* eslint-disable camelcase */\n/* eslint-disable no-undef */\n\n/**\n * Type for payload\n */\ninterface AnnouncementPayload {\n translation: {\n max_languages: number;\n allowed_languages: string[];\n };\n\n ASR: {\n spoken_languages: string[];\n };\n}\n\n// eslint-disable-next-line no-undef\ntype TRANSCRIPTION_TYPES =\n | 'unknown'\n | 'eva_wake'\n | 'eva_thanks'\n | 'eva_cancel'\n | 'highlight_created'\n | 'transcript_interim_results'\n | 'transcript_final_result';\n\n/**\n * Class for an Transcription Object\n */\ninterface Transcription {\n start_millis: number;\n end_millis: number;\n text: string;\n transcript_language_code: string;\n translations: {[x: string]: string};\n csis: number[];\n last_packet_timestamp_ms: number;\n}\n\n/**\n * Highlights\n */\ninterface Highlight {\n highlight_id: string;\n transcript: string;\n highlight_label: string;\n highlight_source: string;\n start_millis: number;\n end_millis: number;\n csis: number[];\n}\n/**\n * Type for Transcription message\n */\ninterface TranscriptionResponse {\n type: TRANSCRIPTION_TYPES;\n transcript_id: string;\n translations?: {[x: string]: string};\n transcripts?: Transcription[];\n transcript?: Transcription;\n highlight?: Highlight;\n csis: number[];\n data: string;\n command_response: string;\n}\n/**\n * Type for CaptionLanguageResponse\n */\ninterface CaptionLanguageResponse {\n requestId: string;\n statusCode: number;\n errorCode: number;\n message: string;\n}\n\ninterface IVoiceaChannel {\n setSpokenLanguage: (languageCode: string) => Promise<void>;\n requestLanguage: (languageCode: string) => void;\n turnOnCaptions: () => undefined | Promise<void>;\n toggleTranscribing: (activate: boolean) => undefined | Promise<void>;\n deregisterEvents: () =>
|
|
1
|
+
{"version":3,"names":[],"sources":["voicea.types.ts"],"sourcesContent":["/* eslint-disable camelcase */\n/* eslint-disable no-undef */\n\n/**\n * Type for payload\n */\ninterface AnnouncementPayload {\n translation: {\n max_languages: number;\n allowed_languages: string[];\n };\n\n ASR: {\n spoken_languages: string[];\n };\n}\n\n// eslint-disable-next-line no-undef\ntype TRANSCRIPTION_TYPES =\n | 'unknown'\n | 'eva_wake'\n | 'eva_thanks'\n | 'eva_cancel'\n | 'highlight_created'\n | 'transcript_interim_results'\n | 'transcript_final_result';\n\n/**\n * Class for an Transcription Object\n */\ninterface Transcription {\n start_millis: number;\n end_millis: number;\n text: string;\n transcript_language_code: string;\n translations: {[x: string]: string};\n csis: number[];\n last_packet_timestamp_ms: number;\n}\n\n/**\n * Highlights\n */\ninterface Highlight {\n highlight_id: string;\n transcript: string;\n highlight_label: string;\n highlight_source: string;\n start_millis: number;\n end_millis: number;\n csis: number[];\n}\n/**\n * Type for Transcription message\n */\ninterface TranscriptionResponse {\n type: TRANSCRIPTION_TYPES;\n transcript_id: string;\n translations?: {[x: string]: string};\n transcripts?: Transcription[];\n transcript?: Transcription;\n highlight?: Highlight;\n csis: number[];\n data: string;\n command_response: string;\n}\n/**\n * Type for CaptionLanguageResponse\n */\ninterface CaptionLanguageResponse {\n requestId: string;\n statusCode: number;\n errorCode: number;\n message: string;\n}\n\ninterface IVoiceaChannel {\n setSpokenLanguage: (languageCode: string) => Promise<void>;\n requestLanguage: (languageCode: string) => void;\n turnOnCaptions: () => undefined | Promise<void>;\n toggleTranscribing: (activate: boolean) => undefined | Promise<void>;\n deregisterEvents: () => void;\n}\n\nexport type {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n Transcription,\n Highlight,\n IVoiceaChannel,\n};\n"],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/internal-plugin-voicea",
|
|
3
|
-
"version": "2.60.0",
|
|
4
3
|
"description": "",
|
|
5
4
|
"license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
|
|
6
5
|
"main": "dist/index.js",
|
|
@@ -11,13 +10,13 @@
|
|
|
11
10
|
"directory": "packages/@webex/internal-plugin-voicea"
|
|
12
11
|
},
|
|
13
12
|
"engines": {
|
|
14
|
-
"node": ">=
|
|
13
|
+
"node": ">=16"
|
|
15
14
|
},
|
|
16
15
|
"dependencies": {
|
|
17
|
-
"@webex/internal-plugin-llm": "2.60.
|
|
18
|
-
"@webex/internal-plugin-mercury": "2.60.
|
|
19
|
-
"@webex/plugin-meetings": "2.60.
|
|
20
|
-
"@webex/webex-core": "2.60.
|
|
16
|
+
"@webex/internal-plugin-llm": "2.60.1-next.1",
|
|
17
|
+
"@webex/internal-plugin-mercury": "2.60.1-next.1",
|
|
18
|
+
"@webex/plugin-meetings": "2.60.1-next.1",
|
|
19
|
+
"@webex/webex-core": "2.60.1-next.1",
|
|
21
20
|
"uuid": "^3.3.2"
|
|
22
21
|
},
|
|
23
22
|
"browserify": {
|
|
@@ -28,15 +27,15 @@
|
|
|
28
27
|
},
|
|
29
28
|
"devDependencies": {
|
|
30
29
|
"@babel/core": "^7.17.10",
|
|
31
|
-
"@webex/babel-config-legacy": "
|
|
32
|
-
"@webex/eslint-config-legacy": "
|
|
33
|
-
"@webex/jest-config-legacy": "
|
|
34
|
-
"@webex/legacy-tools": "
|
|
35
|
-
"@webex/test-helper-chai": "2.60.
|
|
36
|
-
"@webex/test-helper-mocha": "2.60.
|
|
37
|
-
"@webex/test-helper-mock-web-socket": "2.60.
|
|
38
|
-
"@webex/test-helper-mock-webex": "2.60.
|
|
39
|
-
"@webex/test-helper-test-users": "2.60.
|
|
30
|
+
"@webex/babel-config-legacy": "0.0.0",
|
|
31
|
+
"@webex/eslint-config-legacy": "0.0.0",
|
|
32
|
+
"@webex/jest-config-legacy": "0.0.0",
|
|
33
|
+
"@webex/legacy-tools": "0.0.0",
|
|
34
|
+
"@webex/test-helper-chai": "2.60.1-next.1",
|
|
35
|
+
"@webex/test-helper-mocha": "2.60.1-next.1",
|
|
36
|
+
"@webex/test-helper-mock-web-socket": "2.60.1-next.1",
|
|
37
|
+
"@webex/test-helper-mock-webex": "2.60.1-next.1",
|
|
38
|
+
"@webex/test-helper-test-users": "2.60.1-next.1",
|
|
40
39
|
"eslint": "^8.24.0",
|
|
41
40
|
"prettier": "^2.7.1",
|
|
42
41
|
"sinon": "^9.2.4"
|
|
@@ -44,10 +43,12 @@
|
|
|
44
43
|
"scripts": {
|
|
45
44
|
"build": "yarn build:src",
|
|
46
45
|
"build:src": "webex-legacy-tools build -dest \"./dist\" -src \"./src\" -js -ts -maps",
|
|
46
|
+
"deploy:npm": "yarn npm publish",
|
|
47
47
|
"test": "yarn test:style && yarn test:unit && yarn test:integration && yarn test:browser",
|
|
48
48
|
"test:browser:broken": "webex-legacy-tools test --integration --unit --runner karma",
|
|
49
49
|
"test:integration": "webex-legacy-tools test --integration --runner mocha",
|
|
50
50
|
"test:style": "eslint ./src/**/*.*",
|
|
51
51
|
"test:unit": "webex-legacy-tools test --unit --runner jest"
|
|
52
|
-
}
|
|
53
|
-
|
|
52
|
+
},
|
|
53
|
+
"version": "2.60.1-next.1"
|
|
54
|
+
}
|
package/src/constants.ts
CHANGED
|
@@ -30,3 +30,15 @@ export const TRANSCRIPTION_TYPE = {
|
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
export const VOICEA = 'voicea';
|
|
33
|
+
|
|
34
|
+
export const ANNOUNCE_STATUS = {
|
|
35
|
+
IDLE: 'idle',
|
|
36
|
+
JOINED: 'joined',
|
|
37
|
+
JOINING: 'joining',
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export const TURN_ON_CAPTION_STATUS = {
|
|
41
|
+
IDLE: 'idle',
|
|
42
|
+
ENABLED: 'enabled',
|
|
43
|
+
SENDING: 'sending',
|
|
44
|
+
};
|
package/src/voicea.ts
CHANGED
|
@@ -2,7 +2,14 @@ import uuid from 'uuid';
|
|
|
2
2
|
import {TriggerProxy as Trigger} from '@webex/plugin-meetings';
|
|
3
3
|
import {WebexPlugin, config} from '@webex/webex-core';
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
EVENT_TRIGGERS,
|
|
7
|
+
VOICEA_RELAY_TYPES,
|
|
8
|
+
TRANSCRIPTION_TYPE,
|
|
9
|
+
VOICEA,
|
|
10
|
+
ANNOUNCE_STATUS,
|
|
11
|
+
TURN_ON_CAPTION_STATUS,
|
|
12
|
+
} from './constants';
|
|
6
13
|
// eslint-disable-next-line no-unused-vars
|
|
7
14
|
import {
|
|
8
15
|
AnnouncementPayload,
|
|
@@ -22,14 +29,16 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
22
29
|
|
|
23
30
|
private seqNum: number;
|
|
24
31
|
|
|
25
|
-
private hasVoiceaJoined: boolean;
|
|
26
|
-
|
|
27
32
|
private areCaptionsEnabled: boolean;
|
|
28
33
|
|
|
29
34
|
private hasSubscribedToEvents = false;
|
|
30
35
|
|
|
31
36
|
private vmcDeviceId?: string;
|
|
32
37
|
|
|
38
|
+
private announceStatus: string;
|
|
39
|
+
|
|
40
|
+
private captionStatus: string;
|
|
41
|
+
|
|
33
42
|
/**
|
|
34
43
|
* @param {Object} e
|
|
35
44
|
* @returns {undefined}
|
|
@@ -40,7 +49,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
40
49
|
switch (e.data.relayType) {
|
|
41
50
|
case VOICEA_RELAY_TYPES.ANNOUNCEMENT:
|
|
42
51
|
this.vmcDeviceId = e.headers.from;
|
|
43
|
-
this.
|
|
52
|
+
this.announceStatus = ANNOUNCE_STATUS.JOINED;
|
|
44
53
|
this.processAnnouncementMessage(e.data.voiceaPayload);
|
|
45
54
|
break;
|
|
46
55
|
case VOICEA_RELAY_TYPES.TRANSLATION_RESPONSE:
|
|
@@ -66,14 +75,18 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
66
75
|
}
|
|
67
76
|
}
|
|
68
77
|
|
|
69
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Listen to websocket messages
|
|
80
|
+
* @returns {void}
|
|
81
|
+
*/
|
|
70
82
|
public deregisterEvents() {
|
|
71
|
-
this.hasVoiceaJoined = false;
|
|
72
83
|
this.areCaptionsEnabled = false;
|
|
73
84
|
this.vmcDeviceId = undefined;
|
|
74
85
|
// @ts-ignore
|
|
75
86
|
this.webex.internal.llm.off('event:relay.event', this.eventProcessor);
|
|
76
87
|
this.hasSubscribedToEvents = false;
|
|
88
|
+
this.announceStatus = ANNOUNCE_STATUS.IDLE;
|
|
89
|
+
this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;
|
|
77
90
|
}
|
|
78
91
|
|
|
79
92
|
/**
|
|
@@ -83,9 +96,10 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
83
96
|
constructor(...args) {
|
|
84
97
|
super(...args);
|
|
85
98
|
this.seqNum = 1;
|
|
86
|
-
this.hasVoiceaJoined = false;
|
|
87
99
|
this.areCaptionsEnabled = false;
|
|
88
100
|
this.vmcDeviceId = undefined;
|
|
101
|
+
this.announceStatus = ANNOUNCE_STATUS.IDLE;
|
|
102
|
+
this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;
|
|
89
103
|
}
|
|
90
104
|
|
|
91
105
|
/**
|
|
@@ -243,9 +257,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
243
257
|
* @returns {void}
|
|
244
258
|
*/
|
|
245
259
|
private sendAnnouncement = (): void => {
|
|
246
|
-
|
|
247
|
-
if (this.hasVoiceaJoined || !this.webex.internal.llm.isConnected()) return;
|
|
248
|
-
|
|
260
|
+
this.announceStatus = ANNOUNCE_STATUS.JOINING;
|
|
249
261
|
this.listenToEvents();
|
|
250
262
|
// @ts-ignore
|
|
251
263
|
this.webex.internal.llm.socket.send({
|
|
@@ -327,11 +339,11 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
327
339
|
};
|
|
328
340
|
|
|
329
341
|
/**
|
|
330
|
-
*
|
|
342
|
+
* request turn on Captions
|
|
331
343
|
* @returns {Promise}
|
|
332
344
|
*/
|
|
333
|
-
|
|
334
|
-
|
|
345
|
+
private requestTurnOnCaptions = (): undefined | Promise<void> => {
|
|
346
|
+
this.captionStatus = TURN_ON_CAPTION_STATUS.SENDING;
|
|
335
347
|
// @ts-ignore
|
|
336
348
|
// eslint-disable-next-line newline-before-return
|
|
337
349
|
return this.request({
|
|
@@ -341,18 +353,65 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
341
353
|
body: {
|
|
342
354
|
transcribe: {caption: true},
|
|
343
355
|
},
|
|
344
|
-
})
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
+
})
|
|
357
|
+
.then(() => {
|
|
358
|
+
Trigger.trigger(
|
|
359
|
+
this,
|
|
360
|
+
{
|
|
361
|
+
file: 'voicea',
|
|
362
|
+
function: 'turnOnCaptions',
|
|
363
|
+
},
|
|
364
|
+
EVENT_TRIGGERS.CAPTIONS_TURNED_ON
|
|
365
|
+
);
|
|
366
|
+
this.areCaptionsEnabled = true;
|
|
367
|
+
this.captionStatus = TURN_ON_CAPTION_STATUS.ENABLED;
|
|
368
|
+
this.announce();
|
|
369
|
+
})
|
|
370
|
+
.catch(() => {
|
|
371
|
+
this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;
|
|
372
|
+
throw new Error('turn on captions fail');
|
|
373
|
+
});
|
|
374
|
+
};
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* is announce processing
|
|
378
|
+
* @returns {boolean}
|
|
379
|
+
*/
|
|
380
|
+
private isAnnounceProcessing = () =>
|
|
381
|
+
[ANNOUNCE_STATUS.JOINING, ANNOUNCE_STATUS.JOINED].includes(this.announceStatus);
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* announce to voicea data chanel
|
|
385
|
+
* @returns {void}
|
|
386
|
+
*/
|
|
387
|
+
public announce = () => {
|
|
388
|
+
if (this.isAnnounceProcessing()) return;
|
|
389
|
+
// @ts-ignore
|
|
390
|
+
if (!this.webex.internal.llm.isConnected()) {
|
|
391
|
+
throw new Error('voicea can not announce before llm connected');
|
|
392
|
+
}
|
|
393
|
+
this.sendAnnouncement();
|
|
394
|
+
};
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* is turn on caption processing
|
|
398
|
+
* @returns {boolean}
|
|
399
|
+
*/
|
|
400
|
+
private isCaptionProcessing = () =>
|
|
401
|
+
[TURN_ON_CAPTION_STATUS.SENDING, TURN_ON_CAPTION_STATUS.ENABLED].includes(this.captionStatus);
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Turn on Captions
|
|
405
|
+
* @returns {Promise}
|
|
406
|
+
*/
|
|
407
|
+
public turnOnCaptions = async (): undefined | Promise<void> => {
|
|
408
|
+
if (this.isCaptionProcessing()) return undefined;
|
|
409
|
+
// @ts-ignore
|
|
410
|
+
if (!this.webex.internal.llm.isConnected()) {
|
|
411
|
+
throw new Error('can not turn on captions before llm connected');
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
return this.requestTurnOnCaptions();
|
|
356
415
|
};
|
|
357
416
|
|
|
358
417
|
/**
|
|
@@ -370,9 +429,21 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
370
429
|
transcribe: {transcribing: activate},
|
|
371
430
|
},
|
|
372
431
|
}).then(() => {
|
|
373
|
-
if (activate && !this.areCaptionsEnabled
|
|
432
|
+
if (activate && !this.areCaptionsEnabled) this.turnOnCaptions();
|
|
374
433
|
});
|
|
375
434
|
};
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* get caption status
|
|
438
|
+
* @returns {string}
|
|
439
|
+
*/
|
|
440
|
+
public getCaptionStatus = () => this.captionStatus;
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* get announce status
|
|
444
|
+
* @returns {string}
|
|
445
|
+
*/
|
|
446
|
+
public getAnnounceStatus = () => this.announceStatus;
|
|
376
447
|
}
|
|
377
448
|
|
|
378
449
|
export default VoiceaChannel;
|
package/src/voicea.types.ts
CHANGED
|
@@ -79,7 +79,7 @@ interface IVoiceaChannel {
|
|
|
79
79
|
requestLanguage: (languageCode: string) => void;
|
|
80
80
|
turnOnCaptions: () => undefined | Promise<void>;
|
|
81
81
|
toggleTranscribing: (activate: boolean) => undefined | Promise<void>;
|
|
82
|
-
deregisterEvents: () =>
|
|
82
|
+
deregisterEvents: () => void;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
export type {
|
package/test/unit/spec/voicea.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import 'jsdom-global/register';
|
|
1
2
|
import MockWebex from '@webex/test-helper-mock-webex';
|
|
2
3
|
import MockWebSocket from '@webex/test-helper-mock-web-socket';
|
|
3
|
-
import {assert} from '@webex/test-helper-chai';
|
|
4
|
+
import {assert, expect} from '@webex/test-helper-chai';
|
|
4
5
|
import sinon from 'sinon';
|
|
5
6
|
import Mercury from '@webex/internal-plugin-mercury';
|
|
6
7
|
import LLMChannel from '@webex/internal-plugin-llm';
|
|
@@ -41,17 +42,26 @@ describe('plugin-voicea', () => {
|
|
|
41
42
|
});
|
|
42
43
|
});
|
|
43
44
|
|
|
45
|
+
describe("#constructor", () => {
|
|
46
|
+
it('should init status', () => {
|
|
47
|
+
assert.equal(voiceaService.announceStatus, 'idle');
|
|
48
|
+
assert.equal(voiceaService.captionStatus, 'idle');
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
44
52
|
describe('#sendAnnouncement', () => {
|
|
45
53
|
beforeEach(async () => {
|
|
46
54
|
const mockWebSocket = new MockWebSocket();
|
|
47
55
|
|
|
48
56
|
voiceaService.webex.internal.llm.socket = mockWebSocket;
|
|
57
|
+
voiceaService.announceStatus = "idle";
|
|
49
58
|
});
|
|
50
59
|
|
|
51
60
|
it("sends announcement if voicea hasn't joined", () => {
|
|
52
61
|
const spy = sinon.spy(voiceaService, 'listenToEvents');
|
|
53
62
|
|
|
54
63
|
voiceaService.sendAnnouncement();
|
|
64
|
+
assert.equal(voiceaService.announceStatus, 'joining');
|
|
55
65
|
assert.calledOnce(spy);
|
|
56
66
|
|
|
57
67
|
assert.calledOnceWithExactly(voiceaService.webex.internal.llm.socket.send, {
|
|
@@ -98,14 +108,14 @@ describe('plugin-voicea', () => {
|
|
|
98
108
|
data: {relayType: 'voicea.annc', voiceaPayload: {}},
|
|
99
109
|
});
|
|
100
110
|
|
|
101
|
-
assert.equal(voiceaService.hasVoiceaJoined, true);
|
|
102
111
|
assert.equal(voiceaService.areCaptionsEnabled, true);
|
|
103
112
|
assert.equal(voiceaService.vmcDeviceId, 'ws');
|
|
104
113
|
|
|
105
114
|
voiceaService.deregisterEvents();
|
|
106
|
-
assert.equal(voiceaService.hasVoiceaJoined, false);
|
|
107
115
|
assert.equal(voiceaService.areCaptionsEnabled, false);
|
|
108
116
|
assert.equal(voiceaService.vmcDeviceId, undefined);
|
|
117
|
+
assert.equal(voiceaService.announceStatus, 'idle');
|
|
118
|
+
assert.equal(voiceaService.captionStatus, 'idle');
|
|
109
119
|
});
|
|
110
120
|
});
|
|
111
121
|
describe('#processAnnouncementMessage', () => {
|
|
@@ -198,22 +208,28 @@ describe('plugin-voicea', () => {
|
|
|
198
208
|
});
|
|
199
209
|
});
|
|
200
210
|
|
|
201
|
-
describe('#
|
|
211
|
+
describe('#requestTurnOnCaptions', () => {
|
|
202
212
|
beforeEach(async () => {
|
|
203
213
|
const mockWebSocket = new MockWebSocket();
|
|
204
214
|
|
|
205
215
|
voiceaService.webex.internal.llm.socket = mockWebSocket;
|
|
216
|
+
voiceaService.captionStatus = 'idle';
|
|
206
217
|
});
|
|
207
218
|
|
|
219
|
+
afterEach( () => {
|
|
220
|
+
voiceaService.captionStatus = 'idle';
|
|
221
|
+
})
|
|
222
|
+
|
|
208
223
|
it('turns on captions', async () => {
|
|
209
|
-
const announcementSpy = sinon.spy(voiceaService, '
|
|
224
|
+
const announcementSpy = sinon.spy(voiceaService, 'announce');
|
|
210
225
|
|
|
211
226
|
const triggerSpy = sinon.spy();
|
|
212
227
|
|
|
213
228
|
voiceaService.on(EVENT_TRIGGERS.CAPTIONS_TURNED_ON, triggerSpy);
|
|
214
229
|
voiceaService.listenToEvents();
|
|
215
230
|
|
|
216
|
-
await voiceaService.
|
|
231
|
+
await voiceaService.requestTurnOnCaptions();
|
|
232
|
+
assert.equal(voiceaService.captionStatus, 'enabled');
|
|
217
233
|
sinon.assert.calledWith(
|
|
218
234
|
voiceaService.request,
|
|
219
235
|
sinon.match({
|
|
@@ -228,18 +244,119 @@ describe('plugin-voicea', () => {
|
|
|
228
244
|
assert.calledOnce(announcementSpy);
|
|
229
245
|
});
|
|
230
246
|
|
|
231
|
-
it("
|
|
232
|
-
|
|
247
|
+
it("should handle request fail", async () => {
|
|
248
|
+
voiceaService.captionStatus = 'sending';
|
|
249
|
+
voiceaService.request = sinon.stub().rejects();
|
|
250
|
+
|
|
251
|
+
try {
|
|
252
|
+
await voiceaService.requestTurnOnCaptions();
|
|
253
|
+
} catch (error) {
|
|
254
|
+
expect(error.message).to.include('turn on captions fail');
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
assert.equal(voiceaService.captionStatus, 'idle');
|
|
258
|
+
});
|
|
259
|
+
});
|
|
233
260
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
261
|
+
describe("#isAnnounceProcessing", () => {
|
|
262
|
+
afterEach(() => {
|
|
263
|
+
voiceaService.announceStatus = 'idle';
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
['joining', 'joined'].forEach((status) => {
|
|
267
|
+
it(`should return true when status is ${status}`, () => {
|
|
268
|
+
voiceaService.announceStatus = status;
|
|
269
|
+
assert.equal(voiceaService.isAnnounceProcessing(), true);
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
it('should return false when status is not processing status', () => {
|
|
274
|
+
voiceaService.announceStatus = 'idle';
|
|
275
|
+
assert.equal(voiceaService.isAnnounceProcessing(), false);
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
describe("#announce", () => {
|
|
280
|
+
let isAnnounceProcessing, sendAnnouncement;
|
|
281
|
+
beforeEach(() => {
|
|
282
|
+
voiceaService.webex.internal.llm.isConnected.returns(true);
|
|
283
|
+
sendAnnouncement = sinon.stub(voiceaService, 'sendAnnouncement');
|
|
284
|
+
isAnnounceProcessing = sinon.stub(voiceaService, 'isAnnounceProcessing').returns(false)
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
afterEach(() => {
|
|
288
|
+
voiceaService.webex.internal.llm.isConnected.returns(true);
|
|
289
|
+
isAnnounceProcessing.restore();
|
|
290
|
+
sendAnnouncement.restore();
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
it('announce to llm data channel', ()=> {
|
|
294
|
+
voiceaService.announce();
|
|
295
|
+
assert.calledOnce(sendAnnouncement);
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
it('announce to llm data channel before llm connected', ()=> {
|
|
299
|
+
voiceaService.webex.internal.llm.isConnected.returns(false);
|
|
300
|
+
assert.throws(() => voiceaService.announce(), "voicea can not announce before llm connected");
|
|
301
|
+
assert.notCalled(sendAnnouncement);
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
it('should not announce duplicate', () => {
|
|
305
|
+
isAnnounceProcessing.returns(true);
|
|
306
|
+
voiceaService.announce();
|
|
307
|
+
assert.notCalled(sendAnnouncement);
|
|
308
|
+
})
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
describe("#isCaptionProcessing", () => {
|
|
312
|
+
afterEach(() => {
|
|
313
|
+
voiceaService.captionStatus = 'idle';
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
['sending', 'enabled'].forEach((status) => {
|
|
317
|
+
it(`should return true when status is ${status}`, () => {
|
|
318
|
+
voiceaService.captionStatus = status;
|
|
319
|
+
assert.equal(voiceaService.isCaptionProcessing(), true);
|
|
238
320
|
});
|
|
321
|
+
});
|
|
239
322
|
|
|
240
|
-
|
|
323
|
+
it('should return false when status is not processing status', () => {
|
|
324
|
+
voiceaService.captionStatus = 'idle';
|
|
325
|
+
assert.equal(voiceaService.isCaptionProcessing(), false);
|
|
326
|
+
});
|
|
327
|
+
});
|
|
241
328
|
|
|
242
|
-
|
|
329
|
+
describe('#turnOnCaptions', () => {
|
|
330
|
+
let requestTurnOnCaptions, isCaptionProcessing;
|
|
331
|
+
beforeEach(() => {
|
|
332
|
+
requestTurnOnCaptions = sinon.stub(voiceaService, 'requestTurnOnCaptions');
|
|
333
|
+
isCaptionProcessing = sinon.stub(voiceaService, 'isCaptionProcessing').returns(false);
|
|
334
|
+
voiceaService.webex.internal.llm.isConnected.returns(true);
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
afterEach(() => {
|
|
338
|
+
requestTurnOnCaptions.restore();
|
|
339
|
+
isCaptionProcessing.restore();
|
|
340
|
+
voiceaService.webex.internal.llm.isConnected.returns(true);
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
it('call request turn on captions', () => {
|
|
344
|
+
isCaptionProcessing.returns(false);
|
|
345
|
+
voiceaService.turnOnCaptions();
|
|
346
|
+
assert.calledOnce(requestTurnOnCaptions);
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
it("turns on captions before llm connected", () => {
|
|
350
|
+
isCaptionProcessing.returns(false);
|
|
351
|
+
voiceaService.webex.internal.llm.isConnected.returns(true);
|
|
352
|
+
// assert.throws(() => voiceaService.turnOnCaptions(), "can not turn on captions before llm connected");
|
|
353
|
+
assert.notCalled(requestTurnOnCaptions);
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
it('should not turn on duplicate when processing', () => {
|
|
357
|
+
isCaptionProcessing.returns(true);
|
|
358
|
+
voiceaService.turnOnCaptions();
|
|
359
|
+
assert.notCalled(voiceaService.requestTurnOnCaptions);
|
|
243
360
|
});
|
|
244
361
|
});
|
|
245
362
|
|
|
@@ -613,5 +730,19 @@ describe('plugin-voicea', () => {
|
|
|
613
730
|
});
|
|
614
731
|
});
|
|
615
732
|
});
|
|
733
|
+
|
|
734
|
+
describe("#getCaptionStatus", () => {
|
|
735
|
+
it('works correctly', () => {
|
|
736
|
+
voiceaService.captionStatus = "enabled"
|
|
737
|
+
assert.equal(voiceaService.getCaptionStatus(), "enabled");
|
|
738
|
+
});
|
|
739
|
+
});
|
|
740
|
+
|
|
741
|
+
describe("#getAnnounceStatus", () => {
|
|
742
|
+
it('works correctly', () => {
|
|
743
|
+
voiceaService.announceStatus = "joined"
|
|
744
|
+
assert.equal(voiceaService.getAnnounceStatus(), "joined");
|
|
745
|
+
});
|
|
746
|
+
});
|
|
616
747
|
});
|
|
617
748
|
});
|