@100mslive/hms-video-store 0.10.29-alpha.1 → 0.11.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 (534) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +11 -4
  3. package/dist/{core/IHMSActions.d.ts → IHMSActions.d.ts} +2 -3
  4. package/dist/{core/IHMSStore.d.ts → IHMSStore.d.ts} +1 -1
  5. package/dist/analytics/AdditionalAnalyticsProperties.d.ts +23 -0
  6. package/dist/analytics/AnalyticsEvent.d.ts +49 -0
  7. package/dist/analytics/AnalyticsEventDomains.d.ts +5 -0
  8. package/dist/analytics/AnalyticsEventFactory.d.ts +71 -0
  9. package/dist/analytics/AnalyticsEventLevel.d.ts +12 -0
  10. package/dist/analytics/AnalyticsEventsService.d.ts +19 -0
  11. package/dist/analytics/AnalyticsTimer.d.ts +22 -0
  12. package/dist/analytics/AnalyticsTransport.d.ts +11 -0
  13. package/dist/analytics/HTTPAnalyticsTransport.d.ts +18 -0
  14. package/dist/analytics/IAnalyticsPropertiesProvider.d.ts +4 -0
  15. package/dist/analytics/IAnalyticsTransportProvider.d.ts +6 -0
  16. package/dist/analytics/MediaPluginsAnalyticsFactory.d.ts +21 -0
  17. package/dist/analytics/domain-analytics.d.ts +2 -0
  18. package/dist/analytics/signal-transport/LocalStoageEvents.d.ts +9 -0
  19. package/dist/analytics/signal-transport/SignalAnalyticsTransport.d.ts +8 -0
  20. package/dist/analytics/stats/BaseStatsAnalytics.d.ts +56 -0
  21. package/dist/analytics/stats/PublishStatsAnalytics.d.ts +17 -0
  22. package/dist/analytics/stats/SubscribeStatsAnalytics.d.ts +16 -0
  23. package/dist/analytics/stats/index.d.ts +3 -0
  24. package/dist/analytics/stats/interfaces.d.ts +76 -0
  25. package/dist/audio-sink-manager/AudioSinkManager.d.ts +45 -0
  26. package/dist/audio-sink-manager/index.d.ts +1 -0
  27. package/dist/common/ui-logger.d.ts +1 -1
  28. package/dist/connection/HMSConnection.d.ts +44 -0
  29. package/dist/connection/HMSDataChannel.d.ts +15 -0
  30. package/dist/connection/IConnectionObserver.d.ts +4 -0
  31. package/dist/connection/channel-messages.d.ts +30 -0
  32. package/dist/connection/model.d.ts +8 -0
  33. package/dist/connection/publish/IPublishConnectionObserver.d.ts +10 -0
  34. package/dist/connection/publish/publishConnection.d.ts +11 -0
  35. package/dist/connection/subscribe/ISubscribeConnectionObserver.d.ts +14 -0
  36. package/dist/connection/subscribe/subscribeConnection.d.ts +24 -0
  37. package/dist/controller/beam/BeamSpeakerLabelsLogger.d.ts +2 -2
  38. package/dist/device-manager/AudioOutputManager.d.ts +18 -0
  39. package/dist/device-manager/DeviceManager.d.ts +57 -0
  40. package/dist/device-manager/DeviceStorage.d.ts +30 -0
  41. package/dist/device-manager/DeviceTestData.d.ts +15 -0
  42. package/dist/device-manager/index.d.ts +1 -0
  43. package/dist/error/ErrorCodes.d.ts +64 -0
  44. package/dist/error/ErrorFactory.d.ts +74 -0
  45. package/dist/error/HMSAction.d.ts +19 -0
  46. package/dist/error/HMSException.d.ts +23 -0
  47. package/dist/error/utils.d.ts +9 -0
  48. package/dist/events/EventBus.d.ts +51 -0
  49. package/dist/events/HMSInternalEvent.d.ts +13 -0
  50. package/dist/index.cjs.js +82 -1
  51. package/dist/index.cjs.js.map +4 -4
  52. package/dist/index.d.ts +11 -2
  53. package/dist/index.js +82 -1
  54. package/dist/index.js.map +4 -4
  55. package/dist/interfaces/change-track-state.d.ts +21 -0
  56. package/dist/interfaces/config.d.ts +76 -0
  57. package/dist/interfaces/devices.d.ts +25 -0
  58. package/dist/interfaces/error-listener.d.ts +4 -0
  59. package/dist/interfaces/framework-info.d.ts +19 -0
  60. package/dist/interfaces/get-token.d.ts +7 -0
  61. package/dist/interfaces/hls-config.d.ts +36 -0
  62. package/dist/interfaces/hms.d.ts +87 -0
  63. package/dist/interfaces/index.d.ts +21 -0
  64. package/dist/interfaces/internal.d.ts +4 -0
  65. package/dist/interfaces/leave-room-request.d.ts +6 -0
  66. package/dist/interfaces/message.d.ts +17 -0
  67. package/dist/interfaces/peer/connection-quality.d.ts +13 -0
  68. package/dist/interfaces/peer/hms-local-peer.d.ts +10 -0
  69. package/dist/interfaces/peer/hms-peer.d.ts +23 -0
  70. package/dist/interfaces/peer/hms-remote-peer.d.ts +8 -0
  71. package/dist/interfaces/peer/index.d.ts +4 -0
  72. package/dist/interfaces/peer-list-iterator.d.ts +6 -0
  73. package/dist/interfaces/playlist.d.ts +114 -0
  74. package/dist/interfaces/preview-listener.d.ts +15 -0
  75. package/dist/interfaces/role-change-request.d.ts +11 -0
  76. package/dist/interfaces/role.d.ts +50 -0
  77. package/dist/interfaces/room.d.ts +95 -0
  78. package/dist/interfaces/rtmp-recording-config.d.ts +10 -0
  79. package/dist/interfaces/session-store/index.d.ts +18 -0
  80. package/dist/interfaces/session-store/interactivity-center.d.ts +17 -0
  81. package/dist/interfaces/session-store/polls.d.ts +133 -0
  82. package/dist/interfaces/session-store/whiteboard.d.ts +27 -0
  83. package/dist/interfaces/settings.d.ts +26 -0
  84. package/dist/interfaces/simulcast-layers.d.ts +30 -0
  85. package/dist/interfaces/speaker.d.ts +7 -0
  86. package/dist/interfaces/track-settings.d.ts +114 -0
  87. package/dist/interfaces/types.d.ts +6 -0
  88. package/dist/interfaces/update-listener.d.ts +82 -0
  89. package/dist/interfaces/webrtc-stats.d.ts +96 -0
  90. package/dist/internal.d.ts +12 -0
  91. package/dist/media/settings/HMSAudioTrackSettings.d.ts +28 -0
  92. package/dist/media/settings/HMSTrackSettings.d.ts +25 -0
  93. package/dist/media/settings/HMSVideoTrackSettings.d.ts +47 -0
  94. package/dist/media/settings/index.d.ts +3 -0
  95. package/dist/media/streams/HMSLocalStream.d.ts +16 -0
  96. package/dist/media/streams/HMSMediaStream.d.ts +12 -0
  97. package/dist/media/streams/HMSRemoteStream.d.ts +32 -0
  98. package/dist/media/streams/index.d.ts +3 -0
  99. package/dist/media/tracks/HMSAudioTrack.d.ts +21 -0
  100. package/dist/media/tracks/HMSLocalAudioTrack.d.ts +77 -0
  101. package/dist/media/tracks/HMSLocalVideoTrack.d.ts +149 -0
  102. package/dist/media/tracks/HMSRemoteAudioTrack.d.ts +4 -0
  103. package/dist/media/tracks/HMSRemoteVideoTrack.d.ts +59 -0
  104. package/dist/media/tracks/HMSTrack.d.ts +64 -0
  105. package/dist/media/tracks/HMSTrackType.d.ts +4 -0
  106. package/dist/media/tracks/HMSVideoTrack.d.ts +31 -0
  107. package/dist/media/tracks/VideoElementManager.d.ts +30 -0
  108. package/dist/media/tracks/index.d.ts +14 -0
  109. package/dist/media/tracks/trackUtils.d.ts +15 -0
  110. package/dist/notification-manager/HMSNotificationMethod.d.ts +37 -0
  111. package/dist/notification-manager/HMSNotifications.d.ts +291 -0
  112. package/dist/notification-manager/NotificationManager.d.ts +47 -0
  113. package/dist/notification-manager/fixtures.d.ts +7 -0
  114. package/dist/notification-manager/index.d.ts +2 -0
  115. package/dist/notification-manager/managers/ActiveSpeakerManager.d.ts +10 -0
  116. package/dist/notification-manager/managers/BroadcastManager.d.ts +8 -0
  117. package/dist/notification-manager/managers/ConnectionQualityManager.d.ts +9 -0
  118. package/dist/notification-manager/managers/PeerListManager.d.ts +31 -0
  119. package/dist/notification-manager/managers/PeerManager.d.ts +34 -0
  120. package/dist/notification-manager/managers/PolicyChangeManager.d.ts +16 -0
  121. package/dist/notification-manager/managers/PollsManager.d.ts +15 -0
  122. package/dist/notification-manager/managers/RequestManager.d.ts +19 -0
  123. package/dist/notification-manager/managers/RoomUpdateManager.d.ts +26 -0
  124. package/dist/notification-manager/managers/SessionMetadataManager.d.ts +9 -0
  125. package/dist/notification-manager/managers/TrackManager.d.ts +53 -0
  126. package/dist/notification-manager/managers/WhiteboardManager.d.ts +11 -0
  127. package/dist/notification-manager/managers/onDemandTrackManager.d.ts +28 -0
  128. package/dist/notification-manager/managers/utils.d.ts +4 -0
  129. package/dist/playlist-manager/AudioContextManager.d.ts +15 -0
  130. package/dist/playlist-manager/PlaylistAudioManager.d.ts +28 -0
  131. package/dist/playlist-manager/PlaylistManager.d.ts +60 -0
  132. package/dist/playlist-manager/PlaylistVideoManager.d.ts +39 -0
  133. package/dist/playlist-manager/index.d.ts +1 -0
  134. package/dist/plugins/audio/AudioPluginsAnalytics.d.ts +17 -0
  135. package/dist/plugins/audio/HMSAudioPlugin.d.ts +58 -0
  136. package/dist/plugins/audio/HMSAudioPluginsManager.d.ts +43 -0
  137. package/dist/plugins/audio/index.d.ts +4 -0
  138. package/dist/plugins/index.d.ts +2 -0
  139. package/dist/plugins/video/HMSMediaStreamPlugin.d.ts +9 -0
  140. package/dist/plugins/video/HMSMediaStreamPluginsManager.d.ts +8 -0
  141. package/dist/plugins/video/HMSVideoPlugin.d.ts +67 -0
  142. package/dist/plugins/video/HMSVideoPluginsManager.d.ts +92 -0
  143. package/dist/plugins/video/VideoPluginsAnalytics.d.ts +22 -0
  144. package/dist/plugins/video/index.d.ts +4 -0
  145. package/dist/{core/hmsSDKStore → reactive-store}/HMSNotifications.d.ts +1 -1
  146. package/dist/{core/hmsSDKStore → reactive-store}/HMSPlaylist.d.ts +1 -1
  147. package/dist/{core/hmsSDKStore → reactive-store}/HMSSDKActions.d.ts +8 -6
  148. package/dist/{core/hmsSDKStore → reactive-store}/HMSSessionStore.d.ts +2 -1
  149. package/dist/{core/hmsSDKStore → reactive-store}/adapter.d.ts +4 -3
  150. package/dist/{core/hmsSDKStore → reactive-store}/common/mapping.d.ts +1 -1
  151. package/dist/{core/hmsSDKStore → reactive-store}/sdkUtils/sdkUtils.d.ts +1 -1
  152. package/dist/{core/hmsSDKStore → reactive-store}/sdkUtils/storeMergeUtils.d.ts +2 -2
  153. package/dist/rtc-stats/HMSWebrtcInternals.d.ts +37 -0
  154. package/dist/rtc-stats/HMSWebrtcStats.d.ts +29 -0
  155. package/dist/rtc-stats/index.d.ts +2 -0
  156. package/dist/rtc-stats/utils.d.ts +19 -0
  157. package/dist/{core/schema → schema}/device-change.d.ts +1 -1
  158. package/dist/{core/schema → schema}/index.d.ts +0 -1
  159. package/dist/{core/schema → schema}/message.d.ts +2 -0
  160. package/dist/{core/schema → schema}/notification.d.ts +1 -1
  161. package/dist/{core/schema → schema}/peer.d.ts +1 -1
  162. package/dist/{core/schema → schema}/role.d.ts +1 -1
  163. package/dist/{core/schema → schema}/room.d.ts +1 -1
  164. package/dist/{core/schema → schema}/schema.d.ts +1 -1
  165. package/dist/sdk/HMSPeerListIterator.d.ts +21 -0
  166. package/dist/sdk/LocalTrackManager.d.ts +57 -0
  167. package/dist/sdk/NetworkTestManager.d.ts +15 -0
  168. package/dist/sdk/RoleChangeManager.d.ts +31 -0
  169. package/dist/sdk/WakeLockManager.d.ts +8 -0
  170. package/dist/sdk/index.d.ts +166 -0
  171. package/dist/sdk/models/HMSRoom.d.ts +25 -0
  172. package/dist/sdk/models/peer/HMSLocalPeer.d.ts +18 -0
  173. package/dist/sdk/models/peer/HMSPeer.d.ts +49 -0
  174. package/dist/sdk/models/peer/HMSRemotePeer.d.ts +13 -0
  175. package/dist/sdk/models/peer/index.d.ts +3 -0
  176. package/dist/sdk/store/Store.d.ts +93 -0
  177. package/dist/sdk/store/StoreInterfaces.d.ts +9 -0
  178. package/dist/sdk/store/index.d.ts +1 -0
  179. package/dist/{core/selectors → selectors}/derivedSelectors.d.ts +1 -1
  180. package/dist/{core/selectors → selectors}/selectors.d.ts +10 -10
  181. package/dist/{core/selectors → selectors}/selectorsByID.d.ts +3 -3
  182. package/dist/{core/selectors → selectors}/selectorsByReference.d.ts +2 -2
  183. package/dist/session-store/index.d.ts +17 -0
  184. package/dist/session-store/interactivity-center/HMSInteractivityCenter.d.ts +24 -0
  185. package/dist/session-store/interactivity-center/HMSWhiteboardCenter.d.ts +17 -0
  186. package/dist/session-store/interactivity-center/index.d.ts +1 -0
  187. package/dist/signal/ISignalEventsObserver.d.ts +12 -0
  188. package/dist/signal/ISignalSendParamsProvider.d.ts +3 -0
  189. package/dist/signal/init/index.d.ts +13 -0
  190. package/dist/signal/init/models.d.ts +55 -0
  191. package/dist/signal/interfaces/index.d.ts +10 -0
  192. package/dist/signal/interfaces/polls.d.ts +152 -0
  193. package/dist/signal/interfaces/responses.d.ts +40 -0
  194. package/dist/signal/interfaces/superpowers.d.ts +83 -0
  195. package/dist/signal/interfaces/track.d.ts +12 -0
  196. package/dist/signal/jsonrpc/index.d.ts +92 -0
  197. package/dist/signal/jsonrpc/models.d.ts +64 -0
  198. package/dist/test/fakeStore/fakeHMSStatsStore.d.ts +1 -1
  199. package/dist/test/fakeStore/fakeHMSStore.d.ts +2 -2
  200. package/dist/test/fixtures.d.ts +1 -1
  201. package/dist/transport/ITransportObserver.d.ts +36 -0
  202. package/dist/transport/RetryScheduler.d.ts +39 -0
  203. package/dist/transport/index.d.ts +109 -0
  204. package/dist/transport/models/JoinParameters.d.ts +9 -0
  205. package/dist/transport/models/TransportFailureCategory.d.ts +14 -0
  206. package/dist/transport/models/TransportState.d.ts +9 -0
  207. package/dist/utils/analytics-deviceId.d.ts +1 -0
  208. package/dist/utils/autoplay.d.ts +1 -0
  209. package/dist/utils/constants.d.ts +51 -0
  210. package/dist/utils/date.d.ts +1 -0
  211. package/dist/utils/device-error.d.ts +1 -0
  212. package/dist/utils/fetch.d.ts +4 -0
  213. package/dist/utils/id-factory.d.ts +3 -0
  214. package/dist/utils/intersection-observer.d.ts +19 -0
  215. package/dist/utils/json.d.ts +1 -0
  216. package/dist/utils/jwt.d.ts +6 -0
  217. package/dist/utils/local-storage-polyfill.d.ts +1 -0
  218. package/dist/utils/local-storage.d.ts +12 -0
  219. package/dist/utils/logger.d.ts +26 -0
  220. package/dist/utils/math.d.ts +7 -0
  221. package/dist/utils/media.d.ts +15 -0
  222. package/dist/utils/network-info.d.ts +8 -0
  223. package/dist/utils/promise.d.ts +11 -0
  224. package/dist/utils/queue.d.ts +15 -0
  225. package/dist/utils/resize-observer.d.ts +19 -0
  226. package/dist/utils/session-description.d.ts +12 -0
  227. package/dist/utils/support.d.ts +13 -0
  228. package/dist/utils/timer-utils.d.ts +15 -0
  229. package/dist/utils/track-audio-level-monitor.d.ts +38 -0
  230. package/dist/utils/track.d.ts +4 -0
  231. package/dist/utils/track.futuretest.d.ts +1 -0
  232. package/dist/utils/typed-event-emitter.d.ts +14 -0
  233. package/dist/utils/user-agent.d.ts +3 -0
  234. package/dist/utils/validations.d.ts +13 -0
  235. package/dist/{core/webrtc-stats → webrtc-stats}/HMSStats.d.ts +1 -1
  236. package/dist/webrtc-stats/internal.d.ts +1 -0
  237. package/dist/webrtc-stats/selectors.d.ts +20 -0
  238. package/dist/{core/webrtc-stats → webrtc-stats}/webrtc-stats-store.d.ts +1 -1
  239. package/package.json +13 -6
  240. package/src/{core/IHMSActions.ts → IHMSActions.ts} +4 -3
  241. package/src/{core/IHMSStore.ts → IHMSStore.ts} +1 -1
  242. package/src/analytics/AdditionalAnalyticsProperties.ts +27 -0
  243. package/src/analytics/AnalyticsEvent.ts +67 -0
  244. package/src/analytics/AnalyticsEventDomains.ts +5 -0
  245. package/src/analytics/AnalyticsEventFactory.ts +260 -0
  246. package/src/analytics/AnalyticsEventLevel.ts +13 -0
  247. package/src/analytics/AnalyticsEventsService.ts +82 -0
  248. package/src/analytics/AnalyticsTimer.ts +60 -0
  249. package/src/analytics/AnalyticsTransport.ts +53 -0
  250. package/src/analytics/HTTPAnalyticsTransport.ts +120 -0
  251. package/src/analytics/IAnalyticsPropertiesProvider.ts +5 -0
  252. package/src/analytics/IAnalyticsTransportProvider.ts +7 -0
  253. package/src/analytics/MediaPluginsAnalyticsFactory.ts +74 -0
  254. package/src/analytics/domain-analytics.ts +25 -0
  255. package/src/analytics/signal-transport/LocalStoageEvents.ts +34 -0
  256. package/src/analytics/signal-transport/SignalAnalyticsTransport.ts +11 -0
  257. package/src/analytics/stats/BaseStatsAnalytics.ts +177 -0
  258. package/src/analytics/stats/PublishStatsAnalytics.ts +148 -0
  259. package/src/analytics/stats/SubscribeStatsAnalytics.ts +126 -0
  260. package/src/analytics/stats/index.ts +3 -0
  261. package/src/analytics/stats/interfaces.ts +90 -0
  262. package/src/audio-sink-manager/AudioSinkManager.ts +277 -0
  263. package/src/audio-sink-manager/index.ts +1 -0
  264. package/src/common/storeName.ts +1 -1
  265. package/src/common/ui-logger.ts +1 -1
  266. package/src/connection/HMSConnection.ts +202 -0
  267. package/src/connection/HMSDataChannel.ts +44 -0
  268. package/src/connection/IConnectionObserver.ts +6 -0
  269. package/src/connection/channel-messages.ts +34 -0
  270. package/src/connection/model.ts +10 -0
  271. package/src/connection/publish/IPublishConnectionObserver.ts +13 -0
  272. package/src/connection/publish/publishConnection.ts +59 -0
  273. package/src/connection/subscribe/ISubscribeConnectionObserver.ts +26 -0
  274. package/src/connection/subscribe/subscribeConnection.ts +208 -0
  275. package/src/controller/beam/BeamSpeakerLabelsLogger.ts +2 -2
  276. package/src/device-manager/AudioOutputManager.ts +43 -0
  277. package/src/device-manager/DeviceManager.test.ts +42 -0
  278. package/src/device-manager/DeviceManager.ts +424 -0
  279. package/src/device-manager/DeviceStorage.test.ts +38 -0
  280. package/src/device-manager/DeviceStorage.ts +67 -0
  281. package/src/device-manager/DeviceTestData.ts +206 -0
  282. package/src/device-manager/index.ts +1 -0
  283. package/src/error/ErrorCodes.ts +156 -0
  284. package/src/error/ErrorCodes.ts.gyb +69 -0
  285. package/src/error/ErrorFactory.ts +549 -0
  286. package/src/error/ErrorFactory.ts.gyb +109 -0
  287. package/src/error/HMSAction.ts +19 -0
  288. package/src/error/HMSException.ts +50 -0
  289. package/src/error/utils.ts +77 -0
  290. package/src/events/EventBus.ts +80 -0
  291. package/src/events/HMSInternalEvent.ts +27 -0
  292. package/src/feature-flags.d.ts +10 -0
  293. package/src/index.ts +56 -2
  294. package/src/interfaces/change-track-state.ts +24 -0
  295. package/src/interfaces/config.ts +79 -0
  296. package/src/interfaces/devices.ts +30 -0
  297. package/src/interfaces/error-listener.ts +5 -0
  298. package/src/interfaces/framework-info.ts +19 -0
  299. package/src/interfaces/get-token.ts +8 -0
  300. package/src/interfaces/hls-config.ts +38 -0
  301. package/src/interfaces/hms.ts +103 -0
  302. package/src/interfaces/index.ts +21 -0
  303. package/src/interfaces/internal.ts +4 -0
  304. package/src/interfaces/leave-room-request.ts +7 -0
  305. package/src/interfaces/message.ts +18 -0
  306. package/src/interfaces/peer/connection-quality.ts +13 -0
  307. package/src/interfaces/peer/hms-local-peer.ts +12 -0
  308. package/src/interfaces/peer/hms-peer.ts +25 -0
  309. package/src/interfaces/peer/hms-remote-peer.ts +9 -0
  310. package/src/interfaces/peer/index.ts +4 -0
  311. package/src/interfaces/peer-list-iterator.ts +6 -0
  312. package/src/interfaces/playlist.ts +116 -0
  313. package/src/interfaces/preview-listener.ts +16 -0
  314. package/src/interfaces/role-change-request.ts +12 -0
  315. package/src/interfaces/role.ts +54 -0
  316. package/src/interfaces/room.ts +105 -0
  317. package/src/interfaces/rtmp-recording-config.ts +11 -0
  318. package/src/interfaces/session-store/index.ts +18 -0
  319. package/src/{core/schema → interfaces/session-store}/interactivity-center.ts +14 -8
  320. package/src/interfaces/session-store/polls.ts +167 -0
  321. package/src/interfaces/session-store/whiteboard.ts +23 -0
  322. package/src/interfaces/settings.ts +26 -0
  323. package/src/interfaces/simulcast-layers.ts +36 -0
  324. package/src/interfaces/speaker.ts +8 -0
  325. package/src/interfaces/track-settings.ts +121 -0
  326. package/src/interfaces/types.ts +6 -0
  327. package/src/interfaces/update-listener.ts +92 -0
  328. package/src/interfaces/webrtc-stats.ts +97 -0
  329. package/src/internal.ts +19 -0
  330. package/src/media/settings/HMSAudioTrackSettings.ts +95 -0
  331. package/src/media/settings/HMSTrackSettings.ts +83 -0
  332. package/src/media/settings/HMSVideoTrackSettings.ts +153 -0
  333. package/src/media/settings/index.ts +3 -0
  334. package/src/media/streams/HMSLocalStream.ts +77 -0
  335. package/src/media/streams/HMSMediaStream.ts +21 -0
  336. package/src/media/streams/HMSRemoteStream.ts +90 -0
  337. package/src/media/streams/index.ts +3 -0
  338. package/src/media/streams/stream.test.ts +82 -0
  339. package/src/media/tracks/HMSAudioTrack.ts +86 -0
  340. package/src/media/tracks/HMSLocalAudioTrack.ts +284 -0
  341. package/src/media/tracks/HMSLocalVideoTrack.ts +466 -0
  342. package/src/media/tracks/HMSRemoteAudioTrack.ts +11 -0
  343. package/src/media/tracks/HMSRemoteVideoTrack.ts +248 -0
  344. package/src/media/tracks/HMSTrack.ts +112 -0
  345. package/src/media/tracks/HMSTrackType.ts +4 -0
  346. package/src/media/tracks/HMSVideoTrack.ts +89 -0
  347. package/src/media/tracks/RemoteVideoTrack.test.ts +158 -0
  348. package/src/media/tracks/VideoElementManager.ts +182 -0
  349. package/src/media/tracks/index.ts +16 -0
  350. package/src/media/tracks/trackUtils.test.ts +46 -0
  351. package/src/media/tracks/trackUtils.ts +45 -0
  352. package/src/media/tracks/videoElementManager.test.ts +92 -0
  353. package/src/notification-manager/HMSNotificationMethod.ts +38 -0
  354. package/src/notification-manager/HMSNotifications.ts +335 -0
  355. package/src/notification-manager/NotificationManager.ts +198 -0
  356. package/src/notification-manager/fixtures.ts +183 -0
  357. package/src/notification-manager/index.ts +2 -0
  358. package/src/notification-manager/managers/ActiveSpeakerManager.ts +28 -0
  359. package/src/notification-manager/managers/BroadcastManager.ts +21 -0
  360. package/src/notification-manager/managers/ConnectionQualityManager.ts +22 -0
  361. package/src/notification-manager/managers/PeerListManager.ts +173 -0
  362. package/src/notification-manager/managers/PeerManager.ts +189 -0
  363. package/src/notification-manager/managers/PolicyChangeManager.ts +50 -0
  364. package/src/notification-manager/managers/PollsManager.ts +157 -0
  365. package/src/notification-manager/managers/RequestManager.ts +138 -0
  366. package/src/notification-manager/managers/RoomUpdateManager.ts +316 -0
  367. package/src/notification-manager/managers/SessionMetadataManager.ts +26 -0
  368. package/src/notification-manager/managers/TrackManager.ts +296 -0
  369. package/src/notification-manager/managers/WhiteboardManager.ts +44 -0
  370. package/src/notification-manager/managers/onDemandTrackManager.ts +101 -0
  371. package/src/notification-manager/managers/utils.ts +14 -0
  372. package/src/notification-manager/notification-manager.test.ts +226 -0
  373. package/src/playlist-manager/AudioContextManager.ts +44 -0
  374. package/src/playlist-manager/PlaylistAudioManager.ts +105 -0
  375. package/src/playlist-manager/PlaylistManager.ts +389 -0
  376. package/src/playlist-manager/PlaylistVideoManager.ts +153 -0
  377. package/src/playlist-manager/index.ts +1 -0
  378. package/src/plugins/audio/AudioPluginsAnalytics.ts +93 -0
  379. package/src/plugins/audio/HMSAudioPlugin.ts +71 -0
  380. package/src/plugins/audio/HMSAudioPluginsManager.ts +266 -0
  381. package/src/plugins/audio/index.ts +4 -0
  382. package/src/plugins/index.ts +2 -0
  383. package/src/plugins/video/HMSMediaStreamPlugin.ts +11 -0
  384. package/src/plugins/video/HMSMediaStreamPluginsManager.ts +33 -0
  385. package/src/plugins/video/HMSVideoPlugin.ts +81 -0
  386. package/src/plugins/video/HMSVideoPluginsManager.ts +443 -0
  387. package/src/plugins/video/VideoPluginsAnalytics.ts +130 -0
  388. package/src/plugins/video/index.ts +4 -0
  389. package/src/{core/hmsSDKStore → reactive-store}/HMSNotifications.ts +1 -1
  390. package/src/{core/hmsSDKStore → reactive-store}/HMSPlaylist.ts +2 -2
  391. package/src/{core/hmsSDKStore → reactive-store}/HMSReactiveStore.ts +5 -4
  392. package/src/{core/hmsSDKStore → reactive-store}/HMSSDKActions.ts +84 -67
  393. package/src/{core/hmsSDKStore → reactive-store}/HMSSessionStore.ts +2 -1
  394. package/src/{core/hmsSDKStore → reactive-store}/adapter.ts +18 -14
  395. package/src/{core/hmsSDKStore → reactive-store}/common/mapping.ts +1 -1
  396. package/src/{core/hmsSDKStore → reactive-store}/sdkUtils/ActionBatcher.ts +1 -1
  397. package/src/{core/hmsSDKStore → reactive-store}/sdkUtils/sdkUtils.ts +1 -1
  398. package/src/{core/hmsSDKStore → reactive-store}/sdkUtils/storeMergeUtils.ts +2 -2
  399. package/src/rtc-stats/HMSWebrtcInternals.ts +105 -0
  400. package/src/rtc-stats/HMSWebrtcStats.ts +140 -0
  401. package/src/rtc-stats/index.ts +2 -0
  402. package/src/rtc-stats/utils.ts +266 -0
  403. package/src/{core/schema → schema}/device-change.ts +1 -1
  404. package/src/{core/schema → schema}/index.ts +0 -1
  405. package/src/{core/schema → schema}/message.ts +2 -0
  406. package/src/{core/schema → schema}/notification.ts +1 -1
  407. package/src/{core/schema → schema}/peer.ts +1 -1
  408. package/src/{core/schema → schema}/role.ts +1 -1
  409. package/src/{core/schema → schema}/room.ts +1 -1
  410. package/src/{core/schema → schema}/schema.ts +1 -8
  411. package/src/sdk/HMSPeerListIterator.ts +73 -0
  412. package/src/sdk/LocalTrackManager.test.ts +477 -0
  413. package/src/sdk/LocalTrackManager.ts +612 -0
  414. package/src/sdk/NetworkTestManager.ts +119 -0
  415. package/src/sdk/RoleChangeManager.ts +157 -0
  416. package/src/sdk/WakeLockManager.ts +46 -0
  417. package/src/sdk/index.ts +1410 -0
  418. package/src/sdk/models/HMSRoom.ts +29 -0
  419. package/src/sdk/models/peer/HMSLocalPeer.ts +36 -0
  420. package/src/sdk/models/peer/HMSPeer.ts +93 -0
  421. package/src/sdk/models/peer/HMSRemotePeer.ts +18 -0
  422. package/src/sdk/models/peer/index.ts +3 -0
  423. package/src/sdk/models/peer/peer.test.ts +119 -0
  424. package/src/sdk/store/Store.ts +453 -0
  425. package/src/sdk/store/StoreInterfaces.ts +8 -0
  426. package/src/sdk/store/index.ts +1 -0
  427. package/src/{core/selectors → selectors}/derivedSelectors.ts +1 -1
  428. package/src/{core/selectors → selectors}/selectors.ts +1 -1
  429. package/src/{core/selectors → selectors}/selectorsByID.ts +1 -1
  430. package/src/session-store/index.ts +49 -0
  431. package/src/session-store/interactivity-center/HMSInteractivityCenter.ts +250 -0
  432. package/src/session-store/interactivity-center/HMSWhiteboardCenter.ts +98 -0
  433. package/src/session-store/interactivity-center/index.ts +1 -0
  434. package/src/signal/ISignalEventsObserver.ts +20 -0
  435. package/src/signal/ISignalSendParamsProvider.ts +3 -0
  436. package/src/signal/init/index.ts +86 -0
  437. package/src/signal/init/init.test.ts +155 -0
  438. package/src/signal/init/models.ts +61 -0
  439. package/src/signal/interfaces/index.ts +12 -0
  440. package/src/signal/interfaces/polls.ts +189 -0
  441. package/src/signal/interfaces/responses.ts +48 -0
  442. package/src/signal/interfaces/superpowers.ts +98 -0
  443. package/src/signal/interfaces/track.ts +13 -0
  444. package/src/signal/jsonrpc/index.ts +633 -0
  445. package/src/signal/jsonrpc/models.ts +81 -0
  446. package/src/test/fakeStore/fakeHMSStatsStore.ts +1 -1
  447. package/src/test/fakeStore/fakeHMSStore.ts +3 -10
  448. package/src/test/fixtures.ts +1 -1
  449. package/src/test/unit/HMSNotifications.test.ts +5 -5
  450. package/src/test/unit/reactiveStore.test.ts +2 -2
  451. package/src/test/unit/roleSelectors.test.ts +1 -1
  452. package/src/test/unit/selectors.test.ts +1 -1
  453. package/src/test/unit/selectorsByReference.test.ts +1 -1
  454. package/src/test/unit/storeMergeUtils.test.ts +2 -3
  455. package/src/test/unit/webrtc-stats.test.ts +2 -1
  456. package/src/transport/ITransportObserver.ts +45 -0
  457. package/src/transport/RetryScheduler.ts +218 -0
  458. package/src/transport/index.ts +1185 -0
  459. package/src/transport/models/JoinParameters.ts +10 -0
  460. package/src/transport/models/TransportFailureCategory.ts +15 -0
  461. package/src/transport/models/TransportState.ts +9 -0
  462. package/src/utils/analytics-deviceId.ts +15 -0
  463. package/src/utils/autoplay.ts +37 -0
  464. package/src/utils/constants.ts +66 -0
  465. package/src/utils/date.ts +3 -0
  466. package/src/utils/device-error.ts +40 -0
  467. package/src/utils/fetch.ts +34 -0
  468. package/src/utils/id-factory.ts +5 -0
  469. package/src/utils/intersection-observer.test.ts +46 -0
  470. package/src/utils/intersection-observer.ts +54 -0
  471. package/src/utils/json.ts +12 -0
  472. package/src/utils/jwt.test.ts +40 -0
  473. package/src/utils/jwt.ts +40 -0
  474. package/src/utils/local-storage-polyfill.ts +47 -0
  475. package/src/utils/local-storage.ts +44 -0
  476. package/src/utils/logger.ts +100 -0
  477. package/src/utils/math.ts +18 -0
  478. package/src/utils/media.ts +65 -0
  479. package/src/utils/network-info.ts +19 -0
  480. package/src/utils/promise.ts +19 -0
  481. package/src/utils/queue.ts +34 -0
  482. package/src/utils/resize-observer.test.ts +53 -0
  483. package/src/utils/resize-observer.ts +59 -0
  484. package/src/utils/session-description.test.ts +49 -0
  485. package/src/utils/session-description.ts +55 -0
  486. package/src/utils/support.ts +30 -0
  487. package/src/utils/timer-utils.ts +69 -0
  488. package/src/utils/track-audio-level-monitor.ts +153 -0
  489. package/src/utils/track.futuretest.ts +11 -0
  490. package/src/utils/track.ts +30 -0
  491. package/src/utils/typed-event-emitter.ts +35 -0
  492. package/src/utils/user-agent.ts +79 -0
  493. package/src/utils/validations.ts +34 -0
  494. package/src/{core/webrtc-stats → webrtc-stats}/HMSStats.ts +3 -3
  495. package/src/webrtc-stats/internal.ts +2 -0
  496. package/src/{core/webrtc-stats → webrtc-stats}/selectors.ts +1 -1
  497. package/src/{core/webrtc-stats → webrtc-stats}/webrtc-stats-store.ts +4 -2
  498. package/dist/core/hmsSDKStore/HMSInteractivityCenter.d.ts +0 -22
  499. package/dist/core/hmsSDKStore/sdkTypes.d.ts +0 -3
  500. package/dist/core/index.d.ts +0 -8
  501. package/dist/core/schema/interactivity-center.d.ts +0 -10
  502. package/dist/core/webrtc-stats/selectors.d.ts +0 -20
  503. package/src/core/hmsSDKStore/HMSInteractivityCenter.ts +0 -60
  504. package/src/core/hmsSDKStore/sdkTypes.ts +0 -136
  505. package/src/core/index.ts +0 -48
  506. /package/dist/{core/hmsSDKStore → reactive-store}/HMSReactiveStore.d.ts +0 -0
  507. /package/dist/{core/hmsSDKStore → reactive-store}/common/presence.d.ts +0 -0
  508. /package/dist/{core/hmsSDKStore → reactive-store}/internalTypes.d.ts +0 -0
  509. /package/dist/{core/hmsSDKStore → reactive-store}/sdkUtils/ActionBatcher.d.ts +0 -0
  510. /package/dist/{core/schema → schema}/error.d.ts +0 -0
  511. /package/dist/{core/schema → schema}/playlist-selectors.d.ts +0 -0
  512. /package/dist/{core/schema → schema}/playlist.d.ts +0 -0
  513. /package/dist/{core/schema → schema}/requests.d.ts +0 -0
  514. /package/dist/{core/schema → schema}/session-store.d.ts +0 -0
  515. /package/dist/{core/schema → schema}/settings.d.ts +0 -0
  516. /package/dist/{core/selectors → selectors}/common.d.ts +0 -0
  517. /package/dist/{core/selectors → selectors}/index.d.ts +0 -0
  518. /package/dist/{core/selectors → selectors}/playlistselectors.d.ts +0 -0
  519. /package/dist/{core/selectors → selectors}/selectorUtils.d.ts +0 -0
  520. /package/dist/{core/webrtc-stats → webrtc-stats}/index.d.ts +0 -0
  521. /package/src/{core/hmsSDKStore → reactive-store}/common/presence.ts +0 -0
  522. /package/src/{core/hmsSDKStore → reactive-store}/internalTypes.ts +0 -0
  523. /package/src/{core/schema → schema}/error.ts +0 -0
  524. /package/src/{core/schema → schema}/playlist-selectors.ts +0 -0
  525. /package/src/{core/schema → schema}/playlist.ts +0 -0
  526. /package/src/{core/schema → schema}/requests.ts +0 -0
  527. /package/src/{core/schema → schema}/session-store.ts +0 -0
  528. /package/src/{core/schema → schema}/settings.ts +0 -0
  529. /package/src/{core/selectors → selectors}/common.ts +0 -0
  530. /package/src/{core/selectors → selectors}/index.ts +0 -0
  531. /package/src/{core/selectors → selectors}/playlistselectors.ts +0 -0
  532. /package/src/{core/selectors → selectors}/selectorUtils.ts +0 -0
  533. /package/src/{core/selectors → selectors}/selectorsByReference.ts +0 -0
  534. /package/src/{core/webrtc-stats → webrtc-stats}/index.ts +0 -0
@@ -0,0 +1,140 @@
1
+ import {
2
+ computeNumberRate,
3
+ getLocalPeerStatsFromReport,
4
+ getLocalTrackStats,
5
+ getPacketsLostAndJitterFromReport,
6
+ getTrackStats,
7
+ union,
8
+ } from './utils';
9
+ import AnalyticsEventFactory from '../analytics/AnalyticsEventFactory';
10
+ import { ErrorFactory } from '../error/ErrorFactory';
11
+ import { HMSAction } from '../error/HMSAction';
12
+ import { EventBus } from '../events/EventBus';
13
+ import { HMSPeerStats, HMSTrackStats, PeerConnectionType } from '../interfaces/webrtc-stats';
14
+ import { HMSLocalTrack, HMSRemoteAudioTrack, HMSRemoteTrack, HMSRemoteVideoTrack } from '../media/tracks';
15
+ import { Store } from '../sdk/store';
16
+ import HMSLogger from '../utils/logger';
17
+
18
+ export class HMSWebrtcStats {
19
+ private readonly TAG = '[HMSWebrtcStats]';
20
+ private localPeerID?: string;
21
+ private peerStats: Record<string, HMSPeerStats> = {};
22
+ private remoteTrackStats: Record<string, HMSTrackStats> = {};
23
+ private localTrackStats: Record<string, Record<string, HMSTrackStats>> = {};
24
+
25
+ /**
26
+ * Removed localPeerID check in other places as it will be present before
27
+ * this is initialized
28
+ */
29
+ constructor(
30
+ private getStats: Record<PeerConnectionType, RTCPeerConnection['getStats'] | undefined>,
31
+ private store: Store,
32
+ private readonly eventBus: EventBus,
33
+ ) {
34
+ this.localPeerID = this.store.getLocalPeer()?.peerId;
35
+ }
36
+
37
+ getLocalPeerStats = (): HMSPeerStats | undefined => {
38
+ return this.peerStats[this.localPeerID!];
39
+ };
40
+
41
+ getRemoteTrackStats = (trackId: string): HMSTrackStats | undefined => {
42
+ return this.remoteTrackStats[trackId];
43
+ };
44
+
45
+ getAllRemoteTracksStats = () => {
46
+ return this.remoteTrackStats;
47
+ };
48
+
49
+ getLocalTrackStats = () => {
50
+ return this.localTrackStats;
51
+ };
52
+
53
+ /**
54
+ * @internal
55
+ */
56
+ updateStats = async () => {
57
+ await this.updateLocalPeerStats();
58
+ await this.updateLocalTrackStats();
59
+ await this.updateRemoteTrackStats();
60
+ };
61
+
62
+ private updateLocalPeerStats = async () => {
63
+ const prevLocalPeerStats = this.getLocalPeerStats();
64
+ let publishReport: RTCStatsReport | undefined;
65
+ try {
66
+ publishReport = await this.getStats.publish?.();
67
+ } catch (err: any) {
68
+ this.eventBus.analytics.publish(
69
+ AnalyticsEventFactory.rtcStatsFailed(ErrorFactory.WebrtcErrors.StatsFailed(HMSAction.PUBLISH, err.message)),
70
+ );
71
+ HMSLogger.w(this.TAG, 'Error in getting publish stats', err);
72
+ }
73
+ const publishStats: HMSPeerStats['publish'] | undefined =
74
+ publishReport && getLocalPeerStatsFromReport('publish', publishReport, prevLocalPeerStats);
75
+
76
+ let subscribeReport: RTCStatsReport | undefined;
77
+ try {
78
+ subscribeReport = await this.getStats.subscribe?.();
79
+ } catch (err: any) {
80
+ this.eventBus.analytics.publish(
81
+ AnalyticsEventFactory.rtcStatsFailed(ErrorFactory.WebrtcErrors.StatsFailed(HMSAction.SUBSCRIBE, err.message)),
82
+ );
83
+ HMSLogger.w(this.TAG, 'Error in getting subscribe stats', err);
84
+ }
85
+ const baseSubscribeStats =
86
+ subscribeReport && getLocalPeerStatsFromReport('subscribe', subscribeReport, prevLocalPeerStats);
87
+ const { packetsLost, jitter } = getPacketsLostAndJitterFromReport(subscribeReport);
88
+ const packetsLostRate = computeNumberRate(
89
+ packetsLost,
90
+ prevLocalPeerStats?.subscribe?.packetsLost,
91
+ baseSubscribeStats?.timestamp,
92
+ prevLocalPeerStats?.subscribe?.timestamp,
93
+ );
94
+
95
+ const subscribeStats: HMSPeerStats['subscribe'] =
96
+ baseSubscribeStats && Object.assign(baseSubscribeStats, { packetsLostRate, jitter, packetsLost });
97
+
98
+ this.peerStats[this.localPeerID!] = { publish: publishStats, subscribe: subscribeStats };
99
+ };
100
+
101
+ private updateRemoteTrackStats = async () => {
102
+ const tracks = Array.from(this.store.getTracksMap().values()).filter(
103
+ track => track instanceof HMSRemoteVideoTrack || track instanceof HMSRemoteAudioTrack,
104
+ );
105
+ const trackIds = tracks.map(track => track.trackId);
106
+ Object.keys(this.remoteTrackStats).forEach(trackId => {
107
+ if (!trackIds.includes(trackId)) {
108
+ delete this.remoteTrackStats[trackId];
109
+ }
110
+ });
111
+ for (const track of tracks) {
112
+ const peerName = track.peerId && this.store.getPeerById(track.peerId)?.name;
113
+ const prevTrackStats = this.getRemoteTrackStats(track.trackId);
114
+ const trackStats = await getTrackStats(this.eventBus, track as HMSRemoteTrack, peerName, prevTrackStats);
115
+ if (trackStats) {
116
+ this.remoteTrackStats[track.trackId] = trackStats;
117
+ }
118
+ }
119
+ };
120
+
121
+ private updateLocalTrackStats = async () => {
122
+ const tracks = this.store.getLocalPeerTracks().reduce<Record<string, HMSLocalTrack>>((res, track) => {
123
+ res[track.getTrackIDBeingSent()] = track;
124
+ return res;
125
+ }, {});
126
+ const trackIDs = union(Object.keys(this.localTrackStats), Object.keys(tracks));
127
+ for (const trackID of trackIDs) {
128
+ const track = tracks[trackID] as HMSLocalTrack;
129
+ if (track) {
130
+ const peerName = this.store.getLocalPeer()?.name;
131
+ const trackStats = await getLocalTrackStats(this.eventBus, track, peerName, this.localTrackStats[trackID]);
132
+ if (trackStats) {
133
+ this.localTrackStats[trackID] = trackStats;
134
+ }
135
+ } else {
136
+ delete this.localTrackStats[trackID];
137
+ }
138
+ }
139
+ };
140
+ }
@@ -0,0 +1,2 @@
1
+ export { HMSWebrtcInternals } from './HMSWebrtcInternals';
2
+ export { HMSWebrtcStats } from './HMSWebrtcStats';
@@ -0,0 +1,266 @@
1
+ import AnalyticsEventFactory from '../analytics/AnalyticsEventFactory';
2
+ import { ErrorFactory } from '../error/ErrorFactory';
3
+ import { HMSAction } from '../error/HMSAction';
4
+ import { EventBus } from '../events/EventBus';
5
+ import { RID } from '../interfaces';
6
+ import {
7
+ HMSLocalTrackStats,
8
+ HMSPeerStats,
9
+ HMSTrackStats,
10
+ MissingInboundStats,
11
+ PeerConnectionType,
12
+ RTCRemoteInboundRtpStreamStats,
13
+ } from '../interfaces/webrtc-stats';
14
+ import { HMSLocalTrack, HMSRemoteTrack } from '../media/tracks';
15
+ import HMSLogger from '../utils/logger';
16
+ import { isPresent } from '../utils/validations';
17
+
18
+ export const getLocalTrackStats = async (
19
+ eventBus: EventBus,
20
+ track: HMSLocalTrack,
21
+ peerName?: string,
22
+ prevTrackStats?: Record<string, HMSTrackStats>,
23
+ ): Promise<Record<string, HMSTrackStats> | undefined> => {
24
+ let trackReport: RTCStatsReport | undefined;
25
+ const trackStats: Record<string, HMSTrackStats> = {};
26
+ if (!track.transceiver?.sender.track) {
27
+ return;
28
+ }
29
+ try {
30
+ trackReport = await track.transceiver.sender.getStats();
31
+ const mimeTypes: { [key: string]: string } = {}; // codecId -> mimeType
32
+ const outbound: Record<string, RTCOutboundRtpStreamStats> = {};
33
+ const inbound: Record<string, RTCInboundRtpStreamStats & MissingInboundStats> = {};
34
+ trackReport?.forEach(stat => {
35
+ switch (stat.type) {
36
+ case 'outbound-rtp':
37
+ outbound[stat.id] = stat;
38
+ break;
39
+ case 'remote-inbound-rtp':
40
+ inbound[stat.ssrc] = stat;
41
+ break;
42
+ case 'codec':
43
+ mimeTypes[stat.id] = stat.mimeType;
44
+ break;
45
+ default:
46
+ break;
47
+ }
48
+ });
49
+
50
+ Object.keys({ ...outbound }).forEach(stat => {
51
+ const codecId = outbound[stat]?.codecId;
52
+ const mimeType = codecId ? mimeTypes[codecId] : undefined;
53
+ let codec: string | undefined;
54
+ if (mimeType) {
55
+ codec = mimeType.substring(mimeType.indexOf('/') + 1);
56
+ }
57
+ const out = { ...outbound[stat], rid: (outbound[stat] as HMSLocalTrackStats)?.rid as RID | undefined };
58
+ const inStats = inbound[out.ssrc];
59
+ trackStats[stat] = {
60
+ ...out,
61
+ bitrate: computeBitrate('bytesSent', out, prevTrackStats?.[stat]),
62
+ packetsLost: inStats?.packetsLost,
63
+ jitter: inStats?.jitter,
64
+ roundTripTime: inStats?.roundTripTime,
65
+ totalRoundTripTime: inStats?.totalRoundTripTime,
66
+ peerName,
67
+ peerID: track.peerId,
68
+ enabled: track.enabled,
69
+ codec,
70
+ };
71
+ });
72
+ } catch (err: any) {
73
+ eventBus.analytics.publish(
74
+ AnalyticsEventFactory.rtcStatsFailed(
75
+ ErrorFactory.WebrtcErrors.StatsFailed(
76
+ HMSAction.TRACK,
77
+ `Error getting local track stats ${track.trackId} - ${err.message}`,
78
+ ),
79
+ ),
80
+ );
81
+ HMSLogger.w('[HMSWebrtcStats]', 'Error in getting local track stats', track, err, (err as Error).name);
82
+ }
83
+ return trackStats;
84
+ };
85
+
86
+ export const getTrackStats = async (
87
+ eventBus: EventBus,
88
+ track: HMSRemoteTrack,
89
+ peerName?: string,
90
+ prevTrackStats?: HMSTrackStats,
91
+ ): Promise<HMSTrackStats | undefined> => {
92
+ let trackReport: RTCStatsReport | undefined;
93
+ try {
94
+ trackReport = await track.transceiver?.receiver.getStats();
95
+ } catch (err: any) {
96
+ eventBus.analytics.publish(
97
+ AnalyticsEventFactory.rtcStatsFailed(
98
+ ErrorFactory.WebrtcErrors.StatsFailed(
99
+ HMSAction.TRACK,
100
+ `Error getting remote track stats ${track.trackId} - ${err.message}`,
101
+ ),
102
+ ),
103
+ );
104
+ HMSLogger.w('[HMSWebrtcStats]', 'Error in getting remote track stats', track, err);
105
+ }
106
+ const trackStats = getRelevantStatsFromTrackReport(trackReport);
107
+
108
+ const bitrate = computeBitrate('bytesReceived', trackStats, prevTrackStats);
109
+
110
+ const packetsLostRate = computeStatRate('packetsLost', trackStats, prevTrackStats);
111
+
112
+ if (trackStats?.remote) {
113
+ Object.assign(trackStats.remote, {
114
+ packetsLostRate: computeStatRate('packetsLost', trackStats.remote, prevTrackStats?.remote),
115
+ });
116
+ }
117
+
118
+ return (
119
+ trackStats &&
120
+ Object.assign(trackStats, {
121
+ bitrate,
122
+ packetsLostRate,
123
+ peerId: track.peerId,
124
+ enabled: track.enabled,
125
+ peerName,
126
+ codec: trackStats.codec,
127
+ })
128
+ );
129
+ };
130
+
131
+ const getRelevantStatsFromTrackReport = (trackReport?: RTCStatsReport) => {
132
+ let streamStats: RTCInboundRtpStreamStats | (RTCOutboundRtpStreamStats & { rid?: RID }) | undefined;
133
+ // Valid by Webrtc spec, not in TS
134
+ // let remoteStreamStats: RTCRemoteInboundRtpStreamStats | RTCRemoteOutboundRtpStreamStats;
135
+ let remoteStreamStats: RTCRemoteInboundRtpStreamStats | undefined;
136
+
137
+ const mimeTypes: { [key: string]: string } = {}; // codecId -> mimeType
138
+ trackReport?.forEach(stat => {
139
+ switch (stat.type) {
140
+ case 'inbound-rtp':
141
+ streamStats = stat;
142
+ break;
143
+ case 'outbound-rtp':
144
+ streamStats = stat;
145
+ break;
146
+ case 'remote-inbound-rtp':
147
+ remoteStreamStats = stat;
148
+ break;
149
+ case 'codec':
150
+ mimeTypes[stat.id] = stat.mimeType;
151
+ break;
152
+ default:
153
+ break;
154
+ }
155
+ });
156
+
157
+ const mimeType = streamStats?.codecId ? mimeTypes[streamStats.codecId] : undefined;
158
+ let codec: string | undefined;
159
+ if (mimeType) {
160
+ codec = mimeType.substring(mimeType.indexOf('/') + 1);
161
+ }
162
+
163
+ return (
164
+ streamStats &&
165
+ Object.assign(streamStats, {
166
+ remote: remoteStreamStats,
167
+ codec: codec,
168
+ })
169
+ );
170
+ };
171
+
172
+ export const getLocalPeerStatsFromReport = (
173
+ type: PeerConnectionType,
174
+ report?: RTCStatsReport,
175
+ prevStats?: HMSPeerStats,
176
+ ): (RTCIceCandidatePairStats & { bitrate: number }) | undefined => {
177
+ const activeCandidatePair = getActiveCandidatePairFromReport(report);
178
+ const bitrate = computeBitrate(
179
+ (type === 'publish' ? 'bytesSent' : 'bytesReceived') as any,
180
+ activeCandidatePair,
181
+ prevStats && prevStats[type],
182
+ );
183
+
184
+ return activeCandidatePair && Object.assign(activeCandidatePair, { bitrate });
185
+ };
186
+
187
+ export const getActiveCandidatePairFromReport = (report?: RTCStatsReport): RTCIceCandidatePairStats | undefined => {
188
+ let activeCandidatePair: RTCIceCandidatePairStats | undefined;
189
+ report?.forEach(stat => {
190
+ if (stat.type === 'transport') {
191
+ // TS doesn't have correct types for RTCStatsReports
192
+ // @ts-expect-error
193
+ activeCandidatePair = report?.get(stat.selectedCandidatePairId);
194
+ }
195
+ });
196
+
197
+ // Fallback for Firefox.
198
+ if (!activeCandidatePair) {
199
+ report?.forEach(stat => {
200
+ if (stat.type === 'candidate-pair' && stat.selected) {
201
+ activeCandidatePair = stat;
202
+ }
203
+ });
204
+ }
205
+
206
+ return activeCandidatePair;
207
+ };
208
+
209
+ export const getPacketsLostAndJitterFromReport = (report?: RTCStatsReport): { packetsLost: number; jitter: number } => {
210
+ const result = { packetsLost: 0, jitter: 0 };
211
+ report?.forEach(stat => {
212
+ if (stat.packetsLost) {
213
+ result.packetsLost += stat.packetsLost;
214
+ }
215
+ if (stat.jitter > result.jitter) {
216
+ result.jitter = stat.jitter;
217
+ }
218
+ });
219
+
220
+ return result;
221
+ };
222
+
223
+ export const union = <T>(arr1: T[], arr2: T[]): T[] => {
224
+ return Array.from(new Set(arr1.concat(arr2)));
225
+ };
226
+
227
+ /**
228
+ * Ref: https://github.dev/peermetrics/webrtc-stats/blob/b5c1fed68325543e6f563c6d3f4450a4b51e12b7/src/utils.ts#L62
229
+ */
230
+ export const computeBitrate = <T extends HMSTrackStats>(
231
+ statName: keyof T,
232
+ newReport?: Partial<T>,
233
+ oldReport?: Partial<T>,
234
+ ): number => computeStatRate(statName, newReport, oldReport) * 8; // Bytes to bits
235
+
236
+ const computeStatRate = <T extends HMSTrackStats>(
237
+ statName: keyof T,
238
+ newReport?: Partial<T>,
239
+ oldReport?: Partial<T>,
240
+ ): number => {
241
+ const newVal = newReport && newReport[statName];
242
+ const oldVal = oldReport ? oldReport[statName] : null;
243
+ const conditions = [newReport, oldReport, isPresent(newVal), isPresent(oldVal)];
244
+ if (conditions.every(condition => !!condition)) {
245
+ // Type not null checked in `isPresent`
246
+ // * 1000 - ms to s
247
+ return (
248
+ computeNumberRate(
249
+ newVal as unknown as number,
250
+ oldVal as unknown as number,
251
+ newReport?.timestamp,
252
+ oldReport?.timestamp,
253
+ ) * 1000
254
+ );
255
+ } else {
256
+ return 0;
257
+ }
258
+ };
259
+
260
+ export const computeNumberRate = (newVal?: number, oldVal?: number, newTimestamp?: number, oldTimestamp?: number) => {
261
+ if (isPresent(newVal) && isPresent(oldVal) && newTimestamp && oldTimestamp) {
262
+ return ((newVal as number) - (oldVal as number)) / (newTimestamp - oldTimestamp);
263
+ } else {
264
+ return 0;
265
+ }
266
+ };
@@ -1,5 +1,5 @@
1
1
  import { HMSException } from './error';
2
- import { DeviceMap } from '../hmsSDKStore/sdkTypes';
2
+ import { DeviceMap } from '../interfaces';
3
3
 
4
4
  export type { DeviceMap };
5
5
 
@@ -11,4 +11,3 @@ export * from './device-change';
11
11
  export * from './playlist';
12
12
  export * from './session-store';
13
13
  export * from './playlist-selectors';
14
- export * from './interactivity-center';
@@ -36,4 +36,6 @@ export interface HMSMessageInput {
36
36
  recipientRoles?: HMSRoleName[];
37
37
  type?: string;
38
38
  message: any;
39
+ id: string;
40
+ time: number;
39
41
  }
@@ -1,10 +1,10 @@
1
- import { HMSPoll } from '@100mslive/hms-video';
2
1
  import { HMSDeviceChangeEvent } from './device-change';
3
2
  import { HMSException } from './error';
4
3
  import { HMSMessage } from './message';
5
4
  import { HMSPeer, HMSTrack } from './peer';
6
5
  import { HMSPlaylistItem } from './playlist';
7
6
  import { HMSChangeMultiTrackStateRequest, HMSChangeTrackStateRequest, HMSLeaveRoomRequest } from './requests';
7
+ import { HMSPoll } from '../internal';
8
8
 
9
9
  interface BaseNotification {
10
10
  id: number;
@@ -4,7 +4,7 @@ import {
4
4
  HMSSimulcastLayer,
5
5
  HMSSimulcastLayerDefinition,
6
6
  ScreenCaptureHandle,
7
- } from '../hmsSDKStore/sdkTypes';
7
+ } from '../interfaces';
8
8
 
9
9
  export type HMSPeerID = string;
10
10
  export type HMSTrackID = string;
@@ -1,4 +1,4 @@
1
- import type { HMSRole } from '@100mslive/hms-video';
1
+ import type { HMSRole } from '../interfaces';
2
2
 
3
3
  export type HMSRoleName = string;
4
4
 
@@ -1,5 +1,5 @@
1
- import { HLSVariant, HMSHLS, HMSRecording, HMSRTMP } from '@100mslive/hms-video';
2
1
  import { HMSPeerID } from './peer';
2
+ import { HLSVariant, HMSHLS, HMSRecording, HMSRTMP } from '../interfaces';
3
3
 
4
4
  export type { HMSRecording, HMSRTMP, HMSHLS, HLSVariant };
5
5
  export type HMSRoomID = string;
@@ -6,14 +6,7 @@ import { HMSRoleChangeStoreRequest } from './requests';
6
6
  import { HMSRole } from './role';
7
7
  import { HMSRoom, HMSRoomState } from './room';
8
8
  import { HMSMediaSettings } from './settings';
9
- import {
10
- DeviceMap,
11
- HMSConnectionQuality,
12
- HMSPeerStats,
13
- HMSPoll,
14
- HMSTrackStats,
15
- HMSWhiteboard,
16
- } from '../hmsSDKStore/sdkTypes';
9
+ import { DeviceMap, HMSConnectionQuality, HMSPeerStats, HMSPoll, HMSTrackStats, HMSWhiteboard } from '../interfaces';
17
10
 
18
11
  export interface HMSGenericTypes {
19
12
  sessionStore: Record<string, any>;
@@ -0,0 +1,73 @@
1
+ import { HMSRemotePeer } from './models/peer';
2
+ import { Store } from './store';
3
+ import { HMSPeerListIteratorOptions } from '../interfaces/peer-list-iterator';
4
+ import { PeerNotificationInfo } from '../notification-manager';
5
+ import { createRemotePeer } from '../notification-manager/managers/utils';
6
+ import { PeersIterationResponse } from '../signal/interfaces';
7
+ import HMSTransport from '../transport';
8
+
9
+ export class HMSPeerListIterator {
10
+ private isEnd = false;
11
+ private iterator: string | null = null;
12
+ private total = 0;
13
+ private defaultPaginationLimit = 10;
14
+ constructor(private transport: HMSTransport, private store: Store, private options?: HMSPeerListIteratorOptions) {}
15
+
16
+ private validateConnection() {
17
+ if (!this.transport || !this.store) {
18
+ throw Error(`Use usePaginatedParticipants or hmsActions.getPeerListIterator after preview or join has happened`);
19
+ }
20
+ }
21
+
22
+ hasNext(): boolean {
23
+ return !this.isEnd;
24
+ }
25
+
26
+ getTotal(): number {
27
+ return this.total;
28
+ }
29
+
30
+ async findPeers() {
31
+ this.validateConnection();
32
+ const response = await this.transport.signal.findPeers({
33
+ ...(this.options || {}),
34
+ limit: this.options?.limit || this.defaultPaginationLimit,
35
+ });
36
+ this.updateState(response);
37
+ return this.processPeers(response.peers);
38
+ }
39
+
40
+ async next() {
41
+ this.validateConnection();
42
+ let response: PeersIterationResponse;
43
+ if (!this.iterator && !this.isEnd) {
44
+ return await this.findPeers();
45
+ } else if (this.iterator) {
46
+ response = await this.transport.signal.peerIterNext({
47
+ iterator: this.iterator,
48
+ limit: this.options?.limit || this.defaultPaginationLimit,
49
+ });
50
+ this.updateState(response);
51
+ return this.processPeers(response.peers);
52
+ }
53
+ return [];
54
+ }
55
+
56
+ private processPeers(peers: PeerNotificationInfo[]) {
57
+ const hmsPeers: HMSRemotePeer[] = [];
58
+ peers.forEach(peer => {
59
+ const hmsPeer = createRemotePeer(peer, this.store);
60
+ hmsPeers.push(hmsPeer);
61
+ });
62
+ return hmsPeers;
63
+ }
64
+
65
+ private updateState(response: PeersIterationResponse) {
66
+ this.isEnd = response.eof;
67
+ this.total = response.total;
68
+ // iterator is only received once in findpeer - reuse the same iterator
69
+ if (response.iterator) {
70
+ this.iterator = response.iterator;
71
+ }
72
+ }
73
+ }