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.
Files changed (228) hide show
  1. package/dist/33acrossAnalyticsAdapter.js +1 -1
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.js +1 -1
  4. package/dist/adagioAnalyticsAdapter.js +1 -1
  5. package/dist/adagioBidAdapter.js +1 -1
  6. package/dist/adbookpspBidAdapter.js +1 -1
  7. package/dist/adgenerationBidAdapter.js +1 -1
  8. package/dist/adnuntiusBidAdapter.js +1 -1
  9. package/dist/adqueryBidAdapter.js +1 -1
  10. package/dist/adrelevantisBidAdapter.js +1 -1
  11. package/dist/adstirBidAdapter.js +1 -1
  12. package/dist/adtrgtmeBidAdapter.js +1 -1
  13. package/dist/adxcgBidAdapter.js +1 -1
  14. package/dist/adyoulikeBidAdapter.js +1 -1
  15. package/dist/agmaAnalyticsAdapter.js +1 -1
  16. package/dist/ajaBidAdapter.js +1 -1
  17. package/dist/amxBidAdapter.js +1 -1
  18. package/dist/amxIdSystem.js +1 -1
  19. package/dist/appierAnalyticsAdapter.js +1 -1
  20. package/dist/appnexusBidAdapter.js +1 -1
  21. package/dist/asoBidAdapter.js +1 -1
  22. package/dist/axonixBidAdapter.js +1 -1
  23. package/dist/bidglassBidAdapter.js +1 -1
  24. package/dist/big-richmediaBidAdapter.js +1 -1
  25. package/dist/bizzclickBidAdapter.js +1 -1
  26. package/dist/bridBidAdapter.js +1 -1
  27. package/dist/bridgewellBidAdapter.js +1 -1
  28. package/dist/brightMountainMediaBidAdapter.js +1 -1
  29. package/dist/browsiRtdProvider.js +1 -1
  30. package/dist/carodaBidAdapter.js +1 -1
  31. package/dist/chtnwBidAdapter.js +1 -1
  32. package/dist/concertBidAdapter.js +1 -1
  33. package/dist/connectadBidAdapter.js +1 -1
  34. package/dist/consumableBidAdapter.js +1 -1
  35. package/dist/conversantAnalyticsAdapter.js +1 -1
  36. package/dist/conversantBidAdapter.js +1 -1
  37. package/dist/craftBidAdapter.js +1 -1
  38. package/dist/criteoBidAdapter.js +1 -1
  39. package/dist/cwireBidAdapter.js +1 -1
  40. package/dist/deepintentBidAdapter.js +1 -1
  41. package/dist/dependencies.json +3 -0
  42. package/dist/dspxBidAdapter.js +1 -1
  43. package/dist/dxkultureBidAdapter.js +1 -1
  44. package/dist/eplanningBidAdapter.js +1 -1
  45. package/dist/euidIdSystem.js +1 -1
  46. package/dist/feedadBidAdapter.js +1 -1
  47. package/dist/finativeBidAdapter.js +1 -1
  48. package/dist/flippBidAdapter.js +1 -1
  49. package/dist/freewheel-sspBidAdapter.js +1 -1
  50. package/dist/geoedgeRtdProvider.js +1 -1
  51. package/dist/gmosspBidAdapter.js +1 -1
  52. package/dist/goldbachBidAdapter.js +1 -1
  53. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  54. package/dist/greenbidsRtdProvider.js +1 -1
  55. package/dist/gridBidAdapter.js +1 -1
  56. package/dist/growthCodeRtdProvider.js +1 -1
  57. package/dist/gumgumBidAdapter.js +1 -1
  58. package/dist/h12mediaBidAdapter.js +1 -1
  59. package/dist/hypelabBidAdapter.js +1 -1
  60. package/dist/id5IdSystem.js +1 -1
  61. package/dist/identityLinkIdSystem.js +1 -1
  62. package/dist/illuminBidAdapter.js +1 -1
  63. package/dist/imdsBidAdapter.js +1 -1
  64. package/dist/improvedigitalBidAdapter.js +1 -1
  65. package/dist/insticatorBidAdapter.js +1 -1
  66. package/dist/invibesBidAdapter.js +1 -1
  67. package/dist/ixBidAdapter.js +1 -1
  68. package/dist/jixieBidAdapter.js +1 -1
  69. package/dist/justpremiumBidAdapter.js +1 -1
  70. package/dist/kargoBidAdapter.js +1 -1
  71. package/dist/konduitAnalyticsAdapter.js +1 -1
  72. package/dist/kueezBidAdapter.js +1 -1
  73. package/dist/kueezRtbBidAdapter.js +1 -1
  74. package/dist/lassoBidAdapter.js +1 -1
  75. package/dist/lifestreetBidAdapter.js +1 -1
  76. package/dist/liveIntentIdSystem.js +1 -1
  77. package/dist/logicadBidAdapter.js +1 -1
  78. package/dist/loglyliftBidAdapter.js +1 -1
  79. package/dist/magniteAnalyticsAdapter.js +1 -1
  80. package/dist/malltvAnalyticsAdapter.js +1 -1
  81. package/dist/marsmediaBidAdapter.js +1 -1
  82. package/dist/mediafuseBidAdapter.js +1 -1
  83. package/dist/mediagoBidAdapter.js +1 -1
  84. package/dist/mediasquareBidAdapter.js +1 -1
  85. package/dist/mgidBidAdapter.js +1 -1
  86. package/dist/mgidXBidAdapter.js +1 -1
  87. package/dist/minutemediaBidAdapter.js +1 -1
  88. package/dist/minutemediaplusBidAdapter.js +1 -1
  89. package/dist/nextMillenniumBidAdapter.js +1 -1
  90. package/dist/nexx360BidAdapter.js +1 -1
  91. package/dist/not-for-prod/prebid.js +156 -156
  92. package/dist/oguryBidAdapter.js +1 -1
  93. package/dist/onetagBidAdapter.js +1 -1
  94. package/dist/ooloAnalyticsAdapter.js +1 -1
  95. package/dist/openxBidAdapter.js +1 -1
  96. package/dist/optidigitalBidAdapter.js +1 -1
  97. package/dist/outbrainBidAdapter.js +1 -1
  98. package/dist/parrableIdSystem.js +1 -1
  99. package/dist/pgamsspBidAdapter.js +1 -1
  100. package/dist/pixfutureBidAdapter.js +1 -1
  101. package/dist/prebid-core.js +2 -2
  102. package/dist/publinkIdSystem.js +1 -1
  103. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  104. package/dist/pubmaticBidAdapter.js +1 -1
  105. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  106. package/dist/pxyzBidAdapter.js +1 -1
  107. package/dist/quantcastBidAdapter.js +1 -1
  108. package/dist/readpeakBidAdapter.js +1 -1
  109. package/dist/relaidoBidAdapter.js +1 -1
  110. package/dist/retailspotBidAdapter.js +1 -1
  111. package/dist/rhythmoneBidAdapter.js +1 -1
  112. package/dist/riseBidAdapter.js +1 -1
  113. package/dist/rtdModule.js +1 -1
  114. package/dist/rubiconBidAdapter.js +1 -1
  115. package/dist/seedingAllianceBidAdapter.js +1 -1
  116. package/dist/seedtagBidAdapter.js +1 -1
  117. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  118. package/dist/sharethroughBidAdapter.js +1 -1
  119. package/dist/shinezBidAdapter.js +1 -1
  120. package/dist/shinezRtbBidAdapter.js +1 -1
  121. package/dist/smaatoBidAdapter.js +1 -1
  122. package/dist/smartadserverBidAdapter.js +1 -1
  123. package/dist/smartxBidAdapter.js +1 -1
  124. package/dist/smilewantedBidAdapter.js +1 -1
  125. package/dist/sonobiBidAdapter.js +1 -1
  126. package/dist/sovrnAnalyticsAdapter.js +1 -1
  127. package/dist/sovrnBidAdapter.js +1 -1
  128. package/dist/sparteoBidAdapter.js +1 -1
  129. package/dist/sspBCBidAdapter.js +1 -1
  130. package/dist/stvBidAdapter.js +1 -1
  131. package/dist/sublimeBidAdapter.js +1 -1
  132. package/dist/taboolaBidAdapter.js +1 -1
  133. package/dist/targetVideoBidAdapter.js +1 -1
  134. package/dist/teadsBidAdapter.js +1 -1
  135. package/dist/theAdxBidAdapter.js +1 -1
  136. package/dist/trionBidAdapter.js +1 -1
  137. package/dist/tripleliftBidAdapter.js +1 -1
  138. package/dist/ttdBidAdapter.js +1 -1
  139. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  140. package/dist/uid2IdSystem.js +1 -1
  141. package/dist/underdogmediaBidAdapter.js +1 -1
  142. package/dist/undertoneBidAdapter.js +1 -1
  143. package/dist/unrulyBidAdapter.js +1 -1
  144. package/dist/userId.js +1 -1
  145. package/dist/viantOrtbBidAdapter.js +1 -1
  146. package/dist/vidazooBidAdapter.js +1 -1
  147. package/dist/videobyteBidAdapter.js +1 -1
  148. package/dist/visxBidAdapter.js +1 -1
  149. package/dist/voxBidAdapter.js +1 -1
  150. package/dist/vuukleBidAdapter.js +1 -1
  151. package/dist/widespaceBidAdapter.js +1 -1
  152. package/dist/winrBidAdapter.js +1 -1
  153. package/dist/yahoosspBidAdapter.js +1 -1
  154. package/dist/yieldmoBidAdapter.js +1 -1
  155. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  156. package/modules/adagioAnalyticsAdapter.js +52 -6
  157. package/modules/adagioBidAdapter.js +25 -16
  158. package/modules/adnuntiusBidAdapter.js +25 -21
  159. package/modules/bizzclickBidAdapter.js +55 -300
  160. package/modules/bizzclickBidAdapter.md +94 -89
  161. package/modules/browsiRtdProvider.js +2 -2
  162. package/modules/criteoBidAdapter.js +1 -0
  163. package/modules/deepintentBidAdapter.js +2 -0
  164. package/modules/flippBidAdapter.js +1 -1
  165. package/modules/geoedgeRtdProvider.js +4 -2
  166. package/modules/growthCodeRtdProvider.js +2 -2
  167. package/modules/gumgumBidAdapter.js +3 -3
  168. package/modules/identityLinkIdSystem.js +1 -2
  169. package/modules/invibesBidAdapter.js +50 -6
  170. package/modules/liveIntentIdSystem.js +17 -1
  171. package/modules/mediagoBidAdapter.js +106 -34
  172. package/modules/mgidXBidAdapter.js +6 -1
  173. package/modules/minutemediaBidAdapter.js +9 -7
  174. package/modules/minutemediaBidAdapter.md +1 -0
  175. package/modules/nextMillenniumBidAdapter.js +170 -113
  176. package/modules/pgamsspBidAdapter.js +18 -1
  177. package/modules/pubmaticAnalyticsAdapter.js +30 -9
  178. package/modules/pubmaticBidAdapter.js +3 -1
  179. package/modules/riseBidAdapter.js +11 -8
  180. package/modules/riseBidAdapter.md +1 -0
  181. package/modules/rtdModule/index.js +2 -1
  182. package/modules/sovrnBidAdapter.js +5 -0
  183. package/modules/sparteoBidAdapter.js +10 -5
  184. package/modules/taboolaBidAdapter.js +8 -0
  185. package/modules/teadsBidAdapter.js +7 -0
  186. package/modules/theAdxBidAdapter.js +10 -2
  187. package/modules/theAdxBidAdapter.md +10 -9
  188. package/modules/unrulyBidAdapter.js +8 -1
  189. package/modules/userId/eids.js +2 -2
  190. package/modules/viantOrtbBidAdapter.js +1 -1
  191. package/modules/visxBidAdapter.js +23 -0
  192. package/modules/voxBidAdapter.js +2 -0
  193. package/package.json +1 -1
  194. package/src/auction.js +1 -1
  195. package/src/constants.json +5 -2
  196. package/src/events.js +1 -1
  197. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +83 -26
  198. package/test/spec/modules/adagioBidAdapter_spec.js +0 -11
  199. package/test/spec/modules/adnuntiusBidAdapter_spec.js +1 -1
  200. package/test/spec/modules/bizzclickBidAdapter_spec.js +229 -340
  201. package/test/spec/modules/browsiRtdProvider_spec.js +0 -6
  202. package/test/spec/modules/criteoBidAdapter_spec.js +24 -0
  203. package/test/spec/modules/eids_spec.js +35 -2
  204. package/test/spec/modules/geoedgeRtdProvider_spec.js +10 -0
  205. package/test/spec/modules/gumgumBidAdapter_spec.js +8 -0
  206. package/test/spec/modules/identityLinkIdSystem_spec.js +0 -18
  207. package/test/spec/modules/invibesBidAdapter_spec.js +99 -0
  208. package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +5 -0
  209. package/test/spec/modules/liveIntentIdSystem_spec.js +5 -0
  210. package/test/spec/modules/mediagoBidAdapter_spec.js +107 -23
  211. package/test/spec/modules/mgidXBidAdapter_spec.js +9 -4
  212. package/test/spec/modules/minutemediaBidAdapter_spec.js +10 -0
  213. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +503 -80
  214. package/test/spec/modules/pgamsspBidAdapter_spec.js +1 -0
  215. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +51 -0
  216. package/test/spec/modules/pubmaticBidAdapter_spec.js +8 -0
  217. package/test/spec/modules/riseBidAdapter_spec.js +11 -1
  218. package/test/spec/modules/sovrnBidAdapter_spec.js +35 -0
  219. package/test/spec/modules/sparteoBidAdapter_spec.js +8 -2
  220. package/test/spec/modules/taboolaBidAdapter_spec.js +45 -1
  221. package/test/spec/modules/teadsBidAdapter_spec.js +58 -0
  222. package/test/spec/modules/theAdxBidAdapter_spec.js +72 -0
  223. package/test/spec/modules/unrulyBidAdapter_spec.js +7 -4
  224. package/test/spec/modules/userId_spec.js +19 -1
  225. package/test/spec/modules/viantOrtbBidAdapter_spec.js +1 -1
  226. package/test/spec/modules/visxBidAdapter_spec.js +39 -1
  227. package/test/spec/unit/core/events_spec.js +17 -2
  228. package/test/spec/unit/pbjs_api_spec.js +7 -0
@@ -15,6 +15,7 @@ export const USER_SYNC_IMG_URL = 'https://trc.taboola.com/sg/prebidJS/1/cm';
15
15
  const USER_ID = 'user-id';
16
16
  const STORAGE_KEY = `taboola global:${USER_ID}`;
17
17
  const COOKIE_KEY = 'trc_cookie_storage';
18
+ export const EVENT_ENDPOINT = 'https://beacon.bidder.taboola.com';
18
19
 
19
20
  /**
20
21
  * extract User Id by that order:
@@ -190,6 +191,13 @@ export const spec = {
190
191
  }
191
192
  return syncs;
192
193
  },
194
+ onTimeout: (timeoutData) => {
195
+ ajax(EVENT_ENDPOINT + '/timeout', null, JSON.stringify(timeoutData), {method: 'POST'});
196
+ },
197
+
198
+ onBidderError: ({ error, bidderRequest }) => {
199
+ ajax(EVENT_ENDPOINT + '/bidError', null, JSON.stringify(error, bidderRequest), {method: 'POST'});
200
+ },
193
201
  };
194
202
 
195
203
  function getSiteProperties({publisherId}, refererInfo, ortb2) {
@@ -45,6 +45,7 @@ export const spec = {
45
45
  */
46
46
  buildRequests: function(validBidRequests, bidderRequest) {
47
47
  const bids = validBidRequests.map(buildRequestObject);
48
+ const topWindow = window.top;
48
49
 
49
50
  const payload = {
50
51
  referrer: getReferrerInfo(bidderRequest),
@@ -55,6 +56,12 @@ export const spec = {
55
56
  timeToFirstByte: getTimeToFirstByte(window),
56
57
  data: bids,
57
58
  deviceWidth: screen.width,
59
+ screenOrientation: screen.orientation?.type,
60
+ historyLength: topWindow.history?.length,
61
+ viewportHeight: topWindow.visualViewport?.height,
62
+ viewportWidth: topWindow.visualViewport?.width,
63
+ hardwareConcurrency: topWindow.navigator?.hardwareConcurrency,
64
+ deviceMemory: topWindow.navigator?.deviceMemory,
58
65
  hb_version: '$prebid.version$',
59
66
  ...getSharedViewerIdParameters(validBidRequests),
60
67
  ...getFirstPartyTeadsIdParameter(validBidRequests)
@@ -159,7 +159,6 @@ export const spec = {
159
159
  withCredentials: true,
160
160
  },
161
161
  bidder: 'theadx',
162
- // TODO: is 'page' the right value here?
163
162
  referrer: encodeURIComponent(bidderRequest.refererInfo.page || ''),
164
163
  data: generatePayload(bidRequest, bidderRequest),
165
164
  mediaTypes: bidRequest['mediaTypes'],
@@ -261,6 +260,7 @@ export const spec = {
261
260
  ad: creative,
262
261
  ttl: ttl || 3000,
263
262
  creativeId: bid.crid,
263
+ dealId: bid.dealid || null,
264
264
  netRevenue: true,
265
265
  currency: responseBody.cur,
266
266
  mediaType: mediaType,
@@ -466,11 +466,19 @@ let generateImpBody = (bidRequest, bidderRequest) => {
466
466
  } else if (mediaTypes && mediaTypes.native) {
467
467
  native = generateNativeComponent(bidRequest, bidderRequest);
468
468
  }
469
-
470
469
  const result = {
471
470
  id: bidRequest.index,
472
471
  tagid: bidRequest.params.tagId + '',
473
472
  };
473
+
474
+ // deals support
475
+ if (bidRequest.params.deals && Array.isArray(bidRequest.params.deals) && bidRequest.params.deals.length > 0) {
476
+ result.pmp = {
477
+ deals: bidRequest.params.deals,
478
+ private_auction: 0,
479
+ };
480
+ }
481
+
474
482
  if (banner) {
475
483
  result['banner'] = banner;
476
484
  }
@@ -26,9 +26,9 @@ Module that connects to TheAdx demand sources
26
26
  {
27
27
  bidder: "theadx",
28
28
  params: {
29
- pid: 1000, // publisher id
30
- wid: 2000, //website id
31
- tagId: 5000, //zone id
29
+ pid: 1, // publisher id
30
+ wid: 7, //website id
31
+ tagId: 19, //zone id
32
32
  }
33
33
  }
34
34
  ]
@@ -43,9 +43,10 @@ Module that connects to TheAdx demand sources
43
43
  {
44
44
  bidder: "theadx",
45
45
  params: {
46
- pid: 1000, // publisher id
47
- wid: 2000, //website id
48
- tagId: 5000, //zone id
46
+ pid: 1, // publisher id
47
+ wid: 7, //website id
48
+ tagId: 18, //zone id
49
+ deals:[{"id":"theadx:137"}] //optional
49
50
  }
50
51
  }
51
52
  ]
@@ -80,9 +81,9 @@ Module that connects to TheAdx demand sources
80
81
  {
81
82
  bidder: "theadx",
82
83
  params: {
83
- pid: 1000, // publisher id
84
- wid: 2000, //website id
85
- tagId: 5000, //zone id
84
+ pid: 1, // publisher id
85
+ wid: 7, //website id
86
+ tagId: 20, //zone id
86
87
  }
87
88
  }
88
89
  ]
@@ -80,7 +80,14 @@ const getRequests = (conf, validBidRequests, bidderRequest) => {
80
80
 
81
81
  Object.keys(requestBySiteId).forEach((key) => {
82
82
  let data = {
83
- bidderRequest: Object.assign({}, {bids: requestBySiteId[key], invalidBidsCount, ...bidderRequestData})
83
+ bidderRequest: Object.assign({},
84
+ {
85
+ bids: requestBySiteId[key],
86
+ invalidBidsCount,
87
+ prebidVersion: '$prebid.version$',
88
+ ...bidderRequestData
89
+ }
90
+ )
84
91
  };
85
92
 
86
93
  request.push(Object.assign({}, {data, ...conf}));
@@ -1,4 +1,4 @@
1
- import {deepAccess, isFn, isPlainObject, isStr} from '../../src/utils.js';
1
+ import {deepAccess, deepClone, isFn, isPlainObject, isStr} from '../../src/utils.js';
2
2
 
3
3
  export const EID_CONFIG = new Map();
4
4
 
@@ -45,7 +45,7 @@ export function createEidsArray(bidRequestUserId) {
45
45
 
46
46
  Object.entries(bidRequestUserId).forEach(([name, values]) => {
47
47
  values = Array.isArray(values) ? values : [values];
48
- const eids = name === 'pubProvidedId' ? values : values.map(value => createEidObject(value, name));
48
+ const eids = name === 'pubProvidedId' ? deepClone(values) : values.map(value => createEidObject(value, name));
49
49
  eids.filter(eid => eid != null).forEach(collect);
50
50
  })
51
51
  return Object.values(allEids);
@@ -5,7 +5,7 @@ import {ortbConverter} from '../libraries/ortbConverter/converter.js'
5
5
  import {deepAccess, getBidIdParameter, logError} from '../src/utils.js';
6
6
 
7
7
  const BIDDER_CODE = 'viant';
8
- const ENDPOINT = 'https://bidders-us-east-1.adelphic.net/d/rtb/v25/prebid/bidder_test'
8
+ const ENDPOINT = 'https://bidders-us-east-1.adelphic.net/d/rtb/v25/prebid/bidder'
9
9
 
10
10
  const DEFAULT_BID_TTL = 300;
11
11
  const DEFAULT_CURRENCY = 'USD';
@@ -15,6 +15,7 @@ const TIME_TO_LIVE = 360;
15
15
  const DEFAULT_CUR = 'EUR';
16
16
  const ADAPTER_SYNC_PATH = '/push_sync';
17
17
  const TRACK_TIMEOUT_PATH = '/track/bid_timeout';
18
+ const RUNTIME_STATUS_RESPONSE_TIME = 999000;
18
19
  const LOG_ERROR_MESS = {
19
20
  noAuid: 'Bid from response has no auid parameter - ',
20
21
  noAdm: 'Bid from response has no adm parameter - ',
@@ -33,6 +34,7 @@ const LOG_ERROR_MESS = {
33
34
  };
34
35
  const currencyWhiteList = ['EUR', 'USD', 'GBP', 'PLN'];
35
36
  export const storage = getStorageManager({bidderCode: BIDDER_CODE});
37
+ const _bidResponseTimeLogged = [];
36
38
  export const spec = {
37
39
  code: BIDDER_CODE,
38
40
  gvlid: GVLID,
@@ -208,6 +210,12 @@ export const spec = {
208
210
  if (bid.ext && bid.ext.events && bid.ext.events.win) {
209
211
  triggerPixel(bid.ext.events.win);
210
212
  }
213
+ // Call 'track/runtime' with the corresponding bid.requestId - only once per auction
214
+ if (bid.ext && bid.ext.events && bid.ext.events.runtime && !_bidResponseTimeLogged.includes(bid.auctionId)) {
215
+ _bidResponseTimeLogged.push(bid.auctionId);
216
+ const _roundedTime = _roundResponseTime(bid.timeToRespond, 50);
217
+ triggerPixel(bid.ext.events.runtime.replace('{STATUS_CODE}', RUNTIME_STATUS_RESPONSE_TIME + _roundedTime));
218
+ }
211
219
  },
212
220
  onTimeout: function(timeoutData) {
213
221
  // Call '/track/bid_timeout' with timeout data
@@ -321,6 +329,10 @@ function _addBidResponse(serverBid, bidsMap, currency, bidResponses) {
321
329
 
322
330
  if (serverBid.ext && serverBid.ext.prebid) {
323
331
  bidResponse.ext = serverBid.ext.prebid;
332
+ if (serverBid.ext.visx && serverBid.ext.visx.events) {
333
+ const prebidExtEvents = bidResponse.ext.events || {};
334
+ bidResponse.ext.events = Object.assign(prebidExtEvents, serverBid.ext.visx.events);
335
+ }
324
336
  }
325
337
 
326
338
  const visxTargeting = deepAccess(serverBid, 'ext.prebid.targeting');
@@ -434,4 +446,15 @@ function _getUserId() {
434
446
  return null;
435
447
  }
436
448
 
449
+ function _roundResponseTime(time, timeRange) {
450
+ if (time <= 0) {
451
+ return 0; // Special code for scriptLoadTime of 0 ms or less
452
+ } else if (time > 5000) {
453
+ return 100; // Constant code for scriptLoadTime greater than 5000 ms
454
+ } else {
455
+ const roundedValue = Math.floor((time - 1) / timeRange) + 1;
456
+ return roundedValue;
457
+ }
458
+ }
459
+
437
460
  registerBidder(spec);
@@ -12,6 +12,7 @@ const BIDDER_CODE = 'vox';
12
12
  const SSP_ENDPOINT = 'https://ssp.hybrid.ai/auction/prebid';
13
13
  const VIDEO_RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js';
14
14
  const TTL = 60;
15
+ const GVLID = 206;
15
16
 
16
17
  function buildBidRequests(validBidRequests) {
17
18
  return _map(validBidRequests, function(bid) {
@@ -183,6 +184,7 @@ function wrapBanner(bid, bidData) {
183
184
 
184
185
  export const spec = {
185
186
  code: BIDDER_CODE,
187
+ gvlid: GVLID,
186
188
  supportedMediaTypes: [BANNER, VIDEO],
187
189
 
188
190
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prebid.js",
3
- "version": "8.26.0",
3
+ "version": "8.28.0",
4
4
  "description": "Header Bidding Management Library",
5
5
  "main": "src/prebid.js",
6
6
  "scripts": {
package/src/auction.js CHANGED
@@ -455,7 +455,7 @@ export function auctionCallbacks(auctionDone, auctionInstance, {index = auctionM
455
455
  function acceptBidResponse(adUnitCode, bid) {
456
456
  handleBidResponse(adUnitCode, bid, (done) => {
457
457
  let bidResponse = getPreparedBidForAuction(bid);
458
-
458
+ events.emit(CONSTANTS.EVENTS.BID_ACCEPTED, bidResponse);
459
459
  if (FEATURES.VIDEO && bidResponse.mediaType === VIDEO) {
460
460
  tryAddVideoBid(auctionInstance, bidResponse, done);
461
461
  } else {
@@ -46,7 +46,8 @@
46
46
  "AUCTION_DEBUG": "auctionDebug",
47
47
  "BID_VIEWABLE": "bidViewable",
48
48
  "STALE_RENDER": "staleRender",
49
- "BILLABLE_EVENT": "billableEvent"
49
+ "BILLABLE_EVENT": "billableEvent",
50
+ "BID_ACCEPTED": "bidAccepted"
50
51
  },
51
52
  "AD_RENDER_FAILED_REASON": {
52
53
  "PREVENT_WRITING_ON_MAIN_DOCUMENT": "preventWritingOnMainDocument",
@@ -176,6 +177,8 @@
176
177
  "AD_UNIT": "adUnit",
177
178
  "SET_CONFIG": "setConfig",
178
179
  "FETCH": "fetch",
179
- "SUCCESS": "success"
180
+ "SUCCESS": "success",
181
+ "ERROR": "error",
182
+ "TIMEOUT": "timeout"
180
183
  }
181
184
  }
package/src/events.js CHANGED
@@ -80,7 +80,7 @@ const _public = (function () {
80
80
  try {
81
81
  fn.apply(null, args);
82
82
  } catch (e) {
83
- utils.logError('Error executing handler:', 'events.js', e);
83
+ utils.logError('Error executing handler:', 'events.js', e, eventString);
84
84
  }
85
85
  });
86
86
  }
@@ -211,7 +211,10 @@ const BID_ADAGIO = Object.assign({}, BID_ADAGIO, {
211
211
  meta: {
212
212
  advertiserDomains: ['example.com']
213
213
  },
214
- seatId: '42',
214
+ pba: {
215
+ sid: '42',
216
+ e_pba_test: true
217
+ }
215
218
  });
216
219
 
217
220
  const BID_ANOTHER = Object.assign({}, BID_ANOTHER, {
@@ -256,7 +259,9 @@ const PARAMS_ADG = {
256
259
  pageviewId: 'a68e6d70-213b-496c-be0a-c468ff387106',
257
260
  environment: 'desktop',
258
261
  pagetype: 'article',
259
- placement: 'pave_top'
262
+ placement: 'pave_top',
263
+ testName: 'test',
264
+ testVersion: 'version',
260
265
  };
261
266
 
262
267
  const AUCTION_INIT_ANOTHER = {
@@ -285,6 +290,11 @@ const AUCTION_INIT_ANOTHER = {
285
290
  'params': {
286
291
  'publisherId': '1001'
287
292
  },
293
+ }, {
294
+ 'bidder': 'nobid',
295
+ 'params': {
296
+ 'publisherId': '1002'
297
+ },
288
298
  }, {
289
299
  'bidder': 'adagio',
290
300
  'params': {
@@ -354,6 +364,24 @@ const AUCTION_INIT_ANOTHER = {
354
364
  'auctionId': AUCTION_ID,
355
365
  'src': 'client',
356
366
  'bidRequestsCount': 1
367
+ }, {
368
+ 'bidder': 'nobid',
369
+ 'params': {
370
+ 'publisherId': '1001'
371
+ },
372
+ 'mediaTypes': {
373
+ 'banner': {
374
+ 'sizes': [[640, 480]]
375
+ }
376
+ },
377
+ 'adUnitCode': '/19968336/footer-bid-tag-1',
378
+ 'transactionId': 'ca4af27a-6d02-4f90-949d-d5541fa12014',
379
+ 'sizes': [[640, 480]],
380
+ 'bidId': '2ecff0db240757',
381
+ 'bidderRequestId': '1be65d7958826a',
382
+ 'auctionId': AUCTION_ID,
383
+ 'src': 'client',
384
+ 'bidRequestsCount': 1
357
385
  }
358
386
  ],
359
387
  'timeout': 3000,
@@ -533,6 +561,14 @@ const AUCTION_INIT_CACHE = {
533
561
  'timeout': 3000
534
562
  };
535
563
 
564
+ const AUCTION_END_ANOTHER = Object.assign({}, AUCTION_INIT_ANOTHER, {
565
+ bidsReceived: [BID_ANOTHER, BID_ADAGIO]
566
+ });
567
+
568
+ const AUCTION_END_ANOTHER_NOBID = Object.assign({}, AUCTION_INIT_ANOTHER, {
569
+ bidsReceived: []
570
+ });
571
+
536
572
  const MOCK = {
537
573
  SET_TARGETING: {
538
574
  [BID_ADAGIO.adUnitCode]: BID_ADAGIO.adserverTargeting,
@@ -546,6 +582,10 @@ const MOCK = {
546
582
  adagio: BID_ADAGIO,
547
583
  another: BID_ANOTHER
548
584
  },
585
+ AUCTION_END: {
586
+ another: AUCTION_END_ANOTHER,
587
+ another_nobid: AUCTION_END_ANOTHER_NOBID
588
+ },
549
589
  BID_WON: {
550
590
  adagio: Object.assign({}, BID_ADAGIO, {
551
591
  'status': 'rendered'
@@ -569,6 +609,12 @@ const MOCK = {
569
609
  bid: BID_CACHED
570
610
  }
571
611
  },
612
+ AD_RENDER_FAILED: {
613
+ bidcached: {
614
+ adId: 'fake_ad_id_2',
615
+ bid: BID_CACHED
616
+ }
617
+ }
572
618
  };
573
619
 
574
620
  describe('adagio analytics adapter', () => {
@@ -616,10 +662,11 @@ describe('adagio analytics adapter', () => {
616
662
  events.emit(constants.EVENTS.AUCTION_INIT, MOCK.AUCTION_INIT.another);
617
663
  events.emit(constants.EVENTS.BID_RESPONSE, MOCK.BID_RESPONSE.adagio);
618
664
  events.emit(constants.EVENTS.BID_RESPONSE, MOCK.BID_RESPONSE.another);
665
+ events.emit(constants.EVENTS.AUCTION_END, MOCK.AUCTION_END.another);
619
666
  events.emit(constants.EVENTS.BID_WON, MOCK.BID_WON.another);
620
667
  events.emit(constants.EVENTS.AD_RENDER_SUCCEEDED, MOCK.AD_RENDER_SUCCEEDED.another);
621
668
 
622
- expect(server.requests.length).to.equal(3);
669
+ expect(server.requests.length).to.equal(3, 'requests count');
623
670
  {
624
671
  const { protocol, hostname, pathname, search } = utils.parseUrl(server.requests[0].url);
625
672
  expect(protocol).to.equal('https');
@@ -633,12 +680,11 @@ describe('adagio analytics adapter', () => {
633
680
  expect(search.site).to.equal('test-com');
634
681
  expect(search.pv_id).to.equal('a68e6d70-213b-496c-be0a-c468ff387106');
635
682
  expect(search.url_dmn).to.equal(window.location.hostname);
636
- expect(search.dvc).to.equal('desktop');
637
683
  expect(search.pgtyp).to.equal('article');
638
684
  expect(search.plcmt).to.equal('pave_top');
639
685
  expect(search.mts).to.equal('ban');
640
686
  expect(search.ban_szs).to.equal('640x100,640x480');
641
- expect(search.bdrs).to.equal('adagio,another');
687
+ expect(search.bdrs).to.equal('adagio,another,nobid');
642
688
  expect(search.adg_mts).to.equal('ban');
643
689
  }
644
690
 
@@ -648,9 +694,19 @@ describe('adagio analytics adapter', () => {
648
694
  expect(hostname).to.equal('c.4dex.io');
649
695
  expect(pathname).to.equal('/pba.gif');
650
696
  expect(search.v).to.equal('2');
697
+ expect(search.e_sid).to.equal('42');
698
+ expect(search.e_pba_test).to.equal('true');
699
+ expect(search.bdrs_bid).to.equal('1,1,0');
700
+ }
701
+
702
+ {
703
+ const { protocol, hostname, pathname, search } = utils.parseUrl(server.requests[2].url);
704
+ expect(protocol).to.equal('https');
705
+ expect(hostname).to.equal('c.4dex.io');
706
+ expect(pathname).to.equal('/pba.gif');
707
+ expect(search.v).to.equal('3');
651
708
  expect(search.auct_id).to.equal(AUCTION_ID_ADAGIO);
652
709
  expect(search.adu_code).to.equal('/19968336/header-bid-tag-1');
653
- expect(search.adg_sid).to.equal('42');
654
710
  expect(search.win_bdr).to.equal('another');
655
711
  expect(search.win_mt).to.equal('ban');
656
712
  expect(search.win_ban_sz).to.equal('728x90');
@@ -661,17 +717,6 @@ describe('adagio analytics adapter', () => {
661
717
  expect(search.og_cur).to.equal('GBP');
662
718
  expect(search.og_cur_rate).to.equal('1.6');
663
719
  }
664
-
665
- {
666
- const { protocol, hostname, pathname, search } = utils.parseUrl(server.requests[2].url);
667
- expect(protocol).to.equal('https');
668
- expect(hostname).to.equal('c.4dex.io');
669
- expect(pathname).to.equal('/pba.gif');
670
- expect(search.v).to.equal('3');
671
- expect(search.auct_id).to.equal(AUCTION_ID_ADAGIO);
672
- expect(search.adu_code).to.equal('/19968336/header-bid-tag-1');
673
- expect(search.rndr).to.equal('1');
674
- }
675
720
  });
676
721
 
677
722
  it('builds and sends auction data with a cached bid win', () => {
@@ -691,10 +736,11 @@ describe('adagio analytics adapter', () => {
691
736
  events.emit(constants.EVENTS.AUCTION_INIT, MOCK.AUCTION_INIT.another);
692
737
  events.emit(constants.EVENTS.BID_RESPONSE, MOCK.BID_RESPONSE.adagio);
693
738
  events.emit(constants.EVENTS.BID_RESPONSE, MOCK.BID_RESPONSE.another);
739
+ events.emit(constants.EVENTS.AUCTION_END, MOCK.AUCTION_END.another_nobid);
694
740
  events.emit(constants.EVENTS.BID_WON, MOCK.BID_WON.bidcached);
695
- events.emit(constants.EVENTS.AD_RENDER_SUCCEEDED, MOCK.AD_RENDER_SUCCEEDED.bidcached);
741
+ events.emit(constants.EVENTS.AD_RENDER_FAILED, MOCK.AD_RENDER_FAILED.bidcached);
696
742
 
697
- expect(server.requests.length).to.equal(4);
743
+ expect(server.requests.length).to.equal(5, 'requests count');
698
744
  {
699
745
  const { protocol, hostname, pathname, search } = utils.parseUrl(server.requests[0].url);
700
746
  expect(protocol).to.equal('https');
@@ -708,13 +754,14 @@ describe('adagio analytics adapter', () => {
708
754
  expect(search.site).to.equal('test-com');
709
755
  expect(search.pv_id).to.equal('a68e6d70-213b-496c-be0a-c468ff387106');
710
756
  expect(search.url_dmn).to.equal(window.location.hostname);
711
- expect(search.dvc).to.equal('desktop');
712
757
  expect(search.pgtyp).to.equal('article');
713
758
  expect(search.plcmt).to.equal('pave_top');
714
759
  expect(search.mts).to.equal('ban');
715
760
  expect(search.ban_szs).to.equal('640x100,640x480');
716
761
  expect(search.bdrs).to.equal('adagio,another');
717
762
  expect(search.adg_mts).to.equal('ban');
763
+ expect(search.t_n).to.equal('test');
764
+ expect(search.t_v).to.equal('version');
718
765
  }
719
766
 
720
767
  {
@@ -730,12 +777,11 @@ describe('adagio analytics adapter', () => {
730
777
  expect(search.site).to.equal('test-com');
731
778
  expect(search.pv_id).to.equal('a68e6d70-213b-496c-be0a-c468ff387106');
732
779
  expect(search.url_dmn).to.equal(window.location.hostname);
733
- expect(search.dvc).to.equal('desktop');
734
780
  expect(search.pgtyp).to.equal('article');
735
781
  expect(search.plcmt).to.equal('pave_top');
736
782
  expect(search.mts).to.equal('ban');
737
783
  expect(search.ban_szs).to.equal('640x100,640x480');
738
- expect(search.bdrs).to.equal('adagio,another');
784
+ expect(search.bdrs).to.equal('adagio,another,nobid');
739
785
  expect(search.adg_mts).to.equal('ban');
740
786
  }
741
787
 
@@ -745,10 +791,20 @@ describe('adagio analytics adapter', () => {
745
791
  expect(hostname).to.equal('c.4dex.io');
746
792
  expect(pathname).to.equal('/pba.gif');
747
793
  expect(search.v).to.equal('2');
794
+ expect(search.e_sid).to.equal('42');
795
+ expect(search.e_pba_test).to.equal('true');
796
+ expect(search.bdrs_bid).to.equal('0,0,0');
797
+ }
798
+
799
+ {
800
+ const { protocol, hostname, pathname, search } = utils.parseUrl(server.requests[3].url);
801
+ expect(protocol).to.equal('https');
802
+ expect(hostname).to.equal('c.4dex.io');
803
+ expect(pathname).to.equal('/pba.gif');
804
+ expect(search.v).to.equal('3');
748
805
  expect(search.auct_id).to.equal(AUCTION_ID_ADAGIO);
749
806
  expect(search.auct_id_c).to.equal(AUCTION_ID_CACHE_ADAGIO);
750
807
  expect(search.adu_code).to.equal('/19968336/header-bid-tag-1');
751
- expect(search.adg_sid).to.equal('42');
752
808
  expect(search.win_bdr).to.equal('adagio');
753
809
  expect(search.win_mt).to.equal('ban');
754
810
  expect(search.win_ban_sz).to.equal('728x90');
@@ -758,18 +814,19 @@ describe('adagio analytics adapter', () => {
758
814
  expect(search.og_cpm).to.equal('1.42');
759
815
  expect(search.og_cur).to.equal('USD');
760
816
  expect(search.og_cur_rate).to.equal('1');
817
+ expect(search.rndr).to.not.exist;
761
818
  }
762
819
 
763
820
  {
764
- const { protocol, hostname, pathname, search } = utils.parseUrl(server.requests[3].url);
821
+ const { protocol, hostname, pathname, search } = utils.parseUrl(server.requests[4].url);
765
822
  expect(protocol).to.equal('https');
766
823
  expect(hostname).to.equal('c.4dex.io');
767
824
  expect(pathname).to.equal('/pba.gif');
768
- expect(search.v).to.equal('3');
825
+ expect(search.v).to.equal('4');
769
826
  expect(search.auct_id).to.equal(AUCTION_ID_ADAGIO);
770
827
  expect(search.auct_id_c).to.equal(AUCTION_ID_CACHE_ADAGIO);
771
828
  expect(search.adu_code).to.equal('/19968336/header-bid-tag-1');
772
- expect(search.rndr).to.equal('1');
829
+ expect(search.rndr).to.equal('0');
773
830
  }
774
831
  });
775
832
  });
@@ -861,11 +861,6 @@ describe('Adagio bid adapter', () => {
861
861
  }
862
862
  const requests = spec.buildRequests([bid01], bidderRequest);
863
863
 
864
- expect(requests[0].data.adUnits[0].floors.length).to.equal(3);
865
- expect(requests[0].data.adUnits[0].floors[0]).to.deep.equal({f: 1, mt: 'banner', s: '300x250'});
866
- expect(requests[0].data.adUnits[0].floors[1]).to.deep.equal({f: 1, mt: 'banner', s: '300x600'});
867
- expect(requests[0].data.adUnits[0].floors[2]).to.deep.equal({f: 1, mt: 'video', s: '600x480'});
868
-
869
864
  expect(requests[0].data.adUnits[0].mediaTypes.banner.sizes.length).to.equal(2);
870
865
  expect(requests[0].data.adUnits[0].mediaTypes.banner.bannerSizes[0]).to.deep.equal({size: [300, 250], floor: 1});
871
866
  expect(requests[0].data.adUnits[0].mediaTypes.banner.bannerSizes[1]).to.deep.equal({size: [300, 600], floor: 1});
@@ -890,10 +885,6 @@ describe('Adagio bid adapter', () => {
890
885
  }
891
886
  const requests = spec.buildRequests([bid01], bidderRequest);
892
887
 
893
- expect(requests[0].data.adUnits[0].floors.length).to.equal(2);
894
- expect(requests[0].data.adUnits[0].floors[0]).to.deep.equal({f: 1, mt: 'video'});
895
- expect(requests[0].data.adUnits[0].floors[1]).to.deep.equal({f: 1, mt: 'native'});
896
-
897
888
  expect(requests[0].data.adUnits[0].mediaTypes.video.floor).to.equal(1);
898
889
  expect(requests[0].data.adUnits[0].mediaTypes.native.floor).to.equal(1);
899
890
  });
@@ -913,8 +904,6 @@ describe('Adagio bid adapter', () => {
913
904
  }
914
905
  const requests = spec.buildRequests([bid01], bidderRequest);
915
906
 
916
- expect(requests[0].data.adUnits[0].floors.length).to.equal(1);
917
- expect(requests[0].data.adUnits[0].floors[0]).to.deep.equal({mt: 'video'});
918
907
  expect(requests[0].data.adUnits[0].mediaTypes.video.floor).to.be.undefined;
919
908
  });
920
909
  });
@@ -42,7 +42,7 @@ describe('adnuntiusBidAdapter', function() {
42
42
  const ENDPOINT_URL_VIDEO = `${ENDPOINT_URL_BASE}&userId=${usi}&tt=vast4`;
43
43
  const ENDPOINT_URL_NOCOOKIE = `${ENDPOINT_URL_BASE}&userId=${usi}&noCookies=true`;
44
44
  const ENDPOINT_URL_SEGMENTS = `${ENDPOINT_URL_BASE}&segments=segment1,segment2,segment3&userId=${usi}`;
45
- const ENDPOINT_URL_CONSENT = `${EURO_URL}${tzo}&format=json&consentString=consentString&userId=${usi}`;
45
+ const ENDPOINT_URL_CONSENT = `${EURO_URL}${tzo}&format=json&consentString=consentString&gdpr=1&userId=${usi}`;
46
46
  const adapter = newBidder(spec);
47
47
 
48
48
  const bidderRequests = [