@observertc/observer-js 0.9.27-beta → 0.30.0-e12fcb4.0
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/lib/ObservedCall.d.ts +54 -0
- package/lib/ObservedCall.d.ts.map +1 -0
- package/lib/ObservedCall.js +166 -0
- package/lib/ObservedClient.d.ts +73 -0
- package/lib/ObservedClient.d.ts.map +1 -0
- package/lib/ObservedClient.js +487 -0
- package/lib/ObservedInboundTrack.d.ts +65 -0
- package/lib/ObservedInboundTrack.d.ts.map +1 -0
- package/lib/ObservedInboundTrack.js +192 -0
- package/lib/ObservedOutboundTrack.d.ts +55 -0
- package/lib/ObservedOutboundTrack.d.ts.map +1 -0
- package/lib/ObservedOutboundTrack.js +166 -0
- package/lib/ObservedPeerConnection.d.ts +57 -0
- package/lib/ObservedPeerConnection.d.ts.map +1 -0
- package/lib/ObservedPeerConnection.js +217 -0
- package/lib/Observer.d.ts +26 -1465
- package/lib/Observer.d.ts.map +1 -1
- package/lib/Observer.js +53 -605
- package/lib/{sinks/ObserverSink.d.ts → ReportsCollector.d.ts} +7 -23
- package/lib/ReportsCollector.d.ts.map +1 -0
- package/lib/{sinks/ObserverSink.js → ReportsCollector.js} +27 -85
- package/lib/common/ReportsCollector.d.ts +21 -24
- package/lib/common/ReportsCollector.d.ts.map +1 -1
- package/lib/common/ReportsCollector.js +24 -0
- package/lib/common/SingleExecutor.d.ts +3 -0
- package/lib/common/SingleExecutor.d.ts.map +1 -0
- package/lib/common/SingleExecutor.js +31 -0
- package/lib/common/TypedEventEmitter.d.ts +22 -0
- package/lib/common/TypedEventEmitter.d.ts.map +1 -0
- package/lib/common/TypedEventEmitter.js +11 -0
- package/lib/common/callEventReports.d.ts.map +1 -0
- package/lib/common/logger.d.ts +3 -9
- package/lib/common/logger.d.ts.map +1 -1
- package/lib/common/logger.js +58 -141
- package/lib/common/types.d.ts +2 -14
- package/lib/common/types.d.ts.map +1 -1
- package/lib/common/utils.d.ts +1 -0
- package/lib/common/utils.d.ts.map +1 -1
- package/lib/common/utils.js +6 -1
- package/lib/index.d.ts +8 -19
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7 -2
- package/package.json +1 -1
- package/src/ObservedCall.ts +201 -0
- package/src/ObservedClient.ts +681 -0
- package/src/ObservedInboundTrack.ts +238 -0
- package/src/ObservedOutboundTrack.ts +205 -0
- package/src/ObservedPeerConnection.ts +249 -0
- package/src/Observer.ts +86 -442
- package/src/{sinks/ObserverSink.ts → ReportsCollector.ts} +29 -94
- package/src/common/ReportsCollector.ts +48 -23
- package/src/common/SingleExecutor.ts +36 -0
- package/src/common/TypedEventEmitter.ts +32 -0
- package/src/common/logger.ts +58 -161
- package/src/common/types.ts +4 -24
- package/src/common/utils.ts +6 -0
- package/src/index.ts +12 -23
- package/lib/Evaluator.d.ts +0 -43
- package/lib/Evaluator.d.ts.map +0 -1
- package/lib/Evaluator.js +0 -171
- package/lib/common/Semaphore.d.ts +0 -31
- package/lib/common/Semaphore.d.ts.map +0 -1
- package/lib/common/Semaphore.js +0 -16
- package/lib/entries/CallEntry.d.ts +0 -619
- package/lib/entries/CallEntry.d.ts.map +0 -1
- package/lib/entries/CallEntry.js +0 -75
- package/lib/entries/ClientEntry.d.ts +0 -478
- package/lib/entries/ClientEntry.d.ts.map +0 -1
- package/lib/entries/ClientEntry.js +0 -114
- package/lib/entries/InboundTrackEntry.d.ts +0 -682
- package/lib/entries/InboundTrackEntry.d.ts.map +0 -1
- package/lib/entries/InboundTrackEntry.js +0 -76
- package/lib/entries/OutboundTrackEntry.d.ts +0 -682
- package/lib/entries/OutboundTrackEntry.d.ts.map +0 -1
- package/lib/entries/OutboundTrackEntry.js +0 -73
- package/lib/entries/PeerConnectionEntry.d.ts +0 -505
- package/lib/entries/PeerConnectionEntry.d.ts.map +0 -1
- package/lib/entries/PeerConnectionEntry.js +0 -144
- package/lib/entries/SfuEntry.d.ts +0 -150
- package/lib/entries/SfuEntry.d.ts.map +0 -1
- package/lib/entries/SfuEntry.js +0 -77
- package/lib/entries/SfuInboundRtpPadEntry.d.ts +0 -14
- package/lib/entries/SfuInboundRtpPadEntry.d.ts.map +0 -1
- package/lib/entries/SfuInboundRtpPadEntry.js +0 -49
- package/lib/entries/SfuOutboundRtpPadEntry.d.ts +0 -14
- package/lib/entries/SfuOutboundRtpPadEntry.d.ts.map +0 -1
- package/lib/entries/SfuOutboundRtpPadEntry.js +0 -47
- package/lib/entries/SfuSctpChannelEntry.d.ts +0 -12
- package/lib/entries/SfuSctpChannelEntry.d.ts.map +0 -1
- package/lib/entries/SfuSctpChannelEntry.js +0 -43
- package/lib/entries/SfuTransportEntry.d.ts +0 -82
- package/lib/entries/SfuTransportEntry.d.ts.map +0 -1
- package/lib/entries/SfuTransportEntry.js +0 -122
- package/lib/evaluators/SetClientsCoordinateEvaluator.d.ts +0 -9
- package/lib/evaluators/SetClientsCoordinateEvaluator.d.ts.map +0 -1
- package/lib/evaluators/SetClientsCoordinateEvaluator.js +0 -95
- package/lib/middlewares/CallOperationsContext.d.ts +0 -18
- package/lib/middlewares/CallOperationsContext.d.ts.map +0 -1
- package/lib/middlewares/CallOperationsContext.js +0 -27
- package/lib/middlewares/CallProcessor.d.ts +0 -6
- package/lib/middlewares/CallProcessor.d.ts.map +0 -1
- package/lib/middlewares/CallProcessor.js +0 -36
- package/lib/middlewares/CommitTransactionMiddleware.d.ts +0 -6
- package/lib/middlewares/CommitTransactionMiddleware.d.ts.map +0 -1
- package/lib/middlewares/CommitTransactionMiddleware.js +0 -179
- package/lib/middlewares/DeleteOutdatedCallEntries.d.ts +0 -6
- package/lib/middlewares/DeleteOutdatedCallEntries.d.ts.map +0 -1
- package/lib/middlewares/DeleteOutdatedCallEntries.js +0 -121
- package/lib/middlewares/DeleteOutdatedSfuEntries.d.ts +0 -6
- package/lib/middlewares/DeleteOutdatedSfuEntries.d.ts.map +0 -1
- package/lib/middlewares/DeleteOutdatedSfuEntries.js +0 -127
- package/lib/middlewares/Middleware.d.ts +0 -3
- package/lib/middlewares/Middleware.d.ts.map +0 -1
- package/lib/middlewares/Middleware.js +0 -21
- package/lib/middlewares/Processor.d.ts +0 -9
- package/lib/middlewares/Processor.d.ts.map +0 -1
- package/lib/middlewares/Processor.js +0 -54
- package/lib/middlewares/TransactionContext.d.ts +0 -35
- package/lib/middlewares/TransactionContext.d.ts.map +0 -1
- package/lib/middlewares/TransactionContext.js +0 -90
- package/lib/middlewares/TransactoinProcessor.d.ts +0 -6
- package/lib/middlewares/TransactoinProcessor.d.ts.map +0 -1
- package/lib/middlewares/TransactoinProcessor.js +0 -17
- package/lib/middlewares/VisitObservedCallsMiddleware.d.ts +0 -7
- package/lib/middlewares/VisitObservedCallsMiddleware.d.ts.map +0 -1
- package/lib/middlewares/VisitObservedCallsMiddleware.js +0 -96
- package/lib/middlewares/VisitObservedSfusMiddleware.d.ts +0 -6
- package/lib/middlewares/VisitObservedSfusMiddleware.d.ts.map +0 -1
- package/lib/middlewares/VisitObservedSfusMiddleware.js +0 -151
- package/lib/middlewares/visitors/visitClient.d.ts +0 -5
- package/lib/middlewares/visitors/visitClient.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitClient.js +0 -174
- package/lib/middlewares/visitors/visitInboundAudioTrack.d.ts +0 -5
- package/lib/middlewares/visitors/visitInboundAudioTrack.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitInboundAudioTrack.js +0 -93
- package/lib/middlewares/visitors/visitInboundVideoTrack.d.ts +0 -5
- package/lib/middlewares/visitors/visitInboundVideoTrack.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitInboundVideoTrack.js +0 -94
- package/lib/middlewares/visitors/visitOutboundAudioTrack.d.ts +0 -5
- package/lib/middlewares/visitors/visitOutboundAudioTrack.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitOutboundAudioTrack.js +0 -90
- package/lib/middlewares/visitors/visitOutboundVideoTarck.d.ts +0 -5
- package/lib/middlewares/visitors/visitOutboundVideoTarck.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitOutboundVideoTarck.js +0 -90
- package/lib/middlewares/visitors/visitPeerConnection.d.ts +0 -5
- package/lib/middlewares/visitors/visitPeerConnection.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitPeerConnection.js +0 -111
- package/lib/middlewares/visitors/visitSfu.d.ts +0 -5
- package/lib/middlewares/visitors/visitSfu.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitSfu.js +0 -78
- package/lib/middlewares/visitors/visitSfuInboundRtpPad.d.ts +0 -5
- package/lib/middlewares/visitors/visitSfuInboundRtpPad.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitSfuInboundRtpPad.js +0 -56
- package/lib/middlewares/visitors/visitSfuOutboundRtpPad.d.ts +0 -5
- package/lib/middlewares/visitors/visitSfuOutboundRtpPad.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitSfuOutboundRtpPad.js +0 -56
- package/lib/middlewares/visitors/visitSfuSctpChannel.d.ts +0 -5
- package/lib/middlewares/visitors/visitSfuSctpChannel.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitSfuSctpChannel.js +0 -55
- package/lib/middlewares/visitors/visitSfuTransport.d.ts +0 -5
- package/lib/middlewares/visitors/visitSfuTransport.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitSfuTransport.js +0 -56
- package/lib/processes/closePeerConnectionProcess.d.ts +0 -10
- package/lib/processes/closePeerConnectionProcess.d.ts.map +0 -1
- package/lib/processes/closePeerConnectionProcess.js +0 -51
- package/lib/processes/detachClientProcess.d.ts +0 -14
- package/lib/processes/detachClientProcess.d.ts.map +0 -1
- package/lib/processes/detachClientProcess.js +0 -106
- package/lib/processes/findRemoteMatches.d.ts +0 -9
- package/lib/processes/findRemoteMatches.d.ts.map +0 -1
- package/lib/processes/findRemoteMatches.js +0 -96
- package/lib/processes/inboundTrackRemoved.d.ts +0 -9
- package/lib/processes/inboundTrackRemoved.d.ts.map +0 -1
- package/lib/processes/inboundTrackRemoved.js +0 -22
- package/lib/processes/joinClientProcess.d.ts +0 -11
- package/lib/processes/joinClientProcess.d.ts.map +0 -1
- package/lib/processes/joinClientProcess.js +0 -120
- package/lib/processes/outboundTrackRemoved.d.ts +0 -9
- package/lib/processes/outboundTrackRemoved.d.ts.map +0 -1
- package/lib/processes/outboundTrackRemoved.js +0 -22
- package/lib/samples/ObservedCall.d.ts +0 -17
- package/lib/samples/ObservedCall.d.ts.map +0 -1
- package/lib/samples/ObservedCall.js +0 -29
- package/lib/samples/ObservedCalls.d.ts +0 -19
- package/lib/samples/ObservedCalls.d.ts.map +0 -1
- package/lib/samples/ObservedCalls.js +0 -113
- package/lib/samples/ObservedClient.d.ts +0 -28
- package/lib/samples/ObservedClient.d.ts.map +0 -1
- package/lib/samples/ObservedClient.js +0 -110
- package/lib/samples/ObservedInboundAudioTrack.d.ts +0 -17
- package/lib/samples/ObservedInboundAudioTrack.d.ts.map +0 -1
- package/lib/samples/ObservedInboundAudioTrack.js +0 -17
- package/lib/samples/ObservedInboundVideoTrack.d.ts +0 -17
- package/lib/samples/ObservedInboundVideoTrack.d.ts.map +0 -1
- package/lib/samples/ObservedInboundVideoTrack.js +0 -17
- package/lib/samples/ObservedOutboundAudioTrack.d.ts +0 -16
- package/lib/samples/ObservedOutboundAudioTrack.d.ts.map +0 -1
- package/lib/samples/ObservedOutboundAudioTrack.js +0 -17
- package/lib/samples/ObservedOutboundVideoTrack.d.ts +0 -16
- package/lib/samples/ObservedOutboundVideoTrack.d.ts.map +0 -1
- package/lib/samples/ObservedOutboundVideoTrack.js +0 -17
- package/lib/samples/ObservedPeerConnection.d.ts +0 -47
- package/lib/samples/ObservedPeerConnection.d.ts.map +0 -1
- package/lib/samples/ObservedPeerConnection.js +0 -130
- package/lib/samples/ObservedSfu.d.ts +0 -27
- package/lib/samples/ObservedSfu.d.ts.map +0 -1
- package/lib/samples/ObservedSfu.js +0 -65
- package/lib/samples/ObservedSfuInboundRtpPad.d.ts +0 -15
- package/lib/samples/ObservedSfuInboundRtpPad.d.ts.map +0 -1
- package/lib/samples/ObservedSfuInboundRtpPad.js +0 -17
- package/lib/samples/ObservedSfuOutboundRtpPad.d.ts +0 -15
- package/lib/samples/ObservedSfuOutboundRtpPad.d.ts.map +0 -1
- package/lib/samples/ObservedSfuOutboundRtpPad.js +0 -17
- package/lib/samples/ObservedSfuSctpChannel.d.ts +0 -15
- package/lib/samples/ObservedSfuSctpChannel.d.ts.map +0 -1
- package/lib/samples/ObservedSfuSctpChannel.js +0 -17
- package/lib/samples/ObservedSfuTransport.d.ts +0 -30
- package/lib/samples/ObservedSfuTransport.d.ts.map +0 -1
- package/lib/samples/ObservedSfuTransport.js +0 -86
- package/lib/samples/ObservedSfus.d.ts +0 -16
- package/lib/samples/ObservedSfus.d.ts.map +0 -1
- package/lib/samples/ObservedSfus.js +0 -72
- package/lib/sinks/ObserverSink.d.ts.map +0 -1
- package/lib/sinks/callEventReports.d.ts.map +0 -1
- package/lib/sources/ObservedCallSource.d.ts +0 -18
- package/lib/sources/ObservedCallSource.d.ts.map +0 -1
- package/lib/sources/ObservedCallSource.js +0 -2
- package/lib/sources/ObservedClientSource.d.ts +0 -19
- package/lib/sources/ObservedClientSource.d.ts.map +0 -1
- package/lib/sources/ObservedClientSource.js +0 -2
- package/lib/sources/ObservedSfuSource.d.ts +0 -15
- package/lib/sources/ObservedSfuSource.d.ts.map +0 -1
- package/lib/sources/ObservedSfuSource.js +0 -2
- package/lib/sources/Sources.d.ts +0 -49
- package/lib/sources/Sources.d.ts.map +0 -1
- package/lib/sources/Sources.js +0 -213
- package/src/Evaluator.ts +0 -229
- package/src/common/Semaphore.ts +0 -45
- package/src/entries/CallEntry.ts +0 -62
- package/src/entries/ClientEntry.ts +0 -106
- package/src/entries/InboundTrackEntry.ts +0 -74
- package/src/entries/OutboundTrackEntry.ts +0 -72
- package/src/entries/PeerConnectionEntry.ts +0 -133
- package/src/entries/SfuEntry.ts +0 -62
- package/src/entries/SfuInboundRtpPadEntry.ts +0 -46
- package/src/entries/SfuOutboundRtpPadEntry.ts +0 -44
- package/src/entries/SfuSctpChannelEntry.ts +0 -39
- package/src/entries/SfuTransportEntry.ts +0 -109
- package/src/evaluators/SetClientsCoordinateEvaluator.ts +0 -78
- package/src/middlewares/CallOperationsContext.ts +0 -56
- package/src/middlewares/CallProcessor.ts +0 -38
- package/src/middlewares/CommitTransactionMiddleware.ts +0 -328
- package/src/middlewares/DeleteOutdatedCallEntries.ts +0 -159
- package/src/middlewares/DeleteOutdatedSfuEntries.ts +0 -168
- package/src/middlewares/Middleware.ts +0 -10
- package/src/middlewares/Processor.ts +0 -59
- package/src/middlewares/TransactionContext.ts +0 -176
- package/src/middlewares/TransactoinProcessor.ts +0 -28
- package/src/middlewares/VisitObservedCallsMiddleware.ts +0 -172
- package/src/middlewares/VisitObservedSfusMiddleware.ts +0 -203
- package/src/middlewares/visitors/visitClient.ts +0 -239
- package/src/middlewares/visitors/visitInboundAudioTrack.ts +0 -113
- package/src/middlewares/visitors/visitInboundVideoTrack.ts +0 -117
- package/src/middlewares/visitors/visitOutboundAudioTrack.ts +0 -100
- package/src/middlewares/visitors/visitOutboundVideoTarck.ts +0 -102
- package/src/middlewares/visitors/visitPeerConnection.ts +0 -151
- package/src/middlewares/visitors/visitSfu.ts +0 -70
- package/src/middlewares/visitors/visitSfuInboundRtpPad.ts +0 -52
- package/src/middlewares/visitors/visitSfuOutboundRtpPad.ts +0 -53
- package/src/middlewares/visitors/visitSfuSctpChannel.ts +0 -50
- package/src/middlewares/visitors/visitSfuTransport.ts +0 -50
- package/src/processes/closePeerConnectionProcess.ts +0 -54
- package/src/processes/detachClientProcess.ts +0 -136
- package/src/processes/findRemoteMatches.ts +0 -104
- package/src/processes/inboundTrackRemoved.ts +0 -22
- package/src/processes/joinClientProcess.ts +0 -138
- package/src/processes/outboundTrackRemoved.ts +0 -22
- package/src/samples/ObservedCall.ts +0 -49
- package/src/samples/ObservedCalls.ts +0 -143
- package/src/samples/ObservedClient.ts +0 -172
- package/src/samples/ObservedInboundAudioTrack.ts +0 -35
- package/src/samples/ObservedInboundVideoTrack.ts +0 -36
- package/src/samples/ObservedOutboundAudioTrack.ts +0 -35
- package/src/samples/ObservedOutboundVideoTrack.ts +0 -35
- package/src/samples/ObservedPeerConnection.ts +0 -227
- package/src/samples/ObservedSfu.ts +0 -115
- package/src/samples/ObservedSfuInboundRtpPad.ts +0 -35
- package/src/samples/ObservedSfuOutboundRtpPad.ts +0 -35
- package/src/samples/ObservedSfuSctpChannel.ts +0 -35
- package/src/samples/ObservedSfuTransport.ts +0 -142
- package/src/samples/ObservedSfus.ts +0 -95
- package/src/sources/ObservedCallSource.ts +0 -26
- package/src/sources/ObservedClientSource.ts +0 -28
- package/src/sources/ObservedSfuSource.ts +0 -19
- package/src/sources/Sources.ts +0 -301
- /package/lib/{sinks → common}/callEventReports.d.ts +0 -0
- /package/lib/{sinks → common}/callEventReports.js +0 -0
- /package/src/{sinks → common}/callEventReports.ts +0 -0
package/lib/sources/Sources.js
DELETED
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
-
var t = {};
|
|
4
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
-
t[p] = s[p];
|
|
6
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
-
t[p[i]] = s[p[i]];
|
|
10
|
-
}
|
|
11
|
-
return t;
|
|
12
|
-
};
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.Sources = void 0;
|
|
15
|
-
const ObservedCalls_1 = require("../samples/ObservedCalls");
|
|
16
|
-
const events_1 = require("events");
|
|
17
|
-
const logger_1 = require("../common/logger");
|
|
18
|
-
const ObservedSfus_1 = require("../samples/ObservedSfus");
|
|
19
|
-
const logger = (0, logger_1.createLogger)('Sources');
|
|
20
|
-
class Sources {
|
|
21
|
-
constructor(config) {
|
|
22
|
-
this.config = config;
|
|
23
|
-
this._warnFlags = { autoEmitButEmitSamplesInvoked: false };
|
|
24
|
-
this._callSources = new Map();
|
|
25
|
-
// private readonly _clientSources = new Map<string, ObservedClientSource>();
|
|
26
|
-
this._sfuSources = new Map();
|
|
27
|
-
this._emitter = new events_1.EventEmitter();
|
|
28
|
-
this._observedCallsBuilder = new ObservedCalls_1.ObservedCallsBuilder();
|
|
29
|
-
this._observedSfusBuilder = new ObservedSfus_1.ObservedSfusBuilder();
|
|
30
|
-
this._numberOfSamples = 0;
|
|
31
|
-
}
|
|
32
|
-
getCallSource(callId) {
|
|
33
|
-
if (!this._callSources.has(callId))
|
|
34
|
-
return;
|
|
35
|
-
return this._callSources.get(callId);
|
|
36
|
-
}
|
|
37
|
-
getSfuSource(sfuId) {
|
|
38
|
-
if (!this._sfuSources.has(sfuId))
|
|
39
|
-
return;
|
|
40
|
-
return this._sfuSources.get(sfuId);
|
|
41
|
-
}
|
|
42
|
-
on(event, listener) {
|
|
43
|
-
this._emitter.addListener(event, listener);
|
|
44
|
-
return this;
|
|
45
|
-
}
|
|
46
|
-
off(event, listener) {
|
|
47
|
-
this._emitter.removeListener(event, listener);
|
|
48
|
-
return this;
|
|
49
|
-
}
|
|
50
|
-
_emit(event, data) {
|
|
51
|
-
return this._emitter.emit(event, data);
|
|
52
|
-
}
|
|
53
|
-
createCallSource(config) {
|
|
54
|
-
let closed = false;
|
|
55
|
-
const { serviceId, mediaUnitId, appData } = config, callConfig = __rest(config, ["serviceId", "mediaUnitId", "appData"]);
|
|
56
|
-
const clientSources = new Map();
|
|
57
|
-
const callSource = Object.assign(Object.assign({}, callConfig), { appData,
|
|
58
|
-
serviceId,
|
|
59
|
-
mediaUnitId,
|
|
60
|
-
get clients() {
|
|
61
|
-
return clientSources.values();
|
|
62
|
-
}, getClientSource: (clientId) => {
|
|
63
|
-
if (!clientSources.has(clientId))
|
|
64
|
-
return;
|
|
65
|
-
else
|
|
66
|
-
return clientSources.get(clientId);
|
|
67
|
-
}, createClientSource: (context) => {
|
|
68
|
-
const existingClientSource = clientSources.get(context.clientId);
|
|
69
|
-
if (existingClientSource)
|
|
70
|
-
return existingClientSource;
|
|
71
|
-
const { appData: clientAppData } = context, clientConfig = __rest(context, ["appData"]);
|
|
72
|
-
const clientSource = this._createClientSource(callSource, Object.assign(Object.assign(Object.assign({}, callConfig), clientConfig), { appData: clientAppData, serviceId,
|
|
73
|
-
mediaUnitId }));
|
|
74
|
-
const closeClientSource = clientSource.close;
|
|
75
|
-
clientSource.close = () => {
|
|
76
|
-
closeClientSource();
|
|
77
|
-
clientSources.delete(context.clientId);
|
|
78
|
-
};
|
|
79
|
-
clientSources.set(context.clientId, clientSource);
|
|
80
|
-
return clientSource;
|
|
81
|
-
}, close: () => {
|
|
82
|
-
if (closed) {
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
closed = true;
|
|
86
|
-
for (const clientSource of clientSources.values()) {
|
|
87
|
-
clientSource.close();
|
|
88
|
-
}
|
|
89
|
-
clientSources.clear();
|
|
90
|
-
this._callSources.delete(config.callId);
|
|
91
|
-
this._emit('removed-call-source', callSource);
|
|
92
|
-
}, closed });
|
|
93
|
-
if (this._callSources.size < 1) {
|
|
94
|
-
this._resetTimer();
|
|
95
|
-
}
|
|
96
|
-
this._callSources.set(config.callId, callSource);
|
|
97
|
-
this._emit('added-call-source', callSource);
|
|
98
|
-
return callSource;
|
|
99
|
-
}
|
|
100
|
-
_createClientSource(callSource, config) {
|
|
101
|
-
var _a;
|
|
102
|
-
let closed = false;
|
|
103
|
-
const { appData } = config, clientConfig = __rest(config, ["appData"]);
|
|
104
|
-
const source = Object.assign(Object.assign({}, clientConfig), { appData, joined: (_a = config.joined) !== null && _a !== void 0 ? _a : Date.now(), accept: (...samples) => {
|
|
105
|
-
if (closed) {
|
|
106
|
-
throw new Error('Cannot accept ClientSample, because the ClientSource is closed');
|
|
107
|
-
}
|
|
108
|
-
const observedCallBuilder = this._observedCallsBuilder.getOrCreateObservedCallBuilder(callSource.callId, () => {
|
|
109
|
-
return Object.assign({}, callSource);
|
|
110
|
-
});
|
|
111
|
-
const observedClientBuilder = observedCallBuilder.getOrCreateObservedClientBuilder(config.clientId, () => {
|
|
112
|
-
return Object.assign({}, source);
|
|
113
|
-
});
|
|
114
|
-
for (const sample of samples) {
|
|
115
|
-
observedClientBuilder.addClientSample(sample);
|
|
116
|
-
}
|
|
117
|
-
this._incrementSamples(samples.length);
|
|
118
|
-
}, close: () => {
|
|
119
|
-
if (closed) {
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
closed = true;
|
|
123
|
-
this._emit('removed-client-source', source);
|
|
124
|
-
}, closed });
|
|
125
|
-
this._emit('added-client-source', source);
|
|
126
|
-
return source;
|
|
127
|
-
}
|
|
128
|
-
createSfuSource(config) {
|
|
129
|
-
var _a;
|
|
130
|
-
const existingSfuSource = this._sfuSources.get(config.sfuId);
|
|
131
|
-
if (existingSfuSource) {
|
|
132
|
-
return existingSfuSource;
|
|
133
|
-
}
|
|
134
|
-
let closed = false;
|
|
135
|
-
// config.joined = config.joined ?? Date.now();
|
|
136
|
-
const source = Object.assign(Object.assign({}, config), { joined: (_a = config.joined) !== null && _a !== void 0 ? _a : Date.now(), accept: (...samples) => {
|
|
137
|
-
if (closed) {
|
|
138
|
-
throw new Error('Cannot accept SfuSample, because the SfuSource is closed');
|
|
139
|
-
}
|
|
140
|
-
const observedSfuBuilder = this._observedSfusBuilder.getOrCreateObservedSfuBuilder(config.sfuId, () => {
|
|
141
|
-
return Object.assign({}, source);
|
|
142
|
-
});
|
|
143
|
-
for (const sample of samples) {
|
|
144
|
-
observedSfuBuilder.addSfuSample(sample);
|
|
145
|
-
}
|
|
146
|
-
this._incrementSamples(samples.length);
|
|
147
|
-
}, close: () => {
|
|
148
|
-
if (closed) {
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
closed = true;
|
|
152
|
-
this._sfuSources.delete(config.sfuId);
|
|
153
|
-
this._emit('removed-sfu-source', source);
|
|
154
|
-
}, closed });
|
|
155
|
-
if (this._sfuSources.size < 1) {
|
|
156
|
-
this._resetTimer();
|
|
157
|
-
}
|
|
158
|
-
this._sfuSources.set(config.sfuId, source);
|
|
159
|
-
this._emit('added-sfu-source', source);
|
|
160
|
-
return source;
|
|
161
|
-
}
|
|
162
|
-
_incrementSamples(increment = 1) {
|
|
163
|
-
this._numberOfSamples += increment;
|
|
164
|
-
if (this.config.maxSamples < 1 || this._numberOfSamples < this.config.maxSamples) {
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
this._emitSamples();
|
|
168
|
-
}
|
|
169
|
-
emitSamples() {
|
|
170
|
-
if (0 < this.config.maxSamples || 0 < this.config.maxTimeInMs) {
|
|
171
|
-
if (!this._warnFlags.autoEmitButEmitSamplesInvoked) {
|
|
172
|
-
logger.warn(`Emitting Samples is called explicitly,
|
|
173
|
-
but samples are emitted automatically because of configuration
|
|
174
|
-
(maxSamples: ${this.config.maxSamples}, maxTImeInMs: ${this.config.maxTimeInMs})`);
|
|
175
|
-
this._warnFlags.autoEmitButEmitSamplesInvoked = true;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
this._emitSamples();
|
|
179
|
-
}
|
|
180
|
-
_emitSamples() {
|
|
181
|
-
this._resetTimer();
|
|
182
|
-
const observedCalls = this._observedCallsBuilder.build();
|
|
183
|
-
this._observedCallsBuilder = new ObservedCalls_1.ObservedCallsBuilder();
|
|
184
|
-
const observedSfus = this._observedSfusBuilder.build();
|
|
185
|
-
this._observedSfusBuilder = new ObservedSfus_1.ObservedSfusBuilder();
|
|
186
|
-
this._emit('observed-samples', {
|
|
187
|
-
observedCalls,
|
|
188
|
-
observedSfus,
|
|
189
|
-
numberOfSamples: this._numberOfSamples,
|
|
190
|
-
});
|
|
191
|
-
this._numberOfSamples = 0;
|
|
192
|
-
}
|
|
193
|
-
_resetTimer() {
|
|
194
|
-
if (this._timer) {
|
|
195
|
-
clearTimeout(this._timer);
|
|
196
|
-
this._timer = undefined;
|
|
197
|
-
}
|
|
198
|
-
if (0 < this.config.maxTimeInMs) {
|
|
199
|
-
this._timer = setTimeout(() => {
|
|
200
|
-
this._timer = undefined;
|
|
201
|
-
this._emitSamples();
|
|
202
|
-
}, this.config.maxTimeInMs);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
close() {
|
|
206
|
-
[...this._callSources.values()].forEach((callSource) => callSource.close());
|
|
207
|
-
[...this._sfuSources.values()].forEach((sfuSource) => sfuSource.close());
|
|
208
|
-
this._callSources.clear();
|
|
209
|
-
this._sfuSources.clear();
|
|
210
|
-
this._emitSamples();
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
exports.Sources = Sources;
|
package/src/Evaluator.ts
DELETED
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
import { createLogger } from './common/logger';
|
|
2
|
-
import { Semaphore } from './common/Semaphore';
|
|
3
|
-
import { EvaluatorContext } from './common/types';
|
|
4
|
-
import { ReportsCollector } from './common/ReportsCollector';
|
|
5
|
-
import { ObservedClientSourceConfig } from './sources/ObservedClientSource';
|
|
6
|
-
import { SourcesEvents } from './sources/Sources';
|
|
7
|
-
import { StorageProvider } from './storages/StorageProvider';
|
|
8
|
-
import { createProcessor, Processor } from './middlewares/Processor';
|
|
9
|
-
import { createTransactionContext, TransactionContext } from './middlewares/TransactionContext';
|
|
10
|
-
import { Middleware } from './middlewares/Middleware';
|
|
11
|
-
import { CallOperationsContext, CallOperation, createCallOperationContext } from './middlewares/CallOperationsContext';
|
|
12
|
-
import { createCallProcessor } from './middlewares/CallProcessor';
|
|
13
|
-
import { createTransactionProcessor } from './middlewares/TransactoinProcessor';
|
|
14
|
-
import { EventEmitter } from 'events';
|
|
15
|
-
|
|
16
|
-
const logger = createLogger('Evaluator');
|
|
17
|
-
|
|
18
|
-
export type EvaluatorEvents = {
|
|
19
|
-
ready: Error | undefined;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export type EvaluatorConfig = {
|
|
23
|
-
fetchSamples: boolean;
|
|
24
|
-
maxIdleTimeInMs?: number,
|
|
25
|
-
findRemoteMatches?: boolean,
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export type EvaluatorProcess = (evaluatorContext: EvaluatorContext) => Promise<void>;
|
|
29
|
-
|
|
30
|
-
export class Evaluator {
|
|
31
|
-
private _index = 0;
|
|
32
|
-
private _evaluations = new Map<number, Promise<void>>();
|
|
33
|
-
|
|
34
|
-
private _clientOperations = new Map<string, CallOperation>();
|
|
35
|
-
private _emitter = new EventEmitter();
|
|
36
|
-
|
|
37
|
-
private _evaluatorProcesses = new Map<EvaluatorProcess, Middleware<EvaluatorContext>>();
|
|
38
|
-
private _callProcessor: Processor<CallOperationsContext>;
|
|
39
|
-
private _transactionProcessor: Processor<TransactionContext>;
|
|
40
|
-
private _customProcessor: Processor<EvaluatorContext>;
|
|
41
|
-
|
|
42
|
-
public constructor(
|
|
43
|
-
public readonly config: EvaluatorConfig,
|
|
44
|
-
private readonly _callSemaphore: Semaphore,
|
|
45
|
-
private readonly _storageProvider: StorageProvider,
|
|
46
|
-
private readonly _reportsCollector: ReportsCollector
|
|
47
|
-
) {
|
|
48
|
-
this._callProcessor = createCallProcessor(_storageProvider, _reportsCollector);
|
|
49
|
-
|
|
50
|
-
this._transactionProcessor = createTransactionProcessor(
|
|
51
|
-
_storageProvider,
|
|
52
|
-
_reportsCollector,
|
|
53
|
-
this.config.fetchSamples,
|
|
54
|
-
BigInt(this.config.maxIdleTimeInMs ?? 10000),
|
|
55
|
-
this.config.findRemoteMatches,
|
|
56
|
-
);
|
|
57
|
-
|
|
58
|
-
this._customProcessor = createProcessor();
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
public addProcess(process: EvaluatorProcess) {
|
|
62
|
-
const middleware: Middleware<EvaluatorContext> = async (context, next) => {
|
|
63
|
-
await process(context);
|
|
64
|
-
if (next) await next(context);
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
this._evaluatorProcesses.set(process, middleware);
|
|
68
|
-
this._customProcessor.addMiddleware(middleware);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
public removeProcess(process: EvaluatorProcess) {
|
|
72
|
-
const middleware = this._evaluatorProcesses.get(process);
|
|
73
|
-
|
|
74
|
-
if (!middleware) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
this._evaluatorProcesses.delete(process);
|
|
78
|
-
this._customProcessor.removeMiddleware(middleware);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
public addClosedClientSource(clientSource: ObservedClientSourceConfig) {
|
|
82
|
-
this._clientOperations.set(clientSource.clientId, {
|
|
83
|
-
type: 'detach',
|
|
84
|
-
...clientSource,
|
|
85
|
-
detached: Date.now(),
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
public addCreatedClientSource(clientSource: ObservedClientSourceConfig) {
|
|
90
|
-
this._clientOperations.set(clientSource.clientId, {
|
|
91
|
-
type: 'join',
|
|
92
|
-
...clientSource,
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
public on<K extends keyof EvaluatorEvents>(event: K, listener: (data: EvaluatorEvents[K]) => void): this {
|
|
97
|
-
this._emitter.addListener(event, listener);
|
|
98
|
-
|
|
99
|
-
return this;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
public once<K extends keyof EvaluatorEvents>(event: K, listener: (data: EvaluatorEvents[K]) => void): this {
|
|
103
|
-
this._emitter.once(event, listener);
|
|
104
|
-
|
|
105
|
-
return this;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
public off<K extends keyof EvaluatorEvents>(event: K, listener: (data: EvaluatorEvents[K]) => void): this {
|
|
109
|
-
this._emitter.removeListener(event, listener);
|
|
110
|
-
|
|
111
|
-
return this;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
private _emit<K extends keyof EvaluatorEvents>(event: K, data: EvaluatorEvents[K]): boolean {
|
|
115
|
-
return this._emitter.emit(event, data);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
public addObservedSamples(samples: SourcesEvents['observed-samples']): void {
|
|
119
|
-
// this triggers the evaluation
|
|
120
|
-
const { observedCalls, observedSfus } = samples;
|
|
121
|
-
|
|
122
|
-
const evaluatorContext: EvaluatorContext = {
|
|
123
|
-
observedCalls,
|
|
124
|
-
observedSfus,
|
|
125
|
-
reports: this._reportsCollector,
|
|
126
|
-
storages: this._storageProvider,
|
|
127
|
-
joinedClientIds: [],
|
|
128
|
-
detachedClients: [],
|
|
129
|
-
startedCallIds: [],
|
|
130
|
-
endedCalls: [],
|
|
131
|
-
openedPeerConnectionIds: [],
|
|
132
|
-
closedPeerConnections: [],
|
|
133
|
-
addedInboundAudioTrackIds: [],
|
|
134
|
-
removedInboundAudioTracks: [],
|
|
135
|
-
addedInboundVideoTrackIds: [],
|
|
136
|
-
removedInboundVideoTracks: [],
|
|
137
|
-
addedOutboundAudioTrackIds: [],
|
|
138
|
-
removedOutboundAudioTracks: [],
|
|
139
|
-
addedOutboundVideoTrackIds: [],
|
|
140
|
-
removedOutboundVideoTracks: [],
|
|
141
|
-
joinedSfuIds: [],
|
|
142
|
-
detachedSfus: [],
|
|
143
|
-
openedSfuTransportIds: [],
|
|
144
|
-
closedSfuTransports: [],
|
|
145
|
-
addedSfuInbounRtpPadIds: [],
|
|
146
|
-
removedSfuInbounRtpPadIds: [],
|
|
147
|
-
addedSfuOutbounRtpPadIds: [],
|
|
148
|
-
removedSfuOutbounRtpPadIds: [],
|
|
149
|
-
openedSfuSctpChannelIds: [],
|
|
150
|
-
closedSfuSctpChannels: [],
|
|
151
|
-
|
|
152
|
-
clientExtensionStats: [],
|
|
153
|
-
callEvents: [],
|
|
154
|
-
sfuEvents: [],
|
|
155
|
-
sfuExtensionStats: [],
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
const callOperations = createCallOperationContext(this._clientOperations, evaluatorContext);
|
|
159
|
-
|
|
160
|
-
this._clientOperations.clear();
|
|
161
|
-
|
|
162
|
-
this._eval(callOperations, evaluatorContext)
|
|
163
|
-
.then(() => {
|
|
164
|
-
logger.debug('Evaluator is successfully performed eval process');
|
|
165
|
-
})
|
|
166
|
-
.catch((err) => {
|
|
167
|
-
logger.warn('Error occurred while evaluating', err);
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
private async _eval(callOperationsContext: CallOperationsContext, evaluatorContext: EvaluatorContext): Promise<void> {
|
|
172
|
-
const actualBlockingPoint = this._evaluations.get(this._index) ?? Promise.resolve();
|
|
173
|
-
const index = ++this._index;
|
|
174
|
-
const result = new Promise<void>((resolve, reject) => {
|
|
175
|
-
actualBlockingPoint.then(() => {
|
|
176
|
-
this._process(callOperationsContext, evaluatorContext)
|
|
177
|
-
.then(() => resolve())
|
|
178
|
-
.catch((err) => reject(err));
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
const nextBlockingPoint = new Promise<void>((resolve) => {
|
|
182
|
-
result.then(() => {
|
|
183
|
-
this._evaluations.delete(index);
|
|
184
|
-
resolve();
|
|
185
|
-
}).catch(() => {
|
|
186
|
-
this._evaluations.delete(index);
|
|
187
|
-
resolve();
|
|
188
|
-
});
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
this._evaluations.set(index, nextBlockingPoint);
|
|
192
|
-
|
|
193
|
-
return result;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
public get ongoingProcess(): number {
|
|
197
|
-
return this._evaluations.size;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
private async _process(
|
|
201
|
-
callOperationsContext: CallOperationsContext,
|
|
202
|
-
evaluatorContext: EvaluatorContext
|
|
203
|
-
): Promise<void> {
|
|
204
|
-
const process = async () => {
|
|
205
|
-
await this._callSemaphore.acquire();
|
|
206
|
-
await this._callProcessor.use(callOperationsContext).finally(() => {
|
|
207
|
-
this._callSemaphore.release();
|
|
208
|
-
});
|
|
209
|
-
const transactionContext = await createTransactionContext(
|
|
210
|
-
evaluatorContext,
|
|
211
|
-
this._storageProvider,
|
|
212
|
-
evaluatorContext.observedCalls,
|
|
213
|
-
evaluatorContext.observedSfus,
|
|
214
|
-
);
|
|
215
|
-
|
|
216
|
-
await this._transactionProcessor.use(transactionContext);
|
|
217
|
-
|
|
218
|
-
await this._customProcessor.use(evaluatorContext);
|
|
219
|
-
};
|
|
220
|
-
|
|
221
|
-
await process().then(() => {
|
|
222
|
-
this._emit('ready', undefined);
|
|
223
|
-
})
|
|
224
|
-
.catch((err) => {
|
|
225
|
-
logger.warn('Error occurred while evaluating samples', err);
|
|
226
|
-
this._emit('ready', err);
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
}
|
package/src/common/Semaphore.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Interface for a Semaphore, a synchronization primitive that provides exclusive access to a shared resource.
|
|
3
|
-
* Semaphores are used to ensure that only one process can access the shared resource at a time.
|
|
4
|
-
*/
|
|
5
|
-
export interface Semaphore {
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Acquires the semaphore, blocking until the semaphore is available.
|
|
9
|
-
* When the semaphore is acquired, it prevents other processes from acquiring it.
|
|
10
|
-
* @returns A Promise that resolves when the semaphore is successfully acquired.
|
|
11
|
-
*/
|
|
12
|
-
acquire(): Promise<void>;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Releases the semaphore, allowing other processes to acquire it.
|
|
16
|
-
* @returns A Promise that resolves when the semaphore is successfully released.
|
|
17
|
-
*/
|
|
18
|
-
release(): Promise<void>;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function createDummySemaphore(): Semaphore {
|
|
22
|
-
return {
|
|
23
|
-
acquire: () => Promise.resolve(),
|
|
24
|
-
release: () => Promise.resolve(),
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Interface for a SemaphoreProvider, an object that provides semaphore instances for different shared resources.
|
|
30
|
-
* SemaphoreProviders are used to manage access to shared resources across multiple processes.
|
|
31
|
-
*/
|
|
32
|
-
export interface SemaphoreProvider {
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* A Semaphore instance that manages access to the 'call' shared resource.
|
|
36
|
-
* This semaphore ensures that only one process can access the 'call' resource at a time.
|
|
37
|
-
*/
|
|
38
|
-
readonly callSemaphore: Semaphore;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export function createSimpleSemaphoreProvider(): SemaphoreProvider {
|
|
42
|
-
return {
|
|
43
|
-
callSemaphore: createDummySemaphore(),
|
|
44
|
-
};
|
|
45
|
-
}
|
package/src/entries/CallEntry.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import * as Models from '../models/Models';
|
|
2
|
-
import { StorageProvider } from '../storages/StorageProvider';
|
|
3
|
-
import { createLogger } from '../common/logger';
|
|
4
|
-
import { asyncIteratorConverter } from '../common/utils';
|
|
5
|
-
import { ClientEntry, createClientEntry } from './ClientEntry';
|
|
6
|
-
|
|
7
|
-
export const logger = createLogger('CallWrapper');
|
|
8
|
-
|
|
9
|
-
export type CallEntry = ReturnType<typeof createCallEntry>;
|
|
10
|
-
|
|
11
|
-
export function createCallEntry(storageProvider: StorageProvider, model?: Models.Call) {
|
|
12
|
-
if (!model) return;
|
|
13
|
-
const {
|
|
14
|
-
callId,
|
|
15
|
-
roomId,
|
|
16
|
-
serviceId,
|
|
17
|
-
started,
|
|
18
|
-
} = model;
|
|
19
|
-
|
|
20
|
-
if (!callId) return logger.warn(`Call model without callId: ${JSON.stringify(model)}`);
|
|
21
|
-
if (!roomId) return logger.warn(`Call model without roomId: ${JSON.stringify(model)}`);
|
|
22
|
-
if (!serviceId) return logger.warn(`Call model without serviceId: ${JSON.stringify(model)}`);
|
|
23
|
-
if (!started) return logger.warn(`Call model without started: ${JSON.stringify(model)}`);
|
|
24
|
-
|
|
25
|
-
const getClient = async (clientId: string) => {
|
|
26
|
-
return model.clientIds.includes(clientId) ? createClientEntry(storageProvider, await storageProvider.clientStorage.get(clientId)) : undefined;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
const asyncClientsGenerator = async function *(providedClientIds?: string[]) {
|
|
30
|
-
const { clientStorage } = storageProvider;
|
|
31
|
-
const clientModels = await Promise.all(
|
|
32
|
-
(providedClientIds ?? model.clientIds).map((clientId) => clientStorage.get(clientId))
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
for (const clientModel of clientModels) {
|
|
36
|
-
if (!clientModel) continue;
|
|
37
|
-
yield createClientEntry(storageProvider, clientModel);
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
return {
|
|
42
|
-
callId,
|
|
43
|
-
roomId,
|
|
44
|
-
serviceId,
|
|
45
|
-
started,
|
|
46
|
-
get clientIds(): ReadonlyArray<string> {
|
|
47
|
-
return model.clientIds;
|
|
48
|
-
},
|
|
49
|
-
getClient,
|
|
50
|
-
get clients(): AsyncIterableIterator<ClientEntry> {
|
|
51
|
-
return asyncIteratorConverter<ClientEntry>(asyncClientsGenerator());
|
|
52
|
-
},
|
|
53
|
-
|
|
54
|
-
refresh: async () => {
|
|
55
|
-
const refreshedModel = await storageProvider.callStorage.get(callId);
|
|
56
|
-
|
|
57
|
-
if (!refreshedModel) return;
|
|
58
|
-
|
|
59
|
-
model.clientIds = refreshedModel.clientIds;
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import * as Models from '../models/Models';
|
|
2
|
-
import { StorageProvider } from '../storages/StorageProvider';
|
|
3
|
-
import { logger, createCallEntry } from './CallEntry';
|
|
4
|
-
import { asyncIteratorConverter } from '../common/utils';
|
|
5
|
-
import { PeerConnectionEntry, createPeerConnectionEntry } from './PeerConnectionEntry';
|
|
6
|
-
|
|
7
|
-
export type ClientEntry = ReturnType<typeof createClientEntry>;
|
|
8
|
-
|
|
9
|
-
export function createClientEntry(storageProvider: StorageProvider, model?: Models.Client) {
|
|
10
|
-
if (!model) return;
|
|
11
|
-
|
|
12
|
-
const {
|
|
13
|
-
clientId,
|
|
14
|
-
roomId,
|
|
15
|
-
serviceId,
|
|
16
|
-
mediaUnitId,
|
|
17
|
-
callId,
|
|
18
|
-
joined,
|
|
19
|
-
timeZoneId,
|
|
20
|
-
} = model;
|
|
21
|
-
|
|
22
|
-
if (!callId) return logger.warn(`Client model without callId: ${JSON.stringify(model)}`);
|
|
23
|
-
if (!roomId) return logger.warn(`Client model without roomId: ${JSON.stringify(model)}`);
|
|
24
|
-
if (!clientId) return logger.warn(`Client model without clientId: ${JSON.stringify(model)}`);
|
|
25
|
-
if (!serviceId) return logger.warn(`Client model without serviceId: ${JSON.stringify(model)}`);
|
|
26
|
-
if (!mediaUnitId) return logger.warn(`Client model without mediaUnitId: ${JSON.stringify(model)}`);
|
|
27
|
-
|
|
28
|
-
const getCall = async () => {
|
|
29
|
-
return createCallEntry(storageProvider, await storageProvider.callStorage.get(callId));
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
const asyncPeerConnectionGenerator = async function *(providedPeerConnectionIds?: string[]) {
|
|
33
|
-
const peerConnectionModels = await Promise.all(
|
|
34
|
-
(providedPeerConnectionIds ?? model.peerConnectionIds).map((peerConnectionId) => storageProvider.peerConnectionStorage.get(peerConnectionId))
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
for (const peerConnectionModel of peerConnectionModels) {
|
|
38
|
-
if (!peerConnectionModel) continue;
|
|
39
|
-
yield createPeerConnectionEntry(storageProvider, peerConnectionModel);
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
return {
|
|
44
|
-
clientId,
|
|
45
|
-
roomId,
|
|
46
|
-
serviceId,
|
|
47
|
-
mediaUnitId,
|
|
48
|
-
callId,
|
|
49
|
-
joined,
|
|
50
|
-
timeZoneId,
|
|
51
|
-
get browser() {
|
|
52
|
-
return model.browser;
|
|
53
|
-
},
|
|
54
|
-
get engine() {
|
|
55
|
-
return model.engine;
|
|
56
|
-
},
|
|
57
|
-
get operationSystem() {
|
|
58
|
-
return model.operationSystem;
|
|
59
|
-
},
|
|
60
|
-
get platform() {
|
|
61
|
-
return model.platform;
|
|
62
|
-
},
|
|
63
|
-
get peerConnectionIds(): ReadonlyArray<string> {
|
|
64
|
-
return model.peerConnectionIds;
|
|
65
|
-
},
|
|
66
|
-
get marker() {
|
|
67
|
-
return model.marker;
|
|
68
|
-
},
|
|
69
|
-
get coordinates(): { latitude: number; longitude: number } | undefined {
|
|
70
|
-
if (!model.coordinates) return;
|
|
71
|
-
|
|
72
|
-
const {
|
|
73
|
-
longitude,
|
|
74
|
-
latitude
|
|
75
|
-
} = model.coordinates;
|
|
76
|
-
|
|
77
|
-
if (!latitude) return;
|
|
78
|
-
if (!longitude) return;
|
|
79
|
-
|
|
80
|
-
return {
|
|
81
|
-
latitude,
|
|
82
|
-
longitude
|
|
83
|
-
};
|
|
84
|
-
},
|
|
85
|
-
getCall,
|
|
86
|
-
get peerConnections(): AsyncIterableIterator<PeerConnectionEntry> {
|
|
87
|
-
return asyncIteratorConverter<PeerConnectionEntry>(asyncPeerConnectionGenerator());
|
|
88
|
-
},
|
|
89
|
-
getPeerConnection: async (peerConnectionId: string) => {
|
|
90
|
-
return model.peerConnectionIds.includes(peerConnectionId) ? createPeerConnectionEntry(storageProvider, await storageProvider.peerConnectionStorage.get(peerConnectionId)) : undefined;
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
refresh: async () => {
|
|
94
|
-
const refreshedModel = await storageProvider.clientStorage.get(clientId);
|
|
95
|
-
|
|
96
|
-
if (!refreshedModel) return;
|
|
97
|
-
|
|
98
|
-
model.browser = refreshedModel.browser;
|
|
99
|
-
model.engine = refreshedModel.engine;
|
|
100
|
-
model.operationSystem = refreshedModel.operationSystem;
|
|
101
|
-
model.platform = refreshedModel.platform;
|
|
102
|
-
model.peerConnectionIds = refreshedModel.peerConnectionIds;
|
|
103
|
-
model.marker = refreshedModel.marker;
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
}
|