@@ -6,7 +6,7 @@ import { BANNER, NATIVE } from '../src/mediaTypes';
6
6
const BIDDER_CODE = 'improvedigital' ;
7
7
8
8
export const spec = {
9
- version : '5.1 .0' ,
9
+ version : '5.2 .0' ,
10
10
code : BIDDER_CODE ,
11
11
aliases : [ 'id' ] ,
12
12
supportedMediaTypes : [ BANNER , NATIVE ] ,
@@ -43,6 +43,10 @@ export const spec = {
43
43
requestParameters . gdpr = bidderRequest . gdprConsent . consentString ;
44
44
}
45
45
46
+ if ( bidderRequest && bidderRequest . refererInfo && bidderRequest . refererInfo . referer ) {
47
+ requestParameters . referrer = bidderRequest . refererInfo . referer ;
48
+ }
49
+
46
50
let requestObj = idClient . createRequest (
47
51
normalizedBids , // requestObject
48
52
requestParameters
@@ -75,6 +79,8 @@ export const spec = {
75
79
if ( bidObject . native ) {
76
80
// Native
77
81
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 ;
78
84
if ( bidObject . nurl ) {
79
85
bid . native . impressionTrackers . unshift ( bidObject . nurl ) ;
80
86
}
@@ -169,11 +175,13 @@ function getNormalizedBidRequest(bid) {
169
175
publisherId = utils . getBidIdParameter ( 'publisherId' , bid . params ) || null ;
170
176
placementKey = utils . getBidIdParameter ( 'placementKey' , bid . params ) || null ;
171
177
}
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 ) ;
176
182
const currency = config . getConfig ( 'currency.adServerCurrency' ) ;
183
+ const bidFloor = utils . getBidIdParameter ( 'bidFloor' , bid . params ) ;
184
+ const bidFloorCur = utils . getBidIdParameter ( 'bidFloorCur' , bid . params ) ;
177
185
178
186
let normalizedBidRequest = { } ;
179
187
if ( placementId ) {
@@ -211,6 +219,10 @@ function getNormalizedBidRequest(bid) {
211
219
if ( currency ) {
212
220
normalizedBidRequest . currency = currency ;
213
221
}
222
+ if ( bidFloor ) {
223
+ normalizedBidRequest . bidFloor = bidFloor ;
224
+ normalizedBidRequest . bidFloorCur = bidFloorCur ? bidFloorCur . toUpperCase ( ) : 'USD' ;
225
+ }
214
226
return normalizedBidRequest ;
215
227
}
216
228
@@ -231,6 +243,33 @@ function getNormalizedNativeAd(rawNative) {
231
243
case 2 :
232
244
native . body = asset . data . value ;
233
245
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 ;
234
273
case 12 :
235
274
native . cta = asset . data . value ;
236
275
break ;
@@ -255,26 +294,42 @@ function getNormalizedNativeAd(rawNative) {
255
294
}
256
295
} ) ;
257
296
// 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
+ }
260
316
if ( rawNative . link ) {
261
317
native . clickUrl = rawNative . link . url ;
262
318
native . clickTrackers = rawNative . link . clicktrackers ;
263
319
}
320
+ if ( rawNative . privacy ) {
321
+ native . privacyLink = rawNative . privacy ;
322
+ }
264
323
return native ;
265
324
}
266
325
registerBidder ( spec ) ;
267
326
268
327
export function ImproveDigitalAdServerJSClient ( endPoint ) {
269
328
this . CONSTANTS = {
270
- HTTP_SECURITY : {
271
- STANDARD : 0 ,
272
- SECURE : 1
273
- } ,
274
329
AD_SERVER_BASE_URL : 'ice.360yield.com' ,
275
330
END_POINT : endPoint || 'hb' ,
276
331
AD_SERVER_URL_PARAM : 'jsonp=' ,
277
- CLIENT_VERSION : 'JS-6.0 .0' ,
332
+ CLIENT_VERSION : 'JS-6.2 .0' ,
278
333
MAX_URL_LENGTH : 2083 ,
279
334
ERROR_CODES : {
280
335
MISSING_PLACEMENT_PARAMS : 2 ,
@@ -300,6 +355,7 @@ export function ImproveDigitalAdServerJSClient(endPoint) {
300
355
}
301
356
302
357
requestParameters . returnObjType = requestParameters . returnObjType || this . CONSTANTS . RETURN_OBJ_TYPE . DEFAULT ;
358
+ requestParameters . adServerBaseUrl = 'https://' + ( requestParameters . adServerBaseUrl || this . CONSTANTS . AD_SERVER_BASE_URL ) ;
303
359
304
360
let impressionObjects = [ ] ;
305
361
let impressionObject ;
@@ -325,7 +381,7 @@ export function ImproveDigitalAdServerJSClient(endPoint) {
325
381
}
326
382
let errors = null ;
327
383
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 } ` ;
329
385
330
386
let bidRequestObject = {
331
387
bid_request : this . createBasicBidRequestObject ( requestParameters , extraRequestParameters )
@@ -386,12 +442,11 @@ export function ImproveDigitalAdServerJSClient(endPoint) {
386
442
case this . CONSTANTS . RETURN_OBJ_TYPE . URL_PARAMS_SPLIT :
387
443
return {
388
444
method : 'GET' ,
389
- url : `// ${ this . CONSTANTS . AD_SERVER_BASE_URL } /${ this . CONSTANTS . END_POINT } ` ,
445
+ url : `${ requestParameters . adServerBaseUrl } /${ this . CONSTANTS . END_POINT } ` ,
390
446
data : `${ this . CONSTANTS . AD_SERVER_URL_PARAM } ${ encodeURIComponent ( JSON . stringify ( bidRequestObject ) ) } `
391
447
} ;
392
448
default :
393
- const baseUrl = `${ ( requestParameters . secure === 1 ? 'https' : 'http' ) } ://` +
394
- `${ this . CONSTANTS . AD_SERVER_BASE_URL } /` +
449
+ const baseUrl = `${ requestParameters . adServerBaseUrl } /` +
395
450
`${ this . CONSTANTS . END_POINT } ?${ this . CONSTANTS . AD_SERVER_URL_PARAM } ` ;
396
451
return {
397
452
url : baseUrl + encodeURIComponent ( JSON . stringify ( bidRequestObject ) )
@@ -401,6 +456,7 @@ export function ImproveDigitalAdServerJSClient(endPoint) {
401
456
402
457
this . createBasicBidRequestObject = function ( requestParameters , extraRequestParameters ) {
403
458
let impressionBidRequestObject = { } ;
459
+ impressionBidRequestObject . secure = 1 ;
404
460
if ( requestParameters . requestId ) {
405
461
impressionBidRequestObject . id = requestParameters . requestId ;
406
462
} else {
@@ -418,9 +474,6 @@ export function ImproveDigitalAdServerJSClient(endPoint) {
418
474
if ( requestParameters . callback ) {
419
475
impressionBidRequestObject . callback = requestParameters . callback ;
420
476
}
421
- if ( 'secure' in requestParameters ) {
422
- impressionBidRequestObject . secure = requestParameters . secure ;
423
- }
424
477
if ( requestParameters . libVersion ) {
425
478
impressionBidRequestObject . version = requestParameters . libVersion + '-' + this . CONSTANTS . CLIENT_VERSION ;
426
479
}
@@ -455,6 +508,12 @@ export function ImproveDigitalAdServerJSClient(endPoint) {
455
508
if ( placementObject . currency ) {
456
509
impressionObject . currency = placementObject . currency . toUpperCase ( ) ;
457
510
}
511
+ if ( placementObject . bidFloor ) {
512
+ impressionObject . bidfloor = placementObject . bidFloor ;
513
+ }
514
+ if ( placementObject . bidFloorCur ) {
515
+ impressionObject . bidfloorcur = placementObject . bidFloorCur . toUpperCase ( ) ;
516
+ }
458
517
if ( placementObject . placementId ) {
459
518
impressionObject . pid = placementObject . placementId ;
460
519
}
0 commit comments