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
@@ -1,17 +1,72 @@
1
+ import find from 'core-js-pure/features/array/find.js';
2
+ import arrayFrom from 'core-js-pure/features/array/from';
3
+ import { getWindowTop, isFn, logWarn, getDNT, deepAccess, isArray, inIframe, mergeDeep, isStr, isEmpty, deepSetValue, deepClone, parseUrl, cleanObj, logError, triggerPixel, isInteger, isNumber } from '../src/utils.js';
1
4
  import { registerBidder } from '../src/adapters/bidderFactory.js';
2
5
  import { config } from '../src/config.js';
3
6
  import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
4
- import * as utils from '../src/utils.js';
5
7
  import { createEidsArray } from './userId/eids.js';
6
8
 
7
9
  const AUCTION_TYPE = 1;
8
10
  const BIDDER_CODE = 'mediakeys';
9
11
  const ENDPOINT = 'https://prebid.eu-central-1.bidder.mediakeys.io/bids';
10
12
  const GVLID = 498;
11
- const SUPPORTED_MEDIA_TYPES = [BANNER];
13
+ const SUPPORTED_MEDIA_TYPES = [BANNER, NATIVE, VIDEO];
12
14
  const DEFAULT_CURRENCY = 'USD';
13
15
  const NET_REVENUE = true;
14
16
 
17
+ const NATIVE_ASSETS_MAPPING = [
18
+ { name: 'title', id: 1, type: 0 },
19
+ { name: 'image', id: 2, type: 3 },
20
+ { name: 'icon', id: 3, type: 1 },
21
+ { name: 'sponsoredBy', id: 5, type: 1 },
22
+ { name: 'body', id: 6, type: 2 },
23
+ { name: 'rating', id: 7, type: 3 },
24
+ { name: 'likes', id: 8, type: 4 },
25
+ { name: 'downloads', id: 9, type: 5 },
26
+ { name: 'price', id: 10, type: 6 },
27
+ { name: 'salePrice', id: 11, type: 7 },
28
+ { name: 'phone', id: 12, type: 8 },
29
+ { name: 'address', id: 13, type: 9 },
30
+ { name: 'body2', id: 14, type: 10 },
31
+ { name: 'displayUrl', id: 15, type: 11 },
32
+ { name: 'cta', id: 16, type: 12 },
33
+ ];
34
+
35
+ // This provide a whitelist and a basic validation of OpenRTB native 1.2 options.
36
+ // https://www.iab.com/wp-content/uploads/2018/03/OpenRTB-Native-Ads-Specification-Final-1.2.pdf
37
+ const ORTB_NATIVE_PARAMS = {
38
+ context: value => [1, 2, 3].indexOf(value) !== -1,
39
+ plcmttype: value => [1, 2, 3, 4].indexOf(value) !== -1
40
+ };
41
+
42
+ // This provide a whitelist and a basic validation of OpenRTB 2.5 video options.
43
+ // https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf
44
+ const ORTB_VIDEO_PARAMS = {
45
+ mimes: value => Array.isArray(value) && value.length > 0 && value.every(v => typeof v === 'string'),
46
+ minduration: value => isInteger(value),
47
+ maxduration: value => isInteger(value),
48
+ protocols: value => Array.isArray(value) && value.every(v => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].indexOf(v) !== -1),
49
+ w: value => isInteger(value),
50
+ h: value => isInteger(value),
51
+ startdelay: value => isInteger(value),
52
+ placement: value => [1, 2, 3, 4, 5].indexOf(value) !== -1,
53
+ linearity: value => [1, 2].indexOf(value) !== -1,
54
+ skip: value => [0, 1].indexOf(value) !== -1,
55
+ skipmin: value => isInteger(value),
56
+ skipafter: value => isInteger(value),
57
+ sequence: value => isInteger(value),
58
+ battr: value => Array.isArray(value) && value.every(v => arrayFrom({length: 17}, (_, i) => i + 1).indexOf(v) !== -1),
59
+ maxextended: value => isInteger(value),
60
+ minbitrate: value => isInteger(value),
61
+ maxbitrate: value => isInteger(value),
62
+ boxingallowed: value => [0, 1].indexOf(value) !== -1,
63
+ playbackmethod: value => Array.isArray(value) && value.every(v => [1, 2, 3, 4, 5, 6].indexOf(v) !== -1),
64
+ playbackend: value => [1, 2, 3].indexOf(value) !== -1,
65
+ delivery: value => [1, 2, 3].indexOf(value) !== -1,
66
+ pos: value => [0, 1, 2, 3, 4, 5, 6, 7].indexOf(value) !== -1,
67
+ api: value => Array.isArray(value) && value.every(v => [1, 2, 3, 4, 5, 6].indexOf(v) !== -1),
68
+ };
69
+
15
70
  /**
16
71
  * Detects the capability to reach window.top.
17
72
  *
@@ -19,7 +74,7 @@ const NET_REVENUE = true;
19
74
  */
20
75
  function canAccessTopWindow() {
21
76
  try {
22
- return !!utils.getWindowTop().location.href;
77
+ return !!getWindowTop().location.href;
23
78
  } catch (error) {
24
79
  return false;
25
80
  }
@@ -65,12 +120,12 @@ function getOS() {
65
120
  * @returns {number|boolean}
66
121
  */
67
122
  function getFloor(bid, mediaType, size = '*') {
68
- if (!utils.isFn(bid.getFloor)) {
123
+ if (!isFn(bid.getFloor)) {
69
124
  return false;
70
125
  }
71
126
 
72
127
  if (SUPPORTED_MEDIA_TYPES.indexOf(mediaType) === -1) {
73
- utils.logWarn(`${BIDDER_CODE}: Unable to detect floor price for unsupported mediaType ${mediaType}. No floor will be used.`);
128
+ logWarn(`${BIDDER_CODE}: Unable to detect floor price for unsupported mediaType ${mediaType}. No floor will be used.`);
74
129
  return false;
75
130
  }
76
131
 
@@ -83,6 +138,33 @@ function getFloor(bid, mediaType, size = '*') {
83
138
  return (!isNaN(floor.floor) && floor.currency === DEFAULT_CURRENCY) ? floor.floor : false
84
139
  }
85
140
 
141
+ /**
142
+ * Returns the highest floor price found when a bid have
143
+ * several mediaTypes.
144
+ *
145
+ * @param {*} bid a Prebid.js bid (request) object
146
+ * @returns {number|boolean}
147
+ */
148
+ function getHighestFloor(bid) {
149
+ const floors = [];
150
+
151
+ for (let mediaType in bid.mediaTypes) {
152
+ const floor = getFloor(bid, mediaType);
153
+
154
+ if (isNumber(floor)) {
155
+ floors.push(floor);
156
+ }
157
+ }
158
+
159
+ if (!floors.length) {
160
+ return false;
161
+ }
162
+
163
+ return floors.reduce((a, b) => {
164
+ return Math.max(a, b);
165
+ });
166
+ }
167
+
86
168
  /**
87
169
  * Returns an openRTB 2.5 object.
88
170
  * This one will be populated at each step of the buildRequest process.
@@ -99,7 +181,7 @@ function createOrtbTemplate() {
99
181
  device: {
100
182
  ip: '',
101
183
  js: 1,
102
- dnt: utils.getDNT(),
184
+ dnt: getDNT(),
103
185
  ua: navigator.userAgent,
104
186
  devicetype: getDeviceType(),
105
187
  os: getOS(),
@@ -128,10 +210,10 @@ function createOrtbTemplate() {
128
210
  */
129
211
  function createBannerImp(bid) {
130
212
  let sizes = bid.mediaTypes.banner.sizes;
131
- const params = utils.deepAccess(bid, 'params', {});
213
+ const params = deepAccess(bid, 'params', {});
132
214
 
133
- if (!utils.isArray(sizes) || !sizes.length) {
134
- utils.logWarn(`${BIDDER_CODE}: mediaTypes.banner.size missing for adunit: ${bid.params.adUnit}. Ignoring the banner impression in the adunit.`);
215
+ if (!isArray(sizes) || !sizes.length) {
216
+ logWarn(`${BIDDER_CODE}: mediaTypes.banner.size missing for adunit: ${bid.params.adUnit}. Ignoring the banner impression in the adunit.`);
135
217
  } else {
136
218
  const banner = {};
137
219
 
@@ -146,13 +228,197 @@ function createBannerImp(bid) {
146
228
  });
147
229
  banner.format = format;
148
230
 
149
- banner.topframe = utils.inIframe() ? 0 : 1;
231
+ banner.topframe = inIframe() ? 0 : 1;
150
232
  banner.pos = params.pos || 0;
151
233
 
152
234
  return banner;
153
235
  }
154
236
  }
155
237
 
238
+ /**
239
+ * Returns an openRtb 2.5 native object with a native 1.2 request.
240
+ *
241
+ * @param {object} bid Prebid bid object from request
242
+ * @returns {object}
243
+ */
244
+ function createNativeImp(bid) {
245
+ if (!bid.nativeParams) {
246
+ logWarn(`${BIDDER_CODE}: bid.nativeParams object has not been found.`);
247
+ return
248
+ }
249
+
250
+ const nativeParams = deepClone(bid.nativeParams);
251
+
252
+ const nativeAdUnitParams = deepAccess(bid, 'mediaTypes.native', {});
253
+ const nativeBidderParams = deepAccess(bid, 'params.native', {});
254
+
255
+ const extraParams = {
256
+ ...nativeAdUnitParams,
257
+ ...nativeBidderParams
258
+ };
259
+
260
+ const nativeObject = {
261
+ ver: '1.2',
262
+ context: 1, // overwrited later if needed
263
+ plcmttype: 1, // overwrited later if needed
264
+ assets: []
265
+ }
266
+
267
+ Object.keys(ORTB_NATIVE_PARAMS).forEach(name => {
268
+ if (extraParams.hasOwnProperty(name)) {
269
+ if (ORTB_NATIVE_PARAMS[name](extraParams[name])) {
270
+ nativeObject[name] = extraParams[name];
271
+ } else {
272
+ logWarn(`${BIDDER_CODE}: the OpenRTB native param ${name} has been skipped due to misformating. Please refer to OpenRTB Native spec.`);
273
+ }
274
+ }
275
+ });
276
+
277
+ // just a helper function
278
+ const setImageAssetSizes = function(asset, param) {
279
+ if (param.sizes && param.sizes.length) {
280
+ asset.img.w = param.sizes ? param.sizes[0] : undefined;
281
+ asset.img.h = param.sizes ? param.sizes[1] : undefined;
282
+ }
283
+
284
+ if (!asset.img.w) {
285
+ asset.img.wmin = 0;
286
+ }
287
+
288
+ if (!asset.img.h) {
289
+ asset.img.hmin = 0;
290
+ }
291
+ }
292
+
293
+ // Prebid.js "image" type support.
294
+ // Add some defaults to support special type provided by Prebid.js `mediaTypes.native.type: "image"`
295
+ const nativeImageType = deepAccess(bid, 'mediaTypes.native.type');
296
+ if (nativeImageType === 'image') {
297
+ // Default value is ones of the recommended by the spec: https://www.iab.com/wp-content/uploads/2018/03/OpenRTB-Native-Ads-Specification-Final-1.2.pdf
298
+ nativeParams.title.len = 90;
299
+ }
300
+
301
+ for (let key in nativeParams) {
302
+ if (nativeParams.hasOwnProperty(key)) {
303
+ const internalNativeAsset = find(NATIVE_ASSETS_MAPPING, ref => ref.name === key);
304
+ if (!internalNativeAsset) {
305
+ logWarn(`${BIDDER_CODE}: the asset "${key}" has not been found in Prebid assets map. Skipped for request.`);
306
+ continue;
307
+ }
308
+
309
+ const param = nativeParams[key];
310
+
311
+ const asset = {
312
+ id: internalNativeAsset.id,
313
+ required: param.required ? 1 : 0
314
+ }
315
+
316
+ switch (key) {
317
+ case 'title':
318
+ if (param.len || param.length) {
319
+ asset.title = {
320
+ len: param.len || param.length,
321
+ ext: param.ext
322
+ }
323
+ } else {
324
+ logWarn(`${BIDDER_CODE}: "title.length" property for native asset is required. Skipped for request.`)
325
+ continue;
326
+ }
327
+ break;
328
+
329
+ case 'image':
330
+ asset.img = {
331
+ type: internalNativeAsset.type,
332
+ mimes: param.mimes,
333
+ ext: param.ext,
334
+ }
335
+
336
+ setImageAssetSizes(asset, param);
337
+
338
+ break;
339
+ case 'icon':
340
+ asset.img = {
341
+ type: internalNativeAsset.type,
342
+ mimes: param.mimes,
343
+ ext: param.ext,
344
+ }
345
+
346
+ setImageAssetSizes(asset, param);
347
+ break;
348
+
349
+ case 'sponsoredBy': // sponsored
350
+ case 'body': // desc
351
+ case 'rating':
352
+ case 'likes':
353
+ case 'downloads':
354
+ case 'price':
355
+ case 'salePrice':
356
+ case 'phone':
357
+ case 'address':
358
+ case 'body2': // desc2
359
+ case 'displayUrl':
360
+ case 'cta':
361
+ // generic asset.data
362
+ asset.data = {
363
+ type: internalNativeAsset.type,
364
+ len: param.len,
365
+ ext: param.ext
366
+ }
367
+ break;
368
+ }
369
+
370
+ nativeObject.assets.push(asset);
371
+ }
372
+ }
373
+
374
+ if (nativeObject.assets.length) {
375
+ return {
376
+ request: nativeObject
377
+ }
378
+ }
379
+ }
380
+
381
+ /**
382
+ * Returns an openRtb 2.5 video object.
383
+ *
384
+ * @param {object} bid Prebid bid object from request
385
+ * @returns {object}
386
+ */
387
+ function createVideoImp(bid) {
388
+ const videoAdUnitParams = deepAccess(bid, 'mediaTypes.video', {});
389
+ const videoBidderParams = deepAccess(bid, 'params.video', {});
390
+ const computedParams = {};
391
+
392
+ // Special case for playerSize.
393
+ // Eeach props will be overrided if they are defined in config.
394
+ if (Array.isArray(videoAdUnitParams.playerSize)) {
395
+ const tempSize = (Array.isArray(videoAdUnitParams.playerSize[0])) ? videoAdUnitParams.playerSize[0] : videoAdUnitParams.playerSize;
396
+ computedParams.w = tempSize[0];
397
+ computedParams.h = tempSize[1];
398
+ }
399
+
400
+ const videoParams = {
401
+ ...computedParams,
402
+ ...videoAdUnitParams,
403
+ ...videoBidderParams
404
+ };
405
+
406
+ const video = {};
407
+
408
+ // Only whitelisted OpenRTB options need to be validated.
409
+ Object.keys(ORTB_VIDEO_PARAMS).forEach(name => {
410
+ if (videoParams.hasOwnProperty(name)) {
411
+ if (ORTB_VIDEO_PARAMS[name](videoParams[name])) {
412
+ video[name] = videoParams[name];
413
+ } else {
414
+ logWarn(`${BIDDER_CODE}: the OpenRTB video param ${name} has been skipped due to misformating. Please refer to OpenRTB 2.5 spec.`);
415
+ }
416
+ }
417
+ });
418
+
419
+ return video
420
+ }
421
+
156
422
  /**
157
423
  * Create the OpenRTB 2.5 imp object.
158
424
  *
@@ -167,28 +433,42 @@ function createImp(bid) {
167
433
  secure: 1,
168
434
  };
169
435
 
436
+ // There is no default floor. bidfloor is set only
437
+ // if the priceFloors module is activated and returns a valid floor.
438
+ const floor = getHighestFloor(bid);
439
+ if (isNumber(floor)) {
440
+ imp.bidfloor = floor;
441
+ }
442
+
170
443
  // Only supports proper mediaTypes definition…
171
444
  for (let mediaType in bid.mediaTypes) {
172
- // There is no default floor. bidfloor is set only
173
- // if the priceFloors module is activated and returns a valid floor.
174
- const floor = getFloor(bid, mediaType);
175
- if (floor) {
176
- imp.bidfloor = floor;
177
- }
178
-
179
- if (mediaType === BANNER) {
180
- const banner = createBannerImp(bid);
181
- if (banner) {
182
- imp.banner = banner;
183
- }
445
+ switch (mediaType) {
446
+ case BANNER:
447
+ const banner = createBannerImp(bid);
448
+ if (banner) {
449
+ imp.banner = banner;
450
+ }
451
+ break;
452
+ case NATIVE:
453
+ const native = createNativeImp(bid);
454
+ if (native) {
455
+ imp.native = native;
456
+ }
457
+ break;
458
+ case VIDEO:
459
+ const video = createVideoImp(bid);
460
+ if (video) {
461
+ imp.video = video;
462
+ }
463
+ break;
184
464
  }
185
465
  }
186
466
 
187
467
  // handle FPD for imp.
188
- const ortb2Imp = utils.deepAccess(bid, 'ortb2Imp.ext.data');
468
+ const ortb2Imp = deepAccess(bid, 'ortb2Imp.ext.data');
189
469
  if (ortb2Imp) {
190
470
  const fpd = { ...bid.ortb2Imp };
191
- utils.mergeDeep(imp, fpd);
471
+ mergeDeep(imp, fpd);
192
472
  }
193
473
 
194
474
  return imp;
@@ -202,17 +482,105 @@ function createImp(bid) {
202
482
  * @returns {string|null}
203
483
  */
204
484
  function getPrimaryCatFromResponse(cat) {
205
- if (!cat || (utils.isArray(cat) && !cat.length)) {
485
+ if (!cat || (isArray(cat) && !cat.length)) {
206
486
  return;
207
487
  }
208
488
 
209
- if (utils.isArray(cat)) {
489
+ if (isArray(cat)) {
210
490
  return cat[0];
211
- } else if (utils.isStr(cat)) {
491
+ } else if (isStr(cat)) {
212
492
  return cat;
213
493
  }
214
494
  }
215
495
 
496
+ /**
497
+ * Create the Prebid.js native object from response.
498
+ *
499
+ * @param {*} bid bid object from response
500
+ * @returns {object} Prebid.js native object used in response
501
+ */
502
+ function nativeBidResponseHandler(bid) {
503
+ const nativeAdm = JSON.parse(bid.adm);
504
+ if (!nativeAdm || !nativeAdm.assets.length) {
505
+ logError(`${BIDDER_CODE}: invalid native response.`);
506
+ return;
507
+ }
508
+
509
+ const native = {}
510
+
511
+ nativeAdm.assets.forEach(asset => {
512
+ if (asset.title) {
513
+ native.title = asset.title.text;
514
+ return;
515
+ }
516
+
517
+ if (asset.img) {
518
+ switch (asset.img.type) {
519
+ case 1:
520
+ native.icon = {
521
+ url: asset.img.url,
522
+ width: asset.img.w,
523
+ height: asset.img.h
524
+ };
525
+ break;
526
+ default:
527
+ native.image = {
528
+ url: asset.img.url,
529
+ width: asset.img.w,
530
+ height: asset.img.h
531
+ };
532
+ break;
533
+ }
534
+ return;
535
+ }
536
+
537
+ if (asset.data) {
538
+ const internalNativeAsset = find(NATIVE_ASSETS_MAPPING, ref => ref.id === asset.id);
539
+ if (internalNativeAsset) {
540
+ native[internalNativeAsset.name] = asset.data.value;
541
+ }
542
+ }
543
+ });
544
+
545
+ if (nativeAdm.link) {
546
+ if (nativeAdm.link.url) {
547
+ native.clickUrl = nativeAdm.link.url;
548
+ }
549
+ if (Array.isArray(nativeAdm.link.clicktrackers)) {
550
+ native.clickTrackers = nativeAdm.link.clicktrackers
551
+ }
552
+ }
553
+
554
+ if (Array.isArray(nativeAdm.eventtrackers)) {
555
+ native.impressionTrackers = [];
556
+ nativeAdm.eventtrackers.forEach(tracker => {
557
+ // Only Impression events are supported. Prebid does not support Viewability events yet.
558
+ if (tracker.event !== 1) {
559
+ return;
560
+ }
561
+
562
+ // methods:
563
+ // 1: image
564
+ // 2: js
565
+ // note: javascriptTrackers is a string. If there's more than one JS tracker in bid response, the last script will be used.
566
+ switch (tracker.method) {
567
+ case 1:
568
+ native.impressionTrackers.push(tracker.url);
569
+ break;
570
+ case 2:
571
+ native.javascriptTrackers = `<script src=\"${tracker.url}\"></script>`;
572
+ break;
573
+ }
574
+ });
575
+ }
576
+
577
+ if (nativeAdm.privacy) {
578
+ native.privacyLink = nativeAdm.privacy;
579
+ }
580
+
581
+ return native;
582
+ }
583
+
216
584
  export const spec = {
217
585
  code: BIDDER_CODE,
218
586
 
@@ -221,7 +589,7 @@ export const spec = {
221
589
  supportedMediaTypes: SUPPORTED_MEDIA_TYPES,
222
590
 
223
591
  isBidRequestValid: function(bid) {
224
- return !!(bid && !utils.isEmpty(bid));
592
+ return !!(bid && !isEmpty(bid));
225
593
  },
226
594
 
227
595
  buildRequests: function(validBidRequests, bidderRequest) {
@@ -229,11 +597,11 @@ export const spec = {
229
597
 
230
598
  // Pass the auctionId as ortb2 id
231
599
  // See https://github.com/prebid/Prebid.js/issues/6563
232
- utils.deepSetValue(payload, 'id', bidderRequest.auctionId);
233
- utils.deepSetValue(payload, 'source.tid', bidderRequest.auctionId);
600
+ deepSetValue(payload, 'id', bidderRequest.auctionId);
601
+ deepSetValue(payload, 'source.tid', bidderRequest.auctionId);
234
602
 
235
603
  validBidRequests.forEach(validBid => {
236
- let bid = utils.deepClone(validBid);
604
+ let bid = deepClone(validBid);
237
605
 
238
606
  // No additional params atm.
239
607
  const imp = createImp(bid);
@@ -242,37 +610,37 @@ export const spec = {
242
610
  });
243
611
 
244
612
  if (validBidRequests[0].schain) {
245
- utils.deepSetValue(payload, 'source.ext.schain', validBidRequests[0].schain);
613
+ deepSetValue(payload, 'source.ext.schain', validBidRequests[0].schain);
246
614
  }
247
615
 
248
616
  if (bidderRequest && bidderRequest.gdprConsent) {
249
- utils.deepSetValue(payload, 'user.ext.consent', bidderRequest.gdprConsent.consentString);
250
- utils.deepSetValue(payload, 'regs.ext.gdpr', (bidderRequest.gdprConsent.gdprApplies ? 1 : 0));
617
+ deepSetValue(payload, 'user.ext.consent', bidderRequest.gdprConsent.consentString);
618
+ deepSetValue(payload, 'regs.ext.gdpr', (bidderRequest.gdprConsent.gdprApplies ? 1 : 0));
251
619
  }
252
620
 
253
621
  if (bidderRequest && bidderRequest.uspConsent) {
254
- utils.deepSetValue(payload, 'regs.ext.us_privacy', bidderRequest.uspConsent);
622
+ deepSetValue(payload, 'regs.ext.us_privacy', bidderRequest.uspConsent);
255
623
  }
256
624
 
257
625
  if (config.getConfig('coppa') === true) {
258
- utils.deepSetValue(payload, 'regs.coppa', 1);
626
+ deepSetValue(payload, 'regs.coppa', 1);
259
627
  }
260
628
 
261
- if (utils.deepAccess(validBidRequests[0], 'userId')) {
262
- utils.deepSetValue(payload, 'user.ext.eids', createEidsArray(validBidRequests[0].userId));
629
+ if (deepAccess(validBidRequests[0], 'userId')) {
630
+ deepSetValue(payload, 'user.ext.eids', createEidsArray(validBidRequests[0].userId));
263
631
  }
264
632
 
265
633
  // Assign payload.site from refererinfo
266
634
  if (bidderRequest.refererInfo) {
267
635
  if (bidderRequest.refererInfo.reachedTop) {
268
636
  const sitePage = bidderRequest.refererInfo.referer;
269
- utils.deepSetValue(payload, 'site.page', sitePage);
270
- utils.deepSetValue(payload, 'site.domain', utils.parseUrl(sitePage, {
637
+ deepSetValue(payload, 'site.page', sitePage);
638
+ deepSetValue(payload, 'site.domain', parseUrl(sitePage, {
271
639
  noDecodeWholeURL: true
272
640
  }).hostname);
273
641
 
274
642
  if (canAccessTopWindow()) {
275
- utils.deepSetValue(payload, 'site.ref', utils.getWindowTop().document.referrer);
643
+ deepSetValue(payload, 'site.ref', getWindowTop().document.referrer);
276
644
  }
277
645
  }
278
646
  }
@@ -280,15 +648,15 @@ export const spec = {
280
648
  // Handle First Party Data (need publisher fpd setup)
281
649
  const fpd = config.getConfig('ortb2') || {};
282
650
  if (fpd.site) {
283
- utils.mergeDeep(payload, { site: fpd.site });
651
+ mergeDeep(payload, { site: fpd.site });
284
652
  }
285
653
  if (fpd.user) {
286
- utils.mergeDeep(payload, { user: fpd.user });
654
+ mergeDeep(payload, { user: fpd.user });
287
655
  }
288
656
  // Here we can handle device.geo prop
289
- const deviceGeo = utils.deepAccess(fpd, 'device.geo');
657
+ const deviceGeo = deepAccess(fpd, 'device.geo');
290
658
  if (deviceGeo) {
291
- utils.mergeDeep(payload.device, { geo: deviceGeo });
659
+ mergeDeep(payload.device, { geo: deviceGeo });
292
660
  }
293
661
 
294
662
  const request = {
@@ -307,19 +675,19 @@ export const spec = {
307
675
  const bidResponses = [];
308
676
 
309
677
  try {
310
- if (serverResponse.body && serverResponse.body.seatbid && utils.isArray(serverResponse.body.seatbid)) {
678
+ if (serverResponse.body && serverResponse.body.seatbid && isArray(serverResponse.body.seatbid)) {
311
679
  const currency = serverResponse.body.cur || DEFAULT_CURRENCY;
312
680
  const referrer = bidRequest.site && bidRequest.site.ref ? bidRequest.site.ref : '';
313
681
 
314
682
  serverResponse.body.seatbid.forEach(bidderSeat => {
315
- if (!utils.isArray(bidderSeat.bid) || !bidderSeat.bid.length) {
683
+ if (!isArray(bidderSeat.bid) || !bidderSeat.bid.length) {
316
684
  return;
317
685
  }
318
686
 
319
687
  bidderSeat.bid.forEach(bid => {
320
688
  let mediaType;
321
689
  // Actually only BANNER is supported, but other types will be added soon.
322
- switch (utils.deepAccess(bid, 'ext.prebid.type')) {
690
+ switch (deepAccess(bid, 'ext.prebid.type')) {
323
691
  case 'V':
324
692
  mediaType = VIDEO;
325
693
  break;
@@ -332,8 +700,8 @@ export const spec = {
332
700
 
333
701
  const meta = {
334
702
  advertiserDomains: (Array.isArray(bid.adomain) && bid.adomain.length) ? bid.adomain : [],
335
- advertiserName: utils.deepAccess(bid, 'ext.advertiser_name', null),
336
- agencyName: utils.deepAccess(bid, 'ext.agency_name', null),
703
+ advertiserName: deepAccess(bid, 'ext.advertiser_name', null),
704
+ agencyName: deepAccess(bid, 'ext.agency_name', null),
337
705
  primaryCatId: getPrimaryCatFromResponse(bid.cat),
338
706
  mediaType
339
707
  }
@@ -352,15 +720,38 @@ export const spec = {
352
720
  ad: bid.adm,
353
721
  mediaType,
354
722
  burl: bid.burl,
355
- meta: utils.cleanObj(meta)
723
+ meta: cleanObj(meta)
356
724
  };
357
725
 
726
+ if (mediaType === NATIVE) {
727
+ const native = nativeBidResponseHandler(bid);
728
+ if (native) {
729
+ newBid.native = native;
730
+ }
731
+ }
732
+
733
+ if (mediaType === VIDEO) {
734
+ // Note:
735
+ // Mediakeys bid adapter expects a publisher has set his own video player
736
+ // in the `mediaTypes.video` configuration object.
737
+
738
+ // Mediakeys bidder does not provide inline XML in the bid response
739
+ // newBid.vastXml = bid.ext.vast_url;
740
+
741
+ // For instream video, disable server cache as vast is generated per bid request
742
+ newBid.videoCacheKey = 'no_cache';
743
+
744
+ // The vast URL is server independently and must be fetched before video rendering in the renderer
745
+ // appending '&no_cache' is safe and fast as the vast url always have parameters
746
+ newBid.vastUrl = bid.ext.vast_url + '&no_cache';
747
+ }
748
+
358
749
  bidResponses.push(newBid);
359
750
  });
360
751
  });
361
752
  }
362
753
  } catch (e) {
363
- utils.logError(BIDDER_CODE, e);
754
+ logError(BIDDER_CODE, e);
364
755
  }
365
756
 
366
757
  return bidResponses;
@@ -373,7 +764,7 @@ export const spec = {
373
764
 
374
765
  const url = bid.burl.replace(/\$\{AUCTION_PRICE\}/, bid.cpm);
375
766
 
376
- utils.triggerPixel(url);
767
+ triggerPixel(url);
377
768
  }
378
769
  }
379
770