@snowplow/node-tracker
Version:
201 lines (195 loc) • 7.5 kB
JavaScript
/*!
* Node tracker for Snowplow v4.6.3 (https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/node-js-tracker/)
* Copyright 2022 Snowplow Analytics Ltd
* Licensed under BSD-3-Clause
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var trackerCore = require('@snowplow/tracker-core');
/*
* Copyright (c) 2022 Snowplow Analytics Ltd
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* Updates the defaults for the emitter configuration
*/
function newNodeEmitters(configuration) {
if (configuration.hasOwnProperty('customEmitter')) {
const customEmitters = configuration.customEmitter();
return Array.isArray(customEmitters) ? customEmitters : [customEmitters];
}
else {
configuration = configuration;
// Set the default buffer size to 10 instead of 1
if (configuration.bufferSize === undefined) {
configuration.bufferSize = 10;
}
return [trackerCore.newEmitter(configuration)];
}
}
function newTracker(trackerConfiguration, emitterConfiguration) {
const { namespace, appId, encodeBase64 = true } = trackerConfiguration;
const configs = Array.isArray(emitterConfiguration) ? emitterConfiguration : [emitterConfiguration];
const allEmitters = configs.flatMap(newNodeEmitters);
let domainUserId;
let networkUserId;
let sessionId;
let sessionIndex;
const addUserInformation = (payload) => {
payload.add('duid', domainUserId);
payload.add('nuid', networkUserId);
payload.add('sid', sessionId);
payload.add('vid', sessionIndex && Number(sessionIndex));
};
/**
* Send the payload for an event to the endpoint
*
* @param payload - Dictionary of name-value pairs for the querystring
*/
const sendPayload = (payload) => {
addUserInformation(payload);
const builtPayload = payload.build();
for (let i = 0; i < allEmitters.length; i++) {
allEmitters[i].input(builtPayload);
}
};
const core = trackerCore.trackerCore({ base64: encodeBase64, callback: sendPayload });
core.setPlatform('srv'); // default platform
core.setTrackerVersion('node-' + trackerCore.version);
core.setTrackerNamespace(namespace);
core.setAppId(appId);
const setDomainUserId = function (userId) {
domainUserId = userId;
};
const setNetworkUserId = function (userId) {
networkUserId = userId;
};
const setSessionId = function (currentSessionId) {
sessionId = currentSessionId;
};
const setSessionIndex = function (currentSessionIndex) {
sessionIndex = currentSessionIndex;
};
const flush = () => {
return Promise.allSettled(allEmitters.map((emitter) => emitter.flush())).then(() => { });
};
return {
setDomainUserId,
setNetworkUserId,
setSessionId,
setSessionIndex,
flush,
...core,
};
}
Object.defineProperty(exports, 'LOG_LEVEL', {
enumerable: true,
get: function () { return trackerCore.LOG_LEVEL; }
});
Object.defineProperty(exports, 'buildAdClick', {
enumerable: true,
get: function () { return trackerCore.buildAdClick; }
});
Object.defineProperty(exports, 'buildAdConversion', {
enumerable: true,
get: function () { return trackerCore.buildAdConversion; }
});
Object.defineProperty(exports, 'buildAdImpression', {
enumerable: true,
get: function () { return trackerCore.buildAdImpression; }
});
Object.defineProperty(exports, 'buildAddToCart', {
enumerable: true,
get: function () { return trackerCore.buildAddToCart; }
});
Object.defineProperty(exports, 'buildConsentGranted', {
enumerable: true,
get: function () { return trackerCore.buildConsentGranted; }
});
Object.defineProperty(exports, 'buildConsentWithdrawn', {
enumerable: true,
get: function () { return trackerCore.buildConsentWithdrawn; }
});
Object.defineProperty(exports, 'buildEcommerceTransaction', {
enumerable: true,
get: function () { return trackerCore.buildEcommerceTransaction; }
});
Object.defineProperty(exports, 'buildEcommerceTransactionItem', {
enumerable: true,
get: function () { return trackerCore.buildEcommerceTransactionItem; }
});
Object.defineProperty(exports, 'buildFormFocusOrChange', {
enumerable: true,
get: function () { return trackerCore.buildFormFocusOrChange; }
});
Object.defineProperty(exports, 'buildFormSubmission', {
enumerable: true,
get: function () { return trackerCore.buildFormSubmission; }
});
Object.defineProperty(exports, 'buildLinkClick', {
enumerable: true,
get: function () { return trackerCore.buildLinkClick; }
});
Object.defineProperty(exports, 'buildPagePing', {
enumerable: true,
get: function () { return trackerCore.buildPagePing; }
});
Object.defineProperty(exports, 'buildPageView', {
enumerable: true,
get: function () { return trackerCore.buildPageView; }
});
Object.defineProperty(exports, 'buildRemoveFromCart', {
enumerable: true,
get: function () { return trackerCore.buildRemoveFromCart; }
});
Object.defineProperty(exports, 'buildScreenView', {
enumerable: true,
get: function () { return trackerCore.buildScreenView; }
});
Object.defineProperty(exports, 'buildSelfDescribingEvent', {
enumerable: true,
get: function () { return trackerCore.buildSelfDescribingEvent; }
});
Object.defineProperty(exports, 'buildSiteSearch', {
enumerable: true,
get: function () { return trackerCore.buildSiteSearch; }
});
Object.defineProperty(exports, 'buildSocialInteraction', {
enumerable: true,
get: function () { return trackerCore.buildSocialInteraction; }
});
Object.defineProperty(exports, 'buildStructEvent', {
enumerable: true,
get: function () { return trackerCore.buildStructEvent; }
});
Object.defineProperty(exports, 'version', {
enumerable: true,
get: function () { return trackerCore.version; }
});
exports.newTracker = newTracker;
//# sourceMappingURL=index.cjs.js.map