Intercom.prototype._updateUser = function (identify, settings, callback) { var traits = formatTraits(identify.traits()); var active = identify.active(); extend(traits, { user_id: identify.userId(), email: identify.email(), name: identify.name() }); if (active) traits.last_request_at = time(identify.timestamp()); if (identify.created()) traits.created_at = time(identify.created()); // Add company data var company = identify.proxy('traits.company'); var companies = identify.proxy('traits.companies'); if (company) companies = [company]; if (companies) { if (Array.isArray(companies)) traits.companies = companies.map(formatCompany); else dot.del(traits, 'companies'); // intercom 500s if this is the case } return this .put('/users') .set(headers(identify, settings)) .type('json') .send(traits) .end(this.handle(callback)); };
Intercom.prototype._updateUser = function (identify, settings, callback) { var traits = formatTraits(identify.traits()); var active = identify.active(); extend(traits, { user_id: identify.userId(), email: identify.email(), name: identify.name() }); if (active) traits.last_request_at = unixTime(identify.timestamp()); if (identify.created()) traits.created_at = unixTime(identify.created()); // Add company data var company = identify.proxy('traits.company'); var companies = identify.proxy('traits.companies'); if (company) companies = [company]; if (companies) { if (Array.isArray(companies)) traits.companies = companies.map(formatCompany); else objCase.del(traits, 'companies'); // intercom 500s if this is the case } var req = { url : this.baseUrl + '/users', headers : headers(identify, settings), json : traits }; debug('updating the user %o', req); request.put(req, this._handleResponse(callback)); };
Cohorter.prototype.query = function (start, end, offset, callback) { debug('loading customers with created [%s - %s] with offset %d ..', start, end, offset); var options = { created: { gte: unixTime(start), lte: unixTime(end) }, count: this.options.count, offset: offset }; this.stripe.customers.list(options, function (err, res) { if (err) return callback(err); var customers = res.data; debug('loaded %d customers with offset %d', customers.length, offset); callback(null, res); }); };
function clean(obj){ var ret = {}; for (var k in obj) { var value = obj[k]; if (null == value) continue; // iso if (isostring(value)) { ret[k] = time(value); continue; } // not object if ('[object Object]' != value.toString()) { ret[k] = value.toString(); continue; } // json ret[k] = JSON.stringify(value); } return ret; }
function clean(obj){ obj = traverse(obj); var ret = {}; for (var k in obj) { var value = obj[k]; if (null == value) continue; // convert dates if (is.date(value)) { ret[k] = time(value); continue; } // not object if ('[object Object]' != value.toString()) { ret[k] = value.toString(); continue; } // json ret[k] = JSON.stringify(value); } return ret; }
function event(track){ var extras = track.properties(); reject(extend(extras, { _ua: track.userAgent(), _referer: track.referrer(), _url: track.proxy('properties.url'), _page_title: track.proxy('properties.pageTitle'), _ip: track.ip() })); del(extras, "note"); del(extras, "account"); del(extras, "targetId"); del(extras, "linkUrl"); del(extras, "thumbUrl"); del(extras, "url"); del(extras, "pageTitle"); del(extras, "referrer"); del(extras, "revenue"); return reject({ name: track.event(), timestamp: time(track.timestamp()), extras: extras, note: track.proxy('properties.note'), account: track.proxy('properties.account'), target_id: track.proxy('properties.targetId'), link_url: track.proxy('properties.linkUrl'), thumb_url: track.proxy('properties.thumbUrl'), revenue: 100 * track.revenue() }); }
function formatCompany (company) { if (is.string(company)) company = { name : company }; if (company.created) company.created_at = unixTime(company.created); if (!company.id && !company.name) return company; company.id = company.id || hash(company.name); return company; }
exports.track = function(track){ var payload = {}; // Some track events that are campaign critical inside Kahuna may depend on user attributes var traits = track.proxy('context.traits'); if (traits && !isEmpty(traits)) { traits.id = track.userId(); // adding traits.id for parity with identify.traits() payload.user_info = JSON.stringify(traits); } var events = [{ event: track.event(), time: unixTime(track.timestamp()) }]; // Formulate properties to required specs var flattenedObj = trample(reject(track.properties())); events[0].properties = foldl(function(results, value, key){ if (value) { if (!is.array(value)) value = [value]; results[key] = reject(value.map(function(prop){ if (prop) return prop.toString(); })); } return results; }, {}, flattenedObj); payload.events = JSON.stringify(events); payload.credentials = formulateCreds(track); return addDeviceParams(track, payload); };
exports.track = function(msg){ var props = traverse(msg.properties()); return { timestamp: time(msg.timestamp()), data: convert(props, time), name: msg.event() } };
exports.track = function(track) { var properties = createBaseTrackProperties(track, this.settings); return extend(properties, { _p: track.userId() || track.sessionId(), _t: toUnixTimestamp(track.timestamp()), _n: track.event(), _d: 1 }); };
Object.keys(properties).forEach(function (key) { var val = properties[key]; if (val === null || val === undefined) return; // Transform dates and objects if (isostring(val)) output[key] = unixTime(val); else if (val.toString() !== '[object Object]') output[key] = val.toString(); else output[key] = JSON.stringify(val); });
Object.keys(traits).forEach(function(key){ var val = traits[key]; if (isostring(val) || is.date(val)) { val = time(val); key = dateKey(key); } output[key] = val; });
CustomerIO.prototype.visit = function(message, fn){ if (!message.active()) return setImmediate(fn); this .put(message.userId()) .auth(this.settings.siteId, this.settings.apiKey) .send({ _last_visit: time(message.timestamp()) }) .type('json') .end(this.handle(fn)); };
exports.track = function(track){ var event = clean(track.event()); return { name: event, value: track.value() || 1, measure_time: time(track.timestamp()), source: track.options(this.name).source || event }; };
function formatCompany (company) { if (is.string(company)) company = { name : company }; var created = dot(company, 'created') || dot(company, 'createdAt'); if (created) company.created_at = time(created); if (!company.id && !company.name) return company; company.id = company.id || hash(company.name); dot.del(company, 'created'); delete company.createdAt; return company; }
var mappedProducts = map(products, function(product, i) { return extend( createBaseTrackProperties(product, settings), { // Ensure products aren't ignored as duplicates // http://support.kissmetrics.com/troubleshooting/detecting-duplicates _t: toUnixTimestamp(product.timestamp()) + i } ); });
exports.screen = function(msg){ var props = traverse(msg.properties()); var name = `Viewed ${msg.name()} Screen`; delete props.name; return { timestamp: time(msg.timestamp()), name: name, data: convert(props, time) } };
function formatProperties(track, settings){ var properties = track.properties() || {}; var identify = track.identify(); var userAgent = track.userAgent(); extend(properties, { token: settings.token, distinct_id: track.userId() || track.sessionId(), time: time(track.timestamp()), mp_lib: 'Segment: ' + track.library().name, $lib_version: track.library().version, $search_engine: track.proxy('properties.searchEngine'), $referrer: track.referrer(), $username: track.username(), $query: track.query(), $os: track.proxy('context.os.name'), $os_version: track.proxy('context.os.version'), $manufacturer: track.proxy('context.device.manufacturer'), $screen_dpi: track.proxy('context.screen.density'), $screen_height: track.proxy('context.screen.height'), $screen_width: track.proxy('context.screen.width'), $bluetooth_enabled: track.proxy('context.network.bluetooth'), $has_telephone: track.proxy('context.network.cellular'), $carrier: track.proxy('context.network.carrier'), $app_version: track.proxy('context.app.version'), $wifi: track.proxy('context.network.wifi'), $brand: track.proxy('context.device.brand'), $model: track.proxy('context.device.model'), ip: track.ip() }); // Remove possible duplicate properties. object.del(properties, 'referrer'); object.del(properties, 'username'); object.del(properties, 'query'); object.del(properties, 'searchEngine'); // Add the name tag properties.mp_name_tag = identify.name() || identify.email() || identify.userId() || identify.sessionId(); properties = reject(properties); stringifyValues(properties); if (userAgent) { var parsed = parse(userAgent); var browser = parsed.browser var os = parsed.os; if (browser) properties.$browser = browser.name + ' ' + browser.version; if (os) properties.$os = os.name + ' ' + os.version; } return properties; }
GAClassic.prototype._querystring = function (message, settings) { return { utmhn : settings.domain, // site domain (optional) utmac : settings.serversideTrackingId, // set our tracking id utmwv : this.version, // set the ga version utmcc : this._cookie(message, settings), // cookie request utmn : unixTime(new Date()), // prevent caching utmcs : '-', // language utmr : '-' // referrer url }; };
it('should get a good response from the API', function(done){ var track = helpers.track(); payload.timestamp = time(track.timestamp()); payload.data = convert(track.properties(), time); payload.name = track.event(); test .track(track) .requests(1) .request(0) .sends(payload) .expects(200, done) });
exports.track = function(track){ var payload = clean(track.properties()); if (track.revenue()) payload['Billing Amount'] = track.revenue(); if (this.settings.prefixProperties) payload = prefix(track.event(), payload); return extend(payload, { _p: track.userId() || track.sessionId(), _t: time(track.timestamp()), _k: this.settings.apiKey, _n: track.event(), _d: 1 }); };
exports.page = function(msg){ var props = traverse(msg.properties()); var url = props.url; delete props.url; return { timestamp: time(msg.timestamp()), type: 'page', name: url, data: convert(props, time) } };
exports.page = function(page) { var name = 'Viewed ' + (page.name() || page.category()) + ' Page'; var properties = prefix('Page', page.properties()); var payload = extend(properties, { _p: page.userId() || page.sessionId(), _t: toUnixTimestamp(page.timestamp()), _k: this.settings.apiKey, _n: name, _d: 1 }); addIPAndUserAgent(page, payload); return payload; };
exports.screen = function(screen) { var name = 'Viewed ' + (screen.name() || screen.category()) + ' Screen'; var properties = prefix('Screen', screen.properties()); var payload = extend(properties, { _p: screen.userId() || screen.sessionId(), _t: toUnixTimestamp(screen.timestamp()), _k: this.settings.apiKey, _n: name, _d: 1 }); addIPAndUserAgent(screen, payload); return payload; };
exports.track = function(track){ var props = clean(track.properties()); var revenue = track.revenue(); props.email = track.email(); if (revenue) props.revenue_amount = revenue; return { uid: track.userId() || track.sessionId(), occurred_at: time(track.timestamp()), action_name: track.event(), properties: props }; };
it('should get a good response from the API', function(done){ var identify = helpers.identify(); payload = identify.traits(); payload.created_at = time(identify.created()); payload.email = identify.email(); del(payload, 'created'); payload = convert(payload, time); test .identify(identify) .requests(1) .request(0) .sends(payload) .expects(200, done); });
exports.group = function(group){ var userId = group.userId(); var anonymousId = group.sessionId(); var payload = prefix('Group', clean(group.traits())); payload = extend(payload, { 'Group - id': group.groupId(), _p: userId || anonymousId, _t: toUnixTimestamp(group.timestamp()), _k: this.settings.apiKey, _d: 1 }); addIPAndUserAgent(group, payload); return payload; };
app.get('/:timestamp', function(request, response) { var timestamp = (isNaN(request.params.timestamp)) ? request.params.timestamp : request.params.timestamp*1000 var unix = unix_time(timestamp) if (!unix) timestamp = null else if (!isNaN(timestamp)) timestamp = getNatureDate(timestamp) response.json({ unix: unix, natural: timestamp }) });
it('should send page successfully', function(done){ var event = librato.mapper.clean(page.track(page.fullName()).event()); test .set(settings) .page(page) .sends({ gauges: [{ name: event, value: 1, measure_time: time(page.timestamp()), source: event }] }) .expects(200) .end(done); });
it('should track successfully', function(done){ var event = librato.mapper.clean(track.event()); test(librato) .set(settings) .track(track) .sends({ gauges: [{ name: event, value: 1, measure_time: time(track.timestamp()), source: event }] }) .expects(200) .end(done); });