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
@@ -1,5 +1,6 @@
1
+ import { CLIENT_SECTIONS } from '../../src/fpd/oneClient.js';
1
2
  import {find} from '../../src/polyfill.js';
2
- import {compareCodeAndSlot, isGptPubadsDefined} from '../../src/utils.js';
3
+ import {compareCodeAndSlot, deepAccess, isGptPubadsDefined, uniques} from '../../src/utils.js';
3
4
 
4
5
  /**
5
6
  * Returns filter function to match adUnitCode in slot
@@ -35,3 +36,24 @@ export function getGptSlotInfoForAdUnitCode(adUnitCode) {
35
36
  }
36
37
  return {};
37
38
  }
39
+
40
+ export const taxonomies = ['IAB_AUDIENCE_1_1', 'IAB_CONTENT_2_2'];
41
+
42
+ export function getSignals(fpd) {
43
+ const signals = Object.entries({
44
+ [taxonomies[0]]: getSegments(fpd, ['user.data'], 4),
45
+ [taxonomies[1]]: getSegments(fpd, CLIENT_SECTIONS.map(section => `${section}.content.data`), 6)
46
+ }).map(([taxonomy, values]) => values.length ? {taxonomy, values} : null)
47
+ .filter(ob => ob);
48
+
49
+ return signals;
50
+ }
51
+
52
+ export function getSegments(fpd, sections, segtax) {
53
+ return sections
54
+ .flatMap(section => deepAccess(fpd, section) || [])
55
+ .filter(datum => datum.ext?.segtax === segtax)
56
+ .flatMap(datum => datum.segment?.map(seg => seg.id))
57
+ .filter(ob => ob)
58
+ .filter(uniques)
59
+ }
@@ -0,0 +1,330 @@
1
+ import {
2
+ isArray,
3
+ isFn,
4
+ deepAccess,
5
+ isEmpty,
6
+ contains,
7
+ isInteger,
8
+ getBidIdParameter
9
+ } from '../../src/utils.js';
10
+ import { BANNER, VIDEO } from '../../src/mediaTypes.js';
11
+ import {config} from '../../src/config.js';
12
+
13
+ export function getFloor(bid, mediaType) {
14
+ if (!isFn(bid.getFloor)) {
15
+ return 0;
16
+ }
17
+ let floorResult = bid.getFloor({
18
+ currency: 'USD',
19
+ mediaType: mediaType,
20
+ size: '*'
21
+ });
22
+ return floorResult.currency === 'USD' && floorResult.floor ? floorResult.floor : 0;
23
+ }
24
+
25
+ export function getSizesArray(bid, mediaType) {
26
+ let sizesArray = [];
27
+
28
+ if (deepAccess(bid, `mediaTypes.${mediaType}.sizes`)) {
29
+ sizesArray = bid.mediaTypes[mediaType].sizes;
30
+ } else if (Array.isArray(bid.sizes) && bid.sizes.length > 0) {
31
+ sizesArray = bid.sizes;
32
+ }
33
+
34
+ return sizesArray;
35
+ }
36
+
37
+ export function getSupplyChain(schainObject) {
38
+ if (isEmpty(schainObject)) {
39
+ return '';
40
+ }
41
+ let scStr = `${schainObject.ver},${schainObject.complete}`;
42
+ schainObject.nodes.forEach((node) => {
43
+ scStr += '!';
44
+ scStr += `${getEncodedValIfNotEmpty(node.asi)},`;
45
+ scStr += `${getEncodedValIfNotEmpty(node.sid)},`;
46
+ scStr += `${getEncodedValIfNotEmpty(node.hp)},`;
47
+ scStr += `${getEncodedValIfNotEmpty(node.rid)},`;
48
+ scStr += `${getEncodedValIfNotEmpty(node.name)},`;
49
+ scStr += `${getEncodedValIfNotEmpty(node.domain)}`;
50
+ });
51
+ return scStr;
52
+ }
53
+
54
+ export function getEncodedValIfNotEmpty(val) {
55
+ return (val !== '' && val !== undefined) ? encodeURIComponent(val) : '';
56
+ }
57
+
58
+ export function getAllowedSyncMethod(filterSettings, bidderCode) {
59
+ const iframeConfigsToCheck = ['all', 'iframe'];
60
+ const pixelConfigToCheck = 'image';
61
+ if (filterSettings && iframeConfigsToCheck.some(config => isSyncMethodAllowed(filterSettings[config], bidderCode))) {
62
+ return 'iframe';
63
+ }
64
+ if (!filterSettings || !filterSettings[pixelConfigToCheck] || isSyncMethodAllowed(filterSettings[pixelConfigToCheck], bidderCode)) {
65
+ return 'pixel';
66
+ }
67
+ }
68
+
69
+ export function isSyncMethodAllowed(syncRule, bidderCode) {
70
+ if (!syncRule) {
71
+ return false;
72
+ }
73
+ const isInclude = syncRule.filter === 'include';
74
+ const bidders = isArray(syncRule.bidders) ? syncRule.bidders : [bidderCode];
75
+ return isInclude && contains(bidders, bidderCode);
76
+ }
77
+
78
+ export function getEndpoint(testMode, baseUrl, modes) {
79
+ const protocol = baseUrl.startsWith('http') ? '' : 'https://';
80
+ const url = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;
81
+ return testMode
82
+ ? `${protocol}${url}${modes.TEST}`
83
+ : `${protocol}${url}${modes.PRODUCTION}`;
84
+ }
85
+
86
+ export function getDeviceType(ua) {
87
+ if (/ipad|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(ua.toLowerCase())) {
88
+ return '5';
89
+ }
90
+ if (/iphone|ipod|android|blackberry|opera|mini|windows\\sce|palm|smartphone|iemobile/i.test(ua.toLowerCase())) {
91
+ return '4';
92
+ }
93
+ if (/smart[-_\\s]?tv|hbbtv|appletv|googletv|hdmi|netcast|viera|nettv|roku|\\bdtv\\b|sonydtv|inettvbrowser|\\btv\\b/i.test(ua.toLowerCase())) {
94
+ return '3';
95
+ }
96
+ return '1';
97
+ }
98
+
99
+ export function generateBidsParams(validBidRequests, bidderRequest) {
100
+ const bidsArray = [];
101
+
102
+ if (validBidRequests.length) {
103
+ validBidRequests.forEach(bid => {
104
+ bidsArray.push(generateBidParameters(bid, bidderRequest));
105
+ });
106
+ }
107
+
108
+ return bidsArray;
109
+ }
110
+
111
+ export function generateBidParameters(bid, bidderRequest) {
112
+ const { params } = bid;
113
+ const mediaType = isBanner(bid) ? BANNER : VIDEO;
114
+ const sizesArray = getSizesArray(bid, mediaType);
115
+
116
+ if (isNaN(params.floorPrice)) {
117
+ params.floorPrice = 0;
118
+ }
119
+
120
+ const bidObject = {
121
+ mediaType,
122
+ adUnitCode: getBidIdParameter('adUnitCode', bid),
123
+ sizes: sizesArray,
124
+ floorPrice: Math.max(getFloor(bid, mediaType), params.floorPrice),
125
+ bidId: getBidIdParameter('bidId', bid),
126
+ loop: getBidIdParameter('bidderRequestsCount', bid),
127
+ bidderRequestId: getBidIdParameter('bidderRequestId', bid),
128
+ transactionId: bid.ortb2Imp?.ext?.tid || '',
129
+ coppa: 0,
130
+ };
131
+
132
+ const pos = deepAccess(bid, `mediaTypes.${mediaType}.pos`);
133
+ if (pos) {
134
+ bidObject.pos = pos;
135
+ }
136
+
137
+ const gpid = deepAccess(bid, `ortb2Imp.ext.gpid`);
138
+ if (gpid) {
139
+ bidObject.gpid = gpid;
140
+ }
141
+
142
+ const placementId = params.placementId || deepAccess(bid, `mediaTypes.${mediaType}.name`);
143
+ if (placementId) {
144
+ bidObject.placementId = placementId;
145
+ }
146
+
147
+ const mimes = deepAccess(bid, `mediaTypes.${mediaType}.mimes`);
148
+ if (mimes) {
149
+ bidObject.mimes = mimes;
150
+ }
151
+
152
+ const api = deepAccess(bid, `mediaTypes.${mediaType}.api`);
153
+ if (api) {
154
+ bidObject.api = api;
155
+ }
156
+
157
+ const sua = deepAccess(bid, `ortb2.device.sua`);
158
+ if (sua) {
159
+ bidObject.sua = sua;
160
+ }
161
+
162
+ const coppa = deepAccess(bid, `ortb2.regs.coppa`);
163
+ if (coppa) {
164
+ bidObject.coppa = 1;
165
+ }
166
+
167
+ if (mediaType === VIDEO) {
168
+ const playbackMethod = deepAccess(bid, `mediaTypes.video.playbackmethod`);
169
+ let playbackMethodValue;
170
+
171
+ if (Array.isArray(playbackMethod) && isInteger(playbackMethod[0])) {
172
+ playbackMethodValue = playbackMethod[0];
173
+ } else if (isInteger(playbackMethod)) {
174
+ playbackMethodValue = playbackMethod;
175
+ }
176
+
177
+ if (playbackMethodValue) {
178
+ bidObject.playbackMethod = playbackMethodValue;
179
+ }
180
+
181
+ const placement = deepAccess(bid, `mediaTypes.video.placement`);
182
+ if (placement) {
183
+ bidObject.placement = placement;
184
+ }
185
+
186
+ const minDuration = deepAccess(bid, `mediaTypes.video.minduration`);
187
+ if (minDuration) {
188
+ bidObject.minDuration = minDuration;
189
+ }
190
+
191
+ const maxDuration = deepAccess(bid, `mediaTypes.video.maxduration`);
192
+ if (maxDuration) {
193
+ bidObject.maxDuration = maxDuration;
194
+ }
195
+
196
+ const skip = deepAccess(bid, `mediaTypes.video.skip`);
197
+ if (skip) {
198
+ bidObject.skip = skip;
199
+ }
200
+
201
+ const linearity = deepAccess(bid, `mediaTypes.video.linearity`);
202
+ if (linearity) {
203
+ bidObject.linearity = linearity;
204
+ }
205
+
206
+ const protocols = deepAccess(bid, `mediaTypes.video.protocols`);
207
+ if (protocols) {
208
+ bidObject.protocols = protocols;
209
+ }
210
+
211
+ const plcmt = deepAccess(bid, `mediaTypes.video.plcmt`);
212
+ if (plcmt) {
213
+ bidObject.plcmt = plcmt;
214
+ }
215
+ }
216
+
217
+ return bidObject;
218
+ }
219
+
220
+ export function buildBidResponse(adUnit, DEFAULT_CURRENCY, TTL, VIDEO, BANNER) {
221
+ const bidResponse = {
222
+ requestId: adUnit.requestId,
223
+ cpm: adUnit.cpm,
224
+ currency: adUnit.currency || DEFAULT_CURRENCY,
225
+ width: adUnit.width,
226
+ height: adUnit.height,
227
+ ttl: adUnit.ttl || TTL,
228
+ creativeId: adUnit.creativeId,
229
+ netRevenue: adUnit.netRevenue || true,
230
+ nurl: adUnit.nurl,
231
+ mediaType: adUnit.mediaType,
232
+ meta: {
233
+ mediaType: adUnit.mediaType
234
+ }
235
+ };
236
+
237
+ if (adUnit.mediaType === VIDEO) {
238
+ bidResponse.vastXml = adUnit.vastXml;
239
+ } else if (adUnit.mediaType === BANNER) {
240
+ bidResponse.ad = adUnit.ad;
241
+ }
242
+
243
+ if (adUnit.adomain && adUnit.adomain.length) {
244
+ bidResponse.meta.advertiserDomains = adUnit.adomain;
245
+ }
246
+
247
+ return bidResponse;
248
+ }
249
+
250
+ function isBanner(bid) {
251
+ return bid.mediaTypes && bid.mediaTypes.banner;
252
+ }
253
+
254
+ export function generateGeneralParams(generalObject, bidderRequest, adapterVersion) {
255
+ const domain = window.location.hostname;
256
+ const { syncEnabled, filterSettings } = config.getConfig('userSync') || {};
257
+ const { bidderCode } = bidderRequest;
258
+ const generalBidParams = generalObject.params;
259
+ const timeout = bidderRequest.timeout;
260
+ const adapVer = adapterVersion || '6.0.0';
261
+
262
+ const generalParams = {
263
+ wrapper_type: 'prebidjs',
264
+ wrapper_vendor: '$$PREBID_GLOBAL$$',
265
+ wrapper_version: '$prebid.version$',
266
+ adapter_version: adapVer,
267
+ auction_start: bidderRequest.auctionStart,
268
+ publisher_id: generalBidParams.org,
269
+ publisher_name: domain,
270
+ site_domain: domain,
271
+ dnt: (navigator.doNotTrack === 'yes' || navigator.doNotTrack === '1' || navigator.msDoNotTrack === '1') ? 1 : 0,
272
+ device_type: getDeviceType(navigator.userAgent),
273
+ ua: navigator.userAgent,
274
+ is_wrapper: !!generalBidParams.isWrapper,
275
+ session_id: generalBidParams.sessionId || getBidIdParameter('bidderRequestId', generalObject),
276
+ tmax: timeout
277
+ };
278
+
279
+ const userIdsParam = getBidIdParameter('userId', generalObject);
280
+ if (userIdsParam) {
281
+ generalParams.userIds = JSON.stringify(userIdsParam);
282
+ }
283
+
284
+ const ortb2Metadata = bidderRequest.ortb2 || {};
285
+ if (ortb2Metadata.site) {
286
+ generalParams.site_metadata = JSON.stringify(ortb2Metadata.site);
287
+ }
288
+ if (ortb2Metadata.user) {
289
+ generalParams.user_metadata = JSON.stringify(ortb2Metadata.user);
290
+ }
291
+
292
+ if (syncEnabled) {
293
+ const allowedSyncMethod = getAllowedSyncMethod(filterSettings, bidderCode);
294
+ if (allowedSyncMethod) {
295
+ generalParams.cs_method = allowedSyncMethod;
296
+ }
297
+ }
298
+
299
+ if (bidderRequest.uspConsent) {
300
+ generalParams.us_privacy = bidderRequest.uspConsent;
301
+ }
302
+
303
+ if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies) {
304
+ generalParams.gdpr = bidderRequest.gdprConsent.gdprApplies;
305
+ generalParams.gdpr_consent = bidderRequest.gdprConsent.consentString;
306
+ }
307
+
308
+ if (bidderRequest.gppConsent) {
309
+ generalParams.gpp = bidderRequest.gppConsent.gppString;
310
+ generalParams.gpp_sid = bidderRequest.gppConsent.applicableSections;
311
+ } else if (bidderRequest.ortb2?.regs?.gpp) {
312
+ generalParams.gpp = bidderRequest.ortb2.regs.gpp;
313
+ generalParams.gpp_sid = bidderRequest.ortb2.regs.gpp_sid;
314
+ }
315
+
316
+ if (generalBidParams.ifa) {
317
+ generalParams.ifa = generalBidParams.ifa;
318
+ }
319
+
320
+ if (generalObject.schain) {
321
+ generalParams.schain = getSupplyChain(generalObject.schain);
322
+ }
323
+
324
+ if (bidderRequest && bidderRequest.refererInfo) {
325
+ generalParams.referrer = deepAccess(bidderRequest, 'refererInfo.ref');
326
+ generalParams.page_url = deepAccess(bidderRequest, 'refererInfo.page') || deepAccess(window, 'location.href');
327
+ }
328
+
329
+ return generalParams;
330
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Serialize the SupplyChain for Non-OpenRTB Requests
3
+ * https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/supplychainobject.md
4
+ *
5
+ * @param {Object} schain The supply chain object.
6
+ * @param {string} schain.ver The version of the supply chain.
7
+ * @param {number} schain.complete Indicates if the chain is complete (1) or not (0).
8
+ * @param {Array<Object>} schain.nodes An array of nodes in the supply chain.
9
+ * @param {Array<string>} nodesProperties The list of node properties to include in the serialized string.
10
+ * Can include: 'asi', 'sid', 'hp', 'rid', 'name', 'domain', 'ext'.
11
+ * @returns {string|null} The serialized supply chain string or null if the nodes are not present.
12
+ */
13
+ export function serializeSupplyChain(schain, nodesProperties) {
14
+ if (!schain?.nodes) return null;
15
+
16
+ const header = `${schain.ver},${schain.complete}!`;
17
+ const nodes = schain.nodes.map(
18
+ node => nodesProperties.map(
19
+ prop => node[prop] ? encodeURIComponent(node[prop]).replace(/!/g, '%21') : ''
20
+ ).join(',')
21
+ ).join('!');
22
+
23
+ return header + nodes;
24
+ }
@@ -0,0 +1,43 @@
1
+ import * as utils from '../../src/utils.js';
2
+
3
+ /**
4
+ * get sizes for rtb
5
+ * @param {Array|Object} requestSizes
6
+ * @return {Object}
7
+ */
8
+ export function transformSizes(requestSizes) {
9
+ let sizes = [];
10
+ let sizeObj = {};
11
+
12
+ if (
13
+ utils.isArray(requestSizes) &&
14
+ requestSizes.length === 2 &&
15
+ !utils.isArray(requestSizes[0])
16
+ ) {
17
+ sizeObj.width = parseInt(requestSizes[0], 10);
18
+ sizeObj.height = parseInt(requestSizes[1], 10);
19
+ sizes.push(sizeObj);
20
+ } else if (typeof requestSizes === 'object') {
21
+ for (let i = 0; i < requestSizes.length; i++) {
22
+ let size = requestSizes[i];
23
+ sizeObj = {};
24
+ sizeObj.width = parseInt(size[0], 10);
25
+ sizeObj.height = parseInt(size[1], 10);
26
+ sizes.push(sizeObj);
27
+ }
28
+ }
29
+
30
+ return sizes;
31
+ }
32
+
33
+ export const normalAdSize = [
34
+ { w: 300, h: 250 },
35
+ { w: 300, h: 600 },
36
+ { w: 728, h: 90 },
37
+ { w: 970, h: 250 },
38
+ { w: 320, h: 50 },
39
+ { w: 160, h: 600 },
40
+ { w: 320, h: 180 },
41
+ { w: 320, h: 100 },
42
+ { w: 336, h: 280 },
43
+ ];
@@ -0,0 +1,178 @@
1
+ import {VIDEO} from '../../src/mediaTypes.js';
2
+ import {getRefererInfo} from '../../src/refererDetection.js';
3
+ import {createTrackPixelHtml, deepAccess, getBidRequest} from '../../src/utils.js';
4
+
5
+ export function getSizes(request) {
6
+ let sizes = request.sizes;
7
+ if (!sizes && request.mediaTypes && request.mediaTypes.banner && request.mediaTypes.banner.sizes) {
8
+ sizes = request.mediaTypes.banner.sizes;
9
+ }
10
+ if (Array.isArray(sizes) && !Array.isArray(sizes[0])) {
11
+ sizes = [sizes[0], sizes[1]];
12
+ }
13
+ if (!Array.isArray(sizes) || !Array.isArray(sizes[0])) {
14
+ sizes = [[0, 0]];
15
+ }
16
+
17
+ return sizes;
18
+ }
19
+
20
+ export function formatRequest({payload, url, bidderRequest, bidId}) {
21
+ const request = {
22
+ method: 'POST',
23
+ data: JSON.stringify(payload),
24
+ url,
25
+ options: {
26
+ withCredentials: true,
27
+ }
28
+ }
29
+
30
+ if (bidderRequest) {
31
+ request.bidderRequest = bidderRequest;
32
+ }
33
+
34
+ if (bidId) {
35
+ request.bidId = bidId;
36
+ }
37
+
38
+ return request;
39
+ }
40
+
41
+ export function createVideoTag(bid) {
42
+ const tag = {};
43
+ tag.id = parseInt(bid.params.placementId, 10);
44
+ tag.gpid = 'targetVideo';
45
+ tag.sizes = getSizes(bid);
46
+ tag.primary_size = tag.sizes[0];
47
+ tag.ad_types = [VIDEO];
48
+ tag.uuid = bid.bidId;
49
+ tag.allow_smaller_sizes = false;
50
+ tag.use_pmt_rule = false;
51
+ tag.prebid = true;
52
+ tag.disable_psa = true;
53
+ tag.hb_source = 1;
54
+ tag.require_asset_url = true;
55
+ tag.video = {
56
+ playback_method: 2,
57
+ skippable: true
58
+ };
59
+
60
+ return tag;
61
+ }
62
+
63
+ export function bannerBid(serverBid, rtbBid, bidderRequest, margin) {
64
+ const bidRequest = getBidRequest(serverBid.uuid, [bidderRequest]);
65
+ const sizes = getSizes(bidRequest);
66
+ const bid = {
67
+ requestId: serverBid.uuid,
68
+ cpm: rtbBid.cpm / margin,
69
+ creativeId: rtbBid.creative_id,
70
+ dealId: rtbBid.deal_id,
71
+ currency: 'USD',
72
+ netRevenue: true,
73
+ width: sizes[0][0],
74
+ height: sizes[0][1],
75
+ ttl: 300,
76
+ adUnitCode: bidRequest.adUnitCode,
77
+ appnexus: {
78
+ buyerMemberId: rtbBid.buyer_member_id,
79
+ dealPriority: rtbBid.deal_priority,
80
+ dealCode: rtbBid.deal_code
81
+ }
82
+ };
83
+
84
+ if (rtbBid.rtb.video) {
85
+ Object.assign(bid, {
86
+ vastImpUrl: rtbBid.notify_url,
87
+ ad: getBannerHtml(rtbBid.notify_url + '&redir=' + encodeURIComponent(rtbBid.rtb.video.asset_url)),
88
+ ttl: 3600
89
+ });
90
+ }
91
+
92
+ return bid;
93
+ }
94
+
95
+ export function videoBid(serverBid, requestId, currency, params, ttl) {
96
+ const {ad, adUrl, vastUrl, vastXml} = getAd(serverBid);
97
+
98
+ const bid = {
99
+ requestId,
100
+ params,
101
+ currency,
102
+ cpm: serverBid.price,
103
+ width: serverBid.w,
104
+ height: serverBid.h,
105
+ creativeId: serverBid.adid || serverBid.crid,
106
+ netRevenue: false,
107
+ ttl,
108
+ meta: {
109
+ advertiserDomains: serverBid.adomain || []
110
+ }
111
+ };
112
+
113
+ if (vastUrl || vastXml) {
114
+ bid.mediaType = VIDEO;
115
+ if (vastUrl) bid.vastUrl = vastUrl;
116
+ if (vastXml) bid.vastXml = vastXml;
117
+ } else {
118
+ bid.ad = ad;
119
+ bid.adUrl = adUrl;
120
+ };
121
+
122
+ return bid;
123
+ }
124
+
125
+ export function getRtbBid(tag) {
126
+ return tag && tag.ads && tag.ads.length && tag.ads.find(ad => ad.rtb);
127
+ }
128
+
129
+ export function getBannerHtml(vastUrl) {
130
+ return `<!DOCTYPE html>
131
+ <html lang="en">
132
+ <head>
133
+ <meta charset="UTF-8">
134
+ <title></title>
135
+ <style>html, body {width: 100%; height: 100%; margin: 0;}</style>
136
+ </head>
137
+ <body>
138
+ <div id="targetVideoPlayer"></div>
139
+ <script src="https://player.target-video.com/custom/targetvideo-banner.js"></script>
140
+ <script>initPlayer("${vastUrl}");</script>
141
+ </body>
142
+ </html>`;
143
+ }
144
+
145
+ export function getAd(bid) {
146
+ let ad, adUrl, vastXml, vastUrl;
147
+
148
+ switch (deepAccess(bid, 'ext.prebid.type')) {
149
+ case VIDEO:
150
+ if (bid.adm.substr(0, 4) === 'http') {
151
+ vastUrl = bid.adm;
152
+ } else {
153
+ vastXml = bid.adm;
154
+ };
155
+ break;
156
+ default:
157
+ if (bid.adm && bid.nurl) {
158
+ ad = bid.adm;
159
+ ad += createTrackPixelHtml(decodeURIComponent(bid.nurl));
160
+ } else if (bid.adm) {
161
+ ad = bid.adm;
162
+ } else if (bid.nurl) {
163
+ adUrl = bid.nurl;
164
+ };
165
+ }
166
+
167
+ return {ad, adUrl, vastXml, vastUrl};
168
+ }
169
+
170
+ export function getSiteObj() {
171
+ const refInfo = (getRefererInfo && getRefererInfo()) || {};
172
+
173
+ return {
174
+ page: refInfo.page,
175
+ ref: refInfo.ref,
176
+ domain: refInfo.domain
177
+ }
178
+ }
@@ -0,0 +1,23 @@
1
+ const SOURCE = 'pbjs';
2
+ const GVLID = 786;
3
+ const MARGIN = 1.35;
4
+ const BIDDER_CODE = 'targetVideo';
5
+
6
+ const TIME_TO_LIVE = 300;
7
+ const BANNER_ENDPOINT_URL = 'https://ib.adnxs.com/ut/v3/prebid';
8
+ const VIDEO_ENDPOINT_URL = 'https://pbs.prebrid.tv/openrtb2/auction';
9
+ const VIDEO_PARAMS = [
10
+ 'api', 'linearity', 'maxduration', 'mimes', 'minduration',
11
+ 'plcmt', 'playbackmethod', 'protocols', 'startdelay'
12
+ ];
13
+
14
+ export {
15
+ SOURCE,
16
+ GVLID,
17
+ MARGIN,
18
+ BIDDER_CODE,
19
+ TIME_TO_LIVE,
20
+ BANNER_ENDPOINT_URL,
21
+ VIDEO_ENDPOINT_URL,
22
+ VIDEO_PARAMS
23
+ }
@@ -188,20 +188,24 @@ export const buildRequests = (adUrl) => (validBidRequests = [], bidderRequest =
188
188
  return buildRequestsBase({ adUrl, validBidRequests, bidderRequest, placementProcessingFunction });
189
189
  };
190
190
 
191
- export const interpretResponse = (serverResponse) => {
192
- let response = [];
193
- for (let i = 0; i < serverResponse.body.length; i++) {
194
- let resItem = serverResponse.body[i];
195
- if (isBidResponseValid(resItem)) {
196
- const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
197
- resItem.meta = { ...resItem.meta, advertiserDomains };
198
-
199
- response.push(resItem);
191
+ export function interpretResponseBuilder({addtlBidValidation = (bid) => true} = {}) {
192
+ return function (serverResponse) {
193
+ let response = [];
194
+ for (let i = 0; i < serverResponse.body.length; i++) {
195
+ let resItem = serverResponse.body[i];
196
+ if (isBidResponseValid(resItem) && addtlBidValidation(resItem)) {
197
+ const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
198
+ resItem.meta = { ...resItem.meta, advertiserDomains };
199
+
200
+ response.push(resItem);
201
+ }
200
202
  }
203
+
204
+ return response;
201
205
  }
206
+ }
202
207
 
203
- return response;
204
- };
208
+ export const interpretResponse = interpretResponseBuilder();
205
209
 
206
210
  export const getUserSyncs = (syncUrl) => (syncOptions, serverResponses, gdprConsent, uspConsent, gppConsent) => {
207
211
  const type = syncOptions.iframeEnabled ? 'iframe' : 'image';