senza-sdk 4.2.65-d2761c0.0 → 4.3.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/dist/bundle.js +1 -1
- package/dist/implementation.bundle.js +2 -0
- package/dist/implementation.bundle.js.LICENSE.txt +57 -0
- package/package.json +18 -9
- package/src/api.js +258 -327
- package/src/{alarmManager.js → implementation/alarmManager.js} +15 -52
- package/src/implementation/api.js +363 -0
- package/src/{deviceManager.js → implementation/deviceManager.js} +6 -78
- package/src/{lifecycle.js → implementation/lifecycle.js} +37 -225
- package/src/implementation/messageManager.js +55 -0
- package/src/{platformManager.js → implementation/platformManager.js} +5 -23
- package/src/{remotePlayer.js → implementation/remotePlayer.js} +35 -237
- package/src/{senzaShakaPlayer.js → implementation/senzaShakaPlayer.js} +92 -125
- package/src/{utils.js → implementation/utils.js} +15 -6
- package/src/interface/alarmManager.js +76 -0
- package/src/interface/api.js +8 -0
- package/src/{devSequence.js → interface/devSequence.js} +35 -0
- package/src/interface/deviceManager.js +143 -0
- package/src/interface/lifecycle.js +284 -0
- package/src/interface/messageManager.js +54 -0
- package/src/interface/platformManager.js +42 -0
- package/src/interface/remotePlayer.js +469 -0
- package/src/interface/senzaShakaPlayer.js +168 -0
- package/src/interface/utils.js +45 -0
- package/src/messageManager.js +0 -88
- /package/src/{SessionInfo.js → implementation/SessionInfo.js} +0 -0
- /package/src/{devHelper.js → implementation/devHelper.js} +0 -0
- /package/src/{eventListenersManager.js → implementation/eventListenersManager.js} +0 -0
- /package/src/{subtitlesUtils.js → implementation/subtitlesUtils.js} +0 -0
package/src/api.js
CHANGED
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { sdkLogger, noop } from "./interface/utils.js";
|
|
2
2
|
import pack from "../package.json";
|
|
3
|
-
import {
|
|
4
|
-
const { version } = pack;
|
|
5
|
-
import { initSequence, showSequence } from "./devSequence.js";
|
|
6
|
-
import { lifecycle } from "./lifecycle";
|
|
7
|
-
import { alarmManager } from "./alarmManager";
|
|
8
|
-
|
|
9
|
-
let authToken;
|
|
3
|
+
import { Lifecycle, RemotePlayer, DeviceManager, PlatformManager, AlarmManager, MessageManager, ShakaPlayer, shaka, showSequence, initSequence } from "./interface/api.js";
|
|
10
4
|
|
|
11
|
-
const
|
|
5
|
+
const { version } = pack;
|
|
12
6
|
|
|
13
7
|
typeof document !== "undefined" && document.addEventListener("keydown", (event) => {
|
|
14
8
|
sdkLogger.log(`Got ${event.key} key`);
|
|
15
9
|
});
|
|
16
10
|
|
|
11
|
+
|
|
12
|
+
let authToken;
|
|
13
|
+
|
|
17
14
|
/** @namespace auth
|
|
18
15
|
*@example
|
|
19
16
|
* import { auth } from "senza-sdk";
|
|
@@ -51,314 +48,88 @@ export const ConnectReason = Object.freeze({
|
|
|
51
48
|
UI_WATCHDOG: "ui_watchdog"
|
|
52
49
|
});
|
|
53
50
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
/** Should be called once to init the library
|
|
58
|
-
*@example
|
|
51
|
+
/**
|
|
52
|
+
* Should be called once to init the library
|
|
53
|
+
* @example
|
|
59
54
|
* import { init } from "senza-sdk";
|
|
60
55
|
* await init();
|
|
61
56
|
**/
|
|
62
57
|
export async function init() {
|
|
63
|
-
sdkLogger.log(`init ${version}`);
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
58
|
+
sdkLogger.log(`init interface ${version}`);
|
|
59
|
+
if (window.senzaSDKImplementation) {
|
|
60
|
+
await window.senzaSDKImplementation.init(version, showSequence, initSequence);
|
|
158
61
|
} else {
|
|
159
|
-
|
|
160
|
-
sdkLogger.log(`authToken dummy: token = ${authToken}`);
|
|
62
|
+
noop("init");
|
|
161
63
|
}
|
|
162
|
-
|
|
163
64
|
// override window.close() since it's not allowed to close the application this way
|
|
164
65
|
window.close = () => {
|
|
165
66
|
sdkLogger.warn("window.close is disabled on Senza platform. Use lifecycle.exitApplication() instead.");
|
|
166
67
|
};
|
|
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;
|
|
185
68
|
}
|
|
186
69
|
|
|
187
70
|
// Returns the platform information, including version, pod, pod ip and session info.
|
|
188
71
|
export function getPlatformInfo() {
|
|
189
|
-
if (
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
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
|
-
}
|
|
72
|
+
if (window.senzaSDKImplementation) {
|
|
73
|
+
return window.senzaSDKImplementation.getPlatformInfo();
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
version: "X.X.XX-X",
|
|
77
|
+
pod: "ui-streamer-X.X.XX-X-QWERT-ASDFG-XXX-XXXXXX-XXXXX",
|
|
78
|
+
podIP: "0.0.0.0",
|
|
79
|
+
sessionInfo: {
|
|
80
|
+
userAgent: "SynamediaSenza/XX.YY.ZZ",
|
|
81
|
+
connectionId: "dummy",
|
|
82
|
+
deviceId: "123456789",
|
|
83
|
+
community: "LocalDev",
|
|
84
|
+
tenant: "XXXXXX",
|
|
85
|
+
tenantId: "XXXXXX",
|
|
86
|
+
manifest: {
|
|
87
|
+
transcontainer: "X.X.XX-X"
|
|
88
|
+
},
|
|
89
|
+
settings: {
|
|
90
|
+
webUI: {
|
|
91
|
+
backendHeaders: {
|
|
92
|
+
Authorization: "Bearer dummytoken"
|
|
221
93
|
}
|
|
222
|
-
},
|
|
223
|
-
homeSessionInfo: {
|
|
224
|
-
tenantId: "XXXXXX",
|
|
225
|
-
community: "LocalDev"
|
|
226
94
|
}
|
|
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);
|
|
251
95
|
},
|
|
252
|
-
|
|
253
|
-
|
|
96
|
+
homeSessionInfo: {
|
|
97
|
+
tenantId: "XXXXXX",
|
|
98
|
+
community: "LocalDev"
|
|
254
99
|
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
100
|
+
}
|
|
101
|
+
};
|
|
257
102
|
}
|
|
258
103
|
|
|
259
104
|
async function getToken() {
|
|
260
|
-
if (
|
|
261
|
-
|
|
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
|
-
});
|
|
105
|
+
if (window.senzaSDKImplementation) {
|
|
106
|
+
return window.senzaSDKImplementation.auth.getToken();
|
|
270
107
|
}
|
|
271
108
|
return Promise.resolve(authToken);
|
|
272
109
|
}
|
|
273
110
|
|
|
274
111
|
function forceTokenUpdate() {
|
|
275
112
|
authToken = null;
|
|
276
|
-
|
|
277
|
-
|
|
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");
|
|
113
|
+
if (window.senzaSDKImplementation) {
|
|
114
|
+
return window.senzaSDKImplementation.auth.forceTokenUpdate();
|
|
300
115
|
}
|
|
116
|
+
sdkLogger.error("forceTokenUpdate: window.cefQuery is undefined");
|
|
117
|
+
|
|
301
118
|
}
|
|
302
119
|
|
|
303
120
|
/** Returns a boolean that indicates whether we are running in an e2e environment, or on local browser */
|
|
304
121
|
export function isRunningE2E() {
|
|
305
|
-
return !!(typeof window !== "undefined" && window.
|
|
122
|
+
return !!(typeof window !== "undefined" && window.senzaSDKImplementation);
|
|
306
123
|
}
|
|
307
124
|
|
|
308
125
|
/** Call this API once after application startup, when the ui is ready to accept keys/events */
|
|
309
126
|
export function uiReady() {
|
|
310
|
-
if (window.
|
|
311
|
-
window.
|
|
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");
|
|
127
|
+
if (window.senzaSDKImplementation) {
|
|
128
|
+
return window.senzaSDKImplementation.uiReady();
|
|
323
129
|
}
|
|
130
|
+
sdkLogger.error("uiReady: window.cefQuery is undefined");
|
|
324
131
|
}
|
|
325
132
|
|
|
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
|
-
|
|
362
133
|
/**
|
|
363
134
|
* @example
|
|
364
135
|
* import { envInfo } from "senza-sdk";
|
|
@@ -369,10 +140,12 @@ import "./devHelper";
|
|
|
369
140
|
* @property {string} envInfo.sdkVersion - the version of the SDK
|
|
370
141
|
*/
|
|
371
142
|
export const envInfo = {
|
|
372
|
-
remoteBrowserIp: window
|
|
373
|
-
sdkVersion: version
|
|
143
|
+
remoteBrowserIp: window?.diagnostics?.()?.podIP || "127.0.0.1",
|
|
144
|
+
sdkVersion: version,
|
|
145
|
+
sdkBackendVersion: window?.senzaSDKImplementation?.version || "N/A"
|
|
374
146
|
};
|
|
375
147
|
|
|
148
|
+
|
|
376
149
|
/**
|
|
377
150
|
* The function receives a license response and passes it to platform.
|
|
378
151
|
* @param {number} statusCode status code that was received from the license server
|
|
@@ -383,31 +156,10 @@ export const envInfo = {
|
|
|
383
156
|
* In case of error licenseResponse is of type @type {string}
|
|
384
157
|
*/
|
|
385
158
|
export function writeLicenseResponse(statusCode, licenseResponse, fcid, sessionId) {
|
|
386
|
-
|
|
387
|
-
|
|
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
|
-
});
|
|
159
|
+
if (window?.senzaSDKImplementation) {
|
|
160
|
+
return window.senzaSDKImplementation.writeLicenseResponse(statusCode, licenseResponse, fcid, sessionId);
|
|
409
161
|
}
|
|
410
|
-
|
|
162
|
+
sdkLogger.error("writeLicenseResponse: window.cefQuery is undefined");
|
|
411
163
|
}
|
|
412
164
|
|
|
413
165
|
export class ClientAssertionError extends Error {
|
|
@@ -438,34 +190,213 @@ export class ClientAssertionError extends Error {
|
|
|
438
190
|
* }
|
|
439
191
|
*/
|
|
440
192
|
export function getClientAssertion() {
|
|
441
|
-
if (window
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
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
|
-
}
|
|
193
|
+
if (window?.senzaSDKImplementation) {
|
|
194
|
+
return window.senzaSDKImplementation.auth.getClientAssertion();
|
|
195
|
+
}
|
|
196
|
+
sdkLogger.warn("getClientAssertion is not supported if NOT running e2e");
|
|
197
|
+
}
|
|
457
198
|
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
199
|
+
/**
|
|
200
|
+
* @module
|
|
201
|
+
* @private
|
|
202
|
+
* @type {Lifecycle}
|
|
203
|
+
* @example
|
|
204
|
+
* import { lifecycle } from "senza-sdk";
|
|
205
|
+
*
|
|
206
|
+
* @return {Lifecycle} pointer to the Lifecycle singleton
|
|
207
|
+
*/
|
|
208
|
+
let lifecycle;
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* @module
|
|
212
|
+
* @private
|
|
213
|
+
* @type {RemotePlayer}
|
|
214
|
+
* @example
|
|
215
|
+
* import { init, remotePlayer } from "senza-sdk";
|
|
216
|
+
* await init();
|
|
217
|
+
* try {
|
|
218
|
+
* await remotePlayer.load("http://playable.url/file.mp4");
|
|
219
|
+
* remotePlayer.play();
|
|
220
|
+
* } catch(err) {
|
|
221
|
+
* console.log("remotePlayer api failed with error code", err.code, err.msg);
|
|
222
|
+
* }
|
|
223
|
+
*
|
|
224
|
+
* @returns {RemotePlayer} pointer to the RemotePlayer singleton
|
|
225
|
+
*/
|
|
226
|
+
let remotePlayer;
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* @module
|
|
231
|
+
* @private
|
|
232
|
+
* @type {AlarmManager}
|
|
233
|
+
* @example
|
|
234
|
+
* import { alarmManager } from "senza-sdk";
|
|
235
|
+
*
|
|
236
|
+
* @return {AlarmManager} pointer to the AlarmManager singleton
|
|
237
|
+
*/
|
|
238
|
+
let alarmManager;
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* @module
|
|
242
|
+
* @private
|
|
243
|
+
* @type {DeviceManager}
|
|
244
|
+
* @example
|
|
245
|
+
* import { deviceManager } from "senza-sdk";
|
|
246
|
+
* const wifiInfo = await deviceManager.getWifiInfo();
|
|
247
|
+
* console.info(wifiInfo.ssid);
|
|
248
|
+
* await deviceManager.clearWifi();
|
|
249
|
+
* deviceManager.reboot();
|
|
250
|
+
*
|
|
251
|
+
* @return {DeviceManager} pointer to the DeviceManager singleton
|
|
252
|
+
*/
|
|
253
|
+
let deviceManager;
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* @module
|
|
258
|
+
* @private
|
|
259
|
+
* @type {PlatformManager}
|
|
260
|
+
* @example
|
|
261
|
+
* import { platformManager } from "senza-sdk";
|
|
262
|
+
* console.info(platformManager.appConfig);
|
|
263
|
+
* platformManager.setTimezone("Europe/Brussels");
|
|
264
|
+
*
|
|
265
|
+
* @return {PlatformManager} pointer to the PlatformManager singleton
|
|
266
|
+
*/
|
|
267
|
+
let platformManager;
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* @module
|
|
271
|
+
* @private
|
|
272
|
+
* @type {MessageManager}
|
|
273
|
+
* @example
|
|
274
|
+
* import { MessageManager } from "senza-sdk";
|
|
275
|
+
*
|
|
276
|
+
* @return {MessageManager} pointer to the MessageManager singleton
|
|
277
|
+
*/
|
|
278
|
+
let messageManager;
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* ShakaPlayer subclass of Shaka that handles both local and remote playback.
|
|
283
|
+
*
|
|
284
|
+
* @class ShakaPlayer
|
|
285
|
+
* @private
|
|
286
|
+
* @type {new|ShakaPlayer}
|
|
287
|
+
* @example
|
|
288
|
+
* import { ShakaPlayer } from "senza-sdk";
|
|
289
|
+
*
|
|
290
|
+
* try {
|
|
291
|
+
* const videoElement = document.getElementById("video");
|
|
292
|
+
* const player = new ShakaPlayer(videoElement);
|
|
293
|
+
* await player.load("http://playable.url/file.mpd");
|
|
294
|
+
* await videoElement.play(); // will start the playback
|
|
295
|
+
*
|
|
296
|
+
* } catch (err) {
|
|
297
|
+
* console.error("ShakaPlayer failed with error", err);
|
|
298
|
+
* }
|
|
299
|
+
*/
|
|
300
|
+
let ShakaPlayerImplementation;
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* @module
|
|
305
|
+
* @private
|
|
306
|
+
* @type {shaka}
|
|
307
|
+
*/
|
|
308
|
+
let shakaImplementation;
|
|
309
|
+
|
|
310
|
+
if (!isRunningE2E()) {
|
|
311
|
+
sdkLogger.warn("Senza SDK is not running in E2E environment. Some features may not work as expected.");
|
|
312
|
+
|
|
313
|
+
lifecycle = new Lifecycle();
|
|
314
|
+
remotePlayer = new RemotePlayer();
|
|
315
|
+
alarmManager = new AlarmManager();
|
|
316
|
+
deviceManager = new DeviceManager();
|
|
317
|
+
platformManager = new PlatformManager();
|
|
318
|
+
messageManager = new MessageManager();
|
|
319
|
+
ShakaPlayerImplementation = ShakaPlayer;
|
|
320
|
+
shakaImplementation = shaka;
|
|
321
|
+
} else {
|
|
322
|
+
// If running in E2E environment, use the implementation provided by the platform
|
|
323
|
+
lifecycle = window.senzaSDKImplementation.lifecycle;
|
|
324
|
+
remotePlayer = window.senzaSDKImplementation.remotePlayer;
|
|
325
|
+
alarmManager = window.senzaSDKImplementation.alarmManager;
|
|
326
|
+
deviceManager = window.senzaSDKImplementation.deviceManager;
|
|
327
|
+
platformManager = window.senzaSDKImplementation.platformManager;
|
|
328
|
+
messageManager = window.senzaSDKImplementation.messageManager;
|
|
329
|
+
ShakaPlayerImplementation = window.senzaSDKImplementation.ShakaPlayer;
|
|
330
|
+
shakaImplementation = window.senzaSDKImplementation.shaka;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* @deprecated use lifecycle.connectReason instead
|
|
335
|
+
* Returns the reason the ui has been loaded
|
|
336
|
+
**/
|
|
337
|
+
export function getConnectReason() {
|
|
338
|
+
return lifecycle.connectReason;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* @deprecated use lifecycle.triggerEvent instead
|
|
343
|
+
* Returns the event that triggered the reloading of the ui after ui has been released
|
|
344
|
+
**/
|
|
345
|
+
export function getTriggerEvent() {
|
|
346
|
+
return lifecycle.triggerEvent;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* @deprecated use platformManager.setTimezone instead.
|
|
351
|
+
* @param {string} timezone the timezone to set to
|
|
352
|
+
* the format of the timezone is according to the standard TZ identifier
|
|
353
|
+
* (e.g. America/Los_Angeles, Asia/Tokyo, Europe/Brussels)
|
|
354
|
+
* for a full list of TZ identifiers, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
|
355
|
+
*/
|
|
356
|
+
export function setTimezone(timezone) {
|
|
357
|
+
// STOP DO NOT CHANGE THIS FUNCTION AS IT IS DEPRECATED!!!!
|
|
358
|
+
if (window.cefQuery) {
|
|
359
|
+
const request = { message: JSON.stringify({ type: "setTimeZone", timezone }), waitForResponse: false, target: "UI-Streamer" };
|
|
360
|
+
window.cefQuery({
|
|
361
|
+
request: JSON.stringify(request),
|
|
362
|
+
persistent: false,
|
|
363
|
+
onSuccess: () => {
|
|
364
|
+
sdkLogger.log("timezome is successfully set to", timezone);
|
|
365
|
+
},
|
|
366
|
+
onFailure: (code, msg) => {
|
|
367
|
+
sdkLogger.error(`error occurred setting timezone to ${timezone}: ${code} ${msg}`);
|
|
368
|
+
}
|
|
464
369
|
});
|
|
465
370
|
}
|
|
466
|
-
sdkLogger.warn("getClientAssertion is not supported if NOT running e2e");
|
|
467
371
|
}
|
|
468
372
|
|
|
373
|
+
/**
|
|
374
|
+
* @deprecated use deviceManager.deviceInfo instead.
|
|
375
|
+
* Returns the device information, including device id, connection id, community, tenant and client ip
|
|
376
|
+
* */
|
|
377
|
+
export function getDeviceInfo() {
|
|
378
|
+
// STOP DO NOT CHANGE THIS FUNCTION AS IT IS DEPRECATED!!!!
|
|
379
|
+
if (isRunningE2E()) {
|
|
380
|
+
return {
|
|
381
|
+
deviceId: deviceManager.deviceInfo.deviceId,
|
|
382
|
+
connectionId: deviceManager.deviceInfo.connectionId,
|
|
383
|
+
community: deviceManager.deviceInfo.community,
|
|
384
|
+
tenant: deviceManager.deviceInfo.tenant,
|
|
385
|
+
clientIp: deviceManager.deviceInfo.clientIp
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
sdkLogger.log("getDeviceInfo running locally, returning dummy info");
|
|
389
|
+
return {
|
|
390
|
+
deviceId: "123456789",
|
|
391
|
+
connectionId: "dummy",
|
|
392
|
+
community: "LocalDev",
|
|
393
|
+
tenant: "XXXXXX",
|
|
394
|
+
clientIp: "0.0.0.0"
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
export { lifecycle, remotePlayer, alarmManager, deviceManager, platformManager, messageManager, ShakaPlayerImplementation as ShakaPlayer, shakaImplementation as shaka, showSequence, initSequence };
|
|
399
|
+
|
|
469
400
|
// Assign the senza library to the old name (hs) for backward compatibility
|
|
470
401
|
import * as senzaSDK from "./api.js";
|
|
471
402
|
if (typeof window !== "undefined") {
|