import { getAbVariantId } from "./osiris"; import { CookieUtils } from "./cookie-utils"; import { nanoid } from "./nanoid"; /** * Session Utils * * @export * @abstract * @class SessionUtils */ export abstract class SessionUtils { /** * Get anonymous from cookies or return a new one. * * @static * @return {string} Anonymous * @memberof SessionUtils */ public static getAnonymous(): string { const anonymous = CookieUtils.get(window._RecSys.Bundle.Properties.cookies.anonymous.key) || nanoid(); const domain = CookieUtils.getDomain(); CookieUtils.set(window._RecSys.Bundle.Properties.cookies.anonymous.key, anonymous, { ttl: window._RecSys.Bundle.Properties.cookies.anonymous.ttl, domain, }); // 365 days return anonymous; } /** * Get session from cookies or return a new one. * * @static * @return {string} Session * @memberof SessionUtils */ public static getSession(): string { const session = CookieUtils.get(window._RecSys.Bundle.Properties.cookies.session.key) || nanoid(); const domain = CookieUtils.getDomain(); CookieUtils.set(window._RecSys.Bundle.Properties.cookies.session.key, session, { ttl: window._RecSys.Bundle.Properties.cookies.session.ttl, domain, }); // 30 minutes return session; } /** * Get variant from cookies or requests a new one. * * @static * @param {string} userId * @return {string} Session * @memberof SessionUtils */ public static async getVariant(userId: string): Promise { const variant = CookieUtils.get(window._RecSys.Bundle.Properties.cookies.variant.key) || (await getAbVariantId(userId)); const domain = CookieUtils.getDomain(); CookieUtils.set(window._RecSys.Bundle.Properties.cookies.variant.key, variant, { ttl: window._RecSys.Bundle.Properties.cookies.variant.ttl, domain, }); // 30 minutes return variant; } /** * Checks if current session is a new one. * * @static * @return {boolean} True on new session. * @memberof SessionUtils */ public static isNewSession(): boolean { return CookieUtils.get(window._RecSys.Bundle.Properties.cookies.session.key) === undefined; } }