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
+ import { logWarn, isStr, deepAccess, inIframe, checkCookieSupport, timestamp, getBidIdParameter, parseSizesInput, buildUrl, logMessage, isArray, deepSetValue, isPlainObject, triggerPixel, replaceAuctionPrice, isFn } from '../src/utils.js';
1
2
  import {config} from '../src/config.js'
2
- import * as utils from '../src/utils.js'
3
3
  import {registerBidder} from '../src/adapters/bidderFactory.js'
4
4
  import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'
5
5
  import includes from 'core-js-pure/features/array/includes.js'
@@ -36,44 +36,44 @@ export const spec = {
36
36
  */
37
37
  isBidRequestValid: function (bid) {
38
38
  if (!bid || !bid.params) {
39
- utils.logWarn(BIDDER_CODE + ': Missing bid parameters');
39
+ logWarn(BIDDER_CODE + ': Missing bid parameters');
40
40
  return false
41
41
  }
42
42
 
43
- if (!utils.isStr(bid.params.adzoneid)) {
44
- utils.logWarn(BIDDER_CODE + ': adzoneid must be specified as a string');
43
+ if (!isStr(bid.params.adzoneid)) {
44
+ logWarn(BIDDER_CODE + ': adzoneid must be specified as a string');
45
45
  return false
46
46
  }
47
47
 
48
48
  if (isBannerRequest(bid)) {
49
- const banneroAdUnit = utils.deepAccess(bid, 'mediaTypes.banner');
49
+ const banneroAdUnit = deepAccess(bid, 'mediaTypes.banner');
50
50
  if (!banneroAdUnit.sizes) {
51
- utils.logWarn(BIDDER_CODE + ': banner sizes must be specified');
51
+ logWarn(BIDDER_CODE + ': banner sizes must be specified');
52
52
  return false;
53
53
  }
54
54
  }
55
55
 
56
56
  if (isVideoRequest(bid)) {
57
57
  // prebid 4.0 use standardized Video parameters
58
- const videoAdUnit = utils.deepAccess(bid, 'mediaTypes.video');
58
+ const videoAdUnit = deepAccess(bid, 'mediaTypes.video');
59
59
 
60
60
  if (!Array.isArray(videoAdUnit.playerSize)) {
61
- utils.logWarn(BIDDER_CODE + ': video playerSize must be an array of integers');
61
+ logWarn(BIDDER_CODE + ': video playerSize must be an array of integers');
62
62
  return false;
63
63
  }
64
64
 
65
65
  if (!videoAdUnit.context) {
66
- utils.logWarn(BIDDER_CODE + ': video context must be specified');
66
+ logWarn(BIDDER_CODE + ': video context must be specified');
67
67
  return false;
68
68
  }
69
69
 
70
70
  if (!Array.isArray(videoAdUnit.mimes) || videoAdUnit.mimes.length === 0) {
71
- utils.logWarn(BIDDER_CODE + ': video mimes must be an array of strings');
71
+ logWarn(BIDDER_CODE + ': video mimes must be an array of strings');
72
72
  return false;
73
73
  }
74
74
 
75
75
  if (!Array.isArray(videoAdUnit.protocols) || videoAdUnit.protocols.length === 0) {
76
- utils.logWarn(BIDDER_CODE + ': video protocols must be an array of integers');
76
+ logWarn(BIDDER_CODE + ': video protocols must be an array of integers');
77
77
  return false;
78
78
  }
79
79
  }
@@ -97,8 +97,8 @@ export const spec = {
97
97
  bt = Math.min(window.PREBID_TIMEOUT, bt);
98
98
  }
99
99
 
100
- let referrer = utils.deepAccess(bidderRequest, 'refererInfo.referer');
101
- let page = utils.deepAccess(bidderRequest, 'refererInfo.canonicalUrl') || config.getConfig('pageUrl') || utils.deepAccess(window, 'location.href');
100
+ let referrer = deepAccess(bidderRequest, 'refererInfo.referer');
101
+ let page = deepAccess(bidderRequest, 'refererInfo.canonicalUrl') || config.getConfig('pageUrl') || deepAccess(window, 'location.href');
102
102
 
103
103
  // add common parameters
104
104
  let beaconParams = {
@@ -110,10 +110,10 @@ export const spec = {
110
110
  uh: window.screen.height,
111
111
  dpr: ratio,
112
112
  bt: bt,
113
- isinframe: utils.inIframe(),
114
- cookies: utils.checkCookieSupport() ? '1' : '0',
113
+ isinframe: inIframe(),
114
+ cookies: checkCookieSupport() ? '1' : '0',
115
115
  tz: dt.getTimezoneOffset(),
116
- dt: utils.timestamp(),
116
+ dt: timestamp(),
117
117
  iob: iobavailable ? '1' : '0',
118
118
  pbjs: '$prebid.version$',
119
119
  rndid: Math.floor(Math.random() * (999999 - 100000 + 1)) + 100000,
@@ -126,19 +126,19 @@ export const spec = {
126
126
  beaconParams.gdpr_consent = bidderRequest.gdprConsent.consentString;
127
127
  }
128
128
 
129
- if (utils.isStr(utils.deepAccess(validBidRequests, '0.userId.pubcid'))) {
129
+ if (isStr(deepAccess(validBidRequests, '0.userId.pubcid'))) {
130
130
  beaconParams.pubcid = validBidRequests[0].userId.pubcid;
131
131
  }
132
132
 
133
- if (utils.isStr(utils.deepAccess(validBidRequests, '0.userId.tdid'))) {
133
+ if (isStr(deepAccess(validBidRequests, '0.userId.tdid'))) {
134
134
  beaconParams.tdid = validBidRequests[0].userId.tdid;
135
135
  }
136
136
 
137
- if (utils.isStr(utils.deepAccess(validBidRequests, '0.userId.id5id.uid'))) {
137
+ if (isStr(deepAccess(validBidRequests, '0.userId.id5id.uid'))) {
138
138
  beaconParams.id5id = validBidRequests[0].userId.id5id.uid;
139
139
  }
140
140
 
141
- if (utils.isStr(utils.deepAccess(validBidRequests, '0.userId.idl_env'))) {
141
+ if (isStr(deepAccess(validBidRequests, '0.userId.idl_env'))) {
142
142
  beaconParams.idl_env = validBidRequests[0].userId.idl_env;
143
143
  }
144
144
 
@@ -156,14 +156,14 @@ export const spec = {
156
156
  let bidfloors = [];
157
157
 
158
158
  validBidRequests.forEach((bid, index) => {
159
- adZoneIds.push(utils.getBidIdParameter('adzoneid', bid.params));
159
+ adZoneIds.push(getBidIdParameter('adzoneid', bid.params));
160
160
  prebidBidIds.push(bid.bidId);
161
161
 
162
162
  let bidfloor = getFloor(bid);
163
163
  bidfloors.push(bidfloor);
164
164
 
165
165
  // copy all custom parameters impression level parameters not supported above
166
- let customBidParams = utils.getBidIdParameter('custom', bid.params) || {}
166
+ let customBidParams = getBidIdParameter('custom', bid.params) || {}
167
167
  if (customBidParams) {
168
168
  Object.keys(customBidParams)
169
169
  .filter(param => includes(USER_PARAMS_BID, param))
@@ -171,7 +171,7 @@ export const spec = {
171
171
  }
172
172
 
173
173
  if (isBannerRequest(bid)) {
174
- sizes.push(utils.parseSizesInput(bid.mediaTypes.banner.sizes).join('|'));
174
+ sizes.push(parseSizesInput(bid.mediaTypes.banner.sizes).join('|'));
175
175
  }
176
176
 
177
177
  if (isNativeRequest(bid)) {
@@ -185,10 +185,10 @@ export const spec = {
185
185
  .forEach(param => beaconParams['video.' + param + '.' + index] = encodeURIComponent(bid.params.video[param]))
186
186
  }
187
187
  // copy video standarized params
188
- beaconParams['video.context' + '.' + index] = utils.deepAccess(bid, 'mediaTypes.video.context');
189
- sizes.push(utils.parseSizesInput(bid.mediaTypes.video.playerSize).join('|'));
190
- beaconParams['video.mimes' + '.' + index] = utils.deepAccess(bid, 'mediaTypes.video.mimes').join(',');
191
- beaconParams['video.protocols' + '.' + index] = utils.deepAccess(bid, 'mediaTypes.video.protocols').join(',');
188
+ beaconParams['video.context' + '.' + index] = deepAccess(bid, 'mediaTypes.video.context');
189
+ sizes.push(parseSizesInput(bid.mediaTypes.video.playerSize).join('|'));
190
+ beaconParams['video.mimes' + '.' + index] = deepAccess(bid, 'mediaTypes.video.mimes').join(',');
191
+ beaconParams['video.protocols' + '.' + index] = deepAccess(bid, 'mediaTypes.video.protocols').join(',');
192
192
  }
193
193
  })
194
194
 
@@ -197,14 +197,14 @@ export const spec = {
197
197
  beaconParams.prebidBidIds = prebidBidIds.join(',');
198
198
  beaconParams.bidfloors = bidfloors.join(',');
199
199
 
200
- let adxcgRequestUrl = utils.buildUrl({
200
+ let adxcgRequestUrl = buildUrl({
201
201
  protocol: 'https',
202
202
  hostname: 'hbps.adxcg.net',
203
203
  pathname: '/get/adi',
204
204
  search: beaconParams
205
205
  });
206
206
 
207
- utils.logMessage(`calling adi adxcg`);
207
+ logMessage(`calling adi adxcg`);
208
208
  return {
209
209
  contentType: 'text/plain',
210
210
  method: 'GET',
@@ -220,11 +220,11 @@ export const spec = {
220
220
  */
221
221
  interpretResponse:
222
222
  function (serverResponse) {
223
- utils.logMessage(`interpretResponse adxcg`);
223
+ logMessage(`interpretResponse adxcg`);
224
224
  let bidsAll = [];
225
225
 
226
- if (!serverResponse || !serverResponse.body || !utils.isArray(serverResponse.body.seatbid) || !serverResponse.body.seatbid.length) {
227
- utils.logWarn(BIDDER_CODE + ': empty bid response');
226
+ if (!serverResponse || !serverResponse.body || !isArray(serverResponse.body.seatbid) || !serverResponse.body.seatbid.length) {
227
+ logWarn(BIDDER_CODE + ': empty bid response');
228
228
  return bidsAll;
229
229
  }
230
230
 
@@ -256,28 +256,28 @@ export const spec = {
256
256
  bid.mediaType = 'native';
257
257
  bid.native = parseNative(JSON.parse(serverResponseOneItem.adm));
258
258
  } else {
259
- utils.logWarn(BIDDER_CODE + ': unknown or undefined crType');
259
+ logWarn(BIDDER_CODE + ': unknown or undefined crType');
260
260
  }
261
261
 
262
262
  // prebid 4.0 meta taxonomy
263
- if (utils.isArray(serverResponseOneItem.adomain)) {
264
- utils.deepSetValue(bid, 'meta.advertiserDomains', serverResponseOneItem.adomain);
263
+ if (isArray(serverResponseOneItem.adomain)) {
264
+ deepSetValue(bid, 'meta.advertiserDomains', serverResponseOneItem.adomain);
265
265
  }
266
- if (utils.isArray(serverResponseOneItem.cat)) {
267
- utils.deepSetValue(bid, 'meta.secondaryCatIds', serverResponseOneItem.cat);
266
+ if (isArray(serverResponseOneItem.cat)) {
267
+ deepSetValue(bid, 'meta.secondaryCatIds', serverResponseOneItem.cat);
268
268
  }
269
- if (utils.isPlainObject(serverResponseOneItem.ext)) {
270
- if (utils.isStr(serverResponseOneItem.ext.advertiser_id)) {
271
- utils.deepSetValue(bid, 'meta.mediaType', serverResponseOneItem.ext.mediaType);
269
+ if (isPlainObject(serverResponseOneItem.ext)) {
270
+ if (isStr(serverResponseOneItem.ext.advertiser_id)) {
271
+ deepSetValue(bid, 'meta.mediaType', serverResponseOneItem.ext.mediaType);
272
272
  }
273
- if (utils.isStr(serverResponseOneItem.ext.advertiser_id)) {
274
- utils.deepSetValue(bid, 'meta.advertiserId', serverResponseOneItem.ext.advertiser_id);
273
+ if (isStr(serverResponseOneItem.ext.advertiser_id)) {
274
+ deepSetValue(bid, 'meta.advertiserId', serverResponseOneItem.ext.advertiser_id);
275
275
  }
276
- if (utils.isStr(serverResponseOneItem.ext.advertiser_name)) {
277
- utils.deepSetValue(bid, 'meta.advertiserName', serverResponseOneItem.ext.advertiser_name);
276
+ if (isStr(serverResponseOneItem.ext.advertiser_name)) {
277
+ deepSetValue(bid, 'meta.advertiserName', serverResponseOneItem.ext.advertiser_name);
278
278
  }
279
- if (utils.isStr(serverResponseOneItem.ext.agency_name)) {
280
- utils.deepSetValue(bid, 'meta.agencyName', serverResponseOneItem.ext.agency_name);
279
+ if (isStr(serverResponseOneItem.ext.agency_name)) {
280
+ deepSetValue(bid, 'meta.agencyName', serverResponseOneItem.ext.agency_name);
281
281
  }
282
282
  }
283
283
  bidsAll.push(bid)
@@ -288,7 +288,7 @@ export const spec = {
288
288
 
289
289
  onBidWon: (bid) => {
290
290
  if (bid.burl) {
291
- utils.triggerPixel(utils.replaceAuctionPrice(bid.burl, bid.originalCpm));
291
+ triggerPixel(replaceAuctionPrice(bid.burl, bid.originalCpm));
292
292
  }
293
293
  },
294
294
 
@@ -304,14 +304,14 @@ export const spec = {
304
304
  cn: timeoutData.timeout,
305
305
  aud: timeoutData.auctionId,
306
306
  };
307
- let adxcgRequestUrl = utils.buildUrl({
307
+ let adxcgRequestUrl = buildUrl({
308
308
  protocol: 'https',
309
309
  hostname: 'hbps.adxcg.net',
310
310
  pathname: '/event/timeout.gif',
311
311
  search: beaconParams
312
312
  });
313
- utils.logWarn(BIDDER_CODE + ': onTimeout called');
314
- utils.triggerPixel(adxcgRequestUrl);
313
+ logWarn(BIDDER_CODE + ': onTimeout called');
314
+ triggerPixel(adxcgRequestUrl);
315
315
  },
316
316
 
317
317
  getUserSyncs: function (syncOptions, serverResponses, gdprConsent) {
@@ -336,20 +336,20 @@ export const spec = {
336
336
  }
337
337
 
338
338
  function isVideoRequest(bid) {
339
- return bid.mediaType === 'video' || !!utils.deepAccess(bid, 'mediaTypes.video');
339
+ return bid.mediaType === 'video' || !!deepAccess(bid, 'mediaTypes.video');
340
340
  }
341
341
 
342
342
  function isBannerRequest(bid) {
343
- return bid.mediaType === 'banner' || !!utils.deepAccess(bid, 'mediaTypes.banner');
343
+ return bid.mediaType === 'banner' || !!deepAccess(bid, 'mediaTypes.banner');
344
344
  }
345
345
 
346
346
  function isNativeRequest(bid) {
347
- return bid.mediaType === 'native' || !!utils.deepAccess(bid, 'mediaTypes.native');
347
+ return bid.mediaType === 'native' || !!deepAccess(bid, 'mediaTypes.native');
348
348
  }
349
349
 
350
350
  function getFloor(bid) {
351
- if (!utils.isFn(bid.getFloor)) {
352
- return utils.deepAccess(bid, 'params.floor', DEFAULT_MIN_FLOOR);
351
+ if (!isFn(bid.getFloor)) {
352
+ return deepAccess(bid, 'params.floor', DEFAULT_MIN_FLOOR);
353
353
  }
354
354
 
355
355
  try {
@@ -361,7 +361,7 @@ function getFloor(bid) {
361
361
  });
362
362
  return floor.floor;
363
363
  } catch (e) {
364
- utils.logWarn(BIDDER_CODE + ': call to getFloor failed:' + e.message);
364
+ logWarn(BIDDER_CODE + ': call to getFloor failed:' + e.message);
365
365
  return DEFAULT_MIN_FLOOR;
366
366
  }
367
367
  }
@@ -1,8 +1,8 @@
1
+ import { logError, logInfo, deepClone } from '../src/utils.js';
1
2
  import { ajax } from '../src/ajax.js';
2
3
  import adapter from '../src/AnalyticsAdapter.js';
3
4
  import adapterManager from '../src/adapterManager.js';
4
5
  import CONSTANTS from '../src/constants.json';
5
- import * as utils from '../src/utils.js';
6
6
  import includes from 'core-js-pure/features/array/includes.js';
7
7
 
8
8
  const analyticsType = 'endpoint';
@@ -95,7 +95,7 @@ function auctionInit(args) {
95
95
 
96
96
  completeObject.auction_id = args.auctionId;
97
97
  completeObject.publisher_id = adxpremiumAnalyticsAdapter.initOptions.pubId;
98
- try { completeObject.referer = encodeURI(args.bidderRequests[0].refererInfo.referer.split('?')[0]); } catch (e) { utils.logError('AdxPremium Analytics - ' + e.message); }
98
+ try { completeObject.referer = encodeURI(args.bidderRequests[0].refererInfo.referer.split('?')[0]); } catch (e) { logError('AdxPremium Analytics - ' + e.message); }
99
99
  if (args.adUnitCodes && args.adUnitCodes.length > 0) {
100
100
  elementIds = args.adUnitCodes;
101
101
  }
@@ -140,20 +140,20 @@ function bidWon(args) {
140
140
  if (requestDelivered) {
141
141
  if (completeObject.events[eventIndex]) {
142
142
  // do the upgrade
143
- utils.logInfo('AdxPremium Analytics - Upgrading request');
143
+ logInfo('AdxPremium Analytics - Upgrading request');
144
144
  completeObject.events[eventIndex].is_winning = true;
145
145
  completeObject.events[eventIndex].is_upgrade = true;
146
- upgradedObject = utils.deepClone(completeObject);
146
+ upgradedObject = deepClone(completeObject);
147
147
  upgradedObject.events = [completeObject.events[eventIndex]];
148
148
  sendEvent(upgradedObject); // send upgrade
149
149
  } else {
150
- utils.logInfo('AdxPremium Analytics - CANNOT FIND INDEX FOR REQUEST ' + args.requestId);
150
+ logInfo('AdxPremium Analytics - CANNOT FIND INDEX FOR REQUEST ' + args.requestId);
151
151
  }
152
152
  } else {
153
153
  completeObject.events[eventIndex].is_winning = true;
154
154
  }
155
155
  } else {
156
- utils.logInfo('AdxPremium Analytics - Response not found, creating new one.');
156
+ logInfo('AdxPremium Analytics - Response not found, creating new one.');
157
157
  let tmpObject = {
158
158
  type: 'RESPONSE',
159
159
  bidder_code: args.bidderCode,
@@ -167,14 +167,14 @@ function bidWon(args) {
167
167
  is_winning: true,
168
168
  is_lost: true
169
169
  };
170
- let lostObject = utils.deepClone(completeObject);
170
+ let lostObject = deepClone(completeObject);
171
171
  lostObject.events = [tmpObject];
172
172
  sendEvent(lostObject); // send lost object
173
173
  }
174
174
  }
175
175
 
176
176
  function bidTimeout(args) {
177
- let timeoutObject = utils.deepClone(completeObject);
177
+ let timeoutObject = deepClone(completeObject);
178
178
  timeoutObject.events = [];
179
179
  let usedRequestIds = [];
180
180
 
@@ -191,12 +191,12 @@ function bidTimeout(args) {
191
191
 
192
192
  if (timeoutObject.events.length > 0) {
193
193
  sendEvent(timeoutObject); // send timeouted
194
- utils.logInfo('AdxPremium Analytics - Sending timeouted requests');
194
+ logInfo('AdxPremium Analytics - Sending timeouted requests');
195
195
  }
196
196
  }
197
197
 
198
198
  function auctionEnd(args) {
199
- utils.logInfo('AdxPremium Analytics - Auction Ended at ' + Date.now());
199
+ logInfo('AdxPremium Analytics - Auction Ended at ' + Date.now());
200
200
  if (timeoutBased) { setTimeout(function () { requestSent = true; sendEvent(completeObject); }, 3500); } else { sendEventFallback(); }
201
201
  }
202
202
 
@@ -212,22 +212,22 @@ function deviceType() {
212
212
  }
213
213
 
214
214
  function clearSlot(elementId) {
215
- if (includes(elementIds, elementId)) { elementIds.splice(elementIds.indexOf(elementId), 1); utils.logInfo('AdxPremium Analytics - Done with: ' + elementId); }
215
+ if (includes(elementIds, elementId)) { elementIds.splice(elementIds.indexOf(elementId), 1); logInfo('AdxPremium Analytics - Done with: ' + elementId); }
216
216
  if (elementIds.length == 0 && !requestSent && !timeoutBased) {
217
217
  requestSent = true;
218
218
  sendEvent(completeObject);
219
- utils.logInfo('AdxPremium Analytics - Everything ready');
219
+ logInfo('AdxPremium Analytics - Everything ready');
220
220
  }
221
221
  }
222
222
 
223
223
  export function testSend() {
224
224
  sendEvent(completeObject);
225
- utils.logInfo('AdxPremium Analytics - Sending without any conditions, used for testing');
225
+ logInfo('AdxPremium Analytics - Sending without any conditions, used for testing');
226
226
  }
227
227
 
228
228
  function sendEventFallback() {
229
229
  setTimeout(function () {
230
- if (!requestSent) { requestSent = true; sendEvent(completeObject); utils.logInfo('AdxPremium Analytics - Sending event using fallback method.'); }
230
+ if (!requestSent) { requestSent = true; sendEvent(completeObject); logInfo('AdxPremium Analytics - Sending event using fallback method.'); }
231
231
  }, 2000);
232
232
  }
233
233
 
@@ -241,11 +241,11 @@ function sendEvent(completeObject) {
241
241
  if (adxpremiumAnalyticsAdapter.initOptions.sid) {
242
242
  ajaxEndpoint = 'https://' + adxpremiumAnalyticsAdapter.initOptions.sid + '.adxpremium.services/graphql'
243
243
  }
244
- ajax(ajaxEndpoint, function () { utils.logInfo('AdxPremium Analytics - Sending complete events at ' + Date.now()) }, dataToSend, {
244
+ ajax(ajaxEndpoint, function () { logInfo('AdxPremium Analytics - Sending complete events at ' + Date.now()) }, dataToSend, {
245
245
  contentType: 'application/json',
246
246
  method: 'POST'
247
247
  });
248
- } catch (err) { utils.logError('AdxPremium Analytics - Sending event error: ' + err); }
248
+ } catch (err) { logError('AdxPremium Analytics - Sending event error: ' + err); }
249
249
  }
250
250
 
251
251
  // save the base class function
@@ -256,7 +256,7 @@ adxpremiumAnalyticsAdapter.enableAnalytics = function (config) {
256
256
  adxpremiumAnalyticsAdapter.initOptions = config.options;
257
257
 
258
258
  if (!config.options.pubId) {
259
- utils.logError('AdxPremium Analytics - Publisher ID (pubId) option is not defined. Analytics won\'t work');
259
+ logError('AdxPremium Analytics - Publisher ID (pubId) option is not defined. Analytics won\'t work');
260
260
  return;
261
261
  }
262
262
 
@@ -1,4 +1,4 @@
1
- import * as utils from '../src/utils.js';
1
+ import { deepAccess, buildUrl, parseSizesInput } from '../src/utils.js';
2
2
  import { registerBidder } from '../src/adapters/bidderFactory.js';
3
3
  import { config } from '../src/config.js';
4
4
  import find from 'core-js-pure/features/array/find.js';
@@ -175,11 +175,11 @@ function getCanonicalUrl() {
175
175
 
176
176
  /* Get mediatype from bidRequest */
177
177
  function getMediatype(bidRequest) {
178
- if (utils.deepAccess(bidRequest, 'mediaTypes.video')) {
178
+ if (deepAccess(bidRequest, 'mediaTypes.video')) {
179
179
  return VIDEO;
180
- } else if (utils.deepAccess(bidRequest, 'mediaTypes.banner')) {
180
+ } else if (deepAccess(bidRequest, 'mediaTypes.banner')) {
181
181
  return BANNER;
182
- } else if (utils.deepAccess(bidRequest, 'mediaTypes.native')) {
182
+ } else if (deepAccess(bidRequest, 'mediaTypes.native')) {
183
183
  return NATIVE;
184
184
  }
185
185
  }
@@ -210,7 +210,7 @@ function getPageRefreshed() {
210
210
  /* Create endpoint url */
211
211
  function createEndpoint(bidRequests, bidderRequest) {
212
212
  let host = getHostname(bidRequests);
213
- return utils.buildUrl({
213
+ return buildUrl({
214
214
  protocol: 'https',
215
215
  host: `${DEFAULT_DC}${host}.omnitagjs.com`,
216
216
  pathname: '/hb-api/prebid/v1',
@@ -260,7 +260,7 @@ function getSizeArray(bid) {
260
260
  }
261
261
  }
262
262
 
263
- return utils.parseSizesInput(inputSize);
263
+ return parseSizesInput(inputSize);
264
264
  }
265
265
 
266
266
  /* Get parsed size from request size */
@@ -342,7 +342,7 @@ function getVideoAd(response) {
342
342
  var adJson = {};
343
343
  if (typeof response.Ad === 'string') {
344
344
  adJson = JSON.parse(response.Ad.match(/\/\*PREBID\*\/(.*)\/\*PREBID\*\//)[1]);
345
- return utils.deepAccess(adJson, 'Content.MainVideo.Vast');
345
+ return deepAccess(adJson, 'Content.MainVideo.Vast');
346
346
  }
347
347
  }
348
348
 
@@ -404,7 +404,7 @@ function getNativeAssets(response, nativeConfig) {
404
404
  imgSize[1] = response.Height || 250;
405
405
  }
406
406
 
407
- const url = getImageUrl(adJson, utils.deepAccess(adJson, 'Content.Preview.Thumbnail.Image'), imgSize[0], imgSize[1]);
407
+ const url = getImageUrl(adJson, deepAccess(adJson, 'Content.Preview.Thumbnail.Image'), imgSize[0], imgSize[1]);
408
408
  if (url) {
409
409
  native[key] = {
410
410
  url,
@@ -422,7 +422,7 @@ function getNativeAssets(response, nativeConfig) {
422
422
  iconSize[1] = 50;
423
423
  }
424
424
 
425
- const icurl = getImageUrl(adJson, utils.deepAccess(adJson, 'Content.Preview.Sponsor.Logo.Resource'), iconSize[0], iconSize[1]);
425
+ const icurl = getImageUrl(adJson, deepAccess(adJson, 'Content.Preview.Sponsor.Logo.Resource'), iconSize[0], iconSize[1]);
426
426
 
427
427
  if (url) {
428
428
  native[key] = {
@@ -433,10 +433,10 @@ function getNativeAssets(response, nativeConfig) {
433
433
  }
434
434
  break;
435
435
  case 'privacyIcon':
436
- native[key] = getImageUrl(adJson, utils.deepAccess(adJson, 'Content.Preview.Credit.Logo.Resource'), 25, 25);
436
+ native[key] = getImageUrl(adJson, deepAccess(adJson, 'Content.Preview.Credit.Logo.Resource'), 25, 25);
437
437
  break;
438
438
  case 'privacyLink':
439
- native[key] = utils.deepAccess(adJson, 'Content.Preview.Credit.Url');
439
+ native[key] = deepAccess(adJson, 'Content.Preview.Credit.Url');
440
440
  break;
441
441
  }
442
442
  });
@@ -0,0 +1,166 @@
1
+ import includes from 'core-js-pure/features/array/includes.js'
2
+ import { registerBidder } from '../src/adapters/bidderFactory.js'
3
+ import { Renderer } from '../src/Renderer.js'
4
+ import { BANNER, VIDEO } from '../src/mediaTypes.js'
5
+
6
+ export const IS_DEV = location.hostname === 'localhost'
7
+ export const BIDDER_CODE = 'afp'
8
+ export const SSP_ENDPOINT = 'https://ssp.afp.ai/api/prebid'
9
+ export const REQUEST_METHOD = 'POST'
10
+ export const TEST_PAGE_URL = 'https://rtbinsight.ru/smiert-bolshikh-dannykh-kto-na-novienkogo/'
11
+ const SDK_PATH = 'https://cdn.afp.ai/ssp/sdk.js?auto_initialization=false&deploy_to_parent_window=true'
12
+ const TTL = 60
13
+ export const IN_IMAGE_BANNER_TYPE = 'In-image'
14
+ export const IN_IMAGE_MAX_BANNER_TYPE = 'In-image Max'
15
+ export const IN_CONTENT_BANNER_TYPE = 'In-content Banner'
16
+ export const IN_CONTENT_VIDEO_TYPE = 'In-content Video'
17
+ export const OUT_CONTENT_VIDEO_TYPE = 'Out-content Video'
18
+ export const IN_CONTENT_STORY_TYPE = 'In-content Stories'
19
+ export const ACTION_SCROLLER_TYPE = 'Action Scroller'
20
+ export const ACTION_SCROLLER_LIGHT_TYPE = 'Action Scroller Light'
21
+ export const JUST_BANNER_TYPE = 'Just Banner'
22
+
23
+ export const mediaTypeByPlaceType = {
24
+ [IN_IMAGE_BANNER_TYPE]: BANNER,
25
+ [IN_IMAGE_MAX_BANNER_TYPE]: BANNER,
26
+ [IN_CONTENT_BANNER_TYPE]: BANNER,
27
+ [IN_CONTENT_STORY_TYPE]: BANNER,
28
+ [ACTION_SCROLLER_TYPE]: BANNER,
29
+ [ACTION_SCROLLER_LIGHT_TYPE]: BANNER,
30
+ [JUST_BANNER_TYPE]: BANNER,
31
+ [IN_CONTENT_VIDEO_TYPE]: VIDEO,
32
+ [OUT_CONTENT_VIDEO_TYPE]: VIDEO,
33
+ }
34
+
35
+ const wrapAd = (dataToCreatePlace) => {
36
+ return `<!DOCTYPE html>
37
+ <html lang="en">
38
+ <head>
39
+ <meta charset="UTF-8">
40
+ <style>html, body {width: 100%; height: 100%; margin: 0;}</style>
41
+ <script src="${SDK_PATH}"></script>
42
+ </head>
43
+ <body>
44
+ <script>
45
+ window.afp.createPlaceByData(JSON.parse(decodeURIComponent("${encodeURIComponent(JSON.stringify(dataToCreatePlace))}")))
46
+ </script>
47
+ </body>
48
+ </html>`
49
+ }
50
+
51
+ const bidRequestMap = {}
52
+
53
+ const createRenderer = (bid, dataToCreatePlace) => {
54
+ const renderer = new Renderer({
55
+ targetId: bid.adUnitCode,
56
+ url: SDK_PATH,
57
+ callback() {
58
+ renderer.loaded = true
59
+ window.afp.createPlaceByData(dataToCreatePlace)
60
+ }
61
+ })
62
+
63
+ return renderer
64
+ }
65
+
66
+ export const spec = {
67
+ code: BIDDER_CODE,
68
+ supportedMediaTypes: [BANNER, VIDEO],
69
+ isBidRequestValid({mediaTypes, params}) {
70
+ if (typeof params !== 'object' || typeof mediaTypes !== 'object') {
71
+ return false
72
+ }
73
+
74
+ const {placeId, placeType, imageUrl, imageWidth, imageHeight} = params
75
+ const media = mediaTypes[mediaTypeByPlaceType[placeType]]
76
+
77
+ if (placeId && media) {
78
+ if (mediaTypeByPlaceType[placeType] === VIDEO) {
79
+ if (!media.playerSize) {
80
+ return false
81
+ }
82
+ } else if (mediaTypeByPlaceType[placeType] === BANNER) {
83
+ if (!media.sizes) {
84
+ return false
85
+ }
86
+ }
87
+ if (includes([IN_IMAGE_BANNER_TYPE, IN_IMAGE_MAX_BANNER_TYPE], placeType)) {
88
+ if (imageUrl && imageWidth && imageHeight) {
89
+ return true
90
+ }
91
+ } else {
92
+ return true
93
+ }
94
+ }
95
+ return false
96
+ },
97
+ buildRequests(validBidRequests, {refererInfo, gdprConsent}) {
98
+ const payload = {
99
+ pageUrl: IS_DEV ? TEST_PAGE_URL : refererInfo.referer,
100
+ gdprConsent: gdprConsent,
101
+ bidRequests: validBidRequests.map(validBidRequest => {
102
+ const {bidId, transactionId, sizes, params: {
103
+ placeId, placeType, imageUrl, imageWidth, imageHeight
104
+ }} = validBidRequest
105
+ bidRequestMap[bidId] = validBidRequest
106
+ const bidRequest = {
107
+ bidId,
108
+ transactionId,
109
+ sizes,
110
+ placeId,
111
+ }
112
+ if (includes([IN_IMAGE_BANNER_TYPE, IN_IMAGE_MAX_BANNER_TYPE], placeType)) {
113
+ Object.assign(bidRequest, {
114
+ imageUrl,
115
+ imageWidth: Math.floor(imageWidth),
116
+ imageHeight: Math.floor(imageHeight),
117
+ })
118
+ }
119
+ return bidRequest
120
+ })
121
+ }
122
+
123
+ return {
124
+ method: REQUEST_METHOD,
125
+ url: SSP_ENDPOINT,
126
+ data: payload,
127
+ options: {
128
+ contentType: 'application/json'
129
+ }
130
+ }
131
+ },
132
+ interpretResponse(serverResponse) {
133
+ let bids = serverResponse.body && serverResponse.body.bids
134
+ bids = Array.isArray(bids) ? bids : []
135
+
136
+ return bids.map(({bidId, cpm, width, height, creativeId, currency, netRevenue, adSettings, placeSettings}, index) => {
137
+ const bid = {
138
+ requestId: bidId,
139
+ cpm,
140
+ width,
141
+ height,
142
+ creativeId,
143
+ currency,
144
+ netRevenue,
145
+ meta: {
146
+ mediaType: mediaTypeByPlaceType[placeSettings.placeType],
147
+ },
148
+ ttl: TTL
149
+ }
150
+
151
+ const bidRequest = bidRequestMap[bidId]
152
+ const placeContainer = bidRequest.params.placeContainer
153
+ const dataToCreatePlace = { adSettings, placeSettings, placeContainer, isPrebid: true }
154
+
155
+ if (mediaTypeByPlaceType[placeSettings.placeType] === BANNER) {
156
+ bid.ad = wrapAd(dataToCreatePlace)
157
+ } else if (mediaTypeByPlaceType[placeSettings.placeType] === VIDEO) {
158
+ bid.vastXml = adSettings.content
159
+ bid.renderer = createRenderer(bid, dataToCreatePlace)
160
+ }
161
+ return bid
162
+ })
163
+ }
164
+ }
165
+
166
+ registerBidder(spec);