@observertc/observer-js 0.42.8 → 1.0.0-5f150eb.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 (303) hide show
  1. package/.prettierrc +6 -6
  2. package/README.md +493 -63
  3. package/lib/ObservedCall.d.ts +48 -43
  4. package/lib/ObservedCall.d.ts.map +1 -1
  5. package/lib/ObservedCall.js +164 -107
  6. package/lib/ObservedCallEventMonitor.d.ts +107 -0
  7. package/lib/ObservedCallEventMonitor.d.ts.map +1 -0
  8. package/lib/ObservedCallEventMonitor.js +321 -0
  9. package/lib/ObservedCallSummary.d.ts +18 -0
  10. package/lib/ObservedCallSummary.d.ts.map +1 -0
  11. package/lib/ObservedCertificate.d.ts +19 -0
  12. package/lib/ObservedCertificate.d.ts.map +1 -0
  13. package/lib/ObservedCertificate.js +38 -0
  14. package/lib/ObservedClient.d.ts +78 -145
  15. package/lib/ObservedClient.d.ts.map +1 -1
  16. package/lib/ObservedClient.js +661 -746
  17. package/lib/ObservedClientEventMonitor.d.ts +91 -0
  18. package/lib/ObservedClientEventMonitor.d.ts.map +1 -0
  19. package/lib/ObservedClientEventMonitor.js +254 -0
  20. package/lib/ObservedClientSummary.d.ts +23 -0
  21. package/lib/ObservedClientSummary.d.ts.map +1 -0
  22. package/lib/ObservedClientSummary.js +2 -0
  23. package/lib/ObservedCodec.d.ts +22 -0
  24. package/lib/ObservedCodec.d.ts.map +1 -0
  25. package/lib/ObservedCodec.js +45 -0
  26. package/lib/ObservedDataChannel.d.ts +25 -69
  27. package/lib/ObservedDataChannel.d.ts.map +1 -1
  28. package/lib/ObservedDataChannel.js +69 -109
  29. package/lib/ObservedIceCandidate.d.ts +29 -0
  30. package/lib/ObservedIceCandidate.d.ts.map +1 -0
  31. package/lib/ObservedIceCandidate.js +59 -0
  32. package/lib/ObservedIceCandidatePair.d.ts +45 -0
  33. package/lib/ObservedIceCandidatePair.d.ts.map +1 -0
  34. package/lib/ObservedIceCandidatePair.js +127 -0
  35. package/lib/ObservedIceTransport.d.ts +36 -0
  36. package/lib/ObservedIceTransport.d.ts.map +1 -0
  37. package/lib/ObservedIceTransport.js +93 -0
  38. package/lib/ObservedInboundRtp.d.ts +92 -0
  39. package/lib/ObservedInboundRtp.d.ts.map +1 -0
  40. package/lib/ObservedInboundRtp.js +193 -0
  41. package/lib/ObservedInboundTrack.d.ts +34 -0
  42. package/lib/ObservedInboundTrack.d.ts.map +1 -0
  43. package/lib/ObservedInboundTrack.js +92 -0
  44. package/lib/ObservedMediaPlayout.d.ts +22 -0
  45. package/lib/ObservedMediaPlayout.d.ts.map +1 -0
  46. package/lib/ObservedMediaPlayout.js +42 -0
  47. package/lib/ObservedMediaSource.d.ts +28 -0
  48. package/lib/ObservedMediaSource.d.ts.map +1 -0
  49. package/lib/ObservedMediaSource.js +55 -0
  50. package/lib/ObservedOutboundRtp.d.ts +62 -0
  51. package/lib/ObservedOutboundRtp.d.ts.map +1 -0
  52. package/lib/ObservedOutboundRtp.js +144 -0
  53. package/lib/ObservedOutboundTrack.d.ts +34 -0
  54. package/lib/ObservedOutboundTrack.d.ts.map +1 -0
  55. package/lib/ObservedOutboundTrack.js +65 -0
  56. package/lib/ObservedPeerConnection.d.ts +154 -80
  57. package/lib/ObservedPeerConnection.d.ts.map +1 -1
  58. package/lib/ObservedPeerConnection.js +724 -357
  59. package/lib/ObservedPeerConnectionTransport.d.ts +17 -0
  60. package/lib/ObservedPeerConnectionTransport.d.ts.map +1 -0
  61. package/lib/ObservedPeerConnectionTransport.js +34 -0
  62. package/lib/ObservedRemoteInboundRtp.d.ts +30 -0
  63. package/lib/ObservedRemoteInboundRtp.d.ts.map +1 -0
  64. package/lib/ObservedRemoteInboundRtp.js +60 -0
  65. package/lib/ObservedRemoteOutboundRtp.d.ts +30 -0
  66. package/lib/ObservedRemoteOutboundRtp.d.ts.map +1 -0
  67. package/lib/ObservedRemoteOutboundRtp.js +60 -0
  68. package/lib/ObservedTURN.d.ts +31 -0
  69. package/lib/ObservedTURN.d.ts.map +1 -0
  70. package/lib/ObservedTURN.js +58 -0
  71. package/lib/ObservedTurnServer.d.ts +25 -0
  72. package/lib/ObservedTurnServer.d.ts.map +1 -0
  73. package/lib/ObservedTurnServer.js +59 -0
  74. package/lib/Observer.d.ts +46 -54
  75. package/lib/Observer.d.ts.map +1 -1
  76. package/lib/Observer.js +131 -226
  77. package/lib/ObserverEventMonitor.d.ts +141 -0
  78. package/lib/ObserverEventMonitor.d.ts.map +1 -0
  79. package/lib/ObserverEventMonitor.js +440 -0
  80. package/lib/ObserverSummary.d.ts +13 -0
  81. package/lib/ObserverSummary.d.ts.map +1 -0
  82. package/lib/ObserverSummary.js +2 -0
  83. package/lib/Reports.d.ts +85 -0
  84. package/lib/Reports.d.ts.map +1 -0
  85. package/lib/Reports.js +2 -0
  86. package/lib/common/Middleware.d.ts +10 -1
  87. package/lib/common/Middleware.d.ts.map +1 -1
  88. package/lib/common/Middleware.js +55 -36
  89. package/lib/common/logger.d.ts +8 -4
  90. package/lib/common/logger.d.ts.map +1 -1
  91. package/lib/common/logger.js +44 -68
  92. package/lib/common/types.d.ts +0 -21
  93. package/lib/common/types.d.ts.map +1 -1
  94. package/lib/common/types.js +1 -0
  95. package/lib/common/utils.d.ts +3 -1
  96. package/lib/common/utils.d.ts.map +1 -1
  97. package/lib/common/utils.js +23 -3
  98. package/lib/detectors/Detector.d.ts +5 -0
  99. package/lib/detectors/Detector.d.ts.map +1 -0
  100. package/lib/detectors/Detector.js +3 -0
  101. package/lib/detectors/Detectors.d.ts +11 -0
  102. package/lib/detectors/Detectors.d.ts.map +1 -0
  103. package/lib/detectors/Detectors.js +34 -0
  104. package/lib/index.d.ts +27 -24
  105. package/lib/index.d.ts.map +1 -1
  106. package/lib/index.js +45 -41
  107. package/lib/mediasoup/ObservedMediaRouter.d.ts +10 -0
  108. package/lib/mediasoup/ObservedMediaRouter.d.ts.map +1 -0
  109. package/lib/mediasoup/ObservedMediaRouter.js +6 -0
  110. package/lib/monitors/TurnUsageMonitor.d.ts +0 -52
  111. package/lib/monitors/TurnUsageMonitor.d.ts.map +1 -1
  112. package/lib/monitors/TurnUsageMonitor.js +145 -120
  113. package/lib/schema/ClientEventTypes.d.ts +228 -0
  114. package/lib/schema/ClientEventTypes.d.ts.map +1 -0
  115. package/lib/schema/ClientEventTypes.js +41 -0
  116. package/lib/schema/ClientMetaTypes.d.ts +34 -0
  117. package/lib/schema/ClientMetaTypes.d.ts.map +1 -0
  118. package/lib/schema/ClientMetaTypes.js +16 -0
  119. package/lib/schema/ClientSample.d.ts +1333 -0
  120. package/lib/schema/ClientSample.d.ts.map +1 -0
  121. package/lib/schema/ClientSample.js +4 -0
  122. package/lib/scores/CalculatedScore.d.ts +6 -0
  123. package/lib/scores/CalculatedScore.d.ts.map +1 -0
  124. package/lib/scores/CalculatedScore.js +2 -0
  125. package/lib/scores/DefaultCallScoreCalculator.d.ts +7 -0
  126. package/lib/scores/DefaultCallScoreCalculator.d.ts.map +1 -0
  127. package/lib/scores/DefaultCallScoreCalculator.js +21 -0
  128. package/lib/scores/ScoreCalculator.d.ts +4 -0
  129. package/lib/scores/ScoreCalculator.d.ts.map +1 -0
  130. package/lib/scores/ScoreCalculator.js +2 -0
  131. package/lib/updaters/CallUpdater.d.ts +5 -0
  132. package/lib/updaters/CallUpdater.d.ts.map +1 -0
  133. package/lib/updaters/CallUpdater.js +2 -0
  134. package/lib/updaters/ObserverUpdater.d.ts +5 -0
  135. package/lib/updaters/ObserverUpdater.d.ts.map +1 -0
  136. package/lib/updaters/ObserverUpdater.js +2 -0
  137. package/lib/updaters/OnAllCallObserverUpdater.d.ts +15 -0
  138. package/lib/updaters/OnAllCallObserverUpdater.d.ts.map +1 -0
  139. package/lib/updaters/OnAllCallObserverUpdater.js +50 -0
  140. package/lib/updaters/OnAllClientCallUpdater.d.ts +15 -0
  141. package/lib/updaters/OnAllClientCallUpdater.d.ts.map +1 -0
  142. package/lib/updaters/OnAllClientCallUpdater.js +53 -0
  143. package/lib/updaters/OnAnyCallObserverUpdater.d.ts +12 -0
  144. package/lib/updaters/OnAnyCallObserverUpdater.d.ts.map +1 -0
  145. package/lib/updaters/OnAnyCallObserverUpdater.js +37 -0
  146. package/lib/updaters/OnAnyClientCallUpdater.d.ts +12 -0
  147. package/lib/updaters/OnAnyClientCallUpdater.d.ts.map +1 -0
  148. package/lib/updaters/OnAnyClientCallUpdater.js +36 -0
  149. package/lib/updaters/OnIntervalUpdater.d.ts +10 -0
  150. package/lib/updaters/OnIntervalUpdater.d.ts.map +1 -0
  151. package/lib/updaters/OnIntervalUpdater.js +17 -0
  152. package/lib/updaters/Updater.d.ts +6 -0
  153. package/lib/updaters/Updater.d.ts.map +1 -0
  154. package/lib/updaters/Updater.js +2 -0
  155. package/lib/utils/MediasoupRemoteTrackResolver.d.ts +25 -0
  156. package/lib/utils/MediasoupRemoteTrackResolver.d.ts.map +1 -0
  157. package/lib/utils/MediasoupRemoteTrackResolver.js +110 -0
  158. package/lib/utils/RemoteTrackResolver.d.ts +7 -0
  159. package/lib/utils/RemoteTrackResolver.d.ts.map +1 -0
  160. package/lib/utils/RemoteTrackResolver.js +2 -0
  161. package/package.json +4 -4
  162. package/src/ObservedCall.ts +243 -161
  163. package/src/ObservedCallEventMonitor.ts +402 -0
  164. package/src/ObservedCallSummary.ts +22 -0
  165. package/src/ObservedCertificate.ts +43 -0
  166. package/src/ObservedClient.ts +716 -1002
  167. package/src/ObservedClientEventMonitor.ts +309 -0
  168. package/src/ObservedClientSummary.ts +24 -0
  169. package/src/ObservedCodec.ts +49 -0
  170. package/src/ObservedDataChannel.ts +71 -181
  171. package/src/ObservedIceCandidate.ts +64 -0
  172. package/src/ObservedIceCandidatePair.ts +134 -0
  173. package/src/ObservedIceTransport.ts +99 -0
  174. package/src/ObservedInboundRtp.ts +205 -0
  175. package/src/ObservedInboundTrack.ts +105 -0
  176. package/src/ObservedMediaPlayout.ts +49 -0
  177. package/src/ObservedMediaSource.ts +60 -0
  178. package/src/ObservedOutboundRtp.ts +156 -0
  179. package/src/ObservedOutboundTrack.ts +82 -0
  180. package/src/ObservedPeerConnection.ts +933 -402
  181. package/src/ObservedPeerConnectionTransport.ts +38 -0
  182. package/src/ObservedRemoteInboundRtp.ts +64 -0
  183. package/src/ObservedRemoteOutboundRtp.ts +65 -0
  184. package/src/ObservedTURN.ts +86 -0
  185. package/src/ObservedTurnServer.ts +72 -0
  186. package/src/Observer.ts +183 -298
  187. package/src/ObserverEventMonitor.ts +561 -0
  188. package/src/ObserverSummary.ts +15 -0
  189. package/src/Reports.ts +87 -0
  190. package/src/common/Middleware.ts +70 -42
  191. package/src/common/logger.ts +60 -69
  192. package/src/common/types.ts +0 -42
  193. package/src/common/utils.ts +24 -2
  194. package/src/detectors/Detector.ts +6 -0
  195. package/src/detectors/Detectors.ts +38 -0
  196. package/src/index.ts +30 -88
  197. package/src/mediasoup/ObservedMediaRouter.ts +10 -0
  198. package/src/monitors/TurnUsageMonitor.ts +164 -164
  199. package/src/schema/ClientEventTypes.ts +280 -0
  200. package/src/schema/ClientMetaTypes.ts +41 -0
  201. package/src/schema/ClientSample.ts +1682 -0
  202. package/src/scores/CalculatedScore.ts +6 -0
  203. package/src/scores/DefaultCallScoreCalculator.ts +23 -0
  204. package/src/scores/ScoreCalculator.ts +3 -0
  205. package/src/updaters/CallUpdater.ts +5 -0
  206. package/src/updaters/ObserverUpdater.ts +5 -0
  207. package/src/updaters/OnAllCallObserverUpdater.ts +59 -0
  208. package/src/updaters/OnAllClientCallUpdater.ts +61 -0
  209. package/src/updaters/OnAnyCallObserverUpdater.ts +41 -0
  210. package/src/updaters/OnAnyClientCallUpdater.ts +39 -0
  211. package/src/updaters/OnIntervalUpdater.ts +19 -0
  212. package/src/updaters/Updater.ts +5 -0
  213. package/src/utils/MediasoupRemoteTrackResolver.ts +155 -0
  214. package/src/utils/RemoteTrackResolver.ts +12 -0
  215. package/tsconfig.json +3 -3
  216. package/lib/ObservedICE.d.ts +0 -64
  217. package/lib/ObservedICE.d.ts.map +0 -1
  218. package/lib/ObservedICE.js +0 -141
  219. package/lib/ObservedInboundAudioTrack.d.ts +0 -96
  220. package/lib/ObservedInboundAudioTrack.d.ts.map +0 -1
  221. package/lib/ObservedInboundAudioTrack.js +0 -217
  222. package/lib/ObservedInboundVideoTrack.d.ts +0 -101
  223. package/lib/ObservedInboundVideoTrack.d.ts.map +0 -1
  224. package/lib/ObservedInboundVideoTrack.js +0 -232
  225. package/lib/ObservedOutboundAudioTrack.d.ts +0 -87
  226. package/lib/ObservedOutboundAudioTrack.d.ts.map +0 -1
  227. package/lib/ObservedOutboundAudioTrack.js +0 -186
  228. package/lib/ObservedOutboundVideoTrack.d.ts +0 -91
  229. package/lib/ObservedOutboundVideoTrack.d.ts.map +0 -1
  230. package/lib/ObservedOutboundVideoTrack.js +0 -193
  231. package/lib/ObservedSfu.d.ts +0 -59
  232. package/lib/ObservedSfu.d.ts.map +0 -1
  233. package/lib/ObservedSfu.js +0 -157
  234. package/lib/ObservedSfuInboundRtpPad.d.ts +0 -42
  235. package/lib/ObservedSfuInboundRtpPad.d.ts.map +0 -1
  236. package/lib/ObservedSfuInboundRtpPad.js +0 -71
  237. package/lib/ObservedSfuOutboundRtpPad.d.ts +0 -42
  238. package/lib/ObservedSfuOutboundRtpPad.d.ts.map +0 -1
  239. package/lib/ObservedSfuOutboundRtpPad.js +0 -72
  240. package/lib/ObservedSfuSctpChannel.d.ts +0 -42
  241. package/lib/ObservedSfuSctpChannel.d.ts.map +0 -1
  242. package/lib/ObservedSfuSctpChannel.js +0 -57
  243. package/lib/ObservedSfuTransport.d.ts +0 -58
  244. package/lib/ObservedSfuTransport.d.ts.map +0 -1
  245. package/lib/ObservedSfuTransport.js +0 -120
  246. package/lib/RemoteTrackAssigner.d.ts +0 -14
  247. package/lib/RemoteTrackAssigner.d.ts.map +0 -1
  248. package/lib/RemoteTrackAssigner.js +0 -52
  249. package/lib/ReportsCollector.d.ts +0 -109
  250. package/lib/ReportsCollector.d.ts.map +0 -1
  251. package/lib/ReportsCollector.js +0 -207
  252. package/lib/common/CalculatedScore.d.ts +0 -80
  253. package/lib/common/CalculatedScore.d.ts.map +0 -1
  254. package/lib/common/CalculatedScore.js +0 -162
  255. package/lib/common/CallEventType.d.ts +0 -63
  256. package/lib/common/CallEventType.d.ts.map +0 -1
  257. package/lib/common/CallEventType.js +0 -39
  258. package/lib/common/CallMetaReports.d.ts +0 -42
  259. package/lib/common/CallMetaReports.d.ts.map +0 -1
  260. package/lib/common/CallMetaReports.js +0 -36
  261. package/lib/common/QualityScoreUtils.d.ts +0 -1
  262. package/lib/common/QualityScoreUtils.d.ts.map +0 -1
  263. package/lib/common/QualityScoreUtils.js +0 -1
  264. package/lib/common/TypedEventEmitter.d.ts +0 -22
  265. package/lib/common/TypedEventEmitter.d.ts.map +0 -1
  266. package/lib/common/TypedEventEmitter.js +0 -11
  267. package/lib/common/callEventReports.d.ts +0 -10
  268. package/lib/common/callEventReports.d.ts.map +0 -1
  269. package/lib/common/callEventReports.js +0 -112
  270. package/lib/monitors/CallSummary.d.ts +0 -37
  271. package/lib/monitors/CallSummary.d.ts.map +0 -1
  272. package/lib/monitors/CallSummaryMonitor.d.ts +0 -32
  273. package/lib/monitors/CallSummaryMonitor.d.ts.map +0 -1
  274. package/lib/monitors/CallSummaryMonitor.js +0 -152
  275. package/lib/monitors/ClientIssueMonitor.d.ts +0 -32
  276. package/lib/monitors/ClientIssueMonitor.d.ts.map +0 -1
  277. package/lib/monitors/ClientIssueMonitor.js +0 -49
  278. package/lib/monitors/SfuServerMonitor.d.ts +0 -79
  279. package/lib/monitors/SfuServerMonitor.d.ts.map +0 -1
  280. package/lib/monitors/SfuServerMonitor.js +0 -198
  281. package/src/ObservedICE.ts +0 -237
  282. package/src/ObservedInboundAudioTrack.ts +0 -344
  283. package/src/ObservedInboundVideoTrack.ts +0 -361
  284. package/src/ObservedOutboundAudioTrack.ts +0 -307
  285. package/src/ObservedOutboundVideoTrack.ts +0 -319
  286. package/src/ObservedSfu.ts +0 -231
  287. package/src/ObservedSfuInboundRtpPad.ts +0 -106
  288. package/src/ObservedSfuOutboundRtpPad.ts +0 -107
  289. package/src/ObservedSfuSctpChannel.ts +0 -103
  290. package/src/ObservedSfuTransport.ts +0 -185
  291. package/src/RemoteTrackAssigner.ts +0 -68
  292. package/src/ReportsCollector.ts +0 -336
  293. package/src/common/CalculatedScore.ts +0 -188
  294. package/src/common/CallEventType.ts +0 -69
  295. package/src/common/CallMetaReports.ts +0 -82
  296. package/src/common/QualityScoreUtils.ts +0 -0
  297. package/src/common/TypedEventEmitter.ts +0 -32
  298. package/src/common/callEventReports.ts +0 -178
  299. package/src/monitors/CallSummary.ts +0 -38
  300. package/src/monitors/CallSummaryMonitor.ts +0 -192
  301. package/src/monitors/ClientIssueMonitor.ts +0 -88
  302. package/src/monitors/SfuServerMonitor.ts +0 -285
  303. /package/lib/{monitors/CallSummary.js → ObservedCallSummary.js} +0 -0
@@ -1,56 +1,84 @@
1
1
  export type Middleware<T> = (
2
2
  input: T,
3
- next: (nextInput: T) => void,
3
+ next: (nextInput: T) => void
4
4
  ) => void;
5
5
 
6
6
  export interface Processor<T> {
7
+ finalCallback?: Callback<T>;
7
8
  process(value: T): void;
8
9
  addMiddleware(...middlewares: Middleware<T>[]): Processor<T>;
9
10
  removeMiddleware(...middlewares: Middleware<T>[]): Processor<T>;
10
11
  }
11
12
 
12
- export function createProcessor<T>(
13
- ): Processor<T> {
14
- const stack: Middleware<T>[] = [];
15
- const result: Processor<T> = {
16
- addMiddleware: (...middlewares: Middleware<T>[]) => {
17
- if (middlewares && 0 < middlewares.length) {
18
- stack.push(...middlewares);
19
- }
20
-
21
- return result;
22
- },
13
+ type Callback<T> = (input: T) => void;
14
+
15
+ class Executor<T> {
16
+ public done = false;
17
+ private index = 0;
18
+ private prevIndex = -1;
19
+
20
+ constructor(
21
+ private readonly stack: Middleware<T>[],
22
+ private readonly finalCallback?: Callback<T>
23
+ ) {
24
+ }
25
+
26
+ // Executes the middleware stack
27
+ public execute(input: T): void {
28
+ if (this.index <= this.prevIndex) {
29
+ throw new Error('Middleware must call next() only once!');
30
+ } else if (this.done) {
31
+ throw new Error('Middleware stack has already been executed!');
32
+ }
33
+
34
+ this.prevIndex = this.index;
35
+
36
+ const middleware = this.stack[this.index];
37
+
38
+ this.index++;
39
+
40
+ if (middleware) {
41
+ return middleware(input, (nextInput: T) => this.execute(nextInput));
42
+ }
43
+
44
+ this.done = true;
45
+ this.finalCallback?.(input);
46
+ }
47
+ }
48
+
49
+ export class MiddlewareProcessor<T> implements Processor<T> {
50
+ private stack: Middleware<T>[] = [];
51
+ public finalCallback?: Callback<T>;
52
+
53
+ public addMiddleware(...middlewares: Middleware<T>[]): Processor<T> {
54
+ if (middlewares && middlewares.length > 0) {
55
+ this.stack.push(...middlewares);
56
+ }
57
+
58
+ return this;
59
+ }
23
60
 
24
- removeMiddleware: (...middlewares: Middleware<T>[]) => {
25
- if (middlewares && 0 < middlewares.length) {
26
- for (const process of middlewares) {
27
- const index = stack.indexOf(process);
61
+ public removeMiddleware(...middlewares: Middleware<T>[]): Processor<T> {
62
+ if (middlewares && middlewares.length > 0) {
63
+ for (const middleware of middlewares) {
64
+ const index = this.stack.indexOf(middleware);
28
65
 
29
- if (0 < index) stack.splice(index, 1);
66
+ if (index >= 0) {
67
+ this.stack.splice(index, 1);
30
68
  }
31
69
  }
32
-
33
- return result;
34
- },
35
- process: (value: T) => {
36
- let prevIndex = -1;
37
- const execute = (index: number, input: T): void => {
38
- if (index <= prevIndex) {
39
- throw new Error('middleware must call next() only once!');
40
- }
41
- prevIndex = index;
42
- const middleware = stack[index];
43
-
44
- if (!middleware) return;
45
-
46
- const next = (nextInput: T) => execute(index + 1, nextInput);
47
-
48
- return middleware(input, next);
49
- };
50
-
51
- return execute(0, value);
52
- },
53
- };
54
-
55
- return result;
56
- }
70
+ }
71
+
72
+ return this;
73
+ }
74
+
75
+ public process(value: T): void {
76
+ if (this.stack.length === 0) {
77
+ return this.finalCallback?.(value);
78
+ }
79
+
80
+ const executor = new Executor(this.stack, this.finalCallback);
81
+
82
+ executor.execute(value);
83
+ }
84
+ }
@@ -1,5 +1,3 @@
1
- export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent';
2
-
3
1
  export interface Logger {
4
2
  /* eslint-disable @typescript-eslint/no-explicit-any */
5
3
  trace(...args: any[]): void;
@@ -13,79 +11,72 @@ export interface Logger {
13
11
  error(...args: any[]): void;
14
12
  }
15
13
 
16
- let logLevel: LogLevel = 'error';
17
- const loggers = new Map<string, Logger>();
18
- let target: Logger | null = {
19
- // eslint-disable-next-line no-console
20
- trace: (...args: any[]) => console.log(...args),
21
- // eslint-disable-next-line no-console
22
- debug: (...args: any[]) => console.log(...args),
23
- // eslint-disable-next-line no-console
24
- info: (...args: any[]) => console.log(...args),
25
- // eslint-disable-next-line no-console
26
- warn: (...args: any[]) => console.warn(...args),
27
- // eslint-disable-next-line no-console
28
- error: (...args: any[]) => console.error(...args),
29
- };
30
-
31
- export function setLogLevel(level: LogLevel) {
32
- logLevel = level;
33
- const moduleNames = Array.from(loggers.keys());
34
-
35
- loggers.clear();
36
-
37
- moduleNames.forEach((moduleName) => createLogger(moduleName));
14
+ export interface ObserverLogger {
15
+ /* eslint-disable @typescript-eslint/no-explicit-any */
16
+ trace(module: string, ...args: any[]): void;
17
+ /* eslint-disable @typescript-eslint/no-explicit-any */
18
+ debug(module: string, ...args: any[]): void;
19
+ /* eslint-disable @typescript-eslint/no-explicit-any */
20
+ info(module: string, ...args: any[]): void;
21
+ /* eslint-disable @typescript-eslint/no-explicit-any */
22
+ warn(module: string, ...args: any[]): void;
23
+ /* eslint-disable @typescript-eslint/no-explicit-any */
24
+ error(module: string, ...args: any[]): void;
38
25
  }
39
26
 
40
- export const getLogLevel = () => {
41
- return logLevel;
42
- };
27
+ let mainLogger: ObserverLogger = new class implements ObserverLogger {
28
+ trace = () => void 0;
29
+ // trace(module: string, ...args: any[]) {
30
+ // // eslint-disable-next-line no-console
31
+ // console.log(`[TRACE] ${module}`, ...args);
32
+ // }
43
33
 
44
- export function forwardLogsTo(logger: Logger | null) {
45
- target = logger;
46
- }
34
+ debug(module: string, ...args: any[]) {
35
+ // eslint-disable-next-line no-console
36
+ console.log(`[DEBUG] ${module}`, ...args);
37
+ }
38
+
39
+ info(module: string, ...args: any[]) {
40
+ // eslint-disable-next-line no-console
41
+ console.info(`[INFO] ${module}`, ...args);
42
+ }
47
43
 
48
- const COLORS = {
49
- black: '\x1b[30m',
50
- red: '\x1b[31m',
51
- green: '\x1b[32m',
52
- yellow: '\x1b[33m',
53
- blue: '\x1b[34m',
54
- magenta: '\x1b[35m',
55
- cyan: '\x1b[36m',
56
- white: '\x1b[37m',
57
- default: '\x1b[39m',
58
- };
44
+ warn(module: string, ...args: any[]) {
45
+ // eslint-disable-next-line no-console
46
+ console.warn(`[WARN] ${module}`, ...args);
47
+ }
59
48
 
60
- export function createLogger(moduleName: string): Logger {
61
- if (loggers.has(moduleName)) {
49
+ error(module: string, ...args: any[]) {
62
50
  // eslint-disable-next-line no-console
63
- console.warn(`Logger for module ${moduleName} already exists`);
51
+ console.error(`[ERROR] ${module}`, ...args);
64
52
  }
65
- const trace = logLevel === 'trace' ? (message: string, ...args: any[]) => {
66
- target?.trace(`${COLORS.magenta}[TRACE]${COLORS.default} ${moduleName} ${message}`, ...args);
67
- } : () => void 0;
68
- const debug = logLevel === 'trace' || logLevel === 'debug' ? (message: string, ...args: any[]) => {
69
- target?.debug(`${COLORS.cyan}[DEBUG]${COLORS.default} ${moduleName} ${message}`, ...args);
70
- } : () => void 0;
71
- const info = logLevel === 'trace' || logLevel === 'debug' || logLevel === 'info' ? (message: string, ...args: any[]) => {
72
- target?.info(`${COLORS.green}[INFO]${COLORS.default} ${moduleName} ${message}`, ...args);
73
- } : () => void 0;
74
- const warn = logLevel === 'trace' || logLevel === 'debug' || logLevel === 'info' || logLevel === 'warn' ? (message: string, ...args: any[]) => {
75
- target?.warn(`${COLORS.yellow}[WARN]${COLORS.default} ${moduleName} ${message}`, ...args);
76
- } : () => void 0;
77
- const error = logLevel === 'trace' || logLevel === 'debug' || logLevel === 'info' || logLevel === 'warn' || logLevel === 'error' ? (message: string, ...args: any[]) => {
78
- target?.error(`${COLORS.red}[ERROR]${COLORS.default} ${moduleName} ${message}`, ...args);
79
- } : () => void 0;
80
- const logger = {
81
- trace,
82
- debug,
83
- info,
84
- warn,
85
- error,
86
- };
53
+ }();
54
+
55
+ export function createLogger(moduleName: string): Logger {
56
+ return new class implements Logger {
57
+ trace(...args: any[]) {
58
+ mainLogger.trace(moduleName, ...args);
59
+ }
60
+
61
+ debug(...args: any[]) {
62
+ mainLogger.debug(moduleName, ...args);
63
+ }
64
+
65
+ info(...args: any[]) {
66
+ mainLogger.info(moduleName, ...args);
67
+ }
68
+
69
+ warn(...args: any[]) {
70
+ mainLogger.warn(moduleName, ...args);
71
+ }
72
+
73
+ error(...args: any[]) {
74
+ mainLogger.error(moduleName, ...args);
75
+ }
76
+
77
+ }();
78
+ }
87
79
 
88
- loggers.set(moduleName, logger);
89
-
90
- return logger;
80
+ export function setObserverLogger(logger: ObserverLogger) {
81
+ mainLogger = logger;
91
82
  }
@@ -1,46 +1,4 @@
1
- import {
2
- CallEventReport,
3
- CallMetaReport,
4
- ClientDataChannelReport,
5
- ClientExtensionReport,
6
- IceCandidatePairReport,
7
- InboundAudioTrackReport,
8
- InboundVideoTrackReport,
9
- ObserverEventReport,
10
- OutboundAudioTrackReport,
11
- OutboundVideoTrackReport,
12
- PeerConnectionTransportReport,
13
- SfuEventReport,
14
- SfuExtensionReport,
15
- SfuInboundRtpPadReport,
16
- SfuMetaReport,
17
- SfuOutboundRtpPadReport,
18
- SfuSctpStreamReport,
19
- SFUTransportReport,
20
- } from '@observertc/report-schemas-js';
21
-
22
1
  export type MediaKind = 'audio' | 'video';
23
2
  export type SupportedVideoCodecType = 'vp8' | 'vp9' | 'h264' | 'h265';
24
3
 
25
4
  // export type EvaluatorMiddleware = Middleware<EvaluatorContext>;
26
-
27
- export interface ObserverSinkContext {
28
- readonly callEventReports: CallEventReport[];
29
- readonly callMetaReports: CallMetaReport[];
30
- readonly clientDataChannelReports: ClientDataChannelReport[];
31
- readonly clientExtensionReports: ClientExtensionReport[];
32
- readonly iceCandidatePairReports: IceCandidatePairReport[];
33
- readonly inboundAudioTrackReports: InboundAudioTrackReport[];
34
- readonly inboundVideoTrackReports: InboundVideoTrackReport[];
35
- readonly peerConnectionTransportReports: PeerConnectionTransportReport[];
36
- readonly observerEventReports: ObserverEventReport[];
37
- readonly outboundAudioTrackReports: OutboundAudioTrackReport[];
38
- readonly outboundVideoTrackReports: OutboundVideoTrackReport[];
39
- readonly sfuEventReports: SfuEventReport[];
40
- readonly sfuExtensionReports: SfuExtensionReport[];
41
- readonly sfuInboundRtpPadReports: SfuInboundRtpPadReport[];
42
- readonly sfuOutboundRtpPadReports: SfuOutboundRtpPadReport[];
43
- readonly sfuSctpStreamReports: SfuSctpStreamReport[];
44
- readonly sfuTransportReports: SFUTransportReport[];
45
- readonly sfuMetaReports: SfuMetaReport[];
46
- }
@@ -30,9 +30,19 @@ export function isValidUuid(str: string): boolean {
30
30
  return regexp.test(str);
31
31
  }
32
32
 
33
- export function getMedian(arr: number[]): number {
33
+ export function getAverage(arr: number[], defaultAvgIfArrLengthIs0 = 0): number {
34
+ if (arr.length === 0) return defaultAvgIfArrLengthIs0;
35
+
36
+ return arr.reduce((a, b) => a + b, 0) / arr.length;
37
+ }
38
+
39
+ export function getMedian(arr: number[], copyArrayForSorting = true): number {
34
40
  // Sort the array in ascending order
35
- const sortedArr = arr.slice().sort((a, b) => a - b);
41
+ const sortedArr = copyArrayForSorting
42
+ ? arr.slice().sort((a, b) => a - b)
43
+ : arr.sort((a, b) => a-b)
44
+
45
+ ;
36
46
 
37
47
  // Calculate the middle index
38
48
  const mid = Math.floor(sortedArr.length / 2);
@@ -45,3 +55,15 @@ export function getMedian(arr: number[]): number {
45
55
  // If the array length is even, return the average of the two middle elements
46
56
  return (sortedArr[mid - 1] + sortedArr[mid]) / 2;
47
57
  }
58
+
59
+ export function parseJsonAs<T>(json?: string): T | undefined {
60
+ if (!json) {
61
+ return undefined;
62
+ }
63
+
64
+ try {
65
+ return JSON.parse(json) as T;
66
+ } catch (error) {
67
+ return undefined;
68
+ }
69
+ }
@@ -0,0 +1,6 @@
1
+ // import { AlertState } from "../ClientMonitor";
2
+
3
+ export interface Detector {
4
+ readonly name: string;
5
+ update(): void;
6
+ }
@@ -0,0 +1,38 @@
1
+ import { createLogger } from '../common/logger';
2
+ import { Detector } from './Detector';
3
+
4
+ const logger = createLogger('Detectors');
5
+
6
+ export class Detectors {
7
+ private _detectors: Detector[];
8
+
9
+ public constructor(...detectors: Detector[]) {
10
+ this._detectors = detectors;
11
+ }
12
+
13
+ public add(detector: Detector) {
14
+ this._detectors.push(detector);
15
+ }
16
+
17
+ public remove(detector: Detector) {
18
+ this._detectors = this._detectors.filter((d) => d !== detector);
19
+ }
20
+
21
+ get listOfNames() {
22
+ return this._detectors.map((d) => d.name);
23
+ }
24
+
25
+ public update() {
26
+ for (const detector of this._detectors) {
27
+ try {
28
+ detector.update();
29
+ } catch (err) {
30
+ logger.warn(`Error updating detector ${detector?.constructor?.name}`, err);
31
+ }
32
+ }
33
+ }
34
+
35
+ public clear() {
36
+ this._detectors = [];
37
+ }
38
+ }
package/src/index.ts CHANGED
@@ -1,90 +1,32 @@
1
- export type { ObserverConfig, ObserverEvents } from './Observer';
1
+ export type { ObserverEvents } from './Observer';
2
2
 
3
3
  export { Observer } from './Observer';
4
-
5
- export * as SampleSchema from '@observertc/sample-schemas-js';
6
- export * as ReportSchema from '@observertc/report-schemas-js';
7
-
8
- export type { LogLevel, Logger } from './common/logger';
9
-
10
- export type {
11
- Samples,
12
- ClientSample,
13
- SfuSample,
14
- ExtensionStat,
15
- PeerConnectionTransport,
16
- IceCandidatePair,
17
- MediaSourceStat,
18
- MediaCodecStats,
19
- InboundAudioTrack,
20
- InboundVideoTrack,
21
- OutboundAudioTrack,
22
- OutboundVideoTrack,
23
- IceLocalCandidate,
24
- IceRemoteCandidate,
25
- CustomCallEvent,
26
- SfuTransport,
27
- SfuInboundRtpPad,
28
- SfuOutboundRtpPad,
29
- SfuSctpChannel,
30
- SfuExtensionStats,
31
- DataChannel,
32
- MediaDevice,
33
- } from '@observertc/sample-schemas-js';
34
-
35
- export type {
36
- CallEventReport,
37
- CallMetaReport,
38
- ClientDataChannelReport,
39
- ClientExtensionReport,
40
- IceCandidatePairReport,
41
- InboundAudioTrackReport,
42
- InboundVideoTrackReport,
43
- ObserverEventReport,
44
- OutboundAudioTrackReport,
45
- OutboundVideoTrackReport,
46
- PeerConnectionTransportReport,
47
- SfuEventReport,
48
- SfuExtensionReport,
49
- SfuInboundRtpPadReport,
50
- SfuMetaReport,
51
- SfuOutboundRtpPadReport,
52
- SfuSctpStreamReport,
53
- SFUTransportReport,
54
- } from '@observertc/report-schemas-js';
55
- export type {
56
- ClientIssueMonitorConfig,
57
- ClientIssueMonitorEmittedIssueEvent,
58
- ClientIssueMonitor
59
- } from './monitors/ClientIssueMonitor';
60
- export type { ObservedCall, ObservedCallModel } from './ObservedCall';
61
- export type { ObservedClient, ObservedClientModel } from './ObservedClient';
62
- export type { ObservedPeerConnection, ObservedPeerConnectionModel, ObservedPeerConnectionEvents } from './ObservedPeerConnection';
63
- export type { ObservedInboundAudioTrack, ObservedInboundAudioTrackModel, ObservedInboundAudioTrackEvents } from './ObservedInboundAudioTrack';
64
- export type { ObservedOutboundAudioTrack, ObservedOutboundAudioTrackModel, ObservedOutboundAudioTrackEvents } from './ObservedOutboundAudioTrack';
65
- export type { ObservedInboundVideoTrack, ObservedInboundVideoTrackModel, ObservedInboundVideoTrackEvents } from './ObservedInboundVideoTrack';
66
- export type { ObservedOutboundVideoTrack, ObservedOutboundVideoTrackModel, ObservedOutboundVideoTrackEvents } from './ObservedOutboundVideoTrack';
67
- export type { CallSummary, ClientSummary, ClientIssue } from './monitors/CallSummary';
68
- export type { ObserverSinkContext } from './common/types';
69
- export type { SfuServerMonitorMetricsRecord } from './monitors/SfuServerMonitor';
70
- export type { TurnUsageMonitorEvents, TurnUsageMonitor, TurnStats, TurnUsage } from './monitors/TurnUsageMonitor';
71
- export {
72
- CallEventType,
73
- CallEventReportType,
74
- MediaTrackAddedAttachment,
75
- IceConnectionStateChangedAttachment,
76
- IceGatheringStateChangedAttachment,
77
- PeerConnectionStateChangedAttachment,
78
- } from './common/CallEventType';
79
- export { CallMetaType, CallMetaReportType, CallMetaReportPayloads } from './common/CallMetaReports';
80
-
81
- import { Observer, ObserverConfig } from './Observer';
82
- export function createObserver(config?: Partial<ObserverConfig>) {
83
- return Observer.create(config ?? {});
84
- }
85
-
86
- import { LogLevel, Logger, forwardLogsTo, setLogLevel } from './common/logger';
87
- export function setupLogs(logLevel: LogLevel, logger: Logger) {
88
- setLogLevel(logLevel);
89
- forwardLogsTo(logger);
90
- }
4
+ export { ObservedCall } from './ObservedCall';
5
+ export { ObservedInboundTrack } from './ObservedInboundTrack';
6
+ export { ObservedOutboundTrack } from './ObservedOutboundTrack';
7
+ export { ObservedClient } from './ObservedClient';
8
+ export { ObservedPeerConnection } from './ObservedPeerConnection';
9
+ export { ObservedMediaSource } from './ObservedMediaSource';
10
+ export { ObservedMediaPlayout } from './ObservedMediaPlayout';
11
+ export { ObservedCodec } from './ObservedCodec';
12
+ export { ObservedCertificate } from './ObservedCertificate';
13
+ export { ObservedDataChannel } from './ObservedDataChannel';
14
+ export { ObservedInboundRtp } from './ObservedInboundRtp';
15
+ export { ObservedOutboundRtp } from './ObservedOutboundRtp';
16
+ export { ObservedRemoteInboundRtp } from './ObservedRemoteInboundRtp';
17
+ export { ObservedRemoteOutboundRtp } from './ObservedRemoteOutboundRtp';
18
+ export { ObservedIceCandidatePair } from './ObservedIceCandidatePair';
19
+ export { ObservedIceCandidate } from './ObservedIceCandidate';
20
+ export { ObservedIceTransport } from './ObservedIceTransport';
21
+ export { ObservedPeerConnectionTransport } from './ObservedPeerConnectionTransport';
22
+ export { ClientEventTypes } from './schema/ClientEventTypes';
23
+ export { ClientMetaTypes } from './schema/ClientMetaTypes';
24
+ export { ClientSample, ClientIssue, ClientEvent, ClientMetaData } from './schema/ClientSample';
25
+ export { ScoreCalculator } from './scores/ScoreCalculator';
26
+ export { ObservedClientEventMonitor } from './ObservedClientEventMonitor';
27
+ export { ObserverEventMonitor } from './ObserverEventMonitor';
28
+ export { Middleware } from './common/Middleware';
29
+ export {
30
+ TrackReport,
31
+ ClientReport,
32
+ } from './Reports';
@@ -0,0 +1,10 @@
1
+ export type Item = {
2
+ callId: string;
3
+ appData?: Record<string, unknown>;
4
+ region: string;
5
+ publishers: string[];
6
+ subscribers: string[];
7
+ }
8
+ export class ObservedMediaRouter {
9
+
10
+ }