@webex/plugin-meetings 3.0.0-beta.9 → 3.0.0-bnr.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 (1033) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +178 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/edit-lock-error.js +52 -0
  8. package/dist/breakouts/edit-lock-error.js.map +1 -0
  9. package/dist/breakouts/index.js +843 -0
  10. package/dist/breakouts/index.js.map +1 -0
  11. package/dist/breakouts/request.js +78 -0
  12. package/dist/breakouts/request.js.map +1 -0
  13. package/dist/breakouts/utils.js +56 -0
  14. package/dist/breakouts/utils.js.map +1 -0
  15. package/dist/common/browser-detection.d.ts +9 -0
  16. package/dist/common/browser-detection.js +1 -20
  17. package/dist/common/browser-detection.js.map +1 -1
  18. package/dist/common/collection.d.ts +48 -0
  19. package/dist/common/collection.js +5 -20
  20. package/dist/common/collection.js.map +1 -1
  21. package/dist/common/config.d.ts +2 -0
  22. package/dist/common/config.js +0 -7
  23. package/dist/common/config.js.map +1 -1
  24. package/dist/common/errors/captcha-error.d.ts +15 -0
  25. package/dist/common/errors/captcha-error.js +5 -26
  26. package/dist/common/errors/captcha-error.js.map +1 -1
  27. package/dist/common/errors/intent-to-join.d.ts +16 -0
  28. package/dist/common/errors/intent-to-join.js +5 -26
  29. package/dist/common/errors/intent-to-join.js.map +1 -1
  30. package/dist/common/errors/join-meeting.d.ts +17 -0
  31. package/dist/common/errors/join-meeting.js +6 -27
  32. package/dist/common/errors/join-meeting.js.map +1 -1
  33. package/dist/common/errors/media.d.ts +15 -0
  34. package/dist/common/errors/media.js +5 -26
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/parameter.d.ts +15 -0
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.d.ts +15 -0
  40. package/dist/common/errors/password-error.js +5 -26
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.d.ts +14 -0
  43. package/dist/common/errors/permission.js +4 -25
  44. package/dist/common/errors/permission.js.map +1 -1
  45. package/dist/common/errors/reconnection-in-progress.d.ts +9 -0
  46. package/dist/common/errors/reconnection-in-progress.js +0 -17
  47. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  48. package/dist/common/errors/reconnection.d.ts +15 -0
  49. package/dist/common/errors/reconnection.js +5 -26
  50. package/dist/common/errors/reconnection.js.map +1 -1
  51. package/dist/common/errors/stats.d.ts +15 -0
  52. package/dist/common/errors/stats.js +5 -26
  53. package/dist/common/errors/stats.js.map +1 -1
  54. package/dist/common/errors/webex-errors.d.ts +81 -0
  55. package/dist/common/errors/webex-errors.js +6 -41
  56. package/dist/common/errors/webex-errors.js.map +1 -1
  57. package/dist/common/errors/webex-meetings-error.d.ts +20 -0
  58. package/dist/common/errors/webex-meetings-error.js +1 -24
  59. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  60. package/dist/common/events/events-scope.d.ts +17 -0
  61. package/dist/common/events/events-scope.js +0 -22
  62. package/dist/common/events/events-scope.js.map +1 -1
  63. package/dist/common/events/events.d.ts +12 -0
  64. package/dist/common/events/events.js +0 -23
  65. package/dist/common/events/events.js.map +1 -1
  66. package/dist/common/events/trigger-proxy.d.ts +2 -0
  67. package/dist/common/events/trigger-proxy.js +0 -12
  68. package/dist/common/events/trigger-proxy.js.map +1 -1
  69. package/dist/common/events/util.d.ts +2 -0
  70. package/dist/common/events/util.js +0 -15
  71. package/dist/common/events/util.js.map +1 -1
  72. package/dist/common/logs/logger-config.d.ts +2 -0
  73. package/dist/common/logs/logger-config.js +0 -4
  74. package/dist/common/logs/logger-config.js.map +1 -1
  75. package/dist/common/logs/logger-proxy.d.ts +2 -0
  76. package/dist/common/logs/logger-proxy.js +1 -8
  77. package/dist/common/logs/logger-proxy.js.map +1 -1
  78. package/dist/common/logs/request.d.ts +34 -0
  79. package/dist/common/logs/request.js +35 -61
  80. package/dist/common/logs/request.js.map +1 -1
  81. package/dist/common/queue.d.ts +32 -0
  82. package/dist/common/queue.js +4 -14
  83. package/dist/common/queue.js.map +1 -1
  84. package/dist/config.d.ts +73 -0
  85. package/dist/config.js +6 -6
  86. package/dist/config.js.map +1 -1
  87. package/dist/constants.d.ts +924 -0
  88. package/dist/constants.js +143 -52
  89. package/dist/constants.js.map +1 -1
  90. package/dist/controls-options-manager/constants.d.ts +4 -0
  91. package/dist/controls-options-manager/constants.js +14 -0
  92. package/dist/controls-options-manager/constants.js.map +1 -0
  93. package/dist/controls-options-manager/enums.d.ts +5 -0
  94. package/dist/controls-options-manager/enums.js +16 -0
  95. package/dist/controls-options-manager/enums.js.map +1 -0
  96. package/dist/controls-options-manager/index.d.ts +120 -0
  97. package/dist/controls-options-manager/index.js +261 -0
  98. package/dist/controls-options-manager/index.js.map +1 -0
  99. package/dist/controls-options-manager/util.d.ts +7 -0
  100. package/dist/controls-options-manager/util.js +39 -0
  101. package/dist/controls-options-manager/util.js.map +1 -0
  102. package/dist/docs/markdown/index.md +12 -0
  103. package/dist/docs/markdown/plugin-meetings.constants._active_.md +11 -0
  104. package/dist/docs/markdown/plugin-meetings.constants._answer_.md +11 -0
  105. package/dist/docs/markdown/plugin-meetings.constants._call_.md +11 -0
  106. package/dist/docs/markdown/plugin-meetings.constants._conflict_.md +11 -0
  107. package/dist/docs/markdown/plugin-meetings.constants._conversation_url_.md +11 -0
  108. package/dist/docs/markdown/plugin-meetings.constants._created_.md +11 -0
  109. package/dist/docs/markdown/plugin-meetings.constants._error_.md +11 -0
  110. package/dist/docs/markdown/plugin-meetings.constants._forced_.md +11 -0
  111. package/dist/docs/markdown/plugin-meetings.constants._id_.md +11 -0
  112. package/dist/docs/markdown/plugin-meetings.constants._idle_.md +11 -0
  113. package/dist/docs/markdown/plugin-meetings.constants._in_.md +11 -0
  114. package/dist/docs/markdown/plugin-meetings.constants._in_lobby_.md +11 -0
  115. package/dist/docs/markdown/plugin-meetings.constants._in_meeting_.md +11 -0
  116. package/dist/docs/markdown/plugin-meetings.constants._inactive_.md +11 -0
  117. package/dist/docs/markdown/plugin-meetings.constants._incoming_.md +11 -0
  118. package/dist/docs/markdown/plugin-meetings.constants._join_.md +11 -0
  119. package/dist/docs/markdown/plugin-meetings.constants._joined_.md +11 -0
  120. package/dist/docs/markdown/plugin-meetings.constants._left_.md +11 -0
  121. package/dist/docs/markdown/plugin-meetings.constants._locus_id_.md +11 -0
  122. package/dist/docs/markdown/plugin-meetings.constants._meeting_.md +11 -0
  123. package/dist/docs/markdown/plugin-meetings.constants._meeting_center_.md +11 -0
  124. package/dist/docs/markdown/plugin-meetings.constants._meeting_id_.md +11 -0
  125. package/dist/docs/markdown/plugin-meetings.constants._meeting_link_.md +11 -0
  126. package/dist/docs/markdown/plugin-meetings.constants._meeting_uuid_.md +11 -0
  127. package/dist/docs/markdown/plugin-meetings.constants._move_media_.md +11 -0
  128. package/dist/docs/markdown/plugin-meetings.constants._none_.md +11 -0
  129. package/dist/docs/markdown/plugin-meetings.constants._not_in_meeting_.md +11 -0
  130. package/dist/docs/markdown/plugin-meetings.constants._observe_.md +11 -0
  131. package/dist/docs/markdown/plugin-meetings.constants._people_.md +11 -0
  132. package/dist/docs/markdown/plugin-meetings.constants._personal_room_.md +11 -0
  133. package/dist/docs/markdown/plugin-meetings.constants._receive_only_.md +11 -0
  134. package/dist/docs/markdown/plugin-meetings.constants._remove_.md +11 -0
  135. package/dist/docs/markdown/plugin-meetings.constants._requested_.md +11 -0
  136. package/dist/docs/markdown/plugin-meetings.constants._resource_room_.md +11 -0
  137. package/dist/docs/markdown/plugin-meetings.constants._room_.md +11 -0
  138. package/dist/docs/markdown/plugin-meetings.constants._s_line.md +11 -0
  139. package/dist/docs/markdown/plugin-meetings.constants._send_only_.md +11 -0
  140. package/dist/docs/markdown/plugin-meetings.constants._send_receive_.md +11 -0
  141. package/dist/docs/markdown/plugin-meetings.constants._sip_bridge_.md +11 -0
  142. package/dist/docs/markdown/plugin-meetings.constants._sip_uri_.md +11 -0
  143. package/dist/docs/markdown/plugin-meetings.constants._slides_.md +11 -0
  144. package/dist/docs/markdown/plugin-meetings.constants._unknown_.md +11 -0
  145. package/dist/docs/markdown/plugin-meetings.constants._user_.md +11 -0
  146. package/dist/docs/markdown/plugin-meetings.constants._wait_.md +11 -0
  147. package/dist/docs/markdown/plugin-meetings.constants._webex_meeting_.md +11 -0
  148. package/dist/docs/markdown/plugin-meetings.constants.alert.md +11 -0
  149. package/dist/docs/markdown/plugin-meetings.constants.alternate_redirect_true.md +11 -0
  150. package/dist/docs/markdown/plugin-meetings.constants.answer.md +11 -0
  151. package/dist/docs/markdown/plugin-meetings.constants.api.md +14 -0
  152. package/dist/docs/markdown/plugin-meetings.constants.audio.md +11 -0
  153. package/dist/docs/markdown/plugin-meetings.constants.audio_input.md +11 -0
  154. package/dist/docs/markdown/plugin-meetings.constants.audio_status.md +11 -0
  155. package/dist/docs/markdown/plugin-meetings.constants.available_resolutions.md +60 -0
  156. package/dist/docs/markdown/plugin-meetings.constants.bnr_status.md +16 -0
  157. package/dist/docs/markdown/plugin-meetings.constants.breakouts.md +51 -0
  158. package/dist/docs/markdown/plugin-meetings.constants.calendar.md +11 -0
  159. package/dist/docs/markdown/plugin-meetings.constants.calendar_events.md +17 -0
  160. package/dist/docs/markdown/plugin-meetings.constants.calendar_events_api.md +11 -0
  161. package/dist/docs/markdown/plugin-meetings.constants.call.md +11 -0
  162. package/dist/docs/markdown/plugin-meetings.constants.call_removed_reason.md +15 -0
  163. package/dist/docs/markdown/plugin-meetings.constants.claim.md +11 -0
  164. package/dist/docs/markdown/plugin-meetings.constants.cmr_meetings.md +11 -0
  165. package/dist/docs/markdown/plugin-meetings.constants.complete.md +11 -0
  166. package/dist/docs/markdown/plugin-meetings.constants.connection_state.md +18 -0
  167. package/dist/docs/markdown/plugin-meetings.constants.content.md +11 -0
  168. package/dist/docs/markdown/plugin-meetings.constants.controls.md +11 -0
  169. package/dist/docs/markdown/plugin-meetings.constants.conversation_service.md +11 -0
  170. package/dist/docs/markdown/plugin-meetings.constants.conversation_url.md +11 -0
  171. package/dist/docs/markdown/plugin-meetings.constants.correlation_id.md +11 -0
  172. package/dist/docs/markdown/plugin-meetings.constants.decline.md +11 -0
  173. package/dist/docs/markdown/plugin-meetings.constants.default_excluded_stats.md +11 -0
  174. package/dist/docs/markdown/plugin-meetings.constants.default_get_stats_filter.md +13 -0
  175. package/dist/docs/markdown/plugin-meetings.constants.development.md +11 -0
  176. package/dist/docs/markdown/plugin-meetings.constants.dialer_regex.md +15 -0
  177. package/dist/docs/markdown/plugin-meetings.constants.display_hints.md +51 -0
  178. package/dist/docs/markdown/plugin-meetings.constants.embedded_app_types.md +14 -0
  179. package/dist/docs/markdown/plugin-meetings.constants.end.md +11 -0
  180. package/dist/docs/markdown/plugin-meetings.constants.ended.md +11 -0
  181. package/dist/docs/markdown/plugin-meetings.constants.error.md +11 -0
  182. package/dist/docs/markdown/plugin-meetings.constants.error_dictionary.md +62 -0
  183. package/dist/docs/markdown/plugin-meetings.constants.event_triggers.md +82 -0
  184. package/dist/docs/markdown/plugin-meetings.constants.event_types.md +21 -0
  185. package/dist/docs/markdown/plugin-meetings.constants.events.md +26 -0
  186. package/dist/docs/markdown/plugin-meetings.constants.floor_action.md +15 -0
  187. package/dist/docs/markdown/plugin-meetings.constants.full_state.md +17 -0
  188. package/dist/docs/markdown/plugin-meetings.constants.gathering.md +11 -0
  189. package/dist/docs/markdown/plugin-meetings.constants.hecate.md +11 -0
  190. package/dist/docs/markdown/plugin-meetings.constants.host.md +11 -0
  191. package/dist/docs/markdown/plugin-meetings.constants.http_verbs.md +17 -0
  192. package/dist/docs/markdown/plugin-meetings.constants.https_protocol.md +11 -0
  193. package/dist/docs/markdown/plugin-meetings.constants.ice_fail_timeout.md +11 -0
  194. package/dist/docs/markdown/plugin-meetings.constants.ice_gathering_state.md +15 -0
  195. package/dist/docs/markdown/plugin-meetings.constants.ice_state.md +18 -0
  196. package/dist/docs/markdown/plugin-meetings.constants.ice_timeout.md +11 -0
  197. package/dist/docs/markdown/plugin-meetings.constants.intent_to_join.md +11 -0
  198. package/dist/docs/markdown/plugin-meetings.constants.ipv4_regex.md +11 -0
  199. package/dist/docs/markdown/plugin-meetings.constants.join.md +11 -0
  200. package/dist/docs/markdown/plugin-meetings.constants.layout_types.md +13 -0
  201. package/dist/docs/markdown/plugin-meetings.constants.leave.md +11 -0
  202. package/dist/docs/markdown/plugin-meetings.constants.live.md +11 -0
  203. package/dist/docs/markdown/plugin-meetings.constants.local.md +11 -0
  204. package/dist/docs/markdown/plugin-meetings.constants.loci.md +11 -0
  205. package/dist/docs/markdown/plugin-meetings.constants.locus.md +26 -0
  206. package/dist/docs/markdown/plugin-meetings.constants.locus_url.md +11 -0
  207. package/dist/docs/markdown/plugin-meetings.constants.locusevent.md +33 -0
  208. package/dist/docs/markdown/plugin-meetings.constants.locusinfo.md +43 -0
  209. package/dist/docs/markdown/plugin-meetings.constants.max_random_delay_for_meeting_info.md +11 -0
  210. package/dist/docs/markdown/plugin-meetings.constants.md +186 -0
  211. package/dist/docs/markdown/plugin-meetings.constants.media.md +11 -0
  212. package/dist/docs/markdown/plugin-meetings.constants.media_devices.md +15 -0
  213. package/dist/docs/markdown/plugin-meetings.constants.media_peer_connection_name.md +11 -0
  214. package/dist/docs/markdown/plugin-meetings.constants.media_state.md +14 -0
  215. package/dist/docs/markdown/plugin-meetings.constants.media_track_constraint.md +17 -0
  216. package/dist/docs/markdown/plugin-meetings.constants.mediacontent.md +14 -0
  217. package/dist/docs/markdown/plugin-meetings.constants.meet.md +11 -0
  218. package/dist/docs/markdown/plugin-meetings.constants.meet_m.md +11 -0
  219. package/dist/docs/markdown/plugin-meetings.constants.meeting_audio_state_machine.md +20 -0
  220. package/dist/docs/markdown/plugin-meetings.constants.meeting_end_reason.md +14 -0
  221. package/dist/docs/markdown/plugin-meetings.constants.meeting_errors.md +102 -0
  222. package/dist/docs/markdown/plugin-meetings.constants.meeting_info_failure_reason.md +16 -0
  223. package/dist/docs/markdown/plugin-meetings.constants.meeting_removed_reason.md +19 -0
  224. package/dist/docs/markdown/plugin-meetings.constants.meeting_state.md +25 -0
  225. package/dist/docs/markdown/plugin-meetings.constants.meeting_state_machine.md +31 -0
  226. package/dist/docs/markdown/plugin-meetings.constants.meeting_video_state_machine.md +20 -0
  227. package/dist/docs/markdown/plugin-meetings.constants.meetinginfo.md +11 -0
  228. package/dist/docs/markdown/plugin-meetings.constants.meetings.md +11 -0
  229. package/dist/docs/markdown/plugin-meetings.constants.metrics_join_times_max_duration.md +11 -0
  230. package/dist/docs/markdown/plugin-meetings.constants.moderator_false.md +11 -0
  231. package/dist/docs/markdown/plugin-meetings.constants.moderator_true.md +11 -0
  232. package/dist/docs/markdown/plugin-meetings.constants.mqa_inteval.md +11 -0
  233. package/dist/docs/markdown/plugin-meetings.constants.mqa_stats.md +82 -0
  234. package/dist/docs/markdown/plugin-meetings.constants.network_status.md +15 -0
  235. package/dist/docs/markdown/plugin-meetings.constants.network_type.md +16 -0
  236. package/dist/docs/markdown/plugin-meetings.constants.offline.md +11 -0
  237. package/dist/docs/markdown/plugin-meetings.constants.online.md +11 -0
  238. package/dist/docs/markdown/plugin-meetings.constants.participant.md +11 -0
  239. package/dist/docs/markdown/plugin-meetings.constants.participant_deltas.md +22 -0
  240. package/dist/docs/markdown/plugin-meetings.constants.password_status.md +16 -0
  241. package/dist/docs/markdown/plugin-meetings.constants.pc_bail_timeout.md +11 -0
  242. package/dist/docs/markdown/plugin-meetings.constants.peer_connection_state.md +14 -0
  243. package/dist/docs/markdown/plugin-meetings.constants.provisional_type_dial_in.md +11 -0
  244. package/dist/docs/markdown/plugin-meetings.constants.provisional_type_dial_out.md +11 -0
  245. package/dist/docs/markdown/plugin-meetings.constants.pstn_status.md +18 -0
  246. package/dist/docs/markdown/plugin-meetings.constants.quality_levels.md +19 -0
  247. package/dist/docs/markdown/plugin-meetings.constants.reachability.md +15 -0
  248. package/dist/docs/markdown/plugin-meetings.constants.ready.md +11 -0
  249. package/dist/docs/markdown/plugin-meetings.constants.reconnection.md +19 -0
  250. package/dist/docs/markdown/plugin-meetings.constants.recording_state.md +16 -0
  251. package/dist/docs/markdown/plugin-meetings.constants.remote.md +11 -0
  252. package/dist/docs/markdown/plugin-meetings.constants.resource.md +15 -0
  253. package/dist/docs/markdown/plugin-meetings.constants.retry_timeout.md +11 -0
  254. package/dist/docs/markdown/plugin-meetings.constants.roap.md +22 -0
  255. package/dist/docs/markdown/plugin-meetings.constants.self_roles.md +14 -0
  256. package/dist/docs/markdown/plugin-meetings.constants.send_dtmf_endpoint.md +11 -0
  257. package/dist/docs/markdown/plugin-meetings.constants.sendrecv.md +11 -0
  258. package/dist/docs/markdown/plugin-meetings.constants.share.md +11 -0
  259. package/dist/docs/markdown/plugin-meetings.constants.share_peer_connection_name.md +11 -0
  260. package/dist/docs/markdown/plugin-meetings.constants.share_status.md +16 -0
  261. package/dist/docs/markdown/plugin-meetings.constants.share_stopped_reason.md +14 -0
  262. package/dist/docs/markdown/plugin-meetings.constants.sip_uri.md +11 -0
  263. package/dist/docs/markdown/plugin-meetings.constants.stats.md +16 -0
  264. package/dist/docs/markdown/plugin-meetings.constants.type.md +11 -0
  265. package/dist/docs/markdown/plugin-meetings.constants.use_uri_lookup_false.md +11 -0
  266. package/dist/docs/markdown/plugin-meetings.constants.uuid_reg.md +11 -0
  267. package/dist/docs/markdown/plugin-meetings.constants.valid_email_address.md +11 -0
  268. package/dist/docs/markdown/plugin-meetings.constants.valid_pin.md +11 -0
  269. package/dist/docs/markdown/plugin-meetings.constants.valid_pmr_address.md +11 -0
  270. package/dist/docs/markdown/plugin-meetings.constants.valid_pmr_link.md +11 -0
  271. package/dist/docs/markdown/plugin-meetings.constants.video.md +11 -0
  272. package/dist/docs/markdown/plugin-meetings.constants.video_input.md +11 -0
  273. package/dist/docs/markdown/plugin-meetings.constants.video_resolutions.md +24 -0
  274. package/dist/docs/markdown/plugin-meetings.constants.video_status.md +11 -0
  275. package/dist/docs/markdown/plugin-meetings.constants.wbxappapi_service.md +11 -0
  276. package/dist/docs/markdown/plugin-meetings.constants.webex_dot_com.md +11 -0
  277. package/dist/docs/markdown/plugin-meetings.constants.whiteboard.md +11 -0
  278. package/dist/docs/markdown/plugin-meetings.constants.www_dot.md +11 -0
  279. package/dist/docs/markdown/plugin-meetings.md +28 -0
  280. package/dist/docs/markdown/plugin-meetings.meeting.default._constructor_.md +21 -0
  281. package/dist/docs/markdown/plugin-meetings.meeting.default.acknowledge.md +28 -0
  282. package/dist/docs/markdown/plugin-meetings.meeting.default.addmedia.md +28 -0
  283. package/dist/docs/markdown/plugin-meetings.meeting.default.admit.md +32 -0
  284. package/dist/docs/markdown/plugin-meetings.meeting.default.attrs.md +11 -0
  285. package/dist/docs/markdown/plugin-meetings.meeting.default.audio.md +11 -0
  286. package/dist/docs/markdown/plugin-meetings.meeting.default.breakouts.md +11 -0
  287. package/dist/docs/markdown/plugin-meetings.meeting.default.callevents.md +11 -0
  288. package/dist/docs/markdown/plugin-meetings.meeting.default.cancelphoneinvite.md +30 -0
  289. package/dist/docs/markdown/plugin-meetings.meeting.default.canupdatemedia.md +19 -0
  290. package/dist/docs/markdown/plugin-meetings.meeting.default.changevideolayout.md +38 -0
  291. package/dist/docs/markdown/plugin-meetings.meeting.default.clearmeetingdata.md +13 -0
  292. package/dist/docs/markdown/plugin-meetings.meeting.default.closelocalshare.md +21 -0
  293. package/dist/docs/markdown/plugin-meetings.meeting.default.closelocalstream.md +21 -0
  294. package/dist/docs/markdown/plugin-meetings.meeting.default.closepeerconnections.md +21 -0
  295. package/dist/docs/markdown/plugin-meetings.meeting.default.closeremotestream.md +26 -0
  296. package/dist/docs/markdown/plugin-meetings.meeting.default.closeremotetracks.md +19 -0
  297. package/dist/docs/markdown/plugin-meetings.meeting.default.controlsoptionsmanager.md +11 -0
  298. package/dist/docs/markdown/plugin-meetings.meeting.default.conversationurl.md +11 -0
  299. package/dist/docs/markdown/plugin-meetings.meeting.default.correlationid.md +11 -0
  300. package/dist/docs/markdown/plugin-meetings.meeting.default.createmediaconnection.md +26 -0
  301. package/dist/docs/markdown/plugin-meetings.meeting.default.decline.md +28 -0
  302. package/dist/docs/markdown/plugin-meetings.meeting.default.deferjoin.md +11 -0
  303. package/dist/docs/markdown/plugin-meetings.meeting.default.destination.md +11 -0
  304. package/dist/docs/markdown/plugin-meetings.meeting.default.destinationtype.md +11 -0
  305. package/dist/docs/markdown/plugin-meetings.meeting.default.deviceurl.md +11 -0
  306. package/dist/docs/markdown/plugin-meetings.meeting.default.dialindevicestatus.md +11 -0
  307. package/dist/docs/markdown/plugin-meetings.meeting.default.dialinurl.md +11 -0
  308. package/dist/docs/markdown/plugin-meetings.meeting.default.dialoutdevicestatus.md +11 -0
  309. package/dist/docs/markdown/plugin-meetings.meeting.default.dialouturl.md +11 -0
  310. package/dist/docs/markdown/plugin-meetings.meeting.default.disconnectphoneaudio.md +19 -0
  311. package/dist/docs/markdown/plugin-meetings.meeting.default.endcallinitiatejoinreq.md +11 -0
  312. package/dist/docs/markdown/plugin-meetings.meeting.default.endjoinreqresp.md +11 -0
  313. package/dist/docs/markdown/plugin-meetings.meeting.default.endlocalsdpgenremotesdprecvdelay.md +11 -0
  314. package/dist/docs/markdown/plugin-meetings.meeting.default.endmeetingforall.md +21 -0
  315. package/dist/docs/markdown/plugin-meetings.meeting.default.fetchmeetinginfo.md +29 -0
  316. package/dist/docs/markdown/plugin-meetings.meeting.default.fetchmeetinginfotimeoutid.md +11 -0
  317. package/dist/docs/markdown/plugin-meetings.meeting.default.floorgrantpending.md +11 -0
  318. package/dist/docs/markdown/plugin-meetings.meeting.default.forwardevent.md +29 -0
  319. package/dist/docs/markdown/plugin-meetings.meeting.default.getanalyzermetricsprepayload.md +32 -0
  320. package/dist/docs/markdown/plugin-meetings.meeting.default.getcallinitiatejoinreq.md +17 -0
  321. package/dist/docs/markdown/plugin-meetings.meeting.default.getdevices.md +13 -0
  322. package/dist/docs/markdown/plugin-meetings.meeting.default.getjoinreqresp.md +17 -0
  323. package/dist/docs/markdown/plugin-meetings.meeting.default.getlocalsdpgenremotesdprecvdelay.md +17 -0
  324. package/dist/docs/markdown/plugin-meetings.meeting.default.getmediaconnectiondebugid.md +15 -0
  325. package/dist/docs/markdown/plugin-meetings.meeting.default.getmediastreams.md +15 -0
  326. package/dist/docs/markdown/plugin-meetings.meeting.default.getmembers.md +21 -0
  327. package/dist/docs/markdown/plugin-meetings.meeting.default.getsendingmediadelayduration.md +24 -0
  328. package/dist/docs/markdown/plugin-meetings.meeting.default.getsetupdelayduration.md +24 -0
  329. package/dist/docs/markdown/plugin-meetings.meeting.default.getsupporteddevices.md +16 -0
  330. package/dist/docs/markdown/plugin-meetings.meeting.default.gettotaljmt.md +17 -0
  331. package/dist/docs/markdown/plugin-meetings.meeting.default.guest.md +11 -0
  332. package/dist/docs/markdown/plugin-meetings.meeting.default.handledatachannelurlchange.md +26 -0
  333. package/dist/docs/markdown/plugin-meetings.meeting.default.handleroapfailure.md +13 -0
  334. package/dist/docs/markdown/plugin-meetings.meeting.default.hasjoinedonce.md +11 -0
  335. package/dist/docs/markdown/plugin-meetings.meeting.default.haswebsocketconnected.md +11 -0
  336. package/dist/docs/markdown/plugin-meetings.meeting.default.hostid.md +11 -0
  337. package/dist/docs/markdown/plugin-meetings.meeting.default.id.md +11 -0
  338. package/dist/docs/markdown/plugin-meetings.meeting.default.inmeetingactions.md +11 -0
  339. package/dist/docs/markdown/plugin-meetings.meeting.default.invite.md +33 -0
  340. package/dist/docs/markdown/plugin-meetings.meeting.default.isaudioconnected.md +21 -0
  341. package/dist/docs/markdown/plugin-meetings.meeting.default.isaudiomuted.md +21 -0
  342. package/dist/docs/markdown/plugin-meetings.meeting.default.isaudioself.md +21 -0
  343. package/dist/docs/markdown/plugin-meetings.meeting.default.islocalsharelive.md +11 -0
  344. package/dist/docs/markdown/plugin-meetings.meeting.default.ismultistream.md +11 -0
  345. package/dist/docs/markdown/plugin-meetings.meeting.default.isreactionssupported.md +19 -0
  346. package/dist/docs/markdown/plugin-meetings.meeting.default.isroapinprogress.md +11 -0
  347. package/dist/docs/markdown/plugin-meetings.meeting.default.issharing.md +11 -0
  348. package/dist/docs/markdown/plugin-meetings.meeting.default.istranscriptionsupported.md +23 -0
  349. package/dist/docs/markdown/plugin-meetings.meeting.default.isvideoconnected.md +21 -0
  350. package/dist/docs/markdown/plugin-meetings.meeting.default.isvideomuted.md +21 -0
  351. package/dist/docs/markdown/plugin-meetings.meeting.default.isvideoself.md +21 -0
  352. package/dist/docs/markdown/plugin-meetings.meeting.default.join.md +28 -0
  353. package/dist/docs/markdown/plugin-meetings.meeting.default.joinedwith.md +11 -0
  354. package/dist/docs/markdown/plugin-meetings.meeting.default.joinwithmedia.md +36 -0
  355. package/dist/docs/markdown/plugin-meetings.meeting.default.keepalivetimerid.md +11 -0
  356. package/dist/docs/markdown/plugin-meetings.meeting.default.lastvideolayoutinfo.md +11 -0
  357. package/dist/docs/markdown/plugin-meetings.meeting.default.leave.md +31 -0
  358. package/dist/docs/markdown/plugin-meetings.meeting.default.lockmeeting.md +21 -0
  359. package/dist/docs/markdown/plugin-meetings.meeting.default.locusid.md +11 -0
  360. package/dist/docs/markdown/plugin-meetings.meeting.default.locusinfo.md +11 -0
  361. package/dist/docs/markdown/plugin-meetings.meeting.default.locusurl.md +11 -0
  362. package/dist/docs/markdown/plugin-meetings.meeting.default.md +227 -0
  363. package/dist/docs/markdown/plugin-meetings.meeting.default.mediaconnections.md +11 -0
  364. package/dist/docs/markdown/plugin-meetings.meeting.default.mediaid.md +11 -0
  365. package/dist/docs/markdown/plugin-meetings.meeting.default.medianegotiatedevent.md +13 -0
  366. package/dist/docs/markdown/plugin-meetings.meeting.default.mediaproperties.md +11 -0
  367. package/dist/docs/markdown/plugin-meetings.meeting.default.mediarequestmanagers.md +16 -0
  368. package/dist/docs/markdown/plugin-meetings.meeting.default.meetingfinitestatemachine.md +11 -0
  369. package/dist/docs/markdown/plugin-meetings.meeting.default.meetinginfo.md +11 -0
  370. package/dist/docs/markdown/plugin-meetings.meeting.default.meetinginfofailurereason.md +11 -0
  371. package/dist/docs/markdown/plugin-meetings.meeting.default.meetingjoinurl.md +11 -0
  372. package/dist/docs/markdown/plugin-meetings.meeting.default.meetingnumber.md +11 -0
  373. package/dist/docs/markdown/plugin-meetings.meeting.default.meetingrequest.md +11 -0
  374. package/dist/docs/markdown/plugin-meetings.meeting.default.meetingstate.md +11 -0
  375. package/dist/docs/markdown/plugin-meetings.meeting.default.members.md +11 -0
  376. package/dist/docs/markdown/plugin-meetings.meeting.default.movefrom.md +28 -0
  377. package/dist/docs/markdown/plugin-meetings.meeting.default.moveto.md +28 -0
  378. package/dist/docs/markdown/plugin-meetings.meeting.default.mute.md +29 -0
  379. package/dist/docs/markdown/plugin-meetings.meeting.default.muteaudio.md +21 -0
  380. package/dist/docs/markdown/plugin-meetings.meeting.default.mutevideo.md +21 -0
  381. package/dist/docs/markdown/plugin-meetings.meeting.default.namespace.md +11 -0
  382. package/dist/docs/markdown/plugin-meetings.meeting.default.networkqualitymonitor.md +11 -0
  383. package/dist/docs/markdown/plugin-meetings.meeting.default.networkstatus.md +11 -0
  384. package/dist/docs/markdown/plugin-meetings.meeting.default.options.md +11 -0
  385. package/dist/docs/markdown/plugin-meetings.meeting.default.orgid.md +11 -0
  386. package/dist/docs/markdown/plugin-meetings.meeting.default.owner.md +11 -0
  387. package/dist/docs/markdown/plugin-meetings.meeting.default.parsemeetinginfo.md +34 -0
  388. package/dist/docs/markdown/plugin-meetings.meeting.default.partner.md +11 -0
  389. package/dist/docs/markdown/plugin-meetings.meeting.default.passwordstatus.md +11 -0
  390. package/dist/docs/markdown/plugin-meetings.meeting.default.pauserecording.md +21 -0
  391. package/dist/docs/markdown/plugin-meetings.meeting.default.permissiontoken.md +11 -0
  392. package/dist/docs/markdown/plugin-meetings.meeting.default.policy.md +11 -0
  393. package/dist/docs/markdown/plugin-meetings.meeting.default.processnextqueuedmediaupdate.md +13 -0
  394. package/dist/docs/markdown/plugin-meetings.meeting.default.publishtracks.md +33 -0
  395. package/dist/docs/markdown/plugin-meetings.meeting.default.queuedmediaupdates.md +11 -0
  396. package/dist/docs/markdown/plugin-meetings.meeting.default.receiveslotmanager.md +11 -0
  397. package/dist/docs/markdown/plugin-meetings.meeting.default.reconnect.md +28 -0
  398. package/dist/docs/markdown/plugin-meetings.meeting.default.reconnectionmanager.md +11 -0
  399. package/dist/docs/markdown/plugin-meetings.meeting.default.recording.md +11 -0
  400. package/dist/docs/markdown/plugin-meetings.meeting.default.recordingcontroller.md +11 -0
  401. package/dist/docs/markdown/plugin-meetings.meeting.default.refreshcaptcha.md +21 -0
  402. package/dist/docs/markdown/plugin-meetings.meeting.default.remotemediamanager.md +11 -0
  403. package/dist/docs/markdown/plugin-meetings.meeting.default.remove.md +28 -0
  404. package/dist/docs/markdown/plugin-meetings.meeting.default.requiredcaptcha.md +11 -0
  405. package/dist/docs/markdown/plugin-meetings.meeting.default.resource.md +11 -0
  406. package/dist/docs/markdown/plugin-meetings.meeting.default.resourceid.md +11 -0
  407. package/dist/docs/markdown/plugin-meetings.meeting.default.resourceurl.md +11 -0
  408. package/dist/docs/markdown/plugin-meetings.meeting.default.resumerecording.md +21 -0
  409. package/dist/docs/markdown/plugin-meetings.meeting.default.roap.md +11 -0
  410. package/dist/docs/markdown/plugin-meetings.meeting.default.roapseq.md +11 -0
  411. package/dist/docs/markdown/plugin-meetings.meeting.default.selfid.md +11 -0
  412. package/dist/docs/markdown/plugin-meetings.meeting.default.senddtmf.md +28 -0
  413. package/dist/docs/markdown/plugin-meetings.meeting.default.sendreaction.md +29 -0
  414. package/dist/docs/markdown/plugin-meetings.meeting.default.setdisallowunmute.md +26 -0
  415. package/dist/docs/markdown/plugin-meetings.meeting.default.setendcallinitiatejoinreq.md +17 -0
  416. package/dist/docs/markdown/plugin-meetings.meeting.default.setendjoinreqresp.md +17 -0
  417. package/dist/docs/markdown/plugin-meetings.meeting.default.setendlocalsdpgenremotesdprecvdelay.md +17 -0
  418. package/dist/docs/markdown/plugin-meetings.meeting.default.setendsendingmediadelay.md +24 -0
  419. package/dist/docs/markdown/plugin-meetings.meeting.default.setendsetupdelay.md +24 -0
  420. package/dist/docs/markdown/plugin-meetings.meeting.default.setlocalsharetrack.md +28 -0
  421. package/dist/docs/markdown/plugin-meetings.meeting.default.setlocaltracks.md +28 -0
  422. package/dist/docs/markdown/plugin-meetings.meeting.default.setlocalvideoquality.md +26 -0
  423. package/dist/docs/markdown/plugin-meetings.meeting.default.setmeetingquality.md +31 -0
  424. package/dist/docs/markdown/plugin-meetings.meeting.default.setmercurylistener.md +21 -0
  425. package/dist/docs/markdown/plugin-meetings.meeting.default.setmuteall.md +28 -0
  426. package/dist/docs/markdown/plugin-meetings.meeting.default.setmuteonentry.md +26 -0
  427. package/dist/docs/markdown/plugin-meetings.meeting.default.setremotequalitylevel.md +26 -0
  428. package/dist/docs/markdown/plugin-meetings.meeting.default.setsipuri.md +26 -0
  429. package/dist/docs/markdown/plugin-meetings.meeting.default.setstartcallinitiatejoinreq.md +17 -0
  430. package/dist/docs/markdown/plugin-meetings.meeting.default.setstartjoinreqresp.md +17 -0
  431. package/dist/docs/markdown/plugin-meetings.meeting.default.setstartlocalsdpgenremotesdprecvdelay.md +17 -0
  432. package/dist/docs/markdown/plugin-meetings.meeting.default.setstartsendingmediadelay.md +24 -0
  433. package/dist/docs/markdown/plugin-meetings.meeting.default.setstartsetupdelay.md +24 -0
  434. package/dist/docs/markdown/plugin-meetings.meeting.default.setupbreakoutslistener.md +19 -0
  435. package/dist/docs/markdown/plugin-meetings.meeting.default.setupmediaconnectionlisteners.md +11 -0
  436. package/dist/docs/markdown/plugin-meetings.meeting.default.setupstatsanalyzereventhandlers.md +13 -0
  437. package/dist/docs/markdown/plugin-meetings.meeting.default.sharescreen.md +32 -0
  438. package/dist/docs/markdown/plugin-meetings.meeting.default.sharestatus.md +11 -0
  439. package/dist/docs/markdown/plugin-meetings.meeting.default.sipuri.md +11 -0
  440. package/dist/docs/markdown/plugin-meetings.meeting.default.startcallinitiatejoinreq.md +11 -0
  441. package/dist/docs/markdown/plugin-meetings.meeting.default.startjoinreqresp.md +11 -0
  442. package/dist/docs/markdown/plugin-meetings.meeting.default.startkeepalive.md +13 -0
  443. package/dist/docs/markdown/plugin-meetings.meeting.default.startlocalsdpgenremotesdprecvdelay.md +11 -0
  444. package/dist/docs/markdown/plugin-meetings.meeting.default.startrecording.md +21 -0
  445. package/dist/docs/markdown/plugin-meetings.meeting.default.startwhiteboardshare.md +29 -0
  446. package/dist/docs/markdown/plugin-meetings.meeting.default.state.md +11 -0
  447. package/dist/docs/markdown/plugin-meetings.meeting.default.statsanalyzer.md +11 -0
  448. package/dist/docs/markdown/plugin-meetings.meeting.default.stopkeepalive.md +13 -0
  449. package/dist/docs/markdown/plugin-meetings.meeting.default.stopreceivingtranscription.md +19 -0
  450. package/dist/docs/markdown/plugin-meetings.meeting.default.stoprecording.md +21 -0
  451. package/dist/docs/markdown/plugin-meetings.meeting.default.stopshare.md +28 -0
  452. package/dist/docs/markdown/plugin-meetings.meeting.default.stopwhiteboardshare.md +28 -0
  453. package/dist/docs/markdown/plugin-meetings.meeting.default.togglereactions.md +28 -0
  454. package/dist/docs/markdown/plugin-meetings.meeting.default.transcription.md +11 -0
  455. package/dist/docs/markdown/plugin-meetings.meeting.default.transfer.md +29 -0
  456. package/dist/docs/markdown/plugin-meetings.meeting.default.type.md +11 -0
  457. package/dist/docs/markdown/plugin-meetings.meeting.default.unlockmeeting.md +21 -0
  458. package/dist/docs/markdown/plugin-meetings.meeting.default.unmuteaudio.md +21 -0
  459. package/dist/docs/markdown/plugin-meetings.meeting.default.unmutevideo.md +21 -0
  460. package/dist/docs/markdown/plugin-meetings.meeting.default.unpublishtracks.md +26 -0
  461. package/dist/docs/markdown/plugin-meetings.meeting.default.unsetlocalsharetrack.md +21 -0
  462. package/dist/docs/markdown/plugin-meetings.meeting.default.unsetlocalvideotrack.md +21 -0
  463. package/dist/docs/markdown/plugin-meetings.meeting.default.unsetpeerconnections.md +21 -0
  464. package/dist/docs/markdown/plugin-meetings.meeting.default.unsetremotestream.md +26 -0
  465. package/dist/docs/markdown/plugin-meetings.meeting.default.unsetremotetracks.md +19 -0
  466. package/dist/docs/markdown/plugin-meetings.meeting.default.updateaudio.md +34 -0
  467. package/dist/docs/markdown/plugin-meetings.meeting.default.updatellmconnection.md +19 -0
  468. package/dist/docs/markdown/plugin-meetings.meeting.default.updatemedia.md +32 -0
  469. package/dist/docs/markdown/plugin-meetings.meeting.default.updatemediaconnections.md +11 -0
  470. package/dist/docs/markdown/plugin-meetings.meeting.default.updateshare.md +35 -0
  471. package/dist/docs/markdown/plugin-meetings.meeting.default.updatevideo.md +34 -0
  472. package/dist/docs/markdown/plugin-meetings.meeting.default.uploadlogs.md +28 -0
  473. package/dist/docs/markdown/plugin-meetings.meeting.default.usephoneaudio.md +28 -0
  474. package/dist/docs/markdown/plugin-meetings.meeting.default.userid.md +11 -0
  475. package/dist/docs/markdown/plugin-meetings.meeting.default.verifypassword.md +35 -0
  476. package/dist/docs/markdown/plugin-meetings.meeting.default.video.md +11 -0
  477. package/dist/docs/markdown/plugin-meetings.meeting.default.wirelessshare.md +11 -0
  478. package/dist/docs/markdown/plugin-meetings.meeting.md +18 -0
  479. package/dist/docs/markdown/plugin-meetings.meeting.media_update_type.md +17 -0
  480. package/dist/docs/markdown/plugin-meetings.meetings._constructor_.md +22 -0
  481. package/dist/docs/markdown/plugin-meetings.meetings.create.md +30 -0
  482. package/dist/docs/markdown/plugin-meetings.meetings.fetchuserpreferredwebexsite.md +19 -0
  483. package/dist/docs/markdown/plugin-meetings.meetings.geohintinfo.md +11 -0
  484. package/dist/docs/markdown/plugin-meetings.meetings.getallmeetings.md +31 -0
  485. package/dist/docs/markdown/plugin-meetings.meetings.getgeohint.md +19 -0
  486. package/dist/docs/markdown/plugin-meetings.meetings.getlogger.md +19 -0
  487. package/dist/docs/markdown/plugin-meetings.meetings.getmeetingbytype.md +29 -0
  488. package/dist/docs/markdown/plugin-meetings.meetings.getpersonalmeetingroom.md +21 -0
  489. package/dist/docs/markdown/plugin-meetings.meetings.getreachability.md +21 -0
  490. package/dist/docs/markdown/plugin-meetings.meetings.getscheduledmeetings.md +19 -0
  491. package/dist/docs/markdown/plugin-meetings.meetings.loggerrequest.md +11 -0
  492. package/dist/docs/markdown/plugin-meetings.meetings.md +57 -0
  493. package/dist/docs/markdown/plugin-meetings.meetings.media.md +11 -0
  494. package/dist/docs/markdown/plugin-meetings.meetings.meetingcollection.md +11 -0
  495. package/dist/docs/markdown/plugin-meetings.meetings.meetinginfo.md +11 -0
  496. package/dist/docs/markdown/plugin-meetings.meetings.namespace.md +11 -0
  497. package/dist/docs/markdown/plugin-meetings.meetings.personalmeetingroom.md +11 -0
  498. package/dist/docs/markdown/plugin-meetings.meetings.preferredwebexsite.md +11 -0
  499. package/dist/docs/markdown/plugin-meetings.meetings.reachability.md +11 -0
  500. package/dist/docs/markdown/plugin-meetings.meetings.register.md +21 -0
  501. package/dist/docs/markdown/plugin-meetings.meetings.registered.md +11 -0
  502. package/dist/docs/markdown/plugin-meetings.meetings.request.md +11 -0
  503. package/dist/docs/markdown/plugin-meetings.meetings.setreachability.md +21 -0
  504. package/dist/docs/markdown/plugin-meetings.meetings.startreachability.md +21 -0
  505. package/dist/docs/markdown/plugin-meetings.meetings.syncmeetings.md +21 -0
  506. package/dist/docs/markdown/plugin-meetings.meetings.unregister.md +21 -0
  507. package/dist/docs/markdown/plugin-meetings.meetings.uploadlogs.md +34 -0
  508. package/dist/docs/markdown/plugin-meetings.reactions.md +13 -0
  509. package/dist/docs/markdown/plugin-meetings.reactions.reactions.md +11 -0
  510. package/dist/docs/markdown/plugin-meetings.reactions.skintones.md +11 -0
  511. package/dist/docs/markdown/plugin-meetings.remotemedia.getmaxfs.md +26 -0
  512. package/dist/docs/markdown/plugin-meetings.remotemedia.md +31 -0
  513. package/dist/docs/markdown/plugin-meetings.remotemedia.remotemedia._constructor_.md +22 -0
  514. package/dist/docs/markdown/plugin-meetings.remotemedia.remotemedia.csi.md +13 -0
  515. package/dist/docs/markdown/plugin-meetings.remotemedia.remotemedia.id.md +11 -0
  516. package/dist/docs/markdown/plugin-meetings.remotemedia.remotemedia.md +40 -0
  517. package/dist/docs/markdown/plugin-meetings.remotemedia.remotemedia.mediatype.md +13 -0
  518. package/dist/docs/markdown/plugin-meetings.remotemedia.remotemedia.memberid.md +13 -0
  519. package/dist/docs/markdown/plugin-meetings.remotemedia.remotemedia.setsizehint.md +25 -0
  520. package/dist/docs/markdown/plugin-meetings.remotemedia.remotemedia.sourcestate.md +13 -0
  521. package/dist/docs/markdown/plugin-meetings.remotemedia.remotemedia.stream.md +13 -0
  522. package/dist/docs/markdown/plugin-meetings.remotemedia.remotemediaevents.md +14 -0
  523. package/dist/docs/markdown/plugin-meetings.remotemedia.remotemediaid.md +11 -0
  524. package/dist/docs/markdown/plugin-meetings.remotemedia.remotevideoresolution.md +11 -0
  525. package/dist/docs/markdown/plugin-meetings.remotemediagroup.md +12 -0
  526. package/dist/docs/markdown/plugin-meetings.remotemediagroup.remotemediagroup._constructor_.md +24 -0
  527. package/dist/docs/markdown/plugin-meetings.remotemediagroup.remotemediagroup.getremotemedia.md +26 -0
  528. package/dist/docs/markdown/plugin-meetings.remotemediagroup.remotemediagroup.includes.md +27 -0
  529. package/dist/docs/markdown/plugin-meetings.remotemediagroup.remotemediagroup.ispinned.md +22 -0
  530. package/dist/docs/markdown/plugin-meetings.remotemediagroup.remotemediagroup.md +28 -0
  531. package/dist/docs/markdown/plugin-meetings.remotemediagroup.remotemediagroup.pin.md +25 -0
  532. package/dist/docs/markdown/plugin-meetings.remotemediagroup.remotemediagroup.unpin.md +24 -0
  533. package/dist/docs/markdown/plugin-meetings.triggerproxy.md +11 -0
  534. package/dist/docs/metadata/index.api.json +14144 -0
  535. package/dist/docs/metadata/index.api.md +2075 -0
  536. package/dist/docs/metadata/index.d.ts +5594 -0
  537. package/dist/index.d.ts +4 -0
  538. package/dist/index.js +72 -17
  539. package/dist/index.js.map +1 -1
  540. package/dist/locus-info/controlsUtils.d.ts +2 -0
  541. package/dist/locus-info/controlsUtils.js +31 -29
  542. package/dist/locus-info/controlsUtils.js.map +1 -1
  543. package/dist/locus-info/embeddedAppsUtils.d.ts +2 -0
  544. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  545. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  546. package/dist/locus-info/fullState.d.ts +2 -0
  547. package/dist/locus-info/fullState.js +0 -15
  548. package/dist/locus-info/fullState.js.map +1 -1
  549. package/dist/locus-info/hostUtils.d.ts +2 -0
  550. package/dist/locus-info/hostUtils.js +4 -12
  551. package/dist/locus-info/hostUtils.js.map +1 -1
  552. package/dist/locus-info/index.d.ts +269 -0
  553. package/dist/locus-info/index.js +202 -201
  554. package/dist/locus-info/index.js.map +1 -1
  555. package/dist/locus-info/infoUtils.d.ts +2 -0
  556. package/dist/locus-info/infoUtils.js +3 -37
  557. package/dist/locus-info/infoUtils.js.map +1 -1
  558. package/dist/locus-info/mediaSharesUtils.d.ts +2 -0
  559. package/dist/locus-info/mediaSharesUtils.js +12 -38
  560. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  561. package/dist/locus-info/parser.d.ts +212 -0
  562. package/dist/locus-info/parser.js +88 -123
  563. package/dist/locus-info/parser.js.map +1 -1
  564. package/dist/locus-info/selfUtils.d.ts +2 -0
  565. package/dist/locus-info/selfUtils.js +80 -89
  566. package/dist/locus-info/selfUtils.js.map +1 -1
  567. package/dist/media/index.d.ts +32 -0
  568. package/dist/media/index.js +56 -146
  569. package/dist/media/index.js.map +1 -1
  570. package/dist/media/properties.d.ts +108 -0
  571. package/dist/media/properties.js +71 -117
  572. package/dist/media/properties.js.map +1 -1
  573. package/dist/media/util.d.ts +2 -0
  574. package/dist/media/util.js +2 -9
  575. package/dist/media/util.js.map +1 -1
  576. package/dist/mediaQualityMetrics/config.d.ts +233 -0
  577. package/dist/mediaQualityMetrics/config.js +505 -495
  578. package/dist/mediaQualityMetrics/config.js.map +1 -1
  579. package/dist/meeting/effectsState.d.ts +42 -0
  580. package/dist/meeting/effectsState.js +118 -192
  581. package/dist/meeting/effectsState.js.map +1 -1
  582. package/dist/meeting/in-meeting-actions.d.ts +79 -0
  583. package/dist/meeting/in-meeting-actions.js +31 -14
  584. package/dist/meeting/in-meeting-actions.js.map +1 -1
  585. package/dist/meeting/index.d.ts +1621 -0
  586. package/dist/meeting/index.js +2175 -2266
  587. package/dist/meeting/index.js.map +1 -1
  588. package/dist/meeting/muteState.d.ts +116 -0
  589. package/dist/meeting/muteState.js +252 -113
  590. package/dist/meeting/muteState.js.map +1 -1
  591. package/dist/meeting/request.d.ts +255 -0
  592. package/dist/meeting/request.js +297 -283
  593. package/dist/meeting/request.js.map +1 -1
  594. package/dist/meeting/request.type.js +7 -0
  595. package/dist/meeting/request.type.js.map +1 -0
  596. package/dist/meeting/state.d.ts +9 -0
  597. package/dist/meeting/state.js +21 -31
  598. package/dist/meeting/state.js.map +1 -1
  599. package/dist/meeting/util.d.ts +2 -0
  600. package/dist/meeting/util.js +63 -217
  601. package/dist/meeting/util.js.map +1 -1
  602. package/dist/meeting-info/collection.d.ts +20 -0
  603. package/dist/meeting-info/collection.js +3 -25
  604. package/dist/meeting-info/collection.js.map +1 -1
  605. package/dist/meeting-info/index.d.ts +57 -0
  606. package/dist/meeting-info/index.js +10 -33
  607. package/dist/meeting-info/index.js.map +1 -1
  608. package/dist/meeting-info/meeting-info-v2.d.ts +93 -0
  609. package/dist/meeting-info/meeting-info-v2.js +181 -268
  610. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  611. package/dist/meeting-info/request.d.ts +22 -0
  612. package/dist/meeting-info/request.js +1 -16
  613. package/dist/meeting-info/request.js.map +1 -1
  614. package/dist/meeting-info/util.d.ts +2 -0
  615. package/dist/meeting-info/util.js +98 -183
  616. package/dist/meeting-info/util.js.map +1 -1
  617. package/dist/meeting-info/utilv2.d.ts +2 -0
  618. package/dist/meeting-info/utilv2.js +137 -228
  619. package/dist/meeting-info/utilv2.js.map +1 -1
  620. package/dist/meetings/collection.d.ts +23 -0
  621. package/dist/meetings/collection.js +24 -20
  622. package/dist/meetings/collection.js.map +1 -1
  623. package/dist/meetings/index.d.ts +297 -0
  624. package/dist/meetings/index.js +566 -587
  625. package/dist/meetings/index.js.map +1 -1
  626. package/dist/meetings/request.d.ts +27 -0
  627. package/dist/meetings/request.js +23 -42
  628. package/dist/meetings/request.js.map +1 -1
  629. package/dist/meetings/util.d.ts +18 -0
  630. package/dist/meetings/util.js +151 -155
  631. package/dist/meetings/util.js.map +1 -1
  632. package/dist/member/index.d.ts +145 -0
  633. package/dist/member/index.js +80 -88
  634. package/dist/member/index.js.map +1 -1
  635. package/dist/member/types.js +15 -0
  636. package/dist/member/types.js.map +1 -0
  637. package/dist/member/util.d.ts +2 -0
  638. package/dist/member/util.js +90 -69
  639. package/dist/member/util.js.map +1 -1
  640. package/dist/members/collection.d.ts +24 -0
  641. package/dist/members/collection.js +12 -12
  642. package/dist/members/collection.js.map +1 -1
  643. package/dist/members/index.d.ts +298 -0
  644. package/dist/members/index.js +139 -204
  645. package/dist/members/index.js.map +1 -1
  646. package/dist/members/request.d.ts +50 -0
  647. package/dist/members/request.js +41 -55
  648. package/dist/members/request.js.map +1 -1
  649. package/dist/members/types.js +15 -0
  650. package/dist/members/types.js.map +1 -0
  651. package/dist/members/util.d.ts +2 -0
  652. package/dist/members/util.js +76 -46
  653. package/dist/members/util.js.map +1 -1
  654. package/dist/metrics/config.d.ts +169 -0
  655. package/dist/metrics/config.js +4 -14
  656. package/dist/metrics/config.js.map +1 -1
  657. package/dist/metrics/constants.d.ts +57 -0
  658. package/dist/metrics/constants.js +1 -6
  659. package/dist/metrics/constants.js.map +1 -1
  660. package/dist/metrics/index.d.ts +152 -0
  661. package/dist/metrics/index.js +53 -158
  662. package/dist/metrics/index.js.map +1 -1
  663. package/dist/multistream/mediaRequestManager.js +116 -52
  664. package/dist/multistream/mediaRequestManager.js.map +1 -1
  665. package/dist/multistream/receiveSlot.js +58 -65
  666. package/dist/multistream/receiveSlot.js.map +1 -1
  667. package/dist/multistream/receiveSlotManager.js +58 -93
  668. package/dist/multistream/receiveSlotManager.js.map +1 -1
  669. package/dist/multistream/remoteMedia.js +55 -74
  670. package/dist/multistream/remoteMedia.js.map +1 -1
  671. package/dist/multistream/remoteMediaGroup.js +6 -40
  672. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  673. package/dist/multistream/remoteMediaManager.js +466 -442
  674. package/dist/multistream/remoteMediaManager.js.map +1 -1
  675. package/dist/networkQualityMonitor/index.d.ts +70 -0
  676. package/dist/networkQualityMonitor/index.js +32 -59
  677. package/dist/networkQualityMonitor/index.js.map +1 -1
  678. package/dist/peer-connection-manager/index.d.ts +6 -0
  679. package/dist/peer-connection-manager/index.js +671 -0
  680. package/dist/peer-connection-manager/index.js.map +1 -0
  681. package/dist/peer-connection-manager/util.d.ts +6 -0
  682. package/dist/peer-connection-manager/util.js +110 -0
  683. package/dist/peer-connection-manager/util.js.map +1 -0
  684. package/dist/personal-meeting-room/index.d.ts +47 -0
  685. package/dist/personal-meeting-room/index.js +10 -45
  686. package/dist/personal-meeting-room/index.js.map +1 -1
  687. package/dist/personal-meeting-room/request.d.ts +14 -0
  688. package/dist/personal-meeting-room/request.js +2 -33
  689. package/dist/personal-meeting-room/request.js.map +1 -1
  690. package/dist/personal-meeting-room/util.d.ts +2 -0
  691. package/dist/personal-meeting-room/util.js +0 -13
  692. package/dist/personal-meeting-room/util.js.map +1 -1
  693. package/dist/plugin-meetings.d.ts +5399 -0
  694. package/dist/reachability/index.d.ts +139 -0
  695. package/dist/reachability/index.js +190 -199
  696. package/dist/reachability/index.js.map +1 -1
  697. package/dist/reachability/request.d.ts +35 -0
  698. package/dist/reachability/request.js +14 -23
  699. package/dist/reachability/request.js.map +1 -1
  700. package/dist/reactions/constants.js +13 -0
  701. package/dist/reactions/constants.js.map +1 -0
  702. package/dist/reactions/reactions.d.ts +4 -0
  703. package/dist/reactions/reactions.js +109 -0
  704. package/dist/reactions/reactions.js.map +1 -0
  705. package/dist/reactions/reactions.type.d.ts +32 -0
  706. package/dist/reactions/reactions.type.js +36 -0
  707. package/dist/reactions/reactions.type.js.map +1 -0
  708. package/dist/reconnection-manager/index.d.ts +112 -0
  709. package/dist/reconnection-manager/index.js +328 -465
  710. package/dist/reconnection-manager/index.js.map +1 -1
  711. package/dist/recording-controller/enums.d.ts +7 -0
  712. package/dist/recording-controller/enums.js +17 -0
  713. package/dist/recording-controller/enums.js.map +1 -0
  714. package/dist/recording-controller/index.d.ts +193 -0
  715. package/dist/recording-controller/index.js +343 -0
  716. package/dist/recording-controller/index.js.map +1 -0
  717. package/dist/recording-controller/util.d.ts +13 -0
  718. package/dist/recording-controller/util.js +63 -0
  719. package/dist/recording-controller/util.js.map +1 -0
  720. package/dist/roap/collection.d.ts +10 -0
  721. package/dist/roap/collection.js +63 -0
  722. package/dist/roap/collection.js.map +1 -0
  723. package/dist/roap/handler.d.ts +47 -0
  724. package/dist/roap/handler.js +279 -0
  725. package/dist/roap/handler.js.map +1 -0
  726. package/dist/roap/index.d.ts +116 -0
  727. package/dist/roap/index.js +27 -59
  728. package/dist/roap/index.js.map +1 -1
  729. package/dist/roap/request.d.ts +35 -0
  730. package/dist/roap/request.js +143 -134
  731. package/dist/roap/request.js.map +1 -1
  732. package/dist/roap/state.d.ts +9 -0
  733. package/dist/roap/state.js +127 -0
  734. package/dist/roap/state.js.map +1 -0
  735. package/dist/roap/turnDiscovery.d.ts +67 -0
  736. package/dist/roap/turnDiscovery.js +86 -101
  737. package/dist/roap/turnDiscovery.js.map +1 -1
  738. package/dist/roap/util.d.ts +2 -0
  739. package/dist/roap/util.js +76 -0
  740. package/dist/roap/util.js.map +1 -0
  741. package/dist/statsAnalyzer/global.d.ts +126 -0
  742. package/dist/statsAnalyzer/global.js +1 -95
  743. package/dist/statsAnalyzer/global.js.map +1 -1
  744. package/dist/statsAnalyzer/index.d.ts +190 -0
  745. package/dist/statsAnalyzer/index.js +356 -457
  746. package/dist/statsAnalyzer/index.js.map +1 -1
  747. package/dist/statsAnalyzer/mqaUtil.d.ts +22 -0
  748. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  749. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  750. package/dist/transcription/index.d.ts +64 -0
  751. package/dist/transcription/index.js +13 -45
  752. package/dist/transcription/index.js.map +1 -1
  753. package/dist/types/breakouts/breakout.d.ts +8 -0
  754. package/dist/types/breakouts/collection.d.ts +5 -0
  755. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  756. package/dist/types/breakouts/index.d.ts +5 -0
  757. package/dist/types/breakouts/request.d.ts +22 -0
  758. package/dist/types/breakouts/utils.d.ts +8 -0
  759. package/dist/types/common/browser-detection.d.ts +9 -0
  760. package/dist/types/common/collection.d.ts +48 -0
  761. package/dist/types/common/config.d.ts +2 -0
  762. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  763. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  764. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  765. package/dist/types/common/errors/media.d.ts +15 -0
  766. package/dist/types/common/errors/parameter.d.ts +15 -0
  767. package/dist/types/common/errors/password-error.d.ts +15 -0
  768. package/dist/types/common/errors/permission.d.ts +14 -0
  769. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  770. package/dist/types/common/errors/reconnection.d.ts +15 -0
  771. package/dist/types/common/errors/stats.d.ts +15 -0
  772. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  773. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  774. package/dist/types/common/events/events-scope.d.ts +17 -0
  775. package/dist/types/common/events/events.d.ts +12 -0
  776. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  777. package/dist/types/common/events/util.d.ts +2 -0
  778. package/dist/types/common/logs/logger-config.d.ts +2 -0
  779. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  780. package/dist/types/common/logs/request.d.ts +34 -0
  781. package/dist/types/common/queue.d.ts +32 -0
  782. package/dist/types/config.d.ts +77 -0
  783. package/dist/types/constants.d.ts +944 -0
  784. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  785. package/dist/types/controls-options-manager/enums.d.ts +6 -0
  786. package/dist/types/controls-options-manager/index.d.ts +128 -0
  787. package/dist/types/controls-options-manager/util.d.ts +9 -0
  788. package/dist/types/index.d.ts +7 -0
  789. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  790. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  791. package/dist/types/locus-info/fullState.d.ts +2 -0
  792. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  793. package/dist/types/locus-info/index.d.ts +276 -0
  794. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  795. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  796. package/dist/types/locus-info/parser.d.ts +212 -0
  797. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  798. package/dist/types/media/index.d.ts +32 -0
  799. package/dist/types/media/properties.d.ts +108 -0
  800. package/dist/types/media/util.d.ts +2 -0
  801. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  802. package/dist/types/meeting/effectsState.d.ts +42 -0
  803. package/dist/types/meeting/in-meeting-actions.d.ts +101 -0
  804. package/dist/types/meeting/index.d.ts +1723 -0
  805. package/dist/types/meeting/muteState.d.ts +185 -0
  806. package/dist/types/meeting/request.d.ts +271 -0
  807. package/dist/types/meeting/request.type.d.ts +11 -0
  808. package/dist/types/meeting/state.d.ts +9 -0
  809. package/dist/types/meeting/util.d.ts +2 -0
  810. package/dist/types/meeting-info/collection.d.ts +20 -0
  811. package/dist/types/meeting-info/index.d.ts +57 -0
  812. package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
  813. package/dist/types/meeting-info/request.d.ts +22 -0
  814. package/dist/types/meeting-info/util.d.ts +2 -0
  815. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  816. package/dist/types/meetings/collection.d.ts +31 -0
  817. package/dist/types/meetings/index.d.ts +316 -0
  818. package/dist/types/meetings/request.d.ts +27 -0
  819. package/dist/types/meetings/util.d.ts +18 -0
  820. package/dist/types/member/index.d.ts +156 -0
  821. package/dist/types/member/types.d.ts +21 -0
  822. package/dist/types/member/util.d.ts +2 -0
  823. package/dist/types/members/collection.d.ts +29 -0
  824. package/dist/types/members/index.d.ts +343 -0
  825. package/dist/types/members/request.d.ts +58 -0
  826. package/dist/types/members/types.d.ts +24 -0
  827. package/dist/types/members/util.d.ts +2 -0
  828. package/dist/types/metrics/config.d.ts +171 -0
  829. package/dist/types/metrics/constants.d.ts +53 -0
  830. package/dist/types/metrics/index.d.ts +152 -0
  831. package/dist/types/multistream/mediaRequestManager.d.ts +68 -0
  832. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  833. package/dist/types/multistream/receiveSlotManager.d.ts +49 -0
  834. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  835. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  836. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  837. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  838. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  839. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  840. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  841. package/dist/types/reachability/index.d.ts +152 -0
  842. package/dist/types/reachability/request.d.ts +37 -0
  843. package/dist/types/reactions/constants.d.ts +3 -0
  844. package/dist/types/reactions/reactions.d.ts +4 -0
  845. package/dist/types/reactions/reactions.type.d.ts +52 -0
  846. package/dist/types/reconnection-manager/index.d.ts +126 -0
  847. package/dist/types/recording-controller/enums.d.ts +7 -0
  848. package/dist/types/recording-controller/index.d.ts +193 -0
  849. package/dist/types/recording-controller/util.d.ts +13 -0
  850. package/dist/types/roap/index.d.ts +77 -0
  851. package/dist/types/roap/request.d.ts +38 -0
  852. package/dist/types/roap/turnDiscovery.d.ts +74 -0
  853. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  854. package/dist/types/statsAnalyzer/index.d.ts +195 -0
  855. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  856. package/dist/types/transcription/index.d.ts +64 -0
  857. package/dist/types/tsdoc-metadata.json +11 -0
  858. package/internal-README.md +7 -6
  859. package/package.json +28 -20
  860. package/src/breakouts/README.md +219 -0
  861. package/src/breakouts/breakout.ts +153 -0
  862. package/src/breakouts/collection.ts +19 -0
  863. package/src/breakouts/edit-lock-error.ts +25 -0
  864. package/src/breakouts/index.ts +745 -0
  865. package/src/breakouts/request.ts +55 -0
  866. package/src/breakouts/utils.ts +44 -0
  867. package/src/common/browser-detection.ts +9 -6
  868. package/src/common/collection.ts +3 -1
  869. package/src/common/errors/captcha-error.ts +6 -6
  870. package/src/common/errors/intent-to-join.ts +6 -6
  871. package/src/common/errors/join-meeting.ts +12 -8
  872. package/src/common/errors/media.ts +6 -6
  873. package/src/common/errors/parameter.ts +9 -6
  874. package/src/common/errors/password-error.ts +6 -6
  875. package/src/common/errors/permission.ts +5 -5
  876. package/src/common/errors/reconnection.ts +6 -6
  877. package/src/common/errors/stats.ts +6 -6
  878. package/src/common/errors/webex-errors.ts +7 -5
  879. package/src/common/errors/webex-meetings-error.ts +1 -1
  880. package/src/common/events/events-scope.ts +5 -1
  881. package/src/common/events/events.ts +5 -1
  882. package/src/common/events/trigger-proxy.ts +8 -3
  883. package/src/common/events/util.ts +1 -2
  884. package/src/common/logs/logger-proxy.ts +21 -10
  885. package/src/common/logs/request.ts +11 -8
  886. package/src/config.ts +16 -12
  887. package/src/constants.ts +92 -6
  888. package/src/controls-options-manager/constants.ts +5 -0
  889. package/src/controls-options-manager/enums.ts +7 -0
  890. package/src/controls-options-manager/index.ts +240 -0
  891. package/src/controls-options-manager/util.ts +30 -0
  892. package/src/index.ts +33 -0
  893. package/src/locus-info/controlsUtils.ts +63 -24
  894. package/src/locus-info/fullState.ts +15 -11
  895. package/src/locus-info/hostUtils.ts +4 -3
  896. package/src/locus-info/index.ts +148 -43
  897. package/src/locus-info/infoUtils.ts +16 -4
  898. package/src/locus-info/mediaSharesUtils.ts +4 -4
  899. package/src/locus-info/parser.ts +46 -68
  900. package/src/locus-info/selfUtils.ts +174 -56
  901. package/src/media/index.ts +131 -179
  902. package/src/media/properties.ts +43 -36
  903. package/src/media/util.ts +1 -1
  904. package/src/mediaQualityMetrics/config.ts +380 -378
  905. package/src/meeting/in-meeting-actions.ts +67 -3
  906. package/src/meeting/index.ts +2395 -1523
  907. package/src/meeting/muteState.ts +271 -68
  908. package/src/meeting/request.ts +228 -132
  909. package/src/meeting/request.type.ts +13 -0
  910. package/src/meeting/state.ts +45 -30
  911. package/src/meeting/util.ts +127 -111
  912. package/src/meeting-info/collection.ts +2 -1
  913. package/src/meeting-info/index.ts +32 -30
  914. package/src/meeting-info/meeting-info-v2.ts +108 -108
  915. package/src/meeting-info/request.ts +9 -3
  916. package/src/meeting-info/util.ts +54 -46
  917. package/src/meeting-info/utilv2.ts +59 -53
  918. package/src/meetings/collection.ts +21 -1
  919. package/src/meetings/index.ts +673 -466
  920. package/src/meetings/request.ts +29 -25
  921. package/src/meetings/util.ts +94 -30
  922. package/src/member/index.ts +86 -49
  923. package/src/member/types.ts +24 -0
  924. package/src/member/util.ts +92 -13
  925. package/src/members/collection.ts +8 -1
  926. package/src/members/index.ts +246 -129
  927. package/src/members/request.ts +67 -14
  928. package/src/members/types.ts +28 -0
  929. package/src/members/util.ts +103 -50
  930. package/src/metrics/config.ts +255 -90
  931. package/src/metrics/constants.ts +0 -6
  932. package/src/metrics/index.ts +90 -93
  933. package/src/multistream/mediaRequestManager.ts +144 -40
  934. package/src/multistream/receiveSlot.ts +69 -26
  935. package/src/multistream/receiveSlotManager.ts +50 -38
  936. package/src/multistream/remoteMedia.ts +30 -4
  937. package/src/multistream/remoteMediaGroup.ts +4 -3
  938. package/src/multistream/remoteMediaManager.ts +230 -66
  939. package/src/networkQualityMonitor/index.ts +24 -27
  940. package/src/personal-meeting-room/index.ts +12 -16
  941. package/src/personal-meeting-room/request.ts +10 -3
  942. package/src/personal-meeting-room/util.ts +3 -3
  943. package/src/reachability/index.ts +131 -79
  944. package/src/reachability/request.ts +43 -34
  945. package/src/reactions/constants.ts +4 -0
  946. package/src/reactions/reactions.ts +104 -0
  947. package/src/reactions/reactions.type.ts +62 -0
  948. package/src/reconnection-manager/index.ts +190 -111
  949. package/src/recording-controller/enums.ts +8 -0
  950. package/src/recording-controller/index.ts +315 -0
  951. package/src/recording-controller/util.ts +58 -0
  952. package/src/roap/index.ts +50 -42
  953. package/src/roap/request.ts +86 -53
  954. package/src/roap/turnDiscovery.ts +69 -38
  955. package/src/statsAnalyzer/global.ts +8 -104
  956. package/src/statsAnalyzer/index.ts +593 -376
  957. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  958. package/src/transcription/index.ts +34 -32
  959. package/test/integration/spec/converged-space-meetings.js +176 -0
  960. package/test/integration/spec/journey.js +665 -464
  961. package/test/integration/spec/space-meeting.js +319 -204
  962. package/test/integration/spec/transcription.js +7 -8
  963. package/test/unit/spec/breakouts/breakout.ts +178 -0
  964. package/test/unit/spec/breakouts/collection.ts +15 -0
  965. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  966. package/test/unit/spec/breakouts/index.ts +1252 -0
  967. package/test/unit/spec/breakouts/request.ts +104 -0
  968. package/test/unit/spec/breakouts/utils.js +54 -0
  969. package/test/unit/spec/common/browser-detection.js +9 -28
  970. package/test/unit/spec/controls-options-manager/index.js +204 -0
  971. package/test/unit/spec/controls-options-manager/util.js +86 -0
  972. package/test/unit/spec/fixture/locus.js +92 -90
  973. package/test/unit/spec/locus-info/controlsUtils.js +133 -34
  974. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  975. package/test/unit/spec/locus-info/index.js +303 -2
  976. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  977. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  978. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  979. package/test/unit/spec/locus-info/parser.js +3 -9
  980. package/test/unit/spec/locus-info/selfConstant.js +101 -103
  981. package/test/unit/spec/locus-info/selfUtils.js +165 -12
  982. package/test/unit/spec/media/index.ts +72 -8
  983. package/test/unit/spec/media/properties.ts +9 -9
  984. package/test/unit/spec/meeting/in-meeting-actions.ts +29 -2
  985. package/test/unit/spec/meeting/index.js +2479 -794
  986. package/test/unit/spec/meeting/muteState.js +164 -70
  987. package/test/unit/spec/meeting/request.js +141 -43
  988. package/test/unit/spec/meeting/utils.js +135 -164
  989. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  990. package/test/unit/spec/meeting-info/request.js +7 -9
  991. package/test/unit/spec/meeting-info/util.js +11 -12
  992. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  993. package/test/unit/spec/meetings/collection.js +15 -1
  994. package/test/unit/spec/meetings/index.js +622 -263
  995. package/test/unit/spec/meetings/utils.js +65 -14
  996. package/test/unit/spec/member/index.js +24 -1
  997. package/test/unit/spec/member/util.js +359 -32
  998. package/test/unit/spec/members/index.js +294 -54
  999. package/test/unit/spec/members/request.js +50 -20
  1000. package/test/unit/spec/members/utils.js +147 -4
  1001. package/test/unit/spec/metrics/index.js +16 -21
  1002. package/test/unit/spec/multistream/mediaRequestManager.ts +369 -68
  1003. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  1004. package/test/unit/spec/multistream/receiveSlotManager.ts +60 -38
  1005. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  1006. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  1007. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  1008. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  1009. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  1010. package/test/unit/spec/reachability/index.ts +176 -27
  1011. package/test/unit/spec/reachability/request.js +66 -0
  1012. package/test/unit/spec/reconnection-manager/index.js +58 -31
  1013. package/test/unit/spec/recording-controller/index.js +231 -0
  1014. package/test/unit/spec/recording-controller/util.js +102 -0
  1015. package/test/unit/spec/roap/index.ts +12 -8
  1016. package/test/unit/spec/roap/request.ts +217 -0
  1017. package/test/unit/spec/roap/turnDiscovery.ts +72 -49
  1018. package/test/unit/spec/stats-analyzer/index.js +108 -57
  1019. package/test/utils/cmr.js +44 -42
  1020. package/test/utils/constants.js +9 -0
  1021. package/test/utils/testUtils.js +98 -77
  1022. package/test/utils/webex-config.js +22 -18
  1023. package/test/utils/webex-test-users.js +57 -50
  1024. package/tsconfig.json +6 -0
  1025. package/dist/media/internal-media-core-wrapper.js +0 -22
  1026. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  1027. package/dist/multistream/multistreamMedia.js +0 -116
  1028. package/dist/multistream/multistreamMedia.js.map +0 -1
  1029. package/src/index.js +0 -15
  1030. package/src/media/internal-media-core-wrapper.ts +0 -9
  1031. package/src/meeting/effectsState.ts +0 -211
  1032. package/src/multistream/multistreamMedia.ts +0 -92
  1033. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -1,9 +1,24 @@
1
+ /* eslint-disable prefer-destructuring */
2
+
1
3
  import {cloneDeep} from 'lodash';
2
- import {MediaConnection as MC} from '@webex/internal-media-core';
4
+ import {ConnectionState} from '@webex/internal-media-core';
3
5
 
4
6
  import EventsScope from '../common/events/events-scope';
5
- import {DEFAULT_GET_STATS_FILTER, STATS, MQA_INTEVAL, NETWORK_TYPE, MEDIA_DEVICES, _UNKNOWN_} from '../constants';
6
- import mqaData from '../mediaQualityMetrics/config';
7
+ import {
8
+ DEFAULT_GET_STATS_FILTER,
9
+ STATS,
10
+ MQA_INTEVAL,
11
+ NETWORK_TYPE,
12
+ MEDIA_DEVICES,
13
+ _UNKNOWN_,
14
+ } from '../constants';
15
+ import {
16
+ emptyAudioReceive,
17
+ emptyAudioTransmit,
18
+ emptyMqaInterval,
19
+ emptyVideoReceive,
20
+ emptyVideoTransmit,
21
+ } from '../mediaQualityMetrics/config';
7
22
  import LoggerProxy from '../common/logs/logger-proxy';
8
23
 
9
24
  import defaultStats from './global';
@@ -11,7 +26,7 @@ import {
11
26
  getAudioSenderMqa,
12
27
  getAudioReceiverMqa,
13
28
  getVideoSenderMqa,
14
- getVideoReceiverMqa
29
+ getVideoReceiverMqa,
15
30
  } from './mqaUtil';
16
31
 
17
32
  export const EVENTS = {
@@ -22,6 +37,22 @@ export const EVENTS = {
22
37
  REMOTE_MEDIA_STOPPED: 'REMOTE_MEDIA_STOPPED',
23
38
  };
24
39
 
40
+ const emptySender = {
41
+ trackLabel: '',
42
+ maxPacketLossRatio: 0,
43
+ availableBandwidth: 0,
44
+ bytesSent: 0,
45
+ meanRemoteJitter: [],
46
+ meanRoundTripTime: [],
47
+ };
48
+
49
+ const emptyReceiver = {
50
+ availableBandwidth: 0,
51
+ bytesReceived: 0,
52
+ meanRtpJitter: [],
53
+ meanRoundTripTime: [],
54
+ };
55
+
25
56
  /**
26
57
  * Stats Analyzer class that will emit events based on detected quality
27
58
  *
@@ -35,7 +66,6 @@ export class StatsAnalyzer extends EventsScope {
35
66
  lastEmittedStartStopEvent: any;
36
67
  lastMqaDataSent: any;
37
68
  lastStatsResults: any;
38
- localMQEStats: any;
39
69
  meetingMediaStatus: any;
40
70
  mqaInterval: NodeJS.Timeout;
41
71
  mqaSentCount: any;
@@ -53,7 +83,11 @@ export class StatsAnalyzer extends EventsScope {
53
83
  * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)
54
84
  * @param {Object} statsResults Default properties for stats
55
85
  */
56
- constructor(config: any, networkQualityMonitor: object = {}, statsResults: object = defaultStats) {
86
+ constructor(
87
+ config: any,
88
+ networkQualityMonitor: object = {},
89
+ statsResults: object = defaultStats
90
+ ) {
57
91
  super();
58
92
  this.statsStarted = false;
59
93
  this.statsResults = statsResults;
@@ -62,120 +96,28 @@ export class StatsAnalyzer extends EventsScope {
62
96
  this.networkQualityMonitor = networkQualityMonitor;
63
97
  this.correlationId = config.correlationId;
64
98
  this.mqaSentCount = -1;
65
- this.lastMqaDataSent = {
66
- resolutions: {video: {send: {}, recv: {}}, audio: {send: {}, recv: {}}, share: {send: {}, recv: {}}},
67
- video: {send: {}, recv: {}},
68
- audio: {send: {}, recv: {}},
69
- share: {send: {}, recv: {}}
70
- };
71
- this.localMQEStats = {
72
- audio: {
73
- RX: {
74
- packetsLost: [],
75
- jitter: [],
76
- latency: [],
77
- bitRate: []
78
- },
79
- TX: {
80
- packetsLost: [],
81
- jitter: [],
82
- latency: [],
83
- bitRate: []
84
- }
85
- },
86
- video: {
87
- RX: {
88
- packetsLost: [],
89
- jitter: [],
90
- latency: [],
91
- bitRate: [],
92
- frameRate: [],
93
- resolutionWidth: [],
94
- resolutionHeight: [],
95
- requestedKeyFrame: [],
96
- receivedKeyFrame: []
97
- },
98
- TX: {
99
- packetsLost: [],
100
- jitter: [],
101
- latency: [],
102
- bitRate: [],
103
- frameRate: [],
104
- resolutionWidth: [],
105
- resolutionHeight: [],
106
- requestedKeyFrame: [],
107
- receivedKeyFrame: []
108
- }
109
- }
110
- };
111
- this.lastEmittedStartStopEvent = {
112
- audio: {
113
- local: undefined,
114
- remote: undefined,
115
- },
116
- video: {
117
- local: undefined,
118
- remote: undefined,
119
- },
120
- share: {
121
- local: undefined,
122
- remote: undefined,
123
- },
124
- };
99
+ this.lastMqaDataSent = {};
100
+ this.lastEmittedStartStopEvent = {};
125
101
  }
126
102
 
127
- populateResults(lastMqa) {
128
- // Audio
129
-
130
- this.localMQEStats.audio.RX.packetsLost.push(lastMqa.audioReceive[0].common.mediaHopByHopLost);
131
- this.localMQEStats.audio.RX.jitter.push(lastMqa.audioReceive[0].streams[0].common.rtpJitter);
132
- this.localMQEStats.audio.RX.latency.push(lastMqa.audioReceive[0].common.roundTripTime);
133
- this.localMQEStats.audio.RX.bitRate.push(lastMqa.audioReceive[0].streams[0].common.receivedBitrate);
134
-
135
- this.localMQEStats.audio.TX.packetsLost.push(lastMqa.audioTransmit[0].common.remoteLossRate);
136
- this.localMQEStats.audio.TX.jitter.push(lastMqa.audioTransmit[0].common.remoteJitter);
137
- this.localMQEStats.audio.TX.latency.push(lastMqa.audioTransmit[0].common.roundTripTime);
138
- this.localMQEStats.audio.TX.bitRate.push(lastMqa.audioTransmit[0].streams[0].common.transmittedBitrate);
139
-
140
- // Video
141
-
142
- this.localMQEStats.video.RX.packetsLost.push(lastMqa.videoReceive[0].common.mediaHopByHopLost);
143
- this.localMQEStats.video.RX.jitter.push(lastMqa.videoReceive[0].streams[0].common.rtpJitter);
144
- this.localMQEStats.video.RX.latency.push(lastMqa.videoReceive[0].streams[0].common.roundTripTime);
145
- this.localMQEStats.video.RX.bitRate.push(lastMqa.videoReceive[0].streams[0].common.receivedBitrate);
146
- this.localMQEStats.video.RX.frameRate.push(lastMqa.videoReceive[0].streams[0].common.receivedFrameRate);
147
- this.localMQEStats.video.RX.resolutionWidth.push(lastMqa.videoReceive[0].streams[0].receivedWidth);
148
- this.localMQEStats.video.RX.resolutionHeight.push(lastMqa.videoReceive[0].streams[0].receivedHeight);
149
- this.localMQEStats.video.RX.requestedKeyFrame.push();
150
- this.localMQEStats.video.RX.receivedKeyFrame.push();
151
-
152
- this.localMQEStats.video.TX.packetsLost.push(lastMqa.videoTransmit[0].common.remoteLossRate);
153
- this.localMQEStats.video.TX.jitter.push(lastMqa.videoTransmit[0].common.remoteJitter);
154
- this.localMQEStats.video.TX.latency.push(lastMqa.videoTransmit[0].common.roundTripTime);
155
- this.localMQEStats.video.TX.bitRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedBitrate);
156
- this.localMQEStats.video.TX.frameRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedFrameRate);
157
- this.localMQEStats.video.TX.resolutionWidth.push(lastMqa.videoTransmit[0].streams[0].transmittedWidth);
158
- this.localMQEStats.video.TX.resolutionHeight.push(lastMqa.videoTransmit[0].streams[0].transmittedHeight);
159
- this.localMQEStats.video.TX.requestedKeyFrame.push(lastMqa.videoTransmit[0].streams[0].requestedKeyFrames);
160
- this.localMQEStats.video.TX.receivedKeyFrame.push();
161
- }
162
-
163
-
103
+ /**
104
+ * Resets cumulative stats arrays.
105
+ *
106
+ * @public
107
+ * @memberof StatsAnalyzer
108
+ * @returns {void}
109
+ */
164
110
  resetStatsResults() {
165
- this.statsResults.audio.send.meanRemoteJitter = [];
166
- this.statsResults.video.send.meanRemoteJitter = [];
167
- this.statsResults.share.send.meanRemoteJitter = [];
168
-
169
- this.statsResults.audio.recv.meanRtpJitter = [];
170
-
171
- // TODO: currently no values are present
172
- this.statsResults.video.recv.meanRtpJitter = [];
173
- this.statsResults.share.recv.meanRtpJitter = [];
111
+ Object.keys(this.statsResults).forEach((mediaType) => {
112
+ if (mediaType.includes('recv')) {
113
+ this.statsResults[mediaType].recv.meanRtpJitter = [];
114
+ }
174
115
 
175
- // Reset the roundTripTime
176
- this.statsResults.audio.send.meanRoundTripTime = [];
177
- this.statsResults.video.send.meanRoundTripTime = [];
178
- this.statsResults.share.send.meanRoundTripTime = [];
116
+ if (mediaType.includes('send')) {
117
+ this.statsResults[mediaType].send.meanRemoteJitter = [];
118
+ this.statsResults[mediaType].send.meanRoundTripTime = [];
119
+ }
120
+ });
179
121
  }
180
122
 
181
123
  /**
@@ -197,85 +139,90 @@ export class StatsAnalyzer extends EventsScope {
197
139
  * @memberof StatsAnalyzer
198
140
  * @returns {void}
199
141
  */
200
- public sendMqaData() {
201
- const audioReceiver = mqaData.intervals[0].audioReceive[0];
202
- const audioSender = mqaData.intervals[0].audioTransmit[0];
203
- const videoReceiver = mqaData.intervals[0].videoReceive[0];
204
- const videoSender = mqaData.intervals[0].videoTransmit[0];
205
- const shareSender = mqaData.intervals[0].videoTransmit[1];
206
- const shareReceiver = mqaData.intervals[0].videoReceive[1];
207
-
208
- getAudioSenderMqa({
209
- audioSender,
210
- statsResults: this.statsResults,
211
- lastMqaDataSent: this.lastMqaDataSent
212
- });
213
- getAudioReceiverMqa({
214
- audioReceiver,
215
- statsResults: this.statsResults,
216
- lastMqaDataSent: this.lastMqaDataSent
217
- });
218
-
219
- getVideoReceiverMqa({
220
- videoReceiver,
221
- statsResults: this.statsResults,
222
- lastMqaDataSent: this.lastMqaDataSent
223
- });
224
- getVideoSenderMqa({
225
- videoSender,
226
- statsResults: this.statsResults,
227
- lastMqaDataSent: this.lastMqaDataSent
228
- });
142
+ sendMqaData() {
143
+ const newMqa = cloneDeep(emptyMqaInterval);
229
144
 
230
- // Capture mqa for share scenario
145
+ Object.keys(this.statsResults).forEach((mediaType) => {
146
+ if (mediaType.includes('audio-send') || mediaType.includes('audio-share-send')) {
147
+ const audioSender = cloneDeep(emptyAudioTransmit);
231
148
 
232
- getVideoSenderMqa({
233
- videoSender: shareSender,
234
- statsResults: this.statsResults,
235
- lastMqaDataSent: this.lastMqaDataSent,
236
- isShareStream: true
237
- });
238
-
239
- getVideoReceiverMqa({
240
- videoReceiver: shareReceiver,
241
- statsResults: this.statsResults,
242
- lastMqaDataSent: this.lastMqaDataSent,
243
- isShareStream: true
149
+ getAudioSenderMqa({
150
+ audioSender,
151
+ statsResults: this.statsResults,
152
+ lastMqaDataSent: this.lastMqaDataSent,
153
+ mediaType,
154
+ });
155
+ newMqa.audioTransmit.push(audioSender);
156
+ } else if (mediaType.includes('audio-recv') || mediaType.includes('audio-share-recv')) {
157
+ const audioReceiver = cloneDeep(emptyAudioReceive);
158
+
159
+ getAudioReceiverMqa({
160
+ audioReceiver,
161
+ statsResults: this.statsResults,
162
+ lastMqaDataSent: this.lastMqaDataSent,
163
+ mediaType,
164
+ });
165
+ newMqa.audioReceive.push(audioReceiver);
166
+ } else if (mediaType.includes('video-send') || mediaType.includes('video-share-send')) {
167
+ const videoSender = cloneDeep(emptyVideoTransmit);
168
+
169
+ getVideoSenderMqa({
170
+ videoSender,
171
+ statsResults: this.statsResults,
172
+ lastMqaDataSent: this.lastMqaDataSent,
173
+ mediaType,
174
+ });
175
+ newMqa.videoTransmit.push(videoSender);
176
+ } else if (mediaType.includes('video-recv') || mediaType.includes('video-share-recv')) {
177
+ const videoReceiver = cloneDeep(emptyVideoReceive);
178
+
179
+ getVideoReceiverMqa({
180
+ videoReceiver,
181
+ statsResults: this.statsResults,
182
+ lastMqaDataSent: this.lastMqaDataSent,
183
+ mediaType,
184
+ });
185
+ newMqa.videoReceive.push(videoReceiver);
186
+ }
244
187
  });
245
188
 
246
- mqaData.intervals[0].intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress[0];
189
+ newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress[0];
247
190
 
248
191
  // Adding peripheral information
249
- mqaData.intervals[0].intervalMetadata.peripherals = [];
250
- mqaData.intervals[0].intervalMetadata.peripherals.push({information: _UNKNOWN_, name: MEDIA_DEVICES.SPEAKER});
251
- mqaData.intervals[0].intervalMetadata.peripherals.push({information: this.statsResults[STATS.AUDIO_CORRELATE][STATS.SEND_DIRECTION].trackLabel || _UNKNOWN_, name: MEDIA_DEVICES.MICROPHONE});
252
- mqaData.intervals[0].intervalMetadata.peripherals.push({information: this.statsResults[STATS.VIDEO_CORRELATE][STATS.SEND_DIRECTION].trackLabel || _UNKNOWN_, name: MEDIA_DEVICES.CAMERA});
192
+ newMqa.intervalMetadata.peripherals = [];
253
193
 
194
+ newMqa.intervalMetadata.peripherals.push({information: _UNKNOWN_, name: MEDIA_DEVICES.SPEAKER});
195
+ if (this.statsResults['audio-send']) {
196
+ newMqa.intervalMetadata.peripherals.push({
197
+ information: this.statsResults['audio-send']?.trackLabel,
198
+ name: MEDIA_DEVICES.MICROPHONE,
199
+ });
200
+ }
201
+ if (this.statsResults['video-send']) {
202
+ newMqa.intervalMetadata.peripherals.push({
203
+ information: this.statsResults['video-send']?.trackLabel,
204
+ name: MEDIA_DEVICES.CAMERA,
205
+ });
206
+ }
254
207
 
255
- // @ts-ignore
256
- mqaData.networkType = this.statsResults.connectionType.local.networkType;
208
+ newMqa.networkType = this.statsResults.connectionType.local.networkType;
257
209
 
258
210
  this.mqaSentCount += 1;
259
211
 
260
- mqaData.intervals[0].intervalNumber = this.mqaSentCount;
261
-
262
- // DO Deep copy, for some reason it takes the reference all the time rather then old value set
263
- this.lastMqaDataSent = cloneDeep(this.statsResults);
264
-
265
- this.populateResults(mqaData.intervals[0]);
212
+ newMqa.intervalNumber = this.mqaSentCount;
266
213
 
267
214
  this.resetStatsResults();
268
215
 
269
216
  this.emit(
270
217
  {
271
218
  file: 'statsAnalyzer',
272
- function: 'sendMqaData'
219
+ function: 'sendMqaData',
273
220
  },
274
221
  EVENTS.MEDIA_QUALITY,
275
222
  {
276
- data: mqaData.intervals[0],
223
+ data: newMqa,
277
224
  // @ts-ignore
278
- networkType: mqaData.networkType
225
+ networkType: newMqa.networkType,
279
226
  }
280
227
  );
281
228
  }
@@ -285,7 +232,7 @@ export class StatsAnalyzer extends EventsScope {
285
232
  *
286
233
  * @private
287
234
  * @memberof StatsAnalyzer
288
- * @param {MC.RoapMediaConnection} mediaConnection
235
+ * @param {RoapMediaConnection} mediaConnection
289
236
  * @returns {void}
290
237
  */
291
238
  updateMediaConnection(mediaConnection: any) {
@@ -297,7 +244,7 @@ export class StatsAnalyzer extends EventsScope {
297
244
  *
298
245
  * @public
299
246
  * @memberof StatsAnalyzer
300
- * @param {MC.RoapMediaConnection} mediaConnection
247
+ * @param {RoapMediaConnection} mediaConnection
301
248
  * @returns {Promise}
302
249
  */
303
250
  public startAnalyzer(mediaConnection: any) {
@@ -305,17 +252,16 @@ export class StatsAnalyzer extends EventsScope {
305
252
  this.statsStarted = true;
306
253
  this.mediaConnection = mediaConnection;
307
254
 
308
- return this.getStatsAndParse()
309
- .then(() => {
310
- this.statsInterval = setInterval(() => {
311
- this.getStatsAndParse();
312
- }, this.config.analyzerInterval);
313
- // Trigger initial fetch
255
+ return this.getStatsAndParse().then(() => {
256
+ this.statsInterval = setInterval(() => {
257
+ this.getStatsAndParse();
258
+ }, this.config.analyzerInterval);
259
+ // Trigger initial fetch
260
+ this.sendMqaData();
261
+ this.mqaInterval = setInterval(() => {
314
262
  this.sendMqaData();
315
- this.mqaInterval = setInterval(() => {
316
- this.sendMqaData();
317
- }, MQA_INTEVAL);
318
- });
263
+ }, MQA_INTEVAL);
264
+ });
319
265
  }
320
266
 
321
267
  return Promise.resolve();
@@ -367,6 +313,37 @@ export class StatsAnalyzer extends EventsScope {
367
313
  return;
368
314
  }
369
315
 
316
+ // Generate empty stats results
317
+ if (!this.statsResults[type]) {
318
+ this.statsResults[type] = {};
319
+ }
320
+
321
+ if (isSender && !this.statsResults[type].send) {
322
+ this.statsResults[type].send = cloneDeep(emptySender);
323
+ } else if (!isSender && !this.statsResults[type].recv) {
324
+ this.statsResults[type].recv = cloneDeep(emptyReceiver);
325
+ }
326
+
327
+ if (!this.statsResults.resolutions[type]) {
328
+ this.statsResults.resolutions[type] = {};
329
+ }
330
+
331
+ if (isSender && !this.statsResults.resolutions[type].send) {
332
+ this.statsResults.resolutions[type].send = cloneDeep(emptySender);
333
+ } else if (!isSender && !this.statsResults.resolutions[type].recv) {
334
+ this.statsResults.resolutions[type].recv = cloneDeep(emptyReceiver);
335
+ }
336
+
337
+ if (!this.statsResults.internal[type]) {
338
+ this.statsResults.internal[type] = {};
339
+ }
340
+
341
+ if (isSender && !this.statsResults.internal[type].send) {
342
+ this.statsResults.internal[type].send = cloneDeep(emptySender);
343
+ } else if (!isSender && !this.statsResults.internal[type].recv) {
344
+ this.statsResults.internal[type].recv = cloneDeep(emptyReceiver);
345
+ }
346
+
370
347
  switch (getStatsResult.type) {
371
348
  case 'outbound-rtp':
372
349
  this.processOutboundRTPResult(getStatsResult, type);
@@ -401,19 +378,25 @@ export class StatsAnalyzer extends EventsScope {
401
378
  /**
402
379
  * Filters the get stats results for types
403
380
  * @private
404
- * @param {Array} getStatsResults
381
+ * @param {Array} statsItem
405
382
  * @param {String} type
406
383
  * @param {boolean} isSender
407
384
  * @returns {void}
408
385
  */
409
- private filterAndParseGetStatsResults(getStatsResults: Array<any>, type: string, isSender: boolean) {
386
+ filterAndParseGetStatsResults(statsItem: any, type: string, isSender: boolean) {
410
387
  const {types} = DEFAULT_GET_STATS_FILTER;
411
388
 
412
- getStatsResults.forEach((result) => {
389
+ statsItem.report.forEach((result) => {
413
390
  if (types.includes(result.type)) {
414
391
  this.parseGetStatsResult(result, type, isSender);
415
392
  }
416
393
  });
394
+
395
+ if (this.statsResults[type]) {
396
+ this.statsResults[type].direction = statsItem.currentDirection;
397
+ this.statsResults[type].trackLabel = statsItem.localTrackLabel;
398
+ this.statsResults[type].csi = statsItem.csi;
399
+ }
417
400
  }
418
401
 
419
402
  /**
@@ -427,7 +410,7 @@ export class StatsAnalyzer extends EventsScope {
427
410
  return;
428
411
  }
429
412
 
430
- if (type === STATS.AUDIO_CORRELATE) {
413
+ if (type.includes('audio-send')) {
431
414
  this.statsResults[type].send.audioLevel = result.audioLevel;
432
415
  this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;
433
416
  }
@@ -447,7 +430,12 @@ export class StatsAnalyzer extends EventsScope {
447
430
  * @memberof StatsAnalyzer
448
431
  * @returns {void}
449
432
  */
450
- emitStartStopEvents = (mediaType: string, previousValue: number, currentValue: number, isLocal: boolean) => {
433
+ emitStartStopEvents = (
434
+ mediaType: string,
435
+ previousValue: number,
436
+ currentValue: number,
437
+ isLocal: boolean
438
+ ) => {
451
439
  if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {
452
440
  throw new Error(`Unsupported mediaType: ${mediaType}`);
453
441
  }
@@ -457,32 +445,36 @@ export class StatsAnalyzer extends EventsScope {
457
445
  // eslint-disable-next-line no-param-reassign
458
446
  if (currentValue === undefined) currentValue = 0;
459
447
 
460
- const lastEmittedEvent = isLocal ? this.lastEmittedStartStopEvent[mediaType].local : this.lastEmittedStartStopEvent[mediaType].remote;
448
+ if (!this.lastEmittedStartStopEvent[mediaType]) {
449
+ this.lastEmittedStartStopEvent[mediaType] = {};
450
+ }
451
+
452
+ const lastEmittedEvent = isLocal
453
+ ? this.lastEmittedStartStopEvent[mediaType].local
454
+ : this.lastEmittedStartStopEvent[mediaType].remote;
461
455
 
462
456
  let newEvent;
463
457
 
464
- if ((currentValue - previousValue) > 0) {
458
+ if (currentValue - previousValue > 0) {
465
459
  newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STARTED : EVENTS.REMOTE_MEDIA_STARTED;
466
- }
467
- else if ((currentValue === previousValue) && currentValue > 0) {
460
+ } else if (currentValue === previousValue && currentValue > 0) {
468
461
  newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STOPPED : EVENTS.REMOTE_MEDIA_STOPPED;
469
462
  }
470
463
 
471
464
  if (newEvent && lastEmittedEvent !== newEvent) {
472
465
  if (isLocal) {
473
466
  this.lastEmittedStartStopEvent[mediaType].local = newEvent;
474
- }
475
- else {
467
+ } else {
476
468
  this.lastEmittedStartStopEvent[mediaType].remote = newEvent;
477
469
  }
478
470
  this.emit(
479
471
  {
480
472
  file: 'statsAnalyzer/index',
481
- function: 'compareLastStatsResult'
473
+ function: 'compareLastStatsResult',
482
474
  },
483
475
  newEvent,
484
476
  {
485
- type: mediaType
477
+ type: mediaType,
486
478
  }
487
479
  );
488
480
  }
@@ -497,145 +489,271 @@ export class StatsAnalyzer extends EventsScope {
497
489
  */
498
490
  private compareLastStatsResult() {
499
491
  if (this.lastStatsResults !== null && this.meetingMediaStatus) {
500
- // compare audio stats sent
501
- let mediaType = STATS.AUDIO_CORRELATE;
502
- let currentStats = null;
503
- let previousStats = null;
504
-
505
- if (this.meetingMediaStatus.expected.sendAudio) {
506
- currentStats = this.statsResults[mediaType].send;
507
- previousStats = this.lastStatsResults[mediaType].send;
508
-
509
- if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
510
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`);
511
- }
512
- else {
513
- if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
514
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Energy present`);
492
+ const getCurrentStatsTotals = (keyPrefix: string, value: string): number =>
493
+ Object.keys(this.statsResults)
494
+ .filter((key) => key.startsWith(keyPrefix))
495
+ .reduce((prev, cur) => prev + (this.statsResults[cur]?.recv[value] || 0), 0);
496
+
497
+ const getPreviousStatsTotals = (keyPrefix: string, value: string): number =>
498
+ Object.keys(this.statsResults)
499
+ .filter((key) => key.startsWith(keyPrefix))
500
+ .reduce((prev, cur) => prev + (this.lastStatsResults[cur]?.recv[value] || 0), 0);
501
+
502
+ const getCurrentResolutionsStatsTotals = (keyPrefix: string, value: string): number =>
503
+ Object.keys(this.statsResults)
504
+ .filter((key) => key.startsWith(keyPrefix))
505
+ .reduce((prev, cur) => prev + (this.statsResults.resolutions[cur]?.recv[value] || 0), 0);
506
+
507
+ const getPreviousResolutionsStatsTotals = (keyPrefix: string, value: string): number =>
508
+ Object.keys(this.statsResults)
509
+ .filter((key) => key.startsWith(keyPrefix))
510
+ .reduce(
511
+ (prev, cur) => prev + (this.lastStatsResults.resolutions[cur]?.recv[value] || 0),
512
+ 0
513
+ );
514
+
515
+ if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {
516
+ // compare audio stats sent
517
+ // NOTE: relies on there being only one sender.
518
+ const currentStats = this.statsResults['audio-send'].send;
519
+ const previousStats = this.lastStatsResults['audio-send'].send;
520
+
521
+ if (
522
+ currentStats.totalPacketsSent === previousStats.totalPacketsSent ||
523
+ currentStats.totalPacketsSent === 0
524
+ ) {
525
+ LoggerProxy.logger.info(
526
+ `StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent`
527
+ );
528
+ } else {
529
+ if (
530
+ currentStats.totalAudioEnergy === previousStats.totalAudioEnergy ||
531
+ currentStats.totalAudioEnergy === 0
532
+ ) {
533
+ LoggerProxy.logger.info(
534
+ `StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present`
535
+ );
515
536
  }
516
537
 
517
538
  if (currentStats.audioLevel === 0) {
518
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} level is 0 for the user`);
539
+ LoggerProxy.logger.info(
540
+ `StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user`
541
+ );
519
542
  }
520
543
  }
521
544
 
522
- this.emitStartStopEvents(mediaType, previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
545
+ this.emitStartStopEvents(
546
+ 'audio',
547
+ previousStats.totalPacketsSent,
548
+ currentStats.totalPacketsSent,
549
+ true
550
+ );
523
551
  }
524
552
 
525
553
  if (this.meetingMediaStatus.expected.receiveAudio) {
526
- // compare audio stats received
527
- currentStats = this.statsResults[mediaType].recv;
528
- previousStats = this.lastStatsResults[mediaType].recv;
554
+ // compare audio stats received
555
+ const currentPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');
556
+ const previousPacketsReceived = getPreviousStatsTotals(
557
+ 'audio-recv',
558
+ 'totalPacketsReceived'
559
+ );
560
+ const currentSamplesReceived = getCurrentStatsTotals('audio-recv', 'totalSamplesReceived');
561
+ const previousSamplesReceived = getPreviousStatsTotals(
562
+ 'audio-recv',
563
+ 'totalSamplesReceived'
564
+ );
529
565
 
530
- if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsReceived === 0) {
531
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`);
532
- }
533
- else if (currentStats.totalSamplesReceived === previousStats.totalSamplesReceived ||
534
- currentStats.totalSamplesReceived === 0) {
535
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} samples received`);
566
+ if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
567
+ LoggerProxy.logger.info(
568
+ `StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received`
569
+ );
570
+ } else if (
571
+ currentSamplesReceived === previousSamplesReceived ||
572
+ currentSamplesReceived === 0
573
+ ) {
574
+ LoggerProxy.logger.info(
575
+ `StatsAnalyzer:index#compareLastStatsResult --> No audio samples received`
576
+ );
536
577
  }
537
578
 
538
- this.emitStartStopEvents(mediaType, previousStats.totalPacketsReceived, currentStats.totalPacketsReceived, false);
579
+ this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);
539
580
  }
540
581
 
541
- mediaType = STATS.VIDEO_CORRELATE;
542
- if (this.meetingMediaStatus.expected.sendVideo) {
543
- // compare video stats sent
544
- currentStats = this.statsResults[mediaType].send;
545
- previousStats = this.lastStatsResults[mediaType].send;
546
-
547
- if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
548
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`);
549
- }
550
- else {
551
- if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {
552
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Frames Encoded`);
582
+ if (this.meetingMediaStatus.expected.sendVideo && this.lastStatsResults['video-send']) {
583
+ // compare video stats sent
584
+ const currentStats = this.statsResults['video-send'].send;
585
+ const previousStats = this.lastStatsResults['video-send'].send;
586
+
587
+ if (
588
+ currentStats.totalPacketsSent === previousStats.totalPacketsSent ||
589
+ currentStats.totalPacketsSent === 0
590
+ ) {
591
+ LoggerProxy.logger.info(
592
+ `StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent`
593
+ );
594
+ } else {
595
+ if (
596
+ currentStats.framesEncoded === previousStats.framesEncoded ||
597
+ currentStats.framesEncoded === 0
598
+ ) {
599
+ LoggerProxy.logger.info(
600
+ `StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded`
601
+ );
553
602
  }
554
603
 
555
- if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {
556
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Frames sent`);
604
+ if (
605
+ this.statsResults.resolutions['video-send'].send.framesSent ===
606
+ this.lastStatsResults.resolutions['video-send'].send.framesSent ||
607
+ this.statsResults.resolutions['video-send'].send.framesSent === 0
608
+ ) {
609
+ LoggerProxy.logger.info(
610
+ `StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent`
611
+ );
557
612
  }
558
613
  }
559
614
 
560
- this.emitStartStopEvents(
561
- mediaType,
562
- previousStats.framesSent,
563
- currentStats.framesSent,
564
- true
565
- );
615
+ this.emitStartStopEvents('video', previousStats.framesSent, currentStats.framesSent, true);
566
616
  }
567
617
 
568
-
569
618
  if (this.meetingMediaStatus.expected.receiveVideo) {
570
- // compare video stats reveived
571
-
572
- currentStats = this.statsResults[mediaType].recv;
573
- previousStats = this.lastStatsResults[mediaType].recv;
619
+ // compare video stats received
620
+ const currentPacketsReceived = getCurrentStatsTotals('video-recv', 'totalPacketsReceived');
621
+ const previousPacketsReceived = getPreviousStatsTotals(
622
+ 'video-recv',
623
+ 'totalPacketsReceived'
624
+ );
625
+ const currentFramesReceived = getCurrentResolutionsStatsTotals(
626
+ 'video-recv',
627
+ 'framesReceived'
628
+ );
629
+ const previousFramesReceived = getPreviousResolutionsStatsTotals(
630
+ 'video-recv',
631
+ 'framesReceived'
632
+ );
633
+ const currentFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
634
+ const previousFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
635
+ const currentFramesDropped = getCurrentResolutionsStatsTotals(
636
+ 'video-recv',
637
+ 'framesDropped'
638
+ );
639
+ const previousFramesDropped = getPreviousResolutionsStatsTotals(
640
+ 'video-recv',
641
+ 'framesDropped'
642
+ );
574
643
 
575
- if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsReceived === 0) {
576
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`);
577
- }
578
- else {
579
- if (this.statsResults.resolutions[mediaType].recv.framesReceived === this.lastStatsResults.resolutions[mediaType].recv.framesReceived || this.statsResults.resolutions[mediaType].recv.framesReceived === 0) {
580
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames received`);
644
+ if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
645
+ LoggerProxy.logger.info(
646
+ `StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received`
647
+ );
648
+ } else {
649
+ if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
650
+ LoggerProxy.logger.info(
651
+ `StatsAnalyzer:index#compareLastStatsResult --> No video frames received`
652
+ );
581
653
  }
582
654
 
583
- if (this.statsResults[mediaType].recv.framesDecoded === this.lastStatsResults[mediaType].recv.framesDecoded || this.statsResults.resolutions[mediaType].send.framesDecoded === 0) {
584
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames decoded`);
655
+ if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
656
+ LoggerProxy.logger.info(
657
+ `StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded`
658
+ );
585
659
  }
586
660
 
587
- if (this.statsResults.resolutions[mediaType].recv.framesDropped - this.lastStatsResults.resolutions[mediaType].recv.framesDropped > 10) {
588
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} frames are getting dropped`);
661
+ if (currentFramesDropped - previousFramesDropped > 10) {
662
+ LoggerProxy.logger.info(
663
+ `StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped`
664
+ );
589
665
  }
590
666
  }
591
667
 
592
- this.emitStartStopEvents(
593
- mediaType,
594
- previousStats.framesDecoded,
595
- currentStats.framesDecoded,
596
- false
597
- );
668
+ this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);
598
669
  }
599
670
 
600
- mediaType = STATS.SHARE_CORRELATE;
601
- if (this.meetingMediaStatus.expected.sendShare) {
602
- // compare share stats sent
603
-
604
- currentStats = this.statsResults[mediaType].send;
605
- previousStats = this.lastStatsResults[mediaType].send;
606
-
607
- if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
608
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`);
609
- }
610
- else {
611
- if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {
612
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames getting encoded`);
671
+ if (this.meetingMediaStatus.expected.sendShare && this.lastStatsResults['video-share-send']) {
672
+ // compare share stats sent
673
+
674
+ const currentStats = this.statsResults['video-share-send'].send;
675
+ const previousStats = this.lastStatsResults['video-share-send'].send;
676
+
677
+ if (
678
+ currentStats.totalPacketsSent === previousStats.totalPacketsSent ||
679
+ currentStats.totalPacketsSent === 0
680
+ ) {
681
+ LoggerProxy.logger.info(
682
+ `StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent`
683
+ );
684
+ } else {
685
+ if (
686
+ currentStats.framesEncoded === previousStats.framesEncoded ||
687
+ currentStats.framesEncoded === 0
688
+ ) {
689
+ LoggerProxy.logger.info(
690
+ `StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded`
691
+ );
613
692
  }
614
693
 
615
- if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {
616
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames sent`);
694
+ if (
695
+ this.statsResults.resolutions['video-share-send'].send.framesSent ===
696
+ this.lastStatsResults.resolutions['video-share-send'].send.framesSent ||
697
+ this.statsResults.resolutions['video-share-send'].send.framesSent === 0
698
+ ) {
699
+ LoggerProxy.logger.info(
700
+ `StatsAnalyzer:index#compareLastStatsResult --> No share frames sent`
701
+ );
617
702
  }
618
703
  }
704
+ }
619
705
 
706
+ if (this.meetingMediaStatus.expected.sendShare) {
620
707
  // TODO:need to check receive share value
621
- // compare share stats reveived
622
- currentStats = this.statsResults[mediaType].recv;
623
- previousStats = this.lastStatsResults[mediaType].recv;
708
+ // compare share stats received
709
+ const currentPacketsReceived = getCurrentStatsTotals(
710
+ 'video-share-recv',
711
+ 'totalPacketsReceived'
712
+ );
713
+ const previousPacketsReceived = getPreviousStatsTotals(
714
+ 'video-share-recv',
715
+ 'totalPacketsReceived'
716
+ );
717
+ const currentFramesReceived = getCurrentResolutionsStatsTotals(
718
+ 'video-share-recv',
719
+ 'framesReceived'
720
+ );
721
+ const previousFramesReceived = getPreviousResolutionsStatsTotals(
722
+ 'video-share-recv',
723
+ 'framesReceived'
724
+ );
725
+ const currentFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
726
+ const previousFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
727
+ const currentFramesDropped = getCurrentResolutionsStatsTotals(
728
+ 'video-share-recv',
729
+ 'framesDropped'
730
+ );
731
+ const previousFramesDropped = getPreviousResolutionsStatsTotals(
732
+ 'video-share-recv',
733
+ 'framesDropped'
734
+ );
624
735
 
625
- if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsSent === 0) {
626
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`);
627
- }
628
- else {
629
- if (this.statsResults.resolutions[mediaType].recv.framesReceived === this.lastStatsResults.resolutions[mediaType].recv.framesReceived || this.statsResults.resolutions[mediaType].recv.framesReceived === 0) {
630
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames received`);
736
+ if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
737
+ LoggerProxy.logger.info(
738
+ `StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received`
739
+ );
740
+ } else {
741
+ if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
742
+ LoggerProxy.logger.info(
743
+ `StatsAnalyzer:index#compareLastStatsResult --> No share frames received`
744
+ );
631
745
  }
632
746
 
633
- if (this.statsResults[mediaType].recv.framesDecoded === this.lastStatsResults[mediaType].recv.framesDecoded || this.statsResults.resolutions[mediaType].send.framesDecoded === 0) {
634
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames decoded`);
747
+ if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
748
+ LoggerProxy.logger.info(
749
+ `StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded`
750
+ );
635
751
  }
636
752
 
637
- if (this.statsResults.resolutions[mediaType].recv.framesDropped - this.lastStatsResults.resolutions[mediaType].recv.framesDropped > 10) {
638
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} frames are getting dropped`);
753
+ if (currentFramesDropped - previousFramesDropped > 10) {
754
+ LoggerProxy.logger.info(
755
+ `StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped`
756
+ );
639
757
  }
640
758
  }
641
759
 
@@ -658,8 +776,13 @@ export class StatsAnalyzer extends EventsScope {
658
776
  return Promise.resolve();
659
777
  }
660
778
 
661
- if (this.mediaConnection && this.mediaConnection.getConnectionState() === MC.ConnectionState.Failed) {
662
- LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state');
779
+ if (
780
+ this.mediaConnection &&
781
+ this.mediaConnection.getConnectionState() === ConnectionState.Failed
782
+ ) {
783
+ LoggerProxy.logger.trace(
784
+ 'StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state'
785
+ );
663
786
 
664
787
  return Promise.resolve();
665
788
  }
@@ -667,20 +790,43 @@ export class StatsAnalyzer extends EventsScope {
667
790
  LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');
668
791
 
669
792
  return this.mediaConnection.getTransceiverStats().then((transceiverStats) => {
670
- this.filterAndParseGetStatsResults(transceiverStats.video.sender, STATS.VIDEO_CORRELATE, true);
671
- this.filterAndParseGetStatsResults(transceiverStats.video.receiver, STATS.VIDEO_CORRELATE, false);
672
- this.filterAndParseGetStatsResults(transceiverStats.audio.sender, STATS.AUDIO_CORRELATE, true);
673
- this.filterAndParseGetStatsResults(transceiverStats.audio.receiver, STATS.AUDIO_CORRELATE, false);
674
- this.filterAndParseGetStatsResults(transceiverStats.screenShareVideo.sender, STATS.SHARE_CORRELATE, true);
675
- this.filterAndParseGetStatsResults(transceiverStats.screenShareVideo.receiver, STATS.SHARE_CORRELATE, false);
676
-
677
- // updates the current direction of media
678
- this.statsResults[STATS.AUDIO_CORRELATE].direction = transceiverStats.audio.currentDirection;
679
- this.statsResults[STATS.VIDEO_CORRELATE].direction = transceiverStats.video.currentDirection;
680
- this.statsResults[STATS.SHARE_CORRELATE].direction = transceiverStats.screenShareVideo.currentDirection;
793
+ transceiverStats.video.receivers.forEach((receiver, i) =>
794
+ this.filterAndParseGetStatsResults(receiver, `video-recv-${i}`, false)
795
+ );
796
+ transceiverStats.audio.receivers.forEach((receiver, i) =>
797
+ this.filterAndParseGetStatsResults(receiver, `audio-recv-${i}`, false)
798
+ );
799
+ transceiverStats.screenShareVideo.receivers.forEach((receiver, i) =>
800
+ this.filterAndParseGetStatsResults(receiver, `video-share-recv-${i}`, false)
801
+ );
802
+ transceiverStats.screenShareAudio.receivers.forEach((receiver, i) =>
803
+ this.filterAndParseGetStatsResults(receiver, `audio-share-recv-${i}`, false)
804
+ );
681
805
 
682
- this.statsResults[STATS.AUDIO_CORRELATE][STATS.SEND_DIRECTION].trackLabel = transceiverStats.audio.localTrackLabel;
683
- this.statsResults[STATS.VIDEO_CORRELATE][STATS.SEND_DIRECTION].trackLabel = transceiverStats.video.localTrackLabel;
806
+ transceiverStats.video.senders.forEach((sender, i) => {
807
+ if (i > 0) {
808
+ throw new Error('Stats Analyzer does not support multiple senders.');
809
+ }
810
+ this.filterAndParseGetStatsResults(sender, 'video-send', true);
811
+ });
812
+ transceiverStats.audio.senders.forEach((sender, i) => {
813
+ if (i > 0) {
814
+ throw new Error('Stats Analyzer does not support multiple senders.');
815
+ }
816
+ this.filterAndParseGetStatsResults(sender, 'audio-send', true);
817
+ });
818
+ transceiverStats.screenShareVideo.senders.forEach((sender, i) => {
819
+ if (i > 0) {
820
+ throw new Error('Stats Analyzer does not support multiple senders.');
821
+ }
822
+ this.filterAndParseGetStatsResults(sender, 'video-share-send', true);
823
+ });
824
+ transceiverStats.screenShareAudio.senders.forEach((sender, i) => {
825
+ if (i > 0) {
826
+ throw new Error('Stats Analyzer does not support multiple senders.');
827
+ }
828
+ this.filterAndParseGetStatsResults(sender, 'audio-share-send', true);
829
+ });
684
830
 
685
831
  this.compareLastStatsResult();
686
832
 
@@ -688,7 +834,9 @@ export class StatsAnalyzer extends EventsScope {
688
834
  // DO Deep copy, for some reason it takes the reference all the time rather then old value set
689
835
  this.lastStatsResults = JSON.parse(JSON.stringify(this.statsResults));
690
836
 
691
- LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');
837
+ LoggerProxy.logger.trace(
838
+ 'StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats'
839
+ );
692
840
  });
693
841
  }
694
842
 
@@ -696,16 +844,23 @@ export class StatsAnalyzer extends EventsScope {
696
844
  * Processes OutboundRTP stats result and stores
697
845
  * @private
698
846
  * @param {*} result
699
- * @param {*} type
847
+ * @param {*} mediaType
700
848
  * @returns {void}
701
849
  */
702
- private processOutboundRTPResult(result: any, type: any) {
703
- const mediaType = type || STATS.AUDIO_CORRELATE;
850
+ private processOutboundRTPResult(result: any, mediaType: any) {
704
851
  const sendrecvType = STATS.SEND_DIRECTION;
705
852
 
706
853
  if (result.bytesSent) {
707
854
  let kilobytes = 0;
708
855
 
856
+ if (result.frameWidth && result.frameHeight) {
857
+ this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
858
+ this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
859
+ this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
860
+ this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent =
861
+ result.hugeFramesSent;
862
+ }
863
+
709
864
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
710
865
  this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
711
866
  }
@@ -713,10 +868,12 @@ export class StatsAnalyzer extends EventsScope {
713
868
  this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
714
869
  }
715
870
  if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {
716
- this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
871
+ this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded =
872
+ result.keyFramesEncoded;
717
873
  }
718
874
 
719
- const bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
875
+ const bytes =
876
+ result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
720
877
 
721
878
  this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
722
879
 
@@ -725,15 +882,19 @@ export class StatsAnalyzer extends EventsScope {
725
882
  this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
726
883
  this.statsResults[mediaType].bytesSent = kilobytes;
727
884
 
728
- this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;
729
- this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded - this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;
885
+ this.statsResults[mediaType][sendrecvType].framesEncoded =
886
+ result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;
887
+ this.statsResults[mediaType][sendrecvType].keyFramesEncoded =
888
+ result.keyFramesEncoded -
889
+ this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;
730
890
  this.statsResults.internal[mediaType].outboundRtpId = result.id;
731
891
 
732
892
  if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {
733
893
  this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
734
894
  }
735
895
 
736
- this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;
896
+ this.statsResults[mediaType][sendrecvType].packetsSent =
897
+ result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;
737
898
  this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
738
899
 
739
900
  // Data saved to send MQA metrics
@@ -745,33 +906,44 @@ export class StatsAnalyzer extends EventsScope {
745
906
  this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;
746
907
  this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
747
908
  this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
748
- this.statsResults[mediaType][sendrecvType].encoderImplementation = result.encoderImplementation;
749
- this.statsResults[mediaType][sendrecvType].qualityLimitationReason = result.qualityLimitationReason;
750
- this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges = result.qualityLimitationResolutionChanges;
751
- this.statsResults[mediaType][sendrecvType].retransmittedPacketsSent = result.retransmittedPacketsSent;
909
+ this.statsResults[mediaType][sendrecvType].encoderImplementation =
910
+ result.encoderImplementation;
911
+ this.statsResults[mediaType][sendrecvType].qualityLimitationReason =
912
+ result.qualityLimitationReason;
913
+ this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges =
914
+ result.qualityLimitationResolutionChanges;
915
+ this.statsResults[mediaType][sendrecvType].retransmittedPacketsSent =
916
+ result.retransmittedPacketsSent;
752
917
  this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;
753
918
  this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;
754
- this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;
919
+ this.statsResults[mediaType][sendrecvType].retransmittedBytesSent =
920
+ result.retransmittedBytesSent;
755
921
  }
756
922
  }
757
923
 
758
-
759
924
  /**
760
925
  * Processes InboundRTP stats result and stores
761
926
  * @private
762
927
  * @param {*} result
763
- * @param {*} type
928
+ * @param {*} mediaType
764
929
  * @returns {void}
765
930
  */
766
- private processInboundRTPResult(result: any, type: any) {
767
- const mediaType = type || STATS.AUDIO_CORRELATE;
931
+ private processInboundRTPResult(result: any, mediaType: any) {
768
932
  const sendrecvType = STATS.RECEIVE_DIRECTION;
769
933
 
770
934
  if (result.bytesReceived) {
771
935
  let kilobytes = 0;
772
936
 
937
+ if (result.frameWidth && result.frameHeight) {
938
+ this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
939
+ this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
940
+ this.statsResults.resolutions[mediaType][sendrecvType].framesReceived =
941
+ result.framesReceived;
942
+ }
943
+
773
944
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
774
- this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
945
+ this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived =
946
+ result.bytesReceived;
775
947
  }
776
948
 
777
949
  if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {
@@ -783,14 +955,18 @@ export class StatsAnalyzer extends EventsScope {
783
955
  }
784
956
 
785
957
  if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {
786
- this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
958
+ this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived =
959
+ result.packetsReceived;
787
960
  }
788
961
 
789
962
  if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {
790
- this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
963
+ this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp =
964
+ result.lastPacketReceivedTimestamp;
791
965
  }
792
966
 
793
- const bytes = result.bytesReceived - (this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived);
967
+ const bytes =
968
+ result.bytesReceived -
969
+ this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived;
794
970
 
795
971
  this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
796
972
 
@@ -798,35 +974,52 @@ export class StatsAnalyzer extends EventsScope {
798
974
  this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
799
975
  this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);
800
976
 
801
- this.statsResults[mediaType][sendrecvType].pliCount = result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;
802
- this.statsResults[mediaType][sendrecvType].currentPacketsLost = result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;
977
+ this.statsResults[mediaType][sendrecvType].pliCount =
978
+ result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;
979
+ this.statsResults[mediaType][sendrecvType].currentPacketsLost =
980
+ result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;
803
981
  if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {
804
982
  this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;
805
983
  }
806
984
 
807
- this.statsResults[mediaType][sendrecvType].packetsReceived = result.packetsReceived - this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;
808
- this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
985
+ this.statsResults[mediaType][sendrecvType].packetsReceived =
986
+ result.packetsReceived -
987
+ this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;
988
+ this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived =
989
+ result.packetsReceived;
809
990
 
810
991
  if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {
811
- LoggerProxy.logger.info(`StatsAnalyzer:index#processInboundRTPResult --> No packets received for ${mediaType} `, this.statsResults[mediaType][sendrecvType].packetsReceived);
992
+ LoggerProxy.logger.info(
993
+ `StatsAnalyzer:index#processInboundRTPResult --> No packets received for ${mediaType} `,
994
+ this.statsResults[mediaType][sendrecvType].packetsReceived
995
+ );
812
996
  }
813
997
 
814
998
  // Check the over all packet Lost ratio
815
- this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = this.statsResults[mediaType][sendrecvType].currentPacketsLost > 0 ? this.statsResults[mediaType][sendrecvType].currentPacketsLost / (this.statsResults[mediaType][sendrecvType].packetsReceived + this.statsResults[mediaType][sendrecvType].currentPacketsLost) : 0;
999
+ this.statsResults[mediaType][sendrecvType].currentPacketLossRatio =
1000
+ this.statsResults[mediaType][sendrecvType].currentPacketsLost > 0
1001
+ ? this.statsResults[mediaType][sendrecvType].currentPacketsLost /
1002
+ (this.statsResults[mediaType][sendrecvType].packetsReceived +
1003
+ this.statsResults[mediaType][sendrecvType].currentPacketsLost)
1004
+ : 0;
816
1005
  if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
817
- LoggerProxy.logger.info('StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ', this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
1006
+ LoggerProxy.logger.info(
1007
+ 'StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ',
1008
+ this.statsResults[mediaType][sendrecvType].currentPacketLossRatio
1009
+ );
818
1010
  }
819
1011
 
820
1012
  // TODO: check the packet loss value is negative values here
821
1013
 
822
1014
  if (result.packetsLost) {
823
- this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;
824
- }
825
- else {
1015
+ this.statsResults[mediaType][sendrecvType].totalPacketsLost =
1016
+ result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;
1017
+ } else {
826
1018
  this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;
827
1019
  }
828
1020
 
829
- this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
1021
+ this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp =
1022
+ result.lastPacketReceivedTimestamp;
830
1023
 
831
1024
  // From Thin
832
1025
  this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
@@ -834,10 +1027,10 @@ export class StatsAnalyzer extends EventsScope {
834
1027
  this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
835
1028
  this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;
836
1029
 
837
- this.statsResults[mediaType][sendrecvType].decoderImplementation = result.decoderImplementation;
1030
+ this.statsResults[mediaType][sendrecvType].decoderImplementation =
1031
+ result.decoderImplementation;
838
1032
  this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
839
1033
 
840
-
841
1034
  this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;
842
1035
  this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;
843
1036
  this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;
@@ -849,8 +1042,10 @@ export class StatsAnalyzer extends EventsScope {
849
1042
 
850
1043
  this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;
851
1044
  this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;
852
- this.statsResults[mediaType][sendrecvType].totalSamplesReceived = result.totalSamplesReceived || 0;
853
- this.statsResults[mediaType][sendrecvType].totalSamplesDecoded = result.totalSamplesDecoded || 0;
1045
+ this.statsResults[mediaType][sendrecvType].totalSamplesReceived =
1046
+ result.totalSamplesReceived || 0;
1047
+ this.statsResults[mediaType][sendrecvType].totalSamplesDecoded =
1048
+ result.totalSamplesDecoded || 0;
854
1049
  this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;
855
1050
  }
856
1051
  }
@@ -894,7 +1089,10 @@ export class StatsAnalyzer extends EventsScope {
894
1089
  RemoteNetworkType[result.id] = [];
895
1090
  }
896
1091
 
897
- if (result.candidateType && RemoteCandidateType[result.id].indexOf(result.candidateType) === -1) {
1092
+ if (
1093
+ result.candidateType &&
1094
+ RemoteCandidateType[result.id].indexOf(result.candidateType) === -1
1095
+ ) {
898
1096
  RemoteCandidateType[result.id].push(result.candidateType);
899
1097
  }
900
1098
 
@@ -902,7 +1100,10 @@ export class StatsAnalyzer extends EventsScope {
902
1100
  RemoteTransport[result.id].push(result.protocol.toUpperCase());
903
1101
  }
904
1102
 
905
- if (result.ip && RemoteIpAddress[result.id].indexOf(`${result.ip}:${result.portNumber}`) === -1) {
1103
+ if (
1104
+ result.ip &&
1105
+ RemoteIpAddress[result.id].indexOf(`${result.ip}:${result.portNumber}`) === -1
1106
+ ) {
906
1107
  RemoteIpAddress[result.id].push(`${result.ip}`); // TODO: Add ports
907
1108
  }
908
1109
 
@@ -919,13 +1120,16 @@ export class StatsAnalyzer extends EventsScope {
919
1120
  transport: RemoteTransport[result.id],
920
1121
  timestamp: result.time,
921
1122
  id: result.id,
922
- type: result.type
1123
+ type: result.type,
923
1124
  };
924
1125
 
925
1126
  this.statsResults.connectionType[ipType].candidateType = RemoteCandidateType[result.id];
926
1127
  this.statsResults.connectionType[ipType].ipAddress = RemoteIpAddress[result.id];
927
1128
 
928
- this.statsResults.connectionType[ipType].networkType = RemoteNetworkType[result.id][0] === NETWORK_TYPE.VPN ? NETWORK_TYPE.UNKNOWN : RemoteNetworkType[result.id][0];
1129
+ this.statsResults.connectionType[ipType].networkType =
1130
+ RemoteNetworkType[result.id][0] === NETWORK_TYPE.VPN
1131
+ ? NETWORK_TYPE.UNKNOWN
1132
+ : RemoteNetworkType[result.id][0];
929
1133
  this.statsResults.connectionType[ipType].transport = RemoteTransport[result.id];
930
1134
 
931
1135
  this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;
@@ -944,16 +1148,9 @@ export class StatsAnalyzer extends EventsScope {
944
1148
  if (!result || result.type !== 'track') {
945
1149
  return;
946
1150
  }
947
- if (result.type !== 'track') return;
948
1151
 
949
- const sendrecvType = result.remoteSource === true ? STATS.RECEIVE_DIRECTION : STATS.SEND_DIRECTION;
950
-
951
- if (result.frameWidth && result.frameHeight) {
952
- this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
953
- this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
954
- this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
955
- this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
956
- }
1152
+ const sendrecvType =
1153
+ result.remoteSource === true ? STATS.RECEIVE_DIRECTION : STATS.SEND_DIRECTION;
957
1154
 
958
1155
  if (sendrecvType === STATS.RECEIVE_DIRECTION) {
959
1156
  this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
@@ -961,18 +1158,21 @@ export class StatsAnalyzer extends EventsScope {
961
1158
  this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
962
1159
  }
963
1160
 
964
-
965
- if (result.trackIdentifier && mediaType !== STATS.AUDIO_CORRELATE) {
966
- this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;
1161
+ if (result.trackIdentifier && !mediaType.includes('audio')) {
1162
+ this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier =
1163
+ result.trackIdentifier;
967
1164
 
968
1165
  const jitterBufferDelay = result && result.jitterBufferDelay;
969
1166
  const jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;
970
1167
 
971
- this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && (+jitterBufferDelay / +jitterBufferEmittedCount);
1168
+ this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay =
1169
+ jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;
972
1170
 
973
1171
  // Used to calculate the jitter
974
- this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;
975
- this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;
1172
+ this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay =
1173
+ result.jitterBufferDelay;
1174
+ this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount =
1175
+ result.jitterBufferEmittedCount;
976
1176
  }
977
1177
  }
978
1178
 
@@ -984,16 +1184,20 @@ export class StatsAnalyzer extends EventsScope {
984
1184
  * @returns {void}
985
1185
  * @memberof StatsAnalyzer
986
1186
  */
987
- private compareSentAndReceived(result: any, type: any) {
988
- if (!type) {
1187
+ compareSentAndReceived(result, type) {
1188
+ // Don't compare on transceivers without a sender.
1189
+ if (!type || !this.statsResults.internal[type].send) {
989
1190
  return;
990
1191
  }
991
1192
 
992
1193
  const mediaType = type;
993
1194
 
994
- if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) { this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost; }
1195
+ if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) {
1196
+ this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
1197
+ }
995
1198
 
996
- const currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
1199
+ const currentPacketLoss =
1200
+ result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
997
1201
 
998
1202
  this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
999
1203
  this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
@@ -1007,18 +1211,31 @@ export class StatsAnalyzer extends EventsScope {
1007
1211
  this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
1008
1212
 
1009
1213
  // Total packloss ratio on this video section of the call
1010
- this.statsResults[mediaType].send.overAllPacketLossRatio = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;
1011
- this.statsResults[mediaType].send.currentPacketLossRatio = this.statsResults[mediaType].send.packetsLostOnReceiver > 0 ? this.statsResults[mediaType].send.packetsLostOnReceiver * 100 / (this.statsResults[mediaType].send.packetsSent + this.statsResults[mediaType].send.packetsLostOnReceiver) : 0;
1012
-
1013
- if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {
1014
- this.statsResults[mediaType].send.maxPacketLossRatio = this.statsResults[mediaType].send.currentPacketLossRatio;
1214
+ this.statsResults[mediaType].send.overAllPacketLossRatio =
1215
+ this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0
1216
+ ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver /
1217
+ this.statsResults[mediaType].send.totalPacketsSent
1218
+ : 0;
1219
+ this.statsResults[mediaType].send.currentPacketLossRatio =
1220
+ this.statsResults[mediaType].send.packetsLostOnReceiver > 0
1221
+ ? (this.statsResults[mediaType].send.packetsLostOnReceiver * 100) /
1222
+ (this.statsResults[mediaType].send.packetsSent +
1223
+ this.statsResults[mediaType].send.packetsLostOnReceiver)
1224
+ : 0;
1225
+
1226
+ if (
1227
+ this.statsResults[mediaType].send.maxPacketLossRatio <
1228
+ this.statsResults[mediaType].send.currentPacketLossRatio
1229
+ ) {
1230
+ this.statsResults[mediaType].send.maxPacketLossRatio =
1231
+ this.statsResults[mediaType].send.currentPacketLossRatio;
1015
1232
  }
1016
1233
 
1017
1234
  if (result.type === 'remote-inbound-rtp') {
1018
1235
  this.networkQualityMonitor.determineUplinkNetworkQuality({
1019
1236
  mediaType,
1020
1237
  remoteRtpResults: result,
1021
- statsAnalyzerCurrentStats: this.statsResults
1238
+ statsAnalyzerCurrentStats: this.statsResults,
1022
1239
  });
1023
1240
  }
1024
1241
  }