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
@@ -2,33 +2,28 @@ import {
2
2
  logWarn,
3
3
  logInfo,
4
4
  isArray,
5
- isFn,
6
5
  deepAccess,
7
- isEmpty,
8
- contains,
9
- timestamp,
10
6
  triggerPixel,
11
- isInteger,
12
- getBidIdParameter
13
7
  } from '../src/utils.js';
14
- import {registerBidder} from '../src/adapters/bidderFactory.js';
15
- import {BANNER, VIDEO} from '../src/mediaTypes.js';
16
- import {config} from '../src/config.js';
8
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
9
+ import { BANNER, VIDEO } from '../src/mediaTypes.js';
10
+ import {
11
+ getEndpoint,
12
+ generateBidsParams,
13
+ generateGeneralParams,
14
+ buildBidResponse,
15
+ } from '../libraries/riseUtils/index.js';
17
16
 
18
17
  const SUPPORTED_AD_TYPES = [BANNER, VIDEO];
19
18
  const BIDDER_CODE = 'shinez';
20
19
  const ADAPTER_VERSION = '1.0.0';
21
20
  const TTL = 360;
22
21
  const CURRENCY = 'USD';
23
- const SELLER_ENDPOINT = 'https://hb.sweetgum.io/';
22
+ const BASE_URL = 'https://hb.sweetgum.io/';
24
23
  const MODES = {
25
24
  PRODUCTION: 'hb-sz-multi',
26
25
  TEST: 'hb-multi-sz-test'
27
- }
28
- const SUPPORTED_SYNC_METHODS = {
29
- IFRAME: 'iframe',
30
- PIXEL: 'pixel'
31
- }
26
+ };
32
27
 
33
28
  export const spec = {
34
29
  code: BIDDER_CODE,
@@ -59,7 +54,7 @@ export const spec = {
59
54
 
60
55
  return {
61
56
  method: 'POST',
62
- url: getEndpoint(testMode),
57
+ url: getEndpoint(testMode, BASE_URL, MODES),
63
58
  data: combinedRequestsObject
64
59
  }
65
60
  },
@@ -68,32 +63,7 @@ export const spec = {
68
63
 
69
64
  if (body.bids) {
70
65
  body.bids.forEach(adUnit => {
71
- const bidResponse = {
72
- requestId: adUnit.requestId,
73
- cpm: adUnit.cpm,
74
- currency: adUnit.currency || CURRENCY,
75
- width: adUnit.width,
76
- height: adUnit.height,
77
- ttl: adUnit.ttl || TTL,
78
- creativeId: adUnit.requestId,
79
- netRevenue: adUnit.netRevenue || true,
80
- nurl: adUnit.nurl,
81
- mediaType: adUnit.mediaType,
82
- meta: {
83
- mediaType: adUnit.mediaType
84
- }
85
- };
86
-
87
- if (adUnit.mediaType === VIDEO) {
88
- bidResponse.vastXml = adUnit.vastXml;
89
- } else if (adUnit.mediaType === BANNER) {
90
- bidResponse.ad = adUnit.ad;
91
- }
92
-
93
- if (adUnit.adomain && adUnit.adomain.length) {
94
- bidResponse.meta.advertiserDomains = adUnit.adomain;
95
- }
96
-
66
+ const bidResponse = buildBidResponse(adUnit, CURRENCY, TTL, VIDEO, BANNER);
97
67
  bidResponses.push(bidResponse);
98
68
  });
99
69
  }
@@ -103,20 +73,20 @@ export const spec = {
103
73
  getUserSyncs: function (syncOptions, serverResponses) {
104
74
  const syncs = [];
105
75
  for (const response of serverResponses) {
106
- if (syncOptions.iframeEnabled && response.body.params.userSyncURL) {
76
+ if (syncOptions.iframeEnabled && deepAccess(response, 'body.params.userSyncURL')) {
107
77
  syncs.push({
108
78
  type: 'iframe',
109
- url: response.body.params.userSyncURL
79
+ url: deepAccess(response, 'body.params.userSyncURL')
110
80
  });
111
81
  }
112
- if (syncOptions.pixelEnabled && isArray(response.body.params.userSyncPixels)) {
82
+ if (syncOptions.pixelEnabled && isArray(deepAccess(response, 'body.params.userSyncPixels'))) {
113
83
  const pixels = response.body.params.userSyncPixels.map(pixel => {
114
84
  return {
115
85
  type: 'image',
116
86
  url: pixel
117
87
  }
118
- })
119
- syncs.push(...pixels)
88
+ });
89
+ syncs.push(...pixels);
120
90
  }
121
91
  }
122
92
  return syncs;
@@ -134,317 +104,3 @@ export const spec = {
134
104
  };
135
105
 
136
106
  registerBidder(spec);
137
-
138
- /**
139
- * Get floor price
140
- * @param bid {bid}
141
- * @returns {Number}
142
- */
143
- function getFloor(bid, mediaType) {
144
- if (!isFn(bid.getFloor)) {
145
- return 0;
146
- }
147
- let floorResult = bid.getFloor({
148
- currency: CURRENCY,
149
- mediaType: mediaType,
150
- size: '*'
151
- });
152
- return floorResult.currency === CURRENCY && floorResult.floor ? floorResult.floor : 0;
153
- }
154
-
155
- /**
156
- * Get the the ad sizes array from the bid
157
- * @param bid {bid}
158
- * @returns {Array}
159
- */
160
- function getSizesArray(bid, mediaType) {
161
- let sizesArray = []
162
-
163
- if (deepAccess(bid, `mediaTypes.${mediaType}.sizes`)) {
164
- sizesArray = bid.mediaTypes[mediaType].sizes;
165
- } else if (Array.isArray(bid.sizes) && bid.sizes.length > 0) {
166
- sizesArray = bid.sizes;
167
- }
168
-
169
- return sizesArray;
170
- }
171
-
172
- /**
173
- * Get schain string value
174
- * @param schainObject {Object}
175
- * @returns {string}
176
- */
177
- function getSupplyChain(schainObject) {
178
- if (isEmpty(schainObject)) {
179
- return '';
180
- }
181
- let scStr = `${schainObject.ver},${schainObject.complete}`;
182
- schainObject.nodes.forEach((node) => {
183
- scStr += '!';
184
- scStr += `${getEncodedValIfNotEmpty(node.asi)},`;
185
- scStr += `${getEncodedValIfNotEmpty(node.sid)},`;
186
- scStr += `${node.hp ? encodeURIComponent(node.hp) : ''},`;
187
- scStr += `${getEncodedValIfNotEmpty(node.rid)},`;
188
- scStr += `${getEncodedValIfNotEmpty(node.name)},`;
189
- scStr += `${getEncodedValIfNotEmpty(node.domain)}`;
190
- });
191
- return scStr;
192
- }
193
-
194
- /**
195
- * Get encoded node value
196
- * @param val {string}
197
- * @returns {string}
198
- */
199
- function getEncodedValIfNotEmpty(val) {
200
- return !isEmpty(val) ? encodeURIComponent(val) : '';
201
- }
202
-
203
- /**
204
- * Get preferred user-sync method based on publisher configuration
205
- * @param bidderCode {string}
206
- * @returns {string}
207
- */
208
- function getAllowedSyncMethod(filterSettings, bidderCode) {
209
- const iframeConfigsToCheck = ['all', 'iframe'];
210
- const pixelConfigToCheck = 'image';
211
- if (filterSettings && iframeConfigsToCheck.some(config => isSyncMethodAllowed(filterSettings[config], bidderCode))) {
212
- return SUPPORTED_SYNC_METHODS.IFRAME;
213
- }
214
- if (!filterSettings || !filterSettings[pixelConfigToCheck] || isSyncMethodAllowed(filterSettings[pixelConfigToCheck], bidderCode)) {
215
- return SUPPORTED_SYNC_METHODS.PIXEL;
216
- }
217
- }
218
-
219
- /**
220
- * Check if sync rule is supported
221
- * @param syncRule {Object}
222
- * @param bidderCode {string}
223
- * @returns {boolean}
224
- */
225
- function isSyncMethodAllowed(syncRule, bidderCode) {
226
- if (!syncRule) {
227
- return false;
228
- }
229
- const isInclude = syncRule.filter === 'include';
230
- const bidders = isArray(syncRule.bidders) ? syncRule.bidders : [bidderCode];
231
- return isInclude && contains(bidders, bidderCode);
232
- }
233
-
234
- /**
235
- * Get the seller endpoint
236
- * @param testMode {boolean}
237
- * @returns {string}
238
- */
239
- function getEndpoint(testMode) {
240
- return testMode
241
- ? SELLER_ENDPOINT + MODES.TEST
242
- : SELLER_ENDPOINT + MODES.PRODUCTION;
243
- }
244
-
245
- /**
246
- * get device type
247
- * @param uad {ua}
248
- * @returns {string}
249
- */
250
- function getDeviceType(ua) {
251
- if (/ipad|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i
252
- .test(ua.toLowerCase())) {
253
- return '5';
254
- }
255
- if (/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i
256
- .test(ua.toLowerCase())) {
257
- return '4';
258
- }
259
- if (/smart[-_\s]?tv|hbbtv|appletv|googletv|hdmi|netcast|viera|nettv|roku|\bdtv\b|sonydtv|inettvbrowser|\btv\b/i
260
- .test(ua.toLowerCase())) {
261
- return '3';
262
- }
263
- return '1';
264
- }
265
-
266
- function generateBidsParams(validBidRequests, bidderRequest) {
267
- const bidsArray = [];
268
-
269
- if (validBidRequests.length) {
270
- validBidRequests.forEach(bid => {
271
- bidsArray.push(generateBidParameters(bid, bidderRequest));
272
- });
273
- }
274
-
275
- return bidsArray;
276
- }
277
-
278
- /**
279
- * Generate bid specific parameters
280
- * @param {bid} bid
281
- * @param {bidderRequest} bidderRequest
282
- * @returns {Object} bid specific params object
283
- */
284
- function generateBidParameters(bid, bidderRequest) {
285
- const {params} = bid;
286
- const mediaType = isBanner(bid) ? BANNER : VIDEO;
287
- const sizesArray = getSizesArray(bid, mediaType);
288
-
289
- // fix floor price in case of NAN
290
- if (isNaN(params.floorPrice)) {
291
- params.floorPrice = 0;
292
- }
293
-
294
- const bidObject = {
295
- mediaType,
296
- adUnitCode: getBidIdParameter('adUnitCode', bid),
297
- sizes: sizesArray,
298
- floorPrice: Math.max(getFloor(bid, mediaType), params.floorPrice),
299
- bidId: getBidIdParameter('bidId', bid),
300
- bidderRequestId: getBidIdParameter('bidderRequestId', bid),
301
- transactionId: bid.ortb2Imp?.ext?.tid || '',
302
- };
303
-
304
- const pos = deepAccess(bid, `mediaTypes.${mediaType}.pos`);
305
- if (pos) {
306
- bidObject.pos = pos;
307
- }
308
-
309
- const gpid = deepAccess(bid, `ortb2Imp.ext.gpid`);
310
- if (gpid) {
311
- bidObject.gpid = gpid;
312
- }
313
-
314
- const placementId = params.placementId || deepAccess(bid, `mediaTypes.${mediaType}.name`);
315
- if (placementId) {
316
- bidObject.placementId = placementId;
317
- }
318
-
319
- if (mediaType === VIDEO) {
320
- const playbackMethod = deepAccess(bid, `mediaTypes.video.playbackmethod`);
321
- let playbackMethodValue;
322
-
323
- // verify playbackMethod is of type integer array, or integer only.
324
- if (Array.isArray(playbackMethod) && isInteger(playbackMethod[0])) {
325
- // only the first playbackMethod in the array will be used, according to OpenRTB 2.5 recommendation
326
- playbackMethodValue = playbackMethod[0];
327
- } else if (isInteger(playbackMethod)) {
328
- playbackMethodValue = playbackMethod;
329
- }
330
-
331
- if (playbackMethodValue) {
332
- bidObject.playbackMethod = playbackMethodValue;
333
- }
334
-
335
- const placement = deepAccess(bid, `mediaTypes.video.placement`);
336
- if (placement) {
337
- bidObject.placement = placement;
338
- }
339
- const plcmt = deepAccess(bid, `mediaTypes.video.plcmt`);
340
- if (plcmt) {
341
- bidObject.plcmt = plcmt;
342
- }
343
- const minDuration = deepAccess(bid, `mediaTypes.video.minduration`);
344
- if (minDuration) {
345
- bidObject.minDuration = minDuration;
346
- }
347
-
348
- const maxDuration = deepAccess(bid, `mediaTypes.video.maxduration`);
349
- if (maxDuration) {
350
- bidObject.maxDuration = maxDuration;
351
- }
352
-
353
- const skip = deepAccess(bid, `mediaTypes.video.skip`);
354
- if (skip) {
355
- bidObject.skip = skip;
356
- }
357
-
358
- const linearity = deepAccess(bid, `mediaTypes.video.linearity`);
359
- if (linearity) {
360
- bidObject.linearity = linearity;
361
- }
362
- }
363
-
364
- return bidObject;
365
- }
366
-
367
- function isBanner(bid) {
368
- return bid.mediaTypes && bid.mediaTypes.banner;
369
- }
370
-
371
- /**
372
- * Generate params that are common between all bids
373
- * @param {single bid object} generalObject
374
- * @param {bidderRequest} bidderRequest
375
- * @returns {object} the common params object
376
- */
377
- function generateGeneralParams(generalObject, bidderRequest) {
378
- const domain = window.location.hostname;
379
- const {syncEnabled, filterSettings} = config.getConfig('userSync') || {};
380
- const {bidderCode} = bidderRequest;
381
- const generalBidParams = generalObject.params;
382
- const timeout = bidderRequest.timeout;
383
-
384
- // these params are snake_case instead of camelCase to allow backwards compatability on the server.
385
- // in the future, these will be converted to camelCase to match our convention.
386
- const generalParams = {
387
- wrapper_type: 'prebidjs',
388
- wrapper_vendor: '$$PREBID_GLOBAL$$',
389
- wrapper_version: '$prebid.version$',
390
- adapter_version: ADAPTER_VERSION,
391
- auction_start: timestamp(),
392
- publisher_id: generalBidParams.org,
393
- publisher_name: domain,
394
- site_domain: domain,
395
- dnt: (navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1') ? 1 : 0,
396
- device_type: getDeviceType(navigator.userAgent),
397
- ua: navigator.userAgent,
398
- session_id: getBidIdParameter('auctionId', generalObject),
399
- tmax: timeout
400
- };
401
-
402
- const userIdsParam = getBidIdParameter('userId', generalObject);
403
- if (userIdsParam) {
404
- generalParams.userIds = JSON.stringify(userIdsParam);
405
- }
406
-
407
- const ortb2Metadata = bidderRequest.ortb2 || {};
408
- if (ortb2Metadata.site) {
409
- generalParams.site_metadata = JSON.stringify(ortb2Metadata.site);
410
- }
411
- if (ortb2Metadata.user) {
412
- generalParams.user_metadata = JSON.stringify(ortb2Metadata.user);
413
- }
414
-
415
- if (syncEnabled) {
416
- const allowedSyncMethod = getAllowedSyncMethod(filterSettings, bidderCode);
417
- if (allowedSyncMethod) {
418
- generalParams.cs_method = allowedSyncMethod;
419
- }
420
- }
421
-
422
- if (bidderRequest.uspConsent) {
423
- generalParams.us_privacy = bidderRequest.uspConsent;
424
- }
425
-
426
- if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies) {
427
- generalParams.gdpr = bidderRequest.gdprConsent.gdprApplies;
428
- generalParams.gdpr_consent = bidderRequest.gdprConsent.consentString;
429
- }
430
-
431
- if (generalBidParams.ifa) {
432
- generalParams.ifa = generalBidParams.ifa;
433
- }
434
-
435
- if (generalObject.schain) {
436
- generalParams.schain = getSupplyChain(generalObject.schain);
437
- }
438
-
439
- if (bidderRequest.ortb2 && bidderRequest.ortb2.site) {
440
- generalParams.referrer = bidderRequest.ortb2.site.ref;
441
- generalParams.page_url = bidderRequest.ortb2.site.page;
442
- }
443
-
444
- if (bidderRequest && bidderRequest.refererInfo) {
445
- generalParams.referrer = generalParams.referrer || deepAccess(bidderRequest, 'refererInfo.referer');
446
- generalParams.page_url = generalParams.page_url || config.getConfig('pageUrl') || deepAccess(window, 'location.href');
447
- }
448
-
449
- return generalParams;
450
- }
@@ -219,6 +219,8 @@ export function postContentForSemanticAnalysis(postContentToken, actualUrl) {
219
219
 
220
220
  // Use the Beacon API if supported to send the payload
221
221
  if ('sendBeacon' in navigator) {
222
+ // TODO FIX RULES VIOLATION
223
+ // eslint-disable-next-line prebid/no-member
222
224
  navigator.sendBeacon(url, payload);
223
225
  } else {
224
226
  // Fallback to using AJAX if Beacon API is not supported
@@ -4,7 +4,6 @@ import {includes} from '../src/polyfill.js';
4
4
  import {BANNER, VIDEO} from '../src/mediaTypes.js';
5
5
  import {setupAdUnitMediaTypes} from '../src/adapterManager.js';
6
6
 
7
- let installed = false;
8
7
  let sizeConfig = [];
9
8
 
10
9
  /**
@@ -24,11 +23,9 @@ let sizeConfig = [];
24
23
  */
25
24
  export function setSizeConfig(config) {
26
25
  sizeConfig = config;
27
- if (!installed) {
28
- setupAdUnitMediaTypes.before((next, adUnit, labels) => next(processAdUnitsForLabels(adUnit, labels), labels));
29
- installed = true;
30
- }
31
26
  }
27
+
28
+ setupAdUnitMediaTypes.before((next, adUnit, labels) => next(processAdUnitsForLabels(adUnit, labels), labels));
32
29
  config.getConfig('sizeConfig', config => setSizeConfig(config.sizeConfig));
33
30
 
34
31
  /**
@@ -19,10 +19,11 @@ import {ortbConverter} from '../libraries/ortbConverter/converter.js';
19
19
 
20
20
  const BIDDER_CODE = 'smaato';
21
21
  const SMAATO_ENDPOINT = 'https://prebid.ad.smaato.net/oapi/prebid';
22
- const SMAATO_CLIENT = 'prebid_js_$prebid.version$_3.1'
22
+ const SMAATO_CLIENT = 'prebid_js_$prebid.version$_3.2'
23
23
  const TTL = 300;
24
24
  const CURRENCY = 'USD';
25
25
  const SUPPORTED_MEDIA_TYPES = [BANNER, VIDEO, NATIVE];
26
+ const SYNC_URL = 'https://s.ad.smaato.net/c/?adExInit=p'
26
27
 
27
28
  export const spec = {
28
29
  code: BIDDER_CODE,
@@ -196,6 +197,22 @@ export const spec = {
196
197
  * @return {UserSync[]} The user syncs which should be dropped.
197
198
  */
198
199
  getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
200
+ if (syncOptions && syncOptions.pixelEnabled) {
201
+ let gdprParams = '';
202
+ if (gdprConsent && gdprConsent.consentString) {
203
+ if (typeof gdprConsent.gdprApplies === 'boolean') {
204
+ gdprParams = `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
205
+ } else {
206
+ gdprParams = `&gdpr_consent=${gdprConsent.consentString}`;
207
+ }
208
+ }
209
+
210
+ return [{
211
+ type: 'image',
212
+ url: SYNC_URL + gdprParams
213
+ }];
214
+ }
215
+
199
216
  return [];
200
217
  }
201
218
  }