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