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
@@ -3,7 +3,10 @@ import find from 'core-js-pure/features/array/find';
3
3
  import { config } from '../src/config.js';
4
4
  import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
5
5
  import { getStorageManager } from '../src/storageManager.js';
6
- import * as utils from '../src/utils.js';
6
+ import {
7
+ isPlainObject, deepSetValue, deepAccess, logWarn, inIframe, isNumber, logError, isArray, uniques,
8
+ flatten, triggerPixel, isStr, isEmptyStr, generateUUID
9
+ } from '../src/utils.js';
7
10
  import { registerBidder } from '../src/adapters/bidderFactory.js';
8
11
 
9
12
  /**
@@ -150,7 +153,7 @@ function buildDevice() {
150
153
 
151
154
  const deviceConfig = common.getConfig('device');
152
155
 
153
- if (utils.isPlainObject(deviceConfig)) {
156
+ if (isPlainObject(deviceConfig)) {
154
157
  return { ...device, ...deviceConfig };
155
158
  }
156
159
 
@@ -163,12 +166,12 @@ function buildRegs(bidderRequest) {
163
166
  };
164
167
 
165
168
  if (bidderRequest.gdprConsent) {
166
- utils.deepSetValue(
169
+ deepSetValue(
167
170
  regs,
168
171
  'ext.gdpr',
169
172
  bidderRequest.gdprConsent.gdprApplies ? 1 : 0
170
173
  );
171
- utils.deepSetValue(
174
+ deepSetValue(
172
175
  regs,
173
176
  'ext.gdprConsentString',
174
177
  bidderRequest.gdprConsent.consentString || ''
@@ -176,7 +179,7 @@ function buildRegs(bidderRequest) {
176
179
  }
177
180
 
178
181
  if (bidderRequest.uspConsent) {
179
- utils.deepSetValue(regs, 'ext.us_privacy', bidderRequest.uspConsent);
182
+ deepSetValue(regs, 'ext.us_privacy', bidderRequest.uspConsent);
180
183
  }
181
184
 
182
185
  return regs;
@@ -187,10 +190,10 @@ function buildSource(bidRequests, bidderRequest) {
187
190
  fd: 1,
188
191
  tid: bidderRequest.auctionId,
189
192
  };
190
- const schain = utils.deepAccess(bidRequests, '0.schain');
193
+ const schain = deepAccess(bidRequests, '0.schain');
191
194
 
192
195
  if (schain) {
193
- utils.deepSetValue(source, 'ext.schain', schain);
196
+ deepSetValue(source, 'ext.schain', schain);
194
197
  }
195
198
 
196
199
  return source;
@@ -232,7 +235,7 @@ function buildMediaTypeObject(mediaType, bidRequest) {
232
235
  case VIDEO:
233
236
  return buildVideoObject(bidRequest);
234
237
  default:
235
- utils.logWarn(`${BIDDER_CODE}: Unsupported media type ${mediaType}!`);
238
+ logWarn(`${BIDDER_CODE}: Unsupported media type ${mediaType}!`);
236
239
  }
237
240
  }
238
241
 
@@ -246,7 +249,7 @@ function buildBannerObject(bidRequest) {
246
249
 
247
250
  return {
248
251
  pos: 0,
249
- topframe: utils.inIframe() ? 0 : 1,
252
+ topframe: inIframe() ? 0 : 1,
250
253
  format,
251
254
  w,
252
255
  h,
@@ -261,8 +264,8 @@ function buildVideoObject(bidRequest) {
261
264
  };
262
265
 
263
266
  for (const param of VIDEO_PARAMS) {
264
- const paramsValue = utils.deepAccess(bidRequest, `params.video.${param}`);
265
- const mediaTypeValue = utils.deepAccess(
267
+ const paramsValue = deepAccess(bidRequest, `params.video.${param}`);
268
+ const mediaTypeValue = deepAccess(
266
269
  bidRequest,
267
270
  `mediaTypes.video.${param}`
268
271
  );
@@ -276,10 +279,10 @@ function buildVideoObject(bidRequest) {
276
279
  }
277
280
 
278
281
  function getVideoSize(bidRequest) {
279
- const playerSize = utils.deepAccess(bidRequest, 'mediaTypes.video.playerSize', [[]]);
280
- const { w, h } = utils.deepAccess(bidRequest, 'mediaTypes.video', {});
282
+ const playerSize = deepAccess(bidRequest, 'mediaTypes.video.playerSize', [[]]);
283
+ const { w, h } = deepAccess(bidRequest, 'mediaTypes.video', {});
281
284
 
282
- if (utils.isNumber(w) && utils.isNumber(h)) {
285
+ if (isNumber(w) && isNumber(h)) {
283
286
  return { w, h };
284
287
  }
285
288
 
@@ -296,11 +299,11 @@ function buildImpExt(validBidRequest) {
296
299
  const ext = {};
297
300
 
298
301
  if (placementId) {
299
- utils.deepSetValue(ext, 'adbook.placementId', placementId);
302
+ deepSetValue(ext, 'adbook.placementId', placementId);
300
303
  }
301
304
 
302
305
  if (effectiverOrgId) {
303
- utils.deepSetValue(ext, 'adbook.orgId', effectiverOrgId);
306
+ deepSetValue(ext, 'adbook.orgId', effectiverOrgId);
304
307
  }
305
308
 
306
309
  return ext;
@@ -314,20 +317,19 @@ function interpretResponse(bidResponse, bidderRequest) {
314
317
  const bidderRequestBody = safeJSONparse(bidderRequest.data);
315
318
 
316
319
  if (
317
- utils.deepAccess(bidderRequestBody, 'id') !=
318
- utils.deepAccess(bidResponse, 'body.id')
320
+ deepAccess(bidderRequestBody, 'id') !=
321
+ deepAccess(bidResponse, 'body.id')
319
322
  ) {
320
- utils.logError(
323
+ logError(
321
324
  `${BIDDER_CODE}: Bid response id does not match bidder request id`
322
325
  );
323
326
 
324
327
  return [];
325
328
  }
326
329
 
327
- const referrer = utils.deepAccess(bidderRequestBody, 'site.ref', '');
328
- const incomingBids = utils
329
- .deepAccess(bidResponse, 'body.seatbid', [])
330
- .filter((seat) => utils.isArray(seat.bid))
330
+ const referrer = deepAccess(bidderRequestBody, 'site.ref', '');
331
+ const incomingBids = deepAccess(bidResponse, 'body.seatbid', [])
332
+ .filter((seat) => isArray(seat.bid))
331
333
  .reduce((bids, seat) => bids.concat(seat.bid), [])
332
334
  .filter(validateBid(bidderRequestBody));
333
335
  const targetingMap = buildTargetingMap(incomingBids);
@@ -366,11 +368,11 @@ const impToPrebidBid =
366
368
  const bidRequest = findBidRequest(bidderRequestBody, bid);
367
369
 
368
370
  if (!bidRequest) {
369
- utils.logError(`${BIDDER_CODE}: Could not match bid to bid request`);
371
+ logError(`${BIDDER_CODE}: Could not match bid to bid request`);
370
372
 
371
373
  return null;
372
374
  }
373
- const categories = utils.deepAccess(bid, 'cat', []);
375
+ const categories = deepAccess(bid, 'cat', []);
374
376
  const mediaType = getMediaType(bid.adm);
375
377
  let prebidBid = {
376
378
  ad: bid.adm,
@@ -383,7 +385,7 @@ const impToPrebidBid =
383
385
  creativeId: bid.crid || bid.id,
384
386
  currency: bidResponseCurrency || getBidderConfig('defaultCurrency'),
385
387
  height: bid.h,
386
- lineItemId: utils.deepAccess(bid, 'ext.liid'),
388
+ lineItemId: deepAccess(bid, 'ext.liid'),
387
389
  mediaType,
388
390
  meta: {
389
391
  advertiserDomains: bid.adomain,
@@ -408,7 +410,7 @@ const impToPrebidBid =
408
410
 
409
411
  return prebidBid;
410
412
  } catch (error) {
411
- utils.logError(`${BIDDER_CODE}: Error while building bid`, error);
413
+ logError(`${BIDDER_CODE}: Error while building bid`, error);
412
414
 
413
415
  return null;
414
416
  }
@@ -423,7 +425,7 @@ function getVideoSpecificParams(bidRequest, bid) {
423
425
  }
424
426
 
425
427
  function buildTargetingMap(bids) {
426
- const impIds = bids.map(({ impid }) => impid).filter(utils.uniques);
428
+ const impIds = bids.map(({ impid }) => impid).filter(uniques);
427
429
  const values = impIds.reduce((result, id) => {
428
430
  result[id] = {
429
431
  lineItemIds: [],
@@ -459,12 +461,12 @@ function buildTargetingMap(bids) {
459
461
 
460
462
  function hasRequiredParams(bidRequest) {
461
463
  const value =
462
- utils.deepAccess(bidRequest, 'params.placementId') != null ||
463
- utils.deepAccess(bidRequest, 'params.orgId') != null ||
464
+ deepAccess(bidRequest, 'params.placementId') != null ||
465
+ deepAccess(bidRequest, 'params.orgId') != null ||
464
466
  getBidderConfig('orgId') != null;
465
467
 
466
468
  if (!value) {
467
- utils.logError(`${BIDDER_CODE}: missing orgId and placementId parameter`);
469
+ logError(`${BIDDER_CODE}: missing orgId and placementId parameter`);
468
470
  }
469
471
 
470
472
  return value;
@@ -472,7 +474,7 @@ function hasRequiredParams(bidRequest) {
472
474
 
473
475
  function isValidBannerRequest(bidRequest) {
474
476
  const value = validateSizes(
475
- utils.deepAccess(bidRequest, 'mediaTypes.banner.sizes', [])
477
+ deepAccess(bidRequest, 'mediaTypes.banner.sizes', [])
476
478
  );
477
479
 
478
480
  return value;
@@ -480,28 +482,28 @@ function isValidBannerRequest(bidRequest) {
480
482
 
481
483
  function isValidVideoRequest(bidRequest) {
482
484
  const value =
483
- utils.isArray(utils.deepAccess(bidRequest, 'mediaTypes.video.mimes')) &&
485
+ isArray(deepAccess(bidRequest, 'mediaTypes.video.mimes')) &&
484
486
  validateVideoSizes(bidRequest);
485
487
 
486
488
  return value;
487
489
  }
488
490
 
489
491
  function validateSize(size) {
490
- return utils.isArray(size) && size.length === 2 && size.every(utils.isNumber);
492
+ return isArray(size) && size.length === 2 && size.every(isNumber);
491
493
  }
492
494
 
493
495
  function validateSizes(sizes) {
494
- return utils.isArray(sizes) && sizes.length > 0 && sizes.every(validateSize);
496
+ return isArray(sizes) && sizes.length > 0 && sizes.every(validateSize);
495
497
  }
496
498
 
497
499
  function validateVideoSizes(bidRequest) {
498
- const { w, h } = utils.deepAccess(bidRequest, 'mediaTypes.video', {});
500
+ const { w, h } = deepAccess(bidRequest, 'mediaTypes.video', {});
499
501
 
500
502
  return (
501
503
  validateSizes(
502
- utils.deepAccess(bidRequest, 'mediaTypes.video.playerSize')
504
+ deepAccess(bidRequest, 'mediaTypes.video.playerSize')
503
505
  ) ||
504
- (utils.isNumber(w) && utils.isNumber(h))
506
+ (isNumber(w) && isNumber(h))
505
507
  );
506
508
  }
507
509
 
@@ -518,7 +520,7 @@ function validateBid(bidderRequestBody) {
518
520
  const value = validators.every((validator) => validator(bid, bidRequest));
519
521
 
520
522
  if (!value) {
521
- utils.logWarn(`${BIDDER_CODE}: Invalid bid`, bid);
523
+ logWarn(`${BIDDER_CODE}: Invalid bid`, bid);
522
524
  }
523
525
 
524
526
  return value;
@@ -526,13 +528,13 @@ function validateBid(bidderRequestBody) {
526
528
  }
527
529
 
528
530
  const commonBidValidators = [
529
- (bid) => utils.isPlainObject(bid),
531
+ (bid) => isPlainObject(bid),
530
532
  (bid) => isNonEmptyStr(bid.adid),
531
533
  (bid) => isNonEmptyStr(bid.adm),
532
534
  (bid) => isNonEmptyStr(bid.id),
533
535
  (bid) => isNonEmptyStr(bid.impid),
534
- (bid) => isNonEmptyStr(utils.deepAccess(bid, 'ext.liid')),
535
- (bid) => utils.isNumber(bid.price),
536
+ (bid) => isNonEmptyStr(deepAccess(bid, 'ext.liid')),
537
+ (bid) => isNumber(bid.price),
536
538
  ];
537
539
 
538
540
  const bannerBidValidators = [
@@ -546,12 +548,12 @@ function validateBannerDimension(dimension) {
546
548
  return bannerHasSingleSize(bidRequest);
547
549
  }
548
550
 
549
- return utils.isNumber(bid[dimension]);
551
+ return isNumber(bid[dimension]);
550
552
  };
551
553
  }
552
554
 
553
555
  function bannerHasSingleSize(bidRequest) {
554
- return utils.deepAccess(bidRequest, 'banner.format', []).length === 1;
556
+ return deepAccess(bidRequest, 'banner.format', []).length === 1;
555
557
  }
556
558
 
557
559
  /**
@@ -562,9 +564,9 @@ export const storage = getStorageManager();
562
564
 
563
565
  function getUserSyncs(syncOptions, responses, gdprConsent, uspConsent) {
564
566
  return responses
565
- .map((response) => utils.deepAccess(response, 'body.ext.sync'))
566
- .filter(utils.isArray)
567
- .reduce(utils.flatten, [])
567
+ .map((response) => deepAccess(response, 'body.ext.sync'))
568
+ .filter(isArray)
569
+ .reduce(flatten, [])
568
570
  .filter(validateSync(syncOptions))
569
571
  .map(applyConsents(gdprConsent, uspConsent));
570
572
  }
@@ -644,11 +646,11 @@ function onBidWon(bid) {
644
646
  const wurl = buildWinUrl(bid);
645
647
 
646
648
  if (wurl !== null) {
647
- utils.triggerPixel(wurl);
649
+ triggerPixel(wurl);
648
650
  }
649
651
 
650
- if (utils.isStr(bid.nurl)) {
651
- utils.triggerPixel(bid.nurl);
652
+ if (isStr(bid.nurl)) {
653
+ triggerPixel(bid.nurl);
652
654
  }
653
655
  }
654
656
 
@@ -662,7 +664,7 @@ function buildWinUrl(bid) {
662
664
 
663
665
  return url.toString();
664
666
  } catch (_) {
665
- utils.logError(
667
+ logError(
666
668
  `${BIDDER_CODE}: Could not build win tracking URL with %s`,
667
669
  getBidderConfig('winTrackingUrl')
668
670
  );
@@ -686,7 +688,7 @@ function getMediaType(adm) {
686
688
 
687
689
  const markup = safeJSONparse(adm.replace(/\\/g, ''));
688
690
 
689
- if (markup && utils.isPlainObject(markup.native)) {
691
+ if (markup && isPlainObject(markup.native)) {
690
692
  return NATIVE;
691
693
  }
692
694
 
@@ -702,7 +704,7 @@ function safeJSONparse(...args) {
702
704
  }
703
705
 
704
706
  function isNonEmptyStr(value) {
705
- return utils.isStr(value) && !utils.isEmptyStr(value);
707
+ return isStr(value) && !isEmptyStr(value);
706
708
  }
707
709
 
708
710
  function findBidRequest(bidderRequest, bid) {
@@ -782,7 +784,7 @@ const getUrlBuilder = function (url) {
782
784
 
783
785
  export const common = {
784
786
  generateUUID: function () {
785
- return utils.generateUUID();
787
+ return generateUUID();
786
788
  },
787
789
  getConfig: function (property) {
788
790
  return config.getConfig(property);
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  NATIVE, BANNER, VIDEO
9
9
  } from '../src/mediaTypes.js';
10
- import * as utils from '../src/utils.js';
10
+ import { mergeDeep, _map, deepAccess, parseSizesInput, deepSetValue } from '../src/utils.js';
11
11
  import { config } from '../src/config.js';
12
12
  import { Renderer } from '../src/Renderer.js';
13
13
 
@@ -68,12 +68,12 @@ export const spec = {
68
68
  if (typeof getConfig('app') === 'object') {
69
69
  app = getConfig('app') || {};
70
70
  if (commonFpd.app) {
71
- utils.mergeDeep(app, commonFpd.app);
71
+ mergeDeep(app, commonFpd.app);
72
72
  }
73
73
  } else {
74
74
  site = getConfig('site') || {};
75
75
  if (commonFpd.site) {
76
- utils.mergeDeep(site, commonFpd.site);
76
+ mergeDeep(site, commonFpd.site);
77
77
  }
78
78
 
79
79
  if (!site.page) {
@@ -99,12 +99,20 @@ export const spec = {
99
99
  const imp = validBidRequests.map((bid, id) => {
100
100
  bid.netRevenue = pt;
101
101
 
102
+ const floorInfo = bid.getFloor ? bid.getFloor({
103
+ currency: currency || 'USD'
104
+ }) : {};
105
+ const bidfloor = floorInfo.floor;
106
+ const bidfloorcur = floorInfo.currency;
107
+
102
108
  const imp = {
103
109
  id: id + 1,
104
- tagid: bid.params.mid
110
+ tagid: bid.params.mid,
111
+ bidfloor,
112
+ bidfloorcur
105
113
  };
106
114
 
107
- const assets = utils._map(bid.nativeParams, (bidParams, key) => {
115
+ const assets = _map(bid.nativeParams, (bidParams, key) => {
108
116
  const props = NATIVE_PARAMS[key];
109
117
  const asset = {
110
118
  required: bidParams.required & 1,
@@ -150,10 +158,10 @@ export const spec = {
150
158
  return imp;
151
159
  }
152
160
 
153
- const bannerParams = utils.deepAccess(bid, 'mediaTypes.banner');
161
+ const bannerParams = deepAccess(bid, 'mediaTypes.banner');
154
162
 
155
163
  if (bannerParams && bannerParams.sizes) {
156
- const sizes = utils.parseSizesInput(bannerParams.sizes);
164
+ const sizes = parseSizesInput(bannerParams.sizes);
157
165
  const format = sizes.map(size => {
158
166
  const [ width, height ] = size.split('x');
159
167
  const w = parseInt(width, 10);
@@ -169,7 +177,7 @@ export const spec = {
169
177
  return imp;
170
178
  }
171
179
 
172
- const videoParams = utils.deepAccess(bid, 'mediaTypes.video');
180
+ const videoParams = deepAccess(bid, 'mediaTypes.video');
173
181
  if (videoParams) {
174
182
  imp.video = videoParams;
175
183
  bid.mediaType = VIDEO;
@@ -194,21 +202,21 @@ export const spec = {
194
202
  request.is_debug = !!test;
195
203
  request.test = 1;
196
204
  }
197
- if (utils.deepAccess(bidderRequest, 'gdprConsent.gdprApplies') !== undefined) {
198
- utils.deepSetValue(request, 'user.ext.consent', bidderRequest.gdprConsent.consentString);
199
- utils.deepSetValue(request, 'regs.ext.gdpr', bidderRequest.gdprConsent.gdprApplies & 1);
205
+ if (deepAccess(bidderRequest, 'gdprConsent.gdprApplies') !== undefined) {
206
+ deepSetValue(request, 'user.ext.consent', bidderRequest.gdprConsent.consentString);
207
+ deepSetValue(request, 'regs.ext.gdpr', bidderRequest.gdprConsent.gdprApplies & 1);
200
208
  }
201
209
 
202
210
  if (bidderRequest.uspConsent) {
203
- utils.deepSetValue(request, 'regs.ext.us_privacy', bidderRequest.uspConsent);
211
+ deepSetValue(request, 'regs.ext.us_privacy', bidderRequest.uspConsent);
204
212
  }
205
213
 
206
214
  if (eids) {
207
- utils.deepSetValue(request, 'user.ext.eids', eids);
215
+ deepSetValue(request, 'user.ext.eids', eids);
208
216
  }
209
217
 
210
218
  if (schain) {
211
- utils.deepSetValue(request, 'source.ext.schain', schain);
219
+ deepSetValue(request, 'source.ext.schain', schain);
212
220
  }
213
221
 
214
222
  return {
@@ -258,7 +266,7 @@ export const spec = {
258
266
  result[ bid.mediaType === VIDEO ? 'vastXml' : 'ad' ] = bidResponse.adm;
259
267
  }
260
268
 
261
- if (!bid.renderer && bid.mediaType === VIDEO && utils.deepAccess(bid, 'mediaTypes.video.context') === 'outstream') {
269
+ if (!bid.renderer && bid.mediaType === VIDEO && deepAccess(bid, 'mediaTypes.video.context') === 'outstream') {
262
270
  result.renderer = Renderer.install({id: bid.bidId, url: OUTSTREAM_RENDERER_URL, adUnitCode: bid.adUnitCode});
263
271
  result.renderer.setRender(renderer);
264
272
  }
@@ -292,7 +300,7 @@ function parseNative(bid) {
292
300
 
293
301
  function setOnAny(collection, key) {
294
302
  for (let i = 0, result; i < collection.length; i++) {
295
- result = utils.deepAccess(collection[i], key);
303
+ result = deepAccess(collection[i], key);
296
304
  if (result) {
297
305
  return result;
298
306
  }
@@ -1,4 +1,4 @@
1
- import * as utils from '../src/utils.js';
1
+ import {tryAppendQueryString, getBidIdParameter} from '../src/utils.js';
2
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
3
3
  import {BANNER, NATIVE} from '../src/mediaTypes.js';
4
4
  import {config} from '../src/config.js';
@@ -25,7 +25,7 @@ export const spec = {
25
25
  * @return ServerRequest Info describing the request to the server.
26
26
  */
27
27
  buildRequests: function (validBidRequests, bidderRequest) {
28
- const ADGENE_PREBID_VERSION = '1.1.0';
28
+ const ADGENE_PREBID_VERSION = '1.2.0';
29
29
  let serverRequests = [];
30
30
  for (let i = 0, len = validBidRequests.length; i < len; i++) {
31
31
  const validReq = validBidRequests[i];
@@ -33,23 +33,23 @@ export const spec = {
33
33
  const URL = 'https://d.socdm.com/adsv/v1';
34
34
  const url = validReq.params.debug ? DEBUG_URL : URL;
35
35
  let data = ``;
36
- data = utils.tryAppendQueryString(data, 'posall', 'SSPLOC');
37
- const id = utils.getBidIdParameter('id', validReq.params);
38
- data = utils.tryAppendQueryString(data, 'id', id);
39
- data = utils.tryAppendQueryString(data, 'sdktype', '0');
40
- data = utils.tryAppendQueryString(data, 'hb', 'true');
41
- data = utils.tryAppendQueryString(data, 't', 'json3');
42
- data = utils.tryAppendQueryString(data, 'transactionid', validReq.transactionId);
43
- data = utils.tryAppendQueryString(data, 'sizes', getSizes(validReq));
44
- data = utils.tryAppendQueryString(data, 'currency', getCurrencyType());
45
- data = utils.tryAppendQueryString(data, 'pbver', '$prebid.version$');
46
- data = utils.tryAppendQueryString(data, 'sdkname', 'prebidjs');
47
- data = utils.tryAppendQueryString(data, 'adapterver', ADGENE_PREBID_VERSION);
36
+ data = tryAppendQueryString(data, 'posall', 'SSPLOC');
37
+ const id = getBidIdParameter('id', validReq.params);
38
+ data = tryAppendQueryString(data, 'id', id);
39
+ data = tryAppendQueryString(data, 'sdktype', '0');
40
+ data = tryAppendQueryString(data, 'hb', 'true');
41
+ data = tryAppendQueryString(data, 't', 'json3');
42
+ data = tryAppendQueryString(data, 'transactionid', validReq.transactionId);
43
+ data = tryAppendQueryString(data, 'sizes', getSizes(validReq));
44
+ data = tryAppendQueryString(data, 'currency', getCurrencyType());
45
+ data = tryAppendQueryString(data, 'pbver', '$prebid.version$');
46
+ data = tryAppendQueryString(data, 'sdkname', 'prebidjs');
47
+ data = tryAppendQueryString(data, 'adapterver', ADGENE_PREBID_VERSION);
48
48
  // native以外にvideo等の対応が入った場合は要修正
49
49
  if (!validReq.mediaTypes || !validReq.mediaTypes.native) {
50
- data = utils.tryAppendQueryString(data, 'imark', '1');
50
+ data = tryAppendQueryString(data, 'imark', '1');
51
51
  }
52
- data = utils.tryAppendQueryString(data, 'tp', bidderRequest.refererInfo.referer);
52
+ data = tryAppendQueryString(data, 'tp', bidderRequest.refererInfo.referer);
53
53
  // remove the trailing "&"
54
54
  if (data.lastIndexOf('&') === data.length - 1) {
55
55
  data = data.substring(0, data.length - 1);
@@ -118,13 +118,25 @@ export const spec = {
118
118
  function createAd(body, bidRequest) {
119
119
  let ad = body.ad;
120
120
  if (body.vastxml && body.vastxml.length > 0) {
121
- ad = `<body><div id="apvad-${bidRequest.bidId}"></div>${createAPVTag()}${insertVASTMethod(bidRequest.bidId, body.vastxml)}</body>`;
121
+ if (isUpperBillboard(body)) {
122
+ const marginTop = bidRequest.params.marginTop ? bidRequest.params.marginTop : '0';
123
+ ad = `<body>${createADGBrowserMTag()}${insertVASTMethodForADGBrowserM(body.vastxml, marginTop)}</body>`;
124
+ } else {
125
+ ad = `<body><div id="apvad-${bidRequest.bidId}"></div>${createAPVTag()}${insertVASTMethodForAPV(bidRequest.bidId, body.vastxml)}</body>`;
126
+ }
122
127
  }
123
128
  ad = appendChildToBody(ad, body.beacon);
124
129
  if (removeWrapper(ad)) return removeWrapper(ad);
125
130
  return ad;
126
131
  }
127
132
 
133
+ function isUpperBillboard(body) {
134
+ if (body.location_params && body.location_params.option && body.location_params.option.ad_type) {
135
+ return body.location_params.option.ad_type === 'upper_billboard';
136
+ }
137
+ return false;
138
+ }
139
+
128
140
  function isNative(body) {
129
141
  if (!body) return false;
130
142
  return body.native_ad && body.native_ad.assets.length > 0;
@@ -190,7 +202,12 @@ function createAPVTag() {
190
202
  return apvScript.outerHTML;
191
203
  }
192
204
 
193
- function insertVASTMethod(targetId, vastXml) {
205
+ function createADGBrowserMTag() {
206
+ const ADGBrowserMURL = 'https://i.socdm.com/sdk/js/adg-browser-m.js';
207
+ return `<script type="text/javascript" src="${ADGBrowserMURL}"></script>`;
208
+ }
209
+
210
+ function insertVASTMethodForAPV(targetId, vastXml) {
194
211
  let apvVideoAdParam = {
195
212
  s: targetId
196
213
  };
@@ -200,6 +217,13 @@ function insertVASTMethod(targetId, vastXml) {
200
217
  return script.outerHTML;
201
218
  }
202
219
 
220
+ function insertVASTMethodForADGBrowserM(vastXml, marginTop) {
221
+ const script = document.createElement(`script`);
222
+ script.type = 'text/javascript';
223
+ script.innerHTML = `window.ADGBrowserM.init({vastXml: '${vastXml.replace(/\r?\n/g, '')}', marginTop: '${marginTop}'});`;
224
+ return script.outerHTML;
225
+ }
226
+
203
227
  /**
204
228
  *
205
229
  * @param ad
@@ -0,0 +1,105 @@
1
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
2
+ import includes from 'core-js-pure/features/array/includes.js';
3
+ import { BANNER } from '../src/mediaTypes.js';
4
+
5
+ const VERSION = '1.0';
6
+
7
+ export const spec = {
8
+ code: 'adhash',
9
+ url: 'https://bidder.adhash.org/rtb?version=' + VERSION + '&prebid=true',
10
+ supportedMediaTypes: [ BANNER ],
11
+
12
+ isBidRequestValid: (bid) => {
13
+ try {
14
+ const { publisherId, platformURL } = bid.params;
15
+ return (
16
+ includes(Object.keys(bid.mediaTypes), BANNER) &&
17
+ typeof publisherId === 'string' &&
18
+ publisherId.length === 42 &&
19
+ typeof platformURL === 'string' &&
20
+ platformURL.length >= 13
21
+ );
22
+ } catch (error) {
23
+ return false;
24
+ }
25
+ },
26
+
27
+ buildRequests: (validBidRequests, bidderRequest) => {
28
+ const { gdprConsent } = bidderRequest;
29
+ const { url } = spec;
30
+ const bidRequests = [];
31
+ let referrer = '';
32
+ if (bidderRequest && bidderRequest.refererInfo) {
33
+ referrer = bidderRequest.refererInfo.referer;
34
+ }
35
+ for (var i = 0; i < validBidRequests.length; i++) {
36
+ var index = Math.floor(Math.random() * validBidRequests[i].sizes.length);
37
+ var size = validBidRequests[i].sizes[index].join('x');
38
+ bidRequests.push({
39
+ method: 'POST',
40
+ url: url,
41
+ bidRequest: validBidRequests[i],
42
+ data: {
43
+ timezone: new Date().getTimezoneOffset() / 60,
44
+ location: referrer,
45
+ publisherId: validBidRequests[i].params.publisherId,
46
+ size: {
47
+ screenWidth: window.screen.width,
48
+ screenHeight: window.screen.height
49
+ },
50
+ navigator: {
51
+ platform: window.navigator.platform,
52
+ language: window.navigator.language,
53
+ userAgent: window.navigator.userAgent
54
+ },
55
+ creatives: [{
56
+ size: size,
57
+ position: validBidRequests[i].adUnitCode
58
+ }],
59
+ blockedCreatives: [],
60
+ currentTimestamp: new Date().getTime(),
61
+ recentAds: [],
62
+ GDPR: gdprConsent
63
+ },
64
+ options: {
65
+ withCredentials: false,
66
+ crossOrigin: true
67
+ },
68
+ });
69
+ }
70
+ return bidRequests;
71
+ },
72
+
73
+ interpretResponse: (serverResponse, request) => {
74
+ const responseBody = serverResponse ? serverResponse.body : {};
75
+
76
+ if (!responseBody.creatives || responseBody.creatives.length === 0) {
77
+ return [];
78
+ }
79
+
80
+ const publisherURL = JSON.stringify(request.bidRequest.params.platformURL);
81
+ const oneTimeId = request.bidRequest.adUnitCode + Math.random().toFixed(16).replace('0.', '.');
82
+ const bidderResponse = JSON.stringify({ responseText: JSON.stringify(responseBody) });
83
+ const requestData = JSON.stringify(request.data);
84
+
85
+ return [{
86
+ requestId: request.bidRequest.bidId,
87
+ cpm: responseBody.creatives[0].costEUR,
88
+ ad:
89
+ `<div id="${oneTimeId}"></div>
90
+ <script src="https://bidder.adhash.org/static/scripts/creative.min.js"></script>
91
+ <script>callAdvertiser(${bidderResponse},['${oneTimeId}'],${requestData},${publisherURL})</script>`,
92
+ width: request.bidRequest.sizes[0][0],
93
+ height: request.bidRequest.sizes[0][1],
94
+ creativeId: request.bidRequest.adUnitCode,
95
+ netRevenue: true,
96
+ currency: 'EUR',
97
+ ttl: 60,
98
+ meta: {
99
+ advertiserDomains: responseBody.advertiserDomains ? [responseBody.advertiserDomains] : []
100
+ }
101
+ }];
102
+ }
103
+ };
104
+
105
+ registerBidder(spec);
@@ -34,7 +34,7 @@ Please note that a number of AdHash functionalities are not supported in the Pre
34
34
  bidder: 'adhash',
35
35
  params: {
36
36
  publisherId: '0x1234567890123456789012345678901234567890',
37
- platformURL: 'https://adhash.org/p/struma/'
37
+ platformURL: 'https://adhash.org/p/example/'
38
38
  }
39
39
  }
40
40
  ]