senza-sdk 4.3.2-2e967be.0 → 4.3.2-a581729.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.2-2e967be.0",
3
+ "version": "4.3.2-a581729.0",
4
4
  "main": "./src/api.js",
5
5
  "description": "API for Senza application",
6
6
  "license": "MIT",
@@ -51,9 +51,9 @@
51
51
  },
52
52
  "src/interface": {
53
53
  "branches": 68.42,
54
- "functions": 40.74,
55
- "lines": 65.96,
56
- "statements": 66.32
54
+ "functions": 40,
55
+ "lines": 65.28,
56
+ "statements": 65.65
57
57
  }
58
58
  }
59
59
  },
@@ -27,6 +27,7 @@ class AlarmManager extends AlarmManagerInterface {
27
27
  * @private
28
28
  */
29
29
  _init() {
30
+ sdkLogger.log("Initializing AlarmManager");
30
31
  if (!this._isInitialized) {
31
32
  this._isInitialized = true;
32
33
  this._addSenzaEventListeners();
@@ -94,6 +95,7 @@ class AlarmManager extends AlarmManagerInterface {
94
95
  }
95
96
  }
96
97
  );
98
+ sdkLogger.log("[AlarmManager] Added event listeners for system events");
97
99
  }
98
100
 
99
101
  /**
@@ -134,6 +134,7 @@ export async function init(interfaceApiVersion, showSequenceFunc, initSequenceFu
134
134
  alarmManager._init();
135
135
  deviceManager._init();
136
136
  messageManager._init();
137
+ sdkLogger.log("All submodules initialized");
137
138
 
138
139
 
139
140
  const devSequence = sessionInfoObj?.settings?.["ui-streamer"]?.devSequence;
@@ -54,6 +54,7 @@ class DeviceManager extends DeviceManagerInterface {
54
54
  * @private
55
55
  */
56
56
  _init() {
57
+ sdkLogger.log("Initializing DeviceManager");
57
58
  if (!this._isInitialized) {
58
59
  this._isInitialized = true;
59
60
  this._addSenzaEventListeners();
@@ -71,6 +72,7 @@ class DeviceManager extends DeviceManagerInterface {
71
72
  wifiInfo.bssid = e.detail.bssid;
72
73
  this.dispatchEvent(new Event("wifiInfoUpdated"));
73
74
  });
75
+ sdkLogger.log("[DeviceManager] Added event listeners for system events");
74
76
  }
75
77
 
76
78
  get deviceInfo() {
@@ -71,6 +71,7 @@ class Lifecycle extends LifecycleInterface {
71
71
  * @param {number} [uiStreamerSettings.remotePlayerApiVersion=1] - Remote player API version
72
72
  */
73
73
  async _init(uiStreamerSettings, triggerEvent) {
74
+ sdkLogger.log("Initializing Lifecycle");
74
75
  if (window.cefQuery) {
75
76
 
76
77
  // Get UI state
@@ -212,6 +213,7 @@ class Lifecycle extends LifecycleInterface {
212
213
  this._startCountdown(event.detail.isPlaying);
213
214
  }
214
215
  });
216
+ sdkLogger.log("[Lifecycle] Added event listeners for system events");
215
217
  }
216
218
 
217
219
  /**
@@ -15,6 +15,7 @@ class MessageManager extends MessageManagerInterface {
15
15
  * @private
16
16
  */
17
17
  _init() {
18
+ sdkLogger.log("Initializing MessageManager");
18
19
  if (!this._isInitialized) {
19
20
  this._isInitialized = true;
20
21
  this._addSenzaEventListeners();
@@ -29,6 +30,7 @@ class MessageManager extends MessageManagerInterface {
29
30
  sdkLogger.log("Got hs/externalEvent", JSON.stringify(e.detail));
30
31
  this.dispatchEvent(new CustomEvent("message", { detail: { eventName: e.detail.eventName, payload: e.detail.payload, fcid: e.detail.fcid } }));
31
32
  });
33
+ sdkLogger.log("[MessageManager] Added event listeners for system events");
32
34
  }
33
35
 
34
36
  async registerGroups(groups) {
@@ -146,9 +146,7 @@ class RemotePlayer extends RemotePlayerInterface {
146
146
  * @param {Object} uiStreamerSettings ui-streamer portion of the settings taken from session info
147
147
  * */
148
148
  async _init(uiStreamerSettings, triggerEvent) {
149
- if (!this._systemEventListenersAdded) {
150
- this._systemEventListenersAdded = true;
151
- }
149
+ sdkLogger.info("Initializing RemotePlayer");
152
150
  let playerState = {
153
151
  isLoaded: false,
154
152
  playbackUrl: ""
@@ -212,6 +210,7 @@ class RemotePlayer extends RemotePlayerInterface {
212
210
  * @private Add event listeners for system events
213
211
  */
214
212
  _addSenzaEventListeners() {
213
+
215
214
  typeof document !== "undefined" && document.addEventListener("hs/remotePlayerEvent", (e) => {
216
215
  sdkLogger.info("Got hs/remotePlayerEvent event with detail", JSON.stringify(e?.detail));
217
216
  this.dispatchEvent(new Event(e?.detail?.eventName));
@@ -294,6 +293,7 @@ class RemotePlayer extends RemotePlayerInterface {
294
293
  };
295
294
  this.dispatchEvent(licenseRequestEvent);
296
295
  });
296
+ sdkLogger.log("[RemotePlayer] Added event listeners for system events");
297
297
  }
298
298
 
299
299
  /** @private update audio and text tracks
@@ -1367,6 +1367,61 @@ class RemotePlayer extends RemotePlayerInterface {
1367
1367
  }
1368
1368
  }
1369
1369
 
1370
+ /**
1371
+ * The function sets a blackout time for the screen.
1372
+ * The blackout time is the time when the screen will be blacked out.
1373
+ * This is useful for parental controls where the screen should be blacked out during certain times
1374
+ *
1375
+ * @param {Date} date
1376
+ * @returns {Promise<void>} A Promise that resolves once the blackout time is set.
1377
+ * @throws {RemotePlayerError} If the player is not initialized or not loaded. if date is not a Date object or if the remote player api version is not supported
1378
+ */
1379
+ setScreenBlackout(date) {
1380
+
1381
+ if (!this._isInitialized) {
1382
+ throw new RemotePlayerError(6500, "Cannot call setScreenBlackout() if remote player is not initialized");
1383
+ }
1384
+
1385
+ if (this._loadMode !== this.LoadMode.LOADED) {
1386
+ throw new RemotePlayerError(6001, "Cannot call setScreenBlackout() if player is not loaded");
1387
+ }
1388
+
1389
+ if (!(date instanceof Date)) {
1390
+ throw new RemotePlayerError(6503, `date param must be a ${typeof new Date()} object but got ${typeof date}`);
1391
+ }
1392
+
1393
+ if (this._remotePlayerApiVersion < 2) {
1394
+ throw new RemotePlayerError(6504, `setScreenBlackout() is not supported in remotePlayerApiVersion=${this._remotePlayerApiVersion}`);
1395
+ }
1396
+
1397
+ const blackoutTime = (date.getTime()/1000).toFixed(2);
1398
+ sdkLogger.info(`remotePlayer.setScreenBlackout(): setting blackout time to ${blackoutTime}`);
1399
+ return this._setScreenBlackout(blackoutTime);
1400
+ }
1401
+
1402
+ /**
1403
+ * The function resets the currently set blackout time for the screen.
1404
+ * This is useful for parental controls to be reset the blackout time after it has been set.
1405
+ *
1406
+ * @returns {Promise<void>} A Promise that resolves once the blackout time is reset.
1407
+ * @throws {RemotePlayerError} If the player is not initialized or not loaded. if the remote player api version is not supported
1408
+ */
1409
+ resetScreenBlackout() {
1410
+ if (!this._isInitialized) {
1411
+ throw new RemotePlayerError(6500, "Cannot call resetScreenBlackout() if remote player is not initialized");
1412
+ }
1413
+
1414
+ if (this._loadMode !== this.LoadMode.LOADED) {
1415
+ throw new RemotePlayerError(6001, "Cannot call resetScreenBlackout() if player is not loaded");
1416
+ }
1417
+
1418
+ if (this._remotePlayerApiVersion < 2) {
1419
+ throw new RemotePlayerError(6504, `resetScreenBlackout() is not supported in remotePlayerApiVersion=${this._remotePlayerApiVersion}`);
1420
+ }
1421
+ sdkLogger.info("remotePlayer.resetScreenBlackout(): resetting blackout time");
1422
+ return this._setScreenBlackout(0);
1423
+ }
1424
+
1370
1425
  /**
1371
1426
  * Getter/Setter for currentTime
1372
1427
  */
@@ -1718,6 +1773,52 @@ class RemotePlayer extends RemotePlayerInterface {
1718
1773
  sdkLogger.log(`remotePlayer _atomicSetSubtitleLanguage: textTrackId=${textTrackId} ended.`);
1719
1774
  return setLanguageError ? Promise.reject(setLanguageError) : Promise.resolve();
1720
1775
  }
1776
+
1777
+ _setScreenBlackout(blackoutTime) {
1778
+ if (window.cefQuery) {
1779
+ const FCID = getFCID();
1780
+ const logger = sdkLogger.withFields({ FCID });
1781
+ logger.log(`sending screenBlackout action at ${blackoutTime}`);
1782
+ const message = {
1783
+ type: "remotePlayer.screenBlackout",
1784
+ class: "remotePlayer",
1785
+ action: "screenBlackout",
1786
+ fcid: FCID,
1787
+ blackoutTime
1788
+ };
1789
+ const request = { target: "TC", waitForResponse: true, message: JSON.stringify(message) };
1790
+ return new Promise((resolve, reject) => {
1791
+ let timerId = 0;
1792
+ const timeBeforeSendingRequest = Date.now();
1793
+ const queryId = window.cefQuery({
1794
+ request: JSON.stringify(request),
1795
+ persistent: false,
1796
+ onSuccess: () => {
1797
+ const duration = Date.now() - timeBeforeSendingRequest;
1798
+ logger.withFields({ duration }).log(`setBlackoutTime completed successfully after ${duration} ms`);
1799
+ timerId = clearTimer(timerId);
1800
+ resolve();
1801
+ },
1802
+ onFailure: (code, msg) => {
1803
+ const duration = Date.now() - timeBeforeSendingRequest;
1804
+ logger.withFields({ duration }).log(`setBlackoutTime failed after ${duration} ms. Error code: ${code}, error message: ${msg}`);
1805
+ timerId = clearTimer(timerId);
1806
+ reject(new RemotePlayerError(code, msg));
1807
+ }
1808
+ });
1809
+
1810
+ logger.log(`window.cefQuery for screenBlackout returned query id ${queryId}`);
1811
+ const timeout = this._remotePlayerConfirmationTimeout + 1000;
1812
+ timerId = setTimeout(() => {
1813
+ logger.log(`screenBlackout reached timeout of ${timeout} ms, canceling query id ${queryId}`);
1814
+ window.cefQueryCancel(queryId);
1815
+ reject(new RemotePlayerError(6000, `screenBlackout reached timeout of ${timeout} ms`));
1816
+ }, timeout, queryId);
1817
+ });
1818
+ }
1819
+ sdkLogger.error("screenBlackout: window.cefQuery is undefined");
1820
+ return Promise.resolve(undefined);
1821
+ }
1721
1822
  }
1722
1823
  /**
1723
1824
  *
@@ -116,6 +116,8 @@ export class RemotePlayerError extends Error {
116
116
  * | 6500 | Player | remotePlayer api was called before initializing remotePlayer |
117
117
  * | 6501 | Player | load() was called while previous load/unload was still in progress |
118
118
  * | 6502 | Player | unload() was called while previous unload/load was still in progress |
119
+ * | 6503 | Player | The remote player api call has invalid parameters |
120
+ * | 6504 | Player | The remote player api call has invalid api version |
119
121
  * | 8001 | Player | Error pulling manifest. bad parameters |
120
122
  * | 8002 | Player | Error pulling manifest. filters returned no data |
121
123
  * | 8003 | Player | Error pulling manifest. fetch error |
@@ -397,6 +399,30 @@ class RemotePlayer extends EventTarget {
397
399
  return noop("RemotePlayer.setTextTrackVisibility", visible);
398
400
  }
399
401
 
402
+ /**
403
+ * The function sets a blackout time for the screen.
404
+ * The blackout time is the time when the screen will be blacked out.
405
+ * This is useful for parental controls where the screen should be blacked out during certain times
406
+ *
407
+ * @param {Date} date
408
+ * @returns {Promise<void>} A Promise that resolves once the blackout time is set.
409
+ * @throws {RemotePlayerError} If the player is not initialized or not loaded. if date is not a Date object or if the remote player api version is not supported
410
+ */
411
+ setScreenBlackout(date) {
412
+ return noop("RemotePlayer.setScreenBlackout", date);
413
+ }
414
+
415
+ /**
416
+ * The function resets the currently set blackout time for the screen.
417
+ * This is useful for parental controls to be reset the blackout time after it has been set.
418
+ *
419
+ * @returns {Promise<void>} A Promise that resolves once the blackout time is reset.
420
+ * @throws {RemotePlayerError} If the player is not initialized or not loaded. if the remote player api version is not supported
421
+ */
422
+ resetScreenBlackout() {
423
+ return noop("RemotePlayer.resetScreenBlackout");
424
+ }
425
+
400
426
  /**
401
427
  * Getter/Setter for currentTime
402
428
  */