123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- 'use strict';
- const qs = require('querystring');
-
- /**
- * Tracking providers
- *
- * Each provider is a function(id, path) that should return
- * options object for request() call. It will be called bound
- * to Insight instance object.
- */
-
- module.exports = {
- // Google Analytics — https://www.google.com/analytics/
- google(id, payload) {
- const now = Date.now();
-
- const _qs = {
- // GA Measurement Protocol API version
- v: 1,
-
- // Hit type
- t: payload.type,
-
- // Anonymize IP
- aip: 1,
-
- tid: this.trackingCode,
-
- // Random UUID
- cid: this.clientId,
-
- cd1: this.os,
-
- // GA custom dimension 2 = Node Version, scope = Session
- cd2: this.nodeVersion,
-
- // GA custom dimension 3 = App Version, scope = Session (temp solution until refactored to work w/ GA app tracking)
- cd3: this.appVersion,
-
- // Queue time - delta (ms) between now and track time
- qt: now - parseInt(id, 10),
-
- // Cache busting, need to be last param sent
- z: now
- };
-
- // Set payload data based on the tracking type
- if (payload.type === 'event') {
- _qs.ec = payload.category;
- _qs.ea = payload.action;
-
- if (payload.label) {
- _qs.el = payload.label;
- }
-
- if (payload.value) {
- _qs.ev = payload.value;
- }
- } else {
- _qs.dp = payload.path;
- }
-
- return {
- url: 'https://ssl.google-analytics.com/collect',
- method: 'POST',
- // GA docs recommends body payload via POST instead of querystring via GET
- body: qs.stringify(_qs)
- };
- },
- // Yandex.Metrica - http://metrica.yandex.com
- yandex(id, payload) {
- const request = require('request');
-
- const ts = new Date(parseInt(id, 10))
- .toISOString()
- .replace(/[-:T]/g, '')
- .replace(/\..*$/, '');
-
- const {path} = payload;
- const qs = {
- wmode: 3,
- ut: 'noindex',
- 'page-url': `http://${this.packageName}.insight${path}?version=${this.packageVersion}`,
- 'browser-info': `i:${ts}:z:0:t:${path}`,
- // Cache busting
- rn: Date.now()
- };
-
- const url = `https://mc.yandex.ru/watch/${this.trackingCode}`;
-
- // Set custom cookie using tough-cookie
- const _jar = request.jar();
- const cookieString = `name=yandexuid; value=${this.clientId}; path=/;`;
- const cookie = request.cookie(cookieString);
- _jar.setCookie(cookie, url);
-
- return {
- url,
- method: 'GET',
- qs,
- jar: _jar
- };
- }
- };
|