@observertc/observer-js 0.9.27-beta → 0.30.0-e12fcb4.0

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