begrowth-analytics-rudderstack
Version:
RudderStack integration for 'analytics' module for browser & node
188 lines (157 loc) • 5.19 kB
JavaScript
;
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
return target;
}
var Analytics;
{
Analytics = require('analytics-node');
}
var defaultConfig = {
/* Your segment write key */
writeKey: null,
/* Segment sdk flushInterval. Docs https://bit.ly/2H2jJMb */
flushInterval: 3,
/* Disable anonymous MTU */
disableAnonymousTraffic: false
};
/**
* Segment serverside analytics plugin
* @link https://getanalytics.io/plugins/segment/
* @link https://segment.com/docs/sources/website/analytics.js/
* @param {object} pluginConfig - Plugin settings
* @param {string} pluginConfig.writeKey - Your segment writeKey
* @param {boolean} [pluginConfig.flushInterval] - Segment sdk flushInterval. Docs https://bit.ly/2H2jJMb
* @param {boolean} [pluginConfig.disableAnonymousTraffic] - Disable loading segment for anonymous visitors
* @return {object} Analytics plugin
* @example
*
* segmentPlugin({
* writeKey: '123-xyz'
* })
*/
function segmentPlugin() {
var userConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var config = _objectSpread2(_objectSpread2({}, defaultConfig), userConfig);
var client = new Analytics(config.writeKey, {
flushInterval: config.flushInterval
});
return {
name: 'segment',
config: config,
// Custom segment methods
methods: {
// Segment group call https://segment.com/docs/connections/sources/catalog/libraries/server/node/#group
group: function group(groupId) {
var traits = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var callback = arguments.length > 3 ? arguments[3] : undefined;
var analyticsInstance = this.instance;
var user = analyticsInstance.user();
var userId = options.userId || user.userId;
var anonymousId = options.anonymousId || user.anonymousId;
client.group(_objectSpread2(_objectSpread2(_objectSpread2({}, anonymousId ? {
anonymousId: anonymousId
} : {}), userId ? {
userId: userId
} : {}), {}, {
groupId: groupId,
traits: traits
}), callback);
},
// Function for using analytics-node client in other methods
getClient: function getClient() {
return client;
}
},
/* page view */
page: function page(_ref) {
var payload = _ref.payload,
config = _ref.config;
var userId = payload.userId,
anonymousId = payload.anonymousId;
if (!userId && !anonymousId) {
throw new Error('Missing userId and anonymousId. You must include one to make segment call');
}
var data = {
properties: payload.properties,
anonymousId: anonymousId,
userId: userId
};
client.page(data);
},
/* track event */
track: function track(_ref2) {
var payload = _ref2.payload,
config = _ref2.config;
var userId = payload.userId,
anonymousId = payload.anonymousId;
if (!userId && !anonymousId) {
throw new Error('Missing userId and anonymousId. You must include one to make segment call');
}
var data = {
event: payload.event,
properties: payload.properties
};
if (userId) {
data.userId = userId;
} else {
data.anonymousId = anonymousId;
} // Save boat loads of cash
if (config.disableAnonymousTraffic && !userId) {
return false;
}
client.track(data);
},
/* identify user */
identify: function identify(_ref3) {
var payload = _ref3.payload;
var userId = payload.userId,
traits = payload.traits;
client.identify({
userId: userId,
traits: traits
});
}
};
}
/* This module will shake out unused code + work in browser and node 🎉 */
var index = segmentPlugin;
module.exports = index;