UNPKG

autochart-tracker

Version:

JavaScript API for tracking visitor activities on automotive websites with Autochart.io

89 lines (74 loc) 2.87 kB
const Cookies = require('cookies-js'); const ObjectId = require('./lib/objectid'); function BrowserContext(window) { const self = this; self.page = {}; self.session = {}; const SESSION_COOKIE = 'ac_session'; const PERMANENT_COOKIE = 'ac_visitor'; const SESSION_DURATION_MINS = 30; Cookies.defaults = { path: '/' }; //= ====================================================== // HELPERS //= ====================================================== function serializeCookie(obj) { return obj ? JSON.stringify(obj) : null; } function deserializeCookie(str) { if (!str) { return undefined; } return JSON.parse(str); } function generateUniqueId() { return new ObjectId().toString(); } //= ====================================================== // COOKIE SETUP //= ====================================================== // Set the amount of time a session should last. const sessionExpireTime = new Date(); sessionExpireTime.setMinutes(sessionExpireTime.getMinutes() + SESSION_DURATION_MINS); // Check if we have a session cookie // If it is undefined, set a new one. let sessionCookieVal = deserializeCookie(Cookies.get(SESSION_COOKIE)); if (!sessionCookieVal) { sessionCookieVal = { id: generateUniqueId(), startTime: new Date() }; Cookies.set(SESSION_COOKIE, serializeCookie(sessionCookieVal), { expires: sessionExpireTime }); } else { // If it does exist, delete it and set a new one with new expiration time Cookies.expire(SESSION_COOKIE); Cookies.set(SESSION_COOKIE, serializeCookie(sessionCookieVal), { expires: sessionExpireTime }); } let permanentCookieVal = deserializeCookie(Cookies.get(PERMANENT_COOKIE)); // If it is undefined, set a new one. if (!permanentCookieVal) { permanentCookieVal = { id: generateUniqueId() }; Cookies.set(PERMANENT_COOKIE, serializeCookie(permanentCookieVal), { expires: 60 * 60 * 24 * 365 * 10 // 10 years in seconds }); } //= ====================================================== // populate page and session // session: { visitorId, sessionId, referrer, userAgent, startTime }, page: { url} } //= ====================================================== self.session.visitorId = permanentCookieVal.id; self.session.sessionId = sessionCookieVal.id; self.session.startTime = sessionCookieVal.startTime; self.session.referrerRaw = window.document.referrer; self.session.userAgentRaw = window.navigator.userAgent; self.page.url = window.document.URL; self.page.title = window.document.title; } module.exports = BrowserContext;