@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,74 +0,0 @@
1
- import { createLogger } from '../common/logger';
2
- import * as Models from '../models/Models';
3
- import { StorageProvider } from '../storages/StorageProvider';
4
- import { createCallEntry } from './CallEntry';
5
- import { createClientEntry } from './ClientEntry';
6
- import { createPeerConnectionEntry } from './PeerConnectionEntry';
7
-
8
- const logger = createLogger('InboundTrackWrapper');
9
-
10
- export type InboundTrackEntry = ReturnType<typeof createInboundTrackEntry>;
11
-
12
- export function createInboundTrackEntry(storageProvider: StorageProvider, model?: Models.InboundTrack) {
13
- if (!model) return;
14
- const {
15
- callId,
16
- clientId,
17
- peerConnectionId,
18
- trackId,
19
- kind,
20
- } = model;
21
-
22
- if (!callId) return logger.warn(`InboundTrack model without callId: ${JSON.stringify(model)}`);
23
- if (!clientId) return logger.warn(`InboundTrack model without clientId: ${JSON.stringify(model)}`);
24
- if (!peerConnectionId) return logger.warn(`InboundTrack model without peerConnectionId: ${JSON.stringify(model)}`);
25
- if (!trackId) return logger.warn(`InboundTrack model without trackId: ${JSON.stringify(model)}`);
26
- if (!kind) return logger.warn(`InboundTrack model without kind: ${JSON.stringify(model)}`);
27
-
28
- const direction = 'inbound' as const;
29
- const getCall = async () => {
30
- return createCallEntry(storageProvider, await storageProvider.callStorage.get(callId));
31
- };
32
- const getClient = async () => {
33
- return createClientEntry(storageProvider, await storageProvider.clientStorage.get(clientId));
34
- };
35
- const getPeerConnection = async () => {
36
- return createPeerConnectionEntry(storageProvider, await storageProvider.peerConnectionStorage.get(peerConnectionId));
37
- };
38
-
39
- return {
40
- callId,
41
- clientId,
42
- peerConnectionId,
43
- trackId,
44
- direction,
45
- get kind(): 'audio' | 'video' {
46
- return kind.toLocaleLowerCase() as 'audio' | 'video';
47
- },
48
- get stats() {
49
- return 0 < model.audioStats.length ? model.audioStats : 0 < model.videoStats.length ? model.videoStats : undefined;
50
- },
51
- get marker() {
52
- return model.marker;
53
- },
54
- get ssrc() {
55
- return model.ssrc;
56
- },
57
-
58
- getCall,
59
- getClient,
60
- getPeerConnection,
61
-
62
- async refresh() {
63
- const refreshedModel = await storageProvider.inboundTrackStorage.get(trackId);
64
-
65
- if (!refreshedModel) return;
66
-
67
- model.audioStats = refreshedModel.audioStats;
68
- model.videoStats = refreshedModel.videoStats;
69
- model.marker = refreshedModel.marker;
70
- model.ssrc = refreshedModel.ssrc;
71
- }
72
-
73
- };
74
- }
@@ -1,72 +0,0 @@
1
- import { createLogger } from '../common/logger';
2
- import * as Models from '../models/Models';
3
- import { StorageProvider } from '../storages/StorageProvider';
4
- import { createCallEntry } from './CallEntry';
5
- import { createClientEntry } from './ClientEntry';
6
- import { createPeerConnectionEntry } from './PeerConnectionEntry';
7
-
8
- const logger = createLogger('OutboundTrackWrapper');
9
-
10
- export type OutboundTrackEntry = ReturnType<typeof createOutboundTrackEntry>;
11
-
12
- export function createOutboundTrackEntry(storageProvider: StorageProvider, model?: Models.OutboundTrack) {
13
- if (!model) return;
14
- const {
15
- callId,
16
- clientId,
17
- peerConnectionId,
18
- trackId,
19
- kind,
20
- } = model;
21
-
22
- if (!callId) return logger.warn(`OutboundTrack model without callId: ${JSON.stringify(model)}`);
23
- if (!clientId) return logger.warn(`OutboundTrack model without clientId: ${JSON.stringify(model)}`);
24
- if (!peerConnectionId) return logger.warn(`OutboundTrack model without peerConnectionId: ${JSON.stringify(model)}`);
25
- if (!trackId) return logger.warn(`OutboundTrack model without trackId: ${JSON.stringify(model)}`);
26
- if (!kind) return logger.warn(`OutboundTrack model without kind: ${JSON.stringify(model)}`);
27
-
28
- const direction = 'outbound' as const;
29
- const getCall = async () => {
30
- return createCallEntry(storageProvider, await storageProvider.callStorage.get(callId));
31
- };
32
- const getClient = async () => {
33
- return createClientEntry(storageProvider, await storageProvider.clientStorage.get(clientId));
34
- };
35
- const getPeerConnection = async () => {
36
- return createPeerConnectionEntry(storageProvider, await storageProvider.peerConnectionStorage.get(peerConnectionId));
37
- };
38
-
39
- return {
40
- callId,
41
- clientId,
42
- peerConnectionId,
43
- trackId,
44
- direction,
45
- get kind(): 'audio' | 'video' {
46
- return kind.toLocaleLowerCase() as 'audio' | 'video';
47
- },
48
- get stats() {
49
- return 0 < model.audioStats.length ? model.audioStats : 0 < model.videoStats.length ? model.videoStats : undefined;
50
- },
51
- get marker() {
52
- return model.marker;
53
- },
54
- get ssrc() {
55
- return model.ssrc;
56
- },
57
-
58
- getCall,
59
- getClient,
60
- getPeerConnection,
61
-
62
- refresh: async () => {
63
- const refreshedModel = await storageProvider.outboundTrackStorage.get(trackId);
64
-
65
- if (!refreshedModel) return;
66
-
67
- model.audioStats = refreshedModel.audioStats;
68
- model.videoStats = refreshedModel.videoStats;
69
- model.marker = refreshedModel.marker;
70
- }
71
- };
72
- }
@@ -1,133 +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 { createClientEntry } from './ClientEntry';
6
- import { InboundTrackEntry, createInboundTrackEntry } from './InboundTrackEntry';
7
- import { OutboundTrackEntry, createOutboundTrackEntry } from './OutboundTrackEntry';
8
-
9
- export type PeerConnectionEntry = ReturnType<typeof createPeerConnectionEntry>;
10
-
11
- export function createPeerConnectionEntry(storageProvider: StorageProvider, model?: Models.PeerConnection) {
12
- if (!model) return;
13
-
14
- const {
15
- callId,
16
- clientId,
17
- peerConnectionId,
18
- label,
19
- mediaUnitId,
20
- opened,
21
- serviceId,
22
- roomId,
23
- userId,
24
- marker
25
- } = model;
26
-
27
- if (!peerConnectionId) return logger.warn(`PeerConnection model without peerConnectionId: ${JSON.stringify(model)}`);
28
- if (!callId) return logger.warn(`PeerConnection model without callId: ${JSON.stringify(model)}`);
29
- if (!clientId) return logger.warn(`PeerConnection model without clientId: ${JSON.stringify(model)}`);
30
-
31
- const getClient = async () => {
32
- return createClientEntry(storageProvider, await storageProvider.clientStorage.get(clientId));
33
- };
34
-
35
- const getCall = async () => {
36
- return createCallEntry(storageProvider, await storageProvider.callStorage.get(callId));
37
- };
38
-
39
- const asyncInboundTrackGenerator = async function *(providedInboundTrackIds?: string[], kind?: string) {
40
- const inboundTrackModels = await Promise.all(
41
- (providedInboundTrackIds ?? model.inboundTrackIds).map((inboundTrackId) => storageProvider.inboundTrackStorage.get(inboundTrackId))
42
- );
43
-
44
- for (const inboundTrackModel of inboundTrackModels) {
45
- if (!inboundTrackModel) continue;
46
- if (kind && inboundTrackModel.kind !== kind) continue;
47
- yield createInboundTrackEntry(storageProvider, inboundTrackModel);
48
- }
49
- };
50
- const asyncOutboundTrackGenerator = async function *(providedOutboundTrackIds?: string[], kind?: string) {
51
- const outboundTrackModels = await Promise.all(
52
- (providedOutboundTrackIds ?? model.outboundTrackIds).map((outboundTrackId) => storageProvider.outboundTrackStorage.get(outboundTrackId))
53
- );
54
-
55
- for (const outboundTrackModel of outboundTrackModels) {
56
- if (!outboundTrackModel) continue;
57
- if (kind && outboundTrackModel.kind !== kind) continue;
58
- yield createOutboundTrackEntry(storageProvider, outboundTrackModel);
59
- }
60
- };
61
-
62
- return {
63
- callId,
64
- clientId,
65
- peerConnectionId,
66
- marker,
67
- label,
68
- mediaUnitId,
69
- opened,
70
- serviceId,
71
- roomId,
72
- userId,
73
-
74
- getClient,
75
- getCall,
76
-
77
- get iceCandidatePairs() {
78
- return model.iceCandidatePairs;
79
- },
80
- get iceRemoteCandidates() {
81
- return model.iceRemoteCandidates;
82
- },
83
- get iceLocalCandidates() {
84
- return model.icelocalCandidates;
85
- },
86
- get transports() {
87
- return model.transports;
88
- },
89
- get inboundTrackIds(): ReadonlyArray<string> {
90
- return model.inboundTrackIds;
91
- },
92
- get outboundTrackIds(): ReadonlyArray<string> {
93
- return model.outboundTrackIds;
94
- },
95
- get inboundTracks(): AsyncIterableIterator<InboundTrackEntry> {
96
- return asyncIteratorConverter<InboundTrackEntry>(asyncInboundTrackGenerator());
97
- },
98
- get outboundTracks(): AsyncIterableIterator<OutboundTrackEntry> {
99
- return asyncIteratorConverter<OutboundTrackEntry>(asyncOutboundTrackGenerator());
100
- },
101
- get inboundAudioTracks(): AsyncIterableIterator<InboundTrackEntry> {
102
- return asyncIteratorConverter<InboundTrackEntry>(asyncInboundTrackGenerator(undefined, 'audio'));
103
- },
104
- get outboundAudioTracks(): AsyncIterableIterator<OutboundTrackEntry> {
105
- return asyncIteratorConverter<OutboundTrackEntry>(asyncOutboundTrackGenerator(undefined, 'audio'));
106
- },
107
- get inboundVideoTracks(): AsyncIterableIterator<InboundTrackEntry> {
108
- return asyncIteratorConverter<InboundTrackEntry>(asyncInboundTrackGenerator(undefined, 'video'));
109
- },
110
- get outboundVideoTracks(): AsyncIterableIterator<OutboundTrackEntry> {
111
- return asyncIteratorConverter<OutboundTrackEntry>(asyncOutboundTrackGenerator(undefined, 'video'));
112
- },
113
- async getInboundTrack(inboundTrackId: string) {
114
- return model.inboundTrackIds.includes(inboundTrackId) ? createInboundTrackEntry(storageProvider, await storageProvider.inboundTrackStorage.get(inboundTrackId)) : undefined;
115
- },
116
- async getOutboundTrack(outboundTrackId: string) {
117
- return model.outboundTrackIds.includes(outboundTrackId) ? createOutboundTrackEntry(storageProvider, await storageProvider.outboundTrackStorage.get(outboundTrackId)) : undefined;
118
- },
119
-
120
- async refresh() {
121
- const refreshedModel = await storageProvider.peerConnectionStorage.get(peerConnectionId);
122
-
123
- if (!refreshedModel) return;
124
-
125
- model.iceCandidatePairs = refreshedModel.iceCandidatePairs;
126
- model.iceRemoteCandidates = refreshedModel.iceRemoteCandidates;
127
- model.icelocalCandidates = refreshedModel.icelocalCandidates;
128
- model.transports = refreshedModel.transports;
129
- model.inboundTrackIds = refreshedModel.inboundTrackIds;
130
- model.outboundTrackIds = refreshedModel.outboundTrackIds;
131
- }
132
- };
133
- }
@@ -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 { SfuTransportEntry, createSfuTransportEntry } from './SfuTransportEntry';
5
- import { asyncIteratorConverter } from '../common/utils';
6
-
7
- export const logger = createLogger('CallWrapper');
8
-
9
- export type SfuEntry = ReturnType<typeof createSfuEntry>;
10
-
11
- export function createSfuEntry(storageProvider: StorageProvider, model?: Models.Sfu) {
12
- if (!model) return;
13
- const {
14
- sfuId,
15
- serviceId,
16
- mediaUnitId,
17
- joined,
18
- } = model;
19
-
20
- if (!sfuId) return logger.warn(`Sfu model without sfuId: ${JSON.stringify(model)}`);
21
- if (!serviceId) return logger.warn(`Sfu model without serviceId: ${JSON.stringify(model)}`);
22
- if (!mediaUnitId) return logger.warn(`Sfu model without mediaUnitId: ${JSON.stringify(model)}`);
23
- if (!joined) return logger.warn(`Sfu model without joined: ${JSON.stringify(model)}`);
24
-
25
- const getSfuTransport = async (sfuTransportId: string) => {
26
- return createSfuTransportEntry(storageProvider, await storageProvider.sfuTransportStorage.get(sfuTransportId));
27
- };
28
- const asyncSfuTransportGenerator = async function *() {
29
- const sfuTransportModels = await Promise.all(
30
- model.sfuTransportIds.map((sfuTransportId) => storageProvider.sfuTransportStorage.get(sfuTransportId))
31
- );
32
-
33
- for (const sfuTransportModel of sfuTransportModels) {
34
- if (!sfuTransportModel) continue;
35
- yield createSfuTransportEntry(storageProvider, sfuTransportModel);
36
- }
37
- };
38
-
39
- return {
40
- sfuId,
41
- serviceId,
42
- mediaUnitId,
43
- joined,
44
- get marker() {
45
- return model.marker;
46
- },
47
- get sfuTransportIds(): ReadonlyArray<string> {
48
- return model.sfuTransportIds;
49
- },
50
- get sfuTransports(): AsyncIterableIterator<SfuTransportEntry> {
51
- return asyncIteratorConverter<SfuTransportEntry>(asyncSfuTransportGenerator());
52
- },
53
- getSfuTransport,
54
- refresh: async () => {
55
- const refreshedModel = await storageProvider.sfuStorage.get(sfuId);
56
-
57
- if (!refreshedModel) return;
58
-
59
- model.marker = refreshedModel.marker;
60
- }
61
- };
62
- }
@@ -1,46 +0,0 @@
1
- import * as Models from '../models/Models';
2
- import { StorageProvider } from '../storages/StorageProvider';
3
- import { logger } from './SfuEntry';
4
-
5
- export type SfuInboundRtpPadEntry = ReturnType<typeof createSfuInboundRtpPadEntry>;
6
-
7
- export function createSfuInboundRtpPadEntry(storageProvider: StorageProvider, model?: Models.SfuInboundRtpPad) {
8
- if (!model) return;
9
- const {
10
- sfuId,
11
- sfuTransportId,
12
- added,
13
- internal,
14
- rtpPadId,
15
- mediaUnitId,
16
- } = model;
17
-
18
- if (!sfuId) return logger.warn(`SfuInboundRtpPad model without sfuId: ${JSON.stringify(model)}`);
19
- if (!sfuTransportId) return logger.warn(`SfuInboundRtpPad model without sfuTransportId: ${JSON.stringify(model)}`);
20
- if (!added) return logger.warn(`SfuInboundRtpPad model without added: ${JSON.stringify(model)}`);
21
- if (!rtpPadId) return logger.warn(`SfuInboundRtpPad model without rtpPadId: ${JSON.stringify(model)}`);
22
- if (!mediaUnitId) return logger.warn(`SfuInboundRtpPad model without mediaUnitId: ${JSON.stringify(model)}`);
23
-
24
- const direction = 'inbound' as const;
25
-
26
- return {
27
- sfuId,
28
- sfuTransportId,
29
- rtpPadId,
30
- direction,
31
- added,
32
- get internal() {
33
- return internal === true;
34
- },
35
- get marker() {
36
- return model.marker;
37
- },
38
- refresh: async () => {
39
- const refreshedModel = await storageProvider.sfuInboundRtpPadStorage.get(sfuTransportId);
40
-
41
- if (!refreshedModel) return;
42
-
43
- model.marker = refreshedModel.marker;
44
- }
45
- };
46
- }
@@ -1,44 +0,0 @@
1
- import * as Models from '../models/Models';
2
- import { StorageProvider } from '../storages/StorageProvider';
3
- import { logger } from './SfuEntry';
4
-
5
- export type SfuOutboundRtpPadEntry = ReturnType<typeof createSfuOutboundRtpPadEntry>;
6
-
7
- export function createSfuOutboundRtpPadEntry(storageProvider: StorageProvider, model?: Models.SfuOutboundRtpPad) {
8
- if (!model) return;
9
- const {
10
- sfuId,
11
- sfuTransportId,
12
- rtpPadId,
13
- added,
14
- internal,
15
- } = model;
16
-
17
- if (!sfuId) return logger.warn(`SfuTransport model without sfuId: ${JSON.stringify(model)}`);
18
- if (!sfuTransportId) return logger.warn(`SfuTransport model without sfuTransportId: ${JSON.stringify(model)}`);
19
- if (!rtpPadId) return logger.warn(`SfuTransport model without rtpPadId: ${JSON.stringify(model)}`);
20
- if (!added) return logger.warn(`SfuTransport model without added: ${JSON.stringify(model)}`);
21
-
22
- const direction = 'outbound' as const;
23
-
24
- return {
25
- sfuTransportId,
26
- sfuId,
27
- rtpPadId,
28
- added,
29
- direction,
30
- get internal() {
31
- return internal === true;
32
- },
33
- get marker() {
34
- return model.marker;
35
- },
36
- refresh: async () => {
37
- const refreshedModel = await storageProvider.sfuTransportStorage.get(sfuTransportId);
38
-
39
- if (!refreshedModel) return;
40
-
41
- model.marker = refreshedModel.marker;
42
- }
43
- };
44
- }
@@ -1,39 +0,0 @@
1
- import * as Models from '../models/Models';
2
- import { StorageProvider } from '../storages/StorageProvider';
3
- import { logger } from './SfuEntry';
4
-
5
- export type SfuSctpChannelEntry = ReturnType<typeof createSfuSctpChannelEntry>;
6
-
7
- export function createSfuSctpChannelEntry(storageProvider: StorageProvider, model?: Models.SfuSctpChannel) {
8
- if (!model) return;
9
- const {
10
- sfuId,
11
- sfuTransportId,
12
- sfuSctpChannelId,
13
- opened,
14
- } = model;
15
-
16
- model.sfuTransportId;
17
-
18
- if (!sfuId) return logger.warn(`SfuSctpChannel model without sfuId: ${JSON.stringify(model)}`);
19
- if (!sfuTransportId) return logger.warn(`SfuSctpChannel model without sfuTransportId: ${JSON.stringify(model)}`);
20
- if (!sfuSctpChannelId) return logger.warn(`SfuSctpChannel model without sfuSctpChannelId: ${JSON.stringify(model)}`);
21
- if (!opened) return logger.warn(`SfuSctpChannel model without opened: ${JSON.stringify(model)}`);
22
-
23
- return {
24
- sfuId,
25
- sfuTransportId,
26
- sfuSctpChannelId,
27
- opened,
28
- get marker() {
29
- return model.marker;
30
- },
31
- refresh: async () => {
32
- const refreshedModel = await storageProvider.sfuSctpChannelStorage.get(sfuSctpChannelId);
33
-
34
- if (!refreshedModel) return;
35
-
36
- model.marker = refreshedModel.marker;
37
- }
38
- };
39
- }
@@ -1,109 +0,0 @@
1
- import { asyncIteratorConverter } from '../common/utils';
2
- import * as Models from '../models/Models';
3
- import { StorageProvider } from '../storages/StorageProvider';
4
- import { createSfuEntry, logger } from './SfuEntry';
5
- import { createSfuInboundRtpPadEntry } from './SfuInboundRtpPadEntry';
6
- import { createSfuOutboundRtpPadEntry } from './SfuOutboundRtpPadEntry';
7
- import { createSfuSctpChannelEntry } from './SfuSctpChannelEntry';
8
-
9
- export type SfuTransportEntry = ReturnType<typeof createSfuTransportEntry>;
10
-
11
- export function createSfuTransportEntry(storageProvider: StorageProvider, model?: Models.SfuTransport) {
12
- if (!model) return;
13
- const {
14
- sfuId,
15
- transportId: sfuTransportId,
16
- opened,
17
- internal,
18
- } = model;
19
-
20
- if (!sfuId) return logger.warn(`SfuTransport model without sfuId: ${JSON.stringify(model)}`);
21
- if (!sfuTransportId) return logger.warn(`SfuTransport model without sfuTransportId: ${JSON.stringify(model)}`);
22
- if (!opened) return logger.warn(`SfuTransport model without opened: ${JSON.stringify(model)}`);
23
-
24
- const getSfu = async () => {
25
- return createSfuEntry(storageProvider, await storageProvider.sfuStorage.get(sfuId));
26
- };
27
- const getSfuInboundRtpPad = async (sfuInboundRtpPadId: string) => {
28
- return createSfuInboundRtpPadEntry(storageProvider, await storageProvider.sfuInboundRtpPadStorage.get(sfuInboundRtpPadId));
29
- };
30
- const getSfuOutboundRtpPad = async (sfuOutboundRtpPadId: string) => {
31
- return createSfuOutboundRtpPadEntry(storageProvider, await storageProvider.sfuOutboundRtpPadStorage.get(sfuOutboundRtpPadId));
32
- };
33
- const getSfuSctpChannel = async (sfuSctpChannelId: string) => {
34
- return createSfuSctpChannelEntry(storageProvider, await storageProvider.sfuSctpChannelStorage.get(sfuSctpChannelId));
35
- };
36
- const asyncSfuInboundRtpPadGenerator = async function *() {
37
- const sfuInboundRtpPadModels = await Promise.all(
38
- model.inboundRtpPadIds.map((sfuInboundRtpPadId) => storageProvider.sfuInboundRtpPadStorage.get(sfuInboundRtpPadId))
39
- );
40
-
41
- for (const sfuInboundRtpPadModel of sfuInboundRtpPadModels) {
42
- if (!sfuInboundRtpPadModel) continue;
43
- yield createSfuInboundRtpPadEntry(storageProvider, sfuInboundRtpPadModel);
44
- }
45
- };
46
-
47
- const asyncSfuOutboundRtpPadGenerator = async function *() {
48
- const sfuOutboundRtpPadModels = await Promise.all(
49
- model.outboundRtpPadIds.map((sfuOutboundRtpPadId) => storageProvider.sfuOutboundRtpPadStorage.get(sfuOutboundRtpPadId))
50
- );
51
-
52
- for (const sfuOutboundRtpPadModel of sfuOutboundRtpPadModels) {
53
- if (!sfuOutboundRtpPadModel) continue;
54
- yield createSfuOutboundRtpPadEntry(storageProvider, sfuOutboundRtpPadModel);
55
- }
56
- };
57
-
58
- const asyncSfuSctpChannelGenerator = async function *() {
59
- const sfuSctpChannelModels = await Promise.all(
60
- model.sctpChannelIds.map((sfuSctpChannelId) => storageProvider.sfuSctpChannelStorage.get(sfuSctpChannelId))
61
- );
62
-
63
- for (const sfuSctpChannelModel of sfuSctpChannelModels) {
64
- if (!sfuSctpChannelModel) continue;
65
- yield createSfuSctpChannelEntry(storageProvider, sfuSctpChannelModel);
66
- }
67
- };
68
-
69
- return {
70
- sfuTransportId,
71
- sfuId,
72
- opened,
73
- get internal() {
74
- return internal === true;
75
- },
76
- get marker() {
77
- return model.marker;
78
- },
79
- get inboundRtpPadIds(): ReadonlyArray<string> {
80
- return model.inboundRtpPadIds;
81
- },
82
- get outboundRtpPadIds(): ReadonlyArray<string> {
83
- return model.outboundRtpPadIds;
84
- },
85
- get sctpChannelIds(): ReadonlyArray<string> {
86
- return model.sctpChannelIds;
87
- },
88
- get inboundRtpPads(): AsyncIterableIterator<ReturnType<typeof createSfuInboundRtpPadEntry>> {
89
- return asyncIteratorConverter<ReturnType<typeof createSfuInboundRtpPadEntry>>(asyncSfuInboundRtpPadGenerator());
90
- },
91
- get outboundRtpPads(): AsyncIterableIterator<ReturnType<typeof createSfuOutboundRtpPadEntry>> {
92
- return asyncIteratorConverter<ReturnType<typeof createSfuOutboundRtpPadEntry>>(asyncSfuOutboundRtpPadGenerator());
93
- },
94
- get sctpChannels(): AsyncIterableIterator<ReturnType<typeof createSfuSctpChannelEntry>> {
95
- return asyncIteratorConverter<ReturnType<typeof createSfuSctpChannelEntry>>(asyncSfuSctpChannelGenerator());
96
- },
97
- getSfu,
98
- getSfuInboundRtpPad,
99
- getSfuOutboundRtpPad,
100
- getSfuSctpChannel,
101
- refresh: async () => {
102
- const refreshedModel = await storageProvider.sfuTransportStorage.get(sfuTransportId);
103
-
104
- if (!refreshedModel) return;
105
-
106
- model.marker = refreshedModel.marker;
107
- }
108
- };
109
- }
@@ -1,78 +0,0 @@
1
- import { createLogger } from '../common/logger';
2
- import * as Models from '../models/Models';
3
- import ipaddr from 'ipaddr.js';
4
- import { EvaluatorProcess } from '..';
5
-
6
- export const logger = createLogger('SetClientsCoordinateEvaluator');
7
-
8
- export type ClientCoordinate = {
9
- latitude: number;
10
- longitude: number;
11
- };
12
-
13
- export type GetClientCoordinate = (ipAddress: string) => ClientCoordinate | undefined;
14
-
15
- export function createSetClientsCoordinateEvaluator(
16
- getCoordinate: GetClientCoordinate,
17
- ): EvaluatorProcess {
18
- const process: EvaluatorProcess = async (context) => {
19
-
20
- const clientIds = new Set<string>();
21
-
22
- for (const observedCall of context.observedCalls.observedCalls()) {
23
- for (const observedClient of observedCall.observedClients()) {
24
- clientIds.add(observedClient.clientId);
25
- }
26
- }
27
- if (clientIds.size < 1) return;
28
-
29
- const storedClients = await context.storages.clientStorage.getAll(clientIds);
30
-
31
- for (const observedCall of context.observedCalls.observedCalls()) {
32
- for (const observedClient of observedCall.observedClients()) {
33
- const { clientId } = observedClient;
34
- const storedClient = storedClients.get(clientId);
35
-
36
- if (!storedClient || storedClient.coordinates) continue;
37
-
38
- let ipAddress: string | undefined;
39
-
40
- searchForIp: for (const observedPeerConnection of observedClient.observedPeerConnections()) {
41
- for (const iceLocalCandidate of observedPeerConnection.iceLocalCandidates()) {
42
- if (!iceLocalCandidate.address) continue;
43
-
44
- try {
45
- const addr = ipaddr.parse(iceLocalCandidate.address);
46
-
47
- ipAddress = addr.toString();
48
-
49
- break searchForIp;
50
- } catch (e) {
51
- logger.warn(`Failed to parse ip address: ${iceLocalCandidate.address}`, e);
52
-
53
- continue;
54
- }
55
-
56
- }
57
- }
58
-
59
- if (!ipAddress) continue;
60
-
61
- try {
62
- const coordinate = getCoordinate(ipAddress);
63
-
64
- if (!coordinate) continue;
65
-
66
- storedClient.coordinates = new Models.ClientCoordinate({
67
- latitude: coordinate.latitude,
68
- longitude: coordinate.longitude,
69
- });
70
- } catch (e) {
71
- logger.warn(`Failed to get coordinate for ip address: ${ipAddress}`, e);
72
- }
73
- }
74
- }
75
- };
76
-
77
- return process;
78
- }