示例#1
0
 beforeEach(function(){
   Segment = integration('Segment');
   Segment.endpoint('http://localhost:3000/');
   Segment.prototype.identify = support.send;
   Segment.prototype.group = support.send;
   Segment.prototype.screen = support.send;
   Segment.prototype.track = support.send;
   Segment.prototype.alias = support.send;
   Segment.prototype.page = support.send;
   segment = Segment();
 })
示例#2
0
    beforeEach(function(){
      var map = { identify: identify };
      Segment = integration('Segment').mapper(map);
      segment = Segment();

      function identify(msg) {
        msg = msg.json();
        msg.timestamp = msg.timestamp.getTime();
        return msg;
      }
    })
示例#3
0
/**
 * Module dependencies.
 */

var integration = require('segmentio-integration');
var mapper = require('./mapper');

/**
 * Expose `KISSmetrics`
 */

var KISSmetrics = module.exports = integration('KISSmetrics')
  .endpoint('https://trk.kissmetrics.com')
  .mapper(mapper)
  .retries(2);

/**
 * Validate.
 *
 * @param {Facade} message
 * @param {Object} settings
 * @api public
 */

KISSmetrics.prototype.validate = function(message, settings){
  return this.ensure(settings.apiKey, 'apiKey');
};

/**
 * Identify.
示例#4
0
/**
 * Module dependencies.
 */

var integration = require('segmentio-integration');
var mapper = require('./mapper');

/**
 * Expose `USERcycle`
 */

var USERcycle = module.exports = integration('USERcycle')
  .endpoint('https://api.usercycle.com/api/v1')
  .ensure('settings.key')
  .channels(['server', 'mobile', 'client'])
  .mapper(mapper)
  .retries(2);

/**
 * Identify.
 *
 * @param {Identify} identify
 * @param {Object} settings
 * @param {Function} fn
 * @api public
 */

USERcycle.prototype.identify = request;

/**
示例#5
0
/**
 * Module dependencies.
 */

var integration = require('segmentio-integration');
var errors = integration.errors;
var is = require('is');

/**
 * Expose `HelpScout`
 */

var HelpScout = module.exports = integration('Help Scout')
  .endpoint('https://api.helpscout.net/v1')
  .retries(2);

/**
 * Enabled.
 *
 * @param {Facade} message
 * @param {Object} settings
 * @api public
 */

HelpScout.prototype.enabled = function (message, settings) {
  return message.enabled(this.name);
};

/**
 * Validate.
示例#6
0
/**
 * Module dependencies.
 */

var integration = require('segmentio-integration');
var fmt = require('util').format;
var find = require('obj-case');

/**
 * Expose `Drip`
 */

var Drip = module.exports = integration('Drip')
  .endpoint('https://api.getdrip.com/v1')
  .retries(2);

/**
 * Enabled.
 *
 * Drip is enabled only on the serverside.
 *
 * @param {Facade} msg
 * @param {Object} settings
 * @return {Boolean}
 * @api public
 */

Drip.prototype.enabled = function(msg, settings){
  return !! (msg.enabled(this.name)
    && 'server' == msg.channel()
示例#7
0
/**
 * Module dependencies.
 */

var integration = require('segmentio-integration');
var hash = require('string-hash');
var parse = require('url').parse;
var is = require('is');

/**
 * Expose `GA`
 */

var GA = module.exports = integration('Google Analytics')
  .endpoint('https://ssl.google-analytics.com/collect')
  .retries(2);

/**
 * Track.
 *
 * @param {Track} track
 * @param {Object} settings
 * @param {Function} callback
 */

GA.prototype.track = function (track, settings, callback) {
  return this
    .post()
    .type('form')
    .send(this._common(track, settings))
示例#8
0
var integration = require('segmentio-integration');
var fmt = require('util').format;
var mapper = require('./mapper');
var ValidationError = integration.errors.Validation;

/**
 * Delivery methods
 */

var methods = ['email', 'webhook'];

/**
 * Expose `StackLead`
 */

var StackLead = module.exports = integration('StackLead')
  .endpoint('https://stacklead.com/api')
  .mapper(mapper)
  .retries(2);

/**
 * Validate.
 *
 * @param {Facade} message
 * @param {Object} settings
 * @return {Error}
 * @api public
 */

StackLead.prototype.validate = function(_, settings){
  var err = this.ensure(settings.apiKey, 'apiKey');
示例#9
0
  },
  "type": "identify",
  "user_id": "97980cfea0067",
  "version": "1.1"
};
var Identify = require('segmentio-facade').Identify;
var integration = require('segmentio-integration');
var mapper = require('./mapper');
var settings = {
  "accessToken": "$BASECRM_ACCESS_TOKEN"
}

var data = new Identify(msg);


var BaseCRM = module.exports = integration('baseCRM')
  .endpoint('https://api.getbase.com')
  .channels(['server', 'mobile', 'client'])
  .retries(2);

BaseCRM.prototype.identify = function(identify, fn){
  return this
    .post('/v2/leads')
    .auth(this.settings.accessToken)
    .set(headers(identify, this.settings))
    .type('json')
    .accept('json')
    .send(mapper.identify(identify))
    .end(this.handle(fn))
}
/**
 * Module dependencies.
 */

var debug = require('debug')('segmentio:millennial-media');
var Integration = require('segmentio-integration');
var dot = require('obj-case');
var Batch = require('batch');

/**
 * Expose `Millennial`
 */

var Millennial = module.exports = Integration('Millennial Media')
  .endpoint('http://cvt.mydas.mobi/handleConversion')
  .channels(['server', 'mobile', 'client'])
  .ensure('message.context.referrer.id')
  .ensure('settings.events')
  .ensure('message.event')
  .retries(2);

/**
 * Ensure referrer.type is millenial media
 */

Millennial.ensure(function(msg){
  var type = msg.proxy('context.referrer.type');
  if ('millennial-media' == type) return;
  return this.reject('context.referrer.type must be "millennial-media"');
});
示例#11
0
/**
 * Module dependencies.
 */

var integration = require('segmentio-integration');
var mapper = require('./mapper');

/**
 * Expose `Klaviyo`
 */

var Klaviyo = module.exports = integration('Klaviyo')
  .endpoint('http://a.klaviyo.com/api')
  .ensure('settings.apiKey')
  .channels(['server'])
  .mapper(mapper)
  .retries(2);

/**
 * Identify.
 *
 * https://www.klaviyo.com/docs
 *
 * @param {Object} payload
 * @param {Object} settings
 * @param {Function} fn
 * @api public
 */

Klaviyo.prototype.identify = request('/identify');
示例#12
0
/**
 * Module dependencies.
 */
var integration = require('segmentio-integration');
var mapper = require('./mapper');

/**
 * Expose `MailChimp`
 */

var MailChimp = module.exports = integration('MailChimp')
  .mapper(mapper)
  .retries(2);

/**
 * Initialize.
 *
 * @api private
 */

MailChimp.prototype.initialize = function(){
  this.subscribeUrl = 'https://<datacenter>.api.mailchimp.com/2.0/lists/subscribe.json';
};

/**
 * Enabled.
 *
 * @param {Facade} message
 * @param {Object} settings
 * @return {Boolean}
示例#13
0
/**
 * Module dependencies.
 */

var integration = require('segmentio-integration');
var mapper = require('./mapper');

/**
 * Expose `Outbound`
 */

var Outbound = module.exports = integration('Outbound')
  .channels(['server', 'mobile', 'client'])
  .endpoint('https://api.outbound.io')
  .ensure('settings.apiKey')
  .ensure('message.userId')
  .mapper(mapper)
  .retries(2);

/**
 * Track.
 *
 * @apram {Track} track
 * @param {Function} fn
 * @api private
 */

Outbound.prototype.track = function(payload, fn){
  return this
    .post('/v2/track')
示例#14
0
];

/**
 * CommandIQ ignored traits.
 */

var ignored = [
  'userAgent',
  'created'
].concat(specialTraits);

/**
 * Expose `CommandIQ`
 */

var CommandIQ = module.exports = integration('CommandIQ')
  .endpoint('http://api.commandiq.com/api')
  .channels(['server', 'mobile', 'client'])
  .ensure('settings.apiKey')
  .retries(2);

/**
 * Handles segment.io's identify method.
 *
 * Note: Traits that are not part of the CommandIQ identifyUser
 * method are instead passed to trackEvent.
 *
 * https://commandiq.com/docs/api
 *
 * @param {Identify} identify
 * @param {Function} fn
示例#15
0
/**
 * Module dependencies.
 */

var integration = require('segmentio-integration');
var mapper = require('./mapper');

/**
 * Expose `Frontleaf`
 */

var Frontleaf = module.exports = integration('Frontleaf')
  .endpoint('https://api.frontleaf.com/api/track')
  .mapper(mapper)
  .retries(2);

/**
 * Enabled.
 *
 * @param {Facade} message
 * @param {Object} settings
 * @return {Boolean}
 * @api public
 */

Frontleaf.prototype.enabled = function(message, settings){
  return !! (message.enabled(this.name)
    && 'server' == message.channel()
    && message.field('userId'));
};
示例#16
0
var integration = require('segmentio-integration');
var parse = require('ua-parser-js');
var object = require('obj-case');
var time = require('unix-time');
var extend = require('extend');
var reject = require('reject');
var Batch = require('batch');
var tick = process.nextTick;
var ms = require('ms');
var is = require('is');

/**
 * Expose `Mixpanel`
 */

var Mixpanel = module.exports = integration('Mixpanel')
  .endpoint('https://api.mixpanel.com')
  .ensure('settings.token')
  .channels(['server'])
  .retries(2);

/**
 * Mixpanel requires an `.apiKey` on `track`
 * if the message is older than 5 days.
 */

Mixpanel.ensure(function(msg, settings){
  if (settings.apiKey) return;
  if ('track' != msg.type()) return;
  if (!shouldImport(msg)) return;
  return this.invalid('.apiKey is required if "track" message is older than 5 days.');
示例#17
0
/**
 * Module dependencies.
 */

var integration = require('segmentio-integration');
var mapper = require('./mapper');

/**
 * Expose `Woopra`
 */

var Woopra = module.exports = integration('Woopra')
  // Use http, not ssl, because ssl is a paid feature and then the extra option
  // is just unnecessary overhead/error prone for customers.
  .endpoint('http://www.woopra.com/track')
  .ensure('settings.domain')
  .channels(['server'])
  .mapper(mapper)
  .retries(2);

/**
 * Identify.
 *
 * @param {Object} payload
 * @param {Object} settings
 * @param {Function} fn
 * @api public
 */

Woopra.prototype.identify = request('/identify/');
var fmt = require('@segment/fmt');
var Stats = require('dog-statsy');


// FIXME: temp metrics versions
var STATS = new Stats({
  host: '172.17.42.1',
  port: 8125,
  prefix: 'intercom'
});

/**
 * Expose `Intercom`
 */

var Intercom = module.exports = integration('Intercom')
  .endpoint('https://api-segment.intercom.io')
  .ensure(function(msg, settings){
    if (oauthTokenExists(settings.oauth)) return;
    if (settings.apiKey && settings.appId) return;
    return this.invalid('.apiKey and .appId is required if .oauth[\'access-token\'] is absent');
  })
  .channels(['server']);

/**
 * Ensure userId or email.
 */

Intercom.ensure(function(msg){
  var email = msg.proxy('traits.email') || msg.proxy('properties.email');
  var user = msg.userId();
示例#19
0
/**
 * Module dependencies.
 */

var transform = require('segmentio-transform-legacy');
var integration = require('segmentio-integration');
var ValidationError = integration.errors.Validation;
var url = require('url');
var ms = require('ms');

/**
 * Expose `Webhooks`
 */

var Webhooks = module.exports = integration('Webhooks')
  .channels(['server', 'mobile', 'client'])
  .timeout('3s')
  .retries(1);

/**
 * Ensure `globalHook` is a url.
 */

Webhooks.ensure(function(_, settings){
  if (isUrl(settings.globalHook)) return;
  return this.invalid('"globalHook" must be a valid url, got "%s"', settings.globalHook);
});

/**
 * Expose our methods
/**
 * Module dependencies.
 */

var Batch = require('batch');
var integration = require('segmentio-integration');
var mapper = require('./mapper');
var countryMapper = require('./countryRegionMapping');

/**
 * Expose `Criteo`
 */

var Criteo = module.exports = integration('Criteo')
  .endpoint('http://widget.')
  .channels(['server'])
  .ensure('message.context.device.advertisingId')
  .ensure('message.context.app.namespace')
  .mapper(mapper)
  .retries(3);


/**
 * Track.
 *
 * https://segment.com/docs/spec/track/
 *
 * @param {Track} track
 * @param {Object} settings
 * @param {Function} fn
 * @api private
示例#21
0
/**
 * Module dependencies.
 */

var integration = require('segmentio-integration');
var mapper = require('./mapper');

/**
 * Expose `Amplitude`
 */

var Amplitude = module.exports = integration('Amplitude')
  .endpoint('https://api.amplitude.com/httpapi')
  .mapper(mapper)
  .retries(2);

/**
 * Validate.
 *
 * @param {Facade} message
 * @param {Object} settings
 * @return {Error}
 * @api public
 */

Amplitude.prototype.validate = function (message, settings) {
  return this.ensure(settings.apiKey, 'apiKey');
};

/**
/**
 * Module dependencies.
 */

var convert = require('convert-dates');
var integration = require('segmentio-integration');
var Identify = require('segmentio-facade').Identify;
var mapper = require('./mapper');
var object = require('obj-case');
var time = require('unix-time');

/**
 * Expose `CustomerIO`
 */

var CustomerIO = module.exports = integration('Customer.io')
  .endpoint('https://app.customer.io/api/v1/customers/')
  .channels(['server'])
  .ensure('settings.siteId')
  .ensure('settings.apiKey')
  .ensure('message.userId')
  .retries(2);

/**
 * Identify.
 *
 * http://customer.io/docs/api/rest.html#section-Creating_or_updating_customers
 *
 * @param {Identify} identify
 * @param {Function} fn
 * @api public
var integration = require('segmentio-integration');
var traverse = require('isodate-traverse');
var floor = require('date-math').day.floor;
var convert = require('convert-dates');
var isostring = require('isostring');
var fmt = require('util').format;
var Cache = require('lru-cache');
var mapper = require('./mapper');
var ms = require('ms');
var is = require('is');

/**
 * Expose `HubSpot`
 */

var HubSpot = module.exports = integration('HubSpot')
  .ensure('settings.portalId')
  .ensure('settings.apiKey')
  .ensure('message.email')
  .channels(['server'])
  .retries(2);

/**
 * Initialize.
 *
 * @api private
 */

HubSpot.prototype.initialize = function(){
  this.trackUrl = 'https://track.hubspot.com/v1';
  this.contactUrl = 'https://api.hubapi.com/contacts/v1';
示例#24
0
/**
 * Module dependencies.
 */

var integration = require('segmentio-integration');
var mapper = require('./mapper');

/**
 * Expose `Attribution`
 */

var Attribution = module.exports = integration('Attribution')
  .endpoint('https://track.attributionapp.com')
  .channels(['server', 'mobile', 'client'])
  .ensure('settings.projectId')
  .mapper(mapper)
  .retries(2);

/**
 * Identify.
 *
 * @param {Identify} identify
 * @param {Function} fn
 * @api public
 */

Attribution.prototype.identify = function(payload, fn){
  return this
    .post('/identify')
    .auth(this.settings.projectId)
示例#25
0
var integration = require('segmentio-integration')
  , gochime = require('gochime');

var GoChime = module.exports = integration('gochime');

GoChime.prototype.validate =
  function (message, settings) {
    return this.ensure(settings.API_KEY, "GoChime API KEY");
  };


GoChime.prototype.enabled =
  function () {
    return true;
  };

GoChime.prototype.identify =
  function (message, settings, cb) {
    return cb(new Error("Not ready yet!"));
    // gochime.identify(settings.API_KEY, message, cb);
  };

GoChime.prototype.track =
  function (message, settings, cb) {
    if (!message || !message.properties || !message.properties.email) { return cb(null); }
    return cb(new Error("Not ready yet!"));
    // gochime.track(settings.API_KEY, message, cb);
  };

GoChime.prototype.alias =
  function (message, settings, cb) {
示例#26
0
/**
 * Module dependencies.
 */

var integration = require('segmentio-integration');
var BadRequest = integration.errors.BadRequest;

/**
 * Expose `Gainsight`
 */

var Gainsight = module.exports = integration('Gainsight')
  .endpoint('https://event.gainsight.com')
  .channel('server')
  .channel('mobile')
  .channel('client')
  .retries(3);

/**
 * Validate.
 *
 * @param {Facade} message
 * @param {Object} settings
 * @return {Error}
 * @api public
 */

Gainsight.prototype.validate = function(message, settings){
  return this.ensure(settings.accessKey, 'accessKey')
};
示例#27
0
/**
 * Module dependencies.
 */

var integration = require('segmentio-integration');
var fmt = require('util').format;
var mapper = require('./mapper');
var BadRequest = integration.errors.BadRequest;

/**
 * Expose `Iron IO`
 */

var Iron = module.exports = integration('Iron.io')
  .endpoint('https://mq-aws-us-east-1.iron.io:443')
  .channel('server')
  .channel('mobile')
  .channel('client')
  .mapper(mapper)
  .retries(2);

/**
 * Validate.
 *
 * @param {Facade} message
 * @param {Object} settings
 * @return {Error}
 * @api public
 */