prebid.js 6.0.0 → 6.4.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/.babelrc.js +1 -7
- package/.circleci/config.yml +1 -1
- package/README.md +1 -1
- package/browsers.json +13 -29
- package/gulpfile.js +88 -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/adheseBidAdapter.js +7 -2
- package/modules/adkernelBidAdapter.js +147 -61
- package/modules/adlivetechBidAdapter.md +61 -0
- 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 +16 -4
- 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 +7 -2
- package/modules/aniviewBidAdapter.js +1 -1
- package/modules/appnexusBidAdapter.js +23 -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/codefuelBidAdapter.js +1 -3
- package/modules/codefuelBidAdapter.md +3 -3
- package/modules/colossussspBidAdapter.js +7 -0
- package/modules/compassBidAdapter.js +201 -0
- package/modules/compassBidAdapter.md +79 -0
- 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/datablocksBidAdapter.js +3 -3
- package/modules/dchain.js +149 -0
- package/modules/dchain.md +45 -0
- package/modules/deepintentBidAdapter.js +1 -1
- package/modules/dspxBidAdapter.js +1 -1
- package/modules/emx_digitalBidAdapter.js +9 -1
- package/modules/engageyaBidAdapter.js +68 -54
- 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 +44 -16
- package/modules/goldbachBidAdapter.js +1176 -0
- package/modules/goldbachBidAdapter.md +151 -0
- package/modules/gptPreAuction.js +11 -5
- package/modules/gridBidAdapter.js +5 -4
- package/modules/gumgumBidAdapter.js +7 -3
- package/modules/id5IdSystem.md +6 -6
- package/modules/imRtdProvider.js +31 -0
- 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 +185 -22
- package/modules/kinessoIdSystem.js +1 -1
- package/modules/limelightDigitalBidAdapter.js +2 -1
- package/modules/livewrappedBidAdapter.js +8 -2
- package/modules/lotamePanoramaIdSystem.js +80 -8
- package/modules/luponmediaBidAdapter.js +570 -0
- package/modules/mediasquareBidAdapter.js +1 -9
- package/modules/merkleIdSystem.js +5 -0
- package/modules/missenaBidAdapter.js +89 -0
- package/modules/nativoBidAdapter.js +27 -1
- package/modules/nextMillenniumBidAdapter.js +37 -7
- package/modules/oguryBidAdapter.js +2 -1
- package/modules/openxBidAdapter.js +6 -1
- package/modules/prebidServerBidAdapter/index.js +19 -15
- package/modules/pubgeniusBidAdapter.js +1 -1
- package/modules/pubmaticBidAdapter.js +5 -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/saambaaBidAdapter.js +420 -0
- package/modules/saambaaBidAdapter.md +65 -68
- package/modules/seedtagBidAdapter.js +6 -0
- package/modules/sharedIdSystem.js +27 -1
- package/modules/smaatoBidAdapter.js +9 -1
- package/modules/smartxBidAdapter.js +17 -1
- package/modules/sspBCBidAdapter.js +34 -3
- 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 +18 -17
- 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 +65 -108
- package/modules/visxBidAdapter.js +20 -3
- 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/yieldlabBidAdapter.js +41 -10
- package/modules/yieldlabBidAdapter.md +91 -48
- package/modules/yieldoneBidAdapter.js +115 -11
- package/modules/zetaSspBidAdapter.md +33 -1
- package/modules/zeta_global_sspBidAdapter.js +22 -1
- package/package.json +6 -1
- package/plugins/pbjsGlobals.js +28 -1
- package/src/adapterManager.js +14 -8
- package/src/auction.js +5 -4
- package/src/prebid.js +1 -2
- package/src/targeting.js +24 -3
- package/src/utils.js +41 -7
- package/test/helpers/prebidGlobal.js +1 -0
- package/test/spec/integration/faker/googletag.js +6 -0
- package/test/spec/modules/33acrossBidAdapter_spec.js +300 -78
- package/test/spec/modules/adheseBidAdapter_spec.js +27 -1
- 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 +9 -1
- 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 +26 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +63 -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/codefuelBidAdapter_spec.js +1 -1
- package/test/spec/modules/colossussspBidAdapter_spec.js +9 -0
- package/test/spec/modules/compassBidAdapter_spec.js +397 -0
- package/test/spec/modules/cwireBidAdapter_spec.js +10 -8
- package/test/spec/modules/dailyhuntBidAdapter_spec.js +404 -0
- package/test/spec/modules/datablocksBidAdapter_spec.js +3 -3
- package/test/spec/modules/dchain_spec.js +329 -0
- package/test/spec/modules/emx_digitalBidAdapter_spec.js +10 -0
- package/test/spec/modules/engageyaBidAdapter_spec.js +231 -95
- package/test/spec/modules/eplanningBidAdapter_spec.js +8 -8
- package/test/spec/modules/feedadBidAdapter_spec.js +15 -0
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +19 -0
- package/test/spec/modules/glimpseBidAdapter_spec.js +33 -0
- package/test/spec/modules/goldbachBidAdapter_spec.js +1359 -0
- package/test/spec/modules/gptPreAuction_spec.js +58 -4
- package/test/spec/modules/gumgumBidAdapter_spec.js +6 -0
- package/test/spec/modules/imRtdProvider_spec.js +25 -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 +293 -2
- package/test/spec/modules/konduitWrapper_spec.js +0 -1
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +10 -7
- package/test/spec/modules/livewrappedBidAdapter_spec.js +31 -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/merkleIdSystem_spec.js +18 -0
- package/test/spec/modules/missenaBidAdapter_spec.js +134 -0
- package/test/spec/modules/nativoBidAdapter_spec.js +35 -18
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +26 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +13 -11
- package/test/spec/modules/openxBidAdapter_spec.js +5 -0
- package/test/spec/modules/prebidServerBidAdapter_spec.js +62 -2
- 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/seedtagBidAdapter_spec.js +3 -0
- package/test/spec/modules/sharedIdSystem_spec.js +52 -6
- package/test/spec/modules/smaatoBidAdapter_spec.js +61 -0
- package/test/spec/modules/smartxBidAdapter_spec.js +9 -0
- package/test/spec/modules/sspBCBidAdapter_spec.js +33 -3
- package/test/spec/modules/tappxBidAdapter_spec.js +4 -0
- package/test/spec/modules/targetVideoBidAdapter_spec.js +96 -0
- package/test/spec/modules/trustxBidAdapter_spec.js +42 -0
- package/test/spec/modules/userId_spec.js +51 -0
- package/test/spec/modules/vidoomyBidAdapter_spec.js +32 -13
- package/test/spec/modules/visxBidAdapter_spec.js +121 -5
- package/test/spec/modules/weboramaRtdProvider_spec.js +408 -214
- package/test/spec/modules/yahoosspBidAdapter_spec.js +28 -1
- package/test/spec/modules/yieldlabBidAdapter_spec.js +81 -0
- package/test/spec/modules/yieldoneBidAdapter_spec.js +299 -53
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +33 -1
- package/test/spec/unit/core/adapterManager_spec.js +24 -6
- 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
|
|
@@ -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,26 @@ 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
|
+
|
|
617
|
+
if (rtbBid.brand_id) {
|
|
618
|
+
bid.meta = Object.assign({}, bid.meta, { brandId: rtbBid.brand_id });
|
|
619
|
+
}
|
|
620
|
+
|
|
601
621
|
if (rtbBid.rtb.video) {
|
|
602
622
|
// shared video properties used for all 3 contexts
|
|
603
623
|
Object.assign(bid, {
|
|
@@ -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,5 +1,4 @@
|
|
|
1
1
|
import { deepAccess, isArray } from '../src/utils.js';
|
|
2
|
-
import { config } from '../src/config.js';
|
|
3
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
4
3
|
import { BANNER } from '../src/mediaTypes.js';
|
|
5
4
|
const BIDDER_CODE = 'codefuel';
|
|
@@ -34,8 +33,7 @@ export const spec = {
|
|
|
34
33
|
const devicetype = getDeviceType()
|
|
35
34
|
const publisher = setOnAny(validBidRequests, 'params.publisher');
|
|
36
35
|
const cur = CURRENCY;
|
|
37
|
-
|
|
38
|
-
const endpointUrl = config.getConfig('codefuel.bidderUrl');
|
|
36
|
+
const endpointUrl = 'https://ai-p-codefuel-ds-rtb-us-east-1-k8s.seccint.com/prebid'
|
|
39
37
|
const timeout = bidderRequest.timeout;
|
|
40
38
|
|
|
41
39
|
validBidRequests.forEach(bid => bid.netRevenue = 'net');
|
|
@@ -21,7 +21,7 @@ You will receive the URLs when contacting us.
|
|
|
21
21
|
```
|
|
22
22
|
pbjs.setConfig({
|
|
23
23
|
codefuel: {
|
|
24
|
-
bidderUrl: 'https://ai-
|
|
24
|
+
bidderUrl: 'https://ai-p-codefuel-ds-rtb-us-east-1-k8s.seccint.com/prebid',
|
|
25
25
|
usersyncUrl: 'https://usersync-url.com'
|
|
26
26
|
}
|
|
27
27
|
});
|
|
@@ -74,7 +74,7 @@ pbjs.setConfig({
|
|
|
74
74
|
|
|
75
75
|
pbjs.setConfig({
|
|
76
76
|
codefuel: {
|
|
77
|
-
bidderUrl: 'https://
|
|
77
|
+
bidderUrl: 'https://ai-p-codefuel-ds-rtb-us-east-1-k8s.seccint.com/prebid'
|
|
78
78
|
}
|
|
79
79
|
});
|
|
80
80
|
```
|
|
@@ -105,7 +105,7 @@ pbjs.setConfig({
|
|
|
105
105
|
|
|
106
106
|
pbjs.setConfig({
|
|
107
107
|
codefuel: {
|
|
108
|
-
bidderUrl: 'https://
|
|
108
|
+
bidderUrl: 'https://ai-p-codefuel-ds-rtb-us-east-1-k8s.seccint.com/prebid'
|
|
109
109
|
}
|
|
110
110
|
});
|
|
111
111
|
```
|
|
@@ -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);
|