From 3013a00fed095074b2dde4b583643d2445a183d0 Mon Sep 17 00:00:00 2001 From: naripok Date: Thu, 18 May 2023 13:58:54 -0300 Subject: [PATCH 1/6] fix: user data setting method --- modules/airgridRtdProvider.js | 38 ++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/modules/airgridRtdProvider.js b/modules/airgridRtdProvider.js index 6af53a9094a..2f62c9b1e53 100644 --- a/modules/airgridRtdProvider.js +++ b/modules/airgridRtdProvider.js @@ -10,6 +10,7 @@ import { submodule } from '../src/hook.js'; import { deepSetValue, deepAccess, + mergeDeep, } from '../src/utils.js'; import { getGlobal } from '../src/prebidGlobal.js'; import { getStorageManager } from '../src/storageManager.js'; @@ -82,26 +83,39 @@ function setAudiencesToAppNexusAdUnits(adUnits, audiences) { * Pass audience data to configured bidders, using ORTB2 * @param {Object} rtdConfig * @param {Array} audiences - * @return {{}} a map from bidder code to ORTB2 config + * @return {void} */ -export function setAudiencesAsBidderOrtb2(rtdConfig, audiences) { +export function setAudiencesAsBidderOrtb2(bidConfig, rtdConfig, audiences) { const bidders = deepAccess(rtdConfig, 'params.bidders'); if (!bidders || bidders.length === 0 || !audiences || audiences.length === 0) return; - const keywords = audiences.map( + const agOrtb2 = {}; + + const agKeywords = audiences.map( (audienceId) => `perid=${audienceId}` ).join(','); + deepSetValue(agOrtb2, 'ortb2.user.keywords', agKeywords); - config.mergeBidderConfig({ - bidders: bidders, - config: { - ortb2: { - site: { - keywords, + // Is this correct? + const agUserData = [ + { + id: AG_TCF_ID, // Not sure of this value + name: 'airgrid', // Not sure of this value + segment: [ + { + id: 'perid', // Not sure of this value + name: 'perid', // Not sure of this value + value: audiences, } - } + ] } - }) + ] + deepSetValue(agOrtb2, 'ortb2.user.data', agUserData); + + const bidderConfig = Object.fromEntries( + bidders.map((bidder) => [bidder, agOrtb2]) + ) + mergeDeep(bidConfig?.ortb2Fragments?.bidder, bidderConfig) } export function setAudiencesUsingAppNexusAuctionKeywords(audiences) { @@ -141,7 +155,7 @@ export function passAudiencesToBidders( const audiences = getMatchedAudiencesFromStorage(); if (audiences.length > 0) { setAudiencesUsingAppNexusAuctionKeywords(audiences); - setAudiencesAsBidderOrtb2(rtdConfig, audiences) + setAudiencesAsBidderOrtb2(bidConfig, rtdConfig, audiences) if (adUnits) { setAudiencesToAppNexusAdUnits(adUnits, audiences); } From 8754ee5dd28193aa88df244ecb2c9412d9c932a9 Mon Sep 17 00:00:00 2001 From: naripok Date: Thu, 18 May 2023 13:58:54 -0300 Subject: [PATCH 2/6] fix: user data setting method --- modules/airgridRtdProvider.js | 39 ++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/modules/airgridRtdProvider.js b/modules/airgridRtdProvider.js index 6af53a9094a..0a1ac369441 100644 --- a/modules/airgridRtdProvider.js +++ b/modules/airgridRtdProvider.js @@ -10,6 +10,7 @@ import { submodule } from '../src/hook.js'; import { deepSetValue, deepAccess, + mergeDeep, } from '../src/utils.js'; import { getGlobal } from '../src/prebidGlobal.js'; import { getStorageManager } from '../src/storageManager.js'; @@ -80,28 +81,42 @@ function setAudiencesToAppNexusAdUnits(adUnits, audiences) { /** * Pass audience data to configured bidders, using ORTB2 + * @param {Object} bidConfig * @param {Object} rtdConfig * @param {Array} audiences - * @return {{}} a map from bidder code to ORTB2 config + * @return {void} */ -export function setAudiencesAsBidderOrtb2(rtdConfig, audiences) { +export function setAudiencesAsBidderOrtb2(bidConfig, rtdConfig, audiences) { const bidders = deepAccess(rtdConfig, 'params.bidders'); if (!bidders || bidders.length === 0 || !audiences || audiences.length === 0) return; - const keywords = audiences.map( + const agOrtb2 = {}; + + const agKeywords = audiences.map( (audienceId) => `perid=${audienceId}` ).join(','); + deepSetValue(agOrtb2, 'ortb2.user.keywords', agKeywords); - config.mergeBidderConfig({ - bidders: bidders, - config: { - ortb2: { - site: { - keywords, + // Is this correct? + const agUserData = [ + { + id: AG_TCF_ID, // Not sure of this value + name: 'airgrid', // Not sure of this value + segment: [ + { + id: 'perid', // Not sure of this value + name: 'perid', // Not sure of this value + value: audiences, } - } + ] } - }) + ] + deepSetValue(agOrtb2, 'ortb2.user.data', agUserData); + + const bidderConfig = Object.fromEntries( + bidders.map((bidder) => [bidder, agOrtb2]) + ) + mergeDeep(bidConfig?.ortb2Fragments?.bidder, bidderConfig) } export function setAudiencesUsingAppNexusAuctionKeywords(audiences) { @@ -141,7 +156,7 @@ export function passAudiencesToBidders( const audiences = getMatchedAudiencesFromStorage(); if (audiences.length > 0) { setAudiencesUsingAppNexusAuctionKeywords(audiences); - setAudiencesAsBidderOrtb2(rtdConfig, audiences) + setAudiencesAsBidderOrtb2(bidConfig, rtdConfig, audiences) if (adUnits) { setAudiencesToAppNexusAdUnits(adUnits, audiences); } From 3a93061b610def5a1373036fb259239b7d418c01 Mon Sep 17 00:00:00 2001 From: naripok Date: Mon, 22 May 2023 15:43:07 -0300 Subject: [PATCH 3/6] fix: remove `ortb2` path prefix from configs and fix segment spec --- modules/airgridRtdProvider.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/airgridRtdProvider.js b/modules/airgridRtdProvider.js index 0a1ac369441..ca90bd976ab 100644 --- a/modules/airgridRtdProvider.js +++ b/modules/airgridRtdProvider.js @@ -95,23 +95,23 @@ export function setAudiencesAsBidderOrtb2(bidConfig, rtdConfig, audiences) { const agKeywords = audiences.map( (audienceId) => `perid=${audienceId}` ).join(','); - deepSetValue(agOrtb2, 'ortb2.user.keywords', agKeywords); + deepSetValue(agOrtb2, 'user.keywords', agKeywords); // Is this correct? const agUserData = [ { id: AG_TCF_ID, // Not sure of this value name: 'airgrid', // Not sure of this value - segment: [ - { + segment: audiences.map((audienceId) => { + return { id: 'perid', // Not sure of this value name: 'perid', // Not sure of this value - value: audiences, - } - ] + value: audienceId, + }; + }) } ] - deepSetValue(agOrtb2, 'ortb2.user.data', agUserData); + deepSetValue(agOrtb2, 'user.data', agUserData); const bidderConfig = Object.fromEntries( bidders.map((bidder) => [bidder, agOrtb2]) From 5eae6c440dbc465d8f29894b19c47954a0ede682 Mon Sep 17 00:00:00 2001 From: naripok Date: Mon, 22 May 2023 15:44:19 -0300 Subject: [PATCH 4/6] fix: add missing bidders config to `pbjs.setConfig` in integration example --- integrationExamples/gpt/airgridRtdProvider_example.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/integrationExamples/gpt/airgridRtdProvider_example.html b/integrationExamples/gpt/airgridRtdProvider_example.html index 657eae8f481..511b93acee1 100644 --- a/integrationExamples/gpt/airgridRtdProvider_example.html +++ b/integrationExamples/gpt/airgridRtdProvider_example.html @@ -59,6 +59,7 @@ apiKey: "key123", accountId: "sdk", publisherId: "pub123", + bidders: ["appnexus", "pubmatic"], }, }, ], @@ -108,7 +109,7 @@ var gads = document.createElement("script"); gads.async = true; gads.type = "text/javascript"; - gads.src = 'https://securepubads.g.doubleclick.net/tag/js/gpt.js'; + gads.src = "https://securepubads.g.doubleclick.net/tag/js/gpt.js"; var node = document.getElementsByTagName("script")[0]; node.parentNode.insertBefore(gads, node); })(); From 26f0274cb760a7002d76a8c332754157673ec5e8 Mon Sep 17 00:00:00 2001 From: naripok Date: Mon, 22 May 2023 15:46:28 -0300 Subject: [PATCH 5/6] fix: use string for user.data[].id --- modules/airgridRtdProvider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/airgridRtdProvider.js b/modules/airgridRtdProvider.js index ca90bd976ab..5afc45f54c7 100644 --- a/modules/airgridRtdProvider.js +++ b/modules/airgridRtdProvider.js @@ -100,7 +100,7 @@ export function setAudiencesAsBidderOrtb2(bidConfig, rtdConfig, audiences) { // Is this correct? const agUserData = [ { - id: AG_TCF_ID, // Not sure of this value + id: String(AG_TCF_ID), // Not sure of this value name: 'airgrid', // Not sure of this value segment: audiences.map((audienceId) => { return { From e0398e7046b12adb7afd146b70674957e3b444d1 Mon Sep 17 00:00:00 2001 From: naripok Date: Mon, 22 May 2023 15:54:29 -0300 Subject: [PATCH 6/6] fix: use audienceId and audience name for segment data --- modules/airgridRtdProvider.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/airgridRtdProvider.js b/modules/airgridRtdProvider.js index 5afc45f54c7..4544775b058 100644 --- a/modules/airgridRtdProvider.js +++ b/modules/airgridRtdProvider.js @@ -100,12 +100,12 @@ export function setAudiencesAsBidderOrtb2(bidConfig, rtdConfig, audiences) { // Is this correct? const agUserData = [ { - id: String(AG_TCF_ID), // Not sure of this value - name: 'airgrid', // Not sure of this value + id: String(AG_TCF_ID), + name: 'airgrid', segment: audiences.map((audienceId) => { return { - id: 'perid', // Not sure of this value - name: 'perid', // Not sure of this value + id: audienceId, + name: `audience_${audienceId}`, value: audienceId, }; })