Skip to content

Commit

Permalink
Adkernel & AdkernelAdn: bidfloor module support (prebid#6671)
Browse files Browse the repository at this point in the history
* Adkernel: bidfloor module support

* AdkernelAdn: bidfloor module support
  • Loading branch information
ckbo3hrk authored and umakajan committed May 6, 2021
1 parent 613fc48 commit 01e5f05
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 9 deletions.
21 changes: 20 additions & 1 deletion modules/adkernelAdnBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,15 @@ function buildImp(bidRequest) {
id: bidRequest.bidId,
tagid: bidRequest.adUnitCode
};
let mediaType;
let bannerReq = utils.deepAccess(bidRequest, `mediaTypes.banner`);
let videoReq = utils.deepAccess(bidRequest, `mediaTypes.video`);
if (bannerReq) {
let sizes = canonicalizeSizesArray(bannerReq.sizes);
imp.banner = {
format: utils.parseSizesInput(sizes)
}
};
mediaType = BANNER;
} else if (videoReq) {
let size = canonicalizeSizesArray(videoReq.playerSize)[0];
imp.video = {
Expand All @@ -34,6 +36,11 @@ function buildImp(bidRequest) {
protocols: videoReq.protocols || DEFAULT_PROTOCOLS,
api: videoReq.api || DEFAULT_APIS
};
mediaType = VIDEO;
}
let bidFloor = getBidFloor(bidRequest, mediaType, '*');
if (bidFloor) {
imp.bidfloor = bidFloor;
}
return imp;
}
Expand Down Expand Up @@ -113,6 +120,18 @@ function buildBid(tag) {
return bid;
}

function getBidFloor(bid, mediaType, sizes) {
var floor;
var size = sizes.length === 1 ? sizes[0] : '*';
if (typeof bid.getFloor === 'function') {
const floorInfo = bid.getFloor({currency: 'USD', mediaType, size});
if (typeof floorInfo === 'object' && floorInfo.currency === 'USD' && !isNaN(parseFloat(floorInfo.floor))) {
floor = parseFloat(floorInfo.floor);
}
}
return floor;
}

export const spec = {
code: 'adkernelAdn',
gvlid: GVLID,
Expand Down
39 changes: 33 additions & 6 deletions modules/adkernelBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import {config} from '../src/config.js';
const VIDEO_TARGETING = Object.freeze(['mimes', 'minduration', 'maxduration', 'protocols',
'startdelay', 'linearity', 'boxingallowed', 'playbackmethod', 'delivery',
'pos', 'api', 'ext']);
const VERSION = '1.5';
const VERSION = '1.6';
const SYNC_IFRAME = 1;
const SYNC_IMAGE = 2;
const SYNC_TYPES = Object.freeze({
Expand Down Expand Up @@ -197,6 +197,18 @@ function dispatchImps(bidRequests, refererInfo) {
}, {});
}

function getBidFloor(bid, mediaType, sizes) {
var floor;
var size = sizes.length === 1 ? sizes[0] : '*';
if (typeof bid.getFloor === 'function') {
const floorInfo = bid.getFloor({currency: 'USD', mediaType, size});
if (typeof floorInfo === 'object' && floorInfo.currency === 'USD' && !isNaN(parseFloat(floorInfo.floor))) {
floor = parseFloat(floorInfo.floor);
}
}
return floor;
}

/**
* Builds rtb imp object for single adunit
* @param bidRequest {BidRequest}
Expand All @@ -207,27 +219,42 @@ function buildImp(bidRequest, secure) {
'id': bidRequest.bidId,
'tagid': bidRequest.adUnitCode
};
var mediaType;
var sizes = [];

if (utils.deepAccess(bidRequest, `mediaTypes.banner`)) {
let sizes = utils.getAdUnitSizes(bidRequest);
if (utils.deepAccess(bidRequest, 'mediaTypes.banner')) {
sizes = utils.getAdUnitSizes(bidRequest);
imp.banner = {
format: sizes.map(wh => utils.parseGPTSingleSizeArrayToRtbSize(wh)),
topframe: 0
};
mediaType = BANNER;
} else if (utils.deepAccess(bidRequest, 'mediaTypes.video')) {
let sizes = bidRequest.mediaTypes.video.playerSize || [];
imp.video = utils.parseGPTSingleSizeArrayToRtbSize(sizes[0]) || {};
let video = utils.deepAccess(bidRequest, 'mediaTypes.video');
imp.video = {};
if (video.playerSize) {
sizes = video.playerSize[0];
imp.video = Object.assign(imp.video, utils.parseGPTSingleSizeArrayToRtbSize(sizes) || {});
}
if (bidRequest.params.video) {
Object.keys(bidRequest.params.video)
.filter(key => includes(VIDEO_TARGETING, key))
.forEach(key => imp.video[key] = bidRequest.params.video[key]);
}
mediaType = VIDEO;
} else if (utils.deepAccess(bidRequest, 'mediaTypes.native')) {
let nativeRequest = buildNativeRequest(bidRequest.mediaTypes.native);
imp.native = {
ver: '1.1',
request: JSON.stringify(nativeRequest)
}
};
mediaType = NATIVE;
} else {
throw new Error('Unsupported bid received');
}
let floor = getBidFloor(bidRequest, mediaType, sizes);
if (floor) {
imp.bidfloor = floor;
}
if (secure) {
imp.secure = 1;
Expand Down
13 changes: 12 additions & 1 deletion test/spec/modules/adkernelAdnBidAdapter_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,6 @@ describe('AdkernelAdn adapter', function () {
fullBidderRequest.bids = bidRequests;
let pbRequests = spec.buildRequests(bidRequests, fullBidderRequest);
let tagRequests = pbRequests.map(r => JSON.parse(r.data));

return [pbRequests, tagRequests];
}

Expand Down Expand Up @@ -272,6 +271,18 @@ describe('AdkernelAdn adapter', function () {
expect(bidRequests[0]).to.have.property('user');
expect(bidRequests[0].user).to.have.property('coppa', 1);
});

it('should set bidfloor if configured', function() {
let bid = Object.assign({}, bid1_pub1);
bid.getFloor = function() {
return {
currency: 'USD',
floor: 0.145
}
};
let [, tagRequests] = buildRequest([bid]);
expect(tagRequests[0].imp[0]).to.have.property('bidfloor', 0.145);
});
});

describe('video request building', () => {
Expand Down
14 changes: 13 additions & 1 deletion test/spec/modules/adkernelBidAdapter_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -366,9 +366,21 @@ describe('Adkernel adapter', function () {
});

it('should forward default bidder timeout', function() {
let [_, bidRequests] = buildRequest([bid1_zone1], DEFAULT_BIDDER_REQUEST);
let [_, bidRequests] = buildRequest([bid1_zone1]);
expect(bidRequests[0]).to.have.property('tmax', 3000);
});

it('should set bidfloor if configured', function() {
let bid = Object.assign({}, bid1_zone1);
bid.getFloor = function() {
return {
currency: 'USD',
floor: 0.145
}
};
let [_, bidRequests] = buildRequest([bid]);
expect(bidRequests[0].imp[0]).to.have.property('bidfloor', 0.145);
});
});

describe('video request building', function () {
Expand Down

0 comments on commit 01e5f05

Please sign in to comment.