Skip to content

Commit

Permalink
Sharethrough: Add support for ID5, Shared ID, and Live Intent ID (#6261)
Browse files Browse the repository at this point in the history
* Update prebid adapter universal ids to include ID5, SharedID, and LiveIntent ID.

[#176447070](https://www.pivotaltracker.com/story/show/176447070)

Co-authored-by: Mathieu Pheulpin <mpheulpin@sharethrough.com>

* Addressing review

[#176447070]

* Quick rewrite

[#176447070]

* Address ID5 review, forward linkType to adserver

* Reformatting SharedID to align with ID5

Co-authored-by: Mathieu Pheulpin <mpheulpin@sharethrough.com>
  • Loading branch information
poojawins and Mathieu Pheulpin authored Feb 9, 2021
1 parent c27ff14 commit dde585b
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 16 deletions.
48 changes: 33 additions & 15 deletions modules/sharethroughBidAdapter.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { registerBidder } from '../src/adapters/bidderFactory.js';
import * as utils from '../src/utils.js';

const VERSION = '3.3.0';
const VERSION = '3.3.1';
const BIDDER_CODE = 'sharethrough';
const STR_ENDPOINT = 'https://btlr.sharethrough.com/WYu2BXv1/v1';
const DEFAULT_SIZE = [1, 1];
Expand Down Expand Up @@ -31,6 +31,8 @@ export const sharethroughAdapterSpec = {
strVersion: VERSION
};

Object.assign(query, handleUniversalIds(bidRequest));

const nonHttp = sharethroughInternal.getProtocol().indexOf('http') < 0;
query.secure = nonHttp || (sharethroughInternal.getProtocol().indexOf('https') > -1);

Expand All @@ -46,20 +48,6 @@ export const sharethroughAdapterSpec = {
query.us_privacy = bidderRequest.uspConsent
}

if (bidRequest.userId && bidRequest.userId.tdid) {
query.ttduid = bidRequest.userId.tdid;
}

if (bidRequest.userId && bidRequest.userId.pubcid) {
query.pubcid = bidRequest.userId.pubcid;
} else if (bidRequest.crumbs && bidRequest.crumbs.pubcid) {
query.pubcid = bidRequest.crumbs.pubcid;
}

if (bidRequest.userId && bidRequest.userId.idl_env) {
query.idluid = bidRequest.userId.idl_env;
}

if (bidRequest.schain) {
query.schain = JSON.stringify(bidRequest.schain);
}
Expand Down Expand Up @@ -147,6 +135,36 @@ export const sharethroughAdapterSpec = {
onSetTargeting: (bid) => {}
};

function handleUniversalIds(bidRequest) {
if (!bidRequest.userId) return {};

const universalIds = {};

const ttd = utils.deepAccess(bidRequest, 'userId.tdid');
if (ttd) universalIds.ttduid = ttd;

const pubc = utils.deepAccess(bidRequest, 'userId.pubcid') || utils.deepAccess(bidRequest, 'crumbs.pubcid');
if (pubc) universalIds.pubcid = pubc;

const idl = utils.deepAccess(bidRequest, 'userId.idl_env');
if (idl) universalIds.idluid = idl;

const id5 = utils.deepAccess(bidRequest, 'userId.id5id.uid');
if (id5) {
universalIds.id5uid = { id: id5 };
const id5link = utils.deepAccess(bidRequest, 'userId.id5id.ext.linkType');
if (id5link) universalIds.id5uid.linkType = id5link;
}

const lipb = utils.deepAccess(bidRequest, 'userId.lipb.lipbid');
if (lipb) universalIds.liuid = lipb;

const shd = utils.deepAccess(bidRequest, 'userId.sharedid');
if (shd) universalIds.shduid = shd; // object with keys: id & third

return universalIds;
}

function getLargestSize(sizes) {
function area(size) {
return size[0] * size[1];
Expand Down
42 changes: 41 additions & 1 deletion test/spec/modules/sharethroughBidAdapter_spec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { expect } from 'chai';
import { sharethroughAdapterSpec, sharethroughInternal } from 'modules/sharethroughBidAdapter.js';
import { newBidder } from 'src/adapters/bidderFactory.js';
import * as utils from '../../../src/utils.js';

const spec = newBidder(sharethroughAdapterSpec).getSpec();
const bidRequests = [
Expand All @@ -15,7 +16,20 @@ const bidRequests = [
userId: {
tdid: 'fake-tdid',
pubcid: 'fake-pubcid',
idl_env: 'fake-identity-link'
idl_env: 'fake-identity-link',
id5id: {
uid: 'fake-id5id',
ext: {
linkType: 2
}
},
sharedid: {
id: 'fake-sharedid',
third: 'fake-sharedthird'
},
lipb: {
lipbid: 'fake-lipbid'
}
},
crumbs: {
pubcid: 'fake-pubcid-in-crumbs-obj'
Expand Down Expand Up @@ -329,6 +343,15 @@ describe('sharethrough adapter spec', function() {
expect(bidRequest.data.pubcid).to.eq('fake-pubcid');
});

it('should add the pubcid parameter if a bid request contains a value for the Publisher Common ID Module in the' +
' crumbs object of the bidrequest', function() {
const bidData = utils.deepClone(bidRequests);
delete bidData[0].userId.pubcid;

const bidRequest = spec.buildRequests(bidData)[0];
expect(bidRequest.data.pubcid).to.eq('fake-pubcid-in-crumbs-obj');
});

it('should add the pubcid parameter if a bid request contains a value for the Publisher Common ID Module in the' +
' crumbs object of the bidrequest', function() {
const bidRequest = spec.buildRequests(bidRequests)[0];
Expand All @@ -341,6 +364,23 @@ describe('sharethrough adapter spec', function() {
expect(bidRequest.data.idluid).to.eq('fake-identity-link');
});

it('should add the id5uid parameter if a bid request contains a value for ID5', function() {
const bidRequest = spec.buildRequests(bidRequests)[0];
expect(bidRequest.data.id5uid.id).to.eq('fake-id5id');
expect(bidRequest.data.id5uid.linkType).to.eq(2);
});

it('should add the shduid parameter if a bid request contains a value for Shared ID', function() {
const bidRequest = spec.buildRequests(bidRequests)[0];
expect(bidRequest.data.shduid.id).to.eq('fake-sharedid');
expect(bidRequest.data.shduid.third).to.eq('fake-sharedthird');
});

it('should add the liuid parameter if a bid request contains a value for LiveIntent ID', function() {
const bidRequest = spec.buildRequests(bidRequests)[0];
expect(bidRequest.data.liuid).to.eq('fake-lipbid');
});

it('should add Sharethrough specific parameters', function() {
const builtBidRequests = spec.buildRequests(bidRequests);
expect(builtBidRequests[0]).to.deep.include({
Expand Down

0 comments on commit dde585b

Please sign in to comment.