@observertc/observer-js 1.0.1-797e5af.0 → 1.0.1-7be4daa.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 +2 -0
- package/lib/ObservedCall.d.ts.map +1 -1
- package/lib/ObservedCall.js +4 -0
- package/lib/ObservedCallEventMonitor.d.ts +104 -0
- package/lib/ObservedCallEventMonitor.d.ts.map +1 -0
- package/lib/ObservedCallEventMonitor.js +314 -0
- package/lib/ObservedClient.d.ts +2 -2
- package/lib/ObservedClient.d.ts.map +1 -1
- package/lib/ObservedClient.js +2 -4
- package/lib/ObservedIceCandidatePair.d.ts +2 -1
- package/lib/ObservedIceCandidatePair.d.ts.map +1 -1
- package/lib/ObservedIceCandidatePair.js +17 -1
- package/lib/ObservedPeerConnection.d.ts.map +1 -1
- package/lib/ObservedPeerConnection.js +60 -15
- package/lib/Observer.d.ts +8 -4
- package/lib/Observer.d.ts.map +1 -1
- package/lib/Observer.js +14 -2
- package/lib/ObserverEventMonitor.d.ts +106 -0
- package/lib/ObserverEventMonitor.d.ts.map +1 -0
- package/lib/ObserverEventMonitor.js +320 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -1
- package/lib/schema/ClientEventTypes.d.ts +17 -0
- package/lib/schema/ClientEventTypes.d.ts.map +1 -1
- package/lib/schema/ClientSample.d.ts +1 -1
- package/lib/schema/ClientSample.d.ts.map +1 -1
- package/lib/updaters/{OnAllCallObserverUpdater_.d.ts → OnAllCallObserverUpdater.d.ts} +3 -1
- package/lib/updaters/OnAllCallObserverUpdater.d.ts.map +1 -0
- package/lib/updaters/{OnAllCallObserverUpdater_.js → OnAllCallObserverUpdater.js} +13 -1
- package/lib/updaters/OnAllClientCallUpdater.d.ts +2 -0
- package/lib/updaters/OnAllClientCallUpdater.d.ts.map +1 -1
- package/lib/updaters/OnAllClientCallUpdater.js +16 -0
- package/lib/updaters/{OnAnyCallObserverUpdater_.d.ts → OnAnyCallObserverUpdater.d.ts} +2 -1
- package/lib/updaters/OnAnyCallObserverUpdater.d.ts.map +1 -0
- package/lib/updaters/{OnAnyCallObserverUpdater_.js → OnAnyCallObserverUpdater.js} +11 -1
- package/lib/updaters/OnAnyClientCallUpdater.d.ts +1 -0
- package/lib/updaters/OnAnyClientCallUpdater.d.ts.map +1 -1
- package/lib/updaters/OnAnyClientCallUpdater.js +11 -2
- package/lib/utils/MediasoupRemoteTrackResolver.d.ts +25 -0
- package/lib/utils/MediasoupRemoteTrackResolver.d.ts.map +1 -0
- package/lib/utils/MediasoupRemoteTrackResolver.js +110 -0
- package/package.json +1 -1
- package/src/ObservedCall.ts +5 -0
- package/src/ObservedCallEventMonitor.ts +392 -0
- package/src/ObservedClient.ts +4 -7
- package/src/ObservedIceCandidatePair.ts +18 -2
- package/src/ObservedPeerConnection.ts +60 -30
- package/src/Observer.ts +21 -6
- package/src/ObserverEventMonitor.ts +398 -0
- package/src/index.ts +1 -0
- package/src/schema/ClientEventTypes.ts +18 -0
- package/src/schema/ClientSample.ts +1 -1
- package/src/updaters/{OnAllCallObserverUpdater_.ts → OnAllCallObserverUpdater.ts} +14 -1
- package/src/updaters/OnAllClientCallUpdater.ts +15 -0
- package/src/updaters/{OnAnyCallObserverUpdater_.ts → OnAnyCallObserverUpdater.ts} +12 -3
- package/src/updaters/OnAnyClientCallUpdater.ts +9 -2
- package/src/utils/MediasoupRemoteTrackResolver.ts +155 -0
- package/lib/updaters/OnAllCallObserverUpdater_.d.ts.map +0 -1
- package/lib/updaters/OnAnyCallObserverUpdater_.d.ts.map +0 -1
package/src/ObservedClient.ts
CHANGED
|
@@ -10,7 +10,6 @@ import { ClientMetaTypes } from './schema/ClientMetaTypes';
|
|
|
10
10
|
import { parseJsonAs } from './common/utils';
|
|
11
11
|
import { CalculatedScore } from './scores/CalculatedScore';
|
|
12
12
|
import { Detectors } from './detectors/Detectors';
|
|
13
|
-
import { ObservedClientEventMonitor } from './ObservedClientEventMonitor';
|
|
14
13
|
|
|
15
14
|
const logger = createLogger('ObservedClient');
|
|
16
15
|
|
|
@@ -34,8 +33,9 @@ export type ObservedClientEvents = {
|
|
|
34
33
|
left: [];
|
|
35
34
|
usingturn: [boolean];
|
|
36
35
|
usermediaerror: [string];
|
|
36
|
+
extensionStats: [ExtensionStat];
|
|
37
|
+
clientEvent: [ClientEvent];
|
|
37
38
|
|
|
38
|
-
// do we need this?
|
|
39
39
|
newpeerconnection: [ObservedPeerConnection];
|
|
40
40
|
};
|
|
41
41
|
|
|
@@ -471,8 +471,8 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
471
471
|
}
|
|
472
472
|
break;
|
|
473
473
|
}
|
|
474
|
-
|
|
475
474
|
}
|
|
475
|
+
this.emit('clientEvent', event);
|
|
476
476
|
}
|
|
477
477
|
|
|
478
478
|
public injectMetaData(metaData: ClientMetaData) {
|
|
@@ -550,6 +550,7 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
550
550
|
|
|
551
551
|
public addExtensionStats(stats: ExtensionStat) {
|
|
552
552
|
this.call.observer.emit('client-extension-stats', this, stats);
|
|
553
|
+
this.emit('extensionStats', stats);
|
|
553
554
|
}
|
|
554
555
|
|
|
555
556
|
private _updatePeerConnection(sample: PeerConnectionSample): ObservedPeerConnection | undefined {
|
|
@@ -578,10 +579,6 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
578
579
|
return observedPeerConnection;
|
|
579
580
|
}
|
|
580
581
|
|
|
581
|
-
public createEventMonitor<CTX = unknown>(ctx?: CTX): ObservedClientEventMonitor<CTX> {
|
|
582
|
-
return new ObservedClientEventMonitor<CTX>(this, ctx ?? {} as CTX);
|
|
583
|
-
}
|
|
584
|
-
|
|
585
582
|
private _mergeInjections(sample: ClientSample): ClientSample {
|
|
586
583
|
if (this.closed) return sample;
|
|
587
584
|
|
|
@@ -8,7 +8,7 @@ export class ObservedIceCandidatePair implements IceCandidatePairStats {
|
|
|
8
8
|
transportId?: string | undefined;
|
|
9
9
|
localCandidateId?: string | undefined;
|
|
10
10
|
remoteCandidateId?: string | undefined;
|
|
11
|
-
state?: 'new' | '
|
|
11
|
+
state?: 'new' | 'in-progress' | 'waiting' | 'failed' | 'succeeded' | undefined;
|
|
12
12
|
nominated?: boolean | undefined;
|
|
13
13
|
packetsSent?: number | undefined;
|
|
14
14
|
packetsReceived?: number | undefined;
|
|
@@ -93,7 +93,7 @@ export class ObservedIceCandidatePair implements IceCandidatePairStats {
|
|
|
93
93
|
this.transportId = stats.transportId;
|
|
94
94
|
this.localCandidateId = stats.localCandidateId;
|
|
95
95
|
this.remoteCandidateId = stats.remoteCandidateId;
|
|
96
|
-
this.state = stats.state;
|
|
96
|
+
this.state = this._convertState(stats.state);
|
|
97
97
|
this.nominated = stats.nominated;
|
|
98
98
|
this.packetsSent = stats.packetsSent;
|
|
99
99
|
this.packetsReceived = stats.packetsReceived;
|
|
@@ -115,4 +115,20 @@ export class ObservedIceCandidatePair implements IceCandidatePairStats {
|
|
|
115
115
|
this.attachments = stats.attachments;
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
+
private _convertState(state: string | undefined) {
|
|
119
|
+
switch (state) {
|
|
120
|
+
case 'new':
|
|
121
|
+
case 'in-progress':
|
|
122
|
+
case 'waiting':
|
|
123
|
+
case 'failed':
|
|
124
|
+
case 'succeeded':
|
|
125
|
+
return state;
|
|
126
|
+
case 'cancelled':
|
|
127
|
+
return 'failed';
|
|
128
|
+
case 'inprogress':
|
|
129
|
+
return 'in-progress';
|
|
130
|
+
default:
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
118
134
|
}
|
|
@@ -644,12 +644,14 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
644
644
|
|
|
645
645
|
observedCertificate = new ObservedCertificate(stats.timestamp, stats.id, this);
|
|
646
646
|
|
|
647
|
+
observedCertificate.update(stats);
|
|
648
|
+
|
|
647
649
|
this.observedCertificates.set(stats.id, observedCertificate);
|
|
648
650
|
this.emit('added-certificate', observedCertificate);
|
|
651
|
+
} else {
|
|
652
|
+
observedCertificate.update(stats);
|
|
649
653
|
}
|
|
650
654
|
|
|
651
|
-
observedCertificate.update(stats);
|
|
652
|
-
|
|
653
655
|
return observedCertificate;
|
|
654
656
|
}
|
|
655
657
|
|
|
@@ -666,12 +668,14 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
666
668
|
|
|
667
669
|
observedCodec = new ObservedCodec(stats.timestamp, stats.id, stats.mimeType, this);
|
|
668
670
|
|
|
671
|
+
observedCodec.update(stats);
|
|
672
|
+
|
|
669
673
|
this.observedCodecs.set(stats.id, observedCodec);
|
|
670
674
|
this.emit('added-codec', observedCodec);
|
|
675
|
+
} else {
|
|
676
|
+
observedCodec.update(stats);
|
|
671
677
|
}
|
|
672
678
|
|
|
673
|
-
observedCodec.update(stats);
|
|
674
|
-
|
|
675
679
|
return observedCodec;
|
|
676
680
|
}
|
|
677
681
|
|
|
@@ -688,12 +692,14 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
688
692
|
|
|
689
693
|
observedDataChannel = new ObservedDataChannel(stats.timestamp, stats.id, this);
|
|
690
694
|
|
|
695
|
+
observedDataChannel.update(stats);
|
|
696
|
+
|
|
691
697
|
this.observedDataChannels.set(stats.id, observedDataChannel);
|
|
692
698
|
this.emit('added-data-channel', observedDataChannel);
|
|
699
|
+
} else {
|
|
700
|
+
observedDataChannel.update(stats);
|
|
693
701
|
}
|
|
694
702
|
|
|
695
|
-
observedDataChannel.update(stats);
|
|
696
|
-
|
|
697
703
|
return observedDataChannel;
|
|
698
704
|
}
|
|
699
705
|
|
|
@@ -710,12 +716,14 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
710
716
|
|
|
711
717
|
observedIceCandidate = new ObservedIceCandidate(stats.timestamp, stats.id, this);
|
|
712
718
|
|
|
719
|
+
observedIceCandidate.update(stats);
|
|
720
|
+
|
|
713
721
|
this.observedIceCandidates.set(stats.id, observedIceCandidate);
|
|
714
722
|
this.emit('added-ice-candidate', observedIceCandidate);
|
|
723
|
+
} else {
|
|
724
|
+
observedIceCandidate.update(stats);
|
|
715
725
|
}
|
|
716
726
|
|
|
717
|
-
observedIceCandidate.update(stats);
|
|
718
|
-
|
|
719
727
|
return observedIceCandidate;
|
|
720
728
|
}
|
|
721
729
|
|
|
@@ -732,12 +740,14 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
732
740
|
|
|
733
741
|
observedIceCandidatePair = new ObservedIceCandidatePair(stats.timestamp, stats.id, this);
|
|
734
742
|
|
|
743
|
+
observedIceCandidatePair.update(stats);
|
|
744
|
+
|
|
735
745
|
this.observedIceCandidatesPair.set(stats.id, observedIceCandidatePair);
|
|
736
746
|
this.emit('added-ice-candidate-pair', observedIceCandidatePair);
|
|
747
|
+
} else {
|
|
748
|
+
observedIceCandidatePair.update(stats);
|
|
737
749
|
}
|
|
738
750
|
|
|
739
|
-
observedIceCandidatePair.update(stats);
|
|
740
|
-
|
|
741
751
|
return observedIceCandidatePair;
|
|
742
752
|
}
|
|
743
753
|
|
|
@@ -754,12 +764,14 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
754
764
|
|
|
755
765
|
observedIceTransport = new ObservedIceTransport(stats.timestamp, stats.id, this);
|
|
756
766
|
|
|
767
|
+
observedIceTransport.update(stats);
|
|
768
|
+
|
|
757
769
|
this.observedIceTransports.set(stats.id, observedIceTransport);
|
|
758
770
|
this.emit('added-ice-transport', observedIceTransport);
|
|
771
|
+
} else {
|
|
772
|
+
observedIceTransport.update(stats);
|
|
759
773
|
}
|
|
760
774
|
|
|
761
|
-
observedIceTransport.update(stats);
|
|
762
|
-
|
|
763
775
|
return observedIceTransport;
|
|
764
776
|
}
|
|
765
777
|
|
|
@@ -782,13 +794,15 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
782
794
|
stats.trackIdentifier,
|
|
783
795
|
this
|
|
784
796
|
);
|
|
797
|
+
|
|
798
|
+
observedInboundRtp.update(stats);
|
|
785
799
|
|
|
786
800
|
this.observedInboundRtps.set(stats.ssrc, observedInboundRtp);
|
|
787
801
|
this.emit('added-inbound-rtp', observedInboundRtp);
|
|
802
|
+
} else {
|
|
803
|
+
observedInboundRtp.update(stats);
|
|
788
804
|
}
|
|
789
805
|
|
|
790
|
-
observedInboundRtp.update(stats);
|
|
791
|
-
|
|
792
806
|
return observedInboundRtp;
|
|
793
807
|
}
|
|
794
808
|
|
|
@@ -816,12 +830,14 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
816
830
|
mediaPlayout,
|
|
817
831
|
);
|
|
818
832
|
|
|
833
|
+
observedInboundTrack.update(stats);
|
|
834
|
+
|
|
819
835
|
this.observedInboundTracks.set(stats.id, observedInboundTrack);
|
|
820
836
|
this.emit('added-inbound-track', observedInboundTrack);
|
|
837
|
+
} else {
|
|
838
|
+
observedInboundTrack.update(stats);
|
|
821
839
|
}
|
|
822
840
|
|
|
823
|
-
observedInboundTrack.update(stats);
|
|
824
|
-
|
|
825
841
|
return observedInboundTrack;
|
|
826
842
|
}
|
|
827
843
|
|
|
@@ -843,12 +859,14 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
843
859
|
this
|
|
844
860
|
);
|
|
845
861
|
|
|
862
|
+
observedMediaPlayout.update(stats);
|
|
863
|
+
|
|
846
864
|
this.observedMediaPlayouts.set(stats.id, observedMediaPlayout);
|
|
847
865
|
this.emit('added-media-playout', observedMediaPlayout);
|
|
866
|
+
} else {
|
|
867
|
+
observedMediaPlayout.update(stats);
|
|
848
868
|
}
|
|
849
869
|
|
|
850
|
-
observedMediaPlayout.update(stats);
|
|
851
|
-
|
|
852
870
|
return observedMediaPlayout;
|
|
853
871
|
}
|
|
854
872
|
|
|
@@ -870,12 +888,14 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
870
888
|
this
|
|
871
889
|
);
|
|
872
890
|
|
|
891
|
+
observedMediaSource.update(stats);
|
|
892
|
+
|
|
873
893
|
this.observedMediaSources.set(stats.id, observedMediaSource);
|
|
874
894
|
this.emit('added-media-source', observedMediaSource);
|
|
895
|
+
} else {
|
|
896
|
+
observedMediaSource.update(stats);
|
|
875
897
|
}
|
|
876
898
|
|
|
877
|
-
observedMediaSource.update(stats);
|
|
878
|
-
|
|
879
899
|
return observedMediaSource;
|
|
880
900
|
}
|
|
881
901
|
|
|
@@ -898,11 +918,13 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
898
918
|
this
|
|
899
919
|
);
|
|
900
920
|
|
|
921
|
+
observedOutboundRtp.update(stats);
|
|
922
|
+
|
|
901
923
|
this.observedOutboundRtps.set(stats.ssrc, observedOutboundRtp);
|
|
902
924
|
this.emit('added-outbound-rtp', observedOutboundRtp);
|
|
925
|
+
} else {
|
|
926
|
+
observedOutboundRtp.update(stats);
|
|
903
927
|
}
|
|
904
|
-
|
|
905
|
-
observedOutboundRtp.update(stats);
|
|
906
928
|
|
|
907
929
|
return observedOutboundRtp;
|
|
908
930
|
}
|
|
@@ -930,12 +952,14 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
930
952
|
observedMediaSource,
|
|
931
953
|
);
|
|
932
954
|
|
|
955
|
+
observedOutboundTrack.update(stats);
|
|
956
|
+
|
|
933
957
|
this.observedOutboundTracks.set(stats.id, observedOutboundTrack);
|
|
934
958
|
this.emit('added-outbound-track', observedOutboundTrack);
|
|
959
|
+
} else {
|
|
960
|
+
observedOutboundTrack.update(stats);
|
|
935
961
|
}
|
|
936
962
|
|
|
937
|
-
observedOutboundTrack.update(stats);
|
|
938
|
-
|
|
939
963
|
return observedOutboundTrack;
|
|
940
964
|
}
|
|
941
965
|
|
|
@@ -952,12 +976,14 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
952
976
|
|
|
953
977
|
observedPeerConnectionTransport = new ObservedPeerConnectionTransport(stats.timestamp, stats.id, this);
|
|
954
978
|
|
|
979
|
+
observedPeerConnectionTransport.update(stats);
|
|
980
|
+
|
|
955
981
|
this.observedPeerConnectionTransports.set(stats.id, observedPeerConnectionTransport);
|
|
956
982
|
this.emit('added-peer-connection-transport', observedPeerConnectionTransport);
|
|
983
|
+
} else {
|
|
984
|
+
observedPeerConnectionTransport.update(stats);
|
|
957
985
|
}
|
|
958
986
|
|
|
959
|
-
observedPeerConnectionTransport.update(stats);
|
|
960
|
-
|
|
961
987
|
return observedPeerConnectionTransport;
|
|
962
988
|
}
|
|
963
989
|
|
|
@@ -980,12 +1006,14 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
980
1006
|
this
|
|
981
1007
|
);
|
|
982
1008
|
|
|
1009
|
+
observedRemoteInboundRtp.update(stats);
|
|
1010
|
+
|
|
983
1011
|
this.observedRemoteInboundRtps.set(stats.ssrc, observedRemoteInboundRtp);
|
|
984
1012
|
this.emit('added-remote-inbound-rtp', observedRemoteInboundRtp);
|
|
1013
|
+
} else {
|
|
1014
|
+
observedRemoteInboundRtp.update(stats);
|
|
985
1015
|
}
|
|
986
1016
|
|
|
987
|
-
observedRemoteInboundRtp.update(stats);
|
|
988
|
-
|
|
989
1017
|
return observedRemoteInboundRtp;
|
|
990
1018
|
}
|
|
991
1019
|
|
|
@@ -1008,12 +1036,14 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
1008
1036
|
this
|
|
1009
1037
|
);
|
|
1010
1038
|
|
|
1039
|
+
observedRemoteOutboundRtp.update(stats);
|
|
1040
|
+
|
|
1011
1041
|
this.observedRemoteOutboundRtps.set(stats.ssrc, observedRemoteOutboundRtp);
|
|
1012
1042
|
this.emit('added-remote-outbound-rtp', observedRemoteOutboundRtp);
|
|
1043
|
+
} else {
|
|
1044
|
+
observedRemoteOutboundRtp.update(stats);
|
|
1013
1045
|
}
|
|
1014
1046
|
|
|
1015
|
-
observedRemoteOutboundRtp.update(stats);
|
|
1016
|
-
|
|
1017
1047
|
return observedRemoteOutboundRtp;
|
|
1018
1048
|
}
|
|
1019
1049
|
}
|
package/src/Observer.ts
CHANGED
|
@@ -7,8 +7,10 @@ import { ObservedTURN } from './ObservedTURN';
|
|
|
7
7
|
import { Detectors } from './detectors/Detectors';
|
|
8
8
|
import { Updater } from './updaters/Updater';
|
|
9
9
|
import { OnIntervalUpdater } from './updaters/OnIntervalUpdater';
|
|
10
|
-
import { OnAllCallObserverUpdater } from './updaters/
|
|
11
|
-
import { OnAnyCallObserverUpdater } from './updaters/
|
|
10
|
+
import { OnAllCallObserverUpdater } from './updaters/OnAllCallObserverUpdater';
|
|
11
|
+
import { OnAnyCallObserverUpdater } from './updaters/OnAnyCallObserverUpdater';
|
|
12
|
+
import { ObserverEventMonitor } from './ObserverEventMonitor';
|
|
13
|
+
import { MediasoupRemoteTrackResolver } from './utils/MediasoupRemoteTrackResolver';
|
|
12
14
|
|
|
13
15
|
const logger = createLogger('Observer');
|
|
14
16
|
|
|
@@ -23,11 +25,12 @@ export type ObserverEvents = {
|
|
|
23
25
|
'close': [],
|
|
24
26
|
}
|
|
25
27
|
|
|
26
|
-
export type ObserverConfig = {
|
|
28
|
+
export type ObserverConfig<AppData extends Record<string, unknown> = Record<string, unknown>> = {
|
|
27
29
|
updatePolicy?: 'update-on-any-call-updated' | 'update-when-all-call-updated' | 'update-on-interval',
|
|
28
30
|
updateIntervalInMs?: number,
|
|
29
31
|
defaultCallUpdatePolicy?: ObservedCallSettings['updatePolicy'],
|
|
30
32
|
defaultCallUpdateIntervalInMs?: number,
|
|
33
|
+
appData?: AppData,
|
|
31
34
|
}
|
|
32
35
|
|
|
33
36
|
export declare interface Observer {
|
|
@@ -37,7 +40,7 @@ export declare interface Observer {
|
|
|
37
40
|
emit<U extends keyof ObserverEvents>(event: U, ...args: ObserverEvents[U]): boolean;
|
|
38
41
|
}
|
|
39
42
|
|
|
40
|
-
export class Observer extends EventEmitter {
|
|
43
|
+
export class Observer<AppData extends Record<string, unknown> = Record<string, unknown>> extends EventEmitter {
|
|
41
44
|
public readonly detectors: Detectors;
|
|
42
45
|
|
|
43
46
|
public readonly observedTURN = new ObservedTURN();
|
|
@@ -67,9 +70,10 @@ export class Observer extends EventEmitter {
|
|
|
67
70
|
|
|
68
71
|
private _timer?: ReturnType<typeof setInterval>;
|
|
69
72
|
|
|
70
|
-
public constructor(public readonly config: ObserverConfig = {
|
|
73
|
+
public constructor(public readonly config: ObserverConfig<AppData> = {
|
|
71
74
|
updatePolicy: 'update-when-all-call-updated',
|
|
72
75
|
updateIntervalInMs: undefined,
|
|
76
|
+
appData: {} as AppData,
|
|
73
77
|
}) {
|
|
74
78
|
super();
|
|
75
79
|
this.setMaxListeners(Infinity);
|
|
@@ -108,6 +112,10 @@ export class Observer extends EventEmitter {
|
|
|
108
112
|
this.detectors = new Detectors();
|
|
109
113
|
}
|
|
110
114
|
|
|
115
|
+
public get appData() {
|
|
116
|
+
return this.config.appData;
|
|
117
|
+
}
|
|
118
|
+
|
|
111
119
|
public getObservedCall<T extends Record<string, unknown> = Record<string, unknown>>(callId: string): ObservedCall<T> | undefined {
|
|
112
120
|
if (this.closed || !this.observedCalls.has(callId)) return;
|
|
113
121
|
|
|
@@ -124,12 +132,15 @@ export class Observer extends EventEmitter {
|
|
|
124
132
|
settings.updatePolicy = this.config.defaultCallUpdatePolicy;
|
|
125
133
|
settings.updateIntervalInMs = this.config.defaultCallUpdateIntervalInMs;
|
|
126
134
|
}
|
|
127
|
-
|
|
128
135
|
const observedCall = new ObservedCall(settings, this);
|
|
129
136
|
const onCallUpdated = () => this._onObservedCallUpdated(observedCall);
|
|
130
137
|
|
|
131
138
|
if (this.observedCalls.has(observedCall.callId)) throw new Error(`Observed Call with id ${observedCall.callId} already exists`);
|
|
132
139
|
|
|
140
|
+
if (settings.remoteTrackResolvePolicy === 'mediasoup-sfu') {
|
|
141
|
+
observedCall.remoteTrackResolver = new MediasoupRemoteTrackResolver(observedCall);
|
|
142
|
+
}
|
|
143
|
+
|
|
133
144
|
observedCall.once('close', () => {
|
|
134
145
|
this.observedCalls.delete(observedCall.callId);
|
|
135
146
|
observedCall.off('update', onCallUpdated);
|
|
@@ -210,6 +221,10 @@ export class Observer extends EventEmitter {
|
|
|
210
221
|
this.totalClientIssues += call.deltaNumberOfIssues;
|
|
211
222
|
}
|
|
212
223
|
|
|
224
|
+
public createEventMonitor<CTX = unknown>(ctx?: CTX): ObserverEventMonitor<CTX> {
|
|
225
|
+
return new ObserverEventMonitor<CTX>(this, ctx ?? {} as CTX);
|
|
226
|
+
}
|
|
227
|
+
|
|
213
228
|
// public resetSummaryMetrics() {
|
|
214
229
|
// this.totalAddedCall = 0;
|
|
215
230
|
// this.totalRemovedCall = 0;
|