prebid.js 7.54.0 → 7.54.2

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 (140) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/adagioBidAdapter.js +1 -1
  4. package/dist/adbookpspBidAdapter.js +1 -1
  5. package/dist/adgenerationBidAdapter.js +1 -1
  6. package/dist/adqueryBidAdapter.js +1 -1
  7. package/dist/adrelevantisBidAdapter.js +1 -1
  8. package/dist/adtrgtmeBidAdapter.js +1 -1
  9. package/dist/adxcgBidAdapter.js +1 -1
  10. package/dist/adyoulikeBidAdapter.js +1 -1
  11. package/dist/ajaBidAdapter.js +1 -1
  12. package/dist/amxBidAdapter.js +1 -1
  13. package/dist/amxIdSystem.js +1 -1
  14. package/dist/appierAnalyticsAdapter.js +1 -1
  15. package/dist/appnexusBidAdapter.js +1 -1
  16. package/dist/asoBidAdapter.js +1 -1
  17. package/dist/axonixBidAdapter.js +1 -1
  18. package/dist/bidglassBidAdapter.js +1 -1
  19. package/dist/big-richmediaBidAdapter.js +1 -1
  20. package/dist/bridgewellBidAdapter.js +1 -1
  21. package/dist/brightMountainMediaBidAdapter.js +1 -1
  22. package/dist/carodaBidAdapter.js +1 -1
  23. package/dist/chtnwBidAdapter.js +1 -1
  24. package/dist/concertBidAdapter.js +1 -1
  25. package/dist/connectadBidAdapter.js +1 -1
  26. package/dist/consumableBidAdapter.js +1 -1
  27. package/dist/conversantAnalyticsAdapter.js +1 -1
  28. package/dist/conversantBidAdapter.js +1 -1
  29. package/dist/craftBidAdapter.js +1 -1
  30. package/dist/criteoBidAdapter.js +1 -1
  31. package/dist/cwireBidAdapter.js +1 -1
  32. package/dist/dspxBidAdapter.js +1 -1
  33. package/dist/eplanningBidAdapter.js +1 -1
  34. package/dist/euidIdSystem.js +1 -1
  35. package/dist/feedadBidAdapter.js +1 -1
  36. package/dist/finativeBidAdapter.js +1 -1
  37. package/dist/freewheel-sspBidAdapter.js +1 -1
  38. package/dist/glimpseBidAdapter.js +1 -1
  39. package/dist/gmosspBidAdapter.js +1 -1
  40. package/dist/goldbachBidAdapter.js +1 -1
  41. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  42. package/dist/greenbidsRtdProvider.js +1 -1
  43. package/dist/gridBidAdapter.js +1 -1
  44. package/dist/gumgumBidAdapter.js +1 -1
  45. package/dist/h12mediaBidAdapter.js +1 -1
  46. package/dist/hypelabBidAdapter.js +1 -1
  47. package/dist/id5IdSystem.js +1 -1
  48. package/dist/improvedigitalBidAdapter.js +1 -1
  49. package/dist/inmarBidAdapter.js +1 -1
  50. package/dist/insticatorBidAdapter.js +1 -1
  51. package/dist/ixBidAdapter.js +1 -1
  52. package/dist/justpremiumBidAdapter.js +1 -1
  53. package/dist/kargoBidAdapter.js +1 -1
  54. package/dist/konduitAnalyticsAdapter.js +1 -1
  55. package/dist/kueezBidAdapter.js +1 -1
  56. package/dist/kueezRtbBidAdapter.js +1 -1
  57. package/dist/kulturemediaBidAdapter.js +1 -1
  58. package/dist/lassoBidAdapter.js +1 -1
  59. package/dist/lifestreetBidAdapter.js +1 -1
  60. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  61. package/dist/logicadBidAdapter.js +1 -1
  62. package/dist/loglyliftBidAdapter.js +1 -1
  63. package/dist/magniteAnalyticsAdapter.js +1 -1
  64. package/dist/malltvAnalyticsAdapter.js +1 -1
  65. package/dist/marsmediaBidAdapter.js +1 -1
  66. package/dist/mediafuseBidAdapter.js +1 -1
  67. package/dist/mediasquareBidAdapter.js +1 -1
  68. package/dist/mgidBidAdapter.js +1 -1
  69. package/dist/minutemediaBidAdapter.js +1 -1
  70. package/dist/minutemediaplusBidAdapter.js +1 -1
  71. package/dist/nexx360BidAdapter.js +1 -1
  72. package/dist/not-for-prod/prebid.js +128 -128
  73. package/dist/oguryBidAdapter.js +1 -1
  74. package/dist/onetagBidAdapter.js +1 -1
  75. package/dist/ooloAnalyticsAdapter.js +1 -1
  76. package/dist/optidigitalBidAdapter.js +1 -1
  77. package/dist/outbrainBidAdapter.js +1 -1
  78. package/dist/oxxionRtdProvider.js +1 -1
  79. package/dist/parrableIdSystem.js +1 -1
  80. package/dist/pixfutureBidAdapter.js +1 -1
  81. package/dist/prebid-core.js +1 -1
  82. package/dist/publinkIdSystem.js +1 -1
  83. package/dist/pubmaticBidAdapter.js +1 -1
  84. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  85. package/dist/pxyzBidAdapter.js +1 -1
  86. package/dist/quantcastBidAdapter.js +1 -1
  87. package/dist/readpeakBidAdapter.js +1 -1
  88. package/dist/relaidoBidAdapter.js +1 -1
  89. package/dist/retailspotBidAdapter.js +1 -1
  90. package/dist/rhythmoneBidAdapter.js +1 -1
  91. package/dist/riseBidAdapter.js +1 -1
  92. package/dist/rubiconAnalyticsAdapter.js +1 -1
  93. package/dist/rubiconBidAdapter.js +1 -1
  94. package/dist/seedingAllianceBidAdapter.js +1 -1
  95. package/dist/seedtagBidAdapter.js +1 -1
  96. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  97. package/dist/sharethroughBidAdapter.js +1 -1
  98. package/dist/shinezBidAdapter.js +1 -1
  99. package/dist/smaatoBidAdapter.js +1 -1
  100. package/dist/smartadserverBidAdapter.js +1 -1
  101. package/dist/smartxBidAdapter.js +1 -1
  102. package/dist/smilewantedBidAdapter.js +1 -1
  103. package/dist/sonobiBidAdapter.js +1 -1
  104. package/dist/sovrnAnalyticsAdapter.js +1 -1
  105. package/dist/sovrnBidAdapter.js +1 -1
  106. package/dist/sspBCBidAdapter.js +1 -1
  107. package/dist/stvBidAdapter.js +1 -1
  108. package/dist/sublimeBidAdapter.js +1 -1
  109. package/dist/synacormediaBidAdapter.js +1 -1
  110. package/dist/targetVideoBidAdapter.js +1 -1
  111. package/dist/teadsBidAdapter.js +1 -1
  112. package/dist/trionBidAdapter.js +1 -1
  113. package/dist/tripleliftBidAdapter.js +1 -1
  114. package/dist/ttdBidAdapter.js +1 -1
  115. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  116. package/dist/uid2IdSystem.js +1 -1
  117. package/dist/underdogmediaBidAdapter.js +1 -1
  118. package/dist/undertoneBidAdapter.js +1 -1
  119. package/dist/vidazooBidAdapter.js +1 -1
  120. package/dist/videobyteBidAdapter.js +1 -1
  121. package/dist/visxBidAdapter.js +1 -1
  122. package/dist/vuukleBidAdapter.js +1 -1
  123. package/dist/widespaceBidAdapter.js +1 -1
  124. package/dist/winrBidAdapter.js +1 -1
  125. package/dist/yahoosspBidAdapter.js +1 -1
  126. package/dist/yieldmoBidAdapter.js +1 -1
  127. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  128. package/modules/adqueryBidAdapter.js +21 -18
  129. package/modules/ixBidAdapter.js +285 -53
  130. package/modules/kargoBidAdapter.js +4 -0
  131. package/modules/mediasquareBidAdapter.js +19 -23
  132. package/modules/oxxionRtdProvider.js +124 -11
  133. package/modules/rubiconBidAdapter.js +13 -1
  134. package/modules/yahoosspBidAdapter.js +8 -7
  135. package/package.json +1 -1
  136. package/test/spec/modules/ixBidAdapter_spec.js +745 -3
  137. package/test/spec/modules/mediasquareBidAdapter_spec.js +3 -0
  138. package/test/spec/modules/oxxionRtdProvider_spec.js +113 -1
  139. package/test/spec/modules/rubiconBidAdapter_spec.js +41 -0
  140. package/test/spec/modules/yahoosspBidAdapter_spec.js +54 -24
@@ -99,6 +99,7 @@ describe('MediaSquare bid adapter tests', function () {
99
99
  'bid_id': 'aaaa1234',
100
100
  'adomain': ['test.com'],
101
101
  'context': 'instream',
102
+ 'increment': 1.0,
102
103
  }],
103
104
  }};
104
105
 
@@ -166,6 +167,8 @@ describe('MediaSquare bid adapter tests', function () {
166
167
  expect(bid.mediasquare.bidder).to.equal('msqClassic');
167
168
  expect(bid.mediasquare.context).to.exist;
168
169
  expect(bid.mediasquare.context).to.equal('instream');
170
+ expect(bid.mediasquare.increment).to.exist;
171
+ expect(bid.mediasquare.increment).to.equal(1.0);
169
172
  expect(bid.mediasquare.code).to.equal([DEFAULT_PARAMS[0].params.owner, DEFAULT_PARAMS[0].params.code].join('/'));
170
173
  expect(bid.meta).to.exist;
171
174
  expect(bid.meta.advertiserDomains).to.exist;
@@ -6,7 +6,10 @@ const utils = require('src/utils.js');
6
6
  const moduleConfig = {
7
7
  params: {
8
8
  domain: 'test.endpoint',
9
- contexts: ['instream', 'outstream']
9
+ contexts: ['instream', 'outstream'],
10
+ samplingRate: 10,
11
+ threshold: false,
12
+ bidders: ['appnexus', 'mediasquare'],
10
13
  }
11
14
  };
12
15
 
@@ -31,6 +34,14 @@ let request = {
31
34
  ],
32
35
  'transactionId': 'de664ccb-e18b-4436-aeb0-362382eb1b41'
33
36
  },
37
+ {
38
+ 'code': 'msq_tag_200125_banner',
39
+ 'mediaTypes': { 'banner': { 'sizes': [[300, 250]] } },
40
+ 'bids': [
41
+ {'bidder': 'appnexusAst', 'params': {'placementId': 345678}},
42
+ ],
43
+ 'transactionId': 'de664ccb-e18b-4436-aeb0-362382eb1b41'
44
+ }
34
45
  ]
35
46
  };
36
47
 
@@ -102,6 +113,93 @@ let bids = [{
102
113
  },
103
114
  ];
104
115
 
116
+ let originalBidderRequests = [{
117
+ 'bidderCode': 'rubicon',
118
+ 'auctionId': 'dd42b870-2072-4b71-8ab7-e7789b14c5ce',
119
+ 'bidderRequestId': '16c2bceb2e891a',
120
+ 'bids': [
121
+ {
122
+ 'bidder': 'rubicon',
123
+ 'params': {
124
+ 'accountId': 1234,
125
+ 'siteId': 2345,
126
+ 'zoneId': 3456
127
+ },
128
+ 'auctionId': 'dd42b870-2072-4b71-8ab7-e7789b14c5ce',
129
+ 'mediaTypes': {'banner': {'sizes': [[970, 250]]}},
130
+ 'adUnitCode': 'adunit1',
131
+ 'transactionId': '8f20b49c-5e47-4bb5-a7d5-0b816cf527f3',
132
+ 'bidId': '2d9920072ab028',
133
+ 'bidderRequestId': '16c2bceb2e891a',
134
+ },
135
+ {
136
+ 'bidder': 'rubicon',
137
+ 'params': {
138
+ 'accountId': 1234,
139
+ 'siteId': 2345,
140
+ 'zoneId': 4567
141
+ },
142
+ 'auctionId': 'dd42b870-2072-4b71-8ab7-e7789b14c5ce',
143
+ 'mediaTypes': {'banner': {'sizes': [[300, 250]]}},
144
+ 'adUnitCode': 'adunit2',
145
+ 'transactionId': '4161f09e-7870-4486-b2a6-b4158a327bc4',
146
+ 'bidId': '331c3d708f4864',
147
+ 'bidderRequestId': '16c2bceb2e891a',
148
+ 'src': 'client',
149
+ }
150
+ ],
151
+ 'auctionStart': 1683383333809,
152
+ 'timeout': 3000,
153
+ 'gdprConsent': {
154
+ 'consentString': 'consent_hash',
155
+ 'gdprApplies': true,
156
+ 'apiVersion': 2
157
+ }
158
+ },
159
+ {
160
+ 'bidderCode': 'appnexusAst',
161
+ 'auctionId': 'dd42b870-2072-4b71-8ab7-e7789b14c5ce',
162
+ 'bidderRequestId': '4d83b8c60d45e7',
163
+ 'bids': [
164
+ {
165
+ 'bidder': 'appnexusAst',
166
+ 'params': {
167
+ 'placementId': 10471298
168
+ },
169
+ 'auctionId': 'dd42b870-2072-4b71-8ab7-e7789b14c5ce',
170
+ 'mediaTypes': {'banner': {'sizes': [[300, 250]]}},
171
+ 'adUnitCode': 'adunit2',
172
+ 'transactionId': '4161f09e-7870-4486-b2a6-b4158a327bc4',
173
+ 'bidId': '5b7cd5abc6aea3',
174
+ 'bidderRequestId': '4d83b8c60d45e7',
175
+ }
176
+ ],
177
+ 'auctionStart': 1683383333809,
178
+ 'timeout': 3000,
179
+ 'gdprConsent': {
180
+ 'consentString': 'consent_hash',
181
+ 'gdprApplies': true,
182
+ 'apiVersion': 2
183
+ }
184
+ }
185
+ ];
186
+
187
+ let bidInterests = [
188
+ {'id': 0, 'rate': 50.0, 'suggestion': true},
189
+ {'id': 1, 'rate': 12.0, 'suggestion': false},
190
+ {'id': 2, 'rate': 0.0, 'suggestion': true},
191
+ {'id': 3, 'rate': 0.0, 'suggestion': false},
192
+ ];
193
+
194
+ const userConsent = {
195
+ 'gdpr': {
196
+ 'consentString': 'consent_hash'
197
+ },
198
+ 'usp': null,
199
+ 'gpp': null,
200
+ 'coppa': false
201
+ };
202
+
105
203
  describe('oxxionRtdProvider', () => {
106
204
  describe('Oxxion RTD sub module', () => {
107
205
  it('should init, return true, and set the params', () => {
@@ -117,6 +215,20 @@ describe('oxxionRtdProvider', () => {
117
215
  oxxionSubmodule.onBidResponseEvent(auctionEnd.bidsReceived[0], moduleConfig);
118
216
  oxxionSubmodule.onBidResponseEvent(auctionEnd.bidsReceived[1], moduleConfig);
119
217
  });
218
+ it('check bid filtering', function() {
219
+ let requestsList = oxxionSubmodule.getRequestsList(request);
220
+ expect(requestsList.length).to.equal(4);
221
+ expect(requestsList[0]).to.have.property('id');
222
+ expect(request.adUnits[0].bids[0]).to.have.property('_id');
223
+ expect(requestsList[0].id).to.equal(request.adUnits[0].bids[0]._id);
224
+ const [filteredBiddderRequests, filteredBids] = oxxionSubmodule.getFilteredAdUnitsOnBidRates(bidInterests, request.adUnits, moduleConfig.params, false);
225
+ expect(filteredBids.length).to.equal(1);
226
+ expect(filteredBiddderRequests.length).to.equal(3);
227
+ expect(filteredBiddderRequests[0]).to.have.property('bids');
228
+ expect(filteredBiddderRequests[0].bids.length).to.equal(1);
229
+ expect(filteredBiddderRequests[1]).to.have.property('bids');
230
+ expect(filteredBiddderRequests[1].bids.length).to.equal(1);
231
+ });
120
232
  it('check vastImpUrl', function() {
121
233
  expect(auctionEnd.bidsReceived[0]).to.have.property('vastImpUrl');
122
234
  let expectVastImpUrl = 'https://' + moduleConfig.params.domain + '.oxxion.io/analytics/vast_imp?';
@@ -807,6 +807,29 @@ describe('the rubicon adapter', function () {
807
807
  });
808
808
  });
809
809
 
810
+ describe('GPP Consent', function () {
811
+ it('should send gpp information if bidderRequest has a value for gppConsent', function () {
812
+ bidderRequest.gppConsent = {
813
+ gppString: 'consent',
814
+ applicableSections: 2
815
+ };
816
+ let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
817
+ let data = parseQuery(request.data);
818
+ delete bidderRequest.gppConsent;
819
+
820
+ expect(data['gpp']).to.equal('consent');
821
+ expect(data['gpp_sid']).to.equal('2');
822
+ });
823
+
824
+ it('should not send gpp information if bidderRequest does not have a value for gppConsent', function () {
825
+ let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
826
+ let data = parseQuery(request.data);
827
+
828
+ expect(data['gpp']).to.equal(undefined);
829
+ expect(data['gpp_sid']).to.equal(undefined);
830
+ });
831
+ });
832
+
810
833
  describe('first party data', function () {
811
834
  it('should not have any tg_v or tg_i params if all are undefined', function () {
812
835
  let params = {
@@ -3634,6 +3657,24 @@ describe('the rubicon adapter', function () {
3634
3657
  type: 'iframe', url: `${emilyUrl}?gdpr=1&gdpr_consent=foo&us_privacy=1NYN`
3635
3658
  });
3636
3659
  });
3660
+
3661
+ it('should pass gpp params when gppConsent is present', function () {
3662
+ expect(spec.getUserSyncs({iframeEnabled: true}, {}, {}, undefined, {
3663
+ gppString: 'foo',
3664
+ applicableSections: [2]
3665
+ })).to.deep.equal({
3666
+ type: 'iframe', url: `${emilyUrl}?gpp=foo&gpp_sid=2`
3667
+ });
3668
+ });
3669
+
3670
+ it('should pass multiple sid\'s when multiple are present', function () {
3671
+ expect(spec.getUserSyncs({iframeEnabled: true}, {}, {}, undefined, {
3672
+ gppString: 'foo',
3673
+ applicableSections: [2, 5]
3674
+ })).to.deep.equal({
3675
+ type: 'iframe', url: `${emilyUrl}?gpp=foo&gpp_sid=2,5`
3676
+ });
3677
+ });
3637
3678
  });
3638
3679
 
3639
3680
  describe('get price granularity', function () {
@@ -271,33 +271,63 @@ describe('YahooSSP Bid Adapter:', () => {
271
271
  });
272
272
 
273
273
  describe('user consent parameters are updated', () => {
274
- let syncOptions = {
274
+ const syncOptions = {
275
275
  iframeEnabled: true,
276
276
  pixelEnabled: true
277
277
  };
278
- let pixelObjects = spec.getUserSyncs(
279
- syncOptions,
280
- SERVER_RESPONSES,
281
- bidderRequest.gdprConsent,
282
- bidderRequest.uspConsent,
283
- bidderRequest.gppConsent
284
- );
285
- pixelObjects.forEach(pixelObject => {
286
- let url = pixelObject.url;
287
- let urlParams = new URL(url).searchParams;
288
- const expectedParams = {
289
- 'baz': 'true',
290
- 'gdpr_consent': bidderRequest.gdprConsent.consentString,
291
- 'gdpr': bidderRequest.gdprConsent.gdprApplies ? '1' : '0',
292
- 'us_privacy': bidderRequest.uspConsent,
293
- 'gpp': bidderRequest.gppConsent.gppString,
294
- 'gpp_sid': Array.isArray(bidderRequest.gppConsent.applicableSections) ? bidderRequest.gppConsent.applicableSections.join(',') : ''
295
- }
296
- for (const [key, value] of Object.entries(expectedParams)) {
297
- it(`Updates the ${key} consent param in user sync URL ${url}`, () => {
298
- expect(urlParams.get(key)).to.equal(value);
299
- });
300
- };
278
+
279
+ describe('when all consent data is set', () => {
280
+ const pixelObjects = spec.getUserSyncs(
281
+ syncOptions,
282
+ SERVER_RESPONSES,
283
+ bidderRequest.gdprConsent,
284
+ bidderRequest.uspConsent,
285
+ bidderRequest.gppConsent
286
+ );
287
+ pixelObjects.forEach(pixelObject => {
288
+ let url = pixelObject.url;
289
+ let urlParams = new URL(url).searchParams;
290
+ const expectedParams = {
291
+ 'baz': 'true',
292
+ 'gdpr_consent': bidderRequest.gdprConsent.consentString,
293
+ 'gdpr': bidderRequest.gdprConsent.gdprApplies ? '1' : '0',
294
+ 'us_privacy': bidderRequest.uspConsent,
295
+ 'gpp': bidderRequest.gppConsent.gppString,
296
+ 'gpp_sid': Array.isArray(bidderRequest.gppConsent.applicableSections) ? bidderRequest.gppConsent.applicableSections.join(',') : ''
297
+ }
298
+ for (const [key, value] of Object.entries(expectedParams)) {
299
+ it(`Updates the ${key} consent param in user sync URL ${url}`, () => {
300
+ expect(urlParams.get(key)).to.equal(value);
301
+ });
302
+ };
303
+ });
304
+ });
305
+
306
+ describe('when no consent data is set', () => {
307
+ const pixelObjects = spec.getUserSyncs(
308
+ syncOptions,
309
+ SERVER_RESPONSES,
310
+ undefined,
311
+ undefined,
312
+ undefined
313
+ );
314
+ pixelObjects.forEach(pixelObject => {
315
+ let url = pixelObject.url;
316
+ let urlParams = new URL(url).searchParams;
317
+ const expectedParams = {
318
+ 'baz': 'true',
319
+ 'gdpr_consent': '',
320
+ 'gdpr': '0',
321
+ 'us_privacy': '',
322
+ 'gpp': '',
323
+ 'gpp_sid': ''
324
+ }
325
+ for (const [key, value] of Object.entries(expectedParams)) {
326
+ it(`Updates the ${key} consent param in user sync URL ${url}`, () => {
327
+ expect(urlParams.get(key)).to.equal(value);
328
+ });
329
+ };
330
+ });
301
331
  });
302
332
  });
303
333
  });