prebid.js 7.10.0 → 7.13.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 (366) hide show
  1. package/.github/PULL_REQUEST_TEMPLATE.md +16 -10
  2. package/.github/codeql/codeql-config.yml +4 -0
  3. package/.github/workflows/codeql-analysis.yml +73 -0
  4. package/.github/workflows/issue_tracker.yml +1 -1
  5. package/README.md +0 -2
  6. package/babelConfig.js +10 -4
  7. package/dist/33acrossBidAdapter.js +1 -1
  8. package/dist/acuityAdsBidAdapter.js +1 -0
  9. package/dist/adagioBidAdapter.js +1 -1
  10. package/dist/adbookpspBidAdapter.js +1 -1
  11. package/dist/adgenerationBidAdapter.js +1 -1
  12. package/dist/adkernelBidAdapter.js +1 -1
  13. package/dist/adrelevantisBidAdapter.js +1 -1
  14. package/dist/adriverBidAdapter.js +1 -1
  15. package/dist/adriverIdSystem.js +1 -1
  16. package/dist/adtelligentBidAdapter.js +1 -1
  17. package/dist/adtrgtmeBidAdapter.js +1 -0
  18. package/dist/adxcgBidAdapter.js +1 -1
  19. package/dist/adyoulikeBidAdapter.js +1 -1
  20. package/dist/ajaBidAdapter.js +1 -1
  21. package/dist/alkimiBidAdapter.js +1 -1
  22. package/dist/amxBidAdapter.js +1 -1
  23. package/dist/amxIdSystem.js +1 -1
  24. package/dist/aniviewBidAdapter.js +1 -1
  25. package/dist/aolBidAdapter.js +1 -1
  26. package/dist/appierAnalyticsAdapter.js +1 -1
  27. package/dist/appnexusBidAdapter.js +1 -1
  28. package/dist/asoBidAdapter.js +1 -1
  29. package/dist/audiencerunBidAdapter.js +1 -1
  30. package/dist/axonixBidAdapter.js +1 -1
  31. package/dist/beopBidAdapter.js +1 -1
  32. package/dist/betweenBidAdapter.js +1 -1
  33. package/dist/bidglassBidAdapter.js +1 -1
  34. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  35. package/dist/big-richmediaBidAdapter.js +1 -1
  36. package/dist/bluebillywigBidAdapter.js +1 -1
  37. package/dist/brandmetricsRtdProvider.js +1 -1
  38. package/dist/bridgewellBidAdapter.js +1 -1
  39. package/dist/brightMountainMediaBidAdapter.js +1 -1
  40. package/dist/browsiRtdProvider.js +1 -1
  41. package/dist/cleanioRtdProvider.js +1 -1
  42. package/dist/concertBidAdapter.js +1 -1
  43. package/dist/connectadBidAdapter.js +1 -1
  44. package/dist/consentManagement.js +1 -1
  45. package/dist/consentManagementUsp.js +1 -1
  46. package/dist/consumableBidAdapter.js +1 -1
  47. package/dist/conversantBidAdapter.js +1 -1
  48. package/dist/cpmstarBidAdapter.js +1 -1
  49. package/dist/craftBidAdapter.js +1 -1
  50. package/dist/criteoBidAdapter.js +1 -1
  51. package/dist/currency.js +1 -1
  52. package/dist/datawrkzBidAdapter.js +1 -0
  53. package/dist/debugging-standalone.js +1 -1
  54. package/dist/dfpAdServerVideo.js +1 -1
  55. package/dist/dgkeywordRtdProvider.js +1 -1
  56. package/dist/displayioBidAdapter.js +1 -3
  57. package/dist/dspxBidAdapter.js +1 -1
  58. package/dist/enrichmentFpdModule.js +1 -1
  59. package/dist/eplanningBidAdapter.js +1 -1
  60. package/dist/finativeBidAdapter.js +1 -1
  61. package/dist/glimpseBidAdapter.js +1 -1
  62. package/dist/gmosspBidAdapter.js +1 -1
  63. package/dist/goldbachBidAdapter.js +1 -1
  64. package/dist/gridBidAdapter.js +1 -1
  65. package/dist/gridNMBidAdapter.js +1 -1
  66. package/dist/gumgumBidAdapter.js +1 -1
  67. package/dist/h12mediaBidAdapter.js +1 -1
  68. package/dist/id5IdSystem.js +1 -1
  69. package/dist/imRtdProvider.js +1 -1
  70. package/dist/impactifyBidAdapter.js +1 -1
  71. package/dist/improvedigitalBidAdapter.js +1 -1
  72. package/dist/inmarBidAdapter.js +1 -1
  73. package/dist/insticatorBidAdapter.js +1 -1
  74. package/dist/ixBidAdapter.js +1 -1
  75. package/dist/jixieBidAdapter.js +1 -1
  76. package/dist/justpremiumBidAdapter.js +1 -1
  77. package/dist/kargoBidAdapter.js +1 -1
  78. package/dist/konduitAnalyticsAdapter.js +1 -1
  79. package/dist/kueezBidAdapter.js +1 -1
  80. package/dist/lassoBidAdapter.js +1 -1
  81. package/dist/lifestreetBidAdapter.js +1 -0
  82. package/dist/limelightDigitalBidAdapter.js +1 -1
  83. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  84. package/dist/logicadBidAdapter.js +1 -1
  85. package/dist/loglyliftBidAdapter.js +1 -1
  86. package/dist/mabidderBidAdapter.js +1 -0
  87. package/dist/malltvAnalyticsAdapter.js +1 -1
  88. package/dist/marsmediaBidAdapter.js +1 -1
  89. package/dist/mediafuseBidAdapter.js +1 -1
  90. package/dist/mediagoBidAdapter.js +1 -0
  91. package/dist/mediakeysBidAdapter.js +1 -1
  92. package/dist/mediasquareBidAdapter.js +1 -1
  93. package/dist/mgidBidAdapter.js +1 -1
  94. package/dist/minutemediaBidAdapter.js +1 -1
  95. package/dist/nextMillenniumBidAdapter.js +1 -1
  96. package/dist/not-for-prod/prebid.js +153 -147
  97. package/dist/oguryBidAdapter.js +1 -1
  98. package/dist/oneKeyIdSystem.js +1 -0
  99. package/dist/oneKeyRtdProvider.js +1 -0
  100. package/dist/onetagBidAdapter.js +1 -1
  101. package/dist/ooloAnalyticsAdapter.js +1 -1
  102. package/dist/openxAnalyticsAdapter.js +1 -1
  103. package/dist/outbrainBidAdapter.js +1 -1
  104. package/dist/parrableIdSystem.js +1 -1
  105. package/dist/permutiveRtdProvider.js +1 -1
  106. package/dist/pixfutureBidAdapter.js +1 -1
  107. package/dist/prebid-core.js +2 -2
  108. package/dist/publinkIdSystem.js +1 -1
  109. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  110. package/dist/pubmaticBidAdapter.js +1 -1
  111. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  112. package/dist/pxyzBidAdapter.js +1 -1
  113. package/dist/quantcastBidAdapter.js +1 -1
  114. package/dist/rasBidAdapter.js +1 -1
  115. package/dist/readpeakBidAdapter.js +1 -1
  116. package/dist/relaidoBidAdapter.js +1 -1
  117. package/dist/rhythmoneBidAdapter.js +1 -1
  118. package/dist/riseBidAdapter.js +1 -1
  119. package/dist/rtbhouseBidAdapter.js +1 -1
  120. package/dist/rubiconAnalyticsAdapter.js +1 -1
  121. package/dist/rubiconBidAdapter.js +1 -1
  122. package/dist/seedingAllianceBidAdapter.js +1 -1
  123. package/dist/seedtagBidAdapter.js +1 -1
  124. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  125. package/dist/sharethroughBidAdapter.js +1 -1
  126. package/dist/shinezBidAdapter.js +1 -1
  127. package/dist/smaatoBidAdapter.js +1 -1
  128. package/dist/smartadserverBidAdapter.js +1 -1
  129. package/dist/smartxBidAdapter.js +1 -1
  130. package/dist/smilewantedBidAdapter.js +1 -1
  131. package/dist/sonobiBidAdapter.js +1 -1
  132. package/dist/sovrnAnalyticsAdapter.js +1 -1
  133. package/dist/sovrnBidAdapter.js +1 -1
  134. package/dist/sspBCBidAdapter.js +1 -1
  135. package/dist/sublimeBidAdapter.js +1 -1
  136. package/dist/synacormediaBidAdapter.js +1 -1
  137. package/dist/tappxBidAdapter.js +1 -1
  138. package/dist/targetVideoBidAdapter.js +1 -1
  139. package/dist/teadsBidAdapter.js +1 -1
  140. package/dist/trionBidAdapter.js +1 -1
  141. package/dist/tripleliftBidAdapter.js +1 -1
  142. package/dist/trustpidSystem.js +1 -1
  143. package/dist/ttdBidAdapter.js +1 -1
  144. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  145. package/dist/underdogmediaBidAdapter.js +1 -1
  146. package/dist/undertoneBidAdapter.js +1 -1
  147. package/dist/userId.js +1 -1
  148. package/dist/vidazooBidAdapter.js +1 -1
  149. package/dist/videobyteBidAdapter.js +1 -1
  150. package/dist/viewability.js +1 -1
  151. package/dist/visxBidAdapter.js +1 -1
  152. package/dist/vuukleBidAdapter.js +1 -1
  153. package/dist/widespaceBidAdapter.js +1 -1
  154. package/dist/winrBidAdapter.js +1 -1
  155. package/dist/yahoosspBidAdapter.js +1 -1
  156. package/dist/yieldmoBidAdapter.js +1 -1
  157. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  158. package/dist/zeta_global_sspBidAdapter.js +1 -1
  159. package/integrationExamples/gpt/permutiveRtdProvider_example.html +1 -1
  160. package/karma.conf.maker.js +2 -13
  161. package/modules/.submodules.json +2 -0
  162. package/modules/acuityAdsBidAdapter.js +207 -0
  163. package/modules/acuityAdsBidAdapter.md +79 -0
  164. package/modules/adagioBidAdapter.js +2 -3
  165. package/modules/adgenerationBidAdapter.js +2 -2
  166. package/modules/adkernelBidAdapter.js +28 -12
  167. package/modules/admixerBidAdapter.js +1 -1
  168. package/modules/adnowBidAdapter.js +1 -1
  169. package/modules/adpod.js +1 -1
  170. package/modules/adrelevantisBidAdapter.js +2 -2
  171. package/modules/adriverBidAdapter.js +5 -12
  172. package/modules/adriverIdSystem.js +2 -1
  173. package/modules/adtargetBidAdapter.js +1 -1
  174. package/modules/adtelligentBidAdapter.js +6 -2
  175. package/modules/adtrgtmeBidAdapter.js +333 -0
  176. package/modules/adtrgtmeBidAdapter.md +69 -0
  177. package/modules/adtrueBidAdapter.js +1 -1
  178. package/modules/adxpremiumAnalyticsAdapter.js +1 -1
  179. package/modules/adyoulikeBidAdapter.js +1 -1
  180. package/modules/alkimiBidAdapter.js +2 -1
  181. package/modules/aniviewBidAdapter.js +1 -1
  182. package/modules/appnexusBidAdapter.js +13 -93
  183. package/modules/apstreamBidAdapter.js +2 -2
  184. package/modules/beopBidAdapter.js +4 -4
  185. package/modules/betweenBidAdapter.js +4 -4
  186. package/modules/bidwatchAnalyticsAdapter.js +112 -59
  187. package/modules/bizzclickBidAdapter.js +1 -1
  188. package/modules/brightMountainMediaBidAdapter.js +1 -1
  189. package/modules/browsiRtdProvider.js +24 -10
  190. package/modules/cleanmedianetBidAdapter.js +1 -1
  191. package/modules/consentManagement.js +1 -1
  192. package/modules/consentManagementUsp.js +1 -1
  193. package/modules/consumableBidAdapter.js +43 -3
  194. package/modules/cpmstarBidAdapter.js +23 -13
  195. package/modules/criteoBidAdapter.js +19 -13
  196. package/modules/currency.js +1 -0
  197. package/modules/cwireBidAdapter.js +1 -1
  198. package/modules/datablocksBidAdapter.js +1 -1
  199. package/modules/datawrkzBidAdapter.js +633 -0
  200. package/modules/datawrkzBidAdapter.md +160 -0
  201. package/modules/dfpAdServerVideo.js +2 -2
  202. package/modules/dgkeywordRtdProvider.js +10 -1
  203. package/modules/displayioBidAdapter.js +92 -97
  204. package/modules/dspxBidAdapter.js +1 -1
  205. package/modules/e_volutionBidAdapter.js +3 -3
  206. package/modules/ebdrBidAdapter.js +1 -1
  207. package/modules/emx_digitalBidAdapter.js +1 -1
  208. package/modules/enrichmentFpdModule.js +11 -0
  209. package/modules/fabrickIdSystem.js +2 -2
  210. package/modules/gamoshiBidAdapter.js +1 -1
  211. package/modules/getintentBidAdapter.js +1 -1
  212. package/modules/gjirafaBidAdapter.js +2 -2
  213. package/modules/goldbachBidAdapter.js +8 -8
  214. package/modules/gothamadsBidAdapter.js +2 -2
  215. package/modules/gumgumBidAdapter.js +3 -3
  216. package/modules/h12mediaBidAdapter.js +1 -1
  217. package/modules/id5AnalyticsAdapter.js +1 -1
  218. package/modules/id5IdSystem.js +160 -111
  219. package/modules/id5IdSystem.md +16 -14
  220. package/modules/imRtdProvider.js +20 -7
  221. package/modules/imRtdProvider.md +3 -1
  222. package/modules/impactifyBidAdapter.js +1 -1
  223. package/modules/improvedigitalBidAdapter.js +50 -28
  224. package/modules/inskinBidAdapter.js +1 -1
  225. package/modules/insticatorBidAdapter.js +1 -1
  226. package/modules/integr8BidAdapter.js +2 -2
  227. package/modules/intentIqIdSystem.js +2 -2
  228. package/modules/interactiveOffersBidAdapter.js +1 -1
  229. package/modules/iqmBidAdapter.js +1 -1
  230. package/modules/ixBidAdapter.js +21 -328
  231. package/modules/ixBidAdapter.md +1 -19
  232. package/modules/kargoBidAdapter.js +4 -5
  233. package/modules/krushmediaBidAdapter.js +2 -2
  234. package/modules/lassoBidAdapter.js +3 -3
  235. package/modules/lifestreetBidAdapter.js +143 -0
  236. package/modules/limelightDigitalBidAdapter.js +2 -1
  237. package/modules/livewrappedAnalyticsAdapter.js +3 -3
  238. package/modules/lkqdBidAdapter.js +3 -3
  239. package/modules/loganBidAdapter.js +2 -2
  240. package/modules/luponmediaBidAdapter.js +3 -3
  241. package/modules/mabidderBidAdapter.js +60 -0
  242. package/modules/mabidderBidAdapter.md +31 -0
  243. package/modules/malltvBidAdapter.js +2 -2
  244. package/modules/mediagoBidAdapter.js +462 -0
  245. package/modules/mediagoBidAdapter.md +34 -0
  246. package/modules/mediakeysBidAdapter.js +2 -2
  247. package/modules/mgidBidAdapter.js +2 -2
  248. package/modules/nextMillenniumBidAdapter.js +25 -6
  249. package/modules/nobidBidAdapter.js +2 -2
  250. package/modules/novatiqIdSystem.js +1 -1
  251. package/modules/oneKeyIdSystem.js +78 -0
  252. package/modules/oneKeyIdSystem.md +109 -0
  253. package/modules/oneKeyRtdProvider.js +98 -0
  254. package/modules/oneKeyRtdProvider.md +127 -0
  255. package/modules/open8BidAdapter.js +1 -1
  256. package/modules/openwebBidAdapter.js +1 -1
  257. package/modules/openxAnalyticsAdapter.js +5 -744
  258. package/modules/openxAnalyticsAdapter.md +4 -0
  259. package/modules/openxBidAdapter.js +3 -3
  260. package/modules/permutiveRtdProvider.js +55 -8
  261. package/modules/pixfutureBidAdapter.js +1 -1
  262. package/modules/prebidmanagerAnalyticsAdapter.js +1 -1
  263. package/modules/priceFloors.js +1 -1
  264. package/modules/pubmaticAnalyticsAdapter.js +1 -1
  265. package/modules/pubmaticBidAdapter.js +19 -1
  266. package/modules/pubwiseAnalyticsAdapter.js +1 -1
  267. package/modules/pubwiseBidAdapter.js +3 -3
  268. package/modules/pubxBidAdapter.js +1 -1
  269. package/modules/pubxaiAnalyticsAdapter.js +2 -2
  270. package/modules/quantcastIdSystem.js +1 -1
  271. package/modules/radsBidAdapter.js +1 -1
  272. package/modules/rasBidAdapter.js +8 -0
  273. package/modules/rasBidAdapter.md +14 -13
  274. package/modules/revcontentBidAdapter.js +1 -1
  275. package/modules/richaudienceBidAdapter.js +1 -1
  276. package/modules/rtbhouseBidAdapter.js +25 -1
  277. package/modules/schain.js +1 -1
  278. package/modules/seedtagBidAdapter.md +25 -56
  279. package/modules/showheroes-bsBidAdapter.js +1 -1
  280. package/modules/sizeMappingV2.js +1 -1
  281. package/modules/smaatoBidAdapter.js +2 -2
  282. package/modules/sonobiAnalyticsAdapter.js +1 -1
  283. package/modules/sonobiBidAdapter.js +4 -3
  284. package/modules/staqAnalyticsAdapter.js +1 -1
  285. package/modules/tappxBidAdapter.js +11 -2
  286. package/modules/targetVideoBidAdapter.js +1 -1
  287. package/modules/theAdxBidAdapter.js +2 -2
  288. package/modules/tpmnBidAdapter.js +1 -1
  289. package/modules/trionBidAdapter.js +2 -2
  290. package/modules/tripleliftBidAdapter.js +20 -1
  291. package/modules/trustpidSystem.js +6 -42
  292. package/modules/trustpidSystem.md +10 -10
  293. package/modules/underdogmediaBidAdapter.js +1 -1
  294. package/modules/userId/eids.js +26 -0
  295. package/modules/userId/userId.md +2 -2
  296. package/modules/vdoaiBidAdapter.js +1 -1
  297. package/modules/vidazooBidAdapter.js +7 -5
  298. package/modules/vidoomyBidAdapter.js +1 -1
  299. package/modules/viewability.js +14 -14
  300. package/modules/winrBidAdapter.js +1 -1
  301. package/modules/yahoosspBidAdapter.js +3 -3
  302. package/modules/yandexBidAdapter.js +1 -1
  303. package/modules/yieldmoBidAdapter.js +3 -3
  304. package/modules/yieldoneBidAdapter.js +2 -2
  305. package/modules/zeta_global_sspBidAdapter.js +24 -21
  306. package/package.json +3 -3
  307. package/src/Renderer.js +1 -1
  308. package/src/adloader.js +2 -1
  309. package/src/adserver.js +0 -56
  310. package/src/auction.js +60 -16
  311. package/src/bidfactory.js +1 -1
  312. package/src/native.js +75 -60
  313. package/src/refererDetection.js +12 -1
  314. package/src/sizeMapping.js +5 -7
  315. package/src/targeting.js +1 -1
  316. package/src/userSync.js +1 -1
  317. package/src/utils/promise.js +3 -1
  318. package/src/utils.js +27 -0
  319. package/src/video.js +5 -4
  320. package/src/videoCache.js +8 -2
  321. package/test/pages/instream.html +2 -2
  322. package/test/spec/modules/acuityAdsBidAdapter_spec.js +398 -0
  323. package/test/spec/modules/adagioBidAdapter_spec.js +2 -0
  324. package/test/spec/modules/adkernelBidAdapter_spec.js +11 -2
  325. package/test/spec/modules/adriverBidAdapter_spec.js +6 -13
  326. package/test/spec/modules/adriverIdSystem_spec.js +3 -8
  327. package/test/spec/modules/adtelligentBidAdapter_spec.js +2 -0
  328. package/test/spec/modules/adtrgtmeBidAdapter_spec.js +802 -0
  329. package/test/spec/modules/alkimiBidAdapter_spec.js +2 -1
  330. package/test/spec/modules/appnexusBidAdapter_spec.js +1 -0
  331. package/test/spec/modules/beopBidAdapter_spec.js +11 -0
  332. package/test/spec/modules/betweenBidAdapter_spec.js +17 -0
  333. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +28 -12
  334. package/test/spec/modules/big-richmediaBidAdapter_spec.js +1 -0
  335. package/test/spec/modules/browsiRtdProvider_spec.js +40 -1
  336. package/test/spec/modules/consumableBidAdapter_spec.js +158 -0
  337. package/test/spec/modules/cpmstarBidAdapter_spec.js +1 -1
  338. package/test/spec/modules/criteoBidAdapter_spec.js +35 -26
  339. package/test/spec/modules/currency_spec.js +22 -0
  340. package/test/spec/modules/datawrkzBidAdapter_spec.js +656 -0
  341. package/test/spec/modules/dgkeywordRtdProvider_spec.js +1 -1
  342. package/test/spec/modules/displayioBidAdapter_spec.js +16 -52
  343. package/test/spec/modules/enrichmentFpdModule_spec.js +16 -1
  344. package/test/spec/modules/fpdModule_spec.js +2 -1
  345. package/test/spec/modules/id5IdSystem_spec.js +529 -172
  346. package/test/spec/modules/imRtdProvider_spec.js +10 -5
  347. package/test/spec/modules/improvedigitalBidAdapter_spec.js +9 -13
  348. package/test/spec/modules/ixBidAdapter_spec.js +216 -123
  349. package/test/spec/modules/kargoBidAdapter_spec.js +11 -2
  350. package/test/spec/modules/lifestreetBidAdapter_spec.js +232 -0
  351. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +59 -7
  352. package/test/spec/modules/mabidderBidAdapter_spec.js +125 -0
  353. package/test/spec/modules/mediagoBidAdapter_spec.js +97 -0
  354. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +2 -7
  355. package/test/spec/modules/oneKeyIdSystem_spec.js +107 -0
  356. package/test/spec/modules/oneKeyRtdProvider_spec.js +152 -0
  357. package/test/spec/modules/openxAnalyticsAdapter_spec.js +6 -638
  358. package/test/spec/modules/permutiveRtdProvider_spec.js +152 -2
  359. package/test/spec/modules/pubmaticBidAdapter_spec.js +69 -4
  360. package/test/spec/modules/rasBidAdapter_spec.js +2 -0
  361. package/test/spec/modules/tripleliftBidAdapter_spec.js +18 -0
  362. package/test/spec/modules/trustpidSystem_spec.js +27 -45
  363. package/test/spec/modules/vidazooBidAdapter_spec.js +36 -23
  364. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +59 -0
  365. package/test/spec/native_spec.js +257 -2
  366. package/test/spec/videoCache_spec.js +37 -7
@@ -44,6 +44,48 @@ describe('Zeta Ssp Bid Adapter', function () {
44
44
  test: 1
45
45
  };
46
46
 
47
+ const multiImpRequest = [
48
+ {
49
+ bidId: 12345,
50
+ auctionId: 67890,
51
+ mediaTypes: {
52
+ banner: {
53
+ sizes: [[300, 250]],
54
+ }
55
+ },
56
+ refererInfo: {
57
+ page: 'http://www.zetaglobal.com/page?param=value',
58
+ domain: 'www.zetaglobal.com',
59
+ },
60
+ gdprConsent: {
61
+ gdprApplies: 1,
62
+ consentString: 'consentString'
63
+ },
64
+ uspConsent: 'someCCPAString',
65
+ params: params,
66
+ userIdAsEids: eids
67
+ }, {
68
+ bidId: 54321,
69
+ auctionId: 67890,
70
+ mediaTypes: {
71
+ banner: {
72
+ sizes: [[600, 400]],
73
+ }
74
+ },
75
+ refererInfo: {
76
+ page: 'http://www.zetaglobal.com/page?param=value',
77
+ domain: 'www.zetaglobal.com',
78
+ },
79
+ gdprConsent: {
80
+ gdprApplies: 1,
81
+ consentString: 'consentString'
82
+ },
83
+ uspConsent: 'someCCPAString',
84
+ params: params,
85
+ userIdAsEids: eids
86
+ }
87
+ ];
88
+
47
89
  const bannerRequest = [{
48
90
  bidId: 12345,
49
91
  auctionId: 67890,
@@ -285,4 +327,21 @@ describe('Zeta Ssp Bid Adapter', function () {
285
327
  expect(payload.ext.tags.someTag).to.eql(444);
286
328
  expect(payload.ext.tags.shortname).to.be.undefined;
287
329
  });
330
+
331
+ it('Test multi imp', function () {
332
+ const request = spec.buildRequests(multiImpRequest, multiImpRequest[0]);
333
+ const payload = JSON.parse(request.data);
334
+ expect(request.url).to.eql('https://ssp.disqus.com/bid/prebid?shortname=test_shortname');
335
+
336
+ expect(payload.imp.length).to.eql(2);
337
+
338
+ expect(payload.imp[0].id).to.eql(12345);
339
+ expect(payload.imp[1].id).to.eql(54321);
340
+
341
+ expect(payload.imp[0].banner.w).to.eql(300);
342
+ expect(payload.imp[0].banner.h).to.eql(250);
343
+
344
+ expect(payload.imp[1].banner.w).to.eql(600);
345
+ expect(payload.imp[1].banner.h).to.eql(400);
346
+ });
288
347
  });
@@ -44,6 +44,106 @@ const bid = {
44
44
  },
45
45
  };
46
46
 
47
+ const ortbBid = {
48
+ adId: '123',
49
+ transactionId: 'au',
50
+ native: {
51
+ ortb: {
52
+ assets: [
53
+ {
54
+ id: 0,
55
+ title: {
56
+ text: 'Native Creative'
57
+ }
58
+ },
59
+ {
60
+ id: 1,
61
+ data: {
62
+ value: 'Cool description great stuff'
63
+ }
64
+ },
65
+ {
66
+ id: 2,
67
+ data: {
68
+ value: 'Do it'
69
+ }
70
+ },
71
+ {
72
+ id: 3,
73
+ img: {
74
+ url: 'http://cdn.example.com/p/creative-image/image.png',
75
+ h: 83,
76
+ w: 127
77
+ }
78
+ },
79
+ {
80
+ id: 4,
81
+ img: {
82
+ url: 'http://cdn.example.com/p/creative-image/icon.jpg',
83
+ h: 742,
84
+ w: 989
85
+ }
86
+ },
87
+ {
88
+ id: 5,
89
+ data: {
90
+ value: 'AppNexus',
91
+ type: 1
92
+ }
93
+ }
94
+ ],
95
+ link: {
96
+ url: 'https://www.link.example'
97
+ },
98
+ privacy: 'https://privacy-link.example',
99
+ ver: '1.2'
100
+ }
101
+ },
102
+ };
103
+
104
+ const ortbRequest = {
105
+ assets: [
106
+ {
107
+ id: 0,
108
+ required: 0,
109
+ title: {
110
+ len: 140
111
+ }
112
+ }, {
113
+ id: 1,
114
+ required: 0,
115
+ data: {
116
+ type: 2
117
+ }
118
+ }, {
119
+ id: 2,
120
+ required: 0,
121
+ data: {
122
+ type: 12
123
+ }
124
+ }, {
125
+ id: 3,
126
+ required: 0,
127
+ img: {
128
+ type: 3
129
+ }
130
+ }, {
131
+ id: 4,
132
+ required: 0,
133
+ img: {
134
+ type: 1
135
+ }
136
+ }, {
137
+ id: 5,
138
+ required: 0,
139
+ data: {
140
+ type: 1
141
+ }
142
+ }
143
+ ],
144
+ ver: '1.2'
145
+ }
146
+
47
147
  const bidWithUndefinedFields = {
48
148
  transactionId: 'au',
49
149
  native: {
@@ -400,6 +500,110 @@ describe('native.js', function () {
400
500
  value: bid.native.ext.foo,
401
501
  });
402
502
  });
503
+
504
+ it('creates native all asset message with OpenRTB format', function () {
505
+ const messageRequest = {
506
+ message: 'Prebid Native',
507
+ action: 'allAssetRequest',
508
+ adId: '123',
509
+ };
510
+
511
+ const message = getAllAssetsMessage(messageRequest, ortbBid, {getNativeReq: () => ortbRequest});
512
+
513
+ expect(message.assets.length).to.equal(8);
514
+ expect(message.assets).to.deep.include({
515
+ key: 'body',
516
+ value: bid.native.body,
517
+ });
518
+ expect(message.assets).to.deep.include({
519
+ key: 'image',
520
+ value: bid.native.image.url,
521
+ });
522
+ expect(message.assets).to.deep.include({
523
+ key: 'clickUrl',
524
+ value: bid.native.clickUrl,
525
+ });
526
+ expect(message.assets).to.deep.include({
527
+ key: 'title',
528
+ value: bid.native.title,
529
+ });
530
+ expect(message.assets).to.deep.include({
531
+ key: 'icon',
532
+ value: bid.native.icon.url,
533
+ });
534
+ expect(message.assets).to.deep.include({
535
+ key: 'cta',
536
+ value: bid.native.cta,
537
+ });
538
+ expect(message.assets).to.deep.include({
539
+ key: 'sponsoredBy',
540
+ value: bid.native.sponsoredBy,
541
+ });
542
+ expect(message.assets).to.deep.include({
543
+ key: 'privacyLink',
544
+ value: ortbBid.native.ortb.privacy,
545
+ });
546
+ });
547
+
548
+ const SAMPLE_ORTB_REQUEST = toOrtbNativeRequest({
549
+ title: 'vtitle',
550
+ body: 'vbody'
551
+ });
552
+ const SAMPLE_ORTB_RESPONSE = {
553
+ native: {
554
+ ortb: {
555
+ link: {
556
+ url: 'url'
557
+ },
558
+ assets: [
559
+ {
560
+ id: 0,
561
+ title: {
562
+ text: 'vtitle'
563
+ }
564
+ },
565
+ {
566
+ id: 1,
567
+ data: {
568
+ value: 'vbody'
569
+ }
570
+ }
571
+ ]
572
+ }
573
+ }
574
+ }
575
+ describe('getAllAssetsMessage', () => {
576
+ it('returns assets in legacy format for ortb responses', () => {
577
+ const actual = getAllAssetsMessage({}, SAMPLE_ORTB_RESPONSE, {getNativeReq: () => SAMPLE_ORTB_REQUEST});
578
+ expect(actual.assets).to.eql([
579
+ {
580
+ key: 'clickUrl',
581
+ value: 'url'
582
+ },
583
+ {
584
+ key: 'title',
585
+ value: 'vtitle'
586
+ },
587
+ {
588
+ key: 'body',
589
+ value: 'vbody'
590
+ },
591
+ ])
592
+ });
593
+ });
594
+ describe('getAssetsMessage', () => {
595
+ Object.entries({
596
+ 'hb_native_title': {key: 'title', value: 'vtitle'},
597
+ 'hb_native_body': {key: 'body', value: 'vbody'}
598
+ }).forEach(([tkey, assetVal]) => {
599
+ it(`returns ${tkey} asset in legacy format for ortb responses`, () => {
600
+ const actual = getAssetMessage({
601
+ assets: [tkey]
602
+ }, SAMPLE_ORTB_RESPONSE, {getNativeReq: () => SAMPLE_ORTB_REQUEST})
603
+ expect(actual.assets).to.eql([assetVal])
604
+ })
605
+ })
606
+ })
403
607
  });
404
608
 
405
609
  describe('validate native openRTB', function () {
@@ -1008,8 +1212,8 @@ describe('fireClickTrackers', () => {
1008
1212
  fetchURL = sinon.stub();
1009
1213
  });
1010
1214
 
1011
- function runTrackers(resp) {
1012
- fireClickTrackers(resp, {fetchURL});
1215
+ function runTrackers(resp, assetId = null) {
1216
+ fireClickTrackers(resp, assetId, {fetchURL});
1013
1217
  }
1014
1218
 
1015
1219
  it('should load each URL in link.clicktrackers', () => {
@@ -1021,4 +1225,55 @@ describe('fireClickTrackers', () => {
1021
1225
  });
1022
1226
  urls.forEach(url => sinon.assert.calledWith(fetchURL, url));
1023
1227
  })
1228
+
1229
+ it('should load each URL in asset.link.clicktrackers, when response is ORTB', () => {
1230
+ const urls = ['asset_url1', 'asset_url2'];
1231
+ runTrackers({
1232
+ assets: [
1233
+ {
1234
+ id: 1,
1235
+ link: {
1236
+ clicktrackers: urls
1237
+ }
1238
+ }
1239
+ ],
1240
+ }, 1);
1241
+ urls.forEach(url => sinon.assert.calledWith(fetchURL, url));
1242
+ })
1243
+ })
1244
+
1245
+ describe('toOrtbNativeResponse', () => {
1246
+ it('should work when there are unrequested assets in the response', () => {
1247
+ const legacyResponse = {
1248
+ 'title': 'vtitle',
1249
+ 'body': 'vbody'
1250
+ }
1251
+ const request = toOrtbNativeRequest({
1252
+ title: {
1253
+ required: 'true'
1254
+ },
1255
+
1256
+ });
1257
+ const ortbResponse = toOrtbNativeResponse(legacyResponse, request);
1258
+ expect(ortbResponse.assets.length).to.eql(1);
1259
+ });
1260
+
1261
+ it('should not modify the request', () => {
1262
+ const legacyResponse = {
1263
+ title: 'vtitle'
1264
+ }
1265
+ const request = toOrtbNativeRequest({
1266
+ title: {
1267
+ required: true
1268
+ }
1269
+ });
1270
+ const requestCopy = JSON.parse(JSON.stringify(request));
1271
+ const response = toOrtbNativeResponse(legacyResponse, request);
1272
+ expect(request).to.eql(requestCopy);
1273
+ sinon.assert.match(response.assets[0], {
1274
+ title: {
1275
+ text: 'vtitle'
1276
+ }
1277
+ })
1278
+ })
1024
1279
  })
@@ -4,6 +4,7 @@ import { config } from 'src/config.js';
4
4
  import { server } from 'test/mocks/xhr.js';
5
5
  import {auctionManager} from '../../src/auctionManager.js';
6
6
  import {AuctionIndex} from '../../src/auctionIndex.js';
7
+ import { batchingCache } from '../../src/auction.js';
7
8
 
8
9
  const should = chai.should();
9
10
 
@@ -155,12 +156,12 @@ describe('The video cache', function () {
155
156
  puts: [{
156
157
  type: 'xml',
157
158
  value: vastXml1,
158
- ttlseconds: 25,
159
+ ttlseconds: 40,
159
160
  key: customKey1
160
161
  }, {
161
162
  type: 'xml',
162
163
  value: vastXml2,
163
- ttlseconds: 25,
164
+ ttlseconds: 40,
164
165
  key: customKey2
165
166
  }]
166
167
  };
@@ -205,7 +206,7 @@ describe('The video cache', function () {
205
206
  puts: [{
206
207
  type: 'xml',
207
208
  value: vastXml1,
208
- ttlseconds: 25,
209
+ ttlseconds: 40,
209
210
  key: customKey1,
210
211
  bidid: '12345abc',
211
212
  aid: '1234-56789-abcde',
@@ -213,7 +214,7 @@ describe('The video cache', function () {
213
214
  }, {
214
215
  type: 'xml',
215
216
  value: vastXml2,
216
- ttlseconds: 25,
217
+ ttlseconds: 40,
217
218
  key: customKey2,
218
219
  bidid: 'cba54321',
219
220
  aid: '1234-56789-abcde',
@@ -276,7 +277,7 @@ describe('The video cache', function () {
276
277
  puts: [{
277
278
  type: 'xml',
278
279
  value: vastXml1,
279
- ttlseconds: 25,
280
+ ttlseconds: 40,
280
281
  key: customKey1,
281
282
  bidid: '12345abc',
282
283
  bidder: 'appnexus',
@@ -285,7 +286,7 @@ describe('The video cache', function () {
285
286
  }, {
286
287
  type: 'xml',
287
288
  value: vastXml2,
288
- ttlseconds: 25,
289
+ ttlseconds: 40,
289
290
  key: customKey2,
290
291
  bidid: 'cba54321',
291
292
  bidder: 'rubicon',
@@ -297,6 +298,35 @@ describe('The video cache', function () {
297
298
  JSON.parse(request.requestBody).should.deep.equal(payload);
298
299
  });
299
300
 
301
+ it('should wait the duration of the batchTimeout and pass the correct batchSize if batched requests are enabled in the config', () => {
302
+ const mockAfterBidAdded = function() {};
303
+ let callback = null;
304
+ let mockTimeout = sinon.stub().callsFake((cb) => { callback = cb });
305
+
306
+ config.setConfig({
307
+ cache: {
308
+ url: 'https://prebid.adnxs.com/pbc/v1/cache',
309
+ batchSize: 3,
310
+ batchTimeout: 20
311
+ }
312
+ });
313
+
314
+ let stubCache = sinon.stub();
315
+ const batchAndStore = batchingCache(mockTimeout, stubCache);
316
+ for (let i = 0; i < 3; i++) {
317
+ batchAndStore({}, {}, mockAfterBidAdded);
318
+ }
319
+
320
+ sinon.assert.calledOnce(mockTimeout);
321
+ sinon.assert.calledWith(mockTimeout, sinon.match.any, 20);
322
+
323
+ const expectedBatch = [{ afterBidAdded: mockAfterBidAdded, auctionInstance: { }, bidResponse: { } }, { afterBidAdded: mockAfterBidAdded, auctionInstance: { }, bidResponse: { } }, { afterBidAdded: mockAfterBidAdded, auctionInstance: { }, bidResponse: { } }];
324
+
325
+ callback();
326
+
327
+ sinon.assert.calledWith(stubCache, expectedBatch);
328
+ });
329
+
300
330
  function assertRequestMade(bid, expectedValue) {
301
331
  store([bid], function () { });
302
332
 
@@ -309,7 +339,7 @@ describe('The video cache', function () {
309
339
  puts: [{
310
340
  type: 'xml',
311
341
  value: expectedValue,
312
- ttlseconds: 25
342
+ ttlseconds: 40
313
343
  }],
314
344
  });
315
345
  }