diff --git a/libraries/intentIqConstants/intentIqConstants.js b/libraries/intentIqConstants/intentIqConstants.js index 6bcf994d2b4..432ea6ff6a4 100644 --- a/libraries/intentIqConstants/intentIqConstants.js +++ b/libraries/intentIqConstants/intentIqConstants.js @@ -9,7 +9,7 @@ export const BLACK_LIST = "L"; export const CLIENT_HINTS_KEY = "_iiq_ch"; export const EMPTY = "EMPTY"; export const GVLID = "1323"; -export const VERSION = 0.33; +export const VERSION = 0.35; export const PREBID = "pbjs"; export const HOURS_24 = 86400000; export const HOURS_72 = HOURS_24 * 3; diff --git a/libraries/intentIqUtils/setPPID.js b/libraries/intentIqUtils/setPPID.js new file mode 100644 index 00000000000..00ee3f5283f --- /dev/null +++ b/libraries/intentIqUtils/setPPID.js @@ -0,0 +1,27 @@ +import {isPlainObject} from '../../src/utils.js'; + +export function setPPID({ runtimeEids, gamObjectReference, shouldSetPPID, isBlacklisted }) { + if (isBlacklisted) return; + if (!shouldSetPPID) return; + + if (!isPlainObject(gamObjectReference) || !gamObjectReference.cmd) return; + + const eids = runtimeEids?.eids; + if (!Array.isArray(eids) || !eids.length) return; + + const iiqBlock = eids.find(e => e?.source === 'intentiq.com'); + const uids = iiqBlock?.uids; + if (!Array.isArray(uids) || !uids.length) return; + + let ppuid; + for (const uid of uids) { + if (uid?.ext?.stype === 'ppuid' && typeof uid.id === 'string' && uid.id) { + ppuid = uid.id; + } + } + if (!ppuid) return; + + gamObjectReference.cmd.push(() => { + gamObjectReference.pubads().setPublisherProvidedId(ppuid); + }); +} diff --git a/modules/intentIqIdSystem.js b/modules/intentIqIdSystem.js index 054afe82371..505acb7b828 100644 --- a/modules/intentIqIdSystem.js +++ b/modules/intentIqIdSystem.js @@ -11,6 +11,7 @@ import { submodule } from '../src/hook.js' import { detectBrowser } from '../libraries/intentIqUtils/detectBrowserUtils.js'; import { appendSPData } from '../libraries/intentIqUtils/urlUtils.js'; import { isCHSupported } from '../libraries/intentIqUtils/chUtils.js' +import { setPPID } from '../libraries/intentIqUtils/setPPID.js' import { appendVrrefAndFui } from '../libraries/intentIqUtils/getRefferer.js'; import { getCmpData } from '../libraries/intentIqUtils/getCmpData.js'; import { readData, storeData, defineStorageType, removeDataByKey, tryParse } from '../libraries/intentIqUtils/storageUtils.js'; @@ -297,21 +298,12 @@ export const intentIqIdSubmodule = { getId(config) { const configParams = (config?.params) || {}; - const firePartnerCallback = () => { - if (configParams.callback && !callbackFired) { - callbackFired = true; - if (callbackTimeoutID) clearTimeout(callbackTimeoutID); - let data = runtimeEids; - if (data?.eids?.length === 1 && typeof data.eids[0] === 'string') data = data.eids[0]; - configParams.callback(data); - } - updateGlobalObj() - } - if (typeof configParams.partner !== 'number') { logError('User ID - intentIqId submodule requires a valid partner to be defined'); - firePartnerCallback() - return; + if (configParams.callback) { + configParams.callback({ eids: [] }); + } + return { id: [] }; } initializeGlobalIIQ(configParams.partner) @@ -328,6 +320,7 @@ export const intentIqIdSubmodule = { sourceMetaDataExternal = isNumber(configParams.sourceMetaDataExternal) ? configParams.sourceMetaDataExternal : undefined; const additionalParams = configParams.additionalParams ? configParams.additionalParams : undefined; const chTimeout = Number(configParams?.chTimeout) >= 0 ? Number(configParams.chTimeout) : 10; + const shouldSetPPID = configParams?.shouldSetPPID ? configParams.shouldSetPPID : false; PARTNER_DATA_KEY = `${FIRST_PARTY_KEY}_${configParams.partner}`; const allowedStorage = defineStorageType(config.enabledStorageTypes); @@ -345,6 +338,18 @@ export const intentIqIdSubmodule = { const isBlacklisted = browserBlackList?.includes(currentBrowserLowerCase); let newUser = false; + const firePartnerCallback = () => { + if (configParams.callback && !callbackFired) { + callbackFired = true; + if (callbackTimeoutID) clearTimeout(callbackTimeoutID); + setPPID({ runtimeEids, gamObjectReference, shouldSetPPID, isBlacklisted }); + let data = runtimeEids; + if (data?.eids?.length === 1 && typeof data.eids[0] === 'string') data = data.eids[0]; + configParams.callback(data); + } + updateGlobalObj() + } + setGamReporting(gamObjectReference, gamParameterName, actualABGroup, isBlacklisted); if (groupChanged) groupChanged(actualABGroup, partnerData?.terminationCause);