UNPKG

camon-tmanager

Version:

<h1 style="text-align: center;">Camon Tag Manager</h1>

296 lines (285 loc) 9.87 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; // src/index.ts var src_exports = {}; __export(src_exports, { customEvent: () => customEvent, getUserId: () => getUserId, init: () => init, userId: () => userId }); module.exports = __toCommonJS(src_exports); // src/store/configStore.ts var import_zustand = require("zustand"); var import_middleware = require("zustand/middleware"); var useEventsStore = (0, import_zustand.create)()( (0, import_middleware.persist)( (set) => ({ endpoint: "", userId: null, viewId: null, alias: null, enabled: true, companyId: null, campaignId: null, experienceId: null, customerId: null, enabledTrackTime: true, enabledTrackView: true, enabledSiteStarting: true, debug: false, enableTracking: () => set(() => ({ enabled: true })) }), { name: "userId", partialize: (state) => ({ userId: state.userId }) } ) ); var configStore_default = useEventsStore; // src/utils/fetcher.ts var fetcher = (url, body) => __async(void 0, null, function* () { try { const response = window.navigator.sendBeacon(url, JSON.stringify(body)); return response; } catch (error) { console.log("errorrr", error); } }); // src/utils/mobile.ts var isMobile = () => /Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); // src/events/experience-events.ts var siteStarting = () => { if (!configStore_default.getState().enabled || !configStore_default.getState().enabledSiteStarting) return; return fetcher(configStore_default.getState().endpoint, { alias: configStore_default.getState().alias, brand: "camonapp", eventAction: "site_starting", eventCategory: "experience", date: (/* @__PURE__ */ new Date()).toLocaleDateString("en-ZA"), source: isMobile() ? "mobile" : "desktop", userUuid: configStore_default.getState().userId }); }; var customEvent = (label) => { if (!configStore_default.getState().enabled) return; fetcher(configStore_default.getState().endpoint, { campaignId: configStore_default.getState().campaignId, customerId: configStore_default.getState().customerId, experienceId: configStore_default.getState().experienceId, date: (/* @__PURE__ */ new Date()).toLocaleDateString("en-ZA"), draft: false, eventAction: "interaction_custom", eventCategory: "interaction", eventLabel: label, source: isMobile() ? "mobile" : "desktop", userUuid: configStore_default.getState().userId }); }; var experienceTime = () => { if (!configStore_default.getState().enabled || !configStore_default.getState().enabledTrackTime) return; return fetcher(configStore_default.getState().endpoint, { source: isMobile() ? "mobile" : "desktop", eventCategory: "experience", eventAction: "interaction_time", campaignId: configStore_default.getState().campaignId, customerId: configStore_default.getState().customerId, experienceId: configStore_default.getState().experienceId, draft: false, companyId: configStore_default.getState().companyId, date: (/* @__PURE__ */ new Date()).toLocaleDateString("en-ZA"), userUuid: configStore_default.getState().userId, viewId: configStore_default.getState().viewId, eventValue: 4e3 }); }; var experienceView = () => { if (!configStore_default.getState().enabled || !configStore_default.getState().enabledTrackView) return; return fetcher(configStore_default.getState().endpoint, { source: isMobile() ? "mobile" : "desktop", eventCategory: "experience", eventAction: "experience_view", campaignId: configStore_default.getState().campaignId, customerId: configStore_default.getState().customerId, experienceId: configStore_default.getState().experienceId, draft: false, companyId: configStore_default.getState().companyId, date: (/* @__PURE__ */ new Date()).toLocaleDateString("en-ZA"), viewId: configStore_default.getState().viewId, userUuid: configStore_default.getState().userId }); }; // src/index.ts var import_uuid2 = require("uuid"); // src/utils/userid.ts var import_uuid = require("uuid"); // src/utils/cookies.ts var getCookie = (cookieName) => { const name = `${cookieName}=`; const decodedCookie = decodeURIComponent(document.cookie); const cookieArray = decodedCookie.split(";"); for (let i = 0; i < cookieArray.length; i++) { let cookie = cookieArray[i] || ""; while (cookie.charAt(0) === " ") { cookie = cookie.substring(1); } if (cookie.indexOf(name) === 0) { return cookie.substring(name.length, cookie.length); } } return null; }; // src/utils/userid.ts var getUIDFromLocationSearch = (urlObject, pop = true) => { let userId2 = null; if (urlObject.searchParams.has("uid")) { userId2 = urlObject.searchParams.get("uid"); if (pop) { urlObject.searchParams.delete("uid"); window.history.replaceState(null, "", urlObject.toString()); } } return userId2; }; var getUserId = (debug = false, createIfNull = true, sources = ["qp", "cookies"], popFromQP = true) => { let uid; for (let i = 0; i < sources.length; i++) { if (sources[i] === "qp") { const url = new URL(window.location.href); const qpUid = getUIDFromLocationSearch(url, popFromQP); if (qpUid) { uid = qpUid; debug && console.debug("uid from window.location.search: ", uid); break; } } if (sources[i] === "cookies") { const cookieUid = getCookie("userId"); if (cookieUid) { if ((0, import_uuid.validate)(cookieUid)) { uid = cookieUid; debug && console.log("uid from cookies: ", uid); break; } else if (cookieUid.startsWith("{")) { try { uid = JSON.parse(cookieUid).state.userId; } catch (e) { } if (uid) break; } } } if (sources[i] === "localstorage") { const storedUid = localStorage.getItem("userId"); if (storedUid) { if ((0, import_uuid.validate)(storedUid)) { uid = storedUid; debug && console.log("uid from localStorage: ", uid); break; } else if (storedUid.startsWith("{")) { try { uid = JSON.parse(storedUid).state.userId; } catch (e) { } if (uid) break; } } } } if (!uid && createIfNull) { uid = (0, import_uuid.v4)(); debug && console.log("new userId: ", uid); } return uid; }; // src/index.ts var init = (props) => { var _a, _b, _c, _d, _e, _f; const debug = props.debug !== void 0 ? props.debug : false; const createIfNull = ((_a = props.getUserIdConf) == null ? void 0 : _a.createIfNull) !== void 0 ? (_b = props.getUserIdConf) == null ? void 0 : _b.createIfNull : true; const sources = ((_c = props.getUserIdConf) == null ? void 0 : _c.sources) !== void 0 ? (_d = props.getUserIdConf) == null ? void 0 : _d.sources : ["qp", "cookies"]; const popFromQP = ((_e = props.getUserIdConf) == null ? void 0 : _e.popFromQP) !== void 0 ? (_f = props.getUserIdConf) == null ? void 0 : _f.popFromQP : true; configStore_default.setState({ debug, userId: props.userId !== void 0 ? props.userId : getUserId(debug, createIfNull, sources), viewId: props.viewId !== void 0 ? props.viewId : (0, import_uuid2.v4)(), alias: props.alias, endpoint: props.endpoint, enabled: props.enabled !== void 0 ? props.enabled : true, experienceId: props.experience.experienceId, campaignId: props.experience.campaignId, companyId: props.experience.companyId, customerId: props.experience.customerId, enabledTrackTime: props.enableTrackTime !== void 0 ? props.enableTrackTime : true, enabledSiteStarting: props.enableTrackSiteStarting !== void 0 ? props.enableTrackSiteStarting : true, enabledTrackView: props.enableTrackView !== void 0 ? props.enableTrackView : true }); }; var userId = () => { return configStore_default.getState().userId; }; var sendFirstEvents = () => { siteStarting(); experienceView(); }; window.onload = () => { const tid = setInterval(() => { let uid = configStore_default.getState().userId; if (uid) { sendFirstEvents(); clearInterval(tid); } }, 100); }; setInterval(() => { experienceTime(); }, 4e3); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { customEvent, getUserId, init, userId });