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
@@ -1,32 +1,18 @@
1
- import { FcrBoardMainWindow } from '../../whiteboard-control/types';
2
- import { FcrAnnotationConfig, FcrAnnotationControl } from './type';
3
- import { Room } from '@netless/forge-room';
4
- import { Whiteboard } from '@netless/forge-whiteboard';
5
- import { FcrConnectionState } from '../../../type';
6
- import { FcrWhiteboardObserver } from '../whiteboard-control/type';
7
- import { FcrWhiteboardPermissionFlag } from '../../../imports';
8
- import { AgoraRtmClient } from 'agora-rte-sdk/lib/core/rtm/client';
9
- import { AgoraObservable } from '../../../imports';
10
- export declare class FcrAnnotationControlImpl implements FcrAnnotationControl {
11
- protected rtmClient: AgoraRtmClient;
12
- protected annotationConfig: FcrAnnotationConfig;
13
- protected logger: import("agora-rte-sdk/lib/imports").Logger;
14
- protected observable: AgoraObservable<FcrWhiteboardObserver>;
15
- protected annotation: Whiteboard | undefined;
16
- protected connectState: FcrConnectionState;
17
- protected boardView: FcrBoardMainWindow | undefined;
18
- protected boardRoom: Room | undefined;
19
- private _openAbortController;
20
- constructor(rtmClient: AgoraRtmClient, annotationConfig: FcrAnnotationConfig);
21
- open(): Promise<FcrBoardMainWindow>;
22
- close(): Promise<void>;
23
- getConnectionState(): FcrConnectionState;
24
- getMainWindow(): FcrBoardMainWindow | undefined;
25
- addPermission(permission: FcrWhiteboardPermissionFlag): void;
26
- removePermission(permission: FcrWhiteboardPermissionFlag): void;
27
- addObserver(observer: FcrWhiteboardObserver): void;
28
- removeObserver(observer: FcrWhiteboardObserver): void;
29
- protected updateConnnectionState(state: FcrConnectionState): void;
30
- protected _connect(): Promise<FcrBoardMainWindow>;
31
- private _addLogObserver;
1
+ import { FcrBaseWhiteboardObserver, FcrObjectForgeInitConfig } from '../type';
2
+ import { FcrAnnotationControl, FcrStandaloneAnnotationControl } from './type';
3
+ import { FcrBaseWhiteboardControlImpl } from '../base';
4
+ import { WhiteboardOption } from '@netless/forge-whiteboard';
5
+ import { FcrBoardConfig } from '../whiteboard-control/type';
6
+ import type { RTMClient } from 'agora-rtm';
7
+ export declare class FcrAnnotationControlImpl extends FcrBaseWhiteboardControlImpl<FcrBaseWhiteboardObserver> implements FcrAnnotationControl {
8
+ protected rtmClient: RTMClient;
9
+ protected config: FcrBoardConfig;
10
+ protected logger: import("agora-foundation/lib/logger").Logger;
11
+ constructor(rtmClient: RTMClient, config: FcrBoardConfig, hasOperationPrivilege: boolean, forgeInitConfigFetcher: () => Promise<FcrObjectForgeInitConfig>);
12
+ protected getApplicationId(): string;
13
+ protected getWhiteboardOption(): WhiteboardOption;
14
+ }
15
+ export declare class FcrStandaloneAnnotationControlImpl extends FcrBaseWhiteboardControlImpl<FcrBaseWhiteboardObserver> implements FcrStandaloneAnnotationControl {
16
+ protected getApplicationId(): string;
17
+ protected getWhiteboardOption(): WhiteboardOption;
32
18
  }
@@ -1,238 +1,52 @@
1
1
  "use strict";
2
2
 
3
- require("core-js/modules/es.array.push.js");
4
- require("core-js/modules/esnext.function.metadata.js");
5
- require("core-js/modules/esnext.map.delete-all.js");
6
- require("core-js/modules/esnext.map.emplace.js");
7
- require("core-js/modules/esnext.map.every.js");
8
- require("core-js/modules/esnext.map.filter.js");
9
- require("core-js/modules/esnext.map.find.js");
10
- require("core-js/modules/esnext.map.find-key.js");
11
- require("core-js/modules/esnext.map.includes.js");
12
- require("core-js/modules/esnext.map.key-of.js");
13
- require("core-js/modules/esnext.map.map-keys.js");
14
- require("core-js/modules/esnext.map.map-values.js");
15
- require("core-js/modules/esnext.map.merge.js");
16
- require("core-js/modules/esnext.map.reduce.js");
17
- require("core-js/modules/esnext.map.some.js");
18
- require("core-js/modules/esnext.map.update.js");
19
- require("core-js/modules/esnext.symbol.metadata.js");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
20
4
  Object.defineProperty(exports, "__esModule", {
21
5
  value: true
22
6
  });
23
- exports.FcrAnnotationControlImpl = void 0;
24
- var _type = require("./type");
25
- var _forgeRoom = require("@netless/forge-room");
26
- var _forgeWhiteboard = require("@netless/forge-whiteboard");
27
- var _imports = require("agora-rte-sdk/lib/imports");
28
- var _type2 = require("../../../type");
29
- var _mainWindow = require("../main-window");
30
- var _forgeRtm = require("@netless/forge-rtm");
31
- var _error = require("../../../utilities/error");
7
+ exports.FcrStandaloneAnnotationControlImpl = exports.FcrAnnotationControlImpl = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
32
9
  var _logger = require("../../../utilities/logger");
33
- var _imports2 = require("../../../imports");
34
- let _initProto;
35
- 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)]; } }; }
36
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
37
- 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); }
38
- 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; }
39
- 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; }
40
- class FcrAnnotationControlImpl {
41
- static {
42
- [_initProto] = _applyDecs(this, [[_imports2.trace, 2, "open"], [_imports2.trace, 2, "close"], [_imports2.trace, 2, "getConnectionState"], [_imports2.trace, 2, "getMainWindow"], [_imports2.trace, 2, "addPermission"], [_imports2.trace, 2, "removePermission"]], []).e;
43
- }
44
- logger = (_initProto(this), (0, _logger.createLogger)({
45
- prefix: 'FcrAnnotationControlImpl'
46
- }));
47
- observable = new _imports2.AgoraObservable();
48
- connectState = _type2.FcrConnectionState.DISCONNECTED;
49
- _openAbortController = null;
50
- constructor(rtmClient, annotationConfig) {
10
+ var _base = require("../base");
11
+ var _constant = require("../constant");
12
+ class FcrAnnotationControlImpl extends _base.FcrBaseWhiteboardControlImpl {
13
+ constructor(rtmClient, config, hasOperationPrivilege, forgeInitConfigFetcher) {
14
+ super(rtmClient, config, hasOperationPrivilege, forgeInitConfigFetcher);
15
+ (0, _defineProperty2.default)(this, "logger", (0, _logger.createLogger)({
16
+ prefix: 'FcrAnnotationControlImpl'
17
+ }));
51
18
  this.rtmClient = rtmClient;
52
- this.annotationConfig = annotationConfig;
53
- this._addLogObserver();
54
- }
55
- async open() {
56
- const boardView = await this._connect();
57
- return boardView;
58
- }
59
- async close() {
60
- try {
61
- if (this._openAbortController) {
62
- this._openAbortController.abort();
63
- this._openAbortController = null;
64
- }
65
- const boardRoom = this.boardRoom;
66
- this.boardRoom = undefined;
67
- this.boardView = undefined;
68
- if (boardRoom) {
69
- boardRoom.applicationManager.removeAllListeners();
70
- boardRoom.applicationManager.terminateApplication(_type.ANNOTATION_APP_ID);
71
- await boardRoom.leaveRoom();
72
- }
73
- } catch (e) {
74
- this.logger.error('close board failed', e);
75
- }
76
- }
77
- getConnectionState() {
78
- return this.connectState;
79
- }
80
- getMainWindow() {
81
- return this.boardView;
82
- }
83
- addPermission(permission) {
84
- const annotation = this.annotation;
85
- if (annotation) {
86
- annotation.permissions.addPermission(permission);
87
- } else {
88
- this.logger.warn(`add permission failed, annotation is not initialized, permission: ${permission}`);
89
- }
90
- }
91
- removePermission(permission) {
92
- const annotation = this.annotation;
93
- if (annotation) {
94
- annotation.permissions.removePermission(permission);
95
- } else {
96
- this.logger.warn(`remove permission failed, annotation is not initialized, permission: ${permission}`);
97
- }
19
+ this.config = config;
20
+ this.logger.info("initialized, hasOperationPrivilege: ".concat(hasOperationPrivilege));
21
+ }
22
+ getApplicationId() {
23
+ return _constant.ANNOTATION_APP_ID;
24
+ }
25
+ getWhiteboardOption() {
26
+ return {
27
+ width: 800,
28
+ height: 600,
29
+ defaultToolbarStyle: {
30
+ tool: 'laser'
31
+ },
32
+ maxScaleRatio: 1
33
+ };
98
34
  }
99
- addObserver(observer) {
100
- this.observable.addObserver(observer);
101
- }
102
- removeObserver(observer) {
103
- this.observable.removeObserver(observer);
104
- }
105
- updateConnnectionState(state) {
106
- this.connectState = state;
107
- this.observable.notifyObservers('onConnectionStateUpdated', state);
108
- }
109
- async _connect() {
110
- if (this.boardView) {
111
- this.logger.info('annotation already connected, returning existing board view');
112
- return this.boardView;
113
- }
114
- const abortController = new AbortController();
115
- this._openAbortController = abortController;
116
- return new Promise(async (resolve, reject) => {
117
- // 监听中止信号
118
- abortController.signal.addEventListener('abort', () => {
119
- reject(new Error('join board aborted'));
120
- });
121
- const {
122
- userId,
123
- nickName,
124
- size,
125
- extra
126
- } = this.annotationConfig;
127
- let {
128
- width,
129
- height
130
- } = this.annotationConfig.size;
131
- const {
132
- boardAppId,
133
- boardId,
134
- boardToken,
135
- region
136
- } = this.annotationConfig.extra;
137
- if (!size) {
138
- throw (0, _error.generateFcrCoreClientError)(_error.FcrErrorModuleCode.ROOM_WHITEBOARD, _error.FcrErrorCode.UNDEFINED_ERROR, 'annotation size is required', new Error('annotation size is required'));
139
- }
140
- if (!extra) {
141
- throw (0, _error.generateFcrCoreClientError)(_error.FcrErrorModuleCode.ROOM_WHITEBOARD, _error.FcrErrorCode.UNDEFINED_ERROR, 'annotation extra is required', new Error('annotation extra is required'));
142
- }
143
- if (!boardId) {
144
- throw (0, _error.generateFcrCoreClientError)(_error.FcrErrorModuleCode.ROOM_WHITEBOARD, _error.FcrErrorCode.UNDEFINED_ERROR, 'boardId is required', new Error('boardId is required'));
145
- }
146
- if (!boardToken) {
147
- throw (0, _error.generateFcrCoreClientError)(_error.FcrErrorModuleCode.ROOM_WHITEBOARD, _error.FcrErrorCode.UNDEFINED_ERROR, 'boardToken is required', new Error('boardToken is required'));
148
- }
149
- if (!width) {
150
- this.logger.warn(`annotation width is a invalid vlaue: ${width}, using default value 800`);
151
- width = 800;
152
- }
153
- if (!height) {
154
- this.logger.warn(`annotation height is a invalid value: ${height}, using default value 600`);
155
- height = 600;
156
- }
157
- this.logger.info(`open annotation with boardId: ${boardId}, boardToken: ${boardToken}, region: ${region}`);
158
-
159
- // @ts-ignore
160
- const rtmProvider = new _forgeRtm.RTMProvider_2_2(this.rtmClient);
161
- const wbRoom = new _forgeRoom.Room(boardId, rtmProvider);
162
- wbRoom.applicationManager.registerApplication(_forgeWhiteboard.WhiteboardApplication);
163
- try {
164
- this.updateConnnectionState(_type2.FcrConnectionState.CONNECTING);
165
- const retriesMax = 10;
166
- let error = null;
167
- let boardView = null;
168
- let whiteboard = null;
169
- let boardRoom = wbRoom;
170
- [error] = await (0, _imports2.to)((0, _imports.retryAttempt)(async () => {
171
- const joinRoomParams = {
172
- userId,
173
- nickName,
174
- roomToken: boardToken,
175
- sdkConfig: {
176
- // @ts-ignore
177
- region,
178
- appIdentifier: boardAppId,
179
- enableIFramePlugin: false,
180
- useMultiViews: true
181
- }
182
- };
183
- this.logger.info(`join params: ${(0, _imports2.jsonstring)(joinRoomParams)}`);
184
- await wbRoom.joinRoom(joinRoomParams);
185
- boardRoom = wbRoom;
186
- whiteboard = await wbRoom.applicationManager.launchApplication(_forgeWhiteboard.WhiteboardApplication, {
187
- width,
188
- height,
189
- defaultToolbarStyle: {
190
- tool: 'laser'
191
- },
192
- maxScaleRatio: 1
193
- }, _type.ANNOTATION_APP_ID);
194
- }, [], {
195
- retriesMax
196
- }).fail(async ({
197
- error,
198
- timeFn,
199
- currentRetry
200
- }) => {
201
- if (abortController.signal.aborted) {
202
- throw new Error('join board aborted');
203
- }
204
- this.logger.info(`failed to join board, error: ${error.message}, current retry: ${currentRetry}`);
205
- await timeFn();
206
- return true;
207
- }).exec());
208
- if (abortController.signal.aborted) {
209
- throw new Error('join board aborted');
210
- }
211
- if (error) {
212
- this.logger.error(`join board failed, ${error.message}-${JSON.stringify(error)}`);
213
- throw error;
214
- }
215
- whiteboard.enableCameraByMouse = false;
216
- whiteboard.enableCameraByTouch = false;
217
- whiteboard.setViewModeToMain();
218
- boardView = new _mainWindow.FcrBoardMainWindowImpl(whiteboard, wbRoom);
219
- boardView.setBackgroundColor('rgba(0, 0, 0, 0)');
220
- this.annotation = whiteboard;
221
- this.boardView = boardView;
222
- this.boardRoom = boardRoom;
223
- this.updateConnnectionState(_type2.FcrConnectionState.CONNECTED);
224
- resolve(boardView);
225
- } catch (e) {
226
- this.logger.error(`join board failed`);
227
- this.updateConnnectionState(_type2.FcrConnectionState.DISCONNECTED);
228
- reject(e);
229
- } finally {
230
- this._openAbortController = null;
231
- }
232
- });
233
- }
234
- _addLogObserver() {
235
- this.addObserver((0, _logger.generateLogObserver)(this.logger, ['onConnectionStateUpdated', 'onActive', 'onInactive', 'onBackgroundColorUpdated']));
35
+ }
36
+ exports.FcrAnnotationControlImpl = FcrAnnotationControlImpl;
37
+ class FcrStandaloneAnnotationControlImpl extends _base.FcrBaseWhiteboardControlImpl {
38
+ getApplicationId() {
39
+ return _constant.ANNOTATION_APP_ID;
40
+ }
41
+ getWhiteboardOption() {
42
+ return {
43
+ width: 800,
44
+ height: 600,
45
+ defaultToolbarStyle: {
46
+ tool: 'laser'
47
+ },
48
+ maxScaleRatio: 1
49
+ };
236
50
  }
237
51
  }
238
- exports.FcrAnnotationControlImpl = FcrAnnotationControlImpl;
52
+ exports.FcrStandaloneAnnotationControlImpl = FcrStandaloneAnnotationControlImpl;
@@ -0,0 +1,10 @@
1
+ import { FcrAnnotationConfig, FcrAnnotationControl, FcrAnnotationControlFactory } from './type';
2
+ import { FcrAnnotationControlImpl } from './control';
3
+ import { FcrCoreServiceApi } from '../../../service/api';
4
+ import type { RTMClient } from 'agora-rtm';
5
+ export declare class FcrAnnotationControlFactoryImpl implements FcrAnnotationControlFactory {
6
+ protected logger: import("agora-foundation/lib/logger").Logger;
7
+ createForSubProcess(rtmClient: RTMClient, hasOperationPrivilege: boolean, config: FcrAnnotationConfig): FcrAnnotationControl;
8
+ createForMainProcess(rtmClient: RTMClient, hasOperationPrivilege: boolean, config: FcrAnnotationConfig, api: FcrCoreServiceApi): FcrAnnotationControlImpl;
9
+ private _createForgeInitConfigFetcher;
10
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.FcrAnnotationControlFactoryImpl = void 0;
8
+ require("core-js/modules/es.error.cause.js");
9
+ require("core-js/modules/es.json.stringify.js");
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _control = require("./control");
12
+ var _logger = require("../../../utilities/logger");
13
+ var _error = require("../../../utilities/error");
14
+ var _sharedStorage = require("../../../utilities/shared-storage");
15
+ class FcrAnnotationControlFactoryImpl {
16
+ constructor() {
17
+ (0, _defineProperty2.default)(this, "logger", (0, _logger.createLogger)({
18
+ prefix: 'FcrAnnotationControlFactory'
19
+ }));
20
+ }
21
+ createForSubProcess(rtmClient, hasOperationPrivilege, config) {
22
+ this.logger.info("[annotation]: create for sub process with config: ".concat(JSON.stringify(config)));
23
+ return new _control.FcrStandaloneAnnotationControlImpl(rtmClient, config, hasOperationPrivilege, () => {
24
+ const forgeInitConfig = (0, _sharedStorage.getAnnotationBoardOptions)();
25
+ if (!forgeInitConfig) {
26
+ throw (0, _error.generateFcrCoreClientError)(_error.FcrErrorModuleCode.ROOM_WHITEBOARD, _error.FcrErrorCode.UNDEFINED_ERROR, "whiteboard init config is not exist", new Error("whiteboard init config is not exist"));
27
+ }
28
+ return Promise.resolve(forgeInitConfig);
29
+ });
30
+ }
31
+ createForMainProcess(rtmClient, hasOperationPrivilege, config, api) {
32
+ const control = new _control.FcrAnnotationControlImpl(rtmClient, config, hasOperationPrivilege, this._createForgeInitConfigFetcher(api, config.roomId, config.userId));
33
+ return control;
34
+ }
35
+ _createForgeInitConfigFetcher(api, roomId, userId) {
36
+ const getObjectInitConfig = async (roomId, userId) => {
37
+ return await (0, _error.handleRequestError)(() => api.getAnnotationToken({
38
+ roomId,
39
+ userId
40
+ }), _error.FcrErrorModuleCode.ROOM_WHITEBOARD, 'get annotation token failed');
41
+ };
42
+ return async () => {
43
+ const response = await getObjectInitConfig(roomId, userId);
44
+ return response.data;
45
+ };
46
+ }
47
+ }
48
+ exports.FcrAnnotationControlFactoryImpl = FcrAnnotationControlFactoryImpl;
@@ -1,12 +1,12 @@
1
- import { FcrBaseWhiteboardControl } from '../../whiteboard-control/types';
2
- import { FcrJoinRoomOptions, FcrWhiteboardPermissionFlag } from '../../../imports';
3
- export declare const ANNOTATION_APP_ID = "Annotation";
4
- export interface FcrAnnotationControl extends FcrBaseWhiteboardControl {
5
- addPermission(permission: FcrWhiteboardPermissionFlag): void;
6
- removePermission(permission: FcrWhiteboardPermissionFlag): void;
1
+ import { FcrBaseWhiteboardControl, FcrBaseWhiteboardObserver } from '../type';
2
+ import { FcrBoardConfig } from '../whiteboard-control/type';
3
+ import { FcrCoreServiceApi } from '../../../service/api';
4
+ import type { RTMClient } from 'agora-rtm';
5
+ export interface FcrStandaloneAnnotationControl extends FcrBaseWhiteboardControl<FcrBaseWhiteboardObserver> {
7
6
  }
8
- export interface FcrPrivilegedAnnotationControl extends FcrAnnotationControl {
9
- syncScreenShareOwnerAnnotationOpenDone(): void;
7
+ export interface FcrAnnotationControl extends FcrBaseWhiteboardControl<FcrBaseWhiteboardObserver> {
8
+ }
9
+ export interface FcrAnnotationControObserver extends FcrBaseWhiteboardObserver {
10
10
  }
11
11
  export interface FcrAnnotationBoardConfig {
12
12
  state: number;
@@ -25,21 +25,13 @@ export interface FcrAnnotationBoardConfig {
25
25
  region: string;
26
26
  };
27
27
  }
28
- export type FcrAnnotationConfig = {
29
- userId: string;
30
- nickName: string;
28
+ export type FcrAnnotationConfig = FcrBoardConfig & {
31
29
  size: {
32
30
  width: number;
33
31
  height: number;
34
32
  };
35
- extra: {
36
- boardAppId: string;
37
- boardId: string;
38
- boardToken: string;
39
- region: FcrJoinRoomOptions['sdkConfig']['region'];
40
- };
41
33
  };
42
34
  export interface FcrAnnotationControlFactory {
43
- createForSubProcess(config: FcrAnnotationConfig): FcrAnnotationControl;
44
- createForMainProcess(): FcrPrivilegedAnnotationControl;
35
+ createForSubProcess(rtmClient: RTMClient, hasOperationPrivilege: boolean, config: FcrAnnotationConfig): FcrStandaloneAnnotationControl;
36
+ createForMainProcess(rtmClient: RTMClient, hasOperationPrivilege: boolean, config: FcrAnnotationConfig, api: FcrCoreServiceApi): FcrAnnotationControl;
45
37
  }
@@ -2,6 +2,4 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
- });
6
- exports.ANNOTATION_APP_ID = void 0;
7
- const ANNOTATION_APP_ID = exports.ANNOTATION_APP_ID = 'Annotation';
5
+ });
@@ -0,0 +1,42 @@
1
+ import { FcrBaseWhiteboardControl, FcrBaseWhiteboardObserver, FcrBoardMainWindow, FcrObjectForgeInitConfig } from '../type';
2
+ import { AgoraRteConnectionState } from 'agora-rte-sdk';
3
+ import type { RTMClient } from 'agora-rtm';
4
+ import { AgoraObservable, AgoraScheduler } from '../../../imports';
5
+ import { FcrBoardConfig } from '../whiteboard-control/type';
6
+ import { Room } from '@netless/forge-room';
7
+ import { Whiteboard, WhiteboardOption } from '@netless/forge-whiteboard';
8
+ import { FcrConnectionState } from '../../../type';
9
+ export declare class FcrBaseWhiteboardControlImpl<T extends FcrBaseWhiteboardObserver> implements FcrBaseWhiteboardControl<T> {
10
+ protected rtmClient: RTMClient;
11
+ protected config: FcrBoardConfig;
12
+ protected logger: import("agora-foundation/lib/logger/type").Logger;
13
+ protected forgeInitConfigTask: AgoraScheduler.Task;
14
+ protected observable: AgoraObservable<T>;
15
+ protected boardView: FcrBoardMainWindow | null;
16
+ protected boardRoom: Room | null;
17
+ protected whiteboard: Whiteboard | null;
18
+ protected connectState: FcrConnectionState;
19
+ protected forgeInitConfig: FcrObjectForgeInitConfig | null;
20
+ protected hasOperationPrivilege: boolean;
21
+ private _waitPromise;
22
+ private _waitPromiseResolve;
23
+ private _waitPromiseReject;
24
+ private _openAbortController;
25
+ private _isOpen;
26
+ constructor(rtmClient: RTMClient, config: FcrBoardConfig, hasOperationPrivilege: boolean, forgeInitConfigFetcher: () => Promise<FcrObjectForgeInitConfig>);
27
+ setOperationPrivilege(hasOperationPrivilege: boolean): void;
28
+ open(): Promise<FcrBoardMainWindow>;
29
+ close(): Promise<void>;
30
+ getConnectionState(): AgoraRteConnectionState;
31
+ getMainWindow(): FcrBoardMainWindow | null;
32
+ addObserver(observer: T): void;
33
+ removeObserver(observer: T): void;
34
+ protected updateConnectionState(state: FcrConnectionState): void;
35
+ protected connect(): Promise<FcrBoardMainWindow>;
36
+ protected getApplicationId(): string;
37
+ protected getWhiteboardOption(): WhiteboardOption;
38
+ protected getBackgroundColor(): string;
39
+ protected addLogObserver(): void;
40
+ private _checkForConnect;
41
+ private _clearWaitPromise;
42
+ }