// 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 })) : []; }