fcr-core 3.7.8 → 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 (108) hide show
  1. package/lib/chat-connection/index.d.ts +1 -1
  2. package/lib/engine/index.js +6 -5
  3. package/lib/imports.d.ts +7 -2
  4. package/lib/imports.js +25 -4
  5. package/lib/index.d.ts +2 -2
  6. package/lib/index.js +12 -0
  7. package/lib/media-control/desktop.js +4 -4
  8. package/lib/media-control/mobile.js +20 -20
  9. package/lib/media-control/type.d.ts +8 -0
  10. package/lib/plugins/chatroom.js +19 -3
  11. package/lib/room-control/ability-control/type.d.ts +4 -1
  12. package/lib/room-control/ability-control/type.js +3 -0
  13. package/lib/room-control/helpers/constants.d.ts +4 -0
  14. package/lib/room-control/helpers/constants.js +5 -1
  15. package/lib/room-control/index.js +16 -5
  16. package/lib/room-control/interpreter-control/index.js +2 -4
  17. package/lib/room-control/mainroom-control/index.js +66 -1
  18. package/lib/room-control/privilege-control/index.js +43 -3
  19. package/lib/room-control/privilege-control/type.d.ts +57 -10
  20. package/lib/room-control/privilege-control/type.js +17 -0
  21. package/lib/room-control/room-control-factory.js +1 -1
  22. package/lib/room-control/room-session/index.js +23 -13
  23. package/lib/room-control/room-session/type.d.ts +2 -2
  24. package/lib/room-control/sharing-control/index.d.ts +5 -5
  25. package/lib/room-control/sharing-control/index.js +43 -13
  26. package/lib/room-control/sharing-control/type.d.ts +9 -5
  27. package/lib/room-control/sharing-control/type.js +6 -1
  28. package/lib/room-control/stream-control/index.d.ts +8 -1
  29. package/lib/room-control/stream-control/index.js +139 -36
  30. package/lib/room-control/stream-control/type.d.ts +6 -0
  31. package/lib/room-control/stt-control/de-compress-gzip.d.ts +1 -0
  32. package/lib/room-control/stt-control/de-compress-gzip.js +49 -0
  33. package/lib/room-control/stt-control/index.d.ts +1 -0
  34. package/lib/room-control/stt-control/index.js +353 -0
  35. package/lib/room-control/stt-control/type.d.ts +142 -0
  36. package/lib/room-control/stt-control/type.js +16 -0
  37. package/lib/room-control/type.d.ts +15 -0
  38. package/lib/room-control/type.js +13 -1
  39. package/lib/room-control/whiteboard-control/enum.d.ts +15 -0
  40. package/lib/room-control/whiteboard-control/{types.js → enum.js} +12 -1
  41. package/lib/room-control/whiteboard-control/type.d.ts +38 -0
  42. package/lib/room-control/whiteboard-control/type.js +15 -0
  43. package/lib/room-control/whiteboard-control/utils.d.ts +3 -0
  44. package/lib/room-control/whiteboard-control/utils.js +23 -0
  45. package/lib/room-control/whiteboard-control-v1/board-subwindow.d.ts +6 -0
  46. package/lib/room-control/whiteboard-control-v1/board-subwindow.js +26 -0
  47. package/lib/room-control/whiteboard-control-v1/board-window.d.ts +58 -0
  48. package/lib/room-control/whiteboard-control-v1/board-window.js +571 -0
  49. package/lib/room-control/{whiteboard-control/enums.d.ts → whiteboard-control-v1/enum.d.ts} +3 -17
  50. package/lib/room-control/{whiteboard-control/enums.js → whiteboard-control-v1/enum.js} +3 -20
  51. package/lib/room-control/whiteboard-control-v1/factory.d.ts +9 -0
  52. package/lib/room-control/whiteboard-control-v1/factory.js +22 -0
  53. package/lib/room-control/whiteboard-control-v1/index.d.ts +1 -0
  54. package/lib/room-control/whiteboard-control-v1/index.js +440 -0
  55. package/lib/room-control/whiteboard-control-v1/mount-manager.d.ts +4 -0
  56. package/lib/room-control/whiteboard-control-v1/mount-manager.js +15 -0
  57. package/lib/room-control/whiteboard-control-v1/type.d.ts +300 -0
  58. package/lib/room-control/whiteboard-control-v1/type.js +13 -0
  59. package/lib/room-control/whiteboard-control-v1/utils.d.ts +53 -0
  60. package/lib/room-control/whiteboard-control-v1/utils.js +290 -0
  61. package/lib/room-control/whiteboard-control-v2/annotation-control/control.d.ts +17 -31
  62. package/lib/room-control/whiteboard-control-v2/annotation-control/control.js +39 -233
  63. package/lib/room-control/whiteboard-control-v2/annotation-control/factory.d.ts +10 -0
  64. package/lib/room-control/whiteboard-control-v2/annotation-control/factory.js +48 -0
  65. package/lib/room-control/whiteboard-control-v2/annotation-control/type.d.ts +11 -19
  66. package/lib/room-control/whiteboard-control-v2/annotation-control/type.js +1 -3
  67. package/lib/room-control/whiteboard-control-v2/base/index.d.ts +42 -0
  68. package/lib/room-control/whiteboard-control-v2/base/index.js +317 -0
  69. package/lib/room-control/whiteboard-control-v2/{main-window.d.ts → base/main-window.d.ts} +6 -4
  70. package/lib/room-control/whiteboard-control-v2/{main-window.js → base/main-window.js} +31 -18
  71. package/lib/room-control/whiteboard-control-v2/constant.d.ts +6 -0
  72. package/lib/room-control/whiteboard-control-v2/constant.js +15 -0
  73. package/lib/room-control/whiteboard-control-v2/enum.d.ts +26 -0
  74. package/lib/room-control/whiteboard-control-v2/enum.js +34 -0
  75. package/lib/room-control/{whiteboard-control/types.d.ts → whiteboard-control-v2/type.d.ts} +51 -165
  76. package/lib/room-control/whiteboard-control-v2/type.js +5 -0
  77. package/lib/room-control/whiteboard-control-v2/utils.d.ts +5 -4
  78. package/lib/room-control/whiteboard-control-v2/utils.js +22 -21
  79. package/lib/room-control/whiteboard-control-v2/whiteboard-control/control.d.ts +34 -33
  80. package/lib/room-control/whiteboard-control-v2/whiteboard-control/control.js +124 -191
  81. package/lib/room-control/whiteboard-control-v2/whiteboard-control/factory.d.ts +11 -0
  82. package/lib/room-control/whiteboard-control-v2/{annotation-control/index.js → whiteboard-control/factory.js} +35 -44
  83. package/lib/room-control/whiteboard-control-v2/whiteboard-control/type.d.ts +18 -30
  84. package/lib/room-control/whiteboard-control-v2/whiteboard-control/type.js +1 -9
  85. package/lib/room-router/index.js +4 -0
  86. package/lib/schema.d.ts +23 -9
  87. package/lib/schema.js +10 -4
  88. package/lib/service/api.d.ts +75 -19
  89. package/lib/service/api.js +193 -24
  90. package/lib/type.d.ts +15 -2
  91. package/lib/type.js +13 -0
  92. package/lib/utilities/error-helpers.d.ts +2 -1
  93. package/lib/utilities/error-helpers.js +1 -0
  94. package/lib/utilities/error.d.ts +1 -0
  95. package/lib/utilities/error.js +1 -0
  96. package/lib/utilities/logger.d.ts +2 -2
  97. package/lib/utilities/shared-storage.d.ts +3 -1
  98. package/lib/utilities/shared-storage.js +9 -1
  99. package/package.json +11 -5
  100. package/lib/room-control/whiteboard-control-v2/annotation-control/index.d.ts +0 -19
  101. package/lib/room-control/whiteboard-control-v2/annotation-control/privilege-control.d.ts +0 -36
  102. package/lib/room-control/whiteboard-control-v2/annotation-control/privilege-control.js +0 -262
  103. package/lib/room-control/whiteboard-control-v2/index.d.ts +0 -38
  104. package/lib/room-control/whiteboard-control-v2/index.js +0 -286
  105. package/lib/room-control/whiteboard-control-v2/whiteboard-control/index.d.ts +0 -17
  106. package/lib/room-control/whiteboard-control-v2/whiteboard-control/index.js +0 -32
  107. package/lib/room-control/whiteboard-control-v2/whiteboard-control/privilege-control.d.ts +0 -36
  108. package/lib/room-control/whiteboard-control-v2/whiteboard-control/privilege-control.js +0 -252
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.FcrWhiteboardControlFactoryImpl = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _ = require(".");
10
+ var _logger = require("../../utilities/logger");
11
+ class FcrWhiteboardControlFactoryImpl {
12
+ constructor() {
13
+ (0, _defineProperty2.default)(this, "logger", (0, _logger.createLogger)({
14
+ prefix: 'FcrWhiteboardControlFactory'
15
+ }));
16
+ }
17
+ createForMainProcess(hasOperationPrivilege, scene, api, sharedCache) {
18
+ this.logger.info('[whiteboard]: create for main process, use old whiteboard control');
19
+ return new _.FcrWhiteboardControlImpl(scene, api, sharedCache, hasOperationPrivilege);
20
+ }
21
+ }
22
+ exports.FcrWhiteboardControlFactoryImpl = FcrWhiteboardControlFactoryImpl;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,440 @@
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/es.array.push.js");
6
+ require("core-js/modules/esnext.function.metadata.js");
7
+ require("core-js/modules/esnext.iterator.filter.js");
8
+ require("core-js/modules/esnext.iterator.for-each.js");
9
+ require("core-js/modules/esnext.map.delete-all.js");
10
+ require("core-js/modules/esnext.map.emplace.js");
11
+ require("core-js/modules/esnext.map.every.js");
12
+ require("core-js/modules/esnext.map.filter.js");
13
+ require("core-js/modules/esnext.map.find.js");
14
+ require("core-js/modules/esnext.map.find-key.js");
15
+ require("core-js/modules/esnext.map.includes.js");
16
+ require("core-js/modules/esnext.map.key-of.js");
17
+ require("core-js/modules/esnext.map.map-keys.js");
18
+ require("core-js/modules/esnext.map.map-values.js");
19
+ require("core-js/modules/esnext.map.merge.js");
20
+ require("core-js/modules/esnext.map.reduce.js");
21
+ require("core-js/modules/esnext.map.some.js");
22
+ require("core-js/modules/esnext.map.update.js");
23
+ require("core-js/modules/esnext.symbol.metadata.js");
24
+ require("core-js/modules/esnext.weak-map.delete-all.js");
25
+ require("core-js/modules/esnext.weak-map.emplace.js");
26
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
27
+ Object.defineProperty(exports, "__esModule", {
28
+ value: true
29
+ });
30
+ exports.FcrWhiteboardControlImpl = void 0;
31
+ require("core-js/modules/esnext.iterator.constructor.js");
32
+ require("core-js/modules/esnext.iterator.map.js");
33
+ require("core-js/modules/web.dom-collections.iterator.js");
34
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
35
+ var _appSlide = _interopRequireDefault(require("@netless/app-slide"));
36
+ var _whiteWebSdk = require("white-web-sdk");
37
+ var netlessVideoPlugin = _interopRequireWildcard(require("@netless/video-js-plugin"));
38
+ var _windowManager = require("@netless/window-manager");
39
+ var _appliancePlugin = require("@netless/appliance-plugin");
40
+ var _utils = require("./utils");
41
+ var _observable = require("agora-foundation/lib/utilities/observable");
42
+ var _boardWindow = require("./board-window");
43
+ var _type = require("../whiteboard-control/type");
44
+ var _decorator = require("agora-foundation/lib/decorator");
45
+ var _user = require("../../utilities/user");
46
+ var _2 = require("../..");
47
+ var _logger = require("../../utilities/logger");
48
+ var _imports = require("../../imports");
49
+ var _error = require("../../utilities/error");
50
+ var _imports2 = require("agora-rte-sdk/lib/imports");
51
+ var _type2 = require("../sharing-control/type");
52
+ var _FcrWhiteboardControlImpl;
53
+ let _initProto;
54
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
55
+ 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; }
56
+ 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; }
57
+ 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)]; } }; }
58
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
59
+ 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); }
60
+ 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; }
61
+ 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; }
62
+ /**
63
+ * @internal
64
+ */
65
+ class FcrWhiteboardControlImpl {
66
+ constructor(_scene, _api, _sharedCache, hasOperationPrivilege) {
67
+ (0, _defineProperty2.default)(this, "logger", (_initProto(this), (0, _logger.createLogger)({
68
+ prefix: 'FcrWhiteboardControlImpl'
69
+ })));
70
+ (0, _defineProperty2.default)(this, "_client", {});
71
+ (0, _defineProperty2.default)(this, "_joined", false);
72
+ (0, _defineProperty2.default)(this, "_connectState", _2.FcrConnectionState.DISCONNECTED);
73
+ (0, _defineProperty2.default)(this, "_observable", new _observable.AgoraObservable());
74
+ (0, _defineProperty2.default)(this, "_options", {
75
+ debug: false
76
+ });
77
+ (0, _defineProperty2.default)(this, "_hasOperationPrivilege", false);
78
+ this._scene = _scene;
79
+ this._api = _api;
80
+ this._sharedCache = _sharedCache;
81
+ this._hasOperationPrivilege = hasOperationPrivilege;
82
+ this._roomCache = this._sharedCache.getRoomCache(this._scene.sceneId);
83
+ this._addLogObserver();
84
+ _scene.addObserver({
85
+ onScenePropertiesUpdated: (_, event) => {
86
+ var _event$cause;
87
+ const operatorUser = (0, _user.convertRteUserToFcrUser)(event.operatorUser, this._roomCache);
88
+ if (((_event$cause = event.cause) === null || _event$cause === void 0 ? void 0 : _event$cause.cmd) === 10) {
89
+ var _ref, _event$cause$data$wid2;
90
+ const {
91
+ state,
92
+ extra: {
93
+ backgroundColor: bgColor
94
+ }
95
+ } = (_ref = _scene.getScenePropertiesByKeyPath('widgets.netlessBoard')) !== null && _ref !== void 0 ? _ref : {
96
+ state: 0,
97
+ extra: {
98
+ backgroundColor: '#fff'
99
+ }
100
+ };
101
+ if (state === 1) {
102
+ this._observable.notifyObservers('onActive', _scene.getScenePropertiesByKeyPath('widgets.netlessBoard').ownerUserUuid, operatorUser);
103
+ }
104
+ if (state === 0) {
105
+ var _event$cause$data$wid;
106
+ this._observable.notifyObservers('onInactive', (_event$cause$data$wid = event.cause.data.widgetCause) === null || _event$cause$data$wid === void 0 || (_event$cause$data$wid = _event$cause$data$wid.data) === null || _event$cause$data$wid === void 0 ? void 0 : _event$cause$data$wid.reason, operatorUser);
107
+ }
108
+ if (((_event$cause$data$wid2 = event.cause.data.widgetCause) === null || _event$cause$data$wid2 === void 0 ? void 0 : _event$cause$data$wid2.cmd) === 100101) {
109
+ this._observable.notifyObservers('onBackgroundColorUpdated', bgColor, operatorUser);
110
+ }
111
+ }
112
+ }
113
+ });
114
+ _windowManager.WindowManager.register({
115
+ kind: 'Slide',
116
+ src: _appSlide.default
117
+ });
118
+ }
119
+ async active() {
120
+ return (0, _error.handleRequestError)(() => this._api.toggleWhiteboardActivityState(this._scene.sceneId, _type2.FcrSharePermissionState.ON), _error.FcrErrorModuleCode.ROOM_WHITEBOARD, 'active failed');
121
+ }
122
+ async inactive() {
123
+ return (0, _error.handleRequestError)(() => this._api.toggleWhiteboardActivityState(this._scene.sceneId, _type2.FcrSharePermissionState.OFF), _error.FcrErrorModuleCode.ROOM_WHITEBOARD, 'inactive failed');
124
+ }
125
+ async open() {
126
+ let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
127
+ this._whiteboardPrivateParameters = params;
128
+ // 白板权限禁用状态下,主持人和联席主持人仍然可以发起共享,所以,不能根据是否禁用状态直接拒绝
129
+
130
+ this._joined = true;
131
+ if (this._connectState !== _2.FcrConnectionState.DISCONNECTED) {
132
+ return this._boardView;
133
+ }
134
+ const boardView = await this._connect();
135
+ return boardView;
136
+ }
137
+ async close() {
138
+ this._joined = false;
139
+ await this._clean();
140
+ }
141
+ async setBackgroundColor(backgroundColor) {
142
+ await this._api.setBackgroundColor({
143
+ roomId: this._scene.sceneId,
144
+ backgroundColor
145
+ });
146
+ }
147
+ getActivity() {
148
+ return this._scene.getScenePropertiesByKeyPath('widgets.netlessBoard').state === 1;
149
+ }
150
+ getOwnerId() {
151
+ return this._scene.getScenePropertiesByKeyPath('widgets.netlessBoard.ownerUserUuid');
152
+ }
153
+ getBackgroundColor() {
154
+ return this._scene.getScenePropertiesByKeyPath('widgets.netlessBoard.extra.backgroundColor');
155
+ }
156
+ getConnectionState() {
157
+ return this._connectState;
158
+ }
159
+ getMainWindow() {
160
+ return this._boardView;
161
+ }
162
+ addObserver(observer) {
163
+ this._observable.addObserver(observer);
164
+ }
165
+ removeObserver(observer) {
166
+ this._observable.removeObserver(observer);
167
+ }
168
+ getBoardActiveInfo() {
169
+ const {
170
+ state,
171
+ ownerUserUuid: ownerUserId
172
+ } = this._scene.getScenePropertiesByKeyPath('widgets.netlessBoard') || {
173
+ isActive: false,
174
+ ownerUserUuid: null
175
+ };
176
+ if (state === _type.FcrBoardPropertiesState.ACTIVE) {
177
+ return {
178
+ isActive: true,
179
+ ownerUserId
180
+ };
181
+ } else {
182
+ return {
183
+ isActive: false,
184
+ ownerUserId: null
185
+ };
186
+ }
187
+ }
188
+ hasOperationPrivilege() {
189
+ return this._hasOperationPrivilege;
190
+ }
191
+ setOperationPrivilege(hasPrivilege) {
192
+ if (hasPrivilege !== this._hasOperationPrivilege) {
193
+ this._hasOperationPrivilege = hasPrivilege;
194
+ this._setBoardWritable(hasPrivilege);
195
+ }
196
+ }
197
+ async _setBoardWritable(granted) {
198
+ if (this._room) {
199
+ const room = this._room;
200
+ if (granted) {
201
+ this.logger.info('set whiteboard writable => true, start');
202
+ await room.setWritable(true);
203
+ this.logger.info('set whiteboard writable => true, success');
204
+ room.disableDeviceInputs = false;
205
+ room.disableSerialization = false;
206
+ const mainWindow = this._boardView;
207
+ if (mainWindow) {
208
+ // @ts-ignore
209
+ mainWindow._observable.notifyObservers('onWritable', true);
210
+ }
211
+ } else {
212
+ room.disableDeviceInputs = true;
213
+ room.disableSerialization = true;
214
+ this.logger.info('set whiteboard writable => false, start');
215
+ await room.setWritable(false);
216
+ this.logger.info('set whiteboard writable => false, success');
217
+ const mainWindow = this._boardView;
218
+ if (mainWindow) {
219
+ // @ts-ignore
220
+ mainWindow._observable.notifyObservers('onWritable', false);
221
+ }
222
+ }
223
+ }
224
+ }
225
+ _createPlugins() {
226
+ const plugins = (0, _whiteWebSdk.createPlugins)({
227
+ [netlessVideoPlugin.PluginId]: netlessVideoPlugin.videoJsPlugin()
228
+ });
229
+ plugins.setPluginContext(netlessVideoPlugin.PluginId, {
230
+ enable: true,
231
+ verbose: true
232
+ });
233
+ return plugins;
234
+ }
235
+ async _getToken(roomId, userId) {
236
+ return await (0, _error.handleRequestError)(() => this._api.getWhiteboardToken({
237
+ roomId,
238
+ userId
239
+ }), _error.FcrErrorModuleCode.ROOM_WHITEBOARD, 'get whiteboard token failed');
240
+ }
241
+ _handleRoomStateUpdated(state) {
242
+ const {
243
+ memberState
244
+ } = state;
245
+ if (memberState) {
246
+ const {
247
+ strokeColor,
248
+ strokeWidth,
249
+ currentApplianceName,
250
+ textSize,
251
+ shapeType
252
+ } = memberState;
253
+ const localState = {};
254
+ const [tool, shape] = (0, _utils.convertToFcrBoardToolShape)(currentApplianceName, shapeType);
255
+ localState.tool = tool;
256
+ localState.shape = shape;
257
+ if (typeof strokeColor !== 'undefined') {
258
+ const [r, g, b] = strokeColor;
259
+ localState.strokeColor = {
260
+ r,
261
+ g,
262
+ b
263
+ };
264
+ }
265
+ if (typeof strokeWidth !== 'undefined') {
266
+ localState.strokeWidth = strokeWidth;
267
+ }
268
+ if (typeof textSize !== 'undefined') {
269
+ localState.textSize = textSize;
270
+ }
271
+ }
272
+ }
273
+ _updateConnnectionState(state) {
274
+ if (this._connectState !== state) {
275
+ if (state === _2.FcrConnectionState.CONNECTED) {
276
+ // 首次加入白板,白板回调connected时,boardView还为创建
277
+ if (this._boardView) {
278
+ this._connectState = state;
279
+ this._observable.notifyObservers('onConnectionStateUpdated', state);
280
+ }
281
+ } else if (state === _2.FcrConnectionState.DISCONNECTED) {
282
+ if (this._joined) {
283
+ this.logger.info('whiteboard is disconnected, about to reconnect..');
284
+ (0, _imports2.sleep)(5000).then(() => {
285
+ if (this._joined) {
286
+ this._connect();
287
+ }
288
+ });
289
+ } else {
290
+ this._connectState = state;
291
+ this._observable.notifyObservers('onConnectionStateUpdated', state);
292
+ }
293
+ } else {
294
+ this._connectState = state;
295
+ this._observable.notifyObservers('onConnectionStateUpdated', state);
296
+ }
297
+ }
298
+ }
299
+ _handleConnectionStateUpdated(phase) {
300
+ if (phase === _whiteWebSdk.RoomPhase.Connecting) {
301
+ this._updateConnnectionState(_2.FcrConnectionState.CONNECTING);
302
+ } else if (phase === _whiteWebSdk.RoomPhase.Connected) {
303
+ this._updateConnnectionState(_2.FcrConnectionState.CONNECTED);
304
+ } else if (phase === _whiteWebSdk.RoomPhase.Reconnecting) {
305
+ this._updateConnnectionState(_2.FcrConnectionState.RECONNECTING);
306
+ } else if (phase === _whiteWebSdk.RoomPhase.Disconnected) {
307
+ this._updateConnnectionState(_2.FcrConnectionState.DISCONNECTED);
308
+ } else if (phase === _whiteWebSdk.RoomPhase.Disconnecting) {
309
+ // this._updateConnnectionState(FcrConnectionState.DISCONNECTING);
310
+ }
311
+ }
312
+ async _connect() {
313
+ try {
314
+ var _this$_scene$getUser, _this$_whiteboardPriv, _this$_whiteboardPriv2, _this$_whiteboardPriv3, _this$_whiteboardPriv4;
315
+ this._updateConnnectionState(_2.FcrConnectionState.CONNECTING);
316
+ const roomId = this._scene.sceneId;
317
+ const userId = this._scene.localUser.getLocalUserId();
318
+ const cursorName = (_this$_scene$getUser = this._scene.getUser(userId)) === null || _this$_scene$getUser === void 0 ? void 0 : _this$_scene$getUser.userName;
319
+ const syncMode = (_this$_whiteboardPriv = (_this$_whiteboardPriv2 = this._whiteboardPrivateParameters) === null || _this$_whiteboardPriv2 === void 0 ? void 0 : _this$_whiteboardPriv2.syncMode) !== null && _this$_whiteboardPriv !== void 0 ? _this$_whiteboardPriv : false;
320
+ const {
321
+ data
322
+ } = await this._getToken(roomId, userId);
323
+ const {
324
+ boardAppId,
325
+ boardId,
326
+ boardRegion,
327
+ boardToken
328
+ } = data || {};
329
+ const plugins = this._createPlugins();
330
+ this._client = new _whiteWebSdk.WhiteWebSdk(_objectSpread({
331
+ appIdentifier: boardAppId,
332
+ useMobXState: true,
333
+ pptParams: {
334
+ useServerWrap: true
335
+ },
336
+ deviceType: _whiteWebSdk.DeviceType.Surface,
337
+ plugins,
338
+ preloadDynamicPPT: true,
339
+ loggerOptions: {
340
+ reportQualityMode: _whiteWebSdk.LoggerReportMode.AlwaysReport,
341
+ reportDebugLogMode: _whiteWebSdk.LoggerReportMode.AlwaysReport,
342
+ reportLevelMask: this._options.debug ? 'debug' : 'info',
343
+ printLevelMask: this._options.debug ? 'debug' : 'info'
344
+ }
345
+ }, this._whiteboardPrivateParameters));
346
+ const hasPermission = this._hasOperationPrivilege;
347
+ const joinParams = {
348
+ region: boardRegion,
349
+ uuid: boardId,
350
+ uid: userId,
351
+ roomToken: boardToken,
352
+ isWritable: hasPermission,
353
+ disableDeviceInputs: false,
354
+ disableCameraTransform: true,
355
+ disableNewPencil: false,
356
+ disableEraseImage: false,
357
+ wrappedComponents: [],
358
+ invisiblePlugins: [_windowManager.WindowManager, _appliancePlugin.ApplianceMultiPlugin],
359
+ useMultiViews: true,
360
+ disableMagixEventDispatchLimit: true,
361
+ userPayload: {
362
+ userId,
363
+ avatar: '',
364
+ cursorName,
365
+ disappearCursor: true
366
+ },
367
+ floatBar: (_this$_whiteboardPriv3 = (_this$_whiteboardPriv4 = this._whiteboardPrivateParameters) === null || _this$_whiteboardPriv4 === void 0 ? void 0 : _this$_whiteboardPriv4.floatBar) !== null && _this$_whiteboardPriv3 !== void 0 ? _this$_whiteboardPriv3 : {
368
+ colors: _utils.textColors.map(color => (0, _utils.hexColorToWhiteboardColor)(color))
369
+ }
370
+ };
371
+ const room = await this._client.joinRoom(joinParams, {
372
+ onPhaseChanged: this._handleConnectionStateUpdated,
373
+ onRoomStateChanged: this._handleRoomStateUpdated
374
+ });
375
+ this._room = room;
376
+ if (hasPermission) {
377
+ room.setViewMode(_whiteWebSdk.ViewMode.Broadcaster);
378
+ }
379
+ this.logger.info("set whiteboard sync mode: ".concat(syncMode));
380
+ room.syncMode = syncMode;
381
+ const mountOptions = {};
382
+ const privateParams = this._whiteboardPrivateParameters;
383
+ if (!this._boardView) {
384
+ const mainWindow = this._createBoardMainWindow(room);
385
+ this._boardView = mainWindow;
386
+
387
+ // @ts-ignore
388
+ await this._boardView._mount(mountOptions, privateParams);
389
+ } else {
390
+ this.logger.info('reusing main window for whiteboard');
391
+ //@ts-ignore
392
+ this._boardView._setRoom(room, mountOptions, privateParams);
393
+ }
394
+ if (this._joined) {
395
+ this._updateConnnectionState(_2.FcrConnectionState.CONNECTED);
396
+ } else {
397
+ // 如果没有加入白板,则需要清理掉之前的状态
398
+ this.logger.info('whiteboard is not joined, cleaning up the state');
399
+ this._clean();
400
+ }
401
+ } catch (e) {
402
+ this.logger.error('error when connecting to whiteboard', e);
403
+ this._updateConnnectionState(_2.FcrConnectionState.DISCONNECTED);
404
+ }
405
+ return this._boardView;
406
+ }
407
+ _createBoardMainWindow(room) {
408
+ this.logger.info('creating main window for whiteboard');
409
+ const mainWindow = new _boardWindow.FcrBoardMainWindowImpl(room);
410
+ return mainWindow;
411
+ }
412
+ async _clean() {
413
+ if (this._boardView) {
414
+ // @ts-ignore
415
+ this._boardView.destroy();
416
+ this._boardView = undefined;
417
+ }
418
+ if (this._room) {
419
+ try {
420
+ // Workaround for whiteboard sdk issue: frameGenerator being null when disconnecting will cause error and trigger 'did-finish-loading' event in electron.
421
+ // Set writable to false to prevent this error from throwing.
422
+ // this.logger.info('change writable to false before disconnecting');
423
+ // await this._room.setWritable(false);
424
+ await this._room.disconnect();
425
+ } catch (e) {
426
+ this.logger.error('error when disconnecting whiteboard room', e);
427
+ } finally {
428
+ this._room.callbacks.off('onPhaseChanged', this._handleConnectionStateUpdated);
429
+ this._room.callbacks.off('onRoomStateChanged', this._handleRoomStateUpdated);
430
+ }
431
+ this._room = undefined;
432
+ }
433
+ }
434
+ _addLogObserver() {
435
+ this.addObserver((0, _logger.generateLogObserver)(this.logger, ['onActive', 'onInactive', 'onBackgroundColorUpdated', 'onConnectionStateUpdated']));
436
+ }
437
+ }
438
+ exports.FcrWhiteboardControlImpl = FcrWhiteboardControlImpl;
439
+ _FcrWhiteboardControlImpl = FcrWhiteboardControlImpl;
440
+ [_initProto] = _applyDecs(_FcrWhiteboardControlImpl, [[[_decorator.bound, _imports.trace], 2, "active"], [[_decorator.bound, _imports.trace], 2, "inactive"], [[_decorator.bound, _imports.trace], 2, "open"], [[_decorator.bound, _imports.trace], 2, "close"], [[_decorator.bound, _imports.trace], 2, "setBackgroundColor"], [[_decorator.bound, _imports.trace], 2, "getActivity"], [[_decorator.bound, _imports.trace], 2, "getOwnerId"], [[_decorator.bound, _imports.trace], 2, "getBackgroundColor"], [[_decorator.bound, _imports.trace], 2, "getConnectionState"], [[_decorator.bound, _imports.trace], 2, "getMainWindow"], [[_decorator.bound, _imports.trace], 2, "addObserver"], [[_decorator.bound, _imports.trace], 2, "removeObserver"], [[_decorator.bound, _imports.trace], 2, "getBoardActiveInfo"], [[_decorator.bound, _imports.trace], 2, "hasOperationPrivilege"], [[_decorator.bound, _imports.trace], 2, "setOperationPrivilege"], [_imports.trace, 2, "_setBoardWritable"], [_decorator.bound, 2, "_getToken"], [_decorator.bound, 2, "_handleRoomStateUpdated"], [_decorator.bound, 2, "_updateConnnectionState"], [_decorator.bound, 2, "_handleConnectionStateUpdated"], [_imports.trace, 2, "_connect"], [_imports.trace, 2, "_clean"]], []).e;
@@ -0,0 +1,4 @@
1
+ export declare class BoardMountManager {
2
+ static isMounting: boolean;
3
+ static setIsMounting(isMounting: boolean): void;
4
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.BoardMountManager = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ class BoardMountManager {
10
+ static setIsMounting(isMounting) {
11
+ BoardMountManager.isMounting = isMounting;
12
+ }
13
+ }
14
+ exports.BoardMountManager = BoardMountManager;
15
+ (0, _defineProperty2.default)(BoardMountManager, "isMounting", false);