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,18 +2,17 @@ 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 = 'rise';
@@ -21,15 +20,11 @@ const ADAPTER_VERSION = '6.0.0';
21
20
  const TTL = 360;
22
21
  const DEFAULT_CURRENCY = 'USD';
23
22
  const DEFAULT_GVLID = 1043;
24
- const DEFAULT_SELLER_ENDPOINT = 'https://hb.yellowblue.io/';
23
+ const BASE_URL = 'https://hb.yellowblue.io/';
25
24
  const MODES = {
26
25
  PRODUCTION: 'hb-multi',
27
26
  TEST: 'hb-multi-test'
28
- }
29
- const SUPPORTED_SYNC_METHODS = {
30
- IFRAME: 'iframe',
31
- PIXEL: 'pixel'
32
- }
27
+ };
33
28
 
34
29
  export const spec = {
35
30
  code: BIDDER_CODE,
@@ -59,48 +54,23 @@ export const spec = {
59
54
  // use data from the first bid, to create the general params for all bids
60
55
  const generalObject = validBidRequests[0];
61
56
  const testMode = generalObject.params.testMode;
62
- const rtbDomain = generalObject.params.rtbDomain;
57
+ const rtbDomain = generalObject.params.rtbDomain || BASE_URL;
63
58
 
64
59
  combinedRequestsObject.params = generateGeneralParams(generalObject, bidderRequest);
65
60
  combinedRequestsObject.bids = generateBidsParams(validBidRequests, bidderRequest);
66
61
 
67
62
  return {
68
63
  method: 'POST',
69
- url: getEndpoint(testMode, rtbDomain),
64
+ url: getEndpoint(testMode, rtbDomain, MODES),
70
65
  data: combinedRequestsObject
71
66
  }
72
67
  },
73
- interpretResponse: function ({body}) {
68
+ interpretResponse: function ({ body }) {
74
69
  const bidResponses = [];
75
70
 
76
71
  if (body.bids) {
77
72
  body.bids.forEach(adUnit => {
78
- const bidResponse = {
79
- requestId: adUnit.requestId,
80
- cpm: adUnit.cpm,
81
- currency: adUnit.currency || DEFAULT_CURRENCY,
82
- width: adUnit.width,
83
- height: adUnit.height,
84
- ttl: adUnit.ttl || TTL,
85
- creativeId: adUnit.creativeId,
86
- netRevenue: adUnit.netRevenue || true,
87
- nurl: adUnit.nurl,
88
- mediaType: adUnit.mediaType,
89
- meta: {
90
- mediaType: adUnit.mediaType
91
- }
92
- };
93
-
94
- if (adUnit.mediaType === VIDEO) {
95
- bidResponse.vastXml = adUnit.vastXml;
96
- } else if (adUnit.mediaType === BANNER) {
97
- bidResponse.ad = adUnit.ad;
98
- }
99
-
100
- if (adUnit.adomain && adUnit.adomain.length) {
101
- bidResponse.meta.advertiserDomains = adUnit.adomain;
102
- }
103
-
73
+ const bidResponse = buildBidResponse(adUnit, DEFAULT_CURRENCY, TTL, VIDEO, BANNER);
104
74
  bidResponses.push(bidResponse);
105
75
  });
106
76
  }
@@ -110,20 +80,20 @@ export const spec = {
110
80
  getUserSyncs: function (syncOptions, serverResponses) {
111
81
  const syncs = [];
112
82
  for (const response of serverResponses) {
113
- if (syncOptions.iframeEnabled && response.body.params.userSyncURL) {
83
+ if (syncOptions.iframeEnabled && deepAccess(response, 'body.params.userSyncURL')) {
114
84
  syncs.push({
115
85
  type: 'iframe',
116
- url: response.body.params.userSyncURL
86
+ url: deepAccess(response, 'body.params.userSyncURL')
117
87
  });
118
88
  }
119
- if (syncOptions.pixelEnabled && isArray(response.body.params.userSyncPixels)) {
89
+ if (syncOptions.pixelEnabled && isArray(deepAccess(response, 'body.params.userSyncPixels'))) {
120
90
  const pixels = response.body.params.userSyncPixels.map(pixel => {
121
91
  return {
122
92
  type: 'image',
123
93
  url: pixel
124
94
  }
125
- })
126
- syncs.push(...pixels)
95
+ });
96
+ syncs.push(...pixels);
127
97
  }
128
98
  }
129
99
  return syncs;
@@ -141,354 +111,3 @@ export const spec = {
141
111
  };
142
112
 
143
113
  registerBidder(spec);
144
-
145
- /**
146
- * Get floor price
147
- * @param bid {bid}
148
- * @param mediaType {string}
149
- * @returns {Number}
150
- */
151
- function getFloor(bid, mediaType) {
152
- if (!isFn(bid.getFloor)) {
153
- return 0;
154
- }
155
- let floorResult = bid.getFloor({
156
- currency: DEFAULT_CURRENCY,
157
- mediaType: mediaType,
158
- size: '*'
159
- });
160
- return floorResult.currency === DEFAULT_CURRENCY && floorResult.floor ? floorResult.floor : 0;
161
- }
162
-
163
- /**
164
- * Get the the ad sizes array from the bid
165
- * @param bid {bid}
166
- * @returns {Array}
167
- */
168
- function getSizesArray(bid, mediaType) {
169
- let sizesArray = []
170
-
171
- if (deepAccess(bid, `mediaTypes.${mediaType}.sizes`)) {
172
- sizesArray = bid.mediaTypes[mediaType].sizes;
173
- } else if (Array.isArray(bid.sizes) && bid.sizes.length > 0) {
174
- sizesArray = bid.sizes;
175
- }
176
-
177
- return sizesArray;
178
- }
179
-
180
- /**
181
- * Get schain string value
182
- * @param schainObject {Object}
183
- * @returns {string}
184
- */
185
- function getSupplyChain(schainObject) {
186
- if (isEmpty(schainObject)) {
187
- return '';
188
- }
189
- let scStr = `${schainObject.ver},${schainObject.complete}`;
190
- schainObject.nodes.forEach((node) => {
191
- scStr += '!';
192
- scStr += `${getEncodedValIfNotEmpty(node.asi)},`;
193
- scStr += `${getEncodedValIfNotEmpty(node.sid)},`;
194
- scStr += `${node.hp ? encodeURIComponent(node.hp) : ''},`;
195
- scStr += `${getEncodedValIfNotEmpty(node.rid)},`;
196
- scStr += `${getEncodedValIfNotEmpty(node.name)},`;
197
- scStr += `${getEncodedValIfNotEmpty(node.domain)}`;
198
- });
199
- return scStr;
200
- }
201
-
202
- /**
203
- * Get encoded node value
204
- * @param val {string}
205
- * @returns {string}
206
- */
207
- function getEncodedValIfNotEmpty(val) {
208
- return !isEmpty(val) ? encodeURIComponent(val) : '';
209
- }
210
-
211
- /**
212
- * Get preferred user-sync method based on publisher configuration
213
- * @param bidderCode {string}
214
- * @returns {string}
215
- */
216
- function getAllowedSyncMethod(filterSettings, bidderCode) {
217
- const iframeConfigsToCheck = ['all', 'iframe'];
218
- const pixelConfigToCheck = 'image';
219
- if (filterSettings && iframeConfigsToCheck.some(config => isSyncMethodAllowed(filterSettings[config], bidderCode))) {
220
- return SUPPORTED_SYNC_METHODS.IFRAME;
221
- }
222
- if (!filterSettings || !filterSettings[pixelConfigToCheck] || isSyncMethodAllowed(filterSettings[pixelConfigToCheck], bidderCode)) {
223
- return SUPPORTED_SYNC_METHODS.PIXEL;
224
- }
225
- }
226
-
227
- /**
228
- * Check if sync rule is supported
229
- * @param syncRule {Object}
230
- * @param bidderCode {string}
231
- * @returns {boolean}
232
- */
233
- function isSyncMethodAllowed(syncRule, bidderCode) {
234
- if (!syncRule) {
235
- return false;
236
- }
237
- const isInclude = syncRule.filter === 'include';
238
- const bidders = isArray(syncRule.bidders) ? syncRule.bidders : [bidderCode];
239
- return isInclude && contains(bidders, bidderCode);
240
- }
241
-
242
- /**
243
- * Get the seller endpoint
244
- * @param testMode {boolean}
245
- * @param rtbDomain {string}
246
- * @returns {string}
247
- */
248
- function getEndpoint(testMode, rtbDomain) {
249
- const SELLER_ENDPOINT = rtbDomain ? `https://${rtbDomain}/` : DEFAULT_SELLER_ENDPOINT;
250
- return testMode
251
- ? SELLER_ENDPOINT + MODES.TEST
252
- : SELLER_ENDPOINT + MODES.PRODUCTION;
253
- }
254
-
255
- /**
256
- * get device type
257
- * @param uad {ua}
258
- * @returns {string}
259
- */
260
- function getDeviceType(ua) {
261
- if (/ipad|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i
262
- .test(ua.toLowerCase())) {
263
- return '5';
264
- }
265
- if (/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i
266
- .test(ua.toLowerCase())) {
267
- return '4';
268
- }
269
- if (/smart[-_\s]?tv|hbbtv|appletv|googletv|hdmi|netcast|viera|nettv|roku|\bdtv\b|sonydtv|inettvbrowser|\btv\b/i
270
- .test(ua.toLowerCase())) {
271
- return '3';
272
- }
273
- return '1';
274
- }
275
-
276
- function generateBidsParams(validBidRequests, bidderRequest) {
277
- const bidsArray = [];
278
-
279
- if (validBidRequests.length) {
280
- validBidRequests.forEach(bid => {
281
- bidsArray.push(generateBidParameters(bid, bidderRequest));
282
- });
283
- }
284
-
285
- return bidsArray;
286
- }
287
-
288
- /**
289
- * Generate bid specific parameters
290
- * @param {bid} bid
291
- * @param {bidderRequest} bidderRequest
292
- * @returns {Object} bid specific params object
293
- */
294
- function generateBidParameters(bid, bidderRequest) {
295
- const {params} = bid;
296
- const mediaType = isBanner(bid) ? BANNER : VIDEO;
297
- const sizesArray = getSizesArray(bid, mediaType);
298
- // fix floor price in case of NAN
299
- if (isNaN(params.floorPrice)) {
300
- params.floorPrice = 0;
301
- }
302
-
303
- const bidObject = {
304
- mediaType,
305
- adUnitCode: getBidIdParameter('adUnitCode', bid),
306
- sizes: sizesArray,
307
- floorPrice: Math.max(getFloor(bid, mediaType), params.floorPrice),
308
- bidId: getBidIdParameter('bidId', bid),
309
- bidderRequestId: getBidIdParameter('bidderRequestId', bid),
310
- loop: getBidIdParameter('bidderRequestsCount', bid),
311
- transactionId: bid.ortb2Imp?.ext?.tid,
312
- coppa: 0,
313
- };
314
-
315
- const pos = deepAccess(bid, `mediaTypes.${mediaType}.pos`);
316
- if (pos) {
317
- bidObject.pos = pos;
318
- }
319
-
320
- const gpid = deepAccess(bid, `ortb2Imp.ext.gpid`);
321
- if (gpid) {
322
- bidObject.gpid = gpid;
323
- }
324
-
325
- const placementId = params.placementId || deepAccess(bid, `mediaTypes.${mediaType}.name`);
326
- if (placementId) {
327
- bidObject.placementId = placementId;
328
- }
329
-
330
- const mimes = deepAccess(bid, `mediaTypes.${mediaType}.mimes`);
331
- if (mimes) {
332
- bidObject.mimes = mimes;
333
- }
334
-
335
- const api = deepAccess(bid, `mediaTypes.${mediaType}.api`);
336
- if (api) {
337
- bidObject.api = api;
338
- }
339
-
340
- const sua = deepAccess(bid, `ortb2.device.sua`);
341
- if (sua) {
342
- bidObject.sua = sua;
343
- }
344
-
345
- const coppa = deepAccess(bid, `ortb2.regs.coppa`)
346
- if (coppa) {
347
- bidObject.coppa = 1;
348
- }
349
-
350
- if (mediaType === VIDEO) {
351
- const playbackMethod = deepAccess(bid, `mediaTypes.video.playbackmethod`);
352
- let playbackMethodValue;
353
-
354
- // verify playbackMethod is of type integer array, or integer only.
355
- if (Array.isArray(playbackMethod) && isInteger(playbackMethod[0])) {
356
- // only the first playbackMethod in the array will be used, according to OpenRTB 2.5 recommendation
357
- playbackMethodValue = playbackMethod[0];
358
- } else if (isInteger(playbackMethod)) {
359
- playbackMethodValue = playbackMethod;
360
- }
361
-
362
- if (playbackMethodValue) {
363
- bidObject.playbackMethod = playbackMethodValue;
364
- }
365
-
366
- const placement = deepAccess(bid, `mediaTypes.video.placement`);
367
- if (placement) {
368
- bidObject.placement = placement;
369
- }
370
-
371
- const minDuration = deepAccess(bid, `mediaTypes.video.minduration`);
372
- if (minDuration) {
373
- bidObject.minDuration = minDuration;
374
- }
375
-
376
- const maxDuration = deepAccess(bid, `mediaTypes.video.maxduration`);
377
- if (maxDuration) {
378
- bidObject.maxDuration = maxDuration;
379
- }
380
-
381
- const skip = deepAccess(bid, `mediaTypes.video.skip`);
382
- if (skip) {
383
- bidObject.skip = skip;
384
- }
385
-
386
- const linearity = deepAccess(bid, `mediaTypes.video.linearity`);
387
- if (linearity) {
388
- bidObject.linearity = linearity;
389
- }
390
-
391
- const protocols = deepAccess(bid, `mediaTypes.video.protocols`);
392
- if (protocols) {
393
- bidObject.protocols = protocols;
394
- }
395
-
396
- const plcmt = deepAccess(bid, `mediaTypes.video.plcmt`);
397
- if (plcmt) {
398
- bidObject.plcmt = plcmt;
399
- }
400
- }
401
-
402
- return bidObject;
403
- }
404
-
405
- function isBanner(bid) {
406
- return bid.mediaTypes && bid.mediaTypes.banner;
407
- }
408
-
409
- /**
410
- * Generate params that are common between all bids
411
- * @param {single bid object} generalObject
412
- * @param {bidderRequest} bidderRequest
413
- * @returns {object} the common params object
414
- */
415
- function generateGeneralParams(generalObject, bidderRequest) {
416
- const domain = window.location.hostname;
417
- const {syncEnabled, filterSettings} = config.getConfig('userSync') || {};
418
- const {bidderCode} = bidderRequest;
419
- const generalBidParams = generalObject.params;
420
- const timeout = bidderRequest.timeout;
421
-
422
- // these params are snake_case instead of camelCase to allow backwards compatability on the server.
423
- // in the future, these will be converted to camelCase to match our convention.
424
- const generalParams = {
425
- wrapper_type: 'prebidjs',
426
- wrapper_vendor: '$$PREBID_GLOBAL$$',
427
- wrapper_version: '$prebid.version$',
428
- adapter_version: ADAPTER_VERSION,
429
- auction_start: timestamp(),
430
- publisher_id: generalBidParams.org,
431
- publisher_name: domain,
432
- site_domain: domain,
433
- dnt: (navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1') ? 1 : 0,
434
- device_type: getDeviceType(navigator.userAgent),
435
- ua: navigator.userAgent,
436
- is_wrapper: !!generalBidParams.isWrapper,
437
- session_id: generalBidParams.sessionId || getBidIdParameter('bidderRequestId', generalObject),
438
- tmax: timeout
439
- };
440
-
441
- const userIdsParam = getBidIdParameter('userId', generalObject);
442
- if (userIdsParam) {
443
- generalParams.userIds = JSON.stringify(userIdsParam);
444
- }
445
-
446
- const ortb2Metadata = bidderRequest.ortb2 || {};
447
- if (ortb2Metadata.site) {
448
- generalParams.site_metadata = JSON.stringify(ortb2Metadata.site);
449
- }
450
- if (ortb2Metadata.user) {
451
- generalParams.user_metadata = JSON.stringify(ortb2Metadata.user);
452
- }
453
-
454
- if (syncEnabled) {
455
- const allowedSyncMethod = getAllowedSyncMethod(filterSettings, bidderCode);
456
- if (allowedSyncMethod) {
457
- generalParams.cs_method = allowedSyncMethod;
458
- }
459
- }
460
-
461
- if (bidderRequest.uspConsent) {
462
- generalParams.us_privacy = bidderRequest.uspConsent;
463
- }
464
-
465
- if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies) {
466
- generalParams.gdpr = bidderRequest.gdprConsent.gdprApplies;
467
- generalParams.gdpr_consent = bidderRequest.gdprConsent.consentString;
468
- }
469
-
470
- if (bidderRequest && bidderRequest.gppConsent) {
471
- generalParams.gpp = bidderRequest.gppConsent.gppString;
472
- generalParams.gpp_sid = bidderRequest.gppConsent.applicableSections;
473
- } else if (bidderRequest.ortb2?.regs?.gpp) {
474
- generalParams.gpp = bidderRequest.ortb2.regs.gpp;
475
- generalParams.gpp_sid = bidderRequest.ortb2.regs.gpp_sid;
476
- }
477
-
478
- if (generalBidParams.ifa) {
479
- generalParams.ifa = generalBidParams.ifa;
480
- }
481
-
482
- if (generalObject.schain) {
483
- generalParams.schain = getSupplyChain(generalObject.schain);
484
- }
485
-
486
- if (bidderRequest && bidderRequest.refererInfo) {
487
- // TODO: is 'ref' the right value here?
488
- generalParams.referrer = deepAccess(bidderRequest, 'refererInfo.ref');
489
- // TODO: does the fallback make sense here?
490
- generalParams.page_url = deepAccess(bidderRequest, 'refererInfo.page') || deepAccess(window, 'location.href');
491
- }
492
-
493
- return generalParams;
494
- }
@@ -188,10 +188,12 @@ let _dataProviders = [];
188
188
  let _userConsent;
189
189
 
190
190
  /**
191
- * Register a RTD submodule.
191
+ * Register a Real-Time Data (RTD) submodule.
192
192
  *
193
- * @param {RtdSubmodule} submodule
194
- * @returns {function()} a de-registration function that will unregister the module when called.
193
+ * @param {Object} submodule The RTD submodule to register.
194
+ * @param {string} submodule.name The name of the RTD submodule.
195
+ * @param {number} [submodule.gvlid] The Global Vendor List ID (GVLID) of the RTD submodule.
196
+ * @returns {function(): void} A de-registration function that will unregister the module when called.
195
197
  */
196
198
  export function attachRealTimeDataProvider(submodule) {
197
199
  registeredSubModules.push(submodule);