// General data needed, custom per client
var data = {
cookie_name_ead: "ty_ead",
cookie_name_session: "ty_session",
cookie_name_do_not_track: "ty_dnt",
session_expiration_in_minutes: 43200, //30 Days
campaign_expiration_in_minutes: 43200, // 30 Days
cookie_domain: "gemo.fr",
blacklist_domains:
"gtm-msr.appspot.com,tagassistant.google.com,wlp-acs.com,paypal.com,americanexpress.com,lcl.fr,cic.fr,ing.com,monext.fr,rsa3dsauth.co.uk,touch.tech,n26.com,arcot.com,mycardplace.com,cm-cic.com,systempay.fr,oney.com,be2bill.com,cardinalcommerce.com,v-psp.com,vadesecure.com,ogone.com,creditmutuel.fr,worldline-solutions.com,verifiedbyvisa.com,cofidis.fr,paybox.com,getalma.eu,systempay.fr,payex.com,sogenactif.com,procurementexpress.com,revolut.com,marqeta.com,six-group.com,app.glady.com,notifpush.com,app2.abtasty.com,acs.monobank.com.ua,acs.rietumu.lv,3dsec.postfinance.ch,sas.redsys.es,secure5gw.ro,3dspayment.paylife.at,bankenauswahl.giropay.de,secure.barclaycard.co.uk,evgr-securepay.hsbc.com.vn,3d-secure.pluscard.de,visa-secure.ing.de,secureshopping.westpac.com.au,pca3ds.gbp.ma,3debspay.boc.cn,3dsp.vtb.ru,secure.dkb.de,securesuite.net,sofort.com,abnamro.nl,3ds.bov.com,acs.privatbank.ua,acs.sia.eu,acs2.3ds.modirum.com,ideal.knab.nl,touch.kaspersky.com,giropay.bw-bank.de,rabobank.nl,giropay.sparkasse-bgl.de,giropay.postbank.de,palaisdesthes-gift-fr-sandbox-buybox.net",
whitelist_domains: "gemo.fr",
};
// Start bundle code
var COOKIE_NAME_EAD = data.cookie_name_ead;
var CAMPAIGN_EXPIRATION_IN_MINUTES = +(data.campaign_expiration_in_minutes || 43200);
var BLACKLIST_DOMAINS = data.blacklist_domains;
var COOKIE_NAME_SESSION = data.cookie_name_session;
var COOKIE_NAME_DO_NOT_TRACK = data.cookie_name_do_not_track;
var doNotTrack = getDoNotTrack();
var hasSessionCookie = !doNotTrack ? getSession() : false;
var ead = getEad();
var isNewVisitGa = calculateNewVisitGa();
var pageReferrer = document.referrer; // Can edit that for testing
if (!doNotTrack) {
ead = updateEadCookie();
}
function isUrlInDomainsList(url) {
var referrerObject = new URL(url);
var foundInDomainsList = false;
if (parseDomains(data.whitelist_domains)) {
for (var index = 0; index < parseDomains(data.whitelist_domains).length; index++) {
if (
parseDomains(data.whitelist_domains)[index].domain.replace("www.", "") ===
referrerObject.host.replace("www.", "")
) {
foundInDomainsList = true;
break;
}
}
}
return foundInDomainsList;
}
function referrerNotExcludedFromGA() {
if (!BLACKLIST_DOMAINS) {
return true;
}
var referralUrl = pageReferrer ? new URL(pageReferrer) : null;
if (!referralUrl || !referralUrl.hostname) {
return true;
}
var referrerNotExcludedFromGACondition = true;
for (var index = 0; index < parseDomains(BLACKLIST_DOMAINS).length; index++) {
if (
referralUrl.host.replace("www.", "") ===
parseDomains(BLACKLIST_DOMAINS)[index].domain.replace("www.", "")
) {
referrerNotExcludedFromGACondition = false;
break;
}
}
return referrerNotExcludedFromGACondition;
}
function isDirectAccess() {
var referralUrl = pageReferrer ? new URL(pageReferrer) : null;
var targetUrl = window.location.href ? new URL(window.location.href) : null;
return (
(!referralUrl || (referralUrl && isUrlInDomainsList(pageReferrer))) &&
(!targetUrl ||
(!targetUrl.searchParams.utm_source &&
!targetUrl.searchParams.utm_campaign &&
!targetUrl.searchParams.utm_keyword &&
!targetUrl.searchParams.utm_content &&
!targetUrl.searchParams.utm_medium &&
!targetUrl.searchParams.at_platform &&
!targetUrl.searchParams.at_channel &&
!targetUrl.searchParams.at_medium &&
!targetUrl.searchParams.at_campaign &&
!targetUrl.searchParams.at_creation &&
!targetUrl.searchParams.at_network &&
!targetUrl.searchParams.at_aff_type &&
!targetUrl.searchParams.at_variant &&
!targetUrl.searchParams.at_source &&
!targetUrl.searchParams.gclid &&
!targetUrl.searchParams.fbclid &&
!targetUrl.searchParams.msclkid))
);
}
function calculateNewVisitGa() {
if (
!ead ||
!hasSessionCookie ||
checkSameReferrerToOrganic(ead.target, ead.referrer) ||
checkNewReferrer(ead.referrer) ||
checkNewUtmParameters(ead.target) ||
checkNewClickIdentifierParameters(ead.target)
) {
return true;
}
return false;
}
function checkNewReferrer(referrer) {
var referralUrl = pageReferrer ? new URL(pageReferrer) : null;
var targetUrl = window.location.href ? new URL(window.location.href) : null;
var lastTouchpointReferrer = referrer ? new URL(referrer) : null;
if (
referralUrl &&
!isUrlInDomainsList(pageReferrer) &&
targetUrl.hostname !== referralUrl.hostname &&
(!lastTouchpointReferrer || lastTouchpointReferrer.hostname !== referralUrl.hostname)
) {
return true;
}
return false;
}
function checkSameReferrerToOrganic(target, referrer) {
var referralUrl = pageReferrer ? new URL(pageReferrer) : null;
var targetUrl = window.location.href ? new URL(window.location.href) : null;
var lastTouchpointReferrer = referrer ? new URL(referrer) : null;
var lastTouchpointTarget = target ? new URL(target) : null;
if (
referralUrl &&
targetUrl &&
lastTouchpointReferrer &&
lastTouchpointTarget &&
lastTouchpointReferrer.hostname === referralUrl.hostname &&
!isUrlInDomainsList(pageReferrer) &&
!isUrlInDomainsList(referrer) &&
(lastTouchpointTarget.searchParams.utm_source ||
lastTouchpointTarget.searchParams.utm_campaign ||
lastTouchpointTarget.searchParams.utm_term ||
lastTouchpointTarget.searchParams.utm_content ||
lastTouchpointTarget.searchParams.utm_medium ||
lastTouchpointTarget.searchParams.at_platform ||
lastTouchpointTarget.searchParams.at_channel ||
lastTouchpointTarget.searchParams.at_medium ||
lastTouchpointTarget.searchParams.at_campaign ||
lastTouchpointTarget.searchParams.at_creation ||
lastTouchpointTarget.searchParams.at_network ||
lastTouchpointTarget.searchParams.at_aff_type ||
lastTouchpointTarget.searchParams.at_variant ||
lastTouchpointTarget.searchParams.at_source ||
lastTouchpointTarget.searchParams.gclid ||
lastTouchpointTarget.searchParams.fbclid ||
lastTouchpointTarget.searchParams.msclkid) &&
!targetUrl.searchParams.utm_source &&
!targetUrl.searchParams.utm_campaign &&
!targetUrl.searchParams.utm_term &&
!targetUrl.searchParams.utm_content &&
!targetUrl.searchParams.utm_medium &&
!targetUrl.searchParams.at_platform &&
!targetUrl.searchParams.at_channel &&
!targetUrl.searchParams.at_medium &&
!targetUrl.searchParams.at_campaign &&
!targetUrl.searchParams.at_creation &&
!targetUrl.searchParams.at_network &&
!targetUrl.searchParams.at_aff_type &&
!targetUrl.searchParams.at_variant &&
!targetUrl.searchParams.at_source &&
!targetUrl.searchParams.gclid &&
!targetUrl.searchParams.fbclid &&
!targetUrl.searchParams.msclkid
) {
return true;
}
return false;
}
function checkNewUtmParameters(target) {
var lastTouchpointTarget = target ? new URL(target) : null;
var targetUrl = window.location.href ? new URL(window.location.href) : null;
if (
targetUrl &&
lastTouchpointTarget &&
(["source", "campaign", "term", "content", "medium"].some((utm) => {
var currentUrlParam = targetUrl.searchParams["utm_" + utm];
var lastTouchPointParam = lastTouchpointTarget.searchParams["utm_" + utm];
return currentUrlParam && currentUrlParam !== lastTouchPointParam;
}) ||
[
"platform",
"channel",
"medium",
"campaign",
"creation",
"network",
"aff_type",
"variant",
"source",
].some((at) => {
var currentUrlParam = targetUrl.searchParams["at_" + at];
var lastTouchPointParam = lastTouchpointTarget.searchParams["at_" + at];
return currentUrlParam && currentUrlParam !== lastTouchPointParam;
}))
) {
return true;
}
return false;
}
function checkNewClickIdentifierParameters(target) {
var lastTouchpointTarget = target ? new URL(target) : null;
var targetUrl = window.location.href ? new URL(window.location.href) : null;
if (
targetUrl &&
lastTouchpointTarget &&
["gclid", "fbclid", "msclkid"].some((tagId) => {
var currentUrlParam = targetUrl.searchParams[tagId];
var lastTouchPointParam = lastTouchpointTarget.searchParams[tagId];
return currentUrlParam && currentUrlParam !== lastTouchPointParam;
})
) {
return true;
}
return false;
}
function getEad() {
var ead = tC.getCookie(COOKIE_NAME_EAD) || undefined;
if (ead) {
ead = JSON.parse(window.atob(ead));
}
return ead;
}
function updateEadCookie() {
var newEad = {
currentCampaign: ead && ead.currentCampaign ? ead.currentCampaign : null,
};
if (!ead || isNewVisitGa) {
newEad.referrer = pageReferrer;
newEad.target = window.location.href;
} else {
newEad.referrer = ead.referrer;
newEad.target = ead.target;
}
if (
!ead ||
!ead.currentCampaign ||
!ead.currentCampaign.target ||
!ead.currentCampaign.date ||
(!isDirectAccess() &&
referrerNotExcludedFromGA() &&
(checkSameReferrerToOrganic(ead.currentCampaign.target, ead.currentCampaign.referrer) ||
checkNewReferrer(ead.currentCampaign.referrer) ||
checkNewUtmParameters(ead.currentCampaign.target) ||
checkNewClickIdentifierParameters(ead.currentCampaign.target))) ||
(isDirectAccess() && checkDelay(ead.currentCampaign.date, CAMPAIGN_EXPIRATION_IN_MINUTES))
) {
newEad.currentCampaign = {
date: Date.now(),
referrer: pageReferrer || null,
target: window.location.href,
};
}
tC.setCookie(
COOKIE_NAME_EAD,
window.btoa(JSON.stringify(newEad)),
180,
"/",
data.cookie_domain,
true,
"None"
);
return newEad;
}
function checkDelay(timestampInMillis, periodInMinutes) {
var differentInMinutes = Math.abs(Math.round((Date.now() - timestampInMillis) / 60000));
if (differentInMinutes > periodInMinutes) {
return true;
}
return false;
}
function getSession() {
var session = tC.getCookie(COOKIE_NAME_SESSION) || undefined;
tC.setCookie(
COOKIE_NAME_SESSION,
"true",
+(data.session_expiration_in_minutes || 43200) / 24 / 60,
"/",
data.cookie_domain,
true,
"None"
);
if (!session) {
return false;
}
return true;
}
function getDoNotTrack() {
var dnt = tC.getCookie(COOKIE_NAME_DO_NOT_TRACK) || undefined;
if (dnt) {
tC.setCookie(COOKIE_NAME_SESSION, "true", 182, "/", data.cookie_domain, true, "None");
return true;
}
return false;
}
// No table object atm in TagCo, so replace table inputs with simple text fields that looks like "domain1,domain2"
function parseDomains(domains) {
return domains ? domains.split(",").map((domain) => ({ domain })) : [];
}