twilio-video 2.32.1 → 2.34.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 (327) hide show
  1. package/CHANGELOG.md +45 -1
  2. package/LICENSE.md +1 -1
  3. package/README.md +3 -3
  4. package/dist/twilio-video.js +2783 -1136
  5. package/dist/twilio-video.min.js +24 -23
  6. package/es5/cancelableroompromise.js.map +1 -1
  7. package/es5/connect.js +18 -9
  8. package/es5/connect.js.map +1 -1
  9. package/es5/createlocaltrack.js.map +1 -1
  10. package/es5/createlocaltracks.js +24 -18
  11. package/es5/createlocaltracks.js.map +1 -1
  12. package/es5/data/receiver.js.map +1 -1
  13. package/es5/data/sender.js.map +1 -1
  14. package/es5/data/transceiver.js.map +1 -1
  15. package/es5/data/transport.js.map +1 -1
  16. package/es5/encodingparameters.js.map +1 -1
  17. package/es5/eventtarget.js +10 -6
  18. package/es5/eventtarget.js.map +1 -1
  19. package/es5/index.js.map +1 -1
  20. package/es5/insights/applicationmonitor.js +93 -0
  21. package/es5/insights/applicationmonitor.js.map +1 -0
  22. package/es5/insights/computepressuremonitor.js +185 -0
  23. package/es5/insights/computepressuremonitor.js.map +1 -0
  24. package/es5/insights/events/application.js +46 -0
  25. package/es5/insights/events/application.js.map +1 -0
  26. package/es5/insights/events/getusermedia.js +51 -0
  27. package/es5/insights/events/getusermedia.js.map +1 -0
  28. package/es5/insights/events/network.js +54 -0
  29. package/es5/insights/events/network.js.map +1 -0
  30. package/es5/insights/events/peerconnection.js +164 -0
  31. package/es5/insights/events/peerconnection.js.map +1 -0
  32. package/es5/insights/events/quality.js +56 -0
  33. package/es5/insights/events/quality.js.map +1 -0
  34. package/es5/insights/events/room.js +56 -0
  35. package/es5/insights/events/room.js.map +1 -0
  36. package/es5/insights/events/system.js +31 -0
  37. package/es5/insights/events/system.js.map +1 -0
  38. package/es5/insights/events/track.js +58 -0
  39. package/es5/insights/events/track.js.map +1 -0
  40. package/es5/insights/monitorregistry.js +43 -0
  41. package/es5/insights/monitorregistry.js.map +1 -0
  42. package/es5/insights/networkmonitor.js +73 -0
  43. package/es5/insights/networkmonitor.js.map +1 -0
  44. package/es5/insights/resourcemonitor.js +56 -0
  45. package/es5/insights/resourcemonitor.js.map +1 -0
  46. package/es5/insights/statsmonitor.js +441 -0
  47. package/es5/insights/statsmonitor.js.map +1 -0
  48. package/es5/insights/telemetry.js +164 -0
  49. package/es5/insights/telemetry.js.map +1 -0
  50. package/es5/localparticipant.js +16 -16
  51. package/es5/localparticipant.js.map +1 -1
  52. package/es5/media/track/audiotrack.js.map +1 -1
  53. package/es5/media/track/capturevideoframes.js.map +1 -1
  54. package/es5/media/track/index.js.map +1 -1
  55. package/es5/media/track/localaudiotrack.js +6 -6
  56. package/es5/media/track/localaudiotrack.js.map +1 -1
  57. package/es5/media/track/localaudiotrackpublication.js +1 -1
  58. package/es5/media/track/localaudiotrackpublication.js.map +1 -1
  59. package/es5/media/track/localdatatrack.js.map +1 -1
  60. package/es5/media/track/localdatatrackpublication.js +1 -1
  61. package/es5/media/track/localdatatrackpublication.js.map +1 -1
  62. package/es5/media/track/localmediatrack.js +4 -4
  63. package/es5/media/track/localmediatrack.js.map +1 -1
  64. package/es5/media/track/localtrackpublication.js +10 -6
  65. package/es5/media/track/localtrackpublication.js.map +1 -1
  66. package/es5/media/track/localvideotrack.js +1 -1
  67. package/es5/media/track/localvideotrack.js.map +1 -1
  68. package/es5/media/track/localvideotrackpublication.js +1 -1
  69. package/es5/media/track/localvideotrackpublication.js.map +1 -1
  70. package/es5/media/track/mediatrack.js +4 -5
  71. package/es5/media/track/mediatrack.js.map +1 -1
  72. package/es5/media/track/noisecancellationimpl.js +8 -8
  73. package/es5/media/track/noisecancellationimpl.js.map +1 -1
  74. package/es5/media/track/receiver.js.map +1 -1
  75. package/es5/media/track/remoteaudiotrack.js +1 -1
  76. package/es5/media/track/remoteaudiotrack.js.map +1 -1
  77. package/es5/media/track/remoteaudiotrackpublication.js +1 -1
  78. package/es5/media/track/remoteaudiotrackpublication.js.map +1 -1
  79. package/es5/media/track/remotedatatrack.js +9 -5
  80. package/es5/media/track/remotedatatrack.js.map +1 -1
  81. package/es5/media/track/remotedatatrackpublication.js +1 -1
  82. package/es5/media/track/remotedatatrackpublication.js.map +1 -1
  83. package/es5/media/track/remotemediatrack.js +12 -8
  84. package/es5/media/track/remotemediatrack.js.map +1 -1
  85. package/es5/media/track/remotetrackpublication.js +2 -2
  86. package/es5/media/track/remotetrackpublication.js.map +1 -1
  87. package/es5/media/track/remotevideotrack.js +1 -1
  88. package/es5/media/track/remotevideotrack.js.map +1 -1
  89. package/es5/media/track/remotevideotrackpublication.js +1 -1
  90. package/es5/media/track/remotevideotrackpublication.js.map +1 -1
  91. package/es5/media/track/sender.js +1 -1
  92. package/es5/media/track/sender.js.map +1 -1
  93. package/es5/media/track/trackpublication.js +1 -1
  94. package/es5/media/track/trackpublication.js.map +1 -1
  95. package/es5/media/track/transceiver.js.map +1 -1
  96. package/es5/media/track/videoprocessoreventobserver.js +2 -2
  97. package/es5/media/track/videoprocessoreventobserver.js.map +1 -1
  98. package/es5/media/track/videotrack.js +2 -3
  99. package/es5/media/track/videotrack.js.map +1 -1
  100. package/es5/networkqualityconfiguration.js.map +1 -1
  101. package/es5/noisecancellationadapter.js +11 -12
  102. package/es5/noisecancellationadapter.js.map +1 -1
  103. package/es5/participant.js +20 -16
  104. package/es5/participant.js.map +1 -1
  105. package/es5/preflight/getCombinedConnectionStats.js +10 -11
  106. package/es5/preflight/getCombinedConnectionStats.js.map +1 -1
  107. package/es5/preflight/getturncredentials.js +2 -3
  108. package/es5/preflight/getturncredentials.js.map +1 -1
  109. package/es5/preflight/makestat.js +11 -8
  110. package/es5/preflight/makestat.js.map +1 -1
  111. package/es5/preflight/mos.js +2 -3
  112. package/es5/preflight/mos.js.map +1 -1
  113. package/es5/preflight/preflighttest.js +16 -16
  114. package/es5/preflight/preflighttest.js.map +1 -1
  115. package/es5/preflight/syntheticaudio.js +1 -2
  116. package/es5/preflight/syntheticaudio.js.map +1 -1
  117. package/es5/preflight/syntheticvideo.js +2 -3
  118. package/es5/preflight/syntheticvideo.js.map +1 -1
  119. package/es5/queueingeventemitter.js +10 -6
  120. package/es5/queueingeventemitter.js.map +1 -1
  121. package/es5/remoteparticipant.js +11 -7
  122. package/es5/remoteparticipant.js.map +1 -1
  123. package/es5/room.js +30 -10
  124. package/es5/room.js.map +1 -1
  125. package/es5/signaling/index.js +3 -3
  126. package/es5/signaling/index.js.map +1 -1
  127. package/es5/signaling/localparticipant.js.map +1 -1
  128. package/es5/signaling/localtrackpublication.js.map +1 -1
  129. package/es5/signaling/participant.js.map +1 -1
  130. package/es5/signaling/recording.js.map +1 -1
  131. package/es5/signaling/remoteparticipant.js.map +1 -1
  132. package/es5/signaling/remotetrackpublication.js.map +1 -1
  133. package/es5/signaling/room.js +1 -1
  134. package/es5/signaling/room.js.map +1 -1
  135. package/es5/signaling/track.js.map +1 -1
  136. package/es5/signaling/v2/cancelableroomsignalingpromise.js +3 -3
  137. package/es5/signaling/v2/cancelableroomsignalingpromise.js.map +1 -1
  138. package/es5/signaling/v2/dominantspeakersignaling.js.map +1 -1
  139. package/es5/signaling/v2/iceconnectionmonitor.js +0 -1
  140. package/es5/signaling/v2/iceconnectionmonitor.js.map +1 -1
  141. package/es5/signaling/v2/index.js.map +1 -1
  142. package/es5/signaling/v2/localparticipant.js +2 -2
  143. package/es5/signaling/v2/localparticipant.js.map +1 -1
  144. package/es5/signaling/v2/localtrackpublication.js +2 -2
  145. package/es5/signaling/v2/localtrackpublication.js.map +1 -1
  146. package/es5/signaling/v2/mediasignaling.js +2 -2
  147. package/es5/signaling/v2/mediasignaling.js.map +1 -1
  148. package/es5/signaling/v2/networkqualitymonitor.js.map +1 -1
  149. package/es5/signaling/v2/networkqualitysignaling.js.map +1 -1
  150. package/es5/signaling/v2/peerconnection.js +181 -48
  151. package/es5/signaling/v2/peerconnection.js.map +1 -1
  152. package/es5/signaling/v2/peerconnectionmanager.js +10 -6
  153. package/es5/signaling/v2/peerconnectionmanager.js.map +1 -1
  154. package/es5/signaling/v2/publisherhintsignaling.js.map +1 -1
  155. package/es5/signaling/v2/recording.js.map +1 -1
  156. package/es5/signaling/v2/remoteparticipant.js.map +1 -1
  157. package/es5/signaling/v2/remotetrackpublication.js.map +1 -1
  158. package/es5/signaling/v2/renderhintssignaling.js +0 -1
  159. package/es5/signaling/v2/renderhintssignaling.js.map +1 -1
  160. package/es5/signaling/v2/room.js +20 -176
  161. package/es5/signaling/v2/room.js.map +1 -1
  162. package/es5/signaling/v2/trackprioritysignaling.js.map +1 -1
  163. package/es5/signaling/v2/trackswitchoffsignaling.js.map +1 -1
  164. package/es5/signaling/v2/transcriptionsignaling.js.map +1 -1
  165. package/es5/signaling/v2/twilioconnectiontransport.js +2 -2
  166. package/es5/signaling/v2/twilioconnectiontransport.js.map +1 -1
  167. package/es5/statemachine.js +19 -15
  168. package/es5/statemachine.js.map +1 -1
  169. package/es5/stats/icereportfactory.js.map +1 -1
  170. package/es5/stats/localaudiotrackstats.js.map +1 -1
  171. package/es5/stats/localtrackstats.js.map +1 -1
  172. package/es5/stats/localvideotrackstats.js +5 -0
  173. package/es5/stats/localvideotrackstats.js.map +1 -1
  174. package/es5/stats/networkqualityaudiostats.js.map +1 -1
  175. package/es5/stats/networkqualityrecvstats.js.map +1 -1
  176. package/es5/stats/networkqualitysendstats.js.map +1 -1
  177. package/es5/stats/networkqualityvideostats.js.map +1 -1
  178. package/es5/stats/peerconnectionreportfactory.js +13 -9
  179. package/es5/stats/peerconnectionreportfactory.js.map +1 -1
  180. package/es5/stats/receiverreport.js.map +1 -1
  181. package/es5/stats/receiverreportfactory.js.map +1 -1
  182. package/es5/stats/remoteaudiotrackstats.js +0 -7
  183. package/es5/stats/remoteaudiotrackstats.js.map +1 -1
  184. package/es5/stats/remotetrackstats.js +7 -0
  185. package/es5/stats/remotetrackstats.js.map +1 -1
  186. package/es5/stats/remotevideotrackstats.js +7 -0
  187. package/es5/stats/remotevideotrackstats.js.map +1 -1
  188. package/es5/stats/senderreport.js.map +1 -1
  189. package/es5/stats/senderreportfactory.js.map +1 -1
  190. package/es5/stats/statsreport.js.map +1 -1
  191. package/es5/stats/trackstats.js.map +1 -1
  192. package/es5/transceiver.js.map +1 -1
  193. package/es5/twilioconnection.js +34 -30
  194. package/es5/twilioconnection.js.map +1 -1
  195. package/es5/util/asyncvar.js.map +1 -1
  196. package/es5/util/backoff.js.map +1 -1
  197. package/es5/util/browserdetection.js.map +1 -1
  198. package/es5/util/cancelablepromise.js +11 -7
  199. package/es5/util/cancelablepromise.js.map +1 -1
  200. package/es5/util/constants.js +7 -8
  201. package/es5/util/constants.js.map +1 -1
  202. package/es5/util/detectsilentaudio.js.map +1 -1
  203. package/es5/util/detectsilentvideo.js +3 -3
  204. package/es5/util/detectsilentvideo.js.map +1 -1
  205. package/es5/util/documentvisibilitymonitor.js +1 -1
  206. package/es5/util/documentvisibilitymonitor.js.map +1 -1
  207. package/es5/util/dynamicimport.js +2 -2
  208. package/es5/util/dynamicimport.js.map +1 -1
  209. package/es5/util/eventobserver.js +1 -2
  210. package/es5/util/eventobserver.js.map +1 -1
  211. package/es5/util/filter.js.map +1 -1
  212. package/es5/util/index.js +58 -27
  213. package/es5/util/index.js.map +1 -1
  214. package/es5/util/insightspublisher/index.js +5 -6
  215. package/es5/util/insightspublisher/index.js.map +1 -1
  216. package/es5/util/insightspublisher/null.js.map +1 -1
  217. package/es5/util/localmediarestartdeferreds.js.map +1 -1
  218. package/es5/util/log.js +10 -6
  219. package/es5/util/log.js.map +1 -1
  220. package/es5/util/networkmonitor.js.map +1 -1
  221. package/es5/util/nullobserver.js +0 -1
  222. package/es5/util/nullobserver.js.map +1 -1
  223. package/es5/util/sdp/index.js +83 -169
  224. package/es5/util/sdp/index.js.map +1 -1
  225. package/es5/util/sdp/issue8329.js +11 -11
  226. package/es5/util/sdp/issue8329.js.map +1 -1
  227. package/es5/util/sdp/simulcast.js +5 -5
  228. package/es5/util/sdp/simulcast.js.map +1 -1
  229. package/es5/util/sid.js +1 -1
  230. package/es5/util/sid.js.map +1 -1
  231. package/es5/util/support.js +1 -2
  232. package/es5/util/support.js.map +1 -1
  233. package/es5/util/timeout.js.map +1 -1
  234. package/es5/util/timeoutpromise.js +10 -6
  235. package/es5/util/timeoutpromise.js.map +1 -1
  236. package/es5/util/twilio-video-errors.js.map +1 -1
  237. package/es5/util/twilioerror.js +11 -7
  238. package/es5/util/twilioerror.js.map +1 -1
  239. package/es5/util/twiliowarning.js +0 -1
  240. package/es5/util/twiliowarning.js.map +1 -1
  241. package/es5/util/validate.js +4 -4
  242. package/es5/util/validate.js.map +1 -1
  243. package/es5/vendor/inherits.js.map +1 -1
  244. package/es5/vendor/loglevel.js.map +1 -1
  245. package/es5/webaudio/audiocontext.js.map +1 -1
  246. package/es5/webaudio/detectsilence.js.map +1 -1
  247. package/es5/webaudio/workaround180748.js +1 -1
  248. package/es5/webaudio/workaround180748.js.map +1 -1
  249. package/es5/webrtc/getstats.js +27 -13
  250. package/es5/webrtc/getstats.js.map +1 -1
  251. package/es5/webrtc/getusermedia.js.map +1 -1
  252. package/es5/webrtc/mediastream.js.map +1 -1
  253. package/es5/webrtc/mediastreamtrack.js.map +1 -1
  254. package/es5/webrtc/rtcicecandidate.js.map +1 -1
  255. package/es5/webrtc/rtcpeerconnection/chrome.js +32 -13
  256. package/es5/webrtc/rtcpeerconnection/chrome.js.map +1 -1
  257. package/es5/webrtc/rtcpeerconnection/firefox.js +17 -10
  258. package/es5/webrtc/rtcpeerconnection/firefox.js.map +1 -1
  259. package/es5/webrtc/rtcpeerconnection/index.js.map +1 -1
  260. package/es5/webrtc/rtcpeerconnection/safari.js +19 -14
  261. package/es5/webrtc/rtcpeerconnection/safari.js.map +1 -1
  262. package/es5/webrtc/rtcsessiondescription/index.js.map +1 -1
  263. package/es5/webrtc/util/index.js +10 -6
  264. package/es5/webrtc/util/index.js.map +1 -1
  265. package/es5/webrtc/util/latch.js +1 -1
  266. package/es5/webrtc/util/latch.js.map +1 -1
  267. package/es5/webrtc/util/sdp.js +7 -7
  268. package/es5/webrtc/util/sdp.js.map +1 -1
  269. package/eslint.config.js +308 -0
  270. package/lib/connect.js +18 -4
  271. package/lib/createlocaltracks.ts +9 -3
  272. package/lib/index.ts +1 -1
  273. package/lib/insights/applicationmonitor.js +101 -0
  274. package/lib/insights/computepressuremonitor.js +149 -0
  275. package/lib/insights/events/application.js +49 -0
  276. package/lib/insights/events/getusermedia.js +54 -0
  277. package/lib/insights/events/network.js +55 -0
  278. package/lib/insights/events/peerconnection.js +166 -0
  279. package/lib/insights/events/quality.js +59 -0
  280. package/lib/insights/events/room.js +61 -0
  281. package/lib/insights/events/system.js +32 -0
  282. package/lib/insights/events/track.js +58 -0
  283. package/lib/insights/monitorregistry.js +44 -0
  284. package/lib/insights/networkmonitor.js +82 -0
  285. package/lib/insights/resourcemonitor.js +63 -0
  286. package/lib/insights/statsmonitor.js +442 -0
  287. package/lib/insights/telemetry.js +178 -0
  288. package/lib/media/track/mediatrack.js +0 -1
  289. package/lib/media/track/videotrack.js +0 -1
  290. package/lib/noisecancellationadapter.ts +1 -1
  291. package/lib/preflight/getCombinedConnectionStats.ts +1 -2
  292. package/lib/preflight/makestat.ts +1 -1
  293. package/lib/preflight/mos.ts +1 -1
  294. package/lib/preflight/preflighttest.ts +2 -2
  295. package/lib/room.js +16 -0
  296. package/lib/signaling/v2/cancelableroomsignalingpromise.js +3 -3
  297. package/lib/signaling/v2/iceconnectionmonitor.js +0 -1
  298. package/lib/signaling/v2/peerconnection.js +169 -27
  299. package/lib/signaling/v2/renderhintssignaling.js +0 -1
  300. package/lib/signaling/v2/room.js +23 -200
  301. package/lib/stats/localvideotrackstats.js +5 -0
  302. package/lib/stats/remoteaudiotrackstats.js +0 -7
  303. package/lib/stats/remotetrackstats.js +7 -0
  304. package/lib/stats/remotevideotrackstats.js +7 -0
  305. package/lib/util/constants.js +1 -1
  306. package/lib/util/eventobserver.js +1 -2
  307. package/lib/util/index.js +41 -13
  308. package/lib/util/insightspublisher/index.js +1 -2
  309. package/lib/util/log.js +3 -3
  310. package/lib/util/nullobserver.js +0 -1
  311. package/lib/util/sdp/index.js +77 -172
  312. package/lib/util/support.js +2 -2
  313. package/lib/util/twiliowarning.js +0 -1
  314. package/lib/webrtc/getstats.js +27 -10
  315. package/lib/webrtc/rtcpeerconnection/chrome.js +16 -1
  316. package/lib/webrtc/rtcpeerconnection/firefox.js +3 -0
  317. package/lib/webrtc/rtcpeerconnection/safari.js +6 -5
  318. package/package.json +34 -34
  319. package/tsdef/AudioProcessor.d.ts +2 -2
  320. package/tsdef/LocalTrackOptions.d.ts +4 -4
  321. package/tsdef/PreflightTypes.d.ts +3 -3
  322. package/tsdef/index.d.ts +1 -1
  323. package/tsdef/loglevel.d.ts +43 -43
  324. package/tsdef/types.d.ts +6 -6
  325. package/.babelrc +0 -3
  326. package/.eslintrc.json +0 -369
  327. package/tsdef/.eslintrc.json +0 -17
@@ -0,0 +1,441 @@
1
+ 'use strict';
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var StatsReport = require('../stats/statsreport');
39
+ var MovingAverageDelta = require('../util/movingaveragedelta');
40
+ var _a = require('../util'), filterObject = _a.filterObject, flatMap = _a.flatMap, difference = _a.difference;
41
+ var telemetry = require('./telemetry');
42
+ /**
43
+ * StatsMonitor analyzes WebRTC statistics and publishes insights events.
44
+ * @internal
45
+ */
46
+ var StatsMonitor = /** @class */ (function () {
47
+ /**
48
+ * Create a StatsMonitor
49
+ * @param {Object} statsSource - An object that provides getStats() method
50
+ * @param {Log} log - Logger instance
51
+ * @param {Object} [options] - Configuration options
52
+ * @param {number} [options.publishIntervalMs=10000] - Interval for publishing stats reports
53
+ * @param {number} [options.collectionIntervalMs=1000] - Interval for collecting stats
54
+ */
55
+ function StatsMonitor(statsSource, log, options) {
56
+ if (options === void 0) { options = {}; }
57
+ if (!statsSource || typeof statsSource.getStats !== 'function') {
58
+ throw new Error('StatsMonitor requires a stats source with getStats() method');
59
+ }
60
+ if (!log) {
61
+ throw new Error('StatsMonitor requires a log instance');
62
+ }
63
+ this._statsSource = statsSource;
64
+ this._log = log;
65
+ this._publishIntervalMs = options.publishIntervalMs || 10000;
66
+ this._collectionIntervalMs = options.collectionIntervalMs || 1000;
67
+ this._collectionsPerPublish = Math.floor(this._publishIntervalMs / this._collectionIntervalMs);
68
+ this._stallThreshold = 0.5;
69
+ this._resumeThreshold = 5;
70
+ this._initializeState();
71
+ this._startStatsCollection();
72
+ }
73
+ /**
74
+ * Initialize monitoring state
75
+ * @private
76
+ */
77
+ StatsMonitor.prototype._initializeState = function () {
78
+ this._movingAverageDeltas = new Map();
79
+ this._interval = null;
80
+ this._statsCollectionCount = 0;
81
+ this._iceCandidatePublishToggle = false;
82
+ this._hasSeenActivePair = false;
83
+ this._lastNetworkType = null;
84
+ this._lastQualityLimitationReasonByTrackSid = new Map();
85
+ this._stalledTrackSids = new Set();
86
+ };
87
+ /**
88
+ * Start periodic stats collection and analysis
89
+ * @private
90
+ */
91
+ StatsMonitor.prototype._startStatsCollection = function () {
92
+ var _this = this;
93
+ if (this._interval) {
94
+ this._log.warn('StatsMonitor already started');
95
+ return;
96
+ }
97
+ this._interval = setInterval(function () { return __awaiter(_this, void 0, void 0, function () {
98
+ return __generator(this, function (_a) {
99
+ switch (_a.label) {
100
+ case 0: return [4 /*yield*/, this._collectAndAnalyzeStats()];
101
+ case 1:
102
+ _a.sent();
103
+ return [2 /*return*/];
104
+ }
105
+ });
106
+ }); }, this._collectionIntervalMs);
107
+ this._log.debug('StatsMonitor started');
108
+ };
109
+ /**
110
+ * Stop stats collection
111
+ * @private
112
+ */
113
+ StatsMonitor.prototype._stopStatsCollection = function () {
114
+ if (this._interval) {
115
+ clearInterval(this._interval);
116
+ this._interval = null;
117
+ }
118
+ this._log.debug('StatsMonitor stopped');
119
+ };
120
+ /**
121
+ * Collect stats and analyze them
122
+ * @private
123
+ */
124
+ StatsMonitor.prototype._collectAndAnalyzeStats = function () {
125
+ return __awaiter(this, void 0, void 0, function () {
126
+ var stats, shouldPublishStatsReport, shouldPublishIceCandidate, _a;
127
+ return __generator(this, function (_b) {
128
+ switch (_b.label) {
129
+ case 0:
130
+ _b.trys.push([0, 2, , 3]);
131
+ return [4 /*yield*/, this._statsSource.getStats()];
132
+ case 1:
133
+ stats = _b.sent();
134
+ this._statsCollectionCount++;
135
+ shouldPublishStatsReport = (this._statsCollectionCount % this._collectionsPerPublish) === 0;
136
+ if (shouldPublishStatsReport) {
137
+ this._iceCandidatePublishToggle = !this._iceCandidatePublishToggle;
138
+ }
139
+ shouldPublishIceCandidate = shouldPublishStatsReport && this._iceCandidatePublishToggle;
140
+ this._analyzeStats(stats, shouldPublishStatsReport, shouldPublishIceCandidate);
141
+ return [3 /*break*/, 3];
142
+ case 2:
143
+ _a = _b.sent();
144
+ return [3 /*break*/, 3];
145
+ case 3: return [2 /*return*/];
146
+ }
147
+ });
148
+ });
149
+ };
150
+ /**
151
+ * Analyze WebRTC stats and publish insights
152
+ * @private
153
+ * @param {Map|Array} stats - Map or Array of StandardizedStatsResponse objects
154
+ * @param {boolean} shouldPublishStatsReport - Whether to publish stats-report events this cycle
155
+ * @param {boolean} shouldPublishIceCandidate - Whether to publish ICE candidate pair this cycle
156
+ */
157
+ StatsMonitor.prototype._analyzeStats = function (stats, shouldPublishStatsReport, shouldPublishIceCandidate) {
158
+ var _this = this;
159
+ if (!stats || (stats instanceof Map && stats.size === 0) || (Array.isArray(stats) && stats.length === 0)) {
160
+ return;
161
+ }
162
+ stats.forEach(function (response, id) {
163
+ _this._checkNetworkTypeChanges(response);
164
+ _this._checkQualityLimitations(response.localVideoTrackStats);
165
+ _this._checkTrackStalls(response.remoteVideoTrackStats);
166
+ if (shouldPublishStatsReport) {
167
+ _this._publishStatsReport(id, response);
168
+ if (shouldPublishIceCandidate) {
169
+ _this._publishActiveIceCandidatePair(id, response);
170
+ }
171
+ }
172
+ });
173
+ };
174
+ /**
175
+ * Check for network type changes from active ICE candidate pair
176
+ * @private
177
+ * @param {Object} response - StandardizedStatsResponse
178
+ */
179
+ StatsMonitor.prototype._checkNetworkTypeChanges = function (response) {
180
+ var activeIceCandidatePair = response.activeIceCandidatePair;
181
+ if (!activeIceCandidatePair || !activeIceCandidatePair.localCandidate) {
182
+ return;
183
+ }
184
+ var networkType = activeIceCandidatePair.localCandidate.networkType;
185
+ if (!networkType) {
186
+ return;
187
+ }
188
+ if (!this._hasSeenActivePair) {
189
+ this._hasSeenActivePair = true;
190
+ this._lastNetworkType = networkType;
191
+ telemetry.network.typeChanged(networkType);
192
+ return;
193
+ }
194
+ if (this._lastNetworkType !== networkType) {
195
+ this._log.debug("Network type changed: ".concat(this._lastNetworkType, " -> ").concat(networkType));
196
+ this._lastNetworkType = networkType;
197
+ telemetry.network.typeChanged(networkType);
198
+ }
199
+ };
200
+ /**
201
+ * Check for quality limitation reason changes
202
+ * @private
203
+ * @param {Array} localVideoTrackStats - Local video track statistics
204
+ */
205
+ StatsMonitor.prototype._checkQualityLimitations = function (localVideoTrackStats) {
206
+ var _this = this;
207
+ if (!Array.isArray(localVideoTrackStats)) {
208
+ return;
209
+ }
210
+ localVideoTrackStats.forEach(function (_a) {
211
+ var trackSid = _a.trackSid, qualityLimitationReason = _a.qualityLimitationReason;
212
+ if (!trackSid || typeof qualityLimitationReason !== 'string') {
213
+ return;
214
+ }
215
+ var lastReason = _this._lastQualityLimitationReasonByTrackSid.get(trackSid);
216
+ if (lastReason !== qualityLimitationReason) {
217
+ _this._log.debug("Quality limitation reason changed for track ".concat(trackSid, ": ").concat(lastReason || 'none', " -> ").concat(qualityLimitationReason));
218
+ _this._lastQualityLimitationReasonByTrackSid.set(trackSid, qualityLimitationReason);
219
+ telemetry.quality.limitationChanged(trackSid, qualityLimitationReason);
220
+ }
221
+ });
222
+ };
223
+ /**
224
+ * Check for track stalls (low frame rates)
225
+ * @private
226
+ * @param {Array} remoteVideoTrackStats - Remote video track statistics
227
+ */
228
+ StatsMonitor.prototype._checkTrackStalls = function (remoteVideoTrackStats) {
229
+ var _this = this;
230
+ if (!Array.isArray(remoteVideoTrackStats)) {
231
+ return;
232
+ }
233
+ remoteVideoTrackStats.forEach(function (_a) {
234
+ var trackSid = _a.trackSid, frameRateReceived = _a.frameRateReceived;
235
+ if (frameRateReceived === undefined) {
236
+ return;
237
+ }
238
+ var frameRate = (typeof frameRateReceived === 'number' && !isNaN(frameRateReceived)) ? frameRateReceived : 0;
239
+ var isStalled = _this._stalledTrackSids.has(trackSid);
240
+ if (!isStalled && frameRate < _this._stallThreshold) {
241
+ _this._stalledTrackSids.add(trackSid);
242
+ _this._log.debug("Track ".concat(trackSid, " stalled: frame rate ").concat(frameRate, " below threshold ").concat(_this._stallThreshold));
243
+ telemetry.track.stalled(trackSid, frameRate, _this._stallThreshold);
244
+ }
245
+ else if (isStalled && frameRate >= _this._resumeThreshold) {
246
+ _this._stalledTrackSids.delete(trackSid);
247
+ _this._log.debug("Track ".concat(trackSid, " resumed: frame rate ").concat(frameRate, " above threshold ").concat(_this._resumeThreshold));
248
+ telemetry.track.resumed(trackSid, frameRate, _this._resumeThreshold);
249
+ }
250
+ });
251
+ };
252
+ /**
253
+ * Add A/V sync metrics to local track stats
254
+ * @private
255
+ * @param {Object} trackStats - The track stats from StatsReport
256
+ * @param {Object} trackResponse - The original track response
257
+ * @returns {Object} Augmented track stats with A/V sync metrics
258
+ */
259
+ StatsMonitor.prototype._addLocalTrackMetrics = function (trackStats, trackResponse) {
260
+ var framesEncoded = trackResponse.framesEncoded, packetsSent = trackResponse.packetsSent, totalEncodeTime = trackResponse.totalEncodeTime, totalPacketSendDelay = trackResponse.totalPacketSendDelay;
261
+ var augmentedTrackStats = Object.assign({}, trackStats);
262
+ var key = "".concat(trackStats.trackSid, "+").concat(trackStats.ssrc);
263
+ var trackMovingAverageDeltas = this._movingAverageDeltas.get(key) || new Map();
264
+ if (typeof totalEncodeTime === 'number' && typeof framesEncoded === 'number') {
265
+ var trackAvgEncodeDelayMovingAverageDelta = trackMovingAverageDeltas.get('avgEncodeDelay')
266
+ || new MovingAverageDelta();
267
+ trackAvgEncodeDelayMovingAverageDelta.putSample(totalEncodeTime * 1000, framesEncoded);
268
+ augmentedTrackStats.avgEncodeDelay = Math.round(trackAvgEncodeDelayMovingAverageDelta.get());
269
+ trackMovingAverageDeltas.set('avgEncodeDelay', trackAvgEncodeDelayMovingAverageDelta);
270
+ }
271
+ if (typeof totalPacketSendDelay === 'number' && typeof packetsSent === 'number') {
272
+ var trackAvgPacketSendDelayMovingAverageDelta = trackMovingAverageDeltas.get('avgPacketSendDelay')
273
+ || new MovingAverageDelta();
274
+ trackAvgPacketSendDelayMovingAverageDelta.putSample(totalPacketSendDelay * 1000, packetsSent);
275
+ augmentedTrackStats.avgPacketSendDelay = Math.round(trackAvgPacketSendDelayMovingAverageDelta.get());
276
+ trackMovingAverageDeltas.set('avgPacketSendDelay', trackAvgPacketSendDelayMovingAverageDelta);
277
+ }
278
+ this._movingAverageDeltas.set(key, trackMovingAverageDeltas);
279
+ return augmentedTrackStats;
280
+ };
281
+ /**
282
+ * Add A/V sync metrics to remote track stats
283
+ * @private
284
+ * @param {Object} trackStats - The track stats from StatsReport
285
+ * @param {Object} trackResponse - The original track response
286
+ * @returns {Object} Augmented track stats with A/V sync metrics
287
+ */
288
+ StatsMonitor.prototype._addRemoteTrackMetrics = function (trackStats, trackResponse) {
289
+ var estimatedPlayoutTimestamp = trackResponse.estimatedPlayoutTimestamp, framesDecoded = trackResponse.framesDecoded, jitterBufferDelay = trackResponse.jitterBufferDelay, jitterBufferEmittedCount = trackResponse.jitterBufferEmittedCount, totalDecodeTime = trackResponse.totalDecodeTime;
290
+ var augmentedTrackStats = Object.assign({}, trackStats);
291
+ var key = "".concat(trackStats.trackSid, "+").concat(trackStats.ssrc);
292
+ var trackMovingAverageDeltas = this._movingAverageDeltas.get(key) || new Map();
293
+ if (typeof estimatedPlayoutTimestamp === 'number') {
294
+ augmentedTrackStats.estimatedPlayoutTimestamp = estimatedPlayoutTimestamp;
295
+ }
296
+ if (typeof framesDecoded === 'number' && typeof totalDecodeTime === 'number') {
297
+ var trackAvgDecodeDelayMovingAverageDelta = trackMovingAverageDeltas.get('avgDecodeDelay')
298
+ || new MovingAverageDelta();
299
+ trackAvgDecodeDelayMovingAverageDelta.putSample(totalDecodeTime * 1000, framesDecoded);
300
+ augmentedTrackStats.avgDecodeDelay = Math.round(trackAvgDecodeDelayMovingAverageDelta.get());
301
+ trackMovingAverageDeltas.set('avgDecodeDelay', trackAvgDecodeDelayMovingAverageDelta);
302
+ }
303
+ if (typeof jitterBufferDelay === 'number' && typeof jitterBufferEmittedCount === 'number') {
304
+ var trackAvgJitterBufferDelayMovingAverageDelta = trackMovingAverageDeltas.get('avgJitterBufferDelay')
305
+ || new MovingAverageDelta();
306
+ trackAvgJitterBufferDelayMovingAverageDelta.putSample(jitterBufferDelay * 1000, jitterBufferEmittedCount);
307
+ augmentedTrackStats.avgJitterBufferDelay = Math.round(trackAvgJitterBufferDelayMovingAverageDelta.get());
308
+ trackMovingAverageDeltas.set('avgJitterBufferDelay', trackAvgJitterBufferDelayMovingAverageDelta);
309
+ }
310
+ this._movingAverageDeltas.set(key, trackMovingAverageDeltas);
311
+ return augmentedTrackStats;
312
+ };
313
+ /**
314
+ * Clean up moving average delta entries for tracks that are no longer active
315
+ * @private
316
+ * @param {Object} report - The stats report with track stats arrays
317
+ */
318
+ StatsMonitor.prototype._cleanupMovingAverageDeltas = function (report) {
319
+ var _this = this;
320
+ var keys = flatMap([
321
+ 'localAudioTrackStats',
322
+ 'localVideoTrackStats',
323
+ 'remoteAudioTrackStats',
324
+ 'remoteVideoTrackStats'
325
+ ], function (prop) { return report[prop].map(function (_a) {
326
+ var ssrc = _a.ssrc, trackSid = _a.trackSid;
327
+ return "".concat(trackSid, "+").concat(ssrc);
328
+ }); });
329
+ var movingAverageDeltaKeysToBeRemoved = difference(Array.from(this._movingAverageDeltas.keys()), keys);
330
+ movingAverageDeltaKeysToBeRemoved.forEach(function (key) { return _this._movingAverageDeltas.delete(key); });
331
+ };
332
+ /**
333
+ * Publish stats-report event
334
+ * @private
335
+ * @param {number|string} id - Peer connection ID
336
+ * @param {Object} response - StandardizedStatsResponse
337
+ */
338
+ StatsMonitor.prototype._publishStatsReport = function (id, response) {
339
+ var _this = this;
340
+ // NOTE(mmalavalli): A StatsReport is used to publish a "stats-report"
341
+ // event instead of using StandardizedStatsResponse directly because
342
+ // StatsReport will add zeros to properties that do not exist.
343
+ var report = new StatsReport(id, response, true /* prepareForInsights */);
344
+ // NOTE(mmalavalli): Since A/V sync metrics are not part of the StatsReport class,
345
+ // we add them to the insights payload here.
346
+ telemetry.quality.statsReport({
347
+ audioTrackStats: report.remoteAudioTrackStats.map(function (trackStat, i) {
348
+ return _this._addRemoteTrackMetrics(trackStat, response.remoteAudioTrackStats[i]);
349
+ }),
350
+ localAudioTrackStats: report.localAudioTrackStats.map(function (trackStat, i) {
351
+ return _this._addLocalTrackMetrics(trackStat, response.localAudioTrackStats[i]);
352
+ }),
353
+ localVideoTrackStats: report.localVideoTrackStats.map(function (trackStat, i) {
354
+ return _this._addLocalTrackMetrics(trackStat, response.localVideoTrackStats[i]);
355
+ }),
356
+ peerConnectionId: report.peerConnectionId,
357
+ videoTrackStats: report.remoteVideoTrackStats.map(function (trackStat, i) {
358
+ return _this._addRemoteTrackMetrics(trackStat, response.remoteVideoTrackStats[i]);
359
+ })
360
+ });
361
+ this._cleanupMovingAverageDeltas(report);
362
+ };
363
+ /**
364
+ * Publish active-ice-candidate-pair event
365
+ * @private
366
+ * @param {string|number} peerConnectionId - Peer connection ID
367
+ * @param {Object} response - StandardizedStatsResponse
368
+ */
369
+ StatsMonitor.prototype._publishActiveIceCandidatePair = function (peerConnectionId, response) {
370
+ var activeIceCandidatePair = this._replaceNullsWithDefaults(response.activeIceCandidatePair, peerConnectionId);
371
+ telemetry.quality.iceCandidatePair(activeIceCandidatePair);
372
+ };
373
+ /**
374
+ * Replace null values in activeIceCandidatePair with defaults.
375
+ *
376
+ * NOTE(mmalavalli): null properties of the "active-ice-candidate-pair"
377
+ * payload are assigned default values until the Insights gateway
378
+ * accepts null values.
379
+ *
380
+ * @private
381
+ * @param {Object} activeIceCandidatePair - The active ICE candidate pair
382
+ * @param {string} peerConnectionId - The peer connection ID
383
+ * @returns {Object} Active ICE candidate pair with null values replaced
384
+ */
385
+ StatsMonitor.prototype._replaceNullsWithDefaults = function (activeIceCandidatePair, peerConnectionId) {
386
+ activeIceCandidatePair = Object.assign({
387
+ availableIncomingBitrate: 0,
388
+ availableOutgoingBitrate: 0,
389
+ bytesReceived: 0,
390
+ bytesSent: 0,
391
+ consentRequestsSent: 0,
392
+ currentRoundTripTime: 0,
393
+ lastPacketReceivedTimestamp: 0,
394
+ lastPacketSentTimestamp: 0,
395
+ nominated: false,
396
+ peerConnectionId: peerConnectionId,
397
+ priority: 0,
398
+ readable: false,
399
+ requestsReceived: 0,
400
+ requestsSent: 0,
401
+ responsesReceived: 0,
402
+ responsesSent: 0,
403
+ retransmissionsReceived: 0,
404
+ retransmissionsSent: 0,
405
+ state: 'failed',
406
+ totalRoundTripTime: 0,
407
+ transportId: '',
408
+ writable: false
409
+ }, filterObject(activeIceCandidatePair || {}, null));
410
+ activeIceCandidatePair.localCandidate = Object.assign({
411
+ candidateType: 'host',
412
+ deleted: false,
413
+ ip: '',
414
+ port: 0,
415
+ priority: 0,
416
+ protocol: 'udp',
417
+ url: ''
418
+ }, filterObject(activeIceCandidatePair.localCandidate || {}, null));
419
+ activeIceCandidatePair.remoteCandidate = Object.assign({
420
+ candidateType: 'host',
421
+ ip: '',
422
+ port: 0,
423
+ priority: 0,
424
+ protocol: 'udp',
425
+ url: ''
426
+ }, filterObject(activeIceCandidatePair.remoteCandidate || {}, null));
427
+ return activeIceCandidatePair;
428
+ };
429
+ /**
430
+ * Cleanup all monitoring state
431
+ */
432
+ StatsMonitor.prototype.cleanup = function () {
433
+ this._stopStatsCollection();
434
+ this._movingAverageDeltas.clear();
435
+ this._lastQualityLimitationReasonByTrackSid.clear();
436
+ this._stalledTrackSids.clear();
437
+ };
438
+ return StatsMonitor;
439
+ }());
440
+ module.exports = StatsMonitor;
441
+ //# sourceMappingURL=statsmonitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statsmonitor.js","sourceRoot":"","sources":["../../lib/insights/statsmonitor.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ 'use strict';
2
+ var NetworkEvents = require('./events/network');
3
+ var GetUserMediaEvents = require('./events/getusermedia');
4
+ var QualityEvents = require('./events/quality');
5
+ var TrackEvents = require('./events/track');
6
+ var ApplicationEvents = require('./events/application');
7
+ var SystemEvents = require('./events/system');
8
+ var PeerConnectionEvents = require('./events/peerconnection');
9
+ var RoomEvents = require('./events/room');
10
+ /**
11
+ * @typedef {Object} InsightsPublisher
12
+ * @property {(group: string, name: string, payload: Record<string, any>) => void} publish
13
+ */
14
+ /**
15
+ * @typedef {Object} TelemetryEventOptions
16
+ * @property {string} group - Event group
17
+ * @property {string} name - Event name
18
+ * @property {Record<string, any>} [payload] - Optional event payload
19
+ */
20
+ /**
21
+ * @typedef {Object} TelemetryConfig
22
+ * @property {InsightsPublisher} publisher - The insights publisher to register
23
+ * @property {import('../util/log')} log - Logger instance
24
+ * @property {number} connectTimestamp - Connection timestamp
25
+ */
26
+ /**
27
+ * Telemetry is a singleton for emitting telemetry events throughout the SDK.
28
+ * It decouples event emission from publisher management, allowing different parts of the SDK
29
+ * to emit events without direct coupling.
30
+ * @internal
31
+ */
32
+ var Telemetry = /** @class */ (function () {
33
+ function Telemetry() {
34
+ /** @type {InsightsPublisher | null} */
35
+ this._publisher = null;
36
+ /** @type {number | null} */
37
+ this._connectTimestamp = null;
38
+ /** @type {import('../util/log') | null} */
39
+ this._log = null;
40
+ /** @type {boolean} */
41
+ this._isConfigured = false;
42
+ /** @type {NetworkEvents} */
43
+ this.network = new NetworkEvents(this);
44
+ /** @type {GetUserMediaEvents} */
45
+ this.getUserMedia = new GetUserMediaEvents(this);
46
+ /** @type {QualityEvents} */
47
+ this.quality = new QualityEvents(this);
48
+ /** @type {TrackEvents} */
49
+ this.track = new TrackEvents(this);
50
+ /** @type {ApplicationEvents} */
51
+ this.application = new ApplicationEvents(this);
52
+ /** @type {SystemEvents} */
53
+ this.system = new SystemEvents(this);
54
+ /** @type {PeerConnectionEvents} */
55
+ this.pc = new PeerConnectionEvents(this);
56
+ /** @type {RoomEvents} */
57
+ this.room = new RoomEvents(this);
58
+ }
59
+ /**
60
+ * Configure telemetry with a publisher.
61
+ *
62
+ * @param {TelemetryConfig} config - Configuration options
63
+ * @returns {Telemetry}
64
+ */
65
+ Telemetry.prototype.configure = function (_a) {
66
+ var _this = this;
67
+ var publisher = _a.publisher, log = _a.log, connectTimestamp = _a.connectTimestamp;
68
+ if (!publisher || !log || typeof connectTimestamp !== 'number') {
69
+ throw new Error('Telemetry.configure requires publisher, log, and connectTimestamp');
70
+ }
71
+ this._publisher = publisher;
72
+ this._log = log;
73
+ this._connectTimestamp = connectTimestamp;
74
+ this._isConfigured = true;
75
+ this._publisher.on('connected', function () {
76
+ _this._log.debug('Telemetry publisher connected.');
77
+ });
78
+ this._publisher.on('reconnecting', function () {
79
+ _this._log.warn('Telemetry publisher reconnecting...');
80
+ });
81
+ return this;
82
+ };
83
+ /**
84
+ * Internal method to emit a telemetry event. If no publisher is registered, the event is ignored.
85
+ * Used by the public info/warning/error methods.
86
+ * @private
87
+ * @param {string} group - Event group (e.g., 'get-user-media', 'quality', 'network')
88
+ * @param {string} name - Event name (e.g., 'succeeded', 'failed')
89
+ * @param {('info'|'warning'|'error'|'debug')} level - Event level
90
+ * @param {Record<string, any>} [payload] - Optional event payload
91
+ * @returns {void}
92
+ */
93
+ Telemetry.prototype._emit = function (group, name, level, payload) {
94
+ if (!this._isConfigured) {
95
+ return;
96
+ }
97
+ var timestamp = Date.now();
98
+ var elapsedTime = timestamp - this._connectTimestamp;
99
+ var publisherPayload = Object.assign({ elapsedTime: elapsedTime, level: level }, payload || {});
100
+ var published = this._publisher.publish(group, name, publisherPayload);
101
+ if (!published) {
102
+ this._log.warn("Telemetry event \"".concat(group, ":").concat(name, "\" dropped - publisher unavailable."));
103
+ return;
104
+ }
105
+ var event = Object.assign({
106
+ elapsedTime: elapsedTime,
107
+ group: group,
108
+ level: level,
109
+ name: name,
110
+ timestamp: timestamp
111
+ }, payload ? { payload: payload } : {});
112
+ /** @type {'debug' | 'error' | 'info' | 'warn'} */
113
+ var logLevel = /** @type {const} */ ({
114
+ debug: 'debug',
115
+ error: 'error',
116
+ info: 'info',
117
+ warning: 'warn'
118
+ })[level];
119
+ this._log[logLevel]('telemetry', event);
120
+ };
121
+ /**
122
+ * Emit an info-level telemetry event.
123
+ *
124
+ * @param {TelemetryEventOptions} options - Event options
125
+ * @returns {void}
126
+ */
127
+ Telemetry.prototype.info = function (_a) {
128
+ var group = _a.group, name = _a.name, payload = _a.payload;
129
+ return this._emit(group, name, 'info', payload);
130
+ };
131
+ /**
132
+ * Emit a warning-level telemetry event.
133
+ *
134
+ * @param {TelemetryEventOptions} options - Event options
135
+ * @returns {void}
136
+ */
137
+ Telemetry.prototype.warning = function (_a) {
138
+ var group = _a.group, name = _a.name, payload = _a.payload;
139
+ return this._emit(group, name, 'warning', payload);
140
+ };
141
+ /**
142
+ * Emit an error-level telemetry event.
143
+ *
144
+ * @param {TelemetryEventOptions} options - Event options
145
+ * @returns {void}
146
+ */
147
+ Telemetry.prototype.error = function (_a) {
148
+ var group = _a.group, name = _a.name, payload = _a.payload;
149
+ return this._emit(group, name, 'error', payload);
150
+ };
151
+ /**
152
+ * Emit a debug-level telemetry event.
153
+ *
154
+ * @param {TelemetryEventOptions} options - Event options
155
+ * @returns {void}
156
+ */
157
+ Telemetry.prototype.debug = function (_a) {
158
+ var group = _a.group, name = _a.name, payload = _a.payload;
159
+ return this._emit(group, name, 'debug', payload);
160
+ };
161
+ return Telemetry;
162
+ }());
163
+ module.exports = new Telemetry();
164
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../lib/insights/telemetry.js"],"names":[],"mappings":"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"}