From 94d1207d17836f56b08fddc45a090260bc7836f0 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko Date: Tue, 27 Jun 2023 15:02:03 +0400 Subject: [PATCH 1/5] EX-4755 Add: forwarding of auction id and transaction id as transaction ids for source and impression objects in the request --- modules/sovrnBidAdapter.js | 9 ++++++++ test/spec/modules/sovrnBidAdapter_spec.js | 26 +++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index f21c4d1752a..802a8c12af4 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -137,6 +137,12 @@ export const spec = { imp.ext = getBidIdParameter('ext', bid.ortb2Imp) || undefined + const transactionId = getBidIdParameter('transactionId', bid) || undefined + if (transactionId) { + imp.ext = imp.ext || {} + imp.ext.tid = transactionId + } + const segmentsString = getBidIdParameter('segments', bid.params) if (segmentsString) { imp.ext = imp.ext || {} @@ -169,6 +175,9 @@ export const spec = { }; } + const auctionId = deepAccess(bidderRequest, 'auctionId') + deepSetValue(sovrnBidReq, 'source.tid', auctionId) + if (bidderRequest.gdprConsent) { deepSetValue(sovrnBidReq, 'regs.ext.gdpr', +bidderRequest.gdprConsent.gdprApplies); deepSetValue(sovrnBidReq, 'user.ext.consent', bidderRequest.gdprConsent.consentString) diff --git a/test/spec/modules/sovrnBidAdapter_spec.js b/test/spec/modules/sovrnBidAdapter_spec.js index c84013d1963..376a24987ae 100644 --- a/test/spec/modules/sovrnBidAdapter_spec.js +++ b/test/spec/modules/sovrnBidAdapter_spec.js @@ -183,6 +183,32 @@ describe('sovrnBidAdapter', function() { expect(payload.tmax).to.equal(3000) }) + it('forwards auctionId as tid for source', function() { + const bidderRequest = { + ...baseBidderRequest, + auctionId: '1d1a030790a475', + bids: [baseBidRequest] + } + + const payload = JSON.parse(spec.buildRequests([baseBidRequest], bidderRequest).data) + expect(payload.source.tid).to.equal('1d1a030790a475') + }) + + it('forwards transactionId as tid for impressions', function() { + const bidRequest = { + ...baseBidRequest, + transactionId: 'faslk123' + } + + const bidderRequest = { + ...baseBidderRequest, + bids: [bidRequest] + } + + const payload = JSON.parse(spec.buildRequests([bidRequest], bidderRequest).data) + expect(payload.imp[0].ext.tid).to.equal('faslk123') + }) + it('includes the ad unit code in the request', function() { const impression = payload.imp[0] expect(impression.adunitcode).to.equal('adunit-code') From ffa4d0aed548b29138da243576f3288735a75da7 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko Date: Tue, 27 Jun 2023 16:49:33 +0400 Subject: [PATCH 2/5] EX-4755 Change: source of impression level tid for forwarding --- modules/sovrnBidAdapter.js | 6 ------ test/spec/modules/sovrnBidAdapter_spec.js | 10 +++++++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index 802a8c12af4..888f3933006 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -137,12 +137,6 @@ export const spec = { imp.ext = getBidIdParameter('ext', bid.ortb2Imp) || undefined - const transactionId = getBidIdParameter('transactionId', bid) || undefined - if (transactionId) { - imp.ext = imp.ext || {} - imp.ext.tid = transactionId - } - const segmentsString = getBidIdParameter('segments', bid.params) if (segmentsString) { imp.ext = imp.ext || {} diff --git a/test/spec/modules/sovrnBidAdapter_spec.js b/test/spec/modules/sovrnBidAdapter_spec.js index 376a24987ae..237e2524e54 100644 --- a/test/spec/modules/sovrnBidAdapter_spec.js +++ b/test/spec/modules/sovrnBidAdapter_spec.js @@ -194,10 +194,14 @@ describe('sovrnBidAdapter', function() { expect(payload.source.tid).to.equal('1d1a030790a475') }) - it('forwards transactionId as tid for impressions', function() { + it('forwards impression level tid', function() { const bidRequest = { ...baseBidRequest, - transactionId: 'faslk123' + ortb2Imp: { + ext: { + tid: '1a2c032473f4983' + } + }, } const bidderRequest = { @@ -206,7 +210,7 @@ describe('sovrnBidAdapter', function() { } const payload = JSON.parse(spec.buildRequests([bidRequest], bidderRequest).data) - expect(payload.imp[0].ext.tid).to.equal('faslk123') + expect(payload.imp[0].ext.tid).to.equal('1a2c032473f4983') }) it('includes the ad unit code in the request', function() { From a1beb9be9fb58fef0a82ab0d757be0c3a7267b78 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko Date: Tue, 27 Jun 2023 17:54:59 +0400 Subject: [PATCH 3/5] EX-4755 Change: source of auction level tid for forwarding --- modules/sovrnBidAdapter.js | 6 ++++-- test/spec/modules/sovrnBidAdapter_spec.js | 10 +++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index 888f3933006..0633c3e0cb8 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -169,8 +169,10 @@ export const spec = { }; } - const auctionId = deepAccess(bidderRequest, 'auctionId') - deepSetValue(sovrnBidReq, 'source.tid', auctionId) + const tid = deepAccess(bidderRequest, 'ortb2.source.tid') + if (tid) { + deepSetValue(sovrnBidReq, 'source.tid', tid) + } if (bidderRequest.gdprConsent) { deepSetValue(sovrnBidReq, 'regs.ext.gdpr', +bidderRequest.gdprConsent.gdprApplies); diff --git a/test/spec/modules/sovrnBidAdapter_spec.js b/test/spec/modules/sovrnBidAdapter_spec.js index 237e2524e54..3d1e4d9d2b2 100644 --- a/test/spec/modules/sovrnBidAdapter_spec.js +++ b/test/spec/modules/sovrnBidAdapter_spec.js @@ -186,12 +186,16 @@ describe('sovrnBidAdapter', function() { it('forwards auctionId as tid for source', function() { const bidderRequest = { ...baseBidderRequest, - auctionId: '1d1a030790a475', + ortb2: { + source: { + tid: '1d1a030790a475' + } + }, bids: [baseBidRequest] } const payload = JSON.parse(spec.buildRequests([baseBidRequest], bidderRequest).data) - expect(payload.source.tid).to.equal('1d1a030790a475') + expect(payload.source?.tid).to.equal('1d1a030790a475') }) it('forwards impression level tid', function() { @@ -210,7 +214,7 @@ describe('sovrnBidAdapter', function() { } const payload = JSON.parse(spec.buildRequests([bidRequest], bidderRequest).data) - expect(payload.imp[0].ext.tid).to.equal('1a2c032473f4983') + expect(payload.imp[0]?.ext?.tid).to.equal('1a2c032473f4983') }) it('includes the ad unit code in the request', function() { From b071081b72cc8c5925499be8f7e061a16a7a3043 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko Date: Tue, 27 Jun 2023 18:41:45 +0400 Subject: [PATCH 4/5] EX-4755 Refactor: unit test description --- test/spec/modules/sovrnBidAdapter_spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/spec/modules/sovrnBidAdapter_spec.js b/test/spec/modules/sovrnBidAdapter_spec.js index 3d1e4d9d2b2..d7d20f89c3b 100644 --- a/test/spec/modules/sovrnBidAdapter_spec.js +++ b/test/spec/modules/sovrnBidAdapter_spec.js @@ -183,7 +183,7 @@ describe('sovrnBidAdapter', function() { expect(payload.tmax).to.equal(3000) }) - it('forwards auctionId as tid for source', function() { + it('forwards auction level tid', function() { const bidderRequest = { ...baseBidderRequest, ortb2: { From 51e3cbc4d8ce97c79410ad0be75115eb63074fac Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko Date: Tue, 4 Jul 2023 20:40:42 +0400 Subject: [PATCH 5/5] EX-4659 Add: passing gpp for user sync --- modules/sovrnBidAdapter.js | 6 ++++- test/spec/modules/sovrnBidAdapter_spec.js | 28 +++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index 0633c3e0cb8..0d077ad2ae3 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -248,7 +248,7 @@ export const spec = { } }, - getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent) { + getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent, gppConsent) { try { const tracks = [] if (serverResponses && serverResponses.length !== 0) { @@ -262,6 +262,10 @@ export const spec = { if (uspConsent) { params.push(['us_privacy', uspConsent]); } + if (gppConsent) { + params.push(['gpp', gppConsent.gppString]); + params.push(['gpp_sid', gppConsent.applicableSections]) + } if (iidArr[0]) { params.push(['informer', iidArr[0]]); diff --git a/test/spec/modules/sovrnBidAdapter_spec.js b/test/spec/modules/sovrnBidAdapter_spec.js index d7d20f89c3b..90913c6f130 100644 --- a/test/spec/modules/sovrnBidAdapter_spec.js +++ b/test/spec/modules/sovrnBidAdapter_spec.js @@ -851,7 +851,7 @@ describe('sovrnBidAdapter', function() { url: `https://ap.lijit.com/beacon?gdpr_consent=${gdprConsent.consentString}&informer=13487408`, } - const returnStatement = spec.getUserSyncs(syncOptions, serverResponse, gdprConsent, '') + const returnStatement = spec.getUserSyncs(syncOptions, serverResponse, gdprConsent, '', null) expect(returnStatement[0]).to.deep.equal(expectedReturnStatement) }) @@ -863,7 +863,22 @@ describe('sovrnBidAdapter', function() { url: `https://ap.lijit.com/beacon?us_privacy=${uspString}&informer=13487408`, } - const returnStatement = spec.getUserSyncs(syncOptions, serverResponse, null, uspString) + const returnStatement = spec.getUserSyncs(syncOptions, serverResponse, null, uspString, null) + + expect(returnStatement[0]).to.deep.equal(expectedReturnStatement) + }) + + it('should include gpp consent string if present', function() { + const gppConsent = { + applicableSections: [1, 2], + gppString: 'DBACNYA~CPXxRfAPXxRfAAfKABENB-CgAAAAAAAAAAYgAAAAAAAA~1YNN' + } + const expectedReturnStatement = { + type: 'iframe', + url: `https://ap.lijit.com/beacon?gpp=${gppConsent.gppString}&gpp_sid=${gppConsent.applicableSections}&informer=13487408`, + } + + const returnStatement = spec.getUserSyncs(syncOptions, serverResponse, null, '', gppConsent) expect(returnStatement[0]).to.deep.equal(expectedReturnStatement) }) @@ -874,12 +889,17 @@ describe('sovrnBidAdapter', function() { consentString: 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A==' } const uspString = '1NYN' + const gppConsent = { + applicableSections: [1, 2], + gppString: 'DBACNYA~CPXxRfAPXxRfAAfKABENB-CgAAAAAAAAAAYgAAAAAAAA~1YNN' + } + const expectedReturnStatement = { type: 'iframe', - url: `https://ap.lijit.com/beacon?gdpr_consent=${gdprConsent.consentString}&us_privacy=${uspString}&informer=13487408`, + url: `https://ap.lijit.com/beacon?gdpr_consent=${gdprConsent.consentString}&us_privacy=${uspString}&gpp=${gppConsent.gppString}&gpp_sid=${gppConsent.applicableSections}&informer=13487408`, } - const returnStatement = spec.getUserSyncs(syncOptions, serverResponse, gdprConsent, uspString) + const returnStatement = spec.getUserSyncs(syncOptions, serverResponse, gdprConsent, uspString, gppConsent) expect(returnStatement[0]).to.deep.equal(expectedReturnStatement) })