UNPKG

camon-tmanager

Version:

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

267 lines (257 loc) 8.67 kB
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/store/configStore.ts import { create } from "zustand"; import { persist } from "zustand/middleware"; var useEventsStore = create()( 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 import { v4 as uuidv42 } from "uuid"; // src/utils/userid.ts import { v4 as uuidv4, validate } from "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 (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 (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 = uuidv4(); 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 : uuidv42(), 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); export { customEvent, getUserId, init, userId };