@observertc/observer-js 0.42.8 → 1.0.1-23e88d8.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.
Files changed (239) hide show
  1. package/.prettierrc +6 -6
  2. package/README.md +0 -104
  3. package/lib/ObservedCall.d.ts +25 -41
  4. package/lib/ObservedCall.d.ts.map +1 -1
  5. package/lib/ObservedCall.js +61 -109
  6. package/lib/ObservedCertificate.d.ts +19 -0
  7. package/lib/ObservedCertificate.d.ts.map +1 -0
  8. package/lib/ObservedCertificate.js +38 -0
  9. package/lib/ObservedClient.d.ts +33 -143
  10. package/lib/ObservedClient.d.ts.map +1 -1
  11. package/lib/ObservedClient.js +156 -757
  12. package/lib/ObservedCodec.d.ts +22 -0
  13. package/lib/ObservedCodec.d.ts.map +1 -0
  14. package/lib/ObservedCodec.js +45 -0
  15. package/lib/ObservedDataChannel.d.ts +20 -70
  16. package/lib/ObservedDataChannel.d.ts.map +1 -1
  17. package/lib/ObservedDataChannel.js +39 -109
  18. package/lib/ObservedIceCandidate.d.ts +29 -0
  19. package/lib/ObservedIceCandidate.d.ts.map +1 -0
  20. package/lib/ObservedIceCandidate.js +59 -0
  21. package/lib/ObservedIceCandidatePair.d.ts +40 -0
  22. package/lib/ObservedIceCandidatePair.d.ts.map +1 -0
  23. package/lib/ObservedIceCandidatePair.js +83 -0
  24. package/lib/ObservedIceTransport.d.ts +32 -0
  25. package/lib/ObservedIceTransport.d.ts.map +1 -0
  26. package/lib/ObservedIceTransport.js +65 -0
  27. package/lib/ObservedInboundRtp.d.ts +92 -0
  28. package/lib/ObservedInboundRtp.d.ts.map +1 -0
  29. package/lib/ObservedInboundRtp.js +193 -0
  30. package/lib/ObservedInboundTrack.d.ts +29 -0
  31. package/lib/ObservedInboundTrack.d.ts.map +1 -0
  32. package/lib/ObservedInboundTrack.js +57 -0
  33. package/lib/ObservedMediaPlayout.d.ts +22 -0
  34. package/lib/ObservedMediaPlayout.d.ts.map +1 -0
  35. package/lib/ObservedMediaPlayout.js +42 -0
  36. package/lib/ObservedMediaSource.d.ts +28 -0
  37. package/lib/ObservedMediaSource.d.ts.map +1 -0
  38. package/lib/ObservedMediaSource.js +55 -0
  39. package/lib/ObservedOutboundRtp.d.ts +62 -0
  40. package/lib/ObservedOutboundRtp.d.ts.map +1 -0
  41. package/lib/ObservedOutboundRtp.js +144 -0
  42. package/lib/ObservedOutboundTrack.d.ts +29 -0
  43. package/lib/ObservedOutboundTrack.d.ts.map +1 -0
  44. package/lib/ObservedOutboundTrack.js +57 -0
  45. package/lib/ObservedPeerConnection.d.ts +118 -78
  46. package/lib/ObservedPeerConnection.d.ts.map +1 -1
  47. package/lib/ObservedPeerConnection.js +556 -359
  48. package/lib/ObservedPeerConnectionTransport.d.ts +17 -0
  49. package/lib/ObservedPeerConnectionTransport.d.ts.map +1 -0
  50. package/lib/ObservedPeerConnectionTransport.js +34 -0
  51. package/lib/ObservedRemoteInboundRtp.d.ts +30 -0
  52. package/lib/ObservedRemoteInboundRtp.d.ts.map +1 -0
  53. package/lib/ObservedRemoteInboundRtp.js +60 -0
  54. package/lib/ObservedRemoteOutboundRtp.d.ts +30 -0
  55. package/lib/ObservedRemoteOutboundRtp.d.ts.map +1 -0
  56. package/lib/ObservedRemoteOutboundRtp.js +60 -0
  57. package/lib/Observer.d.ts +30 -53
  58. package/lib/Observer.d.ts.map +1 -1
  59. package/lib/Observer.js +52 -225
  60. package/lib/common/Middleware.d.ts +10 -1
  61. package/lib/common/Middleware.d.ts.map +1 -1
  62. package/lib/common/Middleware.js +55 -36
  63. package/lib/common/logger.d.ts +8 -4
  64. package/lib/common/logger.d.ts.map +1 -1
  65. package/lib/common/logger.js +44 -68
  66. package/lib/common/types.d.ts +0 -21
  67. package/lib/common/types.d.ts.map +1 -1
  68. package/lib/common/types.js +1 -0
  69. package/lib/common/utils.d.ts +1 -0
  70. package/lib/common/utils.d.ts.map +1 -1
  71. package/lib/common/utils.js +13 -1
  72. package/lib/detectors/Detector.d.ts +5 -0
  73. package/lib/detectors/Detector.d.ts.map +1 -0
  74. package/lib/detectors/Detector.js +3 -0
  75. package/lib/detectors/Detectors.d.ts +11 -0
  76. package/lib/detectors/Detectors.d.ts.map +1 -0
  77. package/lib/detectors/Detectors.js +34 -0
  78. package/lib/index.d.ts +23 -24
  79. package/lib/index.d.ts.map +1 -1
  80. package/lib/index.js +41 -41
  81. package/lib/monitors/TurnUsageMonitor.d.ts +0 -52
  82. package/lib/monitors/TurnUsageMonitor.d.ts.map +1 -1
  83. package/lib/monitors/TurnUsageMonitor.js +145 -120
  84. package/lib/schema/ClientEventTypes.d.ts +33 -0
  85. package/lib/schema/ClientEventTypes.d.ts.map +1 -0
  86. package/lib/schema/ClientEventTypes.js +38 -0
  87. package/lib/schema/ClientMetaTypes.d.ts +34 -0
  88. package/lib/schema/ClientMetaTypes.d.ts.map +1 -0
  89. package/lib/schema/ClientMetaTypes.js +16 -0
  90. package/lib/schema/ClientSample.d.ts +1333 -0
  91. package/lib/schema/ClientSample.d.ts.map +1 -0
  92. package/lib/schema/ClientSample.js +4 -0
  93. package/lib/scores/CalculatedScore.d.ts +6 -0
  94. package/lib/scores/CalculatedScore.d.ts.map +1 -0
  95. package/lib/scores/DefaultCallScoreCalculator.d.ts +7 -0
  96. package/lib/scores/DefaultCallScoreCalculator.d.ts.map +1 -0
  97. package/lib/scores/DefaultCallScoreCalculator.js +21 -0
  98. package/lib/scores/ScoreCalculator.d.ts +4 -0
  99. package/lib/scores/ScoreCalculator.d.ts.map +1 -0
  100. package/lib/scores/ScoreCalculator.js +2 -0
  101. package/lib/utils/CallUpdater.d.ts +5 -0
  102. package/lib/utils/CallUpdater.d.ts.map +1 -0
  103. package/lib/utils/CallUpdater.js +2 -0
  104. package/lib/utils/OnAllClientCallUpdater.d.ts +16 -0
  105. package/lib/utils/OnAllClientCallUpdater.d.ts.map +1 -0
  106. package/lib/utils/OnAllClientCallUpdater.js +58 -0
  107. package/lib/utils/RemoteTrackResolver.d.ts +7 -0
  108. package/lib/utils/RemoteTrackResolver.d.ts.map +1 -0
  109. package/lib/utils/RemoteTrackResolver.js +2 -0
  110. package/lib/utils/onAnyClientCallUpdater.d.ts +14 -0
  111. package/lib/utils/onAnyClientCallUpdater.d.ts.map +1 -0
  112. package/lib/utils/onAnyClientCallUpdater.js +51 -0
  113. package/package.json +4 -4
  114. package/src/ObservedCall.ts +74 -167
  115. package/src/ObservedCertificate.ts +43 -0
  116. package/src/ObservedClient.ts +173 -1083
  117. package/src/ObservedCodec.ts +49 -0
  118. package/src/ObservedDataChannel.ts +36 -178
  119. package/src/ObservedIceCandidate.ts +64 -0
  120. package/src/ObservedIceCandidatePair.ts +92 -0
  121. package/src/ObservedIceTransport.ts +70 -0
  122. package/src/ObservedInboundRtp.ts +205 -0
  123. package/src/ObservedInboundTrack.ts +70 -0
  124. package/src/ObservedMediaPlayout.ts +49 -0
  125. package/src/ObservedMediaSource.ts +60 -0
  126. package/src/ObservedOutboundRtp.ts +156 -0
  127. package/src/ObservedOutboundTrack.ts +69 -0
  128. package/src/ObservedPeerConnection.ts +743 -401
  129. package/src/ObservedPeerConnectionTransport.ts +38 -0
  130. package/src/ObservedRemoteInboundRtp.ts +64 -0
  131. package/src/ObservedRemoteOutboundRtp.ts +65 -0
  132. package/src/Observer.ts +65 -285
  133. package/src/common/Middleware.ts +70 -42
  134. package/src/common/logger.ts +60 -69
  135. package/src/common/types.ts +0 -42
  136. package/src/common/utils.ts +12 -0
  137. package/src/detectors/Detector.ts +6 -0
  138. package/src/detectors/Detectors.ts +38 -0
  139. package/src/index.ts +23 -87
  140. package/src/monitors/TurnUsageMonitor.ts +164 -164
  141. package/src/schema/ClientEventTypes.ts +36 -0
  142. package/src/schema/ClientMetaTypes.ts +41 -0
  143. package/src/schema/ClientSample.ts +1682 -0
  144. package/src/scores/CalculatedScore.ts +6 -0
  145. package/src/scores/DefaultCallScoreCalculator.ts +23 -0
  146. package/src/scores/ScoreCalculator.ts +3 -0
  147. package/src/utils/CallUpdater.ts +5 -0
  148. package/src/utils/OnAllClientCallUpdater.ts +68 -0
  149. package/src/utils/RemoteTrackResolver.ts +12 -0
  150. package/src/utils/onAnyClientCallUpdater.ts +59 -0
  151. package/tsconfig.json +3 -3
  152. package/lib/ObservedICE.d.ts +0 -64
  153. package/lib/ObservedICE.d.ts.map +0 -1
  154. package/lib/ObservedICE.js +0 -141
  155. package/lib/ObservedInboundAudioTrack.d.ts +0 -96
  156. package/lib/ObservedInboundAudioTrack.d.ts.map +0 -1
  157. package/lib/ObservedInboundAudioTrack.js +0 -217
  158. package/lib/ObservedInboundVideoTrack.d.ts +0 -101
  159. package/lib/ObservedInboundVideoTrack.d.ts.map +0 -1
  160. package/lib/ObservedInboundVideoTrack.js +0 -232
  161. package/lib/ObservedOutboundAudioTrack.d.ts +0 -87
  162. package/lib/ObservedOutboundAudioTrack.d.ts.map +0 -1
  163. package/lib/ObservedOutboundAudioTrack.js +0 -186
  164. package/lib/ObservedOutboundVideoTrack.d.ts +0 -91
  165. package/lib/ObservedOutboundVideoTrack.d.ts.map +0 -1
  166. package/lib/ObservedOutboundVideoTrack.js +0 -193
  167. package/lib/ObservedSfu.d.ts +0 -59
  168. package/lib/ObservedSfu.d.ts.map +0 -1
  169. package/lib/ObservedSfu.js +0 -157
  170. package/lib/ObservedSfuInboundRtpPad.d.ts +0 -42
  171. package/lib/ObservedSfuInboundRtpPad.d.ts.map +0 -1
  172. package/lib/ObservedSfuInboundRtpPad.js +0 -71
  173. package/lib/ObservedSfuOutboundRtpPad.d.ts +0 -42
  174. package/lib/ObservedSfuOutboundRtpPad.d.ts.map +0 -1
  175. package/lib/ObservedSfuOutboundRtpPad.js +0 -72
  176. package/lib/ObservedSfuSctpChannel.d.ts +0 -42
  177. package/lib/ObservedSfuSctpChannel.d.ts.map +0 -1
  178. package/lib/ObservedSfuSctpChannel.js +0 -57
  179. package/lib/ObservedSfuTransport.d.ts +0 -58
  180. package/lib/ObservedSfuTransport.d.ts.map +0 -1
  181. package/lib/ObservedSfuTransport.js +0 -120
  182. package/lib/RemoteTrackAssigner.d.ts +0 -14
  183. package/lib/RemoteTrackAssigner.d.ts.map +0 -1
  184. package/lib/RemoteTrackAssigner.js +0 -52
  185. package/lib/ReportsCollector.d.ts +0 -109
  186. package/lib/ReportsCollector.d.ts.map +0 -1
  187. package/lib/ReportsCollector.js +0 -207
  188. package/lib/common/CalculatedScore.d.ts +0 -80
  189. package/lib/common/CalculatedScore.d.ts.map +0 -1
  190. package/lib/common/CalculatedScore.js +0 -162
  191. package/lib/common/CallEventType.d.ts +0 -63
  192. package/lib/common/CallEventType.d.ts.map +0 -1
  193. package/lib/common/CallEventType.js +0 -39
  194. package/lib/common/CallMetaReports.d.ts +0 -42
  195. package/lib/common/CallMetaReports.d.ts.map +0 -1
  196. package/lib/common/CallMetaReports.js +0 -36
  197. package/lib/common/QualityScoreUtils.d.ts +0 -1
  198. package/lib/common/QualityScoreUtils.d.ts.map +0 -1
  199. package/lib/common/QualityScoreUtils.js +0 -1
  200. package/lib/common/TypedEventEmitter.d.ts +0 -22
  201. package/lib/common/TypedEventEmitter.d.ts.map +0 -1
  202. package/lib/common/TypedEventEmitter.js +0 -11
  203. package/lib/common/callEventReports.d.ts +0 -10
  204. package/lib/common/callEventReports.d.ts.map +0 -1
  205. package/lib/common/callEventReports.js +0 -112
  206. package/lib/monitors/CallSummary.d.ts +0 -37
  207. package/lib/monitors/CallSummary.d.ts.map +0 -1
  208. package/lib/monitors/CallSummaryMonitor.d.ts +0 -32
  209. package/lib/monitors/CallSummaryMonitor.d.ts.map +0 -1
  210. package/lib/monitors/CallSummaryMonitor.js +0 -152
  211. package/lib/monitors/ClientIssueMonitor.d.ts +0 -32
  212. package/lib/monitors/ClientIssueMonitor.d.ts.map +0 -1
  213. package/lib/monitors/ClientIssueMonitor.js +0 -49
  214. package/lib/monitors/SfuServerMonitor.d.ts +0 -79
  215. package/lib/monitors/SfuServerMonitor.d.ts.map +0 -1
  216. package/lib/monitors/SfuServerMonitor.js +0 -198
  217. package/src/ObservedICE.ts +0 -237
  218. package/src/ObservedInboundAudioTrack.ts +0 -344
  219. package/src/ObservedInboundVideoTrack.ts +0 -361
  220. package/src/ObservedOutboundAudioTrack.ts +0 -307
  221. package/src/ObservedOutboundVideoTrack.ts +0 -319
  222. package/src/ObservedSfu.ts +0 -231
  223. package/src/ObservedSfuInboundRtpPad.ts +0 -106
  224. package/src/ObservedSfuOutboundRtpPad.ts +0 -107
  225. package/src/ObservedSfuSctpChannel.ts +0 -103
  226. package/src/ObservedSfuTransport.ts +0 -185
  227. package/src/RemoteTrackAssigner.ts +0 -68
  228. package/src/ReportsCollector.ts +0 -336
  229. package/src/common/CalculatedScore.ts +0 -188
  230. package/src/common/CallEventType.ts +0 -69
  231. package/src/common/CallMetaReports.ts +0 -82
  232. package/src/common/QualityScoreUtils.ts +0 -0
  233. package/src/common/TypedEventEmitter.ts +0 -32
  234. package/src/common/callEventReports.ts +0 -178
  235. package/src/monitors/CallSummary.ts +0 -38
  236. package/src/monitors/CallSummaryMonitor.ts +0 -192
  237. package/src/monitors/ClientIssueMonitor.ts +0 -88
  238. package/src/monitors/SfuServerMonitor.ts +0 -285
  239. /package/lib/{monitors/CallSummary.js → scores/CalculatedScore.js} +0 -0
@@ -0,0 +1,49 @@
1
+ import { ObservedPeerConnection } from './ObservedPeerConnection';
2
+ import { CodecStats } from './schema/ClientSample';
3
+
4
+ export class ObservedCodec implements CodecStats {
5
+ private _visited = false;
6
+ public appData?: Record<string, unknown>;
7
+
8
+ payloadType?: number | undefined;
9
+ transportId?: string | undefined;
10
+ clockRate?: number | undefined;
11
+ channels?: number | undefined;
12
+ sdpFmtpLine?: string | undefined;
13
+ attachments?: Record<string, unknown> | undefined;
14
+
15
+ public constructor(
16
+ public timestamp: number,
17
+ public id: string,
18
+ public mimeType: string,
19
+ private readonly _peerConnection: ObservedPeerConnection
20
+ ) {}
21
+
22
+ public get visited() {
23
+ const visited = this._visited;
24
+
25
+ this._visited = false;
26
+
27
+ return visited;
28
+ }
29
+
30
+ public getPeerConnection() {
31
+ return this._peerConnection;
32
+ }
33
+
34
+ public getIceTransport() {
35
+ return this._peerConnection.observedIceTransports.get(this.transportId ?? '');
36
+ }
37
+
38
+ public update(stats: CodecStats) {
39
+ this._visited = true;
40
+
41
+ this.timestamp = stats.timestamp;
42
+ this.payloadType = stats.payloadType;
43
+ this.transportId = stats.transportId;
44
+ this.clockRate = stats.clockRate;
45
+ this.channels = stats.channels;
46
+ this.sdpFmtpLine = stats.sdpFmtpLine;
47
+ this.attachments = stats.attachments;
48
+ }
49
+ }
@@ -1,195 +1,53 @@
1
- import { EventEmitter } from 'events';
2
1
  import { ObservedPeerConnection } from './ObservedPeerConnection';
3
- import { DataChannel } from '@observertc/sample-schemas-js';
4
- import { ClientDataChannelReport } from '@observertc/report-schemas-js';
2
+ import { DataChannelStats } from './schema/ClientSample';
5
3
 
6
4
  export type ObservedDataChannelState = 'connecting' | 'open' | 'closing' | 'closed';
7
5
 
8
- export type ObservedDataChannelModel = {
9
- channelId: number;
10
- }
11
-
12
- export type ObservedDataChannelEvents = {
13
- update: [{
14
- elapsedTimeInMs: number;
15
- }],
16
- close: [],
17
- };
18
-
19
- export type ObservedInboundTrackStats = {
20
- ssrc: number;
21
- bitrate: number;
22
- fractionLost: number;
23
- rttInMs?: number;
24
- lostPackets?: number;
25
- receivedPackets?: number;
26
- receivedFrames?: number;
27
- decodedFrames?: number;
28
- droppedFrames?: number;
29
- receivedSamples?: number;
30
- silentConcealedSamples?: number;
31
- fractionLoss?: number;
32
- };
33
-
34
- // {
35
- // [Property in keyof ObservedInboundTrackStats<K>]: ObservedInboundTrackStats<K>[Property];
36
- // }
37
-
38
- export declare interface ObservedDataChannel {
39
- on<U extends keyof ObservedDataChannelEvents>(event: U, listener: (...args: ObservedDataChannelEvents[U]) => void): this;
40
- off<U extends keyof ObservedDataChannelEvents>(event: U, listener: (...args: ObservedDataChannelEvents[U]) => void): this;
41
- once<U extends keyof ObservedDataChannelEvents>(event: U, listener: (...args: ObservedDataChannelEvents[U]) => void): this;
42
- emit<U extends keyof ObservedDataChannelEvents>(event: U, ...args: ObservedDataChannelEvents[U]): boolean;
43
- update(sample: DataChannel, timestamp: number): void;
44
- }
45
-
46
- export class ObservedDataChannel extends EventEmitter {
47
- public readonly created = Date.now();
48
- public visited = false;
49
-
50
- private _stats?: DataChannel;
51
-
52
- private _closed = false;
53
- private _updated = Date.now();
54
- public bitrate = 0;
55
- public marker?: string;
56
-
57
- public totalReceivedMessages = 0;
58
- public totalSentMessages = 0;
59
- public totalBytesReceived = 0;
60
- public totalBytesSent = 0;
6
+ export class ObservedDataChannel implements DataChannelStats {
7
+ private _visited = false;
61
8
 
62
- public deltaReceivedMessages = 0;
63
- public deltaSentMessages = 0;
64
- public deltaBytesReceived = 0;
65
- public deltaBytesSent = 0;
9
+ label?: string | undefined;
10
+ protocol?: string | undefined;
11
+ dataChannelIdentifier?: number | undefined;
12
+ state?: string | undefined;
13
+ messagesSent?: number | undefined;
14
+ bytesSent?: number | undefined;
15
+ messagesReceived?: number | undefined;
16
+ bytesReceived?: number | undefined;
17
+ attachments?: Record<string, unknown> | undefined;
18
+
19
+ public appData?: Record<string, unknown>;
66
20
 
67
21
  public constructor(
68
- private readonly _model: ObservedDataChannelModel,
69
- public readonly peerConnection: ObservedPeerConnection,
22
+ public timestamp: number,
23
+ public id: string,
24
+ private readonly _peerConnection: ObservedPeerConnection,
70
25
  ) {
71
- super();
72
- this.setMaxListeners(Infinity);
73
- }
74
-
75
- public get serviceId() {
76
- return this.peerConnection.serviceId;
77
- }
78
-
79
- public get roomId() {
80
- return this.peerConnection.roomId;
81
- }
82
-
83
- public get callId() {
84
- return this.peerConnection.callId;
85
- }
86
-
87
- public get clientId() {
88
- return this.peerConnection.clientId;
89
- }
90
-
91
- public get mediaUnitId() {
92
- return this.peerConnection.mediaUnitId;
93
- }
94
-
95
- public get peerConnectionId() {
96
- return this.peerConnection.peerConnectionId;
97
- }
98
-
99
- public get channelId() {
100
- return this._model.channelId;
101
26
  }
102
27
 
103
- public get updated() {
104
- return this._updated;
105
- }
106
-
107
- public get state(): ObservedDataChannelState | undefined {
108
- return this._stats?.state as ObservedDataChannelState | undefined;
109
- }
110
-
111
- public get label() {
112
- return this._stats?.label;
113
- }
114
-
115
- public get protocol() {
116
- return this._stats?.protocol;
117
- }
118
-
119
- public get reports() {
120
- return this.peerConnection.reports;
121
- }
122
-
123
- public get stats() {
124
- return this._stats;
125
- }
126
-
127
- public get closed() {
128
- return this._closed;
129
- }
130
-
131
- public close() {
132
- if (this._closed) return;
133
-
134
- this._closed = true;
135
-
136
- this.emit('close');
28
+ public get visited() {
29
+ const visited = this._visited;
30
+
31
+ this._visited = false;
32
+
33
+ return visited;
137
34
  }
138
35
 
139
- public resetMetrics() {
140
- this.bitrate = 0;
141
- this.totalReceivedMessages = 0;
142
- this.totalSentMessages = 0;
143
- this.totalBytesReceived = 0;
144
- this.totalBytesSent = 0;
145
- this.deltaReceivedMessages = 0;
146
- this.deltaSentMessages = 0;
147
- this.deltaBytesReceived = 0;
36
+ public getPeerConnection() {
37
+ return this._peerConnection;
148
38
  }
149
39
 
150
- public update(sample: DataChannel, timestamp: number) {
151
- if (this._closed) return;
152
-
153
- const now = Date.now();
154
-
155
- const report: ClientDataChannelReport = {
156
- serviceId: this.peerConnection.client.call.serviceId,
157
- roomId: this.peerConnection.client.call.roomId,
158
- callId: this.peerConnection.client.call.callId,
159
- clientId: this.peerConnection.client.clientId,
160
- userId: this.peerConnection.client.userId,
161
- mediaUnitId: this.peerConnection.client.mediaUnitId,
162
- ...sample,
163
- timestamp,
164
- sampleSeq: -1,
165
- marker: this.marker,
166
- };
167
-
168
- this.reports.addClientDataChannelReport(report);
169
-
170
- sample.bytesReceived;
171
- sample.bytesSent;
172
- sample.messageReceived;
173
- sample.messageSent;
174
-
175
- const elapsedTimeInMs = Math.max(1, now - this._updated);
176
-
177
- this.bitrate = ((sample.bytesReceived ?? 0) - (this._stats?.bytesReceived ?? 0)) * 8 / (elapsedTimeInMs / 1000);
178
- this.deltaSentMessages = (sample.messageSent ?? 0) - (this._stats?.messageSent ?? 0);
179
- this.deltaReceivedMessages = (sample.messageReceived ?? 0) - (this._stats?.messageReceived ?? 0);
180
- this.deltaBytesSent = (sample.bytesSent ?? 0) - (this._stats?.bytesSent ?? 0);
181
- this.deltaBytesReceived = (sample.bytesReceived ?? 0) - (this._stats?.bytesReceived ?? 0);
182
-
183
- this.totalBytesReceived = sample.bytesReceived ?? 0;
184
- this.totalBytesSent = sample.bytesSent ?? 0;
185
- this.totalReceivedMessages = sample.messageReceived ?? 0;
186
- this.totalSentMessages = sample.messageSent ?? 0;
40
+ public update(stats: DataChannelStats) {
41
+ this._visited = true;
187
42
 
188
- this.visited = true;
189
- this._stats = sample;
190
- this._updated = timestamp;
191
- this.emit('update', {
192
- elapsedTimeInMs,
193
- });
43
+ this.label = stats.label;
44
+ this.protocol = stats.protocol;
45
+ this.dataChannelIdentifier = stats.dataChannelIdentifier;
46
+ this.state = stats.state;
47
+ this.messagesSent = stats.messagesSent;
48
+ this.bytesSent = stats.bytesSent;
49
+ this.messagesReceived = stats.messagesReceived;
50
+ this.bytesReceived = stats.bytesReceived;
51
+ this.attachments = stats.attachments;
194
52
  }
195
53
  }
@@ -0,0 +1,64 @@
1
+ import { ObservedPeerConnection } from './ObservedPeerConnection';
2
+ import { IceCandidateStats } from './schema/ClientSample';
3
+
4
+ export class ObservedIceCandidate implements IceCandidateStats {
5
+ private _visited = false;
6
+ public appData?: Record<string, unknown>;
7
+
8
+ transportId?: string | undefined;
9
+ address?: string | undefined;
10
+ port?: number | undefined;
11
+ protocol?: string | undefined;
12
+ candidateType?: string | undefined;
13
+ priority?: number | undefined;
14
+ url?: string | undefined;
15
+ relayProtocol?: string | undefined;
16
+ foundation?: string | undefined;
17
+ relatedAddress?: string | undefined;
18
+ relatedPort?: number | undefined;
19
+ usernameFragment?: string | undefined;
20
+ tcpType?: string | undefined;
21
+ attachments?: Record<string, unknown> | undefined;
22
+
23
+ public constructor(
24
+ public timestamp: number,
25
+ public id: string,
26
+ private readonly _peerConnection: ObservedPeerConnection
27
+ ) {}
28
+
29
+ public get visited() {
30
+ const visited = this._visited;
31
+
32
+ this._visited = false;
33
+
34
+ return visited;
35
+ }
36
+
37
+ public getPeerConnection() {
38
+ return this._peerConnection;
39
+ }
40
+
41
+ public getIceTransport() {
42
+ return this._peerConnection.observedIceTransports.get(this.transportId ?? '');
43
+ }
44
+
45
+ public update(stats: IceCandidateStats) {
46
+ this._visited = true;
47
+
48
+ this.timestamp = stats.timestamp;
49
+ this.transportId = stats.transportId;
50
+ this.address = stats.address;
51
+ this.port = stats.port;
52
+ this.protocol = stats.protocol;
53
+ this.candidateType = stats.candidateType;
54
+ this.priority = stats.priority;
55
+ this.url = stats.url;
56
+ this.relayProtocol = stats.relayProtocol;
57
+ this.foundation = stats.foundation;
58
+ this.relatedAddress = stats.relatedAddress;
59
+ this.relatedPort = stats.relatedPort;
60
+ this.usernameFragment = stats.usernameFragment;
61
+ this.tcpType = stats.tcpType;
62
+ this.attachments = stats.attachments;
63
+ }
64
+ }
@@ -0,0 +1,92 @@
1
+ import { ObservedPeerConnection } from './ObservedPeerConnection';
2
+ import { IceCandidatePairStats } from './schema/ClientSample';
3
+
4
+ export class ObservedIceCandidatePair implements IceCandidatePairStats {
5
+ private _visited = false;
6
+ public appData?: Record<string, unknown>;
7
+
8
+ transportId?: string | undefined;
9
+ localCandidateId?: string | undefined;
10
+ remoteCandidateId?: string | undefined;
11
+ state?: 'new' | 'inProgress' | 'failed' | 'succeeded' | undefined;
12
+ nominated?: boolean | undefined;
13
+ packetsSent?: number | undefined;
14
+ packetsReceived?: number | undefined;
15
+ bytesSent?: number | undefined;
16
+ bytesReceived?: number | undefined;
17
+ lastPacketSentTimestamp?: number | undefined;
18
+ lastPacketReceivedTimestamp?: number | undefined;
19
+ totalRoundTripTime?: number | undefined;
20
+ currentRoundTripTime?: number | undefined;
21
+ availableOutgoingBitrate?: number | undefined;
22
+ availableIncomingBitrate?: number | undefined;
23
+ requestsReceived?: number | undefined;
24
+ requestsSent?: number | undefined;
25
+ responsesReceived?: number | undefined;
26
+ responsesSent?: number | undefined;
27
+ consentRequestsSent?: number | undefined;
28
+ packetsDiscardedOnSend?: number | undefined;
29
+ bytesDiscardedOnSend?: number | undefined;
30
+ attachments?: Record<string, unknown> | undefined;
31
+
32
+ public constructor(
33
+ public timestamp: number,
34
+ public id: string,
35
+ private readonly _peerConnection: ObservedPeerConnection,
36
+ ) {
37
+ }
38
+
39
+ public get visited() {
40
+ const visited = this._visited;
41
+
42
+ this._visited = false;
43
+
44
+ return visited;
45
+ }
46
+
47
+ public getPeerConnection() {
48
+ return this._peerConnection;
49
+ }
50
+
51
+ public getIceTransport() {
52
+ return this._peerConnection.observedIceTransports.get(this.transportId ?? '');
53
+ }
54
+
55
+ public getLocalCandidate() {
56
+ return this._peerConnection.observedIceCandidates.get(this.localCandidateId ?? '');
57
+ }
58
+
59
+ public getRemoteCandidate() {
60
+ return this._peerConnection.observedIceCandidates.get(this.remoteCandidateId ?? '');
61
+ }
62
+
63
+ public update(stats: IceCandidatePairStats) {
64
+ this._visited = true;
65
+
66
+ this.timestamp = stats.timestamp;
67
+ this.transportId = stats.transportId;
68
+ this.localCandidateId = stats.localCandidateId;
69
+ this.remoteCandidateId = stats.remoteCandidateId;
70
+ this.state = stats.state;
71
+ this.nominated = stats.nominated;
72
+ this.packetsSent = stats.packetsSent;
73
+ this.packetsReceived = stats.packetsReceived;
74
+ this.bytesSent = stats.bytesSent;
75
+ this.bytesReceived = stats.bytesReceived;
76
+ this.lastPacketSentTimestamp = stats.lastPacketSentTimestamp;
77
+ this.lastPacketReceivedTimestamp = stats.lastPacketReceivedTimestamp;
78
+ this.totalRoundTripTime = stats.totalRoundTripTime;
79
+ this.currentRoundTripTime = stats.currentRoundTripTime;
80
+ this.availableOutgoingBitrate = stats.availableOutgoingBitrate;
81
+ this.availableIncomingBitrate = stats.availableIncomingBitrate;
82
+ this.requestsReceived = stats.requestsReceived;
83
+ this.requestsSent = stats.requestsSent;
84
+ this.responsesReceived = stats.responsesReceived;
85
+ this.responsesSent = stats.responsesSent;
86
+ this.consentRequestsSent = stats.consentRequestsSent;
87
+ this.packetsDiscardedOnSend = stats.packetsDiscardedOnSend;
88
+ this.bytesDiscardedOnSend = stats.bytesDiscardedOnSend;
89
+ this.attachments = stats.attachments;
90
+ }
91
+
92
+ }
@@ -0,0 +1,70 @@
1
+ import { ObservedPeerConnection } from './ObservedPeerConnection';
2
+ import { IceTransportStats } from './schema/ClientSample';
3
+
4
+ export class ObservedIceTransport implements IceTransportStats {
5
+ private _visited = false;
6
+ public appData?: Record<string, unknown>;
7
+
8
+ packetsSent?: number | undefined;
9
+ packetsReceived?: number | undefined;
10
+ bytesSent?: number | undefined;
11
+ bytesReceived?: number | undefined;
12
+ iceRole?: string | undefined;
13
+ iceLocalUsernameFragment?: string | undefined;
14
+ dtlsState?: string | undefined;
15
+ iceState?: string | undefined;
16
+ selectedCandidatePairId?: string | undefined;
17
+ localCertificateId?: string | undefined;
18
+ remoteCertificateId?: string | undefined;
19
+ tlsVersion?: string | undefined;
20
+ dtlsCipher?: string | undefined;
21
+ dtlsRole?: string | undefined;
22
+ srtpCipher?: string | undefined;
23
+ selectedCandidatePairChanges?: number | undefined;
24
+ attachments?: Record<string, unknown> | undefined;
25
+
26
+ public constructor(
27
+ public timestamp: number,
28
+ public id: string,
29
+ private readonly _peerConnection: ObservedPeerConnection
30
+ ) {}
31
+
32
+ public get visited() {
33
+ const visited = this._visited;
34
+
35
+ this._visited = false;
36
+
37
+ return visited;
38
+ }
39
+
40
+ public getPeerConnection() {
41
+ return this._peerConnection;
42
+ }
43
+
44
+ public getSelectedCandidatePair() {
45
+ return this._peerConnection.observedIceCandidatesPair.get(this.selectedCandidatePairId ?? '');
46
+ }
47
+
48
+ public update(stats: IceTransportStats) {
49
+ this._visited = true;
50
+
51
+ this.timestamp = stats.timestamp;
52
+ this.packetsSent = stats.packetsSent;
53
+ this.packetsReceived = stats.packetsReceived;
54
+ this.bytesSent = stats.bytesSent;
55
+ this.bytesReceived = stats.bytesReceived;
56
+ this.iceRole = stats.iceRole;
57
+ this.iceLocalUsernameFragment = stats.iceLocalUsernameFragment;
58
+ this.dtlsState = stats.dtlsState;
59
+ this.iceState = stats.iceState;
60
+ this.selectedCandidatePairId = stats.selectedCandidatePairId;
61
+ this.localCertificateId = stats.localCertificateId;
62
+ this.remoteCertificateId = stats.remoteCertificateId;
63
+ this.tlsVersion = stats.tlsVersion;
64
+ this.dtlsCipher = stats.dtlsCipher;
65
+ this.dtlsRole = stats.dtlsRole;
66
+ this.srtpCipher = stats.srtpCipher;
67
+ this.selectedCandidatePairChanges = stats.selectedCandidatePairChanges;
68
+ this.attachments = stats.attachments;
69
+ }
70
+ }