From 472f811b2f881cc2c0fa8bb8c5f55d0e70d28458 Mon Sep 17 00:00:00 2001 From: skoklowski Date: Mon, 25 May 2026 17:19:42 +0200 Subject: [PATCH 1/2] Feature/add user.eids handling from ortb2 in dasBidAdapter --- modules/dasBidAdapter.js | 17 +++++++ test/spec/modules/dasBidAdapter_spec.js | 67 +++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/modules/dasBidAdapter.js b/modules/dasBidAdapter.js index a01aaa96149..db088a61a61 100644 --- a/modules/dasBidAdapter.js +++ b/modules/dasBidAdapter.js @@ -164,6 +164,17 @@ function buildUserIds(customParams) { return userIds; } +function buildUserEids(bidderRequest) { + const eids = deepAccess(bidderRequest, 'ortb2.user.eids'); + if (!Array.isArray(eids) || eids.length === 0) { + return null; + } + + const onetEids = eids.filter(eid => eid.source === 'onet.pl'); + + return onetEids.length > 0 ? onetEids : null; +} + function getNpaFromPubConsent(pubConsent) { const params = new URLSearchParams(pubConsent); return params.get('npa') === '1'; @@ -259,6 +270,12 @@ function buildOpenRTBRequest(bidRequests, bidderRequest) { } } + const userEids = buildUserEids(bidderRequest); + + if (userEids) { + request.user.eids = userEids; + } + return request; } diff --git a/test/spec/modules/dasBidAdapter_spec.js b/test/spec/modules/dasBidAdapter_spec.js index d38592e47c4..7b8802c62f0 100644 --- a/test/spec/modules/dasBidAdapter_spec.js +++ b/test/spec/modules/dasBidAdapter_spec.js @@ -575,5 +575,72 @@ describe('dasBidAdapter', function () { const bidResponses = spec.interpretResponse(nativeResponse); expect(bidResponses[0].native).to.deep.equal({}); }); + + describe('user.eids from ortb2', function () { + const onetEid = { + source: 'onet.pl', + inserter: 'onet.pl', + uids: [{ id: 'test-artemis-id', atype: 1, ext: { id_type: 'tracking', consent_required: true } }] + }; + + it('should include user.eids when onet.pl EID is present in ortb2', function () { + const bidderRequestWithEids = { + ...bidderRequest, + ortb2: { + ...bidderRequest.ortb2, + user: { + eids: [onetEid] + } + } + }; + + const request = spec.buildRequests(bidRequests, bidderRequestWithEids); + const payload = JSON.parse(decodeURIComponent(new URL(request.url).searchParams.get('data'))); + + expect(payload.user.eids).to.be.an('array').with.lengthOf(1); + expect(payload.user.eids[0].source).to.equal('onet.pl'); + expect(payload.user.eids[0].inserter).to.equal('onet.pl'); + expect(payload.user.eids[0].uids[0].id).to.equal('test-artemis-id'); + expect(payload.user.eids[0].uids[0].atype).to.equal(1); + expect(payload.user.eids[0].uids[0].ext.id_type).to.equal('tracking'); + expect(payload.user.eids[0].uids[0].ext.consent_required).to.equal(true); + }); + + it('should not include user.eids when ortb2.user.eids is absent', function () { + const request = spec.buildRequests(bidRequests, bidderRequest); + const payload = JSON.parse(decodeURIComponent(new URL(request.url).searchParams.get('data'))); + + expect(payload.user).to.not.have.property('eids'); + }); + + it('should not include user.eids when ortb2.user.eids contains no onet.pl source', function () { + const bidderRequestWithOtherEid = { + ...bidderRequest, + ortb2: { + ...bidderRequest.ortb2, + user: { + eids: [{ source: 'other-source.com', uids: [{ id: 'some-id', atype: 1 }] }] + } + } + }; + + const request = spec.buildRequests(bidRequests, bidderRequestWithOtherEid); + const payload = JSON.parse(decodeURIComponent(new URL(request.url).searchParams.get('data'))); + + expect(payload.user).to.not.have.property('eids'); + }); + + it('should not include user.eids when ortb2.user.eids is empty', function () { + const bidderRequestWithEmptyEids = { + ...bidderRequest, + ortb2: { ...bidderRequest.ortb2, user: { eids: [] } } + }; + + const request = spec.buildRequests(bidRequests, bidderRequestWithEmptyEids); + const payload = JSON.parse(decodeURIComponent(new URL(request.url).searchParams.get('data'))); + + expect(payload.user).to.not.have.property('eids'); + }); + }); }); }); From eee51e8ecbbfc51e08f9462f2c3886e9d2d8d9fb Mon Sep 17 00:00:00 2001 From: skoklowski Date: Tue, 26 May 2026 11:58:25 +0200 Subject: [PATCH 2/2] Feature/update user.eids handling to use userIdAsEids in dasBidAdapter --- modules/dasBidAdapter.js | 6 ++-- test/spec/modules/dasBidAdapter_spec.js | 47 +++++++++---------------- 2 files changed, 20 insertions(+), 33 deletions(-) diff --git a/modules/dasBidAdapter.js b/modules/dasBidAdapter.js index db088a61a61..45e3ce88942 100644 --- a/modules/dasBidAdapter.js +++ b/modules/dasBidAdapter.js @@ -164,8 +164,8 @@ function buildUserIds(customParams) { return userIds; } -function buildUserEids(bidderRequest) { - const eids = deepAccess(bidderRequest, 'ortb2.user.eids'); +function buildUserEids(bidRequests) { + const eids = deepAccess(bidRequests, '0.userIdAsEids'); if (!Array.isArray(eids) || eids.length === 0) { return null; } @@ -270,7 +270,7 @@ function buildOpenRTBRequest(bidRequests, bidderRequest) { } } - const userEids = buildUserEids(bidderRequest); + const userEids = buildUserEids(bidRequests); if (userEids) { request.user.eids = userEids; diff --git a/test/spec/modules/dasBidAdapter_spec.js b/test/spec/modules/dasBidAdapter_spec.js index 7b8802c62f0..271a1afb9f0 100644 --- a/test/spec/modules/dasBidAdapter_spec.js +++ b/test/spec/modules/dasBidAdapter_spec.js @@ -576,25 +576,20 @@ describe('dasBidAdapter', function () { expect(bidResponses[0].native).to.deep.equal({}); }); - describe('user.eids from ortb2', function () { + describe('user.eids from userIdAsEids', function () { const onetEid = { source: 'onet.pl', inserter: 'onet.pl', uids: [{ id: 'test-artemis-id', atype: 1, ext: { id_type: 'tracking', consent_required: true } }] }; - it('should include user.eids when onet.pl EID is present in ortb2', function () { - const bidderRequestWithEids = { - ...bidderRequest, - ortb2: { - ...bidderRequest.ortb2, - user: { - eids: [onetEid] - } - } - }; + it('should include user.eids when onet.pl EID is present in userIdAsEids', function () { + const bidRequestsWithEids = [{ + ...bidRequests[0], + userIdAsEids: [onetEid] + }]; - const request = spec.buildRequests(bidRequests, bidderRequestWithEids); + const request = spec.buildRequests(bidRequestsWithEids, bidderRequest); const payload = JSON.parse(decodeURIComponent(new URL(request.url).searchParams.get('data'))); expect(payload.user.eids).to.be.an('array').with.lengthOf(1); @@ -606,37 +601,29 @@ describe('dasBidAdapter', function () { expect(payload.user.eids[0].uids[0].ext.consent_required).to.equal(true); }); - it('should not include user.eids when ortb2.user.eids is absent', function () { + it('should not include user.eids when userIdAsEids is absent', function () { const request = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(decodeURIComponent(new URL(request.url).searchParams.get('data'))); expect(payload.user).to.not.have.property('eids'); }); - it('should not include user.eids when ortb2.user.eids contains no onet.pl source', function () { - const bidderRequestWithOtherEid = { - ...bidderRequest, - ortb2: { - ...bidderRequest.ortb2, - user: { - eids: [{ source: 'other-source.com', uids: [{ id: 'some-id', atype: 1 }] }] - } - } - }; + it('should not include user.eids when userIdAsEids contains no onet.pl source', function () { + const bidRequestsWithOtherEid = [{ + ...bidRequests[0], + userIdAsEids: [{ source: 'other-source.com', uids: [{ id: 'some-id', atype: 1 }] }] + }]; - const request = spec.buildRequests(bidRequests, bidderRequestWithOtherEid); + const request = spec.buildRequests(bidRequestsWithOtherEid, bidderRequest); const payload = JSON.parse(decodeURIComponent(new URL(request.url).searchParams.get('data'))); expect(payload.user).to.not.have.property('eids'); }); - it('should not include user.eids when ortb2.user.eids is empty', function () { - const bidderRequestWithEmptyEids = { - ...bidderRequest, - ortb2: { ...bidderRequest.ortb2, user: { eids: [] } } - }; + it('should not include user.eids when userIdAsEids is empty', function () { + const bidRequestsWithEmptyEids = [{ ...bidRequests[0], userIdAsEids: [] }]; - const request = spec.buildRequests(bidRequests, bidderRequestWithEmptyEids); + const request = spec.buildRequests(bidRequestsWithEmptyEids, bidderRequest); const payload = JSON.parse(decodeURIComponent(new URL(request.url).searchParams.get('data'))); expect(payload.user).to.not.have.property('eids');