prebid.js 5.14.0 → 5.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 (397) hide show
  1. package/.devcontainer/Dockerfile +11 -0
  2. package/.devcontainer/devcontainer.json +27 -0
  3. package/.devcontainer/postCreate.sh +6 -0
  4. package/allowedModules.js +2 -1
  5. package/integrationExamples/gpt/afpExample.html +242 -0
  6. package/integrationExamples/gpt/afpGamExample.html +152 -0
  7. package/integrationExamples/gpt/weboramaRtdProvider_example.html +126 -0
  8. package/modules/.submodules.json +29 -27
  9. package/modules/33acrossBidAdapter.js +23 -20
  10. package/modules/a4gBidAdapter.js +3 -3
  11. package/modules/ablidaBidAdapter.js +2 -2
  12. package/modules/adWMGBidAdapter.js +4 -4
  13. package/modules/adagioAnalyticsAdapter.js +4 -4
  14. package/modules/adagioBidAdapter.js +85 -82
  15. package/modules/adbookpspBidAdapter.js +56 -54
  16. package/modules/adfBidAdapter.js +24 -16
  17. package/modules/adgenerationBidAdapter.js +42 -18
  18. package/modules/adhashBidAdapter.js +105 -0
  19. package/modules/adhashBidAdapter.md +1 -1
  20. package/modules/adkernelAdnAnalyticsAdapter.js +6 -6
  21. package/modules/adkernelAdnBidAdapter.js +23 -23
  22. package/modules/adkernelBidAdapter.js +49 -44
  23. package/modules/adlooxAdServerVideo.js +26 -26
  24. package/modules/adlooxAnalyticsAdapter.js +38 -35
  25. package/modules/adlooxRtdProvider.js +49 -46
  26. package/modules/admanBidAdapter.js +4 -4
  27. package/modules/admixerBidAdapter.js +13 -2
  28. package/modules/admixerIdSystem.js +4 -4
  29. package/modules/adnowBidAdapter.js +4 -4
  30. package/modules/adnuntiusBidAdapter.js +6 -5
  31. package/modules/adoceanBidAdapter.js +10 -10
  32. package/modules/adpartnerBidAdapter.js +3 -3
  33. package/modules/adpod.js +45 -42
  34. package/modules/adprimeBidAdapter.js +4 -4
  35. package/modules/adqueryBidAdapter.js +204 -0
  36. package/modules/adqueryBidAdapter.md +32 -0
  37. package/modules/adrelevantisBidAdapter.js +30 -27
  38. package/modules/adriverBidAdapter.js +13 -13
  39. package/modules/adtargetBidAdapter.js +24 -24
  40. package/modules/adtelligentBidAdapter.js +29 -29
  41. package/modules/adtrueBidAdapter.js +35 -35
  42. package/modules/aduptechBidAdapter.js +10 -10
  43. package/modules/advangelistsBidAdapter.js +14 -14
  44. package/modules/adxcgAnalyticsAdapter.js +5 -5
  45. package/modules/adxcgBidAdapter.js +56 -56
  46. package/modules/adxpremiumAnalyticsAdapter.js +17 -17
  47. package/modules/adyoulikeBidAdapter.js +11 -11
  48. package/modules/afpBidAdapter.js +166 -0
  49. package/modules/afpBidAdapter.md +348 -0
  50. package/modules/ajaBidAdapter.js +12 -12
  51. package/modules/akamaiDAPIdSystem.js +9 -9
  52. package/modules/aniviewBidAdapter.js +2 -2
  53. package/modules/aolBidAdapter.js +15 -14
  54. package/modules/apacdexBidAdapter.js +16 -16
  55. package/modules/appnexusBidAdapter.js +59 -59
  56. package/modules/apstreamBidAdapter.js +5 -5
  57. package/modules/asoBidAdapter.js +30 -30
  58. package/modules/astraoneBidAdapter.js +2 -2
  59. package/modules/atsAnalyticsAdapter.js +35 -30
  60. package/modules/audiencerunBidAdapter.js +15 -15
  61. package/modules/automatadBidAdapter.js +2 -2
  62. package/modules/axonixBidAdapter.js +7 -7
  63. package/modules/beachfrontBidAdapter.js +23 -23
  64. package/modules/beopBidAdapter.js +22 -22
  65. package/modules/bidViewabilityIO.js +7 -7
  66. package/modules/bidglassBidAdapter.js +8 -8
  67. package/modules/bidscubeBidAdapter.js +3 -3
  68. package/modules/bizzclickBidAdapter.js +10 -10
  69. package/modules/bliinkBidAdapter.js +58 -32
  70. package/modules/bliinkBidAdapter.md +29 -6
  71. package/modules/bluebillywigBidAdapter.js +30 -30
  72. package/modules/boldwinBidAdapter.js +4 -4
  73. package/modules/braveBidAdapter.js +5 -5
  74. package/modules/bridgewellBidAdapter.js +5 -5
  75. package/modules/brightMountainMediaBidAdapter.js +10 -10
  76. package/modules/brightcomBidAdapter.js +18 -18
  77. package/modules/britepoolIdSystem.js +7 -7
  78. package/modules/browsiRtdProvider.js +8 -8
  79. package/modules/bucksenseBidAdapter.js +9 -9
  80. package/modules/buzzoolaBidAdapter.js +4 -4
  81. package/modules/byDataAnalyticsAdapter.js +12 -12
  82. package/modules/ccxBidAdapter.js +38 -38
  83. package/modules/cleanmedianetBidAdapter.js +9 -9
  84. package/modules/clickforceBidAdapter.js +4 -4
  85. package/modules/cointrafficBidAdapter.js +4 -4
  86. package/modules/coinzillaBidAdapter.js +2 -2
  87. package/modules/colossussspBidAdapter.js +7 -3
  88. package/modules/concertAnalyticsAdapter.js +3 -3
  89. package/modules/concertBidAdapter.js +16 -17
  90. package/modules/connectadBidAdapter.js +13 -13
  91. package/modules/consentManagement.js +29 -28
  92. package/modules/consentManagementUsp.js +14 -14
  93. package/modules/consumableBidAdapter.js +3 -3
  94. package/modules/contentexchangeBidAdapter.js +5 -5
  95. package/modules/conversantBidAdapter.js +32 -31
  96. package/modules/cpmstarBidAdapter.js +8 -9
  97. package/modules/craftBidAdapter.js +10 -10
  98. package/modules/criteoBidAdapter.js +16 -16
  99. package/modules/criteoIdSystem.js +5 -5
  100. package/modules/currency.js +18 -18
  101. package/modules/cwireBidAdapter.js +272 -0
  102. package/modules/cwireBidAdapter.md +43 -0
  103. package/modules/datablocksBidAdapter.js +12 -12
  104. package/modules/deepintentBidAdapter.js +13 -13
  105. package/modules/dgkeywordRtdProvider.js +10 -11
  106. package/modules/districtmDMXBidAdapter.js +15 -15
  107. package/modules/dmdIdSystem.js +5 -5
  108. package/modules/docereeBidAdapter.js +9 -9
  109. package/modules/dspxBidAdapter.js +5 -5
  110. package/modules/ebdrBidAdapter.js +9 -9
  111. package/modules/emx_digitalBidAdapter.js +23 -23
  112. package/modules/enrichmentFpdModule.js +10 -9
  113. package/modules/eplanningAnalyticsAdapter.js +2 -2
  114. package/modules/eplanningBidAdapter.js +10 -10
  115. package/modules/etargetBidAdapter.js +4 -4
  116. package/modules/express.js +9 -10
  117. package/modules/fabrickIdSystem.js +6 -6
  118. package/modules/feedadBidAdapter.js +5 -5
  119. package/modules/fintezaAnalyticsAdapter.js +4 -4
  120. package/modules/flocIdSystem.js +5 -5
  121. package/modules/fluctBidAdapter.js +6 -5
  122. package/modules/freewheel-sspBidAdapter.js +6 -6
  123. package/modules/gamoshiBidAdapter.js +22 -22
  124. package/modules/gdprEnforcement.js +13 -14
  125. package/modules/getintentBidAdapter.js +3 -4
  126. package/modules/glimpseBidAdapter.js +160 -48
  127. package/modules/glimpseBidAdapter.md +11 -74
  128. package/modules/gmosspBidAdapter.js +17 -17
  129. package/modules/gnetBidAdapter.js +5 -5
  130. package/modules/googleAnalyticsAdapter.js +6 -6
  131. package/modules/gothamadsBidAdapter.js +9 -9
  132. package/modules/gptPreAuction.js +7 -7
  133. package/modules/gridBidAdapter.js +15 -16
  134. package/modules/gridNMBidAdapter.js +214 -63
  135. package/modules/growadvertisingBidAdapter.js +7 -8
  136. package/modules/gumgumBidAdapter.js +19 -13
  137. package/modules/h12mediaBidAdapter.js +12 -12
  138. package/modules/haloIdSystem.js +8 -8
  139. package/modules/hybridBidAdapter.js +7 -7
  140. package/modules/iasRtdProvider.js +79 -63
  141. package/modules/id5IdSystem.js +24 -24
  142. package/modules/idImportLibrary.js +35 -35
  143. package/modules/idxIdSystem.js +3 -3
  144. package/modules/impactifyBidAdapter.js +10 -10
  145. package/modules/improvedigitalBidAdapter.js +36 -36
  146. package/modules/imuIdSystem.js +6 -6
  147. package/modules/inmarBidAdapter.js +2 -2
  148. package/modules/innityBidAdapter.js +3 -3
  149. package/modules/inskinBidAdapter.js +14 -2
  150. package/modules/inskinBidAdapter.md +5 -4
  151. package/modules/instreamTracking.js +5 -5
  152. package/modules/integr8BidAdapter.js +4 -4
  153. package/modules/intentIqIdSystem.js +7 -7
  154. package/modules/interactiveOffersBidAdapter.js +5 -5
  155. package/modules/invibesBidAdapter.js +53 -19
  156. package/modules/invisiblyAnalyticsAdapter.js +5 -5
  157. package/modules/iqmBidAdapter.js +19 -19
  158. package/modules/iqzoneBidAdapter.js +5 -5
  159. package/modules/ixBidAdapter.js +73 -73
  160. package/modules/jixieBidAdapter.js +6 -6
  161. package/modules/justpremiumBidAdapter.js +5 -1
  162. package/modules/kargoBidAdapter.js +16 -9
  163. package/modules/kargoBidAdapter.md +20 -0
  164. package/modules/kinessoIdSystem.js +8 -8
  165. package/modules/koblerBidAdapter.js +12 -12
  166. package/modules/konduitAnalyticsAdapter.js +4 -4
  167. package/modules/konduitWrapper.js +14 -14
  168. package/modules/krushmediaBidAdapter.js +4 -4
  169. package/modules/kubientBidAdapter.js +5 -5
  170. package/modules/limelightDigitalBidAdapter.js +4 -4
  171. package/modules/liveIntentIdSystem.js +4 -5
  172. package/modules/livewrappedAnalyticsAdapter.js +27 -15
  173. package/modules/livewrappedBidAdapter.js +7 -7
  174. package/modules/liveyieldAnalyticsAdapter.js +13 -13
  175. package/modules/lockerdomeBidAdapter.js +2 -2
  176. package/modules/loganBidAdapter.js +4 -4
  177. package/modules/lotamePanoramaIdSystem.js +13 -13
  178. package/modules/lunamediahbBidAdapter.js +2 -2
  179. package/modules/madvertiseBidAdapter.js +3 -3
  180. package/modules/marsmediaBidAdapter.js +26 -26
  181. package/modules/mathildeadsBidAdapter.js +5 -5
  182. package/modules/mediaforceBidAdapter.js +11 -11
  183. package/modules/mediakeysBidAdapter.js +444 -53
  184. package/modules/mediakeysBidAdapter.md +108 -0
  185. package/modules/medianetAnalyticsAdapter.js +48 -125
  186. package/modules/medianetBidAdapter.js +38 -33
  187. package/modules/medianetRtdProvider.js +7 -7
  188. package/modules/merkleIdSystem.js +19 -19
  189. package/modules/mgidBidAdapter.js +50 -50
  190. package/modules/microadBidAdapter.js +3 -3
  191. package/modules/multibid/index.js +15 -13
  192. package/modules/mwOpenLinkIdSystem.js +7 -7
  193. package/modules/mytargetBidAdapter.js +112 -0
  194. package/modules/nativoBidAdapter.js +46 -31
  195. package/modules/nativoBidAdapter.md +0 -1
  196. package/modules/naveggIdSystem.js +3 -3
  197. package/modules/nextMillenniumBidAdapter.js +6 -6
  198. package/modules/nextrollBidAdapter.js +375 -0
  199. package/modules/nobidBidAdapter.js +12 -11
  200. package/modules/novatiqIdSystem.js +8 -8
  201. package/modules/oguryBidAdapter.js +22 -6
  202. package/modules/oneVideoBidAdapter.js +20 -20
  203. package/modules/onomagicBidAdapter.js +16 -16
  204. package/modules/ooloAnalyticsAdapter.js +13 -13
  205. package/modules/openwebBidAdapter.js +26 -26
  206. package/modules/openxAnalyticsAdapter.js +33 -33
  207. package/modules/openxBidAdapter.js +29 -29
  208. package/modules/operaadsBidAdapter.js +53 -53
  209. package/modules/optimeraRtdProvider.js +9 -9
  210. package/modules/optoutBidAdapter.js +3 -3
  211. package/modules/orbidderBidAdapter.js +3 -3
  212. package/modules/outbrainBidAdapter.js +13 -13
  213. package/modules/ozoneBidAdapter.js +131 -131
  214. package/modules/padsquadBidAdapter.js +4 -4
  215. package/modules/parrableIdSystem.js +17 -17
  216. package/modules/pixfutureBidAdapter.js +45 -25
  217. package/modules/pixfutureBidAdapter.md +127 -0
  218. package/modules/prebidServerBidAdapter/index.js +109 -105
  219. package/modules/prebidmanagerAnalyticsAdapter.js +7 -7
  220. package/modules/priceFloors.js +47 -47
  221. package/modules/proxistoreBidAdapter.js +6 -8
  222. package/modules/pubCommonId.js +11 -11
  223. package/modules/pubProvidedIdSystem.js +3 -3
  224. package/modules/publinkIdSystem.js +23 -7
  225. package/modules/publinkIdSystem.md +7 -2
  226. package/modules/pubmaticAnalyticsAdapter.js +16 -16
  227. package/modules/pubmaticBidAdapter.js +109 -93
  228. package/modules/pubmaticBidAdapter.md +1 -1
  229. package/modules/pubperfAnalyticsAdapter.js +3 -3
  230. package/modules/pubwiseAnalyticsAdapter.js +6 -6
  231. package/modules/pubwiseBidAdapter.js +23 -23
  232. package/modules/pubxBidAdapter.js +2 -2
  233. package/modules/pubxaiAnalyticsAdapter.js +7 -7
  234. package/modules/pulsepointBidAdapter.js +13 -13
  235. package/modules/pxyzBidAdapter.js +7 -7
  236. package/modules/quantcastBidAdapter.js +16 -16
  237. package/modules/radsBidAdapter.js +5 -5
  238. package/modules/realvuAnalyticsAdapter.js +5 -7
  239. package/modules/reconciliationRtdProvider.js +6 -6
  240. package/modules/relaidoBidAdapter.js +44 -38
  241. package/modules/resetdigitalBidAdapter.js +3 -4
  242. package/modules/revcontentBidAdapter.js +9 -9
  243. package/modules/rhythmoneBidAdapter.js +17 -16
  244. package/modules/richaudienceBidAdapter.js +9 -9
  245. package/modules/riseBidAdapter.js +26 -26
  246. package/modules/riseBidAdapter.md +1 -3
  247. package/modules/roxotAnalyticsAdapter.js +14 -14
  248. package/modules/rtbhouseBidAdapter.js +7 -7
  249. package/modules/rtbsapeBidAdapter.js +3 -4
  250. package/modules/rtdModule/index.js +3 -3
  251. package/modules/rubiconAnalyticsAdapter.js +82 -82
  252. package/modules/rubiconBidAdapter.js +72 -68
  253. package/modules/scaleableAnalyticsAdapter.js +2 -2
  254. package/modules/seedingAllianceBidAdapter.js +231 -0
  255. package/modules/seedtagBidAdapter.js +10 -10
  256. package/modules/sharedIdSystem.js +11 -11
  257. package/modules/sharethroughAnalyticsAdapter.js +8 -8
  258. package/modules/sharethroughBidAdapter.js +20 -27
  259. package/modules/showheroes-bsBidAdapter.js +23 -23
  260. package/modules/sigmoidAnalyticsAdapter.js +4 -5
  261. package/modules/sirdataRtdProvider.js +34 -34
  262. package/modules/sizeMappingV2.js +39 -39
  263. package/modules/slimcutBidAdapter.js +121 -0
  264. package/modules/smaatoBidAdapter.js +44 -44
  265. package/modules/smartadserverBidAdapter.js +7 -7
  266. package/modules/smartxBidAdapter.js +72 -72
  267. package/modules/smartyadsBidAdapter.js +2 -2
  268. package/modules/smilewantedBidAdapter.js +6 -6
  269. package/modules/sonobiAnalyticsAdapter.js +23 -23
  270. package/modules/sortableAnalyticsAdapter.js +5 -5
  271. package/modules/sortableBidAdapter.js +28 -28
  272. package/modules/sovrnAnalyticsAdapter.js +5 -5
  273. package/modules/sovrnBidAdapter.js +22 -22
  274. package/modules/spotxBidAdapter.js +97 -83
  275. package/modules/sspBCBidAdapter.js +216 -21
  276. package/modules/sspBCBidAdapter.md +1 -1
  277. package/modules/staqAnalyticsAdapter.js +9 -9
  278. package/modules/stroeerCoreBidAdapter.js +16 -16
  279. package/modules/sublimeBidAdapter.js +6 -6
  280. package/modules/talkadsBidAdapter.js +129 -0
  281. package/modules/talkadsBidAdapter.md +60 -0
  282. package/modules/tapadIdSystem.js +3 -3
  283. package/modules/tappxBidAdapter.js +63 -64
  284. package/modules/teadsBidAdapter.js +20 -20
  285. package/modules/telariaBidAdapter.js +17 -17
  286. package/modules/temedyaBidAdapter.js +4 -4
  287. package/modules/terceptAnalyticsAdapter.js +4 -4
  288. package/modules/theAdxBidAdapter.js +16 -16
  289. package/modules/timeoutRtdProvider.js +15 -15
  290. package/modules/tpmnBidAdapter.js +3 -3
  291. package/modules/trionBidAdapter.js +15 -15
  292. package/modules/tripleliftBidAdapter.js +27 -24
  293. package/modules/truereachBidAdapter.js +4 -4
  294. package/modules/trustxBidAdapter.js +22 -18
  295. package/modules/ucfunnelBidAdapter.js +3 -3
  296. package/modules/uid2IdSystem.js +6 -6
  297. package/modules/underdogmediaBidAdapter.js +4 -4
  298. package/modules/unicornBidAdapter.js +15 -15
  299. package/modules/unifiedIdSystem.js +4 -4
  300. package/modules/unrulyBidAdapter.js +16 -16
  301. package/modules/userId/eids.js +9 -9
  302. package/modules/userId/index.js +37 -35
  303. package/modules/validationFpdModule/index.js +15 -15
  304. package/modules/vdoaiBidAdapter.js +2 -2
  305. package/modules/verizonMediaIdSystem.js +5 -5
  306. package/modules/vidazooBidAdapter.js +5 -5
  307. package/modules/videobyteBidAdapter.js +24 -24
  308. package/modules/videoreachBidAdapter.js +7 -7
  309. package/modules/vidoomyBidAdapter.js +105 -22
  310. package/modules/viewdeosDXBidAdapter.js +17 -17
  311. package/modules/visxBidAdapter.js +21 -29
  312. package/modules/voxBidAdapter.js +7 -7
  313. package/modules/vuukleBidAdapter.js +2 -2
  314. package/modules/waardexBidAdapter.js +26 -26
  315. package/modules/weboramaRtdProvider.js +174 -0
  316. package/modules/weboramaRtdProvider.md +70 -0
  317. package/modules/winrBidAdapter.js +27 -27
  318. package/modules/wipesBidAdapter.js +2 -2
  319. package/modules/yahoosspBidAdapter.js +637 -0
  320. package/modules/yahoosspBidAdapter.md +795 -0
  321. package/modules/yieldlabBidAdapter.js +57 -12
  322. package/modules/yieldlabBidAdapter.md +16 -1
  323. package/modules/yieldliftBidAdapter.js +9 -9
  324. package/modules/yieldmoBidAdapter.js +64 -50
  325. package/modules/yieldoneAnalyticsAdapter.js +6 -6
  326. package/modules/yieldoneBidAdapter.js +11 -11
  327. package/modules/yuktamediaAnalyticsAdapter.js +15 -15
  328. package/modules/zeotapIdPlusIdSystem.js +2 -2
  329. package/modules/zetaBidAdapter.js +6 -6
  330. package/modules/zeta_global_sspBidAdapter.js +14 -14
  331. package/package.json +1 -1
  332. package/src/AnalyticsAdapter.js +6 -6
  333. package/src/Renderer.js +10 -8
  334. package/src/adapterManager.js +45 -42
  335. package/src/adloader.js +6 -6
  336. package/src/ajax.js +8 -9
  337. package/src/auction.js +26 -23
  338. package/src/bidfactory.js +2 -2
  339. package/src/config.js +52 -50
  340. package/src/cpmBucketManager.js +2 -2
  341. package/src/prebid.js +85 -81
  342. package/src/storageManager.js +5 -5
  343. package/src/targeting.js +25 -26
  344. package/src/userSync.js +35 -22
  345. package/src/videoCache.js +2 -2
  346. package/test/.eslintrc.js +2 -1
  347. package/test/spec/modules/adfBidAdapter_spec.js +55 -0
  348. package/test/spec/modules/adgenerationBidAdapter_spec.js +121 -50
  349. package/test/spec/modules/adhashBidAdapter_spec.js +155 -0
  350. package/test/spec/modules/adnuntiusBidAdapter_spec.js +68 -0
  351. package/test/spec/modules/adqueryBidAdapter_spec.js +185 -0
  352. package/test/spec/modules/afpBidAdapter_spec.js +306 -0
  353. package/test/spec/modules/atsAnalyticsAdapter_spec.js +37 -2
  354. package/test/spec/modules/bliinkBidAdapter_spec.js +87 -36
  355. package/test/spec/modules/colossussspBidAdapter_spec.js +14 -6
  356. package/test/spec/modules/cwireBidAdapter_spec.js +246 -0
  357. package/test/spec/modules/eplanningBidAdapter_spec.js +3 -3
  358. package/test/spec/modules/glimpseBidAdapter_spec.js +302 -204
  359. package/test/spec/modules/gridBidAdapter_spec.js +38 -2
  360. package/test/spec/modules/gridNMBidAdapter_spec.js +121 -47
  361. package/test/spec/modules/gumgumBidAdapter_spec.js +27 -6
  362. package/test/spec/modules/iasRtdProvider_spec.js +71 -6
  363. package/test/spec/modules/inskinBidAdapter_spec.js +10 -1
  364. package/test/spec/modules/invibesBidAdapter_spec.js +114 -2
  365. package/test/spec/modules/justpremiumBidAdapter_spec.js +16 -2
  366. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +33 -7
  367. package/test/spec/modules/mediakeysBidAdapter_spec.js +406 -51
  368. package/test/spec/modules/medianetAnalyticsAdapter_spec.js +39 -7
  369. package/test/spec/modules/medianetBidAdapter_spec.js +62 -1
  370. package/test/spec/modules/mytargetBidAdapter_spec.js +199 -0
  371. package/test/spec/modules/nativoBidAdapter_spec.js +50 -3
  372. package/test/spec/modules/nextrollBidAdapter_spec.js +290 -0
  373. package/test/spec/modules/nobidBidAdapter_spec.js +65 -1
  374. package/test/spec/modules/oguryBidAdapter_spec.js +120 -7
  375. package/test/spec/modules/publinkIdSystem_spec.js +42 -12
  376. package/test/spec/modules/pubmaticBidAdapter_spec.js +217 -1
  377. package/test/spec/modules/relaidoBidAdapter_spec.js +21 -20
  378. package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +100 -81
  379. package/test/spec/modules/rubiconAnalyticsSchema.json +5 -2
  380. package/test/spec/modules/seedingAllianceAdapter_spec.js +186 -0
  381. package/test/spec/modules/sharethroughBidAdapter_spec.js +156 -136
  382. package/test/spec/modules/slimcutBidAdapter_spec.js +200 -0
  383. package/test/spec/modules/spotxBidAdapter_spec.js +36 -0
  384. package/test/spec/modules/sspBCBidAdapter_spec.js +210 -62
  385. package/test/spec/modules/talkadsBidAdapter_spec.js +231 -0
  386. package/test/spec/modules/tappxBidAdapter_spec.js +39 -3
  387. package/test/spec/modules/tripleliftBidAdapter_spec.js +2 -0
  388. package/test/spec/modules/trustxBidAdapter_spec.js +35 -2
  389. package/test/spec/modules/unicornBidAdapter_spec.js +4 -4
  390. package/test/spec/modules/visxBidAdapter_spec.js +48 -4
  391. package/test/spec/modules/weboramaRtdProvider_spec.js +288 -0
  392. package/test/spec/modules/yahoosspBidAdapter_spec.js +1332 -0
  393. package/test/spec/modules/yieldlabBidAdapter_spec.js +65 -1
  394. package/test/spec/modules/yieldmoBidAdapter_spec.js +30 -9
  395. package/test/spec/unit/pbjs_api_spec.js +4 -0
  396. package/test/spec/userSync_spec.js +30 -2
  397. package/modules/turktelekomBidAdapter.md +0 -49
@@ -180,13 +180,19 @@ describe('TheMediaGridNM Adapter', function () {
180
180
  });
181
181
  return res;
182
182
  }
183
- const bidderRequest = {refererInfo: {referer: 'https://example.com'}};
184
- const referrer = bidderRequest.refererInfo.referer;
183
+ const bidderRequest = {
184
+ bidderRequestId: '22edbae2733bf6',
185
+ auctionId: '1d1a030790a475',
186
+ timeout: 3000,
187
+ refererInfo: { referer: 'https://example.com' }
188
+ };
189
+ const referrer = encodeURIComponent(bidderRequest.refererInfo.referer);
185
190
  let bidRequests = [
186
191
  {
187
192
  'bidder': 'gridNM',
188
193
  'params': {
189
194
  'source': 'jwp',
195
+ 'floorcpm': 2,
190
196
  'secid': '11',
191
197
  'pubid': '22',
192
198
  'video': {
@@ -226,12 +232,36 @@ describe('TheMediaGridNM Adapter', function () {
226
232
  requests.forEach((req, i) => {
227
233
  expect(req.url).to.be.an('string');
228
234
  const payload = parseRequestUrl(req.url);
229
- expect(payload).to.have.property('u', referrer);
230
- expect(payload).to.have.property('r', '22edbae2733bf6');
231
- expect(payload).to.have.property('wrapperType', 'Prebid_js');
232
- expect(payload).to.have.property('wrapperVersion', '$prebid.version$');
233
- expect(payload).to.have.property('sizes', requestsSizes[i]);
234
- expect(req.data).to.deep.equal(bidRequests[i].params);
235
+ expect(payload).to.have.property('no_mapping', '1');
236
+ expect(payload).to.have.property('sp', 'jwp');
237
+
238
+ const sizes = { w: bidRequests[i].sizes[0][0], h: bidRequests[i].sizes[0][1] };
239
+ const impObj = {
240
+ 'id': bidRequests[i].bidId,
241
+ 'tagid': bidRequests[i].params.secid,
242
+ 'ext': {'divid': bidRequests[i].adUnitCode},
243
+ 'video': Object.assign(sizes, bidRequests[i].params.video)
244
+ };
245
+
246
+ if (bidRequests[i].params.floorcpm) {
247
+ impObj.bidfloor = bidRequests[i].params.floorcpm;
248
+ }
249
+
250
+ expect(req.data).to.deep.equal({
251
+ 'id': bidderRequest.bidderRequestId,
252
+ 'site': {
253
+ 'page': referrer,
254
+ 'publisher': {
255
+ 'id': bidRequests[i].params.pubid
256
+ }
257
+ },
258
+ 'tmax': bidderRequest.timeout,
259
+ 'source': {
260
+ 'tid': bidderRequest.auctionId,
261
+ 'ext': {'wrapper': 'Prebid_js', 'wrapper_version': '$prebid.version$'}
262
+ },
263
+ 'imp': [impObj]
264
+ });
235
265
  });
236
266
  });
237
267
 
@@ -242,63 +272,68 @@ describe('TheMediaGridNM Adapter', function () {
242
272
  minduration: 10,
243
273
  maxduration: 100,
244
274
  protocols: [1, 3, 4],
245
- playerSize: [300, 250]
275
+ playerSize: [[300, 250]]
246
276
  }
247
277
  };
248
278
  const bidRequest = Object.assign({ mediaTypes }, bidRequests[0]);
249
279
  const req = spec.buildRequests([bidRequest], bidderRequest)[0];
250
280
  const expectedVideo = {
251
281
  'skipafter': 10,
252
- 'mind': 10,
253
- 'maxd': 100,
282
+ 'minduration': 10,
283
+ 'maxduration': 100,
254
284
  'mimes': ['video/mp4', 'video/x-ms-wmv'],
255
285
  'protocols': [1, 2, 3, 4, 5, 6],
256
- 'size': '300x250'
286
+ 'w': 300,
287
+ 'h': 250
257
288
  };
258
- const expectedParams = Object.assign({}, bidRequest.params);
259
- expectedParams.video = Object.assign(expectedParams.video, expectedVideo);
260
289
 
261
290
  expect(req.url).to.be.an('string');
262
291
  const payload = parseRequestUrl(req.url);
263
- expect(payload).to.have.property('u', referrer);
264
- expect(payload).to.have.property('r', '22edbae2733bf6');
265
- expect(payload).to.have.property('wrapperType', 'Prebid_js');
266
- expect(payload).to.have.property('wrapperVersion', '$prebid.version$');
267
- expect(payload).to.have.property('sizes', '300x250,300x600');
268
- expect(req.data).to.deep.equal(expectedParams);
292
+ expect(payload).to.have.property('no_mapping', '1');
293
+ expect(payload).to.have.property('sp', 'jwp');
294
+ expect(req.data).to.deep.equal({
295
+ 'id': bidderRequest.bidderRequestId,
296
+ 'site': {
297
+ 'page': referrer,
298
+ 'publisher': {
299
+ 'id': bidRequest.params.pubid
300
+ }
301
+ },
302
+ 'tmax': bidderRequest.timeout,
303
+ 'source': {
304
+ 'tid': bidderRequest.auctionId,
305
+ 'ext': {'wrapper': 'Prebid_js', 'wrapper_version': '$prebid.version$'}
306
+ },
307
+ 'imp': [{
308
+ 'id': bidRequest.bidId,
309
+ 'bidfloor': bidRequest.params.floorcpm,
310
+ 'tagid': bidRequest.params.secid,
311
+ 'ext': {'divid': bidRequest.adUnitCode},
312
+ 'video': expectedVideo
313
+ }]
314
+ });
269
315
  });
270
316
 
271
317
  it('if gdprConsent is present payload must have gdpr params', function () {
272
- const [request] = spec.buildRequests([bidRequests[0]], {gdprConsent: {consentString: 'AAA', gdprApplies: true}, refererInfo: bidderRequest.refererInfo});
273
- expect(request.url).to.be.an('string');
274
- const payload = parseRequestUrl(request.url);
275
- expect(payload).to.have.property('u', referrer);
276
- expect(payload).to.have.property('gdpr_consent', 'AAA');
277
- expect(payload).to.have.property('gdpr_applies', '1');
278
- });
279
-
280
- it('if gdprApplies is false gdpr_applies must be 0', function () {
281
- const [request] = spec.buildRequests([bidRequests[0]], {gdprConsent: {consentString: 'AAA', gdprApplies: false}});
282
- expect(request.url).to.be.an('string');
283
- const payload = parseRequestUrl(request.url);
284
- expect(payload).to.have.property('gdpr_consent', 'AAA');
285
- expect(payload).to.have.property('gdpr_applies', '0');
286
- });
287
-
288
- it('if gdprApplies is undefined gdpr_applies must be 1', function () {
289
- const [request] = spec.buildRequests([bidRequests[0]], {gdprConsent: {consentString: 'AAA'}});
290
- expect(request.url).to.be.an('string');
291
- const payload = parseRequestUrl(request.url);
292
- expect(payload).to.have.property('gdpr_consent', 'AAA');
293
- expect(payload).to.have.property('gdpr_applies', '1');
318
+ const gdprBidderRequest = Object.assign({gdprConsent: {consentString: 'AAA', gdprApplies: true}}, bidderRequest);
319
+ const request = spec.buildRequests([bidRequests[0]], gdprBidderRequest)[0];
320
+ const payload = request.data;
321
+ expect(request).to.have.property('data');
322
+ expect(payload).to.have.property('user');
323
+ expect(payload.user).to.have.property('ext');
324
+ expect(payload.user.ext).to.have.property('consent', 'AAA');
325
+ expect(payload).to.have.property('regs');
326
+ expect(payload.regs).to.have.property('ext');
327
+ expect(payload.regs.ext).to.have.property('gdpr', 1);
294
328
  });
295
329
 
296
330
  it('if usPrivacy is present payload must have us_privacy param', function () {
297
331
  const bidderRequestWithUSP = Object.assign({uspConsent: '1YNN'}, bidderRequest);
298
- const [request] = spec.buildRequests([bidRequests[0]], bidderRequestWithUSP);
299
- expect(request.url).to.be.an('string');
300
- const payload = parseRequestUrl(request.url);
301
- expect(payload).to.have.property('us_privacy', '1YNN');
332
+ const request = spec.buildRequests([bidRequests[0]], bidderRequestWithUSP)[0];
333
+ const payload = request.data;
334
+ expect(payload).to.have.property('regs');
335
+ expect(payload.regs).to.have.property('ext');
336
+ expect(payload.regs.ext).to.have.property('us_privacy', '1YNN');
302
337
  });
303
338
  });
304
339
 
@@ -306,6 +341,7 @@ describe('TheMediaGridNM Adapter', function () {
306
341
  const responses = [
307
342
  {'bid': [{'price': 1.15, 'adm': '<VAST version=\"3.0\">\n<Ad id=\"21341234\"><\/Ad>\n<\/VAST>', 'content_type': 'video', 'h': 250, 'w': 300, 'dealid': 11}], 'seat': '2'},
308
343
  {'bid': [{'price': 0.5, 'adm': '<VAST version=\"3.0\">\n<Ad id=\"21341235\"><\/Ad>\n<\/VAST>', 'content_type': 'video', 'h': 600, 'w': 300, adomain: ['my_domain.ru']}], 'seat': '2'},
344
+ {'bid': [{'price': 2.00, 'nurl': 'https://some_test_vast_url.com', 'content_type': 'video', 'adomain': ['example.com'], 'w': 300, 'h': 600}], 'seat': '2'},
309
345
  {'bid': [{'price': 0, 'h': 250, 'w': 300}], 'seat': '2'},
310
346
  {'bid': [{'price': 0, 'adm': '<VAST version=\"3.0\">\n<Ad id=\"21341237\"><\/Ad>\n<\/VAST>', 'h': 250, 'w': 300}], 'seat': '2'},
311
347
  undefined,
@@ -359,6 +395,28 @@ describe('TheMediaGridNM Adapter', function () {
359
395
  'context': 'instream'
360
396
  }
361
397
  }
398
+ },
399
+ {
400
+ 'bidder': 'gridNM',
401
+ 'params': {
402
+ 'source': 'jwp',
403
+ 'secid': '11',
404
+ 'pubid': '22',
405
+ 'video': {
406
+ 'mimes': ['video/mp4'],
407
+ 'protocols': [1, 2, 3],
408
+ }
409
+ },
410
+ 'adUnitCode': 'adunit-code-1',
411
+ 'sizes': [[300, 250], [300, 600]],
412
+ 'bidId': '127f4b12a432c',
413
+ 'bidderRequestId': 'a75bc868f32',
414
+ 'auctionId': '1cbd2feafe5e8b',
415
+ 'mediaTypes': {
416
+ 'video': {
417
+ 'context': 'instream'
418
+ }
419
+ }
362
420
  }
363
421
  ];
364
422
  const requests = spec.buildRequests(bidRequests);
@@ -400,6 +458,22 @@ describe('TheMediaGridNM Adapter', function () {
400
458
  'adResponse': {
401
459
  'content': '<VAST version=\"3.0\">\n<Ad id=\"21341235\"><\/Ad>\n<\/VAST>'
402
460
  }
461
+ },
462
+ {
463
+ 'requestId': '127f4b12a432c',
464
+ 'cpm': 2.00,
465
+ 'creativeId': 'a75bc868f32',
466
+ 'dealId': undefined,
467
+ 'width': 300,
468
+ 'height': 600,
469
+ 'currency': 'USD',
470
+ 'mediaType': 'video',
471
+ 'netRevenue': true,
472
+ 'ttl': 360,
473
+ 'meta': {
474
+ advertiserDomains: ['example.com']
475
+ },
476
+ 'vastUrl': 'https://some_test_vast_url.com',
403
477
  }
404
478
  ];
405
479
 
@@ -410,7 +484,7 @@ describe('TheMediaGridNM Adapter', function () {
410
484
  });
411
485
 
412
486
  it('handles wrong and nobid responses', function () {
413
- responses.slice(2).forEach((resp) => {
487
+ responses.slice(3).forEach((resp) => {
414
488
  const request = spec.buildRequests([{
415
489
  'bidder': 'gridNM',
416
490
  'params': {
@@ -229,13 +229,21 @@ describe('gumgumAdapter', function () {
229
229
  expect(bidRequest.data).to.not.have.property('irisid');
230
230
  });
231
231
 
232
- it('should set the global placement id (gpid)', function () {
232
+ it('should set the global placement id (gpid) if in adserver property', function () {
233
233
  const req = { ...bidRequests[0], ortb2Imp: { ext: { data: { adserver: { name: 'test', adslot: 123456 } } } } }
234
234
  const bidRequest = spec.buildRequests([req])[0];
235
235
  expect(bidRequest.data).to.have.property('gpid');
236
236
  expect(bidRequest.data.gpid).to.equal(123456);
237
237
  });
238
238
 
239
+ it('should set the global placement id (gpid) if in pbadslot property', function () {
240
+ const pbadslot = 'abc123'
241
+ const req = { ...bidRequests[0], ortb2Imp: { ext: { data: { pbadslot } } } }
242
+ const bidRequest = spec.buildRequests([req])[0];
243
+ expect(bidRequest.data).to.have.property('gpid');
244
+ expect(bidRequest.data.gpid).to.equal(pbadslot);
245
+ });
246
+
239
247
  it('should set the bid floor if getFloor module is not present but static bid floor is defined', function () {
240
248
  const req = { ...bidRequests[0], params: { bidfloor: 42 } }
241
249
  const bidRequest = spec.buildRequests([req])[0];
@@ -675,11 +683,24 @@ describe('gumgumAdapter', function () {
675
683
  expect(result[0].height).to.equal('1');
676
684
  });
677
685
 
678
- it('uses response width and height for inscreen product', function () {
679
- const result = spec.interpretResponse({ body: serverResponse }, bidRequest)[0];
680
- expect(result.width).to.equal(serverResponse.ad.width.toString());
681
- expect(result.height).to.equal(serverResponse.ad.height.toString());
682
- });
686
+ it('uses request size that nearest matches response size for in-screen', function () {
687
+ const request = { ...bidRequest };
688
+ const body = { ...serverResponse };
689
+ const expectedSize = [ 300, 50 ];
690
+ let result;
691
+
692
+ request.pi = 2;
693
+ request.sizes.unshift(expectedSize);
694
+
695
+ // typical ad server response values for in-screen
696
+ body.ad.width = 300;
697
+ body.ad.height = 100;
698
+
699
+ result = spec.interpretResponse({ body }, request)[0];
700
+
701
+ expect(result.width = expectedSize[0]);
702
+ expect(result.height = expectedSize[1]);
703
+ })
683
704
 
684
705
  it('defaults to use bidRequest sizes', function () {
685
706
  const { ad, jcsi, pag, thms, meta } = serverResponse
@@ -1,7 +1,9 @@
1
- import { iasSubModule } from 'modules/iasRtdProvider.js';
1
+ import { iasSubModule, iasTargeting } from 'modules/iasRtdProvider.js';
2
2
  import { expect } from 'chai';
3
3
  import { server } from 'test/mocks/xhr.js';
4
4
 
5
+ const responseHeader = { 'Content-Type': 'application/json' };
6
+
5
7
  describe('iasRtdProvider is a RTD provider that', function () {
6
8
  it('has the correct module name', function () {
7
9
  expect(iasSubModule.name).to.equal('ias');
@@ -10,8 +12,33 @@ describe('iasRtdProvider is a RTD provider that', function () {
10
12
  it('exists', function () {
11
13
  expect(iasSubModule.init).to.be.a('function');
12
14
  });
13
- it('returns true', function () {
14
- expect(iasSubModule.init()).to.equal(true);
15
+ it('returns false missing config params', function () {
16
+ const config = {
17
+ name: 'ias',
18
+ waitForIt: true,
19
+ };
20
+ const value = iasSubModule.init(config);
21
+ expect(value).to.equal(false);
22
+ });
23
+ it('returns false missing pubId param', function () {
24
+ const config = {
25
+ name: 'ias',
26
+ waitForIt: true,
27
+ params: {}
28
+ };
29
+ const value = iasSubModule.init(config);
30
+ expect(value).to.equal(false);
31
+ });
32
+ it('returns false missing pubId param', function () {
33
+ const config = {
34
+ name: 'ias',
35
+ waitForIt: true,
36
+ params: {
37
+ pubId: '123456'
38
+ }
39
+ };
40
+ const value = iasSubModule.init(config);
41
+ expect(value).to.equal(true);
15
42
  });
16
43
  });
17
44
  describe('has a method `getBidRequestData` that', function () {
@@ -30,10 +57,17 @@ describe('iasRtdProvider is a RTD provider that', function () {
30
57
  const adUnitsOriginal = adUnits;
31
58
  iasSubModule.getBidRequestData({ adUnits: adUnits }, callback, config);
32
59
  request = server.requests[0];
33
- server.respond();
60
+ request.respond(200, responseHeader, JSON.stringify(data));
34
61
  expect(request.url).to.be.include(`https://pixel.adsafeprotected.com/services/pub?anId=1234`);
35
62
  expect(adUnits).to.length(2);
36
63
  expect(adUnits[0]).to.be.eq(adUnitsOriginal[0]);
64
+ const targetingKeys = Object.keys(iasTargeting);
65
+ const dataKeys = Object.keys(data);
66
+ expect(targetingKeys.length).to.equal(dataKeys.length);
67
+ expect(targetingKeys['fr']).to.be.eq(dataKeys['fr']);
68
+ expect(targetingKeys['brandSafety']).to.be.eq(dataKeys['brandSafety']);
69
+ expect(targetingKeys['ias-kw']).to.be.eq(dataKeys['ias-kw']);
70
+ expect(targetingKeys['slots']).to.be.eq(dataKeys['slots']);
37
71
  });
38
72
  });
39
73
 
@@ -42,10 +76,32 @@ describe('iasRtdProvider is a RTD provider that', function () {
42
76
  expect(iasSubModule.getTargetingData).to.be.a('function');
43
77
  });
44
78
  it('invoke method', function () {
45
- const targeting = iasSubModule.getTargetingData(adUnits, config);
46
- expect(adUnits).to.length(2);
79
+ const targeting = iasSubModule.getTargetingData(adUnitsCode, config);
80
+ expect(adUnitsCode).to.length(2);
47
81
  expect(targeting).to.be.not.null;
48
82
  expect(targeting).to.be.not.empty;
83
+ expect(targeting['one-div-id']).to.be.not.null;
84
+ const targetingKeys = Object.keys(targeting['one-div-id']);
85
+ expect(targetingKeys.length).to.equal(10);
86
+ expect(targetingKeys['adt']).to.be.not.null;
87
+ expect(targetingKeys['alc']).to.be.not.null;
88
+ expect(targetingKeys['dlm']).to.be.not.null;
89
+ expect(targetingKeys['drg']).to.be.not.null;
90
+ expect(targetingKeys['hat']).to.be.not.null;
91
+ expect(targetingKeys['off']).to.be.not.null;
92
+ expect(targetingKeys['vio']).to.be.not.null;
93
+ expect(targetingKeys['fr']).to.be.not.null;
94
+ expect(targetingKeys['ias-kw']).to.be.not.null;
95
+ expect(targetingKeys['id']).to.be.not.null;
96
+ expect(targeting['one-div-id']['adt']).to.be.eq('veryLow');
97
+ expect(targeting['one-div-id']['alc']).to.be.eq('veryLow');
98
+ expect(targeting['one-div-id']['dlm']).to.be.eq('veryLow');
99
+ expect(targeting['one-div-id']['drg']).to.be.eq('veryLow');
100
+ expect(targeting['one-div-id']['hat']).to.be.eq('veryLow');
101
+ expect(targeting['one-div-id']['off']).to.be.eq('veryLow');
102
+ expect(targeting['one-div-id']['vio']).to.be.eq('veryLow');
103
+ expect(targeting['one-div-id']['fr']).to.be.eq('false');
104
+ expect(targeting['one-div-id']['id']).to.be.eq('4813f7a2-1f22-11ec-9bfd-0a1107f94461');
49
105
  });
50
106
  });
51
107
  });
@@ -58,6 +114,8 @@ const config = {
58
114
  }
59
115
  };
60
116
 
117
+ const adUnitsCode = ['one-div-id', 'two-div-id'];
118
+
61
119
  const adUnits = [
62
120
  {
63
121
  code: 'one-div-id',
@@ -87,3 +145,10 @@ const adUnits = [
87
145
  }
88
146
  }]
89
147
  }];
148
+
149
+ const data = {
150
+ brandSafety: { adt: 'veryLow', alc: 'veryLow', dlm: 'veryLow', drg: 'veryLow', hat: 'veryLow', off: 'veryLow', vio: 'veryLow' },
151
+ custom: { 'ias-kw': ['IAS_5995_KW', 'IAS_7066_KW', 'IAS_7232_KW', 'IAS_7364_KW', 'IAS_3894_KW', 'IAS_6535_KW', 'IAS_6153_KW', 'IAS_5238_KW', 'IAS_7393_KW', 'IAS_1499_KW', 'IAS_7376_KW', 'IAS_1035_KW', 'IAS_6566_KW', 'IAS_1058_KW', 'IAS_11338_724_KW', 'IAS_7301_KW', 'IAS_15969_725_KW', 'IAS_6358_KW', 'IAS_710_KW', 'IAS_5445_KW', 'IAS_3822_KW', 'IAS_4901_KW', 'IAS_5806_KW', 'IAS_460_KW', 'IAS_11461_702_KW', 'IAS_5681_KW', 'IAS_17609_1240_KW', 'IAS_6634_KW', 'IAS_5597_KW'] },
152
+ fr: 'false',
153
+ slots: { 'one-div-id': { id: '4813f7a2-1f22-11ec-9bfd-0a1107f94461' } }
154
+ };
@@ -12,7 +12,8 @@ const REQUEST = {
12
12
  'bidder': 'inskin',
13
13
  'params': {
14
14
  'networkId': 9874,
15
- 'siteId': 730181
15
+ 'siteId': 730181,
16
+ 'publisherId': 123456
16
17
  },
17
18
  'placementCode': 'div-gpt-ad-1487778092495-0',
18
19
  'sizes': [
@@ -374,4 +375,12 @@ describe('InSkin BidAdapter', function () {
374
375
  expect(opts.length).to.equal(3);
375
376
  });
376
377
  });
378
+ describe('supply chain id', function () {
379
+ it('should use publisherId as sid', function () {
380
+ const request = spec.buildRequests(REQUEST.bidRequest, bidderRequest);
381
+ const payload = JSON.parse(request.data);
382
+
383
+ expect(payload.rtb.schain.ext.sid).to.equal('123456');
384
+ });
385
+ });
377
386
  });
@@ -8,6 +8,39 @@ describe('invibesBidAdapter:', function () {
8
8
  const SYNC_ENDPOINT = 'https://k.r66net.com/GetUserSync';
9
9
 
10
10
  let bidRequests = [
11
+ {
12
+ bidId: 'b1',
13
+ bidder: BIDDER_CODE,
14
+ bidderRequestId: 'r1',
15
+ params: {
16
+ placementId: PLACEMENT_ID
17
+ },
18
+ adUnitCode: 'test-div',
19
+ auctionId: 'a1',
20
+ sizes: [
21
+ [300, 250],
22
+ [400, 300],
23
+ [125, 125]
24
+ ],
25
+ transactionId: 't1'
26
+ }, {
27
+ bidId: 'b2',
28
+ bidder: BIDDER_CODE,
29
+ bidderRequestId: 'r2',
30
+ params: {
31
+ placementId: 'abcde'
32
+ },
33
+ adUnitCode: 'test-div',
34
+ auctionId: 'a2',
35
+ sizes: [
36
+ [300, 250],
37
+ [400, 300]
38
+ ],
39
+ transactionId: 't2'
40
+ }
41
+ ];
42
+
43
+ let bidRequestsWithUserId = [
11
44
  {
12
45
  bidId: 'b1',
13
46
  bidder: BIDDER_CODE,
@@ -104,7 +137,7 @@ describe('invibesBidAdapter:', function () {
104
137
  expect(spec.isBidRequestValid(invalidBid)).to.be.false;
105
138
  });
106
139
 
107
- it('returns false when bid response was previously received', function () {
140
+ it('returns true when bid response was previously received', function () {
108
141
  const validBid = {
109
142
  bidder: BIDDER_CODE,
110
143
  params: {
@@ -113,7 +146,7 @@ describe('invibesBidAdapter:', function () {
113
146
  }
114
147
 
115
148
  top.window.invibes.bidResponse = {prop: 'prop'};
116
- expect(spec.isBidRequestValid(validBid)).to.be.false;
149
+ expect(spec.isBidRequestValid(validBid)).to.be.true;
117
150
  });
118
151
  });
119
152
  });
@@ -190,11 +223,22 @@ describe('invibesBidAdapter:', function () {
190
223
  expect(JSON.parse(request.data.bidParamsJson).placementIds).to.contain(bidRequests[1].params.placementId);
191
224
  });
192
225
 
226
+ it('sends all Placement Ids and userId', function () {
227
+ const request = spec.buildRequests(bidRequestsWithUserId);
228
+ expect(JSON.parse(request.data.bidParamsJson).userId).to.exist;
229
+ });
230
+
193
231
  it('sends undefined lid when no cookie', function () {
194
232
  let request = spec.buildRequests(bidRequests);
195
233
  expect(request.data.lId).to.be.undefined;
196
234
  });
197
235
 
236
+ it('sends pushed cids if they exist', function () {
237
+ top.window.invibes.pushedCids = { 981: [] };
238
+ let request = spec.buildRequests(bidRequests);
239
+ expect(request.data.pcids).to.contain(981);
240
+ });
241
+
198
242
  it('sends lid when comes on cookie', function () {
199
243
  top.window.invibes.optIn = 1;
200
244
  top.window.invibes.purposes = [true, false, false, false, false, false, false, false, false, false];
@@ -738,6 +782,7 @@ describe('invibesBidAdapter:', function () {
738
782
  }];
739
783
 
740
784
  let multiResponse = {
785
+ MultipositionEnabled: true,
741
786
  AdPlacements: [{
742
787
  Ads: [{
743
788
  BidPrice: 0.5,
@@ -778,6 +823,26 @@ describe('invibesBidAdapter:', function () {
778
823
  }
779
824
  };
780
825
 
826
+ var buildResponse = function(placementId, cid, blcids, creativeId) {
827
+ return {
828
+ MultipositionEnabled: true,
829
+ AdPlacements: [{
830
+ Ads: [{
831
+ BidPrice: 0.5,
832
+ VideoExposedId: creativeId,
833
+ Cid: cid,
834
+ Blcids: blcids
835
+ }],
836
+ BidModel: {
837
+ BidVersion: 1,
838
+ PlacementId: placementId,
839
+ AuctionStartTime: Date.now(),
840
+ CreativeHtml: '<!-- Creative -->'
841
+ }
842
+ }]
843
+ };
844
+ };
845
+
781
846
  context('when the response is not valid', function () {
782
847
  it('handles response with no bids requested', function () {
783
848
  let emptyResult = spec.interpretResponse({body: response});
@@ -856,6 +921,53 @@ describe('invibesBidAdapter:', function () {
856
921
  expect(result[0].meta.advertiserDomains).to.contain('theadvertiser_2.com');
857
922
  });
858
923
  });
924
+
925
+ context('in multiposition context, with conflicting ads', function() {
926
+ it('registers the second ad when no conflict', function() {
927
+ var firstResponse = buildResponse('12345', 1, [1], 123);
928
+ var secondResponse = buildResponse('abcde', 2, [2], 456);
929
+
930
+ var firstResult = spec.interpretResponse({body: firstResponse}, {bidRequests});
931
+ var secondResult = spec.interpretResponse({body: secondResponse}, {bidRequests});
932
+ expect(secondResult[0].creativeId).to.equal(456);
933
+ });
934
+
935
+ it('registers the second ad when no conflict - empty arrays', function() {
936
+ var firstResponse = buildResponse('12345', 1, [], 123);
937
+ var secondResponse = buildResponse('abcde', 2, [], 456);
938
+
939
+ var firstResult = spec.interpretResponse({body: firstResponse}, {bidRequests});
940
+ var secondResult = spec.interpretResponse({body: secondResponse}, {bidRequests});
941
+ expect(secondResult[0].creativeId).to.equal(456);
942
+ });
943
+
944
+ it('doesnt register the second ad when it is blacklisted by the first', function() {
945
+ var firstResponse = buildResponse('12345', 1, [2], 123);
946
+ var secondResponse = buildResponse('abcde', 2, [], 456);
947
+
948
+ var firstResult = spec.interpretResponse({body: firstResponse}, {bidRequests});
949
+ var secondResult = spec.interpretResponse({body: secondResponse}, {bidRequests});
950
+ expect(secondResult).to.be.empty;
951
+ });
952
+
953
+ it('doesnt register the second ad when it is blacklisting the first', function() {
954
+ var firstResponse = buildResponse('12345', 1, [], 123);
955
+ var secondResponse = buildResponse('abcde', 2, [1], 456);
956
+
957
+ var firstResult = spec.interpretResponse({body: firstResponse}, {bidRequests});
958
+ var secondResult = spec.interpretResponse({body: secondResponse}, {bidRequests});
959
+ expect(secondResult).to.be.empty;
960
+ });
961
+
962
+ it('doesnt register the second ad when it has same ids as the first', function() {
963
+ var firstResponse = buildResponse('12345', 1, [1], 123);
964
+ var secondResponse = buildResponse('abcde', 1, [1], 456);
965
+
966
+ var firstResult = spec.interpretResponse({body: firstResponse}, {bidRequests});
967
+ var secondResult = spec.interpretResponse({body: secondResponse}, {bidRequests});
968
+ expect(secondResult).to.be.empty;
969
+ });
970
+ });
859
971
  });
860
972
 
861
973
  describe('getUserSyncs', function () {
@@ -12,6 +12,18 @@ describe('justpremium adapter', function () {
12
12
  sandbox.restore();
13
13
  });
14
14
 
15
+ let schainConfig = {
16
+ 'ver': '1.0',
17
+ 'complete': 1,
18
+ 'nodes': [
19
+ {
20
+ 'asi': 'indirectseller.com',
21
+ 'sid': '00001',
22
+ 'hp': 1
23
+ }
24
+ ]
25
+ }
26
+
15
27
  let adUnits = [
16
28
  {
17
29
  adUnitCode: 'div-gpt-ad-1471513102552-1',
@@ -33,7 +45,8 @@ describe('justpremium adapter', function () {
33
45
  params: {
34
46
  zone: 28313,
35
47
  allow: ['lb', 'wp']
36
- }
48
+ },
49
+ schain: schainConfig
37
50
  },
38
51
  {
39
52
  adUnitCode: 'div-gpt-ad-1471513102552-2',
@@ -75,6 +88,7 @@ describe('justpremium adapter', function () {
75
88
  expect(jpxRequest).to.not.equal(null)
76
89
  expect(jpxRequest.zone).to.not.equal('undefined')
77
90
  expect(bidderRequest.refererInfo.referer).to.equal('https://justpremium.com')
91
+ expect(jpxRequest.schain).to.deep.equal(schainConfig)
78
92
  expect(jpxRequest.sw).to.equal(window.top.screen.width)
79
93
  expect(jpxRequest.sh).to.equal(window.top.screen.height)
80
94
  expect(jpxRequest.ww).to.equal(window.top.innerWidth)
@@ -83,7 +97,7 @@ describe('justpremium adapter', function () {
83
97
  expect(jpxRequest.id).to.equal(adUnits[0].params.zone)
84
98
  expect(jpxRequest.mediaTypes && jpxRequest.mediaTypes.banner && jpxRequest.mediaTypes.banner.sizes).to.not.equal('undefined')
85
99
  expect(jpxRequest.version.prebid).to.equal('$prebid.version$')
86
- expect(jpxRequest.version.jp_adapter).to.equal('1.7')
100
+ expect(jpxRequest.version.jp_adapter).to.equal('1.8')
87
101
  expect(jpxRequest.pubcid).to.equal('0000000')
88
102
  expect(jpxRequest.uids.tdid).to.equal('1111111')
89
103
  expect(jpxRequest.uids.id5id.uid).to.equal('2222222')