prebid.js 6.1.0 → 6.5.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/.circleci/config.yml +1 -1
- package/README.md +1 -1
- package/browsers.json +13 -29
- package/gulpfile.js +87 -82
- package/integrationExamples/gpt/weboramaRtdProvider_example.html +23 -14
- package/karma.conf.maker.js +2 -2
- package/modules/33acrossBidAdapter.js +189 -102
- package/modules/adagioBidAdapter.js +1 -1
- package/modules/addefendBidAdapter.js +1 -0
- package/modules/adkernelBidAdapter.js +146 -61
- package/modules/adlooxAdServerVideo.js +2 -2
- package/modules/adlooxAnalyticsAdapter.js +4 -4
- package/modules/admanBidAdapter.js +1 -0
- package/modules/admixerBidAdapter.js +3 -2
- package/modules/adnuntiusBidAdapter.js +5 -2
- package/modules/adomikAnalyticsAdapter.js +6 -0
- package/modules/adplusBidAdapter.js +203 -0
- package/modules/adplusBidAdapter.md +39 -0
- package/modules/adxcgBidAdapter.js +311 -359
- package/modules/adxcgBidAdapter.md +22 -21
- package/modules/adyoulikeBidAdapter.js +20 -11
- package/modules/aniviewBidAdapter.js +1 -1
- package/modules/appnexusBidAdapter.js +19 -3
- package/modules/beachfrontBidAdapter.js +14 -17
- package/modules/beopBidAdapter.js +6 -4
- package/modules/bidViewability.js +3 -3
- package/modules/bidViewabilityIO.js +3 -3
- package/modules/bliinkBidAdapter.js +1 -1
- package/modules/colossussspBidAdapter.js +7 -0
- package/modules/compassBidAdapter.js +201 -0
- package/modules/compassBidAdapter.md +79 -0
- package/modules/consentManagement.js +7 -1
- package/modules/craftBidAdapter.js +5 -3
- package/modules/criteoBidAdapter.js +1 -1
- package/modules/currency.js +2 -2
- package/modules/cwireBidAdapter.js +3 -0
- package/modules/dailyhuntBidAdapter.js +435 -0
- package/modules/dailyhuntBidAdapter.md +4 -0
- package/modules/dchain.js +149 -0
- package/modules/dchain.md +45 -0
- package/modules/docereeBidAdapter.js +10 -1
- package/modules/docereeBidAdapter.md +2 -0
- package/modules/dspxBidAdapter.js +1 -1
- package/modules/emx_digitalBidAdapter.js +9 -1
- package/modules/engageyaBidAdapter.js +1 -1
- package/modules/feedadBidAdapter.js +2 -2
- package/modules/feedadBidAdapter.md +4 -2
- package/modules/freewheel-sspBidAdapter.js +6 -0
- package/modules/futureads.md +48 -0
- package/modules/glimpseBidAdapter.js +16 -3
- package/modules/goldbachBidAdapter.js +1176 -0
- package/modules/goldbachBidAdapter.md +151 -0
- package/modules/gptPreAuction.js +55 -7
- package/modules/gridBidAdapter.js +4 -3
- package/modules/gumgumBidAdapter.js +7 -3
- package/modules/improvedigitalBidAdapter.js +19 -3
- package/modules/instreamTracking.js +4 -4
- package/modules/intersectionRtdProvider.js +114 -0
- package/modules/invibesBidAdapter.js +64 -14
- package/modules/invibesBidAdapter.md +2 -1
- package/modules/ipromBidAdapter.js +79 -0
- package/modules/ixBidAdapter.js +53 -18
- package/modules/kinessoIdSystem.js +1 -1
- package/modules/limelightDigitalBidAdapter.js +3 -1
- package/modules/livewrappedAnalyticsAdapter.js +3 -1
- package/modules/livewrappedBidAdapter.js +8 -2
- package/modules/loglyliftBidAdapter.js +79 -0
- package/modules/loglyliftBidAdapter.md +55 -0
- package/modules/lotamePanoramaIdSystem.js +80 -8
- package/modules/luponmediaBidAdapter.js +570 -0
- package/modules/mediasquareBidAdapter.js +1 -9
- package/modules/missenaBidAdapter.js +89 -0
- package/modules/nextMillenniumBidAdapter.js +37 -7
- package/modules/optimeraRtdProvider.js +8 -1
- package/modules/ozoneBidAdapter.js +21 -64
- package/modules/prebidServerBidAdapter/index.js +16 -12
- package/modules/pubgeniusBidAdapter.js +1 -1
- package/modules/pubmaticBidAdapter.js +3 -3
- package/modules/pubxaiAnalyticsAdapter.js +17 -0
- package/modules/relaidoBidAdapter.js +86 -65
- package/modules/richaudienceBidAdapter.js +2 -3
- package/modules/rtdModule/index.js +48 -18
- package/modules/rubiconBidAdapter.js +31 -19
- package/modules/sharedIdSystem.js +27 -1
- package/modules/smaatoBidAdapter.js +4 -1
- package/modules/smartxBidAdapter.js +17 -1
- package/modules/tappxBidAdapter.js +3 -1
- package/modules/targetVideoBidAdapter.js +187 -0
- package/modules/targetVideoBidAdapter.md +34 -0
- package/modules/telariaBidAdapter.js +2 -2
- package/modules/trustxBidAdapter.js +8 -16
- package/modules/undertoneBidAdapter.js +8 -1
- package/modules/userId/index.js +27 -2
- package/modules/ventes.md +71 -0
- package/modules/ventesBidAdapter.js +104 -64
- package/modules/ventesBidAdapter.md +0 -1
- package/modules/vidoomyBidAdapter.js +16 -10
- package/modules/visxBidAdapter.js +19 -2
- package/modules/visxBidAdapter.md +4 -6
- package/modules/weboramaRtdProvider.js +288 -73
- package/modules/weboramaRtdProvider.md +27 -10
- package/modules/yahoosspBidAdapter.js +5 -1
- package/modules/yahoosspBidAdapter.md +1 -1
- package/modules/yieldmoBidAdapter.js +23 -5
- package/modules/yieldoneBidAdapter.js +115 -11
- package/modules/zetaSspBidAdapter.md +33 -1
- package/modules/zeta_global_sspAnalyticsAdapter.js +97 -0
- package/modules/zeta_global_sspAnalyticsAdapter.md +24 -0
- package/modules/zeta_global_sspBidAdapter.js +22 -1
- package/package.json +1 -1
- package/plugins/pbjsGlobals.js +28 -1
- package/src/auction.js +5 -4
- package/src/config.js +27 -3
- package/src/prebid.js +3 -2
- package/src/targeting.js +24 -3
- package/src/utils.js +53 -8
- package/test/helpers/prebidGlobal.js +1 -0
- package/test/spec/config_spec.js +279 -0
- package/test/spec/integration/faker/googletag.js +6 -0
- package/test/spec/modules/33acrossBidAdapter_spec.js +300 -78
- package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +6 -6
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +35 -0
- package/test/spec/modules/adomikAnalyticsAdapter_spec.js +6 -0
- package/test/spec/modules/adplusBidAdapter_spec.js +213 -0
- package/test/spec/modules/adxcgBidAdapter_spec.js +820 -571
- package/test/spec/modules/adyoulikeBidAdapter_spec.js +75 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +49 -1
- package/test/spec/modules/beachfrontBidAdapter_spec.js +65 -1
- package/test/spec/modules/beopBidAdapter_spec.js +1 -1
- package/test/spec/modules/bidViewabilityIO_spec.js +2 -2
- package/test/spec/modules/bidViewability_spec.js +4 -4
- package/test/spec/modules/colossussspBidAdapter_spec.js +9 -0
- package/test/spec/modules/compassBidAdapter_spec.js +397 -0
- package/test/spec/modules/consentManagement_spec.js +20 -0
- package/test/spec/modules/cwireBidAdapter_spec.js +10 -8
- package/test/spec/modules/dailyhuntBidAdapter_spec.js +404 -0
- package/test/spec/modules/dchain_spec.js +329 -0
- package/test/spec/modules/docereeBidAdapter_spec.js +9 -1
- package/test/spec/modules/emx_digitalBidAdapter_spec.js +10 -0
- package/test/spec/modules/feedadBidAdapter_spec.js +15 -0
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +19 -0
- package/test/spec/modules/goldbachBidAdapter_spec.js +1359 -0
- package/test/spec/modules/gptPreAuction_spec.js +177 -2
- package/test/spec/modules/gumgumBidAdapter_spec.js +6 -0
- package/test/spec/modules/improvedigitalBidAdapter_spec.js +3 -1
- package/test/spec/modules/intersectionRtdProvider_spec.js +141 -0
- package/test/spec/modules/invibesBidAdapter_spec.js +148 -4
- package/test/spec/modules/ipromBidAdapter_spec.js +195 -0
- package/test/spec/modules/ixBidAdapter_spec.js +112 -62
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +84 -23
- package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +22 -0
- package/test/spec/modules/livewrappedBidAdapter_spec.js +31 -0
- package/test/spec/modules/loglyliftBidAdapter_spec.js +172 -0
- package/test/spec/modules/lotamePanoramaIdSystem_spec.js +227 -0
- package/test/spec/modules/luponmediaBidAdapter_spec.js +412 -0
- package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -4
- package/test/spec/modules/missenaBidAdapter_spec.js +134 -0
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +26 -1
- package/test/spec/modules/optimeraRtdProvider_spec.js +14 -1
- package/test/spec/modules/ozoneBidAdapter_spec.js +43 -31
- package/test/spec/modules/prebidServerBidAdapter_spec.js +43 -0
- package/test/spec/modules/pubgeniusBidAdapter_spec.js +3 -3
- package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
- package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +11 -0
- package/test/spec/modules/realTimeDataModule_spec.js +135 -49
- package/test/spec/modules/relaidoBidAdapter_spec.js +71 -63
- package/test/spec/modules/richaudienceBidAdapter_spec.js +2 -2
- package/test/spec/modules/rubiconBidAdapter_spec.js +65 -9
- package/test/spec/modules/sharedIdSystem_spec.js +52 -6
- package/test/spec/modules/smaatoBidAdapter_spec.js +31 -0
- package/test/spec/modules/smartxBidAdapter_spec.js +9 -0
- package/test/spec/modules/tappxBidAdapter_spec.js +4 -0
- package/test/spec/modules/targetVideoBidAdapter_spec.js +96 -0
- package/test/spec/modules/userId_spec.js +51 -0
- package/test/spec/modules/visxBidAdapter_spec.js +120 -4
- package/test/spec/modules/weboramaRtdProvider_spec.js +408 -214
- package/test/spec/modules/yahoosspBidAdapter_spec.js +28 -1
- package/test/spec/modules/yieldoneBidAdapter_spec.js +299 -53
- package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +427 -0
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +33 -1
- package/test/spec/unit/core/targeting_spec.js +116 -0
- package/test/spec/utils_spec.js +38 -0
- package/test/test_deps.js +3 -0
- package/test/test_index.js +1 -3
|
@@ -34,31 +34,34 @@ Module that connects to an Adxcg.com zone to fetch bids.
|
|
|
34
34
|
code: 'native-ad-div',
|
|
35
35
|
mediaTypes: {
|
|
36
36
|
native: {
|
|
37
|
-
|
|
37
|
+
image: {
|
|
38
38
|
sendId: false,
|
|
39
|
-
required:
|
|
40
|
-
sizes: [
|
|
39
|
+
required: false,
|
|
40
|
+
sizes: [127, 83]
|
|
41
41
|
},
|
|
42
42
|
icon: {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
brand: {
|
|
43
|
+
sizes: [80, 80],
|
|
44
|
+
required: false,
|
|
46
45
|
sendId: true,
|
|
47
46
|
},
|
|
48
47
|
title: {
|
|
49
48
|
sendId: false,
|
|
50
|
-
required:
|
|
49
|
+
required: false,
|
|
51
50
|
len: 75
|
|
52
51
|
},
|
|
53
52
|
body: {
|
|
54
53
|
sendId: false,
|
|
55
|
-
required:
|
|
54
|
+
required: false,
|
|
56
55
|
len: 200
|
|
57
56
|
},
|
|
58
|
-
|
|
57
|
+
cta: {
|
|
59
58
|
sendId: false,
|
|
60
59
|
required: false,
|
|
61
|
-
len:
|
|
60
|
+
len: 75
|
|
61
|
+
},
|
|
62
|
+
sponsoredBy: {
|
|
63
|
+
sendId: false,
|
|
64
|
+
required: false
|
|
62
65
|
}
|
|
63
66
|
}
|
|
64
67
|
},
|
|
@@ -73,21 +76,19 @@ Module that connects to an Adxcg.com zone to fetch bids.
|
|
|
73
76
|
code: 'video-div',
|
|
74
77
|
mediaTypes: {
|
|
75
78
|
video: {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
playerSize: [640, 480],
|
|
80
|
+
context: 'instream',
|
|
81
|
+
mimes: ['video/mp4'],
|
|
82
|
+
protocols: [2, 3, 5, 6, 8],
|
|
83
|
+
playback_method: ['auto_play_sound_off'],
|
|
84
|
+
maxduration: 100,
|
|
85
|
+
skip: 1
|
|
86
|
+
}
|
|
82
87
|
},
|
|
83
88
|
bids: [{
|
|
84
89
|
bidder: 'adxcg',
|
|
85
90
|
params: {
|
|
86
|
-
adzoneid: '20'
|
|
87
|
-
video: {
|
|
88
|
-
maxduration: 100,
|
|
89
|
-
skippable: true
|
|
90
|
-
}
|
|
91
|
+
adzoneid: '20'
|
|
91
92
|
}
|
|
92
93
|
}]
|
|
93
94
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { deepAccess, buildUrl, parseSizesInput } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import { config } from '../src/config.js';
|
|
4
|
+
import { createEidsArray } from './userId/eids.js';
|
|
4
5
|
import find from 'core-js-pure/features/array/find.js';
|
|
5
6
|
import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
|
|
6
7
|
|
|
@@ -97,17 +98,21 @@ export const spec = {
|
|
|
97
98
|
PageRefreshed: getPageRefreshed()
|
|
98
99
|
};
|
|
99
100
|
|
|
100
|
-
if (bidderRequest
|
|
101
|
+
if (bidderRequest.gdprConsent) {
|
|
101
102
|
payload.gdprConsent = {
|
|
102
103
|
consentString: bidderRequest.gdprConsent.consentString,
|
|
103
104
|
consentRequired: (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') ? bidderRequest.gdprConsent.gdprApplies : null
|
|
104
105
|
};
|
|
105
106
|
}
|
|
106
107
|
|
|
107
|
-
if (bidderRequest
|
|
108
|
+
if (bidderRequest.uspConsent) {
|
|
108
109
|
payload.uspConsent = bidderRequest.uspConsent;
|
|
109
110
|
}
|
|
110
111
|
|
|
112
|
+
if (deepAccess(bidderRequest, 'userId')) {
|
|
113
|
+
payload.userId = createEidsArray(bidderRequest.userId);
|
|
114
|
+
}
|
|
115
|
+
|
|
111
116
|
const data = JSON.stringify(payload);
|
|
112
117
|
const options = {
|
|
113
118
|
withCredentials: true
|
|
@@ -175,11 +180,13 @@ function getCanonicalUrl() {
|
|
|
175
180
|
|
|
176
181
|
/* Get mediatype from bidRequest */
|
|
177
182
|
function getMediatype(bidRequest) {
|
|
183
|
+
if (deepAccess(bidRequest, 'mediaTypes.banner')) {
|
|
184
|
+
return BANNER;
|
|
185
|
+
}
|
|
178
186
|
if (deepAccess(bidRequest, 'mediaTypes.video')) {
|
|
179
187
|
return VIDEO;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
} else if (deepAccess(bidRequest, 'mediaTypes.native')) {
|
|
188
|
+
}
|
|
189
|
+
if (deepAccess(bidRequest, 'mediaTypes.native')) {
|
|
183
190
|
return NATIVE;
|
|
184
191
|
}
|
|
185
192
|
}
|
|
@@ -340,7 +347,7 @@ function getTrackers(eventsArray, jsTrackers) {
|
|
|
340
347
|
|
|
341
348
|
function getVideoAd(response) {
|
|
342
349
|
var adJson = {};
|
|
343
|
-
if (typeof response.Ad === 'string') {
|
|
350
|
+
if (typeof response.Ad === 'string' && response.Ad.indexOf('\/\*PREBID\*\/') > 0) {
|
|
344
351
|
adJson = JSON.parse(response.Ad.match(/\/\*PREBID\*\/(.*)\/\*PREBID\*\//)[1]);
|
|
345
352
|
return deepAccess(adJson, 'Content.MainVideo.Vast');
|
|
346
353
|
}
|
|
@@ -473,13 +480,15 @@ function createBid(response, bidRequests) {
|
|
|
473
480
|
meta: response.Meta || { advertiserDomains: [] }
|
|
474
481
|
};
|
|
475
482
|
|
|
476
|
-
|
|
483
|
+
// retreive video response if present
|
|
484
|
+
const vast64 = response.Vast || getVideoAd(response);
|
|
485
|
+
if (vast64) {
|
|
486
|
+
bid.vastXml = window.atob(vast64);
|
|
487
|
+
bid.mediaType = 'video';
|
|
488
|
+
} else if (request.Native) {
|
|
489
|
+
// format Native response if Native was requested
|
|
477
490
|
bid.native = getNativeAssets(response, request.Native);
|
|
478
491
|
bid.mediaType = 'native';
|
|
479
|
-
} else if (request && request.Video) {
|
|
480
|
-
const vast64 = response.Vast || getVideoAd(response);
|
|
481
|
-
bid.vastXml = vast64 ? window.atob(vast64) : '';
|
|
482
|
-
bid.mediaType = 'video';
|
|
483
492
|
} else {
|
|
484
493
|
bid.width = response.Width;
|
|
485
494
|
bid.height = response.Height;
|
|
@@ -309,7 +309,7 @@ function getUserSyncs(syncOptions, serverResponses) {
|
|
|
309
309
|
export const spec = {
|
|
310
310
|
code: BIDDER_CODE,
|
|
311
311
|
gvlid: GVLID,
|
|
312
|
-
aliases: ['avantisvideo', 'selectmediavideo', 'vidcrunch', 'openwebvideo'],
|
|
312
|
+
aliases: ['avantisvideo', 'selectmediavideo', 'vidcrunch', 'openwebvideo', 'didnavideo'],
|
|
313
313
|
supportedMediaTypes: [VIDEO, BANNER],
|
|
314
314
|
isBidRequestValid,
|
|
315
315
|
buildRequests,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { convertCamelToUnderscore, isArray, isNumber, isPlainObject, logError, logInfo, deepAccess, logMessage, convertTypes, isStr, getParameterByName, deepClone, chunk, logWarn, getBidRequest, createTrackPixelHtml, isEmpty, transformBidderParamKeywords, getMaxValueFromArray, fill, getMinValueFromArray, isArrayOfNums, isFn } from '../src/utils.js';
|
|
1
|
+
import { convertCamelToUnderscore, isArray, isNumber, isPlainObject, logError, logInfo, deepAccess, logMessage, convertTypes, isStr, getParameterByName, deepClone, chunk, logWarn, getBidRequest, createTrackPixelHtml, isEmpty, transformBidderParamKeywords, getMaxValueFromArray, fill, getMinValueFromArray, isArrayOfNums, isFn, isAllowZeroCpmBidsEnabled } from '../src/utils.js';
|
|
2
2
|
import { Renderer } from '../src/Renderer.js';
|
|
3
3
|
import { config } from '../src/config.js';
|
|
4
4
|
import { registerBidder, getIabSubCategory } from '../src/adapters/bidderFactory.js';
|
|
@@ -78,7 +78,6 @@ export const spec = {
|
|
|
78
78
|
{ code: 'districtm', gvlid: 144 },
|
|
79
79
|
{ code: 'adasta' },
|
|
80
80
|
{ code: 'beintoo', gvlid: 618 },
|
|
81
|
-
{ code: 'targetVideo' },
|
|
82
81
|
],
|
|
83
82
|
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
|
|
84
83
|
|
|
@@ -293,7 +292,8 @@ export const spec = {
|
|
|
293
292
|
serverResponse.tags.forEach(serverBid => {
|
|
294
293
|
const rtbBid = getRtbBid(serverBid);
|
|
295
294
|
if (rtbBid) {
|
|
296
|
-
|
|
295
|
+
const cpmCheck = (isAllowZeroCpmBidsEnabled(bidderRequest.bidderCode)) ? rtbBid.cpm >= 0 : rtbBid.cpm > 0;
|
|
296
|
+
if (cpmCheck && includes(this.supportedMediaTypes, rtbBid.ad_type)) {
|
|
297
297
|
const bid = newBid(serverBid, rtbBid, bidderRequest);
|
|
298
298
|
bid.mediaType = parseMediaType(rtbBid);
|
|
299
299
|
bids.push(bid);
|
|
@@ -598,6 +598,22 @@ function newBid(serverBid, rtbBid, bidderRequest) {
|
|
|
598
598
|
bid.meta = Object.assign({}, bid.meta, { advertiserId: rtbBid.advertiser_id });
|
|
599
599
|
}
|
|
600
600
|
|
|
601
|
+
// temporary function; may remove at later date if/when adserver fully supports dchain
|
|
602
|
+
function setupDChain(rtbBid) {
|
|
603
|
+
let dchain = {
|
|
604
|
+
ver: '1.0',
|
|
605
|
+
complete: 0,
|
|
606
|
+
nodes: [{
|
|
607
|
+
bsid: rtbBid.buyer_member_id.toString()
|
|
608
|
+
}],
|
|
609
|
+
};
|
|
610
|
+
|
|
611
|
+
return dchain;
|
|
612
|
+
}
|
|
613
|
+
if (rtbBid.buyer_member_id) {
|
|
614
|
+
bid.meta = Object.assign({}, bid.meta, {dchain: setupDChain(rtbBid)});
|
|
615
|
+
}
|
|
616
|
+
|
|
601
617
|
if (rtbBid.brand_id) {
|
|
602
618
|
bid.meta = Object.assign({}, bid.meta, { brandId: rtbBid.brand_id });
|
|
603
619
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { logWarn, deepAccess, isArray, parseSizesInput, isFn, parseUrl, getUniqueIdentifierStr } from '../src/utils.js';
|
|
1
|
+
import { logWarn, deepAccess, deepSetValue, deepClone, isArray, parseSizesInput, isFn, parseUrl, getUniqueIdentifierStr } from '../src/utils.js';
|
|
2
2
|
import { config } from '../src/config.js';
|
|
3
3
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
4
4
|
import { Renderer } from '../src/Renderer.js';
|
|
@@ -6,7 +6,7 @@ import { VIDEO, BANNER } from '../src/mediaTypes.js';
|
|
|
6
6
|
import find from 'core-js-pure/features/array/find.js';
|
|
7
7
|
import includes from 'core-js-pure/features/array/includes.js';
|
|
8
8
|
|
|
9
|
-
const ADAPTER_VERSION = '1.
|
|
9
|
+
const ADAPTER_VERSION = '1.19';
|
|
10
10
|
const ADAPTER_NAME = 'BFIO_PREBID';
|
|
11
11
|
const OUTSTREAM = 'outstream';
|
|
12
12
|
const CURRENCY = 'USD';
|
|
@@ -360,6 +360,7 @@ function createVideoRequestData(bid, bidderRequest) {
|
|
|
360
360
|
let tagid = getVideoBidParam(bid, 'tagid');
|
|
361
361
|
let topLocation = getTopWindowLocation(bidderRequest);
|
|
362
362
|
let eids = getEids(bid);
|
|
363
|
+
let ortb2 = deepClone(config.getConfig('ortb2'));
|
|
363
364
|
let payload = {
|
|
364
365
|
isPrebid: true,
|
|
365
366
|
appId: appId,
|
|
@@ -378,6 +379,7 @@ function createVideoRequestData(bid, bidderRequest) {
|
|
|
378
379
|
displaymanagerver: ADAPTER_VERSION
|
|
379
380
|
}],
|
|
380
381
|
site: {
|
|
382
|
+
...deepAccess(ortb2, 'site', {}),
|
|
381
383
|
page: topLocation.href,
|
|
382
384
|
domain: topLocation.hostname
|
|
383
385
|
},
|
|
@@ -389,39 +391,32 @@ function createVideoRequestData(bid, bidderRequest) {
|
|
|
389
391
|
js: 1,
|
|
390
392
|
geo: {}
|
|
391
393
|
},
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
},
|
|
395
|
-
source: {
|
|
396
|
-
ext: {}
|
|
397
|
-
},
|
|
398
|
-
user: {
|
|
399
|
-
ext: {}
|
|
400
|
-
},
|
|
394
|
+
app: deepAccess(ortb2, 'app'),
|
|
395
|
+
user: deepAccess(ortb2, 'user'),
|
|
401
396
|
cur: [CURRENCY]
|
|
402
397
|
};
|
|
403
398
|
|
|
404
399
|
if (bidderRequest && bidderRequest.uspConsent) {
|
|
405
|
-
payload
|
|
400
|
+
deepSetValue(payload, 'regs.ext.us_privacy', bidderRequest.uspConsent);
|
|
406
401
|
}
|
|
407
402
|
|
|
408
403
|
if (bidderRequest && bidderRequest.gdprConsent) {
|
|
409
404
|
let { gdprApplies, consentString } = bidderRequest.gdprConsent;
|
|
410
|
-
payload
|
|
411
|
-
payload
|
|
405
|
+
deepSetValue(payload, 'regs.ext.gdpr', gdprApplies ? 1 : 0);
|
|
406
|
+
deepSetValue(payload, 'user.ext.consent', consentString);
|
|
412
407
|
}
|
|
413
408
|
|
|
414
409
|
if (bid.schain) {
|
|
415
|
-
payload
|
|
410
|
+
deepSetValue(payload, 'source.ext.schain', bid.schain);
|
|
416
411
|
}
|
|
417
412
|
|
|
418
413
|
if (eids.length > 0) {
|
|
419
|
-
payload
|
|
414
|
+
deepSetValue(payload, 'user.ext.eids', eids);
|
|
420
415
|
}
|
|
421
416
|
|
|
422
417
|
let connection = navigator.connection || navigator.webkitConnection;
|
|
423
418
|
if (connection && connection.effectiveType) {
|
|
424
|
-
payload
|
|
419
|
+
deepSetValue(payload, 'device.connectiontype', connection.effectiveType);
|
|
425
420
|
}
|
|
426
421
|
|
|
427
422
|
return payload;
|
|
@@ -439,8 +434,10 @@ function createBannerRequestData(bids, bidderRequest) {
|
|
|
439
434
|
sizes: getBannerSizes(bid)
|
|
440
435
|
};
|
|
441
436
|
});
|
|
437
|
+
let ortb2 = deepClone(config.getConfig('ortb2'));
|
|
442
438
|
let payload = {
|
|
443
439
|
slots: slots,
|
|
440
|
+
ortb2: ortb2,
|
|
444
441
|
page: topLocation.href,
|
|
445
442
|
domain: topLocation.hostname,
|
|
446
443
|
search: topLocation.search,
|
|
@@ -36,7 +36,7 @@ export const spec = {
|
|
|
36
36
|
*/
|
|
37
37
|
buildRequests: function(validBidRequests, bidderRequest) {
|
|
38
38
|
const slots = validBidRequests.map(beOpRequestSlotsMaker);
|
|
39
|
-
let pageUrl = deepAccess(bidderRequest, 'refererInfo.canonicalUrl') || config.getConfig('pageUrl')
|
|
39
|
+
let pageUrl = deepAccess(window, 'location.href') || deepAccess(bidderRequest, 'refererInfo.canonicalUrl') || config.getConfig('pageUrl');
|
|
40
40
|
let fpd = config.getLegacyFpd(config.getConfig('ortb2'));
|
|
41
41
|
let gdpr = bidderRequest.gdprConsent;
|
|
42
42
|
let firstSlot = slots[0];
|
|
@@ -99,16 +99,18 @@ export const spec = {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
function buildTrackingParams(data, info, value) {
|
|
102
|
+
const accountId = data.params.accountId;
|
|
102
103
|
return {
|
|
103
|
-
pid: data.
|
|
104
|
+
pid: accountId === undefined ? data.ad.match(/account: \“([a-f\d]{24})\“/)[1] : accountId,
|
|
104
105
|
nid: data.params.networkId,
|
|
105
106
|
nptnid: data.params.networkPartnerId,
|
|
106
|
-
bid: data.bidId,
|
|
107
|
+
bid: data.bidId || data.requestId,
|
|
107
108
|
sl_n: data.adUnitCode,
|
|
108
109
|
aid: data.auctionId,
|
|
109
110
|
se_ca: 'bid',
|
|
110
111
|
se_ac: info,
|
|
111
|
-
se_va: value
|
|
112
|
+
se_va: value,
|
|
113
|
+
url: window.location.href
|
|
112
114
|
};
|
|
113
115
|
}
|
|
114
116
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { config } from '../src/config.js';
|
|
6
6
|
import * as events from '../src/events.js';
|
|
7
|
-
import
|
|
7
|
+
import CONSTANTS from '../src/constants.json';
|
|
8
8
|
import { logWarn, isFn, triggerPixel } from '../src/utils.js';
|
|
9
9
|
import { getGlobal } from '../src/prebidGlobal.js';
|
|
10
10
|
import adapterManager, { gdprDataHandler, uspDataHandler } from '../src/adapterManager.js';
|
|
@@ -70,12 +70,12 @@ export let impressionViewableHandler = (globalModuleConfig, slot, event) => {
|
|
|
70
70
|
// trigger respective bidder's onBidViewable handler
|
|
71
71
|
adapterManager.callBidViewableBidder(respectiveBid.bidder, respectiveBid);
|
|
72
72
|
// emit the BID_VIEWABLE event with bid details, this event can be consumed by bidders and analytics pixels
|
|
73
|
-
events.emit(EVENTS.BID_VIEWABLE, respectiveBid);
|
|
73
|
+
events.emit(CONSTANTS.EVENTS.BID_VIEWABLE, respectiveBid);
|
|
74
74
|
}
|
|
75
75
|
};
|
|
76
76
|
|
|
77
77
|
export let init = () => {
|
|
78
|
-
events.on(EVENTS.AUCTION_INIT, () => {
|
|
78
|
+
events.on(CONSTANTS.EVENTS.AUCTION_INIT, () => {
|
|
79
79
|
// read the config for the module
|
|
80
80
|
const globalModuleConfig = config.getConfig(MODULE_NAME) || {};
|
|
81
81
|
// do nothing if module-config.enabled is not set to true
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { logMessage } from '../src/utils.js';
|
|
2
2
|
import { config } from '../src/config.js';
|
|
3
3
|
import * as events from '../src/events.js';
|
|
4
|
-
import
|
|
4
|
+
import CONSTANTS from '../src/constants.json';
|
|
5
5
|
|
|
6
6
|
const MODULE_NAME = 'bidViewabilityIO';
|
|
7
7
|
const CONFIG_ENABLED = 'enabled';
|
|
@@ -42,7 +42,7 @@ export let getViewableOptions = (bid) => {
|
|
|
42
42
|
export let markViewed = (bid, entry, observer) => {
|
|
43
43
|
return () => {
|
|
44
44
|
observer.unobserve(entry.target);
|
|
45
|
-
events.emit(EVENTS.BID_VIEWABLE, bid);
|
|
45
|
+
events.emit(CONSTANTS.EVENTS.BID_VIEWABLE, bid);
|
|
46
46
|
_logMessage(`id: ${entry.target.getAttribute('id')} code: ${bid.adUnitCode} was viewed`);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -77,7 +77,7 @@ export let init = () => {
|
|
|
77
77
|
if (conf[MODULE_NAME][CONFIG_ENABLED] && CLIENT_SUPPORTS_IO) {
|
|
78
78
|
// if the module is enabled and the browser supports Intersection Observer,
|
|
79
79
|
// then listen to AD_RENDER_SUCCEEDED to setup IO's for supported mediaTypes
|
|
80
|
-
events.on(EVENTS.AD_RENDER_SUCCEEDED, ({doc, bid, id}) => {
|
|
80
|
+
events.on(CONSTANTS.EVENTS.AD_RENDER_SUCCEEDED, ({doc, bid, id}) => {
|
|
81
81
|
if (isSupportedMediaType(bid)) {
|
|
82
82
|
let viewable = new IntersectionObserver(viewCallbackFactory(bid), getViewableOptions(bid));
|
|
83
83
|
let element = document.getElementById(bid.adUnitCode);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// eslint-disable-next-line prebid/validate-imports
|
|
2
2
|
// eslint-disable-next-line prebid/validate-imports
|
|
3
|
-
import {registerBidder} from 'src/adapters/bidderFactory.js'
|
|
3
|
+
import {registerBidder} from '../src/adapters/bidderFactory.js'
|
|
4
4
|
|
|
5
5
|
export const BIDDER_CODE = 'bliink'
|
|
6
6
|
export const BLIINK_ENDPOINT_ENGINE = 'https://engine.bliink.io/delivery'
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getWindowTop, deepAccess, logMessage } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
|
|
4
|
+
import { ajax } from '../src/ajax.js';
|
|
4
5
|
|
|
5
6
|
const BIDDER_CODE = 'colossusssp';
|
|
6
7
|
const G_URL = 'https://colossusssp.com/?c=o&m=multi';
|
|
@@ -175,6 +176,12 @@ export const spec = {
|
|
|
175
176
|
type: 'image',
|
|
176
177
|
url: G_URL_SYNC
|
|
177
178
|
}];
|
|
179
|
+
},
|
|
180
|
+
|
|
181
|
+
onBidWon: (bid) => {
|
|
182
|
+
if (bid.nurl) {
|
|
183
|
+
ajax(bid.nurl, null);
|
|
184
|
+
}
|
|
178
185
|
}
|
|
179
186
|
};
|
|
180
187
|
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { isFn, deepAccess, logMessage, logError } from '../src/utils.js';
|
|
2
|
+
|
|
3
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
4
|
+
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
|
|
5
|
+
import { config } from '../src/config.js';
|
|
6
|
+
|
|
7
|
+
const BIDDER_CODE = 'compass';
|
|
8
|
+
const AD_URL = 'https://sa-lb.deliverimp.com/pbjs';
|
|
9
|
+
const SYNC_URL = 'https://sa-cs.deliverimp.com';
|
|
10
|
+
|
|
11
|
+
function isBidResponseValid(bid) {
|
|
12
|
+
if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
switch (bid.mediaType) {
|
|
17
|
+
case BANNER:
|
|
18
|
+
return Boolean(bid.width && bid.height && bid.ad);
|
|
19
|
+
case VIDEO:
|
|
20
|
+
return Boolean(bid.vastUrl || bid.vastXml);
|
|
21
|
+
case NATIVE:
|
|
22
|
+
return Boolean(bid.native && bid.native.impressionTrackers && bid.native.impressionTrackers.length);
|
|
23
|
+
default:
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function getPlacementReqData(bid) {
|
|
29
|
+
const { params, bidId, mediaTypes } = bid;
|
|
30
|
+
const schain = bid.schain || {};
|
|
31
|
+
const { placementId } = params;
|
|
32
|
+
const bidfloor = getBidFloor(bid);
|
|
33
|
+
|
|
34
|
+
const placement = {
|
|
35
|
+
placementId,
|
|
36
|
+
bidId,
|
|
37
|
+
schain,
|
|
38
|
+
bidfloor
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
if (mediaTypes && mediaTypes[BANNER]) {
|
|
42
|
+
placement.adFormat = BANNER;
|
|
43
|
+
placement.sizes = mediaTypes[BANNER].sizes;
|
|
44
|
+
} else if (mediaTypes && mediaTypes[VIDEO]) {
|
|
45
|
+
placement.adFormat = VIDEO;
|
|
46
|
+
placement.playerSize = mediaTypes[VIDEO].playerSize;
|
|
47
|
+
placement.minduration = mediaTypes[VIDEO].minduration;
|
|
48
|
+
placement.maxduration = mediaTypes[VIDEO].maxduration;
|
|
49
|
+
placement.mimes = mediaTypes[VIDEO].mimes;
|
|
50
|
+
placement.protocols = mediaTypes[VIDEO].protocols;
|
|
51
|
+
placement.startdelay = mediaTypes[VIDEO].startdelay;
|
|
52
|
+
placement.placement = mediaTypes[VIDEO].placement;
|
|
53
|
+
placement.skip = mediaTypes[VIDEO].skip;
|
|
54
|
+
placement.skipafter = mediaTypes[VIDEO].skipafter;
|
|
55
|
+
placement.minbitrate = mediaTypes[VIDEO].minbitrate;
|
|
56
|
+
placement.maxbitrate = mediaTypes[VIDEO].maxbitrate;
|
|
57
|
+
placement.delivery = mediaTypes[VIDEO].delivery;
|
|
58
|
+
placement.playbackmethod = mediaTypes[VIDEO].playbackmethod;
|
|
59
|
+
placement.api = mediaTypes[VIDEO].api;
|
|
60
|
+
placement.linearity = mediaTypes[VIDEO].linearity;
|
|
61
|
+
} else if (mediaTypes && mediaTypes[NATIVE]) {
|
|
62
|
+
placement.native = mediaTypes[NATIVE];
|
|
63
|
+
placement.adFormat = NATIVE;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return placement;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function getBidFloor(bid) {
|
|
70
|
+
if (!isFn(bid.getFloor)) {
|
|
71
|
+
return deepAccess(bid, 'params.bidfloor', 0);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
const bidFloor = bid.getFloor({
|
|
76
|
+
currency: 'USD',
|
|
77
|
+
mediaType: '*',
|
|
78
|
+
size: '*',
|
|
79
|
+
});
|
|
80
|
+
return bidFloor.floor;
|
|
81
|
+
} catch (err) {
|
|
82
|
+
logError(err);
|
|
83
|
+
return 0;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export const spec = {
|
|
88
|
+
code: BIDDER_CODE,
|
|
89
|
+
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
|
|
90
|
+
|
|
91
|
+
isBidRequestValid: (bid = {}) => {
|
|
92
|
+
const { params, bidId, mediaTypes } = bid;
|
|
93
|
+
let valid = Boolean(bidId && params && params.placementId);
|
|
94
|
+
|
|
95
|
+
if (mediaTypes && mediaTypes[BANNER]) {
|
|
96
|
+
valid = valid && Boolean(mediaTypes[BANNER] && mediaTypes[BANNER].sizes);
|
|
97
|
+
} else if (mediaTypes && mediaTypes[VIDEO]) {
|
|
98
|
+
valid = valid && Boolean(mediaTypes[VIDEO] && mediaTypes[VIDEO].playerSize);
|
|
99
|
+
} else if (mediaTypes && mediaTypes[NATIVE]) {
|
|
100
|
+
valid = valid && Boolean(mediaTypes[NATIVE]);
|
|
101
|
+
} else {
|
|
102
|
+
valid = false;
|
|
103
|
+
}
|
|
104
|
+
return valid;
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
buildRequests: (validBidRequests = [], bidderRequest = {}) => {
|
|
108
|
+
let deviceWidth = 0;
|
|
109
|
+
let deviceHeight = 0;
|
|
110
|
+
|
|
111
|
+
let winLocation;
|
|
112
|
+
try {
|
|
113
|
+
const winTop = window.top;
|
|
114
|
+
deviceWidth = winTop.screen.width;
|
|
115
|
+
deviceHeight = winTop.screen.height;
|
|
116
|
+
winLocation = winTop.location;
|
|
117
|
+
} catch (e) {
|
|
118
|
+
logMessage(e);
|
|
119
|
+
winLocation = window.location;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.referer;
|
|
123
|
+
let refferLocation;
|
|
124
|
+
try {
|
|
125
|
+
refferLocation = refferUrl && new URL(refferUrl);
|
|
126
|
+
} catch (e) {
|
|
127
|
+
logMessage(e);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
let location = refferLocation || winLocation;
|
|
131
|
+
const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : '';
|
|
132
|
+
const host = location.host;
|
|
133
|
+
const page = location.pathname;
|
|
134
|
+
const secure = location.protocol === 'https:' ? 1 : 0;
|
|
135
|
+
const placements = [];
|
|
136
|
+
const request = {
|
|
137
|
+
deviceWidth,
|
|
138
|
+
deviceHeight,
|
|
139
|
+
language,
|
|
140
|
+
secure,
|
|
141
|
+
host,
|
|
142
|
+
page,
|
|
143
|
+
placements,
|
|
144
|
+
coppa: config.getConfig('coppa') === true ? 1 : 0,
|
|
145
|
+
ccpa: bidderRequest.uspConsent || undefined,
|
|
146
|
+
gdpr: bidderRequest.gdprConsent || undefined,
|
|
147
|
+
tmax: config.getConfig('bidderTimeout')
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const len = validBidRequests.length;
|
|
151
|
+
for (let i = 0; i < len; i++) {
|
|
152
|
+
const bid = validBidRequests[i];
|
|
153
|
+
placements.push(getPlacementReqData(bid));
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return {
|
|
157
|
+
method: 'POST',
|
|
158
|
+
url: AD_URL,
|
|
159
|
+
data: request
|
|
160
|
+
};
|
|
161
|
+
},
|
|
162
|
+
|
|
163
|
+
interpretResponse: (serverResponse) => {
|
|
164
|
+
let response = [];
|
|
165
|
+
for (let i = 0; i < serverResponse.body.length; i++) {
|
|
166
|
+
let resItem = serverResponse.body[i];
|
|
167
|
+
if (isBidResponseValid(resItem)) {
|
|
168
|
+
const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
|
|
169
|
+
resItem.meta = { ...resItem.meta, advertiserDomains };
|
|
170
|
+
|
|
171
|
+
response.push(resItem);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return response;
|
|
175
|
+
},
|
|
176
|
+
|
|
177
|
+
getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
|
|
178
|
+
let syncType = syncOptions.iframeEnabled ? 'iframe' : 'image';
|
|
179
|
+
let syncUrl = SYNC_URL + `/${syncType}?pbjs=1`;
|
|
180
|
+
if (gdprConsent && gdprConsent.consentString) {
|
|
181
|
+
if (typeof gdprConsent.gdprApplies === 'boolean') {
|
|
182
|
+
syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
|
|
183
|
+
} else {
|
|
184
|
+
syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (uspConsent && uspConsent.consentString) {
|
|
188
|
+
syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const coppa = config.getConfig('coppa') ? 1 : 0;
|
|
192
|
+
syncUrl += `&coppa=${coppa}`;
|
|
193
|
+
|
|
194
|
+
return [{
|
|
195
|
+
type: syncType,
|
|
196
|
+
url: syncUrl
|
|
197
|
+
}];
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
registerBidder(spec);
|