prebid.js 7.48.0 → 7.49.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 (171) hide show
  1. package/README.md +3 -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/admixerBidAdapter.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/appierAnalyticsAdapter.js +1 -1
  17. package/dist/appnexusBidAdapter.js +1 -1
  18. package/dist/asoBidAdapter.js +1 -1
  19. package/dist/axonixBidAdapter.js +1 -1
  20. package/dist/bidglassBidAdapter.js +1 -1
  21. package/dist/big-richmediaBidAdapter.js +1 -1
  22. package/dist/bridgewellBidAdapter.js +1 -1
  23. package/dist/brightMountainMediaBidAdapter.js +1 -1
  24. package/dist/carodaBidAdapter.js +1 -1
  25. package/dist/chtnwBidAdapter.js +1 -1
  26. package/dist/concertBidAdapter.js +1 -1
  27. package/dist/connectadBidAdapter.js +1 -1
  28. package/dist/consumableBidAdapter.js +1 -1
  29. package/dist/conversantAnalyticsAdapter.js +1 -1
  30. package/dist/conversantBidAdapter.js +1 -1
  31. package/dist/craftBidAdapter.js +1 -1
  32. package/dist/criteoBidAdapter.js +1 -1
  33. package/dist/cwireBidAdapter.js +1 -1
  34. package/dist/dspxBidAdapter.js +1 -1
  35. package/dist/eplanningBidAdapter.js +1 -1
  36. package/dist/feedadBidAdapter.js +1 -1
  37. package/dist/finativeBidAdapter.js +1 -1
  38. package/dist/freewheel-sspBidAdapter.js +1 -1
  39. package/dist/glimpseBidAdapter.js +1 -1
  40. package/dist/gmosspBidAdapter.js +1 -1
  41. package/dist/goldbachBidAdapter.js +1 -1
  42. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  43. package/dist/greenbidsRtdProvider.js +1 -1
  44. package/dist/gridBidAdapter.js +1 -1
  45. package/dist/gumgumBidAdapter.js +1 -1
  46. package/dist/h12mediaBidAdapter.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 +129 -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/parrableIdSystem.js +1 -1
  79. package/dist/pixfutureBidAdapter.js +1 -1
  80. package/dist/prebid-core.js +1 -1
  81. package/dist/prebidServerBidAdapter.js +1 -1
  82. package/dist/publinkIdSystem.js +1 -1
  83. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  84. package/dist/pubmaticBidAdapter.js +1 -1
  85. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  86. package/dist/pxyzBidAdapter.js +1 -1
  87. package/dist/quantcastBidAdapter.js +1 -1
  88. package/dist/readpeakBidAdapter.js +1 -1
  89. package/dist/relaidoBidAdapter.js +1 -1
  90. package/dist/retailspotBidAdapter.js +1 -0
  91. package/dist/rhythmoneBidAdapter.js +1 -1
  92. package/dist/riseBidAdapter.js +1 -1
  93. package/dist/rubiconAnalyticsAdapter.js +1 -1
  94. package/dist/rubiconBidAdapter.js +1 -1
  95. package/dist/seedingAllianceBidAdapter.js +1 -1
  96. package/dist/seedtagBidAdapter.js +1 -1
  97. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  98. package/dist/sharethroughBidAdapter.js +1 -1
  99. package/dist/shinezBidAdapter.js +1 -1
  100. package/dist/smaatoBidAdapter.js +1 -1
  101. package/dist/smartadserverBidAdapter.js +1 -1
  102. package/dist/smartxBidAdapter.js +1 -1
  103. package/dist/smilewantedBidAdapter.js +1 -1
  104. package/dist/sonobiBidAdapter.js +1 -1
  105. package/dist/sovrnAnalyticsAdapter.js +1 -1
  106. package/dist/sovrnBidAdapter.js +1 -1
  107. package/dist/sspBCBidAdapter.js +1 -1
  108. package/dist/stvBidAdapter.js +1 -1
  109. package/dist/sublimeBidAdapter.js +1 -1
  110. package/dist/synacormediaBidAdapter.js +1 -1
  111. package/dist/targetVideoBidAdapter.js +1 -1
  112. package/dist/teadsBidAdapter.js +1 -1
  113. package/dist/trionBidAdapter.js +1 -1
  114. package/dist/tripleliftBidAdapter.js +1 -1
  115. package/dist/ttdBidAdapter.js +1 -1
  116. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  117. package/dist/uid2IdSystem.js +1 -1
  118. package/dist/underdogmediaBidAdapter.js +1 -1
  119. package/dist/undertoneBidAdapter.js +1 -1
  120. package/dist/vidazooBidAdapter.js +1 -1
  121. package/dist/videobyteBidAdapter.js +1 -1
  122. package/dist/visxBidAdapter.js +1 -1
  123. package/dist/vuukleBidAdapter.js +1 -1
  124. package/dist/widespaceBidAdapter.js +1 -1
  125. package/dist/winrBidAdapter.js +1 -1
  126. package/dist/yahoosspBidAdapter.js +1 -1
  127. package/dist/yieldlabBidAdapter.js +1 -1
  128. package/dist/yieldmoBidAdapter.js +1 -1
  129. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  130. package/modules/adgenerationBidAdapter.js +24 -15
  131. package/modules/admixerBidAdapter.js +15 -9
  132. package/modules/aidemBidAdapter.js +3 -1
  133. package/modules/ixBidAdapter.js +65 -47
  134. package/modules/kueezRtbBidAdapter.js +30 -33
  135. package/modules/mgidBidAdapter.js +9 -8
  136. package/modules/minutemediaBidAdapter.js +6 -0
  137. package/modules/minutemediaplusBidAdapter.js +30 -32
  138. package/modules/nexx360BidAdapter.js +2 -1
  139. package/modules/prebidServerBidAdapter/index.js +1 -3
  140. package/modules/prebidServerBidAdapter/ortbConverter.js +5 -1
  141. package/modules/pubmaticAnalyticsAdapter.js +3 -2
  142. package/modules/retailspotBidAdapter .md +32 -0
  143. package/modules/retailspotBidAdapter.js +186 -0
  144. package/modules/riseBidAdapter.js +6 -0
  145. package/modules/ttdBidAdapter.js +23 -22
  146. package/modules/vidazooBidAdapter.js +28 -32
  147. package/modules/yieldlabBidAdapter.js +27 -5
  148. package/package.json +1 -1
  149. package/src/adapterManager.js +4 -0
  150. package/src/adapters/bidderFactory.js +1 -0
  151. package/src/auction.js +2 -0
  152. package/src/prebid.js +36 -12
  153. package/src/utils/cpm.js +4 -1
  154. package/test/spec/modules/adgenerationBidAdapter_spec.js +6 -6
  155. package/test/spec/modules/admixerBidAdapter_spec.js +64 -25
  156. package/test/spec/modules/aidemBidAdapter_spec.js +3 -0
  157. package/test/spec/modules/ixBidAdapter_spec.js +66 -1
  158. package/test/spec/modules/kueezRtbBidAdapter_spec.js +3 -2
  159. package/test/spec/modules/mgidBidAdapter_spec.js +9 -9
  160. package/test/spec/modules/minutemediaBidAdapter_spec.js +18 -0
  161. package/test/spec/modules/minutemediaplusBidAdapter_spec.js +3 -2
  162. package/test/spec/modules/prebidServerBidAdapter_spec.js +96 -1
  163. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +6 -1
  164. package/test/spec/modules/retailspotBidAdapter_spec.js +426 -0
  165. package/test/spec/modules/riseBidAdapter_spec.js +18 -0
  166. package/test/spec/modules/ttdBidAdapter_spec.js +129 -2
  167. package/test/spec/modules/vidazooBidAdapter_spec.js +3 -2
  168. package/test/spec/modules/yieldlabBidAdapter_spec.js +8 -1
  169. package/test/spec/unit/core/bidderFactory_spec.js +9 -9
  170. package/test/spec/unit/pbjs_api_spec.js +59 -1
  171. package/test/spec/unit/utils/cpm_spec.js +56 -1
@@ -191,6 +191,7 @@ const NATIVE_RESPONSE = Object.assign({}, RESPONSE, {
191
191
  url: 'https://localhost:8080/yl-logo100x100.jpg',
192
192
  w: 100,
193
193
  h: 100,
194
+ type: 3,
194
195
  },
195
196
  },
196
197
  {
@@ -557,7 +558,6 @@ describe('yieldlabBidAdapter', () => {
557
558
 
558
559
  it('should add adUrl and native assets when type is Native', () => {
559
560
  const result = spec.interpretResponse({body: [NATIVE_RESPONSE]}, {validBidRequests: [NATIVE_REQUEST()], queryParams: REQPARAMS});
560
-
561
561
  expect(result[0].requestId).to.equal('2d925f27f5079f');
562
562
  expect(result[0].cpm).to.equal(0.01);
563
563
  expect(result[0].mediaType).to.equal('native');
@@ -569,6 +569,13 @@ describe('yieldlabBidAdapter', () => {
569
569
  expect(result[0].native.image.height).to.equal(100);
570
570
  expect(result[0].native.clickUrl).to.equal('https://www.yieldlab.de');
571
571
  expect(result[0].native.impressionTrackers.length).to.equal(3);
572
+ expect(result[0].native.assets.length).to.equal(3);
573
+ const titleAsset = result[0].native.assets.find(asset => 'title' in asset);
574
+ const imageAsset = result[0].native.assets.find(asset => 'img' in asset);
575
+ const bodyAsset = result[0].native.assets.find(asset => 'data' in asset);
576
+ expect(titleAsset).to.exist.and.to.have.nested.property('id', 1)
577
+ expect(imageAsset).to.exist.and.to.have.nested.property('id', 2)
578
+ expect(bodyAsset).to.exist.and.to.have.nested.property('id', 3)
572
579
  });
573
580
 
574
581
  it('should add adUrl and default native assets when type is Native', () => {
@@ -1,24 +1,24 @@
1
1
  import {
2
+ addComponentAuction,
3
+ isValid,
2
4
  newBidder,
3
- registerBidder,
4
5
  preloadBidderMappingFile,
5
- storage,
6
- isValid,
7
- addComponentAuction
6
+ registerBidder,
7
+ storage
8
8
  } from 'src/adapters/bidderFactory.js';
9
9
  import adapterManager from 'src/adapterManager.js';
10
10
  import * as ajax from 'src/ajax.js';
11
- import { expect } from 'chai';
12
- import { userSync } from 'src/userSync.js'
11
+ import {expect} from 'chai';
12
+ import {userSync} from 'src/userSync.js';
13
13
  import * as utils from 'src/utils.js';
14
- import { config } from 'src/config.js';
15
- import { server } from 'test/mocks/xhr.js';
14
+ import {config} from 'src/config.js';
15
+ import {server} from 'test/mocks/xhr.js';
16
16
  import CONSTANTS from 'src/constants.json';
17
17
  import * as events from 'src/events.js';
18
18
  import {hook} from '../../../../src/hook.js';
19
19
  import {auctionManager} from '../../../../src/auctionManager.js';
20
20
  import {stubAuctionIndex} from '../../../helpers/indexStub.js';
21
- import { bidderSettings } from '../../../../src/bidderSettings.js';
21
+ import {bidderSettings} from '../../../../src/bidderSettings.js';
22
22
  import {decorateAdUnitsWithNativeParams} from '../../../../src/native.js';
23
23
 
24
24
  const CODE = 'sampleBidder';
@@ -2501,7 +2501,6 @@ describe('Unit: Prebid Module', function () {
2501
2501
  }];
2502
2502
  let adUnitCodes = ['adUnit-code'];
2503
2503
  let auction = auctionModule.newAuction({adUnits, adUnitCodes, callback: function() {}, cbTimeout: timeout});
2504
-
2505
2504
  adUnits[0]['mediaTypes'] = { native: {} };
2506
2505
  adUnitCodes = ['adUnit-code'];
2507
2506
  let auction1 = auctionModule.newAuction({adUnits, adUnitCodes, callback: function() {}, cbTimeout: timeout});
@@ -3546,4 +3545,63 @@ describe('Unit: Prebid Module', function () {
3546
3545
  expect(bids[0].adId).to.equal('adid-1');
3547
3546
  });
3548
3547
  });
3548
+
3549
+ describe('deferred billing', function () {
3550
+ const sandbox = sinon.createSandbox();
3551
+
3552
+ let adUnits = [
3553
+ {
3554
+ code: 'adUnit-code-1',
3555
+ mediaTypes: { banner: { sizes: [[300, 250], [300, 600]] } },
3556
+ transactionId: '1234567890',
3557
+ bids: [
3558
+ { bidder: 'pubmatic', params: {placementId: '10433394'}, adUnitCode: 'adUnit-code-1' }
3559
+ ]
3560
+ },
3561
+ {
3562
+ code: 'adUnit-code-2',
3563
+ deferBilling: true,
3564
+ mediaTypes: { banner: { sizes: [[300, 250], [300, 600]] } },
3565
+ transactionId: '0987654321',
3566
+ bids: [
3567
+ { bidder: 'pubmatic', params: {placementId: '10433394'}, adUnitCode: 'adUnit-code-2' }
3568
+ ]
3569
+ }
3570
+ ];
3571
+
3572
+ let winningBid1 = { adapterCode: 'pubmatic', bidder: 'pubmatic', params: {placementId: '10433394'}, adUnitCode: 'adUnit-code-1', transactionId: '1234567890', adId: 'abcdefg' }
3573
+ let winningBid2 = { adapterCode: 'pubmatic', bidder: 'pubmatic', params: {placementId: '10433394'}, adUnitCode: 'adUnit-code-2', transactionId: '0987654321' }
3574
+ let adUnitCodes = ['adUnit-code-1', 'adUnit-code-2'];
3575
+ let auction = auctionModule.newAuction({adUnits, adUnitCodes, callback: function() {}, cbTimeout: 2000});
3576
+
3577
+ beforeEach(function () {
3578
+ sandbox.spy(adapterManager, 'callBidWonBidder');
3579
+ sandbox.spy(adapterManager, 'callBidBillableBidder');
3580
+ sandbox.stub(auctionManager, 'getBidsReceived').returns([winningBid1]);
3581
+ });
3582
+
3583
+ afterEach(function () {
3584
+ sandbox.resetHistory();
3585
+ sandbox.restore();
3586
+ });
3587
+
3588
+ it('should by default invoke callBidWonBidder and callBidBillableBidder', function () {
3589
+ auction.addWinningBid(winningBid1);
3590
+ sinon.assert.calledOnce(adapterManager.callBidWonBidder);
3591
+ sinon.assert.calledOnce(adapterManager.callBidBillableBidder);
3592
+ });
3593
+
3594
+ it('should only invoke callBidWonBidder and NOT callBidBillableBidder if deferBilling is present and true within the winning adUnit object', function () {
3595
+ auction.addWinningBid(winningBid2);
3596
+ sinon.assert.calledOnce(adapterManager.callBidWonBidder);
3597
+ sinon.assert.notCalled(adapterManager.callBidBillableBidder);
3598
+ });
3599
+
3600
+ it('should invoke callBidBillableBidder when pbjs.triggerBilling is invoked', function () {
3601
+ $$PREBID_GLOBAL$$.triggerBilling(winningBid1);
3602
+ sinon.assert.calledOnce(auctionManager.getBidsReceived);
3603
+ sinon.assert.notCalled(adapterManager.callBidWonBidder);
3604
+ sinon.assert.calledOnce(adapterManager.callBidBillableBidder);
3605
+ });
3606
+ });
3549
3607
  });
@@ -1,11 +1,14 @@
1
1
  import {adjustCpm} from '../../../../src/utils/cpm.js';
2
+ import {ScopedSettings} from '../../../../src/bidderSettings.js';
3
+ import {expect} from 'chai/index.js';
2
4
 
3
5
  describe('adjustCpm', () => {
4
6
  const bidderCode = 'mockBidder';
5
7
  let adjustmentFn, bs, index;
6
8
  beforeEach(() => {
7
9
  bs = {
8
- get: sinon.stub()
10
+ get: sinon.stub(),
11
+ getOwn: sinon.stub()
9
12
  }
10
13
  index = {
11
14
  getBidRequest: sinon.stub()
@@ -62,3 +65,55 @@ describe('adjustCpm', () => {
62
65
  });
63
66
  })
64
67
  });
68
+
69
+ describe('adjustAlternateBids', () => {
70
+ let bs;
71
+ afterEach(() => {
72
+ bs = null;
73
+ });
74
+
75
+ function runAdjustment(cpm, bidderCode, adapterCode) {
76
+ return adjustCpm(cpm, {bidderCode, adapterCode}, null, {bs: new ScopedSettings(() => bs)});
77
+ }
78
+
79
+ it('should fall back to the adapter adjustment fn when adjustAlternateBids is true', () => {
80
+ bs = {
81
+ adapter: {
82
+ adjustAlternateBids: true,
83
+ bidCpmAdjustment: function (cpm) {
84
+ return cpm * 2;
85
+ }
86
+ },
87
+ bidder: {}
88
+ };
89
+ expect(runAdjustment(1, 'bidder', 'adapter')).to.eql(2);
90
+ });
91
+
92
+ it('should NOT fall back to the adapter adjustment fn when adjustAlternateBids is not true', () => {
93
+ bs = {
94
+ adapter: {
95
+ bidCpmAdjustment(cpm) {
96
+ return cpm * 2
97
+ }
98
+ }
99
+ }
100
+ expect(runAdjustment(1, 'bidder', 'adapter')).to.eql(1);
101
+ });
102
+
103
+ it('should prioritize bidder adjustment fn', () => {
104
+ bs = {
105
+ adapter: {
106
+ adjustAlternateBids: true,
107
+ bidCpmAdjustment(cpm) {
108
+ return cpm * 2
109
+ }
110
+ },
111
+ bidder: {
112
+ bidCpmAdjustment(cpm) {
113
+ return cpm * 3
114
+ }
115
+ }
116
+ }
117
+ expect(runAdjustment(1, 'bidder', 'adapter')).to.eql(3);
118
+ });
119
+ });