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
@@ -7,12 +7,22 @@ function isValidIdentity(identity) {
7
7
  return !!(typeof identity === 'object' && identity !== null && identity.advertising_token && identity.identity_expires && identity.refresh_from && identity.refresh_token && identity.refresh_expires);
8
8
  }
9
9
 
10
+ // Helper function to prepend message
11
+ function prependMessage(message) {
12
+ return `UID2 shared library - ${message}`;
13
+ }
14
+
15
+ // Wrapper function for logInfo
16
+ function logInfoWrapper(logInfo, ...args) {
17
+ logInfo(prependMessage(args[0]), ...args.slice(1));
18
+ }
19
+
10
20
  // This is extracted from an in-progress API client. Once it's available via NPM, this class should be replaced with the NPM package.
11
21
  export class Uid2ApiClient {
12
22
  constructor(opts, clientId, logInfo, logWarn) {
13
23
  this._baseUrl = opts.baseUrl;
14
24
  this._clientVersion = clientId;
15
- this._logInfo = logInfo;
25
+ this._logInfo = (...args) => logInfoWrapper(logInfo, ...args);
16
26
  this._logWarn = logWarn;
17
27
  }
18
28
 
@@ -35,7 +45,7 @@ export class Uid2ApiClient {
35
45
  if (this.isValidRefreshResponse(response)) {
36
46
  if (response.status === 'success') { return { status: response.status, identity: response.body }; }
37
47
  return response;
38
- } else { return `Response didn't contain a valid status`; }
48
+ } else { return prependMessage(`Response didn't contain a valid status`); }
39
49
  }
40
50
  callRefreshApi(refreshDetails) {
41
51
  const url = this._baseUrl + '/v2/token/refresh';
@@ -53,7 +63,7 @@ export class Uid2ApiClient {
53
63
  this._logInfo('No response decryption key available, assuming unencrypted JSON');
54
64
  const response = JSON.parse(responseText);
55
65
  const result = this.ResponseToRefreshResult(response);
56
- if (typeof result === 'string') { rejectPromise(result); } else { resolvePromise(result); }
66
+ if (typeof result === 'string') { rejectPromise(prependMessage(result)); } else { resolvePromise(result); }
57
67
  } else {
58
68
  this._logInfo('Decrypting refresh API response');
59
69
  const encodeResp = this.createArrayBuffer(atob(responseText));
@@ -69,12 +79,12 @@ export class Uid2ApiClient {
69
79
  this._logInfo('Decrypted to:', decryptedResponse);
70
80
  const response = JSON.parse(decryptedResponse);
71
81
  const result = this.ResponseToRefreshResult(response);
72
- if (typeof result === 'string') { rejectPromise(result); } else { resolvePromise(result); }
73
- }, (reason) => this._logWarn(`Call to UID2 API failed`, reason));
74
- }, (reason) => this._logWarn(`Call to UID2 API failed`, reason));
82
+ if (typeof result === 'string') { rejectPromise(prependMessage(result)); } else { resolvePromise(result); }
83
+ }, (reason) => this._logWarn(prependMessage(`Call to UID2 API failed`), reason));
84
+ }, (reason) => this._logWarn(prependMessage(`Call to UID2 API failed`), reason));
75
85
  }
76
86
  } catch (_err) {
77
- rejectPromise(responseText);
87
+ rejectPromise(prependMessage(responseText));
78
88
  }
79
89
  },
80
90
  error: (error, xhr) => {
@@ -82,9 +92,9 @@ export class Uid2ApiClient {
82
92
  this._logInfo('Error status, assuming unencrypted JSON');
83
93
  const response = JSON.parse(xhr.responseText);
84
94
  const result = this.ResponseToRefreshResult(response);
85
- if (typeof result === 'string') { rejectPromise(result); } else { resolvePromise(result); }
95
+ if (typeof result === 'string') { rejectPromise(prependMessage(result)); } else { resolvePromise(result); }
86
96
  } catch (_e) {
87
- rejectPromise(error)
97
+ rejectPromise(prependMessage(error));
88
98
  }
89
99
  }
90
100
  }, refreshDetails.refresh_token, { method: 'POST',
@@ -99,7 +109,7 @@ export class Uid2StorageManager {
99
109
  this._storage = storage;
100
110
  this._preferLocalStorage = preferLocalStorage;
101
111
  this._storageName = storageName;
102
- this._logInfo = logInfo;
112
+ this._logInfo = (...args) => logInfoWrapper(logInfo, ...args);
103
113
  }
104
114
  readCookie(cookieName) {
105
115
  return this._storage.cookiesAreEnabled() ? this._storage.getCookie(cookieName) : null;
@@ -392,7 +402,7 @@ if (FEATURES.UID2_CSTG) {
392
402
  this._baseUrl = opts.baseUrl;
393
403
  this._serverPublicKey = opts.cstg.serverPublicKey;
394
404
  this._subscriptionId = opts.cstg.subscriptionId;
395
- this._logInfo = logInfo;
405
+ this._logInfo = (...args) => logInfoWrapper(logInfo, ...args);
396
406
  this._logWarn = logWarn;
397
407
  }
398
408
 
@@ -512,11 +522,11 @@ if (FEATURES.UID2_CSTG) {
512
522
  // A 200 should always be a success response.
513
523
  // Something has gone wrong.
514
524
  rejectPromise(
515
- `API error: Response body was invalid for HTTP status 200: ${decryptedResponse}`
525
+ prependMessage(`API error: Response body was invalid for HTTP status 200: ${decryptedResponse}`)
516
526
  );
517
527
  }
518
528
  } catch (err) {
519
- rejectPromise(err);
529
+ rejectPromise(prependMessage(err));
520
530
  }
521
531
  },
522
532
  error: (error, xhr) => {
@@ -524,32 +534,32 @@ if (FEATURES.UID2_CSTG) {
524
534
  if (xhr.status === 400) {
525
535
  const response = JSON.parse(xhr.responseText);
526
536
  if (this.isCstgApiClientErrorResponse(response)) {
527
- rejectPromise(`Client error: ${response.message}`);
537
+ rejectPromise(prependMessage(`Client error: ${response.message}`));
528
538
  } else {
529
539
  // A 400 should always be a client error.
530
540
  // Something has gone wrong.
531
541
  rejectPromise(
532
- `API error: Response body was invalid for HTTP status 400: ${xhr.responseText}`
542
+ prependMessage(`UID2 API error: Response body was invalid for HTTP status 400: ${xhr.responseText}`)
533
543
  );
534
544
  }
535
545
  } else if (xhr.status === 403) {
536
546
  const response = JSON.parse(xhr.responseText);
537
547
  if (this.isCstgApiForbiddenResponse(xhr)) {
538
- rejectPromise(`Forbidden: ${response.message}`);
548
+ rejectPromise(prependMessage(`Forbidden: ${response.message}`));
539
549
  } else {
540
550
  // A 403 should always be a forbidden response.
541
551
  // Something has gone wrong.
542
552
  rejectPromise(
543
- `API error: Response body was invalid for HTTP status 403: ${xhr.responseText}`
553
+ prependMessage(`UID2 API error: Response body was invalid for HTTP status 403: ${xhr.responseText}`)
544
554
  );
545
555
  }
546
556
  } else {
547
557
  rejectPromise(
548
- `API error: Unexpected HTTP status ${xhr.status}: ${error}`
558
+ prependMessage(`UID2 API error: Unexpected HTTP status ${xhr.status}: ${error}`)
549
559
  );
550
560
  }
551
561
  } catch (_e) {
552
- rejectPromise(error);
562
+ rejectPromise(prependMessage(error));
553
563
  }
554
564
  },
555
565
  },
@@ -678,43 +688,45 @@ if (FEATURES.UID2_CSTG) {
678
688
  }
679
689
 
680
690
  export function Uid2GetId(config, prebidStorageManager, _logInfo, _logWarn) {
691
+ const logInfo = (...args) => logInfoWrapper(_logInfo, ...args);
692
+
681
693
  let suppliedToken = null;
682
694
  const preferLocalStorage = (config.storage !== 'cookie');
683
- const storageManager = new Uid2StorageManager(prebidStorageManager, preferLocalStorage, config.internalStorage, _logInfo);
684
- _logInfo(`Module is using ${preferLocalStorage ? 'local storage' : 'cookies'} for internal storage.`);
695
+ const storageManager = new Uid2StorageManager(prebidStorageManager, preferLocalStorage, config.internalStorage, logInfo);
696
+ logInfo(`Module is using ${preferLocalStorage ? 'local storage' : 'cookies'} for internal storage.`);
685
697
 
686
698
  const isCstgEnabled =
687
699
  clientSideTokenGenerator &&
688
700
  clientSideTokenGenerator.isCSTGOptionsValid(config.cstg, _logWarn);
689
701
  if (isCstgEnabled) {
690
- _logInfo(`Module is using client-side token generation.`);
702
+ logInfo(`Module is using client-side token generation.`);
691
703
  // Ignores config.paramToken and config.serverCookieName if any is provided
692
704
  suppliedToken = null;
693
705
  } else if (config.paramToken) {
694
706
  suppliedToken = config.paramToken;
695
- _logInfo('Read token from params', suppliedToken);
707
+ logInfo('Read token from params', suppliedToken);
696
708
  } else if (config.serverCookieName) {
697
709
  suppliedToken = storageManager.readProvidedCookie(config.serverCookieName);
698
- _logInfo('Read token from server-supplied cookie', suppliedToken);
710
+ logInfo('Read token from server-supplied cookie', suppliedToken);
699
711
  }
700
712
  let storedTokens = storageManager.getStoredValueWithFallback();
701
- _logInfo('Loaded module-stored tokens:', storedTokens);
713
+ logInfo('Loaded module-stored tokens:', storedTokens);
702
714
 
703
715
  if (storedTokens && typeof storedTokens === 'string') {
704
716
  // Stored value is a plain token - if no token is supplied, just use the stored value.
705
717
 
706
718
  if (!suppliedToken && !isCstgEnabled) {
707
- _logInfo('Returning legacy cookie value.');
719
+ logInfo('Returning legacy cookie value.');
708
720
  return { id: storedTokens };
709
721
  }
710
722
  // Otherwise, ignore the legacy value - it should get over-written later anyway.
711
- _logInfo('Discarding superseded legacy cookie.');
723
+ logInfo('Discarding superseded legacy cookie.');
712
724
  storedTokens = null;
713
725
  }
714
726
 
715
727
  if (suppliedToken && storedTokens) {
716
728
  if (storedTokens.originalToken?.advertising_token !== suppliedToken.advertising_token) {
717
- _logInfo('Server supplied new token - ignoring stored value.', storedTokens.originalToken?.advertising_token, suppliedToken.advertising_token);
729
+ logInfo('Server supplied new token - ignoring stored value.', storedTokens.originalToken?.advertising_token, suppliedToken.advertising_token);
718
730
  // Stored token wasn't originally sourced from the provided token - ignore the stored value. A new user has logged in?
719
731
  storedTokens = null;
720
732
  }
@@ -723,16 +735,16 @@ export function Uid2GetId(config, prebidStorageManager, _logInfo, _logWarn) {
723
735
  if (FEATURES.UID2_CSTG && isCstgEnabled) {
724
736
  const cstgIdentity = clientSideTokenGenerator.getValidIdentity(config.cstg, _logWarn);
725
737
  if (cstgIdentity) {
726
- if (storedTokens && clientSideTokenGenerator.isStoredTokenInvalid(cstgIdentity, storedTokens, _logInfo, _logWarn)) {
738
+ if (storedTokens && clientSideTokenGenerator.isStoredTokenInvalid(cstgIdentity, storedTokens, logInfo, _logWarn)) {
727
739
  storedTokens = null;
728
740
  }
729
741
 
730
742
  if (!storedTokens || Date.now() > storedTokens.latestToken.refresh_expires) {
731
- const promise = clientSideTokenGenerator.generateTokenAndStore(config.apiBaseUrl, config.cstg, cstgIdentity, storageManager, _logInfo, _logWarn);
732
- _logInfo('Generate token using CSTG');
743
+ const promise = clientSideTokenGenerator.generateTokenAndStore(config.apiBaseUrl, config.cstg, cstgIdentity, storageManager, logInfo, _logWarn);
744
+ logInfo('Generate token using CSTG');
733
745
  return { callback: (cb) => {
734
746
  promise.then((result) => {
735
- _logInfo('Token generation responded, passing the new token on.', result);
747
+ logInfo('Token generation responded, passing the new token on.', result);
736
748
  cb(result);
737
749
  });
738
750
  } };
@@ -742,25 +754,25 @@ export function Uid2GetId(config, prebidStorageManager, _logInfo, _logWarn) {
742
754
 
743
755
  const useSuppliedToken = !(storedTokens?.latestToken) || (suppliedToken && suppliedToken.identity_expires > storedTokens.latestToken.identity_expires);
744
756
  const newestAvailableToken = useSuppliedToken ? suppliedToken : storedTokens.latestToken;
745
- _logInfo('UID2 module selected latest token', useSuppliedToken, newestAvailableToken);
757
+ logInfo('UID2 module selected latest token', useSuppliedToken, newestAvailableToken);
746
758
  if ((!newestAvailableToken || Date.now() > newestAvailableToken.refresh_expires)) {
747
- _logInfo('Newest available token is expired and not refreshable.');
759
+ logInfo('Newest available token is expired and not refreshable.');
748
760
  return { id: null };
749
761
  }
750
762
  if (Date.now() > newestAvailableToken.identity_expires) {
751
- const promise = refreshTokenAndStore(config.apiBaseUrl, newestAvailableToken, config.clientId, storageManager, _logInfo, _logWarn);
752
- _logInfo('Token is expired but can be refreshed, attempting refresh.');
763
+ const promise = refreshTokenAndStore(config.apiBaseUrl, newestAvailableToken, config.clientId, storageManager, logInfo, _logWarn);
764
+ logInfo('Token is expired but can be refreshed, attempting refresh.');
753
765
  return { callback: (cb) => {
754
766
  promise.then((result) => {
755
- _logInfo('Refresh reponded, passing the updated token on.', result);
767
+ logInfo('Refresh reponded, passing the updated token on.', result);
756
768
  cb(result);
757
769
  });
758
770
  } };
759
771
  }
760
772
  // If should refresh (but don't need to), refresh in the background.
761
773
  if (Date.now() > newestAvailableToken.refresh_from) {
762
- _logInfo(`Refreshing token in background with low priority.`);
763
- refreshTokenAndStore(config.apiBaseUrl, newestAvailableToken, config.clientId, storageManager, _logInfo, _logWarn);
774
+ logInfo(`Refreshing token in background with low priority.`);
775
+ refreshTokenAndStore(config.apiBaseUrl, newestAvailableToken, config.clientId, storageManager, logInfo, _logWarn);
764
776
  }
765
777
  const tokens = {
766
778
  originalToken: suppliedToken ?? storedTokens?.originalToken,
@@ -1,4 +1,7 @@
1
1
  import {deepAccess, deepClone, isFn, isPlainObject, isStr} from '../../src/utils.js';
2
+ /*
3
+ * @typedef {import('../modules/userId/index.js').SubmoduleContainer} SubmoduleContainer
4
+ */
2
5
 
3
6
  export const EID_CONFIG = new Map();
4
7
 
@@ -27,11 +27,6 @@ function getUtiqFromStorage() {
27
27
  let utiqPassStorage = JSON.parse(
28
28
  storage.getDataFromLocalStorage('utiqPass')
29
29
  );
30
- logInfo(
31
- `${LOG_PREFIX}: Local storage utiqPass: ${JSON.stringify(
32
- utiqPassStorage
33
- )}`
34
- );
35
30
 
36
31
  if (
37
32
  utiqPassStorage &&
@@ -40,12 +35,19 @@ function getUtiqFromStorage() {
40
35
  utiqPassStorage.connectId.idGraph.length > 0
41
36
  ) {
42
37
  utiqPass = utiqPassStorage.connectId.idGraph[0];
38
+
39
+ logInfo(
40
+ `${LOG_PREFIX}: Local storage utiqPass: ${JSON.stringify(
41
+ utiqPassStorage
42
+ )}`
43
+ );
44
+
45
+ logInfo(
46
+ `${LOG_PREFIX}: Graph of utiqPass: ${JSON.stringify(
47
+ utiqPass
48
+ )}`
49
+ );
43
50
  }
44
- logInfo(
45
- `${LOG_PREFIX}: Graph of utiqPass: ${JSON.stringify(
46
- utiqPass
47
- )}`
48
- );
49
51
 
50
52
  return {
51
53
  utiq:
@@ -13,8 +13,8 @@ let optout;
13
13
 
14
14
  /**
15
15
  * Check if data passed is empty
16
- * @param {*} value to test against
17
- * @returns {Boolean} is value empty
16
+ * @param {*} data to test against
17
+ * @returns {Boolean} is data empty
18
18
  */
19
19
  function isEmptyData(data) {
20
20
  let check = true;
@@ -30,10 +30,10 @@ function isEmptyData(data) {
30
30
 
31
31
  /**
32
32
  * Check if required keys exist in data object
33
- * @param {Object} data object
34
- * @param {Array} array of required keys
35
- * @param {String} object path (for printing warning)
36
- * @param {Number} index of object value in the data array (for printing warning)
33
+ * @param {Object} obj data object
34
+ * @param {Array} required array of required keys
35
+ * @param {String} parent object path (for printing warning)
36
+ * @param {Number} i index of object value in the data array (for printing warning)
37
37
  * @returns {Boolean} is requirements fulfilled
38
38
  */
39
39
  function getRequiredData(obj, required, parent, i) {
@@ -51,8 +51,8 @@ function getRequiredData(obj, required, parent, i) {
51
51
 
52
52
  /**
53
53
  * Check if data type is valid
54
- * @param {*} value to test against
55
- * @param {Object} object containing type definition and if should be array bool
54
+ * @param {*} data value to test against
55
+ * @param {Object} mapping object containing type definition and if should be array bool
56
56
  * @returns {Boolean} is type fulfilled
57
57
  */
58
58
  function typeValidation(data, mapping) {
@@ -77,10 +77,10 @@ function typeValidation(data, mapping) {
77
77
 
78
78
  /**
79
79
  * Validates ortb2 data arrays and filters out invalid data
80
- * @param {Array} ortb2 data array
81
- * @param {Object} object defining child type and if array
82
- * @param {String} config path of data array
83
- * @param {String} parent path for logging warnings
80
+ * @param {Array} arr ortb2 data array
81
+ * @param {Object} child object defining child type and if array
82
+ * @param {String} path config path of data array
83
+ * @param {String} parent parent path for logging warnings
84
84
  * @returns {Array} validated/filtered data
85
85
  */
86
86
  export function filterArrayData(arr, child, path, parent) {
@@ -136,9 +136,9 @@ export function filterArrayData(arr, child, path, parent) {
136
136
 
137
137
  /**
138
138
  * Validates ortb2 object and filters out invalid data
139
- * @param {Object} ortb2 object
140
- * @param {String} config path of data array
141
- * @param {String} parent path for logging warnings
139
+ * @param {Object} fpd ortb2 object
140
+ * @param {String} path config path of data array
141
+ * @param {String} parent parent path for logging warnings
142
142
  * @returns {Object} validated/filtered data
143
143
  */
144
144
  export function validateFpd(fpd, path = '', parent = '') {
@@ -190,6 +190,8 @@ export function validateFpd(fpd, path = '', parent = '') {
190
190
 
191
191
  /**
192
192
  * Run validation on global and bidder config data for ortb2
193
+ * @param {Object} data global and bidder config data
194
+ * @returns {Object} validated data
193
195
  */
194
196
  function runValidations(data) {
195
197
  return {
@@ -200,6 +202,9 @@ function runValidations(data) {
200
202
 
201
203
  /**
202
204
  * Sets default values to ortb2 if exists and adds currency and ortb2 setConfig callbacks on init
205
+ * @param {Object} fpdConf configuration object
206
+ * @param {Object} data ortb2 data
207
+ * @returns {Object} processed data
203
208
  */
204
209
  export function processFpd(fpdConf, data) {
205
210
  // Checks for existsnece of pubcid optout cookie/storage
@@ -210,11 +215,11 @@ export function processFpd(fpdConf, data) {
210
215
  return (!fpdConf.skipValidations) ? runValidations(data) : data;
211
216
  }
212
217
 
213
- /** @type {firstPartyDataSubmodule} */
218
+ /** @type {{name: string, queue: number, processFpd: function}} */
214
219
  export const validationSubmodule = {
215
220
  name: 'validation',
216
221
  queue: 1,
217
222
  processFpd
218
223
  }
219
224
 
220
- submodule('firstPartyData', validationSubmodule)
225
+ submodule('firstPartyData', validationSubmodule);
@@ -13,6 +13,9 @@ import { submodule } from '../src/hook.js';
13
13
  import stateFactory from '../libraries/video/shared/state.js';
14
14
  import { PLAYBACK_MODE } from '../libraries/video/constants/constants.js';
15
15
  import { getEventHandler } from '../libraries/video/shared/eventHandler.js';
16
+ /**
17
+ * @typedef {import('../libraries/video/shared/state.js').State} State
18
+ */
16
19
 
17
20
  /*
18
21
  Plugins of interest:
@@ -33,7 +33,7 @@ const LOG_ERROR_MESS = {
33
33
  onlyVideoInstream: `Only video ${VIDEO_INSTREAM} supported`,
34
34
  videoMissing: 'Bid request videoType property is missing - '
35
35
  };
36
- const currencyWhiteList = ['EUR', 'USD', 'GBP', 'PLN'];
36
+ const currencyWhiteList = ['EUR', 'USD', 'GBP', 'PLN', 'CHF', 'SEK'];
37
37
  export const storage = getStorageManager({bidderCode: BIDDER_CODE});
38
38
  const _bidResponseTimeLogged = [];
39
39
  export const spec = {
@@ -13,9 +13,10 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
13
13
  import {BANNER} from '../src/mediaTypes.js';
14
14
  import {find, includes} from '../src/polyfill.js';
15
15
  import {getStorageManager} from '../src/storageManager.js';
16
- import {hasPurpose1Consent} from '../src/utils/gpdr.js';
16
+ import {hasPurpose1Consent} from '../src/utils/gdpr.js';
17
17
  import {getANKeywordParam} from '../libraries/appnexusUtils/anKeywords.js';
18
18
  import {convertCamelToUnderscore} from '../libraries/appnexusUtils/anUtils.js';
19
+ import { transformSizes } from '../libraries/sizeUtils/tranformSize.js';
19
20
 
20
21
  /**
21
22
  * @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
@@ -470,32 +471,6 @@ function bidToTag(bid) {
470
471
  return tag;
471
472
  }
472
473
 
473
- /* Turn bid request sizes into ut-compatible format */
474
- function transformSizes(requestSizes) {
475
- let sizes = [];
476
- let sizeObj = {};
477
-
478
- if (
479
- isArray(requestSizes) &&
480
- requestSizes.length === 2 &&
481
- !isArray(requestSizes[0])
482
- ) {
483
- sizeObj.width = parseInt(requestSizes[0], 10);
484
- sizeObj.height = parseInt(requestSizes[1], 10);
485
- sizes.push(sizeObj);
486
- } else if (typeof requestSizes === 'object') {
487
- for (let i = 0; i < requestSizes.length; i++) {
488
- let size = requestSizes[i];
489
- sizeObj = {};
490
- sizeObj.width = parseInt(size[0], 10);
491
- sizeObj.height = parseInt(size[1], 10);
492
- sizes.push(sizeObj);
493
- }
494
- }
495
-
496
- return sizes;
497
- }
498
-
499
474
  function hasUserInfo(bid) {
500
475
  return !!bid.params.user;
501
476
  }
@@ -3,7 +3,7 @@ import { BANNER, VIDEO } from '../src/mediaTypes.js';
3
3
  import { deepAccess, isFn, isStr, isNumber, isArray, isEmpty, isPlainObject, generateUUID, logInfo, logWarn } from '../src/utils.js';
4
4
  import { config } from '../src/config.js';
5
5
  import { Renderer } from '../src/Renderer.js';
6
- import {hasPurpose1Consent} from '../src/utils/gpdr.js';
6
+ import {hasPurpose1Consent} from '../src/utils/gdpr.js';
7
7
 
8
8
  const INTEGRATION_METHOD = 'prebid.js';
9
9
  const BIDDER_CODE = 'yahooAds';
@@ -128,7 +128,7 @@ class YandexUidGenerator {
128
128
  }
129
129
 
130
130
  _getRandomGenerator() {
131
- if (crypto) {
131
+ if (window.crypto) {
132
132
  return () => {
133
133
  const buffer = new Uint32Array(1);
134
134
  crypto.getRandomValues(buffer);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prebid.js",
3
- "version": "9.4.1",
3
+ "version": "9.6.0",
4
4
  "description": "Header Bidding Management Library",
5
5
  "main": "src/prebid.public.js",
6
6
  "exports": {
@@ -66,7 +66,7 @@
66
66
  "eslint": "^7.27.0",
67
67
  "eslint-config-standard": "^10.2.1",
68
68
  "eslint-plugin-import": "^2.20.2",
69
- "eslint-plugin-jsdoc": "^38.1.6",
69
+ "eslint-plugin-jsdoc": "^48.5.0",
70
70
  "eslint-plugin-node": "^11.1.0",
71
71
  "eslint-plugin-prebid": "file:./plugins/eslint",
72
72
  "eslint-plugin-promise": "^5.1.0",
@@ -74,7 +74,7 @@
74
74
  "execa": "^1.0.0",
75
75
  "faker": "^5.5.3",
76
76
  "fs.extra": "^1.3.2",
77
- "gulp": "^4.0.0",
77
+ "gulp": "^4.0.2",
78
78
  "gulp-clean": "^0.4.0",
79
79
  "gulp-concat": "^2.6.0",
80
80
  "gulp-connect": "^5.7.0",
@@ -115,7 +115,7 @@
115
115
  "opn": "^5.4.0",
116
116
  "querystring": "^0.2.1",
117
117
  "resolve-from": "^5.0.0",
118
- "sinon": "^4.1.3",
118
+ "sinon": "^4.5.0",
119
119
  "through2": "^4.0.2",
120
120
  "url": "^0.11.0",
121
121
  "url-parse": "^1.0.5",
@@ -1,52 +1,13 @@
1
1
  const _ = require('lodash');
2
2
  const { flagErrors } = require('./validateImports.js');
3
+ const noGlobal = require('eslint/lib/rules/no-restricted-globals.js');
4
+
5
+ function getName(node) {
6
+ return node.type === 'Literal' ? node.value : node.name;
7
+ }
3
8
 
4
9
  module.exports = {
5
10
  rules: {
6
- 'no-outerText': {
7
- meta: {
8
- docs: {
9
- description: '.outerText property on DOM elements should not be used due to performance issues'
10
- },
11
- messages: {
12
- noInnerText: 'Use of `.outerText` is not allowed. Use `.textContent` instead.',
13
- }
14
- },
15
- create: function(context) {
16
- return {
17
- MemberExpression(node) {
18
- if (node.property && node.property.name === 'outerText') {
19
- context.report({
20
- node: node.property,
21
- messageId: 'noOuterText',
22
- });
23
- }
24
- }
25
- }
26
- }
27
- },
28
- 'no-innerText': {
29
- meta: {
30
- docs: {
31
- description: '.innerText property on DOM elements should not be used due to performance issues'
32
- },
33
- messages: {
34
- noInnerText: 'Use of `.innerText` is not allowed. Use `.textContent` instead.',
35
- }
36
- },
37
- create: function(context) {
38
- return {
39
- MemberExpression(node) {
40
- if (node.property && node.property.name === 'innerText') {
41
- context.report({
42
- node: node.property,
43
- messageId: 'noInnerText',
44
- });
45
- }
46
- }
47
- }
48
- }
49
- },
50
11
  'validate-imports': {
51
12
  meta: {
52
13
  docs: {
@@ -69,8 +30,75 @@ module.exports = {
69
30
  let importPath = node.source.value.trim();
70
31
  flagErrors(context, node, importPath);
71
32
  }
33
+ };
34
+ }
35
+ },
36
+ 'no-member': {
37
+ meta: {
38
+ schema: {
39
+ type: 'array',
40
+ items: {
41
+ type: 'object',
42
+ properties: {
43
+ target: { type: 'string' },
44
+ name: { type: 'string' },
45
+ message: { type: 'string' }
46
+ },
47
+ required: ['name', 'message'],
48
+ additionalProperties: false
49
+ },
50
+ uniqueItems: true,
51
+ minItems: 1
52
+ },
53
+
54
+ messages: {
55
+ noMember: "Unexpected use of '{{target}}.{{name}}'. {{message}}",
72
56
  }
57
+ },
58
+
59
+ create(context) {
60
+ return {
61
+ MemberExpression(node) {
62
+ context.options.forEach(({name, target, message}) => {
63
+ if (target === node.object.name && getName(node.property) === name) {
64
+ context.report({
65
+ node,
66
+ messageId: 'noMember',
67
+ data: {
68
+ name,
69
+ target: target || '',
70
+ message
71
+ }
72
+ });
73
+ }
74
+ });
75
+ }
76
+ }
77
+ }
78
+ },
79
+ 'no-global': Object.assign({}, noGlobal, {
80
+ // no-restricted-global that also looks for `window.GLOBAL`
81
+ create(context) {
82
+ const globals = Object.fromEntries(
83
+ context.options.map(option => typeof option === 'string' ? [option, null] : [option.name, option.message])
84
+ )
85
+ return Object.assign(noGlobal.create(context), {
86
+ MemberExpression(node) {
87
+ const name = getName(node.property);
88
+ if (node.object.name === 'window' && globals.hasOwnProperty(name)) {
89
+ const customMessage = globals[name];
90
+ context.report({
91
+ node,
92
+ messageId: customMessage == null ? 'defaultMessage' : 'customMessage',
93
+ data: {
94
+ name,
95
+ customMessage
96
+ }
97
+ })
98
+ }
99
+ }
100
+ })
73
101
  }
74
- }
102
+ }),
75
103
  }
76
104
  };
package/src/adloader.js CHANGED
@@ -31,6 +31,7 @@ const _approvedLoadExternalJSList = [
31
31
  'qortex',
32
32
  'dynamicAdBoost',
33
33
  '51Degrees',
34
+ 'symitridap',
34
35
  // UserId Submodules
35
36
  'justtag',
36
37
  'tncId',