@microsoft/live-share-media 2.0.0-internal.4 → 2.0.0-internal.6

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 (329) hide show
  1. package/.mocharc.cjs +12 -0
  2. package/.nycrc.json +1 -1
  3. package/README.md +30 -31
  4. package/bin/cjs/IMediaPlayer.d.ts.map +1 -0
  5. package/bin/cjs/IMediaPlayer.js.map +1 -0
  6. package/bin/{LiveMediaSession.d.ts → cjs/LiveMediaSession.d.ts} +16 -9
  7. package/bin/cjs/LiveMediaSession.d.ts.map +1 -0
  8. package/bin/{LiveMediaSession.js → cjs/LiveMediaSession.js} +31 -25
  9. package/bin/cjs/LiveMediaSession.js.map +1 -0
  10. package/bin/{LiveMediaSessionCoordinator.d.ts → cjs/LiveMediaSessionCoordinator.d.ts} +5 -4
  11. package/bin/cjs/LiveMediaSessionCoordinator.d.ts.map +1 -0
  12. package/bin/{LiveMediaSessionCoordinator.js → cjs/LiveMediaSessionCoordinator.js} +60 -50
  13. package/bin/cjs/LiveMediaSessionCoordinator.js.map +1 -0
  14. package/bin/{LiveMediaSessionCoordinatorSuspension.d.ts → cjs/LiveMediaSessionCoordinatorSuspension.d.ts} +1 -1
  15. package/bin/cjs/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -0
  16. package/bin/cjs/LiveMediaSessionCoordinatorSuspension.js.map +1 -0
  17. package/bin/{MediaPlayerSynchronizer.d.ts → cjs/MediaPlayerSynchronizer.d.ts} +7 -6
  18. package/bin/cjs/MediaPlayerSynchronizer.d.ts.map +1 -0
  19. package/bin/{MediaPlayerSynchronizer.js → cjs/MediaPlayerSynchronizer.js} +36 -36
  20. package/bin/cjs/MediaPlayerSynchronizer.js.map +1 -0
  21. package/bin/{MediaSessionActionThrottler.d.ts → cjs/MediaSessionActionThrottler.d.ts} +1 -1
  22. package/bin/cjs/MediaSessionActionThrottler.d.ts.map +1 -0
  23. package/bin/cjs/MediaSessionActionThrottler.js.map +1 -0
  24. package/bin/cjs/MediaSessionExtensions.d.ts.map +1 -0
  25. package/bin/cjs/MediaSessionExtensions.js.map +1 -0
  26. package/bin/{RepeatedActionThrottler.d.ts → cjs/RepeatedActionThrottler.d.ts} +2 -2
  27. package/bin/cjs/RepeatedActionThrottler.d.ts.map +1 -0
  28. package/bin/{RepeatedActionThrottler.js → cjs/RepeatedActionThrottler.js} +2 -2
  29. package/bin/cjs/RepeatedActionThrottler.js.map +1 -0
  30. package/bin/{VolumeManager.d.ts → cjs/VolumeManager.d.ts} +6 -6
  31. package/bin/cjs/VolumeManager.d.ts.map +1 -0
  32. package/bin/{VolumeManager.js → cjs/VolumeManager.js} +5 -5
  33. package/bin/cjs/VolumeManager.js.map +1 -0
  34. package/bin/cjs/index.d.ts +14 -0
  35. package/bin/cjs/index.d.ts.map +1 -0
  36. package/bin/{internals → cjs}/index.js +9 -8
  37. package/bin/cjs/index.js.map +1 -0
  38. package/bin/{internals → cjs/internals}/GroupCoordinatorState.d.ts +10 -9
  39. package/bin/cjs/internals/GroupCoordinatorState.d.ts.map +1 -0
  40. package/bin/{internals → cjs/internals}/GroupCoordinatorState.js +44 -44
  41. package/bin/cjs/internals/GroupCoordinatorState.js.map +1 -0
  42. package/bin/{internals → cjs/internals}/GroupPlaybackPosition.d.ts +5 -4
  43. package/bin/cjs/internals/GroupPlaybackPosition.d.ts.map +1 -0
  44. package/bin/{internals → cjs/internals}/GroupPlaybackPosition.js +2 -2
  45. package/bin/cjs/internals/GroupPlaybackPosition.js.map +1 -0
  46. package/bin/{internals → cjs/internals}/GroupPlaybackRate.d.ts +2 -2
  47. package/bin/cjs/internals/GroupPlaybackRate.d.ts.map +1 -0
  48. package/bin/cjs/internals/GroupPlaybackRate.js.map +1 -0
  49. package/bin/{internals → cjs/internals}/GroupPlaybackTrack.d.ts +3 -3
  50. package/bin/cjs/internals/GroupPlaybackTrack.d.ts.map +1 -0
  51. package/bin/cjs/internals/GroupPlaybackTrack.js.map +1 -0
  52. package/bin/{internals → cjs/internals}/GroupPlaybackTrackData.d.ts +3 -3
  53. package/bin/cjs/internals/GroupPlaybackTrackData.d.ts.map +1 -0
  54. package/bin/{internals → cjs/internals}/GroupPlaybackTrackData.js +2 -2
  55. package/bin/cjs/internals/GroupPlaybackTrackData.js.map +1 -0
  56. package/bin/{internals → cjs/internals}/GroupTransportState.d.ts +6 -6
  57. package/bin/cjs/internals/GroupTransportState.d.ts.map +1 -0
  58. package/bin/{internals → cjs/internals}/GroupTransportState.js +2 -2
  59. package/bin/cjs/internals/GroupTransportState.js.map +1 -0
  60. package/bin/cjs/internals/consts.d.ts.map +1 -0
  61. package/bin/cjs/internals/consts.js.map +1 -0
  62. package/bin/cjs/internals/errors.d.ts.map +1 -0
  63. package/bin/cjs/internals/errors.js.map +1 -0
  64. package/bin/{internals → cjs/internals}/interfaces.d.ts +2 -2
  65. package/bin/cjs/internals/interfaces.d.ts.map +1 -0
  66. package/bin/{internals → cjs/internals}/interfaces.js.map +1 -1
  67. package/bin/cjs/package.json +1 -0
  68. package/bin/esm/IMediaPlayer.d.ts +21 -0
  69. package/bin/esm/IMediaPlayer.d.ts.map +1 -0
  70. package/bin/esm/IMediaPlayer.js +6 -0
  71. package/bin/esm/IMediaPlayer.js.map +1 -0
  72. package/bin/esm/LiveMediaSession.d.ts +97 -0
  73. package/bin/esm/LiveMediaSession.d.ts.map +1 -0
  74. package/bin/esm/LiveMediaSession.js +257 -0
  75. package/bin/esm/LiveMediaSession.js.map +1 -0
  76. package/bin/esm/LiveMediaSessionCoordinator.d.ts +273 -0
  77. package/bin/esm/LiveMediaSessionCoordinator.d.ts.map +1 -0
  78. package/bin/esm/LiveMediaSessionCoordinator.js +475 -0
  79. package/bin/esm/LiveMediaSessionCoordinator.js.map +1 -0
  80. package/bin/esm/LiveMediaSessionCoordinatorSuspension.d.ts +20 -0
  81. package/bin/esm/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -0
  82. package/bin/esm/LiveMediaSessionCoordinatorSuspension.js +24 -0
  83. package/bin/esm/LiveMediaSessionCoordinatorSuspension.js.map +1 -0
  84. package/bin/esm/MediaPlayerSynchronizer.d.ts +204 -0
  85. package/bin/esm/MediaPlayerSynchronizer.d.ts.map +1 -0
  86. package/bin/esm/MediaPlayerSynchronizer.js +570 -0
  87. package/bin/esm/MediaPlayerSynchronizer.js.map +1 -0
  88. package/bin/esm/MediaSessionActionThrottler.d.ts +12 -0
  89. package/bin/esm/MediaSessionActionThrottler.d.ts.map +1 -0
  90. package/bin/esm/MediaSessionActionThrottler.js +10 -0
  91. package/bin/esm/MediaSessionActionThrottler.js.map +1 -0
  92. package/bin/esm/MediaSessionExtensions.d.ts +177 -0
  93. package/bin/esm/MediaSessionExtensions.d.ts.map +1 -0
  94. package/bin/esm/MediaSessionExtensions.js +23 -0
  95. package/bin/esm/MediaSessionExtensions.js.map +1 -0
  96. package/bin/esm/RepeatedActionThrottler.d.ts +20 -0
  97. package/bin/esm/RepeatedActionThrottler.d.ts.map +1 -0
  98. package/bin/esm/RepeatedActionThrottler.js +59 -0
  99. package/bin/esm/RepeatedActionThrottler.js.map +1 -0
  100. package/bin/esm/VolumeManager.d.ts +84 -0
  101. package/bin/esm/VolumeManager.d.ts.map +1 -0
  102. package/bin/esm/VolumeManager.js +171 -0
  103. package/bin/esm/VolumeManager.js.map +1 -0
  104. package/bin/esm/index.d.ts +14 -0
  105. package/bin/esm/index.d.ts.map +1 -0
  106. package/bin/esm/index.js +14 -0
  107. package/bin/esm/index.js.map +1 -0
  108. package/bin/esm/internals/GroupCoordinatorState.d.ts +109 -0
  109. package/bin/esm/internals/GroupCoordinatorState.d.ts.map +1 -0
  110. package/bin/esm/internals/GroupCoordinatorState.js +512 -0
  111. package/bin/esm/internals/GroupCoordinatorState.js.map +1 -0
  112. package/bin/esm/internals/GroupPlaybackPosition.d.ts +71 -0
  113. package/bin/esm/internals/GroupPlaybackPosition.d.ts.map +1 -0
  114. package/bin/esm/internals/GroupPlaybackPosition.js +166 -0
  115. package/bin/esm/internals/GroupPlaybackPosition.js.map +1 -0
  116. package/bin/esm/internals/GroupPlaybackRate.d.ts +38 -0
  117. package/bin/esm/internals/GroupPlaybackRate.d.ts.map +1 -0
  118. package/bin/esm/internals/GroupPlaybackRate.js +55 -0
  119. package/bin/esm/internals/GroupPlaybackRate.js.map +1 -0
  120. package/bin/esm/internals/GroupPlaybackTrack.d.ts +45 -0
  121. package/bin/esm/internals/GroupPlaybackTrack.d.ts.map +1 -0
  122. package/bin/esm/internals/GroupPlaybackTrack.js +118 -0
  123. package/bin/esm/internals/GroupPlaybackTrack.js.map +1 -0
  124. package/bin/esm/internals/GroupPlaybackTrackData.d.ts +40 -0
  125. package/bin/esm/internals/GroupPlaybackTrackData.d.ts.map +1 -0
  126. package/bin/esm/internals/GroupPlaybackTrackData.js +66 -0
  127. package/bin/esm/internals/GroupPlaybackTrackData.js.map +1 -0
  128. package/bin/esm/internals/GroupTransportState.d.ts +52 -0
  129. package/bin/esm/internals/GroupTransportState.d.ts.map +1 -0
  130. package/bin/esm/internals/GroupTransportState.js +116 -0
  131. package/bin/esm/internals/GroupTransportState.js.map +1 -0
  132. package/bin/esm/internals/consts.d.ts +83 -0
  133. package/bin/esm/internals/consts.d.ts.map +1 -0
  134. package/bin/esm/internals/consts.js +89 -0
  135. package/bin/esm/internals/consts.js.map +1 -0
  136. package/bin/esm/internals/errors.d.ts +17 -0
  137. package/bin/esm/internals/errors.d.ts.map +1 -0
  138. package/bin/esm/internals/errors.js +29 -0
  139. package/bin/esm/internals/errors.js.map +1 -0
  140. package/bin/esm/internals/interfaces.d.ts +23 -0
  141. package/bin/esm/internals/interfaces.d.ts.map +1 -0
  142. package/bin/esm/internals/interfaces.js +2 -0
  143. package/bin/esm/internals/interfaces.js.map +1 -0
  144. package/bin/test/IMediaPlayer.d.ts +21 -0
  145. package/bin/test/IMediaPlayer.d.ts.map +1 -0
  146. package/bin/test/IMediaPlayer.js +7 -0
  147. package/bin/test/IMediaPlayer.js.map +1 -0
  148. package/bin/test/LiveMediaSession.d.ts +97 -0
  149. package/bin/test/LiveMediaSession.d.ts.map +1 -0
  150. package/bin/test/LiveMediaSession.js +261 -0
  151. package/bin/test/LiveMediaSession.js.map +1 -0
  152. package/bin/test/LiveMediaSessionCoordinator.d.ts +273 -0
  153. package/bin/test/LiveMediaSessionCoordinator.d.ts.map +1 -0
  154. package/bin/test/LiveMediaSessionCoordinator.js +479 -0
  155. package/bin/test/LiveMediaSessionCoordinator.js.map +1 -0
  156. package/bin/test/LiveMediaSessionCoordinatorSuspension.d.ts +20 -0
  157. package/bin/test/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -0
  158. package/bin/test/LiveMediaSessionCoordinatorSuspension.js +28 -0
  159. package/bin/test/LiveMediaSessionCoordinatorSuspension.js.map +1 -0
  160. package/bin/test/MediaPlayerSynchronizer.d.ts +204 -0
  161. package/bin/test/MediaPlayerSynchronizer.d.ts.map +1 -0
  162. package/bin/test/MediaPlayerSynchronizer.js +574 -0
  163. package/bin/test/MediaPlayerSynchronizer.js.map +1 -0
  164. package/bin/test/MediaSessionActionThrottler.d.ts +12 -0
  165. package/bin/test/MediaSessionActionThrottler.d.ts.map +1 -0
  166. package/bin/test/MediaSessionActionThrottler.js +14 -0
  167. package/bin/test/MediaSessionActionThrottler.js.map +1 -0
  168. package/bin/test/MediaSessionExtensions.d.ts +177 -0
  169. package/bin/test/MediaSessionExtensions.d.ts.map +1 -0
  170. package/bin/test/MediaSessionExtensions.js +26 -0
  171. package/bin/test/MediaSessionExtensions.js.map +1 -0
  172. package/bin/test/RepeatedActionThrottler.d.ts +20 -0
  173. package/bin/test/RepeatedActionThrottler.d.ts.map +1 -0
  174. package/bin/test/RepeatedActionThrottler.js +63 -0
  175. package/bin/test/RepeatedActionThrottler.js.map +1 -0
  176. package/bin/test/VolumeManager.d.ts +84 -0
  177. package/bin/test/VolumeManager.d.ts.map +1 -0
  178. package/bin/test/VolumeManager.js +175 -0
  179. package/bin/test/VolumeManager.js.map +1 -0
  180. package/bin/test/index.d.ts +14 -0
  181. package/bin/test/index.d.ts.map +1 -0
  182. package/bin/{index.js → test/index.js} +9 -9
  183. package/bin/test/index.js.map +1 -0
  184. package/bin/test/internals/GroupCoordinatorState.d.ts +109 -0
  185. package/bin/test/internals/GroupCoordinatorState.d.ts.map +1 -0
  186. package/bin/test/internals/GroupCoordinatorState.js +516 -0
  187. package/bin/test/internals/GroupCoordinatorState.js.map +1 -0
  188. package/bin/test/internals/GroupPlaybackPosition.d.ts +71 -0
  189. package/bin/test/internals/GroupPlaybackPosition.d.ts.map +1 -0
  190. package/bin/test/internals/GroupPlaybackPosition.js +170 -0
  191. package/bin/test/internals/GroupPlaybackPosition.js.map +1 -0
  192. package/bin/test/internals/GroupPlaybackRate.d.ts +38 -0
  193. package/bin/test/internals/GroupPlaybackRate.d.ts.map +1 -0
  194. package/bin/test/internals/GroupPlaybackRate.js +59 -0
  195. package/bin/test/internals/GroupPlaybackRate.js.map +1 -0
  196. package/bin/test/internals/GroupPlaybackTrack.d.ts +45 -0
  197. package/bin/test/internals/GroupPlaybackTrack.d.ts.map +1 -0
  198. package/bin/test/internals/GroupPlaybackTrack.js +122 -0
  199. package/bin/test/internals/GroupPlaybackTrack.js.map +1 -0
  200. package/bin/test/internals/GroupPlaybackTrackData.d.ts +40 -0
  201. package/bin/test/internals/GroupPlaybackTrackData.d.ts.map +1 -0
  202. package/bin/test/internals/GroupPlaybackTrackData.js +70 -0
  203. package/bin/test/internals/GroupPlaybackTrackData.js.map +1 -0
  204. package/bin/test/internals/GroupTransportState.d.ts +52 -0
  205. package/bin/test/internals/GroupTransportState.d.ts.map +1 -0
  206. package/bin/test/internals/GroupTransportState.js +120 -0
  207. package/bin/test/internals/GroupTransportState.js.map +1 -0
  208. package/bin/test/internals/consts.d.ts +83 -0
  209. package/bin/test/internals/consts.d.ts.map +1 -0
  210. package/bin/test/internals/consts.js +92 -0
  211. package/bin/test/internals/consts.js.map +1 -0
  212. package/bin/test/internals/errors.d.ts +17 -0
  213. package/bin/test/internals/errors.d.ts.map +1 -0
  214. package/bin/test/internals/errors.js +34 -0
  215. package/bin/test/internals/errors.js.map +1 -0
  216. package/bin/test/internals/interfaces.d.ts +23 -0
  217. package/bin/test/internals/interfaces.d.ts.map +1 -0
  218. package/bin/test/internals/interfaces.js +3 -0
  219. package/bin/test/internals/interfaces.js.map +1 -0
  220. package/bin/test/package.json +1 -0
  221. package/bin/test/test/GroupPlaybackPosition.spec.d.ts +6 -0
  222. package/bin/test/test/GroupPlaybackPosition.spec.d.ts.map +1 -0
  223. package/bin/test/test/GroupPlaybackPosition.spec.js +314 -0
  224. package/bin/test/test/GroupPlaybackPosition.spec.js.map +1 -0
  225. package/bin/test/test/GroupPlaybackRate.spec.d.ts +6 -0
  226. package/bin/test/test/GroupPlaybackRate.spec.d.ts.map +1 -0
  227. package/bin/test/test/GroupPlaybackRate.spec.js +47 -0
  228. package/bin/test/test/GroupPlaybackRate.spec.js.map +1 -0
  229. package/bin/test/test/GroupPlaybackTrack.spec.d.ts +6 -0
  230. package/bin/test/test/GroupPlaybackTrack.spec.d.ts.map +1 -0
  231. package/bin/test/test/GroupPlaybackTrack.spec.js +171 -0
  232. package/bin/test/test/GroupPlaybackTrack.spec.js.map +1 -0
  233. package/bin/test/test/GroupPlaybackTrackData.spec.d.ts +6 -0
  234. package/bin/test/test/GroupPlaybackTrackData.spec.d.ts.map +1 -0
  235. package/bin/test/test/GroupPlaybackTrackData.spec.js +63 -0
  236. package/bin/test/test/GroupPlaybackTrackData.spec.js.map +1 -0
  237. package/bin/test/test/LiveMediaSession_ManualActionHandler.spec.d.ts +6 -0
  238. package/bin/test/test/LiveMediaSession_ManualActionHandler.spec.d.ts.map +1 -0
  239. package/bin/test/test/LiveMediaSession_ManualActionHandler.spec.js +324 -0
  240. package/bin/test/test/LiveMediaSession_ManualActionHandler.spec.js.map +1 -0
  241. package/bin/test/test/LiveMediaSession_Synchronizer.spec.d.ts +6 -0
  242. package/bin/test/test/LiveMediaSession_Synchronizer.spec.d.ts.map +1 -0
  243. package/bin/test/test/LiveMediaSession_Synchronizer.spec.js +669 -0
  244. package/bin/test/test/LiveMediaSession_Synchronizer.spec.js.map +1 -0
  245. package/bin/test/test/TestUtils.d.ts +44 -0
  246. package/bin/test/test/TestUtils.d.ts.map +1 -0
  247. package/bin/test/test/TestUtils.js +116 -0
  248. package/bin/test/test/TestUtils.js.map +1 -0
  249. package/bin/test/test/VolumeManager.spec.d.ts +2 -0
  250. package/bin/test/test/VolumeManager.spec.d.ts.map +1 -0
  251. package/bin/test/test/VolumeManager.spec.js +163 -0
  252. package/bin/test/test/VolumeManager.spec.js.map +1 -0
  253. package/nyc/junit-report.json +167 -167
  254. package/nyc/junit-report.xml +53 -53
  255. package/package.json +31 -15
  256. package/src/LiveMediaSession.ts +32 -14
  257. package/src/LiveMediaSessionCoordinator.ts +39 -27
  258. package/src/LiveMediaSessionCoordinatorSuspension.ts +1 -1
  259. package/src/MediaPlayerSynchronizer.ts +10 -10
  260. package/src/MediaSessionActionThrottler.ts +1 -1
  261. package/src/RepeatedActionThrottler.ts +2 -2
  262. package/src/VolumeManager.ts +6 -6
  263. package/src/index.ts +9 -9
  264. package/src/internals/GroupCoordinatorState.ts +15 -14
  265. package/src/internals/GroupPlaybackPosition.ts +6 -6
  266. package/src/internals/GroupPlaybackRate.ts +2 -2
  267. package/src/internals/GroupPlaybackTrack.ts +3 -3
  268. package/src/internals/GroupPlaybackTrackData.ts +3 -3
  269. package/src/internals/GroupTransportState.ts +6 -6
  270. package/src/internals/interfaces.ts +2 -2
  271. package/tsconfig.cjs.json +14 -0
  272. package/tsconfig.json +65 -74
  273. package/tsconfig.test.json +9 -0
  274. package/bin/IMediaPlayer.d.ts.map +0 -1
  275. package/bin/IMediaPlayer.js.map +0 -1
  276. package/bin/LiveMediaSession.d.ts.map +0 -1
  277. package/bin/LiveMediaSession.js.map +0 -1
  278. package/bin/LiveMediaSessionCoordinator.d.ts.map +0 -1
  279. package/bin/LiveMediaSessionCoordinator.js.map +0 -1
  280. package/bin/LiveMediaSessionCoordinatorSuspension.d.ts.map +0 -1
  281. package/bin/LiveMediaSessionCoordinatorSuspension.js.map +0 -1
  282. package/bin/MediaPlayerSynchronizer.d.ts.map +0 -1
  283. package/bin/MediaPlayerSynchronizer.js.map +0 -1
  284. package/bin/MediaSessionActionThrottler.d.ts.map +0 -1
  285. package/bin/MediaSessionActionThrottler.js.map +0 -1
  286. package/bin/MediaSessionExtensions.d.ts.map +0 -1
  287. package/bin/MediaSessionExtensions.js.map +0 -1
  288. package/bin/RepeatedActionThrottler.d.ts.map +0 -1
  289. package/bin/RepeatedActionThrottler.js.map +0 -1
  290. package/bin/VolumeManager.d.ts.map +0 -1
  291. package/bin/VolumeManager.js.map +0 -1
  292. package/bin/index.d.ts +0 -14
  293. package/bin/index.d.ts.map +0 -1
  294. package/bin/index.js.map +0 -1
  295. package/bin/internals/GroupCoordinatorState.d.ts.map +0 -1
  296. package/bin/internals/GroupCoordinatorState.js.map +0 -1
  297. package/bin/internals/GroupPlaybackPosition.d.ts.map +0 -1
  298. package/bin/internals/GroupPlaybackPosition.js.map +0 -1
  299. package/bin/internals/GroupPlaybackRate.d.ts.map +0 -1
  300. package/bin/internals/GroupPlaybackRate.js.map +0 -1
  301. package/bin/internals/GroupPlaybackTrack.d.ts.map +0 -1
  302. package/bin/internals/GroupPlaybackTrack.js.map +0 -1
  303. package/bin/internals/GroupPlaybackTrackData.d.ts.map +0 -1
  304. package/bin/internals/GroupPlaybackTrackData.js.map +0 -1
  305. package/bin/internals/GroupTransportState.d.ts.map +0 -1
  306. package/bin/internals/GroupTransportState.js.map +0 -1
  307. package/bin/internals/consts.d.ts.map +0 -1
  308. package/bin/internals/consts.js.map +0 -1
  309. package/bin/internals/errors.d.ts.map +0 -1
  310. package/bin/internals/errors.js.map +0 -1
  311. package/bin/internals/index.d.ts +0 -13
  312. package/bin/internals/index.d.ts.map +0 -1
  313. package/bin/internals/index.js.map +0 -1
  314. package/bin/internals/interfaces.d.ts.map +0 -1
  315. package/src/internals/index.ts +0 -13
  316. package/tsconfig.build.json +0 -9
  317. /package/bin/{IMediaPlayer.d.ts → cjs/IMediaPlayer.d.ts} +0 -0
  318. /package/bin/{IMediaPlayer.js → cjs/IMediaPlayer.js} +0 -0
  319. /package/bin/{LiveMediaSessionCoordinatorSuspension.js → cjs/LiveMediaSessionCoordinatorSuspension.js} +0 -0
  320. /package/bin/{MediaSessionActionThrottler.js → cjs/MediaSessionActionThrottler.js} +0 -0
  321. /package/bin/{MediaSessionExtensions.d.ts → cjs/MediaSessionExtensions.d.ts} +0 -0
  322. /package/bin/{MediaSessionExtensions.js → cjs/MediaSessionExtensions.js} +0 -0
  323. /package/bin/{internals → cjs/internals}/GroupPlaybackRate.js +0 -0
  324. /package/bin/{internals → cjs/internals}/GroupPlaybackTrack.js +0 -0
  325. /package/bin/{internals → cjs/internals}/consts.d.ts +0 -0
  326. /package/bin/{internals → cjs/internals}/consts.js +0 -0
  327. /package/bin/{internals → cjs/internals}/errors.d.ts +0 -0
  328. /package/bin/{internals → cjs/internals}/errors.js +0 -0
  329. /package/bin/{internals → cjs/internals}/interfaces.js +0 -0
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the Microsoft Live Share SDK License.
4
+ */
5
+ import { ILiveEvent, TimeInterval, IEvent } from "@microsoft/live-share";
6
+ import { IRuntimeSignaler, LiveShareRuntime } from "@microsoft/live-share/internal";
7
+ import { ExtendedMediaMetadata, CoordinationWaitPoint, ExtendedMediaSessionPlaybackState, ExtendedMediaSessionActionDetails } from "../MediaSessionExtensions.js";
8
+ import { GroupPlaybackTrack, IPlaybackTrack } from "./GroupPlaybackTrack.js";
9
+ import { GroupTransportState, ITransportState } from "./GroupTransportState.js";
10
+ import { GroupPlaybackPosition } from "./GroupPlaybackPosition.js";
11
+ import { IMediaPlayerState } from "../LiveMediaSessionCoordinator.js";
12
+ import { GroupPlaybackTrackData, IPlaybackTrackData } from "./GroupPlaybackTrackData.js";
13
+ import { GroupPlaybackRate, IPlaybackRate } from "./GroupPlaybackRate.js";
14
+ import { TypedEventEmitter } from "@fluid-internal/client-utils";
15
+ import { IGenericTypedEvents } from "./interfaces.js";
16
+ /**
17
+ * @hidden
18
+ */
19
+ export interface IPositionUpdateEvent {
20
+ track: IPlaybackTrack;
21
+ trackData: IPlaybackTrackData;
22
+ transport: ITransportState;
23
+ playbackRate: IPlaybackRate;
24
+ playbackState: ExtendedMediaSessionPlaybackState;
25
+ position: number;
26
+ waitPoint?: CoordinationWaitPoint;
27
+ }
28
+ /**
29
+ * @hidden
30
+ */
31
+ export interface ITransportCommandEvent {
32
+ track: IPlaybackTrack;
33
+ position: number;
34
+ }
35
+ /**
36
+ * @hidden
37
+ */
38
+ export interface IRateChangeCommandEvent {
39
+ playbackRate: number;
40
+ }
41
+ /**
42
+ * @hidden
43
+ */
44
+ export interface ISetTrackEvent {
45
+ metadata: ExtendedMediaMetadata | null;
46
+ waitPoints: CoordinationWaitPoint[];
47
+ }
48
+ /**
49
+ * @hidden
50
+ */
51
+ export interface ISetTrackDataEvent {
52
+ data: object | null;
53
+ }
54
+ /**
55
+ * @hidden
56
+ */
57
+ export interface ITriggerActionEvent extends IEvent {
58
+ details: ExtendedMediaSessionActionDetails;
59
+ }
60
+ /**
61
+ * @hidden
62
+ */
63
+ export declare enum GroupCoordinatorStateEvents {
64
+ newwaitpoint = "newwaitpoint",
65
+ triggeraction = "triggeraction",
66
+ triggeractionignored = "triggeractionignored"
67
+ }
68
+ /**
69
+ * @hidden
70
+ */
71
+ export declare class GroupCoordinatorState extends TypedEventEmitter<IGenericTypedEvents> {
72
+ private readonly _runtime;
73
+ private readonly _liveRuntime;
74
+ private readonly _logger;
75
+ private readonly _maxPlaybackDrift;
76
+ private _getMediaPlayerState;
77
+ private _playbackTrack;
78
+ private _playbackTrackData;
79
+ private _transportState;
80
+ private _playbackPosition;
81
+ private _playbackRate;
82
+ private _suspensionCnt;
83
+ private _waitPoint?;
84
+ private _lastStateChange;
85
+ private _lastStateChangeTime;
86
+ constructor(runtime: IRuntimeSignaler, liveRuntime: LiveShareRuntime, maxPlaybackDrift: TimeInterval, positionUpdateInterval: TimeInterval, getMediaPlayerState: () => IMediaPlayerState);
87
+ get playbackTrack(): GroupPlaybackTrack;
88
+ get playbackTrackData(): GroupPlaybackTrackData;
89
+ get transportState(): GroupTransportState;
90
+ get playbackPosition(): GroupPlaybackPosition;
91
+ get playbackRate(): GroupPlaybackRate;
92
+ get waitingAt(): CoordinationWaitPoint | undefined;
93
+ get isSuspended(): boolean;
94
+ get isWaiting(): boolean;
95
+ beginSuspension(waitPoint?: CoordinationWaitPoint): void;
96
+ endSuspension(syncState: boolean): void;
97
+ createPositionUpdateEvent(state: IMediaPlayerState): IPositionUpdateEvent;
98
+ handleSetTrack(event: ILiveEvent<ISetTrackEvent>, local: boolean): void;
99
+ handleSetTrackData(event: ILiveEvent<ISetTrackDataEvent>, local: boolean): void;
100
+ handleRateChangeCommand(event: ILiveEvent<IRateChangeCommandEvent>, local: boolean): void;
101
+ handleTransportCommand(event: ILiveEvent<ITransportCommandEvent>, local: boolean): void;
102
+ handlePositionUpdate(event: ILiveEvent<IPositionUpdateEvent>, local: boolean): void;
103
+ syncLocalMediaSession(): Promise<void>;
104
+ private emitSetTrack;
105
+ private emitTriggerActionOrIgnored;
106
+ private emitTriggerAction;
107
+ private emitTriggerActionIgnored;
108
+ }
109
+ //# sourceMappingURL=GroupCoordinatorState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupCoordinatorState.d.ts","sourceRoot":"","sources":["../../../src/internals/GroupCoordinatorState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,516 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Microsoft Corporation. All rights reserved.
4
+ * Licensed under the Microsoft Live Share SDK License.
5
+ */
6
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8
+ return new (P || (P = Promise))(function (resolve, reject) {
9
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
10
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
11
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
12
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
13
+ });
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.GroupCoordinatorState = exports.GroupCoordinatorStateEvents = void 0;
17
+ const live_share_1 = require("@microsoft/live-share");
18
+ const internal_1 = require("@microsoft/live-share/internal");
19
+ const GroupPlaybackTrack_js_1 = require("./GroupPlaybackTrack.js");
20
+ const GroupTransportState_js_1 = require("./GroupTransportState.js");
21
+ const GroupPlaybackPosition_js_1 = require("./GroupPlaybackPosition.js");
22
+ const GroupTransportState_js_2 = require("./GroupTransportState.js");
23
+ const GroupPlaybackTrackData_js_1 = require("./GroupPlaybackTrackData.js");
24
+ const consts_js_1 = require("./consts.js");
25
+ const GroupPlaybackRate_js_1 = require("./GroupPlaybackRate.js");
26
+ const client_utils_1 = require("@fluid-internal/client-utils");
27
+ /**
28
+ * @hidden
29
+ */
30
+ var GroupCoordinatorStateEvents;
31
+ (function (GroupCoordinatorStateEvents) {
32
+ GroupCoordinatorStateEvents["newwaitpoint"] = "newwaitpoint";
33
+ GroupCoordinatorStateEvents["triggeraction"] = "triggeraction";
34
+ GroupCoordinatorStateEvents["triggeractionignored"] = "triggeractionignored";
35
+ })(GroupCoordinatorStateEvents || (exports.GroupCoordinatorStateEvents = GroupCoordinatorStateEvents = {}));
36
+ /**
37
+ * @hidden
38
+ */
39
+ class GroupCoordinatorState extends client_utils_1.TypedEventEmitter {
40
+ constructor(runtime, liveRuntime, maxPlaybackDrift, positionUpdateInterval, getMediaPlayerState) {
41
+ super();
42
+ // Suspension tracking
43
+ this._suspensionCnt = 0;
44
+ // "Soft Suspension" tracking
45
+ // - Soft suspensions temporarily disconnect the local media session when transitioning between
46
+ // paused, playing, and none states. This is to give the local client time to finish any inprogress
47
+ // operations like sending a transport command or ending a suspension.
48
+ this._lastStateChange = "none";
49
+ this._lastStateChangeTime = 0;
50
+ this._runtime = runtime;
51
+ this._liveRuntime = liveRuntime;
52
+ this._logger = new live_share_1.LiveTelemetryLogger(runtime, liveRuntime);
53
+ this._maxPlaybackDrift = maxPlaybackDrift;
54
+ this._playbackTrack = new GroupPlaybackTrack_js_1.GroupPlaybackTrack(getMediaPlayerState);
55
+ this._playbackTrackData = new GroupPlaybackTrackData_js_1.GroupPlaybackTrackData(this._playbackTrack);
56
+ this._playbackRate = new GroupPlaybackRate_js_1.GroupPlaybackRate();
57
+ this._transportState = new GroupTransportState_js_1.GroupTransportState(this._playbackTrack, this._playbackRate, getMediaPlayerState, this._liveRuntime);
58
+ this._playbackPosition = new GroupPlaybackPosition_js_1.GroupPlaybackPosition(this._transportState, this._playbackRate, this._runtime, this._liveRuntime, positionUpdateInterval);
59
+ this._getMediaPlayerState = getMediaPlayerState;
60
+ // Listen track related events
61
+ this._playbackTrack.on(GroupPlaybackTrack_js_1.GroupPlaybackTrackEvents.trackChange, (evt) => {
62
+ if (!this.isSuspended) {
63
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.GroupCoordinator.TrackChanged);
64
+ this.emitSetTrack(evt.clientId, evt.metadata, evt.source);
65
+ }
66
+ else {
67
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.GroupCoordinator.TrackChangeDelayed);
68
+ }
69
+ });
70
+ // Listen for track data changes
71
+ this._playbackTrackData.on(GroupPlaybackTrackData_js_1.PlaybackTrackDataEvents.dataChange, (evt) => __awaiter(this, void 0, void 0, function* () {
72
+ if (!this.isSuspended && !this.isWaiting) {
73
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.GroupCoordinator.TrackDataChanged);
74
+ }
75
+ else {
76
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.GroupCoordinator.TrackDataChangeDelayed);
77
+ }
78
+ const clientId = yield (0, internal_1.waitUntilConnected)(this._runtime);
79
+ this.emitTriggerActionOrIgnored({
80
+ action: "datachange",
81
+ source: evt.source,
82
+ data: evt.data,
83
+ clientId: evt.clientId,
84
+ local: evt.clientId === clientId,
85
+ });
86
+ }));
87
+ this._playbackRate.on(GroupPlaybackRate_js_1.PlaybackRateEvents.rateChange, (evt) => __awaiter(this, void 0, void 0, function* () {
88
+ if (!this.isSuspended && !this.isWaiting) {
89
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.GroupCoordinator.PlaybackRateChanged);
90
+ }
91
+ else {
92
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.GroupCoordinator
93
+ .PlaybackRateChangedDelayed);
94
+ }
95
+ const localClientId = yield (0, internal_1.waitUntilConnected)(this._runtime);
96
+ const local = evt.clientId === localClientId;
97
+ this.emitTriggerActionOrIgnored({
98
+ action: "ratechange",
99
+ source: evt.source,
100
+ clientId: evt.clientId,
101
+ local,
102
+ playbackRate: evt.playbackRate,
103
+ });
104
+ }));
105
+ // Listen to transport related events
106
+ this._transportState.on(GroupTransportState_js_2.GroupTransportStateEvents.transportStateChange, (evt) => __awaiter(this, void 0, void 0, function* () {
107
+ const tag = this.isSuspended || this.isWaiting
108
+ ? consts_js_1.TelemetryEvents.GroupCoordinator
109
+ .TransportStateChangeDelayed
110
+ : consts_js_1.TelemetryEvents.GroupCoordinator
111
+ .TransportStateChanged;
112
+ this._logger.sendTelemetryEvent(tag, null, {
113
+ action: evt.action,
114
+ seekTime: evt.seekTime,
115
+ });
116
+ const localClientId = yield (0, internal_1.waitUntilConnected)(this._runtime);
117
+ const local = evt.clientId === localClientId;
118
+ // Trigger action
119
+ switch (evt.action) {
120
+ case "play":
121
+ this.emitTriggerActionOrIgnored({
122
+ action: "play",
123
+ source: evt.source,
124
+ clientId: evt.clientId,
125
+ local,
126
+ seekTime: evt.seekTime,
127
+ });
128
+ break;
129
+ case "pause":
130
+ this.emitTriggerActionOrIgnored({
131
+ action: "pause",
132
+ source: evt.source,
133
+ clientId: evt.clientId,
134
+ local,
135
+ seekTime: evt.seekTime,
136
+ });
137
+ break;
138
+ case "seekto":
139
+ this.emitTriggerActionOrIgnored({
140
+ action: "seekto",
141
+ source: evt.source,
142
+ clientId: evt.clientId,
143
+ local,
144
+ seekTime: evt.seekTime,
145
+ });
146
+ break;
147
+ }
148
+ }));
149
+ }
150
+ get playbackTrack() {
151
+ return this._playbackTrack;
152
+ }
153
+ get playbackTrackData() {
154
+ return this._playbackTrackData;
155
+ }
156
+ get transportState() {
157
+ return this._transportState;
158
+ }
159
+ get playbackPosition() {
160
+ return this._playbackPosition;
161
+ }
162
+ get playbackRate() {
163
+ return this._playbackRate;
164
+ }
165
+ get waitingAt() {
166
+ return this._waitPoint;
167
+ }
168
+ get isSuspended() {
169
+ return this._suspensionCnt > 0;
170
+ }
171
+ get isWaiting() {
172
+ return !!this._waitPoint;
173
+ }
174
+ beginSuspension(waitPoint) {
175
+ this._suspensionCnt++;
176
+ if (waitPoint) {
177
+ // Save most recent wait point
178
+ this._waitPoint = waitPoint;
179
+ // Add to track state if dynamic wait point
180
+ this.playbackTrack.addWaitPoint(waitPoint);
181
+ }
182
+ }
183
+ endSuspension(syncState) {
184
+ if (this._suspensionCnt == 0) {
185
+ throw new Error(`GroupCoordinatorState:endSuspension - cannot end suspension when there are no active suspensions. The expected value is > 0 but the actual count is ${this._suspensionCnt}`);
186
+ }
187
+ this._suspensionCnt--;
188
+ if (this._suspensionCnt == 0 && syncState) {
189
+ // Sync media session to group
190
+ this.syncLocalMediaSession();
191
+ }
192
+ }
193
+ createPositionUpdateEvent(state) {
194
+ const { positionState, playbackState } = state;
195
+ if (this.isSuspended) {
196
+ // Report suspension state
197
+ return {
198
+ track: this.playbackTrack.current,
199
+ trackData: this.playbackTrackData.current,
200
+ transport: this.transportState.current,
201
+ playbackRate: this.playbackRate.current,
202
+ playbackState: "suspended",
203
+ position: (positionState === null || positionState === void 0 ? void 0 : positionState.position) || 0.0,
204
+ waitPoint: this._waitPoint,
205
+ };
206
+ }
207
+ else {
208
+ // Report current position
209
+ return {
210
+ track: this.playbackTrack.current,
211
+ trackData: this.playbackTrackData.current,
212
+ transport: this.transportState.current,
213
+ playbackRate: this.playbackRate.current,
214
+ playbackState: this._waitPoint ? "waiting" : playbackState,
215
+ position: (positionState === null || positionState === void 0 ? void 0 : positionState.position) || 0.0,
216
+ waitPoint: this._waitPoint,
217
+ };
218
+ }
219
+ }
220
+ handleSetTrack(event, local) {
221
+ // Update shared track
222
+ // - Will trigger 'trackChange' event to update media session
223
+ const updated = this.playbackTrack.updateTrack({
224
+ metadata: event.data.metadata,
225
+ waitPoints: event.data.waitPoints,
226
+ timestamp: event.timestamp,
227
+ clientId: event.clientId || "",
228
+ }, "user");
229
+ if (updated) {
230
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.RemoteSetTrackReceived, null, {
231
+ correlationId: live_share_1.LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp),
232
+ });
233
+ }
234
+ }
235
+ handleSetTrackData(event, local) {
236
+ // Update shared track data
237
+ // - Will trigger 'dataChange' event to update media session
238
+ const updated = this.playbackTrackData.updateData({
239
+ data: event.data.data,
240
+ timestamp: event.timestamp,
241
+ clientId: event.clientId || "",
242
+ }, "user");
243
+ if (updated) {
244
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.RemoteSetTrackReceived, null, {
245
+ correlationId: live_share_1.LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp),
246
+ });
247
+ }
248
+ }
249
+ handleRateChangeCommand(event, local) {
250
+ const newState = {
251
+ playbackRate: event.data.playbackRate,
252
+ clientId: event.clientId,
253
+ timestamp: event.timestamp,
254
+ };
255
+ const updated = this.playbackRate.updatePlaybackRate(newState, "user");
256
+ if (updated) {
257
+ const correlationId = live_share_1.LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp);
258
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.RemoteRateChangeReceived, null, {
259
+ correlationId: correlationId,
260
+ });
261
+ }
262
+ }
263
+ handleTransportCommand(event, local) {
264
+ // Ensure change is for current track
265
+ // - Will trigger a 'trackChange' event if newer track.
266
+ this.playbackTrack.updateTrack(event.data.track, "system");
267
+ if (this.playbackTrack.compare(event.data.track.metadata)) {
268
+ // Update playback state
269
+ let playbackState = this.transportState.playbackState;
270
+ switch (event.name) {
271
+ case "play":
272
+ playbackState = "playing";
273
+ break;
274
+ case "pause":
275
+ playbackState = "paused";
276
+ break;
277
+ }
278
+ // Try to update playback state
279
+ const newState = {
280
+ playbackState: playbackState,
281
+ startPosition: event.data.position,
282
+ timestamp: event.timestamp,
283
+ clientId: event.clientId || "",
284
+ };
285
+ const updated = this.transportState.updateState(newState, "user");
286
+ if (updated) {
287
+ const correlationId = live_share_1.LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp);
288
+ switch (event.name) {
289
+ case "play":
290
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator
291
+ .RemotePlayReceived, null, {
292
+ correlationId: correlationId,
293
+ });
294
+ break;
295
+ case "pause":
296
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator
297
+ .RemotePauseReceived, null, {
298
+ correlationId: correlationId,
299
+ });
300
+ break;
301
+ case "seekTo":
302
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator
303
+ .RemoteSeekToReceived, null, {
304
+ correlationId: correlationId,
305
+ });
306
+ break;
307
+ }
308
+ }
309
+ }
310
+ }
311
+ handlePositionUpdate(event, local) {
312
+ // Ensure change is for current track
313
+ // - Will trigger a 'trackChange' event if newer track.
314
+ this.playbackTrack.updateTrack(event.data.track, "system");
315
+ if (this.playbackTrack.compare(event.data.track.metadata)) {
316
+ // Ensure we have the latest track data
317
+ this.playbackTrackData.updateData(event.data.trackData, "system");
318
+ // Update transport state if needed
319
+ // - Ignore transport state changes if the client has ended as this will cause the local
320
+ // player to start playback even though the video may have ended for everyone.
321
+ if (event.data.playbackState != "ended") {
322
+ this.transportState.updateState(event.data.transport, "system");
323
+ }
324
+ // Ensure change is for current transport state
325
+ if (this.transportState.compare(event.data.transport)) {
326
+ // Update playback position
327
+ const position = {
328
+ playbackState: event.data.playbackState,
329
+ waitPoint: event.data.waitPoint,
330
+ position: event.data.position,
331
+ timestamp: event.timestamp,
332
+ clientId: event.clientId || "",
333
+ };
334
+ this.playbackPosition.UpdatePlaybackPosition(position);
335
+ // Ensure local media session is in sync with group
336
+ if (local && !this.isSuspended) {
337
+ // Begin a "soft suspension" on select state changes
338
+ // - This is needed because the catchup logic can try to sync the client with
339
+ // the rest of the group while the local player is trying to to seek to a
340
+ // new position.
341
+ switch (event.data.playbackState) {
342
+ case "none":
343
+ case "paused":
344
+ case "playing":
345
+ if (event.data.playbackState !=
346
+ this._lastStateChange) {
347
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.GroupCoordinator
348
+ .BeginSoftSuspension, null, { playbackState: event.data.playbackState });
349
+ this._lastStateChange =
350
+ event.data.playbackState;
351
+ this._lastStateChangeTime =
352
+ this._liveRuntime.getTimestamp();
353
+ }
354
+ break;
355
+ }
356
+ // Are we waiting?
357
+ if (this.isWaiting) {
358
+ // Check for end of waiting
359
+ if (this.playbackPosition.clientsWaiting == 0) {
360
+ this._waitPoint = undefined;
361
+ // Start syncing again
362
+ this.syncLocalMediaSession();
363
+ }
364
+ }
365
+ else {
366
+ // Sync client with group
367
+ this.syncLocalMediaSession();
368
+ }
369
+ }
370
+ }
371
+ }
372
+ }
373
+ syncLocalMediaSession() {
374
+ return __awaiter(this, void 0, void 0, function* () {
375
+ // Skip further syncs if we're waiting or in a "soft suspension".
376
+ const softSuspensionDelta = this._liveRuntime.getTimestamp() - this._lastStateChangeTime;
377
+ if (!this.isWaiting && softSuspensionDelta >= 1000) {
378
+ let { metadata, trackData, positionState, playbackState } = this._getMediaPlayerState();
379
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.GroupCoordinator.CheckingForSyncIssues);
380
+ // Check for track change
381
+ if (!this.playbackTrack.compare(metadata)) {
382
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.GroupCoordinator.TrackOutOfSync);
383
+ this.emitSetTrack(this.playbackTrack.current.clientId, this.playbackTrack.metadata, "system");
384
+ return;
385
+ }
386
+ // Once local playback has ended there's no need to further sync the client. In fact
387
+ // doing so could cause the player to loop.
388
+ // - The playbackPosition.trackEnded check is to catch late joiners and prevents syncing if everyone
389
+ // else has finished the video.
390
+ // - Should another user seek or press play after the video has ended that will cause
391
+ // a transport action to trigger which will take the player out of the ended state.
392
+ if (playbackState != "ended" &&
393
+ !this._playbackPosition.trackEnded) {
394
+ // Ensure we have a position
395
+ let position = positionState === null || positionState === void 0 ? void 0 : positionState.position;
396
+ if (position == undefined) {
397
+ position = 0.0;
398
+ }
399
+ // Check for catchup
400
+ // - Target can return -1 in cases where there is no position tracking data
401
+ const target = this.playbackPosition.targetPosition;
402
+ if (target >= 0.0 &&
403
+ Math.abs(target - position) >=
404
+ Math.max(this._maxPlaybackDrift.seconds, this._maxPlaybackDrift.seconds *
405
+ this._playbackRate.rate)) {
406
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.GroupCoordinator.PositionOutOfSync, null, {
407
+ current: position,
408
+ target: target,
409
+ });
410
+ this.emitTriggerAction({
411
+ action: "catchup",
412
+ source: "system",
413
+ clientId: yield (0, internal_1.waitUntilConnected)(this._runtime),
414
+ local: true,
415
+ seekTime: target,
416
+ });
417
+ }
418
+ const localClientId = yield (0, internal_1.waitUntilConnected)(this._runtime);
419
+ // Sync transport state
420
+ if (this.transportState.playbackState != playbackState) {
421
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.GroupCoordinator.TransportOutOfSync, null, {
422
+ current: playbackState,
423
+ target: this.transportState.playbackState,
424
+ });
425
+ const local = localClientId === this.transportState.current.clientId;
426
+ switch (this.transportState.playbackState) {
427
+ case "playing":
428
+ this.emitTriggerAction({
429
+ action: "play",
430
+ source: "system",
431
+ clientId: this.transportState.current.clientId,
432
+ local,
433
+ });
434
+ break;
435
+ case "paused":
436
+ this.emitTriggerAction({
437
+ action: "pause",
438
+ source: "system",
439
+ clientId: this.transportState.current.clientId,
440
+ local,
441
+ });
442
+ break;
443
+ }
444
+ }
445
+ // Sync track data
446
+ if (JSON.stringify(this.playbackTrackData.data) !=
447
+ JSON.stringify(trackData)) {
448
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.GroupCoordinator.TrackDataOutOfSync);
449
+ const local = localClientId ===
450
+ this.playbackTrackData.current.clientId;
451
+ this.emitTriggerAction({
452
+ action: "datachange",
453
+ source: "system",
454
+ clientId: this.playbackTrackData.current.clientId,
455
+ local,
456
+ data: this.playbackTrackData.data,
457
+ });
458
+ }
459
+ // Sync playback rate
460
+ if (this.playbackRate.rate != (positionState === null || positionState === void 0 ? void 0 : positionState.playbackRate)) {
461
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.GroupCoordinator.PlaybackRateOutOfSync);
462
+ const local = localClientId ===
463
+ this.playbackTrackData.current.clientId;
464
+ this.emitTriggerAction({
465
+ action: "ratechange",
466
+ source: "system",
467
+ clientId: this.playbackTrackData.current.clientId,
468
+ local,
469
+ playbackRate: this.playbackRate.rate,
470
+ });
471
+ }
472
+ }
473
+ }
474
+ });
475
+ }
476
+ emitSetTrack(clientId, metadata, source) {
477
+ return __awaiter(this, void 0, void 0, function* () {
478
+ // Reset tracking states
479
+ this._waitPoint = undefined;
480
+ const localClientId = yield (0, internal_1.waitUntilConnected)(this._runtime);
481
+ // Trigger settrack action
482
+ this.emitTriggerAction({
483
+ action: "settrack",
484
+ source,
485
+ clientId,
486
+ local: localClientId === clientId,
487
+ metadata,
488
+ });
489
+ });
490
+ }
491
+ emitTriggerActionOrIgnored(details) {
492
+ if (this.isSuspended || this.isWaiting) {
493
+ return this.emitTriggerActionIgnored(details);
494
+ }
495
+ else {
496
+ return this.emitTriggerAction(details);
497
+ }
498
+ }
499
+ emitTriggerAction(details) {
500
+ const evt = {
501
+ name: GroupCoordinatorStateEvents.triggeraction,
502
+ details: details,
503
+ };
504
+ this.emit(GroupCoordinatorStateEvents.triggeraction, evt);
505
+ }
506
+ emitTriggerActionIgnored(details) {
507
+ details.ignoreReason = "localusersuspended";
508
+ const evt = {
509
+ name: GroupCoordinatorStateEvents.triggeractionignored,
510
+ details: details,
511
+ };
512
+ this.emit(GroupCoordinatorStateEvents.triggeractionignored, evt);
513
+ }
514
+ }
515
+ exports.GroupCoordinatorState = GroupCoordinatorState;
516
+ //# sourceMappingURL=GroupCoordinatorState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupCoordinatorState.js","sourceRoot":"","sources":["../../../src/internals/GroupCoordinatorState.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;AAEH,sDAK+B;AAC/B,6DAIwC;AAQxC,mEAKiC;AACjC,qEAIkC;AAClC,yEAGoC;AAEpC,qEAAqE;AACrE,2EAKqC;AACrC,2CAA8C;AAC9C,iEAKgC;AAChC,+DAAiE;AAqDjE;;GAEG;AACH,IAAY,2BAIX;AAJD,WAAY,2BAA2B;IACnC,4DAA6B,CAAA;IAC7B,8DAA+B,CAAA;IAC/B,4EAA6C,CAAA;AACjD,CAAC,EAJW,2BAA2B,2CAA3B,2BAA2B,QAItC;AAED;;GAEG;AACH,MAAa,qBAAsB,SAAQ,gCAAsC;IAyB7E,YACI,OAAyB,EACzB,WAA6B,EAC7B,gBAA8B,EAC9B,sBAAoC,EACpC,mBAA4C;QAE5C,KAAK,EAAE,CAAC;QAlBZ,sBAAsB;QACd,mBAAc,GAAW,CAAC,CAAC;QAGnC,6BAA6B;QAC7B,+FAA+F;QAC/F,qGAAqG;QACrG,wEAAwE;QAChE,qBAAgB,GAAsC,MAAM,CAAC;QAC7D,yBAAoB,GAAW,CAAC,CAAC;QAUrC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,IAAI,gCAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC7D,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QAC1C,IAAI,CAAC,cAAc,GAAG,IAAI,0CAAkB,CAAC,mBAAmB,CAAC,CAAC;QAClE,IAAI,CAAC,kBAAkB,GAAG,IAAI,kDAAsB,CAChD,IAAI,CAAC,cAAc,CACtB,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,IAAI,wCAAiB,EAAE,CAAC;QAC7C,IAAI,CAAC,eAAe,GAAG,IAAI,4CAAmB,CAC1C,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,aAAa,EAClB,mBAAmB,EACnB,IAAI,CAAC,YAAY,CACpB,CAAC;QACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,gDAAqB,CAC9C,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,YAAY,EACjB,sBAAsB,CACzB,CAAC;QACF,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,CAAC;QAEhD,8BAA8B;QAC9B,IAAI,CAAC,cAAc,CAAC,EAAE,CAClB,gDAAwB,CAAC,WAAW,EACpC,CAAC,GAA8B,EAAE,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,gBAAgB,CAAC,YAAY,CAChD,CAAC;gBACF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,gBAAgB,CAAC,kBAAkB,CACtD,CAAC;YACN,CAAC;QACL,CAAC,CACJ,CAAC;QAEF,gCAAgC;QAChC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CACtB,mDAAuB,CAAC,UAAU,EAClC,CAAO,GAAkC,EAAE,EAAE;YACzC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACvC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,gBAAgB,CAAC,gBAAgB,CACpD,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,gBAAgB,CAAC,sBAAsB,CAC1D,CAAC;YACN,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAA,6BAAkB,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC,0BAA0B,CAAC;gBAC5B,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,KAAK,EAAE,GAAG,CAAC,QAAQ,KAAK,QAAQ;aACnC,CAAC,CAAC;QACP,CAAC,CAAA,CACJ,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,EAAE,CACjB,yCAAkB,CAAC,UAAU,EAC7B,CAAO,GAA6B,EAAE,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACvC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,gBAAgB,CAAC,mBAAmB,CACvD,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,gBAAgB;qBAC3B,0BAA0B,CAClC,CAAC;YACN,CAAC;YAED,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAkB,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC;YAC7C,IAAI,CAAC,0BAA0B,CAAC;gBAC5B,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,KAAK;gBACL,YAAY,EAAE,GAAG,CAAC,YAAY;aACjC,CAAC,CAAC;QACP,CAAC,CAAA,CACJ,CAAC;QAEF,qCAAqC;QACrC,IAAI,CAAC,eAAe,CAAC,EAAE,CACnB,kDAAyB,CAAC,oBAAoB,EAC9C,CAAO,GAA+B,EAAE,EAAE;YACtC,MAAM,GAAG,GACL,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS;gBAC9B,CAAC,CAAC,2BAAe,CAAC,gBAAgB;qBAC3B,2BAA2B;gBAClC,CAAC,CAAC,2BAAe,CAAC,gBAAgB;qBAC3B,qBAAqB,CAAC;YAErC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE;gBACvC,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;aACzB,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAkB,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC;YAC7C,iBAAiB;YACjB,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;gBACjB,KAAK,MAAM;oBACP,IAAI,CAAC,0BAA0B,CAAC;wBAC5B,MAAM,EAAE,MAAM;wBACd,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;wBACtB,KAAK;wBACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;qBACzB,CAAC,CAAC;oBACH,MAAM;gBAEV,KAAK,OAAO;oBACR,IAAI,CAAC,0BAA0B,CAAC;wBAC5B,MAAM,EAAE,OAAO;wBACf,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;wBACtB,KAAK;wBACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;qBACzB,CAAC,CAAC;oBACH,MAAM;gBAEV,KAAK,QAAQ;oBACT,IAAI,CAAC,0BAA0B,CAAC;wBAC5B,MAAM,EAAE,QAAQ;wBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;wBACtB,KAAK;wBACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;qBACzB,CAAC,CAAC;oBACH,MAAM;YACd,CAAC;QACL,CAAC,CAAA,CACJ,CAAC;IACN,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,IAAW,SAAS;QAChB,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IAC7B,CAAC;IAEM,eAAe,CAAC,SAAiC;QACpD,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,SAAS,EAAE,CAAC;YACZ,8BAA8B;YAC9B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAE5B,2CAA2C;YAC3C,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IAEM,aAAa,CAAC,SAAkB;QACnC,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACX,uJAAuJ,IAAI,CAAC,cAAc,EAAE,CAC/K,CAAC;QACN,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;YACxC,8BAA8B;YAC9B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACjC,CAAC;IACL,CAAC;IAEM,yBAAyB,CAC5B,KAAwB;QAExB,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;QAC/C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,0BAA0B;YAC1B,OAAO;gBACH,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO;gBACjC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO;gBACzC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO;gBACtC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO;gBACvC,aAAa,EAAE,WAAW;gBAC1B,QAAQ,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ,KAAI,GAAG;gBACxC,SAAS,EAAE,IAAI,CAAC,UAAU;aAC7B,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,0BAA0B;YAC1B,OAAO;gBACH,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO;gBACjC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO;gBACzC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO;gBACtC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO;gBACvC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;gBAC1D,QAAQ,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ,KAAI,GAAG;gBACxC,SAAS,EAAE,IAAI,CAAC,UAAU;aAC7B,CAAC;QACN,CAAC;IACL,CAAC;IAEM,cAAc,CACjB,KAAiC,EACjC,KAAc;QAEd,sBAAsB;QACtB,6DAA6D;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAC1C;YACI,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ;YAC7B,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU;YACjC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;SACjC,EACD,MAAM,CACT,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,kBAAkB,CAAC,sBAAsB,EACzD,IAAI,EACJ;gBACI,aAAa,EAAE,gCAAmB,CAAC,mBAAmB,CAClD,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,SAAS,CAClB;aACJ,CACJ,CAAC;QACN,CAAC;IACL,CAAC;IAEM,kBAAkB,CACrB,KAAqC,EACrC,KAAc;QAEd,2BAA2B;QAC3B,4DAA4D;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAC7C;YACI,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;YACrB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;SACjC,EACD,MAAM,CACT,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,kBAAkB,CAAC,sBAAsB,EACzD,IAAI,EACJ;gBACI,aAAa,EAAE,gCAAmB,CAAC,mBAAmB,CAClD,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,SAAS,CAClB;aACJ,CACJ,CAAC;QACN,CAAC;IACL,CAAC;IAEM,uBAAuB,CAC1B,KAA0C,EAC1C,KAAc;QAEd,MAAM,QAAQ,GAAkB;YAC5B,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY;YACrC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC7B,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEvE,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,aAAa,GAAG,gCAAmB,CAAC,mBAAmB,CACzD,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,SAAS,CAClB,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,kBAAkB,CAAC,wBAAwB,EAC3D,IAAI,EACJ;gBACI,aAAa,EAAE,aAAa;aAC/B,CACJ,CAAC;QACN,CAAC;IACL,CAAC;IAEM,sBAAsB,CACzB,KAAyC,EACzC,KAAc;QAEd,qCAAqC;QACrC,uDAAuD;QACvD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxD,wBAAwB;YACxB,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;YACtD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACjB,KAAK,MAAM;oBACP,aAAa,GAAG,SAAS,CAAC;oBAC1B,MAAM;gBACV,KAAK,OAAO;oBACR,aAAa,GAAG,QAAQ,CAAC;oBACzB,MAAM;YACd,CAAC;YAED,+BAA+B;YAC/B,MAAM,QAAQ,GAAoB;gBAC9B,aAAa,EAAE,aAAa;gBAC5B,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ;gBAClC,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;aACjC,CAAC;YACF,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAElE,IAAI,OAAO,EAAE,CAAC;gBACV,MAAM,aAAa,GAAG,gCAAmB,CAAC,mBAAmB,CACzD,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,SAAS,CAClB,CAAC;gBACF,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACjB,KAAK,MAAM;wBACP,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,kBAAkB;6BAC7B,kBAAkB,EACvB,IAAI,EACJ;4BACI,aAAa,EAAE,aAAa;yBAC/B,CACJ,CAAC;wBACF,MAAM;oBACV,KAAK,OAAO;wBACR,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,kBAAkB;6BAC7B,mBAAmB,EACxB,IAAI,EACJ;4BACI,aAAa,EAAE,aAAa;yBAC/B,CACJ,CAAC;wBACF,MAAM;oBACV,KAAK,QAAQ;wBACT,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,kBAAkB;6BAC7B,oBAAoB,EACzB,IAAI,EACJ;4BACI,aAAa,EAAE,aAAa;yBAC/B,CACJ,CAAC;wBACF,MAAM;gBACd,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEM,oBAAoB,CACvB,KAAuC,EACvC,KAAc;QAEd,qCAAqC;QACrC,uDAAuD;QACvD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxD,uCAAuC;YACvC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAElE,mCAAmC;YACnC,wFAAwF;YACxF,gFAAgF;YAChF,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,OAAO,EAAE,CAAC;gBACtC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACpE,CAAC;YAED,+CAA+C;YAC/C,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpD,2BAA2B;gBAC3B,MAAM,QAAQ,GAA6B;oBACvC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa;oBACvC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;oBAC/B,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ;oBAC7B,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;iBACjC,CAAC;gBACF,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;gBAEvD,mDAAmD;gBACnD,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC7B,oDAAoD;oBACpD,6EAA6E;oBAC7E,0EAA0E;oBAC1E,iBAAiB;oBACjB,QAAQ,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;wBAC/B,KAAK,MAAM,CAAC;wBACZ,KAAK,QAAQ,CAAC;wBACd,KAAK,SAAS;4BACV,IACI,KAAK,CAAC,IAAI,CAAC,aAAa;gCACxB,IAAI,CAAC,gBAAgB,EACvB,CAAC;gCACC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,gBAAgB;qCAC3B,mBAAmB,EACxB,IAAI,EACJ,EAAE,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAC9C,CAAC;gCACF,IAAI,CAAC,gBAAgB;oCACjB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;gCAC7B,IAAI,CAAC,oBAAoB;oCACrB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;4BACzC,CAAC;4BACD,MAAM;oBACd,CAAC;oBAED,kBAAkB;oBAClB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBACjB,2BAA2B;wBAC3B,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC;4BAC5C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;4BAE5B,sBAAsB;4BACtB,IAAI,CAAC,qBAAqB,EAAE,CAAC;wBACjC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,yBAAyB;wBACzB,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBACjC,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEY,qBAAqB;;YAC9B,iEAAiE;YACjE,MAAM,mBAAmB,GACrB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC;YACjE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,mBAAmB,IAAI,IAAI,EAAE,CAAC;gBACjD,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,GACrD,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,gBAAgB,CAAC,qBAAqB,CACzD,CAAC;gBAEF,yBAAyB;gBACzB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACxC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,gBAAgB,CAAC,cAAc,CAClD,CAAC;oBACF,IAAI,CAAC,YAAY,CACb,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EACnC,IAAI,CAAC,aAAa,CAAC,QAAS,EAC5B,QAAQ,CACX,CAAC;oBACF,OAAO;gBACX,CAAC;gBAED,oFAAoF;gBACpF,2CAA2C;gBAC3C,oGAAoG;gBACpG,iCAAiC;gBACjC,qFAAqF;gBACrF,qFAAqF;gBACrF,IACI,aAAa,IAAI,OAAO;oBACxB,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EACpC,CAAC;oBACC,4BAA4B;oBAC5B,IAAI,QAAQ,GAAG,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ,CAAC;oBACvC,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;wBACxB,QAAQ,GAAG,GAAG,CAAC;oBACnB,CAAC;oBAED,oBAAoB;oBACpB,2EAA2E;oBAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;oBACpD,IACI,MAAM,IAAI,GAAG;wBACb,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;4BACvB,IAAI,CAAC,GAAG,CACJ,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAC9B,IAAI,CAAC,iBAAiB,CAAC,OAAO;gCAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAC9B,EACP,CAAC;wBACC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,gBAAgB,CAAC,iBAAiB,EAClD,IAAI,EACJ;4BACI,OAAO,EAAE,QAAQ;4BACjB,MAAM,EAAE,MAAM;yBACjB,CACJ,CAAC;wBACF,IAAI,CAAC,iBAAiB,CAAC;4BACnB,MAAM,EAAE,SAAS;4BACjB,MAAM,EAAE,QAAQ;4BAChB,QAAQ,EAAE,MAAM,IAAA,6BAAkB,EAAC,IAAI,CAAC,QAAQ,CAAC;4BACjD,KAAK,EAAE,IAAI;4BACX,QAAQ,EAAE,MAAM;yBACnB,CAAC,CAAC;oBACP,CAAC;oBAED,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAkB,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC9D,uBAAuB;oBACvB,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,IAAI,aAAa,EAAE,CAAC;wBACrD,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,gBAAgB,CAAC,kBAAkB,EACnD,IAAI,EACJ;4BACI,OAAO,EAAE,aAAa;4BACtB,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,aAAa;yBAC5C,CACJ,CAAC;wBACF,MAAM,KAAK,GACP,aAAa,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;wBAC3D,QAAQ,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;4BACxC,KAAK,SAAS;gCACV,IAAI,CAAC,iBAAiB,CAAC;oCACnB,MAAM,EAAE,MAAM;oCACd,MAAM,EAAE,QAAQ;oCAChB,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ;oCAC9C,KAAK;iCACR,CAAC,CAAC;gCACH,MAAM;4BACV,KAAK,QAAQ;gCACT,IAAI,CAAC,iBAAiB,CAAC;oCACnB,MAAM,EAAE,OAAO;oCACf,MAAM,EAAE,QAAQ;oCAChB,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ;oCAC9C,KAAK;iCACR,CAAC,CAAC;gCACH,MAAM;wBACd,CAAC;oBACL,CAAC;oBAED,kBAAkB;oBAClB,IACI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;wBAC3C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAC3B,CAAC;wBACC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,gBAAgB,CAAC,kBAAkB,CACtD,CAAC;wBACF,MAAM,KAAK,GACP,aAAa;4BACb,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC;wBAC5C,IAAI,CAAC,iBAAiB,CAAC;4BACnB,MAAM,EAAE,YAAY;4BACpB,MAAM,EAAE,QAAQ;4BAChB,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ;4BACjD,KAAK;4BACL,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI;yBACpC,CAAC,CAAC;oBACP,CAAC;oBAED,qBAAqB;oBACrB,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,YAAY,CAAA,EAAE,CAAC;wBACxD,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2BAAe,CAAC,gBAAgB,CAAC,qBAAqB,CACzD,CAAC;wBACF,MAAM,KAAK,GACP,aAAa;4BACb,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC;wBAC5C,IAAI,CAAC,iBAAiB,CAAC;4BACnB,MAAM,EAAE,YAAY;4BACpB,MAAM,EAAE,QAAQ;4BAChB,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ;4BACjD,KAAK;4BACL,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;yBACvC,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;KAAA;IAEa,YAAY,CACtB,QAAgB,EAChB,QAA+B,EAC/B,MAAwC;;YAExC,wBAAwB;YACxB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAE5B,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAkB,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9D,0BAA0B;YAC1B,IAAI,CAAC,iBAAiB,CAAC;gBACnB,MAAM,EAAE,UAAU;gBAClB,MAAM;gBACN,QAAQ;gBACR,KAAK,EAAE,aAAa,KAAK,QAAQ;gBACjC,QAAQ;aACX,CAAC,CAAC;QACP,CAAC;KAAA;IAEO,0BAA0B,CAC9B,OAA0C;QAE1C,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC;IAEO,iBAAiB,CACrB,OAA0C;QAE1C,MAAM,GAAG,GAAwB;YAC7B,IAAI,EAAE,2BAA2B,CAAC,aAAa;YAC/C,OAAO,EAAE,OAAO;SACnB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAC9D,CAAC;IAEO,wBAAwB,CAC5B,OAA0C;QAE1C,OAAO,CAAC,YAAY,GAAG,oBAAoB,CAAC;QAC5C,MAAM,GAAG,GAAwB;YAC7B,IAAI,EAAE,2BAA2B,CAAC,oBAAoB;YACtD,OAAO,EAAE,OAAO;SACnB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;IACrE,CAAC;CACJ;AA9qBD,sDA8qBC"}