prebid.js 6.2.0 → 6.6.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 (169) hide show
  1. package/.circleci/config.yml +1 -1
  2. package/gulpfile.js +87 -82
  3. package/integrationExamples/gpt/weboramaRtdProvider_example.html +23 -14
  4. package/karma.conf.maker.js +1 -1
  5. package/modules/.submodules.json +2 -1
  6. package/modules/33acrossBidAdapter.js +189 -102
  7. package/modules/adagioBidAdapter.js +1 -1
  8. package/modules/addefendBidAdapter.js +1 -0
  9. package/modules/adkernelBidAdapter.js +148 -62
  10. package/modules/adlooxAdServerVideo.js +2 -2
  11. package/modules/adlooxAnalyticsAdapter.js +4 -4
  12. package/modules/admanBidAdapter.js +11 -4
  13. package/modules/admixerBidAdapter.js +1 -1
  14. package/modules/adnuntiusBidAdapter.js +3 -1
  15. package/modules/adomikAnalyticsAdapter.js +27 -9
  16. package/modules/adqueryIdSystem.js +103 -0
  17. package/modules/adqueryIdSystem.md +35 -0
  18. package/modules/adxcgBidAdapter.js +311 -359
  19. package/modules/adxcgBidAdapter.md +22 -21
  20. package/modules/adyoulikeBidAdapter.js +13 -9
  21. package/modules/aniviewBidAdapter.js +1 -1
  22. package/modules/appnexusBidAdapter.js +0 -1
  23. package/modules/beopBidAdapter.js +6 -4
  24. package/modules/bidViewability.js +3 -3
  25. package/modules/bidViewabilityIO.js +3 -3
  26. package/modules/bliinkBidAdapter.js +3 -2
  27. package/modules/colossussspBidAdapter.js +7 -0
  28. package/modules/compassBidAdapter.js +208 -0
  29. package/modules/compassBidAdapter.md +79 -0
  30. package/modules/consentManagement.js +7 -1
  31. package/modules/criteoBidAdapter.js +1 -1
  32. package/modules/criteoIdSystem.js +29 -7
  33. package/modules/currency.js +2 -2
  34. package/modules/cwireBidAdapter.js +3 -0
  35. package/modules/dailyhuntBidAdapter.js +435 -0
  36. package/modules/dailyhuntBidAdapter.md +4 -0
  37. package/modules/docereeBidAdapter.js +10 -1
  38. package/modules/docereeBidAdapter.md +2 -0
  39. package/modules/dspxBidAdapter.js +1 -1
  40. package/modules/engageyaBidAdapter.js +1 -1
  41. package/modules/feedadBidAdapter.js +2 -2
  42. package/modules/feedadBidAdapter.md +4 -2
  43. package/modules/futureads.md +48 -0
  44. package/modules/glimpseBidAdapter.js +82 -47
  45. package/modules/gptPreAuction.js +55 -7
  46. package/modules/gridBidAdapter.js +4 -3
  47. package/modules/gumgumBidAdapter.js +2 -2
  48. package/modules/idImportLibrary.js +45 -8
  49. package/modules/idImportLibrary.md +4 -0
  50. package/modules/improvedigitalBidAdapter.js +42 -4
  51. package/modules/instreamTracking.js +4 -4
  52. package/modules/invibesBidAdapter.js +49 -5
  53. package/modules/invibesBidAdapter.md +2 -1
  54. package/modules/ixBidAdapter.js +53 -18
  55. package/modules/kinessoIdSystem.js +1 -1
  56. package/modules/limelightDigitalBidAdapter.js +2 -1
  57. package/modules/livewrappedAnalyticsAdapter.js +3 -1
  58. package/modules/livewrappedBidAdapter.js +8 -2
  59. package/modules/loglyliftBidAdapter.js +79 -0
  60. package/modules/loglyliftBidAdapter.md +55 -0
  61. package/modules/lotamePanoramaIdSystem.js +80 -8
  62. package/modules/mediasquareBidAdapter.js +1 -9
  63. package/modules/nextMillenniumBidAdapter.js +39 -7
  64. package/modules/oguryBidAdapter.js +9 -2
  65. package/modules/onetagBidAdapter.js +4 -2
  66. package/modules/optimeraRtdProvider.js +8 -1
  67. package/modules/ozoneBidAdapter.js +21 -64
  68. package/modules/prebidServerBidAdapter/index.js +16 -12
  69. package/modules/proxistoreBidAdapter.js +0 -2
  70. package/modules/pubgeniusBidAdapter.js +1 -1
  71. package/modules/pubmaticAnalyticsAdapter.js +16 -0
  72. package/modules/pubxaiAnalyticsAdapter.js +17 -0
  73. package/modules/richaudienceBidAdapter.js +4 -4
  74. package/modules/riseBidAdapter.js +1 -1
  75. package/modules/rtbhouseBidAdapter.js +14 -4
  76. package/modules/rtdModule/index.js +49 -18
  77. package/modules/rubiconBidAdapter.js +31 -19
  78. package/modules/sharedIdSystem.js +27 -1
  79. package/modules/showheroes-bsBidAdapter.js +13 -2
  80. package/modules/tappxBidAdapter.js +8 -5
  81. package/modules/targetVideoBidAdapter.js +187 -0
  82. package/modules/targetVideoBidAdapter.md +34 -0
  83. package/modules/teadsBidAdapter.js +1 -2
  84. package/modules/telariaBidAdapter.js +2 -2
  85. package/modules/trustxBidAdapter.js +8 -16
  86. package/modules/userId/eids.js +7 -1
  87. package/modules/userId/userId.md +8 -0
  88. package/modules/vidoomyBidAdapter.js +16 -10
  89. package/modules/weboramaRtdProvider.js +288 -73
  90. package/modules/weboramaRtdProvider.md +27 -10
  91. package/modules/welectBidAdapter.js +106 -0
  92. package/modules/yahoosspBidAdapter.js +5 -1
  93. package/modules/yieldmoBidAdapter.js +23 -5
  94. package/modules/zetaSspBidAdapter.md +33 -1
  95. package/modules/zeta_global_sspAnalyticsAdapter.js +97 -0
  96. package/modules/zeta_global_sspAnalyticsAdapter.md +24 -0
  97. package/modules/zeta_global_sspBidAdapter.js +22 -1
  98. package/package.json +1 -1
  99. package/plugins/pbjsGlobals.js +28 -1
  100. package/src/auction.js +2 -2
  101. package/src/config.js +27 -3
  102. package/src/hook.js +5 -1
  103. package/src/prebid.js +21 -6
  104. package/src/targeting.js +22 -1
  105. package/src/utils.js +46 -8
  106. package/test/helpers/prebidGlobal.js +1 -0
  107. package/test/spec/config_spec.js +279 -0
  108. package/test/spec/modules/33acrossBidAdapter_spec.js +300 -78
  109. package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +6 -6
  110. package/test/spec/modules/admanBidAdapter_spec.js +2 -2
  111. package/test/spec/modules/adnuntiusBidAdapter_spec.js +17 -0
  112. package/test/spec/modules/adomikAnalyticsAdapter_spec.js +9 -1
  113. package/test/spec/modules/adqueryIdSystem_spec.js +74 -0
  114. package/test/spec/modules/adxcgBidAdapter_spec.js +820 -571
  115. package/test/spec/modules/adyoulikeBidAdapter_spec.js +49 -0
  116. package/test/spec/modules/beopBidAdapter_spec.js +1 -1
  117. package/test/spec/modules/bidViewabilityIO_spec.js +2 -2
  118. package/test/spec/modules/bidViewability_spec.js +4 -4
  119. package/test/spec/modules/bliinkBidAdapter_spec.js +2 -0
  120. package/test/spec/modules/colossussspBidAdapter_spec.js +9 -0
  121. package/test/spec/modules/compassBidAdapter_spec.js +398 -0
  122. package/test/spec/modules/consentManagement_spec.js +20 -0
  123. package/test/spec/modules/criteoIdSystem_spec.js +6 -3
  124. package/test/spec/modules/cwireBidAdapter_spec.js +10 -8
  125. package/test/spec/modules/dailyhuntBidAdapter_spec.js +404 -0
  126. package/test/spec/modules/docereeBidAdapter_spec.js +9 -1
  127. package/test/spec/modules/eids_spec.js +15 -0
  128. package/test/spec/modules/feedadBidAdapter_spec.js +15 -0
  129. package/test/spec/modules/glimpseBidAdapter_spec.js +0 -18
  130. package/test/spec/modules/gptPreAuction_spec.js +177 -2
  131. package/test/spec/modules/idImportLibrary_spec.js +197 -10
  132. package/test/spec/modules/improvedigitalBidAdapter_spec.js +45 -1
  133. package/test/spec/modules/invibesBidAdapter_spec.js +119 -0
  134. package/test/spec/modules/ixBidAdapter_spec.js +112 -62
  135. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +75 -17
  136. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +22 -0
  137. package/test/spec/modules/livewrappedBidAdapter_spec.js +31 -0
  138. package/test/spec/modules/loglyliftBidAdapter_spec.js +172 -0
  139. package/test/spec/modules/lotamePanoramaIdSystem_spec.js +227 -0
  140. package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -4
  141. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +26 -1
  142. package/test/spec/modules/oguryBidAdapter_spec.js +10 -2
  143. package/test/spec/modules/optimeraRtdProvider_spec.js +14 -1
  144. package/test/spec/modules/ozoneBidAdapter_spec.js +43 -31
  145. package/test/spec/modules/prebidServerBidAdapter_spec.js +43 -0
  146. package/test/spec/modules/pubgeniusBidAdapter_spec.js +3 -3
  147. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +13 -1
  148. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +11 -0
  149. package/test/spec/modules/realTimeDataModule_spec.js +147 -48
  150. package/test/spec/modules/richaudienceBidAdapter_spec.js +42 -2
  151. package/test/spec/modules/riseBidAdapter_spec.js +1 -1
  152. package/test/spec/modules/rtbhouseBidAdapter_spec.js +20 -0
  153. package/test/spec/modules/rubiconBidAdapter_spec.js +65 -9
  154. package/test/spec/modules/sharedIdSystem_spec.js +52 -6
  155. package/test/spec/modules/showheroes-bsBidAdapter_spec.js +2 -0
  156. package/test/spec/modules/tappxBidAdapter_spec.js +0 -19
  157. package/test/spec/modules/targetVideoBidAdapter_spec.js +96 -0
  158. package/test/spec/modules/teadsBidAdapter_spec.js +14 -59
  159. package/test/spec/modules/userId_spec.js +68 -19
  160. package/test/spec/modules/weboramaRtdProvider_spec.js +408 -214
  161. package/test/spec/modules/welectBidAdapter_spec.js +211 -0
  162. package/test/spec/modules/yahoosspBidAdapter_spec.js +28 -1
  163. package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +427 -0
  164. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +33 -1
  165. package/test/spec/unit/core/targeting_spec.js +72 -0
  166. package/test/spec/unit/pbjs_api_spec.js +3 -1
  167. package/test/spec/utils_spec.js +38 -0
  168. package/test/test_deps.js +3 -0
  169. package/test/test_index.js +1 -3
@@ -1,4 +1,5 @@
1
1
  import {spec} from '../../../modules/zeta_global_sspBidAdapter.js'
2
+ import {BANNER, VIDEO} from '../../../src/mediaTypes';
2
3
 
3
4
  describe('Zeta Ssp Bid Adapter', function () {
4
5
  const eids = [
@@ -143,7 +144,22 @@ describe('Zeta Ssp Bid Adapter', function () {
143
144
  'https://example2.com'
144
145
  ],
145
146
  h: 150,
146
- w: 200
147
+ w: 200,
148
+ ext: {
149
+ bidtype: 'video'
150
+ }
151
+ },
152
+ {
153
+ id: 'auctionId3',
154
+ impid: 'impId3',
155
+ price: 0.2,
156
+ adm: '<?xml version=\\"1.0\\"?><VAST version=\\"4.0\\">',
157
+ crid: 'creativeId3',
158
+ adomain: [
159
+ 'https://example3.com'
160
+ ],
161
+ h: 400,
162
+ w: 300
147
163
  }
148
164
  ]
149
165
  }
@@ -159,6 +175,8 @@ describe('Zeta Ssp Bid Adapter', function () {
159
175
  const receivedBid1 = response.body.seatbid[0].bid[0];
160
176
  expect(bid1).to.not.be.empty;
161
177
  expect(bid1.ad).to.equal(receivedBid1.adm);
178
+ expect(bid1.vastXml).to.be.undefined;
179
+ expect(bid1.mediaType).to.equal(BANNER);
162
180
  expect(bid1.cpm).to.equal(receivedBid1.price);
163
181
  expect(bid1.height).to.equal(receivedBid1.h);
164
182
  expect(bid1.width).to.equal(receivedBid1.w);
@@ -169,11 +187,25 @@ describe('Zeta Ssp Bid Adapter', function () {
169
187
  const receivedBid2 = response.body.seatbid[0].bid[1];
170
188
  expect(bid2).to.not.be.empty;
171
189
  expect(bid2.ad).to.equal(receivedBid2.adm);
190
+ expect(bid2.vastXml).to.equal(receivedBid2.adm);
191
+ expect(bid2.mediaType).to.equal(VIDEO);
172
192
  expect(bid2.cpm).to.equal(receivedBid2.price);
173
193
  expect(bid2.height).to.equal(receivedBid2.h);
174
194
  expect(bid2.width).to.equal(receivedBid2.w);
175
195
  expect(bid2.requestId).to.equal(receivedBid2.impid);
176
196
  expect(bid2.meta.advertiserDomains).to.equal(receivedBid2.adomain);
197
+
198
+ const bid3 = bidResponse[2];
199
+ const receivedBid3 = response.body.seatbid[0].bid[2];
200
+ expect(bid3).to.not.be.empty;
201
+ expect(bid3.ad).to.equal(receivedBid3.adm);
202
+ expect(bid3.vastXml).to.equal(receivedBid3.adm);
203
+ expect(bid3.mediaType).to.equal(VIDEO);
204
+ expect(bid3.cpm).to.equal(receivedBid3.price);
205
+ expect(bid3.height).to.equal(receivedBid3.h);
206
+ expect(bid3.width).to.equal(receivedBid3.w);
207
+ expect(bid3.requestId).to.equal(receivedBid3.impid);
208
+ expect(bid3.meta.advertiserDomains).to.equal(receivedBid3.adomain);
177
209
  });
178
210
 
179
211
  it('Different cases for user syncs', function () {
@@ -5,6 +5,7 @@ import { createBidReceived } from 'test/fixtures/fixtures.js';
5
5
  import CONSTANTS from 'src/constants.json';
6
6
  import { auctionManager } from 'src/auctionManager.js';
7
7
  import * as utils from 'src/utils.js';
8
+ import {deepClone} from 'src/utils.js';
8
9
 
9
10
  const bid1 = {
10
11
  'bidderCode': 'rubicon',
@@ -545,6 +546,77 @@ describe('targeting tests', function () {
545
546
  });
546
547
  });
547
548
 
549
+ describe('targetingControls.addTargetingKeys', function () {
550
+ let winningBid = null;
551
+
552
+ beforeEach(function () {
553
+ bidsReceived = [bid1, bid2, nativeBid1, nativeBid2].map(deepClone);
554
+ bidsReceived.forEach((bid) => {
555
+ bid.adserverTargeting[CONSTANTS.TARGETING_KEYS.SOURCE] = 'test-source';
556
+ bid.adUnitCode = 'adunit';
557
+ if (winningBid == null || bid.cpm > winningBid.cpm) {
558
+ winningBid = bid;
559
+ }
560
+ });
561
+ enableSendAllBids = true;
562
+ });
563
+
564
+ const expandKey = function (key) {
565
+ const keys = new Set();
566
+ if (winningBid.adserverTargeting[key] != null) {
567
+ keys.add(key);
568
+ }
569
+ bidsReceived
570
+ .filter((bid) => bid.adserverTargeting[key] != null)
571
+ .map((bid) => bid.bidderCode)
572
+ .forEach((code) => keys.add(`${key}_${code}`.substr(0, 20)));
573
+ return new Array(...keys);
574
+ }
575
+
576
+ const targetingResult = function () {
577
+ return targetingInstance.getAllTargeting(['adunit'])['adunit'];
578
+ }
579
+
580
+ it('should include added keys', function () {
581
+ config.setConfig({
582
+ targetingControls: {
583
+ addTargetingKeys: ['SOURCE']
584
+ }
585
+ });
586
+ expect(targetingResult()).to.include.all.keys(...expandKey(CONSTANTS.TARGETING_KEYS.SOURCE));
587
+ });
588
+
589
+ it('should keep default and native keys', function() {
590
+ config.setConfig({
591
+ targetingControls: {
592
+ addTargetingKeys: ['SOURCE']
593
+ }
594
+ });
595
+ const defaultKeys = new Set(Object.values(CONSTANTS.DEFAULT_TARGETING_KEYS));
596
+ Object.values(CONSTANTS.NATIVE_KEYS).forEach((k) => defaultKeys.add(k));
597
+
598
+ const expectedKeys = new Set();
599
+ bidsReceived
600
+ .map((bid) => Object.keys(bid.adserverTargeting))
601
+ .reduce((left, right) => left.concat(right), [])
602
+ .filter((key) => defaultKeys.has(key))
603
+ .map(expandKey)
604
+ .reduce((left, right) => left.concat(right), [])
605
+ .forEach((k) => expectedKeys.add(k));
606
+ expect(targetingResult()).to.include.all.keys(...expectedKeys);
607
+ });
608
+
609
+ it('should not be allowed together with allowTargetingKeys', function () {
610
+ config.setConfig({
611
+ targetingControls: {
612
+ allowTargetingKeys: [CONSTANTS.TARGETING_KEYS.BIDDER],
613
+ addTargetingKeys: [CONSTANTS.TARGETING_KEYS.SOURCE]
614
+ }
615
+ });
616
+ expect(targetingResult).to.throw();
617
+ });
618
+ });
619
+
548
620
  describe('targetingControls.allowSendAllBidsTargetingKeys', function () {
549
621
  let bid4;
550
622
 
@@ -1135,13 +1135,15 @@ describe('Unit: Prebid Module', function () {
1135
1135
  height: 0
1136
1136
  }
1137
1137
  },
1138
- getElementsByTagName: sinon.stub()
1138
+ getElementsByTagName: sinon.stub(),
1139
+ querySelector: sinon.stub()
1139
1140
  };
1140
1141
 
1141
1142
  elStub = {
1142
1143
  insertBefore: sinon.stub()
1143
1144
  };
1144
1145
  doc.getElementsByTagName.returns([elStub]);
1146
+ doc.querySelector.returns(elStub);
1145
1147
 
1146
1148
  spyLogError = sinon.spy(utils, 'logError');
1147
1149
  spyLogMessage = sinon.spy(utils, 'logMessage');
@@ -2,6 +2,7 @@ import { getAdServerTargeting } from 'test/fixtures/fixtures.js';
2
2
  import { expect } from 'chai';
3
3
  import CONSTANTS from 'src/constants.json';
4
4
  import * as utils from 'src/utils.js';
5
+ import {waitForElementToLoad} from 'src/utils.js';
5
6
 
6
7
  var assert = require('assert');
7
8
 
@@ -1198,4 +1199,41 @@ describe('Utils', function () {
1198
1199
  });
1199
1200
  });
1200
1201
  });
1202
+
1203
+ describe('waitForElementToLoad', () => {
1204
+ let element;
1205
+ let callbacks;
1206
+
1207
+ function callback() {
1208
+ callbacks++;
1209
+ }
1210
+
1211
+ function delay(delay = 0) {
1212
+ return new Promise((resolve) => {
1213
+ window.setTimeout(resolve, delay);
1214
+ })
1215
+ }
1216
+
1217
+ beforeEach(() => {
1218
+ callbacks = 0;
1219
+ element = window.document.createElement('div');
1220
+ });
1221
+
1222
+ it('should respect timeout if set', () => {
1223
+ waitForElementToLoad(element, 50).then(callback);
1224
+ return delay(60).then(() => {
1225
+ expect(callbacks).to.equal(1);
1226
+ });
1227
+ });
1228
+
1229
+ ['load', 'error'].forEach((event) => {
1230
+ it(`should complete on '${event} event'`, () => {
1231
+ waitForElementToLoad(element).then(callback);
1232
+ element.dispatchEvent(new Event(event));
1233
+ return delay().then(() => {
1234
+ expect(callbacks).to.equal(1);
1235
+ })
1236
+ });
1237
+ });
1238
+ });
1201
1239
  });
@@ -0,0 +1,3 @@
1
+ require('test/helpers/prebidGlobal.js');
2
+ require('test/mocks/adloaderStub.js');
3
+ require('test/mocks/xhr.js');
@@ -1,6 +1,4 @@
1
- require('test/helpers/prebidGlobal.js');
2
- require('test/mocks/adloaderStub.js');
3
- require('test/mocks/xhr.js');
1
+ require('./test_deps.js');
4
2
 
5
3
  var testsContext = require.context('.', true, /_spec$/);
6
4
  testsContext.keys().forEach(testsContext);