Skip to content

Commit

Permalink
Sirdata RTD Module : fix empty bidders param array bug & various opti…
Browse files Browse the repository at this point in the history
…mizations (#11367)

* fix empty params array bug & various optimizations

* Update sirdataRtdProvider.js
  • Loading branch information
nouchy authored Apr 22, 2024
1 parent a3ec0ee commit 3d23dfe
Showing 1 changed file with 33 additions and 43 deletions.
76 changes: 33 additions & 43 deletions modules/sirdataRtdProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,19 @@
* @module modules/sirdataRtdProvider
* @requires module:modules/realTimeData
*/
import {deepAccess, deepSetValue, isEmpty, logError, mergeDeep} from '../src/utils.js';
import {deepAccess, deepSetValue, isEmpty, logError, logInfo, mergeDeep} from '../src/utils.js';
import {submodule} from '../src/hook.js';
import {ajax} from '../src/ajax.js';
import {findIndex} from '../src/polyfill.js';
import {getRefererInfo} from '../src/refererDetection.js';
import {config} from '../src/config.js';
import {getGlobal} from '../src/prebidGlobal.js';

/** @type {string} */
const MODULE_NAME = 'realTimeData';
const SUBMODULE_NAME = 'SirdataRTDModule';
const ORTB2_NAME = 'sirdata.com';
const LOG_PREFIX = 'Sirdata RTD: ';

const partnerIds = {
'criteo': 27443,
Expand Down Expand Up @@ -63,28 +65,28 @@ const partnerIds = {
'zeta_global_ssp': 33385,
};

let CONTEXT_ONLY = true;

export function getSegmentsAndCategories(reqBidsConfigObj, onDone, moduleConfig, userConsent) {
logInfo(LOG_PREFIX, 'init');
moduleConfig.params = moduleConfig.params || {};

var tcString = (userConsent && userConsent.gdpr && userConsent.gdpr.consentString ? userConsent.gdpr.consentString : '');
var gdprApplies = (userConsent && userConsent.gdpr && userConsent.gdpr.gdprApplies ? userConsent.gdpr.gdprApplies : '');
let tcString = (userConsent && userConsent.gdpr && userConsent.gdpr.consentString ? userConsent.gdpr.consentString : '');
let gdprApplies = (userConsent && userConsent.gdpr && userConsent.gdpr.gdprApplies ? userConsent.gdpr.gdprApplies : '');

moduleConfig.params.partnerId = moduleConfig.params.partnerId ? moduleConfig.params.partnerId : 1;
moduleConfig.params.key = moduleConfig.params.key ? moduleConfig.params.key : 1;
moduleConfig.params.actualUrl = moduleConfig.params.actualUrl || null;

var sirdataDomain;
var sendWithCredentials;
let sirdataDomain;
let sendWithCredentials;

if (userConsent.coppa || (userConsent.usp && (userConsent.usp[0] == '1' && (userConsent.usp[1] == 'N' || userConsent.usp[2] == 'Y')))) {
if (userConsent.coppa || (userConsent.usp && (userConsent.usp[0] === '1' && (userConsent.usp[1] === 'N' || userConsent.usp[2] === 'Y')))) {
// if children or "Do not Sell" management in California, no segments, page categories only whatever TCF signal
sirdataDomain = 'cookieless-data.com';
sendWithCredentials = false;
gdprApplies = null;
tcString = '';
} else if (config.getConfig('consentManagement.gdpr')) {
// Default endpoint is cookieless if gdpr management is set. Needed because the cookie-based endpoint will fail and return error if user is located in Europe and no consent has been given
// Default endpoint for Contextual results only is cookieless if gdpr management is set. Needed because the cookie-based endpoint will fail and return error if user is located in Europe and no consent has been given
sirdataDomain = 'cookieless-data.com';
sendWithCredentials = false;
}
Expand All @@ -94,10 +96,9 @@ export function getSegmentsAndCategories(reqBidsConfigObj, onDone, moduleConfig,
if (!sirdataDomain || !gdprApplies || (deepAccess(userConsent, 'gdpr.vendorData.vendor.consents') && userConsent.gdpr.vendorData.vendor.consents[53] && userConsent.gdpr.vendorData.purpose.consents[1] && userConsent.gdpr.vendorData.purpose.consents[4])) {
sirdataDomain = 'sddan.com';
sendWithCredentials = true;
CONTEXT_ONLY = false;
}

var actualUrl = moduleConfig.params.actualUrl || getRefererInfo().stack.pop() || getRefererInfo().page;
let actualUrl = moduleConfig.params.actualUrl || getRefererInfo().stack.pop() || getRefererInfo().page;

const url = 'https://kvt.' + sirdataDomain + '/api/v1/public/p/' + moduleConfig.params.partnerId + '/d/' + moduleConfig.params.key + '/s?callback=&gdpr=' + gdprApplies + '&gdpr_consent=' + tcString + (actualUrl ? '&url=' + encodeURIComponent(actualUrl) : '');

Expand Down Expand Up @@ -169,7 +170,7 @@ export function setOrtb2Sda(ortb2Fragments, bidder, type, segments, segtaxValue)
if (segtaxValue) {
ortb2Data[0].ext = { segtax: segtaxValue };
}
let ortb2Conf = (type == 'site' ? {site: {content: {data: ortb2Data}}} : {user: {data: ortb2Data}});
let ortb2Conf = (type === 'site' ? {site: {content: {data: ortb2Data}}} : {user: {data: ortb2Data}});
if (bidder) {
ortb2Conf = {[bidder]: ortb2Conf};
}
Expand Down Expand Up @@ -218,7 +219,7 @@ export function getSegAndCatsArray(data, minScore, pid) {
if (data.contextual_categories.hasOwnProperty(catId) && data.contextual_categories[catId]) {
let value = data.contextual_categories[catId];
if (value >= minScore && sirdataData.categories.indexOf(catId) === -1) {
if (pid && cattaxid) {
if (pid && pid === '27440' && cattaxid) { // Equativ only
sirdataData.categories.push(pid.toString() + 'cc' + catId.toString());
} else {
sirdataData.categories.push(catId.toString());
Expand All @@ -236,15 +237,10 @@ export function getSegAndCatsArray(data, minScore, pid) {
for (let segId in data.segments) {
if (data.segments.hasOwnProperty(segId) && data.segments[segId]) {
let id = data.segments[segId].toString();
if (pid && CONTEXT_ONLY) {
if (segtaxid) {
sirdataData.categories.push(pid.toString() + 'uc' + id);
} else {
sirdataData.categories.push(id);
sirdataData.categories_score[id] = 100;
}
if (pid && pid === '27440' && segtaxid) { // Equativ only
sirdataData.segments.push(pid.toString() + 'us' + id);
} else {
sirdataData.segments.push((pid && segtaxid) ? pid.toString() + 'us' + id : id);
sirdataData.segments.push(id);
}
}
}
Expand All @@ -259,7 +255,7 @@ export function applySdaGetSpecificData(data, sirdataData, biddersParamsExist, m
// only share SDA data if whitelisted
if (!biddersParamsExist || indexFound) {
// SDA Publisher
let sirdataDataForSDA = getSegAndCatsArray(data, minScore, moduleConfig.params.partnerId);
let sirdataDataForSDA = getSegAndCatsArray(data, minScore, moduleConfig.params.partnerId.toString());
pushToOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, sirdataDataForSDA, data.segtaxid, data.cattaxid);
}

Expand All @@ -269,7 +265,7 @@ export function applySdaGetSpecificData(data, sirdataData, biddersParamsExist, m
// seller defined audience & bidder specific data
if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
// Get Bidder Specific Data
let curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore, curationId);
let curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore, curationId.toString());
pushToOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, curationData, data.shared_taxonomy[curationId].segtaxid, data.shared_taxonomy[curationId].cattaxid);
}
}
Expand All @@ -284,26 +280,19 @@ export function applySdaGetSpecificData(data, sirdataData, biddersParamsExist, m
}
}

export function applySdaAndDefaultSpecificData(data, sirdataData, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit) {
sirdataData = applySdaGetSpecificData(data, sirdataData, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
/*
if (sirdataData.segments && sirdataData.segments.length > 0) {
setOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, 'user.ext.data', {sd_rtd: sirdataData.segments});
}
if (sirdataData.categories && sirdataData.categories.length > 0) {
setOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, 'site.ext.data', {sd_rtd: sirdataData.categories});
export function addSegmentData(reqBids, data, moduleConfig, onDone) {
const adUnits = (reqBids && reqBids.adUnits) || getGlobal().adUnits;
if (!adUnits) {
onDone();
return;
}
*/
}

export function addSegmentData(reqBids, data, moduleConfig, onDone) {
const adUnits = reqBids.adUnits;
moduleConfig = moduleConfig || {};
moduleConfig.params = moduleConfig.params || {};
const globalMinScore = moduleConfig.params.hasOwnProperty('contextualMinRelevancyScore') ? moduleConfig.params.contextualMinRelevancyScore : 30;
var sirdataData = getSegAndCatsArray(data, globalMinScore, null);
let sirdataData = getSegAndCatsArray(data, globalMinScore, null);

const biddersParamsExist = (!!(moduleConfig.params && moduleConfig.params.bidders));
const biddersParamsExist = (!!(moduleConfig.params && moduleConfig.params.bidders && moduleConfig.params.bidders.length > 0));

// Global ortb2 SDA
if (data.global_taxonomy && !isEmpty(data.global_taxonomy)) {
Expand All @@ -320,10 +309,12 @@ export function addSegmentData(reqBids, data, moduleConfig, onDone) {
if (typeof window.googletag !== 'undefined' && (moduleConfig.params.setGptKeyValues || !moduleConfig.params.hasOwnProperty('setGptKeyValues'))) {
try {
let gptCurationId = (moduleConfig.params.gptCurationId ? moduleConfig.params.gptCurationId : (partnerIds['sdRtdForGpt'] ? partnerIds['sdRtdForGpt'] : null));
let sirdataMergedList = sirdataData.segments.concat(sirdataData.categories);
let sirdataMergedList = [];
if (gptCurationId && data.shared_taxonomy && data.shared_taxonomy[gptCurationId]) {
let gamCurationData = getSegAndCatsArray(data.shared_taxonomy[gptCurationId], globalMinScore, null);
sirdataMergedList = sirdataMergedList.concat(gamCurationData.segments).concat(gamCurationData.categories);
} else {
sirdataMergedList = sirdataData.segments.concat(sirdataData.categories);
}
window.googletag.cmd.push(function() {
window.googletag.pubads().getSlots().forEach(function (n) {
Expand All @@ -338,8 +329,8 @@ export function addSegmentData(reqBids, data, moduleConfig, onDone) {
}

// Bid targeting level for FPD non-generic biders
var bidderIndex = '';
var indexFound = false;
let bidderIndex = '';
let indexFound = false;

adUnits.forEach(adUnit => {
adUnit.hasOwnProperty('bids') && adUnit.bids.forEach(bid => {
Expand All @@ -349,7 +340,6 @@ export function addSegmentData(reqBids, data, moduleConfig, onDone) {
indexFound = (!!(typeof bidderIndex == 'number' && bidderIndex >= 0));
try {
let minScore = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('contextualMinRelevancyScore') ? moduleConfig.params.bidders[bidderIndex].contextualMinRelevancyScore : globalMinScore);

switch (bid.bidder) {
case 'appnexus':
case 'appnexusAst':
Expand Down Expand Up @@ -379,20 +369,20 @@ export function addSegmentData(reqBids, data, moduleConfig, onDone) {

default:
if (!biddersParamsExist || (indexFound && (!moduleConfig.params.bidders[bidderIndex].hasOwnProperty('adUnitCodes') || moduleConfig.params.bidders[bidderIndex].adUnitCodes.indexOf(adUnit.code) !== -1))) {
applySdaAndDefaultSpecificData(data, sirdataData, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
applySdaGetSpecificData(data, sirdataData, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
}
}
} catch (e) {
logError(e);
}
})
});

onDone();
return adUnits;
}

export function init(config) {
logInfo(LOG_PREFIX, config);
return true;
}

Expand Down

0 comments on commit 3d23dfe

Please sign in to comment.