prebid.js 7.18.0 → 7.20.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/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adWMGAnalyticsAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adfBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
- package/dist/adkernelBidAdapter.js +1 -1
- package/dist/adlooxAdServerVideo.js +1 -1
- package/dist/adlooxAnalyticsAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/adomikAnalyticsAdapter.js +1 -1
- package/dist/adqueryIdSystem.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adxpremiumAnalyticsAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/aolBidAdapter.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/atsAnalyticsAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/{andBeyondMediaBidAdapter.js → beyondmediaBidAdapter.js} +1 -1
- package/dist/bidViewability.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/byDataAnalyticsAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/categoryTranslation.js +1 -1
- package/dist/cleanioRtdProvider.js +1 -1
- package/dist/colossussspBidAdapter.js +1 -1
- package/dist/concertAnalyticsAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectIdSystem.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagement.js +1 -1
- package/dist/consentManagementUsp.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -0
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/currency.js +1 -1
- package/dist/datablocksAnalyticsAdapter.js +1 -1
- package/dist/dchain.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/debugging.js +1 -1
- package/dist/dependencies.json +9 -0
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/dgkeywordRtdProvider.js +1 -1
- package/dist/dianomiBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/enrichmentFpdModule.js +1 -1
- package/dist/eplanningAnalyticsAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fintezaAnalyticsAdapter.js +1 -1
- package/dist/fpd.js +1 -0
- package/dist/ftrackIdSystem.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/googleAnalyticsAdapter.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/hadronAnalyticsAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.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/invisiblyAnalyticsAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoAnalyticsAdapter.js +1 -1
- package/dist/kinessoIdSystem.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentAnalyticsAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/livewrappedAnalyticsAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/lotamePanoramaIdSystem.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -0
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mass.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediakeysBidAdapter.js +1 -1
- package/dist/medianetAnalyticsAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/multibid.js +1 -1
- package/dist/nativoBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +198 -194
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxAnalyticsAdapter.js +1 -1
- package/dist/optimonAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pianoDmpAnalyticsAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +2 -2
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
- package/dist/priceFloors.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubperfAnalyticsAdapter.js +1 -1
- package/dist/pubstackAnalyticsAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.js +1 -1
- package/dist/pulsepointAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/quantcastIdSystem.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/realvuAnalyticsAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/relevantAnalyticsAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rivrAnalyticsAdapter.js +1 -1
- package/dist/roxotAnalyticsAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/s2sTesting.js +1 -1
- package/dist/scaleableAnalyticsAdapter.js +1 -1
- package/dist/schain.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharedIdSystem.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/sigmoidAnalyticsAdapter.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/sonobiAnalyticsAdapter.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/staqAnalyticsAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tapadIdSystem.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/teadsIdSystem.js +1 -0
- package/dist/terceptAnalyticsAdapter.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/vrtcalBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/weboramaRtdProvider.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yandexBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yuktamediaAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
- package/libraries/fpd/sua.js +98 -0
- package/modules/.submodules.json +1 -0
- package/modules/adfBidAdapter.js +1 -1
- package/modules/adkernelAdnBidAdapter.js +1 -0
- package/modules/adkernelBidAdapter.js +2 -2
- package/modules/adqueryIdSystem.js +8 -8
- package/modules/adxcgBidAdapter.js +1 -1
- package/modules/amxBidAdapter.js +1 -1
- package/modules/aolBidAdapter.js +25 -2
- package/modules/appnexusBidAdapter.js +19 -2
- package/modules/{andBeyondMediaBidAdapter.js → beyondmediaBidAdapter.js} +0 -0
- package/modules/{andBeyondMediaBidAdapter.md → beyondmediaBidAdapter.md} +1 -1
- package/modules/categoryTranslation.js +4 -4
- package/modules/cleanioRtdProvider.js +3 -4
- package/modules/colossussspBidAdapter.js +2 -1
- package/modules/connectIdSystem.js +16 -1
- package/modules/conversantAnalyticsAdapter.js +560 -0
- package/modules/conversantAnalyticsAdapter.md +47 -0
- package/modules/criteoBidAdapter.js +1 -1
- package/modules/currency.js +11 -11
- package/modules/dchain.js +2 -2
- package/modules/debugging/bidInterceptor.js +2 -2
- package/modules/debugging/debugging.js +10 -2
- package/modules/debugging/legacy.js +2 -2
- package/modules/dgkeywordRtdProvider.js +21 -3
- package/modules/dianomiBidAdapter.js +1 -1
- package/modules/enrichmentFpdModule.js +33 -14
- package/modules/eplanningBidAdapter.js +48 -2
- package/modules/finativeBidAdapter.js +1 -1
- package/modules/gridBidAdapter.js +187 -117
- package/modules/improvedigitalBidAdapter.js +2 -2
- package/modules/ixBidAdapter.js +94 -23
- package/modules/liveIntentIdSystem.js +39 -5
- package/modules/lotamePanoramaIdSystem.js +10 -6
- package/modules/magniteAnalyticsAdapter.js +902 -0
- package/modules/magniteAnalyticsAdapter.md +18 -0
- package/modules/mass.js +2 -2
- package/modules/mediakeysBidAdapter.js +6 -1
- package/modules/mediakeysBidAdapter.md +50 -40
- package/modules/multibid/index.js +5 -5
- package/modules/nativoBidAdapter.js +1 -1
- package/modules/pixfutureBidAdapter.js +46 -15
- package/modules/prebidServerBidAdapter/index.js +54 -19
- package/modules/priceFloors.js +8 -22
- package/modules/readpeakBidAdapter.js +1 -1
- package/modules/rubiconAnalyticsAdapter.js +14 -9
- package/modules/rubiconBidAdapter.js +2 -3
- package/modules/seedingAllianceBidAdapter.js +1 -1
- package/modules/sharethroughBidAdapter.js +1 -1
- package/modules/taboolaBidAdapter.js +5 -5
- package/modules/talkadsBidAdapter.js +1 -0
- package/modules/teadsIdSystem.js +234 -0
- package/modules/teadsIdSystem.md +22 -0
- package/modules/truereachBidAdapter.js +1 -0
- package/modules/ttdBidAdapter.js +1 -1
- package/modules/userId/index.js +21 -14
- package/modules/vrtcalBidAdapter.js +7 -1
- package/modules/vuukleBidAdapter.js +34 -3
- package/modules/yahoosspBidAdapter.js +4 -2
- package/modules/yandexBidAdapter.js +31 -8
- package/package.json +2 -2
- package/src/adapterManager.js +2 -4
- package/src/adapters/bidderFactory.js +13 -11
- package/src/auction.js +140 -69
- package/src/constants.json +8 -0
- package/src/cpmBucketManager.js +22 -3
- package/src/native.js +1 -5
- package/src/prebid.js +5 -6
- package/src/targeting.js +31 -14
- package/test/fixtures/fixtures.js +2 -1
- package/test/spec/auctionmanager_spec.js +109 -21
- package/test/spec/cpmBucketManager_spec.js +239 -177
- package/test/spec/fpd/sua_spec.js +244 -0
- package/test/spec/modules/adfBidAdapter_spec.js +2 -3
- package/test/spec/modules/adqueryIdSystem_spec.js +0 -2
- package/test/spec/modules/adxcgBidAdapter_spec.js +2 -3
- package/test/spec/modules/amxBidAdapter_spec.js +3 -2
- package/test/spec/modules/aolBidAdapter_spec.js +42 -9
- package/test/spec/modules/appnexusBidAdapter_spec.js +24 -0
- package/test/spec/modules/{andBeyondMediaBidAdapter_spec.js → beyondmediaBidAdapter_spec.js} +1 -1
- package/test/spec/modules/colossussspBidAdapter_spec.js +4 -2
- package/test/spec/modules/connectIdSystem_spec.js +20 -0
- package/test/spec/modules/conversantAnalyticsAdapter_spec.js +963 -0
- package/test/spec/modules/currency_spec.js +14 -6
- package/test/spec/modules/debugging_mod_spec.js +9 -0
- package/test/spec/modules/dgkeywordRtdProvider_spec.js +83 -1
- package/test/spec/modules/dianomiBidAdapter_spec.js +2 -3
- package/test/spec/modules/enrichmentFpdModule_spec.js +50 -7
- package/test/spec/modules/eplanningBidAdapter_spec.js +285 -1
- package/test/spec/modules/fpdModule_spec.js +9 -0
- package/test/spec/modules/gridBidAdapter_spec.js +87 -31
- package/test/spec/modules/ixBidAdapter_spec.js +221 -2
- package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +62 -8
- package/test/spec/modules/liveIntentIdSystem_spec.js +62 -8
- package/test/spec/modules/lotamePanoramaIdSystem_spec.js +0 -1
- package/test/spec/modules/magniteAnalyticsAdapter_spec.js +1942 -0
- package/test/spec/modules/mediakeysBidAdapter_spec.js +20 -3
- package/test/spec/modules/nativoBidAdapter_spec.js +13 -2
- package/test/spec/modules/prebidServerBidAdapter_spec.js +202 -15
- package/test/spec/modules/priceFloors_spec.js +5 -5
- package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +2 -3
- package/test/spec/modules/seedtagBidAdapter_spec.js +15 -18
- package/test/spec/modules/sharethroughBidAdapter_spec.js +2 -1
- package/test/spec/modules/taboolaBidAdapter_spec.js +112 -13
- package/test/spec/modules/teadsIdSystem_spec.js +271 -0
- package/test/spec/modules/ttdBidAdapter_spec.js +3 -3
- package/test/spec/modules/userId_spec.js +39 -4
- package/test/spec/modules/vrtcalBidAdapter_spec.js +12 -1
- package/test/spec/modules/vuukleBidAdapter_spec.js +87 -0
- package/test/spec/modules/yahoosspBidAdapter_spec.js +48 -1
- package/test/spec/modules/yandexBidAdapter_spec.js +8 -5
- package/test/spec/native_spec.js +5 -0
- package/test/spec/unit/core/bidderFactory_spec.js +66 -11
- package/test/spec/unit/core/targeting_spec.js +28 -9
- package/test/spec/unit/pbjs_api_spec.js +48 -2
|
@@ -72,10 +72,14 @@ export const spec = {
|
|
|
72
72
|
let forceBidderName = false;
|
|
73
73
|
let {bidderRequestId, auctionId, gdprConsent, uspConsent, timeout, refererInfo} = bidderRequest || {};
|
|
74
74
|
|
|
75
|
-
// TODO: is 'page' the right value here?
|
|
76
75
|
const referer = refererInfo ? encodeURIComponent(refererInfo.page) : '';
|
|
76
|
+
const bidderTimeout = config.getConfig('bidderTimeout') || timeout;
|
|
77
|
+
const tmax = timeout ? Math.min(bidderTimeout, timeout) : bidderTimeout;
|
|
77
78
|
const imp = [];
|
|
78
79
|
const bidsMap = {};
|
|
80
|
+
const requests = [];
|
|
81
|
+
const sources = [];
|
|
82
|
+
const bidsArray = [];
|
|
79
83
|
|
|
80
84
|
validBidRequests.forEach((bid) => {
|
|
81
85
|
if (!bidderRequestId) {
|
|
@@ -93,7 +97,8 @@ export const spec = {
|
|
|
93
97
|
if (!endpoint) {
|
|
94
98
|
endpoint = ALIAS_CONFIG[bid.bidder] && ALIAS_CONFIG[bid.bidder].endpoint;
|
|
95
99
|
}
|
|
96
|
-
const { params: { uid, keywords, forceBidder }, mediaTypes, bidId, adUnitCode, rtd, ortb2Imp } = bid;
|
|
100
|
+
const { params: { uid, keywords, forceBidder, multiRequest }, mediaTypes, bidId, adUnitCode, rtd, ortb2Imp } = bid;
|
|
101
|
+
const { pubdata, secid, pubid, source, content: bidParamsContent } = bid.params;
|
|
97
102
|
bidsMap[bidId] = bid;
|
|
98
103
|
const bidFloor = _getFloor(mediaTypes || {}, bid);
|
|
99
104
|
const jwTargeting = rtd && rtd.jwplayer && rtd.jwplayer.targeting;
|
|
@@ -105,9 +110,10 @@ export const spec = {
|
|
|
105
110
|
content = jwTargeting.content;
|
|
106
111
|
}
|
|
107
112
|
}
|
|
113
|
+
|
|
108
114
|
let impObj = {
|
|
109
115
|
id: bidId.toString(),
|
|
110
|
-
tagid: uid.toString(),
|
|
116
|
+
tagid: (secid || uid).toString(),
|
|
111
117
|
ext: {
|
|
112
118
|
divid: adUnitCode.toString()
|
|
113
119
|
}
|
|
@@ -150,7 +156,54 @@ export const spec = {
|
|
|
150
156
|
}
|
|
151
157
|
|
|
152
158
|
if (impObj.banner || impObj.video) {
|
|
153
|
-
|
|
159
|
+
if (multiRequest) {
|
|
160
|
+
const reqSource = {
|
|
161
|
+
tid: bid.auctionId && bid.auctionId.toString(),
|
|
162
|
+
ext: {
|
|
163
|
+
wrapper: 'Prebid_js',
|
|
164
|
+
wrapper_version: '$prebid.version$'
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
if (bid.schain) {
|
|
168
|
+
reqSource.ext.schain = bid.schain;
|
|
169
|
+
}
|
|
170
|
+
const request = {
|
|
171
|
+
id: bid.bidderRequestId && bid.bidderRequestId.toString(),
|
|
172
|
+
site: {
|
|
173
|
+
page: referer,
|
|
174
|
+
},
|
|
175
|
+
tmax,
|
|
176
|
+
source: reqSource,
|
|
177
|
+
imp: [impObj]
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
if (pubid) {
|
|
181
|
+
request.site.publisher = { id: pubid };
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const reqJwpseg = (pubdata && pubdata.jwpseg) || (jwTargeting && jwTargeting.segments);
|
|
185
|
+
|
|
186
|
+
const siteContent = bidParamsContent || (jwTargeting && jwTargeting.content);
|
|
187
|
+
|
|
188
|
+
if (siteContent) {
|
|
189
|
+
request.site.content = siteContent;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (reqJwpseg && reqJwpseg.length) {
|
|
193
|
+
request.user = {
|
|
194
|
+
data: [{
|
|
195
|
+
name: 'iow_labs_pub_data',
|
|
196
|
+
segment: segmentProcessing(reqJwpseg, 'jwpseg'),
|
|
197
|
+
}]
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
requests.push(request);
|
|
202
|
+
sources.push(source);
|
|
203
|
+
bidsArray.push(bid);
|
|
204
|
+
} else {
|
|
205
|
+
imp.push(impObj);
|
|
206
|
+
}
|
|
154
207
|
}
|
|
155
208
|
|
|
156
209
|
if (!forceBidderName && forceBidder && ALIAS_CONFIG[forceBidder]) {
|
|
@@ -165,7 +218,7 @@ export const spec = {
|
|
|
165
218
|
this.forceBidderName = forceBidderName;
|
|
166
219
|
}
|
|
167
220
|
|
|
168
|
-
const
|
|
221
|
+
const reqSource = {
|
|
169
222
|
tid: auctionId && auctionId.toString(),
|
|
170
223
|
ext: {
|
|
171
224
|
wrapper: 'Prebid_js',
|
|
@@ -174,28 +227,25 @@ export const spec = {
|
|
|
174
227
|
};
|
|
175
228
|
|
|
176
229
|
if (schain) {
|
|
177
|
-
|
|
230
|
+
reqSource.ext.schain = schain;
|
|
178
231
|
}
|
|
179
232
|
|
|
180
|
-
const
|
|
181
|
-
const tmax = timeout ? Math.min(bidderTimeout, timeout) : bidderTimeout;
|
|
182
|
-
|
|
183
|
-
let request = {
|
|
233
|
+
const mainRequest = (imp.length || !requests.length) ? {
|
|
184
234
|
id: bidderRequestId && bidderRequestId.toString(),
|
|
185
235
|
site: {
|
|
186
236
|
page: referer
|
|
187
237
|
},
|
|
188
238
|
tmax,
|
|
189
|
-
source,
|
|
239
|
+
source: reqSource,
|
|
190
240
|
imp
|
|
191
|
-
};
|
|
241
|
+
} : null;
|
|
192
242
|
|
|
193
243
|
if (content) {
|
|
194
|
-
|
|
244
|
+
mainRequest.site.content = content;
|
|
195
245
|
}
|
|
196
246
|
|
|
197
247
|
if (jwpseg && jwpseg.length) {
|
|
198
|
-
user = {
|
|
248
|
+
mainRequest.user = {
|
|
199
249
|
data: [{
|
|
200
250
|
name: 'iow_labs_pub_data',
|
|
201
251
|
segment: segmentProcessing(jwpseg, 'jwpseg'),
|
|
@@ -203,131 +253,151 @@ export const spec = {
|
|
|
203
253
|
};
|
|
204
254
|
}
|
|
205
255
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
user = { data: [] };
|
|
256
|
+
[...requests, mainRequest].forEach((request) => {
|
|
257
|
+
if (!request) {
|
|
258
|
+
return;
|
|
210
259
|
}
|
|
211
|
-
user = mergeDeep(user, {
|
|
212
|
-
data: [...ortb2UserData]
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
260
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
261
|
+
const ortb2UserData = deepAccess(bidderRequest, 'ortb2.user.data');
|
|
262
|
+
if (ortb2UserData && ortb2UserData.length) {
|
|
263
|
+
user = request.user || { data: [] };
|
|
264
|
+
user = mergeDeep(user, {
|
|
265
|
+
data: [...ortb2UserData]
|
|
266
|
+
});
|
|
267
|
+
}
|
|
219
268
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
userExt.device = { ...ortb2UserExtDevice };
|
|
224
|
-
}
|
|
269
|
+
if (gdprConsent && gdprConsent.consentString) {
|
|
270
|
+
userExt = {consent: gdprConsent.consentString};
|
|
271
|
+
}
|
|
225
272
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
273
|
+
const ortb2UserExtDevice = deepAccess(bidderRequest, 'ortb2.user.ext.device');
|
|
274
|
+
if (ortb2UserExtDevice) {
|
|
275
|
+
userExt = userExt || {};
|
|
276
|
+
userExt.device = { ...ortb2UserExtDevice };
|
|
277
|
+
}
|
|
230
278
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
279
|
+
if (userIdAsEids && userIdAsEids.length) {
|
|
280
|
+
userExt = userExt || {};
|
|
281
|
+
userExt.eids = [...userIdAsEids];
|
|
282
|
+
}
|
|
235
283
|
|
|
236
|
-
|
|
284
|
+
if (userExt && Object.keys(userExt).length) {
|
|
285
|
+
user = user || {};
|
|
286
|
+
user.ext = userExt;
|
|
287
|
+
}
|
|
237
288
|
|
|
238
|
-
|
|
239
|
-
user = user || {};
|
|
240
|
-
user.id = fpdUserId.toString();
|
|
241
|
-
}
|
|
289
|
+
const fpdUserId = getUserIdFromFPDStorage();
|
|
242
290
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
291
|
+
if (fpdUserId) {
|
|
292
|
+
user = user || {};
|
|
293
|
+
user.id = fpdUserId.toString();
|
|
294
|
+
}
|
|
246
295
|
|
|
247
|
-
|
|
248
|
-
|
|
296
|
+
if (user) {
|
|
297
|
+
request.user = user;
|
|
298
|
+
}
|
|
249
299
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
pageKeywords.user = pageKeywords.user || {};
|
|
253
|
-
pageKeywords.user.ortb2 = [
|
|
254
|
-
{
|
|
255
|
-
name: 'keywords',
|
|
256
|
-
keywords: userKeywords.split(','),
|
|
257
|
-
}
|
|
258
|
-
];
|
|
259
|
-
}
|
|
260
|
-
if (siteKeywords) {
|
|
261
|
-
pageKeywords = pageKeywords || {};
|
|
262
|
-
pageKeywords.site = pageKeywords.site || {};
|
|
263
|
-
pageKeywords.site.ortb2 = [
|
|
264
|
-
{
|
|
265
|
-
name: 'keywords',
|
|
266
|
-
keywords: siteKeywords.split(','),
|
|
267
|
-
}
|
|
268
|
-
];
|
|
269
|
-
}
|
|
300
|
+
const userKeywords = deepAccess(bidderRequest, 'ortb2.user.keywords') || null;
|
|
301
|
+
const siteKeywords = deepAccess(bidderRequest, 'ortb2.site.keywords') || null;
|
|
270
302
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
303
|
+
if (userKeywords) {
|
|
304
|
+
pageKeywords = pageKeywords || {};
|
|
305
|
+
pageKeywords.user = pageKeywords.user || {};
|
|
306
|
+
pageKeywords.user.ortb2 = [
|
|
307
|
+
{
|
|
308
|
+
name: 'keywords',
|
|
309
|
+
keywords: userKeywords.split(','),
|
|
310
|
+
}
|
|
311
|
+
];
|
|
312
|
+
}
|
|
313
|
+
if (siteKeywords) {
|
|
314
|
+
pageKeywords = pageKeywords || {};
|
|
315
|
+
pageKeywords.site = pageKeywords.site || {};
|
|
316
|
+
pageKeywords.site.ortb2 = [
|
|
317
|
+
{
|
|
318
|
+
name: 'keywords',
|
|
319
|
+
keywords: siteKeywords.split(','),
|
|
320
|
+
}
|
|
321
|
+
];
|
|
277
322
|
}
|
|
278
|
-
}
|
|
279
323
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
324
|
+
if (pageKeywords) {
|
|
325
|
+
pageKeywords = reformatKeywords(pageKeywords);
|
|
326
|
+
if (pageKeywords) {
|
|
327
|
+
request.ext = {
|
|
328
|
+
keywords: pageKeywords
|
|
329
|
+
};
|
|
284
330
|
}
|
|
285
|
-
};
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
if (uspConsent) {
|
|
289
|
-
if (!request.regs) {
|
|
290
|
-
request.regs = {ext: {}};
|
|
291
331
|
}
|
|
292
|
-
request.regs.ext.us_privacy = uspConsent;
|
|
293
|
-
}
|
|
294
332
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
333
|
+
if (gdprConsent && gdprConsent.gdprApplies) {
|
|
334
|
+
request.regs = {
|
|
335
|
+
ext: {
|
|
336
|
+
gdpr: gdprConsent.gdprApplies ? 1 : 0
|
|
337
|
+
}
|
|
338
|
+
};
|
|
298
339
|
}
|
|
299
|
-
request.regs.coppa = 1;
|
|
300
|
-
}
|
|
301
340
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
if (pageCategory.length) {
|
|
308
|
-
request.site.cat = pageCategory;
|
|
309
|
-
}
|
|
310
|
-
const genre = deepAccess(site, 'content.genre');
|
|
311
|
-
if (genre && typeof genre === 'string') {
|
|
312
|
-
request.site.content = {...request.site.content, genre};
|
|
341
|
+
if (uspConsent) {
|
|
342
|
+
if (!request.regs) {
|
|
343
|
+
request.regs = {ext: {}};
|
|
344
|
+
}
|
|
345
|
+
request.regs.ext.us_privacy = uspConsent;
|
|
313
346
|
}
|
|
314
|
-
|
|
315
|
-
if (
|
|
316
|
-
|
|
317
|
-
|
|
347
|
+
|
|
348
|
+
if (config.getConfig('coppa') === true) {
|
|
349
|
+
if (!request.regs) {
|
|
350
|
+
request.regs = {};
|
|
351
|
+
}
|
|
352
|
+
request.regs.coppa = 1;
|
|
318
353
|
}
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
354
|
+
|
|
355
|
+
const site = deepAccess(bidderRequest, 'ortb2.site');
|
|
356
|
+
if (site) {
|
|
357
|
+
const pageCategory = [...(site.cat || []), ...(site.pagecat || [])].filter((category) => {
|
|
358
|
+
return category && typeof category === 'string'
|
|
359
|
+
});
|
|
360
|
+
if (pageCategory.length) {
|
|
361
|
+
request.site.cat = pageCategory;
|
|
362
|
+
}
|
|
363
|
+
const genre = deepAccess(site, 'content.genre');
|
|
364
|
+
if (genre && typeof genre === 'string') {
|
|
365
|
+
request.site.content = {...request.site.content, genre};
|
|
366
|
+
}
|
|
367
|
+
const data = deepAccess(site, 'content.data');
|
|
368
|
+
if (data && data.length) {
|
|
369
|
+
const siteContent = request.site.content || {};
|
|
370
|
+
request.site.content = mergeDeep(siteContent, { data });
|
|
371
|
+
}
|
|
372
|
+
const id = deepAccess(site, 'content.id');
|
|
373
|
+
if (id) {
|
|
374
|
+
request.site.content = {...request.site.content, id};
|
|
375
|
+
}
|
|
322
376
|
}
|
|
323
|
-
}
|
|
377
|
+
});
|
|
324
378
|
|
|
325
|
-
return {
|
|
379
|
+
return [...requests.map((req, i) => {
|
|
380
|
+
let sp;
|
|
381
|
+
const url = (endpoint || ENDPOINT_URL).replace(/[?&]sp=([^?&=]+)/, (i, found) => {
|
|
382
|
+
if (found) {
|
|
383
|
+
sp = found;
|
|
384
|
+
}
|
|
385
|
+
return '';
|
|
386
|
+
});
|
|
387
|
+
let currentSource = sources[i] || sp;
|
|
388
|
+
const urlWithParams = url + (url.indexOf('?') > -1 ? '&' : '?') + 'no_mapping=1' + (currentSource ? `&sp=${currentSource}` : '');
|
|
389
|
+
return {
|
|
390
|
+
method: 'POST',
|
|
391
|
+
url: urlWithParams,
|
|
392
|
+
data: JSON.stringify(req),
|
|
393
|
+
bid: bidsArray[i],
|
|
394
|
+
};
|
|
395
|
+
}), ...(mainRequest ? [{
|
|
326
396
|
method: 'POST',
|
|
327
397
|
url: endpoint || ENDPOINT_URL,
|
|
328
|
-
data: JSON.stringify(
|
|
398
|
+
data: JSON.stringify(mainRequest),
|
|
329
399
|
bidsMap
|
|
330
|
-
};
|
|
400
|
+
}] : [])];
|
|
331
401
|
},
|
|
332
402
|
/**
|
|
333
403
|
* Unpack the response from the server into a list of bids.
|
|
@@ -395,7 +465,7 @@ export const spec = {
|
|
|
395
465
|
*/
|
|
396
466
|
function _getFloor (mediaTypes, bid) {
|
|
397
467
|
const curMediaType = mediaTypes.video ? 'video' : 'banner';
|
|
398
|
-
let floor = bid.params.bidFloor || 0;
|
|
468
|
+
let floor = bid.params.bidFloor || bid.params.floorcpm || 0;
|
|
399
469
|
|
|
400
470
|
if (typeof bid.getFloor === 'function') {
|
|
401
471
|
const floorInfo = bid.getFloor({
|
|
@@ -431,7 +501,7 @@ function _addBidResponse(serverBid, bidRequest, bidResponses, RendererConst, bid
|
|
|
431
501
|
if (!serverBid.auid) errorMessage = LOG_ERROR_MESS.noAuid + JSON.stringify(serverBid);
|
|
432
502
|
if (!errorMessage && !serverBid.adm && !serverBid.nurl) errorMessage = LOG_ERROR_MESS.noAdm + JSON.stringify(serverBid);
|
|
433
503
|
else {
|
|
434
|
-
const bid = bidRequest.bidsMap[serverBid.impid];
|
|
504
|
+
const bid = bidRequest.bidsMap ? bidRequest.bidsMap[serverBid.impid] : bidRequest.bid;
|
|
435
505
|
if (bid) {
|
|
436
506
|
const bidResponse = {
|
|
437
507
|
requestId: bid.bidId, // bid.bidderRequestId
|
|
@@ -483,7 +553,7 @@ function _addBidResponse(serverBid, bidRequest, bidResponses, RendererConst, bid
|
|
|
483
553
|
}
|
|
484
554
|
|
|
485
555
|
function createVideoRequest(bid, mediaType) {
|
|
486
|
-
const {playerSize, mimes, durationRangeSec, protocols} = mediaType;
|
|
556
|
+
const { playerSize, mimes, durationRangeSec, protocols } = mediaType;
|
|
487
557
|
const size = (playerSize || bid.sizes || [])[0];
|
|
488
558
|
if (!size) return;
|
|
489
559
|
|
|
@@ -307,10 +307,10 @@ const ID_REQUEST = {
|
|
|
307
307
|
}
|
|
308
308
|
// In the single request mode, split imps between those going to the ad server and those going to extend server
|
|
309
309
|
if (extendImps.length) {
|
|
310
|
-
requests.push(formatRequest(extendImps,
|
|
310
|
+
requests.push(formatRequest(extendImps, bidderRequest.auctionId, true));
|
|
311
311
|
}
|
|
312
312
|
if (adServerImps.length) {
|
|
313
|
-
requests.push(formatRequest(adServerImps,
|
|
313
|
+
requests.push(formatRequest(adServerImps, bidderRequest.auctionId, false));
|
|
314
314
|
}
|
|
315
315
|
|
|
316
316
|
return requests;
|
package/modules/ixBidAdapter.js
CHANGED
|
@@ -13,7 +13,8 @@ import {
|
|
|
13
13
|
logError,
|
|
14
14
|
logWarn,
|
|
15
15
|
mergeDeep,
|
|
16
|
-
parseQueryStringParameters
|
|
16
|
+
parseQueryStringParameters,
|
|
17
|
+
safeJSONParse
|
|
17
18
|
} from '../src/utils.js';
|
|
18
19
|
import {BANNER, VIDEO, NATIVE} from '../src/mediaTypes.js';
|
|
19
20
|
import {config} from '../src/config.js';
|
|
@@ -99,8 +100,46 @@ const VIDEO_PARAMS_ALLOW_LIST = [
|
|
|
99
100
|
'playerSize', 'w', 'h'
|
|
100
101
|
];
|
|
101
102
|
const LOCAL_STORAGE_KEY = 'ixdiag';
|
|
103
|
+
export const LOCAL_STORAGE_FEATURE_TOGGLES_KEY = `${BIDDER_CODE}_features`;
|
|
102
104
|
let hasRegisteredHandler = false;
|
|
103
105
|
export const storage = getStorageManager({gvlid: GLOBAL_VENDOR_ID, bidderCode: BIDDER_CODE});
|
|
106
|
+
export const FEATURE_TOGGLES = {
|
|
107
|
+
featureToggles: {},
|
|
108
|
+
isFeatureEnabled: function(ft) {
|
|
109
|
+
return deepAccess(this.featureToggles, `features.${ft}.activated`)
|
|
110
|
+
},
|
|
111
|
+
getFeatureToggles: function() {
|
|
112
|
+
if (storage.localStorageIsEnabled()) {
|
|
113
|
+
const parsedToggles = safeJSONParse(storage.getDataFromLocalStorage(LOCAL_STORAGE_FEATURE_TOGGLES_KEY));
|
|
114
|
+
if (deepAccess(parsedToggles, 'expiry') && parsedToggles.expiry >= new Date().getTime()) {
|
|
115
|
+
this.featureToggles = parsedToggles
|
|
116
|
+
} else {
|
|
117
|
+
this.clearFeatureToggles();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
setFeatureToggles: function(serverResponse) {
|
|
122
|
+
const responseBody = serverResponse.body;
|
|
123
|
+
const expiryTime = new Date();
|
|
124
|
+
const toggles = deepAccess(responseBody, 'ext.features');
|
|
125
|
+
|
|
126
|
+
if (toggles) {
|
|
127
|
+
this.featureToggles = {
|
|
128
|
+
expiry: expiryTime.setHours(expiryTime.getHours() + 1),
|
|
129
|
+
features: toggles
|
|
130
|
+
}
|
|
131
|
+
if (storage.localStorageIsEnabled()) {
|
|
132
|
+
storage.setDataInLocalStorage(LOCAL_STORAGE_FEATURE_TOGGLES_KEY, JSON.stringify(this.featureToggles));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
clearFeatureToggles: function() {
|
|
137
|
+
this.featureToggles = {};
|
|
138
|
+
if (storage.localStorageIsEnabled()) {
|
|
139
|
+
storage.removeDataFromLocalStorage(LOCAL_STORAGE_FEATURE_TOGGLES_KEY);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
};
|
|
104
143
|
let siteID = 0;
|
|
105
144
|
let gdprConsent = '';
|
|
106
145
|
let usPrivacy = '';
|
|
@@ -578,6 +617,7 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
|
|
|
578
617
|
r.ext = {};
|
|
579
618
|
r.ext.source = 'prebid';
|
|
580
619
|
r.ext.ixdiag = {};
|
|
620
|
+
r.ext.ixdiag.ls = storage.localStorageIsEnabled();
|
|
581
621
|
r.imp = [];
|
|
582
622
|
r.at = 1;
|
|
583
623
|
|
|
@@ -602,13 +642,15 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
|
|
|
602
642
|
r.ext.ixdiag.err = cachedErrors;
|
|
603
643
|
}
|
|
604
644
|
|
|
645
|
+
// set source.tid to auctionId for outgoing request to Exchange.
|
|
646
|
+
r.source = {
|
|
647
|
+
tid: validBidRequests[0].auctionId,
|
|
648
|
+
}
|
|
649
|
+
|
|
605
650
|
// if an schain is provided, send it along
|
|
606
651
|
if (validBidRequests[0].schain) {
|
|
607
|
-
r.source = {
|
|
608
|
-
|
|
609
|
-
schain: validBidRequests[0].schain
|
|
610
|
-
}
|
|
611
|
-
};
|
|
652
|
+
r.source.ext = {};
|
|
653
|
+
r.source.ext.schain = validBidRequests[0].schain;
|
|
612
654
|
}
|
|
613
655
|
|
|
614
656
|
if (userEids.length > 0) {
|
|
@@ -665,14 +707,17 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
|
|
|
665
707
|
// Use the siteId in the first bid request as the main siteId.
|
|
666
708
|
siteID = validBidRequests[0].params.siteId;
|
|
667
709
|
payload.s = siteID;
|
|
668
|
-
if (version) {
|
|
669
|
-
payload.v = version;
|
|
670
|
-
}
|
|
671
|
-
payload.ac = 'j';
|
|
672
|
-
payload.sd = 1;
|
|
673
710
|
|
|
674
|
-
if (
|
|
675
|
-
|
|
711
|
+
if (!FEATURE_TOGGLES.isFeatureEnabled('pbjs_enable_post')) {
|
|
712
|
+
if (version) {
|
|
713
|
+
payload.v = version;
|
|
714
|
+
}
|
|
715
|
+
payload.ac = 'j';
|
|
716
|
+
payload.sd = 1;
|
|
717
|
+
|
|
718
|
+
if (version === VIDEO_ENDPOINT_VERSION) {
|
|
719
|
+
payload.nf = 1;
|
|
720
|
+
}
|
|
676
721
|
}
|
|
677
722
|
|
|
678
723
|
// Parse additional runtime configs.
|
|
@@ -718,9 +763,11 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
|
|
|
718
763
|
}
|
|
719
764
|
}
|
|
720
765
|
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
766
|
+
if (!FEATURE_TOGGLES.isFeatureEnabled('pbjs_enable_post')) {
|
|
767
|
+
// Create t in payload if timeout is configured.
|
|
768
|
+
if (typeof otherIxConfig.timeout === 'number') {
|
|
769
|
+
payload.t = otherIxConfig.timeout;
|
|
770
|
+
}
|
|
724
771
|
}
|
|
725
772
|
}
|
|
726
773
|
|
|
@@ -866,12 +913,27 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
|
|
|
866
913
|
requestSequenceNumber++;
|
|
867
914
|
clonedPayload.r = JSON.stringify(r);
|
|
868
915
|
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
916
|
+
let requestData;
|
|
917
|
+
|
|
918
|
+
if (FEATURE_TOGGLES.isFeatureEnabled('pbjs_enable_post')) {
|
|
919
|
+
requestData = {
|
|
920
|
+
method: 'POST',
|
|
921
|
+
url: baseUrl + '?s=' + payload.s,
|
|
922
|
+
data: deepClone(r),
|
|
923
|
+
option: {
|
|
924
|
+
contentType: 'text/plain',
|
|
925
|
+
},
|
|
926
|
+
validBidRequests
|
|
927
|
+
}
|
|
928
|
+
} else {
|
|
929
|
+
requestData = {
|
|
930
|
+
method: 'GET',
|
|
931
|
+
url: baseUrl,
|
|
932
|
+
data: clonedPayload,
|
|
933
|
+
validBidRequests
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
requests.push(requestData);
|
|
875
937
|
|
|
876
938
|
currentRequestSize = baseRequestSize;
|
|
877
939
|
r.imp = [];
|
|
@@ -1381,6 +1443,7 @@ export const spec = {
|
|
|
1381
1443
|
const videoImps = {}; // Stores created video impressions
|
|
1382
1444
|
const nativeImps = {}; // Stores created native impressions
|
|
1383
1445
|
const missingBannerSizes = {}; // To capture the missing sizes i.e not configured for ix
|
|
1446
|
+
FEATURE_TOGGLES.getFeatureToggles();
|
|
1384
1447
|
|
|
1385
1448
|
// Step 1: Create impresssions from IX params
|
|
1386
1449
|
validBidRequests.forEach((validBidRequest) => {
|
|
@@ -1451,6 +1514,7 @@ export const spec = {
|
|
|
1451
1514
|
let bid = null;
|
|
1452
1515
|
|
|
1453
1516
|
if (!serverResponse.hasOwnProperty('body') || !serverResponse.body.hasOwnProperty('seatbid')) {
|
|
1517
|
+
FEATURE_TOGGLES.setFeatureToggles(serverResponse);
|
|
1454
1518
|
return bids;
|
|
1455
1519
|
}
|
|
1456
1520
|
|
|
@@ -1463,7 +1527,13 @@ export const spec = {
|
|
|
1463
1527
|
|
|
1464
1528
|
// Transform rawBid in bid response to the format that will be accepted by prebid.
|
|
1465
1529
|
const innerBids = seatbid[i].bid;
|
|
1466
|
-
let requestBid
|
|
1530
|
+
let requestBid;
|
|
1531
|
+
|
|
1532
|
+
if (FEATURE_TOGGLES.isFeatureEnabled('pbjs_enable_post')) {
|
|
1533
|
+
requestBid = bidderRequest.data;
|
|
1534
|
+
} else {
|
|
1535
|
+
requestBid = safeJSONParse(bidderRequest.data.r);
|
|
1536
|
+
}
|
|
1467
1537
|
|
|
1468
1538
|
for (let j = 0; j < innerBids.length; j++) {
|
|
1469
1539
|
const bidRequest = getBidRequest(innerBids[j].impid, requestBid.imp, bidderRequest.validBidRequests);
|
|
@@ -1491,6 +1561,7 @@ export const spec = {
|
|
|
1491
1561
|
}
|
|
1492
1562
|
}
|
|
1493
1563
|
|
|
1564
|
+
FEATURE_TOGGLES.setFeatureToggles(serverResponse);
|
|
1494
1565
|
return bids;
|
|
1495
1566
|
},
|
|
1496
1567
|
|