begrowth-analytics-rudderstack
Version:
RudderStack integration for 'analytics' module for browser & node
240 lines (203 loc) • 7.9 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;
}
/* 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;