@swrve/smarttv-sdk
Version:
Swrve marketing engagement platform SDK for SmartTV OTT devices
109 lines (108 loc) • 3.89 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.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;