@microsoft/live-share-media 2.0.0-internal.1 → 2.0.0-internal.10

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 (228) hide show
  1. package/README.md +30 -31
  2. package/bin/cjs/IMediaPlayer.d.ts.map +1 -0
  3. package/bin/cjs/IMediaPlayer.js.map +1 -0
  4. package/bin/{LiveMediaSession.d.ts → cjs/LiveMediaSession.d.ts} +16 -9
  5. package/bin/cjs/LiveMediaSession.d.ts.map +1 -0
  6. package/bin/{LiveMediaSession.js → cjs/LiveMediaSession.js} +31 -25
  7. package/bin/cjs/LiveMediaSession.js.map +1 -0
  8. package/bin/{LiveMediaSessionCoordinator.d.ts → cjs/LiveMediaSessionCoordinator.d.ts} +57 -13
  9. package/bin/cjs/LiveMediaSessionCoordinator.d.ts.map +1 -0
  10. package/bin/{LiveMediaSessionCoordinator.js → cjs/LiveMediaSessionCoordinator.js} +152 -64
  11. package/bin/cjs/LiveMediaSessionCoordinator.js.map +1 -0
  12. package/bin/{LiveMediaSessionCoordinatorSuspension.d.ts → cjs/LiveMediaSessionCoordinatorSuspension.d.ts} +1 -1
  13. package/bin/cjs/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -0
  14. package/bin/cjs/LiveMediaSessionCoordinatorSuspension.js.map +1 -0
  15. package/bin/{MediaPlayerSynchronizer.d.ts → cjs/MediaPlayerSynchronizer.d.ts} +22 -8
  16. package/bin/cjs/MediaPlayerSynchronizer.d.ts.map +1 -0
  17. package/bin/{MediaPlayerSynchronizer.js → cjs/MediaPlayerSynchronizer.js} +38 -41
  18. package/bin/cjs/MediaPlayerSynchronizer.js.map +1 -0
  19. package/bin/{MediaSessionActionThrottler.d.ts → cjs/MediaSessionActionThrottler.d.ts} +1 -1
  20. package/bin/cjs/MediaSessionActionThrottler.d.ts.map +1 -0
  21. package/bin/cjs/MediaSessionActionThrottler.js.map +1 -0
  22. package/bin/cjs/MediaSessionExtensions.d.ts.map +1 -0
  23. package/bin/cjs/MediaSessionExtensions.js.map +1 -0
  24. package/bin/{RepeatedActionThrottler.d.ts → cjs/RepeatedActionThrottler.d.ts} +2 -2
  25. package/bin/cjs/RepeatedActionThrottler.d.ts.map +1 -0
  26. package/bin/{RepeatedActionThrottler.js → cjs/RepeatedActionThrottler.js} +2 -2
  27. package/bin/cjs/RepeatedActionThrottler.js.map +1 -0
  28. package/bin/{VolumeManager.d.ts → cjs/VolumeManager.d.ts} +6 -6
  29. package/bin/cjs/VolumeManager.d.ts.map +1 -0
  30. package/bin/{VolumeManager.js → cjs/VolumeManager.js} +5 -5
  31. package/bin/cjs/VolumeManager.js.map +1 -0
  32. package/bin/cjs/index.d.ts +14 -0
  33. package/bin/cjs/index.d.ts.map +1 -0
  34. package/bin/{internals → cjs}/index.js +9 -8
  35. package/bin/cjs/index.js.map +1 -0
  36. package/bin/{internals → cjs/internals}/GroupCoordinatorState.d.ts +14 -12
  37. package/bin/cjs/internals/GroupCoordinatorState.d.ts.map +1 -0
  38. package/bin/{internals → cjs/internals}/GroupCoordinatorState.js +46 -49
  39. package/bin/cjs/internals/GroupCoordinatorState.js.map +1 -0
  40. package/bin/{internals → cjs/internals}/GroupPlaybackPosition.d.ts +6 -5
  41. package/bin/cjs/internals/GroupPlaybackPosition.d.ts.map +1 -0
  42. package/bin/{internals → cjs/internals}/GroupPlaybackPosition.js +3 -3
  43. package/bin/cjs/internals/GroupPlaybackPosition.js.map +1 -0
  44. package/bin/{internals → cjs/internals}/GroupPlaybackRate.d.ts +4 -5
  45. package/bin/cjs/internals/GroupPlaybackRate.d.ts.map +1 -0
  46. package/bin/{internals → cjs/internals}/GroupPlaybackRate.js +2 -5
  47. package/bin/cjs/internals/GroupPlaybackRate.js.map +1 -0
  48. package/bin/{internals → cjs/internals}/GroupPlaybackTrack.d.ts +5 -6
  49. package/bin/cjs/internals/GroupPlaybackTrack.d.ts.map +1 -0
  50. package/bin/{internals → cjs/internals}/GroupPlaybackTrack.js +2 -5
  51. package/bin/cjs/internals/GroupPlaybackTrack.js.map +1 -0
  52. package/bin/{internals → cjs/internals}/GroupPlaybackTrackData.d.ts +5 -6
  53. package/bin/cjs/internals/GroupPlaybackTrackData.d.ts.map +1 -0
  54. package/bin/{internals → cjs/internals}/GroupPlaybackTrackData.js +4 -7
  55. package/bin/cjs/internals/GroupPlaybackTrackData.js.map +1 -0
  56. package/bin/{internals → cjs/internals}/GroupTransportState.d.ts +8 -9
  57. package/bin/cjs/internals/GroupTransportState.d.ts.map +1 -0
  58. package/bin/{internals → cjs/internals}/GroupTransportState.js +4 -7
  59. package/bin/cjs/internals/GroupTransportState.js.map +1 -0
  60. package/bin/cjs/internals/PriorityTimeInterval.d.ts +33 -0
  61. package/bin/cjs/internals/PriorityTimeInterval.d.ts.map +1 -0
  62. package/bin/cjs/internals/PriorityTimeInterval.js +45 -0
  63. package/bin/cjs/internals/PriorityTimeInterval.js.map +1 -0
  64. package/bin/cjs/internals/consts.d.ts.map +1 -0
  65. package/bin/cjs/internals/consts.js.map +1 -0
  66. package/bin/cjs/internals/errors.d.ts.map +1 -0
  67. package/bin/cjs/internals/errors.js.map +1 -0
  68. package/bin/cjs/internals/interfaces.d.ts +23 -0
  69. package/bin/cjs/internals/interfaces.d.ts.map +1 -0
  70. package/bin/{internals → cjs/internals}/interfaces.js.map +1 -1
  71. package/bin/cjs/package.json +1 -0
  72. package/bin/esm/IMediaPlayer.d.ts +21 -0
  73. package/bin/esm/IMediaPlayer.d.ts.map +1 -0
  74. package/bin/esm/IMediaPlayer.js +6 -0
  75. package/bin/esm/IMediaPlayer.js.map +1 -0
  76. package/bin/esm/LiveMediaSession.d.ts +97 -0
  77. package/bin/esm/LiveMediaSession.d.ts.map +1 -0
  78. package/bin/esm/LiveMediaSession.js +257 -0
  79. package/bin/esm/LiveMediaSession.js.map +1 -0
  80. package/bin/esm/LiveMediaSessionCoordinator.d.ts +304 -0
  81. package/bin/esm/LiveMediaSessionCoordinator.d.ts.map +1 -0
  82. package/bin/esm/LiveMediaSessionCoordinator.js +556 -0
  83. package/bin/esm/LiveMediaSessionCoordinator.js.map +1 -0
  84. package/bin/esm/LiveMediaSessionCoordinatorSuspension.d.ts +20 -0
  85. package/bin/esm/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -0
  86. package/bin/esm/LiveMediaSessionCoordinatorSuspension.js +24 -0
  87. package/bin/esm/LiveMediaSessionCoordinatorSuspension.js.map +1 -0
  88. package/bin/esm/MediaPlayerSynchronizer.d.ts +204 -0
  89. package/bin/esm/MediaPlayerSynchronizer.d.ts.map +1 -0
  90. package/bin/esm/MediaPlayerSynchronizer.js +570 -0
  91. package/bin/esm/MediaPlayerSynchronizer.js.map +1 -0
  92. package/bin/esm/MediaSessionActionThrottler.d.ts +12 -0
  93. package/bin/esm/MediaSessionActionThrottler.d.ts.map +1 -0
  94. package/bin/esm/MediaSessionActionThrottler.js +10 -0
  95. package/bin/esm/MediaSessionActionThrottler.js.map +1 -0
  96. package/bin/esm/MediaSessionExtensions.d.ts +177 -0
  97. package/bin/esm/MediaSessionExtensions.d.ts.map +1 -0
  98. package/bin/esm/MediaSessionExtensions.js +23 -0
  99. package/bin/esm/MediaSessionExtensions.js.map +1 -0
  100. package/bin/esm/RepeatedActionThrottler.d.ts +20 -0
  101. package/bin/esm/RepeatedActionThrottler.d.ts.map +1 -0
  102. package/bin/esm/RepeatedActionThrottler.js +59 -0
  103. package/bin/esm/RepeatedActionThrottler.js.map +1 -0
  104. package/bin/esm/VolumeManager.d.ts +84 -0
  105. package/bin/esm/VolumeManager.d.ts.map +1 -0
  106. package/bin/esm/VolumeManager.js +171 -0
  107. package/bin/esm/VolumeManager.js.map +1 -0
  108. package/bin/esm/index.d.ts +14 -0
  109. package/bin/esm/index.d.ts.map +1 -0
  110. package/bin/esm/index.js +14 -0
  111. package/bin/esm/index.js.map +1 -0
  112. package/bin/esm/internals/GroupCoordinatorState.d.ts +110 -0
  113. package/bin/esm/internals/GroupCoordinatorState.d.ts.map +1 -0
  114. package/bin/esm/internals/GroupCoordinatorState.js +512 -0
  115. package/bin/esm/internals/GroupCoordinatorState.js.map +1 -0
  116. package/bin/esm/internals/GroupPlaybackPosition.d.ts +71 -0
  117. package/bin/esm/internals/GroupPlaybackPosition.d.ts.map +1 -0
  118. package/bin/esm/internals/GroupPlaybackPosition.js +166 -0
  119. package/bin/esm/internals/GroupPlaybackPosition.js.map +1 -0
  120. package/bin/esm/internals/GroupPlaybackRate.d.ts +38 -0
  121. package/bin/esm/internals/GroupPlaybackRate.d.ts.map +1 -0
  122. package/bin/esm/internals/GroupPlaybackRate.js +55 -0
  123. package/bin/esm/internals/GroupPlaybackRate.js.map +1 -0
  124. package/bin/esm/internals/GroupPlaybackTrack.d.ts +45 -0
  125. package/bin/esm/internals/GroupPlaybackTrack.d.ts.map +1 -0
  126. package/bin/esm/internals/GroupPlaybackTrack.js +118 -0
  127. package/bin/esm/internals/GroupPlaybackTrack.js.map +1 -0
  128. package/bin/esm/internals/GroupPlaybackTrackData.d.ts +40 -0
  129. package/bin/esm/internals/GroupPlaybackTrackData.d.ts.map +1 -0
  130. package/bin/esm/internals/GroupPlaybackTrackData.js +66 -0
  131. package/bin/esm/internals/GroupPlaybackTrackData.js.map +1 -0
  132. package/bin/esm/internals/GroupTransportState.d.ts +52 -0
  133. package/bin/esm/internals/GroupTransportState.d.ts.map +1 -0
  134. package/bin/esm/internals/GroupTransportState.js +116 -0
  135. package/bin/esm/internals/GroupTransportState.js.map +1 -0
  136. package/bin/esm/internals/PriorityTimeInterval.d.ts +33 -0
  137. package/bin/esm/internals/PriorityTimeInterval.d.ts.map +1 -0
  138. package/bin/esm/internals/PriorityTimeInterval.js +41 -0
  139. package/bin/esm/internals/PriorityTimeInterval.js.map +1 -0
  140. package/bin/esm/internals/consts.d.ts +83 -0
  141. package/bin/esm/internals/consts.d.ts.map +1 -0
  142. package/bin/esm/internals/consts.js +89 -0
  143. package/bin/esm/internals/consts.js.map +1 -0
  144. package/bin/esm/internals/errors.d.ts +17 -0
  145. package/bin/esm/internals/errors.d.ts.map +1 -0
  146. package/bin/esm/internals/errors.js +29 -0
  147. package/bin/esm/internals/errors.js.map +1 -0
  148. package/bin/esm/internals/interfaces.d.ts +23 -0
  149. package/bin/esm/internals/interfaces.d.ts.map +1 -0
  150. package/bin/esm/internals/interfaces.js +2 -0
  151. package/bin/esm/internals/interfaces.js.map +1 -0
  152. package/package.json +31 -12
  153. package/src/LiveMediaSession.ts +29 -14
  154. package/src/LiveMediaSessionCoordinator.ts +149 -37
  155. package/src/LiveMediaSessionCoordinatorSuspension.ts +1 -1
  156. package/src/MediaPlayerSynchronizer.ts +26 -11
  157. package/src/MediaSessionActionThrottler.ts +1 -1
  158. package/src/RepeatedActionThrottler.ts +2 -2
  159. package/src/VolumeManager.ts +6 -6
  160. package/src/index.ts +9 -9
  161. package/src/internals/GroupCoordinatorState.ts +19 -15
  162. package/src/internals/GroupPlaybackPosition.ts +9 -9
  163. package/src/internals/GroupPlaybackRate.ts +4 -4
  164. package/src/internals/GroupPlaybackTrack.ts +5 -5
  165. package/src/internals/GroupPlaybackTrackData.ts +5 -5
  166. package/src/internals/GroupTransportState.ts +8 -8
  167. package/src/internals/PriorityTimeInterval.ts +76 -0
  168. package/src/internals/interfaces.ts +15 -1
  169. package/tsconfig.cjs.json +14 -0
  170. package/tsconfig.json +65 -74
  171. package/.nycrc.json +0 -11
  172. package/bin/IMediaPlayer.d.ts.map +0 -1
  173. package/bin/IMediaPlayer.js.map +0 -1
  174. package/bin/LiveMediaSession.d.ts.map +0 -1
  175. package/bin/LiveMediaSession.js.map +0 -1
  176. package/bin/LiveMediaSessionCoordinator.d.ts.map +0 -1
  177. package/bin/LiveMediaSessionCoordinator.js.map +0 -1
  178. package/bin/LiveMediaSessionCoordinatorSuspension.d.ts.map +0 -1
  179. package/bin/LiveMediaSessionCoordinatorSuspension.js.map +0 -1
  180. package/bin/MediaPlayerSynchronizer.d.ts.map +0 -1
  181. package/bin/MediaPlayerSynchronizer.js.map +0 -1
  182. package/bin/MediaSessionActionThrottler.d.ts.map +0 -1
  183. package/bin/MediaSessionActionThrottler.js.map +0 -1
  184. package/bin/MediaSessionExtensions.d.ts.map +0 -1
  185. package/bin/MediaSessionExtensions.js.map +0 -1
  186. package/bin/RepeatedActionThrottler.d.ts.map +0 -1
  187. package/bin/RepeatedActionThrottler.js.map +0 -1
  188. package/bin/VolumeManager.d.ts.map +0 -1
  189. package/bin/VolumeManager.js.map +0 -1
  190. package/bin/index.d.ts +0 -14
  191. package/bin/index.d.ts.map +0 -1
  192. package/bin/index.js +0 -30
  193. package/bin/index.js.map +0 -1
  194. package/bin/internals/GroupCoordinatorState.d.ts.map +0 -1
  195. package/bin/internals/GroupCoordinatorState.js.map +0 -1
  196. package/bin/internals/GroupPlaybackPosition.d.ts.map +0 -1
  197. package/bin/internals/GroupPlaybackPosition.js.map +0 -1
  198. package/bin/internals/GroupPlaybackRate.d.ts.map +0 -1
  199. package/bin/internals/GroupPlaybackRate.js.map +0 -1
  200. package/bin/internals/GroupPlaybackTrack.d.ts.map +0 -1
  201. package/bin/internals/GroupPlaybackTrack.js.map +0 -1
  202. package/bin/internals/GroupPlaybackTrackData.d.ts.map +0 -1
  203. package/bin/internals/GroupPlaybackTrackData.js.map +0 -1
  204. package/bin/internals/GroupTransportState.d.ts.map +0 -1
  205. package/bin/internals/GroupTransportState.js.map +0 -1
  206. package/bin/internals/consts.d.ts.map +0 -1
  207. package/bin/internals/consts.js.map +0 -1
  208. package/bin/internals/errors.d.ts.map +0 -1
  209. package/bin/internals/errors.js.map +0 -1
  210. package/bin/internals/index.d.ts +0 -13
  211. package/bin/internals/index.d.ts.map +0 -1
  212. package/bin/internals/index.js.map +0 -1
  213. package/bin/internals/interfaces.d.ts +0 -10
  214. package/bin/internals/interfaces.d.ts.map +0 -1
  215. package/src/internals/index.ts +0 -13
  216. package/tsconfig.build.json +0 -9
  217. package/typedoc.json +0 -10
  218. /package/bin/{IMediaPlayer.d.ts → cjs/IMediaPlayer.d.ts} +0 -0
  219. /package/bin/{IMediaPlayer.js → cjs/IMediaPlayer.js} +0 -0
  220. /package/bin/{LiveMediaSessionCoordinatorSuspension.js → cjs/LiveMediaSessionCoordinatorSuspension.js} +0 -0
  221. /package/bin/{MediaSessionActionThrottler.js → cjs/MediaSessionActionThrottler.js} +0 -0
  222. /package/bin/{MediaSessionExtensions.d.ts → cjs/MediaSessionExtensions.d.ts} +0 -0
  223. /package/bin/{MediaSessionExtensions.js → cjs/MediaSessionExtensions.js} +0 -0
  224. /package/bin/{internals → cjs/internals}/consts.d.ts +0 -0
  225. /package/bin/{internals → cjs/internals}/consts.js +0 -0
  226. /package/bin/{internals → cjs/internals}/errors.d.ts +0 -0
  227. /package/bin/{internals → cjs/internals}/errors.js +0 -0
  228. /package/bin/{internals → cjs/internals}/interfaces.js +0 -0
@@ -12,30 +12,47 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
12
12
  step((generator = generator.apply(thisArg, _arguments || [])).next());
13
13
  });
14
14
  };
15
- var __importDefault = (this && this.__importDefault) || function (mod) {
16
- return (mod && mod.__esModule) ? mod : { "default": mod };
17
- };
18
15
  Object.defineProperty(exports, "__esModule", { value: true });
19
16
  exports.LiveMediaSessionCoordinator = void 0;
20
17
  const live_share_1 = require("@microsoft/live-share");
21
- const internals_1 = require("./internals");
22
- const LiveMediaSessionCoordinatorSuspension_1 = require("./LiveMediaSessionCoordinatorSuspension");
23
- const events_1 = __importDefault(require("events"));
24
- const internals_2 = require("@microsoft/live-share/bin/internals");
18
+ const internal_1 = require("@microsoft/live-share/internal");
19
+ const GroupCoordinatorState_js_1 = require("./internals/GroupCoordinatorState.js");
20
+ const consts_js_1 = require("./internals/consts.js");
21
+ const errors_js_1 = require("./internals/errors.js");
22
+ const PriorityTimeInterval_js_1 = require("./internals/PriorityTimeInterval.js");
23
+ const LiveMediaSessionCoordinatorSuspension_js_1 = require("./LiveMediaSessionCoordinatorSuspension.js");
24
+ const client_utils_1 = require("@fluid-internal/client-utils");
25
25
  /**
26
26
  * The `LiveMediaSessionCoordinator` tracks the playback & position state of all other
27
27
  * clients being synchronized with. It is responsible for keeping the local media player
28
28
  * in sync with the group.
29
29
  */
30
- class LiveMediaSessionCoordinator extends events_1.default {
30
+ class LiveMediaSessionCoordinator extends client_utils_1.TypedEventEmitter {
31
31
  /**
32
32
  * @hidden
33
33
  * Applications shouldn't directly create new coordinator instances.
34
34
  */
35
35
  constructor(id, runtime, liveRuntime, getPlayerState) {
36
36
  super();
37
- this._positionUpdateInterval = new live_share_1.TimeInterval(2000);
38
- this._maxPlaybackDrift = new live_share_1.TimeInterval(1000);
37
+ this._positionUpdateInterval = new PriorityTimeInterval_js_1.PriorityTimeInterval(2000,
38
+ // Scale by function
39
+ () => {
40
+ const audience = this._liveRuntime.audience;
41
+ if (!audience)
42
+ return 1;
43
+ // As the audience size gets bigger, we relax the update interval, since more variance is expected
44
+ const count = audience.getMembers().size;
45
+ return 1 + count / 5;
46
+ });
47
+ this._maxPlaybackDrift = new PriorityTimeInterval_js_1.PriorityTimeInterval(1500, // Scale by function
48
+ () => {
49
+ const audience = this._liveRuntime.audience;
50
+ if (!audience)
51
+ return 1;
52
+ // As the audience size gets bigger, we relax the playback drift, since more variance is expected
53
+ const count = audience.getMembers().size;
54
+ return 1 + count / 25;
55
+ });
39
56
  this.initializeState = live_share_1.LiveDataObjectInitializeState.needed;
40
57
  /**
41
58
  * Controls whether or not the local client is allowed to instruct the group to play or pause.
@@ -121,13 +138,27 @@ class LiveMediaSessionCoordinator extends events_1.default {
121
138
  return this._groupState ? this._groupState.isSuspended : false;
122
139
  }
123
140
  /**
124
- * Max amount of playback drift allowed in seconds.
141
+ * Controls whether or not to scale {@link maxPlaybackDrift} by the number of users in the session.
125
142
  *
126
143
  * @remarks
127
- * Should the local clients playback position lag by more than the specified value, the
128
- * coordinator will trigger a `catchup` action.
144
+ * As more clients join a session, it is more likely that some users will fall behind the presenter.
145
+ * It is also less likely that users will notice drift as more clients are added.
146
+ * It is usually helpful to be more lenient as more clients are added so everyone can watch all the content.
147
+ * Default value is true.
148
+ */
149
+ get shouldScaleMaxPlaybackDrift() {
150
+ return this._maxPlaybackDrift.shouldPrioritize;
151
+ }
152
+ set shouldScaleMaxPlaybackDrift(value) {
153
+ this._maxPlaybackDrift.shouldPrioritize = value;
154
+ }
155
+ /**
156
+ * Max amount of playback drift allowed in seconds.
157
+ * This will scale automatically according to the number of participants in the session when {@link shouldScaleMaxPlaybackDrift} is true.
129
158
  *
130
- * Defaults to a value of `1` second.
159
+ * @remarks
160
+ * Should the local clients playback position lag by more than the specified value, the coordinator will trigger a `catchup` action.
161
+ * Default value is `1.5` seconds.
131
162
  */
132
163
  get maxPlaybackDrift() {
133
164
  return this._maxPlaybackDrift.seconds;
@@ -136,11 +167,28 @@ class LiveMediaSessionCoordinator extends events_1.default {
136
167
  this._maxPlaybackDrift.seconds = value;
137
168
  }
138
169
  /**
139
- * Frequency with which position updates are broadcast to the rest of the group in
140
- * seconds.
170
+ * Controls whether or not to compute {@link positionUpdateInterval} based on whether user has initiated a playback command.
171
+ * Default value is true.
172
+ *
173
+ * @remarks
174
+ * When true, users that are simply watching but not controlling playback will report their positions less frequently.
175
+ * When a user has sent a transport command, they will begin sending position updates more frequently.
176
+ * Most Live Share apps have a concept of a primary presenter, and don't allow anyone to pause/play for the group.
177
+ * By ensuring only one/few users broadcast updates frequently, the server load is reduced considerably.
178
+ */
179
+ get shouldScalePositionUpdateInterval() {
180
+ return this._positionUpdateInterval.shouldPrioritize;
181
+ }
182
+ set shouldScalePositionUpdateInterval(value) {
183
+ this._positionUpdateInterval.shouldPrioritize = value;
184
+ }
185
+ /**
186
+ * Frequency with which position updates are broadcast to the rest of the group in seconds.
187
+ * When {@link shouldScalePositionUpdateInterval} is set to `true`, the value set is the minimum value.
188
+ * The value returned is the actual value used to send updates by the local user, which may be larger than the value set.
141
189
  *
142
190
  * @remarks
143
- * Defaults to a value of `2` seconds.
191
+ * Defaults to a minimum value of `2` seconds.
144
192
  */
145
193
  get positionUpdateInterval() {
146
194
  return this._positionUpdateInterval.seconds;
@@ -158,19 +206,23 @@ class LiveMediaSessionCoordinator extends events_1.default {
158
206
  * @returns a void promise that resolves once complete, throws if user does not have proper roles
159
207
  */
160
208
  play() {
161
- var _a;
162
209
  return __awaiter(this, void 0, void 0, function* () {
210
+ var _a;
163
211
  live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:play", "play", this.initializeState);
164
- internals_1.TrackMetadataNotSetError.assert(!!((_a = this._groupState) === null || _a === void 0 ? void 0 : _a.playbackTrack.current.metadata), "LiveMediaSessionCoordinator:play", "play");
165
- internals_1.ActionBlockedError.assert(this.canPlayPause, "LiveMediaSessionCoordinator:play", "play", "canPlayPause");
212
+ errors_js_1.TrackMetadataNotSetError.assert(!!((_a = this._groupState) === null || _a === void 0 ? void 0 : _a.playbackTrack.current.metadata), "LiveMediaSessionCoordinator:play", "play");
213
+ errors_js_1.ActionBlockedError.assert(this.canPlayPause, "LiveMediaSessionCoordinator:play", "play", "canPlayPause");
166
214
  // Get projected position
167
215
  const position = this.getPlayerPosition();
168
216
  // Send transport command
169
- this._logger.sendTelemetryEvent(internals_1.TelemetryEvents.SessionCoordinator.PlayCalled, null, { position: position });
217
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.PlayCalled, null, { position: position });
170
218
  yield this._playEvent.sendEvent({
171
219
  track: this._groupState.playbackTrack.current,
172
220
  position: position,
173
221
  });
222
+ if (this.canSendPositionUpdates) {
223
+ // User has taken initiative to send event, give priority for sending position updates
224
+ this._positionUpdateInterval.hasPriority = true;
225
+ }
174
226
  });
175
227
  }
176
228
  /**
@@ -183,19 +235,23 @@ class LiveMediaSessionCoordinator extends events_1.default {
183
235
  * @returns a void promise that resolves once complete, throws if user does not have proper roles
184
236
  */
185
237
  pause() {
186
- var _a;
187
238
  return __awaiter(this, void 0, void 0, function* () {
239
+ var _a;
188
240
  live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:pause", "pause", this.initializeState);
189
- internals_1.TrackMetadataNotSetError.assert(!!((_a = this._groupState) === null || _a === void 0 ? void 0 : _a.playbackTrack.current.metadata), "LiveMediaSessionCoordinator:pause", "pause");
190
- internals_1.ActionBlockedError.assert(this.canPlayPause, "LiveMediaSessionCoordinator:pause", "pause", "canPlayPause");
241
+ errors_js_1.TrackMetadataNotSetError.assert(!!((_a = this._groupState) === null || _a === void 0 ? void 0 : _a.playbackTrack.current.metadata), "LiveMediaSessionCoordinator:pause", "pause");
242
+ errors_js_1.ActionBlockedError.assert(this.canPlayPause, "LiveMediaSessionCoordinator:pause", "pause", "canPlayPause");
191
243
  // Get projected position
192
244
  const position = this.getPlayerPosition();
193
245
  // Send transport command
194
- this._logger.sendTelemetryEvent(internals_1.TelemetryEvents.SessionCoordinator.PauseCalled, null, { position: position });
246
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.PauseCalled, null, { position: position });
195
247
  yield this._pauseEvent.sendEvent({
196
248
  track: this._groupState.playbackTrack.current,
197
249
  position: position,
198
250
  });
251
+ if (this.canSendPositionUpdates) {
252
+ // User has taken initiative to send event, give priority for sending position updates
253
+ this._positionUpdateInterval.hasPriority = true;
254
+ }
199
255
  });
200
256
  }
201
257
  /**
@@ -208,18 +264,22 @@ class LiveMediaSessionCoordinator extends events_1.default {
208
264
  * @returns a void promise that resolves once complete, throws if user does not have proper roles
209
265
  */
210
266
  seekTo(time) {
211
- var _a;
212
267
  return __awaiter(this, void 0, void 0, function* () {
268
+ var _a;
213
269
  live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:seekTo", "seekTo", this.initializeState);
214
- internals_1.TrackMetadataNotSetError.assert(!!((_a = this._groupState) === null || _a === void 0 ? void 0 : _a.playbackTrack.current.metadata), "LiveMediaSessionCoordinator:seekTo", "seekTo");
215
- internals_1.ActionBlockedError.assert(this.canSeek, "LiveMediaSessionCoordinator:seekTo", "seekTo", "canSeek");
270
+ errors_js_1.TrackMetadataNotSetError.assert(!!((_a = this._groupState) === null || _a === void 0 ? void 0 : _a.playbackTrack.current.metadata), "LiveMediaSessionCoordinator:seekTo", "seekTo");
271
+ errors_js_1.ActionBlockedError.assert(this.canSeek, "LiveMediaSessionCoordinator:seekTo", "seekTo", "canSeek");
216
272
  // Send transport command
217
- this._logger.sendTelemetryEvent(internals_1.TelemetryEvents.SessionCoordinator.SeekToCalled, null, { position: time });
273
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.SeekToCalled, null, { position: time });
218
274
  try {
219
275
  yield this._seekToEvent.sendEvent({
220
276
  track: this._groupState.playbackTrack.current,
221
277
  position: time,
222
278
  });
279
+ if (this.canSendPositionUpdates) {
280
+ // User has taken initiative to send event, give priority for sending position updates
281
+ this._positionUpdateInterval.hasPriority = true;
282
+ }
223
283
  }
224
284
  catch (err) {
225
285
  yield this._groupState.syncLocalMediaSession();
@@ -227,12 +287,24 @@ class LiveMediaSessionCoordinator extends events_1.default {
227
287
  }
228
288
  });
229
289
  }
290
+ /**
291
+ * Sets the playback rate for everyone in the session.
292
+ *
293
+ * @param playbackRate the playback rate to set.
294
+ *
295
+ * @throws
296
+ * Throws an exception if the session/coordinator hasn't been initialized or {@link canSetPlaybackRate} is false.
297
+ */
230
298
  setPlaybackRate(playbackRate) {
231
299
  return __awaiter(this, void 0, void 0, function* () {
232
300
  live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:setPlaybackRate", "setPlaybackRate", this.initializeState);
233
- internals_1.ActionBlockedError.assert(this.canSetPlaybackRate, "LiveMediaSessionCoordinator:setPlaybackRate", "setPlaybackRate", "canSetPlaybackRate");
234
- this._logger.sendTelemetryEvent(internals_1.TelemetryEvents.SessionCoordinator.SetPlaybackRateCalled, null, { playbackRate });
301
+ errors_js_1.ActionBlockedError.assert(this.canSetPlaybackRate, "LiveMediaSessionCoordinator:setPlaybackRate", "setPlaybackRate", "canSetPlaybackRate");
302
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.SetPlaybackRateCalled, null, { playbackRate });
235
303
  yield this._rateChangeEvent.sendEvent({ playbackRate });
304
+ if (this.canSendPositionUpdates) {
305
+ // User has taken initiative to send event, give priority for sending position updates
306
+ this._positionUpdateInterval.hasPriority = true;
307
+ }
236
308
  });
237
309
  }
238
310
  /**
@@ -248,13 +320,17 @@ class LiveMediaSessionCoordinator extends events_1.default {
248
320
  setTrack(metadata, waitPoints) {
249
321
  return __awaiter(this, void 0, void 0, function* () {
250
322
  live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:setTrack", "setTrack", this.initializeState);
251
- internals_1.ActionBlockedError.assert(this.canSetTrack, "LiveMediaSessionCoordinator:setTrack", "setTrack", "canSetTrack");
323
+ errors_js_1.ActionBlockedError.assert(this.canSetTrack, "LiveMediaSessionCoordinator:setTrack", "setTrack", "canSetTrack");
252
324
  // Send transport command
253
- this._logger.sendTelemetryEvent(internals_1.TelemetryEvents.SessionCoordinator.SetTrackCalled);
325
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.SetTrackCalled);
254
326
  yield this._setTrackEvent.sendEvent({
255
327
  metadata: metadata,
256
328
  waitPoints: waitPoints || [],
257
329
  });
330
+ if (this.canSendPositionUpdates) {
331
+ // User has taken initiative to send event, give priority for sending position updates
332
+ this._positionUpdateInterval.hasPriority = true;
333
+ }
258
334
  });
259
335
  }
260
336
  /**
@@ -272,12 +348,16 @@ class LiveMediaSessionCoordinator extends events_1.default {
272
348
  setTrackData(data) {
273
349
  return __awaiter(this, void 0, void 0, function* () {
274
350
  live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:setTrackData", "setTrackData", this.initializeState);
275
- internals_1.ActionBlockedError.assert(this.canSetTrackData, "LiveMediaSessionCoordinator:setTrackData", "setTrackData", "canSetTrackData");
351
+ errors_js_1.ActionBlockedError.assert(this.canSetTrackData, "LiveMediaSessionCoordinator:setTrackData", "setTrackData", "canSetTrackData");
276
352
  // Send transport command
277
- this._logger.sendTelemetryEvent(internals_1.TelemetryEvents.SessionCoordinator.SetTrackDataCalled);
353
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.SetTrackDataCalled);
278
354
  yield this._setTrackDataEvent.sendEvent({
279
355
  data: data,
280
356
  });
357
+ if (this.canSendPositionUpdates) {
358
+ // User has taken initiative to send event, give priority for sending position updates
359
+ this._positionUpdateInterval.hasPriority = true;
360
+ }
281
361
  });
282
362
  }
283
363
  /**
@@ -307,10 +387,10 @@ class LiveMediaSessionCoordinator extends events_1.default {
307
387
  beginSuspension(waitPoint) {
308
388
  var _a;
309
389
  live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:beginSuspension", "beginSuspension", this.initializeState);
310
- internals_1.TrackMetadataNotSetError.assert(!!((_a = this._groupState) === null || _a === void 0 ? void 0 : _a.playbackTrack.current.metadata), "LiveMediaSessionCoordinator:beginSuspension", "beginSuspension");
390
+ errors_js_1.TrackMetadataNotSetError.assert(!!((_a = this._groupState) === null || _a === void 0 ? void 0 : _a.playbackTrack.current.metadata), "LiveMediaSessionCoordinator:beginSuspension", "beginSuspension");
311
391
  // Tell group state that suspension is started
312
392
  if (waitPoint) {
313
- this._logger.sendTelemetryEvent(internals_1.TelemetryEvents.SessionCoordinator.BeginSuspensionAndWait, null, {
393
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.BeginSuspensionAndWait, null, {
314
394
  position: waitPoint.position,
315
395
  maxClients: waitPoint.maxClients,
316
396
  });
@@ -318,20 +398,20 @@ class LiveMediaSessionCoordinator extends events_1.default {
318
398
  this._groupState.beginSuspension(waitPoint);
319
399
  }
320
400
  else {
321
- this._logger.sendTelemetryEvent(internals_1.TelemetryEvents.SessionCoordinator.BeginSuspension);
401
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.BeginSuspension);
322
402
  this._groupState.beginSuspension();
323
403
  }
324
404
  // Return new suspension object
325
- return new LiveMediaSessionCoordinatorSuspension_1.LiveMediaSessionCoordinatorSuspension(waitPoint, (time) => {
405
+ return new LiveMediaSessionCoordinatorSuspension_js_1.LiveMediaSessionCoordinatorSuspension(waitPoint, (time) => {
326
406
  var _a, _b;
327
407
  if (waitPoint) {
328
- this._logger.sendTelemetryEvent(internals_1.TelemetryEvents.SessionCoordinator.EndSuspensionAndWait, null, {
408
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.EndSuspensionAndWait, null, {
329
409
  position: waitPoint.position,
330
410
  maxClients: waitPoint.maxClients,
331
411
  });
332
412
  }
333
413
  else {
334
- this._logger.sendTelemetryEvent(internals_1.TelemetryEvents.SessionCoordinator.EndSuspension);
414
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.EndSuspension);
335
415
  }
336
416
  this._groupState.endSuspension(time == undefined);
337
417
  if (time != undefined &&
@@ -354,8 +434,8 @@ class LiveMediaSessionCoordinator extends events_1.default {
354
434
  * Called by MediaSession to start coordinator.
355
435
  */
356
436
  initialize(acceptTransportChangesFrom) {
357
- var _a;
358
437
  return __awaiter(this, void 0, void 0, function* () {
438
+ var _a;
359
439
  live_share_1.LiveDataObjectInitializeNotNeededError.assert("LiveMediaSessionCoordinator:initialize", this.initializeState);
360
440
  this.initializeState = live_share_1.LiveDataObjectInitializeState.pending;
361
441
  try {
@@ -369,11 +449,16 @@ class LiveMediaSessionCoordinator extends events_1.default {
369
449
  this.initializeState = live_share_1.LiveDataObjectInitializeState.succeeded;
370
450
  try {
371
451
  // start needs to happen after setting initializedState to "succeeded"
372
- yield ((_a = this._synchronizer) === null || _a === void 0 ? void 0 : _a.start(undefined, (evt, sender, local) => __awaiter(this, void 0, void 0, function* () { return false; }), (connecting) => __awaiter(this, void 0, void 0, function* () { return true; }), false, false));
452
+ yield ((_a = this._synchronizer) === null || _a === void 0 ? void 0 : _a.start({
453
+ initialState: undefined,
454
+ updateState: (evt, sender, local) => __awaiter(this, void 0, void 0, function* () { return false; }),
455
+ getLocalUserCanSend: (connecting) => __awaiter(this, void 0, void 0, function* () { return true; }),
456
+ enableBackgroundUpdates: false,
457
+ }));
373
458
  }
374
459
  catch (error) {
375
460
  // not a fatal error for LiveMediaSession, only used for "connect" event to send new clients position updates.
376
- this._logger.sendErrorEvent(internals_1.TelemetryEvents.SessionCoordinator
461
+ this._logger.sendErrorEvent(consts_js_1.TelemetryEvents.SessionCoordinator
377
462
  .LiveObjectSynchronizerStartError, error);
378
463
  }
379
464
  });
@@ -390,14 +475,15 @@ class LiveMediaSessionCoordinator extends events_1.default {
390
475
  * @hidden
391
476
  * Called by MediaSession to trigger the sending of a position update.
392
477
  */
393
- sendPositionUpdate(state) {
478
+ sendPositionUpdate(state, targetClientId) {
394
479
  var _a, _b;
395
480
  live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:sendPositionUpdate", "sendPositionUpdate", this.initializeState);
396
481
  if (this.canSendPositionUpdates) {
397
482
  // Send position update event
398
483
  const evt = this._groupState.createPositionUpdateEvent(state);
399
- (_a = this._positionUpdateEvent) === null || _a === void 0 ? void 0 : _a.sendEvent(evt).catch((err) => {
400
- this._logger.sendErrorEvent(internals_1.TelemetryEvents.SessionCoordinator.PositionUpdateEventError, err);
484
+ (_a = this._positionUpdateEvent) === null || _a === void 0 ? void 0 : _a.sendEvent(evt, targetClientId).catch((err) => {
485
+ this._logger.sendErrorEvent(consts_js_1.TelemetryEvents.SessionCoordinator
486
+ .PositionUpdateEventError, err);
401
487
  });
402
488
  }
403
489
  else if (this.isSuspended) {
@@ -405,7 +491,7 @@ class LiveMediaSessionCoordinator extends events_1.default {
405
491
  // position update for clients that have canSendPositionUpdates==false, but are suspending
406
492
  const evt = this._groupState.createPositionUpdateEvent(state);
407
493
  (_b = this._positionUpdateEvent) === null || _b === void 0 ? void 0 : _b.sendLocalEvent(evt).catch((err) => {
408
- this._logger.sendErrorEvent(internals_1.TelemetryEvents.SessionCoordinator.PositionUpdateEventError, err);
494
+ this._logger.sendErrorEvent(consts_js_1.TelemetryEvents.SessionCoordinator.PositionUpdateEventError, err);
409
495
  });
410
496
  }
411
497
  else {
@@ -416,37 +502,39 @@ class LiveMediaSessionCoordinator extends events_1.default {
416
502
  createChildren(acceptTransportChangesFrom) {
417
503
  return __awaiter(this, void 0, void 0, function* () {
418
504
  // Create event scopes
419
- const scope = new live_share_1.LiveEventScope(this._runtime, this._liveRuntime, acceptTransportChangesFrom);
420
- const unrestrictedScope = new live_share_1.LiveEventScope(this._runtime, this._liveRuntime);
505
+ const scope = new internal_1.LiveEventScope(this._runtime, this._liveRuntime, acceptTransportChangesFrom);
506
+ const unrestrictedScope = new internal_1.LiveEventScope(this._runtime, this._liveRuntime);
421
507
  // Initialize internal coordinator state
422
- this._groupState = new internals_1.GroupCoordinatorState(this._runtime, this._liveRuntime, this._maxPlaybackDrift, this._positionUpdateInterval, this._getPlayerState);
423
- this._groupState.on(internals_1.GroupCoordinatorStateEvents.triggeraction, (evt) => this.emit(evt.name, evt));
424
- this._groupState.on(internals_1.GroupCoordinatorStateEvents.triggeractionignored, (evt) => this.emit(evt.name, evt));
508
+ this._groupState = new GroupCoordinatorState_js_1.GroupCoordinatorState(this._runtime, this._liveRuntime, this._maxPlaybackDrift, this._positionUpdateInterval, this._getPlayerState);
509
+ this._groupState.on(GroupCoordinatorState_js_1.GroupCoordinatorStateEvents.triggeraction, (evt) => this.emit(evt.name, evt));
510
+ this._groupState.on(GroupCoordinatorState_js_1.GroupCoordinatorStateEvents.triggeractionignored, (evt) => this.emit(evt.name, evt));
425
511
  // Listen for track changes
426
- this._setTrackEvent = new live_share_1.LiveEventTarget(scope, "setTrack", (event, local) => this._groupState.handleSetTrack(event, local));
427
- this._setTrackDataEvent = new live_share_1.LiveEventTarget(scope, "setTrackData", (event, local) => this._groupState.handleSetTrackData(event, local));
512
+ this._setTrackEvent = new internal_1.LiveEventTarget(scope, "setTrack", (event, local) => this._groupState.handleSetTrack(event, local));
513
+ this._setTrackDataEvent = new internal_1.LiveEventTarget(scope, "setTrackData", (event, local) => this._groupState.handleSetTrackData(event, local));
428
514
  // Listen for transport commands
429
- this._playEvent = new live_share_1.LiveEventTarget(scope, "play", (event, local) => this._groupState.handleTransportCommand(event, local));
430
- this._pauseEvent = new live_share_1.LiveEventTarget(scope, "pause", (event, local) => this._groupState.handleTransportCommand(event, local));
431
- this._seekToEvent = new live_share_1.LiveEventTarget(scope, "seekTo", (event, local) => this._groupState.handleTransportCommand(event, local));
432
- this._rateChangeEvent = new live_share_1.LiveEventTarget(scope, "rateChange", (event, local) => {
515
+ this._playEvent = new internal_1.LiveEventTarget(scope, "play", (event, local) => this._groupState.handleTransportCommand(event, local));
516
+ this._pauseEvent = new internal_1.LiveEventTarget(scope, "pause", (event, local) => this._groupState.handleTransportCommand(event, local));
517
+ this._seekToEvent = new internal_1.LiveEventTarget(scope, "seekTo", (event, local) => this._groupState.handleTransportCommand(event, local));
518
+ this._rateChangeEvent = new internal_1.LiveEventTarget(scope, "rateChange", (event, local) => {
433
519
  this._groupState.handleRateChangeCommand(event, local);
434
520
  });
435
521
  // Listen for position updates
436
- this._positionUpdateEvent = new live_share_1.LiveEventTarget(unrestrictedScope, "positionUpdate", (event, local) => this._groupState.handlePositionUpdate(event, local));
437
- this._synchronizer = new live_share_1.LiveObjectSynchronizer(this._id, this._runtime, this._liveRuntime);
522
+ this._positionUpdateEvent = new internal_1.LiveEventTarget(unrestrictedScope, "positionUpdate", (event, local) => this._groupState.handlePositionUpdate(event, local));
523
+ this._synchronizer = new internal_1.LiveObjectSynchronizer(this._id, this._runtime, this._liveRuntime);
438
524
  this._synchronizer.onJoinedListener = (clientId, timestamp) => {
439
- this._logger.sendTelemetryEvent(internals_1.TelemetryEvents.SessionCoordinator.RemoteConnectReceived, null, {
525
+ this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.RemoteConnectReceived, null, {
440
526
  correlationId: live_share_1.LiveTelemetryLogger.formatCorrelationId(clientId, timestamp),
441
527
  });
442
528
  // Immediately send a position update
443
529
  try {
444
530
  const state = this._getPlayerState();
445
- this.sendPositionUpdate(state);
531
+ // Send only to the user that joined the session using the targetClientId prop.
532
+ // This ensures that only the user that connected receives this one-time position update, minimizing costs.
533
+ this.sendPositionUpdate(state, clientId);
446
534
  }
447
535
  catch (err) {
448
536
  // if player is not setup yet, local client might have also just joined and can't send its position.
449
- const playerNotSetup = (0, internals_2.isErrorLike)(err) &&
537
+ const playerNotSetup = (0, internal_1.isErrorLike)(err) &&
450
538
  err.message.includes("LiveMediaSession:getCurrentPlayerState");
451
539
  if (!playerNotSetup) {
452
540
  throw err;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveMediaSessionCoordinator.js","sourceRoot":"","sources":["../../src/LiveMediaSessionCoordinator.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
3
  * Licensed under the Microsoft Live Share SDK License.
4
4
  */
5
- import { MediaSessionCoordinatorSuspension, CoordinationWaitPoint } from "./MediaSessionExtensions";
5
+ import { MediaSessionCoordinatorSuspension, CoordinationWaitPoint } from "./MediaSessionExtensions.js";
6
6
  export declare class LiveMediaSessionCoordinatorSuspension implements MediaSessionCoordinatorSuspension {
7
7
  private _waitPoint?;
8
8
  private _onEnd;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveMediaSessionCoordinatorSuspension.d.ts","sourceRoot":"","sources":["../../src/LiveMediaSessionCoordinatorSuspension.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,iCAAiC,EACjC,qBAAqB,EACxB,MAAM,6BAA6B,CAAC;AAErC,qBAAa,qCACT,YAAW,iCAAiC;IAE5C,OAAO,CAAC,UAAU,CAAC,CAAwB;IAC3C,OAAO,CAAC,MAAM,CAA4B;gBAGtC,SAAS,EAAE,qBAAqB,GAAG,SAAS,EAC5C,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI;IAMpC;;OAEG;IACH,IAAW,SAAS,IAAI,qBAAqB,GAAG,SAAS,CAExD;IAED;;;OAGG;IACI,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;CAGpC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveMediaSessionCoordinatorSuspension.js","sourceRoot":"","sources":["../../src/LiveMediaSessionCoordinatorSuspension.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAOH,MAAa,qCAAqC;IAM9C,YACI,SAA4C,EAC5C,KAAgC;QAEhC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACI,GAAG,CAAC,MAAe;QACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;CACJ;AA5BD,sFA4BC"}
@@ -1,14 +1,15 @@
1
- /// <reference types="node" />
2
1
  /**
3
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
4
3
  * Licensed under the Microsoft Live Share SDK License.
5
4
  */
6
- import { ILiveEvent, IRuntimeSignaler } from "@microsoft/live-share";
7
- import EventEmitter from "events";
8
- import { ExtendedMediaMetadata, CoordinationWaitPoint, ExtendedMediaSessionActionDetails } from "./MediaSessionExtensions";
9
- import { VolumeManager } from "./VolumeManager";
10
- import { LiveMediaSession } from "./LiveMediaSession";
11
- import { IMediaPlayer } from "./IMediaPlayer";
5
+ import { ILiveEvent } from "@microsoft/live-share";
6
+ import { IRuntimeSignaler } from "@microsoft/live-share/internal";
7
+ import { ExtendedMediaMetadata, CoordinationWaitPoint, ExtendedMediaSessionActionDetails } from "./MediaSessionExtensions.js";
8
+ import { VolumeManager } from "./VolumeManager.js";
9
+ import { LiveMediaSession } from "./LiveMediaSession.js";
10
+ import { IMediaPlayer } from "./IMediaPlayer.js";
11
+ import { TypedEventEmitter } from "@fluid-internal/client-utils";
12
+ import { IEvent } from "@fluidframework/core-interfaces";
12
13
  /**
13
14
  * Event data returned by `MediaPlayerSynchronizer` object.
14
15
  */
@@ -33,6 +34,19 @@ export declare enum MediaPlayerSynchronizerEvents {
33
34
  groupaction = "groupaction",
34
35
  useraction = "useraction"
35
36
  }
37
+ /**
38
+ * @hidden
39
+ * Emitted events from the `MediaPlayerSynchronizer` class.
40
+ */
41
+ export interface IMediaPlayerSynchronizerEvents extends IEvent {
42
+ /**
43
+ * Event listener for events emitted
44
+ * @param event update
45
+ * @param listener listener function
46
+ * @param listener.event the event instance
47
+ */
48
+ (event: string, listener: (event: any) => void): void;
49
+ }
36
50
  /**
37
51
  * Synchronizes a local HTML Media Element with a group of remote HTML Media Elements.
38
52
  *
@@ -42,7 +56,7 @@ export declare enum MediaPlayerSynchronizerEvents {
42
56
  * to the local player. When the group session is joined the commands will be broadcast to the
43
57
  * group in addition to being applied to the local player.
44
58
  */
45
- export declare class MediaPlayerSynchronizer extends EventEmitter {
59
+ export declare class MediaPlayerSynchronizer extends TypedEventEmitter<IMediaPlayerSynchronizerEvents> {
46
60
  private static SESSION_ACTIONS;
47
61
  private static PLAYER_EVENTS;
48
62
  private _logger;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaPlayerSynchronizer.d.ts","sourceRoot":"","sources":["../../src/MediaPlayerSynchronizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAuB,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EACH,gBAAgB,EAEnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAGH,qBAAqB,EACrB,qBAAqB,EACrB,iCAAiC,EAGpC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,6BAA8B,SAAQ,UAAU;IAC7D;;OAEG;IACH,OAAO,EAAE,iCAAiC,CAAC;IAC3C;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;CACjB;AAED;;GAEG;AACH,oBAAY,6BAA6B;IACrC;;OAEG;IACH,sBAAsB,2BAA2B;IACjD,WAAW,gBAAgB;IAC3B,UAAU,eAAe;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,8BAA+B,SAAQ,MAAM;IAC1D;;;;;OAKG;IACH,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;CACzD;AAED;;;;;;;;GAQG;AACH,qBAAa,uBAAwB,SAAQ,iBAAiB,CAAC,8BAA8B,CAAC;IAC1F,OAAO,CAAC,MAAM,CAAC,eAAe,CAS5B;IACF,OAAO,CAAC,MAAM,CAAC,aAAa,CAQ1B;IAEF,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAC,CAAoC;IAC5D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,4BAA4B,CAAQ;IAC5C,OAAO,CAAC,sBAAsB,CAA6C;IAC3E,OAAO,CAAC,qBAAqB,CAAe;IAC5C,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,UAAU,CAAuB;IAEzC;;;;;OAKG;gBAEC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,gBAAgB,EAC9B,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,MAAM,IAAI;IA4SrB;;OAEG;IACH,IAAW,MAAM,IAAI,YAAY,CAEhC;IAED;;OAEG;IACH,IAAW,YAAY,IAAI,gBAAgB,CAE1C;IAED;;;;;;;;;OASG;IACH,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAOjC;IAED;;;;;;;;OAQG;IACH,IAAW,2BAA2B,IAAI,OAAO,CAEhD;IAED,IAAW,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAEpD;IAED;;OAEG;IACH,IAAW,aAAa,IAAI,aAAa,CAExC;IAED;;;;OAIG;IACI,gBAAgB,CACnB,KAAK,EAAE,6BAA6B,EACpC,QAAQ,EAAE,CAAC,GAAG,EAAE,6BAA6B,KAAK,IAAI,GACvD,IAAI;IAKP;;;;OAIG;IACI,mBAAmB,CACtB,KAAK,EAAE,6BAA6B,EACpC,QAAQ,EAAE,CAAC,GAAG,EAAE,6BAA6B,KAAK,IAAI,GACvD,IAAI;IAKP;;OAEG;IACI,GAAG,IAAI,IAAI;IAwBlB;;;;;;;;OAQG;IACI,SAAS,IAAI,IAAI;IAaxB;;;OAGG;IACI,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAmCpC;;;;;;;;OAQG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAelC;;;;;;;;OAQG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAenC;;;;;;;;OAQG;IACU,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBnC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBjE;;;;;;;;OAQG;IACU,QAAQ,CACjB,KAAK,EAAE,qBAAqB,EAC5B,UAAU,CAAC,EAAE,qBAAqB,EAAE,GACrC,OAAO,CAAC,IAAI,CAAC;IAehB;;;;;;;;OAQG;IACU,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB7D,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,kBAAkB;YASZ,aAAa;CAG9B"}