Skip to content

Commit 3c797b1

Browse files
committed
Admatic adapter: host param control && Add new Bidder
1 parent e7f6902 commit 3c797b1

File tree

4 files changed

+76
-15
lines changed

4 files changed

+76
-15
lines changed

modules/admaticBidAdapter.js

+69-11
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import { getValue, logError, deepAccess, getBidIdParameter, isArray } from '../src/utils.js';
22
import { loadExternalScript } from '../src/adloader.js';
3-
import {registerBidder} from '../src/adapters/bidderFactory.js';
4-
5-
const ENDPOINT_URL = 'https://layer.serve.admatic.com.tr/pb';
3+
import { registerBidder } from '../src/adapters/bidderFactory.js';
4+
import { BANNER, VIDEO } from '../src/mediaTypes.js';
65
const SYNC_URL = 'https://cdn.serve.admatic.com.tr/showad/sync.js';
7-
const BIDDER_CODE = 'admatic';
86

97
export const spec = {
108
code: 'admatic',
9+
aliases: [
10+
{code: 'pixad'}
11+
],
1112
supportedMediaTypes: ['video', 'banner'],
1213
/**
1314
* Determines whether or not the given bid request is valid.
@@ -19,11 +20,12 @@ export const spec = {
1920
let isValid = false;
2021
if (typeof bid.params !== 'undefined') {
2122
let isValidNetworkId = _validateId(getValue(bid.params, 'networkId'));
22-
isValid = isValidNetworkId;// && isValidTypeId;
23+
let isValidHost = _validateString(getValue(bid.params, 'host'));
24+
isValid = isValidNetworkId && isValidHost;
2325
}
2426

2527
if (!isValid) {
26-
logError('AdMatic networkId parameters are required. Bid aborted.');
28+
logError(`${bid.bidder} networkId and host parameters are required. Bid aborted.`);
2729
}
2830
return isValid;
2931
},
@@ -35,11 +37,13 @@ export const spec = {
3537
*/
3638
buildRequests: function(validBidRequests, bidderRequest) {
3739
const bids = validBidRequests.map(buildRequestObject);
40+
const bidderName = validBidRequests[0].bidder;
3841
const networkId = getValue(validBidRequests[0].params, 'networkId');
42+
const host = getValue(validBidRequests[0].params, 'host');
3943
const currency = getValue(validBidRequests[0].params, 'currency') || 'TRY';
4044

4145
setTimeout(() => {
42-
loadExternalScript(SYNC_URL, BIDDER_CODE);
46+
loadExternalScript(SYNC_URL, bidderName);
4347
}, bidderRequest.timeout);
4448

4549
const payload = {
@@ -58,14 +62,14 @@ export const spec = {
5862
imp: bids,
5963
ext: {
6064
'cur': currency,
61-
'type': 'admatic'
65+
'bidder': bidderName
6266
}
6367
};
6468

6569
const payloadString = JSON.stringify(payload);
6670
return {
6771
method: 'POST',
68-
url: ENDPOINT_URL,
72+
url: `https://${host}/pb?bidder=${bidderName}`,
6973
data: payloadString,
7074
options: {
7175
contentType: 'application/json'
@@ -96,22 +100,72 @@ export const spec = {
96100
advertiserDomains: bid && bid.adomain ? bid.adomain : []
97101
},
98102
ttl: 360,
99-
bidder: 'admatic',
103+
bidder: JSON.parse(request.data).ext.bidder,
100104
timeToRespond: 1,
101105
requestTimestamp: 1
102106
};
107+
103108
bidResponses.push(resbid);
104109
});
105110
};
106111
return bidResponses;
107112
}
108113
};
109114

115+
registerBidder(spec);
116+
117+
function enrichSlotWithFloors(slot, bidRequest) {
118+
try {
119+
const slotFloors = {};
120+
121+
if (bidRequest.getFloor) {
122+
if (bidRequest.mediaTypes?.banner) {
123+
slotFloors.banner = {};
124+
const bannerSizes = parseSizes(deepAccess(bidRequest, 'mediaTypes.banner.sizes'))
125+
bannerSizes.forEach(bannerSize => slotFloors.banner[parseSize(bannerSize).toString()] = bidRequest.getFloor({ size: bannerSize, mediaType: BANNER }));
126+
}
127+
128+
if (bidRequest.mediaTypes?.video) {
129+
slotFloors.video = {};
130+
const videoSizes = parseSizes(deepAccess(bidRequest, 'mediaTypes.video.playerSize'))
131+
videoSizes.forEach(videoSize => slotFloors.video[parseSize(videoSize).toString()] = bidRequest.getFloor({ size: videoSize, mediaType: VIDEO }));
132+
}
133+
134+
if (Object.keys(slotFloors).length > 0) {
135+
if (!slot) {
136+
slot = {}
137+
}
138+
Object.assign(slot, {
139+
floors: slotFloors
140+
});
141+
}
142+
}
143+
} catch (e) {
144+
logError('Could not parse floors from Prebid: ' + e);
145+
}
146+
}
147+
148+
function parseSizes(sizes, parser = s => s) {
149+
if (sizes == undefined) {
150+
return [];
151+
}
152+
if (Array.isArray(sizes[0])) { // is there several sizes ? (ie. [[728,90],[200,300]])
153+
return sizes.map(size => parser(size));
154+
}
155+
return [parser(sizes)]; // or a single one ? (ie. [728,90])
156+
}
157+
158+
function parseSize(size) {
159+
return size[0] + 'x' + size[1];
160+
}
161+
110162
function buildRequestObject(bid) {
111163
const reqObj = {};
112164
reqObj.size = getSizes(bid);
113165
reqObj.id = getBidIdParameter('bidId', bid);
114-
reqObj.floor = getValue(bid.params, 'floor') || 0.01;
166+
167+
enrichSlotWithFloors(reqObj, bid);
168+
115169
return reqObj;
116170
}
117171

@@ -144,4 +198,8 @@ function _validateId(id) {
144198
return (parseInt(id) > 0);
145199
}
146200

201+
function _validateString(str) {
202+
return (typeof str == 'string');
203+
}
204+
147205
registerBidder(spec);

modules/admaticBidAdapter.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Use `admatic` as bidder.
1919
bidder: 'admatic',
2020
params: {
2121
networkId: 12345,
22-
floor: 0.5
22+
host: 'layer.serve.admatic.com.tr'
2323
}
2424
}]
2525
},{
@@ -29,7 +29,7 @@ Use `admatic` as bidder.
2929
bidder: 'admatic',
3030
params: {
3131
networkId: 12345,
32-
floor: 0.5
32+
host: 'layer.serve.admatic.com.tr'
3333
}
3434
}]
3535
}];

src/adloader.js

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const _approvedLoadExternalJSList = [
77
'debugging',
88
'adloox',
99
'admatic',
10+
'pixad',
1011
'criteo',
1112
'outstream',
1213
'adagio',

test/spec/modules/admaticBidAdapter_spec.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ describe('admaticBidAdapter', () => {
1818
let bid = {
1919
'bidder': 'admatic',
2020
'params': {
21-
'networkId': 10433394
21+
'networkId': 10433394,
22+
'host': 'layer.serve.admatic.com.tr'
2223
},
2324
'adUnitCode': 'adunit-code',
2425
'sizes': [[300, 250], [300, 600]],
@@ -37,7 +38,8 @@ describe('admaticBidAdapter', () => {
3738
delete bid.params;
3839

3940
bid.params = {
40-
'networkId': 0
41+
'networkId': 0,
42+
'host': 'layer.serve.admatic.com.tr'
4143
};
4244

4345
expect(spec.isBidRequestValid(bid)).to.equal(false);

0 commit comments

Comments
 (0)