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,5 +1,5 @@
1
1
  import {registerBidder} from '../src/adapters/bidderFactory.js';
2
- import * as utils from '../src/utils.js'
2
+ import { buildUrl } from '../src/utils.js'
3
3
  import {ajax} from '../src/ajax.js';
4
4
 
5
5
  const BIDDER_CODE = 'adpartner';
@@ -64,7 +64,7 @@ export const spec = {
64
64
  beaconParams.tag = beaconParams.tag.join(',');
65
65
  beaconParams.sizes = beaconParams.sizes.join(',');
66
66
 
67
- let adPartnerRequestUrl = utils.buildUrl({
67
+ let adPartnerRequestUrl = buildUrl({
68
68
  protocol: ENDPOINT_PROTOCOL,
69
69
  hostname: ENDPOINT_DOMAIN,
70
70
  pathname: ENDPOINT_PATH,
@@ -127,7 +127,7 @@ export const spec = {
127
127
 
128
128
  onBidWon: function(data) {
129
129
  data.winNotification.forEach(function(unitWon) {
130
- let adPartnerBidWonUrl = utils.buildUrl({
130
+ let adPartnerBidWonUrl = buildUrl({
131
131
  protocol: ENDPOINT_PROTOCOL,
132
132
  hostname: ENDPOINT_DOMAIN,
133
133
  pathname: unitWon.path
package/modules/adpod.js CHANGED
@@ -12,7 +12,10 @@
12
12
  * module that designed to support adpod video type ads. This import process allows this module to effectively act as a sub-module.
13
13
  */
14
14
 
15
- import * as utils from '../src/utils.js';
15
+ import {
16
+ generateUUID, deepAccess, logWarn, logInfo, isArrayOfNums, isArray, isNumber, logError, groupBy, compareOn,
17
+ isPlainObject
18
+ } from '../src/utils.js';
16
19
  import { addBidToAuction, doCallbacksIfTimedout, AUCTION_IN_PROGRESS, callPrebidCache, getPriceByGranularity, getPriceGranularity } from '../src/auction.js';
17
20
  import { checkAdUnitSetup } from '../src/prebid.js';
18
21
  import { checkVideoBidSetup } from '../src/video.js';
@@ -45,7 +48,7 @@ function createBidCacheRegistry() {
45
48
  registry[auctionId] = {};
46
49
  registry[auctionId].bidStorage = new Set();
47
50
  registry[auctionId].queueDispatcher = createDispatcher(queueTimeDelay);
48
- registry[auctionId].initialCacheKey = utils.generateUUID();
51
+ registry[auctionId].initialCacheKey = generateUUID();
49
52
  }
50
53
 
51
54
  return {
@@ -68,7 +71,7 @@ function createBidCacheRegistry() {
68
71
  setupInitialCacheKey: function (bid) {
69
72
  if (!registry[bid.auctionId]) {
70
73
  registry[bid.auctionId] = {};
71
- registry[bid.auctionId].initialCacheKey = utils.generateUUID();
74
+ registry[bid.auctionId].initialCacheKey = generateUUID();
72
75
  }
73
76
  },
74
77
  getInitialCacheKey: function (bid) {
@@ -115,9 +118,9 @@ function createDispatcher(timeoutDuration) {
115
118
  function getPricePartForAdpodKey(bid) {
116
119
  let pricePart
117
120
  let prioritizeDeals = config.getConfig('adpod.prioritizeDeals');
118
- if (prioritizeDeals && utils.deepAccess(bid, 'video.dealTier')) {
121
+ if (prioritizeDeals && deepAccess(bid, 'video.dealTier')) {
119
122
  const adpodDealPrefix = config.getConfig(`adpod.dealTier.${bid.bidderCode}.prefix`);
120
- pricePart = (adpodDealPrefix) ? adpodDealPrefix + utils.deepAccess(bid, 'video.dealTier') : utils.deepAccess(bid, 'video.dealTier');
123
+ pricePart = (adpodDealPrefix) ? adpodDealPrefix + deepAccess(bid, 'video.dealTier') : deepAccess(bid, 'video.dealTier');
121
124
  } else {
122
125
  const granularity = getPriceGranularity(bid.mediaType);
123
126
  pricePart = getPriceByGranularity(granularity)(bid);
@@ -132,12 +135,12 @@ function getPricePartForAdpodKey(bid) {
132
135
  */
133
136
  function attachPriceIndustryDurationKeyToBid(bid, brandCategoryExclusion) {
134
137
  let initialCacheKey = bidCacheRegistry.getInitialCacheKey(bid);
135
- let duration = utils.deepAccess(bid, 'video.durationBucket');
138
+ let duration = deepAccess(bid, 'video.durationBucket');
136
139
  const pricePart = getPricePartForAdpodKey(bid);
137
140
  let pcd;
138
141
 
139
142
  if (brandCategoryExclusion) {
140
- let category = utils.deepAccess(bid, 'meta.adServerCatId');
143
+ let category = deepAccess(bid, 'meta.adServerCatId');
141
144
  pcd = `${pricePart}_${category}_${duration}s`;
142
145
  } else {
143
146
  pcd = `${pricePart}_${duration}s`;
@@ -168,7 +171,7 @@ function updateBidQueue(auctionInstance, bidResponse, afterBidAdded) {
168
171
  let killQueue = !!(auctionInstance.getAuctionStatus() !== AUCTION_IN_PROGRESS);
169
172
  callDispatcher(auctionInstance, bidListArr, afterBidAdded, killQueue);
170
173
  } else {
171
- utils.logWarn('Attempted to cache a bid from an unknown auction. Bid:', bidResponse);
174
+ logWarn('Attempted to cache a bid from an unknown auction. Bid:', bidResponse);
172
175
  }
173
176
  }
174
177
 
@@ -196,7 +199,7 @@ function firePrebidCacheCall(auctionInstance, bidList, afterBidAdded) {
196
199
 
197
200
  store(bidList, function (error, cacheIds) {
198
201
  if (error) {
199
- utils.logWarn(`Failed to save to the video cache: ${error}. Video bid(s) must be discarded.`);
202
+ logWarn(`Failed to save to the video cache: ${error}. Video bid(s) must be discarded.`);
200
203
  for (let i = 0; i < bidList.length; i++) {
201
204
  doCallbacksIfTimedout(auctionInstance, bidList[i]);
202
205
  }
@@ -206,7 +209,7 @@ function firePrebidCacheCall(auctionInstance, bidList, afterBidAdded) {
206
209
  if (cacheIds[i].uuid !== '') {
207
210
  addBidToAuction(auctionInstance, bidList[i]);
208
211
  } else {
209
- utils.logInfo(`Detected a bid was not cached because the custom key was already registered. Attempted to use key: ${bidList[i].customCacheKey}. Bid was: `, bidList[i]);
212
+ logInfo(`Detected a bid was not cached because the custom key was already registered. Attempted to use key: ${bidList[i].customCacheKey}. Bid was: `, bidList[i]);
210
213
  }
211
214
  afterBidAdded();
212
215
  }
@@ -223,12 +226,12 @@ function firePrebidCacheCall(auctionInstance, bidList, afterBidAdded) {
223
226
  * @param {Object} bidderRequest copy of bid's associated bidderRequest object
224
227
  */
225
228
  export function callPrebidCacheHook(fn, auctionInstance, bidResponse, afterBidAdded, bidderRequest) {
226
- let videoConfig = utils.deepAccess(bidderRequest, 'mediaTypes.video');
229
+ let videoConfig = deepAccess(bidderRequest, 'mediaTypes.video');
227
230
  if (videoConfig && videoConfig.context === ADPOD) {
228
231
  let brandCategoryExclusion = config.getConfig('adpod.brandCategoryExclusion');
229
- let adServerCatId = utils.deepAccess(bidResponse, 'meta.adServerCatId');
232
+ let adServerCatId = deepAccess(bidResponse, 'meta.adServerCatId');
230
233
  if (!adServerCatId && brandCategoryExclusion) {
231
- utils.logWarn('Detected a bid without meta.adServerCatId while setConfig({adpod.brandCategoryExclusion}) was enabled. This bid has been rejected:', bidResponse)
234
+ logWarn('Detected a bid without meta.adServerCatId while setConfig({adpod.brandCategoryExclusion}) was enabled. This bid has been rejected:', bidResponse)
232
235
  afterBidAdded();
233
236
  } else {
234
237
  if (config.getConfig('adpod.deferCaching') === false) {
@@ -260,12 +263,12 @@ export function callPrebidCacheHook(fn, auctionInstance, bidResponse, afterBidAd
260
263
  */
261
264
  export function checkAdUnitSetupHook(fn, adUnits) {
262
265
  let goodAdUnits = adUnits.filter(adUnit => {
263
- let mediaTypes = utils.deepAccess(adUnit, 'mediaTypes');
264
- let videoConfig = utils.deepAccess(mediaTypes, 'video');
266
+ let mediaTypes = deepAccess(adUnit, 'mediaTypes');
267
+ let videoConfig = deepAccess(mediaTypes, 'video');
265
268
  if (videoConfig && videoConfig.context === ADPOD) {
266
269
  // run check to see if other mediaTypes are defined (ie multi-format); reject adUnit if so
267
270
  if (Object.keys(mediaTypes).length > 1) {
268
- utils.logWarn(`Detected more than one mediaType in adUnitCode: ${adUnit.code} while attempting to define an 'adpod' video adUnit. 'adpod' adUnits cannot be mixed with other mediaTypes. This adUnit will be removed from the auction.`);
271
+ logWarn(`Detected more than one mediaType in adUnitCode: ${adUnit.code} while attempting to define an 'adpod' video adUnit. 'adpod' adUnits cannot be mixed with other mediaTypes. This adUnit will be removed from the auction.`);
269
272
  return false;
270
273
  }
271
274
 
@@ -274,20 +277,20 @@ export function checkAdUnitSetupHook(fn, adUnits) {
274
277
  let playerSize = !!(
275
278
  (
276
279
  videoConfig.playerSize && (
277
- utils.isArrayOfNums(videoConfig.playerSize, 2) || (
278
- utils.isArray(videoConfig.playerSize) && videoConfig.playerSize.every(sz => utils.isArrayOfNums(sz, 2))
280
+ isArrayOfNums(videoConfig.playerSize, 2) || (
281
+ isArray(videoConfig.playerSize) && videoConfig.playerSize.every(sz => isArrayOfNums(sz, 2))
279
282
  )
280
283
  )
281
284
  ) || (videoConfig.sizeConfig)
282
285
  );
283
- let adPodDurationSec = !!(videoConfig.adPodDurationSec && utils.isNumber(videoConfig.adPodDurationSec) && videoConfig.adPodDurationSec > 0);
284
- let durationRangeSec = !!(videoConfig.durationRangeSec && utils.isArrayOfNums(videoConfig.durationRangeSec) && videoConfig.durationRangeSec.every(range => range > 0));
286
+ let adPodDurationSec = !!(videoConfig.adPodDurationSec && isNumber(videoConfig.adPodDurationSec) && videoConfig.adPodDurationSec > 0);
287
+ let durationRangeSec = !!(videoConfig.durationRangeSec && isArrayOfNums(videoConfig.durationRangeSec) && videoConfig.durationRangeSec.every(range => range > 0));
285
288
 
286
289
  if (!playerSize || !adPodDurationSec || !durationRangeSec) {
287
290
  errMsg += (!playerSize) ? '\nmediaTypes.video.playerSize' : '';
288
291
  errMsg += (!adPodDurationSec) ? '\nmediaTypes.video.adPodDurationSec' : '';
289
292
  errMsg += (!durationRangeSec) ? '\nmediaTypes.video.durationRangeSec' : '';
290
- utils.logWarn(errMsg);
293
+ logWarn(errMsg);
291
294
  return false;
292
295
  }
293
296
  }
@@ -313,8 +316,8 @@ export function checkAdUnitSetupHook(fn, adUnits) {
313
316
  */
314
317
  function checkBidDuration(bidderRequest, bidResponse) {
315
318
  const buffer = 2;
316
- let bidDuration = utils.deepAccess(bidResponse, 'video.durationSeconds');
317
- let videoConfig = utils.deepAccess(bidderRequest, 'mediaTypes.video');
319
+ let bidDuration = deepAccess(bidResponse, 'video.durationSeconds');
320
+ let videoConfig = deepAccess(bidderRequest, 'mediaTypes.video');
318
321
  let adUnitRanges = videoConfig.durationRangeSec;
319
322
  adUnitRanges.sort((a, b) => a - b); // ensure the ranges are sorted in numeric order
320
323
 
@@ -324,14 +327,14 @@ function checkBidDuration(bidderRequest, bidResponse) {
324
327
  let nextHighestRange = find(adUnitRanges, range => (range + buffer) >= bidDuration);
325
328
  bidResponse.video.durationBucket = nextHighestRange;
326
329
  } else {
327
- utils.logWarn(`Detected a bid with a duration value outside the accepted ranges specified in adUnit.mediaTypes.video.durationRangeSec. Rejecting bid: `, bidResponse);
330
+ logWarn(`Detected a bid with a duration value outside the accepted ranges specified in adUnit.mediaTypes.video.durationRangeSec. Rejecting bid: `, bidResponse);
328
331
  return false;
329
332
  }
330
333
  } else {
331
334
  if (find(adUnitRanges, range => range === bidDuration)) {
332
335
  bidResponse.video.durationBucket = bidDuration;
333
336
  } else {
334
- utils.logWarn(`Detected a bid with a duration value not part of the list of accepted ranges specified in adUnit.mediaTypes.video.durationRangeSec. Exact match durations must be used for this adUnit. Rejecting bid: `, bidResponse);
337
+ logWarn(`Detected a bid with a duration value not part of the list of accepted ranges specified in adUnit.mediaTypes.video.durationRangeSec. Exact match durations must be used for this adUnit. Rejecting bid: `, bidResponse);
335
338
  return false;
336
339
  }
337
340
  }
@@ -352,16 +355,16 @@ export function checkVideoBidSetupHook(fn, bid, bidRequest, videoMediaType, cont
352
355
  if (context === ADPOD) {
353
356
  let result = true;
354
357
  let brandCategoryExclusion = config.getConfig('adpod.brandCategoryExclusion');
355
- if (brandCategoryExclusion && !utils.deepAccess(bid, 'meta.primaryCatId')) {
358
+ if (brandCategoryExclusion && !deepAccess(bid, 'meta.primaryCatId')) {
356
359
  result = false;
357
360
  }
358
361
 
359
- if (utils.deepAccess(bid, 'video')) {
360
- if (!utils.deepAccess(bid, 'video.context') || bid.video.context !== ADPOD) {
362
+ if (deepAccess(bid, 'video')) {
363
+ if (!deepAccess(bid, 'video.context') || bid.video.context !== ADPOD) {
361
364
  result = false;
362
365
  }
363
366
 
364
- if (!utils.deepAccess(bid, 'video.durationSeconds') || bid.video.durationSeconds <= 0) {
367
+ if (!deepAccess(bid, 'video.durationSeconds') || bid.video.durationSeconds <= 0) {
365
368
  result = false;
366
369
  } else {
367
370
  let isBidGood = checkBidDuration(bidRequest, bid);
@@ -370,7 +373,7 @@ export function checkVideoBidSetupHook(fn, bid, bidRequest, videoMediaType, cont
370
373
  }
371
374
 
372
375
  if (!config.getConfig('cache.url') && bid.vastXml && !bid.vastUrl) {
373
- utils.logError(`
376
+ logError(`
374
377
  This bid contains only vastXml and will not work when a prebid cache url is not specified.
375
378
  Try enabling prebid cache with pbjs.setConfig({ cache: {url: "..."} });
376
379
  `);
@@ -392,7 +395,7 @@ export function adpodSetConfig(config) {
392
395
  if (typeof config.bidQueueTimeDelay === 'number' && config.bidQueueTimeDelay > 0) {
393
396
  queueTimeDelay = config.bidQueueTimeDelay;
394
397
  } else {
395
- utils.logWarn(`Detected invalid value for adpod.bidQueueTimeDelay in setConfig; must be a positive number. Using default: ${queueTimeDelay}`)
398
+ logWarn(`Detected invalid value for adpod.bidQueueTimeDelay in setConfig; must be a positive number. Using default: ${queueTimeDelay}`)
396
399
  }
397
400
  }
398
401
 
@@ -400,7 +403,7 @@ export function adpodSetConfig(config) {
400
403
  if (typeof config.bidQueueSizeLimit === 'number' && config.bidQueueSizeLimit > 0) {
401
404
  queueSizeLimit = config.bidQueueSizeLimit;
402
405
  } else {
403
- utils.logWarn(`Detected invalid value for adpod.bidQueueSizeLimit in setConfig; must be a positive number. Using default: ${queueSizeLimit}`)
406
+ logWarn(`Detected invalid value for adpod.bidQueueSizeLimit in setConfig; must be a positive number. Using default: ${queueSizeLimit}`)
404
407
  }
405
408
  }
406
409
  }
@@ -464,7 +467,7 @@ export function sortByPricePerSecond(a, b) {
464
467
  */
465
468
  export function getTargeting({ codes, callback } = {}) {
466
469
  if (!callback) {
467
- utils.logError('No callback function was defined in the getTargeting call. Aborting getTargeting().');
470
+ logError('No callback function was defined in the getTargeting call. Aborting getTargeting().');
468
471
  return;
469
472
  }
470
473
  codes = codes || [];
@@ -480,7 +483,7 @@ export function getTargeting({ codes, callback } = {}) {
480
483
  let prioritizeDeals = config.getConfig('adpod.prioritizeDeals');
481
484
  if (prioritizeDeals) {
482
485
  let [otherBids, highPriorityDealBids] = bids.reduce((partitions, bid) => {
483
- let bidDealTier = utils.deepAccess(bid, 'video.dealTier');
486
+ let bidDealTier = deepAccess(bid, 'video.dealTier');
484
487
  let minDealTier = config.getConfig(`adpod.dealTier.${bid.bidderCode}.minDealTier`);
485
488
  if (minDealTier && bidDealTier) {
486
489
  if (bidDealTier >= minDealTier) {
@@ -506,7 +509,7 @@ export function getTargeting({ codes, callback } = {}) {
506
509
  if (deferCachingEnabled === false) {
507
510
  adPodAdUnits.forEach((adUnit) => {
508
511
  let adPodTargeting = [];
509
- let adPodDurationSeconds = utils.deepAccess(adUnit, 'mediaTypes.video.adPodDurationSec');
512
+ let adPodDurationSeconds = deepAccess(adUnit, 'mediaTypes.video.adPodDurationSec');
510
513
 
511
514
  bids
512
515
  .filter((bid) => bid.adUnitCode === adUnit.code)
@@ -530,7 +533,7 @@ export function getTargeting({ codes, callback } = {}) {
530
533
  } else {
531
534
  let bidsToCache = [];
532
535
  adPodAdUnits.forEach((adUnit) => {
533
- let adPodDurationSeconds = utils.deepAccess(adUnit, 'mediaTypes.video.adPodDurationSec');
536
+ let adPodDurationSeconds = deepAccess(adUnit, 'mediaTypes.video.adPodDurationSec');
534
537
 
535
538
  bids
536
539
  .filter((bid) => bid.adUnitCode === adUnit.code)
@@ -546,7 +549,7 @@ export function getTargeting({ codes, callback } = {}) {
546
549
  if (error) {
547
550
  callback(error, null);
548
551
  } else {
549
- let groupedBids = utils.groupBy(bidsSuccessfullyCached, 'adUnitCode');
552
+ let groupedBids = groupBy(bidsSuccessfullyCached, 'adUnitCode');
550
553
  Object.keys(groupedBids).forEach((adUnitCode) => {
551
554
  let adPodTargeting = [];
552
555
 
@@ -578,7 +581,7 @@ export function getTargeting({ codes, callback } = {}) {
578
581
  */
579
582
  function getAdPodAdUnits(codes) {
580
583
  return auctionManager.getAdUnits()
581
- .filter((adUnit) => utils.deepAccess(adUnit, 'mediaTypes.video.context') === ADPOD)
584
+ .filter((adUnit) => deepAccess(adUnit, 'mediaTypes.video.context') === ADPOD)
582
585
  .filter((adUnit) => (codes.length > 0) ? codes.indexOf(adUnit.code) != -1 : true);
583
586
  }
584
587
 
@@ -590,10 +593,10 @@ function getAdPodAdUnits(codes) {
590
593
  function getExclusiveBids(bidsReceived) {
591
594
  let bids = bidsReceived
592
595
  .map((bid) => Object.assign({}, bid, { [TARGETING_KEY_PB_CAT_DUR]: bid.adserverTargeting[TARGETING_KEY_PB_CAT_DUR] }));
593
- bids = utils.groupBy(bids, TARGETING_KEY_PB_CAT_DUR);
596
+ bids = groupBy(bids, TARGETING_KEY_PB_CAT_DUR);
594
597
  let filteredBids = [];
595
598
  Object.keys(bids).forEach((targetingKey) => {
596
- bids[targetingKey].sort(utils.compareOn('responseTimestamp'));
599
+ bids[targetingKey].sort(compareOn('responseTimestamp'));
597
600
  filteredBids.push(bids[targetingKey][0]);
598
601
  });
599
602
  return filteredBids;
@@ -619,8 +622,8 @@ const sharedMethods = {
619
622
  Object.freeze(sharedMethods);
620
623
 
621
624
  module('adpod', function shareAdpodUtilities(...args) {
622
- if (!utils.isPlainObject(args[0])) {
623
- utils.logError('Adpod module needs plain object to share methods with submodule');
625
+ if (!isPlainObject(args[0])) {
626
+ logError('Adpod module needs plain object to share methods with submodule');
624
627
  return;
625
628
  }
626
629
  function addMethods(object, func) {
@@ -1,6 +1,6 @@
1
1
  import {registerBidder} from '../src/adapters/bidderFactory.js';
2
2
  import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
3
- import * as utils from '../src/utils.js';
3
+ import { isFn, deepAccess, logMessage } from '../src/utils.js';
4
4
 
5
5
  const BIDDER_CODE = 'adprime';
6
6
  const AD_URL = 'https://delta.adprime.com/pbjs';
@@ -24,8 +24,8 @@ function isBidResponseValid(bid) {
24
24
  }
25
25
 
26
26
  function getBidFloor(bid) {
27
- if (!utils.isFn(bid.getFloor)) {
28
- return utils.deepAccess(bid, 'params.bidfloor', 0);
27
+ if (!isFn(bid.getFloor)) {
28
+ return deepAccess(bid, 'params.bidfloor', 0);
29
29
  }
30
30
 
31
31
  try {
@@ -56,7 +56,7 @@ export const spec = {
56
56
  winTop = window.top;
57
57
  } catch (e) {
58
58
  location = winTop.location;
59
- utils.logMessage(e);
59
+ logMessage(e);
60
60
  };
61
61
  let placements = [];
62
62
  let request = {
@@ -0,0 +1,204 @@
1
+ import {registerBidder} from '../src/adapters/bidderFactory.js';
2
+ import {BANNER} from '../src/mediaTypes.js';
3
+ import { logInfo, buildUrl, triggerPixel } from '../src/utils.js';
4
+ import { getStorageManager } from '../src/storageManager.js';
5
+
6
+ const ADQUERY_GVLID = 902;
7
+ const ADQUERY_BIDDER_CODE = 'adquery';
8
+ const ADQUERY_BIDDER_DOMAIN_PROTOCOL = 'https';
9
+ const ADQUERY_BIDDER_DOMAIN = 'bidder.adquery.io';
10
+ const ADQUERY_USER_SYNC_DOMAIN = ADQUERY_BIDDER_DOMAIN_PROTOCOL + '://' + ADQUERY_BIDDER_DOMAIN + '/prebid/userSync?1=1';
11
+ const ADQUERY_DEFAULT_CURRENCY = 'PLN';
12
+ const ADQUERY_NET_REVENUE = true;
13
+ const ADQUERY_TTL = 360;
14
+ const storage = getStorageManager(ADQUERY_GVLID);
15
+
16
+ /** @type {BidderSpec} */
17
+ export const spec = {
18
+ code: ADQUERY_BIDDER_CODE,
19
+ gvlid: ADQUERY_GVLID,
20
+ supportedMediaTypes: [BANNER],
21
+
22
+ /** f
23
+ * @param {object} bid
24
+ * @return {boolean}
25
+ */
26
+ isBidRequestValid: (bid) => {
27
+ return !!(bid && bid.params && bid.params.placementId)
28
+ },
29
+
30
+ /**
31
+ * @param {BidRequest[]} bidRequests
32
+ * @param {*} bidderRequest
33
+ * @return {ServerRequest}
34
+ */
35
+ buildRequests: (bidRequests, bidderRequest) => {
36
+ const requests = [];
37
+ for (let i = 0, len = bidRequests.length; i < len; i++) {
38
+ const request = {
39
+ method: 'POST',
40
+ url: ADQUERY_BIDDER_DOMAIN_PROTOCOL + '://' + ADQUERY_BIDDER_DOMAIN + '/prebid/bid',
41
+ data: buildRequest(bidRequests[i], bidderRequest),
42
+ options: {
43
+ withCredentials: false,
44
+ crossOrigin: true
45
+ }
46
+ };
47
+ requests.push(request);
48
+ }
49
+ return requests;
50
+ },
51
+
52
+ /**
53
+ * @param {*} response
54
+ * @param {ServerRequest} request
55
+ * @return {Bid[]}
56
+ */
57
+ interpretResponse: (response, request) => {
58
+ logInfo(request);
59
+ logInfo(response);
60
+
61
+ const res = response && response.body && response.body.data;
62
+ let bidResponses = [];
63
+
64
+ if (!res) {
65
+ return [];
66
+ }
67
+
68
+ const bidResponse = {
69
+ requestId: res.requestId,
70
+ cpm: res.cpm,
71
+ width: res.mediaType.width,
72
+ height: res.mediaType.height,
73
+ creativeId: res.creationId,
74
+ dealId: res.dealid || '',
75
+ currency: res.currency || ADQUERY_DEFAULT_CURRENCY,
76
+ netRevenue: ADQUERY_NET_REVENUE,
77
+ ttl: ADQUERY_TTL,
78
+ referrer: '',
79
+ ad: '<script src="' + res.adqLib + '"></script>' + res.tag,
80
+ mediaType: res.mediaType.name || 'banner',
81
+ meta: {
82
+ advertiserDomains: res.adDomains && res.adDomains.length ? res.adDomains : [],
83
+ mediaType: res.mediaType.name || 'banner',
84
+ }
85
+ };
86
+ bidResponses.push(bidResponse);
87
+ logInfo('bidResponses', bidResponses);
88
+
89
+ return bidResponses;
90
+ },
91
+
92
+ /**
93
+ * @param {TimedOutBid} timeoutData
94
+ */
95
+ onTimeout: (timeoutData) => {
96
+ if (timeoutData == null) {
97
+ return;
98
+ }
99
+ logInfo('onTimeout ', timeoutData);
100
+ let params = {
101
+ bidder: timeoutData.bidder,
102
+ bId: timeoutData.bidId,
103
+ adUnitCode: timeoutData.adUnitCode,
104
+ timeout: timeoutData.timeout,
105
+ auctionId: timeoutData.auctionId,
106
+ };
107
+ let adqueryRequestUrl = buildUrl({
108
+ protocol: ADQUERY_BIDDER_DOMAIN_PROTOCOL,
109
+ hostname: ADQUERY_BIDDER_DOMAIN,
110
+ pathname: '/prebid/eventTimeout',
111
+ search: params
112
+ });
113
+ triggerPixel(adqueryRequestUrl);
114
+ },
115
+
116
+ /**
117
+ * @param {Bid} bid
118
+ */
119
+ onBidWon: (bid) => {
120
+ logInfo('onBidWon', bid);
121
+ const bidString = JSON.stringify(bid);
122
+ const encodedBuf = window.btoa(bidString);
123
+
124
+ let params = {
125
+ q: encodedBuf,
126
+ };
127
+ let adqueryRequestUrl = buildUrl({
128
+ protocol: ADQUERY_BIDDER_DOMAIN_PROTOCOL,
129
+ hostname: ADQUERY_BIDDER_DOMAIN,
130
+ pathname: '/prebid/eventBidWon',
131
+ search: params
132
+ });
133
+ triggerPixel(adqueryRequestUrl);
134
+ },
135
+
136
+ /**
137
+ * @param {Bid} bid
138
+ */
139
+ onSetTargeting: (bid) => {
140
+ logInfo('onSetTargeting', bid);
141
+
142
+ let params = {
143
+ bidder: bid.bidder,
144
+ width: bid.width,
145
+ height: bid.height,
146
+ bid: bid.adId,
147
+ mediaType: bid.mediaType,
148
+ cpm: bid.cpm,
149
+ requestId: bid.requestId,
150
+ adUnitCode: bid.adUnitCode
151
+ };
152
+
153
+ let adqueryRequestUrl = buildUrl({
154
+ protocol: ADQUERY_BIDDER_DOMAIN_PROTOCOL,
155
+ hostname: ADQUERY_BIDDER_DOMAIN,
156
+ pathname: '/prebid/eventSetTargeting',
157
+ search: params
158
+ });
159
+ triggerPixel(adqueryRequestUrl);
160
+ },
161
+ getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
162
+ let syncUrl = ADQUERY_USER_SYNC_DOMAIN;
163
+ if (gdprConsent && gdprConsent.consentString) {
164
+ if (typeof gdprConsent.gdprApplies === 'boolean') {
165
+ syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
166
+ } else {
167
+ syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
168
+ }
169
+ }
170
+ if (uspConsent && uspConsent.consentString) {
171
+ syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
172
+ }
173
+ return [{
174
+ type: 'image',
175
+ url: syncUrl
176
+ }];
177
+ }
178
+
179
+ };
180
+ function buildRequest(validBidRequests, bidderRequest) {
181
+ let qid = Math.random().toString(36).substring(2) + Date.now().toString(36);
182
+ let bid = validBidRequests;
183
+
184
+ if (storage.getDataFromLocalStorage('qid')) {
185
+ qid = storage.getDataFromLocalStorage('qid');
186
+ } else {
187
+ storage.setDataInLocalStorage('qid', qid);
188
+ }
189
+
190
+ return {
191
+ placementCode: bid.params.placementId,
192
+ auctionId: bid.auctionId,
193
+ qid: qid,
194
+ type: bid.params.type,
195
+ adUnitCode: bid.adUnitCode,
196
+ bidId: bid.bidId,
197
+ bidder: bid.bidder,
198
+ bidderRequestId: bid.bidderRequestId,
199
+ bidRequestsCount: bid.bidRequestsCount,
200
+ bidderRequestsCount: bid.bidderRequestsCount,
201
+ };
202
+ }
203
+
204
+ registerBidder(spec);
@@ -0,0 +1,32 @@
1
+ # Overview
2
+
3
+ Module Name: Adquery Bidder Adapter
4
+ Module Type: Bidder Adapter
5
+ Maintainer: prebid@adquery.com
6
+
7
+ # Description
8
+
9
+ Module that connects to Adquery's demand sources.
10
+
11
+ # Test Parameters
12
+ ```
13
+ var adUnits = [
14
+ {
15
+ code: 'banner-adquery-div',
16
+ mediaTypes: {
17
+ banner: {
18
+ sizes: [[300, 250]],
19
+ }
20
+ },
21
+ bids: [
22
+ {
23
+ bidder: 'adquery',
24
+ params: {
25
+ placementId: '6d93f2a0e5f0fe2cc3a6e9e3ade964b43b07f897',
26
+ type: 'banner300x250'
27
+ }
28
+ }
29
+ ]
30
+ }
31
+ ];
32
+ ```