camon-tmanager
Version:
<h1 style="text-align: center;">Camon Tag Manager</h1>
267 lines (257 loc) • 8.67 kB
JavaScript
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
};