prebid.js 7.35.0 → 7.37.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 (229) hide show
  1. package/.devcontainer/Dockerfile +2 -0
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.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/admaruBidAdapter.js +1 -1
  8. package/dist/adrelevantisBidAdapter.js +1 -1
  9. package/dist/adtrgtmeBidAdapter.js +1 -1
  10. package/dist/adxcgBidAdapter.js +1 -1
  11. package/dist/adyoulikeBidAdapter.js +1 -1
  12. package/dist/aidemBidAdapter.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/aolBidAdapter.js +1 -1
  17. package/dist/appierAnalyticsAdapter.js +1 -1
  18. package/dist/appnexusBidAdapter.js +1 -1
  19. package/dist/asoBidAdapter.js +1 -1
  20. package/dist/audiencerunBidAdapter.js +1 -1
  21. package/dist/axonixBidAdapter.js +1 -1
  22. package/dist/bidglassBidAdapter.js +1 -1
  23. package/dist/big-richmediaBidAdapter.js +1 -1
  24. package/dist/bluebillywigBidAdapter.js +1 -1
  25. package/dist/bridgewellBidAdapter.js +1 -1
  26. package/dist/brightMountainMediaBidAdapter.js +1 -1
  27. package/dist/brightcomBidAdapter.js +1 -1
  28. package/dist/brightcomSSPBidAdapter.js +1 -0
  29. package/dist/carodaBidAdapter.js +1 -1
  30. package/dist/chtnwBidAdapter.js +1 -1
  31. package/dist/concertBidAdapter.js +1 -1
  32. package/dist/connectadBidAdapter.js +1 -1
  33. package/dist/consumableBidAdapter.js +1 -1
  34. package/dist/conversantBidAdapter.js +1 -1
  35. package/dist/craftBidAdapter.js +1 -1
  36. package/dist/criteoBidAdapter.js +1 -1
  37. package/dist/cwireBidAdapter.js +1 -1
  38. package/dist/dependencies.json +3 -0
  39. package/dist/discoveryBidAdapter.js +1 -1
  40. package/dist/dspxBidAdapter.js +1 -1
  41. package/dist/eplanningBidAdapter.js +1 -1
  42. package/dist/feedadBidAdapter.js +1 -1
  43. package/dist/finativeBidAdapter.js +1 -1
  44. package/dist/freewheel-sspBidAdapter.js +1 -1
  45. package/dist/glimpseBidAdapter.js +1 -1
  46. package/dist/gmosspBidAdapter.js +1 -1
  47. package/dist/goldbachBidAdapter.js +1 -1
  48. package/dist/gridBidAdapter.js +1 -1
  49. package/dist/gridNMBidAdapter.js +1 -1
  50. package/dist/gumgumBidAdapter.js +1 -1
  51. package/dist/h12mediaBidAdapter.js +1 -1
  52. package/dist/id5IdSystem.js +1 -1
  53. package/dist/impactifyBidAdapter.js +1 -1
  54. package/dist/improvedigitalBidAdapter.js +1 -1
  55. package/dist/incrxBidAdapter.js +1 -1
  56. package/dist/inmarBidAdapter.js +1 -1
  57. package/dist/insticatorBidAdapter.js +1 -1
  58. package/dist/ixBidAdapter.js +1 -1
  59. package/dist/jixieBidAdapter.js +1 -1
  60. package/dist/justpremiumBidAdapter.js +1 -1
  61. package/dist/konduitAnalyticsAdapter.js +1 -1
  62. package/dist/kueezBidAdapter.js +1 -1
  63. package/dist/kueezRtbBidAdapter.js +1 -1
  64. package/dist/lassoBidAdapter.js +1 -1
  65. package/dist/lifestreetBidAdapter.js +1 -1
  66. package/dist/limelightDigitalBidAdapter.js +1 -1
  67. package/dist/liveIntentIdSystem.js +1 -1
  68. package/dist/livewrappedBidAdapter.js +1 -1
  69. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  70. package/dist/logicadBidAdapter.js +1 -1
  71. package/dist/loglyliftBidAdapter.js +1 -1
  72. package/dist/magniteAnalyticsAdapter.js +1 -1
  73. package/dist/malltvAnalyticsAdapter.js +1 -1
  74. package/dist/marsmediaBidAdapter.js +1 -1
  75. package/dist/mediafuseBidAdapter.js +1 -1
  76. package/dist/mediagoBidAdapter.js +1 -1
  77. package/dist/mediakeysBidAdapter.js +1 -1
  78. package/dist/mediasquareBidAdapter.js +1 -1
  79. package/dist/mgidBidAdapter.js +1 -1
  80. package/dist/minutemediaBidAdapter.js +1 -1
  81. package/dist/minutemediaplusBidAdapter.js +1 -0
  82. package/dist/neuwoRtdProvider.js +1 -0
  83. package/dist/nextMillenniumBidAdapter.js +1 -1
  84. package/dist/nexx360BidAdapter.js +1 -1
  85. package/dist/not-for-prod/prebid.js +141 -137
  86. package/dist/oguryBidAdapter.js +1 -1
  87. package/dist/onetagBidAdapter.js +1 -1
  88. package/dist/ooloAnalyticsAdapter.js +1 -1
  89. package/dist/outbrainBidAdapter.js +1 -1
  90. package/dist/parrableIdSystem.js +1 -1
  91. package/dist/pixfutureBidAdapter.js +1 -1
  92. package/dist/prebid-core.js +1 -1
  93. package/dist/prebidServerBidAdapter.js +1 -1
  94. package/dist/proxistoreBidAdapter.js +1 -1
  95. package/dist/publinkIdSystem.js +1 -1
  96. package/dist/pubmaticBidAdapter.js +1 -1
  97. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  98. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  99. package/dist/pxyzBidAdapter.js +1 -1
  100. package/dist/quantcastBidAdapter.js +1 -1
  101. package/dist/readpeakBidAdapter.js +1 -1
  102. package/dist/relaidoBidAdapter.js +1 -1
  103. package/dist/rhythmoneBidAdapter.js +1 -1
  104. package/dist/riseBidAdapter.js +1 -1
  105. package/dist/rubiconAnalyticsAdapter.js +1 -1
  106. package/dist/rubiconBidAdapter.js +1 -1
  107. package/dist/scatteredBidAdapter.js +1 -0
  108. package/dist/seedingAllianceBidAdapter.js +1 -1
  109. package/dist/seedtagBidAdapter.js +1 -1
  110. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  111. package/dist/sharethroughBidAdapter.js +1 -1
  112. package/dist/shinezBidAdapter.js +1 -1
  113. package/dist/sirdataRtdProvider.js +1 -1
  114. package/dist/smaatoBidAdapter.js +1 -1
  115. package/dist/smartadserverBidAdapter.js +1 -1
  116. package/dist/smartxBidAdapter.js +1 -1
  117. package/dist/smilewantedBidAdapter.js +1 -1
  118. package/dist/sonobiBidAdapter.js +1 -1
  119. package/dist/sovrnAnalyticsAdapter.js +1 -1
  120. package/dist/sovrnBidAdapter.js +1 -1
  121. package/dist/sspBCBidAdapter.js +1 -1
  122. package/dist/sublimeBidAdapter.js +1 -1
  123. package/dist/synacormediaBidAdapter.js +1 -1
  124. package/dist/targetVideoBidAdapter.js +1 -1
  125. package/dist/teadsBidAdapter.js +1 -1
  126. package/dist/trionBidAdapter.js +1 -1
  127. package/dist/tripleliftBidAdapter.js +1 -1
  128. package/dist/ttdBidAdapter.js +1 -1
  129. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  130. package/dist/uid2IdSystem.js +1 -1
  131. package/dist/underdogmediaBidAdapter.js +1 -1
  132. package/dist/undertoneBidAdapter.js +1 -1
  133. package/dist/userId.js +1 -1
  134. package/dist/vidazooBidAdapter.js +1 -1
  135. package/dist/videobyteBidAdapter.js +1 -1
  136. package/dist/visxBidAdapter.js +1 -1
  137. package/dist/vuukleBidAdapter.js +1 -1
  138. package/dist/widespaceBidAdapter.js +1 -1
  139. package/dist/winrBidAdapter.js +1 -1
  140. package/dist/yahoosspBidAdapter.js +1 -1
  141. package/dist/yieldmoBidAdapter.js +1 -1
  142. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  143. package/integrationExamples/gpt/neuwoRtdProvider_example.html +190 -0
  144. package/modules/33acrossBidAdapter.js +13 -4
  145. package/modules/adagioBidAdapter.js +14 -14
  146. package/modules/adagioBidAdapter.md +3 -1
  147. package/modules/admaruBidAdapter.js +19 -1
  148. package/modules/aidemBidAdapter.js +90 -65
  149. package/modules/aidemBidAdapter.md +10 -7
  150. package/modules/ajaBidAdapter.js +6 -1
  151. package/modules/amxIdSystem.md +2 -10
  152. package/modules/aolBidAdapter.js +1 -1
  153. package/modules/appnexusBidAdapter.js +45 -48
  154. package/modules/brightcomBidAdapter.js +1 -0
  155. package/modules/brightcomSSPBidAdapter.js +323 -0
  156. package/modules/brightcomSSPBidAdapter.md +46 -0
  157. package/modules/criteoBidAdapter.js +4 -5
  158. package/modules/cwireBidAdapter.md +9 -3
  159. package/modules/discoveryBidAdapter.js +22 -12
  160. package/modules/feedadBidAdapter.js +35 -15
  161. package/modules/fpdModule/index.md +5 -2
  162. package/modules/freewheel-sspBidAdapter.js +5 -1
  163. package/modules/gridBidAdapter.js +3 -1
  164. package/modules/incrxBidAdapter.js +2 -0
  165. package/modules/ixBidAdapter.js +318 -175
  166. package/modules/kueezRtbBidAdapter.js +54 -20
  167. package/modules/limelightDigitalBidAdapter.js +6 -1
  168. package/modules/limelightDigitalBidAdapter.md +12 -2
  169. package/modules/liveIntentIdSystem.js +1 -1
  170. package/modules/livewrappedBidAdapter.js +28 -16
  171. package/modules/mediagoBidAdapter.js +22 -17
  172. package/modules/minutemediaplusBidAdapter.js +291 -0
  173. package/modules/minutemediaplusBidAdapter.md +35 -0
  174. package/modules/neuwoRtdProvider.js +171 -0
  175. package/modules/neuwoRtdProvider.md +40 -0
  176. package/modules/nextMillenniumBidAdapter.js +9 -1
  177. package/modules/nexx360BidAdapter.js +1 -1
  178. package/modules/prebidServerBidAdapter/ortbConverter.js +6 -0
  179. package/modules/proxistoreBidAdapter.js +2 -2
  180. package/modules/pubmaticBidAdapter.js +4 -0
  181. package/modules/pubxaiAnalyticsAdapter.js +2 -2
  182. package/modules/scatteredBidAdapter.js +72 -0
  183. package/modules/scatteredBidAdapter.md +36 -0
  184. package/modules/sirdataRtdProvider.js +262 -284
  185. package/modules/smartxBidAdapter.js +2 -0
  186. package/modules/smilewantedBidAdapter.js +5 -0
  187. package/modules/sonobiBidAdapter.js +1 -10
  188. package/modules/topicsFpdModule.md +62 -0
  189. package/modules/tripleliftBidAdapter.js +4 -0
  190. package/modules/userId/eids.js +1 -1
  191. package/modules/vidazooBidAdapter.js +3 -1
  192. package/modules/yahoosspBidAdapter.js +1 -1
  193. package/modules/yieldmoBidAdapter.js +1 -0
  194. package/package.json +2 -2
  195. package/src/adapterManager.js +30 -14
  196. package/src/utils.js +1 -1
  197. package/test/spec/modules/33acrossBidAdapter_spec.js +51 -18
  198. package/test/spec/modules/adagioBidAdapter_spec.js +2 -2
  199. package/test/spec/modules/admaruBidAdapter_spec.js +48 -0
  200. package/test/spec/modules/aidemBidAdapter_spec.js +77 -10
  201. package/test/spec/modules/ajaBidAdapter_spec.js +21 -1
  202. package/test/spec/modules/aolBidAdapter_spec.js +2 -2
  203. package/test/spec/modules/appnexusBidAdapter_spec.js +123 -16
  204. package/test/spec/modules/brightcomSSPBidAdapter_spec.js +411 -0
  205. package/test/spec/modules/criteoBidAdapter_spec.js +24 -1
  206. package/test/spec/modules/eids_spec.js +1 -1
  207. package/test/spec/modules/feedadBidAdapter_spec.js +47 -77
  208. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +1 -1
  209. package/test/spec/modules/incrxBidAdapter_spec.js +4 -0
  210. package/test/spec/modules/ixBidAdapter_spec.js +24 -54
  211. package/test/spec/modules/kueezRtbBidAdapter_spec.js +63 -22
  212. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +35 -5
  213. package/test/spec/modules/livewrappedBidAdapter_spec.js +267 -2
  214. package/test/spec/modules/minutemediaplusBidAdapter_spec.js +519 -0
  215. package/test/spec/modules/neuwoRtdProvider_spec.js +123 -0
  216. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +11 -0
  217. package/test/spec/modules/prebidServerBidAdapter_spec.js +56 -0
  218. package/test/spec/modules/proxistoreBidAdapter_spec.js +2 -2
  219. package/test/spec/modules/pubmaticBidAdapter_spec.js +15 -0
  220. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +3 -1
  221. package/test/spec/modules/scatteredBidAdapter_spec.js +210 -0
  222. package/test/spec/modules/sirdataRtdProvider_spec.js +116 -22
  223. package/test/spec/modules/smilewantedBidAdapter_spec.js +54 -3
  224. package/test/spec/modules/sonobiBidAdapter_spec.js +3 -25
  225. package/test/spec/modules/tripleliftBidAdapter_spec.js +9 -2
  226. package/test/spec/modules/userId_spec.js +1 -1
  227. package/test/spec/modules/vidazooBidAdapter_spec.js +4 -1
  228. package/test/spec/modules/yahoosspBidAdapter_spec.js +1 -1
  229. package/test/spec/unit/core/adapterManager_spec.js +147 -0
@@ -1156,6 +1156,18 @@ describe('The Criteo bidding adapter', function () {
1156
1156
  it('should properly build a request with first party data', function () {
1157
1157
  const siteData = {
1158
1158
  keywords: ['power tools'],
1159
+ content: {
1160
+ data: [{
1161
+ name: 'some_provider',
1162
+ ext: {
1163
+ segtax: 3
1164
+ },
1165
+ segment: [
1166
+ { 'id': '1001' },
1167
+ { 'id': '1002' }
1168
+ ]
1169
+ }]
1170
+ },
1159
1171
  ext: {
1160
1172
  data: {
1161
1173
  pageType: 'article'
@@ -1164,6 +1176,16 @@ describe('The Criteo bidding adapter', function () {
1164
1176
  };
1165
1177
  const userData = {
1166
1178
  gender: 'M',
1179
+ data: [{
1180
+ name: 'some_provider',
1181
+ ext: {
1182
+ segtax: 3
1183
+ },
1184
+ segment: [
1185
+ { 'id': '1001' },
1186
+ { 'id': '1002' }
1187
+ ]
1188
+ }],
1167
1189
  ext: {
1168
1190
  data: {
1169
1191
  registered: true
@@ -1203,7 +1225,8 @@ describe('The Criteo bidding adapter', function () {
1203
1225
 
1204
1226
  const request = spec.buildRequests(bidRequests, { ...bidderRequest, ortb2 });
1205
1227
  expect(request.data.publisher.ext).to.deep.equal({ data: { pageType: 'article' } });
1206
- expect(request.data.user.ext).to.deep.equal({ data: { registered: true } });
1228
+ expect(request.data.user).to.deep.equal(userData);
1229
+ expect(request.data.site).to.deep.equal(siteData);
1207
1230
  expect(request.data.slots[0].ext).to.deep.equal({
1208
1231
  bidfloor: 0.75,
1209
1232
  data: {
@@ -392,7 +392,7 @@ describe('eids array generation for known sub-modules', function() {
392
392
 
393
393
  const [eid] = createEidsArray(userId);
394
394
  expect(eid).to.deep.equal({
395
- source: 'amxrtb.com',
395
+ source: 'amxdt.net',
396
396
  uids: [{
397
397
  atype: 1,
398
398
  id,
@@ -4,7 +4,7 @@ import {BANNER, NATIVE, VIDEO} from '../../../src/mediaTypes.js';
4
4
  import {server} from 'test/mocks/xhr.js';
5
5
 
6
6
  const CODE = 'feedad';
7
- const EXPECTED_ADAPTER_VERSION = '1.0.5';
7
+ const EXPECTED_ADAPTER_VERSION = '1.0.6';
8
8
 
9
9
  describe('FeedAdAdapter', function () {
10
10
  describe('Public API', function () {
@@ -373,81 +373,67 @@ describe('FeedAdAdapter', function () {
373
373
  const pixelSync2 = {type: 'image', url: 'the pixel url 2'};
374
374
  const iFrameSync1 = {type: 'iframe', url: 'the iFrame url 1'};
375
375
  const iFrameSync2 = {type: 'iframe', url: 'the iFrame url 2'};
376
- const mockServerResponse = (content) => {
377
- if (!(content instanceof Array)) {
378
- content = [content];
379
- }
380
- return content.map(it => ({body: it}));
381
- };
382
-
383
- it('should pass through the syncs out of the extension fields of the server response', function () {
384
- const serverResponse = mockServerResponse([{
376
+ const response1 = {
377
+ body: [{
385
378
  ext: {
386
379
  pixels: [pixelSync1, pixelSync2],
387
- iframes: [iFrameSync1, iFrameSync2],
380
+ iframes: [iFrameSync1]
381
+ },
382
+ }]
383
+ };
384
+ const response2 = {
385
+ body: [{
386
+ ext: {
387
+ pixels: [pixelSync1],
388
+ iframes: [iFrameSync1],
388
389
  }
389
- }]);
390
- const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, serverResponse)
390
+ }, {
391
+ ext: {
392
+ pixels: [pixelSync2],
393
+ iframes: [iFrameSync2],
394
+ }
395
+ }]
396
+ };
397
+ it('should pass through the syncs out of the extension fields of the server response', function () {
398
+ const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, [response1])
391
399
  expect(result).to.deep.equal([
392
400
  pixelSync1,
393
401
  pixelSync2,
394
402
  iFrameSync1,
395
- iFrameSync2,
396
403
  ]);
397
404
  });
398
405
 
399
406
  it('should concat the syncs of all responses', function () {
400
- const serverResponse = mockServerResponse([{
401
- ext: {
402
- pixels: [pixelSync1],
403
- iframes: [iFrameSync2],
404
- },
405
- ad: 'ad html',
406
- cpm: 100
407
- }, {
408
- ext: {
409
- iframes: [iFrameSync1],
410
- }
411
- }, {
412
- ext: {
413
- pixels: [pixelSync2],
414
- }
415
- }]);
416
- const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, serverResponse);
407
+ const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, [response1, response2]);
417
408
  expect(result).to.deep.equal([
418
409
  pixelSync1,
410
+ pixelSync2,
411
+ iFrameSync1,
419
412
  iFrameSync2,
413
+ ]);
414
+ });
415
+
416
+ it('should concat the syncs of all bids', function () {
417
+ const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, [response2]);
418
+ expect(result).to.deep.equal([
419
+ pixelSync1,
420
420
  iFrameSync1,
421
421
  pixelSync2,
422
+ iFrameSync2,
422
423
  ]);
423
424
  });
424
425
 
425
426
  it('should filter out duplicates', function () {
426
- const serverResponse = mockServerResponse([{
427
- ext: {
428
- pixels: [pixelSync1, pixelSync1],
429
- iframes: [iFrameSync2, iFrameSync2],
430
- }
431
- }, {
432
- ext: {
433
- iframes: [iFrameSync2, iFrameSync2],
434
- }
435
- }]);
436
- const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, serverResponse);
427
+ const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, [response1, response1]);
437
428
  expect(result).to.deep.equal([
438
429
  pixelSync1,
439
- iFrameSync2,
430
+ pixelSync2,
431
+ iFrameSync1,
440
432
  ]);
441
433
  });
442
434
 
443
435
  it('should not include iFrame syncs if the option is disabled', function () {
444
- const serverResponse = mockServerResponse([{
445
- ext: {
446
- pixels: [pixelSync1, pixelSync2],
447
- iframes: [iFrameSync1, iFrameSync2],
448
- }
449
- }]);
450
- const result = spec.getUserSyncs({iframeEnabled: false, pixelEnabled: true}, serverResponse);
436
+ const result = spec.getUserSyncs({iframeEnabled: false, pixelEnabled: true}, [response1]);
451
437
  expect(result).to.deep.equal([
452
438
  pixelSync1,
453
439
  pixelSync2,
@@ -455,52 +441,36 @@ describe('FeedAdAdapter', function () {
455
441
  });
456
442
 
457
443
  it('should not include pixel syncs if the option is disabled', function () {
458
- const serverResponse = mockServerResponse([{
459
- ext: {
460
- pixels: [pixelSync1, pixelSync2],
461
- iframes: [iFrameSync1, iFrameSync2],
462
- }
463
- }]);
464
- const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: false}, serverResponse);
444
+ const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: false}, [response1]);
465
445
  expect(result).to.deep.equal([
466
446
  iFrameSync1,
467
- iFrameSync2,
468
447
  ]);
469
448
  });
470
449
 
471
450
  it('should not include any syncs if the sync options are disabled or missing', function () {
472
- const serverResponse = mockServerResponse([{
473
- ext: {
474
- pixels: [pixelSync1, pixelSync2],
475
- iframes: [iFrameSync1, iFrameSync2],
476
- }
477
- }]);
478
- const result = spec.getUserSyncs({iframeEnabled: false, pixelEnabled: false}, serverResponse);
451
+ const result = spec.getUserSyncs({iframeEnabled: false, pixelEnabled: false}, [response1]);
479
452
  expect(result).to.deep.equal([]);
480
453
  });
481
454
 
482
455
  it('should handle empty responses', function () {
483
- const serverResponse = mockServerResponse([]);
484
- const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, serverResponse)
456
+ const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, [])
485
457
  expect(result).to.deep.equal([]);
486
458
  });
487
459
 
488
460
  it('should not throw if the server response is weird', function () {
489
461
  const responses = [
490
- mockServerResponse(null),
491
- mockServerResponse('null'),
492
- mockServerResponse(1234),
493
- mockServerResponse({}),
494
- mockServerResponse([{}, 123]),
462
+ {body: null},
463
+ {body: 'null'},
464
+ {body: 1234},
465
+ {body: {}},
466
+ {body: [{}, 123]},
495
467
  ];
496
- responses.forEach(it => {
497
- expect(() => spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, it)).not.to.throw;
498
- });
468
+ expect(() => spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, responses)).to.not.throw();
499
469
  });
500
470
 
501
471
  it('should return empty array if the body extension is null', function () {
502
- const response = mockServerResponse({ext: null});
503
- const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, response);
472
+ const response = {body: [{ext: null}]};
473
+ const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, [response]);
504
474
  expect(result).to.deep.equal([]);
505
475
  });
506
476
  });
@@ -128,7 +128,7 @@ describe('freewheelSSP BidAdapter Test', () => {
128
128
  it('should return a properly formatted request with schain defined', function () {
129
129
  const request = spec.buildRequests(bidRequests);
130
130
  const payload = request[0].data;
131
- expect(payload.schain).to.deep.equal(bidRequests[0].schain)
131
+ expect(payload.schain).to.deep.equal('{\"ver\":\"1.0\",\"complete\":1,\"nodes\":[{\"asi\":\"example.com\",\"sid\":\"0\",\"hp\":1,\"rid\":\"bidrequestid\",\"domain\":\"example.com\"}]}');
132
132
  });
133
133
 
134
134
  it('sends bid request to ENDPOINT via GET', () => {
@@ -71,6 +71,8 @@ describe('IncrementX', function () {
71
71
  cpm: '0.7',
72
72
  ad: '<html><h1>Ad from IncrementX</h1></html>',
73
73
  slotBidId: 'bid-id-123456',
74
+ adType: '1',
75
+ settings: '1,2',
74
76
  nurl: 'htt://nurl.com',
75
77
  statusText: 'Success'
76
78
  }
@@ -80,6 +82,8 @@ describe('IncrementX', function () {
80
82
  requestId: 'bid-id-123456',
81
83
  cpm: '0.7',
82
84
  currency: 'USD',
85
+ adType: '1',
86
+ settings: '1,2',
83
87
  netRevenue: false,
84
88
  width: '300',
85
89
  height: '250',
@@ -750,7 +750,8 @@ describe('IndexexchangeAdapter', function () {
750
750
  // so structured because when calling createEidsArray, UID2's getValue func takes .id to set in uids
751
751
  uid2: { id: 'testuid2' }, // UID 2.0
752
752
  // similar to uid2, but id5's getValue takes .uid
753
- id5id: { uid: 'testid5id' } // ID5
753
+ id5id: { uid: 'testid5id' }, // ID5
754
+ imuid: 'testimuid'
754
755
  };
755
756
 
756
757
  const DEFAULT_USERIDASEIDS_DATA = createEidsArray(DEFAULT_USERID_DATA);
@@ -801,6 +802,11 @@ describe('IndexexchangeAdapter', function () {
801
802
  uids: [{
802
803
  id: DEFAULT_USERID_DATA.id5id.uid
803
804
  }]
805
+ }, {
806
+ source: 'intimatemerger.com',
807
+ uids: [{
808
+ id: DEFAULT_USERID_DATA.imuid,
809
+ }]
804
810
  }
805
811
  ];
806
812
 
@@ -1193,7 +1199,7 @@ describe('IndexexchangeAdapter', function () {
1193
1199
  const payload = extractPayload(request[0]);
1194
1200
  expect(request).to.be.an('array');
1195
1201
  expect(request).to.have.lengthOf.above(0); // should be 1 or more
1196
- expect(payload.user.eids).to.have.lengthOf(6);
1202
+ expect(payload.user.eids).to.have.lengthOf(7);
1197
1203
  expect(payload.user.eids).to.deep.include(DEFAULT_USERID_PAYLOAD[0]);
1198
1204
  });
1199
1205
  });
@@ -1381,8 +1387,7 @@ describe('IndexexchangeAdapter', function () {
1381
1387
  cloneValidBid[0].userIdAsEids = utils.deepClone(DEFAULT_USERIDASEIDS_DATA);
1382
1388
  const request = spec.buildRequests(cloneValidBid, DEFAULT_OPTION)[0];
1383
1389
  const payload = extractPayload(request);
1384
-
1385
- expect(payload.user.eids).to.have.lengthOf(6);
1390
+ expect(payload.user.eids).to.have.lengthOf(7);
1386
1391
  expect(payload.user.eids).to.have.deep.members(DEFAULT_USERID_PAYLOAD);
1387
1392
  });
1388
1393
 
@@ -1515,7 +1520,7 @@ describe('IndexexchangeAdapter', function () {
1515
1520
  })
1516
1521
 
1517
1522
  expect(payload.user).to.exist;
1518
- expect(payload.user.eids).to.have.lengthOf(8);
1523
+ expect(payload.user.eids).to.have.lengthOf(9);
1519
1524
 
1520
1525
  expect(payload.user.eids).to.have.deep.members(validUserIdPayload);
1521
1526
  });
@@ -1557,7 +1562,7 @@ describe('IndexexchangeAdapter', function () {
1557
1562
  });
1558
1563
 
1559
1564
  const payload = extractPayload(request);
1560
- expect(payload.user.eids).to.have.lengthOf(7);
1565
+ expect(payload.user.eids).to.have.lengthOf(8);
1561
1566
  expect(payload.user.eids).to.have.deep.members(validUserIdPayload);
1562
1567
  });
1563
1568
  });
@@ -3610,27 +3615,9 @@ describe('IndexexchangeAdapter', function () {
3610
3615
  expect(FEATURE_TOGGLES.featureToggles).to.deep.equal({});
3611
3616
  });
3612
3617
 
3613
- it('should set request size limit to 32KB when its feature enabled', () => {
3614
- sandbox.stub(storage, 'localStorageIsEnabled').returns(true);
3615
- serverResponse.body.ext.features.pbjs_use_32kb_size_limit = {
3616
- activated: true
3617
- };
3618
- FEATURE_TOGGLES.setFeatureToggles(serverResponse);
3619
- const bid = utils.deepClone(DEFAULT_MULTIFORMAT_VIDEO_VALID_BID[0]);
3620
- bid.bidderRequestId = Array(10000).join('#');
3621
-
3622
- expect(spec.isBidRequestValid(bid)).to.be.true;
3623
- spec.buildRequests([bid], {});
3624
- const lsData = JSON.parse(storage.getDataFromLocalStorage(LOCAL_STORAGE_FEATURE_TOGGLES_KEY));
3625
- expect(lsData.features.pbjs_use_32kb_size_limit.activated).to.be.true;
3626
- });
3627
-
3628
- it('6 ad units should generate only 2 requests if 32kb size limit FT is enabled', function () {
3618
+ it('6 ad units should generate only 1 request if buildRequestV2 FT is enabled', function () {
3629
3619
  sandbox.stub(storage, 'localStorageIsEnabled').returns(true);
3630
- serverResponse.body.ext.features.pbjs_use_32kb_size_limit = {
3631
- activated: true
3632
- };
3633
- serverResponse.body.ext.features.pbjs_enable_post = {
3620
+ serverResponse.body.ext.features.pbjs_use_buildRequestV2 = {
3634
3621
  activated: true
3635
3622
  };
3636
3623
  FEATURE_TOGGLES.setFeatureToggles(serverResponse);
@@ -3660,47 +3647,30 @@ describe('IndexexchangeAdapter', function () {
3660
3647
  const requests = spec.buildRequests([bid1, bid2, bid3, bid4, bid5, bid6], DEFAULT_OPTION);
3661
3648
 
3662
3649
  expect(requests).to.be.an('array');
3663
- // 32KB size limit causes only 2 requests to get generated.
3664
- expect(requests).to.have.lengthOf(2);
3650
+ // buildRequestv2 enabled causes only 1 requests to get generated.
3651
+ expect(requests).to.have.lengthOf(1);
3665
3652
  for (let request of requests) {
3666
3653
  expect(request.method).to.equal('POST');
3667
3654
  }
3668
3655
  });
3669
3656
 
3670
- it('4 ad units should generate only 1 requests if 32kb size limit FT is enabled', function () {
3657
+ it('1 request with 2 ad units, buildRequestV2 enabled', function () {
3671
3658
  sandbox.stub(storage, 'localStorageIsEnabled').returns(true);
3672
- serverResponse.body.ext.features.pbjs_use_32kb_size_limit = {
3673
- activated: true
3674
- };
3675
- serverResponse.body.ext.features.pbjs_enable_post = {
3659
+ serverResponse.body.ext.features.pbjs_use_buildRequestV2 = {
3676
3660
  activated: true
3677
3661
  };
3678
3662
  FEATURE_TOGGLES.setFeatureToggles(serverResponse);
3679
3663
 
3680
- const bid1 = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3681
- bid1.mediaTypes.banner.sizes = LARGE_SET_OF_SIZES;
3682
- bid1.params.siteId = '121';
3683
- bid1.adUnitCode = 'div-gpt-1'
3684
- bid1.transactionId = 'tr1';
3685
- bid1.bidId = '2f6g5s5e';
3686
-
3687
- const bid2 = utils.deepClone(bid1);
3688
- bid2.transactionId = 'tr2';
3689
-
3690
- const bid3 = utils.deepClone(bid1);
3691
- bid3.transactionId = 'tr3';
3692
-
3693
- const bid4 = utils.deepClone(bid1);
3694
- bid4.transactionId = 'tr4';
3695
-
3696
- const requests = spec.buildRequests([bid1, bid2, bid3, bid4], DEFAULT_OPTION);
3664
+ const bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3665
+ bid.mediaTypes.banner.sizes = LARGE_SET_OF_SIZES;
3666
+ bid.params.siteId = '124';
3667
+ bid.adUnitCode = 'div-gpt-1'
3668
+ bid.transactionId = '152e36d1-1241-4242-t35e-y1dv34d12315';
3669
+ bid.bidId = '2f6g5s5e';
3697
3670
 
3671
+ const requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3698
3672
  expect(requests).to.be.an('array');
3699
- // 32KB size limit causes only 1 requests to get generated.
3700
3673
  expect(requests).to.have.lengthOf(1);
3701
- for (let request of requests) {
3702
- expect(request.method).to.equal('POST');
3703
- }
3704
3674
  });
3705
3675
  });
3706
3676
 
@@ -1,4 +1,4 @@
1
- import { expect } from 'chai';
1
+ import {expect} from 'chai';
2
2
  import {
3
3
  spec as adapter,
4
4
  SUPPORTED_ID_SYSTEMS,
@@ -13,9 +13,10 @@ import {
13
13
  getUniqueDealId,
14
14
  } from 'modules/kueezRtbBidAdapter.js';
15
15
  import * as utils from 'src/utils.js';
16
- import { version } from 'package.json';
17
- import { useFakeTimers } from 'sinon';
18
- import { BANNER, VIDEO } from '../../../src/mediaTypes';
16
+ import {version} from 'package.json';
17
+ import {useFakeTimers} from 'sinon';
18
+ import {BANNER, VIDEO} from '../../../src/mediaTypes';
19
+ import {config} from '../../../src/config';
19
20
 
20
21
  const SUB_DOMAIN = 'exchange';
21
22
 
@@ -36,6 +37,10 @@ const BID = {
36
37
  'transactionId': 'c881914b-a3b5-4ecf-ad9c-1c2f37c6aabf',
37
38
  'sizes': [[300, 250], [300, 600]],
38
39
  'bidderRequestId': '1fdb5ff1b6eaa7',
40
+ 'auctionId': 'auction_id',
41
+ 'bidRequestsCount': 4,
42
+ 'bidderRequestsCount': 3,
43
+ 'bidderWinsCount': 1,
39
44
  'requestId': 'b0777d85-d061-450e-9bc7-260dd54bbb7a',
40
45
  'schain': 'a0819c69-005b-41ed-af06-1be1e0aefefc',
41
46
  'mediaTypes': [BANNER]
@@ -46,6 +51,10 @@ const VIDEO_BID = {
46
51
  'adUnitCode': '63550ad1ff6642d368cba59dh5884270560',
47
52
  'bidderRequestId': '12a8ae9ada9c13',
48
53
  'transactionId': '56e184c6-bde9-497b-b9b9-cf47a61381ee',
54
+ 'auctionId': 'auction_id',
55
+ 'bidRequestsCount': 4,
56
+ 'bidderRequestsCount': 3,
57
+ 'bidderWinsCount': 1,
49
58
  'schain': 'a0819c69-005b-41ed-af06-1be1e0aefefc',
50
59
  'params': {
51
60
  'subDomain': SUB_DOMAIN,
@@ -78,10 +87,18 @@ const BIDDER_REQUEST = {
78
87
  'consentString': 'consent_string',
79
88
  'gdprApplies': true
80
89
  },
90
+ 'gppString': 'gpp_string',
91
+ 'gppSid': [7],
81
92
  'uspConsent': 'consent_string',
82
93
  'refererInfo': {
83
94
  'page': 'https://www.greatsite.com',
84
95
  'ref': 'https://www.somereferrer.com'
96
+ },
97
+ 'ortb2': {
98
+ 'regs': {
99
+ 'gpp': 'gpp_string',
100
+ 'gpp_sid': [7]
101
+ }
85
102
  }
86
103
  };
87
104
 
@@ -134,7 +151,7 @@ const REQUEST = {
134
151
 
135
152
  function getTopWindowQueryParams() {
136
153
  try {
137
- const parsedUrl = utils.parseUrl(window.top.document.URL, { decodeSearchAsString: true });
154
+ const parsedUrl = utils.parseUrl(window.top.document.URL, {decodeSearchAsString: true});
138
155
  return parsedUrl.search;
139
156
  } catch (e) {
140
157
  return '';
@@ -213,6 +230,9 @@ describe('KueezRtbBidAdapter', function () {
213
230
 
214
231
  it('should build video request', function () {
215
232
  const hashUrl = hashCode(BIDDER_REQUEST.refererInfo.page);
233
+ config.setConfig({
234
+ bidderTimeout: 3000
235
+ });
216
236
  const requests = adapter.buildRequests([VIDEO_BID], BIDDER_REQUEST);
217
237
  expect(requests).to.have.length(1);
218
238
  expect(requests[0]).to.deep.equal({
@@ -223,11 +243,20 @@ describe('KueezRtbBidAdapter', function () {
223
243
  bidFloor: 0.1,
224
244
  bidId: '2d52001cabd527',
225
245
  bidderVersion: adapter.version,
246
+ bidderRequestId: '12a8ae9ada9c13',
226
247
  cb: 1000,
227
248
  gdpr: 1,
228
249
  gdprConsent: 'consent_string',
229
250
  usPrivacy: 'consent_string',
251
+ gppString: 'gpp_string',
252
+ gppSid: [7],
230
253
  prebidVersion: version,
254
+ transactionId: '56e184c6-bde9-497b-b9b9-cf47a61381ee',
255
+ auctionId: 'auction_id',
256
+ bidRequestsCount: 4,
257
+ bidderRequestsCount: 3,
258
+ bidderWinsCount: 1,
259
+ bidderTimeout: 3000,
231
260
  publisherId: '59ac17c192832d0011283fe3',
232
261
  url: 'https%3A%2F%2Fwww.greatsite.com',
233
262
  referrer: 'https://www.somereferrer.com',
@@ -259,6 +288,9 @@ describe('KueezRtbBidAdapter', function () {
259
288
 
260
289
  it('should build banner request for each size', function () {
261
290
  const hashUrl = hashCode(BIDDER_REQUEST.refererInfo.page);
291
+ config.setConfig({
292
+ bidderTimeout: 3000
293
+ });
262
294
  const requests = adapter.buildRequests([BID], BIDDER_REQUEST);
263
295
  expect(requests).to.have.length(1);
264
296
  expect(requests[0]).to.deep.equal({
@@ -267,7 +299,16 @@ describe('KueezRtbBidAdapter', function () {
267
299
  data: {
268
300
  gdprConsent: 'consent_string',
269
301
  gdpr: 1,
302
+ gppString: 'gpp_string',
303
+ gppSid: [7],
270
304
  usPrivacy: 'consent_string',
305
+ transactionId: 'c881914b-a3b5-4ecf-ad9c-1c2f37c6aabf',
306
+ auctionId: 'auction_id',
307
+ bidRequestsCount: 4,
308
+ bidderRequestsCount: 3,
309
+ bidderWinsCount: 1,
310
+ bidderTimeout: 3000,
311
+ bidderRequestId: '1fdb5ff1b6eaa7',
271
312
  sizes: ['300x250', '300x600'],
272
313
  url: 'https%3A%2F%2Fwww.greatsite.com',
273
314
  referrer: 'https://www.somereferrer.com',
@@ -296,7 +337,7 @@ describe('KueezRtbBidAdapter', function () {
296
337
  });
297
338
  describe('getUserSyncs', function () {
298
339
  it('should have valid user sync with iframeEnabled', function () {
299
- const result = adapter.getUserSyncs({ iframeEnabled: true }, [SERVER_RESPONSE]);
340
+ const result = adapter.getUserSyncs({iframeEnabled: true}, [SERVER_RESPONSE]);
300
341
 
301
342
  expect(result).to.deep.equal([{
302
343
  type: 'iframe',
@@ -305,7 +346,7 @@ describe('KueezRtbBidAdapter', function () {
305
346
  });
306
347
 
307
348
  it('should have valid user sync with cid on response', function () {
308
- const result = adapter.getUserSyncs({ iframeEnabled: true }, [SERVER_RESPONSE]);
349
+ const result = adapter.getUserSyncs({iframeEnabled: true}, [SERVER_RESPONSE]);
309
350
  expect(result).to.deep.equal([{
310
351
  type: 'iframe',
311
352
  url: 'https://sync.kueezrtb.com/api/sync/iframe/?cid=testcid123&gdpr=0&gdpr_consent=&us_privacy='
@@ -313,7 +354,7 @@ describe('KueezRtbBidAdapter', function () {
313
354
  });
314
355
 
315
356
  it('should have valid user sync with pixelEnabled', function () {
316
- const result = adapter.getUserSyncs({ pixelEnabled: true }, [SERVER_RESPONSE]);
357
+ const result = adapter.getUserSyncs({pixelEnabled: true}, [SERVER_RESPONSE]);
317
358
 
318
359
  expect(result).to.deep.equal([{
319
360
  'url': 'https://sync.kueezrtb.com/api/sync/image/?cid=testcid123&gdpr=0&gdpr_consent=&us_privacy=',
@@ -329,12 +370,12 @@ describe('KueezRtbBidAdapter', function () {
329
370
  });
330
371
 
331
372
  it('should return empty array when there is no ad', function () {
332
- const responses = adapter.interpretResponse({ price: 1, ad: '' });
373
+ const responses = adapter.interpretResponse({price: 1, ad: ''});
333
374
  expect(responses).to.be.empty;
334
375
  });
335
376
 
336
377
  it('should return empty array when there is no price', function () {
337
- const responses = adapter.interpretResponse({ price: null, ad: 'great ad' });
378
+ const responses = adapter.interpretResponse({price: null, ad: 'great ad'});
338
379
  expect(responses).to.be.empty;
339
380
  });
340
381
 
@@ -394,11 +435,11 @@ describe('KueezRtbBidAdapter', function () {
394
435
  const userId = (function () {
395
436
  switch (idSystemProvider) {
396
437
  case 'lipb':
397
- return { lipbid: id };
438
+ return {lipbid: id};
398
439
  case 'parrableId':
399
- return { eid: id };
440
+ return {eid: id};
400
441
  case 'id5id':
401
- return { uid: id };
442
+ return {uid: id};
402
443
  default:
403
444
  return id;
404
445
  }
@@ -417,18 +458,18 @@ describe('KueezRtbBidAdapter', function () {
417
458
 
418
459
  describe('alternate param names extractors', function () {
419
460
  it('should return undefined when param not supported', function () {
420
- const cid = extractCID({ 'c_id': '1' });
421
- const pid = extractPID({ 'p_id': '1' });
422
- const subDomain = extractSubDomain({ 'sub_domain': 'prebid' });
461
+ const cid = extractCID({'c_id': '1'});
462
+ const pid = extractPID({'p_id': '1'});
463
+ const subDomain = extractSubDomain({'sub_domain': 'prebid'});
423
464
  expect(cid).to.be.undefined;
424
465
  expect(pid).to.be.undefined;
425
466
  expect(subDomain).to.be.undefined;
426
467
  });
427
468
 
428
469
  it('should return value when param supported', function () {
429
- const cid = extractCID({ 'cID': '1' });
430
- const pid = extractPID({ 'Pid': '2' });
431
- const subDomain = extractSubDomain({ 'subDOMAIN': 'prebid' });
470
+ const cid = extractCID({'cID': '1'});
471
+ const pid = extractPID({'Pid': '2'});
472
+ const subDomain = extractSubDomain({'subDOMAIN': 'prebid'});
432
473
  expect(cid).to.be.equal('1');
433
474
  expect(pid).to.be.equal('2');
434
475
  expect(subDomain).to.be.equal('prebid');
@@ -488,7 +529,7 @@ describe('KueezRtbBidAdapter', function () {
488
529
  now
489
530
  });
490
531
  setStorageItem('myKey', 2020);
491
- const { value, created } = getStorageItem('myKey');
532
+ const {value, created} = getStorageItem('myKey');
492
533
  expect(created).to.be.equal(now);
493
534
  expect(value).to.be.equal(2020);
494
535
  expect(typeof value).to.be.equal('number');
@@ -504,8 +545,8 @@ describe('KueezRtbBidAdapter', function () {
504
545
  });
505
546
 
506
547
  it('should parse JSON value', function () {
507
- const data = JSON.stringify({ event: 'send' });
508
- const { event } = tryParseJSON(data);
548
+ const data = JSON.stringify({event: 'send'});
549
+ const {event} = tryParseJSON(data);
509
550
  expect(event).to.be.equal('send');
510
551
  });
511
552