@vizbeetv/homesso-sdk-qa 1.0.3 → 1.0.5
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/es5/index.cjs +74 -41
- package/es5/index.mjs +67 -34
- package/es6/index.cjs +64 -40
- package/es6/index.mjs +57 -33
- package/package.json +1 -1
- package/types/VizbeeHomeSSOManager.d.ts +12 -2
- package/types/index.d.ts +46 -22
- package/types/metrics/VizbeeMetricsManager.d.ts +3 -3
- package/types/model/VizbeeSenderSignInInfo.d.ts +1 -1
- package/types/model/VizbeeSignInInfo.d.ts +9 -2
- package/types/model/VizbeeSignInStatus.d.ts +9 -9
- package/types/types.d.ts +21 -4
- package/types/ui/VizbeeHomeSSOUIConfig.d.ts +9 -0
- package/types/ui/VizbeeHomeSSOUIManager.d.ts +2 -6
- package/types/utils/constants.d.ts +9 -0
- package/types/utils/http-client.d.ts +7 -7
package/es6/index.cjs
CHANGED
|
@@ -404,16 +404,16 @@ class Logger {
|
|
|
404
404
|
const logger = new Logger();
|
|
405
405
|
|
|
406
406
|
const LOG_TAG$1 = 'VizbeeHomeSSOManager';
|
|
407
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
408
407
|
class VizbeeMetricsManager {
|
|
409
408
|
constructor() {
|
|
410
|
-
var _a, _b
|
|
409
|
+
var _a, _b;
|
|
410
|
+
this.metricsManager = null;
|
|
411
411
|
this.senderInfo = null;
|
|
412
412
|
this.getSignInInfo = () => __awaiter(this, void 0, void 0, function* () { return []; });
|
|
413
|
-
|
|
413
|
+
const vizbee = window === null || window === void 0 ? void 0 : window.vizbee;
|
|
414
|
+
if ((_b = (_a = vizbee === null || vizbee === void 0 ? void 0 : vizbee.continuity) === null || _a === void 0 ? void 0 : _a.analytics) === null || _b === void 0 ? void 0 : _b.AnalyticsProvider) {
|
|
414
415
|
this.metricsManager =
|
|
415
|
-
new
|
|
416
|
-
// Create a wrapper with 'provider' property
|
|
416
|
+
new vizbee.continuity.analytics.AnalyticsProvider();
|
|
417
417
|
const attributesProvider = {
|
|
418
418
|
getAttributes: () => this.getAttributes(),
|
|
419
419
|
};
|
|
@@ -441,7 +441,8 @@ class VizbeeMetricsManager {
|
|
|
441
441
|
this.metricsManager.logMetrics(event, attributesToBeSent);
|
|
442
442
|
}
|
|
443
443
|
setCustomAttributes(customAttributes) {
|
|
444
|
-
|
|
444
|
+
var _a;
|
|
445
|
+
(_a = this.metricsManager) === null || _a === void 0 ? void 0 : _a.setCustomAttributes(customAttributes);
|
|
445
446
|
}
|
|
446
447
|
getAttributes() {
|
|
447
448
|
return this.createAttributesJson();
|
|
@@ -481,7 +482,7 @@ class VizbeeMetricsManager {
|
|
|
481
482
|
var _a, _b, _c, _d;
|
|
482
483
|
const attributes = {};
|
|
483
484
|
attributes[VizbeeMetricsConstants.METRICS_ATTR_SCREEN_HOMESSO_SDK_VERSION] =
|
|
484
|
-
'1.0.
|
|
485
|
+
'1.0.5';
|
|
485
486
|
attributes['REMOTE_FRIENDLY_NAME'] = (_a = this.senderInfo) === null || _a === void 0 ? void 0 : _a.friendlyName;
|
|
486
487
|
attributes['REMOTE_DEVICE_ID'] = (_b = this.senderInfo) === null || _b === void 0 ? void 0 : _b.deviceId;
|
|
487
488
|
attributes['REMOTE_DEVICE_TYPE'] = (_c = this.senderInfo) === null || _c === void 0 ? void 0 : _c.deviceType;
|
|
@@ -514,15 +515,24 @@ const VizbeeConstants = {
|
|
|
514
515
|
// SDK events types
|
|
515
516
|
VIZBEE_SESSION_READY: 'vizbee-bicast-session-ready',
|
|
516
517
|
};
|
|
518
|
+
/**
|
|
519
|
+
* Numeric session states reported by the Continuity SDK's bicast session manager.
|
|
520
|
+
* Mirrors SessionState in the VTV SDK — defined here so HomeSSO has no magic numbers.
|
|
521
|
+
*/
|
|
522
|
+
const VizbeeSessionState = {
|
|
523
|
+
NOT_CONNECTED: 1,
|
|
524
|
+
CONNECTING: 2,
|
|
525
|
+
CONNECTED: 3,
|
|
526
|
+
};
|
|
517
527
|
// Enum for sign in states
|
|
518
|
-
|
|
528
|
+
exports.VizbeeSignInState = void 0;
|
|
519
529
|
(function (VizbeeSignInState) {
|
|
520
530
|
VizbeeSignInState["SIGN_IN_NOT_STARTED"] = "not_started";
|
|
521
531
|
VizbeeSignInState["SIGN_IN_IN_PROGRESS"] = "in_progress";
|
|
522
532
|
VizbeeSignInState["SIGN_IN_COMPLETED"] = "completed";
|
|
523
533
|
VizbeeSignInState["SIGN_IN_FAILED"] = "failed";
|
|
524
534
|
VizbeeSignInState["SIGN_IN_CANCELLED"] = "cancelled";
|
|
525
|
-
})(VizbeeSignInState || (VizbeeSignInState = {}));
|
|
535
|
+
})(exports.VizbeeSignInState || (exports.VizbeeSignInState = {}));
|
|
526
536
|
|
|
527
537
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
528
538
|
// Base abstract class for sign in status
|
|
@@ -547,7 +557,7 @@ class ProgressStatus extends VizbeeSignInStatus {
|
|
|
547
557
|
this.customData = customData;
|
|
548
558
|
}
|
|
549
559
|
getState() {
|
|
550
|
-
return VizbeeSignInState.SIGN_IN_IN_PROGRESS;
|
|
560
|
+
return exports.VizbeeSignInState.SIGN_IN_IN_PROGRESS;
|
|
551
561
|
}
|
|
552
562
|
}
|
|
553
563
|
// Success status class
|
|
@@ -559,7 +569,7 @@ class SuccessStatus extends VizbeeSignInStatus {
|
|
|
559
569
|
this.customData = customData;
|
|
560
570
|
}
|
|
561
571
|
getState() {
|
|
562
|
-
return VizbeeSignInState.SIGN_IN_COMPLETED;
|
|
572
|
+
return exports.VizbeeSignInState.SIGN_IN_COMPLETED;
|
|
563
573
|
}
|
|
564
574
|
}
|
|
565
575
|
// Failure status class
|
|
@@ -574,8 +584,8 @@ class FailureStatus extends VizbeeSignInStatus {
|
|
|
574
584
|
}
|
|
575
585
|
getState() {
|
|
576
586
|
return this.isCancelled
|
|
577
|
-
? VizbeeSignInState.SIGN_IN_CANCELLED
|
|
578
|
-
: VizbeeSignInState.SIGN_IN_FAILED;
|
|
587
|
+
? exports.VizbeeSignInState.SIGN_IN_CANCELLED
|
|
588
|
+
: exports.VizbeeSignInState.SIGN_IN_FAILED;
|
|
579
589
|
}
|
|
580
590
|
}
|
|
581
591
|
|
|
@@ -586,12 +596,12 @@ class FailureStatus extends VizbeeSignInStatus {
|
|
|
586
596
|
/**
|
|
587
597
|
* Enum defining the different types of sign-in modals available in the system
|
|
588
598
|
*/
|
|
589
|
-
|
|
599
|
+
exports.SignInModalType = void 0;
|
|
590
600
|
(function (SignInModalType) {
|
|
591
601
|
SignInModalType["INFORMATION"] = "information";
|
|
592
602
|
SignInModalType["PROGRESS"] = "progress";
|
|
593
603
|
SignInModalType["SUCCESS"] = "success";
|
|
594
|
-
})(SignInModalType || (SignInModalType = {}));
|
|
604
|
+
})(exports.SignInModalType || (exports.SignInModalType = {}));
|
|
595
605
|
/**
|
|
596
606
|
* Default theme configuration with basic color scheme
|
|
597
607
|
*/
|
|
@@ -1229,7 +1239,11 @@ class VizbeeSnackbar {
|
|
|
1229
1239
|
}
|
|
1230
1240
|
}
|
|
1231
1241
|
|
|
1232
|
-
|
|
1242
|
+
/**
|
|
1243
|
+
* @fileoverview Manages Single Sign-On (SSO) functionality for Vizbee home devices.
|
|
1244
|
+
* Handles communication between mobile and TV devices for authentication purposes.
|
|
1245
|
+
* @module VizbeeHomeSSOManager
|
|
1246
|
+
*/
|
|
1233
1247
|
const LOG_TAG = 'VizbeeHomeSSOManager';
|
|
1234
1248
|
/**
|
|
1235
1249
|
* Manages Single Sign-On (SSO) functionality between mobile and TV devices in the Vizbee ecosystem.
|
|
@@ -1261,8 +1275,14 @@ class VizbeeHomeSSOManager {
|
|
|
1261
1275
|
this.isScreenSignedIn = false;
|
|
1262
1276
|
/** @internal Tracks if sign-in process is currently active */
|
|
1263
1277
|
this.isSignInInProgress = false;
|
|
1278
|
+
/**
|
|
1279
|
+
* @internal Tracks which modal is currently shown so the same progress modal
|
|
1280
|
+
* is not re-shown (snackbar.show() hides + re-mounts, which would flicker).
|
|
1281
|
+
*/
|
|
1282
|
+
this.shownModal = 'none';
|
|
1264
1283
|
/** @internal Information about the sender device */
|
|
1265
1284
|
this.senderInfo = null;
|
|
1285
|
+
this.signInHandler = null;
|
|
1266
1286
|
/**
|
|
1267
1287
|
* Modal display preferences for the SSO UI
|
|
1268
1288
|
* @public
|
|
@@ -1415,12 +1435,11 @@ class VizbeeHomeSSOManager {
|
|
|
1415
1435
|
var _a, _b;
|
|
1416
1436
|
try {
|
|
1417
1437
|
logger.info(`[${LOG_TAG}][initializeVizbeeSession] - Initializing Vizbee session`);
|
|
1418
|
-
|
|
1419
|
-
if (!
|
|
1438
|
+
const xmessages = (_b = (_a = window.vizbee) === null || _a === void 0 ? void 0 : _a.continuity) === null || _b === void 0 ? void 0 : _b.xmessages;
|
|
1439
|
+
if (!xmessages) {
|
|
1420
1440
|
throw new Error('Vizbee continuity or xmessages not initialized');
|
|
1421
1441
|
}
|
|
1422
|
-
|
|
1423
|
-
const sessionManager = new window.vizbee.continuity.xmessages.VizbeeBicastSessionManager();
|
|
1442
|
+
const sessionManager = new xmessages.VizbeeBicastSessionManager();
|
|
1424
1443
|
if (!sessionManager) {
|
|
1425
1444
|
throw new Error('Session manager initialization failed');
|
|
1426
1445
|
}
|
|
@@ -1429,7 +1448,7 @@ class VizbeeHomeSSOManager {
|
|
|
1429
1448
|
sessionManager.addSessionStateListener({
|
|
1430
1449
|
onSessionStateChanged: (state) => {
|
|
1431
1450
|
logger.info(`[${LOG_TAG}][onSessionStateChanged] - Session state changed:`, state);
|
|
1432
|
-
if (state ===
|
|
1451
|
+
if (state === VizbeeSessionState.CONNECTED) {
|
|
1433
1452
|
this.vizbeeSession = sessionManager.getSession();
|
|
1434
1453
|
this.vizbeeMessagingClient =
|
|
1435
1454
|
this.vizbeeSession.getMessagingClient();
|
|
@@ -1481,6 +1500,8 @@ class VizbeeHomeSSOManager {
|
|
|
1481
1500
|
if (yield this.shouldIgnoreSignInRequest()) {
|
|
1482
1501
|
return;
|
|
1483
1502
|
}
|
|
1503
|
+
this.isSignInInProgress = true;
|
|
1504
|
+
this.updateProgressUI();
|
|
1484
1505
|
const signInInfo = {
|
|
1485
1506
|
isSignedIn: this.isRemoteSignedIn,
|
|
1486
1507
|
signInType: signInType,
|
|
@@ -1521,9 +1542,9 @@ class VizbeeHomeSSOManager {
|
|
|
1521
1542
|
const attributes = yield ((_b = (_a = this.vizbeeMetricsManager) === null || _a === void 0 ? void 0 : _a.getAttributes) === null || _b === void 0 ? void 0 : _b.call(_a));
|
|
1522
1543
|
const signInInfoList = attributes === null || attributes === void 0 ? void 0 : attributes['SCREEN_HOMESSO_USER_INFO'];
|
|
1523
1544
|
logger.info(`[${LOG_TAG}][isUserAlreadySignedIn] - signInInfoList`, signInInfoList);
|
|
1524
|
-
const tvSignInInfo = signInInfoList.find((info) => info.user_login_type === signInType);
|
|
1545
|
+
const tvSignInInfo = signInInfoList === null || signInInfoList === void 0 ? void 0 : signInInfoList.find((info) => info.user_login_type === signInType);
|
|
1525
1546
|
logger.debug(`[${LOG_TAG}][isUserAlreadySignedIn] - TV sign in status fetched:`, tvSignInInfo);
|
|
1526
|
-
return tvSignInInfo === null || tvSignInInfo === void 0 ? void 0 : tvSignInInfo.user_is_signed_in;
|
|
1547
|
+
return (tvSignInInfo === null || tvSignInInfo === void 0 ? void 0 : tvSignInInfo.user_is_signed_in) === true;
|
|
1527
1548
|
}
|
|
1528
1549
|
catch (error) {
|
|
1529
1550
|
logger.warn(`[${LOG_TAG}][isUserAlreadySignedIn] - Error checking sign-in status:`, error);
|
|
@@ -1563,12 +1584,14 @@ class VizbeeHomeSSOManager {
|
|
|
1563
1584
|
* @internal
|
|
1564
1585
|
*/
|
|
1565
1586
|
sendStatusToSender(status) {
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1587
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1588
|
+
const signInStatus = this.serializeStatus(status);
|
|
1589
|
+
const data = {
|
|
1590
|
+
[VizbeeConstants.KEY_SUB_TYPE]: VizbeeConstants.EVENT_SUBTYPE_SIGN_IN_STATUS,
|
|
1591
|
+
[VizbeeConstants.KEY_SIGN_IN_STATUS]: signInStatus,
|
|
1592
|
+
};
|
|
1593
|
+
yield this.vizbeeMessagingClient.send(data, VizbeeConstants.EVENT_SSO_NAME);
|
|
1594
|
+
});
|
|
1572
1595
|
}
|
|
1573
1596
|
/**
|
|
1574
1597
|
* Serializes status objects for transmission to mobile device
|
|
@@ -1578,16 +1601,7 @@ class VizbeeHomeSSOManager {
|
|
|
1578
1601
|
* @internal
|
|
1579
1602
|
*/
|
|
1580
1603
|
serializeStatus(status) {
|
|
1581
|
-
|
|
1582
|
-
return status.serialize();
|
|
1583
|
-
}
|
|
1584
|
-
else if (status instanceof SuccessStatus) {
|
|
1585
|
-
return status.serialize();
|
|
1586
|
-
}
|
|
1587
|
-
else if (status instanceof FailureStatus) {
|
|
1588
|
-
return status.serialize();
|
|
1589
|
-
}
|
|
1590
|
-
return null;
|
|
1604
|
+
return status.serialize();
|
|
1591
1605
|
}
|
|
1592
1606
|
/**
|
|
1593
1607
|
* Updates UI for sign-in progress state
|
|
@@ -1596,6 +1610,12 @@ class VizbeeHomeSSOManager {
|
|
|
1596
1610
|
* @internal
|
|
1597
1611
|
*/
|
|
1598
1612
|
updateProgressUI() {
|
|
1613
|
+
const targetModal = this.isRemoteSignedIn ? 'progress' : 'informational';
|
|
1614
|
+
// Avoid re-showing the same modal
|
|
1615
|
+
if (this.shownModal === targetModal) {
|
|
1616
|
+
return;
|
|
1617
|
+
}
|
|
1618
|
+
this.shownModal = targetModal;
|
|
1599
1619
|
if (!this.isRemoteSignedIn) {
|
|
1600
1620
|
const modalOptions = this.vizbeeHomeSSOUIManager.getInformationalSignInModalConfig();
|
|
1601
1621
|
this.snackbar.show(modalOptions);
|
|
@@ -1617,6 +1637,7 @@ class VizbeeHomeSSOManager {
|
|
|
1617
1637
|
// themed/localized like the informational and progress modals.
|
|
1618
1638
|
this.vizbeeHomeSSOUIManager.setSuccessSignInModalConfig({ duration: 10000 });
|
|
1619
1639
|
const modalOptions = this.vizbeeHomeSSOUIManager.getSuccessSignInModalConfig();
|
|
1640
|
+
this.shownModal = 'success';
|
|
1620
1641
|
this.snackbar.show(modalOptions);
|
|
1621
1642
|
}
|
|
1622
1643
|
/**
|
|
@@ -1626,6 +1647,7 @@ class VizbeeHomeSSOManager {
|
|
|
1626
1647
|
* @internal
|
|
1627
1648
|
*/
|
|
1628
1649
|
updateFailureUI() {
|
|
1650
|
+
this.shownModal = 'none';
|
|
1629
1651
|
this.snackbar.hide();
|
|
1630
1652
|
}
|
|
1631
1653
|
}
|
|
@@ -1696,6 +1718,8 @@ const init = () => {
|
|
|
1696
1718
|
}
|
|
1697
1719
|
};
|
|
1698
1720
|
const setupHomeSSO = () => {
|
|
1721
|
+
if (!window.vizbee)
|
|
1722
|
+
return;
|
|
1699
1723
|
window.vizbee.homesso = {
|
|
1700
1724
|
HomeSSOContext: HomeSSOContext,
|
|
1701
1725
|
messages: {
|
|
@@ -1707,7 +1731,7 @@ const setupHomeSSO = () => {
|
|
|
1707
1731
|
// Replaced at build time with package.json's version by
|
|
1708
1732
|
// @rollup/plugin-replace (same token the metrics manager uses), so
|
|
1709
1733
|
// integrators can read the loaded SDK version off the namespace.
|
|
1710
|
-
VERSION: '1.0.
|
|
1734
|
+
VERSION: '1.0.5',
|
|
1711
1735
|
};
|
|
1712
1736
|
window.dispatchEvent(new Event('VIZBEE_HOMESSO_READY'));
|
|
1713
1737
|
};
|
package/es6/index.mjs
CHANGED
|
@@ -400,16 +400,16 @@ class Logger {
|
|
|
400
400
|
const logger = new Logger();
|
|
401
401
|
|
|
402
402
|
const LOG_TAG$1 = 'VizbeeHomeSSOManager';
|
|
403
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
404
403
|
class VizbeeMetricsManager {
|
|
405
404
|
constructor() {
|
|
406
|
-
var _a, _b
|
|
405
|
+
var _a, _b;
|
|
406
|
+
this.metricsManager = null;
|
|
407
407
|
this.senderInfo = null;
|
|
408
408
|
this.getSignInInfo = () => __awaiter(this, void 0, void 0, function* () { return []; });
|
|
409
|
-
|
|
409
|
+
const vizbee = window === null || window === void 0 ? void 0 : window.vizbee;
|
|
410
|
+
if ((_b = (_a = vizbee === null || vizbee === void 0 ? void 0 : vizbee.continuity) === null || _a === void 0 ? void 0 : _a.analytics) === null || _b === void 0 ? void 0 : _b.AnalyticsProvider) {
|
|
410
411
|
this.metricsManager =
|
|
411
|
-
new
|
|
412
|
-
// Create a wrapper with 'provider' property
|
|
412
|
+
new vizbee.continuity.analytics.AnalyticsProvider();
|
|
413
413
|
const attributesProvider = {
|
|
414
414
|
getAttributes: () => this.getAttributes(),
|
|
415
415
|
};
|
|
@@ -437,7 +437,8 @@ class VizbeeMetricsManager {
|
|
|
437
437
|
this.metricsManager.logMetrics(event, attributesToBeSent);
|
|
438
438
|
}
|
|
439
439
|
setCustomAttributes(customAttributes) {
|
|
440
|
-
|
|
440
|
+
var _a;
|
|
441
|
+
(_a = this.metricsManager) === null || _a === void 0 ? void 0 : _a.setCustomAttributes(customAttributes);
|
|
441
442
|
}
|
|
442
443
|
getAttributes() {
|
|
443
444
|
return this.createAttributesJson();
|
|
@@ -477,7 +478,7 @@ class VizbeeMetricsManager {
|
|
|
477
478
|
var _a, _b, _c, _d;
|
|
478
479
|
const attributes = {};
|
|
479
480
|
attributes[VizbeeMetricsConstants.METRICS_ATTR_SCREEN_HOMESSO_SDK_VERSION] =
|
|
480
|
-
'1.0.
|
|
481
|
+
'1.0.5';
|
|
481
482
|
attributes['REMOTE_FRIENDLY_NAME'] = (_a = this.senderInfo) === null || _a === void 0 ? void 0 : _a.friendlyName;
|
|
482
483
|
attributes['REMOTE_DEVICE_ID'] = (_b = this.senderInfo) === null || _b === void 0 ? void 0 : _b.deviceId;
|
|
483
484
|
attributes['REMOTE_DEVICE_TYPE'] = (_c = this.senderInfo) === null || _c === void 0 ? void 0 : _c.deviceType;
|
|
@@ -510,6 +511,15 @@ const VizbeeConstants = {
|
|
|
510
511
|
// SDK events types
|
|
511
512
|
VIZBEE_SESSION_READY: 'vizbee-bicast-session-ready',
|
|
512
513
|
};
|
|
514
|
+
/**
|
|
515
|
+
* Numeric session states reported by the Continuity SDK's bicast session manager.
|
|
516
|
+
* Mirrors SessionState in the VTV SDK — defined here so HomeSSO has no magic numbers.
|
|
517
|
+
*/
|
|
518
|
+
const VizbeeSessionState = {
|
|
519
|
+
NOT_CONNECTED: 1,
|
|
520
|
+
CONNECTING: 2,
|
|
521
|
+
CONNECTED: 3,
|
|
522
|
+
};
|
|
513
523
|
// Enum for sign in states
|
|
514
524
|
var VizbeeSignInState;
|
|
515
525
|
(function (VizbeeSignInState) {
|
|
@@ -1225,7 +1235,11 @@ class VizbeeSnackbar {
|
|
|
1225
1235
|
}
|
|
1226
1236
|
}
|
|
1227
1237
|
|
|
1228
|
-
|
|
1238
|
+
/**
|
|
1239
|
+
* @fileoverview Manages Single Sign-On (SSO) functionality for Vizbee home devices.
|
|
1240
|
+
* Handles communication between mobile and TV devices for authentication purposes.
|
|
1241
|
+
* @module VizbeeHomeSSOManager
|
|
1242
|
+
*/
|
|
1229
1243
|
const LOG_TAG = 'VizbeeHomeSSOManager';
|
|
1230
1244
|
/**
|
|
1231
1245
|
* Manages Single Sign-On (SSO) functionality between mobile and TV devices in the Vizbee ecosystem.
|
|
@@ -1257,8 +1271,14 @@ class VizbeeHomeSSOManager {
|
|
|
1257
1271
|
this.isScreenSignedIn = false;
|
|
1258
1272
|
/** @internal Tracks if sign-in process is currently active */
|
|
1259
1273
|
this.isSignInInProgress = false;
|
|
1274
|
+
/**
|
|
1275
|
+
* @internal Tracks which modal is currently shown so the same progress modal
|
|
1276
|
+
* is not re-shown (snackbar.show() hides + re-mounts, which would flicker).
|
|
1277
|
+
*/
|
|
1278
|
+
this.shownModal = 'none';
|
|
1260
1279
|
/** @internal Information about the sender device */
|
|
1261
1280
|
this.senderInfo = null;
|
|
1281
|
+
this.signInHandler = null;
|
|
1262
1282
|
/**
|
|
1263
1283
|
* Modal display preferences for the SSO UI
|
|
1264
1284
|
* @public
|
|
@@ -1411,12 +1431,11 @@ class VizbeeHomeSSOManager {
|
|
|
1411
1431
|
var _a, _b;
|
|
1412
1432
|
try {
|
|
1413
1433
|
logger.info(`[${LOG_TAG}][initializeVizbeeSession] - Initializing Vizbee session`);
|
|
1414
|
-
|
|
1415
|
-
if (!
|
|
1434
|
+
const xmessages = (_b = (_a = window.vizbee) === null || _a === void 0 ? void 0 : _a.continuity) === null || _b === void 0 ? void 0 : _b.xmessages;
|
|
1435
|
+
if (!xmessages) {
|
|
1416
1436
|
throw new Error('Vizbee continuity or xmessages not initialized');
|
|
1417
1437
|
}
|
|
1418
|
-
|
|
1419
|
-
const sessionManager = new window.vizbee.continuity.xmessages.VizbeeBicastSessionManager();
|
|
1438
|
+
const sessionManager = new xmessages.VizbeeBicastSessionManager();
|
|
1420
1439
|
if (!sessionManager) {
|
|
1421
1440
|
throw new Error('Session manager initialization failed');
|
|
1422
1441
|
}
|
|
@@ -1425,7 +1444,7 @@ class VizbeeHomeSSOManager {
|
|
|
1425
1444
|
sessionManager.addSessionStateListener({
|
|
1426
1445
|
onSessionStateChanged: (state) => {
|
|
1427
1446
|
logger.info(`[${LOG_TAG}][onSessionStateChanged] - Session state changed:`, state);
|
|
1428
|
-
if (state ===
|
|
1447
|
+
if (state === VizbeeSessionState.CONNECTED) {
|
|
1429
1448
|
this.vizbeeSession = sessionManager.getSession();
|
|
1430
1449
|
this.vizbeeMessagingClient =
|
|
1431
1450
|
this.vizbeeSession.getMessagingClient();
|
|
@@ -1477,6 +1496,8 @@ class VizbeeHomeSSOManager {
|
|
|
1477
1496
|
if (yield this.shouldIgnoreSignInRequest()) {
|
|
1478
1497
|
return;
|
|
1479
1498
|
}
|
|
1499
|
+
this.isSignInInProgress = true;
|
|
1500
|
+
this.updateProgressUI();
|
|
1480
1501
|
const signInInfo = {
|
|
1481
1502
|
isSignedIn: this.isRemoteSignedIn,
|
|
1482
1503
|
signInType: signInType,
|
|
@@ -1517,9 +1538,9 @@ class VizbeeHomeSSOManager {
|
|
|
1517
1538
|
const attributes = yield ((_b = (_a = this.vizbeeMetricsManager) === null || _a === void 0 ? void 0 : _a.getAttributes) === null || _b === void 0 ? void 0 : _b.call(_a));
|
|
1518
1539
|
const signInInfoList = attributes === null || attributes === void 0 ? void 0 : attributes['SCREEN_HOMESSO_USER_INFO'];
|
|
1519
1540
|
logger.info(`[${LOG_TAG}][isUserAlreadySignedIn] - signInInfoList`, signInInfoList);
|
|
1520
|
-
const tvSignInInfo = signInInfoList.find((info) => info.user_login_type === signInType);
|
|
1541
|
+
const tvSignInInfo = signInInfoList === null || signInInfoList === void 0 ? void 0 : signInInfoList.find((info) => info.user_login_type === signInType);
|
|
1521
1542
|
logger.debug(`[${LOG_TAG}][isUserAlreadySignedIn] - TV sign in status fetched:`, tvSignInInfo);
|
|
1522
|
-
return tvSignInInfo === null || tvSignInInfo === void 0 ? void 0 : tvSignInInfo.user_is_signed_in;
|
|
1543
|
+
return (tvSignInInfo === null || tvSignInInfo === void 0 ? void 0 : tvSignInInfo.user_is_signed_in) === true;
|
|
1523
1544
|
}
|
|
1524
1545
|
catch (error) {
|
|
1525
1546
|
logger.warn(`[${LOG_TAG}][isUserAlreadySignedIn] - Error checking sign-in status:`, error);
|
|
@@ -1559,12 +1580,14 @@ class VizbeeHomeSSOManager {
|
|
|
1559
1580
|
* @internal
|
|
1560
1581
|
*/
|
|
1561
1582
|
sendStatusToSender(status) {
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1583
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1584
|
+
const signInStatus = this.serializeStatus(status);
|
|
1585
|
+
const data = {
|
|
1586
|
+
[VizbeeConstants.KEY_SUB_TYPE]: VizbeeConstants.EVENT_SUBTYPE_SIGN_IN_STATUS,
|
|
1587
|
+
[VizbeeConstants.KEY_SIGN_IN_STATUS]: signInStatus,
|
|
1588
|
+
};
|
|
1589
|
+
yield this.vizbeeMessagingClient.send(data, VizbeeConstants.EVENT_SSO_NAME);
|
|
1590
|
+
});
|
|
1568
1591
|
}
|
|
1569
1592
|
/**
|
|
1570
1593
|
* Serializes status objects for transmission to mobile device
|
|
@@ -1574,16 +1597,7 @@ class VizbeeHomeSSOManager {
|
|
|
1574
1597
|
* @internal
|
|
1575
1598
|
*/
|
|
1576
1599
|
serializeStatus(status) {
|
|
1577
|
-
|
|
1578
|
-
return status.serialize();
|
|
1579
|
-
}
|
|
1580
|
-
else if (status instanceof SuccessStatus) {
|
|
1581
|
-
return status.serialize();
|
|
1582
|
-
}
|
|
1583
|
-
else if (status instanceof FailureStatus) {
|
|
1584
|
-
return status.serialize();
|
|
1585
|
-
}
|
|
1586
|
-
return null;
|
|
1600
|
+
return status.serialize();
|
|
1587
1601
|
}
|
|
1588
1602
|
/**
|
|
1589
1603
|
* Updates UI for sign-in progress state
|
|
@@ -1592,6 +1606,12 @@ class VizbeeHomeSSOManager {
|
|
|
1592
1606
|
* @internal
|
|
1593
1607
|
*/
|
|
1594
1608
|
updateProgressUI() {
|
|
1609
|
+
const targetModal = this.isRemoteSignedIn ? 'progress' : 'informational';
|
|
1610
|
+
// Avoid re-showing the same modal
|
|
1611
|
+
if (this.shownModal === targetModal) {
|
|
1612
|
+
return;
|
|
1613
|
+
}
|
|
1614
|
+
this.shownModal = targetModal;
|
|
1595
1615
|
if (!this.isRemoteSignedIn) {
|
|
1596
1616
|
const modalOptions = this.vizbeeHomeSSOUIManager.getInformationalSignInModalConfig();
|
|
1597
1617
|
this.snackbar.show(modalOptions);
|
|
@@ -1613,6 +1633,7 @@ class VizbeeHomeSSOManager {
|
|
|
1613
1633
|
// themed/localized like the informational and progress modals.
|
|
1614
1634
|
this.vizbeeHomeSSOUIManager.setSuccessSignInModalConfig({ duration: 10000 });
|
|
1615
1635
|
const modalOptions = this.vizbeeHomeSSOUIManager.getSuccessSignInModalConfig();
|
|
1636
|
+
this.shownModal = 'success';
|
|
1616
1637
|
this.snackbar.show(modalOptions);
|
|
1617
1638
|
}
|
|
1618
1639
|
/**
|
|
@@ -1622,6 +1643,7 @@ class VizbeeHomeSSOManager {
|
|
|
1622
1643
|
* @internal
|
|
1623
1644
|
*/
|
|
1624
1645
|
updateFailureUI() {
|
|
1646
|
+
this.shownModal = 'none';
|
|
1625
1647
|
this.snackbar.hide();
|
|
1626
1648
|
}
|
|
1627
1649
|
}
|
|
@@ -1692,6 +1714,8 @@ const init = () => {
|
|
|
1692
1714
|
}
|
|
1693
1715
|
};
|
|
1694
1716
|
const setupHomeSSO = () => {
|
|
1717
|
+
if (!window.vizbee)
|
|
1718
|
+
return;
|
|
1695
1719
|
window.vizbee.homesso = {
|
|
1696
1720
|
HomeSSOContext: HomeSSOContext,
|
|
1697
1721
|
messages: {
|
|
@@ -1703,10 +1727,10 @@ const setupHomeSSO = () => {
|
|
|
1703
1727
|
// Replaced at build time with package.json's version by
|
|
1704
1728
|
// @rollup/plugin-replace (same token the metrics manager uses), so
|
|
1705
1729
|
// integrators can read the loaded SDK version off the namespace.
|
|
1706
|
-
VERSION: '1.0.
|
|
1730
|
+
VERSION: '1.0.5',
|
|
1707
1731
|
};
|
|
1708
1732
|
window.dispatchEvent(new Event('VIZBEE_HOMESSO_READY'));
|
|
1709
1733
|
};
|
|
1710
1734
|
init();
|
|
1711
1735
|
|
|
1712
|
-
export { FailureStatus, HomeSSOContext, LogLevel, ProgressStatus, SuccessStatus, UNKNOWN_VALUE, VizbeeHomeSSOManager, VizbeeHomeSSOUIManager };
|
|
1736
|
+
export { FailureStatus, HomeSSOContext, LogLevel, ProgressStatus, SignInModalType, SuccessStatus, UNKNOWN_VALUE, VizbeeHomeSSOManager, VizbeeHomeSSOUIManager, VizbeeSignInState };
|
package/package.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Manages Single Sign-On (SSO) functionality for Vizbee home devices.
|
|
3
|
+
* Handles communication between mobile and TV devices for authentication purposes.
|
|
4
|
+
* @module VizbeeHomeSSOManager
|
|
5
|
+
*/
|
|
1
6
|
import { VizbeeSignInInfo } from './model/VizbeeSignInInfo';
|
|
2
7
|
import { FailureStatus, ProgressStatus, SuccessStatus } from './model/VizbeeSignInStatus';
|
|
3
|
-
import {
|
|
8
|
+
import { IVizbeeSignInInfo, StatusCallback, VizbeeModalPreferences, VizbeeSignInStatusCallback } from './types';
|
|
4
9
|
/**
|
|
5
10
|
* Manages Single Sign-On (SSO) functionality between mobile and TV devices in the Vizbee ecosystem.
|
|
6
11
|
* Implements singleton pattern for global state management.
|
|
@@ -32,6 +37,11 @@ export declare class VizbeeHomeSSOManager implements VizbeeSignInStatusCallback
|
|
|
32
37
|
private isScreenSignedIn;
|
|
33
38
|
/** @internal Tracks if sign-in process is currently active */
|
|
34
39
|
private isSignInInProgress;
|
|
40
|
+
/**
|
|
41
|
+
* @internal Tracks which modal is currently shown so the same progress modal
|
|
42
|
+
* is not re-shown (snackbar.show() hides + re-mounts, which would flicker).
|
|
43
|
+
*/
|
|
44
|
+
private shownModal;
|
|
35
45
|
/** @internal UI manager instance for handling SSO-related displays */
|
|
36
46
|
private vizbeeHomeSSOUIManager;
|
|
37
47
|
/** @internal Snackbar instance for showing notifications */
|
|
@@ -68,7 +78,7 @@ export declare class VizbeeHomeSSOManager implements VizbeeSignInStatusCallback
|
|
|
68
78
|
* @param handler - Callback function to process sign-in information and provide status updates
|
|
69
79
|
* @public
|
|
70
80
|
*/
|
|
71
|
-
setSignInHandler(handler: (signInInfo:
|
|
81
|
+
setSignInHandler(handler: (signInInfo: IVizbeeSignInInfo, statusCallback: StatusCallback) => void): void;
|
|
72
82
|
/**
|
|
73
83
|
* Sets the callback for retrieving sign-in information
|
|
74
84
|
*
|
package/types/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { VizbeeHomeSSOManager } from './VizbeeHomeSSOManager';
|
|
2
2
|
import { ProgressStatus, SuccessStatus, FailureStatus } from './model/VizbeeSignInStatus';
|
|
3
|
-
import { IVizbeeAnalyticsProvider, IVizbeeXMessages } from './types';
|
|
4
3
|
import { VizbeeHomeSSOUIManager } from './ui/VizbeeHomeSSOUIManager';
|
|
5
4
|
import { LogLevel } from './utils/Logger';
|
|
6
5
|
/**
|
|
@@ -30,34 +29,59 @@ declare class HomeSSOContext {
|
|
|
30
29
|
enableLogger(enable: boolean): void;
|
|
31
30
|
setLoggerLevel(level: LogLevel): void;
|
|
32
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Augmentable global interface for window.vizbee.
|
|
34
|
+
*
|
|
35
|
+
* Each Vizbee SDK package re-opens this interface to add only its own slice.
|
|
36
|
+
* TypeScript merges all augmentations so the full window.vizbee shape is
|
|
37
|
+
* available to consumers without any one package overriding another's types.
|
|
38
|
+
*
|
|
39
|
+
* - HomeSSO SDK adds: `homesso`
|
|
40
|
+
* - Continuity SDK adds: `continuity` (augment this interface in your project)
|
|
41
|
+
*
|
|
42
|
+
* Consumer bridging example (add to your project's global.d.ts):
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* import type { ContinuityFramework } from '@vizbee/sdk/lg'; // or xbox, etc.
|
|
46
|
+
* declare global {
|
|
47
|
+
* interface VizbeeNamespace {
|
|
48
|
+
* continuity: ContinuityFramework;
|
|
49
|
+
* }
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
33
53
|
declare global {
|
|
54
|
+
interface VizbeeNamespace {
|
|
55
|
+
homesso: HomeSSONamespace;
|
|
56
|
+
}
|
|
34
57
|
interface Window {
|
|
35
|
-
vizbee
|
|
36
|
-
continuity?: {
|
|
37
|
-
xmessages: IVizbeeXMessages;
|
|
38
|
-
analytics: {
|
|
39
|
-
AnalyticsProvider: new () => IVizbeeAnalyticsProvider;
|
|
40
|
-
};
|
|
41
|
-
};
|
|
42
|
-
homesso: {
|
|
43
|
-
HomeSSOContext: typeof HomeSSOContext;
|
|
44
|
-
messages: {
|
|
45
|
-
ProgressStatus: typeof ProgressStatus;
|
|
46
|
-
SuccessStatus: typeof SuccessStatus;
|
|
47
|
-
FailureStatus: typeof FailureStatus;
|
|
48
|
-
};
|
|
49
|
-
LoggerLevel: typeof LogLevel;
|
|
50
|
-
VERSION: string;
|
|
51
|
-
};
|
|
52
|
-
};
|
|
58
|
+
vizbee?: VizbeeNamespace;
|
|
53
59
|
}
|
|
54
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* The shape HomeSSO SDK adds to window.vizbee.homesso.
|
|
63
|
+
* Export this so consumers can reference it when augmenting VizbeeSDK or
|
|
64
|
+
* VizbeeNamespace in their own global declarations.
|
|
65
|
+
*/
|
|
66
|
+
export type HomeSSONamespace = {
|
|
67
|
+
HomeSSOContext: typeof HomeSSOContext;
|
|
68
|
+
messages: {
|
|
69
|
+
ProgressStatus: typeof ProgressStatus;
|
|
70
|
+
SuccessStatus: typeof SuccessStatus;
|
|
71
|
+
FailureStatus: typeof FailureStatus;
|
|
72
|
+
};
|
|
73
|
+
LoggerLevel: typeof LogLevel;
|
|
74
|
+
VERSION: string;
|
|
75
|
+
};
|
|
55
76
|
export { HomeSSOContext };
|
|
56
77
|
export { ProgressStatus, SuccessStatus, FailureStatus } from './model/VizbeeSignInStatus';
|
|
57
78
|
export { LogLevel } from './utils/Logger';
|
|
79
|
+
export { VizbeeSignInState } from './utils/constants';
|
|
58
80
|
export { VizbeeHomeSSOManager } from './VizbeeHomeSSOManager';
|
|
59
81
|
export { VizbeeHomeSSOUIManager } from './ui/VizbeeHomeSSOUIManager';
|
|
82
|
+
export { SignInModalType } from './ui/VizbeeHomeSSOUIConfig';
|
|
60
83
|
export { UNKNOWN_VALUE } from './model/VizbeeSignInInfo';
|
|
61
|
-
export type { VizbeeSignInInfo } from './model/VizbeeSignInInfo';
|
|
62
|
-
export type { VizbeeSignInStatusCallback, IVizbeeAnalyticsProvider, IVizbeeXMessages, IVizbeeMessagingClient, IVizbeeSession, IVizbeeBicastSessionManager, ISessionStateListener, MessagePayload, VizbeeSenderDevice, } from './types';
|
|
63
|
-
export type {
|
|
84
|
+
export type { VizbeeSignInInfo, ISignInInfo } from './model/VizbeeSignInInfo';
|
|
85
|
+
export type { VizbeeSignInStatusCallback, IVizbeeSignInInfo, StatusCallback, IVizbeeAnalyticsProvider, IVizbeeXMessages, IVizbeeMessagingClient, IVizbeeSession, IVizbeeBicastSessionManager, ISessionStateListener, MessagePayload, VizbeeSenderDevice, } from './types';
|
|
86
|
+
export type { SnackbarPosition, ModalDirection } from './ui/VizbeeSnackBar';
|
|
87
|
+
export type { VizbeeHomeSSOTheme, CommonModalPreferenceOptions, InformationalSignInPreferenceOptions, ProgressSignInPreferenceOptions, SuccessSignInPreferenceOptions, VizbeeHomeSSOUIConfig, VizbeeHomeSSODefaultConfig, InformationalSignInPreferenceConfig, ProgressSignInPreferenceConfig, SuccessSignInPreferenceConfig, } from './ui/VizbeeHomeSSOUIConfig';
|
|
@@ -6,9 +6,9 @@ export declare class VizbeeMetricsManager implements IVizbeeAttributesProvider {
|
|
|
6
6
|
senderInfo: SenderInfo | null;
|
|
7
7
|
getSignInInfo: () => Promise<VizbeeSignInInfo[]>;
|
|
8
8
|
constructor();
|
|
9
|
-
log(event: string, attributes: Record<string,
|
|
10
|
-
setCustomAttributes(customAttributes: Record<string,
|
|
11
|
-
getAttributes(): Promise<Record<string,
|
|
9
|
+
log(event: string, attributes: Record<string, unknown>, bypassAttributeProviders?: boolean): void;
|
|
10
|
+
setCustomAttributes(customAttributes: Record<string, unknown>): void;
|
|
11
|
+
getAttributes(): Promise<Record<string, unknown>>;
|
|
12
12
|
private createAttributesJson;
|
|
13
13
|
private createUserInfoObject;
|
|
14
14
|
private addDefaultAttributes;
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
export declare const UNKNOWN_VALUE = "UNKNOWN";
|
|
2
|
+
/**
|
|
3
|
+
* Sign-in state of the TV app user, returned by the getter registered via
|
|
4
|
+
* VizbeeHomeSSOManager.setSignInInfoGetter(). The SDK uses this to decide
|
|
5
|
+
* whether to skip or proceed with a sign-in request from a mobile sender.
|
|
6
|
+
*/
|
|
2
7
|
export interface VizbeeSignInInfo {
|
|
3
8
|
userLoginType: string;
|
|
4
9
|
isSignedIn: boolean;
|
|
5
|
-
userLogin
|
|
10
|
+
userLogin?: string;
|
|
6
11
|
userName?: string;
|
|
7
12
|
userSubscriptionType?: string;
|
|
8
13
|
userSubscriptionValue?: string;
|
|
9
14
|
userSubscriptionRenewalType?: string;
|
|
10
|
-
userAdditionalInfo?: Record<string,
|
|
15
|
+
userAdditionalInfo?: Record<string, unknown>;
|
|
11
16
|
}
|
|
17
|
+
/** Canonical interface alias — prefer this name in new integrations. */
|
|
18
|
+
export type ISignInInfo = VizbeeSignInInfo;
|