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,8 +1,8 @@
1
+ import { isArray, getUniqueIdentifierStr, parseUrl, deepAccess, logWarn, logError, logInfo } from '../src/utils.js';
1
2
  import {loadExternalScript} from '../src/adloader.js';
2
3
  import {registerBidder} from '../src/adapters/bidderFactory.js';
3
4
  import {config} from '../src/config.js';
4
5
  import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
5
- import * as utils from '../src/utils.js';
6
6
  import find from 'core-js-pure/features/array/find.js';
7
7
  import { verify } from 'criteo-direct-rsa-validate/build/verify.js'; // ref#2
8
8
  import { getStorageManager } from '../src/storageManager.js';
@@ -123,13 +123,13 @@ export const spec = {
123
123
 
124
124
  const bids = [];
125
125
 
126
- if (body && body.slots && utils.isArray(body.slots)) {
126
+ if (body && body.slots && isArray(body.slots)) {
127
127
  body.slots.forEach(slot => {
128
128
  const bidRequest = find(request.bidRequests, b => b.adUnitCode === slot.impid && (!b.params.zoneId || parseInt(b.params.zoneId) === slot.zoneid));
129
129
  const bidId = bidRequest.bidId;
130
130
  const bid = {
131
131
  requestId: bidId,
132
- adId: slot.bidId || utils.getUniqueIdentifierStr(),
132
+ adId: slot.bidId || getUniqueIdentifierStr(),
133
133
  cpm: slot.cpm,
134
134
  currency: slot.currency,
135
135
  netRevenue: true,
@@ -219,7 +219,7 @@ function buildContext(bidRequests, bidderRequest) {
219
219
  if (bidderRequest && bidderRequest.refererInfo) {
220
220
  referrer = bidderRequest.refererInfo.referer;
221
221
  }
222
- const queryString = utils.parseUrl(referrer).search;
222
+ const queryString = parseUrl(referrer).search;
223
223
 
224
224
  const context = {
225
225
  url: referrer,
@@ -296,7 +296,7 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
296
296
  if (bidRequest.params.zoneId) {
297
297
  slot.zoneid = bidRequest.params.zoneId;
298
298
  }
299
- if (utils.deepAccess(bidRequest, 'ortb2Imp.ext')) {
299
+ if (deepAccess(bidRequest, 'ortb2Imp.ext')) {
300
300
  slot.ext = bidRequest.ortb2Imp.ext;
301
301
  }
302
302
  if (bidRequest.params.ext) {
@@ -305,10 +305,10 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
305
305
  if (bidRequest.params.publisherSubId) {
306
306
  slot.publishersubid = bidRequest.params.publisherSubId;
307
307
  }
308
- if (bidRequest.params.nativeCallback || utils.deepAccess(bidRequest, `mediaTypes.${NATIVE}`)) {
308
+ if (bidRequest.params.nativeCallback || deepAccess(bidRequest, `mediaTypes.${NATIVE}`)) {
309
309
  slot.native = true;
310
310
  if (!checkNativeSendId(bidRequest)) {
311
- utils.logWarn(LOG_PREFIX + 'all native assets containing URL should be sent as placeholders with sendId(icon, image, clickUrl, displayUrl, privacyLink, privacyIcon)');
311
+ logWarn(LOG_PREFIX + 'all native assets containing URL should be sent as placeholders with sendId(icon, image, clickUrl, displayUrl, privacyLink, privacyIcon)');
312
312
  }
313
313
  slot.sizes = parseSizes(retrieveBannerSizes(bidRequest), parseNativeSize);
314
314
  } else {
@@ -316,7 +316,7 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
316
316
  }
317
317
  if (hasVideoMediaType(bidRequest)) {
318
318
  const video = {
319
- playersizes: parseSizes(utils.deepAccess(bidRequest, 'mediaTypes.video.playerSize'), parseSize),
319
+ playersizes: parseSizes(deepAccess(bidRequest, 'mediaTypes.video.playerSize'), parseSize),
320
320
  mimes: bidRequest.mediaTypes.video.mimes,
321
321
  protocols: bidRequest.mediaTypes.video.protocols,
322
322
  maxduration: bidRequest.mediaTypes.video.maxduration,
@@ -367,7 +367,7 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
367
367
  }
368
368
 
369
369
  function retrieveBannerSizes(bidRequest) {
370
- return utils.deepAccess(bidRequest, 'mediaTypes.banner.sizes') || bidRequest.sizes;
370
+ return deepAccess(bidRequest, 'mediaTypes.banner.sizes') || bidRequest.sizes;
371
371
  }
372
372
 
373
373
  function parseSizes(sizes, parser) {
@@ -389,7 +389,7 @@ function parseNativeSize(size) {
389
389
  }
390
390
 
391
391
  function hasVideoMediaType(bidRequest) {
392
- return utils.deepAccess(bidRequest, 'mediaTypes.video') !== undefined;
392
+ return deepAccess(bidRequest, 'mediaTypes.video') !== undefined;
393
393
  }
394
394
 
395
395
  function hasValidVideoMediaType(bidRequest) {
@@ -398,9 +398,9 @@ function hasValidVideoMediaType(bidRequest) {
398
398
  var requiredMediaTypesParams = ['mimes', 'playerSize', 'maxduration', 'protocols', 'api', 'skip', 'placement', 'playbackmethod'];
399
399
 
400
400
  requiredMediaTypesParams.forEach(function(param) {
401
- if (utils.deepAccess(bidRequest, 'mediaTypes.video.' + param) === undefined && utils.deepAccess(bidRequest, 'params.video.' + param) === undefined) {
401
+ if (deepAccess(bidRequest, 'mediaTypes.video.' + param) === undefined && deepAccess(bidRequest, 'params.video.' + param) === undefined) {
402
402
  isValid = false;
403
- utils.logError('Criteo Bid Adapter: mediaTypes.video.' + param + ' is required');
403
+ logError('Criteo Bid Adapter: mediaTypes.video.' + param + ' is required');
404
404
  }
405
405
  });
406
406
 
@@ -476,7 +476,7 @@ export function getFastBidUrl(fastBidVersion) {
476
476
  } else if (fastBidVersion) {
477
477
  let majorVersion = String(fastBidVersion).split('.')[0];
478
478
  if (majorVersion < 102) {
479
- utils.logWarn('Specifying a Fastbid version which is not supporting version selection.')
479
+ logWarn('Specifying a Fastbid version which is not supporting version selection.')
480
480
  }
481
481
  version = '.' + fastBidVersion;
482
482
  } else {
@@ -499,7 +499,7 @@ export function tryGetCriteoFastBid() {
499
499
  const firstLine = fastBidFromStorage.substr(0, firstLineEndPosition).trim();
500
500
 
501
501
  if (firstLine.substr(0, hashPrefix.length) !== hashPrefix) {
502
- utils.logWarn('No hash found in FastBid');
502
+ logWarn('No hash found in FastBid');
503
503
  storage.removeDataFromLocalStorage(fastBidStorageKey);
504
504
  } else {
505
505
  // Remove the hash part from the locally stored value
@@ -507,10 +507,10 @@ export function tryGetCriteoFastBid() {
507
507
  const publisherTag = fastBidFromStorage.substr(firstLineEndPosition + 1);
508
508
 
509
509
  if (verify(publisherTag, publisherTagHash, FAST_BID_PUBKEY_N, FAST_BID_PUBKEY_E)) {
510
- utils.logInfo('Using Criteo FastBid');
510
+ logInfo('Using Criteo FastBid');
511
511
  eval(publisherTag); // eslint-disable-line no-eval
512
512
  } else {
513
- utils.logWarn('Invalid Criteo FastBid found');
513
+ logWarn('Invalid Criteo FastBid found');
514
514
  storage.removeDataFromLocalStorage(fastBidStorageKey);
515
515
  }
516
516
  }
@@ -5,7 +5,7 @@
5
5
  * @requires module:modules/userId
6
6
  */
7
7
 
8
- import * as utils from '../src/utils.js'
8
+ import { timestamp, parseUrl, triggerPixel, logError } from '../src/utils.js';
9
9
  import { ajax } from '../src/ajax.js';
10
10
  import { getRefererInfo } from '../src/refererDetection.js';
11
11
  import { submodule } from '../src/hook.js';
@@ -20,10 +20,10 @@ const bundleStorageKey = 'cto_bundle';
20
20
  const cookiesMaxAge = 13 * 30 * 24 * 60 * 60 * 1000;
21
21
 
22
22
  const pastDateString = new Date(0).toString();
23
- const expirationString = new Date(utils.timestamp() + cookiesMaxAge).toString();
23
+ const expirationString = new Date(timestamp() + cookiesMaxAge).toString();
24
24
 
25
25
  function extractProtocolHost (url, returnOnlyHost = false) {
26
- const parsedUrl = utils.parseUrl(url, {noDecodeWholeURL: true})
26
+ const parsedUrl = parseUrl(url, {noDecodeWholeURL: true})
27
27
  return returnOnlyHost
28
28
  ? `${parsedUrl.hostname}`
29
29
  : `${parsedUrl.protocol}://${parsedUrl.hostname}${parsedUrl.port ? ':' + parsedUrl.port : ''}/`;
@@ -87,7 +87,7 @@ function callCriteoUserSync(parsedCriteoData, gdprString, callback) {
87
87
  const jsonResponse = JSON.parse(response);
88
88
  if (jsonResponse.acwsUrl) {
89
89
  const urlsToCall = typeof jsonResponse.acwsUrl === 'string' ? [jsonResponse.acwsUrl] : jsonResponse.acwsUrl;
90
- urlsToCall.forEach(url => utils.triggerPixel(url));
90
+ urlsToCall.forEach(url => triggerPixel(url));
91
91
  } else if (jsonResponse.bundle) {
92
92
  saveOnAllStorages(bundleStorageKey, jsonResponse.bundle);
93
93
  }
@@ -102,7 +102,7 @@ function callCriteoUserSync(parsedCriteoData, gdprString, callback) {
102
102
  }
103
103
  },
104
104
  error: error => {
105
- utils.logError(`criteoIdSystem: unable to sync user id`, error);
105
+ logError(`criteoIdSystem: unable to sync user id`, error);
106
106
  callback();
107
107
  }
108
108
  };
@@ -1,8 +1,8 @@
1
+ import { logInfo, logWarn, logError, logMessage } from '../src/utils.js';
1
2
  import { getGlobal } from '../src/prebidGlobal.js';
2
3
  import { createBid } from '../src/bidfactory.js';
3
4
  import { STATUS } from '../src/constants.json';
4
5
  import { ajax } from '../src/ajax.js';
5
- import * as utils from '../src/utils.js';
6
6
  import { config } from '../src/config.js';
7
7
  import { getHook } from '../src/hook.js';
8
8
 
@@ -70,11 +70,11 @@ export function setConfig(config) {
70
70
  }
71
71
 
72
72
  if (typeof config.adServerCurrency === 'string') {
73
- utils.logInfo('enabling currency support', arguments);
73
+ logInfo('enabling currency support', arguments);
74
74
 
75
75
  adServerCurrency = config.adServerCurrency;
76
76
  if (config.conversionRateFile) {
77
- utils.logInfo('currency using override conversionRateFile:', config.conversionRateFile);
77
+ logInfo('currency using override conversionRateFile:', config.conversionRateFile);
78
78
  url = config.conversionRateFile;
79
79
  }
80
80
 
@@ -99,7 +99,7 @@ export function setConfig(config) {
99
99
  initCurrency(url);
100
100
  } else {
101
101
  // currency support is disabled, setting defaults
102
- utils.logInfo('disabling currency support');
102
+ logInfo('disabling currency support');
103
103
  resetCurrency();
104
104
  }
105
105
  if (typeof config.bidderCurrencyDefault === 'object') {
@@ -110,10 +110,10 @@ config.getConfig('currency', config => setConfig(config.currency));
110
110
 
111
111
  function errorSettingsRates(msg) {
112
112
  if (defaultRates) {
113
- utils.logWarn(msg);
114
- utils.logWarn('Currency failed loading rates, falling back to currency.defaultRates');
113
+ logWarn(msg);
114
+ logWarn('Currency failed loading rates, falling back to currency.defaultRates');
115
115
  } else {
116
- utils.logError(msg);
116
+ logError(msg);
117
117
  }
118
118
  }
119
119
 
@@ -121,7 +121,7 @@ function initCurrency(url) {
121
121
  conversionCache = {};
122
122
  currencySupportEnabled = true;
123
123
 
124
- utils.logInfo('Installing addBidResponse decorator for currency module', arguments);
124
+ logInfo('Installing addBidResponse decorator for currency module', arguments);
125
125
 
126
126
  // Adding conversion function to prebid global for external module and on page use
127
127
  getGlobal().convertCurrency = (cpm, fromCurrency, toCurrency) => parseFloat(cpm) * getCurrencyConversion(fromCurrency, toCurrency);
@@ -135,7 +135,7 @@ function initCurrency(url) {
135
135
  success: function (response) {
136
136
  try {
137
137
  currencyRates = JSON.parse(response);
138
- utils.logInfo('currencyRates set to ' + JSON.stringify(currencyRates));
138
+ logInfo('currencyRates set to ' + JSON.stringify(currencyRates));
139
139
  currencyRatesLoaded = true;
140
140
  processBidResponseQueue();
141
141
  } catch (e) {
@@ -149,7 +149,7 @@ function initCurrency(url) {
149
149
  }
150
150
 
151
151
  function resetCurrency() {
152
- utils.logInfo('Uninstalling addBidResponse decorator for currency module', arguments);
152
+ logInfo('Uninstalling addBidResponse decorator for currency module', arguments);
153
153
 
154
154
  getHook('addBidResponse').getHooks({hook: addBidResponseHook}).remove();
155
155
  delete getGlobal().convertCurrency;
@@ -172,7 +172,7 @@ export function addBidResponseHook(fn, adUnitCode, bid) {
172
172
  if (bidderCurrencyDefault[bidder]) {
173
173
  let currencyDefault = bidderCurrencyDefault[bidder];
174
174
  if (bid.currency && currencyDefault !== bid.currency) {
175
- utils.logWarn(`Currency default '${bidder}: ${currencyDefault}' ignored. adapter specified '${bid.currency}'`);
175
+ logWarn(`Currency default '${bidder}: ${currencyDefault}' ignored. adapter specified '${bid.currency}'`);
176
176
  } else {
177
177
  bid.currency = currencyDefault;
178
178
  }
@@ -180,7 +180,7 @@ export function addBidResponseHook(fn, adUnitCode, bid) {
180
180
 
181
181
  // default to USD if currency not set
182
182
  if (!bid.currency) {
183
- utils.logWarn('Currency not specified on bid. Defaulted to "USD"');
183
+ logWarn('Currency not specified on bid. Defaulted to "USD"');
184
184
  bid.currency = 'USD';
185
185
  }
186
186
 
@@ -218,7 +218,7 @@ function wrapFunction(fn, context, params) {
218
218
  bid.currency = adServerCurrency;
219
219
  }
220
220
  } catch (e) {
221
- utils.logWarn('Returning NO_BID, getCurrencyConversion threw error: ', e);
221
+ logWarn('Returning NO_BID, getCurrencyConversion threw error: ', e);
222
222
  params[1] = createBid(STATUS.NO_BID, {
223
223
  bidder: bid.bidderCode || bid.bidder,
224
224
  bidId: bid.requestId
@@ -235,7 +235,7 @@ function getCurrencyConversion(fromCurrency, toCurrency = adServerCurrency) {
235
235
  let cacheKey = `${fromCurrency}->${toCurrency}`;
236
236
  if (cacheKey in conversionCache) {
237
237
  conversionRate = conversionCache[cacheKey];
238
- utils.logMessage('Using conversionCache value ' + conversionRate + ' for ' + cacheKey);
238
+ logMessage('Using conversionCache value ' + conversionRate + ' for ' + cacheKey);
239
239
  } else if (currencySupportEnabled === false) {
240
240
  if (fromCurrency === 'USD') {
241
241
  conversionRate = 1;
@@ -253,7 +253,7 @@ function getCurrencyConversion(fromCurrency, toCurrency = adServerCurrency) {
253
253
  throw new Error('Specified adServerCurrency in config \'' + toCurrency + '\' not found in the currency rates file');
254
254
  }
255
255
  conversionRate = rates[toCurrency];
256
- utils.logInfo('getCurrencyConversion using direct ' + fromCurrency + ' to ' + toCurrency + ' conversionRate ' + conversionRate);
256
+ logInfo('getCurrencyConversion using direct ' + fromCurrency + ' to ' + toCurrency + ' conversionRate ' + conversionRate);
257
257
  } else if (toCurrency in currencyRates.conversions) {
258
258
  // using reciprocal of conversion rate from toCurrency to fromCurrency
259
259
  rates = currencyRates.conversions[toCurrency];
@@ -262,7 +262,7 @@ function getCurrencyConversion(fromCurrency, toCurrency = adServerCurrency) {
262
262
  throw new Error('Specified fromCurrency \'' + fromCurrency + '\' not found in the currency rates file');
263
263
  }
264
264
  conversionRate = roundFloat(1 / rates[fromCurrency], CURRENCY_RATE_PRECISION);
265
- utils.logInfo('getCurrencyConversion using reciprocal ' + fromCurrency + ' to ' + toCurrency + ' conversionRate ' + conversionRate);
265
+ logInfo('getCurrencyConversion using reciprocal ' + fromCurrency + ' to ' + toCurrency + ' conversionRate ' + conversionRate);
266
266
  } else {
267
267
  // first defined currency base used as intermediary
268
268
  var anyBaseCurrency = Object.keys(currencyRates.conversions)[0];
@@ -280,11 +280,11 @@ function getCurrencyConversion(fromCurrency, toCurrency = adServerCurrency) {
280
280
  var fromIntermediateConversionRate = currencyRates.conversions[anyBaseCurrency][toCurrency];
281
281
 
282
282
  conversionRate = roundFloat(toIntermediateConversionRate * fromIntermediateConversionRate, CURRENCY_RATE_PRECISION);
283
- utils.logInfo('getCurrencyConversion using intermediate ' + fromCurrency + ' thru ' + anyBaseCurrency + ' to ' + toCurrency + ' conversionRate ' + conversionRate);
283
+ logInfo('getCurrencyConversion using intermediate ' + fromCurrency + ' thru ' + anyBaseCurrency + ' to ' + toCurrency + ' conversionRate ' + conversionRate);
284
284
  }
285
285
  }
286
286
  if (!(cacheKey in conversionCache)) {
287
- utils.logMessage('Adding conversionCache value ' + conversionRate + ' for ' + cacheKey);
287
+ logMessage('Adding conversionCache value ' + conversionRate + ' for ' + cacheKey);
288
288
  conversionCache[cacheKey] = conversionRate;
289
289
  }
290
290
  return conversionRate;
@@ -0,0 +1,272 @@
1
+ import {registerBidder} from '../src/adapters/bidderFactory.js';
2
+ import { getRefererInfo } from '../src/refererDetection.js';
3
+ import { getStorageManager } from '../src/storageManager.js';
4
+ import {BANNER, VIDEO} from '../src/mediaTypes.js';
5
+ import { OUTSTREAM } from '../src/video.js';
6
+ import {
7
+ isArray,
8
+ isNumber,
9
+ generateUUID,
10
+ parseSizesInput,
11
+ deepAccess,
12
+ getParameterByName,
13
+ getValue,
14
+ getBidIdParameter,
15
+ logError,
16
+ logWarn,
17
+ } from '../src/utils.js';
18
+ import { Renderer } from '../src/Renderer.js';
19
+ import find from 'core-js-pure/features/array/find.js';
20
+
21
+ // ------------------------------------
22
+ const BIDDER_CODE = 'cwire';
23
+ export const ENDPOINT_URL = 'https://embed.cwi.re/delivery/prebid';
24
+ export const RENDERER_URL = 'https://cdn.cwi.re/prebid/renderer/LATEST/renderer.min.js';
25
+ // ------------------------------------
26
+ export const CW_PAGE_VIEW_ID = generateUUID();
27
+ const LS_CWID_KEY = 'cw_cwid';
28
+ const CW_GROUPS_QUERY = 'cwgroups';
29
+
30
+ const storage = getStorageManager();
31
+
32
+ /**
33
+ * ------------------------------------
34
+ * ------------------------------------
35
+ * @param bid
36
+ * @returns {Array<string>}
37
+ */
38
+ export function getSlotSizes(bid) {
39
+ return parseSizesInput(getAllMediaSizes(bid));
40
+ }
41
+
42
+ /**
43
+ * ------------------------------------
44
+ * ------------------------------------
45
+ * @param bid
46
+ * @returns {*[]}
47
+ */
48
+ export function getAllMediaSizes(bid) {
49
+ let playerSizes = deepAccess(bid, 'mediaTypes.video.playerSize');
50
+ let videoSizes = deepAccess(bid, 'mediaTypes.video.sizes');
51
+ let bannerSizes = deepAccess(bid, 'mediaTypes.banner.sizes');
52
+
53
+ const sizes = [];
54
+
55
+ if (isArray(playerSizes)) {
56
+ playerSizes.forEach((s) => {
57
+ sizes.push(s);
58
+ })
59
+ }
60
+
61
+ if (isArray(videoSizes)) {
62
+ videoSizes.forEach((s) => {
63
+ sizes.push(s);
64
+ })
65
+ }
66
+
67
+ if (isArray(bannerSizes)) {
68
+ bannerSizes.forEach((s) => {
69
+ sizes.push(s);
70
+ })
71
+ }
72
+ return sizes;
73
+ }
74
+
75
+ const getQueryVariable = (variable) => {
76
+ let value = getParameterByName(variable);
77
+ if (value === '') {
78
+ value = null;
79
+ }
80
+ return value;
81
+ };
82
+
83
+ /**
84
+ * ------------------------------------
85
+ * ------------------------------------
86
+ * @param validBidRequests
87
+ * @returns {*[]}
88
+ */
89
+ export const mapSlotsData = function(validBidRequests) {
90
+ const slots = [];
91
+ validBidRequests.forEach(bid => {
92
+ const bidObj = {};
93
+ // get the pacement and page ids
94
+ let placementId = getValue(bid.params, 'placementId');
95
+ let pageId = getValue(bid.params, 'pageId');
96
+ let adUnitElementId = getValue(bid.params, 'adUnitElementId');
97
+ // get the rest of the auction/bid/transaction info
98
+ bidObj.auctionId = getBidIdParameter('auctionId', bid);
99
+ bidObj.adUnitCode = getBidIdParameter('adUnitCode', bid);
100
+ bidObj.adUnitElementId = adUnitElementId;
101
+ bidObj.bidId = getBidIdParameter('bidId', bid);
102
+ bidObj.bidderRequestId = getBidIdParameter('bidderRequestId', bid);
103
+ bidObj.placementId = placementId;
104
+ bidObj.pageId = pageId;
105
+ bidObj.mediaTypes = getBidIdParameter('mediaTypes', bid);
106
+ bidObj.transactionId = getBidIdParameter('transactionId', bid);
107
+ bidObj.sizes = getSlotSizes(bid);
108
+ slots.push(bidObj);
109
+ });
110
+
111
+ return slots;
112
+ };
113
+
114
+ export const spec = {
115
+ code: BIDDER_CODE,
116
+ supportedMediaTypes: [BANNER, VIDEO],
117
+ /**
118
+ * Determines whether or not the given bid request is valid.
119
+ *
120
+ * @param {BidRequest} bid The bid params to validate.
121
+ * @return boolean True if this is a valid bid, and false otherwise.
122
+ */
123
+ isBidRequestValid: function(bid) {
124
+ bid.params = bid.params || {};
125
+
126
+ // if ad unit elemt id not provided - use adUnitCode by default
127
+ if (!bid.params.adUnitElementId) {
128
+ bid.params.adUnitElementId = bid.code;
129
+ }
130
+
131
+ if (!bid.params.placementId || !isNumber(bid.params.placementId)) {
132
+ logError('placementId not provided or invalid');
133
+ return false;
134
+ }
135
+
136
+ if (!bid.params.pageId || !isNumber(bid.params.pageId)) {
137
+ logError('pageId not provided');
138
+ return false;
139
+ }
140
+
141
+ return true;
142
+ },
143
+
144
+ /**
145
+ * ------------------------------------
146
+ * Make a server request from the
147
+ * list of BidRequests.
148
+ * ------------------------------------
149
+ * @param {validBidRequests[]} - an array of bids
150
+ * @return ServerRequest Info describing the request to the server.
151
+ */
152
+ buildRequests: function(validBidRequests, bidderRequest) {
153
+ let slots = [];
154
+ let referer;
155
+ try {
156
+ referer = getRefererInfo().referer;
157
+ slots = mapSlotsData(validBidRequests);
158
+ } catch (e) {
159
+ logWarn(e);
160
+ }
161
+
162
+ let refgroups = [];
163
+
164
+ const rgQuery = getQueryVariable(CW_GROUPS_QUERY);
165
+ if (rgQuery !== null) {
166
+ refgroups = rgQuery.split(',');
167
+ }
168
+
169
+ const localStorageCWID = storage.localStorageIsEnabled() ? storage.getDataFromLocalStorage(LS_CWID_KEY) : null;
170
+
171
+ const payload = {
172
+ cwid: localStorageCWID,
173
+ refgroups,
174
+ slots: slots,
175
+ httpRef: referer || '',
176
+ pageViewId: CW_PAGE_VIEW_ID,
177
+ };
178
+
179
+ return {
180
+ method: 'POST',
181
+ url: ENDPOINT_URL,
182
+ data: payload
183
+ };
184
+ },
185
+
186
+ /**
187
+ * Unpack the response from the server into a list of bids.
188
+ *
189
+ * @param {ServerResponse} serverResponse A successful response from the server.
190
+ * @return {Bid[]} An array of bids which were nested inside the server.
191
+ */
192
+ interpretResponse: function(serverResponse, bidRequest) {
193
+ const bidResponses = [];
194
+
195
+ try {
196
+ if (typeof bidRequest.data === 'string') {
197
+ bidRequest.data = JSON.parse(bidRequest.data);
198
+ }
199
+ const serverBody = serverResponse.body;
200
+ serverBody.bids.forEach((br) => {
201
+ const bidReq = find(bidRequest.data.slots, bid => bid.bidId === br.requestId);
202
+
203
+ let mediaType = BANNER;
204
+
205
+ const bidResponse = {
206
+ requestId: br.requestId,
207
+ cpm: br.cpm,
208
+ bidderCode: BIDDER_CODE,
209
+ width: br.dimensions[0],
210
+ height: br.dimensions[1],
211
+ creativeId: br.creativeId,
212
+ currency: br.currency,
213
+ netRevenue: br.netRevenue,
214
+ ttl: br.ttl,
215
+ meta: {
216
+ advertiserDomains: br.adomains ? br.advertiserDomains : [],
217
+ },
218
+
219
+ };
220
+
221
+ // ------------------------------------
222
+ // IF BANNER
223
+ // ------------------------------------
224
+
225
+ if (deepAccess(bidReq, 'mediaTypes.banner')) {
226
+ bidResponse.ad = br.html;
227
+ }
228
+ // ------------------------------------
229
+ // IF VIDEO
230
+ // ------------------------------------
231
+ if (deepAccess(bidReq, 'mediaTypes.video')) {
232
+ mediaType = VIDEO;
233
+ bidResponse.vastXml = br.vastXml;
234
+ bidResponse.videoScript = br.html;
235
+ const mediaTypeContext = deepAccess(bidReq, 'mediaTypes.video.context');
236
+ if (mediaTypeContext === OUTSTREAM) {
237
+ const r = Renderer.install({
238
+ id: bidResponse.requestId,
239
+ adUnitCode: bidReq.adUnitCode,
240
+ url: RENDERER_URL,
241
+ loaded: false,
242
+ config: {
243
+ ...deepAccess(bidReq, 'mediaTypes.video'),
244
+ ...deepAccess(br, 'outstream', {})
245
+ }
246
+ });
247
+
248
+ // set renderer
249
+ try {
250
+ bidResponse.renderer = r;
251
+ bidResponse.renderer.setRender(function(bid) {
252
+ if (window.CWIRE && window.CWIRE.outstream) {
253
+ window.CWIRE.outstream.renderAd(bid);
254
+ }
255
+ });
256
+ } catch (err) {
257
+ logWarn('Prebid Error calling setRender on newRenderer', err);
258
+ }
259
+ }
260
+ }
261
+
262
+ bidResponse.mediaType = mediaType;
263
+ bidResponses.push(bidResponse);
264
+ });
265
+ } catch (e) {
266
+ logWarn(e);
267
+ }
268
+
269
+ return bidResponses;
270
+ },
271
+ }
272
+ registerBidder(spec);
@@ -0,0 +1,43 @@
1
+ # Overview
2
+
3
+ Module Name: C-WIRE Bid Adapter
4
+ Module Type: Adagio Adapter
5
+ Maintainer: dragan@cwire.ch
6
+
7
+ ## Description
8
+
9
+ Connects to C-WIRE demand source to fetch bids.
10
+
11
+ ## Configuration
12
+
13
+
14
+ Below, the list of C-WIRE params and where they can be set.
15
+
16
+ | Param name | Global config | AdUnit config | Type | Required |
17
+ | ---------- | ------------- | ------------- | ---- | ---------|
18
+ | pageId | | x | number | YES |
19
+ | placementId | | x | number | YES |
20
+ | adUnitElementId | | x | string | NO |
21
+
22
+ ### adUnit configuration
23
+
24
+ ```javascript
25
+ var adUnits = [
26
+ {
27
+ code: 'target_div_id', // REQUIRED
28
+ bids: [{
29
+ bidder: 'cwire',
30
+ mediaTypes: {
31
+ banner: {
32
+ sizes: [[1, 1]],
33
+ }
34
+ },
35
+ params: {
36
+ pageId: 1422, // required - number
37
+ placementId: 2211521, // required - number
38
+ adUnitElementId: 'other_div', // optional, div id to write to, if not set it will default to ad unit code
39
+ }
40
+ }]
41
+ }
42
+ ];
43
+ ```