prebid.js 7.8.0 → 7.11.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 (483) hide show
  1. package/README.md +0 -2
  2. package/RELEASE_SCHEDULE.md +1 -1
  3. package/allowedModules.js +3 -0
  4. package/babelConfig.js +10 -4
  5. package/dist/33acrossBidAdapter.js +1 -1
  6. package/dist/adWMGAnalyticsAdapter.js +1 -1
  7. package/dist/adagioAnalyticsAdapter.js +1 -1
  8. package/dist/adagioBidAdapter.js +1 -1
  9. package/dist/adbookpspBidAdapter.js +1 -1
  10. package/dist/adgenerationBidAdapter.js +1 -1
  11. package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
  12. package/dist/adkernelBidAdapter.js +1 -1
  13. package/dist/adlooxAdServerVideo.js +1 -1
  14. package/dist/adlooxAnalyticsAdapter.js +1 -1
  15. package/dist/adlooxRtdProvider.js +1 -1
  16. package/dist/adnuntiusBidAdapter.js +1 -1
  17. package/dist/adomikAnalyticsAdapter.js +1 -1
  18. package/dist/adrelevantisBidAdapter.js +1 -1
  19. package/dist/adtelligentBidAdapter.js +1 -1
  20. package/dist/adtrgtmeBidAdapter.js +1 -0
  21. package/dist/adxcgAnalyticsAdapter.js +1 -1
  22. package/dist/adxcgBidAdapter.js +1 -1
  23. package/dist/adxpremiumAnalyticsAdapter.js +1 -1
  24. package/dist/adyoulikeBidAdapter.js +1 -1
  25. package/dist/ajaBidAdapter.js +1 -1
  26. package/dist/amxBidAdapter.js +1 -1
  27. package/dist/amxIdSystem.js +1 -1
  28. package/dist/analyticsAdapter.js +1 -0
  29. package/dist/andBeyondMediaBidAdapter.js +1 -0
  30. package/dist/aniviewBidAdapter.js +1 -1
  31. package/dist/appierAnalyticsAdapter.js +1 -1
  32. package/dist/appnexusBidAdapter.js +1 -1
  33. package/dist/asoBidAdapter.js +1 -1
  34. package/dist/atsAnalyticsAdapter.js +1 -1
  35. package/dist/audiencerunBidAdapter.js +1 -1
  36. package/dist/axonixBidAdapter.js +1 -1
  37. package/dist/bidglassBidAdapter.js +1 -1
  38. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  39. package/dist/big-richmediaBidAdapter.js +1 -1
  40. package/dist/bluebillywigBidAdapter.js +1 -1
  41. package/dist/boldwinBidAdapter.js +1 -1
  42. package/dist/bridgewellBidAdapter.js +1 -1
  43. package/dist/brightMountainMediaBidAdapter.js +1 -1
  44. package/dist/browsiRtdProvider.js +1 -1
  45. package/dist/byDataAnalyticsAdapter.js +1 -1
  46. package/dist/c1xBidAdapter.js +1 -0
  47. package/dist/cleanioRtdProvider.js +1 -1
  48. package/dist/concertAnalyticsAdapter.js +1 -1
  49. package/dist/concertBidAdapter.js +1 -1
  50. package/dist/connectadBidAdapter.js +1 -1
  51. package/dist/consentManagementUsp.js +1 -1
  52. package/dist/consumableBidAdapter.js +1 -1
  53. package/dist/conversantBidAdapter.js +1 -1
  54. package/dist/cpmstarBidAdapter.js +1 -1
  55. package/dist/craftBidAdapter.js +1 -1
  56. package/dist/criteoBidAdapter.js +1 -1
  57. package/dist/datablocksAnalyticsAdapter.js +1 -1
  58. package/dist/datawrkzBidAdapter.js +1 -0
  59. package/dist/debugging-standalone.js +1 -1
  60. package/dist/dependencies.json +171 -0
  61. package/dist/dspxBidAdapter.js +1 -1
  62. package/dist/eplanningAnalyticsAdapter.js +1 -1
  63. package/dist/eplanningBidAdapter.js +1 -1
  64. package/dist/finativeBidAdapter.js +1 -1
  65. package/dist/fintezaAnalyticsAdapter.js +1 -1
  66. package/dist/freewheel-sspBidAdapter.js +1 -1
  67. package/dist/getOrigin.js +1 -1
  68. package/dist/glimpseBidAdapter.js +1 -1
  69. package/dist/gmosspBidAdapter.js +1 -1
  70. package/dist/goldbachBidAdapter.js +1 -1
  71. package/dist/gridBidAdapter.js +1 -1
  72. package/dist/gridNMBidAdapter.js +1 -1
  73. package/dist/gumgumBidAdapter.js +1 -1
  74. package/dist/h12mediaBidAdapter.js +1 -1
  75. package/dist/hadronAnalyticsAdapter.js +1 -1
  76. package/dist/id5AnalyticsAdapter.js +1 -1
  77. package/dist/id5IdSystem.js +1 -1
  78. package/dist/impactifyBidAdapter.js +1 -1
  79. package/dist/improvedigitalBidAdapter.js +1 -1
  80. package/dist/imuIdSystem.js +1 -1
  81. package/dist/inmarBidAdapter.js +1 -1
  82. package/dist/insticatorBidAdapter.js +1 -1
  83. package/dist/invisiblyAnalyticsAdapter.js +1 -1
  84. package/dist/ixBidAdapter.js +1 -1
  85. package/dist/jixieBidAdapter.js +1 -1
  86. package/dist/justpremiumBidAdapter.js +1 -1
  87. package/dist/kargoAnalyticsAdapter.js +1 -1
  88. package/dist/kargoBidAdapter.js +1 -1
  89. package/dist/konduitAnalyticsAdapter.js +1 -1
  90. package/dist/kueezBidAdapter.js +1 -1
  91. package/dist/lassoBidAdapter.js +1 -1
  92. package/dist/livewrappedAnalyticsAdapter.js +1 -1
  93. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  94. package/dist/logicadBidAdapter.js +1 -1
  95. package/dist/loglyliftBidAdapter.js +1 -1
  96. package/dist/malltvAnalyticsAdapter.js +1 -1
  97. package/dist/marsmediaAnalyticsAdapter.js +1 -1
  98. package/dist/marsmediaBidAdapter.js +1 -1
  99. package/dist/mediafuseBidAdapter.js +1 -1
  100. package/dist/mediakeysBidAdapter.js +1 -1
  101. package/dist/medianetAnalyticsAdapter.js +1 -1
  102. package/dist/mediasquareBidAdapter.js +1 -1
  103. package/dist/mgidBidAdapter.js +1 -1
  104. package/dist/minutemediaBidAdapter.js +1 -1
  105. package/dist/nextMillenniumBidAdapter.js +1 -1
  106. package/dist/nobidBidAdapter.js +1 -1
  107. package/dist/not-for-prod/prebid.js +182 -176
  108. package/dist/oguryBidAdapter.js +1 -1
  109. package/dist/onetagBidAdapter.js +1 -1
  110. package/dist/ooloAnalyticsAdapter.js +1 -1
  111. package/dist/openxAnalyticsAdapter.js +1 -1
  112. package/dist/openxBidAdapter.js +1 -1
  113. package/dist/openxOrtbBidAdapter.js +1 -1
  114. package/dist/optimonAnalyticsAdapter.js +1 -1
  115. package/dist/outbrainBidAdapter.js +1 -1
  116. package/dist/ozoneBidAdapter.js +1 -1
  117. package/dist/parrableIdSystem.js +1 -1
  118. package/dist/pianoDmpAnalyticsAdapter.js +1 -1
  119. package/dist/pixfutureBidAdapter.js +1 -1
  120. package/dist/prebid-core.js +1 -1
  121. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  122. package/dist/publinkIdSystem.js +1 -1
  123. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  124. package/dist/pubmaticBidAdapter.js +1 -1
  125. package/dist/pubperfAnalyticsAdapter.js +1 -1
  126. package/dist/pubstackAnalyticsAdapter.js +1 -1
  127. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  128. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  129. package/dist/pulsepointAnalyticsAdapter.js +1 -1
  130. package/dist/pxyzBidAdapter.js +1 -1
  131. package/dist/quantcastBidAdapter.js +1 -1
  132. package/dist/readpeakBidAdapter.js +1 -1
  133. package/dist/realvuAnalyticsAdapter.js +1 -1
  134. package/dist/relaidoBidAdapter.js +1 -1
  135. package/dist/relevantAnalyticsAdapter.js +1 -1
  136. package/dist/rhythmoneBidAdapter.js +1 -1
  137. package/dist/riseBidAdapter.js +1 -1
  138. package/dist/rivrAnalyticsAdapter.js +1 -1
  139. package/dist/roxotAnalyticsAdapter.js +1 -1
  140. package/dist/rtbhouseBidAdapter.js +1 -1
  141. package/dist/rubiconAnalyticsAdapter.js +1 -1
  142. package/dist/rubiconBidAdapter.js +1 -1
  143. package/dist/scaleableAnalyticsAdapter.js +1 -1
  144. package/dist/seedingAllianceBidAdapter.js +1 -1
  145. package/dist/seedtagBidAdapter.js +1 -1
  146. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  147. package/dist/sharethroughBidAdapter.js +1 -1
  148. package/dist/shinezBidAdapter.js +1 -1
  149. package/dist/showheroes-bsBidAdapter.js +1 -1
  150. package/dist/sigmoidAnalyticsAdapter.js +1 -1
  151. package/dist/smaatoBidAdapter.js +1 -1
  152. package/dist/smartadserverBidAdapter.js +1 -1
  153. package/dist/smartxBidAdapter.js +1 -1
  154. package/dist/smilewantedBidAdapter.js +1 -1
  155. package/dist/snigelBidAdapter.js +1 -0
  156. package/dist/sonobiAnalyticsAdapter.js +1 -1
  157. package/dist/sonobiBidAdapter.js +1 -1
  158. package/dist/sovrnAnalyticsAdapter.js +1 -1
  159. package/dist/sovrnBidAdapter.js +1 -1
  160. package/dist/sspBCBidAdapter.js +1 -1
  161. package/dist/staqAnalyticsAdapter.js +1 -1
  162. package/dist/sublimeBidAdapter.js +1 -1
  163. package/dist/synacormediaBidAdapter.js +1 -1
  164. package/dist/tappxBidAdapter.js +1 -1
  165. package/dist/targetVideoBidAdapter.js +1 -1
  166. package/dist/teadsBidAdapter.js +1 -1
  167. package/dist/terceptAnalyticsAdapter.js +1 -1
  168. package/dist/trionBidAdapter.js +1 -1
  169. package/dist/tripleliftBidAdapter.js +1 -1
  170. package/dist/trustpidSystem.js +1 -1
  171. package/dist/ttdBidAdapter.js +1 -1
  172. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  173. package/dist/underdogmediaBidAdapter.js +1 -1
  174. package/dist/undertoneBidAdapter.js +1 -1
  175. package/dist/userId.js +1 -1
  176. package/dist/vidazooBidAdapter.js +1 -1
  177. package/dist/videobyteBidAdapter.js +1 -1
  178. package/dist/visxBidAdapter.js +1 -1
  179. package/dist/vuukleBidAdapter.js +1 -1
  180. package/dist/widespaceBidAdapter.js +1 -1
  181. package/dist/winrBidAdapter.js +1 -1
  182. package/dist/yahoosspBidAdapter.js +1 -1
  183. package/dist/yieldmoBidAdapter.js +1 -1
  184. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  185. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  186. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  187. package/dist/zeta_global_sspBidAdapter.js +1 -1
  188. package/gulpHelpers.js +22 -55
  189. package/gulpfile.js +12 -5
  190. package/integrationExamples/gpt/1plusXRtdProviderExample.html +2 -4
  191. package/integrationExamples/gpt/airgridRtdProvider_example.html +1 -4
  192. package/integrationExamples/gpt/amp/remote.html +1 -1
  193. package/integrationExamples/gpt/blueconicRtdProvider_example.html +2 -4
  194. package/integrationExamples/gpt/hadronRtdProvider_example.html +1 -3
  195. package/integrationExamples/gpt/inskin_example.html +1 -3
  196. package/integrationExamples/gpt/permutiveRtdProvider_example.html +1 -1
  197. package/integrationExamples/gpt/prebidServer_example.html +1 -3
  198. package/integrationExamples/gpt/serverbidServer_example.html +1 -3
  199. package/integrationExamples/gpt/userId_example.html +1 -3
  200. package/integrationExamples/postbid/oas/postbid-config.js +5 -5
  201. package/karma.conf.maker.js +2 -13
  202. package/libraries/LIBRARIES.md +5 -0
  203. package/{src → libraries/analyticsAdapter}/AnalyticsAdapter.js +5 -6
  204. package/{src/adapters/analytics → libraries/analyticsAdapter/examples}/example.js +1 -1
  205. package/{src/adapters/analytics → libraries/analyticsAdapter/examples}/example2.js +1 -1
  206. package/modules/.submodules.json +0 -12
  207. package/modules/1plusXRtdProvider.js +1 -1
  208. package/modules/33acrossBidAdapter.js +3 -3
  209. package/modules/adWMGAnalyticsAdapter.js +1 -1
  210. package/modules/adagioAnalyticsAdapter.js +1 -1
  211. package/modules/adagioBidAdapter.js +3 -4
  212. package/modules/adgenerationBidAdapter.js +1 -1
  213. package/modules/adkernelAdnAnalyticsAdapter.js +1 -1
  214. package/modules/adkernelBidAdapter.js +2 -1
  215. package/modules/adlooxAnalyticsAdapter.js +1 -1
  216. package/modules/admixerBidAdapter.js +1 -1
  217. package/modules/adnowBidAdapter.js +1 -1
  218. package/modules/adnuntiusBidAdapter.js +3 -1
  219. package/modules/adomikAnalyticsAdapter.js +1 -1
  220. package/modules/adpod.js +1 -1
  221. package/modules/adrelevantisBidAdapter.js +2 -2
  222. package/modules/adriverBidAdapter.js +1 -1
  223. package/modules/adtargetBidAdapter.js +1 -1
  224. package/modules/adtelligentBidAdapter.js +4 -2
  225. package/modules/adtrgtmeBidAdapter.js +333 -0
  226. package/modules/adtrgtmeBidAdapter.md +69 -0
  227. package/modules/adtrueBidAdapter.js +1 -1
  228. package/modules/adxcgAnalyticsAdapter.js +1 -1
  229. package/modules/adxpremiumAnalyticsAdapter.js +2 -2
  230. package/modules/adyoulikeBidAdapter.js +12 -8
  231. package/modules/akamaiDapRtdProvider.js +2 -2
  232. package/modules/andBeyondMediaBidAdapter.js +202 -0
  233. package/modules/andBeyondMediaBidAdapter.md +79 -0
  234. package/modules/aniviewBidAdapter.js +2 -2
  235. package/modules/apacdexBidAdapter.js +3 -3
  236. package/modules/appierAnalyticsAdapter.js +1 -1
  237. package/modules/appnexusBidAdapter.js +9 -9
  238. package/modules/apstreamBidAdapter.js +2 -2
  239. package/modules/atsAnalyticsAdapter.js +1 -1
  240. package/modules/betweenBidAdapter.js +1 -1
  241. package/modules/bidwatchAnalyticsAdapter.js +71 -12
  242. package/modules/bizzclickBidAdapter.js +1 -1
  243. package/modules/bliinkBidAdapter.js +1 -1
  244. package/modules/boldwinBidAdapter.js +16 -7
  245. package/modules/boldwinBidAdapter.md +17 -0
  246. package/modules/brightMountainMediaBidAdapter.js +1 -1
  247. package/modules/browsiRtdProvider.js +26 -12
  248. package/modules/byDataAnalyticsAdapter.js +2 -2
  249. package/modules/c1xBidAdapter.js +209 -0
  250. package/modules/c1xBidAdapter.md +70 -0
  251. package/modules/cleanioRtdProvider.js +29 -0
  252. package/modules/cleanmedianetBidAdapter.js +1 -1
  253. package/modules/colossussspBidAdapter.js +2 -2
  254. package/modules/concertAnalyticsAdapter.js +1 -1
  255. package/modules/consentManagementUsp.js +2 -2
  256. package/modules/consumableBidAdapter.js +21 -3
  257. package/modules/cpmstarBidAdapter.js +23 -13
  258. package/modules/criteoBidAdapter.js +47 -5
  259. package/modules/cwireBidAdapter.js +1 -1
  260. package/modules/datablocksAnalyticsAdapter.js +1 -1
  261. package/modules/datablocksBidAdapter.js +1 -1
  262. package/modules/datawrkzBidAdapter.js +633 -0
  263. package/modules/datawrkzBidAdapter.md +160 -0
  264. package/modules/dfpAdServerVideo.js +2 -2
  265. package/modules/dgkeywordRtdProvider.js +1 -1
  266. package/modules/dspxBidAdapter.js +1 -1
  267. package/modules/e_volutionBidAdapter.js +3 -3
  268. package/modules/ebdrBidAdapter.js +1 -1
  269. package/modules/emx_digitalBidAdapter.js +1 -1
  270. package/modules/eplanningAnalyticsAdapter.js +1 -1
  271. package/modules/eplanningBidAdapter.js +3 -3
  272. package/modules/fabrickIdSystem.js +2 -2
  273. package/modules/fintezaAnalyticsAdapter.js +2 -2
  274. package/modules/freewheel-sspBidAdapter.js +1 -1
  275. package/modules/gamoshiBidAdapter.js +1 -1
  276. package/modules/getintentBidAdapter.js +1 -1
  277. package/modules/gjirafaBidAdapter.js +2 -2
  278. package/modules/goldbachBidAdapter.js +8 -8
  279. package/modules/gothamadsBidAdapter.js +2 -2
  280. package/modules/gridBidAdapter.js +1 -1
  281. package/modules/gridNMBidAdapter.js +1 -1
  282. package/modules/gumgumBidAdapter.js +3 -3
  283. package/modules/h12mediaBidAdapter.js +1 -1
  284. package/modules/hadronAnalyticsAdapter.js +3 -3
  285. package/modules/hadronRtdProvider.js +1 -1
  286. package/modules/id5AnalyticsAdapter.js +2 -2
  287. package/modules/impactifyBidAdapter.js +1 -1
  288. package/modules/improvedigitalBidAdapter.js +5 -2
  289. package/modules/imuIdSystem.js +40 -28
  290. package/modules/imuIdSystem.md +1 -0
  291. package/modules/inskinBidAdapter.js +1 -1
  292. package/modules/integr8BidAdapter.js +2 -2
  293. package/modules/intentIqIdSystem.js +2 -2
  294. package/modules/interactiveOffersBidAdapter.js +1 -1
  295. package/modules/invisiblyAnalyticsAdapter.js +1 -1
  296. package/modules/iqmBidAdapter.js +1 -1
  297. package/modules/ixBidAdapter.js +15 -15
  298. package/modules/kargoAnalyticsAdapter.js +1 -1
  299. package/modules/kargoBidAdapter.js +4 -5
  300. package/modules/konduitAnalyticsAdapter.js +1 -1
  301. package/modules/krushmediaBidAdapter.js +2 -2
  302. package/modules/kueezBidAdapter.js +2 -2
  303. package/modules/lassoBidAdapter.js +3 -3
  304. package/modules/livewrappedAnalyticsAdapter.js +4 -4
  305. package/modules/liveyieldAnalyticsAdapter.js +1 -1
  306. package/modules/lkqdBidAdapter.js +3 -3
  307. package/modules/loganBidAdapter.js +2 -2
  308. package/modules/luponmediaBidAdapter.js +3 -3
  309. package/modules/malltvAnalyticsAdapter.js +1 -1
  310. package/modules/malltvBidAdapter.js +2 -2
  311. package/modules/marsmediaAnalyticsAdapter.js +1 -1
  312. package/modules/mediafuseBidAdapter.js +8 -8
  313. package/modules/mediakeysBidAdapter.js +2 -2
  314. package/modules/medianetAnalyticsAdapter.js +1 -1
  315. package/modules/merkleIdSystem.js +2 -2
  316. package/modules/mgidBidAdapter.js +2 -2
  317. package/modules/microadBidAdapter.js +1 -1
  318. package/modules/mobfoxpbBidAdapter.js +2 -2
  319. package/modules/newspassidBidAdapter.js +1 -1
  320. package/modules/nextMillenniumBidAdapter.js +21 -2
  321. package/modules/nobidBidAdapter.js +3 -3
  322. package/modules/novatiqIdSystem.js +1 -1
  323. package/modules/oguryBidAdapter.js +1 -1
  324. package/modules/ooloAnalyticsAdapter.js +1 -1
  325. package/modules/open8BidAdapter.js +1 -1
  326. package/modules/openwebBidAdapter.js +1 -1
  327. package/modules/openxAnalyticsAdapter.js +6 -745
  328. package/modules/openxAnalyticsAdapter.md +4 -0
  329. package/modules/openxBidAdapter.js +3 -5
  330. package/modules/openxOrtbBidAdapter.js +8 -4
  331. package/modules/operaadsBidAdapter.js +1 -1
  332. package/modules/optimonAnalyticsAdapter.js +1 -1
  333. package/modules/ozoneBidAdapter.js +102 -271
  334. package/modules/ozoneBidAdapter.md +37 -0
  335. package/modules/pianoDmpAnalyticsAdapter.js +1 -1
  336. package/modules/pixfutureBidAdapter.js +1 -1
  337. package/modules/prebidServerBidAdapter/index.js +7 -7
  338. package/modules/prebidmanagerAnalyticsAdapter.js +2 -2
  339. package/modules/priceFloors.js +1 -1
  340. package/modules/pubmaticAnalyticsAdapter.js +2 -2
  341. package/modules/pubmaticBidAdapter.js +28 -8
  342. package/modules/pubperfAnalyticsAdapter.js +1 -1
  343. package/modules/pubstackAnalyticsAdapter.js +1 -1
  344. package/modules/pubwiseAnalyticsAdapter.js +2 -2
  345. package/modules/pubwiseBidAdapter.js +3 -3
  346. package/modules/pubxBidAdapter.js +1 -1
  347. package/modules/pubxaiAnalyticsAdapter.js +3 -3
  348. package/modules/pulsepointAnalyticsAdapter.js +1 -1
  349. package/modules/pulsepointBidAdapter.js +1 -1
  350. package/modules/quantcastIdSystem.js +1 -1
  351. package/modules/radsBidAdapter.js +1 -1
  352. package/modules/realvuAnalyticsAdapter.js +1 -1
  353. package/modules/relaidoBidAdapter.js +23 -18
  354. package/modules/relevantAnalyticsAdapter.js +1 -1
  355. package/modules/revcontentBidAdapter.js +1 -1
  356. package/modules/richaudienceBidAdapter.js +1 -1
  357. package/modules/riseBidAdapter.js +8 -5
  358. package/modules/riseBidAdapter.md +3 -1
  359. package/modules/rivrAnalyticsAdapter.js +1 -1
  360. package/modules/roxotAnalyticsAdapter.js +1 -1
  361. package/modules/rtbhouseBidAdapter.js +1 -1
  362. package/modules/rubiconAnalyticsAdapter.js +1 -1
  363. package/modules/rubiconBidAdapter.js +2 -2
  364. package/modules/scaleableAnalyticsAdapter.js +1 -1
  365. package/modules/schain.js +1 -1
  366. package/modules/sharethroughAnalyticsAdapter.js +1 -1
  367. package/modules/sharethroughBidAdapter.js +3 -3
  368. package/modules/shinezBidAdapter.js +2 -2
  369. package/modules/showheroes-bsBidAdapter.js +131 -49
  370. package/modules/showheroes-bsBidAdapter.md +49 -0
  371. package/modules/sigmoidAnalyticsAdapter.js +1 -1
  372. package/modules/sirdataRtdProvider.js +3 -3
  373. package/modules/sizeMappingV2.js +1 -1
  374. package/modules/smaatoBidAdapter.js +2 -2
  375. package/modules/smartxBidAdapter.js +2 -2
  376. package/modules/snigelBidAdapter.js +150 -0
  377. package/modules/snigelBidAdapter.md +46 -0
  378. package/modules/sonobiAnalyticsAdapter.js +2 -2
  379. package/modules/sonobiBidAdapter.js +3 -3
  380. package/modules/sovrnAnalyticsAdapter.js +1 -1
  381. package/modules/spotxBidAdapter.js +5 -5
  382. package/modules/sspBCBidAdapter.js +15 -18
  383. package/modules/staqAnalyticsAdapter.js +2 -2
  384. package/modules/synacormediaBidAdapter.js +1 -1
  385. package/modules/taboolaBidAdapter.js +1 -1
  386. package/modules/tappxBidAdapter.js +4 -4
  387. package/modules/targetVideoBidAdapter.js +1 -1
  388. package/modules/terceptAnalyticsAdapter.js +1 -1
  389. package/modules/theAdxBidAdapter.js +2 -2
  390. package/modules/tpmnBidAdapter.js +1 -1
  391. package/modules/trionBidAdapter.js +2 -2
  392. package/modules/tripleliftBidAdapter.js +46 -20
  393. package/modules/trustpidSystem.js +2 -2
  394. package/modules/ttdBidAdapter.js +41 -26
  395. package/modules/ttdBidAdapter.md +4 -10
  396. package/modules/ucfunnelAnalyticsAdapter.js +1 -1
  397. package/modules/underdogmediaBidAdapter.js +1 -1
  398. package/modules/userId/eids.js +5 -0
  399. package/modules/userId/index.js +11 -7
  400. package/modules/vdoaiBidAdapter.js +1 -1
  401. package/modules/vidazooBidAdapter.js +9 -5
  402. package/modules/videoheroesBidAdapter.js +1 -1
  403. package/modules/vidoomyBidAdapter.js +1 -1
  404. package/modules/visxBidAdapter.js +1 -1
  405. package/modules/vrtcalBidAdapter.js +1 -1
  406. package/modules/weboramaRtdProvider.js +3 -3
  407. package/modules/winrBidAdapter.js +1 -1
  408. package/modules/yahoosspBidAdapter.js +4 -3
  409. package/modules/yandexBidAdapter.js +1 -1
  410. package/modules/yieldmoBidAdapter.js +3 -3
  411. package/modules/yieldoneAnalyticsAdapter.js +1 -1
  412. package/modules/yieldoneBidAdapter.js +2 -2
  413. package/modules/yuktamediaAnalyticsAdapter.js +1 -1
  414. package/modules/zeta_global_sspAnalyticsAdapter.js +1 -1
  415. package/modules/zeta_global_sspBidAdapter.js +25 -22
  416. package/package.json +4 -3
  417. package/src/Renderer.js +1 -1
  418. package/src/adapterManager.js +3 -3
  419. package/src/adapters/bidderFactory.js +1 -0
  420. package/src/auction.js +2 -2
  421. package/src/bidfactory.js +1 -1
  422. package/src/config.js +7 -7
  423. package/src/native.js +53 -58
  424. package/src/sizeMapping.js +1 -1
  425. package/src/targeting.js +1 -1
  426. package/src/userSync.js +1 -1
  427. package/src/utils.js +1 -1
  428. package/test/mocks/analyticsStub.js +1 -1
  429. package/test/spec/AnalyticsAdapter_spec.js +1 -1
  430. package/test/spec/config_spec.js +4 -0
  431. package/test/spec/modules/adagioBidAdapter_spec.js +2 -0
  432. package/test/spec/modules/adnuntiusBidAdapter_spec.js +7 -3
  433. package/test/spec/modules/adtelligentBidAdapter_spec.js +1 -0
  434. package/test/spec/modules/adtrgtmeBidAdapter_spec.js +802 -0
  435. package/test/spec/modules/adyoulikeBidAdapter_spec.js +8 -3
  436. package/test/spec/modules/andBeyondMediaBidAdapter_spec.js +400 -0
  437. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +17 -1
  438. package/test/spec/modules/boldwinBidAdapter_spec.js +2 -1
  439. package/test/spec/modules/browsiRtdProvider_spec.js +40 -1
  440. package/test/spec/modules/c1xBidAdapter_spec.js +189 -0
  441. package/test/spec/modules/cleanioRtdProvider_spec.js +23 -0
  442. package/test/spec/modules/concertAnalyticsAdapter_spec.js +2 -1
  443. package/test/spec/modules/consumableBidAdapter_spec.js +139 -0
  444. package/test/spec/modules/cpmstarBidAdapter_spec.js +1 -1
  445. package/test/spec/modules/criteoBidAdapter_spec.js +169 -38
  446. package/test/spec/modules/datawrkzBidAdapter_spec.js +656 -0
  447. package/test/spec/modules/eids_spec.js +32 -0
  448. package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +2 -2
  449. package/test/spec/modules/fintezaAnalyticsAdapter_spec.js +2 -1
  450. package/test/spec/modules/improvedigitalBidAdapter_spec.js +4 -4
  451. package/test/spec/modules/imuIdSystem_spec.js +20 -4
  452. package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +8 -3
  453. package/test/spec/modules/kargoBidAdapter_spec.js +11 -2
  454. package/test/spec/modules/konduitAnalyticsAdapter_spec.js +2 -1
  455. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +17 -0
  456. package/test/spec/modules/openxAnalyticsAdapter_spec.js +6 -638
  457. package/test/spec/modules/openxOrtbBidAdapter_spec.js +32 -1
  458. package/test/spec/modules/optimonAnalyticsAdapter_spec.js +2 -1
  459. package/test/spec/modules/ozoneBidAdapter_spec.js +367 -511
  460. package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +4 -0
  461. package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +2 -1
  462. package/test/spec/modules/pubmaticBidAdapter_spec.js +111 -5
  463. package/test/spec/modules/pubperfAnalyticsAdapter_spec.js +2 -1
  464. package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +2 -1
  465. package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +3 -3
  466. package/test/spec/modules/relaidoBidAdapter_spec.js +40 -33
  467. package/test/spec/modules/riseBidAdapter_spec.js +17 -0
  468. package/test/spec/modules/sharethroughBidAdapter_spec.js +10 -1
  469. package/test/spec/modules/showheroes-bsBidAdapter_spec.js +173 -2
  470. package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +1 -1
  471. package/test/spec/modules/snigelBidAdapter_spec.js +296 -0
  472. package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +2 -1
  473. package/test/spec/modules/sspBCBidAdapter_spec.js +2 -2
  474. package/test/spec/modules/tripleliftBidAdapter_spec.js +378 -10
  475. package/test/spec/modules/ttdBidAdapter_spec.js +113 -34
  476. package/test/spec/modules/userId_spec.js +38 -2
  477. package/test/spec/modules/vidazooBidAdapter_spec.js +39 -24
  478. package/test/spec/modules/yahoosspBidAdapter_spec.js +13 -0
  479. package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +5 -1
  480. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +61 -2
  481. package/test/spec/native_spec.js +96 -0
  482. package/test/spec/unit/core/bidderFactory_spec.js +27 -2
  483. package/webpack.conf.js +47 -11
@@ -0,0 +1,802 @@
1
+ import { expect } from 'chai';
2
+ import { config } from 'src/config.js';
3
+ import { BANNER } from 'src/mediaTypes.js';
4
+ import { spec } from 'modules/adtrgtmeBidAdapter.js';
5
+
6
+ const DEFAULT_SID = 1220291391;
7
+ const DEFAULT_ZID = 1836455615;
8
+ const DEFAULT_BID_ID = '84ab500420319d';
9
+
10
+ const DEFAULT_AD_UNIT_CODE = '/1220291391/header-banner';
11
+ const DEFAULT_AD_UNIT_TYPE = BANNER;
12
+ const DEFAULT_PARAMS_BID_OVERRIDE = {};
13
+
14
+ const ADAPTER_VERSION = '1.0.0';
15
+ const PREBID_VERSION = '$prebid.version$';
16
+ const INTEGRATION_METHOD = 'prebid.js';
17
+
18
+ // Utility functions
19
+ const generateBidRequest = ({bidId, adUnitCode, bidOverrideObject, zid, ortb2}) => {
20
+ const bidRequest = {
21
+ adUnitCode,
22
+ auctionId: 'b06c5141-fe8f-4cdf-9d7d-54415490a917',
23
+ bidId,
24
+ bidderRequestsCount: 1,
25
+ bidder: 'adtrgtme',
26
+ bidderRequestId: '7101db09af0db2',
27
+ bidderWinsCount: 0,
28
+ mediaTypes: {},
29
+ params: {
30
+ bidOverride: bidOverrideObject
31
+ },
32
+ src: 'client',
33
+ transactionId: '5b17b67d-7704-4732-8cc9-5b1723e9bcf9',
34
+ ortb2
35
+ };
36
+
37
+ const bannerObj = {
38
+ sizes: [[300, 250]]
39
+ };
40
+
41
+ bidRequest.mediaTypes.banner = bannerObj;
42
+ bidRequest.sizes = [[300, 250]];
43
+
44
+ bidRequest.params.sid = DEFAULT_SID;
45
+ if (typeof zid == 'number') {
46
+ bidRequest.params.zid = zid;
47
+ }
48
+
49
+ return bidRequest;
50
+ }
51
+
52
+ let generateBidderRequest = (bidRequestArray, adUnitCode, ortb2 = {}) => {
53
+ const bidderRequest = {
54
+ adUnitCode: adUnitCode || 'default-adUnitCode',
55
+ auctionId: 'd4c83a3b-18e4-4208-b98b-63848449c7aa',
56
+ auctionStart: new Date().getTime(),
57
+ bidderCode: 'adtrgtme',
58
+ bidderRequestId: '112f1c7c5d399a',
59
+ bids: bidRequestArray,
60
+ refererInfo: {
61
+ page: 'https://publisher-test.com',
62
+ reachedTop: true,
63
+ isAmp: false,
64
+ numIframes: 0,
65
+ stack: ['https://publisher-test.com'],
66
+ },
67
+ gdprConsent: {
68
+ consentString: 'BOtmiBKOtmiBKABABAENAFAAAAACeAAA',
69
+ vendorData: {},
70
+ gdprApplies: true
71
+ },
72
+ start: new Date().getTime(),
73
+ timeout: 1000,
74
+ ortb2
75
+ };
76
+
77
+ return bidderRequest;
78
+ };
79
+
80
+ const generateBuildRequestMock = ({bidId, adUnitCode, adUnitType, zid, bidOverrideObject, pubIdMode, ortb2}) => {
81
+ const bidRequestConfig = {
82
+ bidId: bidId || DEFAULT_BID_ID,
83
+ adUnitCode: adUnitCode || DEFAULT_AD_UNIT_CODE,
84
+ adUnitType: adUnitType || DEFAULT_AD_UNIT_TYPE,
85
+ zid: zid || DEFAULT_ZID,
86
+ bidOverrideObject: bidOverrideObject || DEFAULT_PARAMS_BID_OVERRIDE,
87
+
88
+ pubIdMode: pubIdMode || false,
89
+ ortb2: ortb2 || {}
90
+ };
91
+ const bidRequest = generateBidRequest(bidRequestConfig);
92
+ const validBidRequests = [bidRequest];
93
+ const bidderRequest = generateBidderRequest(validBidRequests, adUnitCode, ortb2);
94
+
95
+ return { bidRequest, validBidRequests, bidderRequest }
96
+ };
97
+
98
+ const generateAdmPayload = (admPayloadType) => {
99
+ let ADM_PAYLOAD;
100
+ switch (admPayloadType) {
101
+ case 'banner':
102
+ ADM_PAYLOAD = '<script>logInfo(\'ad\'); AdPlacement </script>'; // banner
103
+ break;
104
+ default: '<script>logInfo(\'ad\'); AdPlacement </script>'; break;
105
+ };
106
+
107
+ return ADM_PAYLOAD;
108
+ };
109
+
110
+ const generateResponseMock = (admPayloadType) => {
111
+ const bidResponse = {
112
+ id: 'fc0c35df-21fb-4f93-9ebd-88759dbe31f9',
113
+ impid: '274395c06a24e5',
114
+ adm: generateAdmPayload(admPayloadType),
115
+ price: 1,
116
+ w: 300,
117
+ h: 250,
118
+ crid: 'ssp-placement-name',
119
+ adomain: ['advertiser-domain.com']
120
+ };
121
+
122
+ const serverResponse = {
123
+ body: {
124
+ id: 'fc0c35df-21fb-4f93-9ebd-88759dbe31f9',
125
+ seatbid: [{ bid: [ bidResponse ], seat: 13107 }]
126
+ }
127
+ };
128
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({adUnitType: admPayloadType});
129
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
130
+
131
+ return {serverResponse, data, bidderRequest};
132
+ }
133
+
134
+ // Unit tests
135
+ describe('adtrgtme Bid Adapter:', () => {
136
+ it('PLACEHOLDER TO PASS GULP', () => {
137
+ const obj = {};
138
+ expect(obj).to.be.an('object');
139
+ });
140
+
141
+ describe('Validate basic properties', () => {
142
+ it('should define the correct bidder code', () => {
143
+ expect(spec.code).to.equal('adtrgtme')
144
+ });
145
+ });
146
+
147
+ describe('getUserSyncs()', () => {
148
+ const IMAGE_PIXEL_URL = 'http://image-pixel.com/foo/bar?1234&baz=true';
149
+ const IFRAME_ONE_URL = 'http://image-iframe.com/foo/bar?1234&baz=true';
150
+ const IFRAME_TWO_URL = 'http://image-iframe-two.com/foo/bar?1234&baz=true';
151
+
152
+ let serverResponses = [];
153
+ beforeEach(() => {
154
+ serverResponses[0] = {
155
+ body: {
156
+ ext: {
157
+ pixels: `<script>document.write('<iframe src="${IFRAME_ONE_URL}"></iframe>` +
158
+ `<img src="${IMAGE_PIXEL_URL}"></iframe>` +
159
+ `<iframe src="${IFRAME_TWO_URL}"></iframe>');</script>`
160
+ }
161
+ }
162
+ }
163
+ });
164
+
165
+ after(() => {
166
+ serverResponses = undefined;
167
+ });
168
+
169
+ it('for only iframe enabled syncs', () => {
170
+ let syncOptions = {
171
+ iframeEnabled: true,
172
+ pixelEnabled: false
173
+ };
174
+ let pixelsObjects = spec.getUserSyncs(syncOptions, serverResponses);
175
+ expect(pixelsObjects.length).to.equal(2);
176
+ expect(pixelsObjects).to.deep.equal(
177
+ [
178
+ {type: 'iframe', 'url': IFRAME_ONE_URL},
179
+ {type: 'iframe', 'url': IFRAME_TWO_URL}
180
+ ]
181
+ )
182
+ });
183
+
184
+ it('for only pixel enabled syncs', () => {
185
+ let syncOptions = {
186
+ iframeEnabled: false,
187
+ pixelEnabled: true
188
+ };
189
+ let pixelsObjects = spec.getUserSyncs(syncOptions, serverResponses);
190
+ expect(pixelsObjects.length).to.equal(1);
191
+ expect(pixelsObjects).to.deep.equal(
192
+ [
193
+ {type: 'image', 'url': IMAGE_PIXEL_URL}
194
+ ]
195
+ )
196
+ });
197
+
198
+ it('for both pixel and iframe enabled syncs', () => {
199
+ let syncOptions = {
200
+ iframeEnabled: true,
201
+ pixelEnabled: true
202
+ };
203
+ let pixelsObjects = spec.getUserSyncs(syncOptions, serverResponses);
204
+ expect(pixelsObjects.length).to.equal(3);
205
+ expect(pixelsObjects).to.deep.equal(
206
+ [
207
+ {type: 'iframe', 'url': IFRAME_ONE_URL},
208
+ {type: 'image', 'url': IMAGE_PIXEL_URL},
209
+ {type: 'iframe', 'url': IFRAME_TWO_URL}
210
+ ]
211
+ )
212
+ });
213
+ });
214
+
215
+ // Validate Bid Requests
216
+ describe('isBidRequestValid()', () => {
217
+ const INVALID_INPUT = [
218
+ {},
219
+ {params: {}},
220
+ {params: {sid: '1234', zid: '4321'}},
221
+ {params: {sid: '1220291391', zid: 4321}},
222
+ {params: {zid: ''}},
223
+ {params: {sid: '', zid: ''}},
224
+ ];
225
+
226
+ INVALID_INPUT.forEach(input => {
227
+ it(`should determine that the bid is INVALID for the input ${JSON.stringify(input)}`, () => {
228
+ expect(spec.isBidRequestValid(input)).to.be.false;
229
+ });
230
+ });
231
+
232
+ it('should determine that the bid is VALID if sid and zid are present on the params object', () => {
233
+ const validBid = {
234
+ params: {
235
+ sid: 1220291391,
236
+ zid: 1836455615
237
+ }
238
+ };
239
+ expect(spec.isBidRequestValid(validBid)).to.be.true;
240
+ });
241
+ });
242
+
243
+ describe('Price Floor module support:', () => {
244
+ it('should get bidfloor from getFloor method', () => {
245
+ const { bidRequest, validBidRequests, bidderRequest } = generateBuildRequestMock({});
246
+ bidRequest.params.bidOverride = {cur: 'EUR'};
247
+ bidRequest.getFloor = (floorObj) => {
248
+ return {
249
+ floor: bidRequest.floors.values[floorObj.mediaType + '|300x250'],
250
+ currency: floorObj.currency,
251
+ mediaType: floorObj.mediaType
252
+ }
253
+ };
254
+ bidRequest.floors = {
255
+ currency: 'EUR',
256
+ values: {
257
+ 'banner|300x250': 5.55
258
+ }
259
+ };
260
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
261
+ expect(data.cur).to.deep.equal(['EUR']);
262
+ expect(data.imp[0].bidfloor).is.a('number');
263
+ expect(data.imp[0].bidfloor).to.equal(5.55);
264
+ });
265
+ });
266
+
267
+ describe('Schain module support:', () => {
268
+ it('should send Global or Bidder specific schain', function () {
269
+ const { bidRequest, validBidRequests, bidderRequest } = generateBuildRequestMock({});
270
+ const globalSchain = {
271
+ ver: '1.0',
272
+ complete: 1,
273
+ nodes: [{
274
+ asi: 'some-platform.com',
275
+ sid: '111111',
276
+ rid: bidRequest.bidId,
277
+ hp: 1
278
+ }]
279
+ };
280
+ bidRequest.schain = globalSchain;
281
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
282
+ const schain = data.source.ext.schain;
283
+ expect(schain.nodes.length).to.equal(1);
284
+ expect(schain).to.equal(globalSchain);
285
+ });
286
+ });
287
+
288
+ describe('First party data module - "Site" support (ortb2):', () => {
289
+ // Should not allow invalid "site" data types
290
+ const INVALID_ORTB2_TYPES = [ null, [], 123, 'unsupportedKeyName', true, false, undefined ];
291
+ INVALID_ORTB2_TYPES.forEach(param => {
292
+ it(`should not allow invalid site types to be added to bid-request: ${JSON.stringify(param)}`, () => {
293
+ const ortb2 = { site: param }
294
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
295
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
296
+ expect(data.site[param]).to.be.undefined;
297
+ });
298
+ });
299
+
300
+ // Should add valid "site" params
301
+ const VALID_SITE_STRINGS = ['name', 'domain', 'page', 'ref', 'keywords'];
302
+ const VALID_SITE_ARRAYS = ['cat', 'sectioncat', 'pagecat'];
303
+
304
+ VALID_SITE_STRINGS.forEach(param => {
305
+ it(`should allow supported site keys to be added bid-request: ${JSON.stringify(param)}`, () => {
306
+ const ortb2 = {
307
+ site: {
308
+ [param]: 'something'
309
+ }
310
+ };
311
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
312
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
313
+ expect(data.site[param]).to.exist;
314
+ expect(data.site[param]).to.be.a('string');
315
+ expect(data.site[param]).to.be.equal(ortb2.site[param]);
316
+ });
317
+ });
318
+
319
+ VALID_SITE_ARRAYS.forEach(param => {
320
+ it(`should determine that the ortb2.site Array key is valid and append to the bid-request: ${JSON.stringify(param)}`, () => {
321
+ const ortb2 = {
322
+ site: {
323
+ [param]: ['something']
324
+ }
325
+ };
326
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
327
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
328
+ expect(data.site[param]).to.exist;
329
+ expect(data.site[param]).to.be.a('array');
330
+ expect(data.site[param]).to.be.equal(ortb2.site[param]);
331
+ });
332
+ });
333
+
334
+ // Should not allow invalid "site.content" data types
335
+ INVALID_ORTB2_TYPES.forEach(param => {
336
+ it(`should determine that the ortb2.site.content key is invalid and should not be added to bid-request: ${JSON.stringify(param)}`, () => {
337
+ const ortb2 = {
338
+ site: {
339
+ content: param
340
+ }
341
+ };
342
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
343
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
344
+ expect(data.site.content).to.be.undefined;
345
+ });
346
+ });
347
+
348
+ // Should not allow invalid "site.content" keys
349
+ it(`should not allow invalid ortb2.site.content object keys to be added to bid-request: {custom object}`, () => {
350
+ const ortb2 = {
351
+ site: {
352
+ content: {
353
+ fake: 'news',
354
+ unreal: 'param',
355
+ counterfit: 'data'
356
+ }
357
+ }
358
+ };
359
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
360
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
361
+ expect(data.site.content).to.be.a('object');
362
+ });
363
+
364
+ // Should append valid "site.content" keys
365
+ const VALID_CONTENT_STRINGS = ['id', 'title', 'language'];
366
+ VALID_CONTENT_STRINGS.forEach(param => {
367
+ it(`should determine that the ortb2.site String key is valid and append to the bid-request: ${JSON.stringify(param)}`, () => {
368
+ const ortb2 = {
369
+ site: {
370
+ content: {
371
+ [param]: 'something'
372
+ }
373
+ }
374
+ };
375
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
376
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
377
+ expect(data.site.content[param]).to.exist;
378
+ expect(data.site.content[param]).to.be.a('string');
379
+ expect(data.site.content[param]).to.be.equal(ortb2.site.content[param]);
380
+ });
381
+ });
382
+
383
+ const VALID_CONTENT_ARRAYS = ['cat'];
384
+ VALID_CONTENT_ARRAYS.forEach(param => {
385
+ it(`should determine that the ortb2.site Array key is valid and append to the bid-request: ${JSON.stringify(param)}`, () => {
386
+ const ortb2 = {
387
+ site: {
388
+ content: {
389
+ [param]: ['something', 'something-else']
390
+ }
391
+ }
392
+ };
393
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
394
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
395
+ expect(data.site.content[param]).to.be.a('array');
396
+ expect(data.site.content[param]).to.be.equal(ortb2.site.content[param]);
397
+ });
398
+ });
399
+ });
400
+
401
+ describe('First party data module - "User" support (ortb2):', () => {
402
+ // Global ortb2.user validations
403
+ // Should not allow invalid "user" data types
404
+ const INVALID_ORTB2_TYPES = [ null, [], 'unsupportedKeyName', true, false, undefined ];
405
+ INVALID_ORTB2_TYPES.forEach(param => {
406
+ it(`should not allow invalid site types to be added to bid-request: ${JSON.stringify(param)}`, () => {
407
+ const ortb2 = { user: param }
408
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
409
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
410
+ expect(data.user[param]).to.be.undefined;
411
+ });
412
+ });
413
+
414
+ // Should add valid "user" params
415
+ const VALID_USER_STRINGS = ['id', 'buyeruid', 'gender', 'keywords', 'customdata'];
416
+ VALID_USER_STRINGS.forEach(param => {
417
+ it(`should allow supported user string keys to be added bid-request: ${JSON.stringify(param)}`, () => {
418
+ const ortb2 = {
419
+ user: {
420
+ [param]: 'something'
421
+ }
422
+ };
423
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
424
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
425
+ expect(data.user[param]).to.exist;
426
+ expect(data.user[param]).to.be.a('string');
427
+ expect(data.user[param]).to.be.equal(ortb2.user[param]);
428
+ });
429
+ });
430
+
431
+ const VALID_USER_OBJECTS = ['ext'];
432
+ VALID_USER_OBJECTS.forEach(param => {
433
+ it(`should allow supported user extObject keys to be added to the bid-request: ${JSON.stringify(param)}`, () => {
434
+ const ortb2 = {
435
+ user: {
436
+ [param]: {a: '123', b: '456'}
437
+ }
438
+ };
439
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
440
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
441
+ expect(data.user[param]).to.exist;
442
+ expect(data.user[param]).to.be.a('object');
443
+ expect(data.user[param]).to.be.deep.include({[param]: {a: '123', b: '456'}});
444
+ config.setConfig({ortb2: {}});
445
+ });
446
+ });
447
+
448
+ // adUnit.ortb2Imp.ext.data
449
+ it(`should allow adUnit.ortb2Imp.ext.data object to be added to the bid-request`, () => {
450
+ let { validBidRequests, bidderRequest } = generateBuildRequestMock({})
451
+ validBidRequests[0].ortb2Imp = {
452
+ ext: {
453
+ data: {
454
+ pbadslot: 'homepage-top-rect',
455
+ adUnitSpecificAttribute: '123'
456
+ }
457
+ }
458
+ };
459
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
460
+ expect(data.imp[0].ext.data).to.deep.equal(validBidRequests[0].ortb2Imp.ext.data);
461
+ });
462
+ // adUnit.ortb2Imp.instl
463
+ it(`should allow adUnit.ortb2Imp.instl numeric boolean "1" to be added to the bid-request`, () => {
464
+ let { validBidRequests, bidderRequest } = generateBuildRequestMock({})
465
+ validBidRequests[0].ortb2Imp = {
466
+ instl: 1
467
+ };
468
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
469
+ expect(data.imp[0].instl).to.deep.equal(validBidRequests[0].ortb2Imp.instl);
470
+ });
471
+
472
+ it(`should prevent adUnit.ortb2Imp.instl boolean "true" to be added to the bid-request`, () => {
473
+ let { validBidRequests, bidderRequest } = generateBuildRequestMock({})
474
+ validBidRequests[0].ortb2Imp = {
475
+ instl: true
476
+ };
477
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
478
+ expect(data.imp[0].instl).to.not.exist;
479
+ });
480
+
481
+ it(`should prevent adUnit.ortb2Imp.instl boolean "false" to be added to the bid-request`, () => {
482
+ let { validBidRequests, bidderRequest } = generateBuildRequestMock({})
483
+ validBidRequests[0].ortb2Imp = {
484
+ instl: false
485
+ };
486
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
487
+ expect(data.imp[0].instl).to.not.exist;
488
+ });
489
+ });
490
+
491
+ describe('GDPR & Consent:', () => {
492
+ it('should return request objects that do not send cookies if purpose 1 consent is not provided', () => {
493
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
494
+ bidderRequest.gdprConsent = {
495
+ consentString: 'BOtmiBKOtmiBKABABAENAFAAAAACeAAA',
496
+ apiVersion: 2,
497
+ vendorData: {
498
+ purpose: {
499
+ consents: {
500
+ '1': false
501
+ }
502
+ }
503
+ },
504
+ gdprApplies: true
505
+ };
506
+ const options = spec.buildRequests(validBidRequests, bidderRequest)[0].options;
507
+ expect(options.withCredentials).to.be.false;
508
+ });
509
+ });
510
+
511
+ describe('Endpoint & Impression Request Mode:', () => {
512
+ it('should route request to config override endpoint', () => {
513
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
514
+ const sid = validBidRequests[0].params.sid;
515
+ const testOverrideEndpoint = 'http://new_bidder_host.com/ssp?s=';
516
+ config.setConfig({
517
+ adtrgtme: {
518
+ endpoint: testOverrideEndpoint
519
+ }
520
+ });
521
+ const response = spec.buildRequests(validBidRequests, bidderRequest)[0];
522
+ expect(response).to.deep.include(
523
+ {
524
+ method: 'POST',
525
+ url: testOverrideEndpoint + sid
526
+ });
527
+ });
528
+
529
+ it('should route request to endpoint + sid', () => {
530
+ config.setConfig({
531
+ adtrgtme: {}
532
+ });
533
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
534
+ const sid = validBidRequests[0].params.sid;
535
+ const response = spec.buildRequests(validBidRequests, bidderRequest);
536
+ expect(response[0]).to.deep.include({
537
+ method: 'POST',
538
+ url: 'https://z.cdn.adtarget.market/ssp?prebid&s=' + sid
539
+ });
540
+ });
541
+
542
+ it('should return a single request object for single request mode', () => {
543
+ let { bidRequest, validBidRequests, bidderRequest } = generateBuildRequestMock({});
544
+ const BID_ID_2 = '84ab50xxxxx';
545
+ const BID_ZID_2 = 98876543210;
546
+ const AD_UNIT_CODE_2 = 'test-ad-unit-code-123';
547
+ const { bidRequest: bidRequest2 } = generateBuildRequestMock({bidId: BID_ID_2, zid: BID_ZID_2, adUnitCode: AD_UNIT_CODE_2});
548
+ validBidRequests = [bidRequest, bidRequest2];
549
+ bidderRequest.bids = validBidRequests;
550
+
551
+ config.setConfig({
552
+ adtrgtme: {
553
+ singleRequestMode: true
554
+ }
555
+ });
556
+
557
+ const data = spec.buildRequests(validBidRequests, bidderRequest).data;
558
+
559
+ expect(data.imp).to.be.an('array').with.lengthOf(2);
560
+
561
+ expect(data.imp[0]).to.deep.include({
562
+ id: DEFAULT_BID_ID,
563
+ ext: {
564
+ dfp_ad_unit_code: DEFAULT_AD_UNIT_CODE
565
+ }
566
+ });
567
+
568
+ expect(data.imp[1]).to.deep.include({
569
+ id: BID_ID_2,
570
+ tagid: BID_ZID_2,
571
+ ext: {
572
+ dfp_ad_unit_code: AD_UNIT_CODE_2
573
+ }
574
+ });
575
+ });
576
+ });
577
+
578
+ describe('Validate request filtering:', () => {
579
+ it('should not return request when no bids are present', function () {
580
+ let request = spec.buildRequests([]);
581
+ expect(request).to.be.undefined;
582
+ });
583
+
584
+ it('buildRequests(): should return an array with the correct amount of request objects', () => {
585
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
586
+ const response = spec.buildRequests(validBidRequests, bidderRequest).bidderRequest;
587
+ expect(response.bids).to.be.an('array').to.have.lengthOf(1);
588
+ });
589
+ });
590
+
591
+ describe('Request Headers validation:', () => {
592
+ it('should return request objects with the relevant custom headers and content type declaration', () => {
593
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
594
+ bidderRequest.gdprConsent.gdprApplies = false;
595
+ const options = spec.buildRequests(validBidRequests, bidderRequest).options;
596
+ expect(options).to.deep.equal(
597
+ {
598
+ contentType: 'application/json',
599
+ customHeaders: {
600
+ 'x-openrtb-version': '2.5'
601
+ },
602
+ withCredentials: true
603
+ });
604
+ });
605
+ });
606
+
607
+ describe('Request Payload oRTB bid validation:', () => {
608
+ it('should generate a valid openRTB bid-request object in the data field', () => {
609
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
610
+ const data = spec.buildRequests(validBidRequests, bidderRequest).data;
611
+ expect(data.site).to.deep.include({
612
+ id: bidderRequest.bids[0].params.sid,
613
+ page: bidderRequest.refererInfo.page
614
+ });
615
+
616
+ expect(data.device).to.deep.equal({
617
+ dnt: 0,
618
+ ua: navigator.userAgent,
619
+ ip: undefined
620
+ });
621
+
622
+ expect(data.regs).to.deep.equal({
623
+ ext: {
624
+ 'us_privacy': '',
625
+ gdpr: 1
626
+ }
627
+ });
628
+
629
+ expect(data.source).to.deep.equal({
630
+ ext: {
631
+ hb: 1,
632
+ adapterver: ADAPTER_VERSION,
633
+ prebidver: PREBID_VERSION,
634
+ integration: {
635
+ name: INTEGRATION_METHOD,
636
+ ver: PREBID_VERSION
637
+ }
638
+ },
639
+ fd: 1
640
+ });
641
+
642
+ expect(data.cur).to.deep.equal(['USD']);
643
+ });
644
+
645
+ it('should generate a valid openRTB imp.ext object in the bid-request', () => {
646
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
647
+ const bid = validBidRequests[0];
648
+ const data = spec.buildRequests(validBidRequests, bidderRequest).data;
649
+ expect(data.imp[0].ext).to.deep.equal({
650
+ dfp_ad_unit_code: DEFAULT_AD_UNIT_CODE
651
+ });
652
+ });
653
+
654
+ it('should use siteId value as site.id in the outbound bid-request when using "pubId" integration mode', () => {
655
+ let { validBidRequests, bidderRequest } = generateBuildRequestMock({pubIdMode: true});
656
+ validBidRequests[0].params.sid = 9876543210;
657
+ const data = spec.buildRequests(validBidRequests, bidderRequest).data;
658
+ expect(data.site.id).to.equal(9876543210);
659
+ });
660
+
661
+ it('should use placementId value as imp.tagid in the outbound bid-request when using "zid"', () => {
662
+ let { validBidRequests, bidderRequest } = generateBuildRequestMock({}),
663
+ TEST_ZID = 54321;
664
+ validBidRequests[0].params.zid = TEST_ZID;
665
+ const data = spec.buildRequests(validBidRequests, bidderRequest).data;
666
+ expect(data.imp[0].tagid).to.deep.equal(TEST_ZID);
667
+ });
668
+ });
669
+
670
+ describe('Request Payload oRTB bid.imp validation:', () => {
671
+ // Validate Banner imp imp when adtrgtme.mode=undefined
672
+ it('should generate a valid "Banner" imp object', () => {
673
+ config.setConfig({
674
+ adtrgtme: {}
675
+ });
676
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
677
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
678
+ expect(data.imp[0].banner).to.deep.equal({
679
+ mimes: ['text/html', 'text/javascript', 'application/javascript', 'image/jpg'],
680
+ format: [{w: 300, h: 250}]
681
+ });
682
+ });
683
+
684
+ // Validate Banner imp
685
+ it('should generate a valid "Banner" imp object', () => {
686
+ config.setConfig({
687
+ adtrgtme: { mode: 'banner' }
688
+ });
689
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
690
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
691
+ expect(data.imp[0].banner).to.deep.equal({
692
+ mimes: ['text/html', 'text/javascript', 'application/javascript', 'image/jpg'],
693
+ format: [{w: 300, h: 250}]
694
+ });
695
+ });
696
+ });
697
+
698
+ describe('interpretResponse()', () => {
699
+ describe('for mediaTypes: "banner"', () => {
700
+ it('should insert banner payload into response[0].ad', () => {
701
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
702
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
703
+ expect(response[0].ad).to.equal('<script>logInfo(\'ad\'); AdPlacement </script>');
704
+ expect(response[0].mediaType).to.equal('banner');
705
+ })
706
+ });
707
+
708
+ describe('Support Advertiser domains', () => {
709
+ it('should append bid-response adomain to meta.advertiserDomains', () => {
710
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
711
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
712
+ expect(response[0].meta.advertiserDomains).to.be.a('array');
713
+ expect(response[0].meta.advertiserDomains[0]).to.equal('advertiser-domain.com');
714
+ })
715
+ });
716
+
717
+ describe('bid response Ad ID / Creative ID', () => {
718
+ it('should use adId if it exists in the bid-response', () => {
719
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
720
+ const adId = 'bid-response-adId';
721
+ serverResponse.body.seatbid[0].bid[0].adId = adId;
722
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
723
+ expect(response[0].adId).to.equal(adId);
724
+ });
725
+
726
+ it('should use impid if adId does not exist in the bid-response', () => {
727
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
728
+ const impid = '25b6c429c1f52f';
729
+ serverResponse.body.seatbid[0].bid[0].impid = impid;
730
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
731
+ expect(response[0].adId).to.equal(impid);
732
+ });
733
+
734
+ it('should use crid if adId & impid do not exist in the bid-response', () => {
735
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
736
+ const crid = 'passback-12579';
737
+ serverResponse.body.seatbid[0].bid[0].impid = undefined;
738
+ serverResponse.body.seatbid[0].bid[0].crid = crid;
739
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
740
+ expect(response[0].adId).to.equal(crid);
741
+ });
742
+ });
743
+
744
+ describe('Time To Live (ttl)', () => {
745
+ const UNSUPPORTED_TTL_FORMATS = ['string', [1, 2, 3], true, false, null, undefined];
746
+ UNSUPPORTED_TTL_FORMATS.forEach(param => {
747
+ it('should not allow unsupported global adtrgtme.ttl formats and default to 300', () => {
748
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
749
+ config.setConfig({
750
+ adtrgtme: { ttl: param }
751
+ });
752
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
753
+ expect(response[0].ttl).to.equal(300);
754
+ });
755
+
756
+ it('should not allow unsupported params.ttl formats and default to 300', () => {
757
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
758
+ bidderRequest.bids[0].params.ttl = param;
759
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
760
+ expect(response[0].ttl).to.equal(300);
761
+ });
762
+ });
763
+
764
+ const UNSUPPORTED_TTL_VALUES = [-1, 3601];
765
+ UNSUPPORTED_TTL_VALUES.forEach(param => {
766
+ it('should not allow invalid global adtrgtme.ttl values 3600 < ttl < 0 and default to 300', () => {
767
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
768
+ config.setConfig({
769
+ adtrgtme: { ttl: param }
770
+ });
771
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
772
+ expect(response[0].ttl).to.equal(300);
773
+ });
774
+
775
+ it('should not allow invalid params.ttl values 3600 < ttl < 0 and default to 300', () => {
776
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
777
+ bidderRequest.bids[0].params.ttl = param;
778
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
779
+ expect(response[0].ttl).to.equal(300);
780
+ });
781
+ });
782
+
783
+ it('should give presedence to Gloabl ttl over params.ttl ', () => {
784
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
785
+ config.setConfig({
786
+ adtrgtme: { ttl: 500 }
787
+ });
788
+ bidderRequest.bids[0].params.ttl = 400;
789
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
790
+ expect(response[0].ttl).to.equal(500);
791
+ });
792
+ });
793
+
794
+ describe('Aliasing support', () => {
795
+ it('should return undefined as the bidder code value', () => {
796
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
797
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
798
+ expect(response[0].bidderCode).to.be.undefined;
799
+ });
800
+ });
801
+ });
802
+ });