prebid.js 7.53.0 → 8.0.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 (706) hide show
  1. package/.github/workflows/codeql-analysis.yml +2 -2
  2. package/dist/1plusXRtdProvider.js +1 -1
  3. package/dist/33acrossBidAdapter.js +1 -1
  4. package/dist/33acrossIdSystem.js +1 -1
  5. package/dist/adWMGAnalyticsAdapter.js +1 -1
  6. package/dist/adWMGBidAdapter.js +1 -1
  7. package/dist/adagioAnalyticsAdapter.js +1 -1
  8. package/dist/adagioBidAdapter.js +1 -1
  9. package/dist/adbookpspBidAdapter.js +1 -1
  10. package/dist/adfBidAdapter.js +1 -1
  11. package/dist/adgenerationBidAdapter.js +1 -1
  12. package/dist/adhashBidAdapter.js +1 -1
  13. package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
  14. package/dist/adkernelAdnBidAdapter.js +1 -1
  15. package/dist/adkernelBidAdapter.js +1 -1
  16. package/dist/adlooxAdServerVideo.js +1 -1
  17. package/dist/adlooxAnalyticsAdapter.js +1 -1
  18. package/dist/adlooxRtdProvider.js +1 -1
  19. package/dist/adomikAnalyticsAdapter.js +1 -1
  20. package/dist/adprimeBidAdapter.js +1 -1
  21. package/dist/adqueryBidAdapter.js +1 -1
  22. package/dist/adrelevantisBidAdapter.js +1 -1
  23. package/dist/adtrgtmeBidAdapter.js +1 -1
  24. package/dist/adtrueBidAdapter.js +1 -1
  25. package/dist/aduptechBidAdapter.js +1 -1
  26. package/dist/advangelistsBidAdapter.js +1 -1
  27. package/dist/adxcgAnalyticsAdapter.js +1 -1
  28. package/dist/adxcgBidAdapter.js +1 -1
  29. package/dist/adxpremiumAnalyticsAdapter.js +1 -1
  30. package/dist/adyoulikeBidAdapter.js +1 -1
  31. package/dist/afpBidAdapter.js +1 -1
  32. package/dist/aidemBidAdapter.js +1 -1
  33. package/dist/airgridRtdProvider.js +1 -1
  34. package/dist/ajaBidAdapter.js +1 -1
  35. package/dist/amxBidAdapter.js +1 -1
  36. package/dist/amxIdSystem.js +1 -1
  37. package/dist/analyticsAdapter.js +1 -1
  38. package/dist/apacdexBidAdapter.js +1 -1
  39. package/dist/appierAnalyticsAdapter.js +1 -1
  40. package/dist/appnexusBidAdapter.js +1 -1
  41. package/dist/appnexusKeywords.js +1 -0
  42. package/dist/asoBidAdapter.js +1 -1
  43. package/dist/astraoneBidAdapter.js +1 -1
  44. package/dist/atsAnalyticsAdapter.js +1 -1
  45. package/dist/audiencerunBidAdapter.js +1 -1
  46. package/dist/automatadBidAdapter.js +1 -1
  47. package/dist/axonixBidAdapter.js +1 -1
  48. package/dist/beachfrontBidAdapter.js +1 -1
  49. package/dist/beopBidAdapter.js +1 -1
  50. package/dist/betweenBidAdapter.js +1 -1
  51. package/dist/bidViewability.js +1 -1
  52. package/dist/bidglassBidAdapter.js +1 -1
  53. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  54. package/dist/big-richmediaBidAdapter.js +1 -1
  55. package/dist/bizzclickBidAdapter.js +1 -1
  56. package/dist/bluebillywigBidAdapter.js +1 -1
  57. package/dist/braveBidAdapter.js +1 -1
  58. package/dist/bridgewellBidAdapter.js +1 -1
  59. package/dist/brightMountainMediaBidAdapter.js +1 -1
  60. package/dist/browsiBidAdapter.js +1 -1
  61. package/dist/byDataAnalyticsAdapter.js +1 -1
  62. package/dist/cadentApertureMXBidAdapter.js +1 -0
  63. package/dist/carodaBidAdapter.js +1 -1
  64. package/dist/categoryTranslationMapping.js +1 -0
  65. package/dist/ccxBidAdapter.js +1 -1
  66. package/dist/chtnwBidAdapter.js +1 -1
  67. package/dist/cleanmedianetBidAdapter.js +1 -1
  68. package/dist/codefuelBidAdapter.js +1 -1
  69. package/dist/colossussspBidAdapter.js +1 -1
  70. package/dist/concertAnalyticsAdapter.js +1 -1
  71. package/dist/concertBidAdapter.js +1 -1
  72. package/dist/connectIdSystem.js +1 -1
  73. package/dist/connectadBidAdapter.js +1 -1
  74. package/dist/consentManagement.js +1 -1
  75. package/dist/consentManagementGpp.js +1 -1
  76. package/dist/consentManagementUsp.js +1 -1
  77. package/dist/consumableBidAdapter.js +1 -1
  78. package/dist/conversantAnalyticsAdapter.js +1 -1
  79. package/dist/conversantBidAdapter.js +1 -1
  80. package/dist/craftBidAdapter.js +1 -1
  81. package/dist/criteoBidAdapter.js +1 -1
  82. package/dist/criteoIdSystem.js +1 -1
  83. package/dist/currency.js +1 -1
  84. package/dist/cwireBidAdapter.js +1 -1
  85. package/dist/dailyhuntBidAdapter.js +1 -1
  86. package/dist/datablocksAnalyticsAdapter.js +1 -1
  87. package/dist/datablocksBidAdapter.js +1 -1
  88. package/dist/datawrkzBidAdapter.js +1 -1
  89. package/dist/debugging-standalone.js +1 -1
  90. package/dist/debugging.js +1 -1
  91. package/dist/deltaprojectsBidAdapter.js +1 -1
  92. package/dist/dependencies.json +58 -14
  93. package/dist/dfpAdServerVideo.js +1 -1
  94. package/dist/dianomiBidAdapter.js +1 -1
  95. package/dist/displayioBidAdapter.js +1 -1
  96. package/dist/dspxBidAdapter.js +1 -1
  97. package/dist/ebdrBidAdapter.js +1 -1
  98. package/dist/eplanningAnalyticsAdapter.js +1 -1
  99. package/dist/eplanningBidAdapter.js +1 -1
  100. package/dist/etargetBidAdapter.js +1 -1
  101. package/dist/euidIdSystem.js +1 -1
  102. package/dist/feedadBidAdapter.js +1 -1
  103. package/dist/finativeBidAdapter.js +1 -1
  104. package/dist/fintezaAnalyticsAdapter.js +1 -1
  105. package/dist/fluctBidAdapter.js +1 -1
  106. package/dist/freewheel-sspBidAdapter.js +1 -1
  107. package/dist/ftrackIdSystem.js +1 -1
  108. package/dist/gamoshiBidAdapter.js +1 -1
  109. package/dist/gdprEnforcement.js +1 -1
  110. package/dist/genericAnalyticsAdapter.js +1 -1
  111. package/dist/gmosspBidAdapter.js +1 -1
  112. package/dist/gnetBidAdapter.js +1 -1
  113. package/dist/goldbachBidAdapter.js +1 -1
  114. package/dist/gothamadsBidAdapter.js +1 -1
  115. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  116. package/dist/greenbidsRtdProvider.js +1 -1
  117. package/dist/gridBidAdapter.js +1 -1
  118. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  119. package/dist/gumgumBidAdapter.js +1 -1
  120. package/dist/h12mediaBidAdapter.js +1 -1
  121. package/dist/hadronAnalyticsAdapter.js +1 -1
  122. package/dist/holidBidAdapter.js +1 -1
  123. package/dist/hybridBidAdapter.js +1 -1
  124. package/dist/hypelabBidAdapter.js +1 -0
  125. package/dist/id5AnalyticsAdapter.js +1 -1
  126. package/dist/id5IdSystem.js +1 -1
  127. package/dist/imdsBidAdapter.js +1 -0
  128. package/dist/impactifyBidAdapter.js +1 -1
  129. package/dist/improvedigitalBidAdapter.js +1 -1
  130. package/dist/insticatorBidAdapter.js +1 -1
  131. package/dist/interactiveOffersBidAdapter.js +1 -1
  132. package/dist/invisiblyAnalyticsAdapter.js +1 -1
  133. package/dist/ixBidAdapter.js +1 -1
  134. package/dist/justpremiumBidAdapter.js +1 -1
  135. package/dist/kargoAnalyticsAdapter.js +1 -1
  136. package/dist/kargoBidAdapter.js +1 -1
  137. package/dist/keywords.js +1 -0
  138. package/dist/kinessoIdSystem.js +1 -1
  139. package/dist/koblerBidAdapter.js +1 -1
  140. package/dist/konduitAnalyticsAdapter.js +1 -1
  141. package/dist/kueezBidAdapter.js +1 -1
  142. package/dist/kueezRtbBidAdapter.js +1 -1
  143. package/dist/kulturemediaBidAdapter.js +1 -1
  144. package/dist/lassoBidAdapter.js +1 -1
  145. package/dist/lifestreetBidAdapter.js +1 -1
  146. package/dist/limelightDigitalBidAdapter.js +1 -1
  147. package/dist/liveIntentAnalyticsAdapter.js +1 -1
  148. package/dist/liveIntentIdSystem.js +1 -1
  149. package/dist/livewrappedAnalyticsAdapter.js +1 -1
  150. package/dist/livewrappedBidAdapter.js +1 -1
  151. package/dist/logicadBidAdapter.js +1 -1
  152. package/dist/loglyliftBidAdapter.js +1 -1
  153. package/dist/lotamePanoramaIdSystem.js +1 -1
  154. package/dist/luponmediaBidAdapter.js +1 -1
  155. package/dist/magniteAnalyticsAdapter.js +1 -1
  156. package/dist/malltvAnalyticsAdapter.js +1 -1
  157. package/dist/marsmediaAnalyticsAdapter.js +1 -1
  158. package/dist/marsmediaBidAdapter.js +1 -1
  159. package/dist/mediaforceBidAdapter.js +1 -1
  160. package/dist/mediafuseBidAdapter.js +1 -1
  161. package/dist/mediakeysBidAdapter.js +1 -1
  162. package/dist/medianetAnalyticsAdapter.js +1 -1
  163. package/dist/medianetBidAdapter.js +1 -1
  164. package/dist/mediasniperBidAdapter.js +1 -1
  165. package/dist/mediasquareBidAdapter.js +1 -1
  166. package/dist/mgidBidAdapter.js +1 -1
  167. package/dist/microadBidAdapter.js +1 -1
  168. package/dist/minutemediaBidAdapter.js +1 -1
  169. package/dist/minutemediaplusBidAdapter.js +1 -1
  170. package/dist/newspassidBidAdapter.js +1 -1
  171. package/dist/nextMillenniumBidAdapter.js +1 -1
  172. package/dist/nexx360BidAdapter.js +1 -1
  173. package/dist/not-for-prod/prebid.js +293 -323
  174. package/dist/objectGuard.js +1 -1
  175. package/dist/oguryBidAdapter.js +1 -1
  176. package/dist/onetagBidAdapter.js +1 -1
  177. package/dist/ooloAnalyticsAdapter.js +1 -1
  178. package/dist/operaadsBidAdapter.js +1 -1
  179. package/dist/optidigitalBidAdapter.js +1 -1
  180. package/dist/optimonAnalyticsAdapter.js +1 -1
  181. package/dist/orbidderBidAdapter.js +1 -1
  182. package/dist/ortbConverter.js +1 -1
  183. package/dist/otmBidAdapter.js +1 -1
  184. package/dist/outbrainBidAdapter.js +1 -1
  185. package/dist/oxxionAnalyticsAdapter.js +1 -1
  186. package/dist/oxxionRtdProvider.js +1 -1
  187. package/dist/ozoneBidAdapter.js +1 -1
  188. package/dist/padsquadBidAdapter.js +1 -1
  189. package/dist/parrableIdSystem.js +1 -1
  190. package/dist/pbsExtensions.js +1 -1
  191. package/dist/pianoDmpAnalyticsAdapter.js +1 -1
  192. package/dist/pixfutureBidAdapter.js +1 -1
  193. package/dist/prebid-core.js +2 -2
  194. package/dist/prebidServerBidAdapter.js +1 -1
  195. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  196. package/dist/priceFloors.js +1 -1
  197. package/dist/prismaBidAdapter.js +1 -1
  198. package/dist/proxistoreBidAdapter.js +1 -1
  199. package/dist/pubgeniusBidAdapter.js +1 -1
  200. package/dist/publinkIdSystem.js +1 -1
  201. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  202. package/dist/pubmaticBidAdapter.js +1 -1
  203. package/dist/pubperfAnalyticsAdapter.js +1 -1
  204. package/dist/pubstackAnalyticsAdapter.js +1 -1
  205. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  206. package/dist/pubwiseBidAdapter.js +1 -1
  207. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  208. package/dist/pulsepointAnalyticsAdapter.js +1 -1
  209. package/dist/pxyzBidAdapter.js +1 -1
  210. package/dist/quantcastBidAdapter.js +1 -1
  211. package/dist/quantcastIdSystem.js +1 -1
  212. package/dist/rasBidAdapter.js +1 -1
  213. package/dist/readpeakBidAdapter.js +1 -1
  214. package/dist/relaidoBidAdapter.js +1 -1
  215. package/dist/relevantAnalyticsAdapter.js +1 -1
  216. package/dist/retailspotBidAdapter.js +1 -1
  217. package/dist/revcontentBidAdapter.js +1 -1
  218. package/dist/rhythmoneBidAdapter.js +1 -1
  219. package/dist/richaudienceBidAdapter.js +1 -1
  220. package/dist/riseBidAdapter.js +1 -1
  221. package/dist/rivrAnalyticsAdapter.js +1 -1
  222. package/dist/roxotAnalyticsAdapter.js +1 -1
  223. package/dist/rtbhouseBidAdapter.js +1 -1
  224. package/dist/rtdModule.js +1 -1
  225. package/dist/rubiconBidAdapter.js +1 -1
  226. package/dist/s2sTesting.js +1 -1
  227. package/dist/saambaaBidAdapter.js +1 -1
  228. package/dist/scaleableAnalyticsAdapter.js +1 -1
  229. package/dist/schain.js +1 -1
  230. package/dist/seedingAllianceBidAdapter.js +1 -1
  231. package/dist/seedtagBidAdapter.js +1 -1
  232. package/dist/sharedIdSystem.js +1 -1
  233. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  234. package/dist/sharethroughBidAdapter.js +1 -1
  235. package/dist/shinezBidAdapter.js +1 -1
  236. package/dist/showheroes-bsBidAdapter.js +1 -1
  237. package/dist/sigmoidAnalyticsAdapter.js +1 -1
  238. package/dist/sizeMapping.js +1 -0
  239. package/dist/slimcutBidAdapter.js +1 -1
  240. package/dist/smaatoBidAdapter.js +1 -1
  241. package/dist/smartadserverBidAdapter.js +1 -1
  242. package/dist/smartxBidAdapter.js +1 -1
  243. package/dist/smartytechBidAdapter.js +1 -1
  244. package/dist/smilewantedBidAdapter.js +1 -1
  245. package/dist/sonobiAnalyticsAdapter.js +1 -1
  246. package/dist/sonobiBidAdapter.js +1 -1
  247. package/dist/sovrnAnalyticsAdapter.js +1 -1
  248. package/dist/sovrnBidAdapter.js +1 -1
  249. package/dist/sspBCBidAdapter.js +1 -1
  250. package/dist/staqAnalyticsAdapter.js +1 -1
  251. package/dist/stvBidAdapter.js +1 -1
  252. package/dist/sublimeBidAdapter.js +1 -1
  253. package/dist/taboolaBidAdapter.js +1 -1
  254. package/dist/tapadIdSystem.js +1 -1
  255. package/dist/tappxBidAdapter.js +1 -1
  256. package/dist/targetVideoBidAdapter.js +1 -1
  257. package/dist/teadsBidAdapter.js +1 -1
  258. package/dist/teadsIdSystem.js +1 -1
  259. package/dist/telariaBidAdapter.js +1 -1
  260. package/dist/terceptAnalyticsAdapter.js +1 -1
  261. package/dist/theAdxBidAdapter.js +1 -1
  262. package/dist/topicsFpdModule.js +1 -1
  263. package/dist/trionBidAdapter.js +1 -1
  264. package/dist/tripleliftBidAdapter.js +1 -1
  265. package/dist/ttdBidAdapter.js +1 -1
  266. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  267. package/dist/uid2IdSystem.js +1 -1
  268. package/dist/underdogmediaBidAdapter.js +1 -1
  269. package/dist/undertoneBidAdapter.js +1 -1
  270. package/dist/unicornBidAdapter.js +1 -1
  271. package/dist/unrulyBidAdapter.js +1 -1
  272. package/dist/userId.js +1 -1
  273. package/dist/utiqSystem.js +1 -0
  274. package/dist/vibrantmediaBidAdapter.js +1 -1
  275. package/dist/vidazooBidAdapter.js +1 -1
  276. package/dist/videobyteBidAdapter.js +1 -1
  277. package/dist/videojsVideoProvider.js +1 -1
  278. package/dist/videoreachBidAdapter.js +1 -1
  279. package/dist/visxBidAdapter.js +1 -1
  280. package/dist/vrtcalBidAdapter.js +1 -1
  281. package/dist/vuukleBidAdapter.js +1 -1
  282. package/dist/weboramaRtdProvider.js +1 -1
  283. package/dist/widespaceBidAdapter.js +1 -1
  284. package/dist/winrBidAdapter.js +1 -1
  285. package/dist/xeBidAdapter.js +1 -1
  286. package/dist/yahoosspBidAdapter.js +1 -1
  287. package/dist/yieldliftBidAdapter.js +1 -1
  288. package/dist/yieldmoBidAdapter.js +1 -1
  289. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  290. package/dist/yieldoneBidAdapter.js +1 -1
  291. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  292. package/dist/zetaBidAdapter.js +1 -1
  293. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  294. package/dist/zeta_global_sspBidAdapter.js +1 -1
  295. package/libraries/analyticsAdapter/AnalyticsAdapter.js +1 -7
  296. package/libraries/appnexusKeywords/anKeywords.js +140 -0
  297. package/libraries/categoryTranslationMapping/index.js +100 -0
  298. package/libraries/keywords/keywords.js +31 -0
  299. package/libraries/objectGuard/objectGuard.js +2 -11
  300. package/libraries/ortbConverter/processors/default.js +3 -4
  301. package/modules/.submodules.json +1 -1
  302. package/modules/1plusXRtdProvider.js +4 -14
  303. package/modules/33acrossBidAdapter.js +11 -11
  304. package/modules/adWMGBidAdapter.js +2 -1
  305. package/modules/adagioBidAdapter.js +18 -30
  306. package/modules/adbookpspBidAdapter.js +1 -1
  307. package/modules/addefendBidAdapter.js +1 -0
  308. package/modules/adfBidAdapter.js +3 -3
  309. package/modules/adgenerationBidAdapter.js +1 -1
  310. package/modules/adhashBidAdapter.js +56 -34
  311. package/modules/adkernelAdnBidAdapter.js +5 -6
  312. package/modules/adkernelBidAdapter.js +5 -5
  313. package/modules/adprimeBidAdapter.js +2 -1
  314. package/modules/adqueryBidAdapter.js +1 -0
  315. package/modules/adrelevantisBidAdapter.js +3 -24
  316. package/modules/adtrueBidAdapter.js +2 -2
  317. package/modules/aduptechBidAdapter.js +2 -1
  318. package/modules/advangelistsBidAdapter.js +0 -1
  319. package/modules/adxcgBidAdapter.js +1 -1
  320. package/modules/adyoulikeBidAdapter.js +1 -1
  321. package/modules/afpBidAdapter.js +2 -2
  322. package/modules/aidemBidAdapter.js +16 -3
  323. package/modules/airgridRtdProvider.js +24 -53
  324. package/modules/ajaBidAdapter.js +1 -1
  325. package/modules/alkimiBidAdapter.js +2 -1
  326. package/modules/amxBidAdapter.js +1 -0
  327. package/modules/apacdexBidAdapter.js +3 -3
  328. package/modules/appnexusBidAdapter.js +16 -114
  329. package/modules/apstreamBidAdapter.js +1 -0
  330. package/modules/asoBidAdapter.js +1 -1
  331. package/modules/astraoneBidAdapter.js +1 -1
  332. package/modules/audiencerunBidAdapter.js +2 -1
  333. package/modules/automatadBidAdapter.js +5 -5
  334. package/modules/beachfrontBidAdapter.js +0 -1
  335. package/modules/beopBidAdapter.js +20 -17
  336. package/modules/betweenBidAdapter.js +2 -1
  337. package/modules/bizzclickBidAdapter.js +9 -6
  338. package/modules/bliinkBidAdapter.js +1 -0
  339. package/modules/bluebillywigBidAdapter.js +2 -2
  340. package/modules/braveBidAdapter.js +9 -7
  341. package/modules/browsiBidAdapter.js +3 -3
  342. package/modules/{emx_digitalBidAdapter.js → cadentApertureMXBidAdapter.js} +61 -56
  343. package/modules/{emx_digitalBidAdapter.md → cadentApertureMXBidAdapter.md} +6 -6
  344. package/modules/carodaBidAdapter.js +1 -0
  345. package/modules/ccxBidAdapter.js +1 -1
  346. package/modules/cleanmedianetBidAdapter.js +3 -3
  347. package/modules/codefuelBidAdapter.js +1 -1
  348. package/modules/colossussspBidAdapter.js +1 -1
  349. package/modules/concertBidAdapter.js +1 -1
  350. package/modules/connectadBidAdapter.js +1 -0
  351. package/modules/conversantAnalyticsAdapter.js +2 -0
  352. package/modules/conversantBidAdapter.js +22 -6
  353. package/modules/craftBidAdapter.js +6 -28
  354. package/modules/criteoBidAdapter.js +12 -9
  355. package/modules/currency.js +3 -3
  356. package/modules/dailyhuntBidAdapter.js +2 -2
  357. package/modules/datablocksBidAdapter.js +10 -8
  358. package/modules/datawrkzBidAdapter.js +0 -6
  359. package/modules/deltaprojectsBidAdapter.js +12 -3
  360. package/modules/dianomiBidAdapter.js +1 -1
  361. package/modules/discoveryBidAdapter.js +1 -0
  362. package/modules/displayioBidAdapter.js +2 -1
  363. package/modules/dspxBidAdapter.js +1 -0
  364. package/modules/ebdrBidAdapter.js +3 -2
  365. package/modules/etargetBidAdapter.js +1 -2
  366. package/modules/feedadBidAdapter.js +1 -1
  367. package/modules/finativeBidAdapter.js +8 -8
  368. package/modules/fluctBidAdapter.js +1 -2
  369. package/modules/gamoshiBidAdapter.js +3 -3
  370. package/modules/gdprEnforcement.js +0 -15
  371. package/modules/genericAnalyticsAdapter.js +0 -5
  372. package/modules/glomexBidAdapter.js +1 -0
  373. package/modules/gmosspBidAdapter.js +1 -1
  374. package/modules/gnetBidAdapter.js +1 -1
  375. package/modules/goldbachBidAdapter.js +7 -45
  376. package/modules/gothamadsBidAdapter.js +4 -3
  377. package/modules/gridBidAdapter.js +20 -421
  378. package/modules/gumgumBidAdapter.js +1 -2
  379. package/modules/h12mediaBidAdapter.js +1 -1
  380. package/modules/holidBidAdapter.js +8 -13
  381. package/modules/hybridBidAdapter.js +2 -2
  382. package/modules/hypelabBidAdapter.js +153 -0
  383. package/modules/hypelabBidAdapter.md +38 -0
  384. package/modules/{synacormediaBidAdapter.js → imdsBidAdapter.js} +11 -8
  385. package/modules/{synacormediaBidAdapter.md → imdsBidAdapter.md} +5 -5
  386. package/modules/impactifyBidAdapter.js +6 -6
  387. package/modules/improvedigitalBidAdapter.js +1 -2
  388. package/modules/innityBidAdapter.js +1 -0
  389. package/modules/insticatorBidAdapter.js +1 -1
  390. package/modules/interactiveOffersBidAdapter.js +5 -4
  391. package/modules/iqmBidAdapter.js +1 -0
  392. package/modules/ixBidAdapter.js +74 -75
  393. package/modules/jixieBidAdapter.js +1 -0
  394. package/modules/kargoBidAdapter.js +1 -1
  395. package/modules/koblerBidAdapter.js +2 -1
  396. package/modules/kueezBidAdapter.js +1 -1
  397. package/modules/kueezRtbBidAdapter.js +1 -0
  398. package/modules/kulturemediaBidAdapter.js +7 -7
  399. package/modules/lassoBidAdapter.js +2 -1
  400. package/modules/limelightDigitalBidAdapter.js +1 -1
  401. package/modules/livewrappedBidAdapter.js +2 -2
  402. package/modules/logicadBidAdapter.js +2 -1
  403. package/modules/loglyliftBidAdapter.js +2 -1
  404. package/modules/luponmediaBidAdapter.js +16 -4
  405. package/modules/magniteAnalyticsAdapter.js +61 -72
  406. package/modules/malltvBidAdapter.js +1 -0
  407. package/modules/mediaforceBidAdapter.js +2 -1
  408. package/modules/mediafuseBidAdapter.js +45 -62
  409. package/modules/mediagoBidAdapter.js +1 -0
  410. package/modules/mediakeysBidAdapter.js +3 -5
  411. package/modules/medianetBidAdapter.js +2 -1
  412. package/modules/mediasniperBidAdapter.js +1 -2
  413. package/modules/mediasquareBidAdapter.js +2 -1
  414. package/modules/microadBidAdapter.js +1 -9
  415. package/modules/minutemediaBidAdapter.js +2 -2
  416. package/modules/minutemediaplusBidAdapter.js +3 -2
  417. package/modules/newspassidBidAdapter.js +6 -4
  418. package/modules/nextMillenniumBidAdapter.js +10 -9
  419. package/modules/oguryBidAdapter.js +5 -5
  420. package/modules/onetagBidAdapter.js +2 -1
  421. package/modules/operaadsBidAdapter.js +2 -2
  422. package/modules/optidigitalBidAdapter.js +2 -2
  423. package/modules/orbidderBidAdapter.js +2 -1
  424. package/modules/otmBidAdapter.js +2 -2
  425. package/modules/outbrainBidAdapter.js +9 -11
  426. package/modules/oxxionRtdProvider.js +7 -29
  427. package/modules/ozoneBidAdapter.js +2 -1
  428. package/modules/padsquadBidAdapter.js +2 -2
  429. package/modules/pixfutureBidAdapter.js +12 -36
  430. package/modules/prebidServerBidAdapter/index.js +1 -3
  431. package/modules/prebidServerBidAdapter/ortbConverter.js +34 -5
  432. package/modules/priceFloors.js +7 -7
  433. package/modules/prismaBidAdapter.js +4 -3
  434. package/modules/proxistoreBidAdapter.js +2 -1
  435. package/modules/pubgeniusBidAdapter.js +5 -5
  436. package/modules/pubmaticAnalyticsAdapter.js +31 -12
  437. package/modules/pubmaticBidAdapter.js +6 -4
  438. package/modules/pubwiseBidAdapter.js +6 -5
  439. package/modules/pxyzBidAdapter.js +4 -4
  440. package/modules/rasBidAdapter.js +4 -2
  441. package/modules/readpeakBidAdapter.js +1 -1
  442. package/modules/relaidoBidAdapter.js +2 -1
  443. package/modules/resetdigitalBidAdapter.js +1 -0
  444. package/modules/revcontentBidAdapter.js +6 -7
  445. package/modules/rhythmoneBidAdapter.js +0 -2
  446. package/modules/richaudienceBidAdapter.js +6 -4
  447. package/modules/riseBidAdapter.js +1 -1
  448. package/modules/rtbhouseBidAdapter.js +5 -5
  449. package/modules/rtbsapeBidAdapter.js +1 -0
  450. package/modules/rubiconBidAdapter.js +8 -11
  451. package/modules/saambaaBidAdapter.js +0 -1
  452. package/modules/seedingAllianceBidAdapter.js +6 -7
  453. package/modules/seedtagBidAdapter.js +1 -1
  454. package/modules/sharethroughBidAdapter.js +1 -1
  455. package/modules/shinezBidAdapter.js +435 -435
  456. package/modules/showheroes-bsBidAdapter.js +1 -1
  457. package/{src → modules}/sizeMapping.js +46 -32
  458. package/modules/slimcutBidAdapter.js +2 -2
  459. package/modules/smaatoBidAdapter.js +16 -3
  460. package/modules/smartadserverBidAdapter.js +1 -1
  461. package/modules/smarticoBidAdapter.js +1 -0
  462. package/modules/smartytechBidAdapter.js +0 -1
  463. package/modules/smilewantedBidAdapter.js +2 -2
  464. package/modules/sonobiBidAdapter.js +2 -1
  465. package/modules/sspBCBidAdapter.js +1 -1
  466. package/modules/stroeerCoreBidAdapter.js +1 -0
  467. package/modules/sublimeBidAdapter.js +1 -0
  468. package/modules/taboolaBidAdapter.js +3 -3
  469. package/modules/talkadsBidAdapter.js +1 -0
  470. package/modules/tappxBidAdapter.js +1 -1
  471. package/modules/teadsBidAdapter.js +1 -2
  472. package/modules/telariaBidAdapter.js +1 -1
  473. package/modules/theAdxBidAdapter.js +1 -1
  474. package/modules/topicsFpdModule.js +4 -1
  475. package/modules/tpmnBidAdapter.js +1 -0
  476. package/modules/truereachBidAdapter.js +1 -0
  477. package/modules/ttdBidAdapter.js +3 -3
  478. package/modules/underdogmediaBidAdapter.js +0 -1
  479. package/modules/unicornBidAdapter.js +1 -1
  480. package/modules/unrulyBidAdapter.js +1 -1
  481. package/modules/userId/eids.js +3 -3
  482. package/modules/userId/eids.md +1 -1
  483. package/modules/userId/index.js +2 -19
  484. package/modules/userId/userId.md +12 -10
  485. package/modules/utiqSystem.js +129 -0
  486. package/modules/{trustpidSystem.md → utiqSystem.md} +7 -7
  487. package/modules/vdoaiBidAdapter.js +1 -0
  488. package/modules/vibrantmediaBidAdapter.js +1 -1
  489. package/modules/vidazooBidAdapter.js +3 -2
  490. package/modules/videobyteBidAdapter.js +0 -1
  491. package/modules/videoheroesBidAdapter.js +2 -0
  492. package/modules/videojsVideoProvider.js +2 -0
  493. package/modules/videoreachBidAdapter.js +2 -1
  494. package/modules/vlybyBidAdapter.js +1 -0
  495. package/modules/voxBidAdapter.js +2 -0
  496. package/modules/vrtcalBidAdapter.js +6 -1
  497. package/modules/winrBidAdapter.js +4 -25
  498. package/modules/xeBidAdapter.js +2 -1
  499. package/modules/yieldliftBidAdapter.js +2 -2
  500. package/modules/yieldmoBidAdapter.js +1 -0
  501. package/modules/yieldoneBidAdapter.js +1 -1
  502. package/modules/zetaBidAdapter.js +4 -9
  503. package/modules/zeta_global_sspBidAdapter.js +1 -1
  504. package/package.json +1 -1
  505. package/src/activities/activities.js +5 -0
  506. package/src/activities/redactor.js +36 -8
  507. package/src/adapterManager.js +31 -20
  508. package/src/adapters/bidderFactory.js +41 -91
  509. package/src/auction.js +5 -21
  510. package/src/constants.json +1 -2
  511. package/src/utils.js +2 -34
  512. package/test/fixtures/fixtures.js +0 -7
  513. package/test/pages/banner.html +1 -0
  514. package/test/pages/bidderSettings.html +1 -0
  515. package/test/pages/consent_mgt_gdpr.html +1 -0
  516. package/test/pages/currency.html +1 -0
  517. package/test/pages/instream.html +1 -0
  518. package/test/pages/multiple_bidders.html +1 -1
  519. package/test/pages/native.html +1 -0
  520. package/test/pages/outstream.html +4 -1
  521. package/test/spec/activities/redactor_spec.js +10 -2
  522. package/test/spec/appnexusKeywords_spec.js +70 -0
  523. package/test/spec/auctionmanager_spec.js +11 -22
  524. package/test/spec/keywords_spec.js +102 -0
  525. package/test/spec/modules/1plusXRtdProvider_spec.js +17 -18
  526. package/test/spec/modules/33acrossBidAdapter_spec.js +49 -73
  527. package/test/spec/modules/adagioBidAdapter_spec.js +15 -24
  528. package/test/spec/modules/adbookpspBidAdapter_spec.js +5 -0
  529. package/test/spec/modules/adfBidAdapter_spec.js +4 -1
  530. package/test/spec/modules/adhashBidAdapter_spec.js +18 -2
  531. package/test/spec/modules/adkernelAdnBidAdapter_spec.js +1 -3
  532. package/test/spec/modules/adrelevantisBidAdapter_spec.js +0 -9
  533. package/test/spec/modules/adriverBidAdapter_spec.js +0 -9
  534. package/test/spec/modules/adtrueBidAdapter_spec.js +11 -7
  535. package/test/spec/modules/aduptechBidAdapter_spec.js +26 -8
  536. package/test/spec/modules/advangelistsBidAdapter_spec.js +0 -1
  537. package/test/spec/modules/adxcgBidAdapter_spec.js +4 -1
  538. package/test/spec/modules/adyoulikeBidAdapter_spec.js +50 -10
  539. package/test/spec/modules/afpBidAdapter_spec.js +5 -1
  540. package/test/spec/modules/aidemBidAdapter_spec.js +10 -2
  541. package/test/spec/modules/airgridRtdProvider_spec.js +9 -59
  542. package/test/spec/modules/apacdexBidAdapter_spec.js +2 -2
  543. package/test/spec/modules/appnexusBidAdapter_spec.js +100 -27
  544. package/test/spec/modules/astraoneBidAdapter_spec.js +5 -1
  545. package/test/spec/modules/beachfrontBidAdapter_spec.js +0 -1
  546. package/test/spec/modules/big-richmediaBidAdapter_spec.js +0 -10
  547. package/test/spec/modules/bluebillywigBidAdapter_spec.js +12 -10
  548. package/test/spec/modules/browsiBidAdapter_spec.js +6 -3
  549. package/test/spec/modules/{emx_digitalBidAdapter_spec.js → cadentApertureMXBidAdapter_spec.js} +16 -16
  550. package/test/spec/modules/ccxBidAdapter_spec.js +1 -1
  551. package/test/spec/modules/cleanmedianetBidAdapter_spec.js +2 -2
  552. package/test/spec/modules/codefuelBidAdapter_spec.js +10 -1
  553. package/test/spec/modules/colossussspBidAdapter_spec.js +1 -1
  554. package/test/spec/modules/concertBidAdapter_spec.js +5 -1
  555. package/test/spec/modules/conversantBidAdapter_spec.js +7 -2
  556. package/test/spec/modules/criteoBidAdapter_spec.js +78 -8
  557. package/test/spec/modules/currency_spec.js +12 -12
  558. package/test/spec/modules/datawrkzBidAdapter_spec.js +0 -4
  559. package/test/spec/modules/dianomiBidAdapter_spec.js +1 -1
  560. package/test/spec/modules/etargetBidAdapter_spec.js +35 -8
  561. package/test/spec/modules/euidIdSystem_spec.js +0 -7
  562. package/test/spec/modules/feedadBidAdapter_spec.js +5 -1
  563. package/test/spec/modules/finativeBidAdapter_spec.js +0 -12
  564. package/test/spec/modules/fluctBidAdapter_spec.js +0 -2
  565. package/test/spec/modules/gamoshiBidAdapter_spec.js +5 -2
  566. package/test/spec/modules/gmosspBidAdapter_spec.js +5 -1
  567. package/test/spec/modules/gnetBidAdapter_spec.js +5 -1
  568. package/test/spec/modules/goldbachBidAdapter_spec.js +0 -10
  569. package/test/spec/modules/gridBidAdapter_spec.js +42 -302
  570. package/test/spec/modules/hybridBidAdapter_spec.js +5 -1
  571. package/test/spec/modules/hypelabBidAdapter_spec.js +281 -0
  572. package/test/spec/modules/{synacormediaBidAdapter_spec.js → imdsBidAdapter_spec.js} +19 -19
  573. package/test/spec/modules/improvedigitalBidAdapter_spec.js +6 -1
  574. package/test/spec/modules/insticatorBidAdapter_spec.js +6 -2
  575. package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +1 -1
  576. package/test/spec/modules/ivsBidAdapter_spec.js +0 -2
  577. package/test/spec/modules/ixBidAdapter_spec.js +8 -3
  578. package/test/spec/modules/kargoBidAdapter_spec.js +3 -3
  579. package/test/spec/modules/koblerBidAdapter_spec.js +13 -2
  580. package/test/spec/modules/kulturemediaBidAdapter_spec.js +0 -1
  581. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +21 -5
  582. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +1 -1
  583. package/test/spec/modules/livewrappedBidAdapter_spec.js +5 -6
  584. package/test/spec/modules/loglyliftBidAdapter_spec.js +10 -0
  585. package/test/spec/modules/luponmediaBidAdapter_spec.js +23 -2
  586. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +93 -1
  587. package/test/spec/modules/mediaforceBidAdapter_spec.js +11 -3
  588. package/test/spec/modules/mediafuseBidAdapter_spec.js +2 -6
  589. package/test/spec/modules/mediakeysBidAdapter_spec.js +6 -2
  590. package/test/spec/modules/medianetBidAdapter_spec.js +86 -17
  591. package/test/spec/modules/mediasniperBidAdapter_spec.js +1 -1
  592. package/test/spec/modules/mediasquareBidAdapter_spec.js +5 -5
  593. package/test/spec/modules/microadBidAdapter_spec.js +7 -3
  594. package/test/spec/modules/minutemediaplusBidAdapter_spec.js +7 -3
  595. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +2 -2
  596. package/test/spec/modules/nexx360BidAdapter_spec.js +0 -1
  597. package/test/spec/modules/oguryBidAdapter_spec.js +2 -1
  598. package/test/spec/modules/onetagBidAdapter_spec.js +5 -1
  599. package/test/spec/modules/openxBidAdapter_spec.js +1 -1
  600. package/test/spec/modules/operaadsBidAdapter_spec.js +5 -5
  601. package/test/spec/modules/optidigitalBidAdapter_spec.js +0 -2
  602. package/test/spec/modules/orbidderBidAdapter_spec.js +12 -4
  603. package/test/spec/modules/outbrainBidAdapter_spec.js +5 -0
  604. package/test/spec/modules/oxxionRtdProvider_spec.js +3 -2
  605. package/test/spec/modules/prebidServerBidAdapter_spec.js +114 -32
  606. package/test/spec/modules/priceFloors_spec.js +7 -25
  607. package/test/spec/modules/pubgeniusBidAdapter_spec.js +2 -1
  608. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +7 -0
  609. package/test/spec/modules/pubmaticBidAdapter_spec.js +41 -32
  610. package/test/spec/modules/pubwiseBidAdapter_spec.js +10 -6
  611. package/test/spec/modules/relaidoBidAdapter_spec.js +6 -2
  612. package/test/spec/modules/revcontentBidAdapter_spec.js +0 -10
  613. package/test/spec/modules/richaudienceBidAdapter_spec.js +5 -1
  614. package/test/spec/modules/rubiconBidAdapter_spec.js +26 -7
  615. package/test/spec/modules/scatteredBidAdapter_spec.js +0 -2
  616. package/test/spec/modules/seedingAllianceAdapter_spec.js +0 -13
  617. package/test/spec/modules/seedtagBidAdapter_spec.js +5 -1
  618. package/test/spec/modules/sharethroughBidAdapter_spec.js +6 -2
  619. package/test/spec/modules/sizeMapping_spec.js +342 -0
  620. package/test/spec/modules/slimcutBidAdapter_spec.js +0 -1
  621. package/test/spec/modules/smaatoBidAdapter_spec.js +3 -2
  622. package/test/spec/modules/smartadserverBidAdapter_spec.js +15 -3
  623. package/test/spec/modules/smilewantedBidAdapter_spec.js +25 -6
  624. package/test/spec/modules/sspBCBidAdapter_spec.js +4 -4
  625. package/test/spec/modules/taboolaBidAdapter_spec.js +10 -12
  626. package/test/spec/modules/teadsBidAdapter_spec.js +7 -0
  627. package/test/spec/modules/terceptAnalyticsAdapter_spec.js +0 -1
  628. package/test/spec/modules/ttdBidAdapter_spec.js +13 -5
  629. package/test/spec/modules/uid2IdSystem_spec.js +0 -10
  630. package/test/spec/modules/underdogmediaBidAdapter_spec.js +0 -1
  631. package/test/spec/modules/utiqSystem_spec.js +188 -0
  632. package/test/spec/modules/vidazooBidAdapter_spec.js +6 -2
  633. package/test/spec/modules/videobyteBidAdapter_spec.js +0 -1
  634. package/test/spec/modules/vrtcalBidAdapter_spec.js +9 -2
  635. package/test/spec/modules/winrBidAdapter_spec.js +0 -9
  636. package/test/spec/modules/xeBidAdapter_spec.js +6 -2
  637. package/test/spec/unit/core/adapterManager_spec.js +69 -115
  638. package/test/spec/unit/core/bidderFactory_spec.js +80 -152
  639. package/test/spec/unit/core/targeting_spec.js +0 -6
  640. package/test/spec/utils_spec.js +21 -90
  641. package/dist/aolBidAdapter.js +0 -1
  642. package/dist/captifyRtdProvider.js +0 -1
  643. package/dist/emx_digitalBidAdapter.js +0 -1
  644. package/dist/glimpseBidAdapter.js +0 -1
  645. package/dist/googleAnalyticsAdapter.js +0 -1
  646. package/dist/inmarBidAdapter.js +0 -1
  647. package/dist/inskinBidAdapter.js +0 -1
  648. package/dist/liveyieldAnalyticsAdapter.js +0 -1
  649. package/dist/mass.js +0 -1
  650. package/dist/openxAnalyticsAdapter.js +0 -1
  651. package/dist/openxOrtbBidAdapter.js +0 -1
  652. package/dist/pubCommonId.js +0 -1
  653. package/dist/realvuAnalyticsAdapter.js +0 -1
  654. package/dist/rubiconAnalyticsAdapter.js +0 -1
  655. package/dist/synacormediaBidAdapter.js +0 -1
  656. package/dist/trustpidSystem.js +0 -1
  657. package/dist/viewability.js +0 -1
  658. package/dist/zeusPrimeRtdProvider.js +0 -21
  659. package/integrationExamples/gpt/captifyRtdProvider_example.html +0 -167
  660. package/integrationExamples/mass/index.html +0 -132
  661. package/modules/aolBidAdapter.js +0 -462
  662. package/modules/aolBidAdapter.md +0 -46
  663. package/modules/captifyRtdProvider.js +0 -146
  664. package/modules/captifyRtdProvider.md +0 -68
  665. package/modules/conversantAnalyticsAdapter.md +0 -46
  666. package/modules/conversantBidAdapter.md +0 -46
  667. package/modules/glimpseBidAdapter.js +0 -198
  668. package/modules/glimpseBidAdapter.md +0 -37
  669. package/modules/googleAnalyticsAdapter.js +0 -298
  670. package/modules/googleAnalyticsAdapter.md +0 -38
  671. package/modules/inmarBidAdapter.js +0 -132
  672. package/modules/inmarBidAdapter.md +0 -44
  673. package/modules/inskinBidAdapter.js +0 -391
  674. package/modules/inskinBidAdapter.md +0 -31
  675. package/modules/liveyieldAnalyticsAdapter.js +0 -454
  676. package/modules/liveyieldAnalyticsAdapter.md +0 -45
  677. package/modules/mass.js +0 -184
  678. package/modules/mass.md +0 -137
  679. package/modules/openxAnalyticsAdapter.js +0 -27
  680. package/modules/openxAnalyticsAdapter.md +0 -135
  681. package/modules/openxOrtbBidAdapter.js +0 -238
  682. package/modules/openxOrtbBidAdapter.md +0 -108
  683. package/modules/pubCommonId.js +0 -303
  684. package/modules/pubCommonId.md +0 -37
  685. package/modules/realvuAnalyticsAdapter.js +0 -976
  686. package/modules/realvuAnalyticsAdapter.md +0 -9
  687. package/modules/rubiconAnalyticsAdapter.js +0 -938
  688. package/modules/trustpidSystem.js +0 -143
  689. package/modules/viewability.js +0 -9
  690. package/modules/zeusPrimeRtdProvider.js +0 -37
  691. package/modules/zeusPrimeRtdProvider.md +0 -63
  692. package/test/spec/modules/aolBidAdapter_spec.js +0 -890
  693. package/test/spec/modules/captifyRtdProvider_spec.js +0 -253
  694. package/test/spec/modules/glimpseBidAdapter_spec.js +0 -422
  695. package/test/spec/modules/googleAnalyticsAdapter_spec.js +0 -27
  696. package/test/spec/modules/inmarBidAdapter_spec.js +0 -242
  697. package/test/spec/modules/inskinBidAdapter_spec.js +0 -386
  698. package/test/spec/modules/liveyieldAnalyticsAdapter_spec.js +0 -704
  699. package/test/spec/modules/mass_spec.js +0 -141
  700. package/test/spec/modules/openxAnalyticsAdapter_spec.js +0 -21
  701. package/test/spec/modules/openxOrtbBidAdapter_spec.js +0 -1615
  702. package/test/spec/modules/pubCommonId_spec.js +0 -353
  703. package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +0 -2540
  704. package/test/spec/modules/rubiconAnalyticsSchema.json +0 -494
  705. package/test/spec/modules/trustpidSystem_spec.js +0 -237
  706. package/test/spec/sizeMapping_spec.js +0 -341
@@ -1,938 +0,0 @@
1
- import { generateUUID, mergeDeep, deepAccess, parseUrl, logError, pick, isEmpty, logWarn, debugTurnedOn, parseQS, getWindowLocation, isAdUnitCodeMatchingSlot, isNumber, isGptPubadsDefined, _each, deepSetValue, deepClone, logInfo } from '../src/utils.js';
2
- import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
3
- import adapterManager from '../src/adapterManager.js';
4
- import CONSTANTS from '../src/constants.json';
5
- import { ajax } from '../src/ajax.js';
6
- import { config } from '../src/config.js';
7
- import { getGlobal } from '../src/prebidGlobal.js';
8
- import {getStorageManager} from '../src/storageManager.js';
9
- import {MODULE_TYPE_ANALYTICS} from '../src/activities/modules.js';
10
-
11
- const RUBICON_GVL_ID = 52;
12
- export const storage = getStorageManager({moduleType: MODULE_TYPE_ANALYTICS, moduleName: 'rubicon'});
13
- const COOKIE_NAME = 'rpaSession';
14
- const LAST_SEEN_EXPIRE_TIME = 1800000; // 30 mins
15
- const END_EXPIRE_TIME = 21600000; // 6 hours
16
- const MODULE_NAME = 'Rubicon Analytics';
17
-
18
- const pbsErrorMap = {
19
- 1: 'timeout-error',
20
- 2: 'input-error',
21
- 3: 'connect-error',
22
- 4: 'request-error',
23
- 999: 'generic-error'
24
- }
25
-
26
- let prebidGlobal = getGlobal();
27
- const {
28
- EVENTS: {
29
- AUCTION_INIT,
30
- AUCTION_END,
31
- BID_REQUESTED,
32
- BID_RESPONSE,
33
- BIDDER_DONE,
34
- BID_TIMEOUT,
35
- BID_WON,
36
- SET_TARGETING,
37
- BILLABLE_EVENT
38
- },
39
- STATUS: {
40
- GOOD,
41
- NO_BID
42
- },
43
- BID_STATUS: {
44
- BID_REJECTED
45
- }
46
- } = CONSTANTS;
47
-
48
- let serverConfig;
49
- config.getConfig('s2sConfig', ({ s2sConfig }) => {
50
- serverConfig = s2sConfig;
51
- });
52
-
53
- export const SEND_TIMEOUT = 3000;
54
- const DEFAULT_INTEGRATION = 'pbjs';
55
-
56
- const cache = {
57
- auctions: {},
58
- targeting: {},
59
- timeouts: {},
60
- gpt: {},
61
- billing: {}
62
- };
63
-
64
- const BID_REJECTED_IPF = 'rejected-ipf';
65
-
66
- export let rubiConf;
67
- export const resetRubiConf = () => {
68
- rubiConf = {
69
- pvid: generateUUID().slice(0, 8),
70
- analyticsEventDelay: 0,
71
- dmBilling: {
72
- enabled: false,
73
- vendors: [],
74
- waitForAuction: true
75
- }
76
- }
77
- }
78
- resetRubiConf();
79
-
80
- // we are saving these as global to this module so that if a pub accidentally overwrites the entire
81
- // rubicon object, then we do not lose other data
82
- config.getConfig('rubicon', config => {
83
- mergeDeep(rubiConf, config.rubicon);
84
- if (deepAccess(config, 'rubicon.updatePageView') === true) {
85
- rubiConf.pvid = generateUUID().slice(0, 8)
86
- }
87
- });
88
-
89
- export function getHostNameFromReferer(referer) {
90
- try {
91
- rubiconAdapter.referrerHostname = parseUrl(referer, { noDecodeWholeURL: true }).hostname;
92
- } catch (e) {
93
- logError(`${MODULE_NAME}: Unable to parse hostname from supplied url: `, referer, e);
94
- rubiconAdapter.referrerHostname = '';
95
- }
96
- return rubiconAdapter.referrerHostname
97
- };
98
-
99
- function stringProperties(obj) {
100
- return Object.keys(obj).reduce((newObj, prop) => {
101
- let value = obj[prop];
102
- if (typeof value === 'number') {
103
- value = value.toFixed(3);
104
- } else if (typeof value !== 'string') {
105
- value = String(value);
106
- }
107
- newObj[prop] = value || undefined;
108
- return newObj;
109
- }, {});
110
- }
111
-
112
- function sizeToDimensions(size) {
113
- return {
114
- width: size.w || size[0],
115
- height: size.h || size[1]
116
- };
117
- }
118
-
119
- function validMediaType(type) {
120
- return ['banner', 'native', 'video'].indexOf(type) !== -1;
121
- }
122
-
123
- function formatSource(src) {
124
- if (typeof src === 'undefined') {
125
- src = 'client';
126
- } else if (src === 's2s') {
127
- src = 'server';
128
- }
129
- return src.toLowerCase();
130
- }
131
-
132
- function getBillingPayload(event) {
133
- let billingEvent = deepClone(event);
134
- // Pass along type if is string and not empty else general
135
- billingEvent.type = (typeof event.type === 'string' && event.type) || 'general';
136
- billingEvent.accountId = accountId;
137
- // mark as sent
138
- deepSetValue(cache.billing, `${event.vendor}.${event.billingId}`, true);
139
- return billingEvent;
140
- }
141
-
142
- function sendBillingEvent(event) {
143
- let message = getBasicEventDetails(undefined, 'soloBilling');
144
- message.billableEvents = [getBillingPayload(event)];
145
- ajax(
146
- rubiconAdapter.getUrl(),
147
- null,
148
- JSON.stringify(message),
149
- {
150
- contentType: 'application/json'
151
- }
152
- );
153
- }
154
-
155
- function getBasicEventDetails(auctionId, trigger) {
156
- let auctionCache = cache.auctions[auctionId];
157
- let referrer = pageReferer || (auctionCache && auctionCache.referrer);
158
- let message = {
159
- timestamps: {
160
- prebidLoaded: rubiconAdapter.MODULE_INITIALIZED_TIME,
161
- auctionEnded: auctionCache ? auctionCache.endTs : undefined,
162
- eventTime: Date.now()
163
- },
164
- trigger,
165
- integration: rubiConf.int_type || DEFAULT_INTEGRATION,
166
- version: '$prebid.version$',
167
- referrerUri: referrer,
168
- referrerHostname: rubiconAdapter.referrerHostname || getHostNameFromReferer(referrer),
169
- channel: 'web',
170
- };
171
- if (rubiConf.wrapperName) {
172
- message.wrapper = {
173
- name: rubiConf.wrapperName,
174
- family: rubiConf.wrapperFamily,
175
- rule: rubiConf.rule_name
176
- }
177
- }
178
- return message;
179
- }
180
-
181
- function sendMessage(auctionId, bidWonId, trigger) {
182
- function formatBid(bid) {
183
- return pick(bid, [
184
- 'bidder',
185
- 'bidderDetail',
186
- 'bidId', bidId => deepAccess(bid, 'bidResponse.pbsBidId') || deepAccess(bid, 'bidResponse.seatBidId') || bidId,
187
- 'status',
188
- 'error',
189
- 'source', (source, bid) => {
190
- if (source) {
191
- return source;
192
- }
193
- return serverConfig && Array.isArray(serverConfig.bidders) && serverConfig.bidders.some(s2sBidder => s2sBidder.toLowerCase() === bid.bidder) !== -1
194
- ? 'server' : 'client'
195
- },
196
- 'clientLatencyMillis',
197
- 'serverLatencyMillis',
198
- 'params',
199
- 'bidResponse', bidResponse => bidResponse ? pick(bidResponse, [
200
- 'bidPriceUSD',
201
- 'dealId',
202
- 'dimensions',
203
- 'mediaType',
204
- 'floorValue',
205
- 'floorRuleValue',
206
- 'floorRule',
207
- 'adomains'
208
- ]) : undefined
209
- ]);
210
- }
211
- function formatBidWon(bid) {
212
- return Object.assign(formatBid(bid), pick(bid.adUnit, [
213
- 'adUnitCode',
214
- 'transactionId',
215
- 'videoAdFormat', () => bid.videoAdFormat,
216
- 'mediaTypes'
217
- ]), {
218
- adserverTargeting: !isEmpty(cache.targeting[bid.adUnit.adUnitCode]) ? stringProperties(cache.targeting[bid.adUnit.adUnitCode]) : undefined,
219
- bidwonStatus: 'success', // hard-coded for now
220
- accountId,
221
- siteId: bid.siteId,
222
- zoneId: bid.zoneId,
223
- samplingFactor
224
- });
225
- }
226
- let message = getBasicEventDetails(auctionId, trigger);
227
- let auctionCache = cache.auctions[auctionId];
228
- if (auctionCache && !auctionCache.sent) {
229
- let adUnitMap = Object.keys(auctionCache.bids).reduce((adUnits, bidId) => {
230
- let bid = auctionCache.bids[bidId];
231
- let adUnit = adUnits[bid.adUnit.adUnitCode];
232
- if (!adUnit) {
233
- adUnit = adUnits[bid.adUnit.adUnitCode] = pick(bid.adUnit, [
234
- 'adUnitCode',
235
- 'transactionId',
236
- 'mediaTypes',
237
- 'dimensions',
238
- 'adserverTargeting', () => !isEmpty(cache.targeting[bid.adUnit.adUnitCode]) ? stringProperties(cache.targeting[bid.adUnit.adUnitCode]) : undefined,
239
- 'gam', gam => !isEmpty(gam) ? gam : undefined,
240
- 'pbAdSlot',
241
- 'gpid',
242
- 'pattern'
243
- ]);
244
- adUnit.bids = [];
245
- adUnit.status = 'no-bid'; // default it to be no bid
246
- }
247
-
248
- // Add site and zone id if not there and if we found a rubicon bidder
249
- if ((!adUnit.siteId || !adUnit.zoneId) && rubiconAliases.indexOf(bid.bidder) !== -1) {
250
- if (deepAccess(bid, 'params.accountId') == accountId) {
251
- adUnit.accountId = parseInt(accountId);
252
- adUnit.siteId = parseInt(deepAccess(bid, 'params.siteId'));
253
- adUnit.zoneId = parseInt(deepAccess(bid, 'params.zoneId'));
254
- }
255
- }
256
-
257
- if (bid.videoAdFormat && !adUnit.videoAdFormat) {
258
- adUnit.videoAdFormat = bid.videoAdFormat;
259
- }
260
-
261
- // determine adUnit.status from its bid statuses. Use priority below to determine, higher index is better
262
- let statusPriority = ['error', 'no-bid', 'success'];
263
- if (statusPriority.indexOf(bid.status) > statusPriority.indexOf(adUnit.status)) {
264
- adUnit.status = bid.status;
265
- }
266
-
267
- adUnit.bids.push(formatBid(bid));
268
-
269
- return adUnits;
270
- }, {});
271
-
272
- // We need to mark each cached bid response with its appropriate rubicon site-zone id
273
- // This allows the bidWon events to have these params even in the case of a delayed render
274
- Object.keys(auctionCache.bids).forEach(function (bidId) {
275
- let adCode = auctionCache.bids[bidId].adUnit.adUnitCode;
276
- Object.assign(auctionCache.bids[bidId], pick(adUnitMap[adCode], ['accountId', 'siteId', 'zoneId']));
277
- });
278
-
279
- let auction = {
280
- clientTimeoutMillis: auctionCache.timeout,
281
- auctionStart: auctionCache.timestamp,
282
- auctionEnd: auctionCache.endTs,
283
- bidderOrder: auctionCache.bidderOrder,
284
- samplingFactor,
285
- accountId,
286
- adUnits: Object.keys(adUnitMap).map(i => adUnitMap[i]),
287
- requestId: auctionId
288
- };
289
-
290
- // pick our of top level floor data we want to send!
291
- if (auctionCache.floorData) {
292
- if (auctionCache.floorData.location === 'noData') {
293
- auction.floors = pick(auctionCache.floorData, [
294
- 'location',
295
- 'fetchStatus',
296
- 'floorProvider as provider'
297
- ]);
298
- } else {
299
- auction.floors = pick(auctionCache.floorData, [
300
- 'location',
301
- 'modelVersion as modelName',
302
- 'modelWeight',
303
- 'modelTimestamp',
304
- 'skipped',
305
- 'enforcement', () => deepAccess(auctionCache.floorData, 'enforcements.enforceJS'),
306
- 'dealsEnforced', () => deepAccess(auctionCache.floorData, 'enforcements.floorDeals'),
307
- 'skipRate',
308
- 'fetchStatus',
309
- 'floorMin',
310
- 'floorProvider as provider'
311
- ]);
312
- }
313
- }
314
-
315
- // gather gdpr info
316
- if (auctionCache.gdprConsent) {
317
- auction.gdpr = pick(auctionCache.gdprConsent, [
318
- 'gdprApplies as applies',
319
- 'consentString',
320
- 'apiVersion as version'
321
- ]);
322
- }
323
-
324
- // gather session info
325
- if (auctionCache.session) {
326
- message.session = pick(auctionCache.session, [
327
- 'id',
328
- 'pvid',
329
- 'start',
330
- 'expires'
331
- ]);
332
- if (!isEmpty(auctionCache.session.fpkvs)) {
333
- message.fpkvs = Object.keys(auctionCache.session.fpkvs).map(key => {
334
- return { key, value: auctionCache.session.fpkvs[key] };
335
- });
336
- }
337
- }
338
-
339
- if (serverConfig) {
340
- auction.serverTimeoutMillis = serverConfig.timeout;
341
- }
342
-
343
- if (auctionCache.userIds.length) {
344
- auction.user = { ids: auctionCache.userIds };
345
- }
346
-
347
- message.auctions = [auction];
348
-
349
- let bidsWon = Object.keys(auctionCache.bidsWon).reduce((memo, adUnitCode) => {
350
- let bidId = auctionCache.bidsWon[adUnitCode];
351
- if (bidId) {
352
- memo.push(formatBidWon(auctionCache.bids[bidId]));
353
- }
354
- return memo;
355
- }, []);
356
-
357
- if (bidsWon.length > 0) {
358
- message.bidsWon = bidsWon;
359
- }
360
-
361
- auctionCache.sent = true;
362
- } else if (bidWonId && auctionCache && auctionCache.bids[bidWonId]) {
363
- message.bidsWon = [
364
- formatBidWon(auctionCache.bids[bidWonId])
365
- ];
366
- }
367
-
368
- // if we have not sent any billingEvents send them
369
- const pendingBillingEvents = getPendingBillingEvents(auctionCache);
370
- if (pendingBillingEvents && pendingBillingEvents.length) {
371
- message.billableEvents = pendingBillingEvents;
372
- }
373
-
374
- ajax(
375
- this.getUrl(),
376
- null,
377
- JSON.stringify(message),
378
- {
379
- contentType: 'application/json'
380
- }
381
- );
382
- }
383
-
384
- function getPendingBillingEvents(auctionCache) {
385
- if (auctionCache && auctionCache.billing && auctionCache.billing.length) {
386
- return auctionCache.billing.reduce((accum, billingEvent) => {
387
- if (deepAccess(cache.billing, `${billingEvent.vendor}.${billingEvent.billingId}`) === false) {
388
- accum.push(getBillingPayload(billingEvent));
389
- }
390
- return accum;
391
- }, []);
392
- }
393
- }
394
-
395
- function adUnitIsOnlyInstream(adUnit) {
396
- return adUnit.mediaTypes && Object.keys(adUnit.mediaTypes).length === 1 && deepAccess(adUnit, 'mediaTypes.video.context') === 'instream';
397
- }
398
-
399
- function getBidPrice(bid) {
400
- // get the cpm from bidResponse
401
- let cpm;
402
- let currency;
403
- if (bid.status === BID_REJECTED && deepAccess(bid, 'floorData.cpmAfterAdjustments')) {
404
- // if bid was rejected and bid.floorData.cpmAfterAdjustments use it
405
- cpm = bid.floorData.cpmAfterAdjustments;
406
- currency = bid.floorData.floorCurrency;
407
- } else if (typeof bid.currency === 'string' && bid.currency.toUpperCase() === 'USD') {
408
- // bid is in USD use it
409
- return Number(bid.cpm);
410
- } else {
411
- // else grab cpm
412
- cpm = bid.cpm;
413
- currency = bid.currency;
414
- }
415
- // if after this it is still going and is USD then return it.
416
- if (currency === 'USD') {
417
- return Number(cpm);
418
- }
419
- // otherwise we convert and return
420
- try {
421
- return Number(prebidGlobal.convertCurrency(cpm, currency, 'USD'));
422
- } catch (err) {
423
- logWarn(`${MODULE_NAME}: Could not determine the bidPriceUSD of the bid `, bid);
424
- }
425
- }
426
-
427
- export function parseBidResponse(bid, previousBidResponse) {
428
- // The current bidResponse for this matching requestId/bidRequestId
429
- let responsePrice = getBidPrice(bid)
430
- // we need to compare it with the previous one (if there was one)
431
- if (previousBidResponse && previousBidResponse.bidPriceUSD > responsePrice) {
432
- return previousBidResponse;
433
- }
434
- return pick(bid, [
435
- 'bidPriceUSD', () => responsePrice,
436
- 'dealId',
437
- 'status',
438
- 'mediaType',
439
- 'dimensions', () => {
440
- const width = bid.width || bid.playerWidth;
441
- const height = bid.height || bid.playerHeight;
442
- return (width && height) ? { width, height } : undefined;
443
- },
444
- // Handling use case where pbs sends back 0 or '0' bidIds
445
- 'pbsBidId', pbsBidId => pbsBidId == 0 ? generateUUID() : pbsBidId,
446
- 'seatBidId', seatBidId => seatBidId == 0 ? generateUUID() : seatBidId,
447
- 'floorValue', () => deepAccess(bid, 'floorData.floorValue'),
448
- 'floorRuleValue', () => deepAccess(bid, 'floorData.floorRuleValue'),
449
- 'floorRule', () => debugTurnedOn() ? deepAccess(bid, 'floorData.floorRule') : undefined,
450
- 'adomains', () => {
451
- const adomains = deepAccess(bid, 'meta.advertiserDomains');
452
- const validAdomains = Array.isArray(adomains) && adomains.filter(domain => typeof domain === 'string');
453
- return validAdomains && validAdomains.length > 0 ? validAdomains.slice(0, 10) : undefined
454
- }
455
- ]);
456
- }
457
-
458
- /*
459
- Filters and converts URL Params into an object and returns only KVs that match the 'utm_KEY' format
460
- */
461
- function getUtmParams() {
462
- let search;
463
-
464
- try {
465
- search = parseQS(getWindowLocation().search);
466
- } catch (e) {
467
- search = {};
468
- }
469
-
470
- return Object.keys(search).reduce((accum, param) => {
471
- if (param.match(/utm_/)) {
472
- accum[param.replace(/utm_/, '')] = search[param];
473
- }
474
- return accum;
475
- }, {});
476
- }
477
-
478
- function getFpkvs() {
479
- rubiConf.fpkvs = Object.assign((rubiConf.fpkvs || {}), getUtmParams());
480
-
481
- // convert all values to strings
482
- Object.keys(rubiConf.fpkvs).forEach(key => {
483
- rubiConf.fpkvs[key] = rubiConf.fpkvs[key] + '';
484
- });
485
-
486
- return rubiConf.fpkvs;
487
- }
488
-
489
- let samplingFactor = 1;
490
- let accountId;
491
- // List of known rubicon aliases
492
- // This gets updated on auction init to account for any custom aliases present
493
- let rubiconAliases = ['rubicon'];
494
-
495
- /*
496
- Checks the alias registry for any entries of the rubicon bid adapter.
497
- adds to the rubiconAliases list if found
498
- */
499
- function setRubiconAliases(aliasRegistry) {
500
- Object.keys(aliasRegistry).forEach(function (alias) {
501
- if (aliasRegistry[alias] === 'rubicon') {
502
- rubiconAliases.push(alias);
503
- }
504
- });
505
- }
506
-
507
- function getRpaCookie() {
508
- let encodedCookie = storage.getDataFromLocalStorage(COOKIE_NAME);
509
- if (encodedCookie) {
510
- try {
511
- return JSON.parse(window.atob(encodedCookie));
512
- } catch (e) {
513
- logError(`${MODULE_NAME}: Unable to decode ${COOKIE_NAME} value: `, e);
514
- }
515
- }
516
- return {};
517
- }
518
-
519
- function setRpaCookie(decodedCookie) {
520
- try {
521
- storage.setDataInLocalStorage(COOKIE_NAME, window.btoa(JSON.stringify(decodedCookie)));
522
- } catch (e) {
523
- logError(`${MODULE_NAME}: Unable to encode ${COOKIE_NAME} value: `, e);
524
- }
525
- }
526
-
527
- function updateRpaCookie() {
528
- const currentTime = Date.now();
529
- let decodedRpaCookie = getRpaCookie();
530
- if (
531
- !Object.keys(decodedRpaCookie).length ||
532
- (currentTime - decodedRpaCookie.lastSeen) > LAST_SEEN_EXPIRE_TIME ||
533
- decodedRpaCookie.expires < currentTime
534
- ) {
535
- decodedRpaCookie = {
536
- id: generateUUID(),
537
- start: currentTime,
538
- expires: currentTime + END_EXPIRE_TIME, // six hours later,
539
- }
540
- }
541
- // possible that decodedRpaCookie is undefined, and if it is, we probably are blocked by storage or some other exception
542
- if (Object.keys(decodedRpaCookie).length) {
543
- decodedRpaCookie.lastSeen = currentTime;
544
- decodedRpaCookie.fpkvs = { ...decodedRpaCookie.fpkvs, ...getFpkvs() };
545
- decodedRpaCookie.pvid = rubiConf.pvid;
546
- setRpaCookie(decodedRpaCookie)
547
- }
548
- return decodedRpaCookie;
549
- }
550
-
551
- function subscribeToGamSlots() {
552
- window.googletag.pubads().addEventListener('slotRenderEnded', event => {
553
- const isMatchingAdSlot = isAdUnitCodeMatchingSlot(event.slot);
554
- // loop through auctions and adUnits and mark the info
555
- // only mark first auction which finds a match
556
- let hasMatch = false;
557
- Object.keys(cache.auctions).find(auctionId => {
558
- (Object.keys(cache.auctions[auctionId].bids) || []).forEach(bidId => {
559
- let bid = cache.auctions[auctionId].bids[bidId];
560
- // if this slot matches this bids adUnit, add the adUnit info
561
- // only mark it if it already has not been marked
562
- if (!bid.adUnit.gamRendered && isMatchingAdSlot(bid.adUnit.adUnitCode)) {
563
- // mark this adUnit as having been rendered by gam
564
- cache.auctions[auctionId].gamHasRendered[bid.adUnit.adUnitCode] = true;
565
-
566
- // this current auction has an adunit that matched the slot, so mark it as matched so next auciton is skipped
567
- hasMatch = true;
568
-
569
- bid.adUnit.gam = pick(event, [
570
- // these come in as `null` from Gpt, which when stringified does not get removed
571
- // so set explicitly to undefined when not a number
572
- 'advertiserId', advertiserId => isNumber(advertiserId) ? advertiserId : undefined,
573
- 'creativeId', creativeId => isNumber(event.sourceAgnosticCreativeId) ? event.sourceAgnosticCreativeId : isNumber(creativeId) ? creativeId : undefined,
574
- 'lineItemId', lineItemId => isNumber(event.sourceAgnosticLineItemId) ? event.sourceAgnosticLineItemId : isNumber(lineItemId) ? lineItemId : undefined,
575
- 'adSlot', () => event.slot.getAdUnitPath(),
576
- 'isSlotEmpty', () => event.isEmpty || undefined
577
- ]);
578
-
579
- // this lets us know next iteration not to check this bids adunit
580
- bid.adUnit.gamRendered = true;
581
- }
582
- });
583
- // Now if all adUnits have gam rendered, send the payload
584
- if (rubiConf.waitForGamSlots && !cache.auctions[auctionId].sent && Object.keys(cache.auctions[auctionId].gamHasRendered).every(adUnitCode => cache.auctions[auctionId].gamHasRendered[adUnitCode])) {
585
- clearTimeout(cache.timeouts[auctionId]);
586
- delete cache.timeouts[auctionId];
587
- if (rubiConf.analyticsEventDelay > 0) {
588
- setTimeout(() => sendMessage.call(rubiconAdapter, auctionId, undefined, 'delayedGam'), rubiConf.analyticsEventDelay)
589
- } else {
590
- sendMessage.call(rubiconAdapter, auctionId, undefined, 'gam')
591
- }
592
- }
593
- return hasMatch;
594
- });
595
- });
596
- }
597
-
598
- let pageReferer;
599
-
600
- const isBillingEventValid = event => {
601
- // vendor is whitelisted
602
- const isWhitelistedVendor = rubiConf.dmBilling.vendors.includes(event.vendor);
603
- // event is not duplicated
604
- const isNotDuplicate = typeof deepAccess(cache.billing, `${event.vendor}.${event.billingId}`) !== 'boolean';
605
- // billingId is defined and a string
606
- return typeof event.billingId === 'string' && isWhitelistedVendor && isNotDuplicate;
607
- }
608
-
609
- const sendOrAddEventToQueue = event => {
610
- // if any auction is not sent yet, then add it to the auction queue
611
- const pendingAuction = Object.keys(cache.auctions).find(auctionId => !cache.auctions[auctionId].sent);
612
-
613
- if (rubiConf.dmBilling.waitForAuction && pendingAuction) {
614
- cache.auctions[pendingAuction].billing = cache.auctions[pendingAuction].billing || [];
615
- cache.auctions[pendingAuction].billing.push(event);
616
- } else {
617
- // send it
618
- sendBillingEvent(event);
619
- }
620
- }
621
-
622
- let baseAdapter = adapter({ analyticsType: 'endpoint' });
623
- let rubiconAdapter = Object.assign({}, baseAdapter, {
624
- MODULE_INITIALIZED_TIME: Date.now(),
625
- referrerHostname: '',
626
- enableAnalytics(config = {}) {
627
- let error = false;
628
- samplingFactor = 1;
629
-
630
- if (typeof config.options === 'object') {
631
- if (config.options.accountId) {
632
- accountId = Number(config.options.accountId);
633
- }
634
- if (config.options.endpoint) {
635
- this.getUrl = () => config.options.endpoint;
636
- } else {
637
- logError(`${MODULE_NAME}: required endpoint missing`);
638
- error = true;
639
- }
640
- if (typeof config.options.sampling !== 'undefined') {
641
- samplingFactor = 1 / parseFloat(config.options.sampling);
642
- }
643
- if (typeof config.options.samplingFactor !== 'undefined') {
644
- if (typeof config.options.sampling !== 'undefined') {
645
- logWarn(`${MODULE_NAME}: Both options.samplingFactor and options.sampling enabled defaulting to samplingFactor`);
646
- }
647
- samplingFactor = parseFloat(config.options.samplingFactor);
648
- config.options.sampling = 1 / samplingFactor;
649
- }
650
- }
651
-
652
- let validSamplingFactors = [1, 10, 20, 40, 100];
653
- if (validSamplingFactors.indexOf(samplingFactor) === -1) {
654
- error = true;
655
- logError(`${MODULE_NAME}: invalid samplingFactor ${samplingFactor} - must be one of ${validSamplingFactors.join(', ')}`);
656
- } else if (!accountId) {
657
- error = true;
658
- logError(`${MODULE_NAME}: required accountId missing for rubicon analytics`);
659
- }
660
-
661
- if (!error) {
662
- baseAdapter.enableAnalytics.call(this, config);
663
- }
664
- },
665
- disableAnalytics() {
666
- this.getUrl = baseAdapter.getUrl;
667
- accountId = undefined;
668
- rubiConf = {};
669
- cache.gpt.registered = false;
670
- cache.billing = {};
671
- baseAdapter.disableAnalytics.apply(this, arguments);
672
- },
673
- track({ eventType, args }) {
674
- switch (eventType) {
675
- case AUCTION_INIT:
676
- // set the rubicon aliases
677
- setRubiconAliases(adapterManager.aliasRegistry);
678
- let cacheEntry = pick(args, [
679
- 'timestamp',
680
- 'timeout'
681
- ]);
682
- cacheEntry.bids = {};
683
- cacheEntry.bidsWon = {};
684
- cacheEntry.gamHasRendered = {};
685
- // TODO: is 'page' the right value here?
686
- cacheEntry.referrer = pageReferer = deepAccess(args, 'bidderRequests.0.refererInfo.page');
687
- cacheEntry.bidderOrder = [];
688
- const floorData = deepAccess(args, 'bidderRequests.0.bids.0.floorData');
689
- if (floorData) {
690
- cacheEntry.floorData = { ...floorData };
691
- }
692
- cacheEntry.gdprConsent = deepAccess(args, 'bidderRequests.0.gdprConsent');
693
- cacheEntry.session = storage.localStorageIsEnabled() && updateRpaCookie();
694
- cacheEntry.userIds = Object.keys(deepAccess(args, 'bidderRequests.0.bids.0.userId', {})).map(id => {
695
- return { provider: id, hasId: true }
696
- });
697
- cache.auctions[args.auctionId] = cacheEntry;
698
- // register to listen to gpt events if not done yet
699
- if (!cache.gpt.registered && isGptPubadsDefined()) {
700
- subscribeToGamSlots();
701
- cache.gpt.registered = true;
702
- } else if (!cache.gpt.registered) {
703
- cache.gpt.registered = true;
704
- window.googletag = window.googletag || {};
705
- window.googletag.cmd = window.googletag.cmd || [];
706
- window.googletag.cmd.push(function () {
707
- subscribeToGamSlots();
708
- });
709
- }
710
- break;
711
- case BID_REQUESTED:
712
- cache.auctions[args.auctionId].bidderOrder.push(args.bidderCode);
713
- Object.assign(cache.auctions[args.auctionId].bids, args.bids.reduce((memo, bid) => {
714
- // mark adUnits we expect bidWon events for
715
- cache.auctions[args.auctionId].bidsWon[bid.adUnitCode] = false;
716
-
717
- if (rubiConf.waitForGamSlots && !adUnitIsOnlyInstream(bid)) {
718
- cache.auctions[args.auctionId].gamHasRendered[bid.adUnitCode] = false;
719
- }
720
-
721
- memo[bid.bidId] = pick(bid, [
722
- 'bidder', bidder => bidder.toLowerCase(),
723
- 'bidId',
724
- 'status', () => 'no-bid', // default a bid to no-bid until response is recieved or bid is timed out
725
- 'source', () => formatSource(bid.src),
726
- 'params', (params, bid) => {
727
- switch (bid.bidder) {
728
- // specify bidder params we want here
729
- case 'rubicon':
730
- return pick(params, [
731
- 'accountId',
732
- 'siteId',
733
- 'zoneId'
734
- ]);
735
- }
736
- },
737
- 'videoAdFormat', (_, cachedBid) => {
738
- if (cachedBid.bidder === 'rubicon') {
739
- return ({
740
- 201: 'pre-roll',
741
- 202: 'interstitial',
742
- 203: 'outstream',
743
- 204: 'mid-roll',
744
- 205: 'post-roll',
745
- 207: 'vertical'
746
- })[deepAccess(bid, 'params.video.size_id')];
747
- } else {
748
- let startdelay = parseInt(deepAccess(bid, 'params.video.startdelay'), 10);
749
- if (!isNaN(startdelay)) {
750
- if (startdelay > 0) {
751
- return 'mid-roll';
752
- }
753
- return ({
754
- '0': 'pre-roll',
755
- '-1': 'mid-roll',
756
- '-2': 'post-roll'
757
- })[startdelay]
758
- }
759
- }
760
- },
761
- 'adUnit', () => pick(bid, [
762
- 'adUnitCode',
763
- 'transactionId',
764
- 'sizes as dimensions', sizes => sizes.map(sizeToDimensions),
765
- 'mediaTypes', (types) => {
766
- if (bid.mediaType && validMediaType(bid.mediaType)) {
767
- return [bid.mediaType];
768
- }
769
- if (Array.isArray(types)) {
770
- return types.filter(validMediaType);
771
- }
772
- if (typeof types === 'object') {
773
- if (!bid.sizes) {
774
- bid.dimensions = [];
775
- _each(types, (type) =>
776
- bid.dimensions = bid.dimensions.concat(
777
- type.sizes.map(sizeToDimensions)
778
- )
779
- );
780
- }
781
- return Object.keys(types).filter(validMediaType);
782
- }
783
- return ['banner'];
784
- },
785
- 'gam', () => {
786
- if (deepAccess(bid, 'ortb2Imp.ext.data.adserver.name') === 'gam') {
787
- return { adSlot: bid.ortb2Imp.ext.data.adserver.adslot }
788
- }
789
- },
790
- 'pbAdSlot', () => deepAccess(bid, 'ortb2Imp.ext.data.pbadslot'),
791
- 'pattern', () => deepAccess(bid, 'ortb2Imp.ext.data.aupname'),
792
- 'gpid', () => deepAccess(bid, 'ortb2Imp.ext.gpid')
793
- ])
794
- ]);
795
- return memo;
796
- }, {}));
797
- break;
798
- case BID_RESPONSE:
799
- let auctionEntry = cache.auctions[args.auctionId];
800
-
801
- if (!auctionEntry.bids[args.requestId] && args.originalRequestId) {
802
- auctionEntry.bids[args.requestId] = { ...auctionEntry.bids[args.originalRequestId] };
803
- auctionEntry.bids[args.requestId].bidId = args.requestId;
804
- auctionEntry.bids[args.requestId].bidderDetail = args.targetingBidder;
805
- }
806
-
807
- let bid = auctionEntry.bids[args.requestId];
808
- // If floor resolved gptSlot but we have not yet, then update the adUnit to have the adSlot name
809
- if (!deepAccess(bid, 'adUnit.gam.adSlot') && deepAccess(args, 'floorData.matchedFields.gptSlot')) {
810
- deepSetValue(bid, 'adUnit.gam.adSlot', args.floorData.matchedFields.gptSlot);
811
- }
812
- // if we have not set enforcements yet set it
813
- if (!deepAccess(auctionEntry, 'floorData.enforcements') && deepAccess(args, 'floorData.enforcements')) {
814
- auctionEntry.floorData.enforcements = { ...args.floorData.enforcements };
815
- }
816
- if (!bid) {
817
- logError(`${MODULE_NAME}: Could not find associated bid request for bid response with requestId: `, args.requestId);
818
- break;
819
- }
820
- bid.source = formatSource(bid.source || args.source);
821
- switch (args.getStatusCode()) {
822
- case GOOD:
823
- bid.status = 'success';
824
- delete bid.error; // it's possible for this to be set by a previous timeout
825
- break;
826
- case NO_BID:
827
- bid.status = args.status === BID_REJECTED ? BID_REJECTED_IPF : 'no-bid';
828
- delete bid.error;
829
- break;
830
- default:
831
- bid.status = 'error';
832
- bid.error = {
833
- code: 'request-error'
834
- };
835
- }
836
- bid.clientLatencyMillis = bid.timeToRespond || Date.now() - cache.auctions[args.auctionId].timestamp;
837
- bid.bidResponse = parseBidResponse(args, bid.bidResponse);
838
- break;
839
- case BIDDER_DONE:
840
- const serverError = deepAccess(args, 'serverErrors.0');
841
- const serverResponseTimeMs = args.serverResponseTimeMs;
842
- args.bids.forEach(bid => {
843
- let cachedBid = cache.auctions[bid.auctionId].bids[bid.bidId || bid.requestId];
844
- if (typeof bid.serverResponseTimeMs !== 'undefined') {
845
- cachedBid.serverLatencyMillis = bid.serverResponseTimeMs;
846
- } else if (serverResponseTimeMs && bid.source === 's2s') {
847
- cachedBid.serverLatencyMillis = serverResponseTimeMs;
848
- }
849
- // if PBS said we had an error, and this bid has not been processed by BID_RESPONSE YET
850
- if (serverError && (!cachedBid.status || ['no-bid', 'error'].indexOf(cachedBid.status) !== -1)) {
851
- cachedBid.status = 'error';
852
- cachedBid.error = {
853
- code: pbsErrorMap[serverError.code] || pbsErrorMap[999],
854
- description: serverError.message
855
- }
856
- }
857
- if (!cachedBid.status) {
858
- cachedBid.status = 'no-bid';
859
- }
860
- if (!cachedBid.clientLatencyMillis) {
861
- cachedBid.clientLatencyMillis = Date.now() - cache.auctions[bid.auctionId].timestamp;
862
- }
863
- });
864
- break;
865
- case SET_TARGETING:
866
- Object.assign(cache.targeting, args);
867
- break;
868
- case BID_WON:
869
- let auctionCache = cache.auctions[args.auctionId];
870
- auctionCache.bidsWon[args.adUnitCode] = args.requestId;
871
-
872
- // check if this BID_WON missed the boat, if so send by itself
873
- if (auctionCache.sent === true) {
874
- sendMessage.call(this, args.auctionId, args.requestId, 'soloBidWon');
875
- } else if (!rubiConf.waitForGamSlots && Object.keys(auctionCache.bidsWon).reduce((memo, adUnitCode) => {
876
- // only send if we've received bidWon events for all adUnits in auction
877
- memo = memo && auctionCache.bidsWon[adUnitCode];
878
- return memo;
879
- }, true)) {
880
- clearTimeout(cache.timeouts[args.auctionId]);
881
- delete cache.timeouts[args.auctionId];
882
-
883
- sendMessage.call(this, args.auctionId, undefined, 'allBidWons');
884
- }
885
- break;
886
- case AUCTION_END:
887
- // see how long it takes for the payload to come fire
888
- let auctionData = cache.auctions[args.auctionId];
889
- // if for some reason the auction did not do its normal thing, this could be undefied so bail
890
- if (!auctionData) {
891
- break;
892
- }
893
- auctionData.endTs = Date.now();
894
-
895
- const isOnlyInstreamAuction = args.adUnits && args.adUnits.every(adUnit => adUnitIsOnlyInstream(adUnit));
896
- // If only instream, do not wait around, just send payload
897
- if (isOnlyInstreamAuction) {
898
- sendMessage.call(this, args.auctionId, undefined, 'instreamAuction');
899
- } else {
900
- // start timer to send batched payload just in case we don't hear any BID_WON events
901
- cache.timeouts[args.auctionId] = setTimeout(() => {
902
- sendMessage.call(this, args.auctionId, undefined, 'auctionEnd');
903
- }, rubiConf.analyticsBatchTimeout || SEND_TIMEOUT);
904
- }
905
- break;
906
- case BID_TIMEOUT:
907
- args.forEach(badBid => {
908
- let auctionCache = cache.auctions[badBid.auctionId];
909
- let bid = auctionCache.bids[badBid.bidId || badBid.requestId];
910
- // might be set already by bidder-done, so do not overwrite
911
- if (bid.status !== 'error') {
912
- bid.status = 'error';
913
- bid.error = {
914
- code: 'timeout-error',
915
- description: 'prebid.js timeout' // will help us diff if timeout was set by PBS or PBJS
916
- };
917
- }
918
- });
919
- break;
920
- case BILLABLE_EVENT:
921
- if (rubiConf.dmBilling.enabled && isBillingEventValid(args)) {
922
- // add to the map indicating it has not been sent yet
923
- deepSetValue(cache.billing, `${args.vendor}.${args.billingId}`, false);
924
- sendOrAddEventToQueue(args);
925
- } else {
926
- logInfo(`${MODULE_NAME}: Billing event ignored`, args);
927
- }
928
- }
929
- }
930
- });
931
-
932
- adapterManager.registerAnalyticsAdapter({
933
- adapter: rubiconAdapter,
934
- code: 'rubicon',
935
- gvlid: RUBICON_GVL_ID
936
- });
937
-
938
- export default rubiconAdapter;