From dd3ae50e6b51883ceed3898ab623cd66c16a4275 Mon Sep 17 00:00:00 2001 From: Aleksei Surovenko Date: Wed, 6 Dec 2023 15:21:45 +0100 Subject: [PATCH 1/5] add getTopics() --- modules/zeta_global_sspBidAdapter.js | 33 ++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/modules/zeta_global_sspBidAdapter.js b/modules/zeta_global_sspBidAdapter.js index db31791d86f..ab85cb87bd6 100644 --- a/modules/zeta_global_sspBidAdapter.js +++ b/modules/zeta_global_sspBidAdapter.js @@ -163,6 +163,7 @@ export const spec = { } provideEids(validBidRequests[0], payload); + provideTopics(payload); const url = params.sid ? ENDPOINT_URL.concat('?sid=', params.sid) : ENDPOINT_URL; return { method: 'POST', @@ -335,6 +336,27 @@ function provideEids(request, payload) { } } +function provideTopics(payload) { + const topics = getTopics(); + if (isArray(topics)) { + const segments = topics.filter(topic => topic?.topic).map(topic => { + return {id: String(topic.topic)}; + }); + if (segments.length > 0) { + if (!payload.user) { + payload.user = {}; + } + if (!isArray(payload.user.data)) { + payload.user.data = []; + } + const data = { + segment: segments + }; + payload.user.data.push(data); + } + } +} + function provideMediaType(zetaBid, bid, bidRequest) { if (zetaBid.ext && zetaBid.ext.prebid && zetaBid.ext.prebid.type) { bid.mediaType = zetaBid.ext.prebid.type === VIDEO ? VIDEO : BANNER; @@ -343,4 +365,15 @@ function provideMediaType(zetaBid, bid, bidRequest) { } } +function getTopics() { + try { + if ('browsingTopics' in document && document.featurePolicy.allowsFeature('browsing-topics')) { + return document.browsingTopics(); + } + return null; + } catch (error) { + return null; + } +} + registerBidder(spec); From cc89a689cdb3801b33835ebcb0929a4203b4d956 Mon Sep 17 00:00:00 2001 From: Aleksei Surovenko Date: Thu, 7 Dec 2023 12:30:33 +0100 Subject: [PATCH 2/5] provide get segments from ortb2 --- modules/zeta_global_sspBidAdapter.js | 23 ++++----------- .../modules/zeta_global_sspBidAdapter_spec.js | 28 ++++++++++++++++++- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/modules/zeta_global_sspBidAdapter.js b/modules/zeta_global_sspBidAdapter.js index ab85cb87bd6..93ea62654a4 100644 --- a/modules/zeta_global_sspBidAdapter.js +++ b/modules/zeta_global_sspBidAdapter.js @@ -163,7 +163,7 @@ export const spec = { } provideEids(validBidRequests[0], payload); - provideTopics(payload); + provideSegments(bidderRequest, payload); const url = params.sid ? ENDPOINT_URL.concat('?sid=', params.sid) : ENDPOINT_URL; return { method: 'POST', @@ -336,12 +336,10 @@ function provideEids(request, payload) { } } -function provideTopics(payload) { - const topics = getTopics(); - if (isArray(topics)) { - const segments = topics.filter(topic => topic?.topic).map(topic => { - return {id: String(topic.topic)}; - }); +function provideSegments(bidderRequest, payload) { + const data = bidderRequest.ortb2?.user?.data; + if (isArray(data)) { + const segments = data.filter(d => d?.segment).map(d => d.segment).filter(s => isArray(s)).flatMap(s => s); if (segments.length > 0) { if (!payload.user) { payload.user = {}; @@ -365,15 +363,4 @@ function provideMediaType(zetaBid, bid, bidRequest) { } } -function getTopics() { - try { - if ('browsingTopics' in document && document.featurePolicy.allowsFeature('browsing-topics')) { - return document.browsingTopics(); - } - return null; - } catch (error) { - return null; - } -} - registerBidder(spec); diff --git a/test/spec/modules/zeta_global_sspBidAdapter_spec.js b/test/spec/modules/zeta_global_sspBidAdapter_spec.js index d4fe28eff90..17e37881942 100644 --- a/test/spec/modules/zeta_global_sspBidAdapter_spec.js +++ b/test/spec/modules/zeta_global_sspBidAdapter_spec.js @@ -124,7 +124,24 @@ describe('Zeta Ssp Bid Adapter', function () { uspConsent: 'someCCPAString', params: params, userIdAsEids: eids, - timeout: 500 + timeout: 500, + ortb2: { + user: { + data: [ + { + ext: { + segtax: 600, + segclass: 'classifier_v1' + }, + segment: [ + { id: '3' }, + { id: '44' }, + { id: '59' } + ] + } + ] + } + } }]; const bannerWithFewSizesRequest = [{ @@ -606,4 +623,13 @@ describe('Zeta Ssp Bid Adapter', function () { expect(bidResponse[0].ad).to.eql(zetaResponse.body.seatbid[0].bid[0].adm); expect(bidResponse[0].vastXml).to.be.undefined; }); + + it('Test provide segments into the request', function () { + const request = spec.buildRequests(bannerRequest, bannerRequest[0]); + const payload = JSON.parse(request.data); + expect(payload.user.data.segment.length).to.eql(3); + expect(payload.user.data.segment[0].id).to.eql('3'); + expect(payload.user.data.segment[1].id).to.eql('44'); + expect(payload.user.data.segment[2].id).to.eql('59'); + }); }); From 76ff5460ac28e36c4b86900ab625fb4acff4dfd3 Mon Sep 17 00:00:00 2001 From: Aleksei Surovenko Date: Thu, 7 Dec 2023 12:33:57 +0100 Subject: [PATCH 3/5] rename const --- modules/zeta_global_sspBidAdapter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/zeta_global_sspBidAdapter.js b/modules/zeta_global_sspBidAdapter.js index 93ea62654a4..c2045606964 100644 --- a/modules/zeta_global_sspBidAdapter.js +++ b/modules/zeta_global_sspBidAdapter.js @@ -347,10 +347,10 @@ function provideSegments(bidderRequest, payload) { if (!isArray(payload.user.data)) { payload.user.data = []; } - const data = { + const payloadData = { segment: segments }; - payload.user.data.push(data); + payload.user.data.push(payloadData); } } } From d4624101ad44644d402512db61d74e81c0ce1a92 Mon Sep 17 00:00:00 2001 From: Aleksei Surovenko Date: Thu, 7 Dec 2023 12:35:58 +0100 Subject: [PATCH 4/5] additional check --- modules/zeta_global_sspBidAdapter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/zeta_global_sspBidAdapter.js b/modules/zeta_global_sspBidAdapter.js index c2045606964..0c5db541286 100644 --- a/modules/zeta_global_sspBidAdapter.js +++ b/modules/zeta_global_sspBidAdapter.js @@ -339,7 +339,7 @@ function provideEids(request, payload) { function provideSegments(bidderRequest, payload) { const data = bidderRequest.ortb2?.user?.data; if (isArray(data)) { - const segments = data.filter(d => d?.segment).map(d => d.segment).filter(s => isArray(s)).flatMap(s => s); + const segments = data.filter(d => d?.segment).map(d => d.segment).filter(s => isArray(s)).flatMap(s => s).filter(s => s?.id); if (segments.length > 0) { if (!payload.user) { payload.user = {}; From f0b3cebfdb81e4b9156f09979afd5df77d1c6748 Mon Sep 17 00:00:00 2001 From: Aleksei Surovenko Date: Mon, 11 Dec 2023 12:15:12 +0100 Subject: [PATCH 5/5] fix test --- test/spec/modules/zeta_global_sspBidAdapter_spec.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/spec/modules/zeta_global_sspBidAdapter_spec.js b/test/spec/modules/zeta_global_sspBidAdapter_spec.js index 17e37881942..9ef97019a98 100644 --- a/test/spec/modules/zeta_global_sspBidAdapter_spec.js +++ b/test/spec/modules/zeta_global_sspBidAdapter_spec.js @@ -627,9 +627,9 @@ describe('Zeta Ssp Bid Adapter', function () { it('Test provide segments into the request', function () { const request = spec.buildRequests(bannerRequest, bannerRequest[0]); const payload = JSON.parse(request.data); - expect(payload.user.data.segment.length).to.eql(3); - expect(payload.user.data.segment[0].id).to.eql('3'); - expect(payload.user.data.segment[1].id).to.eql('44'); - expect(payload.user.data.segment[2].id).to.eql('59'); + expect(payload.user.data[0].segment.length).to.eql(3); + expect(payload.user.data[0].segment[0].id).to.eql('3'); + expect(payload.user.data[0].segment[1].id).to.eql('44'); + expect(payload.user.data[0].segment[2].id).to.eql('59'); }); });