@observertc/observer-js 0.9.27-beta → 0.30.0-beta
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
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { createLogger } from '../common/logger';
|
|
2
|
-
import * as Models from '../models/Models';
|
|
3
|
-
import { StorageProvider } from '../storages/StorageProvider';
|
|
4
|
-
import { createCallEntry } from './CallEntry';
|
|
5
|
-
import { createClientEntry } from './ClientEntry';
|
|
6
|
-
import { createPeerConnectionEntry } from './PeerConnectionEntry';
|
|
7
|
-
|
|
8
|
-
const logger = createLogger('InboundTrackWrapper');
|
|
9
|
-
|
|
10
|
-
export type InboundTrackEntry = ReturnType<typeof createInboundTrackEntry>;
|
|
11
|
-
|
|
12
|
-
export function createInboundTrackEntry(storageProvider: StorageProvider, model?: Models.InboundTrack) {
|
|
13
|
-
if (!model) return;
|
|
14
|
-
const {
|
|
15
|
-
callId,
|
|
16
|
-
clientId,
|
|
17
|
-
peerConnectionId,
|
|
18
|
-
trackId,
|
|
19
|
-
kind,
|
|
20
|
-
} = model;
|
|
21
|
-
|
|
22
|
-
if (!callId) return logger.warn(`InboundTrack model without callId: ${JSON.stringify(model)}`);
|
|
23
|
-
if (!clientId) return logger.warn(`InboundTrack model without clientId: ${JSON.stringify(model)}`);
|
|
24
|
-
if (!peerConnectionId) return logger.warn(`InboundTrack model without peerConnectionId: ${JSON.stringify(model)}`);
|
|
25
|
-
if (!trackId) return logger.warn(`InboundTrack model without trackId: ${JSON.stringify(model)}`);
|
|
26
|
-
if (!kind) return logger.warn(`InboundTrack model without kind: ${JSON.stringify(model)}`);
|
|
27
|
-
|
|
28
|
-
const direction = 'inbound' as const;
|
|
29
|
-
const getCall = async () => {
|
|
30
|
-
return createCallEntry(storageProvider, await storageProvider.callStorage.get(callId));
|
|
31
|
-
};
|
|
32
|
-
const getClient = async () => {
|
|
33
|
-
return createClientEntry(storageProvider, await storageProvider.clientStorage.get(clientId));
|
|
34
|
-
};
|
|
35
|
-
const getPeerConnection = async () => {
|
|
36
|
-
return createPeerConnectionEntry(storageProvider, await storageProvider.peerConnectionStorage.get(peerConnectionId));
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
return {
|
|
40
|
-
callId,
|
|
41
|
-
clientId,
|
|
42
|
-
peerConnectionId,
|
|
43
|
-
trackId,
|
|
44
|
-
direction,
|
|
45
|
-
get kind(): 'audio' | 'video' {
|
|
46
|
-
return kind.toLocaleLowerCase() as 'audio' | 'video';
|
|
47
|
-
},
|
|
48
|
-
get stats() {
|
|
49
|
-
return 0 < model.audioStats.length ? model.audioStats : 0 < model.videoStats.length ? model.videoStats : undefined;
|
|
50
|
-
},
|
|
51
|
-
get marker() {
|
|
52
|
-
return model.marker;
|
|
53
|
-
},
|
|
54
|
-
get ssrc() {
|
|
55
|
-
return model.ssrc;
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
getCall,
|
|
59
|
-
getClient,
|
|
60
|
-
getPeerConnection,
|
|
61
|
-
|
|
62
|
-
async refresh() {
|
|
63
|
-
const refreshedModel = await storageProvider.inboundTrackStorage.get(trackId);
|
|
64
|
-
|
|
65
|
-
if (!refreshedModel) return;
|
|
66
|
-
|
|
67
|
-
model.audioStats = refreshedModel.audioStats;
|
|
68
|
-
model.videoStats = refreshedModel.videoStats;
|
|
69
|
-
model.marker = refreshedModel.marker;
|
|
70
|
-
model.ssrc = refreshedModel.ssrc;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
};
|
|
74
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { createLogger } from '../common/logger';
|
|
2
|
-
import * as Models from '../models/Models';
|
|
3
|
-
import { StorageProvider } from '../storages/StorageProvider';
|
|
4
|
-
import { createCallEntry } from './CallEntry';
|
|
5
|
-
import { createClientEntry } from './ClientEntry';
|
|
6
|
-
import { createPeerConnectionEntry } from './PeerConnectionEntry';
|
|
7
|
-
|
|
8
|
-
const logger = createLogger('OutboundTrackWrapper');
|
|
9
|
-
|
|
10
|
-
export type OutboundTrackEntry = ReturnType<typeof createOutboundTrackEntry>;
|
|
11
|
-
|
|
12
|
-
export function createOutboundTrackEntry(storageProvider: StorageProvider, model?: Models.OutboundTrack) {
|
|
13
|
-
if (!model) return;
|
|
14
|
-
const {
|
|
15
|
-
callId,
|
|
16
|
-
clientId,
|
|
17
|
-
peerConnectionId,
|
|
18
|
-
trackId,
|
|
19
|
-
kind,
|
|
20
|
-
} = model;
|
|
21
|
-
|
|
22
|
-
if (!callId) return logger.warn(`OutboundTrack model without callId: ${JSON.stringify(model)}`);
|
|
23
|
-
if (!clientId) return logger.warn(`OutboundTrack model without clientId: ${JSON.stringify(model)}`);
|
|
24
|
-
if (!peerConnectionId) return logger.warn(`OutboundTrack model without peerConnectionId: ${JSON.stringify(model)}`);
|
|
25
|
-
if (!trackId) return logger.warn(`OutboundTrack model without trackId: ${JSON.stringify(model)}`);
|
|
26
|
-
if (!kind) return logger.warn(`OutboundTrack model without kind: ${JSON.stringify(model)}`);
|
|
27
|
-
|
|
28
|
-
const direction = 'outbound' as const;
|
|
29
|
-
const getCall = async () => {
|
|
30
|
-
return createCallEntry(storageProvider, await storageProvider.callStorage.get(callId));
|
|
31
|
-
};
|
|
32
|
-
const getClient = async () => {
|
|
33
|
-
return createClientEntry(storageProvider, await storageProvider.clientStorage.get(clientId));
|
|
34
|
-
};
|
|
35
|
-
const getPeerConnection = async () => {
|
|
36
|
-
return createPeerConnectionEntry(storageProvider, await storageProvider.peerConnectionStorage.get(peerConnectionId));
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
return {
|
|
40
|
-
callId,
|
|
41
|
-
clientId,
|
|
42
|
-
peerConnectionId,
|
|
43
|
-
trackId,
|
|
44
|
-
direction,
|
|
45
|
-
get kind(): 'audio' | 'video' {
|
|
46
|
-
return kind.toLocaleLowerCase() as 'audio' | 'video';
|
|
47
|
-
},
|
|
48
|
-
get stats() {
|
|
49
|
-
return 0 < model.audioStats.length ? model.audioStats : 0 < model.videoStats.length ? model.videoStats : undefined;
|
|
50
|
-
},
|
|
51
|
-
get marker() {
|
|
52
|
-
return model.marker;
|
|
53
|
-
},
|
|
54
|
-
get ssrc() {
|
|
55
|
-
return model.ssrc;
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
getCall,
|
|
59
|
-
getClient,
|
|
60
|
-
getPeerConnection,
|
|
61
|
-
|
|
62
|
-
refresh: async () => {
|
|
63
|
-
const refreshedModel = await storageProvider.outboundTrackStorage.get(trackId);
|
|
64
|
-
|
|
65
|
-
if (!refreshedModel) return;
|
|
66
|
-
|
|
67
|
-
model.audioStats = refreshedModel.audioStats;
|
|
68
|
-
model.videoStats = refreshedModel.videoStats;
|
|
69
|
-
model.marker = refreshedModel.marker;
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
}
|
|
@@ -1,133 +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 { createClientEntry } from './ClientEntry';
|
|
6
|
-
import { InboundTrackEntry, createInboundTrackEntry } from './InboundTrackEntry';
|
|
7
|
-
import { OutboundTrackEntry, createOutboundTrackEntry } from './OutboundTrackEntry';
|
|
8
|
-
|
|
9
|
-
export type PeerConnectionEntry = ReturnType<typeof createPeerConnectionEntry>;
|
|
10
|
-
|
|
11
|
-
export function createPeerConnectionEntry(storageProvider: StorageProvider, model?: Models.PeerConnection) {
|
|
12
|
-
if (!model) return;
|
|
13
|
-
|
|
14
|
-
const {
|
|
15
|
-
callId,
|
|
16
|
-
clientId,
|
|
17
|
-
peerConnectionId,
|
|
18
|
-
label,
|
|
19
|
-
mediaUnitId,
|
|
20
|
-
opened,
|
|
21
|
-
serviceId,
|
|
22
|
-
roomId,
|
|
23
|
-
userId,
|
|
24
|
-
marker
|
|
25
|
-
} = model;
|
|
26
|
-
|
|
27
|
-
if (!peerConnectionId) return logger.warn(`PeerConnection model without peerConnectionId: ${JSON.stringify(model)}`);
|
|
28
|
-
if (!callId) return logger.warn(`PeerConnection model without callId: ${JSON.stringify(model)}`);
|
|
29
|
-
if (!clientId) return logger.warn(`PeerConnection model without clientId: ${JSON.stringify(model)}`);
|
|
30
|
-
|
|
31
|
-
const getClient = async () => {
|
|
32
|
-
return createClientEntry(storageProvider, await storageProvider.clientStorage.get(clientId));
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
const getCall = async () => {
|
|
36
|
-
return createCallEntry(storageProvider, await storageProvider.callStorage.get(callId));
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const asyncInboundTrackGenerator = async function *(providedInboundTrackIds?: string[], kind?: string) {
|
|
40
|
-
const inboundTrackModels = await Promise.all(
|
|
41
|
-
(providedInboundTrackIds ?? model.inboundTrackIds).map((inboundTrackId) => storageProvider.inboundTrackStorage.get(inboundTrackId))
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
for (const inboundTrackModel of inboundTrackModels) {
|
|
45
|
-
if (!inboundTrackModel) continue;
|
|
46
|
-
if (kind && inboundTrackModel.kind !== kind) continue;
|
|
47
|
-
yield createInboundTrackEntry(storageProvider, inboundTrackModel);
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
const asyncOutboundTrackGenerator = async function *(providedOutboundTrackIds?: string[], kind?: string) {
|
|
51
|
-
const outboundTrackModels = await Promise.all(
|
|
52
|
-
(providedOutboundTrackIds ?? model.outboundTrackIds).map((outboundTrackId) => storageProvider.outboundTrackStorage.get(outboundTrackId))
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
for (const outboundTrackModel of outboundTrackModels) {
|
|
56
|
-
if (!outboundTrackModel) continue;
|
|
57
|
-
if (kind && outboundTrackModel.kind !== kind) continue;
|
|
58
|
-
yield createOutboundTrackEntry(storageProvider, outboundTrackModel);
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
return {
|
|
63
|
-
callId,
|
|
64
|
-
clientId,
|
|
65
|
-
peerConnectionId,
|
|
66
|
-
marker,
|
|
67
|
-
label,
|
|
68
|
-
mediaUnitId,
|
|
69
|
-
opened,
|
|
70
|
-
serviceId,
|
|
71
|
-
roomId,
|
|
72
|
-
userId,
|
|
73
|
-
|
|
74
|
-
getClient,
|
|
75
|
-
getCall,
|
|
76
|
-
|
|
77
|
-
get iceCandidatePairs() {
|
|
78
|
-
return model.iceCandidatePairs;
|
|
79
|
-
},
|
|
80
|
-
get iceRemoteCandidates() {
|
|
81
|
-
return model.iceRemoteCandidates;
|
|
82
|
-
},
|
|
83
|
-
get iceLocalCandidates() {
|
|
84
|
-
return model.icelocalCandidates;
|
|
85
|
-
},
|
|
86
|
-
get transports() {
|
|
87
|
-
return model.transports;
|
|
88
|
-
},
|
|
89
|
-
get inboundTrackIds(): ReadonlyArray<string> {
|
|
90
|
-
return model.inboundTrackIds;
|
|
91
|
-
},
|
|
92
|
-
get outboundTrackIds(): ReadonlyArray<string> {
|
|
93
|
-
return model.outboundTrackIds;
|
|
94
|
-
},
|
|
95
|
-
get inboundTracks(): AsyncIterableIterator<InboundTrackEntry> {
|
|
96
|
-
return asyncIteratorConverter<InboundTrackEntry>(asyncInboundTrackGenerator());
|
|
97
|
-
},
|
|
98
|
-
get outboundTracks(): AsyncIterableIterator<OutboundTrackEntry> {
|
|
99
|
-
return asyncIteratorConverter<OutboundTrackEntry>(asyncOutboundTrackGenerator());
|
|
100
|
-
},
|
|
101
|
-
get inboundAudioTracks(): AsyncIterableIterator<InboundTrackEntry> {
|
|
102
|
-
return asyncIteratorConverter<InboundTrackEntry>(asyncInboundTrackGenerator(undefined, 'audio'));
|
|
103
|
-
},
|
|
104
|
-
get outboundAudioTracks(): AsyncIterableIterator<OutboundTrackEntry> {
|
|
105
|
-
return asyncIteratorConverter<OutboundTrackEntry>(asyncOutboundTrackGenerator(undefined, 'audio'));
|
|
106
|
-
},
|
|
107
|
-
get inboundVideoTracks(): AsyncIterableIterator<InboundTrackEntry> {
|
|
108
|
-
return asyncIteratorConverter<InboundTrackEntry>(asyncInboundTrackGenerator(undefined, 'video'));
|
|
109
|
-
},
|
|
110
|
-
get outboundVideoTracks(): AsyncIterableIterator<OutboundTrackEntry> {
|
|
111
|
-
return asyncIteratorConverter<OutboundTrackEntry>(asyncOutboundTrackGenerator(undefined, 'video'));
|
|
112
|
-
},
|
|
113
|
-
async getInboundTrack(inboundTrackId: string) {
|
|
114
|
-
return model.inboundTrackIds.includes(inboundTrackId) ? createInboundTrackEntry(storageProvider, await storageProvider.inboundTrackStorage.get(inboundTrackId)) : undefined;
|
|
115
|
-
},
|
|
116
|
-
async getOutboundTrack(outboundTrackId: string) {
|
|
117
|
-
return model.outboundTrackIds.includes(outboundTrackId) ? createOutboundTrackEntry(storageProvider, await storageProvider.outboundTrackStorage.get(outboundTrackId)) : undefined;
|
|
118
|
-
},
|
|
119
|
-
|
|
120
|
-
async refresh() {
|
|
121
|
-
const refreshedModel = await storageProvider.peerConnectionStorage.get(peerConnectionId);
|
|
122
|
-
|
|
123
|
-
if (!refreshedModel) return;
|
|
124
|
-
|
|
125
|
-
model.iceCandidatePairs = refreshedModel.iceCandidatePairs;
|
|
126
|
-
model.iceRemoteCandidates = refreshedModel.iceRemoteCandidates;
|
|
127
|
-
model.icelocalCandidates = refreshedModel.icelocalCandidates;
|
|
128
|
-
model.transports = refreshedModel.transports;
|
|
129
|
-
model.inboundTrackIds = refreshedModel.inboundTrackIds;
|
|
130
|
-
model.outboundTrackIds = refreshedModel.outboundTrackIds;
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
}
|
package/src/entries/SfuEntry.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 { SfuTransportEntry, createSfuTransportEntry } from './SfuTransportEntry';
|
|
5
|
-
import { asyncIteratorConverter } from '../common/utils';
|
|
6
|
-
|
|
7
|
-
export const logger = createLogger('CallWrapper');
|
|
8
|
-
|
|
9
|
-
export type SfuEntry = ReturnType<typeof createSfuEntry>;
|
|
10
|
-
|
|
11
|
-
export function createSfuEntry(storageProvider: StorageProvider, model?: Models.Sfu) {
|
|
12
|
-
if (!model) return;
|
|
13
|
-
const {
|
|
14
|
-
sfuId,
|
|
15
|
-
serviceId,
|
|
16
|
-
mediaUnitId,
|
|
17
|
-
joined,
|
|
18
|
-
} = model;
|
|
19
|
-
|
|
20
|
-
if (!sfuId) return logger.warn(`Sfu model without sfuId: ${JSON.stringify(model)}`);
|
|
21
|
-
if (!serviceId) return logger.warn(`Sfu model without serviceId: ${JSON.stringify(model)}`);
|
|
22
|
-
if (!mediaUnitId) return logger.warn(`Sfu model without mediaUnitId: ${JSON.stringify(model)}`);
|
|
23
|
-
if (!joined) return logger.warn(`Sfu model without joined: ${JSON.stringify(model)}`);
|
|
24
|
-
|
|
25
|
-
const getSfuTransport = async (sfuTransportId: string) => {
|
|
26
|
-
return createSfuTransportEntry(storageProvider, await storageProvider.sfuTransportStorage.get(sfuTransportId));
|
|
27
|
-
};
|
|
28
|
-
const asyncSfuTransportGenerator = async function *() {
|
|
29
|
-
const sfuTransportModels = await Promise.all(
|
|
30
|
-
model.sfuTransportIds.map((sfuTransportId) => storageProvider.sfuTransportStorage.get(sfuTransportId))
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
for (const sfuTransportModel of sfuTransportModels) {
|
|
34
|
-
if (!sfuTransportModel) continue;
|
|
35
|
-
yield createSfuTransportEntry(storageProvider, sfuTransportModel);
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
return {
|
|
40
|
-
sfuId,
|
|
41
|
-
serviceId,
|
|
42
|
-
mediaUnitId,
|
|
43
|
-
joined,
|
|
44
|
-
get marker() {
|
|
45
|
-
return model.marker;
|
|
46
|
-
},
|
|
47
|
-
get sfuTransportIds(): ReadonlyArray<string> {
|
|
48
|
-
return model.sfuTransportIds;
|
|
49
|
-
},
|
|
50
|
-
get sfuTransports(): AsyncIterableIterator<SfuTransportEntry> {
|
|
51
|
-
return asyncIteratorConverter<SfuTransportEntry>(asyncSfuTransportGenerator());
|
|
52
|
-
},
|
|
53
|
-
getSfuTransport,
|
|
54
|
-
refresh: async () => {
|
|
55
|
-
const refreshedModel = await storageProvider.sfuStorage.get(sfuId);
|
|
56
|
-
|
|
57
|
-
if (!refreshedModel) return;
|
|
58
|
-
|
|
59
|
-
model.marker = refreshedModel.marker;
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import * as Models from '../models/Models';
|
|
2
|
-
import { StorageProvider } from '../storages/StorageProvider';
|
|
3
|
-
import { logger } from './SfuEntry';
|
|
4
|
-
|
|
5
|
-
export type SfuInboundRtpPadEntry = ReturnType<typeof createSfuInboundRtpPadEntry>;
|
|
6
|
-
|
|
7
|
-
export function createSfuInboundRtpPadEntry(storageProvider: StorageProvider, model?: Models.SfuInboundRtpPad) {
|
|
8
|
-
if (!model) return;
|
|
9
|
-
const {
|
|
10
|
-
sfuId,
|
|
11
|
-
sfuTransportId,
|
|
12
|
-
added,
|
|
13
|
-
internal,
|
|
14
|
-
rtpPadId,
|
|
15
|
-
mediaUnitId,
|
|
16
|
-
} = model;
|
|
17
|
-
|
|
18
|
-
if (!sfuId) return logger.warn(`SfuInboundRtpPad model without sfuId: ${JSON.stringify(model)}`);
|
|
19
|
-
if (!sfuTransportId) return logger.warn(`SfuInboundRtpPad model without sfuTransportId: ${JSON.stringify(model)}`);
|
|
20
|
-
if (!added) return logger.warn(`SfuInboundRtpPad model without added: ${JSON.stringify(model)}`);
|
|
21
|
-
if (!rtpPadId) return logger.warn(`SfuInboundRtpPad model without rtpPadId: ${JSON.stringify(model)}`);
|
|
22
|
-
if (!mediaUnitId) return logger.warn(`SfuInboundRtpPad model without mediaUnitId: ${JSON.stringify(model)}`);
|
|
23
|
-
|
|
24
|
-
const direction = 'inbound' as const;
|
|
25
|
-
|
|
26
|
-
return {
|
|
27
|
-
sfuId,
|
|
28
|
-
sfuTransportId,
|
|
29
|
-
rtpPadId,
|
|
30
|
-
direction,
|
|
31
|
-
added,
|
|
32
|
-
get internal() {
|
|
33
|
-
return internal === true;
|
|
34
|
-
},
|
|
35
|
-
get marker() {
|
|
36
|
-
return model.marker;
|
|
37
|
-
},
|
|
38
|
-
refresh: async () => {
|
|
39
|
-
const refreshedModel = await storageProvider.sfuInboundRtpPadStorage.get(sfuTransportId);
|
|
40
|
-
|
|
41
|
-
if (!refreshedModel) return;
|
|
42
|
-
|
|
43
|
-
model.marker = refreshedModel.marker;
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import * as Models from '../models/Models';
|
|
2
|
-
import { StorageProvider } from '../storages/StorageProvider';
|
|
3
|
-
import { logger } from './SfuEntry';
|
|
4
|
-
|
|
5
|
-
export type SfuOutboundRtpPadEntry = ReturnType<typeof createSfuOutboundRtpPadEntry>;
|
|
6
|
-
|
|
7
|
-
export function createSfuOutboundRtpPadEntry(storageProvider: StorageProvider, model?: Models.SfuOutboundRtpPad) {
|
|
8
|
-
if (!model) return;
|
|
9
|
-
const {
|
|
10
|
-
sfuId,
|
|
11
|
-
sfuTransportId,
|
|
12
|
-
rtpPadId,
|
|
13
|
-
added,
|
|
14
|
-
internal,
|
|
15
|
-
} = model;
|
|
16
|
-
|
|
17
|
-
if (!sfuId) return logger.warn(`SfuTransport model without sfuId: ${JSON.stringify(model)}`);
|
|
18
|
-
if (!sfuTransportId) return logger.warn(`SfuTransport model without sfuTransportId: ${JSON.stringify(model)}`);
|
|
19
|
-
if (!rtpPadId) return logger.warn(`SfuTransport model without rtpPadId: ${JSON.stringify(model)}`);
|
|
20
|
-
if (!added) return logger.warn(`SfuTransport model without added: ${JSON.stringify(model)}`);
|
|
21
|
-
|
|
22
|
-
const direction = 'outbound' as const;
|
|
23
|
-
|
|
24
|
-
return {
|
|
25
|
-
sfuTransportId,
|
|
26
|
-
sfuId,
|
|
27
|
-
rtpPadId,
|
|
28
|
-
added,
|
|
29
|
-
direction,
|
|
30
|
-
get internal() {
|
|
31
|
-
return internal === true;
|
|
32
|
-
},
|
|
33
|
-
get marker() {
|
|
34
|
-
return model.marker;
|
|
35
|
-
},
|
|
36
|
-
refresh: async () => {
|
|
37
|
-
const refreshedModel = await storageProvider.sfuTransportStorage.get(sfuTransportId);
|
|
38
|
-
|
|
39
|
-
if (!refreshedModel) return;
|
|
40
|
-
|
|
41
|
-
model.marker = refreshedModel.marker;
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import * as Models from '../models/Models';
|
|
2
|
-
import { StorageProvider } from '../storages/StorageProvider';
|
|
3
|
-
import { logger } from './SfuEntry';
|
|
4
|
-
|
|
5
|
-
export type SfuSctpChannelEntry = ReturnType<typeof createSfuSctpChannelEntry>;
|
|
6
|
-
|
|
7
|
-
export function createSfuSctpChannelEntry(storageProvider: StorageProvider, model?: Models.SfuSctpChannel) {
|
|
8
|
-
if (!model) return;
|
|
9
|
-
const {
|
|
10
|
-
sfuId,
|
|
11
|
-
sfuTransportId,
|
|
12
|
-
sfuSctpChannelId,
|
|
13
|
-
opened,
|
|
14
|
-
} = model;
|
|
15
|
-
|
|
16
|
-
model.sfuTransportId;
|
|
17
|
-
|
|
18
|
-
if (!sfuId) return logger.warn(`SfuSctpChannel model without sfuId: ${JSON.stringify(model)}`);
|
|
19
|
-
if (!sfuTransportId) return logger.warn(`SfuSctpChannel model without sfuTransportId: ${JSON.stringify(model)}`);
|
|
20
|
-
if (!sfuSctpChannelId) return logger.warn(`SfuSctpChannel model without sfuSctpChannelId: ${JSON.stringify(model)}`);
|
|
21
|
-
if (!opened) return logger.warn(`SfuSctpChannel model without opened: ${JSON.stringify(model)}`);
|
|
22
|
-
|
|
23
|
-
return {
|
|
24
|
-
sfuId,
|
|
25
|
-
sfuTransportId,
|
|
26
|
-
sfuSctpChannelId,
|
|
27
|
-
opened,
|
|
28
|
-
get marker() {
|
|
29
|
-
return model.marker;
|
|
30
|
-
},
|
|
31
|
-
refresh: async () => {
|
|
32
|
-
const refreshedModel = await storageProvider.sfuSctpChannelStorage.get(sfuSctpChannelId);
|
|
33
|
-
|
|
34
|
-
if (!refreshedModel) return;
|
|
35
|
-
|
|
36
|
-
model.marker = refreshedModel.marker;
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { asyncIteratorConverter } from '../common/utils';
|
|
2
|
-
import * as Models from '../models/Models';
|
|
3
|
-
import { StorageProvider } from '../storages/StorageProvider';
|
|
4
|
-
import { createSfuEntry, logger } from './SfuEntry';
|
|
5
|
-
import { createSfuInboundRtpPadEntry } from './SfuInboundRtpPadEntry';
|
|
6
|
-
import { createSfuOutboundRtpPadEntry } from './SfuOutboundRtpPadEntry';
|
|
7
|
-
import { createSfuSctpChannelEntry } from './SfuSctpChannelEntry';
|
|
8
|
-
|
|
9
|
-
export type SfuTransportEntry = ReturnType<typeof createSfuTransportEntry>;
|
|
10
|
-
|
|
11
|
-
export function createSfuTransportEntry(storageProvider: StorageProvider, model?: Models.SfuTransport) {
|
|
12
|
-
if (!model) return;
|
|
13
|
-
const {
|
|
14
|
-
sfuId,
|
|
15
|
-
transportId: sfuTransportId,
|
|
16
|
-
opened,
|
|
17
|
-
internal,
|
|
18
|
-
} = model;
|
|
19
|
-
|
|
20
|
-
if (!sfuId) return logger.warn(`SfuTransport model without sfuId: ${JSON.stringify(model)}`);
|
|
21
|
-
if (!sfuTransportId) return logger.warn(`SfuTransport model without sfuTransportId: ${JSON.stringify(model)}`);
|
|
22
|
-
if (!opened) return logger.warn(`SfuTransport model without opened: ${JSON.stringify(model)}`);
|
|
23
|
-
|
|
24
|
-
const getSfu = async () => {
|
|
25
|
-
return createSfuEntry(storageProvider, await storageProvider.sfuStorage.get(sfuId));
|
|
26
|
-
};
|
|
27
|
-
const getSfuInboundRtpPad = async (sfuInboundRtpPadId: string) => {
|
|
28
|
-
return createSfuInboundRtpPadEntry(storageProvider, await storageProvider.sfuInboundRtpPadStorage.get(sfuInboundRtpPadId));
|
|
29
|
-
};
|
|
30
|
-
const getSfuOutboundRtpPad = async (sfuOutboundRtpPadId: string) => {
|
|
31
|
-
return createSfuOutboundRtpPadEntry(storageProvider, await storageProvider.sfuOutboundRtpPadStorage.get(sfuOutboundRtpPadId));
|
|
32
|
-
};
|
|
33
|
-
const getSfuSctpChannel = async (sfuSctpChannelId: string) => {
|
|
34
|
-
return createSfuSctpChannelEntry(storageProvider, await storageProvider.sfuSctpChannelStorage.get(sfuSctpChannelId));
|
|
35
|
-
};
|
|
36
|
-
const asyncSfuInboundRtpPadGenerator = async function *() {
|
|
37
|
-
const sfuInboundRtpPadModels = await Promise.all(
|
|
38
|
-
model.inboundRtpPadIds.map((sfuInboundRtpPadId) => storageProvider.sfuInboundRtpPadStorage.get(sfuInboundRtpPadId))
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
for (const sfuInboundRtpPadModel of sfuInboundRtpPadModels) {
|
|
42
|
-
if (!sfuInboundRtpPadModel) continue;
|
|
43
|
-
yield createSfuInboundRtpPadEntry(storageProvider, sfuInboundRtpPadModel);
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const asyncSfuOutboundRtpPadGenerator = async function *() {
|
|
48
|
-
const sfuOutboundRtpPadModels = await Promise.all(
|
|
49
|
-
model.outboundRtpPadIds.map((sfuOutboundRtpPadId) => storageProvider.sfuOutboundRtpPadStorage.get(sfuOutboundRtpPadId))
|
|
50
|
-
);
|
|
51
|
-
|
|
52
|
-
for (const sfuOutboundRtpPadModel of sfuOutboundRtpPadModels) {
|
|
53
|
-
if (!sfuOutboundRtpPadModel) continue;
|
|
54
|
-
yield createSfuOutboundRtpPadEntry(storageProvider, sfuOutboundRtpPadModel);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const asyncSfuSctpChannelGenerator = async function *() {
|
|
59
|
-
const sfuSctpChannelModels = await Promise.all(
|
|
60
|
-
model.sctpChannelIds.map((sfuSctpChannelId) => storageProvider.sfuSctpChannelStorage.get(sfuSctpChannelId))
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
for (const sfuSctpChannelModel of sfuSctpChannelModels) {
|
|
64
|
-
if (!sfuSctpChannelModel) continue;
|
|
65
|
-
yield createSfuSctpChannelEntry(storageProvider, sfuSctpChannelModel);
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
return {
|
|
70
|
-
sfuTransportId,
|
|
71
|
-
sfuId,
|
|
72
|
-
opened,
|
|
73
|
-
get internal() {
|
|
74
|
-
return internal === true;
|
|
75
|
-
},
|
|
76
|
-
get marker() {
|
|
77
|
-
return model.marker;
|
|
78
|
-
},
|
|
79
|
-
get inboundRtpPadIds(): ReadonlyArray<string> {
|
|
80
|
-
return model.inboundRtpPadIds;
|
|
81
|
-
},
|
|
82
|
-
get outboundRtpPadIds(): ReadonlyArray<string> {
|
|
83
|
-
return model.outboundRtpPadIds;
|
|
84
|
-
},
|
|
85
|
-
get sctpChannelIds(): ReadonlyArray<string> {
|
|
86
|
-
return model.sctpChannelIds;
|
|
87
|
-
},
|
|
88
|
-
get inboundRtpPads(): AsyncIterableIterator<ReturnType<typeof createSfuInboundRtpPadEntry>> {
|
|
89
|
-
return asyncIteratorConverter<ReturnType<typeof createSfuInboundRtpPadEntry>>(asyncSfuInboundRtpPadGenerator());
|
|
90
|
-
},
|
|
91
|
-
get outboundRtpPads(): AsyncIterableIterator<ReturnType<typeof createSfuOutboundRtpPadEntry>> {
|
|
92
|
-
return asyncIteratorConverter<ReturnType<typeof createSfuOutboundRtpPadEntry>>(asyncSfuOutboundRtpPadGenerator());
|
|
93
|
-
},
|
|
94
|
-
get sctpChannels(): AsyncIterableIterator<ReturnType<typeof createSfuSctpChannelEntry>> {
|
|
95
|
-
return asyncIteratorConverter<ReturnType<typeof createSfuSctpChannelEntry>>(asyncSfuSctpChannelGenerator());
|
|
96
|
-
},
|
|
97
|
-
getSfu,
|
|
98
|
-
getSfuInboundRtpPad,
|
|
99
|
-
getSfuOutboundRtpPad,
|
|
100
|
-
getSfuSctpChannel,
|
|
101
|
-
refresh: async () => {
|
|
102
|
-
const refreshedModel = await storageProvider.sfuTransportStorage.get(sfuTransportId);
|
|
103
|
-
|
|
104
|
-
if (!refreshedModel) return;
|
|
105
|
-
|
|
106
|
-
model.marker = refreshedModel.marker;
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { createLogger } from '../common/logger';
|
|
2
|
-
import * as Models from '../models/Models';
|
|
3
|
-
import ipaddr from 'ipaddr.js';
|
|
4
|
-
import { EvaluatorProcess } from '..';
|
|
5
|
-
|
|
6
|
-
export const logger = createLogger('SetClientsCoordinateEvaluator');
|
|
7
|
-
|
|
8
|
-
export type ClientCoordinate = {
|
|
9
|
-
latitude: number;
|
|
10
|
-
longitude: number;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export type GetClientCoordinate = (ipAddress: string) => ClientCoordinate | undefined;
|
|
14
|
-
|
|
15
|
-
export function createSetClientsCoordinateEvaluator(
|
|
16
|
-
getCoordinate: GetClientCoordinate,
|
|
17
|
-
): EvaluatorProcess {
|
|
18
|
-
const process: EvaluatorProcess = async (context) => {
|
|
19
|
-
|
|
20
|
-
const clientIds = new Set<string>();
|
|
21
|
-
|
|
22
|
-
for (const observedCall of context.observedCalls.observedCalls()) {
|
|
23
|
-
for (const observedClient of observedCall.observedClients()) {
|
|
24
|
-
clientIds.add(observedClient.clientId);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
if (clientIds.size < 1) return;
|
|
28
|
-
|
|
29
|
-
const storedClients = await context.storages.clientStorage.getAll(clientIds);
|
|
30
|
-
|
|
31
|
-
for (const observedCall of context.observedCalls.observedCalls()) {
|
|
32
|
-
for (const observedClient of observedCall.observedClients()) {
|
|
33
|
-
const { clientId } = observedClient;
|
|
34
|
-
const storedClient = storedClients.get(clientId);
|
|
35
|
-
|
|
36
|
-
if (!storedClient || storedClient.coordinates) continue;
|
|
37
|
-
|
|
38
|
-
let ipAddress: string | undefined;
|
|
39
|
-
|
|
40
|
-
searchForIp: for (const observedPeerConnection of observedClient.observedPeerConnections()) {
|
|
41
|
-
for (const iceLocalCandidate of observedPeerConnection.iceLocalCandidates()) {
|
|
42
|
-
if (!iceLocalCandidate.address) continue;
|
|
43
|
-
|
|
44
|
-
try {
|
|
45
|
-
const addr = ipaddr.parse(iceLocalCandidate.address);
|
|
46
|
-
|
|
47
|
-
ipAddress = addr.toString();
|
|
48
|
-
|
|
49
|
-
break searchForIp;
|
|
50
|
-
} catch (e) {
|
|
51
|
-
logger.warn(`Failed to parse ip address: ${iceLocalCandidate.address}`, e);
|
|
52
|
-
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (!ipAddress) continue;
|
|
60
|
-
|
|
61
|
-
try {
|
|
62
|
-
const coordinate = getCoordinate(ipAddress);
|
|
63
|
-
|
|
64
|
-
if (!coordinate) continue;
|
|
65
|
-
|
|
66
|
-
storedClient.coordinates = new Models.ClientCoordinate({
|
|
67
|
-
latitude: coordinate.latitude,
|
|
68
|
-
longitude: coordinate.longitude,
|
|
69
|
-
});
|
|
70
|
-
} catch (e) {
|
|
71
|
-
logger.warn(`Failed to get coordinate for ip address: ${ipAddress}`, e);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
return process;
|
|
78
|
-
}
|