prebid.js 6.6.0 → 6.10.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 (271) hide show
  1. package/.eslintrc.js +8 -1
  2. package/allowedModules.js +4 -7
  3. package/integrationExamples/gpt/amp/creative.html +11 -33
  4. package/integrationExamples/gpt/{haloRtdProvider_example.html → hadronRtdProvider_example.html} +9 -9
  5. package/integrationExamples/gpt/idImportLibrary_example.html +2 -2
  6. package/integrationExamples/gpt/userId_example.html +2 -2
  7. package/integrationExamples/gpt/weboramaRtdProvider_example.html +154 -115
  8. package/integrationExamples/gpt/x-domain/creative.html +63 -29
  9. package/modules/.submodules.json +3 -0
  10. package/modules/adagioBidAdapter.js +1 -9
  11. package/modules/adagioBidAdapter.md +1 -1
  12. package/modules/adbookpspBidAdapter.js +29 -12
  13. package/modules/adhashBidAdapter.js +4 -4
  14. package/modules/adkernelBidAdapter.js +2 -2
  15. package/modules/adlooxAnalyticsAdapter.js +1 -1
  16. package/modules/adlooxRtdProvider.js +1 -1
  17. package/modules/adnowBidAdapter.js +1 -1
  18. package/modules/adnuntiusRtdProvider.js +96 -0
  19. package/modules/adnuntiusRtdProvider.md +41 -0
  20. package/modules/adomikAnalyticsAdapter.js +2 -2
  21. package/modules/adotBidAdapter.js +1 -1
  22. package/modules/adpod.js +14 -17
  23. package/modules/adrelevantisBidAdapter.js +2 -2
  24. package/modules/adtargetBidAdapter.js +1 -1
  25. package/modules/adtelligentBidAdapter.js +1 -1
  26. package/modules/advangelistsBidAdapter.js +2 -2
  27. package/modules/adxpremiumAnalyticsAdapter.js +1 -1
  28. package/modules/adyoulikeBidAdapter.js +1 -1
  29. package/modules/afpBidAdapter.js +1 -1
  30. package/modules/appnexusBidAdapter.js +16 -4
  31. package/modules/asealBidAdapter.js +58 -0
  32. package/modules/asealBidAdapter.md +52 -0
  33. package/modules/beachfrontBidAdapter.js +2 -2
  34. package/modules/betweenBidAdapter.js +1 -1
  35. package/modules/bidViewability.js +1 -1
  36. package/modules/bluebillywigBidAdapter.js +1 -1
  37. package/modules/brandmetricsRtdProvider.js +168 -0
  38. package/modules/brandmetricsRtdProvider.md +40 -0
  39. package/modules/bridgewellBidAdapter.js +1 -1
  40. package/modules/browsiRtdProvider.js +2 -2
  41. package/modules/cleanmedianetBidAdapter.js +1 -1
  42. package/modules/colossussspBidAdapter.js +12 -8
  43. package/modules/colossussspBidAdapter.md +15 -1
  44. package/modules/compassBidAdapter.js +1 -1
  45. package/modules/connectIdSystem.js +1 -1
  46. package/modules/consentManagement.js +2 -3
  47. package/modules/consumableBidAdapter.md +1 -1
  48. package/modules/conversantBidAdapter.js +7 -0
  49. package/modules/craftBidAdapter.js +2 -2
  50. package/modules/criteoBidAdapter.js +10 -1
  51. package/modules/currency.js +27 -5
  52. package/modules/cwireBidAdapter.js +1 -1
  53. package/modules/dailyhuntBidAdapter.js +1 -1
  54. package/modules/dchain.js +1 -1
  55. package/modules/displayioBidAdapter.js +157 -0
  56. package/modules/displayioBidAdapter.md +148 -0
  57. package/modules/dspxBidAdapter.js +69 -29
  58. package/modules/dspxBidAdapter.md +2 -1
  59. package/modules/e_volutionBidAdapter.js +158 -0
  60. package/modules/emx_digitalBidAdapter.js +2 -2
  61. package/modules/fluctBidAdapter.js +0 -1
  62. package/modules/gamoshiBidAdapter.js +1 -1
  63. package/modules/gdprEnforcement.js +2 -2
  64. package/modules/glomexBidAdapter.js +1 -1
  65. package/modules/gnetBidAdapter.js +3 -3
  66. package/modules/gnetBidAdapter.md +4 -4
  67. package/modules/goldbachBidAdapter.js +2 -2
  68. package/modules/gptPreAuction.js +1 -1
  69. package/modules/gridBidAdapter.js +15 -1
  70. package/modules/gumgumBidAdapter.js +57 -43
  71. package/modules/hadronIdSystem.js +96 -0
  72. package/modules/hadronIdSystem.md +35 -0
  73. package/modules/hadronRtdProvider.js +254 -0
  74. package/modules/hadronRtdProvider.md +126 -0
  75. package/modules/haloIdSystem.md +4 -35
  76. package/modules/haloRtdProvider.md +3 -126
  77. package/modules/hybridBidAdapter.js +1 -1
  78. package/modules/improvedigitalBidAdapter.js +6 -1
  79. package/modules/insticatorBidAdapter.js +1 -1
  80. package/modules/interactiveOffersBidAdapter.js +9 -6
  81. package/modules/intersectionRtdProvider.js +1 -1
  82. package/modules/ixBidAdapter.js +2 -2
  83. package/modules/jwplayerRtdProvider.js +72 -7
  84. package/modules/jwplayerRtdProvider.md +27 -11
  85. package/modules/kargoBidAdapter.js +2 -2
  86. package/modules/livewrappedBidAdapter.js +1 -1
  87. package/modules/lunamediahbBidAdapter.js +32 -4
  88. package/modules/malltvBidAdapter.js +7 -3
  89. package/modules/malltvBidAdapter.md +64 -51
  90. package/modules/mass.js +3 -5
  91. package/modules/mediakeysBidAdapter.js +2 -2
  92. package/modules/medianetAnalyticsAdapter.js +2 -2
  93. package/modules/medianetRtdProvider.js +1 -1
  94. package/modules/mediasquareBidAdapter.js +1 -0
  95. package/modules/nextMillenniumBidAdapter.js +1 -0
  96. package/modules/nextrollBidAdapter.js +1 -1
  97. package/modules/oguryBidAdapter.js +7 -14
  98. package/modules/onetagBidAdapter.js +1 -1
  99. package/modules/openwebBidAdapter.js +1 -1
  100. package/modules/openxAnalyticsAdapter.js +2 -2
  101. package/modules/openxBidAdapter.js +1 -1
  102. package/modules/parrableIdSystem.js +1 -1
  103. package/modules/permutiveRtdProvider.js +1 -1
  104. package/modules/pilotxBidAdapter.js +147 -0
  105. package/modules/pilotxBidAdapter.md +50 -0
  106. package/modules/pixfutureBidAdapter.js +2 -2
  107. package/modules/prebidServerBidAdapter/index.js +63 -41
  108. package/modules/priceFloors.js +15 -14
  109. package/modules/pubmaticBidAdapter.js +1 -1
  110. package/modules/quantcastBidAdapter.js +1 -1
  111. package/modules/reconciliationRtdProvider.js +1 -1
  112. package/modules/richaudienceBidAdapter.js +7 -2
  113. package/modules/riseBidAdapter.js +17 -6
  114. package/modules/roxotAnalyticsAdapter.js +1 -1
  115. package/modules/rtbhouseBidAdapter.js +1 -1
  116. package/modules/rtdModule/index.js +9 -11
  117. package/modules/rubiconAnalyticsAdapter.js +8 -2
  118. package/modules/rubiconBidAdapter.js +1 -1
  119. package/modules/saambaaBidAdapter.js +420 -420
  120. package/modules/seedingAllianceBidAdapter.js +3 -3
  121. package/modules/sharethroughBidAdapter.js +12 -17
  122. package/modules/sigmoidAnalyticsAdapter.js +1 -1
  123. package/modules/sirdataRtdProvider.js +1 -1
  124. package/modules/sizeMappingV2.js +2 -9
  125. package/modules/smarticoBidAdapter.js +1 -1
  126. package/modules/sortableAnalyticsAdapter.js +5 -4
  127. package/modules/sovrnAnalyticsAdapter.js +2 -2
  128. package/modules/sovrnBidAdapter.js +93 -18
  129. package/modules/sovrnBidAdapter.md +80 -2
  130. package/modules/sspBCBidAdapter.js +54 -21
  131. package/modules/synacormediaBidAdapter.js +32 -11
  132. package/modules/targetVideoBidAdapter.js +1 -1
  133. package/modules/telariaBidAdapter.js +22 -29
  134. package/modules/trustpidSystem.js +197 -0
  135. package/modules/trustpidSystem.md +45 -0
  136. package/modules/undertoneBidAdapter.js +17 -1
  137. package/modules/userId/eids.js +16 -1
  138. package/modules/userId/eids.md +10 -2
  139. package/modules/userId/index.js +2 -2
  140. package/modules/userId/userId.md +17 -2
  141. package/modules/ventesBidAdapter.js +1 -1
  142. package/modules/verizonMediaIdSystem.js +1 -1
  143. package/modules/vibrantmediaBidAdapter.js +220 -0
  144. package/modules/vibrantmediaBidAdapter.md +92 -0
  145. package/modules/viewability.js +177 -0
  146. package/modules/viewability.md +87 -0
  147. package/modules/viewdeosDXBidAdapter.js +1 -1
  148. package/modules/voxBidAdapter.js +1 -1
  149. package/modules/waardexBidAdapter.js +1 -1
  150. package/modules/weboramaRtdProvider.js +264 -34
  151. package/modules/weboramaRtdProvider.md +110 -40
  152. package/modules/widespaceBidAdapter.js +2 -2
  153. package/modules/winrBidAdapter.js +7 -7
  154. package/modules/yahoosspBidAdapter.js +3 -1
  155. package/modules/yieldlabBidAdapter.js +1 -1
  156. package/modules/yieldmoBidAdapter.js +2 -2
  157. package/modules/yieldoneBidAdapter.js +6 -0
  158. package/modules/yuktamediaAnalyticsAdapter.js +1 -1
  159. package/package.json +3 -1
  160. package/plugins/poly/arrayFrom.js +3 -0
  161. package/plugins/poly/find.js +3 -0
  162. package/plugins/poly/findIndex.js +3 -0
  163. package/plugins/poly/includes.js +3 -0
  164. package/plugins/poly/package.json +8 -0
  165. package/src/Renderer.js +1 -1
  166. package/src/adRendering.js +38 -0
  167. package/src/adapterManager.js +33 -28
  168. package/src/adapters/bidderFactory.js +13 -11
  169. package/src/adloader.js +3 -2
  170. package/src/auction.js +140 -117
  171. package/src/auctionIndex.js +85 -0
  172. package/src/auctionManager.js +4 -1
  173. package/src/bidderSettings.js +69 -0
  174. package/src/bidfactory.js +18 -6
  175. package/src/config.js +3 -4
  176. package/src/cpmBucketManager.js +1 -1
  177. package/src/native.js +30 -22
  178. package/src/prebid.js +4 -20
  179. package/src/secureCreatives.js +133 -49
  180. package/src/sizeMapping.js +1 -1
  181. package/src/storageManager.js +1 -1
  182. package/src/targeting.js +13 -4
  183. package/src/userSync.js +1 -1
  184. package/src/utils.js +16 -19
  185. package/src/video.js +11 -12
  186. package/src/videoCache.js +10 -9
  187. package/test/fixtures/fixtures.js +2 -1
  188. package/test/helpers/indexStub.js +28 -0
  189. package/test/helpers/syncPromise.js +71 -0
  190. package/test/spec/auctionmanager_spec.js +269 -90
  191. package/test/spec/config_spec.js +24 -1
  192. package/test/spec/e2e/longform/basic_w_bidderSettings.spec.js +1 -1
  193. package/test/spec/e2e/longform/basic_w_custom_adserver_translation.spec.js +1 -1
  194. package/test/spec/e2e/longform/basic_w_priceGran.spec.js +1 -1
  195. package/test/spec/e2e/longform/basic_w_requireExactDuration.spec.js +1 -1
  196. package/test/spec/e2e/longform/basic_wo_brandCategoryExclusion.spec.js +1 -1
  197. package/test/spec/e2e/longform/basic_wo_requireExactDuration.spec.js +1 -1
  198. package/test/spec/modules/adagioBidAdapter_spec.js +0 -10
  199. package/test/spec/modules/adbookpspBidAdapter_spec.js +17 -3
  200. package/test/spec/modules/adhashBidAdapter_spec.js +2 -2
  201. package/test/spec/modules/adnuntiusRtdProvider_spec.js +145 -0
  202. package/test/spec/modules/adpod_spec.js +91 -156
  203. package/test/spec/modules/afpBidAdapter_spec.js +1 -1
  204. package/test/spec/modules/appnexusBidAdapter_spec.js +27 -0
  205. package/test/spec/modules/asealBidAdapter_spec.js +144 -0
  206. package/test/spec/modules/brandmetricsRtdProvider_spec.js +191 -0
  207. package/test/spec/modules/colossussspBidAdapter_spec.js +5 -2
  208. package/test/spec/modules/conversantBidAdapter_spec.js +54 -2
  209. package/test/spec/modules/criteoBidAdapter_spec.js +21 -0
  210. package/test/spec/modules/currency_spec.js +36 -15
  211. package/test/spec/modules/deepintentDpesIdsystem_spec.js +1 -1
  212. package/test/spec/modules/displayioBidAdapter_spec.js +239 -0
  213. package/test/spec/modules/dspxBidAdapter_spec.js +20 -15
  214. package/test/spec/modules/e_volutionBidAdapter_spec.js +242 -0
  215. package/test/spec/modules/eids_spec.js +2 -2
  216. package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +1 -1
  217. package/test/spec/modules/fintezaAnalyticsAdapter_spec.js +1 -1
  218. package/test/spec/modules/gnetBidAdapter_spec.js +6 -6
  219. package/test/spec/modules/gridBidAdapter_spec.js +18 -0
  220. package/test/spec/modules/gumgumBidAdapter_spec.js +49 -3
  221. package/test/spec/modules/hadronIdSystem_spec.js +57 -0
  222. package/test/spec/modules/hadronRtdProvider_spec.js +762 -0
  223. package/test/spec/modules/idxIdSystem_spec.js +1 -1
  224. package/test/spec/modules/improvedigitalBidAdapter_spec.js +19 -0
  225. package/test/spec/modules/jwplayerRtdProvider_spec.js +195 -2
  226. package/test/spec/modules/kargoBidAdapter_spec.js +1 -1
  227. package/test/spec/modules/lunamediahbBidAdapter_spec.js +27 -1
  228. package/test/spec/modules/mass_spec.js +2 -14
  229. package/test/spec/modules/mediakeysBidAdapter_spec.js +1 -1
  230. package/test/spec/modules/multibid_spec.js +1 -1
  231. package/test/spec/modules/oguryBidAdapter_spec.js +63 -5
  232. package/test/spec/modules/onetagBidAdapter_spec.js +1 -1
  233. package/test/spec/modules/openxAnalyticsAdapter_spec.js +1 -1
  234. package/test/spec/modules/parrableIdSystem_spec.js +1 -1
  235. package/test/spec/modules/pilotxBidAdapter_spec.js +244 -0
  236. package/test/spec/modules/prebidServerBidAdapter_spec.js +43 -6
  237. package/test/spec/modules/priceFloors_spec.js +37 -24
  238. package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
  239. package/test/spec/modules/realTimeDataModule_spec.js +51 -2
  240. package/test/spec/modules/riseBidAdapter_spec.js +30 -4
  241. package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +61 -1
  242. package/test/spec/modules/rubiconBidAdapter_spec.js +1 -1
  243. package/test/spec/modules/sharethroughBidAdapter_spec.js +91 -6
  244. package/test/spec/modules/sortableAnalyticsAdapter_spec.js +2 -3
  245. package/test/spec/modules/sovrnBidAdapter_spec.js +413 -333
  246. package/test/spec/modules/sspBCBidAdapter_spec.js +7 -7
  247. package/test/spec/modules/stroeerCoreBidAdapter_spec.js +1 -1
  248. package/test/spec/modules/synacormediaBidAdapter_spec.js +70 -0
  249. package/test/spec/modules/telariaBidAdapter_spec.js +1 -3
  250. package/test/spec/modules/trustpidSystem_spec.js +232 -0
  251. package/test/spec/modules/undertoneBidAdapter_spec.js +55 -2
  252. package/test/spec/modules/userId_spec.js +40 -40
  253. package/test/spec/modules/vibrantmediaBidAdapter_spec.js +1237 -0
  254. package/test/spec/modules/viewability_spec.js +280 -0
  255. package/test/spec/modules/weboramaRtdProvider_spec.js +536 -20
  256. package/test/spec/modules/widespaceBidAdapter_spec.js +1 -1
  257. package/test/spec/modules/yahoosspBidAdapter_spec.js +10 -0
  258. package/test/spec/modules/yieldoneBidAdapter_spec.js +33 -0
  259. package/test/spec/modules/zeotapIdPlusIdSystem_spec.js +1 -1
  260. package/test/spec/native_spec.js +62 -40
  261. package/test/spec/sizeMapping_spec.js +1 -1
  262. package/test/spec/unit/core/adapterManager_spec.js +24 -2
  263. package/test/spec/unit/core/auctionIndex_spec.js +129 -0
  264. package/test/spec/unit/core/bidderFactory_spec.js +65 -12
  265. package/test/spec/unit/core/bidderSettings_spec.js +123 -0
  266. package/test/spec/unit/core/targeting_spec.js +93 -0
  267. package/test/spec/unit/pbjs_api_spec.js +81 -43
  268. package/test/spec/unit/secureCreatives_spec.js +143 -24
  269. package/test/spec/videoCache_spec.js +18 -19
  270. package/test/spec/video_spec.js +51 -61
  271. package/webpack.conf.js +1 -1
@@ -246,7 +246,7 @@ const MOCK = {
246
246
  }
247
247
  },
248
248
  BID_REQUESTED: {
249
- 'bidder': 'rubicon',
249
+ 'bidderCode': 'rubicon',
250
250
  'auctionId': '25c6d7f5-699a-4bfc-87c9-996f915341fa',
251
251
  'bidderRequestId': '1be65d7958826a',
252
252
  'bids': [
@@ -384,6 +384,10 @@ const ANALYTICS_MESSAGE = {
384
384
  'referrerHostname': 'www.test.com',
385
385
  'auctions': [
386
386
  {
387
+
388
+ 'auctionEnd': 1519767013781,
389
+ 'auctionStart': 1519767010567,
390
+ 'bidderOrder': ['rubicon'],
387
391
  'requestId': '25c6d7f5-699a-4bfc-87c9-996f915341fa',
388
392
  'clientTimeoutMillis': 3000,
389
393
  'serverTimeoutMillis': 1000,
@@ -853,6 +857,32 @@ describe('rubicon analytics adapter', function () {
853
857
  expect(message).to.deep.equal(ANALYTICS_MESSAGE);
854
858
  });
855
859
 
860
+ it('should pass along bidderOrder correctly', function () {
861
+ const appnexusBid = utils.deepClone(MOCK.BID_REQUESTED);
862
+ appnexusBid.bidderCode = 'appnexus';
863
+ const pubmaticBid = utils.deepClone(MOCK.BID_REQUESTED);
864
+ pubmaticBid.bidderCode = 'pubmatic';
865
+ const indexBid = utils.deepClone(MOCK.BID_REQUESTED);
866
+ indexBid.bidderCode = 'ix';
867
+ events.emit(AUCTION_INIT, MOCK.AUCTION_INIT);
868
+ events.emit(BID_REQUESTED, pubmaticBid);
869
+ events.emit(BID_REQUESTED, MOCK.BID_REQUESTED);
870
+ events.emit(BID_REQUESTED, indexBid);
871
+ events.emit(BID_REQUESTED, appnexusBid);
872
+ events.emit(BIDDER_DONE, MOCK.BIDDER_DONE);
873
+ events.emit(AUCTION_END, MOCK.AUCTION_END);
874
+ events.emit(SET_TARGETING, MOCK.SET_TARGETING);
875
+ clock.tick(SEND_TIMEOUT + 1000);
876
+
877
+ let message = JSON.parse(server.requests[0].requestBody);
878
+ expect(message.auctions[0].bidderOrder).to.deep.equal([
879
+ 'pubmatic',
880
+ 'rubicon',
881
+ 'ix',
882
+ 'appnexus'
883
+ ]);
884
+ });
885
+
856
886
  it('should pass along user ids', function () {
857
887
  let auctionInit = utils.deepClone(MOCK.AUCTION_INIT);
858
888
  auctionInit.bidderRequests[0].bids[0].userId = {
@@ -987,6 +1017,36 @@ describe('rubicon analytics adapter', function () {
987
1017
  expect(message.auctions[0].adUnits[1].bids[0].bidResponse.adomains).to.be.undefined;
988
1018
  });
989
1019
 
1020
+ it('should NOT pass along adomians with other edge cases', function () {
1021
+ events.emit(AUCTION_INIT, MOCK.AUCTION_INIT);
1022
+ events.emit(BID_REQUESTED, MOCK.BID_REQUESTED);
1023
+
1024
+ // should filter out non string values and pass valid ones
1025
+ let bidResponse1 = utils.deepClone(MOCK.BID_RESPONSE[0]);
1026
+ bidResponse1.meta = {
1027
+ advertiserDomains: [123, 'prebid.org', false, true, [], 'magnite.com', {}]
1028
+ }
1029
+
1030
+ // array of arrays (as seen when passed by kargo bid adapter)
1031
+ let bidResponse2 = utils.deepClone(MOCK.BID_RESPONSE[1]);
1032
+ bidResponse2.meta = {
1033
+ advertiserDomains: [['prebid.org']]
1034
+ }
1035
+
1036
+ events.emit(BID_RESPONSE, bidResponse1);
1037
+ events.emit(BID_RESPONSE, bidResponse2);
1038
+ events.emit(BIDDER_DONE, MOCK.BIDDER_DONE);
1039
+ events.emit(AUCTION_END, MOCK.AUCTION_END);
1040
+ events.emit(SET_TARGETING, MOCK.SET_TARGETING);
1041
+ events.emit(BID_WON, MOCK.BID_WON[0]);
1042
+ events.emit(BID_WON, MOCK.BID_WON[1]);
1043
+
1044
+ let message = JSON.parse(server.requests[0].requestBody);
1045
+ validate(message);
1046
+ expect(message.auctions[0].adUnits[0].bids[0].bidResponse.adomains).to.deep.equal(['prebid.org', 'magnite.com']);
1047
+ expect(message.auctions[0].adUnits[1].bids[0].bidResponse.adomains).to.be.undefined;
1048
+ });
1049
+
990
1050
  it('should not pass empty adServerTargeting values', function () {
991
1051
  events.emit(AUCTION_INIT, MOCK.AUCTION_INIT);
992
1052
  events.emit(BID_REQUESTED, MOCK.BID_REQUESTED);
@@ -10,7 +10,7 @@ import {
10
10
  import {parse as parseQuery} from 'querystring';
11
11
  import {config} from 'src/config.js';
12
12
  import * as utils from 'src/utils.js';
13
- import find from 'core-js-pure/features/array/find.js';
13
+ import find from 'prebidjs-polyfill/find.js';
14
14
  import {createEidsArray} from 'modules/userId/eids.js';
15
15
 
16
16
  const INTEGRATION = `pbjs_lite_v$prebid.version$`; // $prebid.version$ will be substituted in by gulp in built prebid
@@ -1,4 +1,5 @@
1
1
  import { expect } from 'chai';
2
+ import * as sinon from 'sinon';
2
3
  import { sharethroughAdapterSpec, sharethroughInternal } from 'modules/sharethroughBidAdapter.js';
3
4
  import { newBidder } from 'src/adapters/bidderFactory.js';
4
5
  import { config } from 'src/config';
@@ -157,7 +158,6 @@ describe('sharethrough adapter spec', function () {
157
158
  startdelay: 42,
158
159
  skipmin: 10,
159
160
  skipafter: 20,
160
- placement: 1,
161
161
  delivery: 1,
162
162
  companiontype: 'companion type',
163
163
  companionad: 'companion ad',
@@ -205,6 +205,7 @@ describe('sharethrough adapter spec', function () {
205
205
  expect(openRtbReq.cur).to.deep.equal(['USD']);
206
206
  expect(openRtbReq.tmax).to.equal(242);
207
207
 
208
+ expect(Object.keys(openRtbReq.site)).to.have.length(3);
208
209
  expect(openRtbReq.site.domain).not.to.be.undefined;
209
210
  expect(openRtbReq.site.page).not.to.be.undefined;
210
211
  expect(openRtbReq.site.ref).to.equal('https://referer.com');
@@ -256,6 +257,17 @@ describe('sharethrough adapter spec', function () {
256
257
  });
257
258
  });
258
259
 
260
+ describe('no referer provided', () => {
261
+ beforeEach(() => {
262
+ bidderRequest = {};
263
+ });
264
+
265
+ it('should set referer to undefined', () => {
266
+ const openRtbReq = spec.buildRequests(bidRequests, bidderRequest)[0].data;
267
+ expect(openRtbReq.site.ref).to.be.undefined;
268
+ });
269
+ });
270
+
259
271
  describe('regulation', () => {
260
272
  describe('gdpr', () => {
261
273
  it('should populate request accordingly when gdpr applies', () => {
@@ -419,17 +431,90 @@ describe('sharethrough adapter spec', function () {
419
431
  expect(videoImp.startdelay).to.equal(0);
420
432
  expect(videoImp.skipmin).to.equal(0);
421
433
  expect(videoImp.skipafter).to.equal(0);
422
- expect(videoImp.placement).to.be.undefined;
434
+ expect(videoImp.placement).to.equal(1);
423
435
  expect(videoImp.delivery).to.be.undefined;
424
436
  expect(videoImp.companiontype).to.be.undefined;
425
437
  expect(videoImp.companionad).to.be.undefined;
426
438
  });
427
439
 
428
- it('should not return a video impression if context is outstream', () => {
429
- bidRequests[1].mediaTypes.video.context = 'outstream';
430
- const builtRequest = spec.buildRequests(bidRequests, bidderRequest)[1];
440
+ describe('outstream', () => {
441
+ it('should use placement value if provided', () => {
442
+ bidRequests[1].mediaTypes.video.context = 'outstream';
443
+ bidRequests[1].mediaTypes.video.placement = 3;
444
+
445
+ const builtRequest = spec.buildRequests(bidRequests, bidderRequest)[1];
446
+ const videoImp = builtRequest.data.imp[0].video;
447
+
448
+ expect(videoImp.placement).to.equal(3);
449
+ });
450
+
451
+ it('should default placement to 4 if not provided', () => {
452
+ bidRequests[1].mediaTypes.video.context = 'outstream';
453
+
454
+ const builtRequest = spec.buildRequests(bidRequests, bidderRequest)[1];
455
+ const videoImp = builtRequest.data.imp[0].video;
456
+
457
+ expect(videoImp.placement).to.equal(4);
458
+ });
459
+ });
460
+ });
461
+
462
+ describe('first party data', () => {
463
+ const firstPartyData = {
464
+ site: {
465
+ name: 'example',
466
+ keywords: 'power tools, drills',
467
+ search: 'drill',
468
+ content: {
469
+ userrating: '4',
470
+ },
471
+ ext: {
472
+ data: {
473
+ pageType: 'article',
474
+ category: 'repair',
475
+ },
476
+ },
477
+ },
478
+ user: {
479
+ yob: 1985,
480
+ gender: 'm',
481
+ ext: {
482
+ data: {
483
+ registered: true,
484
+ interests: ['cars'],
485
+ },
486
+ },
487
+ },
488
+ };
489
+
490
+ let configStub;
491
+
492
+ beforeEach(() => {
493
+ configStub = sinon.stub(config, 'getConfig');
494
+ configStub.withArgs('ortb2').returns(firstPartyData);
495
+ });
496
+
497
+ afterEach(() => {
498
+ configStub.restore();
499
+ });
500
+
501
+ it('should include first party data in open rtb request, site section', () => {
502
+ const openRtbReq = spec.buildRequests(bidRequests, bidderRequest)[0].data;
503
+
504
+ expect(openRtbReq.site.name).to.equal(firstPartyData.site.name);
505
+ expect(openRtbReq.site.keywords).to.equal(firstPartyData.site.keywords);
506
+ expect(openRtbReq.site.search).to.equal(firstPartyData.site.search);
507
+ expect(openRtbReq.site.content).to.deep.equal(firstPartyData.site.content);
508
+ expect(openRtbReq.site.ext).to.deep.equal(firstPartyData.site.ext);
509
+ });
510
+
511
+ it('should include first party data in open rtb request, user section', () => {
512
+ const openRtbReq = spec.buildRequests(bidRequests, bidderRequest)[0].data;
431
513
 
432
- expect(builtRequest).to.be.undefined;
514
+ expect(openRtbReq.user.yob).to.equal(firstPartyData.user.yob);
515
+ expect(openRtbReq.user.gender).to.equal(firstPartyData.user.gender);
516
+ expect(openRtbReq.user.ext.data).to.deep.equal(firstPartyData.user.ext.data);
517
+ expect(openRtbReq.user.ext.eids).not.to.be.undefined;
433
518
  });
434
519
  });
435
520
  });
@@ -148,7 +148,6 @@ describe('Sortable Analytics Adapter', function() {
148
148
  }
149
149
  }
150
150
  });
151
-
152
151
  sortableAnalyticsAdapter.enableAnalytics(initialConfig);
153
152
  });
154
153
 
@@ -203,11 +202,11 @@ describe('Sortable Analytics Adapter', function() {
203
202
  brc: 1,
204
203
  brid: ['10141593b1d84a', '37a8760be6db23'],
205
204
  rs: ['300x250', '728x90'],
206
- btcp: [0.70, 0.50],
205
+ btcp: [0.70, 0.50].map(n => n * 0.95),
207
206
  btcc: 'USD',
208
207
  btin: true,
209
208
  btsrc: 'sortable',
210
- c: [0.70, 0.50],
209
+ c: [0.70, 0.50].map(n => n * 0.95),
211
210
  cc: 'USD',
212
211
  did: null,
213
212
  inr: true,