UNPKG

tracking-params

Version:

Easily get and remove unwanted tracking parameters from URLs.

130 lines (114 loc) 4.27 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); // Map URLSearchParams to [ key, value ][] var paramsToEntries = function paramsToEntries(params) { var _params = {}; params.forEach(function (value, key) { _params[key] = value; }); return Object.entries(_params); }; var UNIVERSAL_PARAMS = ['__twitter_impression', '_hsenc', '_openstat', 'action_object_map', 'action_ref_map', 'action_type_map', 'adgroupid', 'amp', 'campaignid', 'CNDID', 'fb_action_ids', 'fb_action_types', 'fb_ref', 'fb_source', 'fbclid', 'feeditemid', 'ga_campaign', 'ga_content', 'ga_medium', 'ga_place', 'ga_source', 'ga_term', 'gclid', 'gs_l', 'hmb_campaign', 'hmb_medium', 'hmb_source', 'mbid', 'mc_cid', 'mc_eid', 'mkt_tok', /pd_rd\w+/, /pf_rd\w+/, 'referrer', 'spJobID', 'spMailingID', 'spReportId', 'spUserID', /utm_\w+/, 'wt_mc_o', 'WT.mc_ev', 'WT.mc_id', 'WT.srch', 'yclid']; var DOMAIN_PARAMS = [{ domain: '.', params: UNIVERSAL_PARAMS }, { domain: 'amazon', params: ['_encoding', 'creative', 'creativeASIN', 'dchild', 'ie', 'linkCode', 'linkId', 'orig', 'psc', 'qid', 'ref', 'refRID', 'sr', 'tag'], handler: function handler(url) { // Remove /ref=abc at end of url path var refPathMatch = /ref=\w+/; var newUrl = new URL(url.toString()); var matches = newUrl.pathname.match(refPathMatch); if (!(matches == null ? void 0 : matches.length)) { return; } var startIndex = newUrl.pathname.indexOf(matches[0]); newUrl.pathname = newUrl.pathname.substring(0, startIndex); var newParams = [{ key: 'ref', value: url.pathname.substring(startIndex + 4) }]; return { newCleanUrl: newUrl.toString(), newParams: newParams }; } }, { domain: 'bing', params: ['cvid', 'form', 'pq', 'qs', 'sc', 'sk', 'sp'] }, { domain: 'google', params: ['ei', 'gws_rd', 'sei', 'ved'] }, { domain: 'instagram', params: ['igshid'] }, { domain: 'nytimes', params: ['emc', 'partner'] }, { domain: 'reddit', params: ['context', 'ref', 'ref_source', 'st'] }, { domain: 'twitter', params: ['vertical', 'src', 's', 'ref_src', 'ref_url'] }, { domain: 'youtube', params: ['ab_channel', 'attr_tag', 'feature', 'kw'] }]; var getTrackingData = function getTrackingData(dirtyUrl) { var urlObj = new URL(dirtyUrl); var urlData = { url: dirtyUrl, isDirty: false, trackingParams: [], cleanUrl: dirtyUrl }; // Skip checks if no params if (!urlObj.searchParams.toString().length) { return urlData; } // Loop through domains to find a match // If domain match, loop through params // If param match: // 1. Set `isDirty` to true // 2. Add `trackingParams` entry // 3. Set `cleanUrl` as url with that param removed DOMAIN_PARAMS.forEach(function (domainParams) { // Check for domain match if (urlObj.hostname.includes(domainParams.domain)) { // Copy params to array so they can be freely deleted from urlObj var urlParams = paramsToEntries(urlObj.searchParams); urlParams.forEach(function (_ref) { var key = _ref[0], value = _ref[1]; domainParams.params.forEach(function (badParam) { // Check for param key match var match = typeof badParam === 'string' ? key === badParam : badParam.test(key); if (match) { urlData.isDirty = true; urlData.trackingParams.push({ key: key, value: value }); urlObj.searchParams["delete"](key); urlData.cleanUrl = urlObj.toString(); } }); }); // Run domain specific handler to further clean URL if (typeof domainParams.handler === 'function') { var moreInfo = domainParams.handler(urlObj); if (moreInfo) { var _urlData$trackingPara; (_urlData$trackingPara = urlData.trackingParams).push.apply(_urlData$trackingPara, moreInfo.newParams); urlData.cleanUrl = moreInfo.newCleanUrl; } } } }); return urlData; }; var cleanUrl = function cleanUrl(dirtyUrl) { return getTrackingData(dirtyUrl).cleanUrl; }; exports.cleanUrl = cleanUrl; exports.getTrackingData = getTrackingData; //# sourceMappingURL=tracking-params.cjs.development.js.map