senza-sdk 4.2.64-70c0747.0 → 4.2.65-90c49ac.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/bundle.js +1 -1
  2. package/package.json +7 -15
  3. package/src/{implementation/alarmManager.js → alarmManager.js} +52 -15
  4. package/src/api.js +350 -183
  5. package/src/{implementation/deviceManager.js → deviceManager.js} +65 -4
  6. package/src/{implementation/lifecycle.js → lifecycle.js} +215 -28
  7. package/src/{implementation/messageManager.js → messageManager.js} +6 -6
  8. package/src/{implementation/platformManager.js → platformManager.js} +4 -5
  9. package/src/{implementation/remotePlayer.js → remotePlayer.js} +22 -18
  10. package/src/{implementation/senzaShakaPlayer.js → senzaShakaPlayer.js} +28 -18
  11. package/src/{implementation/utils.js → utils.js} +6 -15
  12. package/src/implementation/api.js +0 -367
  13. package/src/interface/alarmManager.js +0 -69
  14. package/src/interface/api.js +0 -8
  15. package/src/interface/deviceManager.js +0 -133
  16. package/src/interface/lifecycle.js +0 -278
  17. package/src/interface/messageManager.js +0 -46
  18. package/src/interface/platformManager.js +0 -35
  19. package/src/interface/remotePlayer.js +0 -441
  20. package/src/interface/senzaShakaPlayer.js +0 -171
  21. package/src/interface/utils.js +0 -45
  22. /package/src/{implementation/SessionInfo.js → SessionInfo.js} +0 -0
  23. /package/src/{implementation/devHelper.js → devHelper.js} +0 -0
  24. /package/src/{interface/devSequence.js → devSequence.js} +0 -0
  25. /package/src/{implementation/eventListenersManager.js → eventListenersManager.js} +0 -0
  26. /package/src/{implementation/subtitlesUtils.js → subtitlesUtils.js} +0 -0
package/src/api.js CHANGED
@@ -1,11 +1,19 @@
1
- import { sdkLogger, noop } from "./interface/utils.js";
1
+ import { getFCID, sdkLogger } from "./utils";
2
2
  import pack from "../package.json";
3
- import { Lifecycle, RemotePlayer, DeviceManager, PlatformManager, AlarmManager, MessageManager, ShakaPlayer, shaka, showSequence, initSequence } from "./interface/api.js";
4
-
3
+ import { sessionInfo } from "./SessionInfo";
5
4
  const { version } = pack;
5
+ import { initSequence, showSequence } from "./devSequence.js";
6
+ import { lifecycle } from "./lifecycle";
7
+ import { alarmManager } from "./alarmManager";
6
8
 
7
9
  let authToken;
8
10
 
11
+ const API_VERSION = "1.0";
12
+
13
+ typeof document !== "undefined" && document.addEventListener("keydown", (event) => {
14
+ sdkLogger.log(`Got ${event.key} key`);
15
+ });
16
+
9
17
  /** @namespace auth
10
18
  *@example
11
19
  * import { auth } from "senza-sdk";
@@ -23,87 +31,334 @@ export const auth = {
23
31
  };
24
32
 
25
33
  /**
26
- * Should be called once to init the library
27
- * @example
34
+ * @deprecated use lifecycle.ConnectReason instead.
35
+ * @typedef {Object} ConnectReason - The reason the ui app has been loaded
36
+ * @property {string} UNKNOWN
37
+ * @property {string} INITIAL_CONNECTION - Indicates that ui app has been loaded for the first time
38
+ * @property {string} APPLICATION_RELOAD - Indicates that ui app has been reloaded (e.g. after HOME keypress)
39
+ * @property {string} UI_RELEASE - Indicates that ui app has been reloaded after ui release
40
+ * @property {string} UI_TERMINATION - Indicates that ui app has been reloaded due to ui termination
41
+ * @property {string} WEBRTC_ERROR - Indicates that ui app has been reloaded due to webrtc error
42
+ * @property {string} UI_WATCHDOG - Indicates that ui app has been reloaded due to ui watchdog not receiving ui frames
43
+ */
44
+ export const ConnectReason = Object.freeze({
45
+ UNKNOWN: "unknown",
46
+ INITIAL_CONNECTION: "initial_connection",
47
+ APPLICATION_RELOAD: "reload_app",
48
+ UI_RELEASE: "ui_release",
49
+ UI_TERMINATION: "ui_termination",
50
+ WEBRTC_ERROR: "webrtc_error",
51
+ UI_WATCHDOG: "ui_watchdog"
52
+ });
53
+
54
+ import { remotePlayer } from "./remotePlayer";
55
+ export { remotePlayer };
56
+
57
+ /** Should be called once to init the library
58
+ *@example
28
59
  * import { init } from "senza-sdk";
29
60
  * await init();
30
61
  **/
31
62
  export async function init() {
32
- sdkLogger.log(`init interface ${version}`);
33
- if (window.senzaSDKImplementation) {
34
- await window.senzaSDKImplementation.init(version, showSequence, initSequence);
63
+ sdkLogger.log(`init ${version}`);
64
+
65
+ if (!window.diagnostics) {
66
+ // ------------------------------------------------------------------------------------------------
67
+ // -- Do NOT change this log, as ui-streamer is checking this string to detect abnormal behavior --
68
+ // ------------------------------------------------------------------------------------------------
69
+ sdkLogger.error("[ init ] window.diagnostics is undefined");
70
+ }
71
+
72
+ if (window.cefQuery) {
73
+
74
+ // First, check compatability with ui-streamer api version
75
+ await new Promise((resolve, reject) => {
76
+ window.cefQuery({
77
+ request: "apiVersion " + API_VERSION,
78
+ persistent: false,
79
+ onSuccess: () => {
80
+ sdkLogger.log("api version compatability check succeeded");
81
+ resolve();
82
+ },
83
+ onFailure: (code, msg) => {
84
+ sdkLogger.error("api version compatability check failed: " + msg);
85
+ reject(msg);
86
+ }
87
+ });
88
+ });
89
+
90
+ const sessionInfoStr = await new Promise((resolve) => {
91
+ window.cefQuery({
92
+ request: "sessionInfo",
93
+ persistent: false,
94
+ onSuccess: (response) => {
95
+ sdkLogger.log("sessionInfo request successfully returned " + response);
96
+ resolve(response);
97
+ },
98
+ onFailure: (code, msg) => {
99
+ sdkLogger.error(`sessionInfo request failed: ${code} ${msg}`);
100
+ }
101
+ });
102
+ });
103
+
104
+ sessionInfo.setSessionInfoStr(sessionInfoStr);
105
+ const sessionInfoObj = JSON.parse(sessionInfoStr);
106
+ authToken = sessionInfoObj?.settings?.webUI?.backendHeaders?.Authorization;
107
+ sdkLogger.log(`authToken: token = ${authToken}`);
108
+ // Listen to updateSession event to set the new token
109
+ document.addEventListener("updateSession", (e) => {
110
+ authToken = e.detail?.updateObj;
111
+ sdkLogger.log(`onUpdateSessionEvent: token = ${authToken}`);
112
+ });
113
+
114
+ // Set default alarm timeout using UI-Streamer settings
115
+ const alarmTimeout = sessionInfoObj?.settings?.["ui-streamer"]?.alarmTimeout;
116
+ if (alarmTimeout) {
117
+ alarmManager._setDefaultTimeout(alarmTimeout);
118
+ }
119
+
120
+ // Get trigger event
121
+ const triggerEventStr = await new Promise((resolve) => {
122
+ const FCID = getFCID();
123
+ const logger = sdkLogger.withFields({ FCID });
124
+ const message = { type: "triggerEvent", fcid: FCID };
125
+ const request = { target: "UI-Streamer", waitForResponse: false, message: JSON.stringify(message) };
126
+ window.cefQuery({
127
+ request: JSON.stringify(request),
128
+ persistent: false,
129
+ onSuccess: (response) => {
130
+ logger.log(`triggerEvent request successfully returned '${response}'`);
131
+ resolve(response);
132
+ },
133
+ onFailure: (code, msg) => {
134
+ logger.error(`triggerEvent request failed: ${code} ${msg}`);
135
+ resolve("");
136
+ }
137
+ });
138
+ });
139
+ let triggerEvent = {};
140
+ if (triggerEventStr) {
141
+ try {
142
+ triggerEvent = JSON.parse(triggerEventStr);
143
+ } catch (e) {
144
+ sdkLogger.error(`failed to parse trigger event string ${triggerEventStr}: ${e.message}`);
145
+ }
146
+ }
147
+
148
+ // Initialize lifecycle first to make sure the state is updated.
149
+ await lifecycle._init(sessionInfoObj?.settings?.["ui-streamer"], triggerEvent);
150
+ await remotePlayer._init(sessionInfoObj?.settings?.["ui-streamer"], triggerEvent);
151
+
152
+ const devSequence = sessionInfoObj?.settings?.["ui-streamer"]?.devSequence;
153
+ if (devSequence) {
154
+ initSequence({ lifecycle, remotePlayer });
155
+ showSequence(true);
156
+ }
157
+
35
158
  } else {
36
- noop("init");
159
+ authToken = getPlatformInfo().sessionInfo?.settings?.webUI?.backendHeaders?.Authorization;
160
+ sdkLogger.log(`authToken dummy: token = ${authToken}`);
37
161
  }
162
+
38
163
  // override window.close() since it's not allowed to close the application this way
39
164
  window.close = () => {
40
165
  sdkLogger.warn("window.close is disabled on Senza platform. Use lifecycle.exitApplication() instead.");
41
166
  };
167
+
168
+
169
+ }
170
+
171
+ /**
172
+ * @deprecated use lifecycle.connectReason instead
173
+ * Returns the reason the ui has been loaded
174
+ **/
175
+ export function getConnectReason() {
176
+ return lifecycle.connectReason;
177
+ }
178
+
179
+ /**
180
+ * @deprecated use lifecycle.triggerEvent instead
181
+ * Returns the event that triggered the reloading of the ui after ui has been released
182
+ **/
183
+ export function getTriggerEvent() {
184
+ return lifecycle.triggerEvent;
42
185
  }
43
186
 
44
187
  // Returns the platform information, including version, pod, pod ip and session info.
45
188
  export function getPlatformInfo() {
46
- if (window.senzaSDKImplementation) {
47
- return window.senzaSDKImplementation.getPlatformInfo();
48
- }
49
- return {
50
- version: "X.X.XX-X",
51
- pod: "ui-streamer-X.X.XX-X-QWERT-ASDFG-XXX-XXXXXX-XXXXX",
52
- podIP: "0.0.0.0",
53
- sessionInfo: {
54
- userAgent: "SynamediaSenza/XX.YY.ZZ",
55
- connectionId: "dummy",
56
- deviceId: "123456789",
57
- community: "LocalDev",
58
- tenant: "XXXXXX",
59
- tenantId: "XXXXXX",
60
- manifest: {
61
- transcontainer: "X.X.XX-X"
62
- },
63
- settings: {
64
- webUI: {
65
- backendHeaders: {
66
- Authorization: "Bearer dummytoken"
189
+ if (typeof window !== "undefined" && window.diagnostics) {
190
+ try {
191
+ const platformInfo = window.diagnostics() || {};
192
+ platformInfo.sessionInfo = sessionInfo.sessionInfoObj;
193
+ return platformInfo;
194
+ } catch (e) {
195
+ sdkLogger.error("Could not get platform info", e.stack);
196
+ }
197
+
198
+ } else {
199
+ if (typeof window !== "undefined" && !window.diagnostics) {
200
+ sdkLogger.error("[ getPlatformInfo ] window.diagnostics is undefined");
201
+ }
202
+ return {
203
+ version: "X.X.XX-X",
204
+ pod: "ui-streamer-X.X.XX-X-QWERT-ASDFG-XXX-XXXXXX-XXXXX",
205
+ podIP: "0.0.0.0",
206
+ sessionInfo: {
207
+ userAgent: "SynamediaSenza/XX.YY.ZZ",
208
+ connectionId: "dummy",
209
+ deviceId: "123456789",
210
+ community: "LocalDev",
211
+ tenant: "XXXXXX",
212
+ tenantId: "XXXXXX",
213
+ manifest: {
214
+ transcontainer: "X.X.XX-X"
215
+ },
216
+ settings: {
217
+ webUI: {
218
+ backendHeaders: {
219
+ Authorization: "Bearer dummytoken"
220
+ }
67
221
  }
222
+ },
223
+ homeSessionInfo: {
224
+ tenantId: "XXXXXX",
225
+ community: "LocalDev"
68
226
  }
227
+ }
228
+ };
229
+ }
230
+ }
231
+ /**
232
+ *
233
+ * Returns the device information, including device id, connection id, community, tenant and client ip
234
+ * */
235
+ /**
236
+ * @deprecated use platformManager.setTimezone instead.
237
+ * @param {string} timezone the timezone to set to
238
+ * the format of the timezone is according to the standard TZ identifier
239
+ * (e.g. America/Los_Angeles, Asia/Tokyo, Europe/Brussels)
240
+ * for a full list of TZ identifiers, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
241
+ */
242
+ export function setTimezone(timezone) {
243
+ // STOP DO NOT CHANGE THIS FUNCTION AS IT IS DEPRECATED!!!!
244
+ if (window.cefQuery) {
245
+ const request = { message: JSON.stringify({ type: "setTimeZone", timezone }), waitForResponse: false, target: "UI-Streamer" };
246
+ window.cefQuery({
247
+ request: JSON.stringify(request),
248
+ persistent: false,
249
+ onSuccess: () => {
250
+ sdkLogger.log("timezome is successfully set to", timezone);
69
251
  },
70
- homeSessionInfo: {
71
- tenantId: "XXXXXX",
72
- community: "LocalDev"
252
+ onFailure: (code, msg) => {
253
+ sdkLogger.error(`error occurred setting timezone to ${timezone}: ${code} ${msg}`);
73
254
  }
74
- }
75
- };
255
+ });
256
+ }
76
257
  }
77
258
 
78
259
  async function getToken() {
79
- if (window.senzaSDKImplementation) {
80
- return window.senzaSDKImplementation.auth.getToken();
260
+ if (!authToken) {
261
+ sdkLogger.log("getToken wait for promise updateSession event");
262
+ return new Promise((resolve) => {
263
+ // Listen to updateSession event to set the new token
264
+ document.addEventListener("updateSession", (e) => {
265
+ authToken = e.detail?.updateObj;
266
+ sdkLogger.log(`onUpdateSessionEvent: token= ${authToken}`);
267
+ resolve(authToken);
268
+ }, { once: true });
269
+ });
81
270
  }
82
271
  return Promise.resolve(authToken);
83
272
  }
84
273
 
85
274
  function forceTokenUpdate() {
86
275
  authToken = null;
87
- if (window.senzaSDKImplementation) {
88
- return window.senzaSDKImplementation.auth.forceTokenUpdate();
89
- }
90
- sdkLogger.error("forceTokenUpdate: window.cefQuery is undefined");
91
276
 
277
+ if (window.cefQuery) {
278
+ const FCID = getFCID();
279
+ const logger = sdkLogger.withFields({ FCID });
280
+ logger.log("forceTokenUpdate: sending updateSessionRequest");
281
+ const message = {
282
+ type: "updateSessionRequest",
283
+ updateKey: "authorization",
284
+ parentPath: "settings.webUI.backendHeaders.Authorization",
285
+ fcid: FCID
286
+ };
287
+ const request = { target: "TC", waitForResponse: false, message: JSON.stringify(message) };
288
+ window.cefQuery({
289
+ request: JSON.stringify(request),
290
+ persistent: false,
291
+ onSuccess: () => {
292
+ logger.log("updateSessionRequest successfully sent");
293
+ },
294
+ onFailure: (code, msg) => {
295
+ logger.error(`updateSessionRequest failed: ${code} ${msg}`);
296
+ }
297
+ });
298
+ } else {
299
+ sdkLogger.error("forceTokenUpdate: window.cefQuery is undefined");
300
+ }
92
301
  }
93
302
 
94
303
  /** Returns a boolean that indicates whether we are running in an e2e environment, or on local browser */
95
304
  export function isRunningE2E() {
96
- return !!(typeof window !== "undefined" && window.senzaSDKImplementation);
305
+ return !!(typeof window !== "undefined" && window.cefQuery);
97
306
  }
98
307
 
99
308
  /** Call this API once after application startup, when the ui is ready to accept keys/events */
100
309
  export function uiReady() {
101
- if (window.senzaSDKImplementation) {
102
- return window.senzaSDKImplementation.uiReady();
310
+ if (window.cefQuery) {
311
+ window.cefQuery({
312
+ request: "uiReady",
313
+ persistent: false,
314
+ onSuccess: () => {
315
+ sdkLogger.log("uiReady request successfully sent");
316
+ },
317
+ onFailure: (code, msg) => {
318
+ sdkLogger.error(`uiReady request failed: ${code} ${msg}`);
319
+ }
320
+ });
321
+ } else {
322
+ sdkLogger.error("uiReady: window.cefQuery is undefined");
103
323
  }
104
- sdkLogger.error("uiReady: window.cefQuery is undefined");
105
324
  }
106
325
 
326
+ /**
327
+ * @deprecated use deviceManager.deviceInfo instead.
328
+ * Returns the device information, including device id, connection id, community, tenant and client ip
329
+ * */
330
+ export function getDeviceInfo() {
331
+ // STOP DO NOT CHANGE THIS FUNCTION AS IT IS DEPRECATED!!!!
332
+ const sessionInfoObj = sessionInfo.sessionInfoObj;
333
+ if (isRunningE2E()) {
334
+ return {
335
+ deviceId: sessionInfoObj.deviceId,
336
+ connectionId: sessionInfoObj.connectionId,
337
+ community: sessionInfoObj.community,
338
+ tenant: sessionInfoObj.tenant,
339
+ clientIp: sessionInfoObj.clientIp
340
+ };
341
+ }
342
+ sdkLogger.log("getDeviceInfo running locally, returning dummy info");
343
+ return {
344
+ deviceId: "123456789",
345
+ connectionId: "dummy",
346
+ community: "LocalDev",
347
+ tenant: "XXXXXX",
348
+ clientIp: "0.0.0.0"
349
+ };
350
+ }
351
+
352
+ export { lifecycle } from "./lifecycle";
353
+ export { deviceManager } from "./deviceManager";
354
+ export { platformManager } from "./platformManager";
355
+ export { alarmManager };
356
+ export { messageManager } from "./messageManager";
357
+ export { initSequence, showSequence } from "./devSequence";
358
+ export { SenzaShakaPlayer as ShakaPlayer, shaka } from "./senzaShakaPlayer";
359
+
360
+ import "./devHelper";
361
+
107
362
  /**
108
363
  * @example
109
364
  * import { envInfo } from "senza-sdk";
@@ -114,12 +369,10 @@ export function uiReady() {
114
369
  * @property {string} envInfo.sdkVersion - the version of the SDK
115
370
  */
116
371
  export const envInfo = {
117
- remoteBrowserIp: window?.diagnostics?.()?.podIP || "127.0.0.1",
118
- sdkVersion: version,
119
- sdkBackendVersion: window?.senzaSDKImplementation?.version || "N/A"
372
+ remoteBrowserIp: window.diagnostics ? window.diagnostics().podIP : "127.0.0.1",
373
+ sdkVersion: version
120
374
  };
121
375
 
122
-
123
376
  /**
124
377
  * The function receives a license response and passes it to platform.
125
378
  * @param {number} statusCode status code that was received from the license server
@@ -130,10 +383,31 @@ export const envInfo = {
130
383
  * In case of error licenseResponse is of type @type {string}
131
384
  */
132
385
  export function writeLicenseResponse(statusCode, licenseResponse, fcid, sessionId) {
133
- if (window?.senzaSDKImplementation) {
134
- return window.senzaSDKImplementation.writeLicenseResponse(statusCode, licenseResponse, fcid, sessionId);
386
+
387
+ if (statusCode >= 200 && statusCode < 300) {
388
+ licenseResponse = window.btoa(String.fromCharCode.apply(null, new Uint8Array(licenseResponse))); // to base64
389
+ }
390
+
391
+ if (window.cefQuery) {
392
+ const message = {
393
+ type: "updateLicense",
394
+ sessionId,
395
+ fcid
396
+ };
397
+ message[statusCode >= 200 && statusCode < 300 ? "response" : "error"] = licenseResponse;
398
+ const request = { target: "TC", waitForResponse: false, message: JSON.stringify(message) };
399
+ window.cefQuery({
400
+ request: JSON.stringify(request),
401
+ persistent: false,
402
+ onSuccess: () => {
403
+ sdkLogger.log("updateLicense request successfully sent");
404
+ },
405
+ onFailure: (code, msg) => {
406
+ sdkLogger.error(`updateLicense request failed: ${code} ${msg}`);
407
+ }
408
+ });
135
409
  }
136
- sdkLogger.error("writeLicenseResponse: window.cefQuery is undefined");
410
+
137
411
  }
138
412
 
139
413
  export class ClientAssertionError extends Error {
@@ -164,141 +438,34 @@ export class ClientAssertionError extends Error {
164
438
  * }
165
439
  */
166
440
  export function getClientAssertion() {
167
- if (window?.senzaSDKImplementation) {
168
- return window.senzaSDKImplementation.auth.getClientAssertion();
441
+ if (window.cefQuery) {
442
+ sdkLogger.log("getClientAssertion is called");
443
+
444
+ return new Promise((resolve, reject) => {
445
+ window.cefQuery({
446
+ request: "client_assertion",
447
+ persistent: false,
448
+ onSuccess: (response) => {
449
+ try {
450
+ const json_response = JSON.parse(response);
451
+ sdkLogger.log(`client_assertion request successfully returned ${response}`);
452
+ resolve(json_response);
453
+ } catch (e) {
454
+ sdkLogger.error(`Failed to parse client assertion ${response}: ${e.message}`);
455
+ reject(new ClientAssertionError(0, "Failed to parse client assertion"));
456
+ }
457
+
458
+ },
459
+ onFailure: (code, msg) => {
460
+ sdkLogger.log(`client_assertion request failed: ${code} ${msg}`);
461
+ reject(new ClientAssertionError(code, msg));
462
+ }
463
+ });
464
+ });
169
465
  }
170
466
  sdkLogger.warn("getClientAssertion is not supported if NOT running e2e");
171
467
  }
172
468
 
173
- /**
174
- * @module
175
- * @type {Lifecycle}
176
- * @example
177
- * import { lifecycle } from "senza-sdk";
178
- *
179
- * @return {Lifecycle} pointer to the Lifecycle singleton
180
- */
181
- let lifecycle;
182
-
183
- /**
184
- * @module
185
- * @type {RemotePlayer}
186
- * @example
187
- * import { init, remotePlayer } from "senza-sdk";
188
- * await init();
189
- * try {
190
- * await remotePlayer.load("http://playable.url/file.mp4");
191
- * remotePlayer.play();
192
- * } catch(err) {
193
- * console.log("remotePlayer api failed with error code", err.code, err.msg);
194
- * }
195
- *
196
- * @returns {RemotePlayer} pointer to the RemotePlayer singleton
197
- */
198
- let remotePlayer;
199
-
200
-
201
- /**
202
- * @module
203
- * @type {AlarmManager}
204
- * @example
205
- * import { alarmManager } from "senza-sdk";
206
- *
207
- * @return {AlarmManager} pointer to the AlarmManager singleton
208
- */
209
- let alarmManager;
210
-
211
- /**
212
- * @module
213
- * @type {DeviceManager}
214
- * @example
215
- * import { deviceManager } from "senza-sdk";
216
- * const wifiInfo = await deviceManager.getWifiInfo();
217
- * console.info(wifiInfo.ssid);
218
- * await deviceManager.clearWifi();
219
- * deviceManager.reboot();
220
- *
221
- * @return {DeviceManager} pointer to the DeviceManager singleton
222
- */
223
- let deviceManager;
224
-
225
-
226
- /**
227
- * @module
228
- * @type {PlatformManager}
229
- * @example
230
- * import { platformManager } from "senza-sdk";
231
- * console.info(platformManager.appConfig);
232
- * platformManager.setTimezone("Europe/Brussels");
233
- *
234
- * @return {PlatformManager} pointer to the PlatformManager singleton
235
- */
236
-
237
-
238
- let platformManager;
239
- /**
240
- * @module
241
- * @type {MessageManager}
242
- * @example
243
- * import { MessageManager } from "senza-sdk";
244
- *
245
- * @return {MessageManager} pointer to the MessageManager singleton
246
- */
247
- let messageManager;
248
-
249
-
250
- /**
251
- * ShakaPlayer subclass of Shaka that handles both local and remote playback.
252
- *
253
- * @class ShakaPlayer
254
- * @type {new|ShakaPlayer}
255
- * @example
256
- * import { ShakaPlayer } from "senza-sdk";
257
- *
258
- * try {
259
- * const videoElement = document.getElementById("video");
260
- * const player = new ShakaPlayer(videoElement);
261
- * await player.load("http://playable.url/file.mpd");
262
- * await videoElement.play(); // will start the playback
263
- *
264
- * } catch (err) {
265
- * console.error("ShakaPlayer failed with error", err);
266
- * }
267
- */
268
- let ShakaPlayerImplementation;
269
-
270
-
271
- /**
272
- * @module
273
- * @type {shaka}
274
- */
275
- let shakaImplementation;
276
-
277
- if (!isRunningE2E()) {
278
- sdkLogger.warn("Senza SDK is not running in E2E environment. Some features may not work as expected.");
279
-
280
- lifecycle = new Lifecycle();
281
- remotePlayer = new RemotePlayer();
282
- alarmManager = new AlarmManager();
283
- deviceManager = new DeviceManager();
284
- platformManager = new PlatformManager();
285
- messageManager = new MessageManager();
286
- ShakaPlayerImplementation = ShakaPlayer;
287
- shakaImplementation = shaka;
288
- } else {
289
- lifecycle = window.senzaSDKImplementation.lifecycle;
290
- remotePlayer = window.senzaSDKImplementation.remotePlayer;
291
- alarmManager = window.senzaSDKImplementation.alarmManager;
292
- deviceManager = window.senzaSDKImplementation.deviceManager;
293
- platformManager = window.senzaSDKImplementation.platformManager;
294
- messageManager = window.senzaSDKImplementation.messageManager;
295
- ShakaPlayerImplementation = window.senzaSDKImplementation.ShakaPlayer;
296
- shakaImplementation = window.senzaSDKImplementation.shaka;
297
- }
298
-
299
-
300
- export { lifecycle, remotePlayer, alarmManager, deviceManager, platformManager, messageManager, ShakaPlayerImplementation as ShakaPlayer, shakaImplementation as shaka, showSequence, initSequence };
301
-
302
469
  // Assign the senza library to the old name (hs) for backward compatibility
303
470
  import * as senzaSDK from "./api.js";
304
471
  if (typeof window !== "undefined") {