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.
Files changed (309) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/acuityAdsBidAdapter.js +1 -1
  4. package/dist/adagioBidAdapter.js +1 -1
  5. package/dist/adbookpspBidAdapter.js +1 -1
  6. package/dist/adgenerationBidAdapter.js +1 -1
  7. package/dist/admaticBidAdapter.js +1 -1
  8. package/dist/adnuntiusBidAdapter.js +1 -1
  9. package/dist/adrelevantisBidAdapter.js +1 -1
  10. package/dist/adtrgtmeBidAdapter.js +1 -1
  11. package/dist/adxcgBidAdapter.js +1 -1
  12. package/dist/adyoulikeBidAdapter.js +1 -1
  13. package/dist/ajaBidAdapter.js +1 -1
  14. package/dist/amxBidAdapter.js +1 -1
  15. package/dist/amxIdSystem.js +1 -1
  16. package/dist/appierAnalyticsAdapter.js +1 -1
  17. package/dist/appnexusBidAdapter.js +1 -1
  18. package/dist/appushBidAdapter.js +1 -1
  19. package/dist/asoBidAdapter.js +1 -1
  20. package/dist/axonixBidAdapter.js +1 -1
  21. package/dist/beyondmediaBidAdapter.js +1 -1
  22. package/dist/bidglassBidAdapter.js +1 -1
  23. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  24. package/dist/big-richmediaBidAdapter.js +1 -1
  25. package/dist/braveBidAdapter.js +1 -1
  26. package/dist/bridgewellBidAdapter.js +1 -1
  27. package/dist/brightMountainMediaBidAdapter.js +1 -1
  28. package/dist/brightcomBidAdapter.js +1 -1
  29. package/dist/brightcomSSPBidAdapter.js +1 -1
  30. package/dist/carodaBidAdapter.js +1 -1
  31. package/dist/chtnwBidAdapter.js +1 -1
  32. package/dist/coinzillaBidAdapter.js +1 -1
  33. package/dist/compassBidAdapter.js +1 -1
  34. package/dist/concertBidAdapter.js +1 -1
  35. package/dist/connectIdSystem.js +1 -1
  36. package/dist/connectadBidAdapter.js +1 -1
  37. package/dist/consumableBidAdapter.js +1 -1
  38. package/dist/contentexchangeBidAdapter.js +1 -1
  39. package/dist/conversantAnalyticsAdapter.js +1 -1
  40. package/dist/conversantBidAdapter.js +1 -1
  41. package/dist/craftBidAdapter.js +1 -1
  42. package/dist/criteoBidAdapter.js +1 -1
  43. package/dist/cwireBidAdapter.js +1 -1
  44. package/dist/debugging-standalone.js +1 -1
  45. package/dist/dependencies.json +15 -0
  46. package/dist/domainOverrideToRootDomain.js +1 -0
  47. package/dist/dspxBidAdapter.js +1 -1
  48. package/dist/eplanningBidAdapter.js +1 -1
  49. package/dist/eskimiBidAdapter.js +1 -0
  50. package/dist/feedadBidAdapter.js +1 -1
  51. package/dist/finativeBidAdapter.js +1 -1
  52. package/dist/freewheel-sspBidAdapter.js +1 -1
  53. package/dist/glimpseBidAdapter.js +1 -1
  54. package/dist/globalsunBidAdapter.js +1 -1
  55. package/dist/gmosspBidAdapter.js +1 -1
  56. package/dist/goldbachBidAdapter.js +1 -1
  57. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  58. package/dist/gridBidAdapter.js +1 -1
  59. package/dist/growthCodeIdSystem.js +1 -1
  60. package/dist/gumgumBidAdapter.js +1 -1
  61. package/dist/h12mediaBidAdapter.js +1 -1
  62. package/dist/id5IdSystem.js +1 -1
  63. package/dist/improvedigitalBidAdapter.js +1 -1
  64. package/dist/inmarBidAdapter.js +1 -1
  65. package/dist/insticatorBidAdapter.js +1 -1
  66. package/dist/iqzoneBidAdapter.js +1 -1
  67. package/dist/ivsBidAdapter.js +1 -0
  68. package/dist/ixBidAdapter.js +1 -1
  69. package/dist/justpremiumBidAdapter.js +1 -1
  70. package/dist/jwplayerVideoProvider.js +1 -1
  71. package/dist/kargoBidAdapter.js +1 -1
  72. package/dist/koblerBidAdapter.js +1 -1
  73. package/dist/konduitAnalyticsAdapter.js +1 -1
  74. package/dist/kueezBidAdapter.js +1 -1
  75. package/dist/kueezRtbBidAdapter.js +1 -1
  76. package/dist/kulturemediaBidAdapter.js +1 -1
  77. package/dist/lassoBidAdapter.js +1 -1
  78. package/dist/lifestreetBidAdapter.js +1 -1
  79. package/dist/liveIntentIdSystem.js +1 -1
  80. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  81. package/dist/logicadBidAdapter.js +1 -1
  82. package/dist/loglyliftBidAdapter.js +1 -1
  83. package/dist/luponmediaBidAdapter.js +1 -1
  84. package/dist/magniteAnalyticsAdapter.js +1 -1
  85. package/dist/malltvAnalyticsAdapter.js +1 -1
  86. package/dist/marsmediaBidAdapter.js +1 -1
  87. package/dist/mathildeadsBidAdapter.js +1 -1
  88. package/dist/mediafuseBidAdapter.js +1 -1
  89. package/dist/medianetBidAdapter.js +1 -1
  90. package/dist/mediasquareBidAdapter.js +1 -1
  91. package/dist/mgidBidAdapter.js +1 -1
  92. package/dist/minutemediaBidAdapter.js +1 -1
  93. package/dist/minutemediaplusBidAdapter.js +1 -1
  94. package/dist/nativoBidAdapter.js +1 -1
  95. package/dist/neuwoRtdProvider.js +1 -1
  96. package/dist/nexx360BidAdapter.js +1 -1
  97. package/dist/not-for-prod/prebid.js +165 -162
  98. package/dist/oguryBidAdapter.js +1 -1
  99. package/dist/onetagBidAdapter.js +1 -1
  100. package/dist/onomagicBidAdapter.js +1 -1
  101. package/dist/ooloAnalyticsAdapter.js +1 -1
  102. package/dist/openxBidAdapter.js +1 -1
  103. package/dist/openxOrtbBidAdapter.js +1 -1
  104. package/dist/operaadsBidAdapter.js +1 -1
  105. package/dist/optidigitalBidAdapter.js +1 -1
  106. package/dist/ortbConverter.js +1 -1
  107. package/dist/outbrainBidAdapter.js +1 -1
  108. package/dist/pairIdSystem.js +1 -0
  109. package/dist/parrableIdSystem.js +1 -1
  110. package/dist/pixfutureBidAdapter.js +1 -1
  111. package/dist/prebid-core.js +1 -1
  112. package/dist/publinkIdSystem.js +1 -1
  113. package/dist/pubmaticBidAdapter.js +1 -1
  114. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  115. package/dist/pubxBidAdapter.js +1 -1
  116. package/dist/pxyzBidAdapter.js +1 -1
  117. package/dist/quantcastBidAdapter.js +1 -1
  118. package/dist/readpeakBidAdapter.js +1 -1
  119. package/dist/relaidoBidAdapter.js +1 -1
  120. package/dist/rhythmoneBidAdapter.js +1 -1
  121. package/dist/riseBidAdapter.js +1 -1
  122. package/dist/rubiconAnalyticsAdapter.js +1 -1
  123. package/dist/rubiconBidAdapter.js +1 -1
  124. package/dist/seedingAllianceBidAdapter.js +1 -1
  125. package/dist/seedtagBidAdapter.js +1 -1
  126. package/dist/sharedIdSystem.js +1 -1
  127. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  128. package/dist/sharethroughBidAdapter.js +1 -1
  129. package/dist/shinezBidAdapter.js +1 -1
  130. package/dist/smaatoBidAdapter.js +1 -1
  131. package/dist/smartadserverBidAdapter.js +1 -1
  132. package/dist/smarthubBidAdapter.js +1 -1
  133. package/dist/smartxBidAdapter.js +1 -1
  134. package/dist/smilewantedBidAdapter.js +1 -1
  135. package/dist/sonobiBidAdapter.js +1 -1
  136. package/dist/sovrnAnalyticsAdapter.js +1 -1
  137. package/dist/sovrnBidAdapter.js +1 -1
  138. package/dist/sspBCBidAdapter.js +1 -1
  139. package/dist/stvBidAdapter.js +1 -1
  140. package/dist/sublimeBidAdapter.js +1 -1
  141. package/dist/synacormediaBidAdapter.js +1 -1
  142. package/dist/targetVideoBidAdapter.js +1 -1
  143. package/dist/teadsBidAdapter.js +1 -1
  144. package/dist/trionBidAdapter.js +1 -1
  145. package/dist/tripleliftBidAdapter.js +1 -1
  146. package/dist/truereachBidAdapter.js +1 -1
  147. package/dist/ttdBidAdapter.js +1 -1
  148. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  149. package/dist/uid2IdSystem.js +1 -1
  150. package/dist/underdogmediaBidAdapter.js +1 -1
  151. package/dist/undertoneBidAdapter.js +1 -1
  152. package/dist/userId.js +1 -1
  153. package/dist/vidazooBidAdapter.js +1 -1
  154. package/dist/videobyteBidAdapter.js +1 -1
  155. package/dist/videoheroesBidAdapter.js +1 -1
  156. package/dist/vidoomyBidAdapter.js +1 -1
  157. package/dist/visiblemeasuresBidAdapter.js +1 -1
  158. package/dist/visxBidAdapter.js +1 -1
  159. package/dist/vrtcalBidAdapter.js +1 -1
  160. package/dist/vuukleBidAdapter.js +1 -1
  161. package/dist/widespaceBidAdapter.js +1 -1
  162. package/dist/winrBidAdapter.js +1 -1
  163. package/dist/yahoosspBidAdapter.js +1 -1
  164. package/dist/yieldmoBidAdapter.js +1 -1
  165. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  166. package/dist/yieldoneBidAdapter.js +1 -1
  167. package/integrationExamples/gpt/fledge_example.html +103 -0
  168. package/integrationExamples/gpt/prebidServer_fledge_example.html +111 -0
  169. package/libraries/domainOverrideToRootDomain/index.js +39 -0
  170. package/libraries/ortbConverter/processors/video.js +1 -0
  171. package/modules/acuityAdsBidAdapter.js +1 -1
  172. package/modules/admaticBidAdapter.js +7 -2
  173. package/modules/adnuntiusBidAdapter.js +3 -1
  174. package/modules/amxBidAdapter.js +1 -1
  175. package/modules/amxIdSystem.js +23 -20
  176. package/modules/amxIdSystem.md +7 -7
  177. package/modules/appnexusBidAdapter.js +108 -102
  178. package/modules/appushBidAdapter.js +1 -1
  179. package/modules/beyondmediaBidAdapter.js +1 -1
  180. package/modules/bidwatchAnalyticsAdapter.js +2 -0
  181. package/modules/braveBidAdapter.js +1 -1
  182. package/modules/brightcomBidAdapter.js +1 -1
  183. package/modules/brightcomSSPBidAdapter.js +1 -1
  184. package/modules/coinzillaBidAdapter.js +1 -2
  185. package/modules/compassBidAdapter.js +1 -1
  186. package/modules/connectIdSystem.js +96 -21
  187. package/modules/connectIdSystem.md +6 -5
  188. package/modules/contentexchangeBidAdapter.js +1 -1
  189. package/modules/conversantBidAdapter.js +3 -0
  190. package/modules/criteoBidAdapter.js +5 -1
  191. package/modules/eskimiBidAdapter.js +72 -0
  192. package/modules/eskimiBidAdapter.md +34 -0
  193. package/modules/freewheel-sspBidAdapter.js +8 -0
  194. package/modules/glimpseBidAdapter.js +1 -2
  195. package/modules/globalsunBidAdapter.js +1 -1
  196. package/modules/gridBidAdapter.js +43 -20
  197. package/modules/growthCodeIdSystem.js +18 -15
  198. package/modules/gumgumBidAdapter.js +1 -1
  199. package/modules/iqzoneBidAdapter.js +1 -1
  200. package/modules/ivsBidAdapter.js +85 -0
  201. package/modules/ivsBidAdapter.md +34 -0
  202. package/modules/ixBidAdapter.js +72 -105
  203. package/modules/jwplayerVideoProvider.js +25 -32
  204. package/modules/kargoBidAdapter.js +473 -246
  205. package/modules/koblerBidAdapter.js +1 -2
  206. package/modules/kueezBidAdapter.js +1 -1
  207. package/modules/kueezRtbBidAdapter.js +16 -4
  208. package/modules/liveIntentIdSystem.js +8 -0
  209. package/modules/luponmediaBidAdapter.js +1 -1
  210. package/modules/magniteAnalyticsAdapter.js +76 -3
  211. package/modules/mathildeadsBidAdapter.js +1 -1
  212. package/modules/medianetBidAdapter.js +1 -1
  213. package/modules/mediasquareBidAdapter.js +2 -1
  214. package/modules/mgidBidAdapter.js +178 -26
  215. package/modules/minutemediaBidAdapter.js +1 -1
  216. package/modules/minutemediaplusBidAdapter.js +16 -4
  217. package/modules/nativoBidAdapter.js +110 -21
  218. package/modules/neuwoRtdProvider.js +0 -2
  219. package/modules/oguryBidAdapter.js +3 -2
  220. package/modules/onomagicBidAdapter.js +1 -2
  221. package/modules/openxBidAdapter.js +192 -563
  222. package/modules/openxBidAdapter.md +22 -20
  223. package/modules/openxOrtbBidAdapter.js +13 -11
  224. package/modules/openxOrtbBidAdapter.md +5 -3
  225. package/modules/operaadsBidAdapter.js +1 -1
  226. package/modules/pairIdSystem.js +79 -0
  227. package/modules/pubmaticBidAdapter.js +13 -10
  228. package/modules/pubxBidAdapter.js +5 -2
  229. package/modules/riseBidAdapter.js +1 -1
  230. package/modules/sharedIdSystem.js +4 -27
  231. package/modules/sharethroughBidAdapter.js +1 -1
  232. package/modules/shinezBidAdapter.js +1 -1
  233. package/modules/smarthubBidAdapter.js +1 -1
  234. package/modules/synacormediaBidAdapter.js +1 -3
  235. package/modules/truereachBidAdapter.js +1 -2
  236. package/modules/userId/eids.js +24 -0
  237. package/modules/userId/eids.md +16 -0
  238. package/modules/videoheroesBidAdapter.js +1 -1
  239. package/modules/vidoomyBidAdapter.js +33 -4
  240. package/modules/visiblemeasuresBidAdapter.js +1 -1
  241. package/modules/vrtcalBidAdapter.js +1 -1
  242. package/modules/yieldmoBidAdapter.js +15 -5
  243. package/modules/yieldoneBidAdapter.js +1 -1
  244. package/package.json +1 -1
  245. package/src/Renderer.js +2 -1
  246. package/src/config.js +78 -127
  247. package/src/native.js +5 -1
  248. package/test/spec/auctionmanager_spec.js +2 -2
  249. package/test/spec/libraries/domainOverrideToRootDomain/index_spec.js +77 -0
  250. package/test/spec/modules/1plusXRtdProvider_spec.js +8 -7
  251. package/test/spec/modules/acuityAdsBidAdapter_spec.js +2 -1
  252. package/test/spec/modules/adagioBidAdapter_spec.js +0 -25
  253. package/test/spec/modules/admaticBidAdapter_spec.js +1 -1
  254. package/test/spec/modules/adnuntiusBidAdapter_spec.js +2 -1
  255. package/test/spec/modules/amxIdSystem_spec.js +13 -26
  256. package/test/spec/modules/appnexusBidAdapter_spec.js +464 -448
  257. package/test/spec/modules/appushBidAdapter_spec.js +2 -1
  258. package/test/spec/modules/axonixBidAdapter_spec.js +0 -27
  259. package/test/spec/modules/beyondmediaBidAdapter_spec.js +2 -1
  260. package/test/spec/modules/big-richmediaBidAdapter_spec.js +68 -64
  261. package/test/spec/modules/compassBidAdapter_spec.js +2 -1
  262. package/test/spec/modules/connectIdSystem_spec.js +420 -242
  263. package/test/spec/modules/contentexchangeBidAdapter_spec.js +2 -1
  264. package/test/spec/modules/conversantBidAdapter_spec.js +1 -0
  265. package/test/spec/modules/criteoBidAdapter_spec.js +33 -1
  266. package/test/spec/modules/eids_spec.js +30 -0
  267. package/test/spec/modules/eskimiBidAdapter_spec.js +155 -0
  268. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +37 -0
  269. package/test/spec/modules/globalsunBidAdapter_spec.js +2 -1
  270. package/test/spec/modules/gridBidAdapter_spec.js +8 -0
  271. package/test/spec/modules/iqzoneBidAdapter_spec.js +2 -1
  272. package/test/spec/modules/ivsBidAdapter_spec.js +197 -0
  273. package/test/spec/modules/ixBidAdapter_spec.js +141 -71
  274. package/test/spec/modules/kargoBidAdapter_spec.js +297 -140
  275. package/test/spec/modules/koblerBidAdapter_spec.js +0 -20
  276. package/test/spec/modules/kueezRtbBidAdapter_spec.js +22 -2
  277. package/test/spec/modules/liveIntentIdSystem_spec.js +10 -0
  278. package/test/spec/modules/luponmediaBidAdapter_spec.js +1 -1
  279. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +129 -1
  280. package/test/spec/modules/mathildeadsBidAdapter_spec.js +2 -1
  281. package/test/spec/modules/mgidBidAdapter_spec.js +184 -36
  282. package/test/spec/modules/minutemediaplusBidAdapter_spec.js +22 -2
  283. package/test/spec/modules/nativoBidAdapter_spec.js +101 -0
  284. package/test/spec/modules/neuwoRtdProvider_spec.js +0 -1
  285. package/test/spec/modules/oguryBidAdapter_spec.js +19 -4
  286. package/test/spec/modules/ooloAnalyticsAdapter_spec.js +1 -1
  287. package/test/spec/modules/openxBidAdapter_spec.js +1157 -1936
  288. package/test/spec/modules/openxOrtbBidAdapter_spec.js +12 -39
  289. package/test/spec/modules/pairIdSystem_spec.js +68 -0
  290. package/test/spec/modules/pubCommonId_spec.js +0 -17
  291. package/test/spec/modules/pubmaticBidAdapter_spec.js +868 -867
  292. package/test/spec/modules/pubxBidAdapter_spec.js +10 -2
  293. package/test/spec/modules/realvuAnalyticsAdapter_spec.js +0 -5
  294. package/test/spec/modules/sharedIdSystem_spec.js +0 -46
  295. package/test/spec/modules/sharethroughBidAdapter_spec.js +2 -1
  296. package/test/spec/modules/smarthubBidAdapter_spec.js +2 -1
  297. package/test/spec/modules/synacormediaBidAdapter_spec.js +0 -26
  298. package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +17 -4
  299. package/test/spec/modules/vidoomyBidAdapter_spec.js +58 -0
  300. package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +2 -1
  301. package/test/spec/modules/vrtcalBidAdapter_spec.js +3 -2
  302. package/test/spec/modules/yieldmoBidAdapter_spec.js +19 -1
  303. package/test/spec/renderer_spec.js +1 -2
  304. package/test/spec/unit/pbjs_api_spec.js +19 -3
  305. package/test/test_index.js +13 -3
  306. package/dist/gridNMBidAdapter.js +0 -1
  307. package/modules/gridNMBidAdapter.js +0 -422
  308. package/modules/gridNMBidAdapter.md +0 -39
  309. 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 || config.getConfig('bidderTimeout') || DEFAULT_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 = config.getConfig('bidderTimeout');
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: config.getConfig('timeout') || 1500,
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
- // Log error if no matching bid!
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: config.getConfig('bidderTimeout')
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 || config.getConfig('bidderTimeout')
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 = {'pbjs': '$prebid.version$'};
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 { _each, deepAccess, isPlainObject, isArray, isStr, logInfo, parseUrl, isEmpty, triggerPixel, logWarn, getBidIdParameter, isFn, isNumber } from '../src/utils.js';
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.5',
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 {validBidRequests[]} - an array of bids
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: {domain, page},
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
- if (bidderRequest && bidderRequest.gdprConsent) {
204
- request.user = {ext: {consent: bidderRequest.gdprConsent.consentString}};
205
- request.regs = {ext: {gdpr: (bidderRequest.gdprConsent.gdprApplies ? 1 : 0)}}
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 (info.referrer) {
208
- request.site.ref = info.referrer
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 == 'localhost') {
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 = config.getConfig('bidderTimeout');
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,