prebid.js 7.43.0 → 7.45.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 (503) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/acuityAdsBidAdapter.js +1 -1
  4. package/dist/adagioBidAdapter.js +1 -1
  5. package/dist/adbookpspBidAdapter.js +1 -1
  6. package/dist/adgenerationBidAdapter.js +1 -1
  7. package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
  8. package/dist/admixerIdSystem.js +1 -1
  9. package/dist/adnuntiusBidAdapter.js +1 -1
  10. package/dist/adqueryBidAdapter.js +1 -1
  11. package/dist/adqueryIdSystem.js +1 -1
  12. package/dist/adrelevantisBidAdapter.js +1 -1
  13. package/dist/adrinoBidAdapter.js +1 -1
  14. package/dist/adriverIdSystem.js +1 -1
  15. package/dist/adsinteractiveBidAdapter.js +1 -0
  16. package/dist/adtrgtmeBidAdapter.js +1 -1
  17. package/dist/adxcgBidAdapter.js +1 -1
  18. package/dist/adyoulikeBidAdapter.js +1 -1
  19. package/dist/aidemBidAdapter.js +1 -1
  20. package/dist/airgridRtdProvider.js +1 -1
  21. package/dist/ajaBidAdapter.js +1 -1
  22. package/dist/akamaiDapRtdProvider.js +1 -1
  23. package/dist/amxBidAdapter.js +1 -1
  24. package/dist/amxIdSystem.js +1 -1
  25. package/dist/appierAnalyticsAdapter.js +1 -1
  26. package/dist/appnexusBidAdapter.js +1 -1
  27. package/dist/appushBidAdapter.js +1 -1
  28. package/dist/apstreamBidAdapter.js +1 -1
  29. package/dist/asoBidAdapter.js +1 -1
  30. package/dist/atsAnalyticsAdapter.js +1 -1
  31. package/dist/audiencerunBidAdapter.js +1 -1
  32. package/dist/axonixBidAdapter.js +1 -1
  33. package/dist/bedigitechBidAdapter.js +1 -0
  34. package/dist/beyondmediaBidAdapter.js +1 -1
  35. package/dist/bidglassBidAdapter.js +1 -1
  36. package/dist/big-richmediaBidAdapter.js +1 -1
  37. package/dist/bluebillywigBidAdapter.js +1 -1
  38. package/dist/blueconicRtdProvider.js +1 -1
  39. package/dist/braveBidAdapter.js +1 -1
  40. package/dist/bridgewellBidAdapter.js +1 -1
  41. package/dist/brightMountainMediaBidAdapter.js +1 -1
  42. package/dist/brightcomBidAdapter.js +1 -1
  43. package/dist/brightcomSSPBidAdapter.js +1 -1
  44. package/dist/browsiRtdProvider.js +1 -1
  45. package/dist/byDataAnalyticsAdapter.js +1 -1
  46. package/dist/carodaBidAdapter.js +1 -1
  47. package/dist/chtnwBidAdapter.js +1 -1
  48. package/dist/coinzillaBidAdapter.js +1 -1
  49. package/dist/compassBidAdapter.js +1 -1
  50. package/dist/concertBidAdapter.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/contentexchangeBidAdapter.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/criteoIdSystem.js +1 -1
  60. package/dist/cwireBidAdapter.js +1 -1
  61. package/dist/czechAdIdSystem.js +1 -1
  62. package/dist/dacIdSystem.js +1 -1
  63. package/dist/deepintentDpesIdSystem.js +1 -1
  64. package/dist/dependencies.json +15 -0
  65. package/dist/discoveryBidAdapter.js +1 -1
  66. package/dist/domainOverrideToRootDomain.js +1 -0
  67. package/dist/dspxBidAdapter.js +1 -1
  68. package/dist/eplanningBidAdapter.js +1 -1
  69. package/dist/feedadBidAdapter.js +1 -1
  70. package/dist/finativeBidAdapter.js +1 -1
  71. package/dist/fintezaAnalyticsAdapter.js +1 -1
  72. package/dist/fledgeForGpt.js +1 -1
  73. package/dist/freewheel-sspBidAdapter.js +1 -1
  74. package/dist/ftrackIdSystem.js +1 -1
  75. package/dist/gdprEnforcement.js +1 -1
  76. package/dist/glimpseBidAdapter.js +1 -1
  77. package/dist/globalsunBidAdapter.js +1 -1
  78. package/dist/gmosspBidAdapter.js +1 -1
  79. package/dist/gnetBidAdapter.js +1 -1
  80. package/dist/goldbachBidAdapter.js +1 -1
  81. package/dist/gravitoIdSystem.js +1 -1
  82. package/dist/greenbidsAnalyticsAdapter.js +1 -0
  83. package/dist/gridBidAdapter.js +1 -1
  84. package/dist/gridNMBidAdapter.js +1 -1
  85. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  86. package/dist/growthCodeIdSystem.js +1 -1
  87. package/dist/gumgumBidAdapter.js +1 -1
  88. package/dist/h12mediaBidAdapter.js +1 -1
  89. package/dist/hadronAnalyticsAdapter.js +1 -1
  90. package/dist/hadronIdSystem.js +1 -1
  91. package/dist/hadronRtdProvider.js +1 -1
  92. package/dist/id5IdSystem.js +1 -1
  93. package/dist/idWardRtdProvider.js +1 -1
  94. package/dist/identityLinkIdSystem.js +1 -1
  95. package/dist/idxIdSystem.js +1 -1
  96. package/dist/imRtdProvider.js +1 -1
  97. package/dist/impactifyBidAdapter.js +1 -1
  98. package/dist/improvedigitalBidAdapter.js +1 -1
  99. package/dist/imuIdSystem.js +1 -1
  100. package/dist/inmarBidAdapter.js +1 -1
  101. package/dist/insticatorBidAdapter.js +1 -1
  102. package/dist/intentIqIdSystem.js +1 -1
  103. package/dist/invibesBidAdapter.js +1 -1
  104. package/dist/iqzoneBidAdapter.js +1 -1
  105. package/dist/ivsBidAdapter.js +1 -0
  106. package/dist/ixBidAdapter.js +1 -1
  107. package/dist/jixieBidAdapter.js +1 -1
  108. package/dist/justpremiumBidAdapter.js +1 -1
  109. package/dist/jwplayerVideoProvider.js +1 -1
  110. package/dist/kargoBidAdapter.js +1 -1
  111. package/dist/koblerBidAdapter.js +1 -1
  112. package/dist/konduitAnalyticsAdapter.js +1 -1
  113. package/dist/kueezBidAdapter.js +1 -1
  114. package/dist/kueezRtbBidAdapter.js +1 -1
  115. package/dist/kulturemediaBidAdapter.js +1 -1
  116. package/dist/lassoBidAdapter.js +1 -1
  117. package/dist/lifestreetBidAdapter.js +1 -1
  118. package/dist/liveIntentIdSystem.js +1 -1
  119. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  120. package/dist/logicadBidAdapter.js +1 -1
  121. package/dist/loglyliftBidAdapter.js +1 -1
  122. package/dist/lotamePanoramaIdSystem.js +1 -1
  123. package/dist/luponmediaBidAdapter.js +1 -1
  124. package/dist/magniteAnalyticsAdapter.js +1 -1
  125. package/dist/malltvAnalyticsAdapter.js +1 -1
  126. package/dist/marsmediaBidAdapter.js +1 -1
  127. package/dist/mathildeadsBidAdapter.js +1 -1
  128. package/dist/mediafuseBidAdapter.js +1 -1
  129. package/dist/mediagoBidAdapter.js +1 -1
  130. package/dist/mediakeysBidAdapter.js +1 -1
  131. package/dist/medianetBidAdapter.js +1 -1
  132. package/dist/mediasquareBidAdapter.js +1 -1
  133. package/dist/merkleIdSystem.js +1 -1
  134. package/dist/mgidBidAdapter.js +1 -1
  135. package/dist/mgidRtdProvider.js +1 -1
  136. package/dist/minutemediaBidAdapter.js +1 -1
  137. package/dist/minutemediaplusBidAdapter.js +1 -1
  138. package/dist/mwOpenLinkIdSystem.js +1 -1
  139. package/dist/naveggIdSystem.js +1 -1
  140. package/dist/nexx360BidAdapter.js +1 -1
  141. package/dist/nobidBidAdapter.js +1 -1
  142. package/dist/not-for-prod/prebid.js +232 -227
  143. package/dist/novatiqIdSystem.js +1 -1
  144. package/dist/oguryBidAdapter.js +1 -1
  145. package/dist/onetagBidAdapter.js +1 -1
  146. package/dist/onomagicBidAdapter.js +1 -1
  147. package/dist/ooloAnalyticsAdapter.js +1 -1
  148. package/dist/openxBidAdapter.js +1 -1
  149. package/dist/openxOrtbBidAdapter.js +1 -1
  150. package/dist/operaadsBidAdapter.js +1 -1
  151. package/dist/optidigitalBidAdapter.js +1 -1
  152. package/dist/ortbConverter.js +1 -1
  153. package/dist/outbrainBidAdapter.js +1 -1
  154. package/dist/parrableIdSystem.js +1 -1
  155. package/dist/permutiveRtdProvider.js +1 -1
  156. package/dist/pixfutureBidAdapter.js +1 -1
  157. package/dist/prebid-core.js +1 -1
  158. package/dist/prebidServerBidAdapter.js +1 -1
  159. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  160. package/dist/pubCommonId.js +1 -1
  161. package/dist/publinkIdSystem.js +1 -1
  162. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  163. package/dist/pubmaticBidAdapter.js +1 -1
  164. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  165. package/dist/pubxBidAdapter.js +1 -1
  166. package/dist/pxyzBidAdapter.js +1 -1
  167. package/dist/quantcastBidAdapter.js +1 -1
  168. package/dist/quantcastIdSystem.js +1 -1
  169. package/dist/readpeakBidAdapter.js +1 -1
  170. package/dist/realvuAnalyticsAdapter.js +1 -1
  171. package/dist/relaidoBidAdapter.js +1 -1
  172. package/dist/rhythmoneBidAdapter.js +1 -1
  173. package/dist/riseBidAdapter.js +1 -1
  174. package/dist/roxotAnalyticsAdapter.js +1 -1
  175. package/dist/rtbhouseBidAdapter.js +1 -1
  176. package/dist/rtdModule.js +1 -1
  177. package/dist/rubiconAnalyticsAdapter.js +1 -1
  178. package/dist/rubiconBidAdapter.js +1 -1
  179. package/dist/seedingAllianceBidAdapter.js +1 -1
  180. package/dist/seedtagBidAdapter.js +1 -1
  181. package/dist/sharedIdSystem.js +1 -1
  182. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  183. package/dist/sharethroughBidAdapter.js +1 -1
  184. package/dist/shinezBidAdapter.js +1 -1
  185. package/dist/sigmoidAnalyticsAdapter.js +1 -1
  186. package/dist/smaatoBidAdapter.js +1 -1
  187. package/dist/smartadserverBidAdapter.js +1 -1
  188. package/dist/smarthubBidAdapter.js +1 -1
  189. package/dist/smartxBidAdapter.js +1 -1
  190. package/dist/smilewantedBidAdapter.js +1 -1
  191. package/dist/sonobiBidAdapter.js +1 -1
  192. package/dist/sovrnAnalyticsAdapter.js +1 -1
  193. package/dist/sovrnBidAdapter.js +1 -1
  194. package/dist/sspBCBidAdapter.js +1 -1
  195. package/dist/staqAnalyticsAdapter.js +1 -1
  196. package/dist/stroeerCoreBidAdapter.js +1 -1
  197. package/dist/stvBidAdapter.js +1 -1
  198. package/dist/sublimeBidAdapter.js +1 -1
  199. package/dist/synacormediaBidAdapter.js +1 -1
  200. package/dist/taboolaBidAdapter.js +1 -1
  201. package/dist/targetVideoBidAdapter.js +1 -1
  202. package/dist/teadsBidAdapter.js +1 -1
  203. package/dist/teadsIdSystem.js +1 -1
  204. package/dist/trionBidAdapter.js +1 -1
  205. package/dist/tripleliftBidAdapter.js +1 -1
  206. package/dist/truereachBidAdapter.js +1 -1
  207. package/dist/trustpidSystem.js +1 -1
  208. package/dist/ttdBidAdapter.js +1 -1
  209. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  210. package/dist/uid2IdSystem.js +1 -1
  211. package/dist/underdogmediaBidAdapter.js +1 -1
  212. package/dist/undertoneBidAdapter.js +1 -1
  213. package/dist/userId.js +1 -1
  214. package/dist/validationFpdModule.js +1 -1
  215. package/dist/vidazooBidAdapter.js +1 -1
  216. package/dist/videobyteBidAdapter.js +1 -1
  217. package/dist/videoheroesBidAdapter.js +1 -1
  218. package/dist/vidoomyBidAdapter.js +1 -1
  219. package/dist/visiblemeasuresBidAdapter.js +1 -1
  220. package/dist/visxBidAdapter.js +1 -1
  221. package/dist/vrtcalBidAdapter.js +1 -1
  222. package/dist/vuukleBidAdapter.js +1 -1
  223. package/dist/weboramaRtdProvider.js +1 -1
  224. package/dist/widespaceBidAdapter.js +1 -1
  225. package/dist/winrBidAdapter.js +1 -1
  226. package/dist/yahoosspBidAdapter.js +1 -1
  227. package/dist/yieldmoBidAdapter.js +1 -1
  228. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  229. package/dist/yieldoneBidAdapter.js +1 -1
  230. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  231. package/dist/zeotapIdPlusIdSystem.js +1 -1
  232. package/dist/zeta_global_sspBidAdapter.js +1 -1
  233. package/libraries/domainOverrideToRootDomain/index.js +39 -0
  234. package/libraries/ortbConverter/converter.js +3 -2
  235. package/modules/33acrossIdSystem.js +5 -2
  236. package/modules/acuityAdsBidAdapter.js +1 -1
  237. package/modules/adagioBidAdapter.js +3 -4
  238. package/modules/adkernelAdnAnalyticsAdapter.js +4 -2
  239. package/modules/admixerIdSystem.js +4 -2
  240. package/modules/adnuntiusBidAdapter.js +1 -1
  241. package/modules/adqueryBidAdapter.js +1 -1
  242. package/modules/adqueryIdSystem.js +2 -1
  243. package/modules/adrinoBidAdapter.js +24 -16
  244. package/modules/adriverIdSystem.js +3 -2
  245. package/modules/adsinteractiveBidAdapter.js +144 -0
  246. package/modules/adsinteractiveBidAdapter.md +31 -0
  247. package/modules/adyoulikeBidAdapter.js +2 -3
  248. package/modules/aidemBidAdapter.js +5 -0
  249. package/modules/airgridRtdProvider.js +4 -2
  250. package/modules/ajaBidAdapter.js +38 -16
  251. package/modules/akamaiDapRtdProvider.js +2 -1
  252. package/modules/amxBidAdapter.js +12 -10
  253. package/modules/amxIdSystem.js +23 -20
  254. package/modules/amxIdSystem.md +7 -7
  255. package/modules/appnexusBidAdapter.js +8 -8
  256. package/modules/appushBidAdapter.js +1 -1
  257. package/modules/apstreamBidAdapter.js +1 -1
  258. package/modules/atsAnalyticsAdapter.js +4 -2
  259. package/modules/audiencerunBidAdapter.js +9 -10
  260. package/modules/bedigitechBidAdapter.js +67 -0
  261. package/modules/bedigitechBidAdapter.md +32 -0
  262. package/modules/beyondmediaBidAdapter.js +1 -1
  263. package/modules/bluebillywigBidAdapter.js +2 -4
  264. package/modules/blueconicRtdProvider.js +2 -1
  265. package/modules/braveBidAdapter.js +1 -1
  266. package/modules/brightcomBidAdapter.js +1 -2
  267. package/modules/brightcomSSPBidAdapter.js +1 -2
  268. package/modules/browsiRtdProvider.js +4 -2
  269. package/modules/byDataAnalyticsAdapter.js +6 -3
  270. package/modules/coinzillaBidAdapter.js +1 -2
  271. package/modules/compassBidAdapter.js +1 -1
  272. package/modules/concertBidAdapter.js +14 -7
  273. package/modules/connectIdSystem.js +96 -21
  274. package/modules/connectIdSystem.md +6 -5
  275. package/modules/connectadBidAdapter.js +2 -4
  276. package/modules/contentexchangeBidAdapter.js +1 -1
  277. package/modules/craftBidAdapter.js +29 -24
  278. package/modules/criteoBidAdapter.js +4 -2
  279. package/modules/criteoIdSystem.js +6 -2
  280. package/modules/czechAdIdSystem.js +3 -2
  281. package/modules/dacIdSystem.js +4 -3
  282. package/modules/deepintentDpesIdSystem.js +3 -2
  283. package/modules/discoveryBidAdapter.js +1 -1
  284. package/modules/dspxBidAdapter.js +223 -15
  285. package/modules/fintezaAnalyticsAdapter.js +5 -3
  286. package/modules/fledgeForGpt.js +54 -6
  287. package/modules/freewheel-sspBidAdapter.js +8 -0
  288. package/modules/ftrackIdSystem.js +6 -6
  289. package/modules/gdprEnforcement.js +56 -68
  290. package/modules/glimpseBidAdapter.js +2 -6
  291. package/modules/globalsunBidAdapter.js +1 -1
  292. package/modules/gnetBidAdapter.js +1 -2
  293. package/modules/gravitoIdSystem.js +5 -3
  294. package/modules/greenbidsAnalyticsAdapter.js +181 -0
  295. package/modules/greenbidsAnalyticsAdapter.md +23 -0
  296. package/modules/gridBidAdapter.js +14 -8
  297. package/modules/gridNMBidAdapter.js +1 -1
  298. package/modules/growthCodeAnalyticsAdapter.js +3 -2
  299. package/modules/growthCodeIdSystem.js +21 -17
  300. package/modules/gumgumBidAdapter.js +8 -18
  301. package/modules/hadronAnalyticsAdapter.js +5 -3
  302. package/modules/hadronIdSystem.js +3 -1
  303. package/modules/hadronRtdProvider.js +4 -2
  304. package/modules/id5IdSystem.js +4 -2
  305. package/modules/idWardRtdProvider.js +2 -1
  306. package/modules/identityLinkIdSystem.js +5 -2
  307. package/modules/idxIdSystem.js +3 -2
  308. package/modules/imRtdProvider.js +3 -1
  309. package/modules/impactifyBidAdapter.js +2 -4
  310. package/modules/imuIdSystem.js +6 -3
  311. package/modules/insticatorBidAdapter.js +1 -1
  312. package/modules/intentIqIdSystem.js +3 -2
  313. package/modules/invibesBidAdapter.js +1 -1
  314. package/modules/iqzoneBidAdapter.js +1 -1
  315. package/modules/ivsBidAdapter.js +85 -0
  316. package/modules/ivsBidAdapter.md +34 -0
  317. package/modules/ixBidAdapter.js +43 -106
  318. package/modules/jixieBidAdapter.js +3 -6
  319. package/modules/jwplayerVideoProvider.js +25 -32
  320. package/modules/kargoBidAdapter.js +1 -1
  321. package/modules/koblerBidAdapter.js +1 -2
  322. package/modules/kueezBidAdapter.js +1 -1
  323. package/modules/kueezRtbBidAdapter.js +1 -1
  324. package/modules/liveIntentIdSystem.js +11 -2
  325. package/modules/lotamePanoramaIdSystem.js +3 -2
  326. package/modules/luponmediaBidAdapter.js +1 -1
  327. package/modules/magniteAnalyticsAdapter.js +101 -9
  328. package/modules/mathildeadsBidAdapter.js +1 -1
  329. package/modules/mediafuseBidAdapter.js +1 -1
  330. package/modules/mediagoBidAdapter.js +1 -1
  331. package/modules/mediakeysBidAdapter.js +2 -3
  332. package/modules/medianetBidAdapter.js +1 -1
  333. package/modules/merkleIdSystem.js +2 -1
  334. package/modules/mgidBidAdapter.js +179 -27
  335. package/modules/mgidRtdProvider.js +3 -1
  336. package/modules/minutemediaBidAdapter.js +1 -1
  337. package/modules/minutemediaplusBidAdapter.js +1 -1
  338. package/modules/mwOpenLinkIdSystem.js +3 -2
  339. package/modules/naveggIdSystem.js +3 -2
  340. package/modules/nexx360BidAdapter.js +0 -1
  341. package/modules/nobidBidAdapter.js +1 -1
  342. package/modules/novatiqIdSystem.js +6 -3
  343. package/modules/oguryBidAdapter.js +3 -2
  344. package/modules/onetagBidAdapter.js +1 -1
  345. package/modules/onomagicBidAdapter.js +1 -2
  346. package/modules/openxBidAdapter.js +192 -563
  347. package/modules/openxBidAdapter.md +22 -20
  348. package/modules/openxOrtbBidAdapter.js +24 -10
  349. package/modules/openxOrtbBidAdapter.md +11 -8
  350. package/modules/operaadsBidAdapter.js +1 -1
  351. package/modules/parrableIdSystem.js +4 -2
  352. package/modules/permutiveRtdProvider.js +2 -1
  353. package/modules/prebidServerBidAdapter/index.js +9 -3
  354. package/modules/prebidServerBidAdapter/ortbConverter.js +12 -2
  355. package/modules/prebidmanagerAnalyticsAdapter.js +3 -2
  356. package/modules/pubCommonId.js +6 -3
  357. package/modules/publinkIdSystem.js +2 -1
  358. package/modules/pubmaticAnalyticsAdapter.js +12 -1
  359. package/modules/pubmaticBidAdapter.js +193 -223
  360. package/modules/pubwiseAnalyticsAdapter.js +5 -3
  361. package/modules/pubxBidAdapter.js +5 -2
  362. package/modules/quantcastBidAdapter.js +1 -1
  363. package/modules/quantcastIdSystem.js +5 -3
  364. package/modules/realvuAnalyticsAdapter.js +6 -3
  365. package/modules/riseBidAdapter.js +1 -1
  366. package/modules/roxotAnalyticsAdapter.js +5 -2
  367. package/modules/rtbhouseBidAdapter.js +5 -3
  368. package/modules/rtdModule/index.js +3 -0
  369. package/modules/rubiconAnalyticsAdapter.js +3 -2
  370. package/modules/rubiconBidAdapter.js +1 -0
  371. package/modules/sharedIdSystem.js +16 -36
  372. package/modules/sharethroughBidAdapter.js +2 -3
  373. package/modules/shinezBidAdapter.js +1 -1
  374. package/modules/sigmoidAnalyticsAdapter.js +4 -2
  375. package/modules/smartadserverBidAdapter.js +2 -3
  376. package/modules/smarthubBidAdapter.js +1 -1
  377. package/modules/sovrnBidAdapter.js +2 -3
  378. package/modules/staqAnalyticsAdapter.js +5 -3
  379. package/modules/stroeerCoreBidAdapter.js +3 -2
  380. package/modules/synacormediaBidAdapter.js +1 -3
  381. package/modules/taboolaBidAdapter.js +4 -2
  382. package/modules/teadsBidAdapter.js +1 -1
  383. package/modules/teadsIdSystem.js +2 -1
  384. package/modules/tripleliftBidAdapter.js +1 -1
  385. package/modules/truereachBidAdapter.js +1 -2
  386. package/modules/trustpidSystem.js +3 -2
  387. package/modules/ttdBidAdapter.js +11 -5
  388. package/modules/uid2IdSystem.js +3 -2
  389. package/modules/undertoneBidAdapter.js +1 -0
  390. package/modules/userId/eids.js +18 -0
  391. package/modules/userId/eids.md +16 -0
  392. package/modules/userId/index.js +5 -2
  393. package/modules/validationFpdModule/index.js +3 -2
  394. package/modules/vidazooBidAdapter.js +14 -5
  395. package/modules/videoheroesBidAdapter.js +1 -1
  396. package/modules/vidoomyBidAdapter.js +51 -2
  397. package/modules/visiblemeasuresBidAdapter.js +1 -1
  398. package/modules/vrtcalBidAdapter.js +1 -1
  399. package/modules/weboramaRtdProvider.js +3 -1
  400. package/modules/yieldmoBidAdapter.js +2 -3
  401. package/modules/yieldoneBidAdapter.js +1 -1
  402. package/modules/yuktamediaAnalyticsAdapter.js +4 -2
  403. package/modules/zeotapIdPlusIdSystem.js +3 -2
  404. package/modules/zeta_global_sspBidAdapter.js +3 -0
  405. package/package.json +1 -1
  406. package/plugins/eslint/validateImports.js +13 -14
  407. package/plugins/pbjsGlobals.js +3 -1
  408. package/src/Renderer.js +2 -1
  409. package/src/activities/modules.js +5 -0
  410. package/src/adapterManager.js +4 -8
  411. package/src/adapters/bidderFactory.js +30 -16
  412. package/src/consentHandler.js +42 -0
  413. package/src/native.js +5 -1
  414. package/src/refererDetection.js +39 -21
  415. package/src/secureCreatives.js +2 -2
  416. package/src/storageManager.js +33 -47
  417. package/src/userSync.js +7 -4
  418. package/test/spec/auctionmanager_spec.js +2 -2
  419. package/test/spec/libraries/domainOverrideToRootDomain/index_spec.js +77 -0
  420. package/test/spec/modules/33acrossIdSystem_spec.js +1 -1
  421. package/test/spec/modules/acuityAdsBidAdapter_spec.js +2 -1
  422. package/test/spec/modules/adagioBidAdapter_spec.js +11 -17
  423. package/test/spec/modules/admixerIdSystem_spec.js +0 -3
  424. package/test/spec/modules/adnuntiusBidAdapter_spec.js +6 -6
  425. package/test/spec/modules/adrinoBidAdapter_spec.js +65 -34
  426. package/test/spec/modules/adsinteractiveBidAdapter_spec.js +207 -0
  427. package/test/spec/modules/adyoulikeBidAdapter_spec.js +13 -11
  428. package/test/spec/modules/aidemBidAdapter_spec.js +72 -8
  429. package/test/spec/modules/amxBidAdapter_spec.js +4 -1
  430. package/test/spec/modules/amxIdSystem_spec.js +13 -26
  431. package/test/spec/modules/appushBidAdapter_spec.js +2 -1
  432. package/test/spec/modules/atsAnalyticsAdapter_spec.js +2 -2
  433. package/test/spec/modules/audiencerunBidAdapter_spec.js +8 -11
  434. package/test/spec/modules/bedigitechBidAdapter_spec.js +145 -0
  435. package/test/spec/modules/beyondmediaBidAdapter_spec.js +2 -1
  436. package/test/spec/modules/bluebillywigBidAdapter_spec.js +1 -3
  437. package/test/spec/modules/compassBidAdapter_spec.js +2 -1
  438. package/test/spec/modules/concertBidAdapter_spec.js +3 -8
  439. package/test/spec/modules/connectIdSystem_spec.js +420 -242
  440. package/test/spec/modules/connectadBidAdapter_spec.js +11 -3
  441. package/test/spec/modules/contentexchangeBidAdapter_spec.js +2 -1
  442. package/test/spec/modules/criteoBidAdapter_spec.js +29 -0
  443. package/test/spec/modules/criteoIdSystem_spec.js +38 -0
  444. package/test/spec/modules/datablocksBidAdapter_spec.js +0 -1
  445. package/test/spec/modules/dspxBidAdapter_spec.js +184 -13
  446. package/test/spec/modules/eids_spec.js +30 -0
  447. package/test/spec/modules/fledge_spec.js +173 -2
  448. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +37 -0
  449. package/test/spec/modules/gdprEnforcement_spec.js +134 -164
  450. package/test/spec/modules/globalsunBidAdapter_spec.js +2 -1
  451. package/test/spec/modules/greenbidsAnalyticsAdapter_spec.js +418 -0
  452. package/test/spec/modules/gridBidAdapter_spec.js +9 -5
  453. package/test/spec/modules/growthCodeIdSystem_spec.js +2 -1
  454. package/test/spec/modules/id5IdSystem_spec.js +41 -4
  455. package/test/spec/modules/identityLinkIdSystem_spec.js +2 -2
  456. package/test/spec/modules/improvedigitalBidAdapter_spec.js +10 -3
  457. package/test/spec/modules/iqzoneBidAdapter_spec.js +2 -1
  458. package/test/spec/modules/ivsBidAdapter_spec.js +197 -0
  459. package/test/spec/modules/ixBidAdapter_spec.js +84 -71
  460. package/test/spec/modules/jixieBidAdapter_spec.js +42 -60
  461. package/test/spec/modules/koblerBidAdapter_spec.js +0 -20
  462. package/test/spec/modules/liveIntentIdSystem_spec.js +10 -0
  463. package/test/spec/modules/luponmediaBidAdapter_spec.js +1 -1
  464. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +129 -1
  465. package/test/spec/modules/mathildeadsBidAdapter_spec.js +2 -1
  466. package/test/spec/modules/mediakeysBidAdapter_spec.js +12 -16
  467. package/test/spec/modules/mgidBidAdapter_spec.js +184 -36
  468. package/test/spec/modules/oguryBidAdapter_spec.js +19 -4
  469. package/test/spec/modules/openxBidAdapter_spec.js +1157 -1936
  470. package/test/spec/modules/openxOrtbBidAdapter_spec.js +108 -50
  471. package/test/spec/modules/prebidServerBidAdapter_spec.js +68 -2
  472. package/test/spec/modules/publinkIdSystem_spec.js +3 -2
  473. package/test/spec/modules/pubmaticBidAdapter_spec.js +67 -10
  474. package/test/spec/modules/pubxBidAdapter_spec.js +10 -2
  475. package/test/spec/modules/realTimeDataModule_spec.js +22 -0
  476. package/test/spec/modules/realvuAnalyticsAdapter_spec.js +0 -1
  477. package/test/spec/modules/relaidoBidAdapter_spec.js +5 -5
  478. package/test/spec/modules/rubiconBidAdapter_spec.js +2 -1
  479. package/test/spec/modules/sharedIdSystem_spec.js +0 -46
  480. package/test/spec/modules/sharethroughBidAdapter_spec.js +99 -22
  481. package/test/spec/modules/smartadserverBidAdapter_spec.js +74 -12
  482. package/test/spec/modules/smarthubBidAdapter_spec.js +2 -1
  483. package/test/spec/modules/sovrnBidAdapter_spec.js +25 -6
  484. package/test/spec/modules/stroeerCoreBidAdapter_spec.js +13 -18
  485. package/test/spec/modules/synacormediaBidAdapter_spec.js +0 -26
  486. package/test/spec/modules/taboolaBidAdapter_spec.js +101 -0
  487. package/test/spec/modules/ttdBidAdapter_spec.js +25 -7
  488. package/test/spec/modules/userId_spec.js +68 -0
  489. package/test/spec/modules/vidazooBidAdapter_spec.js +13 -0
  490. package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +17 -4
  491. package/test/spec/modules/vidoomyBidAdapter_spec.js +68 -0
  492. package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +2 -1
  493. package/test/spec/modules/vrtcalBidAdapter_spec.js +3 -2
  494. package/test/spec/modules/yieldmoBidAdapter_spec.js +18 -2
  495. package/test/spec/modules/zeotapIdPlusIdSystem_spec.js +3 -2
  496. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +8 -0
  497. package/test/spec/refererDetection_spec.js +56 -1
  498. package/test/spec/renderer_spec.js +1 -2
  499. package/test/spec/unit/core/adapterManager_spec.js +21 -58
  500. package/test/spec/unit/core/bidderFactory_spec.js +28 -10
  501. package/test/spec/unit/core/consentHandler_spec.js +29 -1
  502. package/test/spec/unit/core/storageManager_spec.js +31 -21
  503. package/test/spec/userSync_spec.js +2 -1
@@ -11,7 +11,13 @@ import {getHook} from '../src/hook.js';
11
11
  import {validateStorageEnforcement} from '../src/storageManager.js';
12
12
  import * as events from '../src/events.js';
13
13
  import CONSTANTS from '../src/constants.json';
14
- import {VENDORLESS_GVLID} from '../src/consentHandler.js';
14
+ import {GDPR_GVLIDS, VENDORLESS_GVLID} from '../src/consentHandler.js';
15
+ import {
16
+ MODULE_TYPE_ANALYTICS,
17
+ MODULE_TYPE_BIDDER,
18
+ MODULE_TYPE_CORE, MODULE_TYPE_RTD,
19
+ MODULE_TYPE_UID
20
+ } from '../src/activities/modules.js';
15
21
 
16
22
  export const STRICT_STORAGE_ENFORCEMENT = 'strictStorageEnforcement';
17
23
 
@@ -49,77 +55,56 @@ const analyticsBlocked = [];
49
55
  let hooksAdded = false;
50
56
  let strictStorageEnforcement = false;
51
57
 
52
- // Helps in stubbing these functions in unit tests.
53
- export const internal = {
54
- getGvlidForBidAdapter,
55
- getGvlidForUserIdModule,
56
- getGvlidForAnalyticsAdapter
57
- };
58
+ const GVLID_LOOKUP_PRIORITY = [
59
+ MODULE_TYPE_BIDDER,
60
+ MODULE_TYPE_UID,
61
+ MODULE_TYPE_ANALYTICS,
62
+ MODULE_TYPE_RTD
63
+ ];
58
64
 
59
65
  /**
60
- * Returns GVL ID for a Bid adapter / an USERID submodule / an Analytics adapter.
61
- * If modules of different types have the same moduleCode: For example, 'appnexus' is the code for both Bid adapter and Analytics adapter,
62
- * then, we assume that their GVL IDs are same. This function first checks if GVL ID is defined for a Bid adapter, if not found, tries to find User ID
63
- * submodule's GVL ID, if not found, tries to find Analytics adapter's GVL ID. In this process, as soon as it finds a GVL ID, it returns it
64
- * without going to the next check.
65
- * @param {{string|Object}} - module
66
- * @return {number} - GVL ID
66
+ * Retrieve a module's GVL ID.
67
67
  */
68
- export function getGvlid(module, ...args) {
69
- let gvlid = null;
70
- if (module) {
68
+ export function getGvlid(moduleType, moduleName, fallbackFn) {
69
+ if (moduleName) {
71
70
  // Check user defined GVL Mapping in pbjs.setConfig()
72
71
  const gvlMapping = config.getConfig('gvlMapping');
73
72
 
74
- // For USER ID Module, we pass the submodule object itself as the "module" parameter, this check is required to grab the module code
75
- const moduleCode = typeof module === 'string' ? module : module.name;
76
-
77
73
  // Return GVL ID from user defined gvlMapping
78
- if (gvlMapping && gvlMapping[moduleCode]) {
79
- gvlid = gvlMapping[moduleCode];
80
- return gvlid;
81
- }
82
-
83
- gvlid = internal.getGvlidForBidAdapter(moduleCode) || internal.getGvlidForUserIdModule(module) || internal.getGvlidForAnalyticsAdapter(moduleCode, ...args);
84
- }
85
- return gvlid;
86
- }
87
-
88
- /**
89
- * Returns GVL ID for a bid adapter. If the adapter does not have an associated GVL ID, it returns 'null'.
90
- * @param {string=} bidderCode - The 'code' property of the Bidder spec.
91
- * @return {number} GVL ID
92
- */
93
- function getGvlidForBidAdapter(bidderCode) {
94
- let gvlid = null;
95
- bidderCode = bidderCode || config.getCurrentBidder();
96
- if (bidderCode) {
97
- const bidder = adapterManager.getBidAdapter(bidderCode);
98
- if (bidder && bidder.getSpec) {
99
- gvlid = bidder.getSpec().gvlid;
74
+ if (gvlMapping && gvlMapping[moduleName]) {
75
+ return gvlMapping[moduleName];
76
+ } else if (moduleType === MODULE_TYPE_CORE) {
77
+ return VENDORLESS_GVLID;
78
+ } else {
79
+ let {gvlid, modules} = GDPR_GVLIDS.get(moduleName);
80
+ if (gvlid == null && Object.keys(modules).length > 0) {
81
+ // this behavior is for backwards compatibility; if multiple modules with the same
82
+ // name declare different GVL IDs, pick the bidder's first, then userId, then analytics
83
+ for (const type of GVLID_LOOKUP_PRIORITY) {
84
+ if (modules.hasOwnProperty(type)) {
85
+ gvlid = modules[type];
86
+ if (type !== moduleType && !fallbackFn) {
87
+ logWarn(`Multiple GVL IDs found for module '${moduleName}'; using the ${type} module's ID (${gvlid}) instead of the ${moduleType}'s ID (${modules[moduleType]})`)
88
+ }
89
+ break;
90
+ }
91
+ }
92
+ }
93
+ if (gvlid == null && fallbackFn) {
94
+ gvlid = fallbackFn();
95
+ }
96
+ return gvlid || null;
100
97
  }
101
98
  }
102
- return gvlid;
103
- }
104
-
105
- /**
106
- * Returns GVL ID for an userId submodule. If an userId submodules does not have an associated GVL ID, it returns 'null'.
107
- * @param {Object} userIdModule
108
- * @return {number} GVL ID
109
- */
110
- function getGvlidForUserIdModule(userIdModule) {
111
- return (typeof userIdModule === 'object' ? userIdModule.gvlid : null);
99
+ return null;
112
100
  }
113
101
 
114
102
  /**
115
- * Returns GVL ID for an analytics adapter. If an analytics adapter does not have an associated GVL ID, it returns 'null'.
116
- * @param {string} code - 'provider' property on the analytics adapter config
117
- * @param {{}} config - analytics configuration object
118
- * @return {number} GVL ID
103
+ * Retrieve GVL IDs that are dynamically set on analytics adapters.
119
104
  */
120
- function getGvlidForAnalyticsAdapter(code, config) {
105
+ export function getGvlidFromAnalyticsAdapter(code, config) {
121
106
  const adapter = adapterManager.getAnalyticsAdapter(code);
122
- return adapter?.gvlid || ((gvlid) => {
107
+ return ((gvlid) => {
123
108
  if (typeof gvlid !== 'function') return gvlid;
124
109
  try {
125
110
  return gvlid.call(adapter.adapter, config);
@@ -185,30 +170,33 @@ export function validateRules(rule, consentData, currentModule, gvlId) {
185
170
 
186
171
  /**
187
172
  * This hook checks whether module has permission to access device or not. Device access include cookie and local storage
173
+ *
188
174
  * @param {Function} fn reference to original function (used by hook logic)
189
- * @param {Number=} gvlid gvlid of the module
175
+ * @param {string} moduleType type of the module
190
176
  * @param {string=} moduleName name of the module
191
177
  * @param result
178
+ * @param validate
192
179
  */
193
- export function deviceAccessHook(fn, gvlid, moduleName, result, {validate = validateRules} = {}) {
180
+ export function deviceAccessHook(fn, moduleType, moduleName, result, {validate = validateRules} = {}) {
194
181
  result = Object.assign({}, {
195
182
  hasEnforcementHook: true
196
183
  });
197
184
  if (!hasDeviceAccess()) {
198
185
  logWarn('Device access is disabled by Publisher');
199
186
  result.valid = false;
200
- } else if (gvlid === VENDORLESS_GVLID && !strictStorageEnforcement) {
187
+ } else if (moduleType === MODULE_TYPE_CORE && !strictStorageEnforcement) {
201
188
  // for vendorless (core) storage, do not enforce rules unless strictStorageEnforcement is set
202
189
  result.valid = true;
203
190
  } else {
204
191
  const consentData = gdprDataHandler.getConsentData();
192
+ let gvlid;
205
193
  if (shouldEnforce(consentData, 1, moduleName)) {
206
194
  const curBidder = config.getCurrentBidder();
207
195
  // Bidders have a copy of storage object with bidder code binded. Aliases will also pass the same bidder code when invoking storage functions and hence if alias tries to access device we will try to grab the gvl id for alias instead of original bidder
208
196
  if (curBidder && (curBidder !== moduleName) && adapterManager.aliasRegistry[curBidder] === moduleName) {
209
- gvlid = getGvlid(curBidder);
197
+ gvlid = getGvlid(moduleType, curBidder);
210
198
  } else {
211
- gvlid = getGvlid(moduleName) || gvlid;
199
+ gvlid = getGvlid(moduleType, moduleName)
212
200
  }
213
201
  const curModule = moduleName || curBidder;
214
202
  let isAllowed = validate(purpose1Rule, consentData, curModule, gvlid,);
@@ -223,7 +211,7 @@ export function deviceAccessHook(fn, gvlid, moduleName, result, {validate = vali
223
211
  result.valid = true;
224
212
  }
225
213
  }
226
- fn.call(this, gvlid, moduleName, result);
214
+ fn.call(this, moduleType, moduleName, result);
227
215
  }
228
216
 
229
217
  /**
@@ -235,7 +223,7 @@ export function userSyncHook(fn, ...args) {
235
223
  const consentData = gdprDataHandler.getConsentData();
236
224
  const curBidder = config.getCurrentBidder();
237
225
  if (shouldEnforce(consentData, 1, curBidder)) {
238
- const gvlid = getGvlid(curBidder);
226
+ const gvlid = getGvlid(MODULE_TYPE_BIDDER, curBidder);
239
227
  let isAllowed = validateRules(purpose1Rule, consentData, curBidder, gvlid);
240
228
  if (isAllowed) {
241
229
  fn.call(this, ...args);
@@ -257,8 +245,8 @@ export function userSyncHook(fn, ...args) {
257
245
  export function userIdHook(fn, submodules, consentData) {
258
246
  if (shouldEnforce(consentData, 1, 'User ID')) {
259
247
  let userIdModules = submodules.map((submodule) => {
260
- const gvlid = getGvlid(submodule.submodule);
261
248
  const moduleName = submodule.submodule.name;
249
+ const gvlid = getGvlid(MODULE_TYPE_UID, moduleName);
262
250
  let isAllowed = validateRules(purpose1Rule, consentData, moduleName, gvlid);
263
251
  if (isAllowed) {
264
252
  return submodule;
@@ -286,7 +274,7 @@ export function makeBidRequestsHook(fn, adUnits, ...args) {
286
274
  adUnits.forEach(adUnit => {
287
275
  adUnit.bids = adUnit.bids.filter(bid => {
288
276
  const currBidder = bid.bidder;
289
- const gvlId = getGvlid(currBidder);
277
+ const gvlId = getGvlid(MODULE_TYPE_BIDDER, currBidder);
290
278
  if (includes(biddersBlocked, currBidder)) return false;
291
279
  const isAllowed = !!validateRules(purpose2Rule, consentData, currBidder, gvlId);
292
280
  if (!isAllowed) {
@@ -316,7 +304,7 @@ export function enableAnalyticsHook(fn, config) {
316
304
  }
317
305
  config = config.filter(conf => {
318
306
  const analyticsAdapterCode = conf.provider;
319
- const gvlid = getGvlid(analyticsAdapterCode, conf);
307
+ const gvlid = getGvlid(MODULE_TYPE_ANALYTICS, analyticsAdapterCode, () => getGvlidFromAnalyticsAdapter(analyticsAdapterCode, conf));
320
308
  const isAllowed = !!validateRules(purpose7Rule, consentData, analyticsAdapterCode, gvlid);
321
309
  if (!isAllowed) {
322
310
  analyticsBlocked.push(analyticsAdapterCode);
@@ -1,5 +1,4 @@
1
1
  import { registerBidder } from '../src/adapters/bidderFactory.js';
2
- import { config } from '../src/config.js';
3
2
  import { BANNER } from '../src/mediaTypes.js';
4
3
  import { getStorageManager } from '../src/storageManager.js';
5
4
  import {
@@ -12,10 +11,7 @@ import {
12
11
 
13
12
  const GVLID = 1012;
14
13
  const BIDDER_CODE = 'glimpse';
15
- const storageManager = getStorageManager({
16
- gvlid: GVLID,
17
- bidderCode: BIDDER_CODE,
18
- });
14
+ const storageManager = getStorageManager({bidderCode: BIDDER_CODE});
19
15
  const ENDPOINT = 'https://market.glimpsevault.io/public/v1/prebid';
20
16
  const LOCAL_STORAGE_KEY = {
21
17
  vault: {
@@ -102,7 +98,7 @@ function getReferer(bidderRequest) {
102
98
  function buildQuery(bidderRequest) {
103
99
  let url = appendQueryParam(ENDPOINT, 'ver', '$prebid.version$');
104
100
 
105
- const timeout = config.getConfig('bidderTimeout');
101
+ const timeout = bidderRequest.timeout;
106
102
  url = appendQueryParam(url, 'tmax', timeout);
107
103
 
108
104
  if (gdprApplies(bidderRequest)) {
@@ -155,7 +155,7 @@ export const spec = {
155
155
  coppa: config.getConfig('coppa') === true ? 1 : 0,
156
156
  ccpa: bidderRequest.uspConsent || undefined,
157
157
  gdpr: bidderRequest.gdprConsent || undefined,
158
- tmax: config.getConfig('bidderTimeout')
158
+ tmax: bidderRequest.timeout
159
159
  };
160
160
 
161
161
  const len = validBidRequests.length;
@@ -4,10 +4,9 @@ import { BANNER } from '../src/mediaTypes.js';
4
4
  import { getStorageManager } from '../src/storageManager.js';
5
5
  import {ajax} from '../src/ajax.js';
6
6
 
7
- const storage = getStorageManager();
8
-
9
7
  const BIDDER_CODE = 'gnet';
10
8
  const ENDPOINT = 'https://service.gnetrtb.com/api';
9
+ const storage = getStorageManager({bidderCode: BIDDER_CODE});
11
10
 
12
11
  export const spec = {
13
12
  code: BIDDER_CODE,
@@ -6,9 +6,11 @@
6
6
  */
7
7
 
8
8
  import { submodule } from '../src/hook.js';
9
- import { getStorageManager } from '../src/storageManager.js';
9
+ import {getStorageManager} from '../src/storageManager.js';
10
+ import {MODULE_TYPE_UID} from '../src/activities/modules.js';
10
11
 
11
- export const storage = getStorageManager();
12
+ const MODULE_NAME = 'gravitompId';
13
+ export const storage = getStorageManager({moduleType: MODULE_TYPE_UID, moduleName: MODULE_NAME});
12
14
 
13
15
  export const cookieKey = 'gravitompId';
14
16
 
@@ -17,7 +19,7 @@ export const gravitoIdSystemSubmodule = {
17
19
  * used to link submodule with config
18
20
  * @type {string}
19
21
  */
20
- name: 'gravitompId',
22
+ name: MODULE_NAME,
21
23
 
22
24
  /**
23
25
  * performs action to obtain id
@@ -0,0 +1,181 @@
1
+ import {ajax} from '../src/ajax.js';
2
+ import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
3
+ import CONSTANTS from '../src/constants.json';
4
+ import adapterManager from '../src/adapterManager.js';
5
+ import {deepClone, logError, logInfo} from '../src/utils.js';
6
+
7
+ const analyticsType = 'endpoint';
8
+
9
+ export const ANALYTICS_VERSION = '1.0.0';
10
+
11
+ const ANALYTICS_SERVER = 'https://europe-west2-greenbids-357713.cloudfunctions.net/publisher-analytics-endpoint';
12
+
13
+ const {
14
+ EVENTS: {
15
+ AUCTION_END,
16
+ BID_TIMEOUT,
17
+ }
18
+ } = CONSTANTS;
19
+
20
+ export const BIDDER_STATUS = {
21
+ BID: 'bid',
22
+ NO_BID: 'noBid',
23
+ TIMEOUT: 'timeout'
24
+ };
25
+
26
+ const analyticsOptions = {};
27
+
28
+ export const parseBidderCode = function (bid) {
29
+ let bidderCode = bid.bidderCode || bid.bidder;
30
+ return bidderCode.toLowerCase();
31
+ };
32
+
33
+ export const greenbidsAnalyticsAdapter = Object.assign(adapter({ANALYTICS_SERVER, analyticsType}), {
34
+
35
+ cachedAuctions: {},
36
+
37
+ initConfig(config) {
38
+ /**
39
+ * Required option: pbuid
40
+ * @type {boolean}
41
+ */
42
+ analyticsOptions.options = deepClone(config.options);
43
+ if (typeof config.options.pbuid !== 'string' || config.options.pbuid.length < 1) {
44
+ logError('"options.pbuid" is required.');
45
+ return false;
46
+ }
47
+ analyticsOptions.sampled = true;
48
+ if (typeof config.options.sampling === 'number') {
49
+ analyticsOptions.sampled = Math.random() < parseFloat(config.options.sampling);
50
+ }
51
+
52
+ analyticsOptions.pbuid = config.options.pbuid
53
+ analyticsOptions.server = ANALYTICS_SERVER;
54
+ return true;
55
+ },
56
+ sendEventMessage(endPoint, data) {
57
+ logInfo(`AJAX: ${endPoint}: ` + JSON.stringify(data));
58
+
59
+ ajax(`${analyticsOptions.server}${endPoint}`, null, JSON.stringify(data), {
60
+ contentType: 'application/json'
61
+ });
62
+ },
63
+ createCommonMessage(auctionId) {
64
+ return {
65
+ version: ANALYTICS_VERSION,
66
+ auctionId: auctionId,
67
+ referrer: window.location.href,
68
+ sampling: analyticsOptions.options.sampling,
69
+ prebid: '$prebid.version$',
70
+ pbuid: analyticsOptions.pbuid,
71
+ adUnits: [],
72
+ };
73
+ },
74
+ serializeBidResponse(bid, status) {
75
+ return {
76
+ bidder: bid.bidder,
77
+ isTimeout: (status === BIDDER_STATUS.TIMEOUT),
78
+ hasBid: (status === BIDDER_STATUS.BID),
79
+ };
80
+ },
81
+ addBidResponseToMessage(message, bid, status) {
82
+ const adUnitCode = bid.adUnitCode.toLowerCase();
83
+ const adUnitIndex = message.adUnits.findIndex((adUnit) => {
84
+ return adUnit.code === adUnitCode;
85
+ });
86
+ if (adUnitIndex === -1) {
87
+ logError('Trying to add to non registered adunit');
88
+ return;
89
+ }
90
+ const bidderIndex = message.adUnits[adUnitIndex].bidders.findIndex((bidder) => {
91
+ return bidder.bidder === bid.bidder;
92
+ });
93
+ if (bidderIndex === -1) {
94
+ message.adUnits[adUnitIndex].bidders.push(this.serializeBidResponse(bid, status));
95
+ } else {
96
+ if (status === BIDDER_STATUS.BID) {
97
+ message.adUnits[adUnitIndex].bidders[bidderIndex].hasBid = true;
98
+ } else if (status === BIDDER_STATUS.TIMEOUT) {
99
+ message.adUnits[adUnitIndex].bidders[bidderIndex].isTimeout = true;
100
+ }
101
+ }
102
+ },
103
+ createBidMessage(auctionEndArgs, timeoutBids) {
104
+ logInfo(auctionEndArgs)
105
+ const {auctionId, timestamp, auctionEnd, adUnits, bidsReceived, noBids} = auctionEndArgs;
106
+ const message = this.createCommonMessage(auctionId);
107
+
108
+ message.auctionElapsed = (auctionEnd - timestamp);
109
+
110
+ adUnits.forEach((adUnit) => {
111
+ const adUnitCode = adUnit.code.toLowerCase();
112
+ message.adUnits.push({
113
+ code: adUnitCode,
114
+ mediaTypes: {
115
+ ...(adUnit.mediaTypes.banner !== undefined) && {banner: adUnit.mediaTypes.banner},
116
+ ...(adUnit.mediaTypes.video !== undefined) && {video: adUnit.mediaTypes.video},
117
+ ...(adUnit.mediaTypes.native !== undefined) && {native: adUnit.mediaTypes.native}
118
+ },
119
+ bidders: [],
120
+ });
121
+ });
122
+
123
+ // We enrich noBid then bids, then timeouts, because in case of a timeout, one response from a bidder
124
+ // Can be in the 3 arrays, and we want that case reflected in the call
125
+ noBids.forEach(bid => this.addBidResponseToMessage(message, bid, BIDDER_STATUS.NO_BID));
126
+
127
+ bidsReceived.forEach(bid => this.addBidResponseToMessage(message, bid, BIDDER_STATUS.BID));
128
+
129
+ timeoutBids.forEach(bid => this.addBidResponseToMessage(message, bid, BIDDER_STATUS.TIMEOUT));
130
+
131
+ return message;
132
+ },
133
+ getCachedAuction(auctionId) {
134
+ this.cachedAuctions[auctionId] = this.cachedAuctions[auctionId] || {
135
+ timeoutBids: [],
136
+ };
137
+ return this.cachedAuctions[auctionId];
138
+ },
139
+ handleAuctionEnd(auctionEndArgs) {
140
+ const cachedAuction = this.getCachedAuction(auctionEndArgs.auctionId);
141
+ this.sendEventMessage('/',
142
+ this.createBidMessage(auctionEndArgs, cachedAuction.timeoutBids)
143
+ );
144
+ },
145
+ handleBidTimeout(timeoutBids) {
146
+ timeoutBids.forEach((bid) => {
147
+ const cachedAuction = this.getCachedAuction(bid.auctionId);
148
+ cachedAuction.timeoutBids.push(bid);
149
+ });
150
+ },
151
+ track({eventType, args}) {
152
+ if (analyticsOptions.sampled) {
153
+ switch (eventType) {
154
+ case BID_TIMEOUT:
155
+ this.handleBidTimeout(args);
156
+ break;
157
+ case AUCTION_END:
158
+ this.handleAuctionEnd(args);
159
+ break;
160
+ }
161
+ }
162
+ },
163
+ getAnalyticsOptions() {
164
+ return analyticsOptions;
165
+ },
166
+ });
167
+
168
+ greenbidsAnalyticsAdapter.originEnableAnalytics = greenbidsAnalyticsAdapter.enableAnalytics;
169
+
170
+ greenbidsAnalyticsAdapter.enableAnalytics = function(config) {
171
+ this.initConfig(config);
172
+ logInfo('loading greenbids analytics');
173
+ greenbidsAnalyticsAdapter.originEnableAnalytics(config);
174
+ };
175
+
176
+ adapterManager.registerAnalyticsAdapter({
177
+ adapter: greenbidsAnalyticsAdapter,
178
+ code: 'greenbids'
179
+ });
180
+
181
+ export default greenbidsAnalyticsAdapter;
@@ -0,0 +1,23 @@
1
+ # Overview
2
+
3
+ ```
4
+ Module Name: Greenbids Analytics Adapter
5
+ Module Type: Analytics Adapter
6
+ Maintainer: jb@greenbids.ai
7
+ ```
8
+
9
+ # Description
10
+
11
+ Analytics adapter for Greenbids
12
+
13
+ # Test Parameters
14
+
15
+ ```
16
+ {
17
+ provider: 'greenbids',
18
+ options: {
19
+ pbuid: "PBUID_FROM_GREENBIDS"
20
+ sampling: 1.0
21
+ }
22
+ }
23
+ ```
@@ -31,7 +31,7 @@ const TIME_TO_LIVE = 360;
31
31
  const USER_ID_KEY = 'tmguid';
32
32
  const GVLID = 686;
33
33
  const RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js';
34
- export const storage = getStorageManager({gvlid: GVLID, bidderCode: BIDDER_CODE});
34
+ export const storage = getStorageManager({bidderCode: BIDDER_CODE});
35
35
 
36
36
  const LOG_ERROR_MESS = {
37
37
  noAuid: 'Bid from response has no auid parameter - ',
@@ -93,7 +93,7 @@ export const spec = {
93
93
  let {bidderRequestId, auctionId, gdprConsent, uspConsent, timeout, refererInfo, gppConsent} = bidderRequest || {};
94
94
 
95
95
  const referer = refererInfo ? encodeURIComponent(refererInfo.page) : '';
96
- const tmax = timeout || config.getConfig('bidderTimeout');
96
+ const tmax = timeout;
97
97
  const imp = [];
98
98
  const bidsMap = {};
99
99
  const requests = [];
@@ -145,12 +145,18 @@ export const spec = {
145
145
  if (ortb2Imp.instl) {
146
146
  impObj.instl = ortb2Imp.instl;
147
147
  }
148
- if (ortb2Imp.ext && ortb2Imp.ext.data) {
149
- impObj.ext.data = ortb2Imp.ext.data;
150
- if (impObj.ext.data.adserver && impObj.ext.data.adserver.adslot) {
151
- impObj.ext.gpid = impObj.ext.data.adserver.adslot.toString();
152
- } else {
153
- impObj.ext.gpid = ortb2Imp.ext.data.pbadslot && ortb2Imp.ext.data.pbadslot.toString();
148
+
149
+ if (ortb2Imp.ext) {
150
+ if (ortb2Imp.ext.data) {
151
+ impObj.ext.data = ortb2Imp.ext.data;
152
+ if (impObj.ext.data.adserver && impObj.ext.data.adserver.adslot) {
153
+ impObj.ext.gpid = impObj.ext.data.adserver.adslot.toString();
154
+ } else if (ortb2Imp.ext.data.pbadslot) {
155
+ impObj.ext.gpid = ortb2Imp.ext.data.pbadslot.toString();
156
+ }
157
+ }
158
+ if (ortb2Imp.ext.gpid) {
159
+ impObj.ext.gpid = ortb2Imp.ext.gpid.toString();
154
160
  }
155
161
  }
156
162
  }
@@ -135,7 +135,7 @@ export const spec = {
135
135
  reqSource.ext.schain = schain;
136
136
  }
137
137
 
138
- const bidderTimeout = config.getConfig('bidderTimeout') || timeout;
138
+ const bidderTimeout = timeout;
139
139
  const tmax = timeout ? Math.min(bidderTimeout, timeout) : bidderTimeout;
140
140
 
141
141
  const request = {
@@ -6,15 +6,16 @@ import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
6
6
  import adapterManager from '../src/adapterManager.js';
7
7
  import * as utils from '../src/utils.js';
8
8
  import CONSTANTS from '../src/constants.json';
9
- import { getStorageManager } from '../src/storageManager.js';
9
+ import {getStorageManager} from '../src/storageManager.js';
10
10
  import {getRefererInfo} from '../src/refererDetection.js';
11
11
  import {logError, logInfo} from '../src/utils.js';
12
+ import {MODULE_TYPE_ANALYTICS} from '../src/activities/modules.js';
12
13
 
13
14
  const MODULE_NAME = 'growthCodeAnalytics';
14
15
  const DEFAULT_PID = 'INVALID_PID'
15
16
  const ENDPOINT_URL = 'https://p2.gcprivacy.com/v1/pb/analytics'
16
17
 
17
- export const storage = getStorageManager();
18
+ export const storage = getStorageManager({moduleType: MODULE_TYPE_ANALYTICS, moduleName: MODULE_NAME});
18
19
 
19
20
  let sessionId = utils.generateUUID();
20
21
 
@@ -8,14 +8,15 @@
8
8
  import {logError, logInfo, tryAppendQueryString} from '../src/utils.js';
9
9
  import {ajax} from '../src/ajax.js';
10
10
  import { submodule } from '../src/hook.js'
11
- import { getStorageManager } from '../src/storageManager.js';
11
+ import {getStorageManager} from '../src/storageManager.js';
12
+ import {MODULE_TYPE_UID} from '../src/activities/modules.js';
12
13
 
13
- const GCID_EXPIRY = 7;
14
14
  const MODULE_NAME = 'growthCodeId';
15
15
  const GC_DATA_KEY = '_gc_data';
16
+ const GCID_KEY = 'gcid';
16
17
  const ENDPOINT_URL = 'https://p2.gcprivacy.com/v1/pb?'
17
18
 
18
- export const storage = getStorageManager({ gvlid: undefined, moduleName: MODULE_NAME });
19
+ export const storage = getStorageManager({ moduleType: MODULE_TYPE_UID, moduleName: MODULE_NAME });
19
20
 
20
21
  /**
21
22
  * Read GrowthCode data from cookie or local storage
@@ -25,14 +26,16 @@ export const storage = getStorageManager({ gvlid: undefined, moduleName: MODULE_
25
26
  export function readData(key) {
26
27
  try {
27
28
  let payload
28
- if (storage.cookiesAreEnabled()) {
29
- payload = tryParse(storage.getCookie(key))
29
+ if (storage.cookiesAreEnabled(null)) {
30
+ payload = tryParse(storage.getCookie(key, null))
30
31
  }
31
32
  if (storage.hasLocalStorage()) {
32
- payload = tryParse(storage.getDataFromLocalStorage(key))
33
+ payload = tryParse(storage.getDataFromLocalStorage(key, null))
33
34
  }
34
- if ((payload.expire_at !== undefined) && (payload.expire_at > (Date.now() / 1000))) {
35
- return payload
35
+ if (payload !== undefined) {
36
+ if (payload.expire_at > (Date.now() / 1000)) {
37
+ return payload
38
+ }
36
39
  }
37
40
  } catch (error) {
38
41
  logError(error);
@@ -50,12 +53,8 @@ function storeData(key, value) {
50
53
  logInfo(MODULE_NAME + ': storing data: key=' + key + ' value=' + value);
51
54
 
52
55
  if (value) {
53
- if (storage.hasLocalStorage()) {
54
- storage.setDataInLocalStorage(key, value);
55
- }
56
- const expiresStr = (new Date(Date.now() + (GCID_EXPIRY * (60 * 60 * 24 * 1000)))).toUTCString();
57
- if (storage.cookiesAreEnabled()) {
58
- storage.setCookie(key, value, expiresStr, 'LAX');
56
+ if (storage.hasLocalStorage(null)) {
57
+ storage.setDataInLocalStorage(key, value, null);
59
58
  }
60
59
  }
61
60
  } catch (error) {
@@ -69,11 +68,15 @@ function storeData(key, value) {
69
68
  * @param {object|null}
70
69
  */
71
70
  function tryParse(data) {
71
+ let payload;
72
72
  try {
73
- return JSON.parse(data);
73
+ payload = JSON.parse(data);
74
+ if (payload == null) {
75
+ return undefined
76
+ }
77
+ return payload
74
78
  } catch (err) {
75
- logError(err);
76
- return null;
79
+ return undefined;
77
80
  }
78
81
  }
79
82
 
@@ -149,6 +152,7 @@ export const growthCodeIdSubmodule = {
149
152
  // If response is a valid json and should save is true
150
153
  if (respJson) {
151
154
  storeData(GC_DATA_KEY, JSON.stringify(respJson))
155
+ storeData(GCID_KEY, respJson.gc_id);
152
156
  callback(respJson);
153
157
  } else {
154
158
  callback();