prebid.js 9.4.1 → 9.6.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/.eslintrc.js +31 -5
  2. package/.github/workflows/jscpd.yml +2 -2
  3. package/.github/workflows/linter.yml +107 -0
  4. package/creative/crossDomain.js +6 -3
  5. package/dist/33acrossAnalyticsAdapter.js +1 -1
  6. package/dist/33acrossBidAdapter.js +1 -1
  7. package/dist/33acrossIdSystem.js +1 -1
  8. package/dist/BTBidAdapter.js +1 -1
  9. package/dist/adagioAnalyticsAdapter.js +1 -1
  10. package/dist/adagioBidAdapter.js +1 -1
  11. package/dist/adagioRtdProvider.js +1 -1
  12. package/dist/adagioUtils.js +1 -1
  13. package/dist/addefendBidAdapter.js +1 -1
  14. package/dist/adgenerationBidAdapter.js +1 -1
  15. package/dist/adkernelAdnBidAdapter.js +1 -1
  16. package/dist/adkernelBidAdapter.js +1 -1
  17. package/dist/adkernelUtils.js +1 -0
  18. package/dist/adlooxRtdProvider.js +1 -1
  19. package/dist/admixerBidAdapter.js +1 -1
  20. package/dist/adqueryBidAdapter.js +1 -1
  21. package/dist/adrelevantisBidAdapter.js +1 -1
  22. package/dist/adstirBidAdapter.js +1 -1
  23. package/dist/adtrgtmeBidAdapter.js +1 -1
  24. package/dist/advRedAnalyticsAdapter.js +1 -0
  25. package/dist/adxcgAnalyticsAdapter.js +1 -1
  26. package/dist/adxcgBidAdapter.js +1 -1
  27. package/dist/adyoulikeBidAdapter.js +1 -1
  28. package/dist/agmaAnalyticsAdapter.js +1 -1
  29. package/dist/aidemBidAdapter.js +1 -1
  30. package/dist/ajaBidAdapter.js +1 -1
  31. package/dist/akamaiDapRtdProvider.js +1 -1
  32. package/dist/amxBidAdapter.js +1 -1
  33. package/dist/amxIdSystem.js +1 -1
  34. package/dist/anonymisedRtdProvider.js +1 -1
  35. package/dist/apacdexBidAdapter.js +1 -1
  36. package/dist/appierAnalyticsAdapter.js +1 -1
  37. package/dist/appnexusBidAdapter.js +1 -1
  38. package/dist/asoBidAdapter.js +1 -1
  39. package/dist/axonixBidAdapter.js +1 -1
  40. package/dist/azerionedgeRtdProvider.js +1 -1
  41. package/dist/bidglassBidAdapter.js +1 -1
  42. package/dist/big-richmediaBidAdapter.js +1 -1
  43. package/dist/bridBidAdapter.js +1 -1
  44. package/dist/bridgewellBidAdapter.js +1 -1
  45. package/dist/brightMountainMediaBidAdapter.js +1 -1
  46. package/dist/carodaBidAdapter.js +1 -1
  47. package/dist/chtnwBidAdapter.js +1 -1
  48. package/dist/chunk-core.js +1 -1
  49. package/dist/concertBidAdapter.js +1 -1
  50. package/dist/connatixBidAdapter.js +1 -1
  51. package/dist/connectIdSystem.js +1 -1
  52. package/dist/connectadBidAdapter.js +1 -1
  53. package/dist/consumableBidAdapter.js +1 -1
  54. package/dist/contxtfulRtdProvider.js +1 -1
  55. package/dist/conversantAnalyticsAdapter.js +1 -1
  56. package/dist/conversantBidAdapter.js +1 -1
  57. package/dist/craftBidAdapter.js +1 -1
  58. package/dist/criteoBidAdapter.js +1 -1
  59. package/dist/currencyUtils.js +1 -1
  60. package/dist/cwireBidAdapter.js +1 -1
  61. package/dist/dailymotionBidAdapter.js +1 -1
  62. package/dist/debugging-standalone.js +1 -1
  63. package/dist/dependencies.json +69 -8
  64. package/dist/dfpAdServerVideo.js +1 -1
  65. package/dist/dfpAdpod.js +1 -1
  66. package/dist/dfpUtils.js +1 -1
  67. package/dist/discoveryBidAdapter.js +1 -1
  68. package/dist/dspxBidAdapter.js +1 -1
  69. package/dist/dxkultureBidAdapter.js +1 -1
  70. package/dist/eightPodAnalyticsAdapter.js +1 -1
  71. package/dist/eightPodBidAdapter.js +1 -1
  72. package/dist/eplanningBidAdapter.js +1 -1
  73. package/dist/euidIdSystem.js +1 -1
  74. package/dist/exadsBidAdapter.js +1 -1
  75. package/dist/feedadBidAdapter.js +1 -1
  76. package/dist/finativeBidAdapter.js +1 -1
  77. package/dist/fintezaAnalyticsAdapter.js +1 -1
  78. package/dist/fpdUtils.js +1 -0
  79. package/dist/freewheel-sspBidAdapter.js +1 -1
  80. package/dist/gmosspBidAdapter.js +1 -1
  81. package/dist/goldbachBidAdapter.js +1 -1
  82. package/dist/gptPreAuction.js +1 -1
  83. package/dist/gptUtils.js +1 -1
  84. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  85. package/dist/greenbidsRtdProvider.js +1 -1
  86. package/dist/gridBidAdapter.js +1 -1
  87. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  88. package/dist/growthCodeRtdProvider.js +1 -1
  89. package/dist/gumgumBidAdapter.js +1 -1
  90. package/dist/h12mediaBidAdapter.js +1 -1
  91. package/dist/hypelabBidAdapter.js +1 -1
  92. package/dist/id5AnalyticsAdapter.js +1 -1
  93. package/dist/id5IdSystem.js +1 -1
  94. package/dist/imdsBidAdapter.js +1 -1
  95. package/dist/improvedigitalBidAdapter.js +1 -1
  96. package/dist/insticatorBidAdapter.js +1 -1
  97. package/dist/intentIqAnalyticsAdapter.js +1 -0
  98. package/dist/ixBidAdapter.js +1 -1
  99. package/dist/jixieBidAdapter.js +1 -1
  100. package/dist/justpremiumBidAdapter.js +1 -1
  101. package/dist/jwplayerBidAdapter.js +1 -1
  102. package/dist/jwplayerRtdProvider.js +1 -1
  103. package/dist/kargoBidAdapter.js +1 -1
  104. package/dist/kimberliteBidAdapter.js +1 -1
  105. package/dist/konduitAnalyticsAdapter.js +1 -1
  106. package/dist/kueezBidAdapter.js +1 -1
  107. package/dist/lassoBidAdapter.js +1 -1
  108. package/dist/lifestreetBidAdapter.js +1 -1
  109. package/dist/liveIntentIdSystem.js +1 -1
  110. package/dist/logicadBidAdapter.js +1 -1
  111. package/dist/loglyliftBidAdapter.js +1 -1
  112. package/dist/luceadBidAdapter.js +1 -1
  113. package/dist/mabidderBidAdapter.js +1 -1
  114. package/dist/magniteAnalyticsAdapter.js +1 -1
  115. package/dist/malltvAnalyticsAdapter.js +1 -1
  116. package/dist/marsmediaBidAdapter.js +1 -1
  117. package/dist/mediafuseBidAdapter.js +1 -1
  118. package/dist/mediagoBidAdapter.js +1 -1
  119. package/dist/medianetAnalyticsAdapter.js +1 -1
  120. package/dist/medianetBidAdapter.js +1 -1
  121. package/dist/mediasquareBidAdapter.js +1 -1
  122. package/dist/mgidBidAdapter.js +1 -1
  123. package/dist/minutemediaBidAdapter.js +1 -1
  124. package/dist/missenaBidAdapter.js +1 -1
  125. package/dist/mobianRtdProvider.js +1 -1
  126. package/dist/nextMillenniumBidAdapter.js +1 -1
  127. package/dist/nexx360BidAdapter.js +1 -1
  128. package/dist/nobidAnalyticsAdapter.js +1 -1
  129. package/dist/nobidBidAdapter.js +1 -1
  130. package/dist/not-for-prod/prebid.js +208 -199
  131. package/dist/oguryBidAdapter.js +1 -1
  132. package/dist/onetagBidAdapter.js +1 -1
  133. package/dist/ooloAnalyticsAdapter.js +1 -1
  134. package/dist/openwebBidAdapter.js +1 -1
  135. package/dist/openxBidAdapter.js +1 -1
  136. package/dist/optidigitalBidAdapter.js +1 -1
  137. package/dist/optoutBidAdapter.js +1 -1
  138. package/dist/orbidderBidAdapter.js +1 -1
  139. package/dist/outbrainBidAdapter.js +1 -1
  140. package/dist/paapi.js +1 -1
  141. package/dist/permutiveRtdProvider.js +1 -1
  142. package/dist/pixfutureBidAdapter.js +1 -1
  143. package/dist/playdigoBidAdapter.js +1 -1
  144. package/dist/prebidServerBidAdapter.js +1 -1
  145. package/dist/programmaticaBidAdapter.js +1 -1
  146. package/dist/publinkIdSystem.js +1 -1
  147. package/dist/publirBidAdapter.js +1 -1
  148. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  149. package/dist/pubmaticBidAdapter.js +1 -1
  150. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  151. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  152. package/dist/pxyzBidAdapter.js +1 -1
  153. package/dist/quantcastBidAdapter.js +1 -1
  154. package/dist/readpeakBidAdapter.js +1 -1
  155. package/dist/relaidoBidAdapter.js +1 -1
  156. package/dist/relevatehealthBidAdapter.js +1 -1
  157. package/dist/retailspotBidAdapter.js +1 -1
  158. package/dist/rhythmoneBidAdapter.js +1 -1
  159. package/dist/ringieraxelspringerBidAdapter.js +1 -1
  160. package/dist/riseBidAdapter.js +1 -1
  161. package/dist/riseUtils.js +1 -0
  162. package/dist/rubiconBidAdapter.js +1 -1
  163. package/dist/schainSerializer.js +1 -0
  164. package/dist/seedingAllianceBidAdapter.js +1 -1
  165. package/dist/seedtagBidAdapter.js +1 -1
  166. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  167. package/dist/sharethroughBidAdapter.js +1 -1
  168. package/dist/shinezBidAdapter.js +1 -1
  169. package/dist/sizeMapping.js +1 -1
  170. package/dist/sizeUtils.js +1 -1
  171. package/dist/smaatoBidAdapter.js +1 -1
  172. package/dist/smartadserverBidAdapter.js +1 -1
  173. package/dist/smarthubBidAdapter.js +1 -1
  174. package/dist/smartxBidAdapter.js +1 -1
  175. package/dist/smilewantedBidAdapter.js +1 -1
  176. package/dist/snigelBidAdapter.js +1 -1
  177. package/dist/sonobiBidAdapter.js +1 -1
  178. package/dist/sovrnBidAdapter.js +1 -1
  179. package/dist/sspBCBidAdapter.js +1 -1
  180. package/dist/stnBidAdapter.js +1 -1
  181. package/dist/stvBidAdapter.js +1 -1
  182. package/dist/sublimeBidAdapter.js +1 -1
  183. package/dist/symitriDapRtdProvider.js +1 -0
  184. package/dist/taboolaBidAdapter.js +1 -1
  185. package/dist/tappxBidAdapter.js +1 -1
  186. package/dist/targetVideoBidAdapter.js +1 -1
  187. package/dist/targetVideoUtils.js +1 -0
  188. package/dist/teadsBidAdapter.js +1 -1
  189. package/dist/telariaBidAdapter.js +1 -1
  190. package/dist/teqblazeUtils.js +1 -1
  191. package/dist/terceptAnalyticsAdapter.js +1 -1
  192. package/dist/themoneytizerBidAdapter.js +1 -1
  193. package/dist/trionBidAdapter.js +1 -1
  194. package/dist/tripleliftBidAdapter.js +1 -1
  195. package/dist/ttdBidAdapter.js +1 -1
  196. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  197. package/dist/uid2IdSystem.js +1 -1
  198. package/dist/uid2IdSystem_shared.js +1 -1
  199. package/dist/underdogmediaBidAdapter.js +1 -1
  200. package/dist/undertoneBidAdapter.js +1 -1
  201. package/dist/unrulyBidAdapter.js +1 -1
  202. package/dist/userAgentUtils.js +1 -0
  203. package/dist/utiqIdSystem.js +1 -1
  204. package/dist/vidazooUtils.js +1 -1
  205. package/dist/videobyteBidAdapter.js +1 -1
  206. package/dist/visxBidAdapter.js +1 -1
  207. package/dist/vuukleBidAdapter.js +1 -1
  208. package/dist/widespaceBidAdapter.js +1 -1
  209. package/dist/winrBidAdapter.js +1 -1
  210. package/dist/yahooAdsBidAdapter.js +1 -1
  211. package/dist/yandexIdSystem.js +1 -1
  212. package/dist/yieldmoBidAdapter.js +1 -1
  213. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  214. package/integrationExamples/gpt/x-domain/creative.html +1 -1
  215. package/libraries/adkernelUtils/adkernelUtils.js +11 -0
  216. package/libraries/currencyUtils/floor.js +23 -0
  217. package/libraries/dfpUtils/dfpUtils.js +7 -0
  218. package/libraries/fpdUtils/deviceInfo.js +58 -0
  219. package/libraries/fpdUtils/pageInfo.js +73 -0
  220. package/libraries/gptUtils/gptUtils.js +23 -1
  221. package/libraries/riseUtils/index.js +330 -0
  222. package/libraries/schainSerializer/schainSerializer.js +24 -0
  223. package/libraries/sizeUtils/tranformSize.js +43 -0
  224. package/libraries/targetVideoUtils/bidderUtils.js +178 -0
  225. package/libraries/targetVideoUtils/constants.js +23 -0
  226. package/libraries/teqblazeUtils/bidderUtils.js +15 -11
  227. package/libraries/userAgentUtils/index.js +58 -0
  228. package/libraries/userAgentUtils/userAgentTypes.enums.js +22 -0
  229. package/modules/.submodules.json +1 -0
  230. package/modules/33acrossAnalyticsAdapter.js +2 -0
  231. package/modules/adagioAnalyticsAdapter.js +101 -84
  232. package/modules/adagioAnalyticsAdapter.md +4 -0
  233. package/modules/adagioBidAdapter.js +5 -17
  234. package/modules/adagioRtdProvider.js +18 -4
  235. package/modules/adkernelAdnBidAdapter.js +1 -12
  236. package/modules/adkernelBidAdapter.js +4 -13
  237. package/modules/adlooxAnalyticsAdapter.js +1 -0
  238. package/modules/admixerBidAdapter.js +10 -6
  239. package/modules/admixerBidAdapter.md +7 -10
  240. package/modules/adtrgtmeBidAdapter.js +1 -1
  241. package/modules/advRedAnalyticsAdapter.js +198 -0
  242. package/modules/advRedAnalyticsAdapter.md +30 -0
  243. package/modules/aidemBidAdapter.js +2 -0
  244. package/modules/akamaiDapRtdProvider.js +19 -798
  245. package/modules/anonymisedRtdProvider.js +5 -1
  246. package/modules/anonymisedRtdProvider.md +1 -1
  247. package/modules/apacdexBidAdapter.js +1 -1
  248. package/modules/appnexusBidAdapter.js +56 -2
  249. package/modules/automatadAnalyticsAdapter.js +2 -0
  250. package/modules/azerionedgeRtdProvider.js +13 -3
  251. package/modules/azerionedgeRtdProvider.md +0 -17
  252. package/modules/bridBidAdapter.js +47 -47
  253. package/modules/cleanioRtdProvider.js +1 -0
  254. package/modules/concertBidAdapter.js +1 -1
  255. package/modules/connatixBidAdapter.js +36 -8
  256. package/modules/connectIdSystem.js +6 -2
  257. package/modules/contxtfulRtdProvider.js +20 -2
  258. package/modules/contxtfulRtdProvider.md +1 -0
  259. package/modules/craftBidAdapter.js +1 -1
  260. package/modules/criteoBidAdapter.js +1 -1
  261. package/modules/cwireBidAdapter.js +5 -1
  262. package/modules/dailymotionBidAdapter.js +85 -65
  263. package/modules/debugging/debugging.js +3 -0
  264. package/modules/dfpAdServerVideo.js +15 -33
  265. package/modules/dfpAdpod.js +2 -6
  266. package/modules/dgkeywordRtdProvider.js +2 -0
  267. package/modules/discoveryBidAdapter.js +26 -210
  268. package/modules/dspxBidAdapter.js +176 -54
  269. package/modules/eightPodAnalyticsAdapter.js +28 -34
  270. package/modules/eightPodBidAdapter.js +113 -57
  271. package/modules/fintezaAnalyticsAdapter.js +9 -4
  272. package/modules/goldbachBidAdapter.js +1 -1
  273. package/modules/gptPreAuction.js +63 -4
  274. package/modules/growthCodeAnalyticsAdapter.js +1 -1
  275. package/modules/growthCodeRtdProvider.js +1 -1
  276. package/modules/gumgumBidAdapter.js +14 -10
  277. package/modules/improvedigitalBidAdapter.js +1 -1
  278. package/modules/insticatorBidAdapter.js +35 -31
  279. package/modules/intentIqAnalyticsAdapter.js +234 -0
  280. package/modules/intentIqAnalyticsAdapter.md +27 -0
  281. package/modules/intentIqIdSystem.md +0 -0
  282. package/modules/jwplayerBidAdapter.js +1 -1
  283. package/modules/jwplayerRtdProvider.js +26 -6
  284. package/modules/jwplayerVideoProvider.js +6 -0
  285. package/modules/kargoBidAdapter.js +11 -14
  286. package/modules/kimberliteBidAdapter.js +24 -7
  287. package/modules/kimberliteBidAdapter.md +30 -1
  288. package/modules/mediafuseBidAdapter.js +1 -1
  289. package/modules/mediagoBidAdapter.js +7 -176
  290. package/modules/medianetBidAdapter.js +101 -40
  291. package/modules/mgidBidAdapter.js +3 -1
  292. package/modules/minutemediaBidAdapter.js +21 -398
  293. package/modules/mobianRtdProvider.js +16 -2
  294. package/modules/nextMillenniumBidAdapter.js +1 -27
  295. package/modules/nexx360BidAdapter.js +3 -2
  296. package/modules/nobidBidAdapter.js +1 -1
  297. package/modules/openwebBidAdapter.js +18 -396
  298. package/modules/optoutBidAdapter.js +1 -1
  299. package/modules/paapi.js +48 -35
  300. package/modules/permutiveRtdProvider.js +72 -22
  301. package/modules/playdigoBidAdapter.js +4 -2
  302. package/modules/prebidServerBidAdapter/index.js +4 -2
  303. package/modules/prebidServerBidAdapter/ortbConverter.js +1 -0
  304. package/modules/programmaticaBidAdapter.js +1 -1
  305. package/modules/publirBidAdapter.js +20 -273
  306. package/modules/pubmaticBidAdapter.js +12 -0
  307. package/modules/pubxaiAnalyticsAdapter.js +306 -164
  308. package/modules/relevatehealthBidAdapter.js +2 -1
  309. package/modules/resetdigitalBidAdapter.md +54 -45
  310. package/modules/richaudienceBidAdapter.js +1 -1
  311. package/modules/riseBidAdapter.js +19 -400
  312. package/modules/rtdModule/index.js +5 -3
  313. package/modules/shinezBidAdapter.js +17 -361
  314. package/modules/sirdataRtdProvider.js +2 -0
  315. package/modules/sizeMapping.js +2 -5
  316. package/modules/smaatoBidAdapter.js +18 -1
  317. package/modules/smarthubBidAdapter.js +45 -177
  318. package/modules/smilewantedBidAdapter.js +26 -22
  319. package/modules/snigelBidAdapter.js +1 -1
  320. package/modules/sonobiBidAdapter.js +5 -10
  321. package/modules/stnBidAdapter.js +22 -398
  322. package/modules/symitriDapRtdProvider.js +812 -0
  323. package/modules/symitriDapRtdProvider.md +49 -0
  324. package/modules/targetVideoBidAdapter.js +120 -152
  325. package/modules/targetVideoBidAdapter.md +20 -3
  326. package/modules/telariaBidAdapter.js +2 -32
  327. package/modules/uid2IdSystem_shared.js +51 -39
  328. package/modules/userId/eids.js +3 -0
  329. package/modules/utiqIdSystem.js +12 -10
  330. package/modules/validationFpdModule/index.js +22 -17
  331. package/modules/videojsVideoProvider.js +3 -0
  332. package/modules/visxBidAdapter.js +1 -1
  333. package/modules/winrBidAdapter.js +2 -27
  334. package/modules/yahooAdsBidAdapter.js +1 -1
  335. package/modules/yandexIdSystem.js +1 -1
  336. package/package.json +4 -4
  337. package/plugins/eslint/index.js +73 -45
  338. package/src/adloader.js +1 -0
  339. package/src/ajax.js +15 -0
  340. package/src/config.js +0 -4
  341. package/src/debugging.js +1 -0
  342. package/src/prebid.js +4 -0
  343. package/src/secureCreatives.js +1 -1
  344. package/src/storageManager.js +62 -73
  345. package/src/targeting.js +26 -20
  346. package/src/utils.js +9 -0
  347. package/test/pages/consent_mgt_gdpr.html +1 -1
  348. package/test/spec/ajax_spec.js +11 -0
  349. package/test/spec/creative/crossDomainCreative_spec.js +26 -9
  350. package/test/spec/fpd/gdpr_spec.js +1 -1
  351. package/test/spec/libraries/userAgentUtils_spec.js +109 -0
  352. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +231 -141
  353. package/test/spec/modules/adagioBidAdapter_spec.js +32 -66
  354. package/test/spec/modules/adagioRtdProvider_spec.js +72 -0
  355. package/test/spec/modules/admixerBidAdapter_spec.js +21 -17
  356. package/test/spec/modules/advRedAnalyticsAdapter_spec.js +114 -0
  357. package/test/spec/modules/adxcgBidAdapter_spec.js +1 -1
  358. package/test/spec/modules/appnexusBidAdapter_spec.js +36 -0
  359. package/test/spec/modules/azerionedgeRtdProvider_spec.js +36 -21
  360. package/test/spec/modules/connatixBidAdapter_spec.js +55 -2
  361. package/test/spec/modules/connectIdSystem_spec.js +27 -28
  362. package/test/spec/modules/consentManagement_spec.js +1 -1
  363. package/test/spec/modules/contxtfulRtdProvider_spec.js +6 -0
  364. package/test/spec/modules/dailymotionBidAdapter_spec.js +497 -4
  365. package/test/spec/modules/discoveryBidAdapter_spec.js +9 -6
  366. package/test/spec/modules/dspxBidAdapter_spec.js +188 -7
  367. package/test/spec/modules/eightPodAnalyticsAdapter_spec.js +22 -13
  368. package/test/spec/modules/gptPreAuction_spec.js +143 -1
  369. package/test/spec/modules/gumgumBidAdapter_spec.js +17 -0
  370. package/test/spec/modules/insticatorBidAdapter_spec.js +8 -1
  371. package/test/spec/modules/intentIqAnalyticsAdapter_spec.js +172 -0
  372. package/test/spec/modules/jwplayerRtdProvider_spec.js +61 -0
  373. package/test/spec/modules/kargoBidAdapter_spec.js +7 -8
  374. package/test/spec/modules/kimberliteBidAdapter_spec.js +137 -65
  375. package/test/spec/modules/mediagoBidAdapter_spec.js +34 -37
  376. package/test/spec/modules/medianetBidAdapter_spec.js +297 -16
  377. package/test/spec/modules/mgidBidAdapter_spec.js +15 -5
  378. package/test/spec/modules/mobianRtdProvider_spec.js +1 -3
  379. package/test/spec/modules/nexx360BidAdapter_spec.js +1 -1
  380. package/test/spec/modules/paapi_spec.js +177 -111
  381. package/test/spec/modules/permutiveRtdProvider_spec.js +42 -8
  382. package/test/spec/modules/prebidServerBidAdapter_spec.js +17 -3
  383. package/test/spec/modules/proxistoreBidAdapter_spec.js +1 -1
  384. package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
  385. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +970 -603
  386. package/test/spec/modules/pulsepointBidAdapter_spec.js +4 -4
  387. package/test/spec/modules/smaatoBidAdapter_spec.js +36 -1
  388. package/test/spec/modules/smarthubBidAdapter_spec.js +6 -4
  389. package/test/spec/modules/smilewantedBidAdapter_spec.js +57 -1
  390. package/test/spec/modules/symitriDapRtdProvider_spec.js +600 -0
  391. package/test/spec/modules/targetVideoBidAdapter_spec.js +112 -11
  392. package/test/spec/modules/yandexIdSystem_spec.js +6 -1
  393. package/test/spec/schainSerializer/schainSerializer_spec.js +138 -0
  394. package/test/spec/unit/core/storageManager_spec.js +68 -51
  395. package/test/spec/unit/pbjs_api_spec.js +11 -0
  396. package/test/spec/utils_spec.js +19 -0
  397. /package/src/utils/{gpdr.js → gdpr.js} +0 -0
@@ -0,0 +1,49 @@
1
+ ### Overview
2
+
3
+ Symitri DAP Real time data Provider automatically invokes the DAP APIs and submit audience segments and the SAID to the bid-stream.
4
+
5
+ ### Integration
6
+
7
+ 1) Build the symitriDapRTD module into the Prebid.js package with:
8
+
9
+ ```
10
+ gulp build --modules=symitriDapRtdProvider,...
11
+ ```
12
+
13
+ 2) Use `setConfig` to instruct Prebid.js to initilaize the symitriDapRtdProvider module, as specified below.
14
+
15
+ ### Configuration
16
+
17
+ ```
18
+ pbjs.setConfig({
19
+ realTimeData: {
20
+ auctionDelay: 2000,
21
+ dataProviders: [
22
+ {
23
+ name: "dap",
24
+ waitForIt: true,
25
+ params: {
26
+ apiHostname: '<see your Symitri account rep>',
27
+ apiVersion: "x1",
28
+ domain: 'your-domain.com',
29
+ identityType: 'email' | 'mobile' | ... | 'dap-signature:1.3.0',
30
+ segtax: 504,
31
+ dapEntropyUrl: 'https://sym-dist.symitri.net/dapentropy.js',
32
+ dapEntropyTimeout: 1500 // Maximum time for dapentropy to run
33
+ }
34
+ }
35
+ ]
36
+ }
37
+ });
38
+ ```
39
+
40
+ Please reach out to your Symitri account representative(Prebid@symitri.com) to get provisioned on the DAP platform.
41
+
42
+
43
+ ### Testing
44
+ To view an example of available segments returned by dap:
45
+ ```
46
+ ‘gulp serve --modules=rtdModule,symitriDapRtdProvider,appnexusBidAdapter,sovrnBidAdapter’
47
+ ```
48
+ and then point your browser at:
49
+ "http://localhost:9999/integrationExamples/gpt/symitridap_segments_example.html"
@@ -1,24 +1,19 @@
1
- import {find} from '../src/polyfill.js';
2
- import {getBidRequest} from '../src/utils.js';
1
+ import {_each, getDefinedParams, parseGPTSingleSizeArrayToRtbSize} from '../src/utils.js';
3
2
  import {BANNER, VIDEO} from '../src/mediaTypes.js';
4
3
  import {registerBidder} from '../src/adapters/bidderFactory.js';
4
+ import {formatRequest, getRtbBid, getSiteObj, videoBid, bannerBid, createVideoTag} from '../libraries/targetVideoUtils/bidderUtils.js';
5
+ import {SOURCE, GVLID, BIDDER_CODE, VIDEO_PARAMS, BANNER_ENDPOINT_URL, VIDEO_ENDPOINT_URL, MARGIN, TIME_TO_LIVE} from '../libraries/targetVideoUtils/constants.js';
5
6
 
6
7
  /**
7
8
  * @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
8
9
  * @typedef {import('../src/adapters/bidderFactory.js').Bid} Bid
9
10
  */
10
11
 
11
- const SOURCE = 'pbjs';
12
- const BIDDER_CODE = 'targetVideo';
13
- const ENDPOINT_URL = 'https://ib.adnxs.com/ut/v3/prebid';
14
- const MARGIN = 1.35;
15
- const GVLID = 786;
16
-
17
12
  export const spec = {
18
13
 
19
14
  code: BIDDER_CODE,
20
15
  gvlid: GVLID,
21
- supportedMediaTypes: [BANNER],
16
+ supportedMediaTypes: [BANNER, VIDEO],
22
17
 
23
18
  /**
24
19
  * Determines whether or not the given bid request is valid.
@@ -37,35 +32,114 @@ export const spec = {
37
32
  * @return ServerRequest Info describing the request to the server.
38
33
  */
39
34
  buildRequests: function(bidRequests, bidderRequest) {
40
- const tags = bidRequests.map(createVideoTag);
41
- const schain = bidRequests[0].schain;
42
- const payload = {
43
- tags: tags,
44
- sdk: {
45
- source: SOURCE,
46
- version: '$prebid.version$'
47
- },
48
- schain: schain
35
+ const requests = [];
36
+ const sdk = {
37
+ source: SOURCE,
38
+ version: '$prebid.version$'
49
39
  };
50
40
 
51
- if (bidderRequest && bidderRequest.gdprConsent) {
52
- payload.gdpr_consent = {
53
- consent_string: bidderRequest.gdprConsent.consentString,
54
- consent_required: bidderRequest.gdprConsent.gdprApplies
55
- };
56
-
57
- if (bidderRequest.gdprConsent.addtlConsent && bidderRequest.gdprConsent.addtlConsent.indexOf('~') !== -1) {
58
- let ac = bidderRequest.gdprConsent.addtlConsent;
59
- let acStr = ac.substring(ac.indexOf('~') + 1);
60
- payload.gdpr_consent.addtl_consent = acStr.split('.').map(id => parseInt(id, 10));
41
+ for (let {params, bidId, sizes, mediaTypes} of bidRequests) {
42
+ for (const mediaType in mediaTypes) {
43
+ switch (mediaType) {
44
+ case VIDEO: {
45
+ const video = mediaTypes[VIDEO];
46
+ const placementId = params.placementId;
47
+ const site = getSiteObj();
48
+
49
+ if (sizes && !Array.isArray(sizes[0])) sizes = [sizes];
50
+
51
+ const payload = {
52
+ sdk,
53
+ id: bidderRequest.bidderRequestId,
54
+ site,
55
+ imp: []
56
+ }
57
+
58
+ const imp = {
59
+ ext: {
60
+ prebid: {
61
+ storedrequest: { id: placementId }
62
+ }
63
+ },
64
+ video: getDefinedParams(video, VIDEO_PARAMS)
65
+ }
66
+
67
+ if (video.playerSize) {
68
+ imp.video = Object.assign(
69
+ imp.video, parseGPTSingleSizeArrayToRtbSize(video.playerSize[0]) || {}
70
+ );
71
+ } else if (video.w && video.h) {
72
+ imp.video.w = video.w;
73
+ imp.video.h = video.h;
74
+ }
75
+
76
+ payload.imp.push(imp);
77
+
78
+ const gdprConsent = bidderRequest && bidderRequest.gdprConsent;
79
+ const uspConsent = bidderRequest && bidderRequest.uspConsent;
80
+
81
+ if (gdprConsent || uspConsent) {
82
+ payload.regs = { ext: {} };
83
+
84
+ if (uspConsent) {
85
+ payload.regs.ext.us_privacy = uspConsent;
86
+ };
87
+
88
+ if (gdprConsent) {
89
+ if (typeof gdprConsent.gdprApplies !== 'undefined') {
90
+ payload.regs.ext.gdpr = gdprConsent.gdprApplies ? 1 : 0;
91
+ };
92
+
93
+ if (typeof gdprConsent.consentString !== 'undefined') {
94
+ payload.user = {
95
+ ext: { consent: gdprConsent.consentString }
96
+ };
97
+ };
98
+ };
99
+ };
100
+
101
+ if (bidRequests[0].schain) {
102
+ payload.schain = bidRequests[0].schain;
103
+ }
104
+
105
+ requests.push(formatRequest({ payload, url: VIDEO_ENDPOINT_URL, bidId }));
106
+ break;
107
+ }
108
+
109
+ case BANNER: {
110
+ const tags = bidRequests.map(createVideoTag);
111
+ const schain = bidRequests[0].schain;
112
+
113
+ const payload = {
114
+ tags,
115
+ sdk,
116
+ schain,
117
+ };
118
+
119
+ if (bidderRequest && bidderRequest.gdprConsent) {
120
+ payload.gdpr_consent = {
121
+ consent_string: bidderRequest.gdprConsent.consentString,
122
+ consent_required: bidderRequest.gdprConsent.gdprApplies
123
+ };
124
+
125
+ if (bidderRequest.gdprConsent.addtlConsent && bidderRequest.gdprConsent.addtlConsent.indexOf('~') !== -1) {
126
+ let ac = bidderRequest.gdprConsent.addtlConsent;
127
+ let acStr = ac.substring(ac.indexOf('~') + 1);
128
+ payload.gdpr_consent.addtl_consent = acStr.split('.').map(id => parseInt(id, 10));
129
+ }
130
+ }
131
+
132
+ if (bidderRequest && bidderRequest.uspConsent) {
133
+ payload.us_privacy = bidderRequest.uspConsent
134
+ }
135
+
136
+ return formatRequest({ payload, url: BANNER_ENDPOINT_URL, bidderRequest });
137
+ }
138
+ }
61
139
  }
62
140
  }
63
141
 
64
- if (bidderRequest && bidderRequest.uspConsent) {
65
- payload.us_privacy = bidderRequest.uspConsent
66
- }
67
-
68
- return formatRequest(payload, bidderRequest);
142
+ return requests;
69
143
  },
70
144
 
71
145
  /**
@@ -74,139 +148,33 @@ export const spec = {
74
148
  * @param {*} serverResponse A successful response from the server.
75
149
  * @return {Bid[]} An array of bids which were nested inside the server.
76
150
  */
77
- interpretResponse: function(serverResponse, { bidderRequest }) {
151
+ interpretResponse: function(serverResponse, { bidderRequest, ...bidRequest }) {
78
152
  serverResponse = serverResponse.body;
153
+ const currency = serverResponse.cur;
79
154
  const bids = [];
80
155
 
81
156
  if (serverResponse.tags) {
82
157
  serverResponse.tags.forEach(serverBid => {
83
158
  const rtbBid = getRtbBid(serverBid);
84
159
  if (rtbBid && rtbBid.cpm !== 0 && rtbBid.ad_type == VIDEO) {
85
- bids.push(newBid(serverBid, rtbBid, bidderRequest));
160
+ bids.push(bannerBid(serverBid, rtbBid, bidderRequest, MARGIN));
86
161
  }
87
162
  });
88
163
  }
89
164
 
90
- return bids;
91
- }
92
-
93
- }
94
-
95
- function getSizes(request) {
96
- let sizes = request.sizes;
97
- if (!sizes && request.mediaTypes && request.mediaTypes.banner && request.mediaTypes.banner.sizes) {
98
- sizes = request.mediaTypes.banner.sizes;
99
- }
100
- if (Array.isArray(sizes) && !Array.isArray(sizes[0])) {
101
- sizes = [sizes[0], sizes[1]];
102
- }
103
- if (!Array.isArray(sizes) || !Array.isArray(sizes[0])) {
104
- sizes = [[0, 0]];
105
- }
106
-
107
- return sizes;
108
- }
165
+ if (serverResponse.seatbid) {
166
+ _each(serverResponse.seatbid, (resp) => {
167
+ _each(resp.bid, (bid) => {
168
+ const requestId = bidRequest.bidId;
169
+ const params = bidRequest.params;
109
170
 
110
- function formatRequest(payload, bidderRequest) {
111
- const options = {
112
- withCredentials: true
113
- };
114
- const request = {
115
- method: 'POST',
116
- url: ENDPOINT_URL,
117
- data: JSON.stringify(payload),
118
- bidderRequest,
119
- options
120
- };
121
-
122
- return request;
123
- }
124
-
125
- /**
126
- * Create video auction.
127
- *
128
- * @param {*} serverResponse A successful response from the server.
129
- * @return {Bid[]} An array of bids which were nested inside the server.
130
- */
131
- function createVideoTag(bid) {
132
- const tag = {};
133
- tag.id = parseInt(bid.params.placementId, 10);
134
- tag.gpid = 'targetVideo';
135
- tag.sizes = getSizes(bid);
136
- tag.primary_size = tag.sizes[0];
137
- tag.ad_types = [VIDEO];
138
- tag.uuid = bid.bidId;
139
- tag.allow_smaller_sizes = false;
140
- tag.use_pmt_rule = false;
141
- tag.prebid = true;
142
- tag.disable_psa = true;
143
- tag.hb_source = 1;
144
- tag.require_asset_url = true;
145
- tag.video = {
146
- playback_method: 2,
147
- skippable: true
148
- };
149
-
150
- return tag;
151
- }
152
-
153
- /**
154
- * Unpack the Server's Bid into a Prebid-compatible one.
155
- * @param serverBid
156
- * @param rtbBid
157
- * @param bidderRequest
158
- * @return Bid
159
- */
160
- function newBid(serverBid, rtbBid, bidderRequest) {
161
- const bidRequest = getBidRequest(serverBid.uuid, [bidderRequest]);
162
- const sizes = getSizes(bidRequest);
163
- const bid = {
164
- requestId: serverBid.uuid,
165
- cpm: rtbBid.cpm / MARGIN,
166
- creativeId: rtbBid.creative_id,
167
- dealId: rtbBid.deal_id,
168
- currency: 'USD',
169
- netRevenue: true,
170
- width: sizes[0][0],
171
- height: sizes[0][1],
172
- ttl: 300,
173
- adUnitCode: bidRequest.adUnitCode,
174
- appnexus: {
175
- buyerMemberId: rtbBid.buyer_member_id,
176
- dealPriority: rtbBid.deal_priority,
177
- dealCode: rtbBid.deal_code
171
+ bids.push(videoBid(bid, requestId, currency, params, TIME_TO_LIVE));
172
+ });
173
+ });
178
174
  }
179
- };
180
-
181
- if (rtbBid.rtb.video) {
182
- Object.assign(bid, {
183
- vastImpUrl: rtbBid.notify_url,
184
- ad: getBannerHtml(rtbBid.notify_url + '&redir=' + encodeURIComponent(rtbBid.rtb.video.asset_url)),
185
- ttl: 3600
186
- });
187
- }
188
-
189
- return bid;
190
- }
191
175
 
192
- function getRtbBid(tag) {
193
- return tag && tag.ads && tag.ads.length && find(tag.ads, ad => ad.rtb);
194
- }
195
-
196
- function getBannerHtml(vastUrl) {
197
- return `<!DOCTYPE html>
198
- <html lang="en">
199
- <head>
200
- <meta charset="UTF-8">
201
- <title></title>
202
- <style>html, body {width: 100%; height: 100%; margin: 0;}</style>
203
- </head>
204
- <body>
205
- <div id="targetVideoPlayer"></div>
206
- <script src="https://player.target-video.com/custom/targetvideo-banner.js"></script>
207
- <script>initPlayer("${vastUrl}");</script>
208
- </body>
209
- </html>`;
176
+ return bids;
177
+ }
210
178
  }
211
179
 
212
180
  registerBidder(spec);
@@ -3,17 +3,17 @@
3
3
  ```
4
4
  Module Name: Target Video Bid Adapter
5
5
  Module Type: Bidder Adapter
6
- Maintainer: grajzer@gmail.com
6
+ Maintainers: grajzer@gmail.com, danijel.ristic@target-video.com
7
7
  ```
8
8
 
9
9
  # Description
10
10
 
11
11
  Connects to Appnexus exchange for bids.
12
12
 
13
- TargetVideo bid adapter supports Banner.
13
+ TargetVideo bid adapter supports Banner and Video.
14
14
 
15
15
  # Test Parameters
16
- ```
16
+ ```js
17
17
  var adUnits = [
18
18
  // Banner adUnit
19
19
  {
@@ -29,6 +29,23 @@ var adUnits = [
29
29
  placementId: 13232361
30
30
  }
31
31
  }]
32
+ },
33
+ // Video adUnit
34
+ {
35
+ mediaTypes: {
36
+ video: {
37
+ playerSize: [[640, 360]],
38
+ context: 'instream',
39
+ playbackmethod: [1, 2, 3, 4]
40
+ }
41
+ },
42
+ bids: [{
43
+ bidder: 'targetVideo',
44
+ params: {
45
+ placementId: 12345,
46
+ reserve: 0,
47
+ }
48
+ }]
32
49
  }
33
50
  ];
34
51
  ```
@@ -1,6 +1,7 @@
1
1
  import { logError, isEmpty, deepAccess, triggerPixel, logWarn, isArray } from '../src/utils.js';
2
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
3
3
  import {VIDEO} from '../src/mediaTypes.js';
4
+ import {getSupplyChain} from '../libraries/riseUtils/index.js';
4
5
 
5
6
  const BIDDER_CODE = 'telaria';
6
7
  const DOMAIN = 'tremorhub.com';
@@ -127,37 +128,6 @@ function getDefaultSrcPageUrl() {
127
128
  return encodeURIComponent(document.location.href);
128
129
  }
129
130
 
130
- function getEncodedValIfNotEmpty(val) {
131
- return (val !== '' && val !== undefined) ? encodeURIComponent(val) : '';
132
- }
133
-
134
- /**
135
- * Converts the schain object to a url param value. Please refer to
136
- * https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/supplychainobject.md
137
- * (schain for non ORTB section) for more information
138
- * @param schainObject
139
- * @returns {string}
140
- */
141
- function getSupplyChainAsUrlParam(schainObject) {
142
- if (isEmpty(schainObject)) {
143
- return '';
144
- }
145
-
146
- let scStr = `&schain=${schainObject.ver},${schainObject.complete}`;
147
-
148
- schainObject.nodes.forEach((node) => {
149
- scStr += '!';
150
- scStr += `${getEncodedValIfNotEmpty(node.asi)},`;
151
- scStr += `${getEncodedValIfNotEmpty(node.sid)},`;
152
- scStr += `${getEncodedValIfNotEmpty(node.hp)},`;
153
- scStr += `${getEncodedValIfNotEmpty(node.rid)},`;
154
- scStr += `${getEncodedValIfNotEmpty(node.name)},`;
155
- scStr += `${getEncodedValIfNotEmpty(node.domain)}`;
156
- });
157
-
158
- return scStr;
159
- }
160
-
161
131
  function getUrlParams(params, schainFromBidRequest) {
162
132
  let urlSuffix = '';
163
133
 
@@ -167,7 +137,7 @@ function getUrlParams(params, schainFromBidRequest) {
167
137
  urlSuffix += `&${key}=${params[key]}`;
168
138
  }
169
139
  }
170
- urlSuffix += getSupplyChainAsUrlParam(!isEmpty(schainFromBidRequest) ? schainFromBidRequest : params['schain']);
140
+ urlSuffix += getSupplyChain(!isEmpty(schainFromBidRequest) ? schainFromBidRequest : params['schain']);
171
141
  }
172
142
 
173
143
  return urlSuffix;