@observertc/observer-js 0.9.27-beta → 0.30.0-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,136 +0,0 @@
1
- import { EvaluatorContext } from '../common/types';
2
- import { StorageProvider } from '../storages/StorageProvider';
3
- import * as Models from '../models/Models';
4
- import { createCallEndedEventReport, createClientLeftEventReport } from '../sinks/callEventReports';
5
- import { ReportsCollector } from '../common/ReportsCollector';
6
- import { createClosePeerConnectionProcess, ClosePeerConnectionProcessInput } from './closePeerConnectionProcess';
7
- import { createLogger } from '../common/logger';
8
- import { ObservedClientSourceConfig } from '../sources/ObservedClientSource';
9
- import { Writable } from '../common/utils';
10
-
11
- const logger = createLogger('ClientLeftProcess');
12
-
13
- export type DetachClientProcessInput = {
14
- clients: (ObservedClientSourceConfig & {
15
- detached: number;
16
- })[];
17
- recursive: boolean;
18
-
19
- evaluatorContext?: Writable<EvaluatorContext>;
20
- };
21
-
22
- export function createDetachClientProcess(
23
- storageProvider: StorageProvider,
24
- reports: ReportsCollector
25
- ): (input: DetachClientProcessInput) => Promise<void> {
26
- const peerConnectionClosedProcess = createClosePeerConnectionProcess(storageProvider);
27
- const process = async (context: DetachClientProcessInput) => {
28
- const { clients: detachedClients, recursive, evaluatorContext } = context;
29
- const { callStorage, clientStorage } = storageProvider;
30
-
31
- const clientIds = detachedClients.map((c) => c.clientId);
32
-
33
- if (clientIds.length < 1) return;
34
-
35
- const clients = await clientStorage.getAll(clientIds);
36
- const callToClientIds = new Map<string, string[]>();
37
-
38
- for (const client of clients.values()) {
39
- const { callId, clientId } = client;
40
-
41
- if (!callId || !clientId) {
42
- continue;
43
- }
44
- callToClientIds.set(callId, [ ...(callToClientIds.get(callId) ?? []), clientId ]);
45
- }
46
-
47
- const peerConnectionCloseProcessInput: ClosePeerConnectionProcessInput = {
48
- closedPeerConnections: [],
49
- recursive,
50
- };
51
- const callDetaches = new Map<string, number>();
52
-
53
- await clientStorage.removeAll(clientIds).then((deletedClientIds) => {
54
- for (const { clientId, detached } of detachedClients) {
55
- if (!deletedClientIds.has(clientId)) {
56
- continue;
57
- }
58
- const deletedClient = clients.get(clientId);
59
-
60
- if (!deletedClient) {
61
- continue;
62
- }
63
- const { roomId, serviceId, mediaUnitId, marker, callId, userId } = deletedClient;
64
-
65
- if (!roomId || !serviceId || !mediaUnitId || !callId) {
66
- continue;
67
- }
68
-
69
- for (const peerConnectionId of deletedClient.peerConnectionIds) {
70
- peerConnectionCloseProcessInput.closedPeerConnections.push({
71
- peerConnectionId,
72
- closed: detached,
73
- });
74
- }
75
-
76
- reports.addCallEventReport(
77
- createClientLeftEventReport(serviceId, mediaUnitId, roomId, callId, clientId, detached, userId, marker)
78
- );
79
- evaluatorContext?.detachedClients.push({
80
- ...deletedClient,
81
- detached: Number(detached),
82
- });
83
-
84
- callDetaches.set(callId, Math.max(callDetaches.get(callId) ?? 0, detached));
85
- }
86
- });
87
- if (recursive && 0 < peerConnectionCloseProcessInput.closedPeerConnections.length) {
88
- await peerConnectionClosedProcess(peerConnectionCloseProcessInput).catch((err) => {
89
- logger.error('Error occurred while closing peer connections', err);
90
- });
91
- }
92
-
93
- const calls = await callStorage.getAll(callToClientIds.keys());
94
- const updatedCalls = new Map<string, Models.Call>();
95
- const removedCallIds: string[] = [];
96
-
97
- for (const call of calls.values()) {
98
- const { callId, serviceId, roomId } = call;
99
-
100
- if (!callId || !roomId || !serviceId) continue;
101
-
102
- const removedClientIds = callToClientIds.get(callId) ?? [];
103
-
104
- call.clientIds = call.clientIds.filter((clientId) => !removedClientIds.includes(clientId));
105
- if (call.clientIds.length < 1) {
106
- removedCallIds.push(callId);
107
- } else {
108
- updatedCalls.set(callId, call);
109
- }
110
- }
111
- if (0 < updatedCalls.size) {
112
- await callStorage.setAll(updatedCalls);
113
- }
114
- if (0 < removedCallIds.length) {
115
- await callStorage.removeAll(removedCallIds).then((deletedCalls) => {
116
- for (const [ callId, deletedCall ] of deletedCalls) {
117
- const { serviceId, roomId } = deletedCall;
118
-
119
- if (!serviceId || !roomId || !callId) continue;
120
-
121
- const ended = callDetaches.get(callId) ?? Date.now();
122
- const callEvent = createCallEndedEventReport(serviceId, roomId, callId, ended);
123
-
124
- reports.addCallEventReport(callEvent);
125
-
126
- evaluatorContext?.endedCalls.push({
127
- ...deletedCall,
128
- ended,
129
- });
130
- }
131
- });
132
- }
133
- };
134
-
135
- return process;
136
- }
@@ -1,104 +0,0 @@
1
- import { createLogger } from '../common/logger';
2
- import { Client, InboundTrack, OutboundTrack, PeerConnection } from '../models/Models';
3
- import { StorageProvider } from '../storages/StorageProvider';
4
-
5
- export const logger = createLogger('findRemoteMatches');
6
-
7
- function groupToMap<T>(input: ReadonlyMap<string, T>, getGroupKey: (value: T) => string | undefined) {
8
- const result = new Map<string, T[]>();
9
-
10
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
11
- for (const [ key, value ] of input.entries()) {
12
- const groupKey = getGroupKey(value);
13
-
14
- if (!groupKey) continue;
15
-
16
- let group = result.get(groupKey);
17
-
18
- if (group === undefined) {
19
- group = [];
20
- result.set(groupKey, group);
21
- }
22
- group.push(value);
23
- }
24
-
25
- return result;
26
- }
27
-
28
- export async function findRemoteMatches(
29
- storages: StorageProvider,
30
- clients: ReadonlyMap<string, Client>,
31
- inboundTracks: ReadonlyMap<string, InboundTrack>,
32
- ) {
33
- const NOT_EXISTS = 'NotExists';
34
- const remoteTrackIds = new Map<string, string>();
35
- const remotePeerConnectionIds = new Map<string, string>();
36
- const remoteClientIds = new Map<string, string>();
37
-
38
- async function setupMatches(callId: string, callClients: Client[], callIboundTracks: InboundTrack[]) {
39
- const peerConnectionIds = Array.from(callClients.values()).flatMap((client) => client.peerConnectionIds);
40
- const peerConnections = await storages.peerConnectionStorage.getAll(peerConnectionIds).catch((err) => {
41
- logger.warn(`Error while fetching for remote matching peer connections for call ${callId} `, err);
42
-
43
- return new Map<string, PeerConnection>() as ReadonlyMap<string, PeerConnection>;
44
- });
45
- const outboundTrackIds = Array.from(peerConnections.values()).flatMap((pc) => pc.outboundTrackIds);
46
- const outboundTracks = await storages.outboundTrackStorage.getAll(outboundTrackIds).catch((err) => {
47
- logger.warn(`Error while fetching for remote matching outbound tracks for call ${callId} `, err);
48
-
49
- return new Map<string, OutboundTrack>() as ReadonlyMap<string, OutboundTrack>;
50
- });
51
-
52
- // console.warn("setupMatches", peerConnectionIds, outboundTrackIds, callsClients, callsInbTracks);
53
-
54
- const ssrcToOutb = new Map<bigint, OutboundTrack>();
55
- const sfuStreamToTrackIds = new Map<string, OutboundTrack>();
56
-
57
- for (const outbTrack of outboundTracks.values()) {
58
- if (outbTrack.sfuStreamId) {
59
- sfuStreamToTrackIds.set(outbTrack.sfuStreamId, outbTrack);
60
- }
61
- for (const ssrc of outbTrack.ssrc) {
62
- ssrcToOutb.set(ssrc, outbTrack);
63
- }
64
- }
65
- for (const inbTrack of callIboundTracks) {
66
- let outbTrack: OutboundTrack | undefined;
67
-
68
- if (inbTrack.sfuStreamId) {
69
- outbTrack = sfuStreamToTrackIds.get(inbTrack.sfuStreamId);
70
- } else {
71
- outbTrack = inbTrack.ssrc.map((ssrc) => ssrcToOutb.get(ssrc)).find((outb) => outb !== undefined);
72
- }
73
- if (outbTrack) {
74
- remoteTrackIds.set(inbTrack.trackId ?? NOT_EXISTS, outbTrack.trackId ?? NOT_EXISTS);
75
- remotePeerConnectionIds.set(inbTrack.trackId ?? NOT_EXISTS, outbTrack.peerConnectionId ?? NOT_EXISTS);
76
- remoteClientIds.set(inbTrack.trackId ?? NOT_EXISTS, outbTrack.clientId ?? NOT_EXISTS);
77
- }
78
- }
79
- }
80
- const callsClients = groupToMap<Client>(clients, (client) => client.callId);
81
- const callsInbTracks = groupToMap<InboundTrack>(inboundTracks, (inbTrack) => inbTrack.callId);
82
-
83
- const promises: Promise<void>[] = [];
84
-
85
- for (const [ callId, callClients ] of callsClients) {
86
- const callIboundTracks = callsInbTracks.get(callId) ?? [];
87
- const promise = setupMatches(
88
- callId,
89
- callClients,
90
- callIboundTracks
91
- );
92
-
93
- promises.push(promise);
94
- }
95
- await Promise.all(promises).catch((err) => {
96
- logger.warn('Error occurred while fetching remote pair matches', err);
97
- });
98
-
99
- return {
100
- remoteTrackIds,
101
- remotePeerConnectionIds,
102
- remoteClientIds
103
- };
104
- }
@@ -1,22 +0,0 @@
1
- import { StorageProvider } from '../storages/StorageProvider';
2
-
3
- export type InboundTrackRemoveProcessInput = {
4
- removedTracks: {
5
- trackId: string;
6
- timestamp?: number;
7
- }[];
8
- };
9
-
10
- export function createInboundTrackRemoveProcess(
11
- storageProvider: StorageProvider
12
- ): (input: InboundTrackRemoveProcessInput) => Promise<void> {
13
- const process = async (input: InboundTrackRemoveProcessInput) => {
14
- const { removedTracks } = input;
15
- const { inboundTrackStorage } = storageProvider;
16
- const inboundTrackIds = removedTracks.map((c) => c.trackId);
17
-
18
- await inboundTrackStorage.removeAll(inboundTrackIds);
19
- };
20
-
21
- return process;
22
- }
@@ -1,138 +0,0 @@
1
- import { EvaluatorContext } from '../common/types';
2
- import { StorageProvider } from '../storages/StorageProvider';
3
- import * as Models from '../models/Models';
4
- import { createCallStartedEventReport, createClientJoinedEventReport } from '../sinks/callEventReports';
5
- import { ReportsCollector } from '../common/ReportsCollector';
6
- import { createLogger } from '../common/logger';
7
- import { ObservedClientSourceConfig } from '../sources/ObservedClientSource';
8
- import { Writable } from '../common/utils';
9
-
10
- const logger = createLogger('ClientLeftProcess');
11
-
12
- export type JoinClientProcessInput = {
13
- clients: ObservedClientSourceConfig[];
14
-
15
- evaluatorContext?: Writable<EvaluatorContext>;
16
- };
17
-
18
- export function createJoinClientProcess(
19
- storageProvider: StorageProvider,
20
- reports: ReportsCollector
21
- ): (input: JoinClientProcessInput) => Promise<void> {
22
- const process = async (context: JoinClientProcessInput) => {
23
- const { clients: joinedClients, evaluatorContext } = context;
24
-
25
- if (joinedClients.length < 1) {
26
- return;
27
- }
28
- const { callStorage, clientStorage } = storageProvider;
29
-
30
- const callIds = joinedClients.map((c) => c.callId);
31
- const existingCalls = await callStorage.getAll(callIds);
32
- const newCalls = new Map<string, Models.Call>();
33
- const newClients = new Map<string, Models.Client>();
34
-
35
- for (const joinedClient of joinedClients) {
36
- const { serviceId, mediaUnitId, roomId, callId, clientId, userId, joined: timestamp, timeZoneId, marker } = joinedClient;
37
-
38
- let call = existingCalls.get(callId);
39
-
40
- if (!call) {
41
- call = new Models.Call({
42
- serviceId,
43
- roomId,
44
- callId,
45
- started: BigInt(timestamp),
46
- });
47
- newCalls.set(callId, call);
48
- }
49
- if (call.clientIds.find((callClientId) => callClientId === clientId)) {
50
- logger.warn(`Call ${callId} for room ${roomId} attempted to add client ${clientId} twice`);
51
- continue;
52
- }
53
- call.clientIds.push(clientId);
54
-
55
- // we can extract the lowest timestamp here
56
- // const joinedTimestamp
57
- // for (const observedCall of (evaluatorContext?.observedCalls.getObservedCall(callId)?.getObservedClient(clientId)?.samples() ?? [])) {
58
-
59
- // }
60
- newClients.set(
61
- clientId,
62
- new Models.Client({
63
- serviceId,
64
- mediaUnitId,
65
- roomId,
66
- callId,
67
- clientId,
68
- joined: BigInt(timestamp),
69
- timeZoneId,
70
- marker,
71
- userId,
72
- })
73
- );
74
- }
75
- const alreadyInsertedCalls =
76
- 0 < newCalls.size ? await callStorage.insertAll(newCalls) : new Map<string, Models.Call>();
77
-
78
- for (const [ callId, newCall ] of newCalls) {
79
- if (alreadyInsertedCalls.has(callId)) {
80
- continue;
81
- }
82
- const { serviceId, roomId, started } = newCall;
83
-
84
- if (!serviceId || !roomId || !started) {
85
- continue;
86
- }
87
-
88
- const callEvent = createCallStartedEventReport(serviceId, roomId, callId, Number(started));
89
-
90
- // if ((evaluatorContext?.observedCalls as ObservedCalls).getObservedCall(callId)) {
91
- // reports.addCallEventReport(callEvent);
92
- // }
93
- reports.addCallEventReport(callEvent);
94
- evaluatorContext?.startedCallIds.push(callId);
95
- }
96
-
97
- if (0 < existingCalls.size) {
98
- await callStorage.setAll(existingCalls);
99
- }
100
-
101
- if (0 < newClients.size) {
102
- await clientStorage.setAll(newClients);
103
- }
104
- for (const [ clientId, client ] of newClients) {
105
- const {
106
- serviceId,
107
- mediaUnitId,
108
- roomId,
109
- callId,
110
- clientId: savedClientId,
111
- userId,
112
- // timeZoneId,
113
- marker,
114
- joined,
115
- } = client;
116
-
117
- if (!serviceId || !mediaUnitId || !roomId || !callId || !savedClientId) {
118
- continue;
119
- }
120
-
121
- const callEvent = createClientJoinedEventReport(
122
- serviceId,
123
- mediaUnitId,
124
- roomId,
125
- callId,
126
- clientId,
127
- Number(joined),
128
- userId,
129
- marker
130
- );
131
-
132
- reports.addCallEventReport(callEvent);
133
- evaluatorContext?.joinedClientIds.push(clientId);
134
- }
135
- };
136
-
137
- return process;
138
- }
@@ -1,22 +0,0 @@
1
- import { StorageProvider } from '../storages/StorageProvider';
2
-
3
- export type OutboundTrackRemoveProcessInput = {
4
- removedTracks: {
5
- trackId: string;
6
- timestamp?: number;
7
- }[];
8
- };
9
-
10
- export function createOutboundTrackRemoveProcess(
11
- storageProvider: StorageProvider
12
- ): (input: OutboundTrackRemoveProcessInput) => Promise<void> {
13
- const process = async (input: OutboundTrackRemoveProcessInput) => {
14
- const { removedTracks } = input;
15
- const { outboundTrackStorage } = storageProvider;
16
- const outboundTrackIds = removedTracks.map((c) => c.trackId);
17
-
18
- await outboundTrackStorage.removeAll(outboundTrackIds);
19
- };
20
-
21
- return process;
22
- }
@@ -1,49 +0,0 @@
1
- import { ObservedClient, ObservedClientBuilder } from './ObservedClient';
2
-
3
- export interface ObservedCall {
4
- readonly serviceId: string;
5
- readonly roomId: string;
6
- readonly callId: string;
7
- readonly createCallStartedReport?: boolean;
8
- observedClients(): IterableIterator<ObservedClient>;
9
- getObservedClient(clientId: string): ObservedClient | undefined;
10
- }
11
-
12
- export class ObservedCallBuilder {
13
- private _observedClientBuilders = new Map<string, ObservedClientBuilder>();
14
- public constructor(private _config: Omit<ObservedCall, 'observedClients' | 'getObservedClient'>) {}
15
-
16
- public getOrCreateObservedClientBuilder(
17
- clientId: string,
18
- configSupplier: () => ConstructorParameters<typeof ObservedClientBuilder>[0]
19
- ) {
20
- let result = this._observedClientBuilders.get(clientId);
21
-
22
- if (!result) {
23
- const config = configSupplier();
24
-
25
- result = new ObservedClientBuilder(config);
26
- this._observedClientBuilders.set(clientId, result);
27
- }
28
-
29
- return result;
30
- }
31
-
32
- public build(): ObservedCall {
33
- const observedClients = new Map<string, ObservedClient>();
34
-
35
- const observedCall: ObservedCall = {
36
- ...this._config,
37
- observedClients: () => observedClients.values(),
38
- getObservedClient: (clientId) => observedClients.get(clientId),
39
- };
40
-
41
- for (const observedClientBuilder of this._observedClientBuilders.values()) {
42
- const observedClient = observedClientBuilder.build(observedCall);
43
-
44
- observedClients.set(observedClient.clientId, observedClient);
45
- }
46
-
47
- return observedCall;
48
- }
49
- }
@@ -1,143 +0,0 @@
1
- import { iteratorConverter } from '../common/utils';
2
- import { ObservedCall, ObservedCallBuilder } from './ObservedCall';
3
-
4
- export interface ObservedCalls {
5
- callIds(): IterableIterator<string>;
6
- clientIds(): IterableIterator<string>;
7
- peerConnectionIds(): IterableIterator<string>;
8
- inboundAudioTrackIds(): IterableIterator<string>;
9
- inboundVideoTrackIds(): IterableIterator<string>;
10
- outboundAudioTrackIds(): IterableIterator<string>;
11
- outboundVideoTrackIds(): IterableIterator<string>;
12
-
13
- observedCalls(): IterableIterator<ObservedCall>;
14
- getObservedCall(callId: string): ObservedCall | undefined;
15
- }
16
-
17
- export class ObservedCallsBuilder {
18
- private _builders = new Map<string, ObservedCallBuilder>();
19
- public constructor() {
20
- // nothing
21
- }
22
-
23
- public getOrCreateObservedCallBuilder(
24
- callId: string,
25
- configSupplier: () => ConstructorParameters<typeof ObservedCallBuilder>[0]
26
- ) {
27
- let result = this._builders.get(callId);
28
-
29
- if (!result) {
30
- const config = configSupplier();
31
-
32
- result = new ObservedCallBuilder(config);
33
- this._builders.set(callId, result);
34
- }
35
-
36
- return result;
37
- }
38
-
39
- public build(): ObservedCalls {
40
- const observedCalls = new Map<string, ObservedCall>();
41
-
42
- const callIdsGenerator = function *() {
43
- for (const observedCall of observedCalls.values()) {
44
- yield observedCall.callId;
45
- }
46
- };
47
- const callIds = () => iteratorConverter<string>(callIdsGenerator());
48
-
49
- const clientIdsGenerator = function *() {
50
- for (const observedCall of observedCalls.values()) {
51
- for (const observedClient of observedCall.observedClients()) {
52
- yield observedClient.clientId;
53
- }
54
- }
55
- };
56
- const clientIds = () => iteratorConverter<string>(clientIdsGenerator());
57
-
58
- const peerConnectionIdsGenerator = function *() {
59
- for (const observedCall of observedCalls.values()) {
60
- for (const observedClient of observedCall.observedClients()) {
61
- for (const observedPeerConnection of observedClient.observedPeerConnections()) {
62
- yield observedPeerConnection.peerConnectionId;
63
- }
64
- }
65
- }
66
- };
67
- const peerConnectionIds = () => iteratorConverter<string>(peerConnectionIdsGenerator());
68
-
69
- const inboundAudioTrackIdsGenerator = function *() {
70
- for (const observedCall of observedCalls.values()) {
71
- for (const observedClient of observedCall.observedClients()) {
72
- for (const observedPeerConnection of observedClient.observedPeerConnections()) {
73
- for (const inboundAudioTrack of observedPeerConnection.inboundAudioTracks()) {
74
- yield inboundAudioTrack.trackId;
75
- }
76
- }
77
- }
78
- }
79
- };
80
- const inboundAudioTrackIds = () => iteratorConverter<string>(inboundAudioTrackIdsGenerator());
81
-
82
- const inboundVideoTrackIdsGenerator = function *() {
83
- for (const observedCall of observedCalls.values()) {
84
- for (const observedClient of observedCall.observedClients()) {
85
- for (const observedPeerConnection of observedClient.observedPeerConnections()) {
86
- for (const inboundVideoTrack of observedPeerConnection.inboundVideoTracks()) {
87
- yield inboundVideoTrack.trackId;
88
- }
89
- }
90
- }
91
- }
92
- };
93
- const inboundVideoTrackIds = () => iteratorConverter<string>(inboundVideoTrackIdsGenerator());
94
-
95
- const outboundAudioTrackIdsGenerator = function *() {
96
- for (const observedCall of observedCalls.values()) {
97
- for (const observedClient of observedCall.observedClients()) {
98
- for (const observedPeerConnection of observedClient.observedPeerConnections()) {
99
- for (const outboundAudioTrack of observedPeerConnection.outboundAudioTracks()) {
100
- yield outboundAudioTrack.trackId;
101
- }
102
- }
103
- }
104
- }
105
- };
106
- const outboundAudioTrackIds = () => iteratorConverter<string>(outboundAudioTrackIdsGenerator());
107
-
108
- const outboundVideoTrackIdsGenerator = function *() {
109
- for (const observedCall of observedCalls.values()) {
110
- for (const observedClient of observedCall.observedClients()) {
111
- for (const observedPeerConnection of observedClient.observedPeerConnections()) {
112
- for (const outboundVideoTrack of observedPeerConnection.outboundVideoTracks()) {
113
- yield outboundVideoTrack.trackId;
114
- }
115
- }
116
- }
117
- }
118
- };
119
- const outboundVideoTrackIds = () => iteratorConverter<string>(outboundVideoTrackIdsGenerator());
120
-
121
- const result: ObservedCalls = {
122
- callIds,
123
- clientIds,
124
- peerConnectionIds,
125
- inboundAudioTrackIds,
126
- inboundVideoTrackIds,
127
- outboundAudioTrackIds,
128
- outboundVideoTrackIds,
129
- observedCalls: () => observedCalls.values(),
130
- getObservedCall: (callId) => observedCalls.get(callId),
131
- };
132
-
133
- for (const builder of this._builders.values()) {
134
- const observedCall = builder.build();
135
-
136
- observedCalls.set(observedCall.callId, observedCall);
137
- }
138
- this._builders.clear();
139
-
140
- return result;
141
- }
142
-
143
- }