{"version":3,"file":"cxense.hmc_ld.min.js","sources":["../../src/helpers/createScript.js","../../src/helpers/logger.js","../../src/helpers/Storage.js","../../src/helpers/getCachedSegments.js","../../src/helpers/getLangIdFromUrl.js","../../src/helpers/getValueFromObjectList.js","../../src/helpers/UserSync.js","../../src/helpers/sha256.js","../../src/setup.js","../../src/helpers/getUserId.js","../../src/helpers/getConsent.js","../../src/helpers/apiAddExternalId.js","../../src/helpers/clean.js"],"sourcesContent":["const createScript = src =>\n new Promise((resolve, reject) => {\n const id = 'cx';\n\n if (typeof document === 'undefined' || document.getElementById(id)) {\n resolve();\n } else {\n const scriptTag = document.createElement('script');\n const node = document.getElementsByTagName('script')[0];\n scriptTag.src = src;\n scriptTag.id = id;\n scriptTag.onload = resolve;\n scriptTag.onerror = reject;\n scriptTag.async = true;\n node.parentNode.insertBefore(scriptTag, node);\n }\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';\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 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","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';\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 case 'static':\n objSplitted = obj.name.split(':');\n if (objSplitted.length > 1) {\n property = objSplitted[0];\n value = objSplitted[1];\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 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\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 // const url = `//ib.adnxs.com/seg?${keyvalues.join('&')}`;\n // fetch(url)\n // .then(log(response))\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 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","/* eslint-disable radix */\nimport createScript from './helpers/createScript';\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 getUserId from './helpers/getUserId';\nimport log from './helpers/logger';\nimport getConsent from './helpers/getConsent';\nimport apiAddExternalId from './helpers/apiAddExternalId';\nimport VideoPlayer from './adapters/VideoPlayer';\nimport sha256 from './helpers/sha256';\nimport clean from './helpers/clean';\n\nconst custom = { ...CUSTOM_CMP, ...CUSTOM_DMP };\nconst persist = PERSIST;\nconst cached = persist\n ? parseInt(Storage.get(persist.cache.name, persist.cache.type))\n : 0;\n\n/*\n0 new\n1 cached without eid\n2 cached with eid\n*/\n\nconst init = event => {\n const cxjs = CONVERSION\n ? 'https://cdn.cxense.com/cx.cce.js'\n : 'https://cdn.cxense.com/cx.js';\n const siteid = getLangIdFromUrl(CXENSE_SITE_ID);\n const prefix = PREFIX;\n const idPromise = getUserId();\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 Promise.allSettled([consent, idPromise])\n .then(result => {\n const c = result[0].value;\n const i = result[1].value;\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 if (CONVERSION) {\n window.cX.CCE = window.cX.CCE || {};\n window.cX.CCE.callQueue = window.cX.CCE.callQueue || [];\n }\n let location = window.location.href;\n\n // Single Page Application\n if (event) {\n window.cX.callQueue.push(['initializePage']);\n log('initializePage');\n // this is for goplay app\n if (event.detail !== 'undefined') {\n location = event.detail.url;\n }\n }\n\n // setSiteId\n window.cX.callQueue.push(['setSiteId', siteid]);\n\n if (USER) {\n // addExternalId\n if (i && cached !== 2) {\n const iCleaned = clean(i);\n window.cX.callQueue.push([\n 'addExternalId',\n { id: iCleaned, type: prefix },\n ]);\n if (custom.prefix && custom.queryid) {\n apiAddExternalId(i, custom.prefix, custom.queryid, !!custom.hash);\n }\n\n /*\n * ToDo: This Storage.set will be removed once the userId is passed into kaching from CUE.\n */\n Storage.set('AI', i || '', 'sessionStorage'); // set userID available for KaChing.\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 i // if externalID\n ? {\n identities: [\n {\n id: segment.hash ? sha256(i) : i,\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, 1, persist.cache.type);\n }\n\n // Send Page View Event\n if (window.location.pathname.match(FILTER)) {\n const options = {\n location,\n referrer: document.referrer,\n useAutoRefreshCheck: false,\n };\n CONVERSION\n ? window.cX.CCE.callQueue.push(['sendPageViewEvent', options])\n : window.cX.callQueue.push(['sendPageViewEvent', options]);\n }\n\n // Run CCE widget\n if (CONVERSION) {\n window.cX.CCE.callQueue.push(['run', CONVERSION]);\n }\n }\n\n return false;\n })\n .catch(() => {\n // do nothing\n });\n};\n\n// run on content reload\nif (TRIGGER) {\n const trigger = TRIGGER;\n\n // tell website this library is ready\n document.dispatchEvent(new CustomEvent(trigger.out));\n log(`sending '${trigger.out}' event`);\n // run this script as a pageview\n document.addEventListener(trigger.in, init);\n log(`listen to '${trigger.in}' for init`);\n // this is for logouts\n const clear = () => {\n Storage.del(persist.cache.name);\n log(`heard '${trigger.clear}' and cleared cache`);\n };\n // requested by Androme\n const close = () => {\n document.removeEventListener(trigger.in, init);\n document.removeEventListener(trigger.clear, clear);\n document.removeEventListener(trigger.close, close);\n log(`heard '${trigger.close}' and deafened`);\n };\n if (trigger.clear) {\n document.addEventListener(trigger.clear, clear);\n log(`listen to '${trigger.clear}' for cache clear`);\n }\n if (trigger.close) {\n document.addEventListener(trigger.close, close);\n log(`listen to '${trigger.close}' for cleanup`);\n }\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\n// SBS video events\nif (VIDEO) {\n const config = VIDEO;\n const player = new VideoPlayer(config, custom);\n player.listen();\n if (config.close) {\n log(`listen to '${config.close}' for cleanup player`);\n document.addEventListener(config.close, () => {\n log(`heard '${config.close}' and deafened player`);\n player.deafen();\n });\n }\n}\n","// import Storage from './Storage';\nimport log from './logger';\nimport getValueFromObjectList from './getValueFromObjectList';\n\nconst getUserId = () => {\n // start auth0 integration // place this to DMP-W\n let auth0Id;\n let ciamId;\n try {\n const auth0SdkId = window.__NEXT_DATA__.runtimeConfig.AUTH0_CLIENT_ID;\n if (auth0SdkId) {\n auth0Id = window.CIAM.getUserInfo(auth0SdkId)\n .then(result => result.sub)\n .catch(error => {\n log('Auth0-SDK Error: ', error);\n });\n }\n } catch (error) {\n log('getUserId: ', error);\n } finally {\n const eid = getValueFromObjectList(USER);\n ciamId = Promise.resolve(eid && eid.value ? eid.value : undefined); // CIAM ID\n }\n return auth0Id || ciamId;\n};\nexport default getUserId;\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","import log from './logger';\nimport sha256 from './sha256';\n\nconst apiAddExternalId = (id, type, pqid, hash) => {\n if (hash) {\n id = sha256(id);\n }\n window.cX.callQueue.push([\n 'invoke',\n () => {\n const apiUrl = `https://api.cxense.com/profile/user/external/link/update?callback={{callback}}&persisted=${encodeURIComponent(\n pqid\n )}&json=${encodeURIComponent(\n window.cX.JSON.stringify({\n id,\n type,\n cxid: window.cX.getUserId(),\n })\n )}`;\n window.cX.jsonpRequest(apiUrl);\n log(`perform profile/user/external/link/update with external id ${id}`);\n },\n ]);\n};\n\nexport default apiAddExternalId;\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 * Also \"|\" is allowed but Piano should be notified that this will be used as delimiter\n */\nconst clean = str => {\n const len = 64;\n\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"],"names":["log","Storage","getCachedSegments","k","rawSegmentIds","segmentIds","list","keys","length","filter","i","name","includes","forEach","key","get","type","concat","JSON","parse","value","window","localStorage","setItem","err","sessionStorage","getItem","removeItem","langIds","getValueFromObjectList","arr","find","el","obj","property","objSplitted","split","val","index","document","cookie","ca","decodeURIComponent","c","charAt","substring","indexOf","location","search","match","method","slice","pop","dataLayer","data","event","script","querySelector","getAttribute","UserSync","ssps","sendRequests","ssp","_getType","cX","callQueue","push","partner","_appNexusS2s","customerId","_facebook","sha256","id","seg","prefix","keyvalues","createElement","join","setAttribute","style","width","height","body","appendChild","fbq","setTimeout","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","custom","persist","cached","parseInt","cache","siteid","url","href","langs","Object","RegExp","exec","idPromise","auth0Id","auth0SdkId","__NEXT_DATA__","runtimeConfig","AUTH0_CLIENT_ID","CIAM","getUserInfo","then","sub","catch","error","eid","ciamId","Promise","resolve","undefined","consent","vendor","cmpName","vendorId","__tcfapi","parent","didomiOnReady","Didomi","getUserConsentStatusForVendor","grants","vendorGrant","__cmp","vendorConsents","allSettled","pqid","src","reject","scriptTag","node","getElementById","getElementsByTagName","onload","onerror","async","parentNode","insertBefore","shouldPoll","detail","iCleaned","replace","queryid","apiUrl","encodeURIComponent","stringify","cxid","getUserId","jsonpRequest","set","uid","user","segments","segment","getUserSegmentIds","persistedQueryId","callback","userSegmentIds","identities","pathname","options","referrer","useAutoRefreshCheck"],"mappings":"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"}