UNPKG

@swrve/smarttv-sdk

Version:

Swrve marketing engagement platform SDK for SmartTV OTT devices

109 lines (108 loc) 3.89 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventManager = void 0; const StringHelper_1 = require("../utils/StringHelper"); const StorageManager_1 = require("../Storage/StorageManager"); const SwrveLogger_1 = __importDefault(require("../utils/SwrveLogger")); class EventManager { constructor(restClient) { this.restClient = restClient; this.MAX_QUEUE_SIZE = 100 * 1000; this._queueSize = 0; this.queue = []; } queueEvent(evt) { SwrveLogger_1.default.debug("QUEUE EVENT", evt); this.queue.push(evt); this.calculateQueueSize(evt); } getQueue() { return this.queue; } clearQueue() { this.queue = []; this._queueSize = 0; } clearQueueAndStorage(userId) { this.clearQueue(); StorageManager_1.StorageManager.clearData("events" + userId); } get queueSize() { return this._queueSize; } sendQueue(userId) { const eventsToSend = this.getAllQueuedEvents(userId); this.clearStoredEvents(userId); this.clearQueue(); if (eventsToSend.length > 0) { return this.restClient.postEvents(eventsToSend) .then(response => { if (response == null || response instanceof Error) { return false; } else if (response.ok) { SwrveLogger_1.default.info("Queue posted to server"); return true; } else if (response.status === 500) { throw new Error('Internal Server Error: ' + response.statusText); } else { SwrveLogger_1.default.debug("Unsuccessful send queue response", response); return false; } }) .catch((error) => { SwrveLogger_1.default.warn("Failed to post events, saving queue for later", error); this.storeEvents([...eventsToSend, ...this.getAllQueuedEvents(userId)], userId); return false; }); } else { SwrveLogger_1.default.info("nothing to send"); return Promise.resolve(false); } } getAllQueuedEvents(userId) { return [...this.queue, ...this.getStoredEvents(userId)]; } getStoredEvents(userId) { const storedEvents = StorageManager_1.StorageManager.getData(this.getStorageKey(userId)); try { return storedEvents ? JSON.parse(storedEvents) : []; } catch (e) { return []; } } saveEventsToStorage(userId) { if (this.queue.length > 0) { SwrveLogger_1.default.info("Saving events to storage"); const allEvents = this.getAllQueuedEvents(userId); this.clearQueue(); this.storeEvents(allEvents, userId); } else { SwrveLogger_1.default.info("nothing to save"); } } storeEvents(events, userId) { const data = JSON.stringify(events); StorageManager_1.StorageManager.saveData(this.getStorageKey(userId), data); this._queueSize += StringHelper_1.getStringSize(data) - Math.max(events.length - 1, 0) - 2; // subtract delimiting commas and [] } calculateQueueSize(evt) { const evtString = JSON.stringify(evt); this._queueSize += StringHelper_1.getStringSize(evtString); } clearStoredEvents(userId) { StorageManager_1.StorageManager.clearData(this.getStorageKey(userId)); } getStorageKey(userId) { return "events" + userId; } } exports.EventManager = EventManager;