Skip to content

Commit a49d89b

Browse files
jbartek25robertrmartinez
authored andcommitted
Improve Digital adapter: adding bid floor, referrer, more native fields (#4103)
* Bid floor, https, native ad update * Update the ad server protocol module * Adding referrer
1 parent 3f556dc commit a49d89b

File tree

3 files changed

+214
-32
lines changed

3 files changed

+214
-32
lines changed

modules/improvedigitalBidAdapter.js

Lines changed: 78 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { BANNER, NATIVE } from '../src/mediaTypes';
66
const BIDDER_CODE = 'improvedigital';
77

88
export const spec = {
9-
version: '5.1.0',
9+
version: '5.2.0',
1010
code: BIDDER_CODE,
1111
aliases: ['id'],
1212
supportedMediaTypes: [BANNER, NATIVE],
@@ -43,6 +43,10 @@ export const spec = {
4343
requestParameters.gdpr = bidderRequest.gdprConsent.consentString;
4444
}
4545

46+
if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) {
47+
requestParameters.referrer = bidderRequest.refererInfo.referer;
48+
}
49+
4650
let requestObj = idClient.createRequest(
4751
normalizedBids, // requestObject
4852
requestParameters
@@ -75,6 +79,8 @@ export const spec = {
7579
if (bidObject.native) {
7680
// Native
7781
bid.native = getNormalizedNativeAd(bidObject.native);
82+
// Expose raw oRTB response to the client to allow parsing assets not directly supported by Prebid
83+
bid.ortbNative = bidObject.native;
7884
if (bidObject.nurl) {
7985
bid.native.impressionTrackers.unshift(bidObject.nurl);
8086
}
@@ -169,11 +175,13 @@ function getNormalizedBidRequest(bid) {
169175
publisherId = utils.getBidIdParameter('publisherId', bid.params) || null;
170176
placementKey = utils.getBidIdParameter('placementKey', bid.params) || null;
171177
}
172-
let keyValues = utils.getBidIdParameter('keyValues', bid.params) || null;
173-
let singleSizeFilter = utils.getBidIdParameter('size', bid.params) || null;
174-
let bidId = utils.getBidIdParameter('bidId', bid);
175-
let transactionId = utils.getBidIdParameter('transactionId', bid);
178+
const keyValues = utils.getBidIdParameter('keyValues', bid.params) || null;
179+
const singleSizeFilter = utils.getBidIdParameter('size', bid.params) || null;
180+
const bidId = utils.getBidIdParameter('bidId', bid);
181+
const transactionId = utils.getBidIdParameter('transactionId', bid);
176182
const currency = config.getConfig('currency.adServerCurrency');
183+
const bidFloor = utils.getBidIdParameter('bidFloor', bid.params);
184+
const bidFloorCur = utils.getBidIdParameter('bidFloorCur', bid.params);
177185

178186
let normalizedBidRequest = {};
179187
if (placementId) {
@@ -211,6 +219,10 @@ function getNormalizedBidRequest(bid) {
211219
if (currency) {
212220
normalizedBidRequest.currency = currency;
213221
}
222+
if (bidFloor) {
223+
normalizedBidRequest.bidFloor = bidFloor;
224+
normalizedBidRequest.bidFloorCur = bidFloorCur ? bidFloorCur.toUpperCase() : 'USD';
225+
}
214226
return normalizedBidRequest;
215227
}
216228

@@ -231,6 +243,33 @@ function getNormalizedNativeAd(rawNative) {
231243
case 2:
232244
native.body = asset.data.value;
233245
break;
246+
case 3:
247+
native.rating = asset.data.value;
248+
break;
249+
case 4:
250+
native.likes = asset.data.value;
251+
break;
252+
case 5:
253+
native.downloads = asset.data.value;
254+
break;
255+
case 6:
256+
native.price = asset.data.value;
257+
break;
258+
case 7:
259+
native.salePrice = asset.data.value;
260+
break;
261+
case 8:
262+
native.phone = asset.data.value;
263+
break;
264+
case 9:
265+
native.address = asset.data.value;
266+
break;
267+
case 10:
268+
native.body2 = asset.data.value;
269+
break;
270+
case 11:
271+
native.displayUrl = asset.data.value;
272+
break;
234273
case 12:
235274
native.cta = asset.data.value;
236275
break;
@@ -255,26 +294,42 @@ function getNormalizedNativeAd(rawNative) {
255294
}
256295
});
257296
// Trackers
258-
native.impressionTrackers = rawNative.imptrackers || [];
259-
native.javascriptTrackers = rawNative.jstracker;
297+
if (rawNative.eventtrackers) {
298+
native.impressionTrackers = [];
299+
rawNative.eventtrackers.forEach(tracker => {
300+
// Only handle impression event. Viewability events are not supported yet.
301+
if (tracker.event !== 1) return;
302+
switch (tracker.method) {
303+
case 1: // img
304+
native.impressionTrackers.push(tracker.url);
305+
break;
306+
case 2: // js
307+
// javascriptTrackers is a string. If there's more than one JS tracker in bid response, the last script will be used.
308+
native.javascriptTrackers = `<script src=\"${tracker.url}\"></script>`;
309+
break;
310+
}
311+
});
312+
} else {
313+
native.impressionTrackers = rawNative.imptrackers || [];
314+
native.javascriptTrackers = rawNative.jstracker;
315+
}
260316
if (rawNative.link) {
261317
native.clickUrl = rawNative.link.url;
262318
native.clickTrackers = rawNative.link.clicktrackers;
263319
}
320+
if (rawNative.privacy) {
321+
native.privacyLink = rawNative.privacy;
322+
}
264323
return native;
265324
}
266325
registerBidder(spec);
267326

268327
export function ImproveDigitalAdServerJSClient(endPoint) {
269328
this.CONSTANTS = {
270-
HTTP_SECURITY: {
271-
STANDARD: 0,
272-
SECURE: 1
273-
},
274329
AD_SERVER_BASE_URL: 'ice.360yield.com',
275330
END_POINT: endPoint || 'hb',
276331
AD_SERVER_URL_PARAM: 'jsonp=',
277-
CLIENT_VERSION: 'JS-6.0.0',
332+
CLIENT_VERSION: 'JS-6.2.0',
278333
MAX_URL_LENGTH: 2083,
279334
ERROR_CODES: {
280335
MISSING_PLACEMENT_PARAMS: 2,
@@ -300,6 +355,7 @@ export function ImproveDigitalAdServerJSClient(endPoint) {
300355
}
301356

302357
requestParameters.returnObjType = requestParameters.returnObjType || this.CONSTANTS.RETURN_OBJ_TYPE.DEFAULT;
358+
requestParameters.adServerBaseUrl = 'https://' + (requestParameters.adServerBaseUrl || this.CONSTANTS.AD_SERVER_BASE_URL);
303359

304360
let impressionObjects = [];
305361
let impressionObject;
@@ -325,7 +381,7 @@ export function ImproveDigitalAdServerJSClient(endPoint) {
325381
}
326382
let errors = null;
327383

328-
let baseUrl = `${(requestParameters.secure === 1 ? 'https' : 'http')}://${this.CONSTANTS.AD_SERVER_BASE_URL}/${this.CONSTANTS.END_POINT}?${this.CONSTANTS.AD_SERVER_URL_PARAM}`;
384+
let baseUrl = `${requestParameters.adServerBaseUrl}/${this.CONSTANTS.END_POINT}?${this.CONSTANTS.AD_SERVER_URL_PARAM}`;
329385

330386
let bidRequestObject = {
331387
bid_request: this.createBasicBidRequestObject(requestParameters, extraRequestParameters)
@@ -386,12 +442,11 @@ export function ImproveDigitalAdServerJSClient(endPoint) {
386442
case this.CONSTANTS.RETURN_OBJ_TYPE.URL_PARAMS_SPLIT:
387443
return {
388444
method: 'GET',
389-
url: `//${this.CONSTANTS.AD_SERVER_BASE_URL}/${this.CONSTANTS.END_POINT}`,
445+
url: `${requestParameters.adServerBaseUrl}/${this.CONSTANTS.END_POINT}`,
390446
data: `${this.CONSTANTS.AD_SERVER_URL_PARAM}${encodeURIComponent(JSON.stringify(bidRequestObject))}`
391447
};
392448
default:
393-
const baseUrl = `${(requestParameters.secure === 1 ? 'https' : 'http')}://` +
394-
`${this.CONSTANTS.AD_SERVER_BASE_URL}/` +
449+
const baseUrl = `${requestParameters.adServerBaseUrl}/` +
395450
`${this.CONSTANTS.END_POINT}?${this.CONSTANTS.AD_SERVER_URL_PARAM}`;
396451
return {
397452
url: baseUrl + encodeURIComponent(JSON.stringify(bidRequestObject))
@@ -401,6 +456,7 @@ export function ImproveDigitalAdServerJSClient(endPoint) {
401456

402457
this.createBasicBidRequestObject = function(requestParameters, extraRequestParameters) {
403458
let impressionBidRequestObject = {};
459+
impressionBidRequestObject.secure = 1;
404460
if (requestParameters.requestId) {
405461
impressionBidRequestObject.id = requestParameters.requestId;
406462
} else {
@@ -418,9 +474,6 @@ export function ImproveDigitalAdServerJSClient(endPoint) {
418474
if (requestParameters.callback) {
419475
impressionBidRequestObject.callback = requestParameters.callback;
420476
}
421-
if ('secure' in requestParameters) {
422-
impressionBidRequestObject.secure = requestParameters.secure;
423-
}
424477
if (requestParameters.libVersion) {
425478
impressionBidRequestObject.version = requestParameters.libVersion + '-' + this.CONSTANTS.CLIENT_VERSION;
426479
}
@@ -455,6 +508,12 @@ export function ImproveDigitalAdServerJSClient(endPoint) {
455508
if (placementObject.currency) {
456509
impressionObject.currency = placementObject.currency.toUpperCase();
457510
}
511+
if (placementObject.bidFloor) {
512+
impressionObject.bidfloor = placementObject.bidFloor;
513+
}
514+
if (placementObject.bidFloorCur) {
515+
impressionObject.bidfloorcur = placementObject.bidFloorCur.toUpperCase();
516+
}
458517
if (placementObject.placementId) {
459518
impressionObject.pid = placementObject.placementId;
460519
}

modules/improvedigitalBidAdapter.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
**Module Name**: Improve Digital Bidder Adapter
44
**Module Type**: Bidder Adapter
5-
**Maintainer**: hb@improvedigital.com
5+
**Maintainer**: hb@azerion.com
66

77
# Description
88

0 commit comments

Comments
 (0)