@mate-academy/sourcebuster
Version:
Get sources of your site's visitors (utm / organic / referral / typein).
137 lines (110 loc) • 3.72 kB
JavaScript
;
var terms = require('./terms'),
utils = require('./helpers/utils');
var data = {
containers: {
current: 'sbjs_current',
current_extra: 'sbjs_current_add',
first: 'sbjs_first',
first_extra: 'sbjs_first_add',
session: 'sbjs_session',
udata: 'sbjs_udata',
promocode: 'sbjs_promo'
},
service: {
migrations: 'sbjs_migrations'
},
delimiter: '|||',
aliases: {
main: {
type: 'typ',
source: 'src',
medium: 'mdm',
campaign: 'cmp',
content: 'cnt',
term: 'trm',
account_id: 'ac_id',
campaign_id: 'cmp_id',
ad_group_id: 'adg_id',
ad_id: 'ad_id',
term_id: 'trm_id'
},
extra: {
fire_date: 'fd',
entrance_point: 'ep',
referer: 'rf'
},
session: {
pages_seen: 'pgs',
current_page: 'cpg',
session_id: 'sid'
},
udata: {
visits: 'vst',
ip: 'uip',
agent: 'uag'
},
promo: 'code'
},
pack: {
main: function(sbjs) {
return (
data.aliases.main.type + '=' + sbjs.type + data.delimiter +
data.aliases.main.source + '=' + sbjs.source + data.delimiter +
data.aliases.main.medium + '=' + sbjs.medium + data.delimiter +
data.aliases.main.campaign + '=' + sbjs.campaign + data.delimiter +
data.aliases.main.content + '=' + sbjs.content + data.delimiter +
data.aliases.main.term + '=' + sbjs.term + data.delimiter +
data.aliases.main.account_id + '=' + sbjs.account_id + data.delimiter +
data.aliases.main.campaign_id + '=' + sbjs.campaign_id + data.delimiter +
data.aliases.main.ad_group_id + '=' + sbjs.ad_group_id + data.delimiter +
data.aliases.main.ad_id + '=' + sbjs.ad_id + data.delimiter +
data.aliases.main.term_id + '=' + sbjs.term_id
);
},
unpack: function(str) {
var sbjs = {};
var parts = str.split('|||');
parts.forEach(function(part) {
var keyValue = part.split('=');
var key = keyValue[0];
var value = keyValue[1];
sbjs[key] = value;
});
return sbjs;
},
extra: function(timezone_offset) {
return (
data.aliases.extra.fire_date + '=' + utils.setDate(new Date, timezone_offset) + data.delimiter +
data.aliases.extra.entrance_point + '=' + document.location.href + data.delimiter +
data.aliases.extra.referer + '=' + (document.referrer || terms.none)
);
},
user: function(visits, user_ip) {
return (
data.aliases.udata.visits + '=' + visits + data.delimiter +
data.aliases.udata.ip + '=' + user_ip + data.delimiter +
data.aliases.udata.agent + '=' + navigator.userAgent
);
},
session: function(pages, session_id) {
var session = (
data.aliases.session.pages_seen + '=' + pages + data.delimiter +
data.aliases.session.current_page + '=' + document.location.href
);
if (session_id) {
return (
session + data.delimiter +
data.aliases.session.session_id + '=' + session_id
);
}
return session;
},
promo: function(promo) {
return (
data.aliases.promo + '=' + utils.setLeadingZeroToInt(utils.randomInt(promo.min, promo.max), promo.max.toString().length)
);
}
}
};
module.exports = data;