@webex/plugin-meetings 3.7.0-next.57 → 3.7.0-next.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/brbState.js +167 -0
- package/dist/meeting/brbState.js.map +1 -0
- package/dist/meeting/index.js +251 -254
- package/dist/meeting/index.js.map +1 -1
- package/dist/reachability/index.js +31 -3
- package/dist/reachability/index.js.map +1 -1
- package/dist/types/meeting/brbState.d.ts +54 -0
- package/dist/types/meeting/index.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +9 -1
- package/dist/webinar/index.js +1 -1
- package/package.json +3 -3
- package/src/meeting/brbState.ts +169 -0
- package/src/meeting/index.ts +8 -16
- package/src/reachability/index.ts +29 -1
- package/test/unit/spec/meeting/brbState.ts +114 -0
- package/test/unit/spec/meeting/index.js +14 -25
- package/test/unit/spec/reachability/index.ts +120 -10
package/dist/breakouts/index.js
CHANGED
|
@@ -1046,7 +1046,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
1046
1046
|
this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
|
|
1047
1047
|
}
|
|
1048
1048
|
},
|
|
1049
|
-
version: "3.7.0-next.
|
|
1049
|
+
version: "3.7.0-next.59"
|
|
1050
1050
|
});
|
|
1051
1051
|
var _default = exports.default = Breakouts;
|
|
1052
1052
|
//# sourceMappingURL=index.js.map
|
|
@@ -373,7 +373,7 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
|
|
|
373
373
|
throw error;
|
|
374
374
|
});
|
|
375
375
|
},
|
|
376
|
-
version: "3.7.0-next.
|
|
376
|
+
version: "3.7.0-next.59"
|
|
377
377
|
});
|
|
378
378
|
var _default = exports.default = SimultaneousInterpretation;
|
|
379
379
|
//# sourceMappingURL=index.js.map
|
|
@@ -18,7 +18,7 @@ var SILanguage = _webexCore.WebexPlugin.extend({
|
|
|
18
18
|
languageCode: 'number',
|
|
19
19
|
languageName: 'string'
|
|
20
20
|
},
|
|
21
|
-
version: "3.7.0-next.
|
|
21
|
+
version: "3.7.0-next.59"
|
|
22
22
|
});
|
|
23
23
|
var _default = exports.default = SILanguage;
|
|
24
24
|
//# sourceMappingURL=siLanguage.js.map
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.createBrbState = exports.BrbState = void 0;
|
|
9
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
10
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
11
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
12
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
13
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
15
|
+
var _internalMediaCore = require("@webex/internal-media-core");
|
|
16
|
+
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
17
|
+
var createBrbState = exports.createBrbState = function createBrbState(meeting, enabled) {
|
|
18
|
+
_loggerProxy.default.logger.info("Meeting:brbState#createBrbState: creating BrbState for meeting id ".concat(meeting === null || meeting === void 0 ? void 0 : meeting.id));
|
|
19
|
+
var brbState = new BrbState(meeting, enabled);
|
|
20
|
+
return brbState;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/** The purpose of this class is to manage the local and remote brb state
|
|
24
|
+
* and make sure that the server state always matches the last requested state by the client.
|
|
25
|
+
*/
|
|
26
|
+
var BrbState = exports.BrbState = /*#__PURE__*/function () {
|
|
27
|
+
/**
|
|
28
|
+
* Constructor
|
|
29
|
+
*
|
|
30
|
+
* @param {Meeting} meeting - the meeting object
|
|
31
|
+
* @param {boolean} enabled - whether the client audio/video is enabled at all
|
|
32
|
+
*/
|
|
33
|
+
function BrbState(meeting, enabled) {
|
|
34
|
+
(0, _classCallCheck2.default)(this, BrbState);
|
|
35
|
+
(0, _defineProperty2.default)(this, "state", void 0);
|
|
36
|
+
(0, _defineProperty2.default)(this, "meeting", void 0);
|
|
37
|
+
this.meeting = meeting;
|
|
38
|
+
this.state = {
|
|
39
|
+
client: {
|
|
40
|
+
enabled: enabled
|
|
41
|
+
},
|
|
42
|
+
server: {
|
|
43
|
+
enabled: false
|
|
44
|
+
},
|
|
45
|
+
syncToServerInProgress: false
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Enables/disables brb
|
|
51
|
+
*
|
|
52
|
+
* @param {boolean} enabled
|
|
53
|
+
* @param {SendSlotManager} sendSlotManager
|
|
54
|
+
* @returns {Promise}
|
|
55
|
+
*/
|
|
56
|
+
(0, _createClass2.default)(BrbState, [{
|
|
57
|
+
key: "enable",
|
|
58
|
+
value: function enable(enabled, sendSlotManager) {
|
|
59
|
+
this.state.client.enabled = enabled;
|
|
60
|
+
return this.applyClientStateToServer(sendSlotManager);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Updates the server local and remote brb values so that they match the current client desired state.
|
|
65
|
+
*
|
|
66
|
+
* @param {SendSlotManager} sendSlotManager
|
|
67
|
+
* @returns {Promise}
|
|
68
|
+
*/
|
|
69
|
+
}, {
|
|
70
|
+
key: "applyClientStateToServer",
|
|
71
|
+
value: function applyClientStateToServer(sendSlotManager) {
|
|
72
|
+
var _this = this;
|
|
73
|
+
if (this.state.syncToServerInProgress) {
|
|
74
|
+
_loggerProxy.default.logger.info("Meeting:brbState#applyClientStateToServer: request to server in progress, we need to wait for it to complete");
|
|
75
|
+
return _promise.default.resolve();
|
|
76
|
+
}
|
|
77
|
+
var remoteBrbRequiresSync = this.state.client.enabled !== this.state.server.enabled;
|
|
78
|
+
_loggerProxy.default.logger.info("Meeting:brbState#applyClientStateToServer: remoteBrbRequiresSync: ".concat(remoteBrbRequiresSync));
|
|
79
|
+
if (!remoteBrbRequiresSync) {
|
|
80
|
+
_loggerProxy.default.logger.info("Meeting:brbState#applyClientStateToServer: client state already matching server state, nothing to do");
|
|
81
|
+
return _promise.default.resolve();
|
|
82
|
+
}
|
|
83
|
+
this.state.syncToServerInProgress = true;
|
|
84
|
+
return this.sendLocalBrbStateToServer(sendSlotManager).then(function () {
|
|
85
|
+
_this.state.syncToServerInProgress = false;
|
|
86
|
+
_loggerProxy.default.logger.info("Meeting:brbState#applyClientStateToServer: sync with server completed");
|
|
87
|
+
|
|
88
|
+
// need to check if a new sync is required, because this.state.client may have changed while we were doing the current sync
|
|
89
|
+
_this.applyClientStateToServer(sendSlotManager);
|
|
90
|
+
}).catch(function (e) {
|
|
91
|
+
_this.state.syncToServerInProgress = false;
|
|
92
|
+
_loggerProxy.default.logger.warn("Meeting:brbState#applyClientStateToServer: error: ".concat(e));
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Send the local brb state to the server
|
|
98
|
+
*
|
|
99
|
+
* @param {SendSlotManager} sendSlotManager
|
|
100
|
+
* @returns {Promise}
|
|
101
|
+
*/
|
|
102
|
+
}, {
|
|
103
|
+
key: "sendLocalBrbStateToServer",
|
|
104
|
+
value: (function () {
|
|
105
|
+
var _sendLocalBrbStateToServer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(sendSlotManager) {
|
|
106
|
+
var enabled, errorMessage, error, _errorMessage, _error;
|
|
107
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
108
|
+
while (1) switch (_context.prev = _context.next) {
|
|
109
|
+
case 0:
|
|
110
|
+
enabled = this.state.client.enabled;
|
|
111
|
+
if (this.meeting.isMultistream) {
|
|
112
|
+
_context.next = 6;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
errorMessage = 'Meeting:brbState#sendLocalBrbStateToServer: Not a multistream meeting';
|
|
116
|
+
error = new Error(errorMessage);
|
|
117
|
+
_loggerProxy.default.logger.error(error);
|
|
118
|
+
return _context.abrupt("return", _promise.default.reject(error));
|
|
119
|
+
case 6:
|
|
120
|
+
if (this.meeting.mediaProperties.webrtcMediaConnection) {
|
|
121
|
+
_context.next = 11;
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
_errorMessage = 'Meeting:brbState#sendLocalBrbStateToServer: WebRTC media connection is not defined';
|
|
125
|
+
_error = new Error(_errorMessage);
|
|
126
|
+
_loggerProxy.default.logger.error(_error);
|
|
127
|
+
return _context.abrupt("return", _promise.default.reject(_error));
|
|
128
|
+
case 11:
|
|
129
|
+
return _context.abrupt("return", this.meeting.meetingRequest.setBrb({
|
|
130
|
+
enabled: enabled,
|
|
131
|
+
locusUrl: this.meeting.locusUrl,
|
|
132
|
+
deviceUrl: this.meeting.deviceUrl,
|
|
133
|
+
selfId: this.meeting.selfId
|
|
134
|
+
}).then(function () {
|
|
135
|
+
sendSlotManager.setSourceStateOverride(_internalMediaCore.MediaType.VideoMain, enabled ? 'away' : null);
|
|
136
|
+
}).catch(function (error) {
|
|
137
|
+
_loggerProxy.default.logger.error('Meeting:brbState#sendLocalBrbStateToServer: Error ', error);
|
|
138
|
+
return _promise.default.reject(error);
|
|
139
|
+
}));
|
|
140
|
+
case 12:
|
|
141
|
+
case "end":
|
|
142
|
+
return _context.stop();
|
|
143
|
+
}
|
|
144
|
+
}, _callee, this);
|
|
145
|
+
}));
|
|
146
|
+
function sendLocalBrbStateToServer(_x) {
|
|
147
|
+
return _sendLocalBrbStateToServer.apply(this, arguments);
|
|
148
|
+
}
|
|
149
|
+
return sendLocalBrbStateToServer;
|
|
150
|
+
}()
|
|
151
|
+
/**
|
|
152
|
+
* This method should be called whenever the server brb state is changed
|
|
153
|
+
*
|
|
154
|
+
* @param {Boolean} [enabled] true if user has brb enabled, false otherwise
|
|
155
|
+
* @returns {undefined}
|
|
156
|
+
*/
|
|
157
|
+
)
|
|
158
|
+
}, {
|
|
159
|
+
key: "handleServerBrbUpdate",
|
|
160
|
+
value: function handleServerBrbUpdate(enabled) {
|
|
161
|
+
_loggerProxy.default.logger.info("Meeting:brbState#handleServerBrbUpdate: updating server brb to (".concat(enabled, ")"));
|
|
162
|
+
this.state.server.enabled = !!enabled;
|
|
163
|
+
}
|
|
164
|
+
}]);
|
|
165
|
+
return BrbState;
|
|
166
|
+
}();
|
|
167
|
+
//# sourceMappingURL=brbState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_internalMediaCore","require","_loggerProxy","_interopRequireDefault","createBrbState","exports","meeting","enabled","LoggerProxy","logger","info","concat","id","brbState","BrbState","_classCallCheck2","default","_defineProperty2","state","client","server","syncToServerInProgress","_createClass2","key","value","enable","sendSlotManager","applyClientStateToServer","_this","_promise","resolve","remoteBrbRequiresSync","sendLocalBrbStateToServer","then","catch","e","warn","_sendLocalBrbStateToServer","_asyncToGenerator2","_regenerator","mark","_callee","errorMessage","error","_errorMessage","_error","wrap","_callee$","_context","prev","next","isMultistream","Error","abrupt","reject","mediaProperties","webrtcMediaConnection","meetingRequest","setBrb","locusUrl","deviceUrl","selfId","setSourceStateOverride","MediaType","VideoMain","stop","_x","apply","arguments","handleServerBrbUpdate"],"sources":["brbState.ts"],"sourcesContent":["import {MediaType} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport type Meeting from '.';\nimport SendSlotManager from '../multistream/sendSlotManager';\n\nexport const createBrbState = (meeting: Meeting, enabled: boolean) => {\n LoggerProxy.logger.info(\n `Meeting:brbState#createBrbState: creating BrbState for meeting id ${meeting?.id}`\n );\n\n const brbState = new BrbState(meeting, enabled);\n\n return brbState;\n};\n\n/** The purpose of this class is to manage the local and remote brb state\n * and make sure that the server state always matches the last requested state by the client.\n */\nexport class BrbState {\n state: {\n client: {\n enabled: boolean;\n };\n server: {\n enabled: boolean;\n };\n syncToServerInProgress: boolean;\n };\n\n meeting: Meeting;\n\n /**\n * Constructor\n *\n * @param {Meeting} meeting - the meeting object\n * @param {boolean} enabled - whether the client audio/video is enabled at all\n */\n constructor(meeting: Meeting, enabled: boolean) {\n this.meeting = meeting;\n this.state = {\n client: {\n enabled,\n },\n server: {\n enabled: false,\n },\n syncToServerInProgress: false,\n };\n }\n\n /**\n * Enables/disables brb\n *\n * @param {boolean} enabled\n * @param {SendSlotManager} sendSlotManager\n * @returns {Promise}\n */\n public enable(enabled: boolean, sendSlotManager: SendSlotManager) {\n this.state.client.enabled = enabled;\n\n return this.applyClientStateToServer(sendSlotManager);\n }\n\n /**\n * Updates the server local and remote brb values so that they match the current client desired state.\n *\n * @param {SendSlotManager} sendSlotManager\n * @returns {Promise}\n */\n private applyClientStateToServer(sendSlotManager: SendSlotManager) {\n if (this.state.syncToServerInProgress) {\n LoggerProxy.logger.info(\n `Meeting:brbState#applyClientStateToServer: request to server in progress, we need to wait for it to complete`\n );\n\n return Promise.resolve();\n }\n\n const remoteBrbRequiresSync = this.state.client.enabled !== this.state.server.enabled;\n\n LoggerProxy.logger.info(\n `Meeting:brbState#applyClientStateToServer: remoteBrbRequiresSync: ${remoteBrbRequiresSync}`\n );\n\n if (!remoteBrbRequiresSync) {\n LoggerProxy.logger.info(\n `Meeting:brbState#applyClientStateToServer: client state already matching server state, nothing to do`\n );\n\n return Promise.resolve();\n }\n\n this.state.syncToServerInProgress = true;\n\n return this.sendLocalBrbStateToServer(sendSlotManager)\n .then(() => {\n this.state.syncToServerInProgress = false;\n LoggerProxy.logger.info(\n `Meeting:brbState#applyClientStateToServer: sync with server completed`\n );\n\n // need to check if a new sync is required, because this.state.client may have changed while we were doing the current sync\n this.applyClientStateToServer(sendSlotManager);\n })\n .catch((e) => {\n this.state.syncToServerInProgress = false;\n LoggerProxy.logger.warn(`Meeting:brbState#applyClientStateToServer: error: ${e}`);\n });\n }\n\n /**\n * Send the local brb state to the server\n *\n * @param {SendSlotManager} sendSlotManager\n * @returns {Promise}\n */\n private async sendLocalBrbStateToServer(sendSlotManager: SendSlotManager) {\n const {enabled} = this.state.client;\n\n if (!this.meeting.isMultistream) {\n const errorMessage = 'Meeting:brbState#sendLocalBrbStateToServer: Not a multistream meeting';\n const error = new Error(errorMessage);\n\n LoggerProxy.logger.error(error);\n\n return Promise.reject(error);\n }\n\n if (!this.meeting.mediaProperties.webrtcMediaConnection) {\n const errorMessage =\n 'Meeting:brbState#sendLocalBrbStateToServer: WebRTC media connection is not defined';\n const error = new Error(errorMessage);\n\n LoggerProxy.logger.error(error);\n\n return Promise.reject(error);\n }\n\n // this logic should be applied only to multistream meetings\n return this.meeting.meetingRequest\n .setBrb({\n enabled,\n locusUrl: this.meeting.locusUrl,\n deviceUrl: this.meeting.deviceUrl,\n selfId: this.meeting.selfId,\n })\n .then(() => {\n sendSlotManager.setSourceStateOverride(MediaType.VideoMain, enabled ? 'away' : null);\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:brbState#sendLocalBrbStateToServer: Error ', error);\n\n return Promise.reject(error);\n });\n }\n\n /**\n * This method should be called whenever the server brb state is changed\n *\n * @param {Boolean} [enabled] true if user has brb enabled, false otherwise\n * @returns {undefined}\n */\n public handleServerBrbUpdate(enabled?: boolean) {\n LoggerProxy.logger.info(\n `Meeting:brbState#handleServerBrbUpdate: updating server brb to (${enabled})`\n );\n this.state.server.enabled = !!enabled;\n }\n}\n"],"mappings":"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"}
|