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(); })
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; } })
/** * 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.
/** * 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; /**
/** * 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.
/** * 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()
/** * 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))
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');
}, "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"'); });
/** * 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');
/** * 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}
/** * 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')
]; /** * 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
/** * 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')); };
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.');
/** * 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();
/** * 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
/** * 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';
/** * 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)
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) {
/** * 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') };
/** * 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 */