prebid.js 7.44.0 → 7.46.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/acuityAdsBidAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/admaticBidAdapter.js +1 -1
- package/dist/adnuntiusBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/appushBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/beyondmediaBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/braveBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/brightcomBidAdapter.js +1 -1
- package/dist/brightcomSSPBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/coinzillaBidAdapter.js +1 -1
- package/dist/compassBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectIdSystem.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/contentexchangeBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/dependencies.json +15 -0
- package/dist/domainOverrideToRootDomain.js +1 -0
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/eskimiBidAdapter.js +1 -0
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/globalsunBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/growthCodeIdSystem.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/iqzoneBidAdapter.js +1 -1
- package/dist/ivsBidAdapter.js +1 -0
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerVideoProvider.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/koblerBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/kulturemediaBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/luponmediaBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mathildeadsBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/medianetBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/nativoBidAdapter.js +1 -1
- package/dist/neuwoRtdProvider.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +165 -162
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/onomagicBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxBidAdapter.js +1 -1
- package/dist/openxOrtbBidAdapter.js +1 -1
- package/dist/operaadsBidAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/ortbConverter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/pairIdSystem.js +1 -0
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxBidAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharedIdSystem.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smarthubBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/truereachBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/uid2IdSystem.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/videoheroesBidAdapter.js +1 -1
- package/dist/vidoomyBidAdapter.js +1 -1
- package/dist/visiblemeasuresBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vrtcalBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yieldoneBidAdapter.js +1 -1
- package/integrationExamples/gpt/fledge_example.html +103 -0
- package/integrationExamples/gpt/prebidServer_fledge_example.html +111 -0
- package/libraries/domainOverrideToRootDomain/index.js +39 -0
- package/libraries/ortbConverter/processors/video.js +1 -0
- package/modules/acuityAdsBidAdapter.js +1 -1
- package/modules/admaticBidAdapter.js +7 -2
- package/modules/adnuntiusBidAdapter.js +3 -1
- package/modules/amxBidAdapter.js +1 -1
- package/modules/amxIdSystem.js +23 -20
- package/modules/amxIdSystem.md +7 -7
- package/modules/appnexusBidAdapter.js +108 -102
- package/modules/appushBidAdapter.js +1 -1
- package/modules/beyondmediaBidAdapter.js +1 -1
- package/modules/bidwatchAnalyticsAdapter.js +2 -0
- package/modules/braveBidAdapter.js +1 -1
- package/modules/brightcomBidAdapter.js +1 -1
- package/modules/brightcomSSPBidAdapter.js +1 -1
- package/modules/coinzillaBidAdapter.js +1 -2
- package/modules/compassBidAdapter.js +1 -1
- package/modules/connectIdSystem.js +96 -21
- package/modules/connectIdSystem.md +6 -5
- package/modules/contentexchangeBidAdapter.js +1 -1
- package/modules/conversantBidAdapter.js +3 -0
- package/modules/criteoBidAdapter.js +5 -1
- package/modules/eskimiBidAdapter.js +72 -0
- package/modules/eskimiBidAdapter.md +34 -0
- package/modules/freewheel-sspBidAdapter.js +8 -0
- package/modules/glimpseBidAdapter.js +1 -2
- package/modules/globalsunBidAdapter.js +1 -1
- package/modules/gridBidAdapter.js +43 -20
- package/modules/growthCodeIdSystem.js +18 -15
- package/modules/gumgumBidAdapter.js +1 -1
- package/modules/iqzoneBidAdapter.js +1 -1
- package/modules/ivsBidAdapter.js +85 -0
- package/modules/ivsBidAdapter.md +34 -0
- package/modules/ixBidAdapter.js +72 -105
- package/modules/jwplayerVideoProvider.js +25 -32
- package/modules/kargoBidAdapter.js +473 -246
- package/modules/koblerBidAdapter.js +1 -2
- package/modules/kueezBidAdapter.js +1 -1
- package/modules/kueezRtbBidAdapter.js +16 -4
- package/modules/liveIntentIdSystem.js +8 -0
- package/modules/luponmediaBidAdapter.js +1 -1
- package/modules/magniteAnalyticsAdapter.js +76 -3
- package/modules/mathildeadsBidAdapter.js +1 -1
- package/modules/medianetBidAdapter.js +1 -1
- package/modules/mediasquareBidAdapter.js +2 -1
- package/modules/mgidBidAdapter.js +178 -26
- package/modules/minutemediaBidAdapter.js +1 -1
- package/modules/minutemediaplusBidAdapter.js +16 -4
- package/modules/nativoBidAdapter.js +110 -21
- package/modules/neuwoRtdProvider.js +0 -2
- package/modules/oguryBidAdapter.js +3 -2
- package/modules/onomagicBidAdapter.js +1 -2
- package/modules/openxBidAdapter.js +192 -563
- package/modules/openxBidAdapter.md +22 -20
- package/modules/openxOrtbBidAdapter.js +13 -11
- package/modules/openxOrtbBidAdapter.md +5 -3
- package/modules/operaadsBidAdapter.js +1 -1
- package/modules/pairIdSystem.js +79 -0
- package/modules/pubmaticBidAdapter.js +13 -10
- package/modules/pubxBidAdapter.js +5 -2
- package/modules/riseBidAdapter.js +1 -1
- package/modules/sharedIdSystem.js +4 -27
- package/modules/sharethroughBidAdapter.js +1 -1
- package/modules/shinezBidAdapter.js +1 -1
- package/modules/smarthubBidAdapter.js +1 -1
- package/modules/synacormediaBidAdapter.js +1 -3
- package/modules/truereachBidAdapter.js +1 -2
- package/modules/userId/eids.js +24 -0
- package/modules/userId/eids.md +16 -0
- package/modules/videoheroesBidAdapter.js +1 -1
- package/modules/vidoomyBidAdapter.js +33 -4
- package/modules/visiblemeasuresBidAdapter.js +1 -1
- package/modules/vrtcalBidAdapter.js +1 -1
- package/modules/yieldmoBidAdapter.js +15 -5
- package/modules/yieldoneBidAdapter.js +1 -1
- package/package.json +1 -1
- package/src/Renderer.js +2 -1
- package/src/config.js +78 -127
- package/src/native.js +5 -1
- package/test/spec/auctionmanager_spec.js +2 -2
- package/test/spec/libraries/domainOverrideToRootDomain/index_spec.js +77 -0
- package/test/spec/modules/1plusXRtdProvider_spec.js +8 -7
- package/test/spec/modules/acuityAdsBidAdapter_spec.js +2 -1
- package/test/spec/modules/adagioBidAdapter_spec.js +0 -25
- package/test/spec/modules/admaticBidAdapter_spec.js +1 -1
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +2 -1
- package/test/spec/modules/amxIdSystem_spec.js +13 -26
- package/test/spec/modules/appnexusBidAdapter_spec.js +464 -448
- package/test/spec/modules/appushBidAdapter_spec.js +2 -1
- package/test/spec/modules/axonixBidAdapter_spec.js +0 -27
- package/test/spec/modules/beyondmediaBidAdapter_spec.js +2 -1
- package/test/spec/modules/big-richmediaBidAdapter_spec.js +68 -64
- package/test/spec/modules/compassBidAdapter_spec.js +2 -1
- package/test/spec/modules/connectIdSystem_spec.js +420 -242
- package/test/spec/modules/contentexchangeBidAdapter_spec.js +2 -1
- package/test/spec/modules/conversantBidAdapter_spec.js +1 -0
- package/test/spec/modules/criteoBidAdapter_spec.js +33 -1
- package/test/spec/modules/eids_spec.js +30 -0
- package/test/spec/modules/eskimiBidAdapter_spec.js +155 -0
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +37 -0
- package/test/spec/modules/globalsunBidAdapter_spec.js +2 -1
- package/test/spec/modules/gridBidAdapter_spec.js +8 -0
- package/test/spec/modules/iqzoneBidAdapter_spec.js +2 -1
- package/test/spec/modules/ivsBidAdapter_spec.js +197 -0
- package/test/spec/modules/ixBidAdapter_spec.js +141 -71
- package/test/spec/modules/kargoBidAdapter_spec.js +297 -140
- package/test/spec/modules/koblerBidAdapter_spec.js +0 -20
- package/test/spec/modules/kueezRtbBidAdapter_spec.js +22 -2
- package/test/spec/modules/liveIntentIdSystem_spec.js +10 -0
- package/test/spec/modules/luponmediaBidAdapter_spec.js +1 -1
- package/test/spec/modules/magniteAnalyticsAdapter_spec.js +129 -1
- package/test/spec/modules/mathildeadsBidAdapter_spec.js +2 -1
- package/test/spec/modules/mgidBidAdapter_spec.js +184 -36
- package/test/spec/modules/minutemediaplusBidAdapter_spec.js +22 -2
- package/test/spec/modules/nativoBidAdapter_spec.js +101 -0
- package/test/spec/modules/neuwoRtdProvider_spec.js +0 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +19 -4
- package/test/spec/modules/ooloAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/openxBidAdapter_spec.js +1157 -1936
- package/test/spec/modules/openxOrtbBidAdapter_spec.js +12 -39
- package/test/spec/modules/pairIdSystem_spec.js +68 -0
- package/test/spec/modules/pubCommonId_spec.js +0 -17
- package/test/spec/modules/pubmaticBidAdapter_spec.js +868 -867
- package/test/spec/modules/pubxBidAdapter_spec.js +10 -2
- package/test/spec/modules/realvuAnalyticsAdapter_spec.js +0 -5
- package/test/spec/modules/sharedIdSystem_spec.js +0 -46
- package/test/spec/modules/sharethroughBidAdapter_spec.js +2 -1
- package/test/spec/modules/smarthubBidAdapter_spec.js +2 -1
- package/test/spec/modules/synacormediaBidAdapter_spec.js +0 -26
- package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +17 -4
- package/test/spec/modules/vidoomyBidAdapter_spec.js +58 -0
- package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +2 -1
- package/test/spec/modules/vrtcalBidAdapter_spec.js +3 -2
- package/test/spec/modules/yieldmoBidAdapter_spec.js +19 -1
- package/test/spec/renderer_spec.js +1 -2
- package/test/spec/unit/pbjs_api_spec.js +19 -3
- package/test/test_index.js +13 -3
- package/dist/gridNMBidAdapter.js +0 -1
- package/modules/gridNMBidAdapter.js +0 -422
- package/modules/gridNMBidAdapter.md +0 -39
- package/test/spec/modules/gridNMBidAdapter_spec.js +0 -636
|
@@ -17,7 +17,6 @@ const BIDDER_ENDPOINT = 'https://bid.essrtb.com/bid/prebid_rtb_call';
|
|
|
17
17
|
const DEV_BIDDER_ENDPOINT = 'https://bid-service.dev.essrtb.com/bid/prebid_rtb_call';
|
|
18
18
|
const TIMEOUT_NOTIFICATION_ENDPOINT = 'https://bid.essrtb.com/notify/prebid_timeout';
|
|
19
19
|
const SUPPORTED_CURRENCY = 'USD';
|
|
20
|
-
const DEFAULT_TIMEOUT = 1000;
|
|
21
20
|
const TIME_TO_LIVE_IN_SECONDS = 10 * 60;
|
|
22
21
|
|
|
23
22
|
export const isBidRequestValid = function (bid) {
|
|
@@ -124,7 +123,7 @@ function getPageUrlFromRefererInfo() {
|
|
|
124
123
|
|
|
125
124
|
function buildOpenRtbBidRequestPayload(validBidRequests, bidderRequest) {
|
|
126
125
|
const imps = validBidRequests.map(buildOpenRtbImpObject);
|
|
127
|
-
const timeout = bidderRequest.timeout
|
|
126
|
+
const timeout = bidderRequest.timeout;
|
|
128
127
|
const pageUrl = getPageUrlFromRequest(validBidRequests[0], bidderRequest)
|
|
129
128
|
const request = {
|
|
130
129
|
id: bidderRequest.auctionId,
|
|
@@ -293,7 +293,7 @@ function generateSharedParams(sharedParams, bidderRequest) {
|
|
|
293
293
|
const generalBidParams = getBidIdParameter('params', sharedParams);
|
|
294
294
|
const userIds = getBidIdParameter('userId', sharedParams);
|
|
295
295
|
const ortb2Metadata = bidderRequest.ortb2 || {};
|
|
296
|
-
const timeout =
|
|
296
|
+
const timeout = bidderRequest.timeout;
|
|
297
297
|
|
|
298
298
|
const params = {
|
|
299
299
|
adapter_version: VERSION,
|
|
@@ -77,6 +77,8 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) {
|
|
|
77
77
|
const pId = extractPID(params);
|
|
78
78
|
const subDomain = extractSubDomain(params);
|
|
79
79
|
|
|
80
|
+
const gpid = deepAccess(bid, 'ortb2Imp.ext.gpid', deepAccess(bid, 'ortb2Imp.ext.data.pbadslot', ''));
|
|
81
|
+
|
|
80
82
|
if (isFn(bid.getFloor)) {
|
|
81
83
|
const floorInfo = bid.getFloor({
|
|
82
84
|
currency: 'USD',
|
|
@@ -105,6 +107,7 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) {
|
|
|
105
107
|
res: `${screen.width}x${screen.height}`,
|
|
106
108
|
schain: schain,
|
|
107
109
|
mediaTypes: mediaTypes,
|
|
110
|
+
gpid: gpid,
|
|
108
111
|
auctionId: auctionId,
|
|
109
112
|
transactionId: transactionId,
|
|
110
113
|
bidderRequestId: bidderRequestId,
|
|
@@ -204,7 +207,7 @@ function interpretResponse(serverResponse, request) {
|
|
|
204
207
|
|
|
205
208
|
try {
|
|
206
209
|
results.forEach(result => {
|
|
207
|
-
const {creativeId, ad, price, exp, width, height, currency, advertiserDomains, mediaType = BANNER} = result;
|
|
210
|
+
const {creativeId, ad, price, exp, width, height, currency, metaData, advertiserDomains, mediaType = BANNER} = result;
|
|
208
211
|
if (!ad || !price) {
|
|
209
212
|
return;
|
|
210
213
|
}
|
|
@@ -218,11 +221,20 @@ function interpretResponse(serverResponse, request) {
|
|
|
218
221
|
currency: currency || CURRENCY,
|
|
219
222
|
netRevenue: true,
|
|
220
223
|
ttl: exp || TTL_SECONDS,
|
|
221
|
-
meta: {
|
|
222
|
-
advertiserDomains: advertiserDomains || []
|
|
223
|
-
}
|
|
224
224
|
};
|
|
225
225
|
|
|
226
|
+
if (metaData) {
|
|
227
|
+
Object.assign(response, {
|
|
228
|
+
meta: metaData
|
|
229
|
+
})
|
|
230
|
+
} else {
|
|
231
|
+
Object.assign(response, {
|
|
232
|
+
meta: {
|
|
233
|
+
advertiserDomains: advertiserDomains || []
|
|
234
|
+
}
|
|
235
|
+
})
|
|
236
|
+
}
|
|
237
|
+
|
|
226
238
|
if (mediaType === BANNER) {
|
|
227
239
|
Object.assign(response, {
|
|
228
240
|
ad: ad,
|
|
@@ -188,6 +188,14 @@ export const liveIntentIdSubmodule = {
|
|
|
188
188
|
result.uid2 = { 'id': value.uid2 }
|
|
189
189
|
}
|
|
190
190
|
|
|
191
|
+
if (value.bidswitch) {
|
|
192
|
+
result.bidswitch = { 'id': value.bidswitch }
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (value.medianet) {
|
|
196
|
+
result.medianet = { 'id': value.medianet }
|
|
197
|
+
}
|
|
198
|
+
|
|
191
199
|
return result
|
|
192
200
|
}
|
|
193
201
|
|
|
@@ -292,7 +292,7 @@ function newOrtbBidRequest(bidRequest, bidderRequest, currentImps) {
|
|
|
292
292
|
source: {
|
|
293
293
|
tid: bidRequest.transactionId
|
|
294
294
|
},
|
|
295
|
-
tmax:
|
|
295
|
+
tmax: bidderRequest.timeout,
|
|
296
296
|
imp: currentImps.concat([{
|
|
297
297
|
id: bidRequest.bidId,
|
|
298
298
|
secure: 1,
|
|
@@ -56,7 +56,8 @@ const {
|
|
|
56
56
|
BIDDER_DONE,
|
|
57
57
|
BID_TIMEOUT,
|
|
58
58
|
BID_WON,
|
|
59
|
-
BILLABLE_EVENT
|
|
59
|
+
BILLABLE_EVENT,
|
|
60
|
+
SEAT_NON_BID
|
|
60
61
|
},
|
|
61
62
|
STATUS: {
|
|
62
63
|
GOOD,
|
|
@@ -483,7 +484,7 @@ const findMatchingAdUnitFromAuctions = (matchesFunction, returnFirstMatch) => {
|
|
|
483
484
|
}
|
|
484
485
|
}
|
|
485
486
|
return matches;
|
|
486
|
-
}
|
|
487
|
+
};
|
|
487
488
|
|
|
488
489
|
const getRenderingIds = bidWonData => {
|
|
489
490
|
// if bid caching off -> return the bidWon auction id
|
|
@@ -840,7 +841,16 @@ magniteAdapter.track = ({ eventType, args }) => {
|
|
|
840
841
|
auctionEntry.floors.dealsEnforced = args.floorData.enforcements.floorDeals;
|
|
841
842
|
}
|
|
842
843
|
|
|
843
|
-
//
|
|
844
|
+
// no-bid from server. report it!
|
|
845
|
+
if (!bid && args.seatBidId) {
|
|
846
|
+
bid = adUnit.bids[args.seatBidId] = {
|
|
847
|
+
bidder: args.bidderCode,
|
|
848
|
+
source: 'server',
|
|
849
|
+
bidId: args.seatBidId,
|
|
850
|
+
unknownBid: true
|
|
851
|
+
};
|
|
852
|
+
}
|
|
853
|
+
|
|
844
854
|
if (!bid) {
|
|
845
855
|
logError(`${MODULE_NAME}: Could not find associated bid request for bid response with requestId: `, args.requestId);
|
|
846
856
|
break;
|
|
@@ -871,6 +881,9 @@ magniteAdapter.track = ({ eventType, args }) => {
|
|
|
871
881
|
bid.pbsBidId = pbsBidId;
|
|
872
882
|
}
|
|
873
883
|
break;
|
|
884
|
+
case SEAT_NON_BID:
|
|
885
|
+
handleNonBidEvent(args);
|
|
886
|
+
break;
|
|
874
887
|
case BIDDER_DONE:
|
|
875
888
|
const serverError = deepAccess(args, 'serverErrors.0');
|
|
876
889
|
const serverResponseTimeMs = args.serverResponseTimeMs;
|
|
@@ -958,6 +971,66 @@ magniteAdapter.track = ({ eventType, args }) => {
|
|
|
958
971
|
}
|
|
959
972
|
};
|
|
960
973
|
|
|
974
|
+
const handleNonBidEvent = function(args) {
|
|
975
|
+
const {seatnonbid, auctionId} = args;
|
|
976
|
+
const auction = deepAccess(cache, `auctions.${auctionId}.auction`);
|
|
977
|
+
// if no auction just bail
|
|
978
|
+
if (!auction) {
|
|
979
|
+
logWarn(`Unable to match nonbid to auction`);
|
|
980
|
+
return;
|
|
981
|
+
}
|
|
982
|
+
const adUnits = auction.adUnits;
|
|
983
|
+
seatnonbid.forEach(seatnonbid => {
|
|
984
|
+
let {seat} = seatnonbid;
|
|
985
|
+
seatnonbid.nonbid.forEach(nonbid => {
|
|
986
|
+
try {
|
|
987
|
+
const {status, impid} = nonbid;
|
|
988
|
+
const matchingTid = Object.keys(adUnits).find(tid => adUnits[tid].adUnitCode === impid);
|
|
989
|
+
const adUnit = adUnits[matchingTid];
|
|
990
|
+
const statusInfo = statusMap[status] || { status: 'no-bid' };
|
|
991
|
+
adUnit.bids[generateUUID()] = {
|
|
992
|
+
bidder: seat,
|
|
993
|
+
source: 'server',
|
|
994
|
+
isSeatNonBid: true,
|
|
995
|
+
clientLatencyMillis: Date.now() - auction.auctionStart,
|
|
996
|
+
...statusInfo
|
|
997
|
+
};
|
|
998
|
+
} catch (error) {
|
|
999
|
+
logWarn(`Unable to match nonbid to adUnit`);
|
|
1000
|
+
}
|
|
1001
|
+
});
|
|
1002
|
+
});
|
|
1003
|
+
};
|
|
1004
|
+
|
|
1005
|
+
const statusMap = {
|
|
1006
|
+
0: {
|
|
1007
|
+
status: 'no-bid'
|
|
1008
|
+
},
|
|
1009
|
+
100: {
|
|
1010
|
+
status: 'error',
|
|
1011
|
+
error: {
|
|
1012
|
+
code: 'request-error',
|
|
1013
|
+
description: 'general error'
|
|
1014
|
+
}
|
|
1015
|
+
},
|
|
1016
|
+
101: {
|
|
1017
|
+
status: 'error',
|
|
1018
|
+
error: {
|
|
1019
|
+
code: 'timeout-error',
|
|
1020
|
+
description: 'prebid server timeout'
|
|
1021
|
+
}
|
|
1022
|
+
},
|
|
1023
|
+
200: {
|
|
1024
|
+
status: 'rejected'
|
|
1025
|
+
},
|
|
1026
|
+
202: {
|
|
1027
|
+
status: 'rejected'
|
|
1028
|
+
},
|
|
1029
|
+
301: {
|
|
1030
|
+
status: 'rejected-ipf'
|
|
1031
|
+
}
|
|
1032
|
+
};
|
|
1033
|
+
|
|
961
1034
|
adapterManager.registerAnalyticsAdapter({
|
|
962
1035
|
adapter: magniteAdapter,
|
|
963
1036
|
code: 'magnite',
|
|
@@ -155,7 +155,7 @@ export const spec = {
|
|
|
155
155
|
coppa: config.getConfig('coppa') === true ? 1 : 0,
|
|
156
156
|
ccpa: bidderRequest.uspConsent || undefined,
|
|
157
157
|
gdpr: bidderRequest.gdprConsent || undefined,
|
|
158
|
-
tmax:
|
|
158
|
+
tmax: bidderRequest.timeout
|
|
159
159
|
};
|
|
160
160
|
|
|
161
161
|
const len = validBidRequests.length;
|
|
@@ -334,7 +334,7 @@ function generatePayload(bidRequests, bidderRequests) {
|
|
|
334
334
|
id: bidRequests[0].auctionId,
|
|
335
335
|
imp: bidRequests.map(request => slotParams(request)),
|
|
336
336
|
ortb2: bidderRequests.ortb2,
|
|
337
|
-
tmax: bidderRequests.timeout
|
|
337
|
+
tmax: bidderRequests.timeout
|
|
338
338
|
}
|
|
339
339
|
}
|
|
340
340
|
|
|
@@ -4,6 +4,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
|
4
4
|
import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
|
|
5
5
|
import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
|
|
6
6
|
import {Renderer} from '../src/Renderer.js';
|
|
7
|
+
import { getRefererInfo } from '../src/refererDetection.js';
|
|
7
8
|
|
|
8
9
|
const BIDDER_CODE = 'mediasquare';
|
|
9
10
|
const BIDDER_URL_PROD = 'https://pbs-front.mediasquare.fr/'
|
|
@@ -170,7 +171,7 @@ export const spec = {
|
|
|
170
171
|
*/
|
|
171
172
|
onBidWon: function(bid) {
|
|
172
173
|
// fires a pixel to confirm a winning bid
|
|
173
|
-
let params = {
|
|
174
|
+
let params = { pbjs: '$prebid.version$', referer: encodeURIComponent(getRefererInfo().page || getRefererInfo().topmostLocation) };
|
|
174
175
|
let endpoint = document.location.search.match(/msq_test=true/) ? BIDDER_URL_TEST : BIDDER_URL_PROD;
|
|
175
176
|
let paramsToSearchFor = ['cpm', 'size', 'mediaType', 'currency', 'creativeId', 'adUnitCode', 'timeToRespond', 'requestId', 'auctionId', 'originalCpm', 'originalCurrency'];
|
|
176
177
|
if (bid.hasOwnProperty('mediasquare')) {
|
|
@@ -1,9 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
_each,
|
|
3
|
+
deepAccess,
|
|
4
|
+
isPlainObject,
|
|
5
|
+
isArray,
|
|
6
|
+
isStr,
|
|
7
|
+
logInfo,
|
|
8
|
+
parseUrl,
|
|
9
|
+
isEmpty,
|
|
10
|
+
triggerPixel,
|
|
11
|
+
logWarn,
|
|
12
|
+
getBidIdParameter,
|
|
13
|
+
isFn,
|
|
14
|
+
isNumber,
|
|
15
|
+
isBoolean,
|
|
16
|
+
isInteger, deepSetValue,
|
|
17
|
+
} from '../src/utils.js';
|
|
2
18
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
19
|
import {BANNER, NATIVE} from '../src/mediaTypes.js';
|
|
4
20
|
import {config} from '../src/config.js';
|
|
5
21
|
import { getStorageManager } from '../src/storageManager.js';
|
|
6
22
|
import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
|
|
23
|
+
import {USERSYNC_DEFAULT_CONFIG} from '../src/userSync.js';
|
|
7
24
|
|
|
8
25
|
const GVLID = 358;
|
|
9
26
|
const DEFAULT_CUR = 'USD';
|
|
@@ -64,7 +81,7 @@ _each(NATIVE_ASSETS, anAsset => { _NATIVE_ASSET_ID_TO_KEY_MAP[anAsset.ID] = anAs
|
|
|
64
81
|
_each(NATIVE_ASSETS, anAsset => { _NATIVE_ASSET_KEY_TO_ASSET_MAP[anAsset.KEY] = anAsset });
|
|
65
82
|
|
|
66
83
|
export const spec = {
|
|
67
|
-
VERSION: '1.
|
|
84
|
+
VERSION: '1.6',
|
|
68
85
|
code: BIDDER_CODE,
|
|
69
86
|
gvlid: GVLID,
|
|
70
87
|
supportedMediaTypes: [BANNER, NATIVE],
|
|
@@ -115,22 +132,19 @@ export const spec = {
|
|
|
115
132
|
/**
|
|
116
133
|
* Make a server request from the list of BidRequests.
|
|
117
134
|
*
|
|
118
|
-
* @param {
|
|
135
|
+
* @param {BidRequest[]} validBidRequests A non-empty list of bid requests which should be sent to the Server.
|
|
136
|
+
* @param bidderRequest
|
|
119
137
|
* @return ServerRequest Info describing the request to the server.
|
|
120
138
|
*/
|
|
121
139
|
buildRequests: (validBidRequests, bidderRequest) => {
|
|
122
140
|
// convert Native ORTB definition to old-style prebid native definition
|
|
123
141
|
validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
|
|
124
|
-
|
|
142
|
+
const [bidRequest] = validBidRequests;
|
|
125
143
|
logInfo(LOG_INFO_PREFIX + `buildRequests`);
|
|
126
144
|
if (validBidRequests.length === 0) {
|
|
127
145
|
return;
|
|
128
146
|
}
|
|
129
147
|
const info = pageInfo();
|
|
130
|
-
// TODO: the fallback seems to never be used here, and probably in the wrong order
|
|
131
|
-
const page = info.location || deepAccess(bidderRequest, 'refererInfo.page')
|
|
132
|
-
const hostname = parseUrl(page).hostname;
|
|
133
|
-
let domain = extractDomainFromHost(hostname) || hostname;
|
|
134
148
|
const accountId = setOnAny(validBidRequests, 'params.accountId');
|
|
135
149
|
const muid = getLocalStorageSafely('mgMuidn');
|
|
136
150
|
let url = (setOnAny(validBidRequests, 'params.bidUrl') || ENDPOINT_URL) + accountId;
|
|
@@ -182,31 +196,108 @@ export const spec = {
|
|
|
182
196
|
|
|
183
197
|
let request = {
|
|
184
198
|
id: deepAccess(bidderRequest, 'bidderRequestId'),
|
|
185
|
-
site: {
|
|
199
|
+
site: ortb2Data?.site || {},
|
|
186
200
|
cur: [cur],
|
|
187
201
|
geo: {utcoffset: info.timeOffset},
|
|
188
|
-
device: {
|
|
189
|
-
ua: navigator.userAgent,
|
|
190
|
-
js: 1,
|
|
191
|
-
dnt: (navigator.doNotTrack === 'yes' || navigator.doNotTrack === '1' || navigator.msDoNotTrack === '1') ? 1 : 0,
|
|
192
|
-
h: screen.height,
|
|
193
|
-
w: screen.width,
|
|
194
|
-
language: getLanguage()
|
|
195
|
-
},
|
|
202
|
+
device: ortb2Data?.device || {},
|
|
196
203
|
ext: {
|
|
197
204
|
mgid_ver: spec.VERSION,
|
|
198
205
|
prebid_ver: '$prebid.version$',
|
|
199
|
-
...ortb2Data
|
|
200
206
|
},
|
|
201
|
-
imp
|
|
207
|
+
imp,
|
|
208
|
+
tmax: bidderRequest?.timeout || config.getConfig('bidderTimeout') || 500,
|
|
202
209
|
};
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
210
|
+
// request level
|
|
211
|
+
const bcat = ortb2Data?.bcat || bidRequest?.params?.bcat || [];
|
|
212
|
+
const badv = ortb2Data?.badv || bidRequest?.params?.badv || [];
|
|
213
|
+
const wlang = ortb2Data?.wlang || bidRequest?.params?.wlang || [];
|
|
214
|
+
if (bcat.length > 0) {
|
|
215
|
+
request.bcat = bcat;
|
|
216
|
+
}
|
|
217
|
+
if (badv.length > 0) {
|
|
218
|
+
request.badv = badv;
|
|
219
|
+
}
|
|
220
|
+
if (wlang.length > 0) {
|
|
221
|
+
request.wlang = wlang;
|
|
222
|
+
}
|
|
223
|
+
// site level
|
|
224
|
+
const page = deepAccess(bidderRequest, 'refererInfo.page') || info.location
|
|
225
|
+
if (!isStr(deepAccess(request.site, 'domain'))) {
|
|
226
|
+
const hostname = parseUrl(page).hostname;
|
|
227
|
+
request.site.domain = extractDomainFromHost(hostname) || hostname
|
|
228
|
+
}
|
|
229
|
+
if (!isStr(deepAccess(request.site, 'page'))) {
|
|
230
|
+
request.site.page = page
|
|
231
|
+
}
|
|
232
|
+
if (!isStr(deepAccess(request.site, 'ref'))) {
|
|
233
|
+
const ref = deepAccess(bidderRequest, 'refererInfo.ref') || info.referrer;
|
|
234
|
+
if (ref) {
|
|
235
|
+
request.site.ref = ref
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// device level
|
|
239
|
+
if (!isStr(deepAccess(request.device, 'ua'))) {
|
|
240
|
+
request.device.ua = navigator.userAgent;
|
|
241
|
+
}
|
|
242
|
+
request.device.js = 1;
|
|
243
|
+
if (!isInteger(deepAccess(request.device, 'dnt'))) {
|
|
244
|
+
request.device.dnt = (navigator?.doNotTrack === 'yes' || navigator?.doNotTrack === '1' || navigator?.msDoNotTrack === '1') ? 1 : 0;
|
|
245
|
+
}
|
|
246
|
+
if (!isInteger(deepAccess(request.device, 'h'))) {
|
|
247
|
+
request.device.h = screen.height;
|
|
206
248
|
}
|
|
207
|
-
if (
|
|
208
|
-
request.
|
|
249
|
+
if (!isInteger(deepAccess(request.device, 'w'))) {
|
|
250
|
+
request.device.w = screen.width;
|
|
251
|
+
}
|
|
252
|
+
if (!isStr(deepAccess(request.device, 'language'))) {
|
|
253
|
+
request.device.language = getLanguage();
|
|
254
|
+
}
|
|
255
|
+
// user & regs & privacy
|
|
256
|
+
if (isPlainObject(ortb2Data?.user)) {
|
|
257
|
+
request.user = ortb2Data.user;
|
|
258
|
+
}
|
|
259
|
+
if (isPlainObject(ortb2Data?.regs)) {
|
|
260
|
+
request.regs = ortb2Data.regs;
|
|
261
|
+
}
|
|
262
|
+
if (bidderRequest && isPlainObject(bidderRequest.gdprConsent)) {
|
|
263
|
+
if (!isStr(deepAccess(request.user, 'ext.consent'))) {
|
|
264
|
+
deepSetValue(request, 'user.ext.consent', bidderRequest.gdprConsent?.consentString);
|
|
265
|
+
}
|
|
266
|
+
if (!isBoolean(deepAccess(request.regs, 'ext.gdpr'))) {
|
|
267
|
+
deepSetValue(request, 'regs.ext.gdpr', bidderRequest.gdprConsent?.gdprApplies ? 1 : 0);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
const userId = deepAccess(bidderRequest, 'userId')
|
|
271
|
+
if (isStr(userId)) {
|
|
272
|
+
deepSetValue(request, 'user.id', userId);
|
|
273
|
+
}
|
|
274
|
+
const eids = setOnAny(validBidRequests, 'userIdAsEids')
|
|
275
|
+
if (eids && eids.length > 0) {
|
|
276
|
+
deepSetValue(request, 'user.ext.eids', eids);
|
|
277
|
+
}
|
|
278
|
+
if (bidderRequest && isStr(bidderRequest.uspConsent)) {
|
|
279
|
+
if (!isBoolean(deepAccess(request.regs, 'ext.us_privacy'))) {
|
|
280
|
+
deepSetValue(request, 'regs.ext.us_privacy', bidderRequest.uspConsent);
|
|
281
|
+
}
|
|
209
282
|
}
|
|
283
|
+
if (bidderRequest && isPlainObject(bidderRequest.gppConsent)) {
|
|
284
|
+
if (!isStr(deepAccess(request.regs, 'gpp'))) {
|
|
285
|
+
deepSetValue(request, 'regs.gpp', bidderRequest.gppConsent?.gppString);
|
|
286
|
+
}
|
|
287
|
+
if (!isArray(deepAccess(request.regs, 'gpp_sid'))) {
|
|
288
|
+
deepSetValue(request, 'regs.gpp_sid', bidderRequest.gppConsent?.applicableSections);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
if (config.getConfig('coppa')) {
|
|
292
|
+
if (!isInteger(deepAccess(request.regs, 'coppa'))) {
|
|
293
|
+
deepSetValue(request, 'regs.coppa', 1);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
const schain = setOnAny(validBidRequests, 'schain');
|
|
297
|
+
if (schain) {
|
|
298
|
+
deepSetValue(request, 'source.ext.schain', schain);
|
|
299
|
+
}
|
|
300
|
+
|
|
210
301
|
logInfo(LOG_INFO_PREFIX + `buildRequest:`, request);
|
|
211
302
|
return {
|
|
212
303
|
method: 'POST',
|
|
@@ -218,6 +309,7 @@ export const spec = {
|
|
|
218
309
|
* Unpack the response from the server into a list of bids.
|
|
219
310
|
*
|
|
220
311
|
* @param {ServerResponse} serverResponse A successful response from the server.
|
|
312
|
+
* @param bidRequests
|
|
221
313
|
* @return {Bid[]} An array of bids which were nested inside the server.
|
|
222
314
|
*/
|
|
223
315
|
interpretResponse: (serverResponse, bidRequests) => {
|
|
@@ -268,8 +360,66 @@ export const spec = {
|
|
|
268
360
|
}
|
|
269
361
|
logInfo(LOG_INFO_PREFIX + `onBidWon`);
|
|
270
362
|
},
|
|
271
|
-
getUserSyncs: (syncOptions, serverResponses) => {
|
|
363
|
+
getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent, gppConsent) => {
|
|
272
364
|
logInfo(LOG_INFO_PREFIX + `getUserSyncs`);
|
|
365
|
+
const spb = isPlainObject(config.getConfig('userSync')) &&
|
|
366
|
+
isNumber(config.getConfig('userSync').syncsPerBidder)
|
|
367
|
+
? config.getConfig('userSync').syncsPerBidder : USERSYNC_DEFAULT_CONFIG.syncsPerBidder;
|
|
368
|
+
|
|
369
|
+
if (spb > 0 && isPlainObject(syncOptions) && (syncOptions.iframeEnabled || syncOptions.pixelEnabled)) {
|
|
370
|
+
let pixels = [];
|
|
371
|
+
if (serverResponses &&
|
|
372
|
+
isArray(serverResponses) &&
|
|
373
|
+
serverResponses.length > 0 &&
|
|
374
|
+
isPlainObject(serverResponses[0].body) &&
|
|
375
|
+
isPlainObject(serverResponses[0].body.ext) &&
|
|
376
|
+
isArray(serverResponses[0].body.ext.cm) &&
|
|
377
|
+
serverResponses[0].body.ext.cm.length > 0) {
|
|
378
|
+
pixels = serverResponses[0].body.ext.cm;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
const syncs = [];
|
|
382
|
+
const query = [];
|
|
383
|
+
query.push('cbuster=' + Math.round(new Date().getTime()));
|
|
384
|
+
query.push('consentData=' + encodeURIComponent(isPlainObject(gdprConsent) && isStr(gdprConsent?.consentString) ? gdprConsent.consentString : ''));
|
|
385
|
+
if (isPlainObject(gdprConsent) && typeof gdprConsent?.gdprApplies === 'boolean' && gdprConsent.gdprApplies) {
|
|
386
|
+
query.push('gdprApplies=1');
|
|
387
|
+
} else {
|
|
388
|
+
query.push('gdprApplies=0');
|
|
389
|
+
}
|
|
390
|
+
if (isPlainObject(uspConsent) && uspConsent?.consentString) {
|
|
391
|
+
query.push(`uspString=${encodeURIComponent(uspConsent?.consentString)}`);
|
|
392
|
+
}
|
|
393
|
+
if (isPlainObject(gppConsent) && gppConsent?.gppString) {
|
|
394
|
+
query.push(`gppString=${encodeURIComponent(gppConsent?.gppString)}`);
|
|
395
|
+
}
|
|
396
|
+
if (config.getConfig('coppa')) {
|
|
397
|
+
query.push('coppa=1')
|
|
398
|
+
}
|
|
399
|
+
if (syncOptions.iframeEnabled) {
|
|
400
|
+
syncs.push({
|
|
401
|
+
type: 'iframe',
|
|
402
|
+
url: 'https://cm.mgid.com/i.html?' + query.join('&')
|
|
403
|
+
});
|
|
404
|
+
} else if (syncOptions.pixelEnabled) {
|
|
405
|
+
if (pixels.length === 0) {
|
|
406
|
+
for (let i = 0; i < spb; i++) {
|
|
407
|
+
syncs.push({
|
|
408
|
+
type: 'image',
|
|
409
|
+
url: 'https://cm.mgid.com/i.gif?' + query.join('&') // randomly selects partner if sync required
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
} else {
|
|
413
|
+
for (let i = 0; i < spb && i < pixels.length; i++) {
|
|
414
|
+
syncs.push({
|
|
415
|
+
type: 'image',
|
|
416
|
+
url: pixels[i] + (pixels[i].indexOf('?') > 0 ? '&' : '?') + query.join('&')
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
return syncs;
|
|
422
|
+
}
|
|
273
423
|
}
|
|
274
424
|
};
|
|
275
425
|
|
|
@@ -287,6 +437,7 @@ function setOnAny(collection, key) {
|
|
|
287
437
|
/**
|
|
288
438
|
* Unpack the Server's Bid into a Prebid-compatible one.
|
|
289
439
|
* @param serverBid
|
|
440
|
+
* @param cur
|
|
290
441
|
* @return Bid
|
|
291
442
|
*/
|
|
292
443
|
function prebidBid(serverBid, cur) {
|
|
@@ -330,7 +481,7 @@ function setMediaType(bid, newBid) {
|
|
|
330
481
|
}
|
|
331
482
|
|
|
332
483
|
function extractDomainFromHost(pageHost) {
|
|
333
|
-
if (pageHost
|
|
484
|
+
if (pageHost === 'localhost') {
|
|
334
485
|
return 'localhost'
|
|
335
486
|
}
|
|
336
487
|
let domain = null;
|
|
@@ -600,6 +751,7 @@ function pageInfo() {
|
|
|
600
751
|
* Get the floor price from bid.params for backward compatibility.
|
|
601
752
|
* If not found, then check floor module.
|
|
602
753
|
* @param bid A valid bid object
|
|
754
|
+
* @param cur
|
|
603
755
|
* @returns {*|number} floor price
|
|
604
756
|
*/
|
|
605
757
|
function getBidFloor(bid, cur) {
|
|
@@ -366,7 +366,7 @@ function generateGeneralParams(generalObject, bidderRequest) {
|
|
|
366
366
|
const {syncEnabled, filterSettings} = config.getConfig('userSync') || {};
|
|
367
367
|
const {bidderCode} = bidderRequest;
|
|
368
368
|
const generalBidParams = generalObject.params;
|
|
369
|
-
const timeout =
|
|
369
|
+
const timeout = bidderRequest.timeout;
|
|
370
370
|
|
|
371
371
|
// these params are snake_case instead of camelCase to allow backwards compatability on the server.
|
|
372
372
|
// in the future, these will be converted to camelCase to match our convention.
|
|
@@ -77,6 +77,8 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) {
|
|
|
77
77
|
const pId = extractPID(params);
|
|
78
78
|
const subDomain = extractSubDomain(params);
|
|
79
79
|
|
|
80
|
+
const gpid = deepAccess(bid, 'ortb2Imp.ext.gpid', deepAccess(bid, 'ortb2Imp.ext.data.pbadslot', ''));
|
|
81
|
+
|
|
80
82
|
if (isFn(bid.getFloor)) {
|
|
81
83
|
const floorInfo = bid.getFloor({
|
|
82
84
|
currency: 'USD',
|
|
@@ -105,6 +107,7 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) {
|
|
|
105
107
|
res: `${screen.width}x${screen.height}`,
|
|
106
108
|
schain: schain,
|
|
107
109
|
mediaTypes: mediaTypes,
|
|
110
|
+
gpid: gpid,
|
|
108
111
|
auctionId: auctionId,
|
|
109
112
|
transactionId: transactionId,
|
|
110
113
|
bidderRequestId: bidderRequestId,
|
|
@@ -204,7 +207,7 @@ function interpretResponse(serverResponse, request) {
|
|
|
204
207
|
|
|
205
208
|
try {
|
|
206
209
|
results.forEach(result => {
|
|
207
|
-
const {creativeId, ad, price, exp, width, height, currency, advertiserDomains, mediaType = BANNER} = result;
|
|
210
|
+
const {creativeId, ad, price, exp, width, height, currency, metaData, advertiserDomains, mediaType = BANNER} = result;
|
|
208
211
|
if (!ad || !price) {
|
|
209
212
|
return;
|
|
210
213
|
}
|
|
@@ -218,11 +221,20 @@ function interpretResponse(serverResponse, request) {
|
|
|
218
221
|
currency: currency || CURRENCY,
|
|
219
222
|
netRevenue: true,
|
|
220
223
|
ttl: exp || TTL_SECONDS,
|
|
221
|
-
meta: {
|
|
222
|
-
advertiserDomains: advertiserDomains || []
|
|
223
|
-
}
|
|
224
224
|
};
|
|
225
225
|
|
|
226
|
+
if (metaData) {
|
|
227
|
+
Object.assign(response, {
|
|
228
|
+
meta: metaData
|
|
229
|
+
})
|
|
230
|
+
} else {
|
|
231
|
+
Object.assign(response, {
|
|
232
|
+
meta: {
|
|
233
|
+
advertiserDomains: advertiserDomains || []
|
|
234
|
+
}
|
|
235
|
+
})
|
|
236
|
+
}
|
|
237
|
+
|
|
226
238
|
if (mediaType === BANNER) {
|
|
227
239
|
Object.assign(response, {
|
|
228
240
|
ad: ad,
|