@sonofatailor/consent-manager
Version:
Drop-in consent management plugin for analytics.js
86 lines • 7.66 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);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var isEmpty_1 = __importDefault(require("lodash/isEmpty"));
var pickBy_1 = __importDefault(require("lodash/pickBy"));
var events_1 = require("events");
var emitter = new events_1.EventEmitter();
exports.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_1.default(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);
};
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_1.default(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 });
}
}
exports.default = conditionallyLoadAnalytics;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnNlbnQtbWFuYWdlci1idWlsZGVyL2FuYWx5dGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkRBQW9DO0FBQ3BDLHlEQUFrQztBQUNsQyxpQ0FBcUM7QUFrQnJDLElBQU0sT0FBTyxHQUFHLElBQUkscUJBQVksRUFBRSxDQUFBO0FBRXJCLFFBQUEsMEJBQTBCLEdBQUcsVUFBQyxRQUF3QztJQUNqRixPQUFPLENBQUMsRUFBRSxDQUFDLDBCQUEwQixFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ2hELE9BQU8sY0FBTSxPQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsUUFBUSxDQUFDLEVBQWpELENBQWlELENBQUE7QUFDaEUsQ0FBQyxDQUFBO0FBRUQsSUFBTSw0QkFBNEIsR0FBRyxVQUFDLEVBR0Y7UUFGbEMsOEJBQVksRUFDWiw4Q0FBb0I7SUFFcEIsSUFBTSxvQkFBb0IsR0FBRyxnQkFBTSxDQUFDLFlBQVksRUFBRSxVQUFDLENBQUMsRUFBRSxhQUFhO1FBQ2pFLE9BQUEsb0JBQW9CLENBQUMsSUFBSSxDQUN2QixVQUFBLG1CQUFtQixJQUFJLE9BQUEsbUJBQW1CLENBQUMsWUFBWSxLQUFLLGFBQWEsRUFBbEQsQ0FBa0QsQ0FDMUU7SUFGRCxDQUVDLENBQ0YsQ0FBQTtJQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQTtBQUNoRSxDQUFDLENBQUE7QUFFRCxJQUFNLCtCQUErQixHQUFHLFVBQUMsb0JBQW1DO0lBQzFFLElBQU0sb0JBQW9CLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUN0RCxVQUFDLEdBQVcsRUFBRSxXQUF3Qjs7UUFBSyxPQUFBLHVCQUN0QyxHQUFHLGdCQUNMLFdBQVcsQ0FBQyxZQUFzQixJQUFHLElBQUksT0FDMUM7SUFIeUMsQ0FHekMs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