prebid.js 7.11.0 → 7.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/issue_tracker.yml +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adriverBidAdapter.js +1 -1
- package/dist/adriverIdSystem.js +1 -1
- package/dist/adtelligentBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/alkimiBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/betweenBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/dgkeywordRtdProvider.js +1 -1
- package/dist/displayioBidAdapter.js +1 -3
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediagoBidAdapter.js +1 -0
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +120 -121
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/rasBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/tappxBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/modules/adkernelBidAdapter.js +28 -12
- package/modules/adriverBidAdapter.js +5 -12
- package/modules/adriverIdSystem.js +2 -1
- package/modules/adtelligentBidAdapter.js +2 -0
- package/modules/alkimiBidAdapter.js +2 -1
- package/modules/betweenBidAdapter.js +3 -3
- package/modules/bidwatchAnalyticsAdapter.js +112 -59
- package/modules/consumableBidAdapter.js +2 -2
- package/modules/criteoBidAdapter.js +19 -13
- package/modules/dgkeywordRtdProvider.js +9 -0
- package/modules/displayioBidAdapter.js +92 -97
- package/modules/id5IdSystem.js +160 -111
- package/modules/id5IdSystem.md +16 -14
- package/modules/improvedigitalBidAdapter.js +50 -28
- package/modules/ixBidAdapter.js +13 -306
- package/modules/mediagoBidAdapter.js +462 -0
- package/modules/mediagoBidAdapter.md +34 -0
- package/modules/nextMillenniumBidAdapter.js +25 -6
- package/modules/pubmaticAnalyticsAdapter.js +1 -1
- package/modules/rasBidAdapter.js +8 -0
- package/modules/rasBidAdapter.md +14 -13
- package/modules/sonobiBidAdapter.js +1 -0
- package/modules/tappxBidAdapter.js +9 -0
- package/package.json +1 -1
- package/src/adloader.js +2 -1
- package/src/adserver.js +0 -56
- package/src/auction.js +58 -15
- package/src/native.js +1 -0
- package/src/refererDetection.js +12 -1
- package/src/videoCache.js +8 -2
- package/test/spec/modules/adkernelBidAdapter_spec.js +11 -2
- package/test/spec/modules/adriverBidAdapter_spec.js +6 -13
- package/test/spec/modules/adriverIdSystem_spec.js +3 -8
- package/test/spec/modules/adtelligentBidAdapter_spec.js +1 -0
- package/test/spec/modules/alkimiBidAdapter_spec.js +2 -1
- package/test/spec/modules/betweenBidAdapter_spec.js +17 -0
- package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +28 -12
- package/test/spec/modules/criteoBidAdapter_spec.js +35 -26
- package/test/spec/modules/dgkeywordRtdProvider_spec.js +1 -1
- package/test/spec/modules/displayioBidAdapter_spec.js +16 -52
- package/test/spec/modules/enrichmentFpdModule_spec.js +2 -1
- package/test/spec/modules/fpdModule_spec.js +2 -1
- package/test/spec/modules/id5IdSystem_spec.js +529 -172
- package/test/spec/modules/improvedigitalBidAdapter_spec.js +9 -13
- package/test/spec/modules/ixBidAdapter_spec.js +210 -104
- package/test/spec/modules/mediagoBidAdapter_spec.js +97 -0
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +2 -7
- package/test/spec/modules/rasBidAdapter_spec.js +2 -0
- package/test/spec/native_spec.js +144 -0
- package/test/spec/videoCache_spec.js +37 -7
package/modules/ixBidAdapter.js
CHANGED
|
@@ -25,7 +25,6 @@ import {find} from '../src/polyfill.js';
|
|
|
25
25
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
26
26
|
import {INSTREAM, OUTSTREAM} from '../src/video.js';
|
|
27
27
|
import {Renderer} from '../src/Renderer.js';
|
|
28
|
-
import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
|
|
29
28
|
|
|
30
29
|
const BIDDER_CODE = 'ix';
|
|
31
30
|
const ALIAS_BIDDER_CODE = 'roundel';
|
|
@@ -100,93 +99,6 @@ const VIDEO_PARAMS_ALLOW_LIST = [
|
|
|
100
99
|
'delivery', 'pos', 'companionad', 'api', 'companiontype', 'ext',
|
|
101
100
|
'playerSize', 'w', 'h'
|
|
102
101
|
];
|
|
103
|
-
const NATIVE_ASSET_TYPES = {
|
|
104
|
-
TITLE: 100,
|
|
105
|
-
IMG: 200,
|
|
106
|
-
VIDEO: 300,
|
|
107
|
-
DATA: 400
|
|
108
|
-
};
|
|
109
|
-
const NATIVE_IMAGE_TYPES = {
|
|
110
|
-
ICON: 1,
|
|
111
|
-
MAIN: 3
|
|
112
|
-
};
|
|
113
|
-
const NATIVE_DATA_TYPES = {
|
|
114
|
-
SPONSORED: 1,
|
|
115
|
-
DESC: 2,
|
|
116
|
-
RATING: 3,
|
|
117
|
-
LIKES: 4,
|
|
118
|
-
DOWNLOADS: 5,
|
|
119
|
-
PRICE: 6,
|
|
120
|
-
SALEPRICE: 7,
|
|
121
|
-
PHONE: 8,
|
|
122
|
-
ADDRESS: 9,
|
|
123
|
-
DESC2: 10,
|
|
124
|
-
DISPLAYURL: 11,
|
|
125
|
-
CTATEXT: 12
|
|
126
|
-
};
|
|
127
|
-
const NATIVE_DATA_MAP = {
|
|
128
|
-
[NATIVE_DATA_TYPES.SPONSORED]: 'sponsoredBy',
|
|
129
|
-
[NATIVE_DATA_TYPES.DESC]: 'body',
|
|
130
|
-
[NATIVE_DATA_TYPES.RATING]: 'rating',
|
|
131
|
-
[NATIVE_DATA_TYPES.LIKES]: 'likes',
|
|
132
|
-
[NATIVE_DATA_TYPES.DOWNLOADS]: 'downloads',
|
|
133
|
-
[NATIVE_DATA_TYPES.PRICE]: 'price',
|
|
134
|
-
[NATIVE_DATA_TYPES.SALEPRICE]: 'salePrice',
|
|
135
|
-
[NATIVE_DATA_TYPES.PHONE]: 'phone',
|
|
136
|
-
[NATIVE_DATA_TYPES.ADDRESS]: 'address',
|
|
137
|
-
[NATIVE_DATA_TYPES.DESC2]: 'body2',
|
|
138
|
-
[NATIVE_DATA_TYPES.DISPLAYURL]: 'displayUrl',
|
|
139
|
-
[NATIVE_DATA_TYPES.CTATEXT]: 'cta'
|
|
140
|
-
};
|
|
141
|
-
const NATIVE_ASSETS_MAP = {
|
|
142
|
-
'title': { assetType: NATIVE_ASSET_TYPES.TITLE },
|
|
143
|
-
'icon': { assetType: NATIVE_ASSET_TYPES.IMG, subtype: NATIVE_IMAGE_TYPES.ICON },
|
|
144
|
-
'image': { assetType: NATIVE_ASSET_TYPES.IMG, subtype: NATIVE_IMAGE_TYPES.MAIN },
|
|
145
|
-
'sponsoredBy': { assetType: NATIVE_ASSET_TYPES.DATA, subtype: NATIVE_DATA_TYPES.SPONSORED },
|
|
146
|
-
'body': { assetType: NATIVE_ASSET_TYPES.DATA, subtype: NATIVE_DATA_TYPES.DESC },
|
|
147
|
-
'rating': { assetType: NATIVE_ASSET_TYPES.DATA, subtype: NATIVE_DATA_TYPES.RATING },
|
|
148
|
-
'likes': { assetType: NATIVE_ASSET_TYPES.DATA, subtype: NATIVE_DATA_TYPES.LIKES },
|
|
149
|
-
'downloads': { assetType: NATIVE_ASSET_TYPES.DATA, subtype: NATIVE_DATA_TYPES.DOWNLOADS },
|
|
150
|
-
'price': { assetType: NATIVE_ASSET_TYPES.DATA, subtype: NATIVE_DATA_TYPES.PRICE },
|
|
151
|
-
'salePrice': { assetType: NATIVE_ASSET_TYPES.DATA, subtype: NATIVE_DATA_TYPES.SALEPRICE },
|
|
152
|
-
'phone': { assetType: NATIVE_ASSET_TYPES.DATA, subtype: NATIVE_DATA_TYPES.PHONE },
|
|
153
|
-
'address': { assetType: NATIVE_ASSET_TYPES.DATA, subtype: NATIVE_DATA_TYPES.ADDRESS },
|
|
154
|
-
'body2': { assetType: NATIVE_ASSET_TYPES.DATA, subtype: NATIVE_DATA_TYPES.DESC2 },
|
|
155
|
-
'displayUrl': { assetType: NATIVE_ASSET_TYPES.DATA, subtype: NATIVE_DATA_TYPES.DISPLAYURL },
|
|
156
|
-
'cta': { assetType: NATIVE_ASSET_TYPES.DATA, subtype: NATIVE_DATA_TYPES.CTATEXT },
|
|
157
|
-
'video': { assetType: NATIVE_ASSET_TYPES.VIDEO }
|
|
158
|
-
};
|
|
159
|
-
const NATIVE_ALLOWED_PROPERTIES = [
|
|
160
|
-
'rendererUrl',
|
|
161
|
-
'sendTargetingKeys',
|
|
162
|
-
'adTemplate',
|
|
163
|
-
'type',
|
|
164
|
-
'ext',
|
|
165
|
-
'privacyLink',
|
|
166
|
-
'clickUrl',
|
|
167
|
-
'privacyIcon'
|
|
168
|
-
];
|
|
169
|
-
const NATIVE_ASSET_DEFAULT = {
|
|
170
|
-
TITLE: {
|
|
171
|
-
LEN: 25
|
|
172
|
-
},
|
|
173
|
-
VIDEO: {
|
|
174
|
-
MIMES: [
|
|
175
|
-
'video/mp4',
|
|
176
|
-
'video/webm'
|
|
177
|
-
],
|
|
178
|
-
MINDURATION: 0,
|
|
179
|
-
MAXDURATION: 120,
|
|
180
|
-
PROTOCOLS: [2, 3, 5, 6],
|
|
181
|
-
}
|
|
182
|
-
};
|
|
183
|
-
const NATIVE_EVENT_TYPES = {
|
|
184
|
-
IMRESSION: 1
|
|
185
|
-
};
|
|
186
|
-
const NATIVE_EVENT_TRACKING_METHOD = {
|
|
187
|
-
IMG: 1,
|
|
188
|
-
JS: 2
|
|
189
|
-
};
|
|
190
102
|
const LOCAL_STORAGE_KEY = 'ixdiag';
|
|
191
103
|
let hasRegisteredHandler = false;
|
|
192
104
|
export const storage = getStorageManager({gvlid: GLOBAL_VENDOR_ID, bidderCode: BIDDER_CODE});
|
|
@@ -307,50 +219,13 @@ function bidToVideoImp(bid) {
|
|
|
307
219
|
*/
|
|
308
220
|
function bidToNativeImp(bid) {
|
|
309
221
|
const imp = bidToImp(bid);
|
|
310
|
-
const nativeAdUnitRef = deepAccess(bid, 'mediaTypes.native');
|
|
311
|
-
|
|
312
|
-
const assets = [];
|
|
313
|
-
|
|
314
|
-
// Convert all native assets to imp object
|
|
315
|
-
for (const [adUnitProperty, adUnitValues] of Object.entries(nativeAdUnitRef)) {
|
|
316
|
-
if (!NATIVE_ASSETS_MAP[adUnitProperty]) {
|
|
317
|
-
continue;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
const { assetType, subtype } = NATIVE_ASSETS_MAP[adUnitProperty];
|
|
321
|
-
let asset;
|
|
322
|
-
switch (assetType) {
|
|
323
|
-
case NATIVE_ASSET_TYPES.TITLE:
|
|
324
|
-
asset = createNativeTitleRequest(adUnitValues);
|
|
325
|
-
break;
|
|
326
|
-
case NATIVE_ASSET_TYPES.IMG:
|
|
327
|
-
asset = createNativeImgRequest(adUnitValues, subtype);
|
|
328
|
-
break;
|
|
329
|
-
case NATIVE_ASSET_TYPES.VIDEO:
|
|
330
|
-
asset = createNativeVideoRequest(adUnitValues);
|
|
331
|
-
break;
|
|
332
|
-
case NATIVE_ASSET_TYPES.DATA:
|
|
333
|
-
asset = createNativeDataRequest(adUnitValues, subtype);
|
|
334
|
-
break;
|
|
335
|
-
}
|
|
336
|
-
asset.id = assetType + (subtype || 0);
|
|
337
|
-
assets.push(asset);
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
if (assets.length === 0) {
|
|
341
|
-
logWarn('IX Bid Adapter: Native bid does not contain recognised assets in [mediaTypes.native]');
|
|
342
|
-
return {};
|
|
343
|
-
}
|
|
344
222
|
|
|
345
|
-
const request =
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
}],
|
|
352
|
-
privacy: 1
|
|
353
|
-
};
|
|
223
|
+
const request = bid.nativeOrtbRequest
|
|
224
|
+
request.eventtrackers = [{
|
|
225
|
+
event: 1,
|
|
226
|
+
methods: [1, 2]
|
|
227
|
+
}];
|
|
228
|
+
request.privacy = 1;
|
|
354
229
|
|
|
355
230
|
imp.native = {
|
|
356
231
|
request: JSON.stringify(request),
|
|
@@ -365,80 +240,6 @@ function bidToNativeImp(bid) {
|
|
|
365
240
|
return imp;
|
|
366
241
|
}
|
|
367
242
|
|
|
368
|
-
/**
|
|
369
|
-
* Converts native bid asset to a native impression asset
|
|
370
|
-
* @param {object} bidAsset PBJS bid asset object
|
|
371
|
-
* @returns {object} IX impression asset object
|
|
372
|
-
*/
|
|
373
|
-
function createNativeTitleRequest(bidAsset) {
|
|
374
|
-
return {
|
|
375
|
-
required: bidAsset.required ? 1 : 0,
|
|
376
|
-
title: {
|
|
377
|
-
len: bidAsset.len ? bidAsset.len : NATIVE_ASSET_DEFAULT.TITLE.LEN,
|
|
378
|
-
ext: bidAsset.ext
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
/**
|
|
384
|
-
* Converts native bid asset to a native impression asset
|
|
385
|
-
* @param {object} bidAsset PBJS bid asset object
|
|
386
|
-
* @param {int} type The image type
|
|
387
|
-
* @returns {object} IX impression asset object
|
|
388
|
-
*/
|
|
389
|
-
function createNativeImgRequest(bidAsset, type) {
|
|
390
|
-
let asset = {
|
|
391
|
-
required: bidAsset.required ? 1 : 0,
|
|
392
|
-
img: {
|
|
393
|
-
type: type,
|
|
394
|
-
mimes: bidAsset.mimes,
|
|
395
|
-
ext: bidAsset.ext
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
if (bidAsset.hasOwnProperty('sizes') && bidAsset.sizes.length === 2) {
|
|
400
|
-
asset.img.wmin = bidAsset.sizes[0];
|
|
401
|
-
asset.img.hmin = bidAsset.sizes[1];
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
return asset
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
/**
|
|
408
|
-
* Converts native bid asset to a native impression asset
|
|
409
|
-
* @param {object} bidAsset PBJS bid asset object
|
|
410
|
-
* @returns {object} IX impression asset object
|
|
411
|
-
*/
|
|
412
|
-
function createNativeVideoRequest(bidAsset) {
|
|
413
|
-
return {
|
|
414
|
-
required: bidAsset.required ? 1 : 0,
|
|
415
|
-
video: {
|
|
416
|
-
mimes: bidAsset.mimes ? bidAsset.mimes : NATIVE_ASSET_DEFAULT.VIDEO.MIMES,
|
|
417
|
-
minduration: bidAsset.minduration ? bidAsset.minduration : NATIVE_ASSET_DEFAULT.VIDEO.MINDURATION,
|
|
418
|
-
maxduration: bidAsset.maxduration ? bidAsset.maxduration : NATIVE_ASSET_DEFAULT.VIDEO.MAXDURATION,
|
|
419
|
-
protocols: bidAsset.protocols ? bidAsset.protocols : NATIVE_ASSET_DEFAULT.VIDEO.PROTOCOLS,
|
|
420
|
-
ext: bidAsset.ext
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
/**
|
|
426
|
-
* Converts native bid asset to a native impression asset
|
|
427
|
-
* @param {object} bidAsset PBJS bid asset object
|
|
428
|
-
* @param {int} type The image type
|
|
429
|
-
* @returns {object} IX impression asset object
|
|
430
|
-
*/
|
|
431
|
-
function createNativeDataRequest(bidAsset, type) {
|
|
432
|
-
return {
|
|
433
|
-
required: bidAsset.required ? 1 : 0,
|
|
434
|
-
data: {
|
|
435
|
-
type: type,
|
|
436
|
-
len: bidAsset.len,
|
|
437
|
-
ext: bidAsset.ext
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
|
|
442
243
|
/**
|
|
443
244
|
* Converts an incoming PBJS bid to an IX Impression
|
|
444
245
|
* @param {object} bid PBJS bid object
|
|
@@ -559,7 +360,7 @@ function parseBid(rawBid, currency, bidRequest) {
|
|
|
559
360
|
bid.mediaTypes = bidRequest.mediaTypes;
|
|
560
361
|
bid.ttl = isValidExpiry ? rawBid.exp : VIDEO_TIME_TO_LIVE;
|
|
561
362
|
} else if (parsedAdm && parsedAdm.native) {
|
|
562
|
-
bid.native =
|
|
363
|
+
bid.native = {ortb: parsedAdm.native};
|
|
563
364
|
bid.width = rawBid.w ? rawBid.w : 1;
|
|
564
365
|
bid.height = rawBid.h ? rawBid.h : 1;
|
|
565
366
|
bid.mediaType = NATIVE;
|
|
@@ -583,84 +384,6 @@ function parseBid(rawBid, currency, bidRequest) {
|
|
|
583
384
|
return bid;
|
|
584
385
|
}
|
|
585
386
|
|
|
586
|
-
/**
|
|
587
|
-
* Parse native adm and set native asset key names recognized by Prebid.js
|
|
588
|
-
* @param {string} adm Native adm complience
|
|
589
|
-
*/
|
|
590
|
-
function interpretNativeAdm(nativeResponse) {
|
|
591
|
-
const native = {
|
|
592
|
-
clickUrl: nativeResponse.link.url,
|
|
593
|
-
privacyLink: nativeResponse.privacy
|
|
594
|
-
};
|
|
595
|
-
|
|
596
|
-
for (const asset of nativeResponse.assets) {
|
|
597
|
-
const subtype = asset.id % 100;
|
|
598
|
-
const assetType = asset.id - subtype;
|
|
599
|
-
|
|
600
|
-
switch (assetType) {
|
|
601
|
-
case NATIVE_ASSET_TYPES.TITLE:
|
|
602
|
-
native.title = asset.title && asset.title.text;
|
|
603
|
-
break;
|
|
604
|
-
case NATIVE_ASSET_TYPES.IMG:
|
|
605
|
-
const image = {
|
|
606
|
-
url: asset.img && asset.img.url,
|
|
607
|
-
height: asset.img && asset.img.h,
|
|
608
|
-
width: asset.img && asset.img.w
|
|
609
|
-
};
|
|
610
|
-
native[subtype === NATIVE_IMAGE_TYPES.ICON ? 'icon' : 'image'] = image;
|
|
611
|
-
break;
|
|
612
|
-
case NATIVE_ASSET_TYPES.VIDEO:
|
|
613
|
-
native.video = asset.video && asset.video.vasttag;
|
|
614
|
-
break;
|
|
615
|
-
case NATIVE_ASSET_TYPES.DATA:
|
|
616
|
-
setDataAsset(native, asset, subtype);
|
|
617
|
-
break;
|
|
618
|
-
default:
|
|
619
|
-
logWarn(`IX Bid Adapter: native asset ID ${asset.id} could not be recognized`);
|
|
620
|
-
}
|
|
621
|
-
}
|
|
622
|
-
|
|
623
|
-
setTrackers(native, nativeResponse);
|
|
624
|
-
return native;
|
|
625
|
-
}
|
|
626
|
-
|
|
627
|
-
function setDataAsset(native, asset, type) {
|
|
628
|
-
if (!(type in NATIVE_DATA_MAP)) {
|
|
629
|
-
logWarn(`IX Bid Adapter: native data asset type ${type} is not supported`);
|
|
630
|
-
return;
|
|
631
|
-
}
|
|
632
|
-
native[NATIVE_DATA_MAP[type]] = asset.data && asset.data.value;
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
function setTrackers(native, nativeResponse) {
|
|
636
|
-
native.impressionTrackers = []
|
|
637
|
-
|
|
638
|
-
if (Array.isArray(nativeResponse.imptrackers)) {
|
|
639
|
-
native.impressionTrackers.push(...nativeResponse.imptrackers)
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
if (Array.isArray(nativeResponse.link.clicktrackers)) {
|
|
643
|
-
native.impressionTrackers.push(...nativeResponse.link.clicktrackers)
|
|
644
|
-
}
|
|
645
|
-
|
|
646
|
-
if (Array.isArray(nativeResponse.eventtrackers)) {
|
|
647
|
-
nativeResponse.eventtrackers.forEach(tracker => {
|
|
648
|
-
if (tracker.event !== NATIVE_EVENT_TYPES.IMRESSION) {
|
|
649
|
-
return
|
|
650
|
-
}
|
|
651
|
-
|
|
652
|
-
switch (tracker.method) {
|
|
653
|
-
case NATIVE_EVENT_TRACKING_METHOD.IMG:
|
|
654
|
-
native.impressionTrackers.push(tracker.url);
|
|
655
|
-
break;
|
|
656
|
-
case NATIVE_EVENT_TRACKING_METHOD.JS:
|
|
657
|
-
native.javascriptTrackers = `<script src=\"${tracker.url}\"></script>`;
|
|
658
|
-
break;
|
|
659
|
-
}
|
|
660
|
-
})
|
|
661
|
-
}
|
|
662
|
-
}
|
|
663
|
-
|
|
664
387
|
/**
|
|
665
388
|
* Determines whether or not the given object is valid size format.
|
|
666
389
|
*
|
|
@@ -758,25 +481,13 @@ function isValidBidFloorParams(bidFloor, bidFloorCur) {
|
|
|
758
481
|
bidFloorCur.match(curRegex));
|
|
759
482
|
}
|
|
760
483
|
|
|
761
|
-
function nativeMediaTypeValid(
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
let hasValidAsset = false;
|
|
767
|
-
|
|
768
|
-
for (const property in nativeObj) {
|
|
769
|
-
if (!(property in NATIVE_ASSETS_MAP) && !NATIVE_ALLOWED_PROPERTIES.includes(property)) {
|
|
770
|
-
logError('IX Bid Adapter: native', { bidder: BIDDER_CODE, code: ERROR_CODES.PROPERTY_NOT_INCLUDED });
|
|
771
|
-
return false;
|
|
772
|
-
}
|
|
773
|
-
|
|
774
|
-
if (property in NATIVE_ASSETS_MAP) {
|
|
775
|
-
hasValidAsset = true;
|
|
776
|
-
}
|
|
484
|
+
function nativeMediaTypeValid(bid) {
|
|
485
|
+
const nativeMediaTypes = deepAccess(bid, 'mediaTypes.native');
|
|
486
|
+
if (nativeMediaTypes === undefined) {
|
|
487
|
+
return true
|
|
777
488
|
}
|
|
778
489
|
|
|
779
|
-
return
|
|
490
|
+
return bid.nativeOrtbRequest && Array.isArray(bid.nativeOrtbRequest.assets) && bid.nativeOrtbRequest.assets.length > 0
|
|
780
491
|
}
|
|
781
492
|
|
|
782
493
|
/**
|
|
@@ -837,8 +548,6 @@ function getEidInfo(allEids) {
|
|
|
837
548
|
*
|
|
838
549
|
*/
|
|
839
550
|
function buildRequest(validBidRequests, bidderRequest, impressions, version) {
|
|
840
|
-
// convert Native ORTB definition to old-style prebid native definition
|
|
841
|
-
validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
|
|
842
551
|
// Always use secure HTTPS protocol.
|
|
843
552
|
let baseUrl = SECURE_BID_URL;
|
|
844
553
|
// Get ids from Prebid User ID Modules
|
|
@@ -966,7 +675,6 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
|
|
|
966
675
|
// Use the siteId in the first bid request as the main siteId.
|
|
967
676
|
siteID = validBidRequests[0].params.siteId;
|
|
968
677
|
payload.s = siteID;
|
|
969
|
-
payload.v = version;
|
|
970
678
|
if (version) {
|
|
971
679
|
payload.v = version;
|
|
972
680
|
}
|
|
@@ -1603,7 +1311,6 @@ export const spec = {
|
|
|
1603
1311
|
const paramsSize = deepAccess(bid, 'params.size');
|
|
1604
1312
|
const mediaTypeBannerSizes = deepAccess(bid, 'mediaTypes.banner.sizes');
|
|
1605
1313
|
const mediaTypeVideoRef = deepAccess(bid, 'mediaTypes.video');
|
|
1606
|
-
const mediaTypeNativeRef = deepAccess(bid, 'mediaTypes.native');
|
|
1607
1314
|
const mediaTypeVideoPlayerSize = deepAccess(bid, 'mediaTypes.video.playerSize');
|
|
1608
1315
|
const hasBidFloor = bid.params.hasOwnProperty('bidFloor');
|
|
1609
1316
|
const hasBidFloorCur = bid.params.hasOwnProperty('bidFloorCur');
|
|
@@ -1670,7 +1377,7 @@ export const spec = {
|
|
|
1670
1377
|
}
|
|
1671
1378
|
}
|
|
1672
1379
|
|
|
1673
|
-
return nativeMediaTypeValid(
|
|
1380
|
+
return nativeMediaTypeValid(bid);
|
|
1674
1381
|
},
|
|
1675
1382
|
|
|
1676
1383
|
/**
|