Skip to content

Commit

Permalink
Microad Bid Adapter: Support Audience ID Ext and UID2.0 (prebid#9157)
Browse files Browse the repository at this point in the history
* Microad Bid Adapter: Support ext params

* Microad Bid Adapter: Support Unified ID 2.0

* Microad bid Adapter: Add source
  • Loading branch information
azuma-ryotaro authored and JacobKlein26 committed Feb 8, 2023
1 parent 74dff08 commit dc09515
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 11 deletions.
33 changes: 22 additions & 11 deletions modules/microadBidAdapter.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { deepAccess, isEmpty, isStr } from '../src/utils.js';
import { deepAccess, isArray, isEmpty, isStr } from '../src/utils.js';
import { find } from '../src/polyfill.js';
import { registerBidder } from '../src/adapters/bidderFactory.js';
import { BANNER } from '../src/mediaTypes.js';
import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
Expand All @@ -24,15 +25,16 @@ const NATIVE_CODE = 2;
const VIDEO_CODE = 4;

const AUDIENCE_IDS = [
{type: 6, bidKey: 'userId.imuid'},
{type: 8, bidKey: 'userId.id5id.uid'},
{type: 9, bidKey: 'userId.tdid'},
{type: 10, bidKey: 'userId.novatiq.snowflake'},
{type: 11, bidKey: 'userId.parrableId.eid'},
{type: 12, bidKey: 'userId.dacId.id'},
{type: 13, bidKey: 'userId.idl_env'},
{type: 14, bidKey: 'userId.criteoId'},
{type: 15, bidKey: 'userId.pubcid'}
{type: 6, bidKey: 'userId.imuid', source: 'intimatemerger.com'},
{type: 8, bidKey: 'userId.id5id.uid', source: 'id5-sync.com'},
{type: 9, bidKey: 'userId.tdid', source: 'adserver.org'},
{type: 10, bidKey: 'userId.novatiq.snowflake', source: 'novatiq.com'},
{type: 11, bidKey: 'userId.parrableId.eid', source: 'parrable.com'},
{type: 12, bidKey: 'userId.dacId.id', source: 'dac.co.jp'},
{type: 13, bidKey: 'userId.idl_env', source: 'liveramp.com'},
{type: 14, bidKey: 'userId.criteoId', source: 'criteo.com'},
{type: 15, bidKey: 'userId.pubcid', source: 'pubcid.org'},
{type: 17, bidKey: 'userId.uid2.id', source: 'uidapi.com'}
];

function createCBT() {
Expand Down Expand Up @@ -100,10 +102,19 @@ export const spec = {
}

const aidsParams = []
const userIdAsEids = bid.userIdAsEids;
AUDIENCE_IDS.forEach((audienceId) => {
const bidAudienceId = deepAccess(bid, audienceId.bidKey);
if (!isEmpty(bidAudienceId) && isStr(bidAudienceId)) {
aidsParams.push({ type: audienceId.type, id: bidAudienceId });
const aidParam = { type: audienceId.type, id: bidAudienceId };
// Set ext
if (isArray(userIdAsEids)) {
const targetEid = find(userIdAsEids, (eid) => eid.source === audienceId.source) || {};
if (!isEmpty(deepAccess(targetEid, 'uids.0.ext'))) {
aidParam.ext = targetEid.uids[0].ext;
}
}
aidsParams.push(aidParam);
// Set Ramp ID
if (audienceId.type === 13) params['idl_env'] = bidAudienceId;
}
Expand Down
48 changes: 48 additions & 0 deletions test/spec/modules/microadBidAdapter_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,54 @@ describe('microadBidAdapter', () => {
})
})
})

Object.entries({
'ID5 ID': {
userId: {id5id: {uid: 'id5id-sample'}},
userIdAsEids: [
{
source: 'id5-sync.com',
uids: [{id: 'id5id-sample', aType: 1, ext: {linkType: 2, abTestingControlGroup: false}}]
}
],
expected: {
aids: JSON.stringify([{type: 8, id: 'id5id-sample', ext: {linkType: 2, abTestingControlGroup: false}}])
}
},
'Unified ID': {
userId: {tdid: 'unified-sample'},
userIdAsEids: [
{
source: 'adserver.org',
uids: [{id: 'unified-sample', aType: 1, ext: {rtiPartner: 'TDID'}}]
}
],
expected: {aids: JSON.stringify([{type: 9, id: 'unified-sample', ext: {rtiPartner: 'TDID'}}])}
},
'not add': {
userId: {id5id: {uid: 'id5id-sample'}},
userIdAsEids: [],
expected: {
aids: JSON.stringify([{type: 8, id: 'id5id-sample'}])
}
}
}).forEach(([test, arg]) => {
it(`should ${test} ext if it is available in request parameters`, () => {
const bidRequestWithUserId = {
...bidRequestTemplate,
userId: arg.userId,
userIdAsEids: arg.userIdAsEids
}
const requests = spec.buildRequests([bidRequestWithUserId], bidderRequest)
requests.forEach((request) => {
expect(request.data).to.deep.equal({
...expectedResultTemplate,
cbt: request.data.cbt,
...arg.expected
})
})
});
})
});

describe('interpretResponse', () => {
Expand Down

0 comments on commit dc09515

Please sign in to comment.