prebid.js 7.10.0 → 7.13.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 (366) hide show
  1. package/.github/PULL_REQUEST_TEMPLATE.md +16 -10
  2. package/.github/codeql/codeql-config.yml +4 -0
  3. package/.github/workflows/codeql-analysis.yml +73 -0
  4. package/.github/workflows/issue_tracker.yml +1 -1
  5. package/README.md +0 -2
  6. package/babelConfig.js +10 -4
  7. package/dist/33acrossBidAdapter.js +1 -1
  8. package/dist/acuityAdsBidAdapter.js +1 -0
  9. package/dist/adagioBidAdapter.js +1 -1
  10. package/dist/adbookpspBidAdapter.js +1 -1
  11. package/dist/adgenerationBidAdapter.js +1 -1
  12. package/dist/adkernelBidAdapter.js +1 -1
  13. package/dist/adrelevantisBidAdapter.js +1 -1
  14. package/dist/adriverBidAdapter.js +1 -1
  15. package/dist/adriverIdSystem.js +1 -1
  16. package/dist/adtelligentBidAdapter.js +1 -1
  17. package/dist/adtrgtmeBidAdapter.js +1 -0
  18. package/dist/adxcgBidAdapter.js +1 -1
  19. package/dist/adyoulikeBidAdapter.js +1 -1
  20. package/dist/ajaBidAdapter.js +1 -1
  21. package/dist/alkimiBidAdapter.js +1 -1
  22. package/dist/amxBidAdapter.js +1 -1
  23. package/dist/amxIdSystem.js +1 -1
  24. package/dist/aniviewBidAdapter.js +1 -1
  25. package/dist/aolBidAdapter.js +1 -1
  26. package/dist/appierAnalyticsAdapter.js +1 -1
  27. package/dist/appnexusBidAdapter.js +1 -1
  28. package/dist/asoBidAdapter.js +1 -1
  29. package/dist/audiencerunBidAdapter.js +1 -1
  30. package/dist/axonixBidAdapter.js +1 -1
  31. package/dist/beopBidAdapter.js +1 -1
  32. package/dist/betweenBidAdapter.js +1 -1
  33. package/dist/bidglassBidAdapter.js +1 -1
  34. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  35. package/dist/big-richmediaBidAdapter.js +1 -1
  36. package/dist/bluebillywigBidAdapter.js +1 -1
  37. package/dist/brandmetricsRtdProvider.js +1 -1
  38. package/dist/bridgewellBidAdapter.js +1 -1
  39. package/dist/brightMountainMediaBidAdapter.js +1 -1
  40. package/dist/browsiRtdProvider.js +1 -1
  41. package/dist/cleanioRtdProvider.js +1 -1
  42. package/dist/concertBidAdapter.js +1 -1
  43. package/dist/connectadBidAdapter.js +1 -1
  44. package/dist/consentManagement.js +1 -1
  45. package/dist/consentManagementUsp.js +1 -1
  46. package/dist/consumableBidAdapter.js +1 -1
  47. package/dist/conversantBidAdapter.js +1 -1
  48. package/dist/cpmstarBidAdapter.js +1 -1
  49. package/dist/craftBidAdapter.js +1 -1
  50. package/dist/criteoBidAdapter.js +1 -1
  51. package/dist/currency.js +1 -1
  52. package/dist/datawrkzBidAdapter.js +1 -0
  53. package/dist/debugging-standalone.js +1 -1
  54. package/dist/dfpAdServerVideo.js +1 -1
  55. package/dist/dgkeywordRtdProvider.js +1 -1
  56. package/dist/displayioBidAdapter.js +1 -3
  57. package/dist/dspxBidAdapter.js +1 -1
  58. package/dist/enrichmentFpdModule.js +1 -1
  59. package/dist/eplanningBidAdapter.js +1 -1
  60. package/dist/finativeBidAdapter.js +1 -1
  61. package/dist/glimpseBidAdapter.js +1 -1
  62. package/dist/gmosspBidAdapter.js +1 -1
  63. package/dist/goldbachBidAdapter.js +1 -1
  64. package/dist/gridBidAdapter.js +1 -1
  65. package/dist/gridNMBidAdapter.js +1 -1
  66. package/dist/gumgumBidAdapter.js +1 -1
  67. package/dist/h12mediaBidAdapter.js +1 -1
  68. package/dist/id5IdSystem.js +1 -1
  69. package/dist/imRtdProvider.js +1 -1
  70. package/dist/impactifyBidAdapter.js +1 -1
  71. package/dist/improvedigitalBidAdapter.js +1 -1
  72. package/dist/inmarBidAdapter.js +1 -1
  73. package/dist/insticatorBidAdapter.js +1 -1
  74. package/dist/ixBidAdapter.js +1 -1
  75. package/dist/jixieBidAdapter.js +1 -1
  76. package/dist/justpremiumBidAdapter.js +1 -1
  77. package/dist/kargoBidAdapter.js +1 -1
  78. package/dist/konduitAnalyticsAdapter.js +1 -1
  79. package/dist/kueezBidAdapter.js +1 -1
  80. package/dist/lassoBidAdapter.js +1 -1
  81. package/dist/lifestreetBidAdapter.js +1 -0
  82. package/dist/limelightDigitalBidAdapter.js +1 -1
  83. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  84. package/dist/logicadBidAdapter.js +1 -1
  85. package/dist/loglyliftBidAdapter.js +1 -1
  86. package/dist/mabidderBidAdapter.js +1 -0
  87. package/dist/malltvAnalyticsAdapter.js +1 -1
  88. package/dist/marsmediaBidAdapter.js +1 -1
  89. package/dist/mediafuseBidAdapter.js +1 -1
  90. package/dist/mediagoBidAdapter.js +1 -0
  91. package/dist/mediakeysBidAdapter.js +1 -1
  92. package/dist/mediasquareBidAdapter.js +1 -1
  93. package/dist/mgidBidAdapter.js +1 -1
  94. package/dist/minutemediaBidAdapter.js +1 -1
  95. package/dist/nextMillenniumBidAdapter.js +1 -1
  96. package/dist/not-for-prod/prebid.js +153 -147
  97. package/dist/oguryBidAdapter.js +1 -1
  98. package/dist/oneKeyIdSystem.js +1 -0
  99. package/dist/oneKeyRtdProvider.js +1 -0
  100. package/dist/onetagBidAdapter.js +1 -1
  101. package/dist/ooloAnalyticsAdapter.js +1 -1
  102. package/dist/openxAnalyticsAdapter.js +1 -1
  103. package/dist/outbrainBidAdapter.js +1 -1
  104. package/dist/parrableIdSystem.js +1 -1
  105. package/dist/permutiveRtdProvider.js +1 -1
  106. package/dist/pixfutureBidAdapter.js +1 -1
  107. package/dist/prebid-core.js +2 -2
  108. package/dist/publinkIdSystem.js +1 -1
  109. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  110. package/dist/pubmaticBidAdapter.js +1 -1
  111. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  112. package/dist/pxyzBidAdapter.js +1 -1
  113. package/dist/quantcastBidAdapter.js +1 -1
  114. package/dist/rasBidAdapter.js +1 -1
  115. package/dist/readpeakBidAdapter.js +1 -1
  116. package/dist/relaidoBidAdapter.js +1 -1
  117. package/dist/rhythmoneBidAdapter.js +1 -1
  118. package/dist/riseBidAdapter.js +1 -1
  119. package/dist/rtbhouseBidAdapter.js +1 -1
  120. package/dist/rubiconAnalyticsAdapter.js +1 -1
  121. package/dist/rubiconBidAdapter.js +1 -1
  122. package/dist/seedingAllianceBidAdapter.js +1 -1
  123. package/dist/seedtagBidAdapter.js +1 -1
  124. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  125. package/dist/sharethroughBidAdapter.js +1 -1
  126. package/dist/shinezBidAdapter.js +1 -1
  127. package/dist/smaatoBidAdapter.js +1 -1
  128. package/dist/smartadserverBidAdapter.js +1 -1
  129. package/dist/smartxBidAdapter.js +1 -1
  130. package/dist/smilewantedBidAdapter.js +1 -1
  131. package/dist/sonobiBidAdapter.js +1 -1
  132. package/dist/sovrnAnalyticsAdapter.js +1 -1
  133. package/dist/sovrnBidAdapter.js +1 -1
  134. package/dist/sspBCBidAdapter.js +1 -1
  135. package/dist/sublimeBidAdapter.js +1 -1
  136. package/dist/synacormediaBidAdapter.js +1 -1
  137. package/dist/tappxBidAdapter.js +1 -1
  138. package/dist/targetVideoBidAdapter.js +1 -1
  139. package/dist/teadsBidAdapter.js +1 -1
  140. package/dist/trionBidAdapter.js +1 -1
  141. package/dist/tripleliftBidAdapter.js +1 -1
  142. package/dist/trustpidSystem.js +1 -1
  143. package/dist/ttdBidAdapter.js +1 -1
  144. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  145. package/dist/underdogmediaBidAdapter.js +1 -1
  146. package/dist/undertoneBidAdapter.js +1 -1
  147. package/dist/userId.js +1 -1
  148. package/dist/vidazooBidAdapter.js +1 -1
  149. package/dist/videobyteBidAdapter.js +1 -1
  150. package/dist/viewability.js +1 -1
  151. package/dist/visxBidAdapter.js +1 -1
  152. package/dist/vuukleBidAdapter.js +1 -1
  153. package/dist/widespaceBidAdapter.js +1 -1
  154. package/dist/winrBidAdapter.js +1 -1
  155. package/dist/yahoosspBidAdapter.js +1 -1
  156. package/dist/yieldmoBidAdapter.js +1 -1
  157. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  158. package/dist/zeta_global_sspBidAdapter.js +1 -1
  159. package/integrationExamples/gpt/permutiveRtdProvider_example.html +1 -1
  160. package/karma.conf.maker.js +2 -13
  161. package/modules/.submodules.json +2 -0
  162. package/modules/acuityAdsBidAdapter.js +207 -0
  163. package/modules/acuityAdsBidAdapter.md +79 -0
  164. package/modules/adagioBidAdapter.js +2 -3
  165. package/modules/adgenerationBidAdapter.js +2 -2
  166. package/modules/adkernelBidAdapter.js +28 -12
  167. package/modules/admixerBidAdapter.js +1 -1
  168. package/modules/adnowBidAdapter.js +1 -1
  169. package/modules/adpod.js +1 -1
  170. package/modules/adrelevantisBidAdapter.js +2 -2
  171. package/modules/adriverBidAdapter.js +5 -12
  172. package/modules/adriverIdSystem.js +2 -1
  173. package/modules/adtargetBidAdapter.js +1 -1
  174. package/modules/adtelligentBidAdapter.js +6 -2
  175. package/modules/adtrgtmeBidAdapter.js +333 -0
  176. package/modules/adtrgtmeBidAdapter.md +69 -0
  177. package/modules/adtrueBidAdapter.js +1 -1
  178. package/modules/adxpremiumAnalyticsAdapter.js +1 -1
  179. package/modules/adyoulikeBidAdapter.js +1 -1
  180. package/modules/alkimiBidAdapter.js +2 -1
  181. package/modules/aniviewBidAdapter.js +1 -1
  182. package/modules/appnexusBidAdapter.js +13 -93
  183. package/modules/apstreamBidAdapter.js +2 -2
  184. package/modules/beopBidAdapter.js +4 -4
  185. package/modules/betweenBidAdapter.js +4 -4
  186. package/modules/bidwatchAnalyticsAdapter.js +112 -59
  187. package/modules/bizzclickBidAdapter.js +1 -1
  188. package/modules/brightMountainMediaBidAdapter.js +1 -1
  189. package/modules/browsiRtdProvider.js +24 -10
  190. package/modules/cleanmedianetBidAdapter.js +1 -1
  191. package/modules/consentManagement.js +1 -1
  192. package/modules/consentManagementUsp.js +1 -1
  193. package/modules/consumableBidAdapter.js +43 -3
  194. package/modules/cpmstarBidAdapter.js +23 -13
  195. package/modules/criteoBidAdapter.js +19 -13
  196. package/modules/currency.js +1 -0
  197. package/modules/cwireBidAdapter.js +1 -1
  198. package/modules/datablocksBidAdapter.js +1 -1
  199. package/modules/datawrkzBidAdapter.js +633 -0
  200. package/modules/datawrkzBidAdapter.md +160 -0
  201. package/modules/dfpAdServerVideo.js +2 -2
  202. package/modules/dgkeywordRtdProvider.js +10 -1
  203. package/modules/displayioBidAdapter.js +92 -97
  204. package/modules/dspxBidAdapter.js +1 -1
  205. package/modules/e_volutionBidAdapter.js +3 -3
  206. package/modules/ebdrBidAdapter.js +1 -1
  207. package/modules/emx_digitalBidAdapter.js +1 -1
  208. package/modules/enrichmentFpdModule.js +11 -0
  209. package/modules/fabrickIdSystem.js +2 -2
  210. package/modules/gamoshiBidAdapter.js +1 -1
  211. package/modules/getintentBidAdapter.js +1 -1
  212. package/modules/gjirafaBidAdapter.js +2 -2
  213. package/modules/goldbachBidAdapter.js +8 -8
  214. package/modules/gothamadsBidAdapter.js +2 -2
  215. package/modules/gumgumBidAdapter.js +3 -3
  216. package/modules/h12mediaBidAdapter.js +1 -1
  217. package/modules/id5AnalyticsAdapter.js +1 -1
  218. package/modules/id5IdSystem.js +160 -111
  219. package/modules/id5IdSystem.md +16 -14
  220. package/modules/imRtdProvider.js +20 -7
  221. package/modules/imRtdProvider.md +3 -1
  222. package/modules/impactifyBidAdapter.js +1 -1
  223. package/modules/improvedigitalBidAdapter.js +50 -28
  224. package/modules/inskinBidAdapter.js +1 -1
  225. package/modules/insticatorBidAdapter.js +1 -1
  226. package/modules/integr8BidAdapter.js +2 -2
  227. package/modules/intentIqIdSystem.js +2 -2
  228. package/modules/interactiveOffersBidAdapter.js +1 -1
  229. package/modules/iqmBidAdapter.js +1 -1
  230. package/modules/ixBidAdapter.js +21 -328
  231. package/modules/ixBidAdapter.md +1 -19
  232. package/modules/kargoBidAdapter.js +4 -5
  233. package/modules/krushmediaBidAdapter.js +2 -2
  234. package/modules/lassoBidAdapter.js +3 -3
  235. package/modules/lifestreetBidAdapter.js +143 -0
  236. package/modules/limelightDigitalBidAdapter.js +2 -1
  237. package/modules/livewrappedAnalyticsAdapter.js +3 -3
  238. package/modules/lkqdBidAdapter.js +3 -3
  239. package/modules/loganBidAdapter.js +2 -2
  240. package/modules/luponmediaBidAdapter.js +3 -3
  241. package/modules/mabidderBidAdapter.js +60 -0
  242. package/modules/mabidderBidAdapter.md +31 -0
  243. package/modules/malltvBidAdapter.js +2 -2
  244. package/modules/mediagoBidAdapter.js +462 -0
  245. package/modules/mediagoBidAdapter.md +34 -0
  246. package/modules/mediakeysBidAdapter.js +2 -2
  247. package/modules/mgidBidAdapter.js +2 -2
  248. package/modules/nextMillenniumBidAdapter.js +25 -6
  249. package/modules/nobidBidAdapter.js +2 -2
  250. package/modules/novatiqIdSystem.js +1 -1
  251. package/modules/oneKeyIdSystem.js +78 -0
  252. package/modules/oneKeyIdSystem.md +109 -0
  253. package/modules/oneKeyRtdProvider.js +98 -0
  254. package/modules/oneKeyRtdProvider.md +127 -0
  255. package/modules/open8BidAdapter.js +1 -1
  256. package/modules/openwebBidAdapter.js +1 -1
  257. package/modules/openxAnalyticsAdapter.js +5 -744
  258. package/modules/openxAnalyticsAdapter.md +4 -0
  259. package/modules/openxBidAdapter.js +3 -3
  260. package/modules/permutiveRtdProvider.js +55 -8
  261. package/modules/pixfutureBidAdapter.js +1 -1
  262. package/modules/prebidmanagerAnalyticsAdapter.js +1 -1
  263. package/modules/priceFloors.js +1 -1
  264. package/modules/pubmaticAnalyticsAdapter.js +1 -1
  265. package/modules/pubmaticBidAdapter.js +19 -1
  266. package/modules/pubwiseAnalyticsAdapter.js +1 -1
  267. package/modules/pubwiseBidAdapter.js +3 -3
  268. package/modules/pubxBidAdapter.js +1 -1
  269. package/modules/pubxaiAnalyticsAdapter.js +2 -2
  270. package/modules/quantcastIdSystem.js +1 -1
  271. package/modules/radsBidAdapter.js +1 -1
  272. package/modules/rasBidAdapter.js +8 -0
  273. package/modules/rasBidAdapter.md +14 -13
  274. package/modules/revcontentBidAdapter.js +1 -1
  275. package/modules/richaudienceBidAdapter.js +1 -1
  276. package/modules/rtbhouseBidAdapter.js +25 -1
  277. package/modules/schain.js +1 -1
  278. package/modules/seedtagBidAdapter.md +25 -56
  279. package/modules/showheroes-bsBidAdapter.js +1 -1
  280. package/modules/sizeMappingV2.js +1 -1
  281. package/modules/smaatoBidAdapter.js +2 -2
  282. package/modules/sonobiAnalyticsAdapter.js +1 -1
  283. package/modules/sonobiBidAdapter.js +4 -3
  284. package/modules/staqAnalyticsAdapter.js +1 -1
  285. package/modules/tappxBidAdapter.js +11 -2
  286. package/modules/targetVideoBidAdapter.js +1 -1
  287. package/modules/theAdxBidAdapter.js +2 -2
  288. package/modules/tpmnBidAdapter.js +1 -1
  289. package/modules/trionBidAdapter.js +2 -2
  290. package/modules/tripleliftBidAdapter.js +20 -1
  291. package/modules/trustpidSystem.js +6 -42
  292. package/modules/trustpidSystem.md +10 -10
  293. package/modules/underdogmediaBidAdapter.js +1 -1
  294. package/modules/userId/eids.js +26 -0
  295. package/modules/userId/userId.md +2 -2
  296. package/modules/vdoaiBidAdapter.js +1 -1
  297. package/modules/vidazooBidAdapter.js +7 -5
  298. package/modules/vidoomyBidAdapter.js +1 -1
  299. package/modules/viewability.js +14 -14
  300. package/modules/winrBidAdapter.js +1 -1
  301. package/modules/yahoosspBidAdapter.js +3 -3
  302. package/modules/yandexBidAdapter.js +1 -1
  303. package/modules/yieldmoBidAdapter.js +3 -3
  304. package/modules/yieldoneBidAdapter.js +2 -2
  305. package/modules/zeta_global_sspBidAdapter.js +24 -21
  306. package/package.json +3 -3
  307. package/src/Renderer.js +1 -1
  308. package/src/adloader.js +2 -1
  309. package/src/adserver.js +0 -56
  310. package/src/auction.js +60 -16
  311. package/src/bidfactory.js +1 -1
  312. package/src/native.js +75 -60
  313. package/src/refererDetection.js +12 -1
  314. package/src/sizeMapping.js +5 -7
  315. package/src/targeting.js +1 -1
  316. package/src/userSync.js +1 -1
  317. package/src/utils/promise.js +3 -1
  318. package/src/utils.js +27 -0
  319. package/src/video.js +5 -4
  320. package/src/videoCache.js +8 -2
  321. package/test/pages/instream.html +2 -2
  322. package/test/spec/modules/acuityAdsBidAdapter_spec.js +398 -0
  323. package/test/spec/modules/adagioBidAdapter_spec.js +2 -0
  324. package/test/spec/modules/adkernelBidAdapter_spec.js +11 -2
  325. package/test/spec/modules/adriverBidAdapter_spec.js +6 -13
  326. package/test/spec/modules/adriverIdSystem_spec.js +3 -8
  327. package/test/spec/modules/adtelligentBidAdapter_spec.js +2 -0
  328. package/test/spec/modules/adtrgtmeBidAdapter_spec.js +802 -0
  329. package/test/spec/modules/alkimiBidAdapter_spec.js +2 -1
  330. package/test/spec/modules/appnexusBidAdapter_spec.js +1 -0
  331. package/test/spec/modules/beopBidAdapter_spec.js +11 -0
  332. package/test/spec/modules/betweenBidAdapter_spec.js +17 -0
  333. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +28 -12
  334. package/test/spec/modules/big-richmediaBidAdapter_spec.js +1 -0
  335. package/test/spec/modules/browsiRtdProvider_spec.js +40 -1
  336. package/test/spec/modules/consumableBidAdapter_spec.js +158 -0
  337. package/test/spec/modules/cpmstarBidAdapter_spec.js +1 -1
  338. package/test/spec/modules/criteoBidAdapter_spec.js +35 -26
  339. package/test/spec/modules/currency_spec.js +22 -0
  340. package/test/spec/modules/datawrkzBidAdapter_spec.js +656 -0
  341. package/test/spec/modules/dgkeywordRtdProvider_spec.js +1 -1
  342. package/test/spec/modules/displayioBidAdapter_spec.js +16 -52
  343. package/test/spec/modules/enrichmentFpdModule_spec.js +16 -1
  344. package/test/spec/modules/fpdModule_spec.js +2 -1
  345. package/test/spec/modules/id5IdSystem_spec.js +529 -172
  346. package/test/spec/modules/imRtdProvider_spec.js +10 -5
  347. package/test/spec/modules/improvedigitalBidAdapter_spec.js +9 -13
  348. package/test/spec/modules/ixBidAdapter_spec.js +216 -123
  349. package/test/spec/modules/kargoBidAdapter_spec.js +11 -2
  350. package/test/spec/modules/lifestreetBidAdapter_spec.js +232 -0
  351. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +59 -7
  352. package/test/spec/modules/mabidderBidAdapter_spec.js +125 -0
  353. package/test/spec/modules/mediagoBidAdapter_spec.js +97 -0
  354. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +2 -7
  355. package/test/spec/modules/oneKeyIdSystem_spec.js +107 -0
  356. package/test/spec/modules/oneKeyRtdProvider_spec.js +152 -0
  357. package/test/spec/modules/openxAnalyticsAdapter_spec.js +6 -638
  358. package/test/spec/modules/permutiveRtdProvider_spec.js +152 -2
  359. package/test/spec/modules/pubmaticBidAdapter_spec.js +69 -4
  360. package/test/spec/modules/rasBidAdapter_spec.js +2 -0
  361. package/test/spec/modules/tripleliftBidAdapter_spec.js +18 -0
  362. package/test/spec/modules/trustpidSystem_spec.js +27 -45
  363. package/test/spec/modules/vidazooBidAdapter_spec.js +36 -23
  364. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +59 -0
  365. package/test/spec/native_spec.js +257 -2
  366. package/test/spec/videoCache_spec.js +37 -7
@@ -6,6 +6,7 @@ const REQUEST = {
6
6
  'bidId': '456',
7
7
  'bidder': 'alkimi',
8
8
  'sizes': [[300, 250]],
9
+ 'adUnitCode': 'bannerAdUnitCode',
9
10
  'mediaTypes': {
10
11
  'banner': {
11
12
  'sizes': [[300, 250]]
@@ -138,7 +139,7 @@ describe('alkimiBidAdapter', function () {
138
139
  expect(bidderRequest.data.requestId).to.equal('123')
139
140
  expect(bidderRequest.data.referer).to.equal('http://test.com/path.html')
140
141
  expect(bidderRequest.data.schain).to.deep.contains({ver: '1.0', complete: 1, nodes: [{asi: 'alkimi-onboarding.com', sid: '00001', hp: 1}]})
141
- expect(bidderRequest.data.signRequest.bids).to.deep.contains({ token: 'e64782a4-8e68-4c38-965b-80ccf115d46f', pos: 7, bidFloor: 0.1, width: 300, height: 250, impMediaType: 'Banner' })
142
+ expect(bidderRequest.data.signRequest.bids).to.deep.contains({ token: 'e64782a4-8e68-4c38-965b-80ccf115d46f', pos: 7, bidFloor: 0.1, width: 300, height: 250, impMediaType: 'Banner', adUnitCode: 'bannerAdUnitCode' })
142
143
  expect(bidderRequest.data.signRequest.randomUUID).to.equal(undefined)
143
144
  expect(bidderRequest.data.bidIds).to.deep.contains('456')
144
145
  expect(bidderRequest.data.signature).to.equal(undefined)
@@ -1195,6 +1195,7 @@ describe('AppNexusAdapter', function () {
1195
1195
  it('should get correct bid response', function () {
1196
1196
  let expectedResponse = [
1197
1197
  {
1198
+ 'adId': '3a1f23123e',
1198
1199
  'requestId': '3db3773286ee59',
1199
1200
  'cpm': 0.5,
1200
1201
  'creativeId': 29681110,
@@ -204,5 +204,16 @@ describe('BeOp Bid Adapter tests', () => {
204
204
  expect(triggerPixelStub.getCall(0).args[0]).to.include('se_ac=won');
205
205
  expect(triggerPixelStub.getCall(0).args[0]).to.exist.and.to.include('pid=5a8af500c9e77c00017e4cad');
206
206
  });
207
+ it('should call triggerPixel utils function on bid won and work even if params is an array', function () {
208
+ spec.onBidWon({});
209
+ spec.onBidWon();
210
+ expect(triggerPixelStub.getCall(0)).to.be.null;
211
+ spec.onBidWon({params: [{accountId: '5a8af500c9e77c00017e4cad'}], cpm: 1.2});
212
+ expect(triggerPixelStub.getCall(0)).to.not.be.null;
213
+ expect(triggerPixelStub.getCall(0).args[0]).to.exist.and.to.include('https://t.beop.io');
214
+ expect(triggerPixelStub.getCall(0).args[0]).to.include('se_ca=bid');
215
+ expect(triggerPixelStub.getCall(0).args[0]).to.include('se_ac=won');
216
+ expect(triggerPixelStub.getCall(0).args[0]).to.exist.and.to.include('pid=5a8af500c9e77c00017e4cad');
217
+ });
207
218
  });
208
219
  });
@@ -85,6 +85,23 @@ describe('betweenBidAdapterTests', function () {
85
85
 
86
86
  expect(req_data.cur).to.equal('THX');
87
87
  });
88
+ it('validate default cur USD', function() {
89
+ let bidRequestData = [{
90
+ bidId: 'bid1234',
91
+ bidder: 'between',
92
+ params: {
93
+ w: 240,
94
+ h: 400,
95
+ s: 1112
96
+ },
97
+ sizes: [[240, 400]]
98
+ }];
99
+
100
+ let request = spec.buildRequests(bidRequestData);
101
+ let req_data = JSON.parse(request.data)[0].data;
102
+
103
+ expect(req_data.cur).to.equal('USD');
104
+ });
88
105
  it('validate subid param', function() {
89
106
  let bidRequestData = [{
90
107
  bidId: 'bid1234',
@@ -260,15 +260,15 @@ describe('BidWatch Analytics', function () {
260
260
  describe('main test flow', function () {
261
261
  beforeEach(function () {
262
262
  sinon.stub(events, 'getEvents').returns([]);
263
+ sinon.spy(bidwatchAnalytics, 'track');
263
264
  });
264
-
265
265
  afterEach(function () {
266
266
  events.getEvents.restore();
267
+ bidwatchAnalytics.disableAnalytics();
268
+ bidwatchAnalytics.track.restore();
267
269
  });
268
270
 
269
- it('should catch events of interest', function () {
270
- sinon.spy(bidwatchAnalytics, 'track');
271
-
271
+ it('test auctionEnd', function () {
272
272
  adapterManager.registerAnalyticsAdapter({
273
273
  code: 'bidwatch',
274
274
  adapter: bidwatchAnalytics
@@ -280,6 +280,9 @@ describe('BidWatch Analytics', function () {
280
280
  domain: 'test'
281
281
  }
282
282
  });
283
+
284
+ events.emit(constants.EVENTS.BID_REQUESTED, auctionEnd['bidderRequests'][0]);
285
+ events.emit(constants.EVENTS.BID_RESPONSE, auctionEnd['bidsReceived'][0]);
283
286
  events.emit(constants.EVENTS.BID_TIMEOUT, bidTimeout);
284
287
  events.emit(constants.EVENTS.AUCTION_END, auctionEnd);
285
288
  expect(server.requests.length).to.equal(1);
@@ -287,18 +290,31 @@ describe('BidWatch Analytics', function () {
287
290
  expect(message).to.have.property('auctionEnd').exist;
288
291
  expect(message.auctionEnd).to.have.lengthOf(1);
289
292
  expect(message.auctionEnd[0]).to.have.property('bidsReceived').and.to.have.lengthOf(1);
290
- expect(message.auctionEnd[0].bidsReceived[0]).to.have.property('ad');
291
- expect(message.auctionEnd[0].bidsReceived[0].ad).to.equal('emptied');
293
+ expect(message.auctionEnd[0].bidsReceived[0]).not.to.have.property('ad');
292
294
  expect(message.auctionEnd[0]).to.have.property('bidderRequests').and.to.have.lengthOf(1);
293
295
  expect(message.auctionEnd[0].bidderRequests[0]).to.have.property('gdprConsent');
294
- expect(message.auctionEnd[0].bidderRequests[0].gdprConsent).to.have.property('vendorData');
295
- expect(message.auctionEnd[0].bidderRequests[0].gdprConsent.vendorData).to.equal('emptied');
296
+ expect(message.auctionEnd[0].bidderRequests[0].gdprConsent).not.to.have.property('vendorData');
297
+ sinon.assert.callCount(bidwatchAnalytics.track, 4);
298
+ });
299
+
300
+ it('test bidWon', function() {
301
+ adapterManager.registerAnalyticsAdapter({
302
+ code: 'bidwatch',
303
+ adapter: bidwatchAnalytics
304
+ });
305
+
306
+ adapterManager.enableAnalytics({
307
+ provider: 'bidwatch',
308
+ options: {
309
+ domain: 'test'
310
+ }
311
+ });
296
312
  events.emit(constants.EVENTS.BID_WON, bidWon);
297
- expect(server.requests.length).to.equal(2);
298
- message = JSON.parse(server.requests[1].requestBody);
299
- expect(message).to.have.property('ad').and.to.equal('emptied');
313
+ expect(server.requests.length).to.equal(1);
314
+ let message = JSON.parse(server.requests[0].requestBody);
315
+ expect(message).not.to.have.property('ad');
300
316
  expect(message).to.have.property('cpmIncrement').and.to.equal(27.4276);
301
- sinon.assert.callCount(bidwatchAnalytics.track, 3);
317
+ sinon.assert.callCount(bidwatchAnalytics.track, 1);
302
318
  });
303
319
  });
304
320
  });
@@ -190,6 +190,7 @@ describe('bigRichMediaAdapterTests', function () {
190
190
  it('should get correct bid response', function () {
191
191
  const expectedResponse = [
192
192
  {
193
+ 'adId': '3a1f23123e',
193
194
  'requestId': '3db3773286ee59',
194
195
  'cpm': 0.5,
195
196
  'creativeId': 29681110,
@@ -3,6 +3,7 @@ import {makeSlot} from '../integration/faker/googletag.js';
3
3
  import * as utils from '../../../src/utils'
4
4
  import * as events from '../../../src/events';
5
5
  import * as sinon from 'sinon';
6
+ import {sendPageviewEvent} from '../../../modules/browsiRtdProvider.js';
6
7
 
7
8
  describe('browsi Real time data sub module', function () {
8
9
  const conf = {
@@ -160,7 +161,19 @@ describe('browsi Real time data sub module', function () {
160
161
  })
161
162
  })
162
163
 
163
- describe('should emit billable event', function () {
164
+ describe('should emit ad request billable event', function () {
165
+ before(() => {
166
+ const data = {
167
+ p: {
168
+ 'adUnit1': {ps: {0: 0.234}},
169
+ 'adUnit2': {ps: {0: 0.134}}},
170
+ kn: 'bv',
171
+ pmd: undefined,
172
+ bet: 'AD_REQUEST'
173
+ };
174
+ browsiRTD.setData(data);
175
+ })
176
+
164
177
  beforeEach(() => {
165
178
  eventsEmitSpy.resetHistory();
166
179
  })
@@ -232,4 +245,30 @@ describe('browsi Real time data sub module', function () {
232
245
  expect(callArguments).to.eql(expectedCall);
233
246
  })
234
247
  })
248
+
249
+ describe('should emit pageveiw billable event', function () {
250
+ beforeEach(() => {
251
+ eventsEmitSpy.resetHistory();
252
+ })
253
+ it('should send event if type is correct', function () {
254
+ sendPageviewEvent('PAGEVIEW')
255
+
256
+ const expectedCall = {
257
+ vendor: 'browsi',
258
+ type: 'pageview',
259
+ }
260
+
261
+ expect(eventsEmitSpy.callCount).to.equal(1);
262
+ const callArguments = eventsEmitSpy.getCalls()[0].args[1];
263
+ // billing id is random, we can't check its value
264
+ delete callArguments['billingId'];
265
+ expect(callArguments).to.eql(expectedCall);
266
+ })
267
+ it('should not send event if type is incorrect', function () {
268
+ sendPageviewEvent('AD_REQUEST');
269
+ sendPageviewEvent('INACTIVE');
270
+ sendPageviewEvent(undefined);
271
+ expect(eventsEmitSpy.callCount).to.equal(0);
272
+ })
273
+ })
235
274
  });
@@ -129,6 +129,53 @@ const BIDDER_REQUEST_2 = {
129
129
  }
130
130
  };
131
131
 
132
+ const BIDDER_REQUEST_VIDEO = {
133
+ bidderCode: 'consumable',
134
+ auctionId: 'a4713c32-3762-4798-b342-4ab810ca770d',
135
+ bidderRequestId: '109f2a181342a9',
136
+ bidRequest: [
137
+ {
138
+ bidder: 'consumable',
139
+ params: {
140
+ networkId: 9969,
141
+ siteId: 730181,
142
+ unitId: 123456,
143
+ unitName: 'cnsmbl-unit'
144
+ },
145
+ placementCode: 'div-gpt-ad-1487778092495-0',
146
+ mediaTypes: {
147
+ video: {
148
+ playerSize: [188, 106],
149
+ context: 'instream',
150
+ mimes: ['application/javascript', 'application/x-mpegurl', 'video/3gpp', 'video/mp4', 'video/mpeg', 'video/ogg', 'video/webm', 'video/x-m4v', 'video/x-ms-asf', 'video/x-ms-wmv', 'video/x-msvideo'],
151
+ minduration: 0,
152
+ maxduration: 120,
153
+ protocols: [1, 2, 3, 4, 5, 6, 7, 8],
154
+ api: [1, 2],
155
+ linearity: 1
156
+ }
157
+ },
158
+ bidId: '6202d555b2f94537',
159
+ bidderRequestId: '109f2a181342a9',
160
+ auctionId: 'a4713c32-3762-4798-b342-4ab810ca770d'
161
+ }
162
+ ],
163
+ gdprConsent: {
164
+ consentString: 'consent-test',
165
+ gdprApplies: true
166
+ },
167
+ refererInfo: {
168
+ referer: 'http://example.com/page.html',
169
+ reachedTop: true,
170
+ numIframes: 2,
171
+ stack: [
172
+ 'http://example.com/page.html',
173
+ 'http://example.com/iframe1.html',
174
+ 'http://example.com/iframe2.html'
175
+ ]
176
+ }
177
+ };
178
+
132
179
  const BIDDER_REQUEST_EMPTY = {
133
180
  bidderCode: 'consumable',
134
181
  auctionId: 'b06458ef-4fe5-4a0b-a61b-bccbcedb7b11',
@@ -259,6 +306,58 @@ const AD_SERVER_RESPONSE_2 = {
259
306
  }
260
307
  };
261
308
 
309
+ const AD_SERVER_RESPONSE_VIDEO_1 = {
310
+ 'headers': null,
311
+ 'body': {
312
+ 'user': { 'key': 'ue1-2d33e91b71e74929b4aeecc23f4376f1' },
313
+ 'pixels': [{ 'type': 'image', 'url': '//sync.serverbid.com/ss/' }],
314
+ 'decisions': {
315
+ '6202d555b2f94537': {
316
+ 'adId': 3866158402,
317
+ 'creativeId': 'C1-somo-test-video',
318
+ 'width': 640,
319
+ 'height': 480,
320
+ 'pricing': {
321
+ 'clearPrice': 1.58
322
+ },
323
+ 'vastUrl': 'https://x.serverbid.com/rtb/v?auc=217c051d06b011ed9cbc72b17f01ec03&sc=1.575&s=22&a=9dcab16d340d664310c2135a76989fe946a9d46e5d5f24ff5e2f17bffbb7704a43638bd3f600951e&n=9&r=0&t=1658158906595',
324
+ 'uuid': 'f1e7287514ce11ed9c1de2b3ba87449a',
325
+ 'bidderName': 'consumable',
326
+ 'adomain': ['consumabletv.com'],
327
+ 'cats': ['IAB3-1'],
328
+ 'mediaType': 'video',
329
+ 'networkId': 1
330
+ }
331
+ }
332
+ }
333
+ };
334
+
335
+ const AD_SERVER_RESPONSE_VIDEO_2 = {
336
+ 'headers': null,
337
+ 'body': {
338
+ 'user': { 'key': 'ue1-2d33e91b71e74929b4aeecc23f4376f1' },
339
+ 'pixels': [{ 'type': 'image', 'url': '//sync.serverbid.com/ss/' }],
340
+ 'decisions': {
341
+ '6202d555b2f94537': {
342
+ 'adId': 3866158402,
343
+ 'creativeId': 'C1-somo-test-video',
344
+ 'width': 640,
345
+ 'height': 480,
346
+ 'pricing': {
347
+ 'clearPrice': 1.58
348
+ },
349
+ 'vastXml': '<VAST version="3.0">',
350
+ 'uuid': 'f1e7287514ce11ed9c1de2b3ba87449a',
351
+ 'bidderName': 'consumable',
352
+ 'adomain': ['consumabletv.com'],
353
+ 'cats': ['IAB3-1'],
354
+ 'mediaType': 'video',
355
+ 'networkId': 1
356
+ }
357
+ }
358
+ }
359
+ };
360
+
262
361
  const BUILD_REQUESTS_OUTPUT = {
263
362
  method: 'POST',
264
363
  url: 'https://e.serverbid.com/api/v2',
@@ -267,6 +366,14 @@ const BUILD_REQUESTS_OUTPUT = {
267
366
  bidderRequest: BIDDER_REQUEST_2
268
367
  };
269
368
 
369
+ const BUILD_REQUESTS_VIDEO_OUTPUT = {
370
+ method: 'POST',
371
+ url: 'https://e.serverbid.com/api/v2',
372
+ data: '',
373
+ bidRequest: BIDDER_REQUEST_VIDEO.bidRequest,
374
+ bidderRequest: BIDDER_REQUEST_VIDEO
375
+ };
376
+
270
377
  describe('Consumable BidAdapter', function () {
271
378
  let adapter = spec;
272
379
 
@@ -382,6 +489,32 @@ describe('Consumable BidAdapter', function () {
382
489
 
383
490
  expect(data.coppa).to.be.undefined;
384
491
  });
492
+
493
+ it('should contain video object for video requests', function () {
494
+ let request = spec.buildRequests(BIDDER_REQUEST_VIDEO.bidRequest, BIDDER_REQUEST_VIDEO);
495
+ let data = JSON.parse(request.data);
496
+
497
+ expect(data.placements[0].video).to.deep.equal(BIDDER_REQUEST_VIDEO.bidRequest[0].mediaTypes.video);
498
+ });
499
+
500
+ it('sets bidfloor param if present', function () {
501
+ let bidderRequest1 = deepClone(BIDDER_REQUEST_1);
502
+ let bidderRequest2 = deepClone(BIDDER_REQUEST_2);
503
+ bidderRequest1.bidRequest[0].params.bidFloor = 0.05;
504
+ bidderRequest2.bidRequest[0].getFloor = function() {
505
+ return {
506
+ currency: 'USD',
507
+ floor: 0.15
508
+ }
509
+ };
510
+ let request1 = spec.buildRequests(bidderRequest1.bidRequest, BIDDER_REQUEST_1);
511
+ let data1 = JSON.parse(request1.data);
512
+ let request2 = spec.buildRequests(bidderRequest2.bidRequest, BIDDER_REQUEST_2);
513
+ let data2 = JSON.parse(request2.data);
514
+
515
+ expect(data1.placements[0].bidfloor).to.equal(0.05);
516
+ expect(data2.placements[0].bidfloor).to.equal(0.15);
517
+ });
385
518
  });
386
519
  describe('interpretResponse validation', function () {
387
520
  it('response should have valid bidderCode', function () {
@@ -421,6 +554,31 @@ describe('Consumable BidAdapter', function () {
421
554
  });
422
555
  });
423
556
 
557
+ it('registers video bids with vastUrl', function () {
558
+ let bids = spec.interpretResponse(AD_SERVER_RESPONSE_VIDEO_1, BUILD_REQUESTS_VIDEO_OUTPUT);
559
+
560
+ bids.forEach(b => {
561
+ expect(b.mediaType).to.equal('video');
562
+ expect(b.meta).to.have.property('mediaType', 'video');
563
+ expect(b.vastUrl).to.equal('https://x.serverbid.com/rtb/v?auc=217c051d06b011ed9cbc72b17f01ec03&sc=1.575&s=22&a=9dcab16d340d664310c2135a76989fe946a9d46e5d5f24ff5e2f17bffbb7704a43638bd3f600951e&n=9&r=0&t=1658158906595');
564
+ expect(b.vastXml).to.be.undefined;
565
+ expect(b.videoCacheKey).to.equal('f1e7287514ce11ed9c1de2b3ba87449a');
566
+ });
567
+ })
568
+
569
+ it('registers video bids with vastXml', function () {
570
+ let bids = spec.interpretResponse(AD_SERVER_RESPONSE_VIDEO_2, BUILD_REQUESTS_VIDEO_OUTPUT);
571
+
572
+ bids.forEach(b => {
573
+ expect(b.mediaType).to.equal('video');
574
+ expect(b.meta).to.have.property('mediaType', 'video');
575
+ expect(b.vastXml).to.equal('<VAST version="3.0">');
576
+ expect(b.vastUrl).to.be.undefined;
577
+ expect(b.ad).to.equal('<VAST version="3.0">');
578
+ expect(b.videoCacheKey).to.equal('f1e7287514ce11ed9c1de2b3ba87449a');
579
+ });
580
+ })
581
+
424
582
  it('handles nobid responses', function () {
425
583
  let EMPTY_RESP = Object.assign({}, AD_SERVER_RESPONSE, {'body': {'decisions': null}})
426
584
  let bids = spec.interpretResponse(EMPTY_RESP, BUILD_REQUESTS_OUTPUT);
@@ -14,7 +14,7 @@ const valid_bid_requests = [{
14
14
 
15
15
  const bidderRequest = {
16
16
  refererInfo: {
17
- page: 'referer',
17
+ referer: 'referer',
18
18
  reachedTop: false,
19
19
  }
20
20
  };
@@ -13,7 +13,7 @@ import * as utils from 'src/utils.js';
13
13
  import * as refererDetection from 'src/refererDetection.js';
14
14
  import { config } from '../../../src/config.js';
15
15
  import * as storageManager from 'src/storageManager.js';
16
- import {BANNER, NATIVE, VIDEO} from '../../../src/mediaTypes.js';
16
+ import { BANNER, NATIVE, VIDEO } from '../../../src/mediaTypes.js';
17
17
 
18
18
  describe('The Criteo bidding adapter', function () {
19
19
  let utilsMock, sandbox;
@@ -707,7 +707,7 @@ describe('The Criteo bidding adapter', function () {
707
707
  expect(ortbRequest.slots[0].sizes[0]).to.equal('undefinedxundefined');
708
708
  });
709
709
 
710
- it('should properly detect and get sizes of native sizeless banner', function () {
710
+ it('should properly detect and forward native flag', function () {
711
711
  const bidRequests = [
712
712
  {
713
713
  mediaTypes: {
@@ -722,11 +722,10 @@ describe('The Criteo bidding adapter', function () {
722
722
  ];
723
723
  const request = spec.buildRequests(bidRequests, bidderRequest);
724
724
  const ortbRequest = request.data;
725
- expect(ortbRequest.slots[0].sizes).to.have.lengthOf(1);
726
- expect(ortbRequest.slots[0].sizes[0]).to.equal('2x2');
725
+ expect(ortbRequest.slots[0].native).to.equal(true);
727
726
  });
728
727
 
729
- it('should properly detect and get size of native sizeless banner', function () {
728
+ it('should properly detect and forward native flag', function () {
730
729
  const bidRequests = [
731
730
  {
732
731
  mediaTypes: {
@@ -741,8 +740,7 @@ describe('The Criteo bidding adapter', function () {
741
740
  ];
742
741
  const request = spec.buildRequests(bidRequests, bidderRequest);
743
742
  const ortbRequest = request.data;
744
- expect(ortbRequest.slots[0].sizes).to.have.lengthOf(1);
745
- expect(ortbRequest.slots[0].sizes[0]).to.equal('2x2');
743
+ expect(ortbRequest.slots[0].native).to.equal(true);
746
744
  });
747
745
 
748
746
  it('should properly build a networkId request', function () {
@@ -1258,11 +1256,13 @@ describe('The Criteo bidding adapter', function () {
1258
1256
  if (inputParams.mediaType === BANNER && inputParams.size[0] === 300 && inputParams.size[1] === 250) {
1259
1257
  return {
1260
1258
  currency: 'USD',
1261
- floor: 1.0};
1259
+ floor: 1.0
1260
+ };
1262
1261
  } else if (inputParams.mediaType === BANNER && inputParams.size[0] === 728 && inputParams.size[1] === 90) {
1263
1262
  return {
1264
1263
  currency: 'USD',
1265
- floor: 2.0};
1264
+ floor: 2.0
1265
+ };
1266
1266
  } else {
1267
1267
  return {}
1268
1268
  }
@@ -1273,9 +1273,10 @@ describe('The Criteo bidding adapter', function () {
1273
1273
  const request = spec.buildRequests(bidRequests, bidderRequest);
1274
1274
  expect(request.data.slots[0].ext.floors).to.deep.equal({
1275
1275
  'banner': {
1276
- '300x250': {'currency': 'USD', 'floor': 1},
1277
- '728x90': {'currency': 'USD', 'floor': 2}
1278
- }});
1276
+ '300x250': { 'currency': 'USD', 'floor': 1 },
1277
+ '728x90': { 'currency': 'USD', 'floor': 2 }
1278
+ }
1279
+ });
1279
1280
  });
1280
1281
 
1281
1282
  it('should properly build a video request with several player sizes with floors', function () {
@@ -1297,11 +1298,13 @@ describe('The Criteo bidding adapter', function () {
1297
1298
  if (inputParams.mediaType === VIDEO && inputParams.size[0] === 300 && inputParams.size[1] === 250) {
1298
1299
  return {
1299
1300
  currency: 'USD',
1300
- floor: 1.0};
1301
+ floor: 1.0
1302
+ };
1301
1303
  } else if (inputParams.mediaType === VIDEO && inputParams.size[0] === 728 && inputParams.size[1] === 90) {
1302
1304
  return {
1303
1305
  currency: 'USD',
1304
- floor: 2.0};
1306
+ floor: 2.0
1307
+ };
1305
1308
  } else {
1306
1309
  return {}
1307
1310
  }
@@ -1312,9 +1315,10 @@ describe('The Criteo bidding adapter', function () {
1312
1315
  const request = spec.buildRequests(bidRequests, bidderRequest);
1313
1316
  expect(request.data.slots[0].ext.floors).to.deep.equal({
1314
1317
  'video': {
1315
- '300x250': {'currency': 'USD', 'floor': 1},
1316
- '728x90': {'currency': 'USD', 'floor': 2}
1317
- }});
1318
+ '300x250': { 'currency': 'USD', 'floor': 1 },
1319
+ '728x90': { 'currency': 'USD', 'floor': 2 }
1320
+ }
1321
+ });
1318
1322
  });
1319
1323
 
1320
1324
  it('should properly build a multi format request with floors', function () {
@@ -1347,19 +1351,23 @@ describe('The Criteo bidding adapter', function () {
1347
1351
  if (inputParams.mediaType === BANNER && inputParams.size[0] === 300 && inputParams.size[1] === 250) {
1348
1352
  return {
1349
1353
  currency: 'USD',
1350
- floor: 1.0};
1354
+ floor: 1.0
1355
+ };
1351
1356
  } else if (inputParams.mediaType === BANNER && inputParams.size[0] === 728 && inputParams.size[1] === 90) {
1352
1357
  return {
1353
1358
  currency: 'USD',
1354
- floor: 2.0};
1359
+ floor: 2.0
1360
+ };
1355
1361
  } else if (inputParams.mediaType === VIDEO && inputParams.size[0] === 640 && inputParams.size[1] === 480) {
1356
1362
  return {
1357
1363
  currency: 'EUR',
1358
- floor: 3.2};
1364
+ floor: 3.2
1365
+ };
1359
1366
  } else if (inputParams.mediaType === NATIVE && inputParams.size === '*') {
1360
1367
  return {
1361
1368
  currency: 'YEN',
1362
- floor: 4.99};
1369
+ floor: 4.99
1370
+ };
1363
1371
  } else {
1364
1372
  return {}
1365
1373
  }
@@ -1371,15 +1379,16 @@ describe('The Criteo bidding adapter', function () {
1371
1379
  expect(request.data.slots[0].ext.data.someContextAttribute).to.deep.equal('abc');
1372
1380
  expect(request.data.slots[0].ext.floors).to.deep.equal({
1373
1381
  'banner': {
1374
- '300x250': {'currency': 'USD', 'floor': 1},
1375
- '728x90': {'currency': 'USD', 'floor': 2}
1382
+ '300x250': { 'currency': 'USD', 'floor': 1 },
1383
+ '728x90': { 'currency': 'USD', 'floor': 2 }
1376
1384
  },
1377
1385
  'video': {
1378
- '640x480': {'currency': 'EUR', 'floor': 3.2}
1386
+ '640x480': { 'currency': 'EUR', 'floor': 3.2 }
1379
1387
  },
1380
1388
  'native': {
1381
- '*': {'currency': 'YEN', 'floor': 4.99}
1382
- }});
1389
+ '*': { 'currency': 'YEN', 'floor': 4.99 }
1390
+ }
1391
+ });
1383
1392
  });
1384
1393
  });
1385
1394
 
@@ -169,6 +169,28 @@ describe('currency', function () {
169
169
  expect(getGlobal().convertCurrency(1.0, 'USD', 'EUR')).to.equal(4);
170
170
  expect(getGlobal().convertCurrency(1.0, 'USD', 'JPY')).to.equal(200);
171
171
  });
172
+ it('uses default rates until currency file is loaded', function () {
173
+ setConfig({
174
+ adServerCurrency: 'USD',
175
+ defaultRates: {
176
+ USD: {
177
+ JPY: 100
178
+ }
179
+ }
180
+ });
181
+
182
+ // Race condition where a bid is converted before the file has been loaded
183
+ expect(getGlobal().convertCurrency(1.0, 'USD', 'JPY')).to.equal(100);
184
+
185
+ fakeCurrencyFileServer.respondWith(JSON.stringify({
186
+ 'dataAsOf': '2017-04-25',
187
+ 'conversions': {
188
+ 'USD': { JPY: 200 }
189
+ }
190
+ }));
191
+ fakeCurrencyFileServer.respond();
192
+ expect(getGlobal().convertCurrency(1.0, 'USD', 'JPY')).to.equal(200);
193
+ });
172
194
  });
173
195
  describe('bidder override', function () {
174
196
  it('allows setConfig to set bidder currency', function () {