prebid.js 8.26.0 → 8.28.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/33acrossAnalyticsAdapter.js +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adnuntiusBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adstirBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/agmaAnalyticsAdapter.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/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bizzclickBidAdapter.js +1 -1
- package/dist/bridBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/browsiRtdProvider.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.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/deepintentBidAdapter.js +1 -1
- package/dist/dependencies.json +3 -0
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/dxkultureBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/flippBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/geoedgeRtdProvider.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/growthCodeRtdProvider.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/identityLinkIdSystem.js +1 -1
- package/dist/illuminBidAdapter.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/invibesBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediagoBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/mgidXBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +156 -156
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxBidAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pgamsspBidAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +2 -2
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/shinezRtbBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sparteoBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/theAdxBidAdapter.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/uid2IdSystem.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/unrulyBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/viantOrtbBidAdapter.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/voxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/modules/adagioAnalyticsAdapter.js +52 -6
- package/modules/adagioBidAdapter.js +25 -16
- package/modules/adnuntiusBidAdapter.js +25 -21
- package/modules/bizzclickBidAdapter.js +55 -300
- package/modules/bizzclickBidAdapter.md +94 -89
- package/modules/browsiRtdProvider.js +2 -2
- package/modules/criteoBidAdapter.js +1 -0
- package/modules/deepintentBidAdapter.js +2 -0
- package/modules/flippBidAdapter.js +1 -1
- package/modules/geoedgeRtdProvider.js +4 -2
- package/modules/growthCodeRtdProvider.js +2 -2
- package/modules/gumgumBidAdapter.js +3 -3
- package/modules/identityLinkIdSystem.js +1 -2
- package/modules/invibesBidAdapter.js +50 -6
- package/modules/liveIntentIdSystem.js +17 -1
- package/modules/mediagoBidAdapter.js +106 -34
- package/modules/mgidXBidAdapter.js +6 -1
- package/modules/minutemediaBidAdapter.js +9 -7
- package/modules/minutemediaBidAdapter.md +1 -0
- package/modules/nextMillenniumBidAdapter.js +170 -113
- package/modules/pgamsspBidAdapter.js +18 -1
- package/modules/pubmaticAnalyticsAdapter.js +30 -9
- package/modules/pubmaticBidAdapter.js +3 -1
- package/modules/riseBidAdapter.js +11 -8
- package/modules/riseBidAdapter.md +1 -0
- package/modules/rtdModule/index.js +2 -1
- package/modules/sovrnBidAdapter.js +5 -0
- package/modules/sparteoBidAdapter.js +10 -5
- package/modules/taboolaBidAdapter.js +8 -0
- package/modules/teadsBidAdapter.js +7 -0
- package/modules/theAdxBidAdapter.js +10 -2
- package/modules/theAdxBidAdapter.md +10 -9
- package/modules/unrulyBidAdapter.js +8 -1
- package/modules/userId/eids.js +2 -2
- package/modules/viantOrtbBidAdapter.js +1 -1
- package/modules/visxBidAdapter.js +23 -0
- package/modules/voxBidAdapter.js +2 -0
- package/package.json +1 -1
- package/src/auction.js +1 -1
- package/src/constants.json +5 -2
- package/src/events.js +1 -1
- package/test/spec/modules/adagioAnalyticsAdapter_spec.js +83 -26
- package/test/spec/modules/adagioBidAdapter_spec.js +0 -11
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +1 -1
- package/test/spec/modules/bizzclickBidAdapter_spec.js +229 -340
- package/test/spec/modules/browsiRtdProvider_spec.js +0 -6
- package/test/spec/modules/criteoBidAdapter_spec.js +24 -0
- package/test/spec/modules/eids_spec.js +35 -2
- package/test/spec/modules/geoedgeRtdProvider_spec.js +10 -0
- package/test/spec/modules/gumgumBidAdapter_spec.js +8 -0
- package/test/spec/modules/identityLinkIdSystem_spec.js +0 -18
- package/test/spec/modules/invibesBidAdapter_spec.js +99 -0
- package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +5 -0
- package/test/spec/modules/liveIntentIdSystem_spec.js +5 -0
- package/test/spec/modules/mediagoBidAdapter_spec.js +107 -23
- package/test/spec/modules/mgidXBidAdapter_spec.js +9 -4
- package/test/spec/modules/minutemediaBidAdapter_spec.js +10 -0
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +503 -80
- package/test/spec/modules/pgamsspBidAdapter_spec.js +1 -0
- package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +51 -0
- package/test/spec/modules/pubmaticBidAdapter_spec.js +8 -0
- package/test/spec/modules/riseBidAdapter_spec.js +11 -1
- package/test/spec/modules/sovrnBidAdapter_spec.js +35 -0
- package/test/spec/modules/sparteoBidAdapter_spec.js +8 -2
- package/test/spec/modules/taboolaBidAdapter_spec.js +45 -1
- package/test/spec/modules/teadsBidAdapter_spec.js +58 -0
- package/test/spec/modules/theAdxBidAdapter_spec.js +72 -0
- package/test/spec/modules/unrulyBidAdapter_spec.js +7 -4
- package/test/spec/modules/userId_spec.js +19 -1
- package/test/spec/modules/viantOrtbBidAdapter_spec.js +1 -1
- package/test/spec/modules/visxBidAdapter_spec.js +39 -1
- package/test/spec/unit/core/events_spec.js +17 -2
- package/test/spec/unit/pbjs_api_spec.js +7 -0
|
@@ -10,17 +10,21 @@ import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
|
10
10
|
|
|
11
11
|
const BIDDER_CODE = 'mediago';
|
|
12
12
|
// const PROTOCOL = window.document.location.protocol;
|
|
13
|
-
const ENDPOINT_URL =
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
const ENDPOINT_URL = 'https://gbid.mediago.io/api/bid?tn=';
|
|
14
|
+
const COOKY_SYNC_URL = 'https://gtrace.mediago.io/ju/cs/eplist';
|
|
15
|
+
const COOKY_SYNC_IFRAME_URL = 'https://cdn.mediago.io/js/cookieSync.html';
|
|
16
|
+
|
|
16
17
|
const TIME_TO_LIVE = 500;
|
|
18
|
+
const GVLID = 1020;
|
|
17
19
|
// const ENDPOINT_URL = '/api/bid?tn=';
|
|
18
|
-
const storage = getStorageManager({bidderCode: BIDDER_CODE});
|
|
20
|
+
const storage = getStorageManager({ bidderCode: BIDDER_CODE });
|
|
19
21
|
let globals = {};
|
|
20
22
|
let itemMaps = {};
|
|
21
23
|
|
|
22
24
|
/* ----- mguid:start ------ */
|
|
23
25
|
const COOKIE_KEY_MGUID = '__mguid_';
|
|
26
|
+
const STORE_MAX_AGE = 1000 * 60 * 60 * 24 * 365;
|
|
27
|
+
let reqTimes = 0;
|
|
24
28
|
|
|
25
29
|
/**
|
|
26
30
|
* 获取用户id
|
|
@@ -31,7 +35,7 @@ const getUserID = () => {
|
|
|
31
35
|
|
|
32
36
|
if (i === null) {
|
|
33
37
|
const uuid = utils.generateUUID();
|
|
34
|
-
storage.setCookie(COOKIE_KEY_MGUID, uuid);
|
|
38
|
+
storage.setCookie(COOKIE_KEY_MGUID, uuid, STORE_MAX_AGE);
|
|
35
39
|
return uuid;
|
|
36
40
|
}
|
|
37
41
|
return i;
|
|
@@ -72,7 +76,7 @@ function isMobileAndTablet() {
|
|
|
72
76
|
'.+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)',
|
|
73
77
|
'|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone',
|
|
74
78
|
'|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up.(browser|link)|vodafone|wap',
|
|
75
|
-
'|windows ce|xda|xiino|android|ipad|playbook|silk'
|
|
79
|
+
'|windows ce|xda|xiino|android|ipad|playbook|silk'
|
|
76
80
|
].join(''),
|
|
77
81
|
'i'
|
|
78
82
|
);
|
|
@@ -96,7 +100,7 @@ function isMobileAndTablet() {
|
|
|
96
100
|
'|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(.b|g1|si)|utst|',
|
|
97
101
|
'v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)',
|
|
98
102
|
'|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-',
|
|
99
|
-
'|your|zeto|zte-'
|
|
103
|
+
'|your|zeto|zte-'
|
|
100
104
|
].join(''),
|
|
101
105
|
'i'
|
|
102
106
|
);
|
|
@@ -138,7 +142,7 @@ function getBidFloor(bid) {
|
|
|
138
142
|
const bidFloor = bid.getFloor({
|
|
139
143
|
currency: 'USD',
|
|
140
144
|
mediaType: '*',
|
|
141
|
-
size: '*'
|
|
145
|
+
size: '*'
|
|
142
146
|
});
|
|
143
147
|
return bidFloor.floor;
|
|
144
148
|
} catch (_) {
|
|
@@ -156,11 +160,7 @@ function transformSizes(requestSizes) {
|
|
|
156
160
|
let sizes = [];
|
|
157
161
|
let sizeObj = {};
|
|
158
162
|
|
|
159
|
-
if (
|
|
160
|
-
utils.isArray(requestSizes) &&
|
|
161
|
-
requestSizes.length === 2 &&
|
|
162
|
-
!utils.isArray(requestSizes[0])
|
|
163
|
-
) {
|
|
163
|
+
if (utils.isArray(requestSizes) && requestSizes.length === 2 && !utils.isArray(requestSizes[0])) {
|
|
164
164
|
sizeObj.width = parseInt(requestSizes[0], 10);
|
|
165
165
|
sizeObj.height = parseInt(requestSizes[1], 10);
|
|
166
166
|
sizes.push(sizeObj);
|
|
@@ -187,7 +187,7 @@ const mediagoAdSize = [
|
|
|
187
187
|
{ w: 160, h: 600 },
|
|
188
188
|
{ w: 320, h: 180 },
|
|
189
189
|
{ w: 320, h: 100 },
|
|
190
|
-
{ w: 336, h: 280 }
|
|
190
|
+
{ w: 336, h: 280 }
|
|
191
191
|
];
|
|
192
192
|
|
|
193
193
|
/**
|
|
@@ -207,17 +207,13 @@ function getItems(validBidRequests, bidderRequest) {
|
|
|
207
207
|
|
|
208
208
|
// 确认尺寸是否符合我们要求
|
|
209
209
|
for (let size of sizes) {
|
|
210
|
-
matchSize = mediagoAdSize.find(
|
|
211
|
-
(item) => size.width === item.w && size.height === item.h
|
|
212
|
-
);
|
|
210
|
+
matchSize = mediagoAdSize.find(item => size.width === item.w && size.height === item.h);
|
|
213
211
|
if (matchSize) {
|
|
214
212
|
break;
|
|
215
213
|
}
|
|
216
214
|
}
|
|
217
215
|
if (!matchSize) {
|
|
218
|
-
matchSize = sizes[0]
|
|
219
|
-
? { h: sizes[0].height || 0, w: sizes[0].width || 0 }
|
|
220
|
-
: { h: 0, w: 0 };
|
|
216
|
+
matchSize = sizes[0] ? { h: sizes[0].height || 0, w: sizes[0].width || 0 } : { h: 0, w: 0 };
|
|
221
217
|
}
|
|
222
218
|
|
|
223
219
|
const bidFloor = getBidFloor(req);
|
|
@@ -226,6 +222,18 @@ function getItems(validBidRequests, bidderRequest) {
|
|
|
226
222
|
utils.deepAccess(req, 'ortb2Imp.ext.data.pbadslot') ||
|
|
227
223
|
utils.deepAccess(req, 'params.placementId', 0);
|
|
228
224
|
|
|
225
|
+
const gdprConsent = {};
|
|
226
|
+
if (bidderRequest && bidderRequest.gdprConsent) {
|
|
227
|
+
gdprConsent.consent = bidderRequest.gdprConsent.consentString;
|
|
228
|
+
gdprConsent.gdpr = bidderRequest.gdprConsent.gdprApplies ? 1 : 0;
|
|
229
|
+
// if (bidderRequest.gdprConsent.addtlConsent && bidderRequest.gdprConsent.addtlConsent.indexOf('~') !== -1) {
|
|
230
|
+
// let ac = bidderRequest.gdprConsent.addtlConsent;
|
|
231
|
+
// // pull only the ids from the string (after the ~) and convert them to an array of ints
|
|
232
|
+
// let acStr = ac.substring(ac.indexOf('~') + 1);
|
|
233
|
+
// gdpr_consent.addtl_consent = acStr.split('.').map(id => parseInt(id, 10));
|
|
234
|
+
// }
|
|
235
|
+
}
|
|
236
|
+
|
|
229
237
|
// if (mediaTypes.native) {}
|
|
230
238
|
// banner广告类型
|
|
231
239
|
if (mediaTypes.banner) {
|
|
@@ -237,17 +245,21 @@ function getItems(validBidRequests, bidderRequest) {
|
|
|
237
245
|
h: matchSize.h,
|
|
238
246
|
w: matchSize.w,
|
|
239
247
|
pos: 1,
|
|
240
|
-
format: sizes
|
|
248
|
+
format: sizes
|
|
241
249
|
},
|
|
242
250
|
ext: {
|
|
251
|
+
adUnitCode: req.adUnitCode,
|
|
252
|
+
referrer: getReferrer(req, bidderRequest),
|
|
243
253
|
ortb2Imp: utils.deepAccess(req, 'ortb2Imp'), // 传入完整对象,分析日志数据
|
|
244
254
|
gpid: gpid, // 加入后无法返回广告
|
|
255
|
+
adslot: utils.deepAccess(req, 'ortb2Imp.ext.data.adserver.adslot', '', ''),
|
|
256
|
+
...gdprConsent // gdpr
|
|
245
257
|
},
|
|
246
|
-
tagid: req.params && req.params.tagid
|
|
258
|
+
tagid: req.params && req.params.tagid
|
|
247
259
|
};
|
|
248
260
|
itemMaps[id] = {
|
|
249
261
|
req,
|
|
250
|
-
ret
|
|
262
|
+
ret
|
|
251
263
|
};
|
|
252
264
|
}
|
|
253
265
|
|
|
@@ -256,6 +268,21 @@ function getItems(validBidRequests, bidderRequest) {
|
|
|
256
268
|
return items;
|
|
257
269
|
}
|
|
258
270
|
|
|
271
|
+
/**
|
|
272
|
+
* @param {BidRequest} bidRequest
|
|
273
|
+
* @param bidderRequest
|
|
274
|
+
* @returns {string}
|
|
275
|
+
*/
|
|
276
|
+
function getReferrer(bidRequest = {}, bidderRequest = {}) {
|
|
277
|
+
let pageUrl;
|
|
278
|
+
if (bidRequest.params && bidRequest.params.referrer) {
|
|
279
|
+
pageUrl = bidRequest.params.referrer;
|
|
280
|
+
} else {
|
|
281
|
+
pageUrl = utils.deepAccess(bidderRequest, 'refererInfo.page');
|
|
282
|
+
}
|
|
283
|
+
return pageUrl;
|
|
284
|
+
}
|
|
285
|
+
|
|
259
286
|
/**
|
|
260
287
|
* 获取rtb请求参数
|
|
261
288
|
*
|
|
@@ -268,7 +295,14 @@ function getParam(validBidRequests, bidderRequest) {
|
|
|
268
295
|
const sharedid =
|
|
269
296
|
utils.deepAccess(validBidRequests[0], 'userId.sharedid.id') ||
|
|
270
297
|
utils.deepAccess(validBidRequests[0], 'userId.pubcid');
|
|
271
|
-
|
|
298
|
+
|
|
299
|
+
const bidsUserIdAsEids = validBidRequests[0].userIdAsEids;
|
|
300
|
+
const bidsUserid = validBidRequests[0].userId;
|
|
301
|
+
const eids = bidsUserIdAsEids || bidsUserid;
|
|
302
|
+
const ppuid = bidsUserid && bidsUserid.pubProvidedId;
|
|
303
|
+
const content = utils.deepAccess(bidderRequest, 'ortb2.site.content');
|
|
304
|
+
const cat = utils.deepAccess(bidderRequest, 'ortb2.site.cat');
|
|
305
|
+
reqTimes += 1;
|
|
272
306
|
|
|
273
307
|
let isMobile = isMobileAndTablet() ? 1 : 0;
|
|
274
308
|
// input test status by Publisher. more frequently for test true req
|
|
@@ -276,8 +310,7 @@ function getParam(validBidRequests, bidderRequest) {
|
|
|
276
310
|
let auctionId = getProperty(bidderRequest, 'auctionId');
|
|
277
311
|
let items = getItems(validBidRequests, bidderRequest);
|
|
278
312
|
|
|
279
|
-
const domain =
|
|
280
|
-
utils.deepAccess(bidderRequest, 'refererInfo.domain') || document.domain;
|
|
313
|
+
const domain = utils.deepAccess(bidderRequest, 'refererInfo.domain') || document.domain;
|
|
281
314
|
const location = utils.deepAccess(bidderRequest, 'refererInfo.location');
|
|
282
315
|
const page = utils.deepAccess(bidderRequest, 'refererInfo.page');
|
|
283
316
|
const referer = utils.deepAccess(bidderRequest, 'refererInfo.ref');
|
|
@@ -301,15 +334,21 @@ function getParam(validBidRequests, bidderRequest) {
|
|
|
301
334
|
// ua: 'Mozilla/5.0 (Linux; Android 12; SM-G970U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36',
|
|
302
335
|
os: navigator.platform || '',
|
|
303
336
|
ua: navigator.userAgent,
|
|
304
|
-
language: /en/.test(navigator.language) ? 'en' : navigator.language
|
|
337
|
+
language: /en/.test(navigator.language) ? 'en' : navigator.language
|
|
305
338
|
},
|
|
306
339
|
ext: {
|
|
307
340
|
eids,
|
|
341
|
+
bidsUserIdAsEids,
|
|
342
|
+
bidsUserid,
|
|
343
|
+
ppuid,
|
|
308
344
|
firstPartyData,
|
|
345
|
+
content,
|
|
346
|
+
cat,
|
|
347
|
+
reqTimes
|
|
309
348
|
},
|
|
310
349
|
user: {
|
|
311
350
|
buyeruid: getUserID(),
|
|
312
|
-
id: sharedid || pubcid
|
|
351
|
+
id: sharedid || pubcid
|
|
313
352
|
},
|
|
314
353
|
eids,
|
|
315
354
|
site: {
|
|
@@ -322,11 +361,11 @@ function getParam(validBidRequests, bidderRequest) {
|
|
|
322
361
|
publisher: {
|
|
323
362
|
// todo
|
|
324
363
|
id: domain,
|
|
325
|
-
name: domain
|
|
326
|
-
}
|
|
364
|
+
name: domain
|
|
365
|
+
}
|
|
327
366
|
},
|
|
328
367
|
imp: items,
|
|
329
|
-
tmax: timeout
|
|
368
|
+
tmax: timeout
|
|
330
369
|
};
|
|
331
370
|
return c;
|
|
332
371
|
} else {
|
|
@@ -336,6 +375,7 @@ function getParam(validBidRequests, bidderRequest) {
|
|
|
336
375
|
|
|
337
376
|
export const spec = {
|
|
338
377
|
code: BIDDER_CODE,
|
|
378
|
+
gvlid: GVLID,
|
|
339
379
|
// aliases: ['ex'], // short code
|
|
340
380
|
/**
|
|
341
381
|
* Determines whether or not the given bid request is valid.
|
|
@@ -367,7 +407,7 @@ export const spec = {
|
|
|
367
407
|
return {
|
|
368
408
|
method: 'POST',
|
|
369
409
|
url: ENDPOINT_URL + globals['token'],
|
|
370
|
-
data: payloadString
|
|
410
|
+
data: payloadString
|
|
371
411
|
};
|
|
372
412
|
},
|
|
373
413
|
|
|
@@ -398,7 +438,7 @@ export const spec = {
|
|
|
398
438
|
ttl: TIME_TO_LIVE,
|
|
399
439
|
// referrer: REFERER,
|
|
400
440
|
ad: getProperty(bid, 'adm'),
|
|
401
|
-
nurl: getProperty(bid, 'nurl')
|
|
441
|
+
nurl: getProperty(bid, 'nurl')
|
|
402
442
|
// adserverTargeting: {
|
|
403
443
|
// granularityMultiplier: 0.1,
|
|
404
444
|
// priceGranularity: 'pbHg',
|
|
@@ -415,6 +455,38 @@ export const spec = {
|
|
|
415
455
|
return bidResponses;
|
|
416
456
|
},
|
|
417
457
|
|
|
458
|
+
getUserSyncs: function (syncOptions, serverResponse, gdprConsent, uspConsent, gppConsent) {
|
|
459
|
+
const origin = encodeURIComponent(location.origin || `https://${location.host}`);
|
|
460
|
+
let syncParamUrl = `dm=${origin}`;
|
|
461
|
+
|
|
462
|
+
if (gdprConsent && gdprConsent.consentString) {
|
|
463
|
+
if (typeof gdprConsent.gdprApplies === 'boolean') {
|
|
464
|
+
syncParamUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
|
|
465
|
+
} else {
|
|
466
|
+
syncParamUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
if (uspConsent && uspConsent.consentString) {
|
|
470
|
+
syncParamUrl += `&ccpa_consent=${uspConsent.consentString}`;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
if (syncOptions.iframeEnabled) {
|
|
474
|
+
return [
|
|
475
|
+
{
|
|
476
|
+
type: 'iframe',
|
|
477
|
+
url: `${COOKY_SYNC_IFRAME_URL}?${syncParamUrl}`
|
|
478
|
+
}
|
|
479
|
+
];
|
|
480
|
+
} else {
|
|
481
|
+
return [
|
|
482
|
+
{
|
|
483
|
+
type: 'image',
|
|
484
|
+
url: `${COOKY_SYNC_URL}?${syncParamUrl}`
|
|
485
|
+
}
|
|
486
|
+
];
|
|
487
|
+
}
|
|
488
|
+
},
|
|
489
|
+
|
|
418
490
|
/**
|
|
419
491
|
* Register bidder specific code, which will execute if bidder timed out after an auction
|
|
420
492
|
* @param {data} Containing timeout specific data
|
|
@@ -434,7 +506,7 @@ export const spec = {
|
|
|
434
506
|
if (bid['nurl']) {
|
|
435
507
|
utils.triggerPixel(bid['nurl']);
|
|
436
508
|
}
|
|
437
|
-
}
|
|
509
|
+
}
|
|
438
510
|
|
|
439
511
|
/**
|
|
440
512
|
* Register bidder specific code, which will execute when the adserver targeting has been set for a bid from this bidder
|
|
@@ -166,10 +166,15 @@ export const spec = {
|
|
|
166
166
|
placements,
|
|
167
167
|
coppa: config.getConfig('coppa') === true ? 1 : 0,
|
|
168
168
|
ccpa: bidderRequest.uspConsent || undefined,
|
|
169
|
-
gdpr: bidderRequest.gdprConsent || undefined,
|
|
170
169
|
tmax: config.getConfig('bidderTimeout')
|
|
171
170
|
};
|
|
172
171
|
|
|
172
|
+
if (bidderRequest.gdprConsent) {
|
|
173
|
+
request.gdpr = {
|
|
174
|
+
consentString: bidderRequest.gdprConsent.consentString
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
|
|
173
178
|
const len = validBidRequests.length;
|
|
174
179
|
for (let i = 0; i < len; i++) {
|
|
175
180
|
const bid = validBidRequests[i];
|
|
@@ -19,7 +19,7 @@ const SUPPORTED_AD_TYPES = [BANNER, VIDEO];
|
|
|
19
19
|
const BIDDER_CODE = 'minutemedia';
|
|
20
20
|
const ADAPTER_VERSION = '6.0.0';
|
|
21
21
|
const TTL = 360;
|
|
22
|
-
const
|
|
22
|
+
const DEFAULT_CURRENCY = 'USD';
|
|
23
23
|
const SELLER_ENDPOINT = 'https://hb.minutemedia-prebid.com/';
|
|
24
24
|
const MODES = {
|
|
25
25
|
PRODUCTION: 'hb-mm-multi',
|
|
@@ -72,7 +72,7 @@ export const spec = {
|
|
|
72
72
|
const bidResponse = {
|
|
73
73
|
requestId: adUnit.requestId,
|
|
74
74
|
cpm: adUnit.cpm,
|
|
75
|
-
currency: adUnit.currency ||
|
|
75
|
+
currency: adUnit.currency || DEFAULT_CURRENCY,
|
|
76
76
|
width: adUnit.width,
|
|
77
77
|
height: adUnit.height,
|
|
78
78
|
ttl: adUnit.ttl || TTL,
|
|
@@ -141,16 +141,16 @@ registerBidder(spec);
|
|
|
141
141
|
* @param bid {bid}
|
|
142
142
|
* @returns {Number}
|
|
143
143
|
*/
|
|
144
|
-
function getFloor(bid, mediaType) {
|
|
144
|
+
function getFloor(bid, mediaType, currency) {
|
|
145
145
|
if (!isFn(bid.getFloor)) {
|
|
146
146
|
return 0;
|
|
147
147
|
}
|
|
148
148
|
let floorResult = bid.getFloor({
|
|
149
|
-
currency:
|
|
149
|
+
currency: currency,
|
|
150
150
|
mediaType: mediaType,
|
|
151
151
|
size: '*'
|
|
152
152
|
});
|
|
153
|
-
return floorResult.currency ===
|
|
153
|
+
return floorResult.currency === currency && floorResult.floor ? floorResult.floor : 0;
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
/**
|
|
@@ -286,6 +286,7 @@ function generateBidParameters(bid, bidderRequest) {
|
|
|
286
286
|
const {params} = bid;
|
|
287
287
|
const mediaType = isBanner(bid) ? BANNER : VIDEO;
|
|
288
288
|
const sizesArray = getSizesArray(bid, mediaType);
|
|
289
|
+
const currency = params.currency || config.getConfig('currency.adServerCurrency') || DEFAULT_CURRENCY;
|
|
289
290
|
|
|
290
291
|
// fix floor price in case of NAN
|
|
291
292
|
if (isNaN(params.floorPrice)) {
|
|
@@ -296,12 +297,13 @@ function generateBidParameters(bid, bidderRequest) {
|
|
|
296
297
|
mediaType,
|
|
297
298
|
adUnitCode: getBidIdParameter('adUnitCode', bid),
|
|
298
299
|
sizes: sizesArray,
|
|
299
|
-
|
|
300
|
+
currency: currency,
|
|
301
|
+
floorPrice: Math.max(getFloor(bid, mediaType, currency), params.floorPrice),
|
|
300
302
|
bidId: getBidIdParameter('bidId', bid),
|
|
301
303
|
loop: getBidIdParameter('bidderRequestsCount', bid),
|
|
302
304
|
bidderRequestId: getBidIdParameter('bidderRequestId', bid),
|
|
303
305
|
transactionId: bid.ortb2Imp?.ext?.tid || '',
|
|
304
|
-
coppa: 0
|
|
306
|
+
coppa: 0,
|
|
305
307
|
};
|
|
306
308
|
|
|
307
309
|
const pos = deepAccess(bid, `mediaTypes.${mediaType}.pos`);
|
|
@@ -24,6 +24,7 @@ The adapter supports Video(instream) & Banner.
|
|
|
24
24
|
| `floorPrice` | optional | Number | Minimum price in USD. Misuse of this parameter can impact revenue | 2.00
|
|
25
25
|
| `placementId` | optional | String | A unique placement identifier | "12345678"
|
|
26
26
|
| `testMode` | optional | Boolean | This activates the test mode | false
|
|
27
|
+
| `currency` | optional | String | 3 letters currency | "EUR"
|
|
27
28
|
|
|
28
29
|
# Test Parameters
|
|
29
30
|
```javascript
|