prebid.js 8.43.0 → 8.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 (501) hide show
  1. package/README.md +7 -1
  2. package/creative/constants.js +7 -7
  3. package/creative/renderers/display/constants.js +2 -2
  4. package/creative/renderers/native/constants.js +2 -2
  5. package/dist/33acrossAnalyticsAdapter.js +1 -1
  6. package/dist/33acrossBidAdapter.js +1 -1
  7. package/dist/33acrossIdSystem.js +1 -1
  8. package/dist/BTBidAdapter.js +1 -1
  9. package/dist/adWMGAnalyticsAdapter.js +1 -1
  10. package/dist/adagioAnalyticsAdapter.js +1 -1
  11. package/dist/adagioBidAdapter.js +1 -1
  12. package/dist/adbookpspBidAdapter.js +1 -1
  13. package/dist/adgenerationBidAdapter.js +1 -1
  14. package/dist/adkernelAdnAnalyticsAdapter.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/adnuntiusBidAdapter.js +1 -1
  20. package/dist/adomikAnalyticsAdapter.js +1 -1
  21. package/dist/adpod.js +1 -1
  22. package/dist/adqueryBidAdapter.js +1 -1
  23. package/dist/adrelevantisBidAdapter.js +1 -1
  24. package/dist/adstirBidAdapter.js +1 -1
  25. package/dist/adtrgtmeBidAdapter.js +1 -1
  26. package/dist/adxcgAnalyticsAdapter.js +1 -1
  27. package/dist/adxcgBidAdapter.js +1 -1
  28. package/dist/adxpremiumAnalyticsAdapter.js +1 -1
  29. package/dist/adyoulikeBidAdapter.js +1 -1
  30. package/dist/agmaAnalyticsAdapter.js +1 -1
  31. package/dist/ajaBidAdapter.js +1 -1
  32. package/dist/amxBidAdapter.js +1 -1
  33. package/dist/amxIdSystem.js +1 -1
  34. package/dist/analyticsAdapter.js +1 -1
  35. package/dist/appierAnalyticsAdapter.js +1 -1
  36. package/dist/appnexusBidAdapter.js +1 -1
  37. package/dist/asoBidAdapter.js +1 -1
  38. package/dist/asteriobidAnalyticsAdapter.js +1 -1
  39. package/dist/atsAnalyticsAdapter.js +1 -1
  40. package/dist/automatadAnalyticsAdapter.js +1 -1
  41. package/dist/axonixBidAdapter.js +1 -1
  42. package/dist/bidViewability.js +1 -1
  43. package/dist/bidViewabilityIO.js +1 -1
  44. package/dist/bidglassBidAdapter.js +1 -1
  45. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  46. package/dist/big-richmediaBidAdapter.js +1 -1
  47. package/dist/brandmetricsRtdProvider.js +1 -1
  48. package/dist/bridBidAdapter.js +1 -1
  49. package/dist/bridgewellBidAdapter.js +1 -1
  50. package/dist/brightMountainMediaBidAdapter.js +1 -1
  51. package/dist/browsiRtdProvider.js +1 -1
  52. package/dist/byDataAnalyticsAdapter.js +1 -1
  53. package/dist/carodaBidAdapter.js +1 -1
  54. package/dist/chtnwBidAdapter.js +1 -1
  55. package/dist/chunk-core.js +1 -1
  56. package/dist/chunk-paapi.js +1 -1
  57. package/dist/cleanioRtdProvider.js +1 -1
  58. package/dist/concertAnalyticsAdapter.js +1 -1
  59. package/dist/concertBidAdapter.js +1 -1
  60. package/dist/confiantRtdProvider.js +1 -1
  61. package/dist/connectadBidAdapter.js +1 -1
  62. package/dist/consentManagementUsp.js +1 -1
  63. package/dist/consumableBidAdapter.js +1 -1
  64. package/dist/conversantAnalyticsAdapter.js +1 -1
  65. package/dist/conversantBidAdapter.js +1 -1
  66. package/dist/craftBidAdapter.js +1 -1
  67. package/dist/creative-renderer-native.js +1 -1
  68. package/dist/criteoBidAdapter.js +1 -1
  69. package/dist/currency.js +1 -1
  70. package/dist/cwireBidAdapter.js +1 -1
  71. package/dist/dailymotionBidAdapter.js +1 -0
  72. package/dist/datablocksAnalyticsAdapter.js +1 -1
  73. package/dist/datawrkzBidAdapter.js +1 -1
  74. package/dist/debugging-standalone.js +1 -1
  75. package/dist/debugging.js +1 -1
  76. package/dist/dependencies.json +3 -3
  77. package/dist/dfpAdServerVideo.js +1 -1
  78. package/dist/discoveryBidAdapter.js +1 -1
  79. package/dist/dsaControl.js +1 -1
  80. package/dist/dspxBidAdapter.js +1 -1
  81. package/dist/dxkultureBidAdapter.js +1 -1
  82. package/dist/eplanningAnalyticsAdapter.js +1 -1
  83. package/dist/eplanningBidAdapter.js +1 -1
  84. package/dist/euidIdSystem.js +1 -1
  85. package/dist/feedadBidAdapter.js +1 -1
  86. package/dist/finativeBidAdapter.js +1 -1
  87. package/dist/fintezaAnalyticsAdapter.js +1 -1
  88. package/dist/freewheel-sspBidAdapter.js +1 -1
  89. package/dist/gdprEnforcement.js +1 -1
  90. package/dist/genericAnalyticsAdapter.js +1 -1
  91. package/dist/geoedgeRtdProvider.js +1 -1
  92. package/dist/gmosspBidAdapter.js +1 -1
  93. package/dist/goldbachBidAdapter.js +1 -1
  94. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  95. package/dist/greenbidsRtdProvider.js +1 -1
  96. package/dist/gridBidAdapter.js +1 -1
  97. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  98. package/dist/gumgumBidAdapter.js +1 -1
  99. package/dist/h12mediaBidAdapter.js +1 -1
  100. package/dist/hadronAnalyticsAdapter.js +1 -1
  101. package/dist/holidBidAdapter.js +1 -1
  102. package/dist/hypelabBidAdapter.js +1 -1
  103. package/dist/id5AnalyticsAdapter.js +1 -1
  104. package/dist/id5IdSystem.js +1 -1
  105. package/dist/illuminBidAdapter.js +1 -1
  106. package/dist/imdsBidAdapter.js +1 -1
  107. package/dist/improvedigitalBidAdapter.js +1 -1
  108. package/dist/insticatorBidAdapter.js +1 -1
  109. package/dist/instreamTracking.js +1 -1
  110. package/dist/invisiblyAnalyticsAdapter.js +1 -1
  111. package/dist/ixBidAdapter.js +1 -1
  112. package/dist/jixieBidAdapter.js +1 -1
  113. package/dist/justpremiumBidAdapter.js +1 -1
  114. package/dist/jwplayerRtdProvider.js +1 -1
  115. package/dist/kargoAnalyticsAdapter.js +1 -1
  116. package/dist/kargoBidAdapter.js +1 -1
  117. package/dist/kimberliteBidAdapter.js +1 -1
  118. package/dist/konduitAnalyticsAdapter.js +1 -1
  119. package/dist/kueezBidAdapter.js +1 -1
  120. package/dist/kueezRtbBidAdapter.js +1 -1
  121. package/dist/lassoBidAdapter.js +1 -1
  122. package/dist/lifestreetBidAdapter.js +1 -1
  123. package/dist/limelightDigitalBidAdapter.js +1 -1
  124. package/dist/liveIntentAnalyticsAdapter.js +1 -1
  125. package/dist/liveIntentIdSystem.js +1 -1
  126. package/dist/livewrappedAnalyticsAdapter.js +1 -1
  127. package/dist/logicadBidAdapter.js +1 -1
  128. package/dist/loglyliftBidAdapter.js +1 -1
  129. package/dist/loyalBidAdapter.js +1 -0
  130. package/dist/luceadBidAdapter.js +1 -1
  131. package/dist/magniteAnalyticsAdapter.js +1 -1
  132. package/dist/malltvAnalyticsAdapter.js +1 -1
  133. package/dist/marsmediaAnalyticsAdapter.js +1 -1
  134. package/dist/marsmediaBidAdapter.js +1 -1
  135. package/dist/mediafilterRtdProvider.js +1 -1
  136. package/dist/mediafuseBidAdapter.js +1 -1
  137. package/dist/medianetAnalyticsAdapter.js +1 -1
  138. package/dist/medianetBidAdapter.js +1 -1
  139. package/dist/mediasquareBidAdapter.js +1 -1
  140. package/dist/mgidBidAdapter.js +1 -1
  141. package/dist/minutemediaBidAdapter.js +1 -1
  142. package/dist/minutemediaplusBidAdapter.js +1 -1
  143. package/dist/missenaBidAdapter.js +1 -1
  144. package/dist/multibid.js +1 -1
  145. package/dist/neuwoRtdProvider.js +1 -1
  146. package/dist/nextMillenniumBidAdapter.js +1 -1
  147. package/dist/nexx360BidAdapter.js +1 -1
  148. package/dist/nobidAnalyticsAdapter.js +1 -1
  149. package/dist/not-for-prod/prebid.js +242 -239
  150. package/dist/oguryBidAdapter.js +1 -1
  151. package/dist/onetagBidAdapter.js +1 -1
  152. package/dist/ooloAnalyticsAdapter.js +1 -1
  153. package/dist/openwebBidAdapter.js +1 -1
  154. package/dist/openxBidAdapter.js +1 -1
  155. package/dist/optidigitalBidAdapter.js +1 -1
  156. package/dist/optimonAnalyticsAdapter.js +1 -1
  157. package/dist/outbrainBidAdapter.js +1 -1
  158. package/dist/oxxionAnalyticsAdapter.js +1 -1
  159. package/dist/oxxionRtdProvider.js +1 -1
  160. package/dist/parrableIdSystem.js +1 -1
  161. package/dist/pbsExtensions.js +1 -1
  162. package/dist/permutiveRtdProvider.js +1 -1
  163. package/dist/pgamsspBidAdapter.js +1 -1
  164. package/dist/pianoDmpAnalyticsAdapter.js +1 -1
  165. package/dist/pirIdSystem.js +1 -0
  166. package/dist/pixfutureBidAdapter.js +1 -1
  167. package/dist/prebidServerBidAdapter.js +1 -1
  168. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  169. package/dist/priceFloors.js +1 -1
  170. package/dist/publinkIdSystem.js +1 -1
  171. package/dist/publirBidAdapter.js +1 -1
  172. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  173. package/dist/pubmaticBidAdapter.js +1 -1
  174. package/dist/pubperfAnalyticsAdapter.js +1 -1
  175. package/dist/pubstackAnalyticsAdapter.js +1 -1
  176. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  177. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  178. package/dist/pulsepointAnalyticsAdapter.js +1 -1
  179. package/dist/pxyzBidAdapter.js +1 -1
  180. package/dist/qortexRtdProvider.js +1 -1
  181. package/dist/quantcastBidAdapter.js +1 -1
  182. package/dist/readpeakBidAdapter.js +1 -1
  183. package/dist/relaidoBidAdapter.js +1 -1
  184. package/dist/relevantAnalyticsAdapter.js +1 -1
  185. package/dist/retailspotBidAdapter.js +1 -1
  186. package/dist/rhythmoneBidAdapter.js +1 -1
  187. package/dist/riseBidAdapter.js +1 -1
  188. package/dist/rivrAnalyticsAdapter.js +1 -1
  189. package/dist/roxotAnalyticsAdapter.js +1 -1
  190. package/dist/rtdModule.js +1 -1
  191. package/dist/rubiconBidAdapter.js +1 -1
  192. package/dist/s2sTesting.js +1 -1
  193. package/dist/scaleableAnalyticsAdapter.js +1 -1
  194. package/dist/schain.js +1 -1
  195. package/dist/seedingAllianceBidAdapter.js +1 -1
  196. package/dist/seedtagBidAdapter.js +1 -1
  197. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  198. package/dist/sharethroughBidAdapter.js +1 -1
  199. package/dist/shinezBidAdapter.js +1 -1
  200. package/dist/shinezRtbBidAdapter.js +1 -1
  201. package/dist/sigmoidAnalyticsAdapter.js +1 -1
  202. package/dist/sirdataRtdProvider.js +1 -1
  203. package/dist/sizeMapping.js +1 -1
  204. package/dist/smaatoBidAdapter.js +1 -1
  205. package/dist/smartadserverBidAdapter.js +1 -1
  206. package/dist/smartxBidAdapter.js +1 -1
  207. package/dist/smilewantedBidAdapter.js +1 -1
  208. package/dist/sonobiAnalyticsAdapter.js +1 -1
  209. package/dist/sonobiBidAdapter.js +1 -1
  210. package/dist/sovrnAnalyticsAdapter.js +1 -1
  211. package/dist/sovrnBidAdapter.js +1 -1
  212. package/dist/sspBCBidAdapter.js +1 -1
  213. package/dist/staqAnalyticsAdapter.js +1 -1
  214. package/dist/stnBidAdapter.js +1 -1
  215. package/dist/stvBidAdapter.js +1 -1
  216. package/dist/sublimeBidAdapter.js +1 -1
  217. package/dist/taboolaBidAdapter.js +1 -1
  218. package/dist/tagorasBidAdapter.js +1 -1
  219. package/dist/targetVideoBidAdapter.js +1 -1
  220. package/dist/teadsBidAdapter.js +1 -1
  221. package/dist/terceptAnalyticsAdapter.js +1 -1
  222. package/dist/themoneytizerBidAdapter.js +1 -1
  223. package/dist/topicsFpdModule.js +1 -1
  224. package/dist/trionBidAdapter.js +1 -1
  225. package/dist/tripleliftBidAdapter.js +1 -1
  226. package/dist/ttdBidAdapter.js +1 -1
  227. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  228. package/dist/uid2IdSystem.js +1 -1
  229. package/dist/underdogmediaBidAdapter.js +1 -1
  230. package/dist/undertoneBidAdapter.js +1 -1
  231. package/dist/unrulyBidAdapter.js +1 -1
  232. package/dist/userId.js +1 -1
  233. package/dist/vidazooBidAdapter.js +1 -1
  234. package/dist/videoModule.js +1 -1
  235. package/dist/videobyteBidAdapter.js +1 -1
  236. package/dist/visxBidAdapter.js +1 -1
  237. package/dist/vuukleBidAdapter.js +1 -1
  238. package/dist/weboramaRtdProvider.js +1 -1
  239. package/dist/widespaceBidAdapter.js +1 -1
  240. package/dist/winrBidAdapter.js +1 -1
  241. package/dist/yahoosspBidAdapter.js +1 -1
  242. package/dist/yandexAnalyticsAdapter.js +1 -1
  243. package/dist/yieldmoBidAdapter.js +1 -1
  244. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  245. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  246. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  247. package/dist/zeta_global_sspBidAdapter.js +1 -1
  248. package/gulpfile.js +9 -1
  249. package/integrationExamples/gpt/adnuntius_example.html +7 -1
  250. package/integrationExamples/gpt/azerionedgeRtdProvider_example.html +3 -3
  251. package/integrationExamples/gpt/top-level-paapi/decisionLogic.js +57 -0
  252. package/integrationExamples/gpt/top-level-paapi/tl_paapi_example.html +188 -0
  253. package/integrationExamples/gpt/x-domain/creative.html +1 -1
  254. package/integrationExamples/{gpt → realTimeData}/jwplayerRtdProvider_example.html +28 -42
  255. package/libraries/analyticsAdapter/AnalyticsAdapter.js +4 -4
  256. package/libraries/creative-renderer-native/renderer.js +1 -1
  257. package/modules/33acrossAnalyticsAdapter.js +2 -4
  258. package/modules/33acrossIdSystem.js +1 -1
  259. package/modules/adWMGAnalyticsAdapter.js +9 -11
  260. package/modules/adagioAnalyticsAdapter.js +49 -46
  261. package/modules/adkernelAdnAnalyticsAdapter.js +8 -8
  262. package/modules/adkernelBidAdapter.js +23 -102
  263. package/modules/adlooxAdServerVideo.js +2 -2
  264. package/modules/adlooxAnalyticsAdapter.js +4 -4
  265. package/modules/adnuntiusBidAdapter.js +50 -32
  266. package/modules/adomikAnalyticsAdapter.js +7 -7
  267. package/modules/adpod.js +3 -3
  268. package/modules/adxcgAnalyticsAdapter.js +10 -10
  269. package/modules/adxpremiumAnalyticsAdapter.js +8 -10
  270. package/modules/agmaAnalyticsAdapter.js +6 -7
  271. package/modules/appierAnalyticsAdapter.js +5 -7
  272. package/modules/appnexusBidAdapter.js +1 -0
  273. package/modules/asteriobidAnalyticsAdapter.js +14 -14
  274. package/modules/atsAnalyticsAdapter.js +4 -4
  275. package/modules/automatadAnalyticsAdapter.js +20 -20
  276. package/modules/azerionedgeRtdProvider.md +4 -2
  277. package/modules/bidViewability.js +3 -3
  278. package/modules/bidViewabilityIO.js +3 -3
  279. package/modules/bidwatchAnalyticsAdapter.js +7 -9
  280. package/modules/brandmetricsRtdProvider.js +6 -6
  281. package/modules/browsiRtdProvider.js +3 -3
  282. package/modules/byDataAnalyticsAdapter.js +3 -3
  283. package/modules/cleanioRtdProvider.js +3 -3
  284. package/modules/concertAnalyticsAdapter.js +5 -7
  285. package/modules/confiantRtdProvider.js +2 -2
  286. package/modules/conversantAnalyticsAdapter.js +2 -4
  287. package/modules/criteoBidAdapter.js +53 -10
  288. package/modules/currency.js +7 -7
  289. package/modules/dailymotionBidAdapter.js +139 -0
  290. package/modules/dailymotionBidAdapter.md +140 -0
  291. package/modules/datawrkzBidAdapter.js +4 -4
  292. package/modules/debugging/pbsInterceptor.js +2 -2
  293. package/modules/dfpAdServerVideo.js +2 -2
  294. package/modules/discoveryBidAdapter.js +21 -0
  295. package/modules/dsaControl.js +5 -5
  296. package/modules/eplanningAnalyticsAdapter.js +8 -8
  297. package/modules/fintezaAnalyticsAdapter.js +5 -5
  298. package/modules/gdprEnforcement.js +3 -3
  299. package/modules/geoedgeRtdProvider.js +2 -2
  300. package/modules/greenbidsAnalyticsAdapter.js +13 -10
  301. package/modules/greenbidsRtdProvider.js +2 -2
  302. package/modules/gridBidAdapter.js +2 -2
  303. package/modules/growthCodeAnalyticsAdapter.js +14 -14
  304. package/modules/gumgumBidAdapter.js +4 -1
  305. package/modules/hadronAnalyticsAdapter.js +14 -14
  306. package/modules/holidBidAdapter.js +2 -2
  307. package/modules/id5AnalyticsAdapter.js +7 -9
  308. package/modules/improvedigitalBidAdapter.js +2 -1
  309. package/modules/insticatorBidAdapter.js +137 -27
  310. package/modules/instreamTracking.js +4 -4
  311. package/modules/invisiblyAnalyticsAdapter.js +15 -17
  312. package/modules/ixBidAdapter.js +3 -3
  313. package/modules/jwplayerRtdProvider.js +93 -26
  314. package/modules/jwplayerRtdProvider.md +23 -2
  315. package/modules/kargoAnalyticsAdapter.js +3 -3
  316. package/modules/kargoBidAdapter.js +26 -31
  317. package/modules/konduitAnalyticsAdapter.js +13 -13
  318. package/modules/lassoBidAdapter.js +11 -2
  319. package/modules/limelightDigitalBidAdapter.js +2 -1
  320. package/modules/liveIntentAnalyticsAdapter.js +2 -2
  321. package/modules/livewrappedAnalyticsAdapter.js +10 -10
  322. package/modules/loyalBidAdapter.js +190 -0
  323. package/modules/loyalBidAdapter.md +79 -0
  324. package/modules/magniteAnalyticsAdapter.js +25 -23
  325. package/modules/malltvAnalyticsAdapter.js +4 -6
  326. package/modules/mediafilterRtdProvider.js +2 -2
  327. package/modules/medianetAnalyticsAdapter.js +12 -12
  328. package/modules/medianetBidAdapter.js +1 -1
  329. package/modules/multibid/index.js +2 -2
  330. package/modules/neuwoRtdProvider.js +2 -2
  331. package/modules/nextMillenniumBidAdapter.js +4 -4
  332. package/modules/nobidAnalyticsAdapter.js +9 -11
  333. package/modules/ooloAnalyticsAdapter.js +2 -2
  334. package/modules/oxxionAnalyticsAdapter.js +7 -9
  335. package/modules/paapi.js +20 -6
  336. package/modules/permutiveRtdProvider.js +21 -2
  337. package/modules/pgamsspBidAdapter.js +26 -3
  338. package/modules/pirIdSystem.js +62 -0
  339. package/modules/pirIdSystem.md +27 -0
  340. package/modules/prebidServerBidAdapter/index.js +8 -8
  341. package/modules/prebidServerBidAdapter/ortbConverter.js +3 -3
  342. package/modules/prebidmanagerAnalyticsAdapter.js +14 -14
  343. package/modules/priceFloors.js +10 -5
  344. package/modules/pubmaticAnalyticsAdapter.js +32 -22
  345. package/modules/pubmaticBidAdapter.js +1 -17
  346. package/modules/pubwiseAnalyticsAdapter.js +11 -11
  347. package/modules/pubxaiAnalyticsAdapter.js +6 -6
  348. package/modules/qortexRtdProvider.js +2 -2
  349. package/modules/roxotAnalyticsAdapter.js +8 -10
  350. package/modules/rtdModule/index.js +7 -7
  351. package/modules/scaleableAnalyticsAdapter.js +5 -5
  352. package/modules/seedtagBidAdapter.js +12 -3
  353. package/modules/sigmoidAnalyticsAdapter.js +7 -7
  354. package/modules/sirdataRtdProvider.js +2 -0
  355. package/modules/smaatoBidAdapter.js +1 -2
  356. package/modules/sonobiAnalyticsAdapter.js +10 -12
  357. package/modules/sonobiBidAdapter.js +2 -5
  358. package/modules/sovrnAnalyticsAdapter.js +7 -9
  359. package/modules/sovrnBidAdapter.js +1 -1
  360. package/modules/staqAnalyticsAdapter.js +9 -9
  361. package/modules/teadsBidAdapter.js +2 -0
  362. package/modules/terceptAnalyticsAdapter.js +7 -7
  363. package/modules/topicsFpdModule.js +3 -0
  364. package/modules/topicsFpdModule.md +4 -0
  365. package/modules/ucfunnelAnalyticsAdapter.js +5 -7
  366. package/modules/userId/index.js +3 -3
  367. package/modules/videoModule/index.js +4 -4
  368. package/modules/yandexAnalyticsAdapter.js +2 -2
  369. package/modules/yieldoneAnalyticsAdapter.js +7 -7
  370. package/modules/yuktamediaAnalyticsAdapter.js +9 -9
  371. package/modules/zeta_global_sspAnalyticsAdapter.js +5 -5
  372. package/modules/zeta_global_sspBidAdapter.js +8 -1
  373. package/package.json +1 -1
  374. package/src/adRendering.js +15 -15
  375. package/src/adUnits.js +9 -21
  376. package/src/adapterManager.js +23 -13
  377. package/src/adapters/bidderFactory.js +8 -8
  378. package/src/auction.js +26 -28
  379. package/src/auctionManager.js +4 -4
  380. package/src/bidderSettings.js +2 -2
  381. package/src/config.js +2 -2
  382. package/src/constants.js +190 -0
  383. package/src/events.js +3 -3
  384. package/src/native.js +6 -8
  385. package/src/prebid.js +6 -10
  386. package/src/secureCreatives.js +5 -5
  387. package/src/targeting.js +13 -13
  388. package/src/utils.js +4 -4
  389. package/test/fixtures/fixtures.js +44 -44
  390. package/test/helpers/analytics.js +6 -6
  391. package/test/spec/AnalyticsAdapter_spec.js +3 -3
  392. package/test/spec/auctionmanager_spec.js +82 -82
  393. package/test/spec/modules/33acrossAnalyticsAdapter_spec.js +1 -2
  394. package/test/spec/modules/33acrossIdSystem_spec.js +3 -3
  395. package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +14 -14
  396. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +79 -55
  397. package/test/spec/modules/adkernelAdnAnalytics_spec.js +6 -6
  398. package/test/spec/modules/adkernelBidAdapter_spec.js +63 -24
  399. package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +6 -6
  400. package/test/spec/modules/adnuntiusBidAdapter_spec.js +10 -7
  401. package/test/spec/modules/adomikAnalyticsAdapter_spec.js +7 -7
  402. package/test/spec/modules/adxcgAnalyticsAdapter_spec.js +7 -7
  403. package/test/spec/modules/adxpremiumAnalyticsAdapter_spec.js +7 -7
  404. package/test/spec/modules/agmaAnalyticsAdapter_spec.js +18 -14
  405. package/test/spec/modules/appierAnalyticsAdapter_spec.js +1 -1
  406. package/test/spec/modules/asteriobidAnalyticsAdapter_spec.js +2 -2
  407. package/test/spec/modules/atsAnalyticsAdapter_spec.js +8 -8
  408. package/test/spec/modules/automatadAnalyticsAdapter_spec.js +2 -2
  409. package/test/spec/modules/bidViewabilityIO_spec.js +2 -2
  410. package/test/spec/modules/bidViewability_spec.js +4 -4
  411. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +7 -6
  412. package/test/spec/modules/byDataAnalyticsAdapter_spec.js +5 -4
  413. package/test/spec/modules/cleanioRtdProvider_spec.js +6 -6
  414. package/test/spec/modules/concertAnalyticsAdapter_spec.js +7 -6
  415. package/test/spec/modules/confiantRtdProvider_spec.js +2 -2
  416. package/test/spec/modules/conversantAnalyticsAdapter_spec.js +61 -61
  417. package/test/spec/modules/criteoBidAdapter_spec.js +112 -6
  418. package/test/spec/modules/currency_spec.js +6 -6
  419. package/test/spec/modules/dailymotionBidAdapter_spec.js +369 -0
  420. package/test/spec/modules/discoveryBidAdapter_spec.js +35 -1
  421. package/test/spec/modules/dsaControl_spec.js +4 -4
  422. package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +20 -13
  423. package/test/spec/modules/fintezaAnalyticsAdapter_spec.js +5 -5
  424. package/test/spec/modules/genericAnalyticsAdapter_spec.js +2 -2
  425. package/test/spec/modules/geoedgeRtdProvider_spec.js +37 -37
  426. package/test/spec/modules/greenbidsAnalyticsAdapter_spec.js +15 -2
  427. package/test/spec/modules/greenbidsRtdProvider_spec.js +2 -2
  428. package/test/spec/modules/gridBidAdapter_spec.js +3 -1
  429. package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +2 -2
  430. package/test/spec/modules/gumgumBidAdapter_spec.js +23 -0
  431. package/test/spec/modules/hadronAnalyticsAdapter_spec.js +3 -3
  432. package/test/spec/modules/id5AnalyticsAdapter_spec.js +5 -5
  433. package/test/spec/modules/id5IdSystem_spec.js +2 -2
  434. package/test/spec/modules/improvedigitalBidAdapter_spec.js +3 -3
  435. package/test/spec/modules/insticatorBidAdapter_spec.js +275 -22
  436. package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +40 -40
  437. package/test/spec/modules/jwplayerRtdProvider_spec.js +672 -29
  438. package/test/spec/modules/kargoAnalyticsAdapter_spec.js +3 -3
  439. package/test/spec/modules/kargoBidAdapter_spec.js +36 -0
  440. package/test/spec/modules/konduitAnalyticsAdapter_spec.js +13 -13
  441. package/test/spec/modules/lassoBidAdapter_spec.js +1 -0
  442. package/test/spec/modules/lemmaDigitalBidAdapter_spec.js +1 -1
  443. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +16 -1
  444. package/test/spec/modules/liveIntentAnalyticsAdapter_spec.js +3 -3
  445. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +15 -20
  446. package/test/spec/modules/loyalBidAdapter_spec .js +375 -0
  447. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +31 -15
  448. package/test/spec/modules/malltvAnalyticsAdapter_spec.js +3 -3
  449. package/test/spec/modules/mediafilterRtdProvider_spec.js +2 -2
  450. package/test/spec/modules/medianetAnalyticsAdapter_spec.js +3 -3
  451. package/test/spec/modules/nobidAnalyticsAdapter_spec.js +23 -23
  452. package/test/spec/modules/ooloAnalyticsAdapter_spec.js +33 -33
  453. package/test/spec/modules/optimonAnalyticsAdapter_spec.js +0 -1
  454. package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +7 -7
  455. package/test/spec/modules/paapi_spec.js +40 -14
  456. package/test/spec/modules/permutiveRtdProvider_spec.js +29 -1
  457. package/test/spec/modules/pgamsspBidAdapter_spec.js +50 -4
  458. package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +9 -9
  459. package/test/spec/modules/pirIdSystem_spec.js +77 -0
  460. package/test/spec/modules/prebidServerBidAdapter_spec.js +7 -7
  461. package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +2 -2
  462. package/test/spec/modules/priceFloors_spec.js +6 -5
  463. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +12 -14
  464. package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
  465. package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +0 -1
  466. package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +14 -14
  467. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +7 -7
  468. package/test/spec/modules/qortexRtdProvider_spec.js +2 -2
  469. package/test/spec/modules/realTimeDataModule_spec.js +9 -9
  470. package/test/spec/modules/relevantAnalyticsAdapter_spec.js +3 -3
  471. package/test/spec/modules/relevantdigitalBidAdapter_spec.js +2 -2
  472. package/test/spec/modules/rivrAnalyticsAdapter_spec.js +4 -4
  473. package/test/spec/modules/roxotAnalyticsAdapter_spec.js +25 -25
  474. package/test/spec/modules/scaleableAnalyticsAdapter_spec.js +5 -5
  475. package/test/spec/modules/seedtagBidAdapter_spec.js +56 -3
  476. package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +0 -1
  477. package/test/spec/modules/sonobiAnalyticsAdapter_spec.js +8 -7
  478. package/test/spec/modules/sonobiBidAdapter_spec.js +4 -6
  479. package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +2 -2
  480. package/test/spec/modules/sovrnBidAdapter_spec.js +5 -5
  481. package/test/spec/modules/staqAnalyticsAdapter_spec.js +7 -7
  482. package/test/spec/modules/teadsBidAdapter_spec.js +35 -0
  483. package/test/spec/modules/terceptAnalyticsAdapter_spec.js +7 -7
  484. package/test/spec/modules/trionBidAdapter_spec.js +1 -1
  485. package/test/spec/modules/ucfunnelAnalyticsAdapter_spec.js +1 -1
  486. package/test/spec/modules/userId_spec.js +4 -4
  487. package/test/spec/modules/videoModule/pbVideo_spec.js +3 -3
  488. package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +22 -21
  489. package/test/spec/modules/yuktamediaAnalyticsAdapter_spec.js +33 -32
  490. package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +8 -8
  491. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +1 -1
  492. package/test/spec/native_spec.js +19 -19
  493. package/test/spec/unit/adRendering_spec.js +14 -14
  494. package/test/spec/unit/adUnits_spec.js +1 -1
  495. package/test/spec/unit/core/adapterManager_spec.js +99 -59
  496. package/test/spec/unit/core/bidderFactory_spec.js +6 -6
  497. package/test/spec/unit/core/targeting_spec.js +47 -47
  498. package/test/spec/unit/pbjs_api_spec.js +81 -81
  499. package/test/spec/unit/secureCreatives_spec.js +27 -27
  500. package/test/spec/utils_spec.js +2 -2
  501. package/src/constants.json +0 -196
@@ -4,7 +4,7 @@
4
4
 
5
5
  import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
6
6
  import adapterManager from '../src/adapterManager.js';
7
- import CONSTANTS from '../src/constants.json';
7
+ import { EVENTS } from '../src/constants.js';
8
8
  import { ajax } from '../src/ajax.js';
9
9
  import { BANNER } from '../src/mediaTypes.js';
10
10
  import { getWindowTop, getWindowSelf, deepAccess, logInfo, logError } from '../src/utils.js';
@@ -12,11 +12,13 @@ import { getGlobal } from '../src/prebidGlobal.js';
12
12
 
13
13
  const emptyUrl = '';
14
14
  const analyticsType = 'endpoint';
15
- const events = Object.keys(CONSTANTS.EVENTS).map(key => CONSTANTS.EVENTS[key]);
15
+ const events = Object.keys(EVENTS).map(key => EVENTS[key]);
16
16
  const ADAGIO_GVLID = 617;
17
17
  const VERSION = '3.0.0';
18
18
  const PREBID_VERSION = '$prebid.version$';
19
19
  const ENDPOINT = 'https://c.4dex.io/pba.gif';
20
+ const CURRENCY_USD = 'USD';
21
+ const ADAGIO_CODE = 'adagio';
20
22
  const cache = {
21
23
  auctions: {},
22
24
  getAuction: function(auctionId, adUnitCode) {
@@ -92,17 +94,11 @@ function removeDuplicates(arr, getKey) {
92
94
  });
93
95
  };
94
96
 
95
- function getAdapterNameForAlias(aliasName) {
96
- return adapterManager.aliasRegistry[aliasName] || aliasName;
97
- };
98
-
99
- function isAdagio(value) {
100
- if (!value) {
97
+ function isAdagio(alias) {
98
+ if (!alias) {
101
99
  return false
102
100
  }
103
-
104
- return value.toLowerCase().includes('adagio') ||
105
- getAdapterNameForAlias(value).toLowerCase().includes('adagio');
101
+ return (alias + adapterManager.aliasRegistry[alias]).toLowerCase().includes(ADAGIO_CODE);
106
102
  };
107
103
 
108
104
  function getMediaTypeAlias(mediaType) {
@@ -129,6 +125,26 @@ function addKeyPrefix(obj, prefix) {
129
125
  }, {});
130
126
  }
131
127
 
128
+ function getUsdCpm(cpm, currency) {
129
+ let netCpm = cpm
130
+
131
+ if (typeof currency === 'string' && currency.toUpperCase() !== CURRENCY_USD) {
132
+ if (typeof getGlobal().convertCurrency === 'function') {
133
+ netCpm = parseFloat(Number(getGlobal().convertCurrency(cpm, currency, CURRENCY_USD))).toFixed(3);
134
+ } else {
135
+ netCpm = null
136
+ }
137
+ }
138
+ return netCpm
139
+ }
140
+
141
+ function getCurrencyData(bid) {
142
+ return {
143
+ netCpm: getUsdCpm(bid.cpm, bid.currency),
144
+ orginalCpm: getUsdCpm(bid.originalCpm, bid.originalCurrency)
145
+ }
146
+ }
147
+
132
148
  /**
133
149
  * sendRequest to Adagio. It filter null values and encode each query param.
134
150
  * @param {Object} qp
@@ -258,7 +274,7 @@ function handlerAuctionInit(event) {
258
274
  t_v: params.testVersion || null,
259
275
  mts: mediaTypesKeys.join(','),
260
276
  ban_szs: bannerSizes.join(','),
261
- bdrs: bidders.map(bidder => getAdapterNameForAlias(bidder.bidder)).sort().join(','),
277
+ bdrs: bidders.map(bidder => bidder.bidder).sort().join(','),
262
278
  adg_mts: adagioMediaTypes.join(',')
263
279
  };
264
280
 
@@ -299,15 +315,22 @@ function handlerAuctionEnd(event) {
299
315
 
300
316
  const adUnitCodes = cache.getAllAdUnitCodes(auctionId);
301
317
  adUnitCodes.forEach(adUnitCode => {
302
- const mapper = (bidder) => event.bidsReceived.find(bid => bid.adUnitCode === adUnitCode && bid.bidder === bidder) ? '1' : '0';
318
+ const bidResponseMapper = (bidder) => {
319
+ const bid = event.bidsReceived.find(bid => bid.adUnitCode === adUnitCode && bid.bidder === bidder)
320
+ return bid ? '1' : '0'
321
+ }
322
+ const bidCpmMapper = (bidder) => {
323
+ const bid = event.bidsReceived.find(bid => bid.adUnitCode === adUnitCode && bid.bidder === bidder)
324
+ return bid ? getCurrencyData(bid).netCpm : null
325
+ }
303
326
 
304
327
  cache.updateAuction(auctionId, adUnitCode, {
305
- bdrs_bid: cache.getBiddersFromAuction(auctionId, adUnitCode).map(mapper).join(',')
328
+ bdrs_bid: cache.getBiddersFromAuction(auctionId, adUnitCode).map(bidResponseMapper).join(','),
329
+ bdrs_cpm: cache.getBiddersFromAuction(auctionId, adUnitCode).map(bidCpmMapper).join(',')
306
330
  });
307
331
  sendNewBeacon(auctionId, adUnitCode);
308
332
  });
309
333
  }
310
-
311
334
  function handlerBidWon(event) {
312
335
  let auctionId = getTargetedAuctionId(event);
313
336
 
@@ -315,20 +338,7 @@ function handlerBidWon(event) {
315
338
  return;
316
339
  }
317
340
 
318
- let adsCurRateToUSD = (event.currency === 'USD') ? 1 : null;
319
- let ogCurRateToUSD = (event.originalCurrency === 'USD') ? 1 : null;
320
- try {
321
- if (typeof getGlobal().convertCurrency === 'function') {
322
- // Currency module is loaded, we can calculate the conversion rate.
323
-
324
- // Get the conversion rate from the original currency to USD.
325
- ogCurRateToUSD = getGlobal().convertCurrency(1, event.originalCurrency, 'USD');
326
- // Get the conversion rate from the ad server currency to USD.
327
- adsCurRateToUSD = getGlobal().convertCurrency(1, event.currency, 'USD');
328
- }
329
- } catch (error) {
330
- logError('Error on Adagio Analytics Adapter - handlerBidWon', error);
331
- }
341
+ const currencyData = getCurrencyData(event)
332
342
 
333
343
  const adagioAuctionCacheId = (
334
344
  (event.latestTargetedAuctionId && event.latestTargetedAuctionId !== event.auctionId)
@@ -336,19 +346,12 @@ function handlerBidWon(event) {
336
346
  : null);
337
347
 
338
348
  cache.updateAuction(auctionId, event.adUnitCode, {
339
- win_bdr: getAdapterNameForAlias(event.bidder),
349
+ win_bdr: event.bidder,
340
350
  win_mt: getMediaTypeAlias(event.mediaType),
341
351
  win_ban_sz: event.mediaType === BANNER ? `${event.width}x${event.height}` : null,
342
352
 
343
- // ad server currency
344
- win_cpm: event.cpm,
345
- cur: event.currency,
346
- cur_rate: adsCurRateToUSD,
347
-
348
- // original currency from bidder
349
- og_cpm: event.originalCpm,
350
- og_cur: event.originalCurrency,
351
- og_cur_rate: ogCurRateToUSD,
353
+ win_net_cpm: currencyData.netCpm,
354
+ win_og_cpm: currencyData.orginalCpm,
352
355
 
353
356
  // cache bid id
354
357
  auct_id_c: adagioAuctionCacheId,
@@ -380,22 +383,22 @@ let adagioAdapter = Object.assign(adapter({ emptyUrl, analyticsType }), {
380
383
 
381
384
  try {
382
385
  switch (eventType) {
383
- case CONSTANTS.EVENTS.AUCTION_INIT:
386
+ case EVENTS.AUCTION_INIT:
384
387
  handlerAuctionInit(args);
385
388
  break;
386
- case CONSTANTS.EVENTS.BID_RESPONSE:
389
+ case EVENTS.BID_RESPONSE:
387
390
  handlerBidResponse(args);
388
391
  break;
389
- case CONSTANTS.EVENTS.AUCTION_END:
392
+ case EVENTS.AUCTION_END:
390
393
  handlerAuctionEnd(args);
391
394
  break;
392
- case CONSTANTS.EVENTS.BID_WON:
395
+ case EVENTS.BID_WON:
393
396
  handlerBidWon(args);
394
397
  break;
395
398
  // AD_RENDER_SUCCEEDED seems redundant with BID_WON.
396
399
  // case CONSTANTS.EVENTS.AD_RENDER_SUCCEEDED:
397
- case CONSTANTS.EVENTS.AD_RENDER_FAILED:
398
- handlerAdRender(args, eventType === CONSTANTS.EVENTS.AD_RENDER_SUCCEEDED);
400
+ case EVENTS.AD_RENDER_FAILED:
401
+ handlerAdRender(args, eventType === EVENTS.AD_RENDER_SUCCEEDED);
399
402
  break;
400
403
  }
401
404
  } catch (error) {
@@ -428,7 +431,7 @@ adagioAdapter.enableAnalytics = config => {
428
431
 
429
432
  adapterManager.registerAnalyticsAdapter({
430
433
  adapter: adagioAdapter,
431
- code: 'adagio',
434
+ code: ADAGIO_CODE,
432
435
  gvlid: ADAGIO_GVLID,
433
436
  });
434
437
 
@@ -1,5 +1,5 @@
1
1
  import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
2
- import CONSTANTS from '../src/constants.json';
2
+ import {EVENTS} from '../src/constants.js';
3
3
  import adapterManager from '../src/adapterManager.js';
4
4
  import { logError, parseUrl, _each } from '../src/utils.js';
5
5
  import {ajax} from '../src/ajax.js';
@@ -51,26 +51,26 @@ let analyticsAdapter = Object.assign(adapter({analyticsType: 'endpoint'}),
51
51
  }
52
52
  let handler = null;
53
53
  switch (eventType) {
54
- case CONSTANTS.EVENTS.AUCTION_INIT:
54
+ case EVENTS.AUCTION_INIT:
55
55
  if (analyticsAdapter.context.queue) {
56
56
  analyticsAdapter.context.queue.init();
57
57
  }
58
58
  initPrivacy(analyticsAdapter.context.requestTemplate, args.bidderRequests);
59
59
  handler = trackAuctionInit;
60
60
  break;
61
- case CONSTANTS.EVENTS.BID_REQUESTED:
61
+ case EVENTS.BID_REQUESTED:
62
62
  handler = trackBidRequest;
63
63
  break;
64
- case CONSTANTS.EVENTS.BID_RESPONSE:
64
+ case EVENTS.BID_RESPONSE:
65
65
  handler = trackBidResponse;
66
66
  break;
67
- case CONSTANTS.EVENTS.BID_WON:
67
+ case EVENTS.BID_WON:
68
68
  handler = trackBidWon;
69
69
  break;
70
- case CONSTANTS.EVENTS.BID_TIMEOUT:
70
+ case EVENTS.BID_TIMEOUT:
71
71
  handler = trackBidTimeout;
72
72
  break;
73
- case CONSTANTS.EVENTS.AUCTION_END:
73
+ case EVENTS.AUCTION_END:
74
74
  handler = trackAuctionEnd;
75
75
  break;
76
76
  }
@@ -79,7 +79,7 @@ let analyticsAdapter = Object.assign(adapter({analyticsType: 'endpoint'}),
79
79
  if (analyticsAdapter.context.queue) {
80
80
  analyticsAdapter.context.queue.push(events);
81
81
  }
82
- if (eventType === CONSTANTS.EVENTS.AUCTION_END) {
82
+ if (eventType === EVENTS.AUCTION_END) {
83
83
  sendAll();
84
84
  }
85
85
  }
@@ -1,6 +1,5 @@
1
1
  import {
2
2
  _each,
3
- cleanObj,
4
3
  contains,
5
4
  createTrackPixelHtml,
6
5
  deepAccess,
@@ -20,7 +19,6 @@ import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
20
19
  import {registerBidder} from '../src/adapters/bidderFactory.js';
21
20
  import {find} from '../src/polyfill.js';
22
21
  import {config} from '../src/config.js';
23
- import {convertOrtbRequestToProprietaryNative} from '../src/native.js';
24
22
  import {getAdUnitSizes} from '../libraries/sizeUtils/sizeUtils.js';
25
23
 
26
24
  /**
@@ -39,7 +37,7 @@ const VIDEO_FPD = ['battr', 'pos'];
39
37
  const NATIVE_FPD = ['battr', 'api'];
40
38
  const BANNER_PARAMS = ['pos'];
41
39
  const BANNER_FPD = ['btype', 'battr', 'pos', 'api'];
42
- const VERSION = '1.6';
40
+ const VERSION = '1.7';
43
41
  const SYNC_IFRAME = 1;
44
42
  const SYNC_IMAGE = 2;
45
43
  const SYNC_TYPES = {
@@ -48,34 +46,17 @@ const SYNC_TYPES = {
48
46
  };
49
47
  const GVLID = 14;
50
48
 
51
- const NATIVE_MODEL = [
52
- {name: 'title', assetType: 'title'},
53
- {name: 'icon', assetType: 'img', type: 1},
54
- {name: 'image', assetType: 'img', type: 3},
55
- {name: 'body', assetType: 'data', type: 2},
56
- {name: 'body2', assetType: 'data', type: 10},
57
- {name: 'sponsoredBy', assetType: 'data', type: 1},
58
- {name: 'phone', assetType: 'data', type: 8},
59
- {name: 'address', assetType: 'data', type: 9},
60
- {name: 'price', assetType: 'data', type: 6},
61
- {name: 'salePrice', assetType: 'data', type: 7},
62
- {name: 'cta', assetType: 'data', type: 12},
63
- {name: 'rating', assetType: 'data', type: 3},
64
- {name: 'downloads', assetType: 'data', type: 5},
65
- {name: 'likes', assetType: 'data', type: 4},
66
- {name: 'displayUrl', assetType: 'data', type: 11}
67
- ];
68
-
69
- const NATIVE_INDEX = NATIVE_MODEL.reduce((acc, val, idx) => {
70
- acc[val.name] = {id: idx, ...val};
71
- return acc;
72
- }, {});
73
-
74
49
  const MULTI_FORMAT_SUFFIX = '__mf';
75
50
  const MULTI_FORMAT_SUFFIX_BANNER = 'b' + MULTI_FORMAT_SUFFIX;
76
51
  const MULTI_FORMAT_SUFFIX_VIDEO = 'v' + MULTI_FORMAT_SUFFIX;
77
52
  const MULTI_FORMAT_SUFFIX_NATIVE = 'n' + MULTI_FORMAT_SUFFIX;
78
53
 
54
+ const MEDIA_TYPES = {
55
+ BANNER: 1,
56
+ VIDEO: 2,
57
+ NATIVE: 4
58
+ };
59
+
79
60
  /**
80
61
  * Adapter for requesting bids from AdKernel white-label display platform
81
62
  */
@@ -139,9 +120,6 @@ export const spec = {
139
120
  * @returns {ServerRequest[]}
140
121
  */
141
122
  buildRequests: function (bidRequests, bidderRequest) {
142
- // convert Native ORTB definition to old-style prebid native definition
143
- bidRequests = convertOrtbRequestToProprietaryNative(bidRequests);
144
-
145
123
  let impGroups = groupImpressionsByHostZone(bidRequests, bidderRequest.refererInfo);
146
124
  let requests = [];
147
125
  let schain = bidRequests[0].schain;
@@ -187,19 +165,21 @@ export const spec = {
187
165
  if (prBid.requestId.endsWith(MULTI_FORMAT_SUFFIX)) {
188
166
  prBid.requestId = stripMultiformatSuffix(prBid.requestId);
189
167
  }
190
- if ('banner' in imp) {
168
+ if (rtbBid.mtype === MEDIA_TYPES.BANNER) {
191
169
  prBid.mediaType = BANNER;
192
170
  prBid.width = rtbBid.w;
193
171
  prBid.height = rtbBid.h;
194
172
  prBid.ad = formatAdMarkup(rtbBid);
195
- } else if ('video' in imp) {
173
+ } else if (rtbBid.mtype === MEDIA_TYPES.VIDEO) {
196
174
  prBid.mediaType = VIDEO;
197
175
  prBid.vastUrl = rtbBid.nurl;
198
176
  prBid.width = imp.video.w;
199
177
  prBid.height = imp.video.h;
200
- } else if ('native' in imp) {
178
+ } else if (rtbBid.mtype === MEDIA_TYPES.NATIVE) {
201
179
  prBid.mediaType = NATIVE;
202
- prBid.native = buildNativeAd(JSON.parse(rtbBid.adm));
180
+ prBid.native = {
181
+ ortb: buildNativeAd(rtbBid.adm)
182
+ };
203
183
  }
204
184
  if (isStr(rtbBid.dealid)) {
205
185
  prBid.dealId = rtbBid.dealid;
@@ -345,11 +325,9 @@ function buildImps(bidRequest, secure) {
345
325
  } else {
346
326
  typedImp = imp;
347
327
  }
348
- let nativeRequest = buildNativeRequest(mediaTypes.native);
349
328
  typedImp.native = {
350
329
  ...getDefinedParamsOrEmpty(bidRequest.ortb2Imp, NATIVE_FPD),
351
- ver: '1.1',
352
- request: JSON.stringify(nativeRequest)
330
+ request: JSON.stringify(bidRequest.nativeOrtbRequest)
353
331
  };
354
332
  initImpBidfloor(typedImp, bidRequest, sizes, isMultiformat ? '*' : NATIVE);
355
333
  result.push(typedImp);
@@ -371,51 +349,6 @@ function getDefinedParamsOrEmpty(object, params) {
371
349
  return getDefinedParams(object, params);
372
350
  }
373
351
 
374
- /**
375
- * Builds native request from native adunit
376
- */
377
- function buildNativeRequest(nativeReq) {
378
- let request = {ver: '1.1', assets: []};
379
- for (let k of Object.keys(nativeReq)) {
380
- let v = nativeReq[k];
381
- let desc = NATIVE_INDEX[k];
382
- if (desc === undefined) {
383
- continue;
384
- }
385
- let assetRoot = {
386
- id: desc.id,
387
- required: ~~v.required,
388
- };
389
- if (desc.assetType === 'img') {
390
- assetRoot[desc.assetType] = buildImageAsset(desc, v);
391
- } else if (desc.assetType === 'data') {
392
- assetRoot.data = cleanObj({type: desc.type, len: v.len});
393
- } else if (desc.assetType === 'title') {
394
- assetRoot.title = {len: v.len || 90};
395
- } else {
396
- return;
397
- }
398
- request.assets.push(assetRoot);
399
- }
400
- return request;
401
- }
402
-
403
- /**
404
- * Builds image asset request
405
- */
406
- function buildImageAsset(desc, val) {
407
- let img = {
408
- type: desc.type
409
- };
410
- if (val.sizes) {
411
- [img.w, img.h] = val.sizes;
412
- } else if (val.aspect_ratios) {
413
- img.wmin = val.aspect_ratios[0].min_width;
414
- img.hmin = val.aspect_ratios[0].min_height;
415
- }
416
- return cleanObj(img);
417
- }
418
-
419
352
  /**
420
353
  * Checks if configuration allows specified sync method
421
354
  * @param syncRule {Object}
@@ -540,12 +473,11 @@ function makeRegulations(bidderRequest) {
540
473
  * @returns
541
474
  */
542
475
  function makeBaseRequest(bidderRequest, imps, fpd) {
543
- let {timeout} = bidderRequest;
544
476
  let request = {
545
477
  'id': bidderRequest.bidderRequestId,
546
478
  'imp': imps,
547
479
  'at': 1,
548
- 'tmax': parseInt(timeout)
480
+ 'tmax': parseInt(bidderRequest.timeout)
549
481
  };
550
482
  if (!isEmpty(fpd.bcat)) {
551
483
  request.bcat = fpd.bcat;
@@ -665,26 +597,15 @@ function validateNativeImageSize(img) {
665
597
  }
666
598
 
667
599
  /**
668
- * Creates native ad for native 1.1 response
600
+ * Creates native ad for native 1.2 response
669
601
  */
670
- function buildNativeAd(nativeResp) {
671
- const {assets, link, imptrackers, jstracker, privacy} = nativeResp.native;
672
- let nativeAd = {
673
- clickUrl: link.url,
674
- impressionTrackers: imptrackers,
675
- javascriptTrackers: jstracker ? [jstracker] : undefined,
676
- privacyLink: privacy,
677
- };
678
- _each(assets, asset => {
679
- let assetName = NATIVE_MODEL[asset.id].name;
680
- let assetType = NATIVE_MODEL[asset.id].assetType;
681
- nativeAd[assetName] = asset[assetType].text || asset[assetType].value || cleanObj({
682
- url: asset[assetType].url,
683
- width: asset[assetType].w,
684
- height: asset[assetType].h
685
- });
686
- });
687
- return cleanObj(nativeAd);
602
+ function buildNativeAd(adm) {
603
+ let resp = JSON.parse(adm);
604
+ // temporary workaround for top-level native object wrapper
605
+ if ('native' in resp) {
606
+ resp = resp.native;
607
+ }
608
+ return resp;
688
609
  }
689
610
 
690
611
  function stripMultiformatSuffix(impid) {
@@ -9,7 +9,7 @@
9
9
  import { registerVideoSupport } from '../src/adServerManager.js';
10
10
  import { command as analyticsCommand, COMMAND } from './adlooxAnalyticsAdapter.js';
11
11
  import { ajax } from '../src/ajax.js';
12
- import CONSTANTS from '../src/constants.json';
12
+ import { EVENTS } from '../src/constants.js';
13
13
  import { targeting } from '../src/targeting.js';
14
14
  import { logInfo, isFn, logError, isPlainObject, isStr, isBoolean, deepSetValue, deepClone, timestamp, logWarn } from '../src/utils.js';
15
15
 
@@ -74,7 +74,7 @@ function track(options, callback) {
74
74
  bid.ext.adloox.video.adserver = false;
75
75
 
76
76
  analyticsCommand(COMMAND.TRACK, {
77
- eventType: CONSTANTS.EVENTS.BID_WON,
77
+ eventType: EVENTS.BID_WON,
78
78
  args: bid
79
79
  });
80
80
  }
@@ -9,7 +9,7 @@ import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
9
9
  import {loadExternalScript} from '../src/adloader.js';
10
10
  import {auctionManager} from '../src/auctionManager.js';
11
11
  import {AUCTION_COMPLETED} from '../src/auction.js';
12
- import CONSTANTS from '../src/constants.json';
12
+ import {EVENTS} from '../src/constants.js';
13
13
  import {find} from '../src/polyfill.js';
14
14
  import {getRefererInfo} from '../src/refererDetection.js';
15
15
  import {
@@ -220,9 +220,9 @@ analyticsAdapter.url = function(url, args, bid) {
220
220
  return url + a2qs(args);
221
221
  }
222
222
 
223
- analyticsAdapter[`handle_${CONSTANTS.EVENTS.AUCTION_END}`] = function(auctionDetails) {
223
+ analyticsAdapter[`handle_${EVENTS.AUCTION_END}`] = function(auctionDetails) {
224
224
  if (!(auctionDetails.auctionStatus == AUCTION_COMPLETED && auctionDetails.bidsReceived.length > 0)) return;
225
- analyticsAdapter[`handle_${CONSTANTS.EVENTS.AUCTION_END}`] = NOOP;
225
+ analyticsAdapter[`handle_${EVENTS.AUCTION_END}`] = NOOP;
226
226
 
227
227
  logMessage(MODULE, 'preloading verification JS');
228
228
 
@@ -235,7 +235,7 @@ analyticsAdapter[`handle_${CONSTANTS.EVENTS.AUCTION_END}`] = function(auctionDet
235
235
  insertElement(link);
236
236
  }
237
237
 
238
- analyticsAdapter[`handle_${CONSTANTS.EVENTS.BID_WON}`] = function(bid) {
238
+ analyticsAdapter[`handle_${EVENTS.BID_WON}`] = function(bid) {
239
239
  if (deepAccess(bid, 'ext.adloox.video.adserver')) {
240
240
  logMessage(MODULE, `measuring '${bid.mediaType}' ad unit code '${bid.adUnitCode}' via Ad Server module`);
241
241
  return;
@@ -15,7 +15,8 @@ const GVLID = 855;
15
15
  const DEFAULT_VAST_VERSION = 'vast4'
16
16
  const MAXIMUM_DEALS_LIMIT = 5;
17
17
  const VALID_BID_TYPES = ['netBid', 'grossBid'];
18
- const META_DATA_KEY = 'adn.metaData';
18
+ const METADATA_KEY = 'adn.metaData';
19
+ const METADATA_KEY_SEPARATOR = '@@@';
19
20
 
20
21
  export const misc = {
21
22
  getUnixTimestamp: function (addDays, asMinutes) {
@@ -28,23 +29,28 @@ const storageTool = (function () {
28
29
  const storage = getStorageManager({ bidderCode: BIDDER_CODE });
29
30
  let metaInternal;
30
31
 
31
- const getMetaInternal = function () {
32
+ const getMetaDataFromLocalStorage = function (pNetwork) {
32
33
  if (!storage.localStorageIsEnabled()) {
33
34
  return [];
34
35
  }
35
36
 
36
37
  let parsedJson;
37
38
  try {
38
- parsedJson = JSON.parse(storage.getDataFromLocalStorage(META_DATA_KEY));
39
+ parsedJson = JSON.parse(storage.getDataFromLocalStorage(METADATA_KEY));
39
40
  } catch (e) {
40
41
  return [];
41
42
  }
42
43
 
44
+ let network = pNetwork;
45
+ if (Array.isArray(pNetwork)) {
46
+ network = (pNetwork.find((p) => p.network) || {}).network;
47
+ }
48
+
43
49
  let filteredEntries = parsedJson ? parsedJson.filter((datum) => {
44
50
  if (datum.key === 'voidAuIds' && Array.isArray(datum.value)) {
45
51
  return true;
46
52
  }
47
- return datum.key && datum.value && datum.exp && datum.exp > misc.getUnixTimestamp();
53
+ return datum.key && datum.value && datum.exp && datum.exp > misc.getUnixTimestamp() && (!network || network === datum.network);
48
54
  }) : [];
49
55
  const voidAuIdsEntry = filteredEntries.find(entry => entry.key === 'voidAuIds');
50
56
  if (voidAuIdsEntry) {
@@ -57,7 +63,7 @@ const storageTool = (function () {
57
63
  return filteredEntries;
58
64
  };
59
65
 
60
- const setMetaInternal = function (apiResponse) {
66
+ const setMetaInternal = function (apiRespMetadata, network) {
61
67
  if (!storage.localStorageIsEnabled()) {
62
68
  return;
63
69
  }
@@ -74,41 +80,48 @@ const storageTool = (function () {
74
80
  return notNewExistingAuIds.concat(apiIdsArray) || [];
75
81
  }
76
82
 
77
- const metaAsObj = getMetaInternal().reduce((a, entry) => ({ ...a, [entry.key]: { value: entry.value, exp: entry.exp } }), {});
78
- for (const key in apiResponse) {
83
+ // use the metadata key separator to distinguish the same key for different networks.
84
+ const metaAsObj = getMetaDataFromLocalStorage().reduce((a, entry) => ({ ...a, [entry.key + METADATA_KEY_SEPARATOR + (entry.network ? entry.network : '')]: { value: entry.value, exp: entry.exp, network: entry.network } }), {});
85
+ for (const key in apiRespMetadata) {
79
86
  if (key !== 'voidAuIds') {
80
- metaAsObj[key] = {
81
- value: apiResponse[key],
82
- exp: misc.getUnixTimestamp(100)
87
+ metaAsObj[key + METADATA_KEY_SEPARATOR + network] = {
88
+ value: apiRespMetadata[key],
89
+ exp: misc.getUnixTimestamp(100),
90
+ network: network
83
91
  }
84
92
  }
85
93
  }
86
- const currentAuIds = updateVoidAuIds(metaAsObj.voidAuIds || [], apiResponse.voidAuIds);
94
+ const currentAuIds = updateVoidAuIds(metaAsObj.voidAuIds || [], apiRespMetadata.voidAuIds);
87
95
  if (currentAuIds.length > 0) {
88
96
  metaAsObj.voidAuIds = { value: currentAuIds };
89
97
  }
90
98
  const metaDataForSaving = Object.entries(metaAsObj).map((entrySet) => {
91
- if (entrySet[0] === 'voidAuIds') {
99
+ if (entrySet.length !== 2) {
100
+ return {};
101
+ }
102
+ const key = entrySet[0].split(METADATA_KEY_SEPARATOR)[0];
103
+ if (key === 'voidAuIds') {
92
104
  return {
93
- key: entrySet[0],
105
+ key: key,
94
106
  value: entrySet[1].value
95
107
  };
96
108
  }
97
109
  return {
98
- key: entrySet[0],
110
+ key: key,
99
111
  value: entrySet[1].value,
100
- exp: entrySet[1].exp
112
+ exp: entrySet[1].exp,
113
+ network: entrySet[1].network
101
114
  }
102
- });
103
- storage.setDataInLocalStorage(META_DATA_KEY, JSON.stringify(metaDataForSaving));
115
+ }).filter(entry => entry.key);
116
+ storage.setDataInLocalStorage(METADATA_KEY, JSON.stringify(metaDataForSaving));
104
117
  };
105
118
 
106
- const getUsi = function (meta, ortb2, bidderRequest) {
119
+ const getUsi = function (meta, ortb2, bidParams) {
107
120
  // Fetch user id from parameters.
108
- for (let i = 0; i < (bidderRequest.bids || []).length; i++) {
109
- const bid = bidderRequest.bids[i];
110
- if (bid.params && bid.params.userId) {
111
- return bid.params.userId;
121
+ for (let i = 0; i < bidParams.length; i++) {
122
+ const bidParam = bidParams[i];
123
+ if (bidParam.userId) {
124
+ return bidParam.userId;
112
125
  }
113
126
  }
114
127
  if (ortb2 && ortb2.user && ortb2.user.id) {
@@ -136,8 +149,11 @@ const storageTool = (function () {
136
149
  return {
137
150
  refreshStorage: function (bidderRequest) {
138
151
  const ortb2 = bidderRequest.ortb2 || {};
139
- metaInternal = getMetaInternal().reduce((a, entry) => ({ ...a, [entry.key]: entry.value }), {});
140
- metaInternal.usi = getUsi(metaInternal, ortb2, bidderRequest);
152
+ const bidParams = (bidderRequest.bids || []).map((b) => {
153
+ return b.params ? b.params : {};
154
+ });
155
+ metaInternal = getMetaDataFromLocalStorage(bidParams).reduce((a, entry) => ({ ...a, [entry.key]: entry.value }), {});
156
+ metaInternal.usi = getUsi(metaInternal, ortb2, bidParams);
141
157
  if (!metaInternal.usi) {
142
158
  delete metaInternal.usi;
143
159
  }
@@ -148,15 +164,17 @@ const storageTool = (function () {
148
164
  }
149
165
  metaInternal.segments = getSegmentsFromOrtb(ortb2);
150
166
  },
151
- saveToStorage: function (serverData) {
152
- setMetaInternal(serverData);
167
+ saveToStorage: function (serverData, network) {
168
+ setMetaInternal(serverData, network);
153
169
  },
154
170
  getUrlRelatedData: function () {
171
+ // getting the URL information is theoretically not network-specific
155
172
  const { segments, usi, voidAuIdsArray } = metaInternal;
156
173
  return { segments, usi, voidAuIdsArray };
157
174
  },
158
- getPayloadRelatedData: function () {
159
- const { segments, usi, userId, voidAuIdsArray, voidAuIds, ...payloadRelatedData } = metaInternal;
175
+ getPayloadRelatedData: function (network) {
176
+ // getting the payload data should be network-specific
177
+ const { segments, usi, userId, voidAuIdsArray, voidAuIds, ...payloadRelatedData } = getMetaDataFromLocalStorage(network).reduce((a, entry) => ({...a, [entry.key]: entry.value}), {});
160
178
  return payloadRelatedData;
161
179
  }
162
180
  };
@@ -182,7 +200,7 @@ export const spec = {
182
200
  buildRequests: function (validBidRequests, bidderRequest) {
183
201
  const queryParamsAndValues = [];
184
202
  queryParamsAndValues.push('tzo=' + new Date().getTimezoneOffset())
185
- queryParamsAndValues.push('format=json')
203
+ queryParamsAndValues.push('format=prebid')
186
204
  const gdprApplies = deepAccess(bidderRequest, 'gdprConsent.gdprApplies');
187
205
  const consentString = deepAccess(bidderRequest, 'gdprConsent.consentString');
188
206
  if (gdprApplies !== undefined) {
@@ -223,7 +241,7 @@ export const spec = {
223
241
  networks[network].adUnits = networks[network].adUnits || [];
224
242
  if (bidderRequest && bidderRequest.refererInfo) networks[network].context = bidderRequest.refererInfo.page;
225
243
 
226
- const payloadRelatedData = storageTool.getPayloadRelatedData();
244
+ const payloadRelatedData = storageTool.getPayloadRelatedData(bid.params.network);
227
245
  if (Object.keys(payloadRelatedData).length > 0) {
228
246
  networks[network].metaData = payloadRelatedData;
229
247
  }
@@ -239,7 +257,7 @@ export const spec = {
239
257
  }
240
258
 
241
259
  const requests = [];
242
- const networkKeys = Object.keys(networks)
260
+ const networkKeys = Object.keys(networks);
243
261
  for (let j = 0; j < networkKeys.length; j++) {
244
262
  const network = networkKeys[j];
245
263
  if (network.indexOf('_video') > -1) { queryParamsAndValues.push('tt=' + DEFAULT_VAST_VERSION) }
@@ -257,7 +275,7 @@ export const spec = {
257
275
 
258
276
  interpretResponse: function (serverResponse, bidRequest) {
259
277
  if (serverResponse.body.metaData) {
260
- storageTool.saveToStorage(serverResponse.body.metaData);
278
+ storageTool.saveToStorage(serverResponse.body.metaData, serverResponse.body.network);
261
279
  }
262
280
  const adUnits = serverResponse.body.adUnits;
263
281