fcr-core 3.7.9-alpha → 3.8.0-alpha

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.
Files changed (130) hide show
  1. package/lib/chat-connection/index.d.ts +1 -1
  2. package/lib/chat-connection/index.js +41 -26
  3. package/lib/engine/index.js +72 -78
  4. package/lib/imports.d.ts +7 -2
  5. package/lib/imports.js +26 -4
  6. package/lib/index.d.ts +2 -2
  7. package/lib/index.js +12 -0
  8. package/lib/media-control/desktop.js +22 -17
  9. package/lib/media-control/mobile.js +38 -33
  10. package/lib/media-control/type.d.ts +8 -0
  11. package/lib/monitor-control/index.js +10 -5
  12. package/lib/peer-session/index.js +48 -39
  13. package/lib/plugins/chatroom.js +237 -205
  14. package/lib/room-control/ability-control/index.js +14 -9
  15. package/lib/room-control/ability-control/type.d.ts +4 -1
  16. package/lib/room-control/ability-control/type.js +3 -0
  17. package/lib/room-control/group-control/index.js +21 -16
  18. package/lib/room-control/helpers/constants.d.ts +4 -0
  19. package/lib/room-control/helpers/constants.js +5 -1
  20. package/lib/room-control/helpers/validation-helper.js +1 -1
  21. package/lib/room-control/index.js +66 -38
  22. package/lib/room-control/interpreter-control/index.js +49 -38
  23. package/lib/room-control/interpreter-control/room.js +6 -4
  24. package/lib/room-control/join-before-host-waitingroom-control/index.js +6 -4
  25. package/lib/room-control/mainroom-control/index.js +90 -17
  26. package/lib/room-control/privilege-control/helper.js +8 -5
  27. package/lib/room-control/privilege-control/index.js +66 -19
  28. package/lib/room-control/privilege-control/type.d.ts +57 -10
  29. package/lib/room-control/privilege-control/type.js +17 -0
  30. package/lib/room-control/room-connector-control/index.js +28 -19
  31. package/lib/room-control/room-control-factory.js +3 -2
  32. package/lib/room-control/room-session/index.js +68 -49
  33. package/lib/room-control/room-session/type.d.ts +2 -2
  34. package/lib/room-control/shared-cache.js +36 -29
  35. package/lib/room-control/sharing-control/index.d.ts +5 -5
  36. package/lib/room-control/sharing-control/index.js +81 -43
  37. package/lib/room-control/sharing-control/type.d.ts +9 -5
  38. package/lib/room-control/sharing-control/type.js +6 -1
  39. package/lib/room-control/stream-control/index.d.ts +8 -1
  40. package/lib/room-control/stream-control/index.js +310 -199
  41. package/lib/room-control/stream-control/type.d.ts +6 -0
  42. package/lib/room-control/stt-control/de-compress-gzip.d.ts +1 -0
  43. package/lib/room-control/stt-control/de-compress-gzip.js +49 -0
  44. package/lib/room-control/stt-control/index.d.ts +1 -0
  45. package/lib/room-control/stt-control/index.js +353 -0
  46. package/lib/room-control/stt-control/type.d.ts +142 -0
  47. package/lib/room-control/stt-control/type.js +16 -0
  48. package/lib/room-control/type.d.ts +15 -0
  49. package/lib/room-control/type.js +13 -1
  50. package/lib/room-control/user-control/index.js +143 -136
  51. package/lib/room-control/waitingroom-control/index.js +14 -9
  52. package/lib/room-control/whiteboard-control/enum.d.ts +15 -0
  53. package/lib/room-control/whiteboard-control/{types.js → enum.js} +12 -1
  54. package/lib/room-control/whiteboard-control/type.d.ts +38 -0
  55. package/lib/room-control/whiteboard-control/type.js +15 -0
  56. package/lib/room-control/whiteboard-control/utils.d.ts +3 -0
  57. package/lib/room-control/whiteboard-control/utils.js +23 -0
  58. package/lib/room-control/whiteboard-control-v1/board-subwindow.d.ts +6 -0
  59. package/lib/room-control/whiteboard-control-v1/board-subwindow.js +26 -0
  60. package/lib/room-control/whiteboard-control-v1/board-window.d.ts +58 -0
  61. package/lib/room-control/whiteboard-control-v1/board-window.js +571 -0
  62. package/lib/room-control/{whiteboard-control/enums.d.ts → whiteboard-control-v1/enum.d.ts} +3 -17
  63. package/lib/room-control/{whiteboard-control/enums.js → whiteboard-control-v1/enum.js} +3 -20
  64. package/lib/room-control/whiteboard-control-v1/factory.d.ts +9 -0
  65. package/lib/room-control/whiteboard-control-v1/factory.js +22 -0
  66. package/lib/room-control/whiteboard-control-v1/index.d.ts +1 -0
  67. package/lib/room-control/whiteboard-control-v1/index.js +440 -0
  68. package/lib/room-control/whiteboard-control-v1/mount-manager.d.ts +4 -0
  69. package/lib/room-control/whiteboard-control-v1/mount-manager.js +15 -0
  70. package/lib/room-control/whiteboard-control-v1/type.d.ts +300 -0
  71. package/lib/room-control/whiteboard-control-v1/type.js +13 -0
  72. package/lib/room-control/whiteboard-control-v1/utils.d.ts +53 -0
  73. package/lib/room-control/whiteboard-control-v1/utils.js +290 -0
  74. package/lib/room-control/whiteboard-control-v2/annotation-control/control.d.ts +17 -31
  75. package/lib/room-control/whiteboard-control-v2/annotation-control/control.js +42 -228
  76. package/lib/room-control/whiteboard-control-v2/annotation-control/factory.d.ts +10 -0
  77. package/lib/room-control/whiteboard-control-v2/annotation-control/factory.js +48 -0
  78. package/lib/room-control/whiteboard-control-v2/annotation-control/type.d.ts +11 -19
  79. package/lib/room-control/whiteboard-control-v2/annotation-control/type.js +1 -3
  80. package/lib/room-control/whiteboard-control-v2/base/index.d.ts +42 -0
  81. package/lib/room-control/whiteboard-control-v2/base/index.js +317 -0
  82. package/lib/room-control/whiteboard-control-v2/{main-window.d.ts → base/main-window.d.ts} +6 -4
  83. package/lib/room-control/whiteboard-control-v2/{main-window.js → base/main-window.js} +54 -36
  84. package/lib/room-control/whiteboard-control-v2/constant.d.ts +6 -0
  85. package/lib/room-control/whiteboard-control-v2/constant.js +15 -0
  86. package/lib/room-control/whiteboard-control-v2/enum.d.ts +26 -0
  87. package/lib/room-control/whiteboard-control-v2/enum.js +34 -0
  88. package/lib/room-control/{whiteboard-control/types.d.ts → whiteboard-control-v2/type.d.ts} +51 -165
  89. package/lib/room-control/whiteboard-control-v2/type.js +5 -0
  90. package/lib/room-control/whiteboard-control-v2/utils.d.ts +5 -4
  91. package/lib/room-control/whiteboard-control-v2/utils.js +29 -27
  92. package/lib/room-control/whiteboard-control-v2/whiteboard-control/control.d.ts +34 -33
  93. package/lib/room-control/whiteboard-control-v2/whiteboard-control/control.js +131 -187
  94. package/lib/room-control/whiteboard-control-v2/whiteboard-control/factory.d.ts +11 -0
  95. package/lib/room-control/whiteboard-control-v2/{annotation-control/index.js → whiteboard-control/factory.js} +40 -38
  96. package/lib/room-control/whiteboard-control-v2/whiteboard-control/type.d.ts +18 -30
  97. package/lib/room-control/whiteboard-control-v2/whiteboard-control/type.js +1 -9
  98. package/lib/room-router/index.js +56 -42
  99. package/lib/schema.d.ts +23 -9
  100. package/lib/schema.js +10 -4
  101. package/lib/service/api.d.ts +75 -19
  102. package/lib/service/api.js +401 -208
  103. package/lib/type.d.ts +15 -2
  104. package/lib/type.js +13 -0
  105. package/lib/utilities/collection.js +3 -2
  106. package/lib/utilities/error-helpers.d.ts +2 -1
  107. package/lib/utilities/error-helpers.js +35 -27
  108. package/lib/utilities/error.d.ts +1 -0
  109. package/lib/utilities/error.js +10 -8
  110. package/lib/utilities/join-helper.js +32 -25
  111. package/lib/utilities/logger.d.ts +2 -2
  112. package/lib/utilities/logger.js +6 -3
  113. package/lib/utilities/parameters.js +8 -4
  114. package/lib/utilities/retry-helpers.js +1 -0
  115. package/lib/utilities/shared-storage.d.ts +3 -1
  116. package/lib/utilities/shared-storage.js +10 -1
  117. package/lib/utilities/storage.js +1 -0
  118. package/lib/utilities/stream.js +16 -11
  119. package/lib/utilities/user.js +4 -3
  120. package/lib/utilities/validate-params.js +2 -1
  121. package/package.json +11 -5
  122. package/lib/room-control/whiteboard-control-v2/annotation-control/index.d.ts +0 -19
  123. package/lib/room-control/whiteboard-control-v2/annotation-control/privilege-control.d.ts +0 -36
  124. package/lib/room-control/whiteboard-control-v2/annotation-control/privilege-control.js +0 -252
  125. package/lib/room-control/whiteboard-control-v2/index.d.ts +0 -38
  126. package/lib/room-control/whiteboard-control-v2/index.js +0 -274
  127. package/lib/room-control/whiteboard-control-v2/whiteboard-control/index.d.ts +0 -17
  128. package/lib/room-control/whiteboard-control-v2/whiteboard-control/index.js +0 -30
  129. package/lib/room-control/whiteboard-control-v2/whiteboard-control/privilege-control.d.ts +0 -36
  130. package/lib/room-control/whiteboard-control-v2/whiteboard-control/privilege-control.js +0 -240
@@ -59,6 +59,12 @@ export interface FcrStreamControl {
59
59
  * @param streamType
60
60
  */
61
61
  setVideoEncoderConfig(streamId: string, config: FcrVideoEncoderConfig, streamType: FcrVideoStreamType): void;
62
+ /**
63
+ * Sets the dual stream mode for a local stream.
64
+ * @param streamId
65
+ * @param enable
66
+ */
67
+ setDualStreamMode(streamId: string, enableDualStreamMode: boolean): void;
62
68
  /**
63
69
  * Starts rendering the remote video stream.
64
70
  * @param streamId
@@ -0,0 +1 @@
1
+ export declare function deCompressGzipToJson(compressedData: Uint8Array<ArrayBufferLike>): Promise<any>;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.deCompressGzipToJson = deCompressGzipToJson;
7
+ require("core-js/modules/es.error.cause.js");
8
+ require("core-js/modules/es.array-buffer.constructor.js");
9
+ require("core-js/modules/es.array-buffer.slice.js");
10
+ require("core-js/modules/es.typed-array.uint8-array.js");
11
+ require("core-js/modules/es.typed-array.at.js");
12
+ require("core-js/modules/es.typed-array.fill.js");
13
+ require("core-js/modules/es.typed-array.find-last.js");
14
+ require("core-js/modules/es.typed-array.find-last-index.js");
15
+ require("core-js/modules/es.typed-array.set.js");
16
+ require("core-js/modules/es.typed-array.sort.js");
17
+ require("core-js/modules/es.typed-array.to-reversed.js");
18
+ require("core-js/modules/es.typed-array.to-sorted.js");
19
+ require("core-js/modules/es.typed-array.with.js");
20
+ require("core-js/modules/esnext.array-buffer.detached.js");
21
+ require("core-js/modules/esnext.array-buffer.transfer.js");
22
+ require("core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js");
23
+ require("core-js/modules/esnext.json.parse.js");
24
+ require("core-js/modules/esnext.typed-array.filter-reject.js");
25
+ require("core-js/modules/esnext.typed-array.group-by.js");
26
+ require("core-js/modules/esnext.typed-array.to-spliced.js");
27
+ require("core-js/modules/esnext.typed-array.unique-by.js");
28
+ async function deCompressGzipToJson(compressedData) {
29
+ try {
30
+ // 检查浏览器是否支持 Compression Streams API
31
+ if (typeof DecompressionStream === 'undefined') {
32
+ throw new Error('DecompressionStream is not supported in this browser');
33
+ }
34
+
35
+ // 创建解压缩流
36
+ const decompressionStream = new DecompressionStream('gzip');
37
+ const decompressedStream = new Blob([new Uint8Array(compressedData)]).stream().pipeThrough(decompressionStream);
38
+
39
+ // 获取解压缩后的文本
40
+ const response = new Response(decompressedStream);
41
+ const text = await response.text();
42
+
43
+ // 解析为 JSON 对象
44
+ return JSON.parse(text);
45
+ } catch (error) {
46
+ console.error('Gzip decompression to JSON failed:', error);
47
+ throw error;
48
+ }
49
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,353 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.symbol.description.js");
4
+ require("core-js/modules/es.error.cause.js");
5
+ require("core-js/modules/esnext.function.metadata.js");
6
+ require("core-js/modules/esnext.iterator.for-each.js");
7
+ require("core-js/modules/esnext.symbol.metadata.js");
8
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
9
+ Object.defineProperty(exports, "__esModule", {
10
+ value: true
11
+ });
12
+ exports.FcrSttControlImpl = void 0;
13
+ require("core-js/modules/es.array.push.js");
14
+ require("core-js/modules/esnext.iterator.constructor.js");
15
+ require("core-js/modules/esnext.iterator.filter.js");
16
+ require("core-js/modules/esnext.iterator.map.js");
17
+ require("core-js/modules/esnext.map.delete-all.js");
18
+ require("core-js/modules/esnext.map.emplace.js");
19
+ require("core-js/modules/esnext.map.every.js");
20
+ require("core-js/modules/esnext.map.filter.js");
21
+ require("core-js/modules/esnext.map.find.js");
22
+ require("core-js/modules/esnext.map.find-key.js");
23
+ require("core-js/modules/esnext.map.includes.js");
24
+ require("core-js/modules/esnext.map.key-of.js");
25
+ require("core-js/modules/esnext.map.map-keys.js");
26
+ require("core-js/modules/esnext.map.map-values.js");
27
+ require("core-js/modules/esnext.map.merge.js");
28
+ require("core-js/modules/esnext.map.reduce.js");
29
+ require("core-js/modules/esnext.map.some.js");
30
+ require("core-js/modules/esnext.map.update.js");
31
+ require("core-js/modules/web.dom-collections.iterator.js");
32
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
33
+ var _imports = require("../../imports");
34
+ var _logger = require("../../utilities/logger");
35
+ var _schema = require("../../schema");
36
+ var _type = require("./type");
37
+ var _error = require("../../utilities/error");
38
+ var _type2 = require("../../type");
39
+ var _validateParams = _interopRequireDefault(require("../../utilities/validate-params"));
40
+ var _user = require("../../utilities/user");
41
+ var _type3 = require("../type");
42
+ var _FcrSttControlImpl;
43
+ let _initProto, _startCaptionDecs, _startTranscribingDecs, _updateSourceLanguageDecs, _subscribeTranscribingLanguageDecs, _ref;
44
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
45
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
46
+ function _applyDecs(e, t, r, n, o, a) { function i(e, t, r) { return function (n, o) { return r && r(n), e[t].call(n, o); }; } function c(e, t) { for (var r = 0; r < e.length; r++) e[r].call(t); return t; } function s(e, t, r, n) { if ("function" != typeof e && (n || void 0 !== e)) throw new TypeError(t + " must " + (r || "be") + " a function" + (n ? "" : " or undefined")); return e; } function applyDec(e, t, r, n, o, a, c, u, l, f, p, d, h) { function m(e) { if (!h(e)) throw new TypeError("Attempted to access private element on non-instance"); } var y, v = t[0], g = t[3], b = !u; if (!b) { r || Array.isArray(v) || (v = [v]); var w = {}, S = [], A = 3 === o ? "get" : 4 === o || d ? "set" : "value"; f ? (p || d ? w = { get: _setFunctionName(function () { return g(this); }, n, "get"), set: function (e) { t[4](this, e); } } : w[A] = g, p || _setFunctionName(w[A], n, 2 === o ? "" : A)) : p || (w = Object.getOwnPropertyDescriptor(e, n)); } for (var P = e, j = v.length - 1; j >= 0; j -= r ? 2 : 1) { var D = v[j], E = r ? v[j - 1] : void 0, I = {}, O = { kind: ["field", "accessor", "method", "getter", "setter", "class"][o], name: n, metadata: a, addInitializer: function (e, t) { if (e.v) throw Error("attempted to call addInitializer after decoration was finished"); s(t, "An initializer", "be", !0), c.push(t); }.bind(null, I) }; try { if (b) (y = s(D.call(E, P, O), "class decorators", "return")) && (P = y);else { var k, F; O.static = l, O.private = f, f ? 2 === o ? k = function (e) { return m(e), w.value; } : (o < 4 && (k = i(w, "get", m)), 3 !== o && (F = i(w, "set", m))) : (k = function (e) { return e[n]; }, (o < 2 || 4 === o) && (F = function (e, t) { e[n] = t; })); var N = O.access = { has: f ? h.bind() : function (e) { return n in e; } }; if (k && (N.get = k), F && (N.set = F), P = D.call(E, d ? { get: w.get, set: w.set } : w[A], O), d) { if ("object" == typeof P && P) (y = s(P.get, "accessor.get")) && (w.get = y), (y = s(P.set, "accessor.set")) && (w.set = y), (y = s(P.init, "accessor.init")) && S.push(y);else if (void 0 !== P) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0"); } else s(P, (p ? "field" : "method") + " decorators", "return") && (p ? S.push(P) : w[A] = P); } } finally { I.v = !0; } } return (p || d) && u.push(function (e, t) { for (var r = S.length - 1; r >= 0; r--) t = S[r].call(e, t); return t; }), p || b || (f ? d ? u.push(i(w, "get"), i(w, "set")) : u.push(2 === o ? w[A] : i.call.bind(w[A])) : Object.defineProperty(e, n, w)), P; } function u(e, t) { return Object.defineProperty(e, Symbol.metadata || Symbol.for("Symbol.metadata"), { configurable: !0, enumerable: !0, value: t }); } if (arguments.length >= 6) var l = a[Symbol.metadata || Symbol.for("Symbol.metadata")]; var f = Object.create(null == l ? null : l), p = function (e, t, r, n) { var o, a, i = [], s = function (t) { return _checkInRHS(t) === e; }, u = new Map(); function l(e) { e && i.push(c.bind(null, e)); } for (var f = 0; f < t.length; f++) { var p = t[f]; if (Array.isArray(p)) { var d = p[1], h = p[2], m = p.length > 3, y = 16 & d, v = !!(8 & d), g = 0 == (d &= 7), b = h + "/" + v; if (!g && !m) { var w = u.get(b); if (!0 === w || 3 === w && 4 !== d || 4 === w && 3 !== d) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + h); u.set(b, !(d > 2) || d); } applyDec(v ? e : e.prototype, p, y, m ? "#" + h : _toPropertyKey(h), d, n, v ? a = a || [] : o = o || [], i, v, m, g, 1 === d, v && m ? s : r); } } return l(o), l(a), i; }(e, t, o, f); return r.length || u(e, f), { e: p, get c() { var t = []; return r.length && [u(applyDec(e, [r], n, e.name, 5, f, t), f), c.bind(null, t, e)]; } }; }
47
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
48
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
49
+ function _setFunctionName(e, t, n) { "symbol" == typeof t && (t = (t = t.description) ? "[" + t + "]" : ""); try { Object.defineProperty(e, "name", { configurable: !0, value: n ? n + " " + t : t }); } catch (e) {} return e; }
50
+ function _checkInRHS(e) { if (Object(e) !== e) throw TypeError("right-hand side of 'in' should be an object, got " + (null !== e ? typeof e : "null")); return e; }
51
+ /**
52
+ * @internal
53
+ */
54
+ _ref = (_startCaptionDecs = [_imports.trace, (0, _validateParams.default)(_schema.fcrLanguageConfigSchema)], _startTranscribingDecs = [_imports.trace, (0, _validateParams.default)(_schema.fcrLanguageConfigSchema)], _updateSourceLanguageDecs = [_imports.trace, (0, _validateParams.default)(_schema.fcrLanguageSchema)], _subscribeTranscribingLanguageDecs = [_imports.trace, (0, _validateParams.default)(_schema.fcrLanguageSchema)], "logger");
55
+ class FcrSttControlImpl {
56
+ constructor(_scene, _api, _sharedCache) {
57
+ //@internal
58
+ (0, _defineProperty2.default)(this, _ref, (_initProto(this), (0, _logger.createLogger)({
59
+ prefix: 'FcrUserControlImpl'
60
+ })));
61
+ //@internal
62
+ (0, _defineProperty2.default)(this, "_observable", new _imports.AgoraObservable());
63
+ (0, _defineProperty2.default)(this, "_cacheMaxLimit", 10);
64
+ (0, _defineProperty2.default)(this, "_sttEventWrapperListMap", new Map());
65
+ //@internal
66
+ (0, _defineProperty2.default)(this, "_sceneObserver", {
67
+ onStreamMessageReceived: async (sceneId, data) => {
68
+ const sttUids = this._scene.getScenePropertiesByKeyPath('widgets.stt.extra.pubBotUids');
69
+ const isSttBot = sttUids.includes(Number(data.streamId));
70
+ if (!isSttBot) {
71
+ return;
72
+ }
73
+ const sttreamMessagetData = await (0, _imports.deCompressGzipToJson)(data.payload);
74
+ const sttEvent = this._parseSTT(sttreamMessagetData);
75
+ if (sttEvent) {
76
+ this._observable.notifyObservers('onSttEventReceived', sceneId, sttEvent);
77
+ }
78
+ },
79
+ onUserPropertiesUpdated: (sceneId, event) => {
80
+ if (event.cause && event.cause.data) {
81
+ const causeData = event.cause.data;
82
+ if (causeData.widgetUuid == _type3.FcrWidgetUuid.STT && causeData.widgetCause && causeData.widgetCause.cmd == 3450) {
83
+ const localUserId = this._scene.localUser.getLocalUserId();
84
+ if (event.operatorUser.userId !== localUserId) {
85
+ return;
86
+ }
87
+ const operatorUser = (0, _user.convertRteUserToFcrUser)(event.operatorUser, this._roomCache);
88
+ if (causeData.widgetCause.reason === 0) {
89
+ const isTranscribingStopped = this._getTranscribingState() === _type.FcrTranscribingState.STOPPED;
90
+ if (isTranscribingStopped) {
91
+ this._sttEventWrapperListMap.clear();
92
+ }
93
+ this._observable.notifyObservers('onLocalCaptionStateUpdated', sceneId, _type.FcrCaptionState.STOPPED, operatorUser);
94
+ }
95
+ if (causeData.widgetCause.reason === 1) {
96
+ this._observable.notifyObservers('onLocalCaptionStateUpdated', sceneId, _type.FcrCaptionState.STARTED, operatorUser);
97
+ }
98
+ }
99
+ }
100
+ },
101
+ onScenePropertiesUpdated: (sceneId, event) => {
102
+ if (event.cause && event.cause.data) {
103
+ const causeData = event.cause.data;
104
+ if (!causeData.widgetCause) {
105
+ return;
106
+ }
107
+ if (causeData.widgetUuid == _type3.FcrWidgetUuid.TRANSCRIBE && causeData.widgetCause.cmd == _type3.FcrWidgetCauseCmd.TRANSCRIBE) {
108
+ const operatorUser = (0, _user.convertRteUserToFcrUser)(event.operatorUser, this._roomCache);
109
+ if (causeData.widgetCause.reason === 0) {
110
+ const isCaptionStopped = this._getLocalCaptionState() === _type.FcrCaptionState.STOPPED;
111
+ if (isCaptionStopped) {
112
+ this._sttEventWrapperListMap.clear();
113
+ }
114
+ this._observable.notifyObservers('onTranscribingStateUpdated', sceneId, _type.FcrTranscribingState.STOPPED, operatorUser);
115
+ }
116
+ if (causeData.widgetCause.reason === 1) {
117
+ this._observable.notifyObservers('onTranscribingStateUpdated', sceneId, _type.FcrTranscribingState.STARTED, operatorUser);
118
+ }
119
+ }
120
+ if (causeData.widgetUuid == _type3.FcrWidgetUuid.STT && causeData.widgetCause.cmd == _type3.FcrWidgetCauseCmd.STT) {
121
+ let operatorUser;
122
+ if (event.operatorUser) {
123
+ operatorUser = (0, _user.convertRteUserToFcrUser)(event.operatorUser, this._roomCache);
124
+ }
125
+ if (causeData.widgetCause.reason === 2) {
126
+ this._observable.notifyObservers('onSourceLanguageUpdated', sceneId, operatorUser);
127
+ }
128
+ }
129
+ }
130
+ }
131
+ });
132
+ this._scene = _scene;
133
+ this._api = _api;
134
+ this._sharedCache = _sharedCache;
135
+ this._roomCache = _sharedCache.getRoomCache(this._scene.sceneId);
136
+ this._scene.addObserver(this._sceneObserver);
137
+ this._addLogObserver();
138
+ }
139
+ startCaption(config) {
140
+ return (0, _error.handleRequestError)(() => this._api.startCaption({
141
+ roomUuid: this._scene.sceneId,
142
+ userUuid: this._scene.localUser.getLocalUserId(),
143
+ config
144
+ }), _error.FcrErrorModuleCode.ROOM_STT, 'start caption failed');
145
+ }
146
+ stopCaption() {
147
+ return (0, _error.handleRequestError)(() => this._api.stopCaption({
148
+ roomUuid: this._scene.sceneId,
149
+ userUuid: this._scene.localUser.getLocalUserId()
150
+ }), _error.FcrErrorModuleCode.ROOM_STT, 'stop caption failed');
151
+ }
152
+ startTranscribing(config) {
153
+ return (0, _error.handleRequestError)(() => this._api.startTranscribing({
154
+ roomUuid: this._scene.sceneId,
155
+ userUuid: this._scene.localUser.getLocalUserId(),
156
+ config
157
+ }), _error.FcrErrorModuleCode.ROOM_STT, 'start transcribing failed');
158
+ }
159
+ stopTranscribing() {
160
+ return (0, _error.handleRequestError)(() => this._api.stopTranscribing({
161
+ roomUuid: this._scene.sceneId,
162
+ userUuid: this._scene.localUser.getLocalUserId()
163
+ }), _error.FcrErrorModuleCode.ROOM_STT, 'stop transcribing failed');
164
+ }
165
+ updateSourceLanguage(language) {
166
+ return (0, _error.handleRequestError)(() => this._api.updateSourceLanguage({
167
+ roomUuid: this._scene.sceneId,
168
+ userUuid: this._scene.localUser.getLocalUserId(),
169
+ language
170
+ }), _error.FcrErrorModuleCode.ROOM_STT, 'update source language failed');
171
+ }
172
+ subscribeTranscribingLanguage(language) {
173
+ return (0, _error.handleRequestError)(() => this._api.subscribeTranscribingLanguage({
174
+ roomUuid: this._scene.sceneId,
175
+ userUuid: this._scene.localUser.getLocalUserId(),
176
+ language
177
+ }), _error.FcrErrorModuleCode.ROOM_STT, 'subscribe transcribing language failed');
178
+ }
179
+ unsubscribeTranscribingLanguage() {
180
+ return (0, _error.handleRequestError)(() => this._api.unsubscribeTranscribingLanguage({
181
+ roomUuid: this._scene.sceneId,
182
+ userUuid: this._scene.localUser.getLocalUserId()
183
+ }), _error.FcrErrorModuleCode.ROOM_STT, 'unsubscribe transcribing language failed');
184
+ }
185
+ getLocalCaptionState() {
186
+ return this._getLocalCaptionState();
187
+ }
188
+ getTranscribingState() {
189
+ return this._getTranscribingState();
190
+ }
191
+ getSourceLanguage() {
192
+ const transcribingState = this._getTranscribingState();
193
+ if (transcribingState === _type.FcrTranscribingState.STOPPED) {
194
+ return null;
195
+ }
196
+ return this._scene.getScenePropertiesByKeyPath('widgets.stt.extra.speechLanguage');
197
+ }
198
+ getConfig() {
199
+ const sourceLanguages = this._scene.getScenePropertiesByKeyPath('widgets.stt.extra.sourceLanguages');
200
+ const translateLanguages = this._scene.getScenePropertiesByKeyPath('widgets.stt.extra.translateLanguages');
201
+ const cacheMaxLimit = this._scene.getScenePropertiesByKeyPath('widgets.stt.extra.maxLimit');
202
+ if (!sourceLanguages || !translateLanguages || !cacheMaxLimit) {
203
+ return null;
204
+ }
205
+ return {
206
+ sourceLanguages,
207
+ translateLanguages,
208
+ cacheMaxLimit
209
+ };
210
+ }
211
+ addObserver(observer) {
212
+ this._observable.addObserver(observer);
213
+ }
214
+ removeObserver(observer) {
215
+ this._observable.removeObserver(observer);
216
+ }
217
+ release() {
218
+ this._sttEventWrapperListMap.clear();
219
+ this._scene.removeObserver(this._sceneObserver);
220
+ }
221
+ _getLocalCaptionState() {
222
+ const captionState = this._scene.getUserPropertiesByKeyPath('widgets.stt.caption', this._scene.localUser.getLocalUserId());
223
+ return captionState;
224
+ }
225
+ _getTranscribingState() {
226
+ return this._scene.getScenePropertiesByKeyPath('widgets.transcribe.state');
227
+ }
228
+ _parseSTT(sttreamMessagetData) {
229
+ var _this$_scene$getStrea;
230
+ const codeMap = {
231
+ 'zh-CN': _type2.FcrLanguage.ZH,
232
+ 'en-US': _type2.FcrLanguage.EN,
233
+ 'ja-JP': _type2.FcrLanguage.JP,
234
+ 'de-DE': _type2.FcrLanguage.DE,
235
+ 'fr-FR': _type2.FcrLanguage.FR,
236
+ 'pt-PT': _type2.FcrLanguage.PT,
237
+ 'es-ES': _type2.FcrLanguage.ES
238
+ };
239
+ const transcript = sttreamMessagetData.transcript;
240
+ const translation = sttreamMessagetData.translation;
241
+ const messageItem = transcript || translation;
242
+ const uid = messageItem === null || messageItem === void 0 ? void 0 : messageItem.uid;
243
+ if (!uid) {
244
+ this.logger.error('parseSTT failed, uid is null');
245
+ return null;
246
+ }
247
+ const owner = (_this$_scene$getStrea = this._scene.getStreamByStreamId(uid.toString())) === null || _this$_scene$getStrea === void 0 ? void 0 : _this$_scene$getStrea.owner;
248
+ if (!owner) {
249
+ this.logger.error('parseSTT failed, owner is null');
250
+ return null;
251
+ }
252
+ const userId = owner.userId;
253
+ if (!userId) {
254
+ this.logger.error('parseSTT failed, userId is null');
255
+ return null;
256
+ }
257
+ let sttEventWrapperList = this._sttEventWrapperListMap.get(userId);
258
+ let sttEventWrapper = null;
259
+ if (transcript) {
260
+ const sentenceId = transcript.uid + '-' + transcript.textTs;
261
+ const formatTranscript = {
262
+ id: sentenceId,
263
+ text: transcript.text,
264
+ language: codeMap[transcript.language],
265
+ owner: (0, _user.convertRteUserToFcrUser)(owner, this._roomCache),
266
+ timestamp: transcript.textTs,
267
+ isFinal: transcript.isFinal
268
+ };
269
+ if (!sttEventWrapperList || sttEventWrapperList.length === 0) {
270
+ sttEventWrapper = {
271
+ startTs: 0,
272
+ endTs: transcript.textTs,
273
+ event: {
274
+ transcript: formatTranscript,
275
+ translations: new Map()
276
+ }
277
+ };
278
+ sttEventWrapperList = [sttEventWrapper];
279
+ } else {
280
+ const lastSttEventWrapper = sttEventWrapperList[sttEventWrapperList.length - 1];
281
+ // add
282
+ if (lastSttEventWrapper.event.transcript.isFinal == true) {
283
+ sttEventWrapper = {
284
+ startTs: lastSttEventWrapper.endTs,
285
+ endTs: transcript.textTs,
286
+ event: {
287
+ transcript: formatTranscript,
288
+ translations: new Map()
289
+ }
290
+ };
291
+ sttEventWrapperList.push(sttEventWrapper);
292
+ // 超过 10 条,移除 oldest
293
+ if (sttEventWrapperList.length > this._cacheMaxLimit) {
294
+ // remove oldest
295
+ sttEventWrapperList.shift();
296
+ }
297
+ } else {
298
+ if (transcript.textTs >= lastSttEventWrapper.endTs) {
299
+ // update
300
+ sttEventWrapperList[sttEventWrapperList.length - 1] = {
301
+ startTs: lastSttEventWrapper.endTs,
302
+ endTs: transcript.textTs,
303
+ event: (0, _imports.merge)(lastSttEventWrapper.event, {
304
+ transcript: _objectSpread(_objectSpread({}, formatTranscript), {}, {
305
+ id: lastSttEventWrapper.event.transcript.id
306
+ })
307
+ })
308
+ };
309
+ }
310
+ }
311
+ }
312
+ }
313
+ if (translation) {
314
+ var _sttEventWrapperList;
315
+ // 获取缓存句子
316
+ sttEventWrapperList = (_sttEventWrapperList = sttEventWrapperList) === null || _sttEventWrapperList === void 0 ? void 0 : _sttEventWrapperList.map(wrapper => {
317
+ const formatTranslation = {
318
+ id: wrapper.event.transcript.id,
319
+ language: codeMap[translation.results0.language],
320
+ text: translation.results0.texts.join(''),
321
+ timestamp: translation.textTs,
322
+ isFinal: translation.isFinal,
323
+ owner: (0, _user.convertRteUserToFcrUser)(owner, this._roomCache)
324
+ };
325
+ if (translation.textTs > wrapper.startTs && translation.textTs <= wrapper.endTs) {
326
+ const transInfo = wrapper.event.translations.get(translation.results0.language);
327
+ if (!transInfo) {
328
+ wrapper.event.translations.set(formatTranslation.language, formatTranslation);
329
+ } else if (translation.textTs >= transInfo.timestamp) {
330
+ wrapper.event.translations.set(formatTranslation.language, _objectSpread(_objectSpread({}, formatTranslation), {}, {
331
+ id: wrapper.event.transcript.id
332
+ }));
333
+ } else if (transInfo.isFinal == true && wrapper.event.transcript.isFinal == true) {
334
+ return null;
335
+ }
336
+ }
337
+ return wrapper;
338
+ }).filter(wrapper => wrapper !== null);
339
+ }
340
+ if (sttEventWrapperList) {
341
+ this._sttEventWrapperListMap.set(userId, sttEventWrapperList);
342
+ const lastSttEventWrapper = sttEventWrapperList[sttEventWrapperList.length - 1];
343
+ return lastSttEventWrapper.event;
344
+ }
345
+ return null;
346
+ }
347
+ _addLogObserver() {
348
+ this.addObserver((0, _logger.generateLogObserver)(this.logger, ['onSttEventReceived', 'onLocalCaptionStateUpdated', 'onTranscribingStateUpdated', 'onSourceLanguageUpdated']));
349
+ }
350
+ }
351
+ exports.FcrSttControlImpl = FcrSttControlImpl;
352
+ _FcrSttControlImpl = FcrSttControlImpl;
353
+ [_initProto] = _applyDecs(_FcrSttControlImpl, [[_startCaptionDecs, 2, "startCaption"], [_imports.trace, 2, "stopCaption"], [_startTranscribingDecs, 2, "startTranscribing"], [_imports.trace, 2, "stopTranscribing"], [_updateSourceLanguageDecs, 2, "updateSourceLanguage"], [_subscribeTranscribingLanguageDecs, 2, "subscribeTranscribingLanguage"], [_imports.trace, 2, "unsubscribeTranscribingLanguage"], [_imports.trace, 2, "release"]], []).e;
@@ -0,0 +1,142 @@
1
+ import { FcrLanguage, FcrUserInfo } from '../../type';
2
+ export interface FcrSttControl {
3
+ /**
4
+ * Adds the observer.
5
+ * @param observer
6
+ */
7
+ addObserver(observer: FcrSttObserver): void;
8
+ /**
9
+ * Removes the observer.
10
+ * @param observer
11
+ */
12
+ removeObserver(observer: FcrSttObserver): void;
13
+ /**
14
+ * Starts the caption.
15
+ */
16
+ startCaption(config: FcrLanguageConfig): Promise<void>;
17
+ /**
18
+ * Stops the caption.
19
+ */
20
+ stopCaption(): Promise<void>;
21
+ /**
22
+ * Starts the transcribing.
23
+ */
24
+ startTranscribing(config: FcrLanguageConfig): Promise<void>;
25
+ /**
26
+ * Stops the transcribing.
27
+ */
28
+ stopTranscribing(): Promise<void>;
29
+ /**
30
+ * Updates the source language.
31
+ */
32
+ updateSourceLanguage(language: FcrLanguage): Promise<void>;
33
+ /**
34
+ * Subscribes the transcribing language.
35
+ */
36
+ subscribeTranscribingLanguage(language: FcrLanguage): Promise<void>;
37
+ /**
38
+ * Unsubscribes the transcribing language.
39
+ */
40
+ unsubscribeTranscribingLanguage(): Promise<void>;
41
+ /**
42
+ * Gets the source language.
43
+ */
44
+ getSourceLanguage(): FcrLanguage | null;
45
+ /**
46
+ * Gets the transcribing language.
47
+ */
48
+ getLocalCaptionState(): FcrCaptionState;
49
+ /**
50
+ * Gets the transcribing language.
51
+ */
52
+ getTranscribingState(): FcrTranscribingState;
53
+ /**
54
+ * Gets the transcribing language.
55
+ */
56
+ getConfig(): FcrSttConfig | null;
57
+ }
58
+ export interface FcrSttObserver {
59
+ /**
60
+ * Callback to receive the stt event.
61
+ * @param roomId
62
+ * @param event
63
+ */
64
+ onSttEventReceived?: (roomId: string, event: FcrSttEvent) => void;
65
+ /**
66
+ * Callback to receive the stt state changed.
67
+ * @param roomId
68
+ * @param state
69
+ */
70
+ onLocalCaptionStateUpdated?: (roomId: string, state: FcrCaptionState, operatorUser?: FcrUserInfo) => void;
71
+ /**
72
+ * Callback to receive the transcribing state changed.
73
+ * @param roomId
74
+ * @param state
75
+ */
76
+ onTranscribingStateUpdated?: (roomId: string, state: FcrTranscribingState, operatorUser?: FcrUserInfo) => void;
77
+ /**
78
+ * Callback to receive the source language changed.
79
+ * @param roomId
80
+ * @param operatorUser
81
+ */
82
+ onSourceLanguageUpdated?: (roomId: string, operatorUser?: FcrUserInfo | null) => void;
83
+ }
84
+ export interface FcrLanguageConfig {
85
+ sourceLanguage: FcrLanguage;
86
+ targetLanguage?: FcrLanguage;
87
+ }
88
+ export declare enum FcrCaptionState {
89
+ STOPPED = 0,
90
+ STARTED = 1
91
+ }
92
+ export declare enum FcrTranscribingState {
93
+ STOPPED = 0,
94
+ STARTED = 1
95
+ }
96
+ export interface FcrCaptionConfig {
97
+ selectedSourceLanguage: FcrLanguage;
98
+ sourceLanguages: Array<FcrLanguage>;
99
+ translateLanguages?: Array<FcrLanguage>;
100
+ }
101
+ export interface FcrSttConfig {
102
+ sourceLanguages: Array<FcrLanguage>;
103
+ translateLanguages: Array<FcrLanguage>;
104
+ cacheMaxLimit: number;
105
+ }
106
+ export interface FcrSttEvent {
107
+ transcript: FcrSttInfo;
108
+ translations: Map<FcrLanguage, FcrSttInfo>;
109
+ }
110
+ export interface FcrSttEventWrapper {
111
+ startTs: number;
112
+ endTs: number;
113
+ event: FcrSttEvent;
114
+ }
115
+ export interface FcrSttInfo {
116
+ id: string;
117
+ text: string;
118
+ language: FcrLanguage;
119
+ owner: FcrUserInfo;
120
+ timestamp: number;
121
+ isFinal: boolean;
122
+ }
123
+ export interface FcrSttTranslation extends FcrSttMessageItem {
124
+ results0: {
125
+ texts: string[];
126
+ language: FcrLanguage;
127
+ };
128
+ }
129
+ export interface FcrSttMessageItem {
130
+ textTs: number;
131
+ isFinal: boolean;
132
+ uid: number;
133
+ offset: number;
134
+ }
135
+ export interface FcrSttTranscript extends FcrSttMessageItem {
136
+ text: string;
137
+ language: FcrLanguage;
138
+ }
139
+ export interface FcrSttreamMessagetData {
140
+ transcript?: FcrSttTranscript;
141
+ translation?: FcrSttTranslation;
142
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FcrTranscribingState = exports.FcrCaptionState = void 0;
7
+ let FcrCaptionState = exports.FcrCaptionState = /*#__PURE__*/function (FcrCaptionState) {
8
+ FcrCaptionState[FcrCaptionState["STOPPED"] = 0] = "STOPPED";
9
+ FcrCaptionState[FcrCaptionState["STARTED"] = 1] = "STARTED";
10
+ return FcrCaptionState;
11
+ }({});
12
+ let FcrTranscribingState = exports.FcrTranscribingState = /*#__PURE__*/function (FcrTranscribingState) {
13
+ FcrTranscribingState[FcrTranscribingState["STOPPED"] = 0] = "STOPPED";
14
+ FcrTranscribingState[FcrTranscribingState["STARTED"] = 1] = "STARTED";
15
+ return FcrTranscribingState;
16
+ }({});
@@ -10,7 +10,12 @@ import { FcrStreamControl } from './stream-control/type';
10
10
  import { FcrUserControl, FcrUserRole } from './user-control/type';
11
11
  import { FcrAbilityControl } from './ability-control/type';
12
12
  import { FcrSharingControl } from './sharing-control/type';
13
+ import { FcrSttControl } from './stt-control/type';
13
14
  export interface FcrBaseRoomControl {
15
+ /**
16
+ * Gets the caption control.
17
+ */
18
+ getSttControl(): FcrSttControl;
14
19
  /**
15
20
  * Gets the user control.
16
21
  */
@@ -284,3 +289,13 @@ export declare enum FcrLineType {
284
289
  SINGLE_ROW = 1,
285
290
  MULTI_ROW = 2
286
291
  }
292
+ export declare enum FcrWidgetUuid {
293
+ STT = "stt",
294
+ TRANSCRIBE = "transcribe",
295
+ ANNOTATION = "annotation"
296
+ }
297
+ export declare enum FcrWidgetCauseCmd {
298
+ STT = 3450,
299
+ TRANSCRIBE = 3430,
300
+ ANNOTATION = 1
301
+ }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.FcrRoomType = exports.FcrLiveStreamingStateUpdatedReason = exports.FcrLineType = void 0;
6
+ exports.FcrWidgetUuid = exports.FcrWidgetCauseCmd = exports.FcrRoomType = exports.FcrLiveStreamingStateUpdatedReason = exports.FcrLineType = void 0;
7
7
  let FcrRoomType = exports.FcrRoomType = /*#__PURE__*/function (FcrRoomType) {
8
8
  FcrRoomType[FcrRoomType["Mainroom"] = 11] = "Mainroom";
9
9
  FcrRoomType[FcrRoomType["Waitingroom"] = 102] = "Waitingroom";
@@ -21,4 +21,16 @@ let FcrLineType = exports.FcrLineType = /*#__PURE__*/function (FcrLineType) {
21
21
  FcrLineType[FcrLineType["SINGLE_ROW"] = 1] = "SINGLE_ROW";
22
22
  FcrLineType[FcrLineType["MULTI_ROW"] = 2] = "MULTI_ROW";
23
23
  return FcrLineType;
24
+ }({});
25
+ let FcrWidgetUuid = exports.FcrWidgetUuid = /*#__PURE__*/function (FcrWidgetUuid) {
26
+ FcrWidgetUuid["STT"] = "stt";
27
+ FcrWidgetUuid["TRANSCRIBE"] = "transcribe";
28
+ FcrWidgetUuid["ANNOTATION"] = "annotation";
29
+ return FcrWidgetUuid;
30
+ }({});
31
+ let FcrWidgetCauseCmd = exports.FcrWidgetCauseCmd = /*#__PURE__*/function (FcrWidgetCauseCmd) {
32
+ FcrWidgetCauseCmd[FcrWidgetCauseCmd["STT"] = 3450] = "STT";
33
+ FcrWidgetCauseCmd[FcrWidgetCauseCmd["TRANSCRIBE"] = 3430] = "TRANSCRIBE";
34
+ FcrWidgetCauseCmd[FcrWidgetCauseCmd["ANNOTATION"] = 1] = "ANNOTATION";
35
+ return FcrWidgetCauseCmd;
24
36
  }({});