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
@@ -48,7 +48,7 @@ const SUA_ATTRIBUTES = [
48
48
 
49
49
  const CERBERUS = Object.freeze({
50
50
  KEY: 'krg_crb',
51
- SYNC_URL: 'https://crb.kargo.com/api/v1/initsyncrnd/{UUID}?seed={SEED}&idx={INDEX}&gdpr={GDPR}&gdpr_consent={GDPR_CONSENT}&us_privacy={US_PRIVACY}&gpp={GPP_STRING}&gpp_sid={GPP_SID}',
51
+ SYNC_URL: 'https://crb.kargo.com/api/v1/initsyncrnd/{UUID}?seed={SEED}&gdpr={GDPR}&gdpr_consent={GDPR_CONSENT}&us_privacy={US_PRIVACY}&gpp={GPP_STRING}&gpp_sid={GPP_SID}',
52
52
  SYNC_COUNT: 5,
53
53
  PAGE_VIEW_ID: 'pageViewId',
54
54
  PAGE_VIEW_TIMESTAMP: 'pageViewTimestamp',
@@ -274,19 +274,16 @@ function getUserSyncs(syncOptions, _, gdprConsent, usPrivacy, gppConsent) {
274
274
  return syncs;
275
275
  }
276
276
  if (syncOptions.iframeEnabled && seed && clientId) {
277
- for (let i = 0; i < CERBERUS.SYNC_COUNT; i++) {
278
- syncs.push({
279
- type: 'iframe',
280
- url: CERBERUS.SYNC_URL.replace('{UUID}', clientId)
281
- .replace('{SEED}', seed)
282
- .replace('{INDEX}', i)
283
- .replace('{GDPR}', gdpr)
284
- .replace('{GDPR_CONSENT}', gdprConsentString)
285
- .replace('{US_PRIVACY}', usPrivacy || '')
286
- .replace('{GPP_STRING}', gppString)
287
- .replace('{GPP_SID}', gppApplicableSections)
288
- });
289
- }
277
+ syncs.push({
278
+ type: 'iframe',
279
+ url: CERBERUS.SYNC_URL.replace('{UUID}', clientId)
280
+ .replace('{SEED}', seed)
281
+ .replace('{GDPR}', gdpr)
282
+ .replace('{GDPR_CONSENT}', gdprConsentString)
283
+ .replace('{US_PRIVACY}', usPrivacy || '')
284
+ .replace('{GPP_STRING}', gppString)
285
+ .replace('{GPP_SID}', gppApplicableSections)
286
+ })
290
287
  }
291
288
  return syncs;
292
289
  }
@@ -1,13 +1,14 @@
1
1
  import { registerBidder } from '../src/adapters/bidderFactory.js';
2
- import { BANNER } from '../src/mediaTypes.js';
2
+ import { BANNER, VIDEO } from '../src/mediaTypes.js';
3
3
  import { ortbConverter } from '../libraries/ortbConverter/converter.js'
4
4
  import { deepSetValue } from '../src/utils.js';
5
+ import {ORTB_MTYPES} from '../libraries/ortbConverter/processors/mediaType.js';
5
6
 
6
- const VERSION = '1.0.0';
7
+ const VERSION = '1.1.0';
7
8
 
8
9
  const BIDDER_CODE = 'kimberlite';
9
10
  const METHOD = 'POST';
10
- const ENDPOINT_URL = 'https://kimberlite.io/rtb/bid/pbjs';
11
+ export const ENDPOINT_URL = 'https://kimberlite.io/rtb/bid/pbjs';
11
12
 
12
13
  const VERSION_INFO = {
13
14
  ver: '$prebid.version$',
@@ -16,7 +17,6 @@ const VERSION_INFO = {
16
17
 
17
18
  const converter = ortbConverter({
18
19
  context: {
19
- mediaType: BANNER,
20
20
  netRevenue: true,
21
21
  ttl: 300
22
22
  },
@@ -35,18 +35,32 @@ const converter = ortbConverter({
35
35
  const imp = buildImp(bidRequest, context);
36
36
  imp.tagid = bidRequest.params.placementId;
37
37
  return imp;
38
- }
38
+ },
39
+
40
+ bidResponse: function (buildBidResponse, bid, context) {
41
+ if (!bid.price) return;
42
+
43
+ const [type] = Object.keys(context.bidRequest.mediaTypes);
44
+ if (Object.values(ORTB_MTYPES).includes(type)) {
45
+ context.mediaType = type;
46
+ }
47
+
48
+ const bidResponse = buildBidResponse(bid, context);
49
+ return bidResponse;
50
+ },
39
51
  });
40
52
 
41
53
  export const spec = {
42
54
  code: BIDDER_CODE,
43
- supportedMediaTypes: [BANNER],
55
+ supportedMediaTypes: [BANNER, VIDEO],
44
56
 
45
57
  isBidRequestValid: (bidRequest = {}) => {
46
58
  const { params, mediaTypes } = bidRequest;
47
59
  let isValid = Boolean(params && params.placementId);
48
60
  if (mediaTypes && mediaTypes[BANNER]) {
49
61
  isValid = isValid && Boolean(mediaTypes[BANNER].sizes);
62
+ } else if (mediaTypes && mediaTypes[VIDEO]) {
63
+ isValid = isValid && Boolean(mediaTypes[VIDEO].mimes);
50
64
  } else {
51
65
  isValid = false;
52
66
  }
@@ -58,7 +72,10 @@ export const spec = {
58
72
  return {
59
73
  method: METHOD,
60
74
  url: ENDPOINT_URL,
61
- data: converter.toORTB({ bidderRequest, bidRequests })
75
+ data: converter.toORTB({
76
+ bidRequests,
77
+ bidderRequest
78
+ })
62
79
  }
63
80
  },
64
81
 
@@ -20,7 +20,7 @@ var adUnits = [
20
20
  code: 'test-div',
21
21
  mediaTypes: {
22
22
  banner: {
23
- sizes: [[320, 250], [640, 480]],
23
+ sizes: [[320, 250], [640, 480]], // Required.
24
24
  }
25
25
  },
26
26
  bids: [
@@ -34,3 +34,32 @@ var adUnits = [
34
34
  }
35
35
  ]
36
36
  ```
37
+
38
+ ## Video AdUnit
39
+
40
+ ```javascript
41
+ var adUnits = [
42
+ {
43
+ code: 'test-div',
44
+ mediaTypes: {
45
+ video: {
46
+ // ORTB 2.5 options.
47
+ mimes: ['video/mp4'], // Required.
48
+ // Other options are optional.
49
+ placement: 1,
50
+ protocols: [3, 6],
51
+ linearity: 1,
52
+ startdelay: 0
53
+ }
54
+ },
55
+ bids: [
56
+ {
57
+ bidder: "kimberlite",
58
+ params: {
59
+ placementId: 'testVideo'
60
+ }
61
+ }
62
+ ]
63
+ }
64
+ ]
65
+ ```
@@ -24,7 +24,7 @@ import {find, includes} from '../src/polyfill.js';
24
24
  import {INSTREAM, OUTSTREAM} from '../src/video.js';
25
25
  import {getStorageManager} from '../src/storageManager.js';
26
26
  import {bidderSettings} from '../src/bidderSettings.js';
27
- import {hasPurpose1Consent} from '../src/utils/gpdr.js';
27
+ import {hasPurpose1Consent} from '../src/utils/gdpr.js';
28
28
  import {convertOrtbRequestToProprietaryNative} from '../src/native.js';
29
29
  import {APPNEXUS_CATEGORY_MAPPING} from '../libraries/categoryTranslationMapping/index.js';
30
30
  import {
@@ -5,6 +5,11 @@
5
5
  import * as utils from '../src/utils.js';
6
6
  import { getStorageManager } from '../src/storageManager.js';
7
7
  import { registerBidder } from '../src/adapters/bidderFactory.js';
8
+ import { getPageTitle, getPageDescription, getPageKeywords, getConnectionDownLink, getReferrer } from '../libraries/fpdUtils/pageInfo.js';
9
+ import { getDevice } from '../libraries/fpdUtils/deviceInfo.js';
10
+ import { getBidFloor } from '../libraries/currencyUtils/floor.js';
11
+ import { transformSizes, normalAdSize } from '../libraries/sizeUtils/tranformSize.js';
12
+
8
13
  // import { config } from '../src/config.js';
9
14
  // import { isPubcidEnabled } from './pubCommonId.js';
10
15
 
@@ -34,64 +39,6 @@ export const COOKIE_KEY_MGUID = '__mguid_';
34
39
  const COOKIE_KEY_PMGUID = '__pmguid_';
35
40
  const COOKIE_RETENTION_TIME = 365 * 24 * 60 * 60 * 1000; // 1 year
36
41
  let reqTimes = 0;
37
- /**
38
- * get page title
39
- * @returns {string}
40
- */
41
-
42
- export function getPageTitle(win = window) {
43
- try {
44
- const ogTitle = win.top.document.querySelector('meta[property="og:title"]')
45
- return win.top.document.title || (ogTitle && ogTitle.content) || '';
46
- } catch (e) {
47
- const ogTitle = document.querySelector('meta[property="og:title"]')
48
- return document.title || (ogTitle && ogTitle.content) || '';
49
- }
50
- }
51
-
52
- /**
53
- * get page description
54
- *
55
- * @returns {string}
56
- */
57
- export function getPageDescription(win = window) {
58
- let element;
59
-
60
- try {
61
- element = win.top.document.querySelector('meta[name="description"]') ||
62
- win.top.document.querySelector('meta[property="og:description"]')
63
- } catch (e) {
64
- element = document.querySelector('meta[name="description"]') ||
65
- document.querySelector('meta[property="og:description"]')
66
- }
67
-
68
- return (element && element.content) || '';
69
- }
70
-
71
- /**
72
- * get page keywords
73
- * @returns {string}
74
- */
75
- export function getPageKeywords(win = window) {
76
- let element;
77
-
78
- try {
79
- element = win.top.document.querySelector('meta[name="keywords"]');
80
- } catch (e) {
81
- element = document.querySelector('meta[name="keywords"]');
82
- }
83
-
84
- return (element && element.content) || '';
85
- }
86
-
87
- /**
88
- * get connection downlink
89
- * @returns {number}
90
- */
91
- export function getConnectionDownLink(win = window) {
92
- const nav = win.navigator || {};
93
- return nav && nav.connection && nav.connection.downlink >= 0 ? nav.connection.downlink.toString() : undefined;
94
- }
95
42
 
96
43
  /**
97
44
  * get pmg uid
@@ -135,54 +82,6 @@ function getProperty(obj, ...keys) {
135
82
  return o;
136
83
  }
137
84
 
138
- /**
139
- * 是不是移动设备或者平板
140
- * @return {boolean}
141
- */
142
- function isMobileAndTablet() {
143
- let check = false;
144
- (function (a) {
145
- let reg1 = new RegExp(
146
- [
147
- '(android|bbd+|meego)',
148
- '.+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)',
149
- '|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone',
150
- '|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up.(browser|link)|vodafone|wap',
151
- '|windows ce|xda|xiino|android|ipad|playbook|silk'
152
- ].join(''),
153
- 'i'
154
- );
155
- let reg2 = new RegExp(
156
- [
157
- '1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)',
158
- '|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )',
159
- '|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell',
160
- '|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)',
161
- '|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene',
162
- '|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c',
163
- '|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom',
164
- '|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)',
165
- '|le(no|xi)|lg( g|/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)',
166
- '|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]',
167
- '|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)',
168
- '|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio',
169
- '|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms',
170
- '|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al',
171
- '|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)',
172
- '|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(.b|g1|si)|utst|',
173
- 'v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)',
174
- '|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-',
175
- '|your|zeto|zte-'
176
- ].join(''),
177
- 'i'
178
- );
179
- if (reg1.test(a) || reg2.test(a.substr(0, 4))) {
180
- check = true;
181
- }
182
- })(navigator.userAgent || navigator.vendor || window.opera);
183
- return check;
184
- }
185
-
186
85
  /**
187
86
  * 获取底价
188
87
  * @param {*} bid
@@ -205,62 +104,9 @@ function isMobileAndTablet() {
205
104
  // }
206
105
  // return floor;
207
106
  // }
208
- function getBidFloor(bid) {
209
- if (!utils.isFn(bid.getFloor)) {
210
- return utils.deepAccess(bid, 'params.bidfloor', 0);
211
- }
212
-
213
- try {
214
- const bidFloor = bid.getFloor({
215
- currency: 'USD',
216
- mediaType: '*',
217
- size: '*'
218
- });
219
- return bidFloor.floor;
220
- } catch (_) {
221
- return 0;
222
- }
223
- }
224
-
225
- /**
226
- * 将尺寸转为RTB识别的尺寸
227
- *
228
- * @param {Array|Object} requestSizes 配置尺寸
229
- * @return {Object}
230
- */
231
- function transformSizes(requestSizes) {
232
- let sizes = [];
233
- let sizeObj = {};
234
-
235
- if (utils.isArray(requestSizes) && requestSizes.length === 2 && !utils.isArray(requestSizes[0])) {
236
- sizeObj.width = parseInt(requestSizes[0], 10);
237
- sizeObj.height = parseInt(requestSizes[1], 10);
238
- sizes.push(sizeObj);
239
- } else if (typeof requestSizes === 'object') {
240
- for (let i = 0; i < requestSizes.length; i++) {
241
- let size = requestSizes[i];
242
- sizeObj = {};
243
- sizeObj.width = parseInt(size[0], 10);
244
- sizeObj.height = parseInt(size[1], 10);
245
- sizes.push(sizeObj);
246
- }
247
- }
248
-
249
- return sizes;
250
- }
251
107
 
252
108
  // 支持的广告尺寸
253
- const mediagoAdSize = [
254
- { w: 300, h: 250 },
255
- { w: 300, h: 600 },
256
- { w: 728, h: 90 },
257
- { w: 970, h: 250 },
258
- { w: 320, h: 50 },
259
- { w: 160, h: 600 },
260
- { w: 320, h: 180 },
261
- { w: 320, h: 100 },
262
- { w: 336, h: 280 }
263
- ];
109
+ const mediagoAdSize = normalAdSize;
264
110
 
265
111
  /**
266
112
  * 获取广告位配置
@@ -340,21 +186,6 @@ function getItems(validBidRequests, bidderRequest) {
340
186
  return items;
341
187
  }
342
188
 
343
- /**
344
- * @param {BidRequest} bidRequest
345
- * @param bidderRequest
346
- * @returns {string}
347
- */
348
- function getReferrer(bidRequest = {}, bidderRequest = {}) {
349
- let pageUrl;
350
- if (bidRequest.params && bidRequest.params.referrer) {
351
- pageUrl = bidRequest.params.referrer;
352
- } else {
353
- pageUrl = utils.deepAccess(bidderRequest, 'refererInfo.page');
354
- }
355
- return pageUrl;
356
- }
357
-
358
189
  /**
359
190
  * get current time to UTC string
360
191
  * @returns utc string
@@ -386,7 +217,7 @@ function getParam(validBidRequests, bidderRequest) {
386
217
  const cat = utils.deepAccess(bidderRequest, 'ortb2.site.cat');
387
218
  reqTimes += 1;
388
219
 
389
- let isMobile = isMobileAndTablet() ? 1 : 0;
220
+ let isMobile = getDevice() ? 1 : 0;
390
221
  // input test status by Publisher. more frequently for test true req
391
222
  let isTest = validBidRequests[0].params.test || 0;
392
223
  let auctionId = getProperty(bidderRequest, 'auctionId');
@@ -1,6 +1,6 @@
1
1
  import {
2
- buildUrl,
3
2
  deepAccess,
3
+ formatQS,
4
4
  getWindowTop,
5
5
  isArray,
6
6
  isEmpty,
@@ -8,7 +8,9 @@ import {
8
8
  isStr,
9
9
  logError,
10
10
  logInfo,
11
- triggerPixel
11
+ safeJSONEncode,
12
+ deepClone,
13
+ deepSetValue
12
14
  } from '../src/utils.js';
13
15
  import {registerBidder} from '../src/adapters/bidderFactory.js';
14
16
  import {config} from '../src/config.js';
@@ -18,6 +20,7 @@ import {Renderer} from '../src/Renderer.js';
18
20
  import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
19
21
  import {getGlobal} from '../src/prebidGlobal.js';
20
22
  import {getGptSlotInfoForAdUnitCode} from '../libraries/gptUtils/gptUtils.js';
23
+ import {ajax} from '../src/ajax.js';
21
24
 
22
25
  /**
23
26
  * @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
@@ -35,27 +38,20 @@ const SLOT_VISIBILITY = {
35
38
  ABOVE_THE_FOLD: 1,
36
39
  BELOW_THE_FOLD: 2
37
40
  };
38
- const EVENTS = {
41
+ export const EVENTS = {
39
42
  TIMEOUT_EVENT_NAME: 'client_timeout',
40
- BID_WON_EVENT_NAME: 'client_bid_won'
43
+ BID_WON_EVENT_NAME: 'client_bid_won',
44
+ SET_TARGETING: 'client_set_targeting',
45
+ BIDDER_ERROR: 'client_bidder_error'
41
46
  };
42
- const EVENT_PIXEL_URL = 'qsearch-a.akamaihd.net/log';
47
+ export const EVENT_PIXEL_URL = 'https://navvy.media.net/log';
43
48
  const OUTSTREAM = 'outstream';
44
49
 
45
- // TODO: this should be picked from bidderRequest
46
- let refererInfo = getRefererInfo();
47
-
48
- let mnData = {};
50
+ let pageMeta;
49
51
 
50
52
  window.mnet = window.mnet || {};
51
53
  window.mnet.queue = window.mnet.queue || [];
52
54
 
53
- mnData.urlData = {
54
- domain: refererInfo.domain,
55
- page: refererInfo.page,
56
- isTop: refererInfo.reachedTop
57
- };
58
-
59
55
  const aliases = [
60
56
  { code: TRUSTEDSTACK_CODE, gvlid: 1288 },
61
57
  ];
@@ -85,20 +81,20 @@ function siteDetails(site, bidderRequest) {
85
81
  }
86
82
 
87
83
  function getPageMeta() {
88
- if (mnData.pageMeta) {
89
- return mnData.pageMeta;
84
+ if (pageMeta) {
85
+ return pageMeta;
90
86
  }
91
87
  let canonicalUrl = getUrlFromSelector('link[rel="canonical"]', 'href');
92
88
  let ogUrl = getUrlFromSelector('meta[property="og:url"]', 'content');
93
89
  let twitterUrl = getUrlFromSelector('meta[name="twitter:url"]', 'content');
94
90
 
95
- mnData.pageMeta = Object.assign({},
91
+ pageMeta = Object.assign({},
96
92
  canonicalUrl && { 'canonical_url': canonicalUrl },
97
93
  ogUrl && { 'og_url': ogUrl },
98
94
  twitterUrl && { 'twitter_url': twitterUrl }
99
95
  );
100
96
 
101
- return mnData.pageMeta;
97
+ return pageMeta;
102
98
  }
103
99
 
104
100
  function getUrlFromSelector(selector, attribute) {
@@ -338,6 +334,15 @@ function getBidderURL(bidderCode, cid) {
338
334
  return url + '?cid=' + encodeURIComponent(cid);
339
335
  }
340
336
 
337
+ function ortb2Data(ortb2, bidRequests) {
338
+ const ortb2Object = deepClone(ortb2);
339
+ const eids = deepAccess(bidRequests, '0.userIdAsEids');
340
+ if (eids) {
341
+ deepSetValue(ortb2Object, 'user.ext.eids', eids)
342
+ }
343
+ return ortb2Object;
344
+ }
345
+
341
346
  function generatePayload(bidRequests, bidderRequests) {
342
347
  return {
343
348
  site: siteDetails(bidRequests[0].params.site, bidderRequests),
@@ -345,7 +350,7 @@ function generatePayload(bidRequests, bidderRequests) {
345
350
  // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781
346
351
  id: bidRequests[0].auctionId,
347
352
  imp: bidRequests.map(request => slotParams(request, bidderRequests)),
348
- ortb2: bidderRequests.ortb2,
353
+ ortb2: ortb2Data(bidderRequests.ortb2, bidRequests),
349
354
  tmax: bidderRequests.timeout
350
355
  }
351
356
  }
@@ -363,38 +368,71 @@ function fetchCookieSyncUrls(response) {
363
368
  return [];
364
369
  }
365
370
 
366
- function getLoggingData(event, data) {
367
- data = (isArray(data) && data) || [];
368
-
369
- let params = {};
371
+ function getEventData(event) {
372
+ const params = {};
373
+ const referrerInfo = getRefererInfo();
370
374
  params.logid = 'kfk';
371
375
  params.evtid = 'projectevents';
372
376
  params.project = 'prebid';
373
- params.acid = deepAccess(data, '0.auctionId') || '';
377
+ params.pbver = '$prebid.version$';
374
378
  params.cid = getGlobal().medianetGlobals.cid || '';
375
- params.crid = data.map((adunit) => deepAccess(adunit, 'params.0.crid') || adunit.adUnitCode).join('|');
376
- params.adunit_count = data.length || 0;
377
- params.dn = mnData.urlData.domain || '';
378
- params.requrl = mnData.urlData.page || '';
379
- params.istop = mnData.urlData.isTop || '';
379
+ params.dn = encodeURIComponent(referrerInfo.domain || '');
380
+ params.requrl = encodeURIComponent(referrerInfo.page || '');
380
381
  params.event = event.name || '';
381
382
  params.value = event.value || '';
382
383
  params.rd = event.related_data || '';
384
+ return params;
385
+ }
383
386
 
387
+ function getBidData(bid) {
388
+ const params = {};
389
+ params.acid = bid.auctionId || '';
390
+ params.crid = deepAccess(bid, 'params.crid') || deepAccess(bid, 'params.0.crid') || bid.adUnitCode || '';
391
+ params.ext = safeJSONEncode(bid.ext) || '';
392
+
393
+ const rawobj = deepClone(bid);
394
+ delete rawobj.ad;
395
+ delete rawobj.vastXml;
396
+ params.rawobj = safeJSONEncode(rawobj);
384
397
  return params;
385
398
  }
386
399
 
387
- function logEvent (event, data) {
388
- let getParams = {
389
- protocol: 'https',
390
- hostname: EVENT_PIXEL_URL,
391
- search: getLoggingData(event, data)
392
- };
393
- triggerPixel(buildUrl(getParams));
400
+ function getLoggingData(event, bids) {
401
+ const logData = {};
402
+ if (!isArray(bids)) {
403
+ bids = [];
404
+ }
405
+ bids.forEach((bid) => {
406
+ let bidData = getBidData(bid);
407
+ Object.keys(bidData).forEach((key) => {
408
+ logData[key] = logData[key] || [];
409
+ logData[key].push(encodeURIComponent(bidData[key]));
410
+ });
411
+ });
412
+ return Object.assign({}, getEventData(event), logData)
413
+ }
414
+
415
+ function fireAjaxLog(url, payload) {
416
+ ajax(url,
417
+ {
418
+ success: () => undefined,
419
+ error: () => undefined
420
+ },
421
+ payload,
422
+ {
423
+ method: 'POST',
424
+ keepalive: true
425
+ }
426
+ );
394
427
  }
395
428
 
396
- function clearMnData() {
397
- mnData = {};
429
+ function logEvent(event, data) {
430
+ const logData = getLoggingData(event, data);
431
+ fireAjaxLog(EVENT_PIXEL_URL, formatQS(logData));
432
+ }
433
+
434
+ function clearPageMeta() {
435
+ pageMeta = undefined;
398
436
  }
399
437
 
400
438
  function addRenderer(bid) {
@@ -550,7 +588,30 @@ export const spec = {
550
588
  } catch (e) {}
551
589
  },
552
590
 
553
- clearMnData,
591
+ onSetTargeting: (bid) => {
592
+ try {
593
+ let eventData = {
594
+ name: EVENTS.SET_TARGETING,
595
+ value: bid.cpm
596
+ };
597
+ const enableSendAllBids = config.getConfig('enableSendAllBids');
598
+ if (!enableSendAllBids) {
599
+ logEvent(eventData, [bid]);
600
+ }
601
+ } catch (e) {}
602
+ },
603
+
604
+ onBidderError: ({error, bidderRequest}) => {
605
+ try {
606
+ let eventData = {
607
+ name: EVENTS.BIDDER_ERROR,
608
+ related_data: `timedOut:${error.timedOut}|status:${error.status}|message:${error.reason.message}`
609
+ };
610
+ logEvent(eventData, bidderRequest.bids);
611
+ } catch (e) {}
612
+ },
613
+
614
+ clearPageMeta,
554
615
 
555
616
  getWindowSize,
556
617
  };
@@ -86,7 +86,7 @@ _each(NATIVE_ASSETS, anAsset => { _NATIVE_ASSET_ID_TO_KEY_MAP[anAsset.ID] = anAs
86
86
  _each(NATIVE_ASSETS, anAsset => { _NATIVE_ASSET_KEY_TO_ASSET_MAP[anAsset.KEY] = anAsset });
87
87
 
88
88
  export const spec = {
89
- VERSION: '1.6',
89
+ VERSION: '1.7',
90
90
  code: BIDDER_CODE,
91
91
  gvlid: GVLID,
92
92
  supportedMediaTypes: [BANNER, NATIVE],
@@ -167,6 +167,8 @@ export const spec = {
167
167
  tagid,
168
168
  secure,
169
169
  };
170
+ const gpid = deepAccess(bid, 'ortb2Imp.ext.gpid');
171
+ gpid && isStr(gpid) && deepSetValue(impObj, `ext.gpid`, gpid);
170
172
  const floorData = getBidFloor(bid, cur);
171
173
  if (floorData.floor) {
172
174
  impObj.bidfloor = floorData.floor;