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
@@ -125,16 +125,19 @@ const ANALYTICS_MESSAGE = {
125
125
  bidAdUnits: [
126
126
  {
127
127
  adUnit: 'panorama_d_1',
128
+ adUnitId: 'adunitid',
128
129
  timeStamp: 1519149562216
129
130
  },
130
131
  {
131
132
  adUnit: 'box_d_1',
133
+ adUnitId: 'adunitid',
132
134
  timeStamp: 1519149562216
133
135
  }
134
136
  ],
135
137
  requests: [
136
138
  {
137
139
  adUnit: 'panorama_d_1',
140
+ adUnitId: 'adunitid',
138
141
  bidder: 'livewrapped',
139
142
  timeStamp: 1519149562216,
140
143
  gdpr: 0,
@@ -142,6 +145,7 @@ const ANALYTICS_MESSAGE = {
142
145
  },
143
146
  {
144
147
  adUnit: 'box_d_1',
148
+ adUnitId: 'adunitid',
145
149
  bidder: 'livewrapped',
146
150
  timeStamp: 1519149562216,
147
151
  gdpr: 0,
@@ -149,6 +153,7 @@ const ANALYTICS_MESSAGE = {
149
153
  },
150
154
  {
151
155
  adUnit: 'box_d_2',
156
+ adUnitId: 'adunitid',
152
157
  bidder: 'livewrapped',
153
158
  timeStamp: 1519149562216,
154
159
  gdpr: 0,
@@ -159,6 +164,7 @@ const ANALYTICS_MESSAGE = {
159
164
  {
160
165
  timeStamp: 1519149562216,
161
166
  adUnit: 'panorama_d_1',
167
+ adUnitId: 'adunitid',
162
168
  bidder: 'livewrapped',
163
169
  width: 980,
164
170
  height: 240,
@@ -172,6 +178,7 @@ const ANALYTICS_MESSAGE = {
172
178
  {
173
179
  timeStamp: 1519149562216,
174
180
  adUnit: 'box_d_1',
181
+ adUnitId: 'adunitid',
175
182
  bidder: 'livewrapped',
176
183
  width: 300,
177
184
  height: 250,
@@ -185,6 +192,7 @@ const ANALYTICS_MESSAGE = {
185
192
  {
186
193
  timeStamp: 1519149562216,
187
194
  adUnit: 'box_d_2',
195
+ adUnitId: 'adunitid',
188
196
  bidder: 'livewrapped',
189
197
  ttr: 200,
190
198
  IsBid: false,
@@ -197,6 +205,7 @@ const ANALYTICS_MESSAGE = {
197
205
  {
198
206
  timeStamp: 1519149562216,
199
207
  adUnit: 'panorama_d_1',
208
+ adUnitId: 'adunitid',
200
209
  bidder: 'livewrapped',
201
210
  width: 980,
202
211
  height: 240,
@@ -208,6 +217,7 @@ const ANALYTICS_MESSAGE = {
208
217
  {
209
218
  timeStamp: 1519149562216,
210
219
  adUnit: 'box_d_1',
220
+ adUnitId: 'adunitid',
211
221
  bidder: 'livewrapped',
212
222
  width: 300,
213
223
  height: 250,
@@ -238,8 +248,14 @@ describe('Livewrapped analytics adapter', function () {
238
248
  beforeEach(function () {
239
249
  sandbox = sinon.sandbox.create();
240
250
 
251
+ let element = {
252
+ getAttribute: function() {
253
+ return 'adunitid';
254
+ }
255
+ }
241
256
  sandbox.stub(events, 'getEvents').returns([]);
242
257
  sandbox.stub(utils, 'timestamp').returns(1519149562416);
258
+ sandbox.stub(document, 'getElementById').returns(element);
243
259
 
244
260
  clock = sandbox.useFakeTimers(1519767013781);
245
261
  });
@@ -400,18 +416,28 @@ describe('Livewrapped analytics adapter', function () {
400
416
  {
401
417
  'bidder': 'livewrapped',
402
418
  'adUnitCode': 'panorama_d_1',
403
- 'bidId': '2ecff0db240757',
404
- 'floorData': {
405
- 'floorValue': 1.1,
406
- 'floorCurrency': 'SEK'
407
- }
419
+ 'bidId': '2ecff0db240757'
408
420
  }
409
421
  ],
410
422
  'start': 1519149562216
411
423
  });
412
424
 
413
- events.emit(BID_RESPONSE, MOCK.BID_RESPONSE[0]);
414
- events.emit(BID_WON, MOCK.BID_WON[0]);
425
+ events.emit(BID_RESPONSE, Object.assign({},
426
+ MOCK.BID_RESPONSE[0],
427
+ {
428
+ 'floorData': {
429
+ 'floorValue': 1.1,
430
+ 'floorCurrency': 'SEK'
431
+ }
432
+ }));
433
+ events.emit(BID_WON, Object.assign({},
434
+ MOCK.BID_WON[0],
435
+ {
436
+ 'floorData': {
437
+ 'floorValue': 1.1,
438
+ 'floorCurrency': 'SEK'
439
+ }
440
+ }));
415
441
  events.emit(AUCTION_END, MOCK.AUCTION_END);
416
442
 
417
443
  clock.tick(BID_WON_TIMEOUT + 1000);
@@ -1,9 +1,11 @@
1
1
  import { expect } from 'chai';
2
+ import find from 'core-js-pure/features/array/find.js';
2
3
  import { spec } from 'modules/mediakeysBidAdapter.js';
3
4
  import { newBidder } from 'src/adapters/bidderFactory.js';
4
5
  import * as utils from 'src/utils.js';
5
6
  import { config } from 'src/config.js';
6
7
  import { BANNER, NATIVE, VIDEO } from '../../../src/mediaTypes.js';
8
+ import { OUTSTREAM } from '../../../src/video.js';
7
9
 
8
10
  describe('mediakeysBidAdapter', function () {
9
11
  const adapter = newBidder(spec);
@@ -39,39 +41,100 @@ describe('mediakeysBidAdapter', function () {
39
41
  }
40
42
  };
41
43
 
44
+ const bidNative = {
45
+ bidder: 'mediakeys',
46
+ params: {},
47
+ mediaTypes: {
48
+ native: {
49
+ body: {
50
+ required: true
51
+ },
52
+ title: {
53
+ required: true,
54
+ len: 800
55
+ },
56
+ sponsoredBy: {
57
+ required: true
58
+ },
59
+ body2: {
60
+ required: true
61
+ },
62
+ image: {
63
+ required: true,
64
+ sizes: [[300, 250], [300, 600], [100, 150]],
65
+ },
66
+ icon: {
67
+ required: true,
68
+ sizes: [50, 50],
69
+ },
70
+ },
71
+ },
72
+ nativeParams: {
73
+ body: {
74
+ required: true
75
+ },
76
+ title: {
77
+ required: true,
78
+ len: 800
79
+ },
80
+ sponsoredBy: {
81
+ required: true
82
+ },
83
+ body2: {
84
+ required: true
85
+ },
86
+ image: {
87
+ required: true,
88
+ sizes: [[300, 250], [300, 600], [100, 150]],
89
+ },
90
+ icon: {
91
+ required: true,
92
+ sizes: [50, 50],
93
+ },
94
+ },
95
+ adUnitCode: 'div-gpt-ad-1460505748561-0',
96
+ transactionId: '47789656-9e5c-4250-b7e0-2ce4cbe71a55',
97
+ bidId: '299320f4de980d',
98
+ bidderRequestId: '1c1b642f803242',
99
+ auctionId: '84212956-c377-40e8-b000-9885a06dc692',
100
+ src: 'client',
101
+ bidRequestsCount: 1,
102
+ bidderRequestsCount: 1,
103
+ bidderWinsCount: 0,
104
+ ortb2Imp: {
105
+ ext: { data: { something: 'test' } }
106
+ }
107
+ };
108
+
109
+ const bidVideo = {
110
+ bidder: 'mediakeys',
111
+ params: {},
112
+ mediaTypes: {
113
+ video: {
114
+ context: OUTSTREAM,
115
+ playerSize: [480, 320]
116
+ }
117
+ },
118
+ adUnitCode: 'div-gpt-ad-1460505748561-0',
119
+ transactionId: '47789656-9e5c-4250-b7e0-2ce4cbe71a55',
120
+ bidId: '299320f4de980d',
121
+ bidderRequestId: '1c1b642f803242',
122
+ auctionId: '84212956-c377-40e8-b000-9885a06dc692',
123
+ src: 'client',
124
+ bidRequestsCount: 1,
125
+ bidderRequestsCount: 1,
126
+ bidderWinsCount: 0,
127
+ ortb2Imp: {
128
+ ext: { data: { something: 'test' } }
129
+ }
130
+ };
131
+
42
132
  const bidderRequest = {
43
133
  bidderCode: 'mediakeys',
44
134
  auctionId: '84212956-c377-40e8-b000-9885a06dc692',
45
135
  bidderRequestId: '1c1b642f803242',
46
136
  bids: [
47
- {
48
- bidder: 'mediakeys',
49
- params: {},
50
- mediaTypes: {
51
- banner: {
52
- sizes: [
53
- [300, 250],
54
- [300, 600],
55
- ],
56
- },
57
- },
58
- adUnitCode: 'div-gpt-ad-1460505748561-0',
59
- transactionId: '47789656-9e5c-4250-b7e0-2ce4cbe71a55',
60
- sizes: [
61
- [300, 250],
62
- [300, 600],
63
- ],
64
- bidId: '299320f4de980d',
65
- bidderRequestId: '1c1b642f803242',
66
- auctionId: '84212956-c377-40e8-b000-9885a06dc692',
67
- src: 'client',
68
- bidRequestsCount: 1,
69
- bidderRequestsCount: 1,
70
- bidderWinsCount: 0,
71
- ortb2Imp: {
72
- ext: { data: { something: 'test' } }
73
- }
74
- },
137
+ bid
75
138
  ],
76
139
  auctionStart: 1620973766319,
77
140
  timeout: 1000,
@@ -116,23 +179,25 @@ describe('mediakeysBidAdapter', function () {
116
179
  it('should create imp for supported mediaType only', function() {
117
180
  const bidRequests = [utils.deepClone(bid)];
118
181
  const bidderRequestCopy = utils.deepClone(bidderRequest);
182
+ bidderRequestCopy.bids = bidRequests;
119
183
 
120
184
  bidRequests[0].mediaTypes.video = {
121
185
  playerSize: [300, 250],
122
- context: 'outstream'
186
+ context: OUTSTREAM
123
187
  }
124
188
 
125
- bidRequests[0].mediaTypes.native = {
126
- type: 'image'
127
- }
189
+ bidRequests[0].mediaTypes.native = bidNative.mediaTypes.native;
190
+ bidRequests[0].nativeParams = bidNative.mediaTypes.native;
191
+
192
+ bidderRequestCopy.bids = bidRequests[0];
128
193
 
129
194
  const request = spec.buildRequests(bidRequests, bidderRequestCopy);
130
195
  const data = request.data;
131
196
 
132
197
  expect(data.imp.length).to.equal(1);
133
198
  expect(data.imp[0].banner).to.exist;
134
- expect(data.imp[0].video).to.not.exist;
135
- expect(data.imp[0].native).to.not.exist;
199
+ expect(data.imp[0].video).to.exist;
200
+ expect(data.imp[0].native).to.exist;
136
201
  });
137
202
 
138
203
  it('should get expected properties with default values (no params set)', function () {
@@ -161,6 +226,205 @@ describe('mediakeysBidAdapter', function () {
161
226
  expect(data.imp[0].ext.data.something).to.equal('test');
162
227
  });
163
228
 
229
+ describe('native imp', function() {
230
+ it('should get a native object in request', function() {
231
+ const bidRequests = [utils.deepClone(bidNative)];
232
+ const bidderRequestCopy = utils.deepClone(bidderRequest);
233
+ bidderRequestCopy.bids = bidRequests;
234
+
235
+ const request = spec.buildRequests(bidRequests, bidderRequestCopy);
236
+ const data = request.data;
237
+
238
+ expect(data.imp.length).to.equal(1);
239
+ expect(data.imp[0].id).to.equal(bidRequests[0].bidId);
240
+ expect(data.imp[0].native).to.exist;
241
+ expect(data.imp[0].native.request.ver).to.equal('1.2');
242
+ expect(data.imp[0].native.request.context).to.equal(1);
243
+ expect(data.imp[0].native.request.plcmttype).to.equal(1);
244
+ expect(data.imp[0].native.request.assets.length).to.equal(6);
245
+ // find the asset body
246
+ const bodyAsset = find(data.imp[0].native.request.assets, asset => asset.id === 6);
247
+ expect(bodyAsset.data.type).to.equal(2);
248
+ });
249
+
250
+ it('should get a native object in request with properties filled with params values', function() {
251
+ const bidRequests = [utils.deepClone(bidNative)];
252
+ bidRequests[0].params = {
253
+ native: {
254
+ context: 3,
255
+ plcmttype: 3,
256
+ }
257
+ }
258
+ const bidderRequestCopy = utils.deepClone(bidderRequest);
259
+ bidderRequestCopy.bids = bidRequests;
260
+
261
+ const request = spec.buildRequests(bidRequests, bidderRequestCopy);
262
+ const data = request.data;
263
+
264
+ expect(data.imp.length).to.equal(1);
265
+ expect(data.imp[0].id).to.equal(bidRequests[0].bidId);
266
+ expect(data.imp[0].native).to.exist;
267
+ expect(data.imp[0].native.request.ver).to.equal('1.2');
268
+ expect(data.imp[0].native.request.context).to.equal(3);
269
+ expect(data.imp[0].native.request.plcmttype).to.equal(3);
270
+ expect(data.imp[0].native.request.assets.length).to.equal(6);
271
+ });
272
+
273
+ it('should get a native object in request when native type ,image" has been set', function() {
274
+ const bidRequests = [utils.deepClone(bidNative)];
275
+ bidRequests[0].mediaTypes.native = { type: 'image' };
276
+ bidRequests[0].nativeParams = {
277
+ image: { required: true },
278
+ title: { required: true },
279
+ sponsoredBy: { required: true },
280
+ clickUrl: { required: true }, // [1] Will be ignored as it is used in response validation only
281
+ body: { required: false },
282
+ icon: { required: false },
283
+ };
284
+
285
+ const bidderRequestCopy = utils.deepClone(bidderRequest);
286
+ bidderRequestCopy.bids = bidRequests;
287
+
288
+ const request = spec.buildRequests(bidRequests, bidderRequestCopy);
289
+ const data = request.data;
290
+
291
+ expect(data.imp.length).to.equal(1);
292
+ expect(data.imp[0].id).to.equal(bidRequests[0].bidId);
293
+ expect(data.imp[0].native).to.exist;
294
+ expect(data.imp[0].native.request.ver).to.equal('1.2');
295
+ expect(data.imp[0].native.request.context).to.equal(1);
296
+ expect(data.imp[0].native.request.plcmttype).to.equal(1);
297
+ expect(data.imp[0].native.request.assets.length).to.equal(5); // [1] clickUrl ignored
298
+ });
299
+
300
+ it('should log errors and ignore misformated assets', function() {
301
+ const bidRequests = [utils.deepClone(bidNative)];
302
+ delete bidRequests[0].nativeParams.title.len;
303
+ bidRequests[0].nativeParams.unregistred = {required: true};
304
+
305
+ const bidderRequestCopy = utils.deepClone(bidderRequest);
306
+ bidderRequestCopy.bids = bidRequests;
307
+
308
+ utilsMock.expects('logWarn').twice();
309
+
310
+ const request = spec.buildRequests(bidRequests, bidderRequestCopy);
311
+ const data = request.data;
312
+
313
+ expect(data.imp.length).to.equal(1);
314
+ expect(data.imp[0].id).to.equal(bidRequests[0].bidId);
315
+ expect(data.imp[0].native).to.exist;
316
+ expect(data.imp[0].native.request.assets.length).to.equal(5);
317
+ });
318
+ });
319
+
320
+ describe('video imp', function() {
321
+ it('should get a video object in request', function() {
322
+ const bidRequests = [utils.deepClone(bidVideo)];
323
+ const bidderRequestCopy = utils.deepClone(bidderRequest);
324
+ bidderRequestCopy.bids = bidRequests;
325
+
326
+ const request = spec.buildRequests(bidRequests, bidderRequestCopy);
327
+ const data = request.data;
328
+
329
+ expect(data.imp.length).to.equal(1);
330
+ expect(data.imp[0].id).to.equal(bidRequests[0].bidId);
331
+ expect(data.imp[0].banner).to.not.exist;
332
+ expect(data.imp[0].video).to.exist;
333
+ expect(data.imp[0].video.w).to.equal(480);
334
+ expect(data.imp[0].video.h).to.equal(320);
335
+ });
336
+
337
+ it('should ignore and warn misformated ORTB video properties', function() {
338
+ const bidRequests = [utils.deepClone(bidVideo)];
339
+ bidRequests[0].mediaTypes.video.unknown = 'foo';
340
+ bidRequests[0].mediaTypes.video.placement = 10;
341
+ bidRequests[0].mediaTypes.video.skipmin = 5;
342
+ const bidderRequestCopy = utils.deepClone(bidderRequest);
343
+ bidderRequestCopy.bids = bidRequests;
344
+
345
+ const request = spec.buildRequests(bidRequests, bidderRequestCopy);
346
+ const data = request.data;
347
+
348
+ expect(data.imp.length).to.equal(1);
349
+ expect(data.imp[0].id).to.equal(bidRequests[0].bidId);
350
+ expect(data.imp[0].banner).to.not.exist;
351
+ expect(data.imp[0].video).to.exist;
352
+ expect(data.imp[0].video.w).to.equal(480);
353
+ expect(data.imp[0].video.h).to.equal(320);
354
+ expect(data.imp[0].video.skipmin).to.equal(5);
355
+ expect(data.imp[0].video.placement).to.not.exist;
356
+ expect(data.imp[0].video.unknown).to.not.exist;
357
+ });
358
+
359
+ it('should merge adUnit mediaTypes level and bidder level params properties ', function() {
360
+ const bidRequests = [utils.deepClone(bidVideo)];
361
+ bidRequests[0].mediaTypes.video.placement = 1;
362
+ bidRequests[0].mediaTypes.video.mimes = ['video/mpeg4'];
363
+ bidRequests[0].mediaTypes.video.protocols = [1];
364
+ bidRequests[0].mediaTypes.video.minduration = 10;
365
+ bidRequests[0].mediaTypes.video.maxduration = 45;
366
+ bidRequests[0].mediaTypes.video.skipmin = 5;
367
+ bidRequests[0].mediaTypes.video.sequence = 3;
368
+ bidRequests[0].mediaTypes.video.linearity = 1;
369
+ bidRequests[0].mediaTypes.video.battr = [12];
370
+ bidRequests[0].mediaTypes.video.maxextended = 10;
371
+ bidRequests[0].mediaTypes.video.minbitrate = 720;
372
+ bidRequests[0].mediaTypes.video.maxbitrate = 720;
373
+ bidRequests[0].mediaTypes.video.boxingallowed = 1;
374
+ bidRequests[0].mediaTypes.video.playbackmethod = [1];
375
+ bidRequests[0].mediaTypes.video.playbackend = 2;
376
+ bidRequests[0].mediaTypes.video.delivery = 2;
377
+ bidRequests[0].mediaTypes.video.pos = 0;
378
+ bidRequests[0].mediaTypes.video.companionad = [{ w: 360, h: 80 }]
379
+ bidRequests[0].mediaTypes.video.api = [1];
380
+ bidRequests[0].mediaTypes.video.companiontype = [1];
381
+
382
+ // bidder level
383
+ bidRequests[0].params.video = {
384
+ pos: 2, // override
385
+ skip: 1,
386
+ skipafter: 10,
387
+ startdelay: 3
388
+ };
389
+
390
+ const bidderRequestCopy = utils.deepClone(bidderRequest);
391
+ bidderRequestCopy.bids = bidRequests;
392
+
393
+ utilsMock.expects('logWarn').never();
394
+
395
+ const request = spec.buildRequests(bidRequests, bidderRequestCopy);
396
+ const data = request.data;
397
+
398
+ expect(data.imp.length).to.equal(1);
399
+ expect(data.imp[0].id).to.equal(bidRequests[0].bidId);
400
+ expect(data.imp[0].banner).to.not.exist;
401
+ expect(data.imp[0].video).to.exist;
402
+
403
+ expect(Object.keys(data.imp[0].video).length).to.equal(23); // 21 ortb params (2 skipped) + computed width/height.
404
+ expect(data.imp[0].video.w).to.equal(480);
405
+ expect(data.imp[0].video.h).to.equal(320);
406
+ expect(data.imp[0].video.mimes[0]).to.equal('video/mpeg4');
407
+ expect(data.imp[0].video.pos).to.equal(2);
408
+ expect(data.imp[0].video.skip).to.equal(1);
409
+ expect(data.imp[0].video.skipafter).to.equal(10);
410
+ expect(data.imp[0].video.startdelay).to.equal(3);
411
+ expect(data.imp[0].video.companionad).to.not.exist;
412
+ expect(data.imp[0].video.companiontype).to.not.exist;
413
+ });
414
+
415
+ it('should log warn message when OpenRTB validation fails ', function() {
416
+ const bidRequests = [utils.deepClone(bidVideo)];
417
+ bidRequests[0].mediaTypes.video.placement = 'string';
418
+ bidRequests[0].mediaTypes.video.api = 1;
419
+ const bidderRequestCopy = utils.deepClone(bidderRequest);
420
+ bidderRequestCopy.bids = bidRequests;
421
+
422
+ utilsMock.expects('logWarn').twice();
423
+
424
+ spec.buildRequests(bidRequests, bidderRequestCopy);
425
+ });
426
+ });
427
+
164
428
  it('should get expected properties with values from params', function () {
165
429
  const bidRequests = [utils.deepClone(bid)];
166
430
  bidRequests[0].params = {
@@ -265,13 +529,25 @@ describe('mediakeysBidAdapter', function () {
265
529
  expect(data.imp[0].bidfloor).to.not.exist;
266
530
  });
267
531
 
268
- it('should get and set floor by mediatype', function() {
532
+ it('should get the highest floorPrice found when bid have several mediaTypes', function() {
269
533
  const bidWithPriceFloors = utils.deepClone(bid);
270
534
 
271
535
  bidWithPriceFloors.mediaTypes.video = {
272
536
  playerSize: [600, 480]
273
537
  };
274
538
 
539
+ bidWithPriceFloors.mediaTypes.native = {
540
+ body: {
541
+ required: true
542
+ }
543
+ };
544
+
545
+ bidWithPriceFloors.nativeParams = {
546
+ body: {
547
+ required: true
548
+ }
549
+ };
550
+
275
551
  bidWithPriceFloors.getFloor = getFloorTest;
276
552
 
277
553
  const bidRequests = [bidWithPriceFloors];
@@ -279,10 +555,9 @@ describe('mediakeysBidAdapter', function () {
279
555
  const data = request.data;
280
556
 
281
557
  expect(data.imp[0].banner).to.exist;
282
- expect(data.imp[0].bidfloor).to.equal(1);
283
-
284
- // expect(data.imp[1].video).to.exist;
285
- // expect(data.imp[1].bidfloor).to.equal(5);
558
+ expect(data.imp[0].video).to.exist;
559
+ expect(data.imp[0].native).to.exist;
560
+ expect(data.imp[0].bidfloor).to.equal(5);
286
561
  });
287
562
 
288
563
  it('should set properties at payload level from FPD', function() {
@@ -420,8 +695,8 @@ describe('mediakeysBidAdapter', function () {
420
695
  const bidRequests = [utils.deepClone(bid)];
421
696
  const request = spec.buildRequests(bidRequests, bidderRequest);
422
697
  sinon.stub(utils, 'isArray').throws();
423
- spec.interpretResponse(rawServerResponse, request);
424
698
  utilsMock.expects('logError').once();
699
+ spec.interpretResponse(rawServerResponse, request);
425
700
  utils.isArray.restore();
426
701
  });
427
702
 
@@ -483,28 +758,108 @@ describe('mediakeysBidAdapter', function () {
483
758
  });
484
759
  });
485
760
 
486
- it('Build video response', function () {
487
- const bidRequests = [utils.deepClone(bid)];
761
+ it('interprets video bid response', function () {
762
+ const vastUrl = 'https://url.local?req=content';
763
+ const bidRequests = [utils.deepClone(bidVideo)];
488
764
  const request = spec.buildRequests(bidRequests, bidderRequest);
765
+
489
766
  const rawServerResponseVideo = utils.deepClone(rawServerResponse);
490
767
  rawServerResponseVideo.body.seatbid[0].bid[0].ext.prebid.type = 'V';
768
+ rawServerResponseVideo.body.seatbid[0].bid[0].ext.vast_url = vastUrl;
769
+
491
770
  const response = spec.interpretResponse(rawServerResponseVideo, request);
492
771
 
493
772
  expect(response.length).to.equal(1);
494
773
  expect(response[0].mediaType).to.equal('video');
495
774
  expect(response[0].meta.mediaType).to.equal('video');
775
+ expect(response[0].vastXml).to.not.exist;
776
+ expect(response[0].vastUrl).to.equal(vastUrl + '&no_cache');
777
+ expect(response[0].videoCacheKey).to.equal('no_cache');
496
778
  });
497
779
 
498
- it('Build native response', function () {
499
- const bidRequests = [utils.deepClone(bid)];
500
- const request = spec.buildRequests(bidRequests, bidderRequest);
501
- const rawServerResponseVideo = utils.deepClone(rawServerResponse);
502
- rawServerResponseVideo.body.seatbid[0].bid[0].ext.prebid.type = 'N';
503
- const response = spec.interpretResponse(rawServerResponseVideo, request);
780
+ describe('Native response', function () {
781
+ let bidRequests;
782
+ let bidderRequestCopy;
783
+ let request;
784
+ let rawServerResponseNative;
785
+ let nativeObject;
786
+
787
+ beforeEach(function() {
788
+ bidRequests = [utils.deepClone(bidNative)];
789
+ bidderRequestCopy = utils.deepClone(bidderRequest);
790
+ bidderRequestCopy.bids = bidRequests;
791
+
792
+ request = spec.buildRequests(bidRequests, bidderRequestCopy);
793
+
794
+ nativeObject = {
795
+ ver: '1.2',
796
+ privacy: 'https://privacy.me',
797
+ assets: [
798
+ { id: 5, data: { type: 1, value: 'Sponsor Brand' } },
799
+ { id: 6, data: { type: 2, value: 'Brand Body' } },
800
+ { id: 14, data: { type: 10, value: 'Brand Body 2' } },
801
+ { id: 1, title: { text: 'Brand Title' } },
802
+ { id: 2, img: { type: 3, url: 'https://url.com/img.jpg', w: 300, h: 250 } },
803
+ { id: 3, img: { type: 1, url: 'https://url.com/ico.png', w: 50, h: 50 } },
804
+ ],
805
+ link: {
806
+ url: 'https://brand.me',
807
+ clicktrackers: [
808
+ 'https://click.me'
809
+ ]
810
+ },
811
+ eventtrackers: [
812
+ { event: 1, method: 1, url: 'https://click.me' },
813
+ { event: 1, method: 2, url: 'https://click-script.me' }
814
+ ]
815
+ };
504
816
 
505
- expect(response.length).to.equal(1);
506
- expect(response[0].mediaType).to.equal('native');
507
- expect(response[0].meta.mediaType).to.equal('native');
817
+ rawServerResponseNative = utils.deepClone(rawServerResponse);
818
+ rawServerResponseNative.body.seatbid[0].bid[0].ext.prebid.type = 'N';
819
+ rawServerResponseNative.body.seatbid[0].bid[0].adm = JSON.stringify(nativeObject)
820
+ });
821
+
822
+ it('should ignore invalid native response', function() {
823
+ const nativeObjectCopy = utils.deepClone(nativeObject);
824
+ nativeObjectCopy.assets = [];
825
+ const rawServerResponseNativeCopy = utils.deepClone(rawServerResponseNative);
826
+ rawServerResponseNativeCopy.body.seatbid[0].bid[0].adm = JSON.stringify(nativeObjectCopy)
827
+ const response = spec.interpretResponse(rawServerResponseNativeCopy, request);
828
+ expect(response.length).to.equal(1);
829
+ expect(response[0].native).to.not.exist;
830
+ });
831
+
832
+ it('should build a classic Prebid.js native object for response', function() {
833
+ const rawServerResponseNativeCopy = utils.deepClone(rawServerResponseNative);
834
+ const response = spec.interpretResponse(rawServerResponseNativeCopy, request);
835
+ expect(response.length).to.equal(1);
836
+ expect(response[0].mediaType).to.equal('native');
837
+ expect(response[0].meta.mediaType).to.equal('native');
838
+ expect(response[0].native).to.exist;
839
+ expect(response[0].native.body).to.exist;
840
+ expect(response[0].native.privacyLink).to.exist;
841
+ expect(response[0].native.body2).to.exist;
842
+ expect(response[0].native.sponsoredBy).to.exist;
843
+ expect(response[0].native.image).to.exist;
844
+ expect(response[0].native.icon).to.exist;
845
+ expect(response[0].native.title).to.exist;
846
+ expect(response[0].native.clickUrl).to.exist;
847
+ expect(response[0].native.clickTrackers).to.exist;
848
+ expect(response[0].native.clickTrackers.length).to.equal(1);
849
+ expect(response[0].native.javascriptTrackers).to.equal('<script src="https://click-script.me"></script>');
850
+ expect(response[0].native.impressionTrackers).to.exist;
851
+ expect(response[0].native.impressionTrackers.length).to.equal(1);
852
+ });
853
+
854
+ it('should ignore eventtrackers with a unsupported type', function() {
855
+ const rawServerResponseNativeCopy = utils.deepClone(rawServerResponseNative);
856
+ const nativeObjectCopy = utils.deepClone(nativeObject);
857
+ nativeObjectCopy.eventtrackers[0].event = 2;
858
+ rawServerResponseNativeCopy.body.seatbid[0].bid[0].adm = JSON.stringify(nativeObjectCopy);
859
+ const response = spec.interpretResponse(rawServerResponseNativeCopy, request);
860
+ expect(response[0].native.impressionTrackers).to.exist;
861
+ expect(response[0].native.impressionTrackers.length).to.equal(0);
862
+ })
508
863
  });
509
864
  });
510
865