{"version":3,"file":"cxense.walfoot.min.js","sources":["../../src/helpers/createScript.js","../../src/helpers/logger.js","../../src/helpers/getValueFromObjectList.js","../../src/helpers/getCachedSegments.js","../../src/helpers/sha256.js","../../src/helpers/getLangIdFromUrl.js","../../src/helpers/Storage.js","../../src/helpers/UserSync.js","../../src/setup.js","../../src/helpers/clean.js","../../src/helpers/getConsent.js"],"sourcesContent":["const createScript = src =>\n new Promise((resolve, reject) => {\n if (typeof document === 'undefined') {\n resolve();\n }\n\n const scriptTag = document.createElement('script');\n const node = document.getElementsByTagName('script')[0];\n scriptTag.src = src;\n scriptTag.onload = resolve;\n scriptTag.onerror = reject;\n scriptTag.async = true;\n node.parentNode.insertBefore(scriptTag, node);\n });\n\nexport default createScript;\n","/* global process */\n\n/**\n * Simple console.log function for not production builds\n *\n */\nconst log = (...args) => {\n if (process.env.NODE_ENV !== 'production') {\n const stack = String(new Error().stack).split('\\n');\n let column = '';\n let lineNumber = '';\n if (stack.length >= 2) {\n const matches = stack[2].match(/(\\d+):(\\d+)\\)?$/);\n if (matches && matches.length >= 3) {\n lineNumber = matches[1];\n column = matches[2];\n }\n }\n\n const limit = 150;\n\n if (args[0].length > limit) {\n args[0] = `${args[0].substring(0, limit)}...`;\n }\n\n /* eslint-disable no-console */\n console.log(\n '%cCxense',\n 'display: inline-block; color: #fff; background: #3bc388; padding: 1px 4px; border-radius: 3px;',\n ...args,\n `L: ${lineNumber}, C: ${column}`\n );\n /* eslint-enable no-console */\n }\n};\n\nexport default log;\n","import log from './logger';\nimport Storage from './Storage';\n\nconst getValueFromObjectList = (arr = []) => {\n const getValue = obj => {\n let objSplitted;\n let value = null;\n let property = obj.name;\n switch (obj.type) {\n case 'object':\n objSplitted = obj.name.split('.');\n property = objSplitted[objSplitted.length - 1];\n value = window[objSplitted[0]];\n objSplitted.forEach((val, index) => {\n if (index > 0) {\n try {\n value = value[objSplitted[index]];\n } catch (err) {\n log(err);\n }\n }\n });\n break;\n case 'localStorage':\n value = Storage.get(obj.name, 'localStorage');\n objSplitted = obj.name.split('.');\n property = objSplitted[objSplitted.length - 1];\n break;\n case 'cookie':\n if (document.cookie && obj.name) {\n const name = `${obj.name}=`;\n const decodedCookie = decodeURIComponent(document.cookie);\n const ca = decodedCookie.split(';');\n for (let i = 0; i < ca.length; i += 1) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1);\n }\n if (c.indexOf(name) === 0) {\n value = c.substring(name.length, c.length);\n }\n }\n }\n break;\n case 'url':\n value = document.location.search;\n if (value) {\n value = value.match(`[\\\\?&]${obj.name}=([^\\\\?&]+)`);\n value ? (value = value[1]) : (value = null);\n property = obj.name;\n }\n break;\n case 'method': {\n objSplitted = obj.name.split('.');\n property = objSplitted[objSplitted.length - 1];\n const method = objSplitted\n .slice(-1)[0]\n .match(/(.*)\\(\\\\?'?([^\\\\']*)\\\\?'?\\)/);\n value = window[objSplitted[0]];\n objSplitted.pop(); // last element can be removed as it is not an object\n objSplitted.forEach((val, index) => {\n if (index > 0) {\n value = value[objSplitted[index]];\n }\n });\n value = value[method[1]](method[2]);\n break;\n }\n case 'datalayer':\n value = window.dataLayer.find(data => data.event === 'pageview')[\n obj.name\n ];\n break;\n case 'dataAttribute':\n try {\n const script = document.querySelector(`script[${obj.name}]`);\n value = script && script.getAttribute(obj.name);\n } catch (err) {\n log(err);\n }\n break;\n default:\n // do nothing\n }\n\n // we are allready logging in the Storage class\n if (obj.type !== 'localStorage') {\n log(`get ${obj.name}=${value} from ${obj.type}`);\n }\n\n return [value, property];\n };\n\n return arr.find(el => {\n const [value, property] = getValue(el);\n el.value = value;\n el.property = property;\n\n return value !== null;\n });\n};\n\nexport default getValueFromObjectList;\n","import Storage from './Storage';\nimport log from './logger';\n\nconst getCachedSegments = (k = []) => {\n let rawSegmentIds;\n let segmentIds = [];\n let keys;\n const list = PERSIST.segments;\n\n // if no argument, we use all the segment keys\n k.length ? (keys = list.filter(i => i.name.includes(k))) : (keys = list);\n\n keys.forEach(key => {\n rawSegmentIds = Storage.get(key.name, key.type);\n rawSegmentIds\n ? (segmentIds = segmentIds.concat(JSON.parse(rawSegmentIds)))\n : log(`segment key ${key.name} not found in ${key.type}`);\n });\n\n return segmentIds;\n};\n\nexport default getCachedSegments;\n","/* eslint-disable no-multi-assign */\n/* eslint-disable no-bitwise */\nconst sha256 = ascii => {\n const rightRotate = (value, amount) =>\n (value >>> amount) | (value << (32 - amount));\n\n const mathPow = Math.pow;\n const maxWord = mathPow(2, 32);\n const lengthProperty = 'length';\n let i; // Used as a counter across the whole file\n let j; // Used as a counter across the whole file\n let result = '';\n\n const words = [];\n const asciiBitLength = ascii[lengthProperty] * 8;\n\n //* caching results is optional - remove/add slash from front of this line to toggle\n // Initial hash value: first 32 bits of the fractional parts of the square roots of the first 8 primes\n // (we actually calculate the first 64, but extra values are just ignored)\n let hash = (sha256.h = sha256.h || []);\n // Round constants: first 32 bits of the fractional parts of the cube roots of the first 64 primes\n const k = (sha256.k = sha256.k || []);\n let primeCounter = k[lengthProperty];\n\n /* /\n\tvar hash = [], k = [];\n\tvar primeCounter = 0;\n\t//*/\n\n const isComposite = {};\n for (let candidate = 2; primeCounter < 64; candidate += 1) {\n if (!isComposite[candidate]) {\n for (i = 0; i < 313; i += candidate) {\n isComposite[i] = candidate;\n }\n hash[primeCounter] = (mathPow(candidate, 0.5) * maxWord) | 0;\n k[primeCounter] = (mathPow(candidate, 1 / 3) * maxWord) | 0;\n primeCounter += 1;\n }\n }\n\n ascii += '\\x80'; // Append Ƈ' bit (plus zero padding)\n while (ascii[lengthProperty] % 64 - 56) ascii += '\\x00'; // More zero padding\n for (i = 0; i < ascii[lengthProperty]; i += 1) {\n j = ascii.charCodeAt(i);\n if (j >> 8) return; // ASCII check: only accept characters in range 0-255\n words[i >> 2] |= j << (((3 - i) % 4) * 8);\n }\n words[words[lengthProperty]] = (asciiBitLength / maxWord) | 0;\n words[words[lengthProperty]] = asciiBitLength;\n\n // process each chunk\n for (j = 0; j < words[lengthProperty]; ) {\n const w = words.slice(j, (j += 16)); // The message is expanded into 64 words as part of the iteration\n const oldHash = hash;\n // This is now the undefinedworking hash\", often labelled as variables a...g\n // (we have to truncate as well, otherwise extra entries at the end accumulate\n hash = hash.slice(0, 8);\n\n for (i = 0; i < 64; i += 1) {\n // eslint-disable-next-line no-unused-vars\n const i2 = i + j;\n // Expand the message into 64 words\n // Used below if\n const w15 = w[i - 15];\n const w2 = w[i - 2];\n\n // Iterate\n const a = hash[0];\n const e = hash[4];\n const temp1 =\n hash[7] +\n (rightRotate(e, 6) ^ rightRotate(e, 11) ^ rightRotate(e, 25)) + // S1\n ((e & hash[5]) ^ (~e & hash[6])) + // ch\n k[i] +\n // Expand the message schedule if needed\n (w[i] =\n i < 16\n ? w[i]\n : (w[i - 16] +\n (rightRotate(w15, 7) ^ rightRotate(w15, 18) ^ (w15 >>> 3)) + // s0\n w[i - 7] +\n (rightRotate(w2, 17) ^ rightRotate(w2, 19) ^ (w2 >>> 10))) | // s1\n 0);\n // This is only used once, so *could* be moved below, but it only saves 4 bytes and makes things unreadble\n const temp2 =\n (rightRotate(a, 2) ^ rightRotate(a, 13) ^ rightRotate(a, 22)) + // S0\n ((a & hash[1]) ^ (a & hash[2]) ^ (hash[1] & hash[2])); // maj\n\n hash = [(temp1 + temp2) | 0].concat(hash); // We don't bother trimming off the extra ones, they're harmless as long as we're truncating when we do the slice()\n hash[4] = (hash[4] + temp1) | 0;\n }\n\n for (i = 0; i < 8; i += 1) {\n hash[i] = (hash[i] + oldHash[i]) | 0;\n }\n }\n\n for (i = 0; i < 8; i += 1) {\n for (j = 3; j + 1; j -= 1) {\n const b = (hash[i] >> (j * 8)) & 255;\n result += (b < 16 ? 0 : '') + b.toString(16);\n }\n }\n // eslint-disable-next-line consistent-return\n return result;\n};\n\nexport default sha256;\n","const getLangIdFromUrl = langIds => {\n if (typeof langIds !== 'object') {\n return langIds;\n }\n\n const url = document.location.href;\n // we only look up the lang codes in the URL from the settings file\n const langs = Object.keys(langIds).join('|');\n // template literal: /(\\/|=)(fr|nl|en)(\\/|#|\\.|\\?|$)/g\n // works on \"https://www.mediahuis.be/fr/detailpage\" or \"https://fr.mediahuis.be\"\n const regex = new RegExp(`(/|=)(${langs})(/|#|\\\\.|\\\\?|$)`, 'gi');\n const result = regex.exec(url);\n\n return result ? langIds[result[2]] : langIds[Object.keys(langIds)[0]];\n};\n\nexport default getLangIdFromUrl;\n","import log from './logger';\n\n/**\n * This class sets, gets and deletes entries\n * in localStorage and sessionStorage.\n */\n\nclass Storage {\n static set = (key, value, type) => {\n if (type === 'localStorage') {\n if (window.localStorage && window.localStorage.setItem) {\n try {\n window.localStorage.setItem(key, value);\n log(`set ${key}=${value} to local storage`);\n } catch (err) {\n log(`unable to set ${key} to local storage`);\n log(err);\n }\n }\n } else if (type === 'sessionStorage') {\n if (window.sessionStorage && window.sessionStorage.setItem) {\n try {\n window.sessionStorage.setItem(key, value);\n log(`set ${key}=${value} to session storage`);\n } catch (err) {\n log(`unable to set ${key} to session storage`);\n log(err);\n }\n }\n }\n\n return null;\n };\n static get = (key, type) => {\n let value;\n if (type === 'localStorage') {\n if (window.localStorage && window.localStorage.getItem) {\n try {\n value = window.localStorage.getItem(key);\n log(`get ${key}=${value} from local storage`);\n } catch (err) {\n log(`unable to get ${key} from local storage`);\n log(err);\n }\n }\n } else if (type === 'sessionStorage') {\n if (window.sessionStorage && window.sessionStorage.setItem) {\n try {\n value = window.sessionStorage.getItem(key);\n log(`get ${key}=${value} from session storage`);\n } catch (err) {\n log(`unable to get ${key} from session storage`);\n log(err);\n }\n }\n }\n\n return value;\n };\n static del = (key, type) => {\n if (type === 'localStorage') {\n if (window.localStorage && window.localStorage.removeItem) {\n try {\n window.localStorage.removeItem(key);\n log(`delete ${key} from local storage`);\n } catch (err) {\n log(`unable to delete ${key} from local storage`);\n log(err);\n }\n }\n } else if (type === 'sessionStorage') {\n if (window.sessionStorage && window.sessionStorage.removeItem) {\n try {\n window.sessionStorage.removeItem(key);\n log(`delete ${key} from session storage`);\n } catch (err) {\n log(`unable to delete ${key} from session storage`);\n log(err);\n }\n }\n }\n\n return null;\n };\n}\n\nexport default Storage;\n","import getCachedSegments from '../helpers/getCachedSegments';\nimport log from '../helpers/logger';\n\n/**\n * handles string and objects containing SSP configuration\n * for either client or server user syncing\n */\n\nclass UserSync {\n constructor(ssps) {\n this.ssps = ssps;\n }\n\n static _getType = ssp => {\n let type;\n if (typeof ssp === 'string') {\n type = 's2s';\n } else if (typeof ssp === 'object' && ssp.type) {\n type = ssp.type;\n }\n\n return type;\n };\n\n sendRequests() {\n this.ssps.forEach(ssp => {\n if (UserSync._getType(ssp) === 's2s') {\n window.cX.callQueue.push(['sync', ssp]);\n log(`add usersync for ${ssp.partner ? ssp.partner : ssp} to queue`);\n } else {\n const keys = ssp.keys || [];\n switch (ssp.partner) {\n case 'appnexus':\n UserSync._appNexusS2s(ssp.customerId, getCachedSegments(keys));\n break;\n case 'facebook':\n UserSync._facebook(ssp.customerId, getCachedSegments(keys));\n break;\n default:\n }\n }\n });\n }\n\n static _appNexusS2s = (id, seg) => {\n if (seg.length > 0) {\n const el = document.createElement('img');\n const prefix = 'cxsegment_';\n const keyvalues = [];\n keyvalues.push(`add_Code=${prefix}${seg.join(`,${prefix}`)}`);\n keyvalues.push(`member=${id}`);\n el.setAttribute('src', `//ib.adnxs.com/seg?${keyvalues.join('&')}`);\n el.setAttribute('width', '1');\n el.setAttribute('height', '1');\n el.style.width = '1px';\n el.style.height = '1px';\n if (document.body) document.body.appendChild(el);\n }\n };\n\n static _facebook = (id, seg) => {\n let syncAttempts = 1;\n\n try {\n // fbq ignores long arrays\n const chunk = 80;\n let i = 0;\n\n for (i; i < seg.length; i += chunk) {\n window.fbq('trackSingleCustom', id, 'CxSegments', {\n segmentIds: seg.slice(i, i + chunk),\n });\n }\n log('adding segments to fbq object done');\n } catch (err) {\n if (syncAttempts <= 4) {\n setTimeout(() => {\n UserSync._facebook(id, seg);\n }, 200);\n log(`Waiting on Facebook pixel, try: ${syncAttempts} of 4`);\n syncAttempts += 1;\n } else {\n // continue without fbq sync\n }\n }\n };\n}\n\nexport default UserSync;\n","/* eslint-disable radix */\nimport createScript from './helpers/createScript';\nimport getValueFromObjectList from './helpers/getValueFromObjectList';\nimport getAllKeyValues from './helpers/getAllKeyValues';\nimport getLangIdFromUrl from './helpers/getLangIdFromUrl';\nimport getRegioFromCookie from './helpers/getRegioFromCookie';\nimport funnelEvents from './adapters/funnelEvents';\nimport intentEvents from './adapters/intentEvents';\nimport nativeArticleReads from './adapters/nativeArticleReads';\nimport Storage from './helpers/Storage';\nimport UserSync from './helpers/UserSync';\nimport clean from './helpers/clean';\nimport log from './helpers/logger';\nimport getConsent from './helpers/getConsent';\nimport apiAddExternalId from './helpers/apiAddExternalId';\nimport THEOplayersTracker from './adapters/THEOplayersTracker';\nimport sha256 from './helpers/sha256';\n\nconst custom = { ...CUSTOM_CMP, ...CUSTOM_DMP };\n\nconst init = e => {\n const cxjs = 'https://cdn.cxense.com/cx.js';\n const siteid = getLangIdFromUrl(CXENSE_SITE_ID);\n const prefix = PREFIX;\n const persist = PERSIST;\n const eid = getValueFromObjectList(USER);\n const id = eid && eid.value ? clean(eid.value) : false;\n const cached = persist\n ? parseInt(Storage.get(persist.cache.name, persist.cache.type))\n : 0;\n\n /*\n 0 new\n 1 cached without eid\n 2 cached with eid\n */\n\n // block all if we don't have consent\n const consent =\n custom.name && custom.vendor\n ? getConsent(custom.name, custom.vendor)\n : Promise.resolve(true);\n\n consent\n .then(c => {\n log(`consent ${c} for ${custom.vendor} in ${custom.name}`);\n if (c) {\n // initialize\n window.cX = window.cX || CXINIT;\n createScript(cxjs);\n window.cX.shouldPoll = false;\n window.cX.callQueue = window.cX.callQueue || [];\n\n // Single Page Application\n if (e) {\n window.cX.callQueue.push(['initializePage']);\n }\n\n // setSiteId\n window.cX.callQueue.push(['setSiteId', siteid]);\n\n if (USER) {\n // addExternalId\n if (id && cached !== 2) {\n window.cX.callQueue.push(['addExternalId', { id, type: prefix }]);\n if (custom.prefix && custom.queryid) {\n apiAddExternalId(\n id,\n custom.prefix,\n custom.queryid,\n !!custom.hash\n );\n }\n }\n }\n\n if (CUSTOM) {\n // setCustomParameters\n const cp = getAllKeyValues(CUSTOM);\n if (cp) {\n window.cX.callQueue.push(['setCustomParameters', cp]);\n }\n }\n\n // async actions which require the cX to be ready\n window.cX.callQueue.push([\n 'invoke',\n () => {\n // start invoke\n // query string parameters to fetch from the URL\n if (URLARGS) {\n const urlArgs = window.cX.parseUrlArgs();\n const allowed = URLARGS;\n\n const cp = Object.keys(urlArgs)\n .filter(key => allowed.includes(key))\n .reduce((obj, key) => {\n obj[key] = urlArgs[key];\n return obj;\n }, {});\n\n window.cX.setCustomParameters(cp);\n }\n // end invoke\n },\n ]);\n\n // next 3 adapters use a default pqid from MH\n if (MH_SHOP)\n // webshop events\n funnelEvents();\n\n if (INTENT)\n // intent events (Audience Interest Group)\n intentEvents();\n\n // deprecated after Nativo migration\n if (MH_ARTICLE_READ)\n // native article reads\n nativeArticleReads();\n\n if (MH_REGIO) {\n // regio box on popular MH titles\n const pc = getRegioFromCookie();\n if (pc) {\n window.cX.callQueue.push([\n 'setUserProfileParameters',\n { regiobox: [pc] },\n ]);\n }\n }\n\n // stuff that needs to be stored so it can be reused in adserving\n if (PERSIST) {\n if (SYNC) {\n if (!cached) {\n const u = new UserSync(SYNC);\n u.sendRequests();\n }\n }\n\n window.cX.callQueue.push([\n 'invoke',\n () => {\n // register userid in localStorage\n const uid = window.cX.getUserId();\n Storage.set(persist.user.name, uid, persist.user.type);\n persist.segments.forEach(segment => {\n // register segmentids in localStorage\n try {\n window.cX.getUserSegmentIds(\n {\n persistedQueryId: segment.queryid,\n callback: userSegmentIds => {\n Storage.set(\n segment.name,\n JSON.stringify(userSegmentIds),\n segment.type\n );\n },\n },\n id // if externalID\n ? {\n identities: [\n {\n id: segment.hash ? sha256(id) : id,\n type: segment.prefix ? segment.prefix : prefix,\n }, // overwrite default prefix?\n ],\n }\n : {}\n );\n } catch (err) {\n log(`unable to get userSegmentIds from API`);\n log(err);\n }\n });\n },\n ]);\n // use cache flag to perform some actions only once per session\n Storage.set(persist.cache.name, id ? 2 : 1, persist.cache.type);\n }\n\n // Send Page View Event\n if (window.location.pathname.match(FILTER)) {\n window.cX.callQueue.push([\n 'sendPageViewEvent',\n {\n location: window.location.href,\n referrer: document.referrer,\n useAutoRefreshCheck: false,\n },\n ]);\n }\n }\n\n return false;\n })\n .catch(() => {\n // do nothing\n });\n};\n\n// run on content reload\nif (TRIGGER) {\n const eventIn = TRIGGER.in;\n const eventOut = TRIGGER.out;\n\n // tell website this library is ready\n document.dispatchEvent(new CustomEvent(eventOut));\n log(`dispatching '${eventOut}' event`);\n // run this script as a pageview\n document.addEventListener(eventIn, init);\n log(`waiting for '${eventIn}' event to initialize`);\n}\n\n// run on every onload/refresh for non-SPA or hybrid SPA\nif (!TRIGGER || TRIGGER.hybrid) {\n log(`init`);\n init(false);\n\n // SBS video events with Drupal info\n // outside of init(), don't want to run more then once\n if (SBS_VIDEO) {\n const p = new THEOplayersTracker(custom);\n p.listenPlayerReady();\n }\n}\n","/*\n * @see https://wiki.cxense.com/display/cust/Event+data\n * Limitation: The maximum allowed identifier length is 64 characters.\n * The valid characters in customer identifiers are digits (0 to 9), \n * characters A to Z, a to z, space \n * and the special characters \"=\", \"@\", \"+\", \"-\", \"_\" and \".\".\n */\nconst clean = str => {\n const len = 64;\n str = str.replace(/[^A-Za-z0-9 =@+\\-_.]/g, '');\n str = str.substring(0, len);\n\n return str;\n};\n\nexport default clean;\n","/* eslint-disable no-restricted-globals */\nimport log from './logger';\n\nconst getConsent = (cmpName, vendorId) => {\n let consent;\n const __tcfapi = window.__tcfapi;\n switch (cmpName) {\n case 'didomi':\n consent = new Promise(resolve => {\n const w = parent.window;\n w.didomiOnReady = w.didomiOnReady || [];\n w.didomiOnReady.push(() => {\n consent = w.Didomi.getUserConsentStatusForVendor(vendorId);\n resolve(consent);\n });\n });\n break;\n case 'liveramp':\n consent = new Promise(resolve => {\n __tcfapi(\n 'checkConsent',\n 2,\n data => {\n resolve(data);\n },\n { data: [{ vendorId }] }\n );\n });\n break;\n case 'sourcepoint':\n consent = new Promise(resolve => {\n __tcfapi('getCustomVendorConsents', 2, data => {\n resolve(!!data.grants[vendorId].vendorGrant);\n });\n });\n break;\n // case 'quantcast':\n // consent = new Promise(resolve => {\n // __tcfapi('addEventListener', 2, () => {\n // __tcfapi('getNonIABVendorConsents', 2, (data, success) => {\n // if (success) resolve(data.nonIabVendorConsents[vendorId]);\n // });\n // });\n // });\n // break;\n case 'consentmanager':\n consent = new Promise(resolve => {\n window.__cmp(\n 'addEventListener',\n [\n 'consent',\n () => resolve(window.__cmp('getCMPData').vendorConsents[vendorId]),\n false,\n ],\n null\n );\n });\n break;\n default:\n consent = Promise.resolve(false);\n log(`unknown CMP, check settings`);\n }\n\n return consent;\n};\n\nexport default getConsent;\n"],"names":["log","getValueFromObjectList","arr","find","el","obj","value","property","name","type","objSplitted","split","length","window","forEach","val","index","err","Storage","get","document","cookie","ca","decodeURIComponent","i","c","charAt","substring","indexOf","location","search","match","method","slice","pop","dataLayer","data","event","script","querySelector","getAttribute","getCachedSegments","k","rawSegmentIds","segmentIds","list","keys","filter","includes","key","concat","JSON","parse","sha256","ascii","j","rightRotate","amount","mathPow","Math","pow","maxWord","lengthProperty","result","words","asciiBitLength","hash","h","primeCounter","isComposite","candidate","charCodeAt","w","oldHash","w15","w2","a","e","temp1","b","toString","langIds","UserSync","localStorage","setItem","sessionStorage","getItem","removeItem","ssps","sendRequests","ssp","_getType","cX","callQueue","push","partner","_appNexusS2s","customerId","_facebook","custom","id","seg","prefix","keyvalues","createElement","join","setAttribute","style","width","height","body","appendChild","fbq","setTimeout","siteid","url","href","langs","Object","RegExp","exec","persist","eid","replace","parseInt","cache","vendor","cmpName","vendorId","consent","__tcfapi","Promise","resolve","parent","didomiOnReady","Didomi","getUserConsentStatusForVendor","grants","vendorGrant","__cmp","vendorConsents","then","src","reject","scriptTag","node","getElementsByTagName","onload","onerror","async","parentNode","insertBefore","shouldPoll","uid","getUserId","set","user","segments","segment","getUserSegmentIds","persistedQueryId","queryid","callback","userSegmentIds","stringify","identities","pathname","referrer","useAutoRefreshCheck","catch"],"mappings":"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"}