UNPKG

begrowth-analytics-rudderstack

Version:

RudderStack integration for 'analytics' module for browser & node

240 lines (203 loc) 7.9 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; } /* global analytics */ var config = { /* Your rudderstack writeKey */ writeKey: null, dataPlaneURL: null, customScriptSrc: "https://cdn.rudderlabs.com/v1/rudder-analytics.min.js", /* Disable anonymous MTU */ disableAnonymousTraffic: false, /* Sync rudderstack Anonymous id with `analytics` Anon id */ syncAnonymousId: false, /* Enable/disable rudderstack destinations https://bit.ly/38nRBj3 */ integrations: {} /* Override the rudderstack snippet url, for loading via custom CDN proxy */ }; /** * rudderstack analytics plugin * @link https://getanalytics.io/plugins/rudderstack/ * @link https://rudderstack.com/docs/sources/website/analytics.js/ * @param {object} pluginConfig - Plugin settings * @param {string} pluginConfig.writeKey - Your rudderstack writeKey * @param {boolean} [pluginConfig.disableAnonymousTraffic] - Disable loading rudderstack for anonymous visitors * @param {boolean} [pluginConfig.customScriptSrc] - Override the rudderstack snippet url, for loading via custom CDN proxy * @param {object} [pluginConfig.integrations] - Enable/disable rudderstack destinations https://bit.ly/38nRBj3 * @return {object} Analytics plugin * @example * * rudderstackPlugin({ * writeKey: '123-xyz' * }) */ function rudderstackPlugin() { var pluginConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return { name: "rudderstack", config: _objectSpread2(_objectSpread2({}, config), pluginConfig), /* Custom methods to add .group call */ methods: { /* Group https://rudderstack.com/docs/connections/sources/catalog/libraries/website/javascript/#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; // const analyticsInstance = this.instance // If no rudderstack, return early if (typeof window.rudderanalytics === "undefined") { return; } // Make group call to rudderstack window.rudderanalytics.group(groupId, traits, options, callback); } }, bootstrap: function bootstrap(_ref) { var config = _ref.config, instance = _ref.instance; instance.once("identifyStart", function (_ref2) { var plugins = _ref2.plugins; var self = plugins["rudderstack"]; if (!self.loaded()) { instance.loadPlugin("rudderstack"); } }); }, /* Load rudderstack analytics.js on page */ initialize: function initialize(_ref3) { var config = _ref3.config, instance = _ref3.instance, payload = _ref3.payload; var n = document.createElement("script"); n.type = "text/javascript"; n.async = !0; n.src = config.customScriptSrc; n.id = "rudderstack-io"; var a = document.getElementsByTagName("script")[0]; a.parentNode.insertBefore(n, a); var methods = ["load", "page", "track", "identify", "alias", "group", "ready", "reset", "getAnonymousId", "setAnonymousId"]; var analytics = window.rudderanalytics = window.rudderanalytics || []; for (var i = 0; i < methods.length; i++) { var method = methods[i]; analytics[method] = function (methodName) { return function () { analytics.push([methodName].concat(Array.prototype.slice.call(arguments))); }; }(method); } function isScriptLoaded() { var scripts = document.getElementsByTagName("script"); var scriptMatch = config.customScriptSrc; return !!Object.keys(scripts).find(function (key) { var scriptInfo = scripts[key] || {}; var src = scriptInfo.src || ""; return src.indexOf(scriptMatch) > -1; }); } if (!isScriptLoaded() || !rudderanalytics.initialize) { window.rudderanalytics.load(config.writeKey, config.dataPlaneURL); } }, /* Trigger rudderstack page view http://bit.ly/2LSPFr1 */ page: function page(_ref4) { var payload = _ref4.payload, config = _ref4.config; if (typeof rudderanalytics === "undefined") return; var properties = payload.properties || {}; var name = properties.name || properties.title; rudderanalytics.page(name, properties, _objectSpread2({ integrations: config.integrations }, payload.options)); }, /* Track rudderstack event http://bit.ly/2WLnYkK */ track: function track(_ref5) { var payload = _ref5.payload, config = _ref5.config; if (typeof rudderanalytics === "undefined") return; rudderanalytics.track(payload.event, payload.properties, _objectSpread2({ integrations: config.integrations }, payload.options)); }, /* Identify rudderstack user http://bit.ly/2VL45xD */ identify: function identify(_ref6) { var payload = _ref6.payload, config = _ref6.config; if (typeof rudderanalytics === "undefined") return; var userId = payload.userId, traits = payload.traits, options = payload.options; if (typeof userId === "string") { rudderanalytics.identify(userId, traits, _objectSpread2({ integrations: config.integrations }, options)); } else { rudderanalytics.identify(traits, _objectSpread2({ integrations: config.integrations }, options)); } }, /* Remove rudderstack cookies on analytics.reset */ reset: function reset() { rudderanalytics.reset(); }, /* Sync id when ready */ ready: function ready(_ref7) { var instance = _ref7.instance, config = _ref7.config; if (!config.syncAnonymousId || typeof rudderanalytics === "undefined") return; var rudderstackUser = rudderanalytics.user(); if (rudderstackUser) { var rudderstackAnonId = rudderstackUser.anonymousId(); var analyticsAnonId = instance.user("anonymousId"); // If has rudderstack anonymous ID && doesnt match analytics anon id, update if (rudderstackAnonId && rudderstackAnonId !== analyticsAnonId) { instance.setAnonymousId(rudderstackAnonId); } } }, /* Check if rudderstack loaded */ loaded: function loaded() { return window.rudderanalytics; } }; } /* This module will shake out unused code + work in browser and node 🎉 */ var index = rudderstackPlugin ; module.exports = index;