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
@@ -168,8 +168,8 @@ const floorMinRequest = {
168
168
  'zoneId': '335918',
169
169
  'userId': '12346',
170
170
  'keywords': ['a', 'b', 'c'],
171
- 'inventory': {'rating': '4-star', 'prodtype': 'tech'},
172
- 'visitor': {'ucat': 'new', 'lastsearch': 'iphone'},
171
+ 'inventory': { 'rating': '4-star', 'prodtype': 'tech' },
172
+ 'visitor': { 'ucat': 'new', 'lastsearch': 'iphone' },
173
173
  'position': 'atf'
174
174
  },
175
175
  'mediaTypes': {
@@ -195,24 +195,24 @@ const MOCK = {
195
195
  'auctionId': '25c6d7f5-699a-4bfc-87c9-996f915341fa',
196
196
  'timestamp': 1519767010567,
197
197
  'auctionStatus': 'inProgress',
198
- 'adUnits': [ {
198
+ 'adUnits': [{
199
199
  'code': '/19968336/header-bid-tag1',
200
200
  'sizes': [[640, 480]],
201
- 'bids': [ {
201
+ 'bids': [{
202
202
  'bidder': 'rubicon',
203
203
  'params': {
204
204
  'accountId': 1001, 'siteId': 113932, 'zoneId': 535512
205
205
  }
206
- } ],
206
+ }],
207
207
  'transactionId': 'ca4af27a-6d02-4f90-949d-d5541fa12014'
208
208
  }
209
209
  ],
210
210
  'adUnitCodes': ['/19968336/header-bid-tag1'],
211
- 'bidderRequests': [ {
211
+ 'bidderRequests': [{
212
212
  'bidderCode': 'rubicon',
213
213
  'auctionId': '25c6d7f5-699a-4bfc-87c9-996f915341fa',
214
214
  'bidderRequestId': '1be65d7958826a',
215
- 'bids': [ {
215
+ 'bids': [{
216
216
  'bidder': 'rubicon',
217
217
  'params': {
218
218
  'accountId': 1001, 'siteId': 113932, 'zoneId': 535512
@@ -259,7 +259,7 @@ const MOCK = {
259
259
  'userId': '12346',
260
260
  'keywords': ['a', 'b', 'c'],
261
261
  'inventory': 'test',
262
- 'visitor': {'ucat': 'new', 'lastsearch': 'iphone'},
262
+ 'visitor': { 'ucat': 'new', 'lastsearch': 'iphone' },
263
263
  'position': 'btf',
264
264
  'video': {
265
265
  'language': 'en',
@@ -296,8 +296,8 @@ const MOCK = {
296
296
  'zoneId': '335918',
297
297
  'userId': '12346',
298
298
  'keywords': ['a', 'b', 'c'],
299
- 'inventory': {'rating': '4-star', 'prodtype': 'tech'},
300
- 'visitor': {'ucat': 'new', 'lastsearch': 'iphone'},
299
+ 'inventory': { 'rating': '4-star', 'prodtype': 'tech' },
300
+ 'visitor': { 'ucat': 'new', 'lastsearch': 'iphone' },
301
301
  'position': 'atf'
302
302
  },
303
303
  'mediaTypes': {
@@ -655,10 +655,10 @@ describe('rubicon analytics adapter', function () {
655
655
  expect(utils.logError.called).to.equal(true);
656
656
  });
657
657
 
658
- describe('config subscribe', function() {
658
+ describe('config subscribe', function () {
659
659
  it('should update the pvid if user asks', function () {
660
660
  expect(utils.generateUUID.called).to.equal(false);
661
- config.setConfig({rubicon: {updatePageView: true}});
661
+ config.setConfig({ rubicon: { updatePageView: true } });
662
662
  expect(utils.generateUUID.called).to.equal(true);
663
663
  });
664
664
  it('should merge in and preserve older set configs', function () {
@@ -859,7 +859,7 @@ describe('rubicon analytics adapter', function () {
859
859
  criteoId: 'sadfe4334',
860
860
  lotamePanoramaId: 'asdf3gf4eg',
861
861
  pubcid: 'dsfa4545-svgdfs5',
862
- sharedId: {id1: 'asdf', id2: 'sadf4344'}
862
+ sharedId: { id1: 'asdf', id2: 'sadf4344' }
863
863
  };
864
864
 
865
865
  events.emit(AUCTION_INIT, auctionInit);
@@ -881,10 +881,10 @@ describe('rubicon analytics adapter', function () {
881
881
 
882
882
  expect(message.auctions[0].user).to.deep.equal({
883
883
  ids: [
884
- {provider: 'criteoId', 'hasId': true},
885
- {provider: 'lotamePanoramaId', 'hasId': true},
886
- {provider: 'pubcid', 'hasId': true},
887
- {provider: 'sharedId', 'hasId': true},
884
+ { provider: 'criteoId', 'hasId': true },
885
+ { provider: 'lotamePanoramaId', 'hasId': true },
886
+ { provider: 'pubcid', 'hasId': true },
887
+ { provider: 'sharedId', 'hasId': true },
888
888
  ]
889
889
  });
890
890
  });
@@ -1206,7 +1206,7 @@ describe('rubicon analytics adapter', function () {
1206
1206
  describe('with session handling', function () {
1207
1207
  const expectedPvid = STUBBED_UUID.slice(0, 8);
1208
1208
  beforeEach(function () {
1209
- config.setConfig({rubicon: {updatePageView: true}});
1209
+ config.setConfig({ rubicon: { updatePageView: true } });
1210
1210
  });
1211
1211
 
1212
1212
  it('should not log any session data if local storage is not enabled', function () {
@@ -1230,12 +1230,14 @@ describe('rubicon analytics adapter', function () {
1230
1230
  });
1231
1231
 
1232
1232
  it('should should pass along custom rubicon kv and pvid when defined', function () {
1233
- config.setConfig({rubicon: {
1234
- fpkvs: {
1235
- source: 'fb',
1236
- link: 'email'
1233
+ config.setConfig({
1234
+ rubicon: {
1235
+ fpkvs: {
1236
+ source: 'fb',
1237
+ link: 'email'
1238
+ }
1237
1239
  }
1238
- }});
1240
+ });
1239
1241
  performStandardAuction();
1240
1242
  expect(server.requests.length).to.equal(1);
1241
1243
  let request = server.requests[0];
@@ -1245,22 +1247,24 @@ describe('rubicon analytics adapter', function () {
1245
1247
  let expectedMessage = utils.deepClone(ANALYTICS_MESSAGE);
1246
1248
  expectedMessage.session.pvid = STUBBED_UUID.slice(0, 8);
1247
1249
  expectedMessage.fpkvs = [
1248
- {key: 'source', value: 'fb'},
1249
- {key: 'link', value: 'email'}
1250
+ { key: 'source', value: 'fb' },
1251
+ { key: 'link', value: 'email' }
1250
1252
  ]
1251
1253
  expect(message).to.deep.equal(expectedMessage);
1252
1254
  });
1253
1255
 
1254
1256
  it('should convert kvs to strings before sending', function () {
1255
- config.setConfig({rubicon: {
1256
- fpkvs: {
1257
- number: 24,
1258
- boolean: false,
1259
- string: 'hello',
1260
- array: ['one', 2, 'three'],
1261
- object: {one: 'two'}
1257
+ config.setConfig({
1258
+ rubicon: {
1259
+ fpkvs: {
1260
+ number: 24,
1261
+ boolean: false,
1262
+ string: 'hello',
1263
+ array: ['one', 2, 'three'],
1264
+ object: { one: 'two' }
1265
+ }
1262
1266
  }
1263
- }});
1267
+ });
1264
1268
  performStandardAuction();
1265
1269
  expect(server.requests.length).to.equal(1);
1266
1270
  let request = server.requests[0];
@@ -1270,24 +1274,26 @@ describe('rubicon analytics adapter', function () {
1270
1274
  let expectedMessage = utils.deepClone(ANALYTICS_MESSAGE);
1271
1275
  expectedMessage.session.pvid = STUBBED_UUID.slice(0, 8);
1272
1276
  expectedMessage.fpkvs = [
1273
- {key: 'number', value: '24'},
1274
- {key: 'boolean', value: 'false'},
1275
- {key: 'string', value: 'hello'},
1276
- {key: 'array', value: 'one,2,three'},
1277
- {key: 'object', value: '[object Object]'}
1277
+ { key: 'number', value: '24' },
1278
+ { key: 'boolean', value: 'false' },
1279
+ { key: 'string', value: 'hello' },
1280
+ { key: 'array', value: 'one,2,three' },
1281
+ { key: 'object', value: '[object Object]' }
1278
1282
  ]
1279
1283
  expect(message).to.deep.equal(expectedMessage);
1280
1284
  });
1281
1285
 
1282
1286
  it('should use the query utm param rubicon kv value and pass updated kv and pvid when defined', function () {
1283
- sandbox.stub(utils, 'getWindowLocation').returns({'search': '?utm_source=other', 'pbjs_debug': 'true'});
1287
+ sandbox.stub(utils, 'getWindowLocation').returns({ 'search': '?utm_source=other', 'pbjs_debug': 'true' });
1284
1288
 
1285
- config.setConfig({rubicon: {
1286
- fpkvs: {
1287
- source: 'fb',
1288
- link: 'email'
1289
+ config.setConfig({
1290
+ rubicon: {
1291
+ fpkvs: {
1292
+ source: 'fb',
1293
+ link: 'email'
1294
+ }
1289
1295
  }
1290
- }});
1296
+ });
1291
1297
  performStandardAuction();
1292
1298
  expect(server.requests.length).to.equal(1);
1293
1299
  let request = server.requests[0];
@@ -1297,8 +1303,8 @@ describe('rubicon analytics adapter', function () {
1297
1303
  let expectedMessage = utils.deepClone(ANALYTICS_MESSAGE);
1298
1304
  expectedMessage.session.pvid = STUBBED_UUID.slice(0, 8);
1299
1305
  expectedMessage.fpkvs = [
1300
- {key: 'source', value: 'other'},
1301
- {key: 'link', value: 'email'}
1306
+ { key: 'source', value: 'other' },
1307
+ { key: 'link', value: 'email' }
1302
1308
  ]
1303
1309
 
1304
1310
  message.fpkvs.sort((left, right) => left.key < right.key);
@@ -1318,11 +1324,13 @@ describe('rubicon analytics adapter', function () {
1318
1324
  };
1319
1325
  getDataFromLocalStorageStub.withArgs('rpaSession').returns(btoa(JSON.stringify(inputlocalStorage)));
1320
1326
 
1321
- config.setConfig({rubicon: {
1322
- fpkvs: {
1323
- link: 'email' // should merge this with what is in the localStorage!
1327
+ config.setConfig({
1328
+ rubicon: {
1329
+ fpkvs: {
1330
+ link: 'email' // should merge this with what is in the localStorage!
1331
+ }
1324
1332
  }
1325
- }});
1333
+ });
1326
1334
  performStandardAuction();
1327
1335
  expect(server.requests.length).to.equal(1);
1328
1336
  let request = server.requests[0];
@@ -1337,8 +1345,8 @@ describe('rubicon analytics adapter', function () {
1337
1345
  pvid: expectedPvid
1338
1346
  }
1339
1347
  expectedMessage.fpkvs = [
1340
- {key: 'source', value: 'tw'},
1341
- {key: 'link', value: 'email'}
1348
+ { key: 'source', value: 'tw' },
1349
+ { key: 'link', value: 'email' }
1342
1350
  ]
1343
1351
  expect(message).to.deep.equal(expectedMessage);
1344
1352
 
@@ -1360,7 +1368,7 @@ describe('rubicon analytics adapter', function () {
1360
1368
  });
1361
1369
 
1362
1370
  it('should overwrite matching localstorge value and use its remaining values', function () {
1363
- sandbox.stub(utils, 'getWindowLocation').returns({'search': '?utm_source=fb&utm_click=dog'});
1371
+ sandbox.stub(utils, 'getWindowLocation').returns({ 'search': '?utm_source=fb&utm_click=dog' });
1364
1372
 
1365
1373
  // set some localStorage
1366
1374
  let inputlocalStorage = {
@@ -1372,11 +1380,13 @@ describe('rubicon analytics adapter', function () {
1372
1380
  };
1373
1381
  getDataFromLocalStorageStub.withArgs('rpaSession').returns(btoa(JSON.stringify(inputlocalStorage)));
1374
1382
 
1375
- config.setConfig({rubicon: {
1376
- fpkvs: {
1377
- link: 'email' // should merge this with what is in the localStorage!
1383
+ config.setConfig({
1384
+ rubicon: {
1385
+ fpkvs: {
1386
+ link: 'email' // should merge this with what is in the localStorage!
1387
+ }
1378
1388
  }
1379
- }});
1389
+ });
1380
1390
  performStandardAuction();
1381
1391
  expect(server.requests.length).to.equal(1);
1382
1392
  let request = server.requests[0];
@@ -1391,9 +1401,9 @@ describe('rubicon analytics adapter', function () {
1391
1401
  pvid: expectedPvid
1392
1402
  }
1393
1403
  expectedMessage.fpkvs = [
1394
- {key: 'source', value: 'fb'},
1395
- {key: 'link', value: 'email'},
1396
- {key: 'click', value: 'dog'}
1404
+ { key: 'source', value: 'fb' },
1405
+ { key: 'link', value: 'email' },
1406
+ { key: 'click', value: 'dog' }
1397
1407
  ]
1398
1408
 
1399
1409
  message.fpkvs.sort((left, right) => left.key < right.key);
@@ -1429,11 +1439,13 @@ describe('rubicon analytics adapter', function () {
1429
1439
  };
1430
1440
  getDataFromLocalStorageStub.withArgs('rpaSession').returns(btoa(JSON.stringify(inputlocalStorage)));
1431
1441
 
1432
- config.setConfig({rubicon: {
1433
- fpkvs: {
1434
- link: 'email' // should merge this with what is in the localStorage!
1442
+ config.setConfig({
1443
+ rubicon: {
1444
+ fpkvs: {
1445
+ link: 'email' // should merge this with what is in the localStorage!
1446
+ }
1435
1447
  }
1436
- }});
1448
+ });
1437
1449
 
1438
1450
  performStandardAuction();
1439
1451
  expect(server.requests.length).to.equal(1);
@@ -1447,7 +1459,7 @@ describe('rubicon analytics adapter', function () {
1447
1459
 
1448
1460
  // the saved fpkvs should have been thrown out since session expired
1449
1461
  expectedMessage.fpkvs = [
1450
- {key: 'link', value: 'email'}
1462
+ { key: 'link', value: 'email' }
1451
1463
  ]
1452
1464
  expect(message).to.deep.equal(expectedMessage);
1453
1465
 
@@ -1479,11 +1491,13 @@ describe('rubicon analytics adapter', function () {
1479
1491
  };
1480
1492
  getDataFromLocalStorageStub.withArgs('rpaSession').returns(btoa(JSON.stringify(inputlocalStorage)));
1481
1493
 
1482
- config.setConfig({rubicon: {
1483
- fpkvs: {
1484
- link: 'email' // should merge this with what is in the localStorage!
1494
+ config.setConfig({
1495
+ rubicon: {
1496
+ fpkvs: {
1497
+ link: 'email' // should merge this with what is in the localStorage!
1498
+ }
1485
1499
  }
1486
- }});
1500
+ });
1487
1501
 
1488
1502
  performStandardAuction();
1489
1503
  expect(server.requests.length).to.equal(1);
@@ -1497,7 +1511,7 @@ describe('rubicon analytics adapter', function () {
1497
1511
 
1498
1512
  // the saved fpkvs should have been thrown out since session expired
1499
1513
  expectedMessage.fpkvs = [
1500
- {key: 'link', value: 'email'}
1514
+ { key: 'link', value: 'email' }
1501
1515
  ]
1502
1516
  expect(message).to.deep.equal(expectedMessage);
1503
1517
 
@@ -1523,7 +1537,7 @@ describe('rubicon analytics adapter', function () {
1523
1537
  let gptSlotRenderEnded0, gptSlotRenderEnded1;
1524
1538
  beforeEach(function () {
1525
1539
  mockGpt.enable();
1526
- gptSlot0 = mockGpt.makeSlot({code: '/19968336/header-bid-tag-0'});
1540
+ gptSlot0 = mockGpt.makeSlot({ code: '/19968336/header-bid-tag-0' });
1527
1541
  gptSlotRenderEnded0 = {
1528
1542
  eventName: 'slotRenderEnded',
1529
1543
  params: {
@@ -1535,7 +1549,7 @@ describe('rubicon analytics adapter', function () {
1535
1549
  }
1536
1550
  };
1537
1551
 
1538
- gptSlot1 = mockGpt.makeSlot({code: '/19968336/header-bid-tag1'});
1552
+ gptSlot1 = mockGpt.makeSlot({ code: '/19968336/header-bid-tag1' });
1539
1553
  gptSlotRenderEnded1 = {
1540
1554
  eventName: 'slotRenderEnded',
1541
1555
  params: {
@@ -1971,6 +1985,7 @@ describe('rubicon analytics adapter', function () {
1971
1985
  let timedOutBid = message.auctions[0].adUnits[0].bids[0];
1972
1986
  expect(timedOutBid.status).to.equal('error');
1973
1987
  expect(timedOutBid.error.code).to.equal('timeout-error');
1988
+ expect(timedOutBid.error.description).to.equal('prebid.js timeout');
1974
1989
  expect(timedOutBid).to.not.have.property('bidResponse');
1975
1990
  });
1976
1991
 
@@ -2051,7 +2066,7 @@ describe('rubicon analytics adapter', function () {
2051
2066
 
2052
2067
  // Now add the bidResponse hook which hooks on the currenct conversion function onto the bid response
2053
2068
  let innerBid;
2054
- addBidResponseHook(function(adCodeId, bid) {
2069
+ addBidResponseHook(function (adCodeId, bid) {
2055
2070
  innerBid = bid;
2056
2071
  }, 'elementId', bidCopy);
2057
2072
 
@@ -2064,9 +2079,11 @@ describe('rubicon analytics adapter', function () {
2064
2079
 
2065
2080
  describe('config with integration type', () => {
2066
2081
  it('should use the integration type provided in the config instead of the default', () => {
2067
- config.setConfig({rubicon: {
2068
- int_type: 'testType'
2069
- }})
2082
+ config.setConfig({
2083
+ rubicon: {
2084
+ int_type: 'testType'
2085
+ }
2086
+ })
2070
2087
 
2071
2088
  rubiconAnalyticsAdapter.enableAnalytics({
2072
2089
  options: {
@@ -2088,11 +2105,13 @@ describe('rubicon analytics adapter', function () {
2088
2105
 
2089
2106
  describe('wrapper details passed in', () => {
2090
2107
  it('should correctly pass in the wrapper details if provided', () => {
2091
- config.setConfig({rubicon: {
2092
- wrapperName: '1001_wrapperName_exp.4',
2093
- wrapperFamily: '1001_wrapperName',
2094
- rule_name: 'na-mobile'
2095
- }});
2108
+ config.setConfig({
2109
+ rubicon: {
2110
+ wrapperName: '1001_wrapperName_exp.4',
2111
+ wrapperFamily: '1001_wrapperName',
2112
+ rule_name: 'na-mobile'
2113
+ }
2114
+ });
2096
2115
 
2097
2116
  rubiconAnalyticsAdapter.enableAnalytics({
2098
2117
  options: {
@@ -263,7 +263,9 @@
263
263
  },
264
264
  "isSlotEmpty": {
265
265
  "type": "boolean",
266
- "enum": [true]
266
+ "enum": [
267
+ true
268
+ ]
267
269
  }
268
270
  }
269
271
  },
@@ -369,6 +371,7 @@
369
371
  },
370
372
  "error": {
371
373
  "type": "object",
374
+ "additionalProperties": false,
372
375
  "required": [
373
376
  "code"
374
377
  ],
@@ -448,4 +451,4 @@
448
451
  }
449
452
  }
450
453
  }
451
- }
454
+ }
@@ -0,0 +1,186 @@
1
+ // jshint esversion: 6, es3: false, node: true
2
+ import {assert, expect} from 'chai';
3
+ import {spec} from 'modules/seedingAllianceBidAdapter.js';
4
+ import { NATIVE } from 'src/mediaTypes.js';
5
+ import { config } from 'src/config.js';
6
+
7
+ describe('SeedingAlliance adapter', function () {
8
+ let serverResponse, bidRequest, bidResponses;
9
+ let bid = {
10
+ 'bidder': 'seedingAlliance',
11
+ 'params': {
12
+ 'adUnitId': '1hq8'
13
+ }
14
+ };
15
+
16
+ describe('isBidRequestValid', function () {
17
+ it('should return true when required params found', function () {
18
+ assert(spec.isBidRequestValid(bid));
19
+ });
20
+
21
+ it('should return false when AdUnitId is not set', function () {
22
+ delete bid.params.adUnitId;
23
+ assert.isFalse(spec.isBidRequestValid(bid));
24
+ });
25
+ });
26
+
27
+ describe('buildRequests', function () {
28
+ it('should send request with correct structure', function () {
29
+ let validBidRequests = [{
30
+ bidId: 'bidId',
31
+ params: {}
32
+ }];
33
+
34
+ let request = spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } });
35
+
36
+ assert.equal(request.method, 'POST');
37
+ assert.ok(request.data);
38
+ });
39
+
40
+ it('should have default request structure', function () {
41
+ let keys = 'site,device,cur,imp,user,regs'.split(',');
42
+ let validBidRequests = [{
43
+ bidId: 'bidId',
44
+ params: {}
45
+ }];
46
+ let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
47
+ let data = Object.keys(request);
48
+
49
+ assert.deepEqual(keys, data);
50
+ });
51
+
52
+ it('Verify the auction ID', function () {
53
+ let validBidRequests = [{
54
+ bidId: 'bidId',
55
+ params: {},
56
+ auctionId: 'auctionId'
57
+ }];
58
+ let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' }, auctionId: validBidRequests[0].auctionId }).data);
59
+
60
+ assert.equal(request.id, validBidRequests[0].auctionId);
61
+ });
62
+
63
+ it('Verify the device', function () {
64
+ let validBidRequests = [{
65
+ bidId: 'bidId',
66
+ params: {}
67
+ }];
68
+ let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
69
+
70
+ assert.equal(request.device.ua, navigator.userAgent);
71
+ });
72
+
73
+ it('Verify native asset ids', function () {
74
+ let validBidRequests = [{
75
+ bidId: 'bidId',
76
+ params: {},
77
+ nativeParams: {
78
+ body: {
79
+ required: true,
80
+ len: 350
81
+ },
82
+ image: {
83
+ required: true
84
+ },
85
+ title: {
86
+ required: true
87
+ },
88
+ sponsoredBy: {
89
+ required: true
90
+ },
91
+ cta: {
92
+ required: true
93
+ },
94
+ icon: {
95
+ required: true
96
+ }
97
+ }
98
+ }];
99
+
100
+ let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0].native.request.assets;
101
+
102
+ assert.equal(assets[0].id, 1);
103
+ assert.equal(assets[1].id, 3);
104
+ assert.equal(assets[2].id, 0);
105
+ assert.equal(assets[3].id, 2);
106
+ assert.equal(assets[4].id, 4);
107
+ assert.equal(assets[5].id, 5);
108
+ });
109
+ });
110
+
111
+ describe('interpretResponse', function () {
112
+ const goodResponse = {
113
+ body: {
114
+ cur: 'EUR',
115
+ id: '4b516b80-886e-4ec0-82ae-9209e6d625fb',
116
+ seatbid: [
117
+ {
118
+ seat: 'seedingAlliance',
119
+ bid: [{
120
+ adm: {
121
+ native: {
122
+ assets: [
123
+ {id: 0, title: {text: 'this is a title'}}
124
+ ],
125
+ imptrackers: ['https://domain.for/imp/tracker?price=${AUCTION_PRICE}'],
126
+ link: {
127
+ clicktrackers: ['https://domain.for/imp/tracker?price=${AUCTION_PRICE}'],
128
+ url: 'https://domain.for/ad/'
129
+ }
130
+ }
131
+ },
132
+ impid: 1,
133
+ price: 0.55
134
+ }]
135
+ }
136
+ ]
137
+ }
138
+ };
139
+ const badResponse = { body: {
140
+ cur: 'EUR',
141
+ id: '4b516b80-886e-4ec0-82ae-9209e6d625fb',
142
+ seatbid: []
143
+ }};
144
+
145
+ const bidRequest = {
146
+ data: {},
147
+ bids: [{ bidId: 'bidId1' }]
148
+ };
149
+
150
+ it('should return null if body is missing or empty', function () {
151
+ const result = spec.interpretResponse(badResponse, bidRequest);
152
+ assert.equal(result.length, 0);
153
+
154
+ delete badResponse.body
155
+
156
+ const result1 = spec.interpretResponse(badResponse, bidRequest);
157
+ assert.equal(result.length, 0);
158
+ });
159
+
160
+ it('should return the correct params', function () {
161
+ const result = spec.interpretResponse(goodResponse, bidRequest);
162
+ const bid = goodResponse.body.seatbid[0].bid[0];
163
+
164
+ assert.deepEqual(result[0].currency, goodResponse.body.cur);
165
+ assert.deepEqual(result[0].requestId, bidRequest.bids[0].bidId);
166
+ assert.deepEqual(result[0].cpm, bid.price);
167
+ assert.deepEqual(result[0].creativeId, bid.crid);
168
+ assert.deepEqual(result[0].mediaType, 'native');
169
+ assert.deepEqual(result[0].bidderCode, 'seedingAlliance');
170
+ });
171
+
172
+ it('should return the correct tracking links', function () {
173
+ const result = spec.interpretResponse(goodResponse, bidRequest);
174
+ const bid = goodResponse.body.seatbid[0].bid[0];
175
+ const regExpPrice = new RegExp('price=' + bid.price);
176
+
177
+ result[0].native.clickTrackers.forEach(function (clickTracker) {
178
+ assert.ok(clickTracker.search(regExpPrice) > -1);
179
+ });
180
+
181
+ result[0].native.impressionTrackers.forEach(function (impTracker) {
182
+ assert.ok(impTracker.search(regExpPrice) > -1);
183
+ });
184
+ });
185
+ });
186
+ });