prebid.js 5.19.0 → 6.2.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.
Files changed (161) hide show
  1. package/.babelrc.js +1 -10
  2. package/README.md +4 -2
  3. package/browsers.json +13 -37
  4. package/gulpfile.js +1 -0
  5. package/karma.conf.maker.js +1 -1
  6. package/modules/adheseBidAdapter.js +7 -2
  7. package/modules/adkernelBidAdapter.js +1 -0
  8. package/modules/adlivetechBidAdapter.md +61 -0
  9. package/modules/admixerBidAdapter.js +2 -1
  10. package/modules/adnuntiusBidAdapter.js +2 -1
  11. package/modules/adomikAnalyticsAdapter.js +10 -4
  12. package/modules/adplusBidAdapter.js +203 -0
  13. package/modules/adplusBidAdapter.md +39 -0
  14. package/modules/adyoulikeBidAdapter.js +7 -2
  15. package/modules/airgridRtdProvider.js +1 -1
  16. package/modules/appnexusBidAdapter.js +28 -5
  17. package/modules/atsAnalyticsAdapter.js +67 -46
  18. package/modules/atsAnalyticsAdapter.md +1 -0
  19. package/modules/beachfrontBidAdapter.js +14 -17
  20. package/modules/betweenBidAdapter.js +2 -1
  21. package/modules/browsiRtdProvider.js +106 -18
  22. package/modules/cleanioRtdProvider.js +192 -0
  23. package/modules/cleanioRtdProvider.md +59 -0
  24. package/modules/codefuelBidAdapter.js +1 -3
  25. package/modules/codefuelBidAdapter.md +3 -3
  26. package/modules/craftBidAdapter.js +5 -3
  27. package/modules/datablocksBidAdapter.js +3 -3
  28. package/modules/dchain.js +149 -0
  29. package/modules/dchain.md +45 -0
  30. package/modules/deepintentBidAdapter.js +1 -1
  31. package/modules/deltaprojectsBidAdapter.js +252 -0
  32. package/modules/deltaprojectsBidAdapter.md +32 -0
  33. package/modules/emx_digitalBidAdapter.js +9 -1
  34. package/modules/engageyaBidAdapter.js +68 -54
  35. package/modules/freewheel-sspBidAdapter.js +6 -0
  36. package/modules/glimpseBidAdapter.js +31 -16
  37. package/modules/goldbachBidAdapter.js +1176 -0
  38. package/modules/goldbachBidAdapter.md +151 -0
  39. package/modules/gptPreAuction.js +11 -5
  40. package/modules/gridBidAdapter.js +1 -0
  41. package/modules/gumgumBidAdapter.js +5 -1
  42. package/modules/id5IdSystem.md +6 -6
  43. package/modules/imRtdProvider.js +31 -0
  44. package/modules/intersectionRtdProvider.js +114 -0
  45. package/modules/invibesBidAdapter.js +15 -9
  46. package/modules/ipromBidAdapter.js +79 -0
  47. package/modules/ixBidAdapter.js +173 -22
  48. package/modules/jixieBidAdapter.js +8 -2
  49. package/modules/justpremiumBidAdapter.js +6 -1
  50. package/modules/limelightDigitalBidAdapter.js +2 -1
  51. package/modules/livewrappedAnalyticsAdapter.js +5 -0
  52. package/modules/luponmediaBidAdapter.js +570 -0
  53. package/modules/merkleIdSystem.js +5 -0
  54. package/modules/missenaBidAdapter.js +89 -0
  55. package/modules/multibid/index.js +3 -3
  56. package/modules/nativoBidAdapter.js +32 -2
  57. package/modules/oguryBidAdapter.js +2 -1
  58. package/modules/openxBidAdapter.js +7 -2
  59. package/modules/operaadsBidAdapter.js +21 -1
  60. package/modules/otmBidAdapter.js +146 -0
  61. package/modules/otmBidAdapter.md +27 -26
  62. package/modules/outbrainBidAdapter.js +5 -0
  63. package/modules/playwireBidAdapter.md +61 -0
  64. package/modules/prebidServerBidAdapter/index.js +3 -3
  65. package/modules/pubmaticBidAdapter.js +5 -3
  66. package/modules/relaidoBidAdapter.js +86 -65
  67. package/modules/richaudienceBidAdapter.js +1 -1
  68. package/modules/rtdModule/index.js +2 -2
  69. package/modules/saambaaBidAdapter.js +420 -0
  70. package/modules/saambaaBidAdapter.md +65 -68
  71. package/modules/seedtagBidAdapter.js +6 -0
  72. package/modules/smaatoBidAdapter.js +9 -1
  73. package/modules/smartxBidAdapter.js +17 -1
  74. package/modules/sonobiBidAdapter.js +7 -0
  75. package/modules/sortableBidAdapter.js +1 -0
  76. package/modules/sspBCBidAdapter.js +34 -3
  77. package/modules/tappxBidAdapter.js +3 -1
  78. package/modules/teadsBidAdapter.js +3 -0
  79. package/modules/trustxBidAdapter.js +18 -7
  80. package/modules/undertoneBidAdapter.js +8 -1
  81. package/modules/userId/index.js +27 -2
  82. package/modules/ventes.md +71 -0
  83. package/modules/ventesBidAdapter.js +410 -0
  84. package/modules/ventesBidAdapter.md +93 -0
  85. package/modules/vidoomyBidAdapter.js +51 -100
  86. package/modules/visxBidAdapter.js +20 -3
  87. package/modules/visxBidAdapter.md +4 -6
  88. package/modules/yahoosspBidAdapter.js +6 -6
  89. package/modules/yahoosspBidAdapter.md +1 -1
  90. package/modules/yieldlabBidAdapter.js +41 -10
  91. package/modules/yieldlabBidAdapter.md +91 -48
  92. package/modules/yieldoneBidAdapter.js +115 -11
  93. package/package.json +6 -1
  94. package/src/adapterManager.js +14 -8
  95. package/src/auction.js +14 -13
  96. package/src/targeting.js +2 -2
  97. package/src/utils.js +7 -0
  98. package/test/spec/integration/faker/googletag.js +6 -0
  99. package/test/spec/modules/adheseBidAdapter_spec.js +27 -1
  100. package/test/spec/modules/adnuntiusBidAdapter_spec.js +18 -0
  101. package/test/spec/modules/adomikAnalyticsAdapter_spec.js +3 -1
  102. package/test/spec/modules/adplusBidAdapter_spec.js +213 -0
  103. package/test/spec/modules/adyoulikeBidAdapter_spec.js +26 -0
  104. package/test/spec/modules/appnexusBidAdapter_spec.js +65 -2
  105. package/test/spec/modules/atsAnalyticsAdapter_spec.js +42 -9
  106. package/test/spec/modules/beachfrontBidAdapter_spec.js +65 -1
  107. package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
  108. package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
  109. package/test/spec/modules/codefuelBidAdapter_spec.js +1 -1
  110. package/test/spec/modules/datablocksBidAdapter_spec.js +3 -3
  111. package/test/spec/modules/dchain_spec.js +329 -0
  112. package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
  113. package/test/spec/modules/emx_digitalBidAdapter_spec.js +10 -0
  114. package/test/spec/modules/engageyaBidAdapter_spec.js +231 -95
  115. package/test/spec/modules/eplanningBidAdapter_spec.js +8 -8
  116. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +19 -0
  117. package/test/spec/modules/glimpseBidAdapter_spec.js +33 -0
  118. package/test/spec/modules/goldbachBidAdapter_spec.js +1359 -0
  119. package/test/spec/modules/gptPreAuction_spec.js +58 -4
  120. package/test/spec/modules/gumgumBidAdapter_spec.js +6 -0
  121. package/test/spec/modules/imRtdProvider_spec.js +25 -0
  122. package/test/spec/modules/intersectionRtdProvider_spec.js +141 -0
  123. package/test/spec/modules/invibesBidAdapter_spec.js +29 -4
  124. package/test/spec/modules/ipromBidAdapter_spec.js +195 -0
  125. package/test/spec/modules/ixBidAdapter_spec.js +288 -5
  126. package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
  127. package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
  128. package/test/spec/modules/konduitWrapper_spec.js +0 -1
  129. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +10 -7
  130. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +23 -4
  131. package/test/spec/modules/luponmediaBidAdapter_spec.js +412 -0
  132. package/test/spec/modules/merkleIdSystem_spec.js +18 -0
  133. package/test/spec/modules/missenaBidAdapter_spec.js +134 -0
  134. package/test/spec/modules/multibid_spec.js +31 -31
  135. package/test/spec/modules/nativoBidAdapter_spec.js +35 -18
  136. package/test/spec/modules/oguryBidAdapter_spec.js +13 -11
  137. package/test/spec/modules/openxBidAdapter_spec.js +5 -26
  138. package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
  139. package/test/spec/modules/otmBidAdapter_spec.js +67 -0
  140. package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
  141. package/test/spec/modules/prebidServerBidAdapter_spec.js +19 -2
  142. package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
  143. package/test/spec/modules/relaidoBidAdapter_spec.js +71 -63
  144. package/test/spec/modules/seedtagBidAdapter_spec.js +3 -0
  145. package/test/spec/modules/smaatoBidAdapter_spec.js +61 -0
  146. package/test/spec/modules/smartxBidAdapter_spec.js +9 -0
  147. package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
  148. package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
  149. package/test/spec/modules/sspBCBidAdapter_spec.js +33 -3
  150. package/test/spec/modules/tappxBidAdapter_spec.js +4 -0
  151. package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
  152. package/test/spec/modules/trustxBidAdapter_spec.js +45 -3
  153. package/test/spec/modules/userId_spec.js +51 -0
  154. package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
  155. package/test/spec/modules/vidoomyBidAdapter_spec.js +32 -13
  156. package/test/spec/modules/visxBidAdapter_spec.js +121 -5
  157. package/test/spec/modules/yieldlabBidAdapter_spec.js +81 -0
  158. package/test/spec/modules/yieldoneBidAdapter_spec.js +299 -53
  159. package/test/spec/unit/core/adapterManager_spec.js +26 -7
  160. package/test/spec/unit/core/targeting_spec.js +44 -0
  161. package/wdio.conf.js +1 -1
@@ -227,6 +227,7 @@ export const spec = {
227
227
  rv.ext[partner] = params;
228
228
  });
229
229
  }
230
+ rv.ext.gpid = deepAccess(bid, 'ortb2Imp.ext.data.pbadslot');
230
231
  return rv;
231
232
  });
232
233
  const gdprConsent = bidderRequest && bidderRequest.gdprConsent;
@@ -9,11 +9,13 @@ const BIDDER_URL = 'https://ssp.wp.pl/bidder/';
9
9
  const SYNC_URL = 'https://ssp.wp.pl/bidder/usersync';
10
10
  const NOTIFY_URL = 'https://ssp.wp.pl/bidder/notify';
11
11
  const TMAX = 450;
12
- const BIDDER_VERSION = '5.2';
12
+ const BIDDER_VERSION = '5.3';
13
13
  const W = window;
14
14
  const { navigator } = W;
15
15
  const oneCodeDetection = {};
16
+ const adUnitsCalled = {};
16
17
  const adSizesCalled = {};
18
+ const pageView = {};
17
19
  var consentApiVersion;
18
20
 
19
21
  /**
@@ -70,6 +72,7 @@ const cookieSupport = () => {
70
72
  };
71
73
 
72
74
  const applyClientHints = ortbRequest => {
75
+ const { location } = document;
73
76
  const { connection = {}, deviceMemory, userAgentData = {} } = navigator;
74
77
  const viewport = W.visualViewport || false;
75
78
  const segments = [];
@@ -85,6 +88,16 @@ const applyClientHints = ortbRequest => {
85
88
  'CH-isMobile': userAgentData.mobile,
86
89
  };
87
90
 
91
+ /**
92
+ Check / generate page view id
93
+ Should be generated dureing first call to applyClientHints(),
94
+ and re-generated if pathname has changed
95
+ */
96
+ if (!pageView.id || location.pathname !== pageView.path) {
97
+ pageView.path = location.pathname;
98
+ pageView.id = Math.floor(1E20 * Math.random());
99
+ }
100
+
88
101
  Object.keys(hints).forEach(key => {
89
102
  const hint = hints[key];
90
103
 
@@ -100,6 +113,14 @@ const applyClientHints = ortbRequest => {
100
113
  id: '12',
101
114
  name: 'NetInfo',
102
115
  segment: segments,
116
+ }, {
117
+ id: '7',
118
+ name: 'pvid',
119
+ segment: [
120
+ {
121
+ value: `${pageView.id}`
122
+ }
123
+ ]
103
124
  }];
104
125
 
105
126
  ortbRequest.user = Object.assign(ortbRequest.user, { data });
@@ -129,6 +150,7 @@ const setOnAny = (collection, key) => collection.reduce((prev, next) => prev ||
129
150
  */
130
151
  const sendNotification = payload => {
131
152
  ajax(NOTIFY_URL, null, JSON.stringify(payload), {
153
+ contentType: 'application/json',
132
154
  withCredentials: false,
133
155
  method: 'POST',
134
156
  crossOrigin: true
@@ -267,8 +289,14 @@ const mapImpression = slot => {
267
289
  send this info as ext.pbsize
268
290
  */
269
291
  const slotSize = slot.sizes.length ? slot.sizes.reduce((prev, next) => prev[0] * prev[1] <= next[0] * next[1] ? next : prev).join('x') : '1x1';
270
- adSizesCalled[slotSize] = adSizesCalled[slotSize] ? adSizesCalled[slotSize] += 1 : 1;
271
- ext.data = Object.assign({ pbsize: `${slotSize}_${adSizesCalled[slotSize]}` }, ext.data);
292
+
293
+ if (!adUnitsCalled[adUnitCode]) {
294
+ // this is a new adunit - assign & save pbsize
295
+ adSizesCalled[slotSize] = adSizesCalled[slotSize] ? adSizesCalled[slotSize] += 1 : 1;
296
+ adUnitsCalled[adUnitCode] = `${slotSize}_${adSizesCalled[slotSize]}`
297
+ }
298
+
299
+ ext.data = Object.assign({ pbsize: adUnitsCalled[adUnitCode] }, ext.data);
272
300
 
273
301
  const imp = {
274
302
  id: id && siteId ? id : 'bidid-' + bidId,
@@ -325,6 +353,9 @@ const parseNative = nativeData => {
325
353
  case 0:
326
354
  result.title = asset.title.text;
327
355
  break;
356
+ case 1:
357
+ result.cta = asset.data.value;
358
+ break;
328
359
  case 2:
329
360
  result.icon = {
330
361
  url: asset.img.url,
@@ -7,9 +7,10 @@ import { config } from '../src/config.js';
7
7
  import { Renderer } from '../src/Renderer.js';
8
8
 
9
9
  const BIDDER_CODE = 'tappx';
10
+ const GVLID_CODE = 628;
10
11
  const TTL = 360;
11
12
  const CUR = 'USD';
12
- const TAPPX_BIDDER_VERSION = '0.1.1004';
13
+ const TAPPX_BIDDER_VERSION = '0.1.1005';
13
14
  const TYPE_CNN = 'prebidjs';
14
15
  const LOG_PREFIX = '[TAPPX]: ';
15
16
  const VIDEO_SUPPORT = ['instream', 'outstream'];
@@ -42,6 +43,7 @@ var hostDomain;
42
43
 
43
44
  export const spec = {
44
45
  code: BIDDER_CODE,
46
+ gvlid: GVLID_CODE,
45
47
  supportedMediaTypes: [BANNER, VIDEO],
46
48
 
47
49
  /**
@@ -190,6 +190,8 @@ function buildRequestObject(bid) {
190
190
  const reqObj = {};
191
191
  let placementId = getValue(bid.params, 'placementId');
192
192
  let pageId = getValue(bid.params, 'pageId');
193
+ const impressionData = deepAccess(bid, 'ortb2Imp.ext.data');
194
+ const gpid = deepAccess(impressionData, 'pbadslot') || deepAccess(impressionData, 'adserver.adslot');
193
195
 
194
196
  reqObj.sizes = getSizes(bid);
195
197
  reqObj.bidId = getBidIdParameter('bidId', bid);
@@ -199,6 +201,7 @@ function buildRequestObject(bid) {
199
201
  reqObj.adUnitCode = getBidIdParameter('adUnitCode', bid);
200
202
  reqObj.auctionId = getBidIdParameter('auctionId', bid);
201
203
  reqObj.transactionId = getBidIdParameter('transactionId', bid);
204
+ if (gpid) { reqObj.gpid = gpid; }
202
205
  return reqObj;
203
206
  }
204
207
 
@@ -76,7 +76,7 @@ export const spec = {
76
76
  if (!userIdAsEids) {
77
77
  userIdAsEids = bid.userIdAsEids;
78
78
  }
79
- const {params: {uid, keywords}, mediaTypes, bidId, adUnitCode, rtd} = bid;
79
+ const {params: {uid, keywords}, mediaTypes, bidId, adUnitCode, rtd, ortb2Imp} = bid;
80
80
  bidsMap[bidId] = bid;
81
81
  const bidFloor = _getFloor(mediaTypes || {}, bid);
82
82
  if (rtd) {
@@ -102,6 +102,15 @@ export const spec = {
102
102
  }
103
103
  };
104
104
 
105
+ if (ortb2Imp && ortb2Imp.ext && ortb2Imp.ext.data) {
106
+ impObj.ext.data = ortb2Imp.ext.data;
107
+ if (impObj.ext.data.adserver && impObj.ext.data.adserver.adslot) {
108
+ impObj.ext.gpid = impObj.ext.data.adserver.adslot.toString();
109
+ } else {
110
+ impObj.ext.gpid = ortb2Imp.ext.data.pbadslot && ortb2Imp.ext.data.pbadslot.toString();
111
+ }
112
+ }
113
+
105
114
  if (!isEmpty(keywords)) {
106
115
  if (!pageKeywords) {
107
116
  pageKeywords = keywords;
@@ -429,9 +438,10 @@ function addSegments(name, segName, segments, data, bidConfigName) {
429
438
  if (segments && segments.length) {
430
439
  data.push({
431
440
  name: name,
432
- segment: segments.map((seg) => {
433
- return {name: segName, value: seg};
434
- })
441
+ segment: segments
442
+ .map((seg) => seg && (seg.id || seg))
443
+ .filter((seg) => seg && (typeof seg === 'string' || typeof seg === 'number'))
444
+ .map((seg) => ({ name: segName, value: seg.toString() }))
435
445
  });
436
446
  } else if (bidConfigName) {
437
447
  const configData = config.getConfig('ortb2.user.data');
@@ -445,9 +455,10 @@ function addSegments(name, segName, segments, data, bidConfigName) {
445
455
  if (segData && segData.length) {
446
456
  data.push({
447
457
  name: name,
448
- segment: segData.map((seg) => {
449
- return {name: segName, value: seg};
450
- })
458
+ segment: segData
459
+ .map((seg) => seg && (seg.id || seg))
460
+ .filter((seg) => seg && (typeof seg === 'string' || typeof seg === 'number'))
461
+ .map((seg) => ({ name: segName, value: seg.toString() }))
451
462
  });
452
463
  }
453
464
  }
@@ -98,9 +98,16 @@ export const spec = {
98
98
  'commons': commons
99
99
  };
100
100
  const referer = bidderRequest.refererInfo.referer;
101
+ const canonicalUrl = getCanonicalUrl();
102
+ if (referer) {
103
+ commons.referrer = referer;
104
+ }
105
+ if (canonicalUrl) {
106
+ commons.canonicalUrl = canonicalUrl;
107
+ }
101
108
  const hostname = parseUrl(referer).hostname;
102
109
  let domain = extractDomainFromHost(hostname);
103
- const pageUrl = getCanonicalUrl() || referer;
110
+ const pageUrl = canonicalUrl || referer;
104
111
 
105
112
  const pubid = validBidRequests[0].params.publisherId;
106
113
  let reqUrl = `${URL}?pid=${pubid}&domain=${domain}`;
@@ -141,7 +141,7 @@ import { createEidsArray, buildEidPermissions } from './eids.js';
141
141
  import { getCoreStorageManager } from '../../src/storageManager.js';
142
142
  import {
143
143
  getPrebidInternal, isPlainObject, logError, isArray, cyrb53Hash, deepAccess, timestamp, delayExecution, logInfo, isFn,
144
- logWarn, isEmptyStr, isNumber
144
+ logWarn, isEmptyStr, isNumber, isGptPubadsDefined
145
145
  } from '../../src/utils.js';
146
146
  import includes from 'core-js-pure/features/array/includes.js';
147
147
 
@@ -184,6 +184,9 @@ export let syncDelay;
184
184
  /** @type {(number|undefined)} */
185
185
  export let auctionDelay;
186
186
 
187
+ /** @type {(string|undefined)} */
188
+ let ppidSource;
189
+
187
190
  /** @param {Submodule[]} submodules */
188
191
  export function setSubmoduleRegistry(submodules) {
189
192
  submoduleRegistry = submodules;
@@ -557,6 +560,26 @@ export function requestBidsHook(fn, reqBidsConfigObj) {
557
560
  initializeSubmodulesAndExecuteCallbacks(function () {
558
561
  // pass available user id data to bid adapters
559
562
  addIdDataToAdUnitBids(reqBidsConfigObj.adUnits || getGlobal().adUnits, initializedSubmodules);
563
+
564
+ // userSync.ppid should be one of the 'source' values in getUserIdsAsEids() eg pubcid.org or id5-sync.com
565
+ const matchingUserId = ppidSource && (getUserIdsAsEids() || []).find(userID => userID.source === ppidSource);
566
+ if (matchingUserId && typeof deepAccess(matchingUserId, 'uids.0.id') === 'string') {
567
+ const ppidValue = matchingUserId.uids[0].id.replace(/[\W_]/g, '');
568
+ if (ppidValue.length >= 32 && ppidValue.length <= 150) {
569
+ if (isGptPubadsDefined()) {
570
+ window.googletag.pubads().setPublisherProvidedId(ppidValue);
571
+ } else {
572
+ window.googletag = window.googletag || {};
573
+ window.googletag.cmd = window.googletag.cmd || [];
574
+ window.googletag.cmd.push(function() {
575
+ window.googletag.pubads().setPublisherProvidedId(ppidValue);
576
+ });
577
+ }
578
+ } else {
579
+ logWarn(`User ID - Googletag Publisher Provided ID for ${ppidSource} is not between 32 and 150 characters - ${ppidValue}`);
580
+ }
581
+ }
582
+
560
583
  // calling fn allows prebid to continue processing
561
584
  fn.call(this, reqBidsConfigObj);
562
585
  });
@@ -817,6 +840,7 @@ export function attachIdSystem(submodule) {
817
840
  * @param {{getConfig:function}} config
818
841
  */
819
842
  export function init(config) {
843
+ ppidSource = undefined;
820
844
  submodules = [];
821
845
  configRegistry = [];
822
846
  addedUserIdHook = false;
@@ -839,9 +863,10 @@ export function init(config) {
839
863
  }
840
864
 
841
865
  // listen for config userSyncs to be set
842
- config.getConfig(conf => {
866
+ config.getConfig('userSync', conf => {
843
867
  // Note: support for 'usersync' was dropped as part of Prebid.js 4.0
844
868
  const userSync = conf.userSync;
869
+ ppidSource = userSync.ppid;
845
870
  if (userSync && userSync.userIds) {
846
871
  configRegistry = userSync.userIds;
847
872
  syncDelay = isNumber(userSync.syncDelay) ? userSync.syncDelay : DEFAULT_SYNC_DELAY;
@@ -0,0 +1,71 @@
1
+ ---
2
+ layout: bidder
3
+ title: ventes
4
+ description: Prebid ventes Bidder Adapter
5
+ pbjs: false
6
+ biddercode: ventes
7
+ gdpr_supported: false
8
+ usp_supported: false
9
+ media_types: banner
10
+ coppa_supported: false
11
+ schain_supported: false
12
+ dchain_supported: false
13
+ prebid_member: false
14
+ ---
15
+
16
+ ### BidParams
17
+ {: .table .table-bordered .table-striped }
18
+ | Name | Scope | Description | Example | Type |
19
+ |-----------------|----------|-----------------------------------------------------------|----------------------------------------------|---------------|
20
+ | `placementId` | required | Placement ID from Ventes Avenues | `'VA-062-0013-0183'` | `string` |
21
+ | `publisherId` | required | Publisher ID from Ventes Avenues | `'VA-062'` | `string` |
22
+ | `user` | optional | Object that specifies information about an external user. | `user: { age: 25, gender: 0, dnt: true}` | `object` |
23
+ | `app` | optional | Object containing mobile app parameters. | `app : { id: 'app-id'}` | `object` |
24
+
25
+ #### User Object
26
+
27
+ {: .table .table-bordered .table-striped }
28
+ | Name | Description | Example | Type |
29
+ |-------------------|-------------------------------------------------------------------------------------------|-----------------------|-----------------------|
30
+ | `age` | The age of the user. | `35` | `integer` |
31
+ | `externalUid` | Specifies a string that corresponds to an external user ID for this user. | `'1234567890abcdefg'` | `string` |
32
+ | `segments` | Specifies the segments to which the user belongs. | `[1, 2]` | `Array<integer>` |
33
+ | `gender` | Specifies the gender of the user. Allowed values: Unknown: `0`; Male: `1`; Female: `2` | `1` | `integer` |
34
+ | `dnt` | Do not track flag. Indicates if tracking cookies should be disabled for this auction | `true` | `boolean` |
35
+ | `language` | Two-letter ANSI code for this user's language. | `EN` | `string` |
36
+
37
+
38
+ ### Ad Unit Setup for Banner
39
+ ```javascript
40
+ var adUnits = [
41
+ {
42
+ code: 'test-hb-ad-11111-1',
43
+ mediaTypes: {
44
+ banner: {
45
+ sizes: [
46
+ [300, 250]
47
+ ]
48
+ }
49
+ },
50
+ bids: [{
51
+ bidder: 'ventes',
52
+ params: {
53
+ placementId: 'VA-062-0013-0183',
54
+ publisherId: '5cebea3c9eea646c7b623d5e',
55
+ IABCategories: "['IAB1', 'IAB5']",
56
+ device:{
57
+ ip: '123.145.167.189',
58
+ ifa:"AEBE52E7-03EE-455A-B3C4-E57283966239",
59
+ },
60
+ app: {
61
+ id: "agltb3B1Yi1pbmNyDAsSA0FwcBiJkfIUDA",
62
+ name: "Yahoo Weather",
63
+ bundle: 'com.kiloo.subwaysurf',
64
+ storeurl: 'https://play.google.com/store/apps/details?id=com.kiloo.subwaysurf&hl=en',
65
+ domain: 'somoaudience.com',
66
+ }
67
+ }
68
+ }]
69
+ }
70
+ ]
71
+ ```