prebid.js 9.4.1 → 9.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/.eslintrc.js +31 -5
  2. package/.github/workflows/jscpd.yml +2 -2
  3. package/.github/workflows/linter.yml +107 -0
  4. package/creative/crossDomain.js +6 -3
  5. package/dist/33acrossAnalyticsAdapter.js +1 -1
  6. package/dist/33acrossBidAdapter.js +1 -1
  7. package/dist/33acrossIdSystem.js +1 -1
  8. package/dist/BTBidAdapter.js +1 -1
  9. package/dist/adagioAnalyticsAdapter.js +1 -1
  10. package/dist/adagioBidAdapter.js +1 -1
  11. package/dist/adagioRtdProvider.js +1 -1
  12. package/dist/adagioUtils.js +1 -1
  13. package/dist/addefendBidAdapter.js +1 -1
  14. package/dist/adgenerationBidAdapter.js +1 -1
  15. package/dist/adkernelAdnBidAdapter.js +1 -1
  16. package/dist/adkernelBidAdapter.js +1 -1
  17. package/dist/adkernelUtils.js +1 -0
  18. package/dist/adlooxRtdProvider.js +1 -1
  19. package/dist/admixerBidAdapter.js +1 -1
  20. package/dist/adqueryBidAdapter.js +1 -1
  21. package/dist/adrelevantisBidAdapter.js +1 -1
  22. package/dist/adstirBidAdapter.js +1 -1
  23. package/dist/adtrgtmeBidAdapter.js +1 -1
  24. package/dist/advRedAnalyticsAdapter.js +1 -0
  25. package/dist/adxcgAnalyticsAdapter.js +1 -1
  26. package/dist/adxcgBidAdapter.js +1 -1
  27. package/dist/adyoulikeBidAdapter.js +1 -1
  28. package/dist/agmaAnalyticsAdapter.js +1 -1
  29. package/dist/aidemBidAdapter.js +1 -1
  30. package/dist/ajaBidAdapter.js +1 -1
  31. package/dist/akamaiDapRtdProvider.js +1 -1
  32. package/dist/amxBidAdapter.js +1 -1
  33. package/dist/amxIdSystem.js +1 -1
  34. package/dist/anonymisedRtdProvider.js +1 -1
  35. package/dist/apacdexBidAdapter.js +1 -1
  36. package/dist/appierAnalyticsAdapter.js +1 -1
  37. package/dist/appnexusBidAdapter.js +1 -1
  38. package/dist/asoBidAdapter.js +1 -1
  39. package/dist/axonixBidAdapter.js +1 -1
  40. package/dist/azerionedgeRtdProvider.js +1 -1
  41. package/dist/bidglassBidAdapter.js +1 -1
  42. package/dist/big-richmediaBidAdapter.js +1 -1
  43. package/dist/bridBidAdapter.js +1 -1
  44. package/dist/bridgewellBidAdapter.js +1 -1
  45. package/dist/brightMountainMediaBidAdapter.js +1 -1
  46. package/dist/carodaBidAdapter.js +1 -1
  47. package/dist/chtnwBidAdapter.js +1 -1
  48. package/dist/chunk-core.js +1 -1
  49. package/dist/concertBidAdapter.js +1 -1
  50. package/dist/connatixBidAdapter.js +1 -1
  51. package/dist/connectIdSystem.js +1 -1
  52. package/dist/connectadBidAdapter.js +1 -1
  53. package/dist/consumableBidAdapter.js +1 -1
  54. package/dist/contxtfulRtdProvider.js +1 -1
  55. package/dist/conversantAnalyticsAdapter.js +1 -1
  56. package/dist/conversantBidAdapter.js +1 -1
  57. package/dist/craftBidAdapter.js +1 -1
  58. package/dist/criteoBidAdapter.js +1 -1
  59. package/dist/currencyUtils.js +1 -1
  60. package/dist/cwireBidAdapter.js +1 -1
  61. package/dist/dailymotionBidAdapter.js +1 -1
  62. package/dist/debugging-standalone.js +1 -1
  63. package/dist/dependencies.json +69 -8
  64. package/dist/dfpAdServerVideo.js +1 -1
  65. package/dist/dfpAdpod.js +1 -1
  66. package/dist/dfpUtils.js +1 -1
  67. package/dist/discoveryBidAdapter.js +1 -1
  68. package/dist/dspxBidAdapter.js +1 -1
  69. package/dist/dxkultureBidAdapter.js +1 -1
  70. package/dist/eightPodAnalyticsAdapter.js +1 -1
  71. package/dist/eightPodBidAdapter.js +1 -1
  72. package/dist/eplanningBidAdapter.js +1 -1
  73. package/dist/euidIdSystem.js +1 -1
  74. package/dist/exadsBidAdapter.js +1 -1
  75. package/dist/feedadBidAdapter.js +1 -1
  76. package/dist/finativeBidAdapter.js +1 -1
  77. package/dist/fintezaAnalyticsAdapter.js +1 -1
  78. package/dist/fpdUtils.js +1 -0
  79. package/dist/freewheel-sspBidAdapter.js +1 -1
  80. package/dist/gmosspBidAdapter.js +1 -1
  81. package/dist/goldbachBidAdapter.js +1 -1
  82. package/dist/gptPreAuction.js +1 -1
  83. package/dist/gptUtils.js +1 -1
  84. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  85. package/dist/greenbidsRtdProvider.js +1 -1
  86. package/dist/gridBidAdapter.js +1 -1
  87. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  88. package/dist/growthCodeRtdProvider.js +1 -1
  89. package/dist/gumgumBidAdapter.js +1 -1
  90. package/dist/h12mediaBidAdapter.js +1 -1
  91. package/dist/hypelabBidAdapter.js +1 -1
  92. package/dist/id5AnalyticsAdapter.js +1 -1
  93. package/dist/id5IdSystem.js +1 -1
  94. package/dist/imdsBidAdapter.js +1 -1
  95. package/dist/improvedigitalBidAdapter.js +1 -1
  96. package/dist/insticatorBidAdapter.js +1 -1
  97. package/dist/intentIqAnalyticsAdapter.js +1 -0
  98. package/dist/ixBidAdapter.js +1 -1
  99. package/dist/jixieBidAdapter.js +1 -1
  100. package/dist/justpremiumBidAdapter.js +1 -1
  101. package/dist/jwplayerBidAdapter.js +1 -1
  102. package/dist/jwplayerRtdProvider.js +1 -1
  103. package/dist/kargoBidAdapter.js +1 -1
  104. package/dist/kimberliteBidAdapter.js +1 -1
  105. package/dist/konduitAnalyticsAdapter.js +1 -1
  106. package/dist/kueezBidAdapter.js +1 -1
  107. package/dist/lassoBidAdapter.js +1 -1
  108. package/dist/lifestreetBidAdapter.js +1 -1
  109. package/dist/liveIntentIdSystem.js +1 -1
  110. package/dist/logicadBidAdapter.js +1 -1
  111. package/dist/loglyliftBidAdapter.js +1 -1
  112. package/dist/luceadBidAdapter.js +1 -1
  113. package/dist/mabidderBidAdapter.js +1 -1
  114. package/dist/magniteAnalyticsAdapter.js +1 -1
  115. package/dist/malltvAnalyticsAdapter.js +1 -1
  116. package/dist/marsmediaBidAdapter.js +1 -1
  117. package/dist/mediafuseBidAdapter.js +1 -1
  118. package/dist/mediagoBidAdapter.js +1 -1
  119. package/dist/medianetAnalyticsAdapter.js +1 -1
  120. package/dist/medianetBidAdapter.js +1 -1
  121. package/dist/mediasquareBidAdapter.js +1 -1
  122. package/dist/mgidBidAdapter.js +1 -1
  123. package/dist/minutemediaBidAdapter.js +1 -1
  124. package/dist/missenaBidAdapter.js +1 -1
  125. package/dist/mobianRtdProvider.js +1 -1
  126. package/dist/nextMillenniumBidAdapter.js +1 -1
  127. package/dist/nexx360BidAdapter.js +1 -1
  128. package/dist/nobidAnalyticsAdapter.js +1 -1
  129. package/dist/nobidBidAdapter.js +1 -1
  130. package/dist/not-for-prod/prebid.js +208 -199
  131. package/dist/oguryBidAdapter.js +1 -1
  132. package/dist/onetagBidAdapter.js +1 -1
  133. package/dist/ooloAnalyticsAdapter.js +1 -1
  134. package/dist/openwebBidAdapter.js +1 -1
  135. package/dist/openxBidAdapter.js +1 -1
  136. package/dist/optidigitalBidAdapter.js +1 -1
  137. package/dist/optoutBidAdapter.js +1 -1
  138. package/dist/orbidderBidAdapter.js +1 -1
  139. package/dist/outbrainBidAdapter.js +1 -1
  140. package/dist/paapi.js +1 -1
  141. package/dist/permutiveRtdProvider.js +1 -1
  142. package/dist/pixfutureBidAdapter.js +1 -1
  143. package/dist/playdigoBidAdapter.js +1 -1
  144. package/dist/prebidServerBidAdapter.js +1 -1
  145. package/dist/programmaticaBidAdapter.js +1 -1
  146. package/dist/publinkIdSystem.js +1 -1
  147. package/dist/publirBidAdapter.js +1 -1
  148. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  149. package/dist/pubmaticBidAdapter.js +1 -1
  150. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  151. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  152. package/dist/pxyzBidAdapter.js +1 -1
  153. package/dist/quantcastBidAdapter.js +1 -1
  154. package/dist/readpeakBidAdapter.js +1 -1
  155. package/dist/relaidoBidAdapter.js +1 -1
  156. package/dist/relevatehealthBidAdapter.js +1 -1
  157. package/dist/retailspotBidAdapter.js +1 -1
  158. package/dist/rhythmoneBidAdapter.js +1 -1
  159. package/dist/ringieraxelspringerBidAdapter.js +1 -1
  160. package/dist/riseBidAdapter.js +1 -1
  161. package/dist/riseUtils.js +1 -0
  162. package/dist/rubiconBidAdapter.js +1 -1
  163. package/dist/schainSerializer.js +1 -0
  164. package/dist/seedingAllianceBidAdapter.js +1 -1
  165. package/dist/seedtagBidAdapter.js +1 -1
  166. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  167. package/dist/sharethroughBidAdapter.js +1 -1
  168. package/dist/shinezBidAdapter.js +1 -1
  169. package/dist/sizeMapping.js +1 -1
  170. package/dist/sizeUtils.js +1 -1
  171. package/dist/smaatoBidAdapter.js +1 -1
  172. package/dist/smartadserverBidAdapter.js +1 -1
  173. package/dist/smarthubBidAdapter.js +1 -1
  174. package/dist/smartxBidAdapter.js +1 -1
  175. package/dist/smilewantedBidAdapter.js +1 -1
  176. package/dist/snigelBidAdapter.js +1 -1
  177. package/dist/sonobiBidAdapter.js +1 -1
  178. package/dist/sovrnBidAdapter.js +1 -1
  179. package/dist/sspBCBidAdapter.js +1 -1
  180. package/dist/stnBidAdapter.js +1 -1
  181. package/dist/stvBidAdapter.js +1 -1
  182. package/dist/sublimeBidAdapter.js +1 -1
  183. package/dist/symitriDapRtdProvider.js +1 -0
  184. package/dist/taboolaBidAdapter.js +1 -1
  185. package/dist/tappxBidAdapter.js +1 -1
  186. package/dist/targetVideoBidAdapter.js +1 -1
  187. package/dist/targetVideoUtils.js +1 -0
  188. package/dist/teadsBidAdapter.js +1 -1
  189. package/dist/telariaBidAdapter.js +1 -1
  190. package/dist/teqblazeUtils.js +1 -1
  191. package/dist/terceptAnalyticsAdapter.js +1 -1
  192. package/dist/themoneytizerBidAdapter.js +1 -1
  193. package/dist/trionBidAdapter.js +1 -1
  194. package/dist/tripleliftBidAdapter.js +1 -1
  195. package/dist/ttdBidAdapter.js +1 -1
  196. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  197. package/dist/uid2IdSystem.js +1 -1
  198. package/dist/uid2IdSystem_shared.js +1 -1
  199. package/dist/underdogmediaBidAdapter.js +1 -1
  200. package/dist/undertoneBidAdapter.js +1 -1
  201. package/dist/unrulyBidAdapter.js +1 -1
  202. package/dist/userAgentUtils.js +1 -0
  203. package/dist/utiqIdSystem.js +1 -1
  204. package/dist/vidazooUtils.js +1 -1
  205. package/dist/videobyteBidAdapter.js +1 -1
  206. package/dist/visxBidAdapter.js +1 -1
  207. package/dist/vuukleBidAdapter.js +1 -1
  208. package/dist/widespaceBidAdapter.js +1 -1
  209. package/dist/winrBidAdapter.js +1 -1
  210. package/dist/yahooAdsBidAdapter.js +1 -1
  211. package/dist/yandexIdSystem.js +1 -1
  212. package/dist/yieldmoBidAdapter.js +1 -1
  213. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  214. package/integrationExamples/gpt/x-domain/creative.html +1 -1
  215. package/libraries/adkernelUtils/adkernelUtils.js +11 -0
  216. package/libraries/currencyUtils/floor.js +23 -0
  217. package/libraries/dfpUtils/dfpUtils.js +7 -0
  218. package/libraries/fpdUtils/deviceInfo.js +58 -0
  219. package/libraries/fpdUtils/pageInfo.js +73 -0
  220. package/libraries/gptUtils/gptUtils.js +23 -1
  221. package/libraries/riseUtils/index.js +330 -0
  222. package/libraries/schainSerializer/schainSerializer.js +24 -0
  223. package/libraries/sizeUtils/tranformSize.js +43 -0
  224. package/libraries/targetVideoUtils/bidderUtils.js +178 -0
  225. package/libraries/targetVideoUtils/constants.js +23 -0
  226. package/libraries/teqblazeUtils/bidderUtils.js +15 -11
  227. package/libraries/userAgentUtils/index.js +58 -0
  228. package/libraries/userAgentUtils/userAgentTypes.enums.js +22 -0
  229. package/modules/.submodules.json +1 -0
  230. package/modules/33acrossAnalyticsAdapter.js +2 -0
  231. package/modules/adagioAnalyticsAdapter.js +101 -84
  232. package/modules/adagioAnalyticsAdapter.md +4 -0
  233. package/modules/adagioBidAdapter.js +5 -17
  234. package/modules/adagioRtdProvider.js +18 -4
  235. package/modules/adkernelAdnBidAdapter.js +1 -12
  236. package/modules/adkernelBidAdapter.js +4 -13
  237. package/modules/adlooxAnalyticsAdapter.js +1 -0
  238. package/modules/admixerBidAdapter.js +10 -6
  239. package/modules/admixerBidAdapter.md +7 -10
  240. package/modules/adtrgtmeBidAdapter.js +1 -1
  241. package/modules/advRedAnalyticsAdapter.js +198 -0
  242. package/modules/advRedAnalyticsAdapter.md +30 -0
  243. package/modules/aidemBidAdapter.js +2 -0
  244. package/modules/akamaiDapRtdProvider.js +19 -798
  245. package/modules/anonymisedRtdProvider.js +5 -1
  246. package/modules/anonymisedRtdProvider.md +1 -1
  247. package/modules/apacdexBidAdapter.js +1 -1
  248. package/modules/appnexusBidAdapter.js +56 -2
  249. package/modules/automatadAnalyticsAdapter.js +2 -0
  250. package/modules/azerionedgeRtdProvider.js +13 -3
  251. package/modules/azerionedgeRtdProvider.md +0 -17
  252. package/modules/bridBidAdapter.js +47 -47
  253. package/modules/cleanioRtdProvider.js +1 -0
  254. package/modules/concertBidAdapter.js +1 -1
  255. package/modules/connatixBidAdapter.js +36 -8
  256. package/modules/connectIdSystem.js +6 -2
  257. package/modules/contxtfulRtdProvider.js +20 -2
  258. package/modules/contxtfulRtdProvider.md +1 -0
  259. package/modules/craftBidAdapter.js +1 -1
  260. package/modules/criteoBidAdapter.js +1 -1
  261. package/modules/cwireBidAdapter.js +5 -1
  262. package/modules/dailymotionBidAdapter.js +85 -65
  263. package/modules/debugging/debugging.js +3 -0
  264. package/modules/dfpAdServerVideo.js +15 -33
  265. package/modules/dfpAdpod.js +2 -6
  266. package/modules/dgkeywordRtdProvider.js +2 -0
  267. package/modules/discoveryBidAdapter.js +26 -210
  268. package/modules/dspxBidAdapter.js +176 -54
  269. package/modules/eightPodAnalyticsAdapter.js +28 -34
  270. package/modules/eightPodBidAdapter.js +113 -57
  271. package/modules/fintezaAnalyticsAdapter.js +9 -4
  272. package/modules/goldbachBidAdapter.js +1 -1
  273. package/modules/gptPreAuction.js +63 -4
  274. package/modules/growthCodeAnalyticsAdapter.js +1 -1
  275. package/modules/growthCodeRtdProvider.js +1 -1
  276. package/modules/gumgumBidAdapter.js +14 -10
  277. package/modules/improvedigitalBidAdapter.js +1 -1
  278. package/modules/insticatorBidAdapter.js +35 -31
  279. package/modules/intentIqAnalyticsAdapter.js +234 -0
  280. package/modules/intentIqAnalyticsAdapter.md +27 -0
  281. package/modules/intentIqIdSystem.md +0 -0
  282. package/modules/jwplayerBidAdapter.js +1 -1
  283. package/modules/jwplayerRtdProvider.js +26 -6
  284. package/modules/jwplayerVideoProvider.js +6 -0
  285. package/modules/kargoBidAdapter.js +11 -14
  286. package/modules/kimberliteBidAdapter.js +24 -7
  287. package/modules/kimberliteBidAdapter.md +30 -1
  288. package/modules/mediafuseBidAdapter.js +1 -1
  289. package/modules/mediagoBidAdapter.js +7 -176
  290. package/modules/medianetBidAdapter.js +101 -40
  291. package/modules/mgidBidAdapter.js +3 -1
  292. package/modules/minutemediaBidAdapter.js +21 -398
  293. package/modules/mobianRtdProvider.js +16 -2
  294. package/modules/nextMillenniumBidAdapter.js +1 -27
  295. package/modules/nexx360BidAdapter.js +3 -2
  296. package/modules/nobidBidAdapter.js +1 -1
  297. package/modules/openwebBidAdapter.js +18 -396
  298. package/modules/optoutBidAdapter.js +1 -1
  299. package/modules/paapi.js +48 -35
  300. package/modules/permutiveRtdProvider.js +72 -22
  301. package/modules/playdigoBidAdapter.js +4 -2
  302. package/modules/prebidServerBidAdapter/index.js +4 -2
  303. package/modules/prebidServerBidAdapter/ortbConverter.js +1 -0
  304. package/modules/programmaticaBidAdapter.js +1 -1
  305. package/modules/publirBidAdapter.js +20 -273
  306. package/modules/pubmaticBidAdapter.js +12 -0
  307. package/modules/pubxaiAnalyticsAdapter.js +306 -164
  308. package/modules/relevatehealthBidAdapter.js +2 -1
  309. package/modules/resetdigitalBidAdapter.md +54 -45
  310. package/modules/richaudienceBidAdapter.js +1 -1
  311. package/modules/riseBidAdapter.js +19 -400
  312. package/modules/rtdModule/index.js +5 -3
  313. package/modules/shinezBidAdapter.js +17 -361
  314. package/modules/sirdataRtdProvider.js +2 -0
  315. package/modules/sizeMapping.js +2 -5
  316. package/modules/smaatoBidAdapter.js +18 -1
  317. package/modules/smarthubBidAdapter.js +45 -177
  318. package/modules/smilewantedBidAdapter.js +26 -22
  319. package/modules/snigelBidAdapter.js +1 -1
  320. package/modules/sonobiBidAdapter.js +5 -10
  321. package/modules/stnBidAdapter.js +22 -398
  322. package/modules/symitriDapRtdProvider.js +812 -0
  323. package/modules/symitriDapRtdProvider.md +49 -0
  324. package/modules/targetVideoBidAdapter.js +120 -152
  325. package/modules/targetVideoBidAdapter.md +20 -3
  326. package/modules/telariaBidAdapter.js +2 -32
  327. package/modules/uid2IdSystem_shared.js +51 -39
  328. package/modules/userId/eids.js +3 -0
  329. package/modules/utiqIdSystem.js +12 -10
  330. package/modules/validationFpdModule/index.js +22 -17
  331. package/modules/videojsVideoProvider.js +3 -0
  332. package/modules/visxBidAdapter.js +1 -1
  333. package/modules/winrBidAdapter.js +2 -27
  334. package/modules/yahooAdsBidAdapter.js +1 -1
  335. package/modules/yandexIdSystem.js +1 -1
  336. package/package.json +4 -4
  337. package/plugins/eslint/index.js +73 -45
  338. package/src/adloader.js +1 -0
  339. package/src/ajax.js +15 -0
  340. package/src/config.js +0 -4
  341. package/src/debugging.js +1 -0
  342. package/src/prebid.js +4 -0
  343. package/src/secureCreatives.js +1 -1
  344. package/src/storageManager.js +62 -73
  345. package/src/targeting.js +26 -20
  346. package/src/utils.js +9 -0
  347. package/test/pages/consent_mgt_gdpr.html +1 -1
  348. package/test/spec/ajax_spec.js +11 -0
  349. package/test/spec/creative/crossDomainCreative_spec.js +26 -9
  350. package/test/spec/fpd/gdpr_spec.js +1 -1
  351. package/test/spec/libraries/userAgentUtils_spec.js +109 -0
  352. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +231 -141
  353. package/test/spec/modules/adagioBidAdapter_spec.js +32 -66
  354. package/test/spec/modules/adagioRtdProvider_spec.js +72 -0
  355. package/test/spec/modules/admixerBidAdapter_spec.js +21 -17
  356. package/test/spec/modules/advRedAnalyticsAdapter_spec.js +114 -0
  357. package/test/spec/modules/adxcgBidAdapter_spec.js +1 -1
  358. package/test/spec/modules/appnexusBidAdapter_spec.js +36 -0
  359. package/test/spec/modules/azerionedgeRtdProvider_spec.js +36 -21
  360. package/test/spec/modules/connatixBidAdapter_spec.js +55 -2
  361. package/test/spec/modules/connectIdSystem_spec.js +27 -28
  362. package/test/spec/modules/consentManagement_spec.js +1 -1
  363. package/test/spec/modules/contxtfulRtdProvider_spec.js +6 -0
  364. package/test/spec/modules/dailymotionBidAdapter_spec.js +497 -4
  365. package/test/spec/modules/discoveryBidAdapter_spec.js +9 -6
  366. package/test/spec/modules/dspxBidAdapter_spec.js +188 -7
  367. package/test/spec/modules/eightPodAnalyticsAdapter_spec.js +22 -13
  368. package/test/spec/modules/gptPreAuction_spec.js +143 -1
  369. package/test/spec/modules/gumgumBidAdapter_spec.js +17 -0
  370. package/test/spec/modules/insticatorBidAdapter_spec.js +8 -1
  371. package/test/spec/modules/intentIqAnalyticsAdapter_spec.js +172 -0
  372. package/test/spec/modules/jwplayerRtdProvider_spec.js +61 -0
  373. package/test/spec/modules/kargoBidAdapter_spec.js +7 -8
  374. package/test/spec/modules/kimberliteBidAdapter_spec.js +137 -65
  375. package/test/spec/modules/mediagoBidAdapter_spec.js +34 -37
  376. package/test/spec/modules/medianetBidAdapter_spec.js +297 -16
  377. package/test/spec/modules/mgidBidAdapter_spec.js +15 -5
  378. package/test/spec/modules/mobianRtdProvider_spec.js +1 -3
  379. package/test/spec/modules/nexx360BidAdapter_spec.js +1 -1
  380. package/test/spec/modules/paapi_spec.js +177 -111
  381. package/test/spec/modules/permutiveRtdProvider_spec.js +42 -8
  382. package/test/spec/modules/prebidServerBidAdapter_spec.js +17 -3
  383. package/test/spec/modules/proxistoreBidAdapter_spec.js +1 -1
  384. package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
  385. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +970 -603
  386. package/test/spec/modules/pulsepointBidAdapter_spec.js +4 -4
  387. package/test/spec/modules/smaatoBidAdapter_spec.js +36 -1
  388. package/test/spec/modules/smarthubBidAdapter_spec.js +6 -4
  389. package/test/spec/modules/smilewantedBidAdapter_spec.js +57 -1
  390. package/test/spec/modules/symitriDapRtdProvider_spec.js +600 -0
  391. package/test/spec/modules/targetVideoBidAdapter_spec.js +112 -11
  392. package/test/spec/modules/yandexIdSystem_spec.js +6 -1
  393. package/test/spec/schainSerializer/schainSerializer_spec.js +138 -0
  394. package/test/spec/unit/core/storageManager_spec.js +68 -51
  395. package/test/spec/unit/pbjs_api_spec.js +11 -0
  396. package/test/spec/utils_spec.js +19 -0
  397. /package/src/utils/{gpdr.js → gdpr.js} +0 -0
@@ -2,33 +2,28 @@ import {
2
2
  logWarn,
3
3
  logInfo,
4
4
  isArray,
5
- isFn,
6
5
  deepAccess,
7
- isEmpty,
8
- contains,
9
- triggerPixel,
10
- isInteger,
11
- getBidIdParameter,
12
- getDNT
6
+ triggerPixel
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 = 'openweb';
20
19
  const ADAPTER_VERSION = '6.0.0';
21
20
  const TTL = 360;
22
21
  const DEFAULT_CURRENCY = 'USD';
23
- const SELLER_ENDPOINT = 'https://hb.openwebmp.com/';
22
+ const BASE_URL = 'https://hb.openwebmp.com/';
24
23
  const MODES = {
25
24
  PRODUCTION: 'hb-multi',
26
25
  TEST: 'hb-multi-test'
27
- }
28
- const SUPPORTED_SYNC_METHODS = {
29
- IFRAME: 'iframe',
30
- PIXEL: 'pixel'
31
- }
26
+ };
32
27
 
33
28
  export const spec = {
34
29
  code: BIDDER_CODE,
@@ -65,7 +60,7 @@ export const spec = {
65
60
 
66
61
  return {
67
62
  method: 'POST',
68
- url: getEndpoint(testMode),
63
+ url: getEndpoint(testMode, BASE_URL, MODES),
69
64
  data: combinedRequestsObject
70
65
  }
71
66
  },
@@ -74,32 +69,7 @@ export const spec = {
74
69
 
75
70
  if (body && body.bids && body.bids.length) {
76
71
  body.bids.forEach(adUnit => {
77
- const bidResponse = {
78
- requestId: adUnit.requestId,
79
- cpm: adUnit.cpm,
80
- currency: adUnit.currency || DEFAULT_CURRENCY,
81
- width: adUnit.width,
82
- height: adUnit.height,
83
- ttl: adUnit.ttl || TTL,
84
- creativeId: adUnit.creativeId,
85
- netRevenue: adUnit.netRevenue || true,
86
- nurl: adUnit.nurl,
87
- mediaType: adUnit.mediaType,
88
- meta: {
89
- mediaType: adUnit.mediaType
90
- }
91
- };
92
-
93
- if (adUnit.mediaType === VIDEO) {
94
- bidResponse.vastXml = adUnit.vastXml;
95
- } else if (adUnit.mediaType === BANNER) {
96
- bidResponse.ad = adUnit.ad;
97
- }
98
-
99
- if (adUnit.adomain && adUnit.adomain.length) {
100
- bidResponse.meta.advertiserDomains = adUnit.adomain;
101
- }
102
-
72
+ const bidResponse = buildBidResponse(adUnit, DEFAULT_CURRENCY, TTL, VIDEO, BANNER);
103
73
  bidResponses.push(bidResponse);
104
74
  });
105
75
  }
@@ -109,20 +79,20 @@ export const spec = {
109
79
  getUserSyncs: function (syncOptions, serverResponses) {
110
80
  const syncs = [];
111
81
  for (const response of serverResponses) {
112
- if (syncOptions.iframeEnabled && response.body.params.userSyncURL) {
82
+ if (syncOptions.iframeEnabled && deepAccess(response, 'body.params.userSyncURL')) {
113
83
  syncs.push({
114
84
  type: 'iframe',
115
- url: response.body.params.userSyncURL
85
+ url: deepAccess(response, 'body.params.userSyncURL')
116
86
  });
117
87
  }
118
- if (syncOptions.pixelEnabled && isArray(response.body.params.userSyncPixels)) {
88
+ if (syncOptions.pixelEnabled && isArray(deepAccess(response, 'body.params.userSyncPixels'))) {
119
89
  const pixels = response.body.params.userSyncPixels.map(pixel => {
120
90
  return {
121
91
  type: 'image',
122
92
  url: pixel
123
93
  }
124
- })
125
- syncs.push(...pixels)
94
+ });
95
+ syncs.push(...pixels);
126
96
  }
127
97
  }
128
98
  return syncs;
@@ -140,351 +110,3 @@ export const spec = {
140
110
  };
141
111
 
142
112
  registerBidder(spec);
143
-
144
- /**
145
- * Get floor price
146
- * @param bid {bid}
147
- * @returns {Number}
148
- */
149
- function getFloor(bid, mediaType) {
150
- if (!isFn(bid.getFloor)) {
151
- return 0;
152
- }
153
- let floorResult = bid.getFloor({
154
- currency: DEFAULT_CURRENCY,
155
- mediaType: mediaType,
156
- size: '*'
157
- });
158
- return floorResult.currency === DEFAULT_CURRENCY && floorResult.floor ? floorResult.floor : 0;
159
- }
160
-
161
- /**
162
- * Get the the ad sizes array from the bid
163
- * @param bid {bid}
164
- * @returns {Array}
165
- */
166
- function getSizesArray(bid, mediaType) {
167
- let sizesArray = []
168
-
169
- if (deepAccess(bid, `mediaTypes.${mediaType}.sizes`)) {
170
- sizesArray = bid.mediaTypes[mediaType].sizes;
171
- } else if (Array.isArray(bid.sizes) && bid.sizes.length > 0) {
172
- sizesArray = bid.sizes;
173
- }
174
-
175
- return sizesArray;
176
- }
177
-
178
- /**
179
- * Get schain string value
180
- * @param schainObject {Object}
181
- * @returns {string}
182
- */
183
- function getSupplyChain(schainObject) {
184
- if (isEmpty(schainObject)) {
185
- return '';
186
- }
187
- let scStr = `${schainObject.ver},${schainObject.complete}`;
188
- schainObject.nodes.forEach((node) => {
189
- scStr += '!';
190
- scStr += `${getEncodedValIfNotEmpty(node.asi)},`;
191
- scStr += `${getEncodedValIfNotEmpty(node.sid)},`;
192
- scStr += `${node.hp ? encodeURIComponent(node.hp) : ''},`;
193
- scStr += `${getEncodedValIfNotEmpty(node.rid)},`;
194
- scStr += `${getEncodedValIfNotEmpty(node.name)},`;
195
- scStr += `${getEncodedValIfNotEmpty(node.domain)}`;
196
- });
197
- return scStr;
198
- }
199
-
200
- /**
201
- * Get encoded node value
202
- * @param val {string}
203
- * @returns {string}
204
- */
205
- function getEncodedValIfNotEmpty(val) {
206
- return !isEmpty(val) ? encodeURIComponent(val) : '';
207
- }
208
-
209
- /**
210
- * Get preferred user-sync method based on publisher configuration
211
- * @param bidderCode {string}
212
- * @returns {string}
213
- */
214
- function getAllowedSyncMethod(filterSettings, bidderCode) {
215
- const iframeConfigsToCheck = ['all', 'iframe'];
216
- const pixelConfigToCheck = 'image';
217
- if (filterSettings && iframeConfigsToCheck.some(config => isSyncMethodAllowed(filterSettings[config], bidderCode))) {
218
- return SUPPORTED_SYNC_METHODS.IFRAME;
219
- }
220
- if (!filterSettings || !filterSettings[pixelConfigToCheck] || isSyncMethodAllowed(filterSettings[pixelConfigToCheck], bidderCode)) {
221
- return SUPPORTED_SYNC_METHODS.PIXEL;
222
- }
223
- }
224
-
225
- /**
226
- * Check if sync rule is supported
227
- * @param syncRule {Object}
228
- * @param bidderCode {string}
229
- * @returns {boolean}
230
- */
231
- function isSyncMethodAllowed(syncRule, bidderCode) {
232
- if (!syncRule) {
233
- return false;
234
- }
235
- const isInclude = syncRule.filter === 'include';
236
- const bidders = isArray(syncRule.bidders) ? syncRule.bidders : [bidderCode];
237
- return isInclude && contains(bidders, bidderCode);
238
- }
239
-
240
- /**
241
- * Get the seller endpoint
242
- * @param testMode {boolean}
243
- * @returns {string}
244
- */
245
- function getEndpoint(testMode) {
246
- return testMode
247
- ? SELLER_ENDPOINT + MODES.TEST
248
- : SELLER_ENDPOINT + MODES.PRODUCTION;
249
- }
250
-
251
- /**
252
- * get device type
253
- * @param uad {ua}
254
- * @returns {string}
255
- */
256
- function getDeviceType(ua) {
257
- if (/ipad|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i
258
- .test(ua.toLowerCase())) {
259
- return '5';
260
- }
261
- if (/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i
262
- .test(ua.toLowerCase())) {
263
- return '4';
264
- }
265
- if (/smart[-_\s]?tv|hbbtv|appletv|googletv|hdmi|netcast|viera|nettv|roku|\bdtv\b|sonydtv|inettvbrowser|\btv\b/i
266
- .test(ua.toLowerCase())) {
267
- return '3';
268
- }
269
- return '1';
270
- }
271
-
272
- function generateBidsParams(validBidRequests, bidderRequest) {
273
- const bidsArray = [];
274
-
275
- if (validBidRequests.length) {
276
- validBidRequests.forEach(bid => {
277
- bidsArray.push(generateBidParameters(bid, bidderRequest));
278
- });
279
- }
280
-
281
- return bidsArray;
282
- }
283
-
284
- /**
285
- * Generate bid specific parameters
286
- * @param {bid} bid
287
- * @param {bidderRequest} bidderRequest
288
- * @returns {Object} bid specific params object
289
- */
290
- function generateBidParameters(bid, bidderRequest) {
291
- const {params} = bid;
292
- const mediaType = isBanner(bid) ? BANNER : VIDEO;
293
- const sizesArray = getSizesArray(bid, mediaType);
294
-
295
- // fix floor price in case of NAN
296
- if (isNaN(params.floorPrice)) {
297
- params.floorPrice = 0;
298
- }
299
-
300
- const bidObject = {
301
- mediaType,
302
- adUnitCode: getBidIdParameter('adUnitCode', bid),
303
- sizes: sizesArray,
304
- floorPrice: Math.max(getFloor(bid, mediaType), params.floorPrice),
305
- bidId: getBidIdParameter('bidId', bid),
306
- loop: getBidIdParameter('bidderRequestsCount', bid),
307
- bidderRequestId: getBidIdParameter('bidderRequestId', bid),
308
- transactionId: bid.ortb2Imp?.ext?.tid || '',
309
- coppa: 0,
310
- };
311
-
312
- const pos = deepAccess(bid, `mediaTypes.${mediaType}.pos`);
313
- if (pos) {
314
- bidObject.pos = pos;
315
- }
316
-
317
- const gpid = deepAccess(bid, `ortb2Imp.ext.gpid`);
318
- if (gpid) {
319
- bidObject.gpid = gpid;
320
- }
321
-
322
- const placementId = params.placementId || deepAccess(bid, `mediaTypes.${mediaType}.name`);
323
- if (placementId) {
324
- bidObject.placementId = placementId;
325
- }
326
-
327
- const mimes = deepAccess(bid, `mediaTypes.${mediaType}.mimes`);
328
- if (mimes) {
329
- bidObject.mimes = mimes;
330
- }
331
- const api = deepAccess(bid, `mediaTypes.${mediaType}.api`);
332
- if (api) {
333
- bidObject.api = api;
334
- }
335
-
336
- const sua = deepAccess(bid, `ortb2.device.sua`);
337
- if (sua) {
338
- bidObject.sua = sua;
339
- }
340
-
341
- const coppa = deepAccess(bid, `ortb2.regs.coppa`);
342
- if (coppa) {
343
- bidObject.coppa = 1;
344
- }
345
-
346
- if (mediaType === VIDEO) {
347
- const playbackMethod = deepAccess(bid, `mediaTypes.video.playbackmethod`);
348
- let playbackMethodValue;
349
-
350
- // verify playbackMethod is of type integer array, or integer only.
351
- if (Array.isArray(playbackMethod) && isInteger(playbackMethod[0])) {
352
- // only the first playbackMethod in the array will be used, according to OpenRTB 2.5 recommendation
353
- playbackMethodValue = playbackMethod[0];
354
- } else if (isInteger(playbackMethod)) {
355
- playbackMethodValue = playbackMethod;
356
- }
357
-
358
- if (playbackMethodValue) {
359
- bidObject.playbackMethod = playbackMethodValue;
360
- }
361
-
362
- const placement = deepAccess(bid, `mediaTypes.video.placement`);
363
- if (placement) {
364
- bidObject.placement = placement;
365
- }
366
-
367
- const minDuration = deepAccess(bid, `mediaTypes.video.minduration`);
368
- if (minDuration) {
369
- bidObject.minDuration = minDuration;
370
- }
371
-
372
- const maxDuration = deepAccess(bid, `mediaTypes.video.maxduration`);
373
- if (maxDuration) {
374
- bidObject.maxDuration = maxDuration;
375
- }
376
-
377
- const skip = deepAccess(bid, `mediaTypes.video.skip`);
378
- if (skip) {
379
- bidObject.skip = skip;
380
- }
381
-
382
- const linearity = deepAccess(bid, `mediaTypes.video.linearity`);
383
- if (linearity) {
384
- bidObject.linearity = linearity;
385
- }
386
-
387
- const protocols = deepAccess(bid, `mediaTypes.video.protocols`);
388
- if (protocols) {
389
- bidObject.protocols = protocols;
390
- }
391
-
392
- const plcmt = deepAccess(bid, `mediaTypes.video.plcmt`);
393
- if (plcmt) {
394
- bidObject.plcmt = plcmt;
395
- }
396
- }
397
-
398
- return bidObject;
399
- }
400
-
401
- function isBanner(bid) {
402
- return bid.mediaTypes && bid.mediaTypes.banner;
403
- }
404
-
405
- /**
406
- * Generate params that are common between all bids
407
- * @param {single bid object} generalObject
408
- * @param {bidderRequest} bidderRequest
409
- * @returns {object} the common params object
410
- */
411
- function generateGeneralParams(generalObject, bidderRequest) {
412
- const domain = deepAccess(bidderRequest, 'refererInfo.domain') || window.location.hostname;
413
- const {syncEnabled, filterSettings} = config.getConfig('userSync') || {};
414
- const {bidderCode, timeout} = bidderRequest;
415
- const generalBidParams = generalObject.params;
416
-
417
- // these params are snake_case instead of camelCase to allow backwards compatability on the server.
418
- // in the future, these will be converted to camelCase to match our convention.
419
- const generalParams = {
420
- wrapper_type: 'prebidjs',
421
- wrapper_vendor: '$$PREBID_GLOBAL$$',
422
- wrapper_version: '$prebid.version$',
423
- adapter_version: ADAPTER_VERSION,
424
- publisher_id: generalBidParams.org,
425
- publisher_name: domain,
426
- site_domain: domain,
427
- dnt: getDNT() ? 1 : 0,
428
- device_type: getDeviceType(navigator.userAgent),
429
- ua: navigator.userAgent,
430
- is_wrapper: !!generalBidParams.isWrapper,
431
- session_id: generalBidParams.sessionId || getBidIdParameter('bidderRequestId', generalObject),
432
- tmax: timeout
433
- }
434
-
435
- const userIdsParam = getBidIdParameter('userId', generalObject);
436
- if (userIdsParam) {
437
- generalParams.userIds = JSON.stringify(userIdsParam);
438
- }
439
-
440
- const ortb2Metadata = bidderRequest.ortb2 || {};
441
- if (ortb2Metadata.site) {
442
- generalParams.site_metadata = JSON.stringify(ortb2Metadata.site);
443
- }
444
- if (ortb2Metadata.user) {
445
- generalParams.user_metadata = JSON.stringify(ortb2Metadata.user);
446
- }
447
-
448
- if (syncEnabled) {
449
- const allowedSyncMethod = getAllowedSyncMethod(filterSettings, bidderCode);
450
- if (allowedSyncMethod) {
451
- generalParams.cs_method = allowedSyncMethod;
452
- }
453
- }
454
-
455
- if (bidderRequest.auctionStart) {
456
- generalParams.auction_start = bidderRequest.auctionStart;
457
- }
458
-
459
- if (bidderRequest.uspConsent) {
460
- generalParams.us_privacy = bidderRequest.uspConsent;
461
- }
462
-
463
- if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies) {
464
- generalParams.gdpr = bidderRequest.gdprConsent.gdprApplies;
465
- generalParams.gdpr_consent = bidderRequest.gdprConsent.consentString;
466
- }
467
-
468
- if (bidderRequest.gppConsent) {
469
- generalParams.gpp = bidderRequest.gppConsent.gppString;
470
- generalParams.gpp_sid = bidderRequest.gppConsent.applicableSections;
471
- } else if (bidderRequest.ortb2?.regs?.gpp) {
472
- generalParams.gpp = bidderRequest.ortb2.regs.gpp;
473
- generalParams.gpp_sid = bidderRequest.ortb2.regs.gpp_sid;
474
- }
475
-
476
- if (generalBidParams.ifa) {
477
- generalParams.ifa = generalBidParams.ifa;
478
- }
479
-
480
- if (generalObject.schain) {
481
- generalParams.schain = getSupplyChain(generalObject.schain);
482
- }
483
-
484
- if (bidderRequest && bidderRequest.refererInfo) {
485
- generalParams.referrer = deepAccess(bidderRequest, 'refererInfo.ref');
486
- generalParams.page_url = deepAccess(bidderRequest, 'refererInfo.page') || deepAccess(window, 'location.href');
487
- }
488
-
489
- return generalParams;
490
- }
@@ -1,7 +1,7 @@
1
1
  import { deepAccess } from '../src/utils.js';
2
2
  import {config} from '../src/config.js';
3
3
  import {registerBidder} from '../src/adapters/bidderFactory.js';
4
- import {hasPurpose1Consent} from '../src/utils/gpdr.js';
4
+ import {hasPurpose1Consent} from '../src/utils/gdpr.js';
5
5
 
6
6
  const BIDDER_CODE = 'optout';
7
7
 
package/modules/paapi.js CHANGED
@@ -54,6 +54,7 @@ export function init(cfg) {
54
54
  }
55
55
 
56
56
  getHook('addPaapiConfig').before(addPaapiConfigHook);
57
+ getHook('makeBidRequests').before(addPaapiData);
57
58
  getHook('makeBidRequests').after(markForFledge);
58
59
  events.on(EVENTS.AUCTION_END, onAuctionEnd);
59
60
 
@@ -332,38 +333,50 @@ function getRequestedSize(adUnit) {
332
333
  })();
333
334
  }
334
335
 
336
+ export function addPaapiData(next, adUnits, ...args) {
337
+ if (isFledgeSupported() && moduleConfig.enabled) {
338
+ adUnits.forEach(adUnit => {
339
+ // https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/extensions/community_extensions/Protected%20Audience%20Support.md
340
+ const igsAe = adUnit.ortb2Imp?.ext?.igs != null
341
+ ? adUnit.ortb2Imp.ext.igs.ae || 1
342
+ : null;
343
+ const extAe = adUnit.ortb2Imp?.ext?.ae;
344
+ if (igsAe !== extAe && igsAe != null && extAe != null) {
345
+ logWarn(MODULE, `Ad unit defines conflicting ortb2Imp.ext.ae and ortb2Imp.ext.igs, using the latter`, adUnit);
346
+ }
347
+ const ae = igsAe ?? extAe ?? moduleConfig.defaultForSlots;
348
+ if (ae) {
349
+ deepSetValue(adUnit, 'ortb2Imp.ext.ae', ae);
350
+ adUnit.ortb2Imp.ext.igs = Object.assign({
351
+ ae: ae,
352
+ biddable: 1
353
+ }, adUnit.ortb2Imp.ext.igs);
354
+ const requestedSize = getRequestedSize(adUnit);
355
+ if (requestedSize) {
356
+ deepSetValue(adUnit, 'ortb2Imp.ext.paapi.requestedSize', requestedSize);
357
+ }
358
+ adUnit.bids.forEach(bidReq => {
359
+ if (!getFledgeConfig(bidReq.bidder).enabled) {
360
+ deepSetValue(bidReq, 'ortb2Imp.ext.ae', 0);
361
+ bidReq.ortb2Imp.ext.igs = {ae: 0, biddable: 0};
362
+ }
363
+ })
364
+ }
365
+ })
366
+ }
367
+ next(adUnits, ...args);
368
+ }
369
+
335
370
  export function markForFledge(next, bidderRequests) {
336
371
  if (isFledgeSupported()) {
337
372
  bidderRequests.forEach((bidderReq) => {
338
- const {enabled, ae} = getFledgeConfig(bidderReq.bidderCode);
373
+ const {enabled} = getFledgeConfig(bidderReq.bidderCode);
339
374
  Object.assign(bidderReq, {
340
375
  paapi: {
341
376
  enabled,
342
377
  componentSeller: !!moduleConfig.componentSeller?.auctionConfig
343
378
  }
344
379
  });
345
- bidderReq.bids.forEach(bidReq => {
346
- // https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/extensions/community_extensions/Protected%20Audience%20Support.md
347
- const igsAe = bidReq.ortb2Imp?.ext?.igs != null
348
- ? bidReq.ortb2Imp.ext.igs.ae || 1
349
- : null;
350
- const extAe = bidReq.ortb2Imp?.ext?.ae;
351
- if (igsAe !== extAe && igsAe != null && extAe != null) {
352
- logWarn(MODULE, `Bid request defines conflicting ortb2Imp.ext.ae and ortb2Imp.ext.igs, using the latter`, bidReq);
353
- }
354
- const bidAe = igsAe ?? extAe ?? ae;
355
- if (bidAe) {
356
- deepSetValue(bidReq, 'ortb2Imp.ext.ae', bidAe);
357
- bidReq.ortb2Imp.ext.igs = Object.assign({
358
- ae: bidAe,
359
- biddable: 1
360
- }, bidReq.ortb2Imp.ext.igs);
361
- const requestedSize = getRequestedSize(bidReq);
362
- if (requestedSize) {
363
- deepSetValue(bidReq, 'ortb2Imp.ext.paapi.requestedSize', requestedSize);
364
- }
365
- }
366
- });
367
380
  });
368
381
  }
369
382
  next(bidderRequests);
@@ -378,18 +391,6 @@ export function setImpExtAe(imp, bidRequest, context) {
378
391
 
379
392
  registerOrtbProcessor({type: IMP, name: 'impExtAe', fn: setImpExtAe});
380
393
 
381
- function paapiResponseParser(configs, response, context) {
382
- configs.forEach((config) => {
383
- const impCtx = context.impContext[config.impid];
384
- if (!impCtx?.imp?.ext?.ae) {
385
- logWarn(MODULE, 'Received auction configuration for an impression that was not in the request or did not ask for it', config, impCtx?.imp);
386
- } else {
387
- impCtx.paapiConfigs = impCtx.paapiConfigs || [];
388
- impCtx.paapiConfigs.push(config);
389
- }
390
- });
391
- }
392
-
393
394
  export function parseExtIgi(response, ortbResponse, context) {
394
395
  paapiResponseParser(
395
396
  (ortbResponse.ext?.igi || []).flatMap(igi => {
@@ -411,6 +412,18 @@ export function parseExtIgi(response, ortbResponse, context) {
411
412
  )
412
413
  }
413
414
 
415
+ function paapiResponseParser(configs, response, context) {
416
+ configs.forEach((config) => {
417
+ const impCtx = context.impContext[config.impid];
418
+ if (!impCtx?.imp?.ext?.ae) {
419
+ logWarn(MODULE, 'Received auction configuration for an impression that was not in the request or did not ask for it', config, impCtx?.imp);
420
+ } else {
421
+ impCtx.paapiConfigs = impCtx.paapiConfigs || [];
422
+ impCtx.paapiConfigs.push(config);
423
+ }
424
+ });
425
+ }
426
+
414
427
  // to make it easier to share code between the PBS adapter and adapters whose backend is PBS, break up
415
428
  // fledge response processing in two steps: first aggregate all the auction configs by their imp...
416
429