From d27366022e40eb074f387588098de4d0e29f9ced Mon Sep 17 00:00:00 2001 From: azuryo <108641852+azuryo@users.noreply.github.com> Date: Thu, 10 Nov 2022 23:20:56 +0900 Subject: [PATCH] Microad Bid Adapter: Support Audience ID Ext and UID2.0 (#9157) * Microad Bid Adapter: Support ext params * Microad Bid Adapter: Support Unified ID 2.0 * Microad bid Adapter: Add source --- modules/microadBidAdapter.js | 33 +++++++++----- test/spec/modules/microadBidAdapter_spec.js | 48 +++++++++++++++++++++ 2 files changed, 70 insertions(+), 11 deletions(-) diff --git a/modules/microadBidAdapter.js b/modules/microadBidAdapter.js index 1b31000df43..13aea0f3f77 100644 --- a/modules/microadBidAdapter.js +++ b/modules/microadBidAdapter.js @@ -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'; @@ -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() { @@ -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; } diff --git a/test/spec/modules/microadBidAdapter_spec.js b/test/spec/modules/microadBidAdapter_spec.js index cca337c83f2..98edfce20bc 100644 --- a/test/spec/modules/microadBidAdapter_spec.js +++ b/test/spec/modules/microadBidAdapter_spec.js @@ -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', () => {