{"version":3,"file":"cxense.goplay.min.js","sources":["../../src/helpers/createScript.js","../../src/helpers/logger.js","../../src/helpers/getValue.js","../../src/adapters/videoEvents.js","../../src/helpers/sendEvent.js","../../src/helpers/segmentSyncs.js","../../src/helpers/Storage.js","../../src/helpers/getValueFromObjectList.js","../../src/helpers/sha256.js","../../src/helpers/getCachedSegments.js","../../src/helpers/addUserIds.js","../../src/setup.js","../../src/helpers/getAllKeyValues.js","../../src/helpers/addExternalIds.js","../../src/helpers/cookieSyncs.js","../../src/helpers/getSegments.js","../../src/helpers/getLangIdFromUrl.js","../../src/helpers/asyncAddUserId.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';\nimport Storage from './Storage';\n\nconst getValue = obj => {\n let split;\n let value = null;\n let key = obj.name;\n switch (obj.type) {\n case 'object':\n split = obj.name.split('.');\n key = split[split.length - 1];\n value = window[split[0]];\n split.forEach((val, index) => {\n if (index > 0) {\n try {\n value = value[split[index]];\n } catch (err) {\n log(err);\n }\n }\n });\n break;\n case 'localStorage':\n value = Storage.get(obj.name, 'localStorage');\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 }\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 split = obj.name.split(':');\n if (split.length > 1) {\n key = split[0];\n value = split[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 { key, value };\n};\n\nexport default getValue;\n","import sendEvent from '../helpers/sendEvent';\n\nconst videoEvents = () => {\n const convert = event => ({\n /* eslint-disable camelcase */\n data_nodeId: event.page.page_id || '0',\n data_videoType: event.video.video_type,\n data_videoAd: event.event === 'ad_begin' ? 1 : '0',\n data_creativeId: event.ad.ad_id || '0',\n data_videoDuration: event.video.video_duration || '0',\n data_videoPosition: event.video.video_position || '0',\n data_videoVolume: event.video.video_player_volume || '0',\n data_videoMuted: event.video.video_player_volume !== 0 ? 1 : '0',\n data_videoFullscreen: event.video.video_view_mode,\n /* eslint-enable camelcase */\n });\n const eventMap = [\n 'video_play',\n 'video_ended',\n 'ad_break_begin',\n 'ad_break_end',\n 'ad_begin',\n 'ad_end',\n ];\n const originalPush = window.dataLayer.push;\n\n window.dataLayer.push = function(...args) {\n originalPush.apply(window.dataLayer, args);\n\n const event = args[0];\n if (event && eventMap.includes(event.event)) {\n sendEvent(event.event, convert(event));\n }\n };\n};\n\nexport default videoEvents;\n","/**\n * @module helpers/sendEvent\n * Pushes data to cX\n */\n\nimport log from './logger';\n\nconst sendEvent = (type, data) => {\n DMP.forEach(dmp => {\n if (dmp.push) {\n window.cX = window.cX || {};\n window.cX.callQueue = window.cX.callQueue || [];\n window.cX.callQueue.push([\n 'sendEvent',\n type,\n data,\n {\n origin: `${dmp.prefix}-${dmp.push.origin}`,\n persistedQueryId: dmp.push.queryid,\n },\n ]);\n log(`push ${type} to ${dmp.prefix}`);\n }\n });\n};\n\nexport default sendEvent;\n","import log from './logger';\nimport getCachedSegments from './getCachedSegments';\n\nconst segmentSyncs = dmps => {\n // TODO: check if we could enrich the dmp object instead\n // and get the segment directly instead of storage\n // but with he callqueue, not sure if they are retrieved\n // before the cX.sync\n const _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 const _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 } catch (err) {\n if (syncAttempts <= 4) {\n setTimeout(() => {\n _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 dmps.forEach(dmp => {\n dmp.segments.forEach(segment => {\n if (segment.syncs) {\n segment.syncs.forEach(sync => {\n switch (sync.partner) {\n case 'appnexus':\n _appNexusS2s(\n sync.customerId,\n getCachedSegments(segment.name, segment.type)\n );\n break;\n case 'facebook':\n _facebook(\n sync.customerId,\n getCachedSegments(segment.name, segment.type)\n );\n break;\n default:\n }\n log(\n `add segmentsync for ${sync.partner} (${sync.customerId}) with ${\n segment.name\n } to queue`\n );\n });\n }\n });\n });\n};\n\nexport default segmentSyncs;\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 getValue from './getValue';\n\nconst getValueFromObjectList = (arr = []) =>\n arr.find(el => {\n const obj = getValue(el);\n el.value = obj.value;\n el.property = obj.key;\n\n return obj.value !== null;\n });\n\nexport default getValueFromObjectList;\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","import Storage from './Storage';\nimport log from './logger';\n\nconst getCachedSegments = (name, type) => {\n // becomes redundant when sending them from enriched object\n // example: DMP[0].parsedSegments\n let segmentIds = [];\n\n const rawSegmentIds = Storage.get(name, type);\n rawSegmentIds\n ? (segmentIds = segmentIds.concat(JSON.parse(rawSegmentIds)))\n : log(`segment key ${name} not found in ${type}`);\n\n return segmentIds;\n};\n\nexport default getCachedSegments;\n","import getValue from './getValue';\nimport sha256 from './sha256';\nimport log from './logger';\n\nconst addUserIds = dmps => {\n if (!dmps) dmps = [];\n let parsedId = {};\n let parsedIds = [];\n\n const clean = str => {\n // @see https://docs.piano.io/event-data/\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\n if (dmps.length) {\n dmps.forEach(dmp => {\n dmp.ids.forEach(id => {\n parsedId = getValue(id);\n if (parsedId.value) {\n parsedId = {\n ...parsedId,\n value: id.hash ? sha256(parsedId.value) : clean(parsedId.value),\n prefix: id.prefix ? id.prefix : dmp.prefix,\n };\n parsedIds.push(parsedId);\n }\n });\n dmp.parsedIds = parsedIds;\n parsedIds = [];\n });\n } else {\n log('Warning: no DMP defined, configuring empty one');\n }\n\n return dmps;\n};\nexport default addUserIds;\n","/* eslint-disable promise/always-return */\n/* eslint-disable promise/catch-or-return */\n/* eslint-disable promise/no-nesting */\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 Storage from './helpers/Storage';\nimport addUserIds from './helpers/addUserIds';\nimport asyncAddUserId from './helpers/asyncAddUserId';\nimport log from './helpers/logger';\nimport addExternalIds from './helpers/addExternalIds';\nimport getSegments from './helpers/getSegments';\nimport videoEvents from './adapters/videoEvents';\nimport cookieSyncs from './helpers/cookieSyncs';\nimport segmentSyncs from './helpers/segmentSyncs';\n\nconst dmps = addUserIds(DMP);\n// temp async hack\nconst idPromise = asyncAddUserId(dmps);\nconst cXContext = { dmp: undefined, loaded: false, resolveTrigger: undefined };\nconst triggerPromise = new Promise(resolve => {\n cXContext.resolveTrigger = resolve;\n});\nconst persist = PERSIST;\nconst cached = persist\n ? parseInt(Storage.get(persist.cache.name, persist.cache.type))\n : 0;\nconst cxjs = CONVERSION\n ? 'https://cdn.cxense.com/cx.cce.js'\n : 'https://cdn.cxense.com/cx.js';\nconst siteid = getLangIdFromUrl(CXENSE_SITE_ID);\n\n// init cx.js\nwindow.cX = window.cX || CXINIT;\ncreateScript(cxjs);\nwindow.cX.shouldPoll = false;\nwindow.cX.callQueue = window.cX.callQueue || [];\nif (CONVERSION) {\n window.cX.CCE = window.cX.CCE || {};\n window.cX.CCE.callQueue = window.cX.CCE.callQueue || [];\n}\n\nconst fire = (dmp, event) => {\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) {\n location = event.detail.url;\n }\n }\n\n // setSiteId\n window.cX.callQueue.push(['setSiteId', siteid]);\n\n addExternalIds(dmp);\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 (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 // TODO: DMP is a dependency of PERSIST, should be merged in 1 object\n if (PERSIST) {\n if (!cached) {\n cookieSyncs(SYNC);\n segmentSyncs(dmp);\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 getSegments(dmp);\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\nidPromise\n .then(dmp => {\n cXContext.dmp = dmp;\n if (TRIGGER) {\n const trigger = TRIGGER;\n triggerPromise.then(() => {\n cXContext.loaded = true;\n fire(dmp);\n });\n // tell website this library is ready\n document.dispatchEvent(new CustomEvent(trigger.out));\n log(`sending '${trigger.out}' event`);\n }\n if (!TRIGGER || TRIGGER.hybrid) {\n log(`fire`);\n fire(dmp, false);\n }\n // SBS video events\n if (VIDEO) {\n videoEvents();\n }\n return false;\n })\n .catch();\n\n// run on content reload\nif (TRIGGER) {\n const trigger = TRIGGER;\n\n const cb = () => {\n if (cXContext.loaded) {\n fire(cXContext.dmp);\n } else {\n cXContext.resolveTrigger();\n }\n };\n // run this script as a pageview\n document.addEventListener(trigger.in, cb);\n log(`listen to '${trigger.in}' for fire`);\n\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, cb);\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","import getValueFromObjectList from './getValueFromObjectList';\n\nconst getAllKeyValues = args => {\n const keyValue = {};\n let tmp;\n let customParameters;\n\n args.forEach(item => {\n // change getValueFromObjectList: each item used instead of fallback logic\n tmp = getValueFromObjectList([item]);\n // tmp = { property: page_secure, value: false }\n if (tmp) {\n // keyValue = { page_secure: false }\n keyValue[tmp.property] = tmp.value;\n customParameters = { ...customParameters, ...keyValue };\n }\n });\n\n return customParameters;\n};\n\nexport default getAllKeyValues;\n","import log from './logger';\n\nconst addExternalIds = dmps => {\n dmps.forEach(dmp => {\n // Check and assign default values if necessary\n if (!dmp.prefix) {\n log('ERROR: dmp.prefix is not defined'); // TODO make actual console log error\n }\n\n if (dmp.parsedIds) {\n dmp.parsedIds.forEach(pid => {\n window.cX.callQueue.push([\n 'addExternalId',\n { id: pid.value, type: pid.prefix },\n ]);\n log(`add externalId ${pid.value} on ${pid.prefix}`);\n });\n }\n });\n};\n\nexport default addExternalIds;\n","import log from './logger';\n\nconst cookieSyncs = ssps => {\n ssps.forEach(ssp => {\n window.cX.callQueue.push(['sync', ssp]);\n log(`add cookiesync for ${ssp.partner ? ssp.partner : ssp} to queue`);\n });\n};\n\nexport default cookieSyncs;\n","import Storage from './Storage';\nimport log from './logger';\nimport sha256 from './sha256';\n\n// syncronous function because we should be called from 'invoke' callqueue\nconst getSegments = dmps => {\n dmps.forEach(dmp => {\n let identities = [];\n\n dmp.parsedIds.forEach(pid => {\n identities.push({\n id: pid.hash ? sha256(pid.value) : pid.value,\n type: pid.prefix,\n });\n });\n\n dmp.segments.forEach(segment => {\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 identities.length ? { identities } : {}\n );\n log(`stored ${segment.name} with identity ${JSON.stringify(identities)}`);\n identities = [];\n });\n });\n};\n\nexport default getSegments;\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\nconst asyncAddUserId = dmp => {\n let newDmp;\n if (\n dmp &&\n dmp.length &&\n dmp[0].ids &&\n dmp[0].ids[0] &&\n dmp[0].ids[0].type &&\n dmp[0].ids[0].type === 'auth0'\n ) {\n try {\n const auth0SdkId = window.__NEXT_DATA__.runtimeConfig.AUTH0_CLIENT_ID;\n newDmp = window.CIAM.getUserInfo(auth0SdkId)\n .then(result => {\n dmp[0].parsedIds.push({ key: 'auth0', value: result.sub });\n return dmp;\n })\n .catch(error => {\n log('Auth0-SDK Error: ', error);\n });\n } catch (error) {\n log(error);\n }\n } else {\n newDmp = Promise.resolve(dmp);\n }\n return newDmp;\n};\nexport default asyncAddUserId;\n"],"names":["log","getValue","obj","split","value","key","name","type","length","window","forEach","val","index","err","Storage","get","document","cookie","ca","decodeURIComponent","i","c","charAt","substring","indexOf","location","search","match","script","querySelector","getAttribute","videoEvents","eventMap","originalPush","dataLayer","push","args","apply","data","event","includes","data_nodeId","page","page_id","data_videoType","video","video_type","data_videoAd","data_creativeId","ad","ad_id","data_videoDuration","video_duration","data_videoPosition","video_position","data_videoVolume","video_player_volume","data_videoMuted","data_videoFullscreen","video_view_mode","dmp","cX","callQueue","origin","prefix","persistedQueryId","queryid","segmentSyncs","dmps","_facebook","id","seg","fbq","segmentIds","slice","setTimeout","segments","segment","syncs","sync","partner","customerId","getCachedSegments","el","createElement","keyvalues","join","setAttribute","style","width","height","body","appendChild","getValueFromObjectList","localStorage","setItem","sessionStorage","getItem","removeItem","arr","find","property","sha256","ascii","j","rightRotate","amount","mathPow","Math","pow","maxWord","lengthProperty","result","words","asciiBitLength","hash","h","k","primeCounter","isComposite","candidate","charCodeAt","w","oldHash","w15","w2","a","e","temp1","concat","b","toString","rawSegmentIds","JSON","parse","parsedId","parsedIds","ids","replace","fire","tmp","customParameters","keyValue","href","detail","url","siteid","pid","item","cp","cached","ssp","uid","getUserId","set","persist","user","identities","getUserSegmentIds","callback","userSegmentIds","stringify","cache","pathname","options","referrer","useAutoRefreshCheck","cb","cXContext","loaded","resolveTrigger","clear","del","trigger","close","removeEventListener","in","langIds","src","idPromise","auth0SdkId","__NEXT_DATA__","runtimeConfig","AUTH0_CLIENT_ID","newDmp","CIAM","getUserInfo","then","sub","catch","error","Promise","resolve","undefined","triggerPromise","parseInt","langs","Object","keys","RegExp","exec","reject","scriptTag","node","getElementById","getElementsByTagName","onload","onerror","async","parentNode","insertBefore","shouldPoll","dispatchEvent","CustomEvent","addEventListener"],"mappings":"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"}