var _cs_gateway_cfg = JSON.parse('{"sid":"","uid":"","customDomain":"https:\/\/fraud.cardswap.ca","cid":"17423-33282-5fa7-0292","fsid":"17424-38753-616e-37ef","rf":{"domain":"mygiftcardsplus.com"},"currentScript":"csFraudTrackerScript"}');/*
* Tracking Snippet
*/
(function() {
//console.log("userAgent - " + navigator.userAgent);
var documentScript = document.currentScript;
if(!documentScript && _cs_gateway_cfg.hasOwnProperty('currentScript')){
var documentScript = document.getElementById(_cs_gateway_cfg.currentScript);
}
var trackerCallback = null;
if(documentScript){
trackerCallback = documentScript.trackerCallback;
}
var customDomain = 'https://fraud.esiance.com';
if(_cs_gateway_cfg.hasOwnProperty('customDomain')){
customDomain = _cs_gateway_cfg.customDomain;
}
var data = {
clientSessionId: _cs_gateway_cfg.fsid,
userAgent: navigator.userAgent,
href: window.location.href,
hostname: window.location.hostname,
pathname: window.location.pathname
};
// Requirements
// 0 - not required, 1 - required, 2 - loaded
var required = {
fingerprintjs2: 1,
jstimezonedetect: 1,
fingerprintdotcom: 0
};
if(_cs_gateway_cfg.hasOwnProperty('fingerprintdotcom')){
// Fingerprint.com
if(
_cs_gateway_cfg.fingerprintdotcom.hasOwnProperty('script')
&& _cs_gateway_cfg.fingerprintdotcom.script
){
required.fingerprintdotcom = 1;
}
}
// Pull Cookie
var cookieName = "_fc";
var cookie = getCookie(cookieName);
if(cookie !== ""){
data.cookie = cookie;
}
// fingerprintjs2
// https://github.com/Valve/fingerprintjs2
// https://cdnjs.cloudflare.com/ajax/libs/fingerprintjs2/1.5.1/fingerprint2.min.js
if(required.fingerprintjs2){
var url = 'https://cdnjs.cloudflare.com/ajax/libs/fingerprintjs2/1.5.1/fingerprint2.min.js';
loadScript(url, function() {
var options = {
excludeJsFonts: true,
excludeCanvas: true,
excludeWebGL: true
};
new Fingerprint2(options).get(function(result, components){
data.fingerprintjs2 = result;
//console.log("fingerprint2 - " + result);
for (var index in components) {
var obj = components[index];
var key = obj.key;
var value = obj.value;
//console.log(key + " - " + value);
switch(key){
case 'language': data.language = value; break;
case 'color_depth': data.colorDepth = value; break;
case 'pixel_ratio': data.pixelRatio = value; break;
case 'hardware_concurrency': data.hardwareConcurrency = value; break;
case 'resolution': data.resolution = value; break;
case 'available_resolution': data.availableResolution = value; break;
case 'timezone_offset': data.timezoneOffset = value; break;
case 'session_storage': data.sessionStorage = value; break;
case 'local_storage': data.localStorage = value; break;
case 'indexed_db': data.indexedDatabase = value; break;
case 'open_database': data.openDatabase = value; break;
case 'cpu_class': data.cpuClass = value; break;
case 'navigator_platform': data.navigatorPlatform = value; break;
case 'do_not_track': data.doNotTrack = value; break;
case 'regular_plugins': data.regularPlugins = value; break;
case 'adblock': data.adblock = value; break;
case 'has_lied_languages': data.hasLiedLanguages = value; break;
case 'has_lied_resolution': data.hasLiedResolution = value; break;
case 'has_lied_os': data.hasLiedOS = value; break;
case 'has_lied_browser': data.hasLiedBrowser = value; break;
case 'touch_support': data.touchSupport = value; break;
case 'js_fonts': data.jsFonts = value; break;
}
}
required.fingerprintjs2 = 2;
if(sendReady(required)){
sendData(data);
}
});
});
}
// jstimezonedetect
// https://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.6/jstz.min.js
if(required.jstimezonedetect){
var url = 'https://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.6/jstz.min.js';
loadScript(url, function() {
var tz = jstz.determine();
data.timezone = tz.name();
//console.log("timezone - " + data.timezone);
required.jstimezonedetect = 2;
if(sendReady(required)){
sendData(data);
}
});
}
// Fingerprint.com
if(required.fingerprintdotcom){
// Initialize the agent on page load.
if(_cs_gateway_cfg.fingerprintdotcom.hasOwnProperty('endpoint')){
const fpPromise = import(_cs_gateway_cfg.fingerprintdotcom.script)
.then(FingerprintJS => FingerprintJS.load({
endpoint: [
_cs_gateway_cfg.fingerprintdotcom.endpoint,
FingerprintJS.defaultEndpoint
]
}))
// Get visitorId
fpPromise
.then(fp => fp.get())
.then(result => {
const visitorId = result.visitorId
data.fingerprintdotcom = visitorId;
required.fingerprintdotcom = 2;
if(sendReady(required)){
sendData(data);
}
})
}else{
const fpPromise = import(_cs_gateway_cfg.fingerprintdotcom.script)
.then(FingerprintJS => FingerprintJS.load())
// Get visitorId
fpPromise
.then(fp => fp.get())
.then(result => {
const visitorId = result.visitorId
data.fingerprintdotcom = visitorId;
required.fingerprintdotcom = 2;
if(sendReady(required)){
sendData(data);
}
})
}
}
var sendIntervalStart = new Date();
var sendInterval = setInterval(function(){
console.log("Checking send ready...");
if(sendReady(required)){
sendData(data);
}
}, 1000);
function loadScript(url, callback){
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = url;
s.onreadystatechange = callback;
s.onload = callback;
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
}
function sendReady(required){
sendIntervalEnd = new Date();
var timeDiff = sendIntervalEnd - sendIntervalStart; //in ms
for(var key in required){
if(required[key] === 1){
return false;
}else if(
required[key] === 2
&& timeDiff > 2000
){
return true;
}
}
return true;
}
function sendData(data){
console.log("Sending Data...");
if(sendInterval !== null){
clearInterval(sendInterval);
}
// Prepare Data
var params = [];
if(data && typeof(data) === 'object') {
for(var key in data){
params.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
}
}
params = params.join('&');
// XMLHTTPRequest
try{
var xhr = new XMLHttpRequest();
var url = customDomain+"/tracker/beacon";
xhr.open("POST", url, true);
//xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onreadystatechange = function(){
if (this.readyState == 4 && this.status == 200) {
var response = JSON.parse(this.responseText);
var data = response.data;
saveCookie(data.cookie, data.expiration);
// Send Tracker Callback
typeof trackerCallback === 'function' && trackerCallback(data);
}
};
xhr.send(params);
}catch(e){
//console.log("Error");
}
};
function saveCookie(cookie, expiration){
var d = new Date();
d.setTime(expiration);
document.cookie = cookieName+"="+cookie+";expires="+d.toUTCString()+";path=/;domain="+document.domain.match(/[^\.]*\.[^.]*$/)[0];
}
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i