@observertc/observer-js 1.0.1-9d3744d.0 → 1.0.1-a6fb9d3.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 (166) hide show
  1. package/README.md +535 -1
  2. package/lib/ObservedCall.d.ts +8 -7
  3. package/lib/ObservedCall.d.ts.map +1 -1
  4. package/lib/ObservedCall.js +42 -38
  5. package/lib/ObservedCallEventMonitor.d.ts +104 -0
  6. package/lib/ObservedCallEventMonitor.d.ts.map +1 -0
  7. package/lib/ObservedCallEventMonitor.js +314 -0
  8. package/lib/ObservedClient.d.ts +20 -10
  9. package/lib/ObservedClient.d.ts.map +1 -1
  10. package/lib/ObservedClient.js +330 -13
  11. package/lib/ObservedClientEventMonitor.d.ts +91 -0
  12. package/lib/ObservedClientEventMonitor.d.ts.map +1 -0
  13. package/lib/ObservedClientEventMonitor.js +254 -0
  14. package/lib/ObservedTURN.d.ts +1 -1
  15. package/lib/ObservedTURN.d.ts.map +1 -1
  16. package/lib/ObservedTURN.js +1 -0
  17. package/lib/ObservedTurnServer.d.ts +2 -2
  18. package/lib/ObservedTurnServer.d.ts.map +1 -1
  19. package/lib/Observer.d.ts +9 -6
  20. package/lib/Observer.d.ts.map +1 -1
  21. package/lib/Observer.js +26 -25
  22. package/lib/ObserverEventMonitor.d.ts +138 -0
  23. package/lib/ObserverEventMonitor.d.ts.map +1 -0
  24. package/lib/ObserverEventMonitor.js +433 -0
  25. package/lib/common/ObserverSummary.d.ts.map +1 -0
  26. package/lib/common/SummaryTypes.d.ts +75 -0
  27. package/lib/common/SummaryTypes.d.ts.map +1 -0
  28. package/lib/common/SummaryTypes.js +2 -0
  29. package/lib/index.d.ts +19 -17
  30. package/lib/index.d.ts.map +1 -1
  31. package/lib/index.js +21 -17
  32. package/lib/mediasoup/ObservedMediasoupRouter.d.ts +7 -0
  33. package/lib/mediasoup/ObservedMediasoupRouter.d.ts.map +1 -0
  34. package/lib/mediasoup/ObservedMediasoupRouter.js +12 -0
  35. package/lib/monitors/SummaryMonitor.d.ts +19 -0
  36. package/lib/monitors/SummaryMonitor.d.ts.map +1 -0
  37. package/lib/monitors/SummaryMonitor.js +129 -0
  38. package/lib/schema/ClientEventTypes.d.ts +147 -19
  39. package/lib/schema/ClientEventTypes.d.ts.map +1 -1
  40. package/lib/schema/ClientEventTypes.js +5 -2
  41. package/lib/schema/ClientSample.d.ts +1 -1
  42. package/lib/schema/ClientSample.d.ts.map +1 -1
  43. package/lib/updaters/{OnAllCallObserverUpdater_.d.ts → OnAllCallObserverUpdater.d.ts} +3 -1
  44. package/lib/updaters/OnAllCallObserverUpdater.d.ts.map +1 -0
  45. package/lib/updaters/{OnAllCallObserverUpdater_.js → OnAllCallObserverUpdater.js} +13 -1
  46. package/lib/updaters/OnAllClientCallUpdater.d.ts +2 -0
  47. package/lib/updaters/OnAllClientCallUpdater.d.ts.map +1 -1
  48. package/lib/updaters/OnAllClientCallUpdater.js +16 -0
  49. package/lib/updaters/{OnAnyCallObserverUpdater_.d.ts → OnAnyCallObserverUpdater.d.ts} +2 -1
  50. package/lib/updaters/OnAnyCallObserverUpdater.d.ts.map +1 -0
  51. package/lib/updaters/{OnAnyCallObserverUpdater_.js → OnAnyCallObserverUpdater.js} +11 -1
  52. package/lib/updaters/OnAnyClientCallUpdater.d.ts +1 -0
  53. package/lib/updaters/OnAnyClientCallUpdater.d.ts.map +1 -1
  54. package/lib/updaters/OnAnyClientCallUpdater.js +11 -2
  55. package/lib/utils/MediasoupRemoteTrackResolver.d.ts +25 -0
  56. package/lib/utils/MediasoupRemoteTrackResolver.d.ts.map +1 -0
  57. package/lib/utils/MediasoupRemoteTrackResolver.js +110 -0
  58. package/lib/utils/RemoteTrackResolver.d.ts +2 -2
  59. package/lib/utils/RemoteTrackResolver.d.ts.map +1 -1
  60. package/lib/{ObservedCertificate.d.ts → webrtc/ObservedCertificate.d.ts} +1 -1
  61. package/lib/webrtc/ObservedCertificate.d.ts.map +1 -0
  62. package/lib/{ObservedCodec.d.ts → webrtc/ObservedCodec.d.ts} +1 -1
  63. package/lib/webrtc/ObservedCodec.d.ts.map +1 -0
  64. package/lib/{ObservedDataChannel.d.ts → webrtc/ObservedDataChannel.d.ts} +3 -1
  65. package/lib/webrtc/ObservedDataChannel.d.ts.map +1 -0
  66. package/lib/{ObservedDataChannel.js → webrtc/ObservedDataChannel.js} +2 -0
  67. package/lib/{ObservedIceCandidate.d.ts → webrtc/ObservedIceCandidate.d.ts} +1 -1
  68. package/lib/webrtc/ObservedIceCandidate.d.ts.map +1 -0
  69. package/lib/{ObservedIceCandidatePair.d.ts → webrtc/ObservedIceCandidatePair.d.ts} +3 -2
  70. package/lib/webrtc/ObservedIceCandidatePair.d.ts.map +1 -0
  71. package/lib/{ObservedIceCandidatePair.js → webrtc/ObservedIceCandidatePair.js} +17 -1
  72. package/lib/{ObservedIceTransport.d.ts → webrtc/ObservedIceTransport.d.ts} +1 -1
  73. package/lib/webrtc/ObservedIceTransport.d.ts.map +1 -0
  74. package/lib/{ObservedInboundRtp.d.ts → webrtc/ObservedInboundRtp.d.ts} +2 -2
  75. package/lib/webrtc/ObservedInboundRtp.d.ts.map +1 -0
  76. package/lib/{ObservedInboundTrack.d.ts → webrtc/ObservedInboundTrack.d.ts} +7 -4
  77. package/lib/webrtc/ObservedInboundTrack.d.ts.map +1 -0
  78. package/lib/{ObservedInboundTrack.js → webrtc/ObservedInboundTrack.js} +4 -1
  79. package/lib/{ObservedMediaPlayout.d.ts → webrtc/ObservedMediaPlayout.d.ts} +2 -2
  80. package/lib/webrtc/ObservedMediaPlayout.d.ts.map +1 -0
  81. package/lib/{ObservedMediaSource.d.ts → webrtc/ObservedMediaSource.d.ts} +2 -2
  82. package/lib/webrtc/ObservedMediaSource.d.ts.map +1 -0
  83. package/lib/{ObservedOutboundRtp.d.ts → webrtc/ObservedOutboundRtp.d.ts} +2 -2
  84. package/lib/webrtc/ObservedOutboundRtp.d.ts.map +1 -0
  85. package/lib/{ObservedOutboundTrack.d.ts → webrtc/ObservedOutboundTrack.d.ts} +7 -4
  86. package/lib/webrtc/ObservedOutboundTrack.d.ts.map +1 -0
  87. package/lib/{ObservedOutboundTrack.js → webrtc/ObservedOutboundTrack.js} +4 -1
  88. package/lib/{ObservedPeerConnection.d.ts → webrtc/ObservedPeerConnection.d.ts} +26 -4
  89. package/lib/webrtc/ObservedPeerConnection.d.ts.map +1 -0
  90. package/lib/{ObservedPeerConnection.js → webrtc/ObservedPeerConnection.js} +82 -17
  91. package/lib/{ObservedPeerConnectionTransport.d.ts → webrtc/ObservedPeerConnectionTransport.d.ts} +1 -1
  92. package/lib/webrtc/ObservedPeerConnectionTransport.d.ts.map +1 -0
  93. package/lib/{ObservedRemoteInboundRtp.d.ts → webrtc/ObservedRemoteInboundRtp.d.ts} +2 -2
  94. package/lib/webrtc/ObservedRemoteInboundRtp.d.ts.map +1 -0
  95. package/lib/{ObservedRemoteOutboundRtp.d.ts → webrtc/ObservedRemoteOutboundRtp.d.ts} +2 -2
  96. package/lib/webrtc/ObservedRemoteOutboundRtp.d.ts.map +1 -0
  97. package/package.json +1 -1
  98. package/src/ObservedCall.ts +44 -48
  99. package/src/ObservedCallEventMonitor.ts +392 -0
  100. package/src/ObservedClient.ts +363 -22
  101. package/src/ObservedClientEventMonitor.ts +309 -0
  102. package/src/ObservedTURN.ts +2 -1
  103. package/src/ObservedTurnServer.ts +2 -2
  104. package/src/Observer.ts +37 -33
  105. package/src/ObserverEventMonitor.ts +551 -0
  106. package/src/common/SummaryTypes.ts +91 -0
  107. package/src/index.ts +19 -18
  108. package/src/mediasoup/ObservedMediasoupRouter.ts +12 -0
  109. package/src/monitors/SummaryMonitor.ts +181 -0
  110. package/src/schema/ClientEventTypes.ts +187 -19
  111. package/src/schema/ClientSample.ts +1 -1
  112. package/src/updaters/{OnAllCallObserverUpdater_.ts → OnAllCallObserverUpdater.ts} +14 -1
  113. package/src/updaters/OnAllClientCallUpdater.ts +15 -0
  114. package/src/updaters/{OnAnyCallObserverUpdater_.ts → OnAnyCallObserverUpdater.ts} +12 -3
  115. package/src/updaters/OnAnyClientCallUpdater.ts +9 -2
  116. package/src/utils/MediasoupRemoteTrackResolver.ts +155 -0
  117. package/src/utils/RemoteTrackResolver.ts +2 -2
  118. package/src/{ObservedCertificate.ts → webrtc/ObservedCertificate.ts} +1 -1
  119. package/src/{ObservedCodec.ts → webrtc/ObservedCodec.ts} +1 -1
  120. package/src/{ObservedDataChannel.ts → webrtc/ObservedDataChannel.ts} +4 -1
  121. package/src/{ObservedIceCandidate.ts → webrtc/ObservedIceCandidate.ts} +1 -1
  122. package/src/{ObservedIceCandidatePair.ts → webrtc/ObservedIceCandidatePair.ts} +19 -3
  123. package/src/{ObservedIceTransport.ts → webrtc/ObservedIceTransport.ts} +1 -1
  124. package/src/{ObservedInboundRtp.ts → webrtc/ObservedInboundRtp.ts} +2 -2
  125. package/src/{ObservedInboundTrack.ts → webrtc/ObservedInboundTrack.ts} +9 -4
  126. package/src/{ObservedMediaPlayout.ts → webrtc/ObservedMediaPlayout.ts} +2 -2
  127. package/src/{ObservedMediaSource.ts → webrtc/ObservedMediaSource.ts} +2 -2
  128. package/src/{ObservedOutboundRtp.ts → webrtc/ObservedOutboundRtp.ts} +2 -2
  129. package/src/{ObservedOutboundTrack.ts → webrtc/ObservedOutboundTrack.ts} +9 -4
  130. package/src/{ObservedPeerConnection.ts → webrtc/ObservedPeerConnection.ts} +124 -37
  131. package/src/{ObservedPeerConnectionTransport.ts → webrtc/ObservedPeerConnectionTransport.ts} +1 -1
  132. package/src/{ObservedRemoteInboundRtp.ts → webrtc/ObservedRemoteInboundRtp.ts} +2 -2
  133. package/src/{ObservedRemoteOutboundRtp.ts → webrtc/ObservedRemoteOutboundRtp.ts} +2 -2
  134. package/lib/ObservedCertificate.d.ts.map +0 -1
  135. package/lib/ObservedCodec.d.ts.map +0 -1
  136. package/lib/ObservedDataChannel.d.ts.map +0 -1
  137. package/lib/ObservedIceCandidate.d.ts.map +0 -1
  138. package/lib/ObservedIceCandidatePair.d.ts.map +0 -1
  139. package/lib/ObservedIceTransport.d.ts.map +0 -1
  140. package/lib/ObservedInboundRtp.d.ts.map +0 -1
  141. package/lib/ObservedInboundTrack.d.ts.map +0 -1
  142. package/lib/ObservedMediaPlayout.d.ts.map +0 -1
  143. package/lib/ObservedMediaSource.d.ts.map +0 -1
  144. package/lib/ObservedOutboundRtp.d.ts.map +0 -1
  145. package/lib/ObservedOutboundTrack.d.ts.map +0 -1
  146. package/lib/ObservedPeerConnection.d.ts.map +0 -1
  147. package/lib/ObservedPeerConnectionTransport.d.ts.map +0 -1
  148. package/lib/ObservedRemoteInboundRtp.d.ts.map +0 -1
  149. package/lib/ObservedRemoteOutboundRtp.d.ts.map +0 -1
  150. package/lib/ObserverSummary.d.ts.map +0 -1
  151. package/lib/updaters/OnAllCallObserverUpdater_.d.ts.map +0 -1
  152. package/lib/updaters/OnAnyCallObserverUpdater_.d.ts.map +0 -1
  153. /package/lib/{ObserverSummary.d.ts → common/ObserverSummary.d.ts} +0 -0
  154. /package/lib/{ObserverSummary.js → common/ObserverSummary.js} +0 -0
  155. /package/lib/{ObservedCertificate.js → webrtc/ObservedCertificate.js} +0 -0
  156. /package/lib/{ObservedCodec.js → webrtc/ObservedCodec.js} +0 -0
  157. /package/lib/{ObservedIceCandidate.js → webrtc/ObservedIceCandidate.js} +0 -0
  158. /package/lib/{ObservedIceTransport.js → webrtc/ObservedIceTransport.js} +0 -0
  159. /package/lib/{ObservedInboundRtp.js → webrtc/ObservedInboundRtp.js} +0 -0
  160. /package/lib/{ObservedMediaPlayout.js → webrtc/ObservedMediaPlayout.js} +0 -0
  161. /package/lib/{ObservedMediaSource.js → webrtc/ObservedMediaSource.js} +0 -0
  162. /package/lib/{ObservedOutboundRtp.js → webrtc/ObservedOutboundRtp.js} +0 -0
  163. /package/lib/{ObservedPeerConnectionTransport.js → webrtc/ObservedPeerConnectionTransport.js} +0 -0
  164. /package/lib/{ObservedRemoteInboundRtp.js → webrtc/ObservedRemoteInboundRtp.js} +0 -0
  165. /package/lib/{ObservedRemoteOutboundRtp.js → webrtc/ObservedRemoteOutboundRtp.js} +0 -0
  166. /package/src/{ObserverSummary.ts → common/ObserverSummary.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAGzE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAwB,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACpI,OAAO,KAAK,QAAQ,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKlD,MAAM,MAAM,sBAAsB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IACvG,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IACxD,KAAK,EAAE,EAAE,CAAC;IACV,MAAM,EAAE,EAAE,CAAC;IACX,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC;IACrB,QAAQ,EAAE,CAAC,cAAc,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,EAAE,CAAC;IACT,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;IACrB,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;IACzB,cAAc,EAAE,CAAC,aAAa,CAAC,CAAC;IAChC,WAAW,EAAE,CAAC,WAAW,CAAC,CAAC;IAE3B,iBAAiB,EAAE,CAAC,sBAAsB,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,cAAc;IACtC,EAAE,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/G,GAAG,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAChH,IAAI,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACjH,IAAI,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;CAChG;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,SAAQ,YAAY;aA+FjG,QAAQ,EAAE,sBAAsB,CAAC,OAAO,CAAC;aACzC,IAAI,EAAE,YAAY;IA/FnC,SAAgB,SAAS,EAAE,SAAS,CAAC;IAErC,SAAgB,uBAAuB,sCAA6C;IACpF,SAAgB,eAAe,EAAE,eAAe,CAG9C;IAEK,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEtC,OAAO,SAAc;IACrB,eAAe,SAAK;IACpB,MAAM,UAAS;IAEf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,eAAe,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAC3C,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC7B,OAAO,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAM;IAEhC,SAAS,UAAS;IAClB,QAAQ,UAAS;IACjB,wBAAwB,SAAK;IAC7B,wBAAwB,SAAK;IAE7B,uBAAuB,SAAK;IAC5B,2BAA2B,SAAK;IAChC,wBAAwB,SAAK;IAC7B,yBAAyB,SAAK;IAC9B,6BAA6B,SAAK;IAClC,4BAA4B,SAAK;IACjC,gCAAgC,SAAK;IACrC,uBAAuB,SAAK;IAC5B,uBAAuB,SAAK;IAC5B,mBAAmB,SAAK;IACxB,mBAAmB,SAAK;IACxB,cAAc,SAAK;IACnB,kBAAkB,SAAK;IAEvB,uBAAuB,SAAK;IAC5B,uBAAuB,SAAK;IAC5B,mBAAmB,SAAK;IACxB,mBAAmB,SAAK;IACxB,yBAAyB,SAAK;IAC9B,6BAA6B,SAAK;IAClC,4BAA4B,SAAK;IACjC,gCAAgC,SAAK;IACrC,uBAAuB,SAAK;IAC5B,2BAA2B,SAAK;IAChC,wBAAwB,SAAK;IAC7B,uBAAuB,SAAK;IAC5B,2BAA2B,SAAK;IAChC,wBAAwB,SAAK;IAC7B,yBAAyB,SAAK;IAC9B,yBAAyB,SAAK;IAC9B,6BAA6B,SAAK;IAElC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,mBAAmB,SAAK;IACxB,mBAAmB,SAAK;IACxB,qBAAqB,SAAK;IAC1B,qBAAqB,SAAK;IAE1B,yBAAyB,SAAK;IAC9B,oBAAoB,SAAK;IACzB,0BAA0B,SAAK;IAC/B,sBAAsB,SAAK;IAC3B,oBAAoB,SAAK;IAEzB,wBAAwB,SAAK;IAC7B,yBAAyB,SAAK;IAC9B,yBAAyB,SAAK;IAC9B,6BAA6B,SAAK;IAClC,mBAAmB,SAAK;IAExB,aAAa,SAAK;IAClB,yBAAyB,SAAK;IAC9B,mBAAmB,SAAK;IAE/B,SAAgB,YAAY,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAM;IACvD,MAAM,EAAE,WAAW,EAAE,CAAM;IAElC,OAAO,CAAC,WAAW,CAAkH;IACrI,OAAO,CAAC,eAAe,CAAC,CAAgC;gBAGvC,QAAQ,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACzC,IAAI,EAAE,YAAY;IASnC,IAAW,QAAQ,WAElB;IAED,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED,IAAW,uBAAuB,WAEjC;IAED,IAAW,KAAK,uBAEf;IAEM,KAAK;IAsBZ,OAAO,CAAC,gBAAgB;IAcjB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IA+KzC,OAAO,CAAC,mBAAmB;IAoPpB,cAAc,CAAC,QAAQ,EAAE,cAAc;IAQvC,WAAW,CAAC,KAAK,EAAE,WAAW;IAQ9B,WAAW,CAAC,KAAK,EAAE,WAAW;IAQ9B,mBAAmB,CAAC,IAAI,EAAE,aAAa;IAQvC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAS5C,WAAW,CAAC,QAAQ,EAAE,cAAc;IAyBpC,QAAQ,CAAC,KAAK,EAAE,WAAW;IAO3B,iBAAiB,CAAC,KAAK,EAAE,aAAa;IAK7C,OAAO,CAAC,qBAAqB;IA0B7B,OAAO,CAAC,gBAAgB;CAwFxB"}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ObservedClient = void 0;
4
4
  const events_1 = require("events");
5
- const ObservedPeerConnection_1 = require("./ObservedPeerConnection");
5
+ const ObservedPeerConnection_1 = require("./webrtc/ObservedPeerConnection");
6
6
  const logger_1 = require("./common/logger");
7
7
  const ClientEventTypes_1 = require("./schema/ClientEventTypes");
8
8
  const ClientMetaTypes_1 = require("./schema/ClientMetaTypes");
@@ -10,21 +10,22 @@ const utils_1 = require("./common/utils");
10
10
  const Detectors_1 = require("./detectors/Detectors");
11
11
  const logger = (0, logger_1.createLogger)('ObservedClient');
12
12
  class ObservedClient extends events_1.EventEmitter {
13
+ settings;
13
14
  call;
14
15
  detectors;
15
- clientId;
16
16
  observedPeerConnections = new Map();
17
17
  calculatedScore = {
18
18
  weight: 1,
19
19
  value: undefined,
20
20
  };
21
- appData;
22
21
  attachments;
23
22
  updated = Date.now();
24
23
  acceptedSamples = 0;
25
24
  closed = false;
26
25
  joinedAt;
27
26
  leftAt;
27
+ closedAt;
28
+ lastSampleTimestamp;
28
29
  // the timestamp of the CLIENT_JOINED event
29
30
  operationSystem;
30
31
  engine;
@@ -87,14 +88,22 @@ class ObservedClient extends events_1.EventEmitter {
87
88
  totalNumberOfIssues = 0;
88
89
  mediaDevices = [];
89
90
  issues = [];
91
+ _injections = {};
92
+ _autoCloseTimer;
90
93
  constructor(settings, call) {
91
94
  super();
95
+ this.settings = settings;
92
96
  this.call = call;
93
97
  this.setMaxListeners(Infinity);
94
- this.clientId = settings.clientId;
95
- this.appData = settings.appData ?? {};
98
+ this._createAutoClose();
96
99
  this.detectors = new Detectors_1.Detectors();
97
100
  }
101
+ get clientId() {
102
+ return this.settings.clientId;
103
+ }
104
+ get appData() {
105
+ return this.settings.appData ?? {};
106
+ }
98
107
  get numberOfPeerConnections() {
99
108
  return this.observedPeerConnections.size;
100
109
  }
@@ -105,12 +114,37 @@ class ObservedClient extends events_1.EventEmitter {
105
114
  if (this.closed)
106
115
  return;
107
116
  this.closed = true;
117
+ this._injections.clientEvents?.forEach((clientEvent) => this._processClientEvent(clientEvent));
118
+ this._injections.clientIssues?.forEach((clientIssue) => this.addIssue(clientIssue));
119
+ this._injections.extensionStats?.forEach((extensionStat) => this.addExtensionStats(extensionStat));
120
+ this._injections.clientMetaItems?.forEach((clientMetaItem) => this.addMetadata(clientMetaItem));
108
121
  Array.from(this.observedPeerConnections.values()).forEach((peerConnection) => peerConnection.close());
122
+ if (!this.leftAt) {
123
+ this.leftAt = this.lastSampleTimestamp;
124
+ if (this.leftAt) {
125
+ this.emit('left');
126
+ }
127
+ }
128
+ this.closedAt = Date.now();
109
129
  this.emit('close');
110
130
  }
131
+ _createAutoClose() {
132
+ if (this.closed)
133
+ return;
134
+ if (this.settings.maxIdleTimeMs === undefined || this.settings.maxIdleTimeMs < 1)
135
+ return;
136
+ clearTimeout(this._autoCloseTimer);
137
+ this._autoCloseTimer = setTimeout(() => {
138
+ if (this.closed)
139
+ return;
140
+ logger.debug(`Client ${this.clientId} is idle for ${this.settings.maxIdleTimeMs}ms, closing...`);
141
+ this.close();
142
+ }, this.settings.maxIdleTimeMs);
143
+ }
111
144
  accept(sample) {
112
145
  if (this.closed)
113
146
  throw new Error(`Client ${this.clientId} is closed`);
147
+ this._createAutoClose();
114
148
  const now = Date.now();
115
149
  const elapsedInMs = now - this.updated;
116
150
  const elapsedInSeconds = elapsedInMs / 1000;
@@ -146,8 +180,11 @@ class ObservedClient extends events_1.EventEmitter {
146
180
  this.usingTCP = false;
147
181
  this.currentMinRttInMs = undefined;
148
182
  this.currentMaxRttInMs = undefined;
183
+ this._mergeInjections(sample);
184
+ const clientEventsPostBuffer = [];
149
185
  for (const clientEvent of sample.clientEvents ?? []) {
150
- this._processClientEvent(clientEvent);
186
+ this._processClientEvent(clientEvent, clientEventsPostBuffer);
187
+ this.call.observer.emit('client-event', this, clientEvent);
151
188
  }
152
189
  for (const metaData of sample.clientMetaItems ?? []) {
153
190
  this.addMetadata(metaData);
@@ -212,7 +249,9 @@ class ObservedClient extends events_1.EventEmitter {
212
249
  ++numberOfRttMeasurements;
213
250
  }
214
251
  }
215
- sample.peerConnections?.forEach(this._updatePeerConnection.bind(this));
252
+ for (const clientEvent of clientEventsPostBuffer) {
253
+ this._processClientEvent(clientEvent);
254
+ }
216
255
  // emit new attachments?
217
256
  this.attachments = sample.attachments;
218
257
  this.totalDataChannelBytesReceived += this.deltaDataChannelBytesReceived;
@@ -240,11 +279,9 @@ class ObservedClient extends events_1.EventEmitter {
240
279
  this.currentAvgRttInMs = 0 < numberOfRttMeasurements ? sumOfRtts / numberOfRttMeasurements : undefined;
241
280
  this.calculatedScore.value = sample.score;
242
281
  this.detectors.update();
282
+ this.lastSampleTimestamp = sample.timestamp;
243
283
  // emit update
244
- this.emit('update', {
245
- sample,
246
- elapsedTimeInMs: now - this.updated,
247
- });
284
+ this.emit('update', sample, now - this.updated);
248
285
  this.updated = now;
249
286
  // if result changed after update
250
287
  if (this.calculatedScore.value) {
@@ -252,7 +289,7 @@ class ObservedClient extends events_1.EventEmitter {
252
289
  ++this.numberOfScoreMeasurements;
253
290
  }
254
291
  }
255
- _processClientEvent(event) {
292
+ _processClientEvent(event, postBuffer) {
256
293
  // eslint-disable-next-line no-console
257
294
  // console.warn('ClientEvent', event);
258
295
  switch (event.type) {
@@ -270,6 +307,7 @@ class ObservedClient extends events_1.EventEmitter {
270
307
  logger.warn(`Client ${this.clientId} joinedAt timestamp was updated to ${event.timestamp}. the joined event will not be emitted.`);
271
308
  }
272
309
  }
310
+ logger.debug('Client %s joined at %o', this.clientId, event);
273
311
  break;
274
312
  }
275
313
  case ClientEventTypes_1.ClientEventTypes.CLIENT_LEFT: {
@@ -282,10 +320,253 @@ class ObservedClient extends events_1.EventEmitter {
282
320
  logger.warn(`Client ${this.clientId} leftAt timestamp was already set`);
283
321
  }
284
322
  }
323
+ logger.debug('Client %s left at %o', this.clientId, event);
324
+ break;
325
+ }
326
+ case ClientEventTypes_1.ClientEventTypes.PEER_CONNECTION_OPENED: {
327
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
328
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string') {
329
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
330
+ if (observedPeerConnection) {
331
+ observedPeerConnection.openedAt = event.timestamp;
332
+ }
333
+ else if (postBuffer) {
334
+ postBuffer.push(event);
335
+ }
336
+ else {
337
+ logger.warn('Received PEER_CONNECTION_OPENED event without a corresponding observedPeerConnection: %o', event);
338
+ }
339
+ }
340
+ break;
341
+ }
342
+ case ClientEventTypes_1.ClientEventTypes.PEER_CONNECTION_CLOSED: {
343
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
344
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string') {
345
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
346
+ if (observedPeerConnection) {
347
+ observedPeerConnection.closedAt = event.timestamp;
348
+ }
349
+ else if (postBuffer) {
350
+ postBuffer.push(event);
351
+ }
352
+ else {
353
+ logger.warn('Received PEER_CONNECTION_CLOSED event without a corresponding observedPeerConnection: %o', event);
354
+ }
355
+ }
356
+ break;
357
+ }
358
+ case ClientEventTypes_1.ClientEventTypes.MEDIA_TRACK_ADDED: {
359
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
360
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.trackId && typeof payload.trackId === 'string') {
361
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
362
+ const observedTrack = observedPeerConnection?.observedInboundTracks.get(payload.trackId) ?? observedPeerConnection?.observedOutboundTracks.get(payload.trackId);
363
+ if (observedTrack) {
364
+ observedTrack.addedAt = event.timestamp;
365
+ }
366
+ else if (postBuffer) {
367
+ postBuffer.push(event);
368
+ }
369
+ else {
370
+ logger.warn('Received MEDIA_TRACK_ADDED event without a corresponding observedPeerConnection or observedTrack: %o', event);
371
+ }
372
+ }
373
+ break;
374
+ }
375
+ case ClientEventTypes_1.ClientEventTypes.MEDIA_TRACK_REMOVED: {
376
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
377
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.trackId && typeof payload.trackId === 'string') {
378
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
379
+ const observedTrack = observedPeerConnection?.observedInboundTracks.get(payload.trackId) ?? observedPeerConnection?.observedOutboundTracks.get(payload.trackId);
380
+ if (observedTrack) {
381
+ observedTrack.removedAt = event.timestamp;
382
+ }
383
+ else if (postBuffer) {
384
+ postBuffer.push(event);
385
+ }
386
+ else {
387
+ logger.warn('Received MEDIA_TRACK_REMOVED event without a corresponding observedPeerConnection or observedTrack: %o', event);
388
+ }
389
+ }
390
+ break;
391
+ }
392
+ case ClientEventTypes_1.ClientEventTypes.DATA_CHANNEL_OPEN: {
393
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
394
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.dataChannelId && typeof payload.dataChannelId === 'string') {
395
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
396
+ const observedDataChannel = observedPeerConnection?.observedDataChannels.get(payload.dataChannelId);
397
+ if (observedDataChannel) {
398
+ observedDataChannel.addedAt = event.timestamp;
399
+ }
400
+ else if (postBuffer) {
401
+ postBuffer.push(event);
402
+ }
403
+ else {
404
+ logger.warn('Received DATA_CHANNEL_OPENED event without a corresponding observedPeerConnection or observedDataChannel: %o', event);
405
+ }
406
+ }
407
+ break;
408
+ }
409
+ case ClientEventTypes_1.ClientEventTypes.DATA_CHANNEL_CLOSED: {
410
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
411
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.dataChannelId && typeof payload.dataChannelId === 'string') {
412
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
413
+ const observedDataChannel = observedPeerConnection?.observedDataChannels.get(payload.dataChannelId);
414
+ if (observedDataChannel) {
415
+ observedDataChannel.removedAt = event.timestamp;
416
+ }
417
+ else if (postBuffer) {
418
+ postBuffer.push(event);
419
+ }
420
+ else {
421
+ logger.warn('Received DATA_CHANNEL_CLOSE event without a corresponding observedPeerConnection or observedDataChannel: %o', event);
422
+ }
423
+ }
424
+ break;
425
+ }
426
+ case ClientEventTypes_1.ClientEventTypes.MEDIA_TRACK_MUTED: {
427
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
428
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.trackId && typeof payload.trackId === 'string') {
429
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
430
+ const observedInboundTrack = observedPeerConnection?.observedInboundTracks.get(payload.trackId);
431
+ const observedOutboundTrack = observedPeerConnection?.observedOutboundTracks.get(payload.trackId);
432
+ if (observedPeerConnection) {
433
+ if (observedInboundTrack) {
434
+ observedInboundTrack.muted = true;
435
+ observedPeerConnection?.emit('muted-inbound-track', observedInboundTrack);
436
+ }
437
+ else if (observedOutboundTrack) {
438
+ observedOutboundTrack.muted = true;
439
+ observedPeerConnection?.emit('muted-outbound-track', observedOutboundTrack);
440
+ }
441
+ }
442
+ else if (postBuffer) {
443
+ postBuffer.push(event);
444
+ }
445
+ else {
446
+ logger.warn('Received MEDIA_TRACK_MUTED event without a corresponding observedPeerConnection or observedTrack: %o', event);
447
+ }
448
+ }
449
+ break;
450
+ }
451
+ case ClientEventTypes_1.ClientEventTypes.MEDIA_TRACK_UNMUTED: {
452
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
453
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.trackId && typeof payload.trackId === 'string') {
454
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
455
+ const observedInboundTrack = observedPeerConnection?.observedInboundTracks.get(payload.trackId);
456
+ const observedOutboundTrack = observedPeerConnection?.observedOutboundTracks.get(payload.trackId);
457
+ if (observedPeerConnection) {
458
+ if (observedInboundTrack) {
459
+ observedInboundTrack.muted = false;
460
+ observedPeerConnection?.emit('unmuted-inbound-track', observedInboundTrack);
461
+ }
462
+ else if (observedOutboundTrack) {
463
+ observedOutboundTrack.muted = false;
464
+ observedPeerConnection?.emit('unmuted-outbound-track', observedOutboundTrack);
465
+ }
466
+ }
467
+ else if (postBuffer) {
468
+ postBuffer.push(event);
469
+ }
470
+ else {
471
+ logger.warn('Received MEDIA_TRACK_UNMUTED event without a corresponding observedPeerConnection or observedTrack: %o', event);
472
+ }
473
+ }
474
+ break;
475
+ }
476
+ case ClientEventTypes_1.ClientEventTypes.ICE_CONNECTION_STATE_CHANGED: {
477
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
478
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.iceConnectionState && typeof payload.iceConnectionState === 'string') {
479
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
480
+ if (observedPeerConnection) {
481
+ observedPeerConnection.iceConnectionState = payload.iceConnectionState;
482
+ observedPeerConnection.emit('iceconnectionstatechange', {
483
+ state: payload.iceConnectionState,
484
+ });
485
+ }
486
+ else if (postBuffer) {
487
+ postBuffer.push(event);
488
+ }
489
+ else {
490
+ logger.warn('Received ICE_CONNECTION_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
491
+ }
492
+ }
493
+ break;
494
+ }
495
+ case ClientEventTypes_1.ClientEventTypes.ICE_GATHERING_STATE_CHANGED: {
496
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
497
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.iceGatheringState && typeof payload.iceGatheringState === 'string') {
498
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
499
+ if (observedPeerConnection) {
500
+ observedPeerConnection.iceGatheringState = payload.iceGatheringState;
501
+ observedPeerConnection.emit('icegatheringstatechange', {
502
+ state: payload.iceGatheringState,
503
+ });
504
+ }
505
+ else if (postBuffer) {
506
+ postBuffer.push(event);
507
+ }
508
+ else {
509
+ logger.warn('Received ICE_GATHERING_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
510
+ }
511
+ }
512
+ break;
513
+ }
514
+ case ClientEventTypes_1.ClientEventTypes.PEER_CONNECTION_STATE_CHANGED: {
515
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
516
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.peerConnectionState && typeof payload.peerConnectionState === 'string') {
517
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
518
+ if (observedPeerConnection) {
519
+ observedPeerConnection.connectionState = payload.peerConnectionState;
520
+ observedPeerConnection.emit('connectionstatechange', {
521
+ state: payload.peerConnectionState,
522
+ });
523
+ }
524
+ else if (postBuffer) {
525
+ postBuffer.push(event);
526
+ }
527
+ else {
528
+ logger.warn('Received PEER_CONNECTION_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
529
+ }
530
+ }
285
531
  break;
286
532
  }
287
533
  }
288
- this.call.observer.emit('client-event', this, event);
534
+ this.emit('clientEvent', event);
535
+ }
536
+ injectMetaData(metaData) {
537
+ if (this.closed)
538
+ return;
539
+ if (!this._injections.clientMetaItems)
540
+ this._injections.clientMetaItems = [];
541
+ this._injections.clientMetaItems.push(metaData);
542
+ }
543
+ injectEvent(event) {
544
+ if (this.closed)
545
+ return;
546
+ if (!this._injections.clientEvents)
547
+ this._injections.clientEvents = [];
548
+ this._injections.clientEvents.push(event);
549
+ }
550
+ injectIssue(issue) {
551
+ if (this.closed)
552
+ return;
553
+ if (!this._injections.clientIssues)
554
+ this._injections.clientIssues = [];
555
+ this._injections.clientIssues.push(issue);
556
+ }
557
+ injectExtensionStat(stat) {
558
+ if (this.closed)
559
+ return;
560
+ if (!this._injections.extensionStats)
561
+ this._injections.extensionStats = [];
562
+ this._injections.extensionStats.push(stat);
563
+ }
564
+ injectAttachment(key, value) {
565
+ if (this.closed)
566
+ return;
567
+ if (!this._injections.attachments)
568
+ this._injections.attachments = {};
569
+ this._injections.attachments[key] = value;
289
570
  }
290
571
  addMetadata(metadata) {
291
572
  if (this.closed)
@@ -318,6 +599,7 @@ class ObservedClient extends events_1.EventEmitter {
318
599
  }
319
600
  addExtensionStats(stats) {
320
601
  this.call.observer.emit('client-extension-stats', this, stats);
602
+ this.emit('extensionStats', stats);
321
603
  }
322
604
  _updatePeerConnection(sample) {
323
605
  let observedPeerConnection = this.observedPeerConnections.get(sample.peerConnectionId);
@@ -335,5 +617,40 @@ class ObservedClient extends events_1.EventEmitter {
335
617
  observedPeerConnection.accept(sample);
336
618
  return observedPeerConnection;
337
619
  }
620
+ _mergeInjections(sample) {
621
+ if (this.closed)
622
+ return sample;
623
+ if (this._injections.clientEvents) {
624
+ if (!sample.clientEvents)
625
+ sample.clientEvents = [];
626
+ sample.clientEvents.push(...this._injections.clientEvents);
627
+ this._injections.clientEvents = undefined;
628
+ }
629
+ if (this._injections.clientIssues) {
630
+ if (!sample.clientIssues)
631
+ sample.clientIssues = [];
632
+ sample.clientIssues.push(...this._injections.clientIssues);
633
+ this._injections.clientIssues = undefined;
634
+ }
635
+ if (this._injections.extensionStats) {
636
+ if (!sample.extensionStats)
637
+ sample.extensionStats = [];
638
+ sample.extensionStats.push(...this._injections.extensionStats);
639
+ this._injections.extensionStats = undefined;
640
+ }
641
+ if (this._injections.attachments) {
642
+ if (!sample.attachments)
643
+ sample.attachments = {};
644
+ Object.assign(sample.attachments, this._injections.attachments);
645
+ this._injections.attachments = undefined;
646
+ }
647
+ if (this._injections.clientMetaItems) {
648
+ if (!sample.clientMetaItems)
649
+ sample.clientMetaItems = [];
650
+ sample.clientMetaItems.push(...this._injections.clientMetaItems);
651
+ this._injections.clientMetaItems = undefined;
652
+ }
653
+ return sample;
654
+ }
338
655
  }
339
656
  exports.ObservedClient = ObservedClient;
@@ -0,0 +1,91 @@
1
+ import { ObservedCertificate } from './webrtc/ObservedCertificate';
2
+ import { ObservedClient, ObservedClientEvents } from './ObservedClient';
3
+ import { ObservedCodec } from './webrtc/ObservedCodec';
4
+ import { ObservedDataChannel } from './webrtc/ObservedDataChannel';
5
+ import { ObservedIceCandidate } from './webrtc/ObservedIceCandidate';
6
+ import { ObservedIceCandidatePair } from './webrtc/ObservedIceCandidatePair';
7
+ import { ObservedIceTransport } from './webrtc/ObservedIceTransport';
8
+ import { ObservedInboundRtp } from './webrtc/ObservedInboundRtp';
9
+ import { ObservedInboundTrack } from './webrtc/ObservedInboundTrack';
10
+ import { ObservedMediaPlayout } from './webrtc/ObservedMediaPlayout';
11
+ import { ObservedMediaSource } from './webrtc/ObservedMediaSource';
12
+ import { ObservedOutboundRtp } from './webrtc/ObservedOutboundRtp';
13
+ import { ObservedOutboundTrack } from './webrtc/ObservedOutboundTrack';
14
+ import { ObservedPeerConnection } from './webrtc/ObservedPeerConnection';
15
+ import { ClientIssue, ClientMetaData, ExtensionStat } from './schema/ClientSample';
16
+ export declare class ObservedClientEventMonitor<AppContext, ClientAppData extends Record<string, unknown> = Record<string, unknown>> {
17
+ readonly observedClient: ObservedClient<ClientAppData>;
18
+ readonly context: AppContext;
19
+ constructor(observedClient: ObservedClient<ClientAppData>, context: AppContext);
20
+ onClientUpdated?: (client: ObservedClient, event: ObservedClientEvents['update'][0], ctx: AppContext) => void;
21
+ private _onClientUpdated;
22
+ onClientClosed?: (client: ObservedClient, ctx: AppContext) => void;
23
+ private _onClientClosed;
24
+ onPeerConnectionAdded?: (peerConnection: ObservedPeerConnection, ctx: AppContext) => void;
25
+ private _onPeerConnconnectionAdded;
26
+ onPeerConnectionRemoved?: (peerConnection: ObservedPeerConnection, ctx: AppContext) => void;
27
+ private _onPeerConnectionRemoved;
28
+ onCertificateAdded?: (certificate: ObservedCertificate, ctx: AppContext) => void;
29
+ private _onCertificateAdded;
30
+ onCertificateRemoved?: (certificate: ObservedCertificate, ctx: AppContext) => void;
31
+ private _onCertificateRemoved;
32
+ onInboundTrackAdded?: (inboundTrack: ObservedInboundTrack, ctx: AppContext) => void;
33
+ private _onInboundTrackAdded;
34
+ onInboundTrackRemoved?: (inboundTrack: ObservedInboundTrack, ctx: AppContext) => void;
35
+ private _onInboundTrackRemoved;
36
+ onOutboundTrackAdded?: (outboundTrack: ObservedOutboundTrack, ctx: AppContext) => void;
37
+ private _onOutboundTrackAdded;
38
+ onOutboundTrackRemoved?: (outboundTrack: ObservedOutboundTrack, ctx: AppContext) => void;
39
+ private _onOutboundTrackRemoved;
40
+ onInboundRtpAdded?: (inboundRtp: ObservedInboundRtp, ctx: AppContext) => void;
41
+ private _onInboundRtpAdded;
42
+ onInboundRtpRemoved?: (inboundRtp: ObservedInboundRtp, ctx: AppContext) => void;
43
+ private _onInboundRtpRemoved;
44
+ onOutboundRtpAdded?: (outboundRtp: ObservedOutboundRtp, ctx: AppContext) => void;
45
+ private _onOutboundRtpAdded;
46
+ onOutboundRtpRemoved?: (outboundRtp: ObservedOutboundRtp, ctx: AppContext) => void;
47
+ private _onOutboundRtpRemoved;
48
+ onDataChannelAdded?: (dataChannel: ObservedDataChannel, ctx: AppContext) => void;
49
+ private _onDataChannelAdded;
50
+ onDataChannelRemoved?: (dataChannel: ObservedDataChannel, ctx: AppContext) => void;
51
+ private _onDataChannelRemoved;
52
+ onAddedIceTransport?: (iceTransport: ObservedIceTransport, ctx: AppContext) => void;
53
+ private _onAddedIceTransport;
54
+ onRemovedIceTransport?: (iceTransport: ObservedIceTransport, ctx: AppContext) => void;
55
+ private _onRemovedIceTransport;
56
+ onIceCandidateAdded?: (iceCandidate: ObservedIceCandidate, ctx: AppContext) => void;
57
+ private _onIceCandidateAdded;
58
+ onIceCandidateRemoved?: (iceCandidate: ObservedIceCandidate, ctx: AppContext) => void;
59
+ private _onIceCandidateRemoved;
60
+ onAddedIceCandidatePair?: (candidatePair: ObservedIceCandidatePair, ctx: AppContext) => void;
61
+ private _onAddedIceCandidatePair;
62
+ onRemovedIceCandidatePair?: (candidatePair: ObservedIceCandidatePair, ctx: AppContext) => void;
63
+ private _onRemovedIceCandidatePair;
64
+ onAddedMediaCodec?: (codec: ObservedCodec, ctx: AppContext) => void;
65
+ private _onAddedMediaCodec;
66
+ onRemovedMediaCodec?: (codec: ObservedCodec, ctx: AppContext) => void;
67
+ private _onRemovedMediaCodec;
68
+ onAddedMediaPlayout?: (mediaPlayout: ObservedMediaPlayout, ctx: AppContext) => void;
69
+ private _onAddedMediaPlayout;
70
+ onRemovedMediaPlayout?: (mediaPlayout: ObservedMediaPlayout, ctx: AppContext) => void;
71
+ private _onRemovedMediaPlayout;
72
+ onMediaSourceAdded?: (mediaSource: ObservedMediaSource, ctx: AppContext) => void;
73
+ private _onMediaSourceAdded;
74
+ onMediaSourceRemoved?: (mediaSource: ObservedMediaSource, ctx: AppContext) => void;
75
+ private _onMediaSourceRemoved;
76
+ onClientIssue?: (issue: ClientIssue, ctx: AppContext) => void;
77
+ private _onClientIssue;
78
+ onClientMetadata?: (metadata: ClientMetaData, ctx: AppContext) => void;
79
+ private _onClientMetadata;
80
+ onClientExtensionStats?: (extensionStats: ExtensionStat, ctx: AppContext) => void;
81
+ private _onClientExtensionStats;
82
+ onClientJoined?: (client: ObservedClient, ctx: AppContext) => void;
83
+ private _onClientJoined;
84
+ onClientLeft?: (client: ObservedClient, ctx: AppContext) => void;
85
+ private _onClientLeft;
86
+ onUserMediaError?: (error: string, observedClient: ObservedClient, ctx: AppContext) => void;
87
+ private _onUserMediaError;
88
+ onUsingTurn?: (client: ObservedClient, ctx: AppContext) => void;
89
+ private _onUsingTurn;
90
+ }
91
+ //# sourceMappingURL=ObservedClientEventMonitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObservedClientEventMonitor.d.ts","sourceRoot":"","sources":["../src/ObservedClientEventMonitor.ts"],"names":[],"mappings":"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"}