senza-sdk 4.3.1-4a01fcf.0 → 4.3.1-ca3d96f.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "senza-sdk",
3
- "version": "4.3.1-4a01fcf.0",
3
+ "version": "4.3.1-ca3d96f.0",
4
4
  "main": "./src/api.js",
5
5
  "description": "API for Senza application",
6
6
  "license": "MIT",
@@ -46,14 +46,14 @@
46
46
  "global": {
47
47
  "branches": 88,
48
48
  "functions": 92.36,
49
- "lines": 93.83,
50
- "statements": 93.81
49
+ "lines": 93.47,
50
+ "statements": 93.46
51
51
  },
52
52
  "src/interface": {
53
- "branches": 69.38,
54
- "functions": 52.72,
55
- "lines": 71.95,
56
- "statements": 72.16
53
+ "branches": 68.42,
54
+ "functions": 40.74,
55
+ "lines": 66.83,
56
+ "statements": 67.14
57
57
  }
58
58
  }
59
59
  },
package/src/api.js CHANGED
@@ -4,6 +4,11 @@ import { Lifecycle, RemotePlayer, DeviceManager, PlatformManager, AlarmManager,
4
4
 
5
5
  const { version } = pack;
6
6
 
7
+ typeof document !== "undefined" && document.addEventListener("keydown", (event) => {
8
+ sdkLogger.log(`Got ${event.key} key`);
9
+ });
10
+
11
+
7
12
  let authToken;
8
13
 
9
14
  /** @namespace auth
@@ -193,6 +198,7 @@ export function getClientAssertion() {
193
198
 
194
199
  /**
195
200
  * @module
201
+ * @private
196
202
  * @type {Lifecycle}
197
203
  * @example
198
204
  * import { lifecycle } from "senza-sdk";
@@ -203,6 +209,7 @@ let lifecycle;
203
209
 
204
210
  /**
205
211
  * @module
212
+ * @private
206
213
  * @type {RemotePlayer}
207
214
  * @example
208
215
  * import { init, remotePlayer } from "senza-sdk";
@@ -221,6 +228,7 @@ let remotePlayer;
221
228
 
222
229
  /**
223
230
  * @module
231
+ * @private
224
232
  * @type {AlarmManager}
225
233
  * @example
226
234
  * import { alarmManager } from "senza-sdk";
@@ -231,6 +239,7 @@ let alarmManager;
231
239
 
232
240
  /**
233
241
  * @module
242
+ * @private
234
243
  * @type {DeviceManager}
235
244
  * @example
236
245
  * import { deviceManager } from "senza-sdk";
@@ -246,6 +255,7 @@ let deviceManager;
246
255
 
247
256
  /**
248
257
  * @module
258
+ * @private
249
259
  * @type {PlatformManager}
250
260
  * @example
251
261
  * import { platformManager } from "senza-sdk";
@@ -254,11 +264,11 @@ let deviceManager;
254
264
  *
255
265
  * @return {PlatformManager} pointer to the PlatformManager singleton
256
266
  */
257
-
258
-
259
267
  let platformManager;
268
+
260
269
  /**
261
270
  * @module
271
+ * @private
262
272
  * @type {MessageManager}
263
273
  * @example
264
274
  * import { MessageManager } from "senza-sdk";
@@ -272,6 +282,7 @@ let messageManager;
272
282
  * ShakaPlayer subclass of Shaka that handles both local and remote playback.
273
283
  *
274
284
  * @class ShakaPlayer
285
+ * @private
275
286
  * @type {new|ShakaPlayer}
276
287
  * @example
277
288
  * import { ShakaPlayer } from "senza-sdk";
@@ -291,6 +302,7 @@ let ShakaPlayerImplementation;
291
302
 
292
303
  /**
293
304
  * @module
305
+ * @private
294
306
  * @type {shaka}
295
307
  */
296
308
  let shakaImplementation;
@@ -8,10 +8,6 @@ let authToken;
8
8
  const API_VERSION = "1.0";
9
9
  let interfaceVersion;
10
10
 
11
- typeof document !== "undefined" && document.addEventListener("keydown", (event) => {
12
- sdkLogger.log(`Got ${event.key} key`);
13
- });
14
-
15
11
  /** @namespace auth
16
12
  *@example
17
13
  * import { auth } from "senza-sdk";
@@ -20,12 +20,6 @@ const DEFAULT_AUTO_BACKGROUND_VIDEO_DELAY = 30;
20
20
  const DEFAULT_AUTO_BACKGROUND_UI_DELAY = -1;
21
21
  const DEFAULT_AUTO_BACKGROUND_ENABLED = false;
22
22
 
23
- /**
24
- * Lifecycle is a singleton class that manages the application lifecycle states.<br>
25
- * @fires onstatechange
26
- * @fires userinactivity
27
- * @fires userdisconnected
28
- */
29
23
  class Lifecycle extends LifecycleInterface {
30
24
  constructor() {
31
25
  super();
@@ -112,7 +106,8 @@ class Lifecycle extends LifecycleInterface {
112
106
  });
113
107
  }
114
108
 
115
- /** @private Initialize the lifecycle
109
+ /**
110
+ * @private Initialize the lifecycle
116
111
  * @param {Object} uiStreamerSettings - UI-streamer portion of the settings taken from session info
117
112
  * @param {Object} [uiStreamerSettings.autoBackground] - Auto background mode configuration
118
113
  * @param {boolean} [uiStreamerSettings.autoBackground.enabled=false] - Enable/disable auto background
@@ -209,14 +204,16 @@ class Lifecycle extends LifecycleInterface {
209
204
  }
210
205
  }
211
206
 
212
- /** @private Checks if auto background is enabled including overrides.
207
+ /**
208
+ * @private Checks if auto background is enabled including overrides.
213
209
  * @returns {boolean}
214
210
  */
215
211
  _isAutoBackgroundEnabled() {
216
212
  return this._autoBackgroundOverrides?.enabled ?? this._autoBackground;
217
213
  }
218
214
 
219
- /** @private Gets the auto background video delay including overrides.
215
+ /**
216
+ * @private Gets the auto background video delay including overrides.
220
217
  * @returns {number}
221
218
  */
222
219
  _getAutoBackgroundOnVideoDelay() {
@@ -227,7 +224,8 @@ class Lifecycle extends LifecycleInterface {
227
224
  return this._autoBackgroundOnVideoDelay;
228
225
  }
229
226
 
230
- /** @private Gets the auto background UI delay including overrides.
227
+ /**
228
+ * @private Gets the auto background UI delay including overrides.
231
229
  * @returns {number}
232
230
  */
233
231
  _getAutoBackgroundOnUIDelay() {
@@ -290,6 +288,7 @@ class Lifecycle extends LifecycleInterface {
290
288
  }
291
289
 
292
290
  /**
291
+ * @private
293
292
  * This method moves the application into standby mode, i.e. last ui frame is displayed and ui resources are released.
294
293
  * It should be called whenever the application wishes to go into standby mode and release resources.
295
294
  * @example
@@ -1,35 +1,8 @@
1
1
  import { MessageManager as MessageManagerInterface } from "../interface/messageManager";
2
2
  import { getFCID, sdkLogger } from "./utils";
3
3
 
4
- /**
5
- * MessageManager is a singleton class that manages the external messages received by the application. It fires custom events as "message" with the payload as the content
6
- * @fires MessageManager#message
7
- */
8
-
9
4
  class MessageManager extends MessageManagerInterface {
10
5
 
11
- /**
12
- * @typedef {object} MessageDetails - object which contains the content of the message
13
- * @property {string} eventName - The name of the event message, a property of MessageDetails
14
- * @property {object} payload - The payload for this event, a property of MessageDetails
15
- * @property {string} fcid - The flow context for this message, a property of MessageDetails
16
- */
17
-
18
- /**
19
- * message event
20
- *
21
- * @event MessageManager#message
22
- * @type {CustomEvent}
23
- * @property {MessageDetails} detail - object containing data related to the event:
24
-
25
- *
26
- * @description Fired when an external event arrives. This is a generic handler for all messages received for any registered group <br>
27
- * @example
28
- * messageManager.addEventListener("message", (e) => {
29
- * console.log("message arrived with data", e.detail);
30
- * });
31
- *
32
- */
33
6
  constructor() {
34
7
  super();
35
8
  typeof document !== "undefined" && document.addEventListener("hs/externalEvent", (e) => {
@@ -38,12 +11,6 @@ class MessageManager extends MessageManagerInterface {
38
11
  });
39
12
  }
40
13
 
41
- /** Register to specific group(s). This function replaces the previously registered groups
42
- * @param {Array<String>} groups group events to receive messages.
43
- * @return {Promise} Promise which is resolved when the registerGroups command has been successfully processed.
44
- * Failure to process the registerGroups command will result in the promise being rejected.
45
- * messageManager.registerGroups(["A","B"]);
46
- * */
47
14
  async registerGroups(groups) {
48
15
  sdkLogger.log(`register called for ${groups}`);
49
16
  return new Promise((resolve, reject) => {
@@ -2,24 +2,12 @@ import { PlatformManager as PlatformManagerInterface } from "../interface/platfo
2
2
  import { sdkLogger } from "./utils";
3
3
  import { sessionInfo } from "./SessionInfo";
4
4
 
5
-
6
- /**
7
- * PlatformManager is a singleton class that manages the platform
8
- */
9
5
  class PlatformManager extends PlatformManagerInterface {
10
6
 
11
7
  constructor() {
12
8
  super();
13
9
  }
14
10
 
15
- /**
16
- * @returns {Object} appConfig object
17
- * @property {String[]} territories - a list of territories configured for the tenant.
18
- * if the list is undefined or empty - there are no restrictions.
19
- * @example
20
- * import { platformManager } from "senza-sdk";
21
- * const appConfig = platformManager.appConfig
22
- * */
23
11
  get appConfig() {
24
12
  const sessionInfoObj = sessionInfo.sessionInfoObj;
25
13
  const appConfig = sessionInfoObj.homeSessionInfo?.["appConfig"] || {};
@@ -27,13 +15,6 @@ class PlatformManager extends PlatformManagerInterface {
27
15
  return appConfig;
28
16
  }
29
17
 
30
- /**
31
- *
32
- * @param {string} timezone the timezone to set to
33
- * the format of the timezone is according to the standard TZ identifier
34
- * (e.g. America/Los_Angeles, Asia/Tokyo, Europe/Brussels)
35
- * for a full list of TZ identifiers, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
36
- */
37
18
  setTimezone(timezone) {
38
19
  if (window.cefQuery) {
39
20
  const request = { message: JSON.stringify({ type: "setTimeZone", timezone }), waitForResponse: false, target: "UI-Streamer" };
@@ -1,4 +1,5 @@
1
- import { RemotePlayer as RemotePlayerInterface } from "../interface/remotePlayer";
1
+ // eslint-disable-next-line no-unused-vars
2
+ import { RemotePlayer as RemotePlayerInterface, RemotePlayerError as RemotePlayerErrorInterface, Config } from "../interface/remotePlayer";
2
3
  import {
3
4
  getFCID,
4
5
  isAudioSyncConfigured,
@@ -28,11 +29,7 @@ const cloneDeep = (element) => {
28
29
  return JSON.parse(JSON.stringify(element));
29
30
  };
30
31
 
31
- // TODO: check that the link below to the error list is working on dashreadme
32
- /** Error object to be thrown on remotePlayer api failures.
33
- * [See error list]{@link RemotePlayer#error}
34
- */
35
- export class RemotePlayerError extends Error {
32
+ export class RemotePlayerError extends RemotePlayerErrorInterface {
36
33
  constructor(code, message) {
37
34
  super(message);
38
35
  this.code = code;
@@ -64,26 +61,6 @@ function setPlaybackInfo(playbackInfo) {
64
61
  }
65
62
  }
66
63
 
67
-
68
- /**
69
- * @typedef {Object} Config
70
- * @property {string} preferredAudioLanguage
71
- * @property {string} preferredSubtitlesLanguage
72
- * @property {number} minSuggestedPresentationDelay - minimal delay allowed for live playback in seconds
73
- * @property {boolean} autoPlay - (Not implemented yet) upon loading start playing automatically
74
- */
75
-
76
- /**
77
- * RemotePlayer a singleton class to communicate with remote player
78
- * @fires timeupdate
79
- * @fires tracksupdate
80
- * @fires ended
81
- * @fires error
82
- * @fires onloadmodechange
83
- * @fires playing
84
- * @fires seeking (Not implemented yet)
85
- * @fires seeked (Not implemented yet)
86
- */
87
64
  class RemotePlayer extends RemotePlayerInterface {
88
65
  constructor() {
89
66
  super();
@@ -164,49 +141,11 @@ class RemotePlayer extends RemotePlayerInterface {
164
141
  */
165
142
  this._isPlaying = false;
166
143
 
167
- /**
168
- * @event RemotePlayer#canplay
169
- * @description canplay event will be dispatched when the remote player can start play the event
170
- * @example
171
- * remotePlayer.addEventListener("canplay", () => {
172
- * console.info("remotePlayer canplay");
173
- * remotePlayer.play();
174
- * });
175
- * */
176
-
177
- /**
178
- * @event RemotePlayer#playing
179
- * @description playing event will be dispatched when the remote player started playback of the first audio frame. This event can be used to synchronize the local player with the remote player.
180
- * @example
181
- * remotePlayer.addEventListener("playing", () => {
182
- * console.info("remotePlayer playing");
183
- * });
184
- * */
185
-
186
- /**
187
- * @event RemotePlayer#loadedmetadata
188
- * @description loadedmetadata event will be dispatched when the remote player metadata is loaded
189
- * and the audio/video tracks are available
190
- * @example
191
- * remotePlayer.addEventListener("loadedmetadata", () => {
192
- * console.info("remotePlayer loadedmetadata", remotePlayer.getAudioTracks(), remotePlayer.getTextTracks());
193
- * });
194
- * */
195
144
  typeof document !== "undefined" && document.addEventListener("hs/remotePlayerEvent", (e) => {
196
145
  sdkLogger.info("Got hs/remotePlayerEvent event with detail", JSON.stringify(e?.detail));
197
146
  this.dispatchEvent(new Event(e?.detail?.eventName));
198
147
  });
199
148
 
200
- /**
201
- *
202
- * @event RemotePlayer#timeupdate
203
- * @example
204
- * remotePlayer.addEventListener("timeupdate", () => {
205
- * console.info("remotePlayer timeupdate", remotePlayer.currentTime);
206
- * localPlayer.getMediaElement().currentTime = remotePlayer.currentTime || 0;
207
- * });
208
- *
209
- */
210
149
  typeof document !== "undefined" && document.addEventListener("hs/playbackInfoEvent", () => {
211
150
  sdkLogger.info("Got hs/playbackInfoEvent");
212
151
  // When attached, the sdk controls the synchronization between the local and remote player.
@@ -220,15 +159,6 @@ class RemotePlayer extends RemotePlayerInterface {
220
159
  }
221
160
  });
222
161
 
223
- /**
224
- *
225
- * @event RemotePlayer#tracksupdate
226
- * @example
227
- * remotePlayer.addEventListener("tracksupdate", () => {
228
- * console.info("remotePlayer tracksupdate", remotePlayer.getAudioTracks(), remotePlayer.getTextTracks());
229
- * });
230
- *
231
- */
232
162
  typeof document !== "undefined" && document.addEventListener("hs/playback", (e) => {
233
163
  sdkLogger.info("Got hs/playback event with detail", JSON.stringify(e?.detail));
234
164
  this._availabilityStartTime = e?.detail?.availabilityStartTime;
@@ -236,13 +166,6 @@ class RemotePlayer extends RemotePlayerInterface {
236
166
  this.dispatchEvent(new Event("tracksupdate"));
237
167
  });
238
168
 
239
- /**
240
- * @event RemotePlayer#ended
241
- * @example
242
- * remotePlayer.addEventListener("ended", () => {
243
- * console.info("remotePlayer ended");
244
- * });
245
- */
246
169
  typeof document !== "undefined" && document.addEventListener("hs/EOS", () => {
247
170
  sdkLogger.info("Got hs/EOS event");
248
171
  this.dispatchEvent(new Event("ended"));
@@ -275,72 +198,7 @@ class RemotePlayer extends RemotePlayerInterface {
275
198
  sdkLogger.info(`Adding ${event.detail} seconds, previousTime=${previousCurrentTime} currentTime=${this._videoElement.currentTime}`);
276
199
  });
277
200
 
278
- /**
279
- *
280
- * @event RemotePlayer#error
281
- * @type {object}
282
- * @property {int} detail.errorCode
283
- * @property {string} detail.message
284
- *
285
- * @see Possible error codes:
286
- *
287
- * | Code | Domain | Description |
288
- * | :-------- | :---------------- | :-----------------------------------------------------------------------------------------------|
289
- * | 23 | Player | load() failed due to remote player initialization error |
290
- * | 98 | Player | load() failed due to remote player failure to send message to the client |
291
- * | 99 | Player | load() failed due to remote player reporting invalid message |
292
- * | 1000 | Encrypted content | Failed to create or initialise the CDM |
293
- * | 1001 | Encrypted content | Failed to create a CDM session |
294
- * | 1002 | Encrypted content | CDM failed to generate a license request |
295
- * | 1003 | Encrypted content | The CDM rejected the license server response |
296
- * | 1004 | Encrypted content | The CDM rejected the license server certificate |
297
- * | 1005 | Encrypted content | All keys in the license have expired |
298
- * | 1006 | Encrypted content | Output device is incompatible with the license requirements (HDCP) |
299
- * | 1007 | Encrypted content | The device has been revoked |
300
- * | 1008 | Encrypted content | The device secrets aren't available |
301
- * | 1009 | Encrypted content | Keys are loaded but the KID requested by playback isn't found. The app has likely issued a license for the wrong content or there is a mismatch between the KIDs in the license and the data plane |
302
- * | 1010 | Encrypted content | The CDM failed to provision, therefore it is not possible to play encrypted content |
303
- * | 1100 | Encrypted content | The CDM session has already received a license response. The app has likely issued 2, or more, license responses for the same request. The subsequent licenses will be ignored so this error is informational only |
304
- * | 1101 | Encrypted content | The license has been rejected since an error was received by the CDM. The app has likely sent a non-200 code to `WriteLicenseResponse` |
305
- * | 1102 | Encrypted content | A license response wasn't received from the app within a pre-defined timeout |
306
- * | 1103 | Encrypted content | The CDM session associated with this license response is in an invalid state. This is an internal Senza platform error |
307
- * | 1104 | Encrypted content | The CDM failed to send a license request to the app. This is an internal Senza platform error |
308
- * | 1999 | Encrypted content | An unknown encrypted content error |
309
- * | 2000 | Player | Content makes reference to no or unsupported key system |
310
- * | 3000 | Player | Unexpected problem with playback, only used if no more specific code in 3xxx range applies |
311
- * | 3001 | Player | Problem accessing content manifest, only used if no more specific code in 8xxx range applies |
312
- * | 3002 | Player | Unexpectedly stopped playback |
313
- * | 3100 | Player | Problem parsing MP4 content |
314
- * | 3200 | Player | Problem with decoder |
315
- * | 3300 | Player | DRM keys unavailable, player waited for keys but none arrived |
316
- * | 3400 | Player | Problem accessing segments, only used if no more specific code in 34xx range applies |
317
- * | 3401 | Player | Problem accessing segments, connection issue or timeout |
318
- * | 3402 | Player | Problem accessing segments, server returned HTTP error code |
319
- * | 3403 | Player | Problem accessing segments, server authentication issue |
320
- * | 3404 | Player | Problem accessing segments, server returned not found |
321
- * | 3900-3999 | Player | Internal player error |
322
- * | 6000 | Player | The remote player api call has reached the configurable timeout with no response from the remote player |
323
- * | 6001 | Player | play() was called while the remote player is not loaded |
324
- * | 6002 | Player | load() was called while the application was in state 'background' or 'inTransitionToBackground' |
325
- * | 6500 | Player | remotePlayer api was called before initializing remotePlayer |
326
- * | 6501 | Player | load() was called while previous load/unload was still in progress |
327
- * | 6502 | Player | unload() was called while previous unload/load was still in progress |
328
- * | 8001 | Player | Error pulling manifest. bad parameters |
329
- * | 8002 | Player | Error pulling manifest. filters returned no data |
330
- * | 8003 | Player | Error pulling manifest. fetch error |
331
- * | 8004 | Player | Error pulling manifest. parse error |
332
- * | 8005 | Player | Error pulling manifest. stale manifest detected |
333
- * | 8006 | Player | Error updating manifest. internal cache error |
334
- * | 8007 | Player | Error updating manifest. internal error during backoff |
335
- * | 8008 | Player | Error pulling manifest. sidx parsing error |
336
- * | 8009 | Player | Error pulling manifest. internal error |
337
- *
338
- * @example
339
- * remotePlayer.addEventListener("error", (event) => {
340
- * console.error("received remotePlayer error:", event.detail.errorCode, event.detail.message);
341
- * });
342
- *
343
- */
201
+
344
202
  typeof document !== "undefined" && document.addEventListener("hs/ERR", (event) => {
345
203
  sdkLogger.info("Got hs/ERR event");
346
204
  delete event?.detail?.type; // type is always videoPlaybackEvent, so no need to pass it
@@ -348,58 +206,6 @@ class RemotePlayer extends RemotePlayerInterface {
348
206
  this.dispatchEvent(new CustomEvent("error", event));
349
207
  });
350
208
 
351
- /**
352
- *
353
- * @event RemotePlayer#license-request
354
- * @description Fired whenever the platform requires a license to play encrypted content.
355
- * The Web App is responsible for passing the (opaque) license request blob to the license server and passing the (opaque) license server response to the CDM by calling the `writeLicenseResponse` method on the event.
356
- * @type {LicenseRequestEvent}
357
- * @property {object} detail - Object containing ievent data
358
- * @property {string} detail.licenseRequest - Base64 coded opaque license request. The app is responsible for decoding the request before sending to the license server. Note that after decoding, the request may still be in Base64 form and this form should be sent to the license server without further decoding
359
- * @property {writeLicenseResponse} writeLicenseResponse - Write the license server response to the platform
360
- * @example
361
- * Whilst the payload structure and access controls are specific to each license server implementation, the Widevine UAT license server requires no authentication and minimal payload formatting and therefore serves as a useful case study that may be adapted.
362
- *
363
- * remotePlayer.addEventListener("license-request", async (event) => {
364
- * console.log("Got license-request event");
365
- * const requestBuffer = event?.detail?.licenseRequest;
366
- * const requestBufferStr = String.fromCharCode.apply(null, new Uint8Array(requestBuffer));
367
- * console.log("License Request in base64:", requestBufferStr);
368
- * const decodedLicenseRequest = window.atob(requestBufferStr); // from base 64
369
- * const licenseRequestBytes = Uint8Array.from(decodedLicenseRequest, (l) => l.charCodeAt(0));
370
- * // call Google API
371
- * const res = await getLicenseFromServer(licenseRequestBytes.buffer);
372
- * console.log("Writing response to platform ", res.code, res.responseBody);
373
- * event.writeLicenseResponse(res.code, res.responseBody);
374
- * });
375
-
376
- * async function getLicenseFromServer(licenseRequest) {
377
- * console.log("Requesting License from Widevine server");
378
- * const response = await fetch("https://proxy.uat.widevine.com/proxy", {
379
- * "method": "POST",
380
- * "body": licenseRequest,
381
- * "headers" : {
382
- * "Content-Type": "application/octet-stream"
383
- * }
384
- * });
385
- * const code = response.status;
386
- * if (code !== 200) {
387
- * console.error("failed to to get response from widevine:", code);
388
- * const responseBody = await response.text();
389
- * console.error(responseBody);
390
- * return {code, responseBody};
391
- * }
392
- * const responseBody = await response.arrayBuffer();
393
- * console.info("Got response: ");
394
- * return {code, responseBody};
395
- * }
396
- **/
397
- /**
398
- * @function writeLicenseResponse
399
- * @param {number} statusCode - License server HTTP response code, e.g. 200, 401, etc. Must be 200 to indicate a successful license exchange.
400
- * @param {string} response - License server response as opaque binary data in an ArrayBuffer.
401
- *
402
- * */
403
209
  typeof document !== "undefined" && document.addEventListener("hs/getLicense", (event) => {
404
210
  sdkLogger.info("Got hs/getLicense event");
405
211
  const getLicenseEventData = event?.detail;
@@ -419,20 +225,6 @@ class RemotePlayer extends RemotePlayerInterface {
419
225
  });
420
226
  }
421
227
 
422
- /**
423
- * @typedef {Object} LoadMode
424
- * @property {string} NOT_LOADED
425
- * @property {string} LOADING
426
- * @property {string} LOADED
427
- * @property {string} UNLOADING
428
- */
429
- LoadMode = Object.freeze({
430
- NOT_LOADED: "notLoaded",
431
- LOADING: "loading",
432
- LOADED: "loaded",
433
- UNLOADING: "unloading"
434
- });
435
-
436
228
  /** @private Initialize the remote player
437
229
  * @param {Object} uiStreamerSettings ui-streamer portion of the settings taken from session info
438
230
  * */