@swrve/smarttv-sdk
Version:
Swrve marketing engagement platform SDK for SmartTV OTT devices
160 lines (159 loc) • 7.66 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProfileManager = void 0;
const CryptoHelper_1 = require("../utils/CryptoHelper");
const StorageManager_1 = require("../Storage/StorageManager");
const SwrveLogger_1 = __importDefault(require("../utils/SwrveLogger"));
const uuid_1 = require("../utils/uuid");
const SwrveConstants_1 = require("../utils/SwrveConstants");
const DateHelper_1 = __importDefault(require("../utils/DateHelper"));
class ProfileManager {
constructor(userId, appId, apiKey, newSessionInterval) {
this.userId = userId;
this.appId = appId;
this.apiKey = apiKey;
this.newSessionInterval = newSessionInterval;
const session_token = CryptoHelper_1.getSessionToken(this.userId, this.appId, this.apiKey, new Date());
const currentUser = StorageManager_1.StorageManager.getData(userId);
if (currentUser) {
this._currentUser = JSON.parse(currentUser);
this.resolveCurrentUser(session_token);
}
else {
this._currentUser = { userId, sessionToken: session_token, sessionStart: DateHelper_1.default.nowInUtcTime(),
isQAUser: false, nextSeqNum: 0, firstUse: 0, lastSessionEnd: 0, isAnonymous: true };
}
StorageManager_1.StorageManager.saveData(userId, JSON.stringify(this._currentUser));
}
hasSessionRestored() {
if (this.currentUser.lastSessionEnd !== 0) {
const lastSession = this.currentUser.lastSessionEnd;
const now = Number(DateHelper_1.default.nowInUtcTime());
const expirationTimeout = this.newSessionInterval * 1000; /** convert to ms */
SwrveLogger_1.default.debug(`current time ${now}`);
SwrveLogger_1.default.debug(`lastSession: ${lastSession}`);
const diffTime = now - lastSession;
SwrveLogger_1.default.debug(`Diff now - lastSession: ${diffTime}`);
if (lastSession && diffTime > expirationTimeout) {
SwrveLogger_1.default.debug('session has expired.');
return false;
}
SwrveLogger_1.default.debug('session still active');
return true;
}
SwrveLogger_1.default.debug('no session. treating as expired');
return false;
}
getNextSequenceNumber() {
const nextSeqNum = ++this._currentUser.nextSeqNum;
StorageManager_1.StorageManager.saveData(this._currentUser.userId, JSON.stringify(this._currentUser));
return nextSeqNum;
}
getSessionToken() {
return this._currentUser.sessionToken;
}
getSwrveIdByThirdPartyId(thirdPartyUserId) {
const cachedSwrveId = StorageManager_1.StorageManager.getData("ext-" + thirdPartyUserId);
return cachedSwrveId !== null ? cachedSwrveId : null;
}
cacheThirdPartyId(thirdPartyLoginId, swrveId) {
StorageManager_1.StorageManager.saveData("ext-" + thirdPartyLoginId, swrveId);
}
static storeUserId(userId) {
StorageManager_1.StorageManager.saveData(SwrveConstants_1.SWRVE_USER_ID, userId);
}
static getStoredUserId() {
return StorageManager_1.StorageManager.getData(SwrveConstants_1.SWRVE_USER_ID);
}
static isUserIdVerified(userId) {
const verified = StorageManager_1.StorageManager.getData("verified-" + userId);
if (verified) {
return true;
}
return false;
}
static setUserIdAsVerified(userId) {
if (!this.isUserIdVerified(userId)) {
StorageManager_1.StorageManager.saveData("verified-" + userId, "VERIFIED");
}
}
setCurrentUserAsNewAnonymousUser() {
const newAnonUserId = uuid_1.generateUuid().toString();
this.setCurrentUser(newAnonUserId, true);
}
setCurrentUser(newUserId, markAsAnonymous = false) {
const session_token = CryptoHelper_1.getSessionToken(newUserId, this.appId, this.apiKey, new Date());
const currentUser = StorageManager_1.StorageManager.getData(newUserId);
if (currentUser) {
this._currentUser = JSON.parse(currentUser);
this.resolveCurrentUser(session_token);
}
else {
this._currentUser = { userId: newUserId, sessionToken: session_token, sessionStart: DateHelper_1.default.nowInUtcTime(),
isQAUser: false, nextSeqNum: 1, firstUse: 0, lastSessionEnd: 0, isAnonymous: markAsAnonymous };
}
StorageManager_1.StorageManager.saveData(newUserId, JSON.stringify(this._currentUser));
StorageManager_1.StorageManager.saveData(SwrveConstants_1.SWRVE_USER_ID, this.currentUser.userId);
}
set firstUse(firstUseDate) {
this.currentUser.firstUse = firstUseDate;
StorageManager_1.StorageManager.saveData(this._currentUser.userId, JSON.stringify(this._currentUser));
}
get currentUser() {
return this._currentUser;
}
setAsQAUser(qaUserNode) {
this.currentUser.isQAUser = true;
this.currentUser.qaUser = qaUserNode;
StorageManager_1.StorageManager.saveData(this.currentUser.userId, JSON.stringify(this._currentUser));
}
clearQAUser() {
this.currentUser.isQAUser = false;
StorageManager_1.StorageManager.saveData(this._currentUser.userId, JSON.stringify(this._currentUser));
//dont clear the sequence number in case they come back as a QA user sometime in the future
}
isQAUser() {
return this._currentUser.isQAUser;
}
get QAUser() {
return this.isQAUser() ? this._currentUser.qaUser : undefined;
}
storeEtagHeader(etag) {
SwrveLogger_1.default.info("New Etag " + etag + " Old etag " + this._currentUser.etag);
this._currentUser.etag = etag;
StorageManager_1.StorageManager.saveData(this.currentUser.userId, JSON.stringify(this._currentUser));
}
clearEtagHeader() {
this.currentUser.etag = undefined;
StorageManager_1.StorageManager.saveData(this._currentUser.userId, JSON.stringify(this._currentUser));
}
saveCurrentUserBeforeSessionEnd() {
this._currentUser.lastSessionEnd = DateHelper_1.default.nowInUtcTime();
StorageManager_1.StorageManager.saveData(this._currentUser.userId, JSON.stringify(this._currentUser));
StorageManager_1.StorageManager.saveData(SwrveConstants_1.SWRVE_USER_ID, this.currentUser.userId);
SwrveLogger_1.default.debug(`Saved last session end: ${this._currentUser.lastSessionEnd}`);
}
restoreCurrentUser(session_token, userId, newSessionStart) {
this._currentUser.sessionToken = session_token;
this._currentUser.sessionStart = newSessionStart;
this._currentUser.userId = userId;
SwrveLogger_1.default.debug(`Setup current user: ${this._currentUser.userId}`);
}
resolveCurrentUser(session_token) {
const userId = this._currentUser.userId;
if (this.hasSessionRestored()) {
if (!this._currentUser.sessionStart) {
const previousSessionStart = new Date(this._currentUser.sessionStart);
session_token = CryptoHelper_1.getSessionToken(userId, this.appId, this.apiKey, previousSessionStart);
}
this.restoreCurrentUser(session_token, userId, this._currentUser.sessionStart);
}
else {
this.restoreCurrentUser(session_token, userId, DateHelper_1.default.nowInUtcTime());
}
}
}
exports.ProfileManager = ProfileManager;