prebid.js 7.16.0 → 7.18.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 (160) hide show
  1. package/.circleci/config.yml +0 -18
  2. package/dist/1plusXRtdProvider.js +1 -1
  3. package/dist/33acrossBidAdapter.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/adqueryBidAdapter.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/ajaBidAdapter.js +1 -1
  13. package/dist/amxBidAdapter.js +1 -1
  14. package/dist/amxIdSystem.js +1 -1
  15. package/dist/appierAnalyticsAdapter.js +1 -1
  16. package/dist/appnexusBidAdapter.js +1 -1
  17. package/dist/asoBidAdapter.js +1 -1
  18. package/dist/audiencerunBidAdapter.js +1 -1
  19. package/dist/axonixBidAdapter.js +1 -1
  20. package/dist/bidglassBidAdapter.js +1 -1
  21. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  22. package/dist/big-richmediaBidAdapter.js +1 -1
  23. package/dist/bluebillywigBidAdapter.js +1 -1
  24. package/dist/bridgewellBidAdapter.js +1 -1
  25. package/dist/brightMountainMediaBidAdapter.js +1 -1
  26. package/dist/carodaBidAdapter.js +1 -0
  27. package/dist/concertBidAdapter.js +1 -1
  28. package/dist/connectadBidAdapter.js +1 -1
  29. package/dist/consumableBidAdapter.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/dspxBidAdapter.js +1 -1
  34. package/dist/eplanningBidAdapter.js +1 -1
  35. package/dist/finativeBidAdapter.js +1 -1
  36. package/dist/glimpseBidAdapter.js +1 -1
  37. package/dist/gmosspBidAdapter.js +1 -1
  38. package/dist/goldbachBidAdapter.js +1 -1
  39. package/dist/gridBidAdapter.js +1 -1
  40. package/dist/gridNMBidAdapter.js +1 -1
  41. package/dist/growthCodeIdSystem.js +1 -0
  42. package/dist/gumgumBidAdapter.js +1 -1
  43. package/dist/h12mediaBidAdapter.js +1 -1
  44. package/dist/id5IdSystem.js +1 -1
  45. package/dist/impactifyBidAdapter.js +1 -1
  46. package/dist/improvedigitalBidAdapter.js +1 -1
  47. package/dist/inmarBidAdapter.js +1 -1
  48. package/dist/insticatorBidAdapter.js +1 -1
  49. package/dist/ixBidAdapter.js +1 -1
  50. package/dist/jixieBidAdapter.js +1 -1
  51. package/dist/justpremiumBidAdapter.js +1 -1
  52. package/dist/konduitAnalyticsAdapter.js +1 -1
  53. package/dist/kueezBidAdapter.js +1 -1
  54. package/dist/lassoBidAdapter.js +1 -1
  55. package/dist/lifestreetBidAdapter.js +1 -1
  56. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  57. package/dist/logicadBidAdapter.js +1 -1
  58. package/dist/loglyliftBidAdapter.js +1 -1
  59. package/dist/malltvAnalyticsAdapter.js +1 -1
  60. package/dist/marsmediaBidAdapter.js +1 -1
  61. package/dist/mediafuseBidAdapter.js +1 -1
  62. package/dist/mediagoBidAdapter.js +1 -1
  63. package/dist/mediakeysBidAdapter.js +1 -1
  64. package/dist/mediasquareBidAdapter.js +1 -1
  65. package/dist/mgidBidAdapter.js +1 -1
  66. package/dist/minutemediaBidAdapter.js +1 -1
  67. package/dist/nativoBidAdapter.js +1 -1
  68. package/dist/nextMillenniumBidAdapter.js +1 -1
  69. package/dist/not-for-prod/prebid.js +121 -119
  70. package/dist/oguryBidAdapter.js +1 -1
  71. package/dist/onetagBidAdapter.js +1 -1
  72. package/dist/ooloAnalyticsAdapter.js +1 -1
  73. package/dist/outbrainBidAdapter.js +1 -1
  74. package/dist/parrableIdSystem.js +1 -1
  75. package/dist/pixfutureBidAdapter.js +1 -1
  76. package/dist/prebid-core.js +1 -1
  77. package/dist/publinkIdSystem.js +1 -1
  78. package/dist/pubmaticBidAdapter.js +1 -1
  79. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  80. package/dist/pxyzBidAdapter.js +1 -1
  81. package/dist/quantcastBidAdapter.js +1 -1
  82. package/dist/readpeakBidAdapter.js +1 -1
  83. package/dist/relaidoBidAdapter.js +1 -1
  84. package/dist/rhythmoneBidAdapter.js +1 -1
  85. package/dist/riseBidAdapter.js +1 -1
  86. package/dist/rubiconAnalyticsAdapter.js +1 -1
  87. package/dist/rubiconBidAdapter.js +1 -1
  88. package/dist/seedingAllianceBidAdapter.js +1 -1
  89. package/dist/seedtagBidAdapter.js +1 -1
  90. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  91. package/dist/sharethroughBidAdapter.js +1 -1
  92. package/dist/shinezBidAdapter.js +1 -1
  93. package/dist/smaatoBidAdapter.js +1 -1
  94. package/dist/smartadserverBidAdapter.js +1 -1
  95. package/dist/smartxBidAdapter.js +1 -1
  96. package/dist/smilewantedBidAdapter.js +1 -1
  97. package/dist/sonobiBidAdapter.js +1 -1
  98. package/dist/sovrnAnalyticsAdapter.js +1 -1
  99. package/dist/sovrnBidAdapter.js +1 -1
  100. package/dist/sspBCBidAdapter.js +1 -1
  101. package/dist/sublimeBidAdapter.js +1 -1
  102. package/dist/synacormediaBidAdapter.js +1 -1
  103. package/dist/taboolaBidAdapter.js +1 -1
  104. package/dist/targetVideoBidAdapter.js +1 -1
  105. package/dist/teadsBidAdapter.js +1 -1
  106. package/dist/trionBidAdapter.js +1 -1
  107. package/dist/tripleliftBidAdapter.js +1 -1
  108. package/dist/ttdBidAdapter.js +1 -1
  109. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  110. package/dist/underdogmediaBidAdapter.js +1 -1
  111. package/dist/undertoneBidAdapter.js +1 -1
  112. package/dist/userId.js +1 -1
  113. package/dist/vidazooBidAdapter.js +1 -1
  114. package/dist/videobyteBidAdapter.js +1 -1
  115. package/dist/visxBidAdapter.js +1 -1
  116. package/dist/vuukleBidAdapter.js +1 -1
  117. package/dist/widespaceBidAdapter.js +1 -1
  118. package/dist/winrBidAdapter.js +1 -1
  119. package/dist/yahoosspBidAdapter.js +1 -1
  120. package/dist/yieldmoBidAdapter.js +1 -1
  121. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  122. package/karma.conf.maker.js +2 -4
  123. package/modules/1plusXRtdProvider.js +27 -7
  124. package/modules/adagioBidAdapter.js +18 -3
  125. package/modules/adagioBidAdapter.md +11 -1
  126. package/modules/adqueryBidAdapter.js +4 -2
  127. package/modules/appnexusBidAdapter.js +24 -22
  128. package/modules/bidwatchAnalyticsAdapter.js +1 -1
  129. package/modules/carodaBidAdapter.js +217 -0
  130. package/modules/carodaBidAdapter.md +43 -0
  131. package/modules/gridBidAdapter.js +1 -1
  132. package/modules/growthCodeIdSystem.js +164 -0
  133. package/modules/growthCodeIdSystem.md +37 -0
  134. package/modules/improvedigitalBidAdapter.js +3 -1
  135. package/modules/ixBidAdapter.js +17 -12
  136. package/modules/mediagoBidAdapter.js +15 -11
  137. package/modules/mediasquareBidAdapter.js +1 -1
  138. package/modules/nativoBidAdapter.js +2 -1
  139. package/modules/nextMillenniumBidAdapter.js +34 -11
  140. package/modules/rubiconAnalyticsAdapter.js +2 -2
  141. package/modules/rubiconBidAdapter.js +16 -6
  142. package/modules/seedtagBidAdapter.js +4 -0
  143. package/modules/taboolaBidAdapter.js +3 -7
  144. package/modules/userId/eids.js +19 -0
  145. package/modules/vidazooBidAdapter.js +1 -1
  146. package/package.json +1 -1
  147. package/test/spec/modules/1plusXRtdProvider_spec.js +77 -1
  148. package/test/spec/modules/adagioBidAdapter_spec.js +46 -2
  149. package/test/spec/modules/adqueryBidAdapter_spec.js +11 -0
  150. package/test/spec/modules/appnexusBidAdapter_spec.js +76 -0
  151. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +2 -0
  152. package/test/spec/modules/carodaBidAdapter_spec.js +494 -0
  153. package/test/spec/modules/growthCodeIdSystem_spec.js +83 -0
  154. package/test/spec/modules/improvedigitalBidAdapter_spec.js +10 -0
  155. package/test/spec/modules/ixBidAdapter_spec.js +32 -16
  156. package/test/spec/modules/mediasquareBidAdapter_spec.js +2 -0
  157. package/test/spec/modules/prebidServerBidAdapter_spec.js +12 -0
  158. package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +7 -7
  159. package/test/spec/modules/rubiconBidAdapter_spec.js +28 -35
  160. package/test/spec/modules/seedtagBidAdapter_spec.js +45 -0
@@ -1588,7 +1588,7 @@ describe('IndexexchangeAdapter', function () {
1588
1588
  search: 'drill',
1589
1589
  },
1590
1590
  user: {
1591
- keywords: Array(1000).join('#'),
1591
+ keywords: Array(1200).join('#'),
1592
1592
  }
1593
1593
  };
1594
1594
 
@@ -1772,21 +1772,21 @@ describe('IndexexchangeAdapter', function () {
1772
1772
 
1773
1773
  it('impression should have correct format and value', function () {
1774
1774
  const impression = JSON.parse(query.r).imp[0];
1775
+ const sidValue = DEFAULT_BANNER_VALID_BID[0].params.id;
1775
1776
 
1776
1777
  expect(impression.id).to.equal(DEFAULT_BANNER_VALID_BID[0].bidId);
1777
1778
  expect(impression.banner.format).to.be.length(2);
1778
1779
  expect(impression.banner.topframe).to.be.oneOf([0, 1]);
1779
1780
  expect(impression.banner.pos).to.equal(0);
1780
1781
  expect(impression.ext.tid).to.equal(DEFAULT_BANNER_VALID_BID[0].transactionId);
1782
+ expect(impression.ext.sid).to.equal(sidValue);
1781
1783
 
1782
1784
  impression.banner.format.map(({ w, h, ext }, index) => {
1783
1785
  const size = DEFAULT_BANNER_VALID_BID[0].mediaTypes.banner.sizes[index];
1784
- const sidValue = utils.parseGPTSingleSizeArray(size);
1785
1786
 
1786
1787
  expect(w).to.equal(size[0]);
1787
1788
  expect(h).to.equal(size[1]);
1788
1789
  expect(ext.siteID).to.equal(DEFAULT_BANNER_VALID_BID[0].params.siteId);
1789
- expect(ext.sid).to.equal(sidValue);
1790
1790
  });
1791
1791
  });
1792
1792
 
@@ -1934,7 +1934,7 @@ describe('IndexexchangeAdapter', function () {
1934
1934
  expect(impression.banner.format[0].h).to.equal(DEFAULT_BANNER_VALID_BID[0].params.size[1]);
1935
1935
  expect(impression.banner.topframe).to.be.oneOf([0, 1]);
1936
1936
  expect(impression.banner.format[0].ext.siteID).to.equal(DEFAULT_BANNER_VALID_BID[0].params.siteId);
1937
- expect(impression.banner.format[0].ext.sid).to.equal('50');
1937
+ expect(impression.ext.sid).to.equal('50');
1938
1938
  });
1939
1939
 
1940
1940
  it('impression should have sid if id is configured as string', function () {
@@ -1948,7 +1948,7 @@ describe('IndexexchangeAdapter', function () {
1948
1948
  expect(impression.banner.format[0].h).to.equal(DEFAULT_BANNER_VALID_BID[0].params.size[1]);
1949
1949
  expect(impression.banner.topframe).to.be.oneOf([0, 1]);
1950
1950
  expect(impression.banner.format[0].ext.siteID).to.equal(DEFAULT_BANNER_VALID_BID[0].params.siteId);
1951
- expect(impression.banner.format[0].ext.sid).to.equal('abc');
1951
+ expect(impression.ext.sid).to.equal('abc');
1952
1952
  });
1953
1953
 
1954
1954
  describe('first party data', () => {
@@ -2034,6 +2034,7 @@ describe('IndexexchangeAdapter', function () {
2034
2034
  const request = spec.buildRequests([DEFAULT_BANNER_VALID_BID[0], DEFAULT_VIDEO_VALID_BID[0]], {});
2035
2035
  it('should have banner request', () => {
2036
2036
  const bannerImpression = JSON.parse(request[0].data.r).imp[0];
2037
+ const sidValue = DEFAULT_BANNER_VALID_BID[0].params.id;
2037
2038
 
2038
2039
  expect(JSON.parse(request[0].data.r).imp).to.have.lengthOf(1);
2039
2040
  expect(JSON.parse(request[0].data.v)).to.equal(BANNER_ENDPOINT_VERSION);
@@ -2041,15 +2042,14 @@ describe('IndexexchangeAdapter', function () {
2041
2042
 
2042
2043
  expect(bannerImpression.banner.format).to.be.length(2);
2043
2044
  expect(bannerImpression.banner.topframe).to.be.oneOf([0, 1]);
2045
+ expect(bannerImpression.ext.sid).to.equal(sidValue);
2044
2046
 
2045
2047
  bannerImpression.banner.format.map(({ w, h, ext }, index) => {
2046
2048
  const size = DEFAULT_BANNER_VALID_BID[0].mediaTypes.banner.sizes[index];
2047
- const sidValue = utils.parseGPTSingleSizeArray(size);
2048
2049
 
2049
2050
  expect(w).to.equal(size[0]);
2050
2051
  expect(h).to.equal(size[1]);
2051
2052
  expect(ext.siteID).to.equal(DEFAULT_BANNER_VALID_BID[0].params.siteId);
2052
- expect(ext.sid).to.equal(sidValue);
2053
2053
  });
2054
2054
  });
2055
2055
 
@@ -2068,6 +2068,7 @@ describe('IndexexchangeAdapter', function () {
2068
2068
 
2069
2069
  it('should have banner request', () => {
2070
2070
  const bannerImpression = JSON.parse(request[0].data.r).imp[0];
2071
+ const sidValue = DEFAULT_BANNER_VALID_BID[0].params.id;
2071
2072
 
2072
2073
  expect(JSON.parse(request[0].data.r).imp).to.have.lengthOf(1);
2073
2074
  expect(JSON.parse(request[0].data.v)).to.equal(BANNER_ENDPOINT_VERSION);
@@ -2075,15 +2076,14 @@ describe('IndexexchangeAdapter', function () {
2075
2076
 
2076
2077
  expect(bannerImpression.banner.format).to.be.length(2);
2077
2078
  expect(bannerImpression.banner.topframe).to.be.oneOf([0, 1]);
2079
+ expect(bannerImpression.ext.sid).to.equal(sidValue);
2078
2080
 
2079
2081
  bannerImpression.banner.format.map(({ w, h, ext }, index) => {
2080
2082
  const size = DEFAULT_BANNER_VALID_BID[0].mediaTypes.banner.sizes[index];
2081
- const sidValue = utils.parseGPTSingleSizeArray(size);
2082
2083
 
2083
2084
  expect(w).to.equal(size[0]);
2084
2085
  expect(h).to.equal(size[1]);
2085
2086
  expect(ext.siteID).to.equal(DEFAULT_BANNER_VALID_BID[0].params.siteId);
2086
- expect(ext.sid).to.equal(sidValue);
2087
2087
  });
2088
2088
  });
2089
2089
 
@@ -2200,19 +2200,19 @@ describe('IndexexchangeAdapter', function () {
2200
2200
 
2201
2201
  const request = spec.buildRequests([bid, bid2], DEFAULT_OPTION)[0];
2202
2202
  const impression = JSON.parse(request.data.r).imp[0];
2203
+ const sidValue = bid.params.id;
2203
2204
 
2204
2205
  expect(impression.id).to.equal(bid.bidId);
2205
2206
  expect(impression.banner.format).to.be.length(bid.mediaTypes.banner.sizes.length);
2206
2207
  expect(impression.banner.topframe).to.be.oneOf([0, 1]);
2208
+ expect(impression.ext.sid).to.equal(sidValue);
2207
2209
 
2208
2210
  impression.banner.format.map(({ w, h, ext }, index) => {
2209
2211
  const size = bid.mediaTypes.banner.sizes[index];
2210
- const sidValue = utils.parseGPTSingleSizeArray(size);
2211
2212
 
2212
2213
  expect(w).to.equal(size[0]);
2213
2214
  expect(h).to.equal(size[1]);
2214
2215
  expect(ext.siteID).to.equal(index === 1 ? bid2.params.siteId : bid.params.siteId);
2215
- expect(ext.sid).to.equal(sidValue);
2216
2216
  });
2217
2217
  });
2218
2218
 
@@ -2236,18 +2236,18 @@ describe('IndexexchangeAdapter', function () {
2236
2236
 
2237
2237
  impressions.map((impression, impressionIndex) => {
2238
2238
  const firstSizeObject = bids[impressionIndex].mediaTypes.banner.sizes[0];
2239
+ const sidValue = bids[impressionIndex].params.id;
2239
2240
 
2240
2241
  expect(impression.banner.format).to.be.length(2);
2241
2242
  expect(impression.banner.topframe).to.be.oneOf([0, 1]);
2243
+ expect(impression.ext.sid).to.equal(sidValue);
2242
2244
 
2243
2245
  impression.banner.format.map(({ w, h, ext }, index) => {
2244
2246
  const size = bids[impressionIndex].mediaTypes.banner.sizes[index];
2245
- const sidValue = utils.parseGPTSingleSizeArray(size);
2246
2247
 
2247
2248
  expect(w).to.equal(size[0]);
2248
2249
  expect(h).to.equal(size[1]);
2249
2250
  expect(ext.siteID).to.equal(bids[impressionIndex].params.siteId);
2250
- expect(ext.sid).to.equal(sidValue);
2251
2251
  });
2252
2252
  });
2253
2253
  });
@@ -2295,7 +2295,6 @@ describe('IndexexchangeAdapter', function () {
2295
2295
 
2296
2296
  it('impression should have correct format and value', function () {
2297
2297
  const impression = JSON.parse(query.r).imp[0];
2298
- const sidValue = utils.parseGPTSingleSizeArray(DEFAULT_VIDEO_VALID_BID[0].params.size);
2299
2298
 
2300
2299
  expect(impression.id).to.equal(DEFAULT_VIDEO_VALID_BID[0].bidId);
2301
2300
  expect(impression.video.w).to.equal(DEFAULT_VIDEO_VALID_BID[0].params.size[0]);
@@ -2320,6 +2319,15 @@ describe('IndexexchangeAdapter', function () {
2320
2319
  expect(impression.video.placement).to.equal(2);
2321
2320
  });
2322
2321
 
2322
+ it('should set imp.ext.sid for video imps if params.id exists', function () {
2323
+ const bid = utils.deepClone(DEFAULT_VIDEO_VALID_BID[0]);
2324
+ bid.params.id = 50;
2325
+ const request = spec.buildRequests([bid], {})[0];
2326
+ const impression = JSON.parse(request.data.r).imp[0];
2327
+
2328
+ expect(impression.ext.sid).to.equal('50');
2329
+ });
2330
+
2323
2331
  it('should set correct default placement, if context is instream', function () {
2324
2332
  const bid = utils.deepClone(DEFAULT_VIDEO_VALID_BID[0]);
2325
2333
  bid.mediaTypes.video.context = 'instream';
@@ -2460,6 +2468,16 @@ describe('IndexexchangeAdapter', function () {
2460
2468
  expect(nativeImpression.native).to.deep.equal(DEFAULT_NATIVE_IMP);
2461
2469
  });
2462
2470
 
2471
+ it('should set imp.ext.sid for native imps if params.id exist', function() {
2472
+ const bid = utils.deepClone(DEFAULT_NATIVE_VALID_BID);
2473
+ bid[0].params.id = 'abc'
2474
+ const request = spec.buildRequests(bid, DEFAULT_OPTION);
2475
+ const nativeImpression = JSON.parse(request[0].data.r).imp[0];
2476
+
2477
+ expect(nativeImpression.id).to.equal(DEFAULT_NATIVE_VALID_BID[0].bidId);
2478
+ expect(nativeImpression.ext.sid).to.equal('abc');
2479
+ });
2480
+
2463
2481
  it('should build request with given asset properties', function() {
2464
2482
  let bid = utils.deepClone(DEFAULT_NATIVE_VALID_BID)
2465
2483
  bid[0].nativeOrtbRequest = {
@@ -2642,12 +2660,10 @@ describe('IndexexchangeAdapter', function () {
2642
2660
 
2643
2661
  impression.banner.format.map(({ w, h, ext }, index) => {
2644
2662
  const size = bid.mediaTypes.banner.sizes[index];
2645
- const sidValue = utils.parseGPTSingleSizeArray(size);
2646
2663
 
2647
2664
  expect(w).to.equal(size[0]);
2648
2665
  expect(h).to.equal(size[1]);
2649
2666
  expect(ext.siteID).to.equal(bid.params.siteId);
2650
- expect(ext.sid).to.equal(sidValue);
2651
2667
  });
2652
2668
  });
2653
2669
  });
@@ -88,6 +88,8 @@ describe('MediaSquare bid adapter tests', function () {
88
88
  'height': 250,
89
89
  'creative_id': '158534630',
90
90
  'currency': 'USD',
91
+ 'originalCpm': 25.0123,
92
+ 'originalCurrency': 'USD',
91
93
  'net_revenue': true,
92
94
  'ttl': 300,
93
95
  'ad': '< --- creative code --- >',
@@ -3469,5 +3469,17 @@ describe('S2S Adapter', function () {
3469
3469
 
3470
3470
  expect(requestBid.ext.prebid.floors).to.deep.equal({ enabled: false });
3471
3471
  });
3472
+
3473
+ it('should override prebid server default DEFAULT_S2S_CURRENCY', function () {
3474
+ config.setConfig({
3475
+ currency: { adServerCurrency: 'JPY' },
3476
+ });
3477
+
3478
+ const bidRequests = utils.deepClone(BID_REQUESTS);
3479
+ adapter.callBids(REQUEST, bidRequests, addBidResponse, done, ajax);
3480
+
3481
+ const parsedRequestBody = JSON.parse(server.requests[1].requestBody);
3482
+ expect(parsedRequestBody.cur).to.deep.equal(['JPY']);
3483
+ });
3472
3484
  });
3473
3485
  });
@@ -2366,7 +2366,7 @@ describe('rubicon analytics adapter', function () {
2366
2366
  });
2367
2367
  basicBillingAuction([{
2368
2368
  vendor: 'vendorName',
2369
- type: 'auction',
2369
+ type: 'pageView',
2370
2370
  billingId: 'f8558d41-62de-4349-bc7b-2dbee1e69965'
2371
2371
  }]);
2372
2372
  expect(server.requests.length).to.equal(1);
@@ -2376,7 +2376,7 @@ describe('rubicon analytics adapter', function () {
2376
2376
  expect(message.billableEvents).to.deep.equal([{
2377
2377
  accountId: 1001,
2378
2378
  vendor: 'vendorName',
2379
- type: 'general', // mapping all events to endpoint as 'general' for now
2379
+ type: 'pageView',
2380
2380
  billingId: 'f8558d41-62de-4349-bc7b-2dbee1e69965'
2381
2381
  }]);
2382
2382
  });
@@ -2398,7 +2398,7 @@ describe('rubicon analytics adapter', function () {
2398
2398
  },
2399
2399
  {
2400
2400
  vendor: 'vendorName',
2401
- type: 'auction',
2401
+ type: 'impression',
2402
2402
  billingId: '743db6e3-21f2-44d4-917f-cb3488c6076f'
2403
2403
  },
2404
2404
  {
@@ -2415,13 +2415,13 @@ describe('rubicon analytics adapter', function () {
2415
2415
  {
2416
2416
  accountId: 1001,
2417
2417
  vendor: 'vendorName',
2418
- type: 'general',
2418
+ type: 'auction',
2419
2419
  billingId: 'f8558d41-62de-4349-bc7b-2dbee1e69965'
2420
2420
  },
2421
2421
  {
2422
2422
  accountId: 1001,
2423
2423
  vendor: 'vendorName',
2424
- type: 'general',
2424
+ type: 'impression',
2425
2425
  billingId: '743db6e3-21f2-44d4-917f-cb3488c6076f'
2426
2426
  }
2427
2427
  ]);
@@ -2450,7 +2450,7 @@ describe('rubicon analytics adapter', function () {
2450
2450
  {
2451
2451
  accountId: 1001,
2452
2452
  vendor: 'vendorName',
2453
- type: 'general',
2453
+ type: 'auction',
2454
2454
  billingId: 'f8558d41-62de-4349-bc7b-2dbee1e69965'
2455
2455
  }
2456
2456
  ]);
@@ -2480,7 +2480,7 @@ describe('rubicon analytics adapter', function () {
2480
2480
  {
2481
2481
  accountId: 1001,
2482
2482
  vendor: 'vendorName',
2483
- type: 'general',
2483
+ type: 'auction',
2484
2484
  billingId: 'f8558d41-62de-4349-bc7b-2dbee1e69965'
2485
2485
  }
2486
2486
  ]);
@@ -4,7 +4,7 @@ import {
4
4
  getPriceGranularity,
5
5
  masSizeOrdering,
6
6
  resetUserSync,
7
- hasVideoMediaType,
7
+ classifiedAsVideo,
8
8
  resetRubiConf
9
9
  } from 'modules/rubiconBidAdapter.js';
10
10
  import {parse as parseQuery} from 'querystring';
@@ -257,7 +257,7 @@ describe('the rubicon adapter', function () {
257
257
  context: 'instream'
258
258
  },
259
259
  };
260
- bid.params.video = '';
260
+ bid.params.video = false;
261
261
  }
262
262
 
263
263
  function createVideoBidderRequestOutstream() {
@@ -2320,57 +2320,50 @@ describe('the rubicon adapter', function () {
2320
2320
  });
2321
2321
  });
2322
2322
 
2323
- describe('hasVideoMediaType', function () {
2324
- it('should return true if mediaType is video and size_id is set', function () {
2323
+ describe('classifiedAsVideo', function () {
2324
+ it('should return true if mediaTypes is video', function () {
2325
2325
  createVideoBidderRequest();
2326
- const legacyVideoTypeBidRequest = hasVideoMediaType(bidderRequest.bids[0]);
2327
- expect(legacyVideoTypeBidRequest).is.equal(true);
2326
+ const bidClassifiedAsVideo = classifiedAsVideo(bidderRequest.bids[0]);
2327
+ expect(bidClassifiedAsVideo).is.equal(true);
2328
2328
  });
2329
2329
 
2330
2330
  it('should return false if trying to use legacy mediaType with video', function () {
2331
2331
  createVideoBidderRequest();
2332
2332
  delete bidderRequest.bids[0].mediaTypes;
2333
2333
  bidderRequest.bids[0].mediaType = 'video';
2334
- const legacyVideoTypeBidRequest = hasVideoMediaType(bidderRequest.bids[0]);
2334
+ const legacyVideoTypeBidRequest = classifiedAsVideo(bidderRequest.bids[0]);
2335
2335
  expect(legacyVideoTypeBidRequest).is.equal(false);
2336
2336
  });
2337
2337
 
2338
- it('should return false if bidRequest.mediaType is not equal to video', function () {
2339
- expect(hasVideoMediaType({
2338
+ it('should return false if bid.mediaTypes is not equal to video', function () {
2339
+ expect(classifiedAsVideo({
2340
2340
  mediaType: 'banner'
2341
2341
  })).is.equal(false);
2342
2342
  });
2343
2343
 
2344
- it('should return false if bidRequest.mediaType is not defined', function () {
2345
- expect(hasVideoMediaType({})).is.equal(false);
2344
+ it('should return false if bid.mediaTypes is not defined', function () {
2345
+ expect(classifiedAsVideo({})).is.equal(false);
2346
2346
  });
2347
2347
 
2348
- it('should return true if bidRequest.mediaTypes.video.context is instream and size_id is defined', function () {
2349
- expect(hasVideoMediaType({
2350
- mediaTypes: {
2351
- video: {
2352
- context: 'instream'
2353
- }
2354
- },
2355
- params: {
2356
- video: {
2357
- size_id: 7
2358
- }
2359
- }
2360
- })).is.equal(true);
2348
+ it('Should return false if both banner and video mediaTypes are set and params.video is not an object', function () {
2349
+ createVideoBidderRequestNoVideo();
2350
+ let bid = bidderRequest.bids[0];
2351
+ bid.mediaTypes.banner = {flag: true};
2352
+ expect(classifiedAsVideo(bid)).to.equal(false);
2353
+ });
2354
+ it('Should return true if both banner and video mediaTypes are set and params.video is an object', function () {
2355
+ createVideoBidderRequestNoVideo();
2356
+ let bid = bidderRequest.bids[0];
2357
+ bid.mediaTypes.banner = {flag: true};
2358
+ bid.params.video = {};
2359
+ expect(classifiedAsVideo(bid)).to.equal(true);
2361
2360
  });
2362
2361
 
2363
- it('should return false if bidRequest.mediaTypes.video.context is instream but size_id is not defined', function () {
2364
- expect(spec.isBidRequestValid({
2365
- mediaTypes: {
2366
- video: {
2367
- context: 'instream'
2368
- }
2369
- },
2370
- params: {
2371
- video: {}
2372
- }
2373
- })).is.equal(false);
2362
+ it('Should return true and create a params.video object if one is not already present', function () {
2363
+ createVideoBidderRequestNoVideo();
2364
+ let bid = bidderRequest.bids[0]
2365
+ expect(classifiedAsVideo(bid)).to.equal(true);
2366
+ expect(bid.params.video).to.not.be.undefined;
2374
2367
  });
2375
2368
  });
2376
2369
  });
@@ -356,6 +356,51 @@ describe('Seedtag Adapter', function () {
356
356
  expect(videoBid.requestCount).to.equal(1);
357
357
  });
358
358
  });
359
+
360
+ describe('schain param', function () {
361
+ it('should add schain to payload when exposed on validBidRequest', function () {
362
+ // https://github.com/prebid/Prebid.js/blob/master/modules/schain.md#sample-code-for-passing-the-schain-object
363
+ const schain = {
364
+ validation: 'strict',
365
+ config: {
366
+ ver: '1.0',
367
+ complete: 1,
368
+ nodes: [
369
+ {
370
+ asi: 'indirectseller.com',
371
+ sid: '00001',
372
+ hp: 1,
373
+ },
374
+
375
+ {
376
+ asi: 'indirectseller-2.com',
377
+ sid: '00002',
378
+ hp: 1,
379
+ },
380
+ ],
381
+ },
382
+ };
383
+
384
+ // duplicate
385
+ const bidRequests = JSON.parse(JSON.stringify(validBidRequests))
386
+ bidRequests[0].schain = schain;
387
+
388
+ const request = spec.buildRequests(bidRequests, bidderRequest);
389
+
390
+ const payload = JSON.parse(request.data);
391
+
392
+ expect(payload.schain).to.exist;
393
+ expect(payload.schain).to.deep.equal(schain);
394
+ });
395
+
396
+ it("shouldn't add schain to payload when not exposed", function () {
397
+ const request = spec.buildRequests(validBidRequests, bidderRequest);
398
+
399
+ const payload = JSON.parse(request.data);
400
+
401
+ expect(payload.schain).to.not.exist;
402
+ });
403
+ });
359
404
  });
360
405
 
361
406
  describe('interpret response method', function () {