UNPKG

sourcebuster

Version:

Get sources of your site's visitors (utm / organic / referral / typein).

116 lines (88 loc) 3.88 kB
"use strict"; var terms = require('./terms'), uri = require('./helpers/uri'); module.exports = { fetch: function(prefs) { var user = prefs || {}, params = {}; // Set `lifetime of the cookie` in months params.lifetime = this.validate.checkFloat(user.lifetime) || 6; params.lifetime = parseInt(params.lifetime * 30 * 24 * 60); // Set `session length` in minutes params.session_length = this.validate.checkInt(user.session_length) || 30; // Set `timezone offset` in hours params.timezone_offset = this.validate.checkInt(user.timezone_offset); // Set `campaign param` for AdWords links params.campaign_param = user.campaign_param || false; // Set `user ip` params.user_ip = user.user_ip || terms.none; // Set `promocode` if (user.promocode) { params.promocode = {}; params.promocode.min = parseInt(user.promocode.min) || 100000; params.promocode.max = parseInt(user.promocode.max) || 999999; } else { params.promocode = false; } // Set `typein attributes` if (user.typein_attributes && user.typein_attributes.source && user.typein_attributes.medium) { params.typein_attributes = {}; params.typein_attributes.source = user.typein_attributes.source; params.typein_attributes.medium = user.typein_attributes.medium; } else { params.typein_attributes = { source: '(direct)', medium: '(none)' }; } // Set `domain` if (user.domain && this.validate.isString(user.domain)) { params.domain = { host: user.domain, isolate: false }; } else if (user.domain && user.domain.host) { params.domain = user.domain; } else { params.domain = { host: uri.getHost(document.location.hostname), isolate: false }; } // Set `referral sources` params.referrals = []; if (user.referrals && user.referrals.length > 0) { for (var ir = 0; ir < user.referrals.length; ir++) { if (user.referrals[ir].host) { params.referrals.push(user.referrals[ir]); } } } // Set `organic sources` params.organics = []; if (user.organics && user.organics.length > 0) { for (var io = 0; io < user.organics.length; io++) { if (user.organics[io].host && user.organics[io].param) { params.organics.push(user.organics[io]); } } } params.organics.push({ host: 'bing.com', param: 'q', display: 'bing' }); params.organics.push({ host: 'yahoo.com', param: 'p', display: 'yahoo' }); params.organics.push({ host: 'about.com', param: 'q', display: 'about' }); params.organics.push({ host: 'aol.com', param: 'q', display: 'aol' }); params.organics.push({ host: 'ask.com', param: 'q', display: 'ask' }); params.organics.push({ host: 'globososo.com', param: 'q', display: 'globo' }); params.organics.push({ host: 'go.mail.ru', param: 'q', display: 'go.mail.ru' }); params.organics.push({ host: 'rambler.ru', param: 'query', display: 'rambler' }); params.organics.push({ host: 'tut.by', param: 'query', display: 'tut.by' }); params.referrals.push({ host: 't.co', display: 'twitter.com' }); params.referrals.push({ host: 'plus.url.google.com', display: 'plus.google.com' }); return params; }, validate: { checkFloat: function(v) { return v && this.isNumeric(parseFloat(v)) ? parseFloat(v) : false; }, checkInt: function(v) { return v && this.isNumeric(parseInt(v)) ? parseInt(v) : false; }, isNumeric: function(v){ return !isNaN(v); }, isString: function(v) { return Object.prototype.toString.call(v) === '[object String]'; } } };