UNPKG

@swrve/smarttv-sdk

Version:

Swrve marketing engagement platform SDK for SmartTV OTT devices

160 lines (159 loc) 7.66 kB
"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;