@sonofatailor/consent-manager
Version:
Drop-in consent management plugin for analytics.js
80 lines • 7.44 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import isEmpty from 'lodash/isEmpty';
import pickBy from 'lodash/pickBy';
import { EventEmitter } from 'events';
var emitter = new EventEmitter();
export var onLoadExternalDestinations = function (listener) {
emitter.on('loadExternalDestinations', listener);
return function () { return emitter.off('loadExternalDestinations', listener); };
};
var emitLoadExternalDestinations = function (_a) {
var integrations = _a.integrations, externalDestinations = _a.externalDestinations;
var externalIntegrations = pickBy(integrations, function (_, integrationId) {
return externalDestinations.find(function (externalDestination) { return externalDestination.creationName === integrationId; });
});
emitter.emit('loadExternalDestinations', externalIntegrations);
};
var emitLoadAllExternalDestinations = function (externalDestinations) {
var externalIntegrations = externalDestinations.reduce(function (acc, destination) {
var _a;
return (__assign(__assign({}, acc), (_a = {}, _a[destination.creationName] = true, _a)));
}, {});
emitter.emit('loadExternalDestinations', externalIntegrations);
};
var excludeIntegrations = function (integrations, integrationsExcludedFromLoading) {
return (integrationsExcludedFromLoading || []).reduce(function (acc, integrationName) {
var _a;
return (__assign(__assign({}, acc), (_a = {}, _a[integrationName] = false, _a)));
}, integrations);
};
export default function conditionallyLoadAnalytics(_a) {
var writeKey = _a.writeKey, destinations = _a.destinations, destinationPreferences = _a.destinationPreferences, _b = _a.externalDestinations, externalDestinations = _b === void 0 ? [] : _b, isConsentRequired = _a.isConsentRequired, _c = _a.shouldReload, shouldReload = _c === void 0 ? true : _c, integrationsExcludedFromLoading = _a.integrationsExcludedFromLoading;
var wd = window;
var integrations = { All: false, 'Segment.io': true };
var isAnythingEnabled = false;
if (!destinationPreferences || isEmpty(destinationPreferences)) {
if (isConsentRequired) {
return;
}
// Load a.js normally when consent isn't required and there's no preferences
if (!wd.analytics.initialized) {
var integrationsToLoad = excludeIntegrations({}, integrationsExcludedFromLoading);
wd.analytics.load(writeKey, { integrations: integrationsToLoad });
emitLoadAllExternalDestinations(externalDestinations);
}
return;
}
for (var _i = 0, destinations_1 = destinations; _i < destinations_1.length; _i++) {
var destination = destinations_1[_i];
var isEnabled = Boolean(destinationPreferences[destination.id]);
if (isEnabled) {
isAnythingEnabled = true;
}
integrations[destination.id] = isEnabled;
}
// Reload the page if the trackers have already been initialised so that
// the user's new preferences can take affect
if (wd.analytics && wd.analytics.initialized) {
if (shouldReload) {
window.location.reload();
}
return;
}
// Don't load a.js at all if nothing has been enabled
if (isAnythingEnabled) {
var integrationsToLoad = excludeIntegrations(integrations, integrationsExcludedFromLoading);
wd.analytics.load(writeKey, { integrations: integrationsToLoad });
emitLoadExternalDestinations({ integrations: integrations, externalDestinations: externalDestinations });
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnNlbnQtbWFuYWdlci1idWlsZGVyL2FuYWx5dGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFBO0FBQ3BDLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUNsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBa0JyQyxJQUFNLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO0FBRWxDLE1BQU0sQ0FBQyxJQUFNLDBCQUEwQixHQUFHLFVBQUMsUUFBd0M7SUFDakYsT0FBTyxDQUFDLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNoRCxPQUFPLGNBQU0sT0FBQSxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLFFBQVEsQ0FBQyxFQUFqRCxDQUFpRCxDQUFBO0FBQ2hFLENBQUMsQ0FBQTtBQUVELElBQU0sNEJBQTRCLEdBQUcsVUFBQyxFQUdGO1FBRmxDLDhCQUFZLEVBQ1osOENBQW9CO0lBRXBCLElBQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxVQUFDLENBQUMsRUFBRSxhQUFhO1FBQ2pFLE9BQUEsb0JBQW9CLENBQUMsSUFBSSxDQUN2QixVQUFBLG1CQUFtQixJQUFJLE9BQUEsbUJBQW1CLENBQUMsWUFBWSxLQUFLLGFBQWEsRUFBbEQsQ0FBa0QsQ0FDMUU7SUFGRCxDQUVDLENBQ0YsQ0FBQTtJQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQTtBQUNoRSxDQUFDLENBQUE7QUFFRCxJQUFNLCtCQUErQixHQUFHLFVBQUMsb0JBQW1DO0lBQzFFLElBQU0sb0JBQW9CLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUN0RCxVQUFDLEdBQVcsRUFBRSxXQUF3Qjs7UUFB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