UNPKG

begrowth-analytics-rudderstack

Version:

RudderStack integration for 'analytics' module for browser & node

188 lines (157 loc) 5.19 kB
'use strict'; 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;