prebid.js 8.44.0 → 8.46.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 (521) 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/alkimiBidAdapter.js +1 -1
  33. package/dist/amxBidAdapter.js +1 -1
  34. package/dist/amxIdSystem.js +1 -1
  35. package/dist/analyticsAdapter.js +1 -1
  36. package/dist/appierAnalyticsAdapter.js +1 -1
  37. package/dist/appnexusBidAdapter.js +1 -1
  38. package/dist/asoBidAdapter.js +1 -1
  39. package/dist/asteriobidAnalyticsAdapter.js +1 -1
  40. package/dist/atsAnalyticsAdapter.js +1 -1
  41. package/dist/automatadAnalyticsAdapter.js +1 -1
  42. package/dist/axonixBidAdapter.js +1 -1
  43. package/dist/bidViewability.js +1 -1
  44. package/dist/bidViewabilityIO.js +1 -1
  45. package/dist/bidglassBidAdapter.js +1 -1
  46. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  47. package/dist/big-richmediaBidAdapter.js +1 -1
  48. package/dist/brandmetricsRtdProvider.js +1 -1
  49. package/dist/bridBidAdapter.js +1 -1
  50. package/dist/bridgewellBidAdapter.js +1 -1
  51. package/dist/brightMountainMediaBidAdapter.js +1 -1
  52. package/dist/browsiRtdProvider.js +1 -1
  53. package/dist/byDataAnalyticsAdapter.js +1 -1
  54. package/dist/carodaBidAdapter.js +1 -1
  55. package/dist/chtnwBidAdapter.js +1 -1
  56. package/dist/chunk-core.js +1 -1
  57. package/dist/chunk-paapi.js +1 -1
  58. package/dist/cleanioRtdProvider.js +1 -1
  59. package/dist/concertAnalyticsAdapter.js +1 -1
  60. package/dist/concertBidAdapter.js +1 -1
  61. package/dist/confiantRtdProvider.js +1 -1
  62. package/dist/connectadBidAdapter.js +1 -1
  63. package/dist/consentManagementUsp.js +1 -1
  64. package/dist/consumableBidAdapter.js +1 -1
  65. package/dist/conversantAnalyticsAdapter.js +1 -1
  66. package/dist/conversantBidAdapter.js +1 -1
  67. package/dist/craftBidAdapter.js +1 -1
  68. package/dist/creative-renderer-native.js +1 -1
  69. package/dist/criteoBidAdapter.js +1 -1
  70. package/dist/currency.js +1 -1
  71. package/dist/cwireBidAdapter.js +1 -1
  72. package/dist/dailymotionBidAdapter.js +1 -0
  73. package/dist/datablocksAnalyticsAdapter.js +1 -1
  74. package/dist/datawrkzBidAdapter.js +1 -1
  75. package/dist/debugging-standalone.js +1 -1
  76. package/dist/debugging.js +1 -1
  77. package/dist/dependencies.json +15 -6
  78. package/dist/dfpAdServerVideo.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/engageyaBidAdapter.js +1 -1
  83. package/dist/eplanningAnalyticsAdapter.js +1 -1
  84. package/dist/eplanningBidAdapter.js +1 -1
  85. package/dist/euidIdSystem.js +1 -1
  86. package/dist/feedadBidAdapter.js +1 -1
  87. package/dist/finativeBidAdapter.js +1 -1
  88. package/dist/fintezaAnalyticsAdapter.js +1 -1
  89. package/dist/freewheel-sspBidAdapter.js +1 -1
  90. package/dist/gdprEnforcement.js +1 -1
  91. package/dist/genericAnalyticsAdapter.js +1 -1
  92. package/dist/geoedgeRtdProvider.js +1 -1
  93. package/dist/gmosspBidAdapter.js +1 -1
  94. package/dist/goldbachBidAdapter.js +1 -1
  95. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  96. package/dist/greenbidsRtdProvider.js +1 -1
  97. package/dist/gridBidAdapter.js +1 -1
  98. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  99. package/dist/gumgumBidAdapter.js +1 -1
  100. package/dist/h12mediaBidAdapter.js +1 -1
  101. package/dist/hadronAnalyticsAdapter.js +1 -1
  102. package/dist/holidBidAdapter.js +1 -1
  103. package/dist/hypelabBidAdapter.js +1 -1
  104. package/dist/id5AnalyticsAdapter.js +1 -1
  105. package/dist/id5IdSystem.js +1 -1
  106. package/dist/illuminBidAdapter.js +1 -1
  107. package/dist/imdsBidAdapter.js +1 -1
  108. package/dist/improvedigitalBidAdapter.js +1 -1
  109. package/dist/insticatorBidAdapter.js +1 -1
  110. package/dist/instreamTracking.js +1 -1
  111. package/dist/invisiblyAnalyticsAdapter.js +1 -1
  112. package/dist/ixBidAdapter.js +1 -1
  113. package/dist/jixieBidAdapter.js +1 -1
  114. package/dist/justpremiumBidAdapter.js +1 -1
  115. package/dist/jwplayerBidAdapter.js +1 -0
  116. package/dist/kargoAnalyticsAdapter.js +1 -1
  117. package/dist/kargoBidAdapter.js +1 -1
  118. package/dist/kimberliteBidAdapter.js +1 -1
  119. package/dist/konduitAnalyticsAdapter.js +1 -1
  120. package/dist/kueezBidAdapter.js +1 -1
  121. package/dist/kueezRtbBidAdapter.js +1 -1
  122. package/dist/lassoBidAdapter.js +1 -1
  123. package/dist/lifestreetBidAdapter.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/luceadBidAdapter.js +1 -1
  130. package/dist/magniteAnalyticsAdapter.js +1 -1
  131. package/dist/malltvAnalyticsAdapter.js +1 -1
  132. package/dist/marsmediaAnalyticsAdapter.js +1 -1
  133. package/dist/marsmediaBidAdapter.js +1 -1
  134. package/dist/mediafilterRtdProvider.js +1 -1
  135. package/dist/mediafuseBidAdapter.js +1 -1
  136. package/dist/medianetAnalyticsAdapter.js +1 -1
  137. package/dist/medianetBidAdapter.js +1 -1
  138. package/dist/mediasquareBidAdapter.js +1 -1
  139. package/dist/mgidBidAdapter.js +1 -1
  140. package/dist/minutemediaBidAdapter.js +1 -1
  141. package/dist/minutemediaplusBidAdapter.js +1 -1
  142. package/dist/missenaBidAdapter.js +1 -1
  143. package/dist/multibid.js +1 -1
  144. package/dist/neuwoRtdProvider.js +1 -1
  145. package/dist/nextMillenniumBidAdapter.js +1 -1
  146. package/dist/nexx360BidAdapter.js +1 -1
  147. package/dist/nobidAnalyticsAdapter.js +1 -1
  148. package/dist/not-for-prod/prebid.js +245 -241
  149. package/dist/oguryBidAdapter.js +1 -1
  150. package/dist/onetagBidAdapter.js +1 -1
  151. package/dist/ooloAnalyticsAdapter.js +1 -1
  152. package/dist/openwebBidAdapter.js +1 -1
  153. package/dist/openxBidAdapter.js +1 -1
  154. package/dist/optableBidAdapter.js +1 -0
  155. package/dist/optidigitalBidAdapter.js +1 -1
  156. package/dist/optimonAnalyticsAdapter.js +1 -1
  157. package/dist/ortbConverter.js +1 -1
  158. package/dist/outbrainBidAdapter.js +1 -1
  159. package/dist/oxxionAnalyticsAdapter.js +1 -1
  160. package/dist/oxxionRtdProvider.js +1 -1
  161. package/dist/parrableIdSystem.js +1 -1
  162. package/dist/pbsExtensions.js +1 -1
  163. package/dist/permutiveRtdProvider.js +1 -1
  164. package/dist/pgamsspBidAdapter.js +1 -1
  165. package/dist/pianoDmpAnalyticsAdapter.js +1 -1
  166. package/dist/pirIdSystem.js +1 -0
  167. package/dist/pixfutureBidAdapter.js +1 -1
  168. package/dist/prebidServerBidAdapter.js +1 -1
  169. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  170. package/dist/priceFloors.js +1 -1
  171. package/dist/publinkIdSystem.js +1 -1
  172. package/dist/publirBidAdapter.js +1 -1
  173. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  174. package/dist/pubmaticBidAdapter.js +1 -1
  175. package/dist/pubperfAnalyticsAdapter.js +1 -1
  176. package/dist/pubstackAnalyticsAdapter.js +1 -1
  177. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  178. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  179. package/dist/pulsepointAnalyticsAdapter.js +1 -1
  180. package/dist/pxyzBidAdapter.js +1 -1
  181. package/dist/qortexRtdProvider.js +1 -1
  182. package/dist/quantcastBidAdapter.js +1 -1
  183. package/dist/readpeakBidAdapter.js +1 -1
  184. package/dist/relaidoBidAdapter.js +1 -1
  185. package/dist/relevantAnalyticsAdapter.js +1 -1
  186. package/dist/retailspotBidAdapter.js +1 -1
  187. package/dist/rhythmoneBidAdapter.js +1 -1
  188. package/dist/riseBidAdapter.js +1 -1
  189. package/dist/rivrAnalyticsAdapter.js +1 -1
  190. package/dist/roxotAnalyticsAdapter.js +1 -1
  191. package/dist/rtdModule.js +1 -1
  192. package/dist/rubiconBidAdapter.js +1 -1
  193. package/dist/s2sTesting.js +1 -1
  194. package/dist/scaleableAnalyticsAdapter.js +1 -1
  195. package/dist/schain.js +1 -1
  196. package/dist/seedingAllianceBidAdapter.js +1 -1
  197. package/dist/seedtagBidAdapter.js +1 -1
  198. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  199. package/dist/sharethroughBidAdapter.js +1 -1
  200. package/dist/shinezBidAdapter.js +1 -1
  201. package/dist/shinezRtbBidAdapter.js +1 -1
  202. package/dist/sigmoidAnalyticsAdapter.js +1 -1
  203. package/dist/sirdataRtdProvider.js +1 -1
  204. package/dist/sizeMapping.js +1 -1
  205. package/dist/smaatoBidAdapter.js +1 -1
  206. package/dist/smartadserverBidAdapter.js +1 -1
  207. package/dist/smartxBidAdapter.js +1 -1
  208. package/dist/smilewantedBidAdapter.js +1 -1
  209. package/dist/sonobiAnalyticsAdapter.js +1 -1
  210. package/dist/sonobiBidAdapter.js +1 -1
  211. package/dist/sovrnAnalyticsAdapter.js +1 -1
  212. package/dist/sovrnBidAdapter.js +1 -1
  213. package/dist/sspBCBidAdapter.js +1 -1
  214. package/dist/staqAnalyticsAdapter.js +1 -1
  215. package/dist/stnBidAdapter.js +1 -1
  216. package/dist/stroeerCoreBidAdapter.js +1 -1
  217. package/dist/stvBidAdapter.js +1 -1
  218. package/dist/sublimeBidAdapter.js +1 -1
  219. package/dist/taboolaBidAdapter.js +1 -1
  220. package/dist/tagorasBidAdapter.js +1 -1
  221. package/dist/targetVideoBidAdapter.js +1 -1
  222. package/dist/teadsBidAdapter.js +1 -1
  223. package/dist/terceptAnalyticsAdapter.js +1 -1
  224. package/dist/themoneytizerBidAdapter.js +1 -1
  225. package/dist/topicsFpdModule.js +1 -1
  226. package/dist/trionBidAdapter.js +1 -1
  227. package/dist/tripleliftBidAdapter.js +1 -1
  228. package/dist/ttdBidAdapter.js +1 -1
  229. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  230. package/dist/uid2IdSystem.js +1 -1
  231. package/dist/underdogmediaBidAdapter.js +1 -1
  232. package/dist/undertoneBidAdapter.js +1 -1
  233. package/dist/unrulyBidAdapter.js +1 -1
  234. package/dist/userId.js +1 -1
  235. package/dist/viantOrtbBidAdapter.js +1 -1
  236. package/dist/vidazooBidAdapter.js +1 -1
  237. package/dist/videoModule.js +1 -1
  238. package/dist/videobyteBidAdapter.js +1 -1
  239. package/dist/visxBidAdapter.js +1 -1
  240. package/dist/vuukleBidAdapter.js +1 -1
  241. package/dist/weboramaRtdProvider.js +1 -1
  242. package/dist/widespaceBidAdapter.js +1 -1
  243. package/dist/winrBidAdapter.js +1 -1
  244. package/dist/yahoosspBidAdapter.js +1 -1
  245. package/dist/yandexAnalyticsAdapter.js +1 -1
  246. package/dist/yieldmoBidAdapter.js +1 -1
  247. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  248. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  249. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  250. package/dist/zeta_global_sspBidAdapter.js +1 -1
  251. package/gulpfile.js +9 -1
  252. package/integrationExamples/gpt/adnuntius_example.html +7 -1
  253. package/integrationExamples/gpt/azerionedgeRtdProvider_example.html +3 -3
  254. package/integrationExamples/gpt/top-level-paapi/decisionLogic.js +57 -0
  255. package/integrationExamples/gpt/top-level-paapi/tl_paapi_example.html +188 -0
  256. package/integrationExamples/gpt/x-domain/creative.html +1 -1
  257. package/integrationExamples/noadserver/jwplayerBidAdapter_sample.html +75 -0
  258. package/integrationExamples/realTimeData/jwplayerRtdProvider_example.html +7 -0
  259. package/integrationExamples/videoModule/jwplayer/bidMarkedAsUsed.html +7 -0
  260. package/integrationExamples/videoModule/jwplayer/bidRequestScheduling.html +9 -4
  261. package/integrationExamples/videoModule/jwplayer/bidsBackHandlerOverride.html +7 -0
  262. package/integrationExamples/videoModule/jwplayer/eventListeners.html +7 -0
  263. package/integrationExamples/videoModule/jwplayer/eventsUI.html +7 -0
  264. package/integrationExamples/videoModule/jwplayer/gamAdServerMediation.html +7 -0
  265. package/integrationExamples/videoModule/jwplayer/mediaMetadata.html +7 -0
  266. package/integrationExamples/videoModule/jwplayer/playlist.html +7 -0
  267. package/integrationExamples/videoModule/videojs/bidMarkedAsUsed.html +7 -0
  268. package/integrationExamples/videoModule/videojs/bidRequestScheduling.html +7 -0
  269. package/integrationExamples/videoModule/videojs/bidsBackHandlerOverride.html +7 -0
  270. package/integrationExamples/videoModule/videojs/eventListeners.html +7 -0
  271. package/integrationExamples/videoModule/videojs/eventsUI.html +7 -0
  272. package/integrationExamples/videoModule/videojs/gamAdServerMediation.html +7 -0
  273. package/integrationExamples/videoModule/videojs/mediaMetadata.html +7 -0
  274. package/integrationExamples/videoModule/videojs/playlist.html +7 -0
  275. package/libraries/analyticsAdapter/AnalyticsAdapter.js +4 -4
  276. package/libraries/creative-renderer-native/renderer.js +1 -1
  277. package/libraries/ortbConverter/processors/banner.js +2 -2
  278. package/modules/33acrossAnalyticsAdapter.js +2 -4
  279. package/modules/33acrossIdSystem.js +1 -1
  280. package/modules/adWMGAnalyticsAdapter.js +9 -11
  281. package/modules/adagioAnalyticsAdapter.js +8 -8
  282. package/modules/adgenerationBidAdapter.js +6 -10
  283. package/modules/adkernelAdnAnalyticsAdapter.js +8 -8
  284. package/modules/adkernelBidAdapter.js +9 -3
  285. package/modules/adlooxAdServerVideo.js +2 -2
  286. package/modules/adlooxAnalyticsAdapter.js +4 -4
  287. package/modules/adnuntiusBidAdapter.js +54 -31
  288. package/modules/adomikAnalyticsAdapter.js +7 -7
  289. package/modules/adpod.js +3 -3
  290. package/modules/adxcgAnalyticsAdapter.js +10 -10
  291. package/modules/adxpremiumAnalyticsAdapter.js +8 -10
  292. package/modules/agmaAnalyticsAdapter.js +2 -6
  293. package/modules/alkimiBidAdapter.js +48 -8
  294. package/modules/appierAnalyticsAdapter.js +5 -7
  295. package/modules/asteriobidAnalyticsAdapter.js +14 -14
  296. package/modules/atsAnalyticsAdapter.js +4 -4
  297. package/modules/automatadAnalyticsAdapter.js +20 -20
  298. package/modules/azerionedgeRtdProvider.md +4 -2
  299. package/modules/bidViewability.js +3 -3
  300. package/modules/bidViewabilityIO.js +3 -3
  301. package/modules/bidwatchAnalyticsAdapter.js +7 -9
  302. package/modules/brandmetricsRtdProvider.js +6 -6
  303. package/modules/browsiRtdProvider.js +3 -3
  304. package/modules/byDataAnalyticsAdapter.js +3 -3
  305. package/modules/cleanioRtdProvider.js +3 -3
  306. package/modules/concertAnalyticsAdapter.js +5 -7
  307. package/modules/confiantRtdProvider.js +2 -2
  308. package/modules/conversantAnalyticsAdapter.js +2 -4
  309. package/modules/criteoBidAdapter.js +51 -8
  310. package/modules/currency.js +7 -7
  311. package/modules/dailymotionBidAdapter.js +139 -0
  312. package/modules/dailymotionBidAdapter.md +140 -0
  313. package/modules/datawrkzBidAdapter.js +4 -4
  314. package/modules/debugging/pbsInterceptor.js +2 -2
  315. package/modules/dfpAdServerVideo.js +2 -2
  316. package/modules/dsaControl.js +5 -5
  317. package/modules/engageyaBidAdapter.js +1 -1
  318. package/modules/eplanningAnalyticsAdapter.js +8 -8
  319. package/modules/fintezaAnalyticsAdapter.js +5 -5
  320. package/modules/gdprEnforcement.js +3 -3
  321. package/modules/geoedgeRtdProvider.js +2 -2
  322. package/modules/greenbidsAnalyticsAdapter.js +13 -10
  323. package/modules/greenbidsRtdProvider.js +2 -2
  324. package/modules/growthCodeAnalyticsAdapter.js +14 -14
  325. package/modules/gumgumBidAdapter.js +1 -1
  326. package/modules/hadronAnalyticsAdapter.js +14 -14
  327. package/modules/holidBidAdapter.js +2 -2
  328. package/modules/id5AnalyticsAdapter.js +7 -9
  329. package/modules/improvedigitalBidAdapter.js +2 -1
  330. package/modules/insticatorBidAdapter.js +137 -27
  331. package/modules/instreamTracking.js +4 -4
  332. package/modules/invisiblyAnalyticsAdapter.js +15 -17
  333. package/modules/ixBidAdapter.js +3 -3
  334. package/modules/jwplayerBidAdapter.js +412 -0
  335. package/modules/jwplayerBidAdapter.md +72 -0
  336. package/modules/kargoAnalyticsAdapter.js +3 -3
  337. package/modules/kargoBidAdapter.js +5 -11
  338. package/modules/konduitAnalyticsAdapter.js +13 -13
  339. package/modules/liveIntentAnalyticsAdapter.js +2 -2
  340. package/modules/livewrappedAnalyticsAdapter.js +10 -10
  341. package/modules/magniteAnalyticsAdapter.js +25 -23
  342. package/modules/malltvAnalyticsAdapter.js +4 -6
  343. package/modules/mediafilterRtdProvider.js +2 -2
  344. package/modules/medianetAnalyticsAdapter.js +12 -12
  345. package/modules/medianetBidAdapter.js +1 -1
  346. package/modules/multibid/index.js +2 -2
  347. package/modules/neuwoRtdProvider.js +2 -2
  348. package/modules/nextMillenniumBidAdapter.js +4 -4
  349. package/modules/nobidAnalyticsAdapter.js +9 -11
  350. package/modules/ooloAnalyticsAdapter.js +2 -2
  351. package/modules/optableBidAdapter.js +42 -0
  352. package/modules/optableBidAdapter.md +41 -0
  353. package/modules/optidigitalBidAdapter.js +20 -4
  354. package/modules/oxxionAnalyticsAdapter.js +7 -9
  355. package/modules/paapi.js +20 -6
  356. package/modules/permutiveRtdProvider.js +21 -2
  357. package/modules/pgamsspBidAdapter.js +26 -3
  358. package/modules/pirIdSystem.js +62 -0
  359. package/modules/pirIdSystem.md +27 -0
  360. package/modules/prebidServerBidAdapter/index.js +8 -8
  361. package/modules/prebidServerBidAdapter/ortbConverter.js +3 -3
  362. package/modules/prebidmanagerAnalyticsAdapter.js +14 -14
  363. package/modules/priceFloors.js +10 -5
  364. package/modules/pubmaticAnalyticsAdapter.js +32 -22
  365. package/modules/pubmaticBidAdapter.js +22 -18
  366. package/modules/pubwiseAnalyticsAdapter.js +11 -11
  367. package/modules/pubxaiAnalyticsAdapter.js +6 -6
  368. package/modules/qortexRtdProvider.js +2 -2
  369. package/modules/relaidoBidAdapter.js +70 -9
  370. package/modules/roxotAnalyticsAdapter.js +8 -10
  371. package/modules/rtdModule/index.js +7 -7
  372. package/modules/scaleableAnalyticsAdapter.js +5 -5
  373. package/modules/seedtagBidAdapter.js +12 -3
  374. package/modules/sigmoidAnalyticsAdapter.js +7 -7
  375. package/modules/sirdataRtdProvider.js +33 -43
  376. package/modules/smaatoBidAdapter.js +1 -2
  377. package/modules/sonobiAnalyticsAdapter.js +10 -12
  378. package/modules/sovrnAnalyticsAdapter.js +7 -9
  379. package/modules/sovrnBidAdapter.js +1 -1
  380. package/modules/staqAnalyticsAdapter.js +9 -9
  381. package/modules/stroeerCoreBidAdapter.js +7 -5
  382. package/modules/terceptAnalyticsAdapter.js +7 -7
  383. package/modules/topicsFpdModule.js +3 -0
  384. package/modules/topicsFpdModule.md +4 -0
  385. package/modules/ucfunnelAnalyticsAdapter.js +5 -7
  386. package/modules/userId/index.js +3 -3
  387. package/modules/viantOrtbBidAdapter.js +2 -0
  388. package/modules/videoModule/index.js +4 -4
  389. package/modules/yandexAnalyticsAdapter.js +8 -2
  390. package/modules/yieldoneAnalyticsAdapter.js +7 -7
  391. package/modules/yuktamediaAnalyticsAdapter.js +9 -9
  392. package/modules/zeta_global_sspAnalyticsAdapter.js +5 -5
  393. package/modules/zeta_global_sspBidAdapter.js +8 -1
  394. package/package.json +1 -1
  395. package/src/adRendering.js +15 -15
  396. package/src/adUnits.js +9 -21
  397. package/src/adapterManager.js +23 -13
  398. package/src/adapters/bidderFactory.js +8 -8
  399. package/src/auction.js +26 -28
  400. package/src/auctionManager.js +4 -4
  401. package/src/bidderSettings.js +2 -2
  402. package/src/config.js +2 -2
  403. package/src/constants.js +190 -0
  404. package/src/events.js +3 -3
  405. package/src/native.js +6 -8
  406. package/src/prebid.js +6 -10
  407. package/src/secureCreatives.js +5 -5
  408. package/src/targeting.js +13 -13
  409. package/src/utils.js +19 -6
  410. package/test/fixtures/fixtures.js +44 -44
  411. package/test/helpers/analytics.js +6 -6
  412. package/test/spec/AnalyticsAdapter_spec.js +3 -3
  413. package/test/spec/auctionmanager_spec.js +82 -82
  414. package/test/spec/modules/33acrossAnalyticsAdapter_spec.js +1 -2
  415. package/test/spec/modules/33acrossIdSystem_spec.js +3 -3
  416. package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +14 -14
  417. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +26 -26
  418. package/test/spec/modules/adgenerationBidAdapter_spec.js +6 -6
  419. package/test/spec/modules/adkernelAdnAnalytics_spec.js +6 -6
  420. package/test/spec/modules/adkernelBidAdapter_spec.js +9 -4
  421. package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +6 -6
  422. package/test/spec/modules/adnuntiusBidAdapter_spec.js +26 -6
  423. package/test/spec/modules/adomikAnalyticsAdapter_spec.js +7 -7
  424. package/test/spec/modules/adxcgAnalyticsAdapter_spec.js +7 -7
  425. package/test/spec/modules/adxpremiumAnalyticsAdapter_spec.js +7 -7
  426. package/test/spec/modules/agmaAnalyticsAdapter_spec.js +14 -14
  427. package/test/spec/modules/alkimiBidAdapter_spec.js +11 -5
  428. package/test/spec/modules/appierAnalyticsAdapter_spec.js +1 -1
  429. package/test/spec/modules/asteriobidAnalyticsAdapter_spec.js +2 -2
  430. package/test/spec/modules/atsAnalyticsAdapter_spec.js +8 -8
  431. package/test/spec/modules/automatadAnalyticsAdapter_spec.js +2 -2
  432. package/test/spec/modules/bidViewabilityIO_spec.js +2 -2
  433. package/test/spec/modules/bidViewability_spec.js +4 -4
  434. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +7 -6
  435. package/test/spec/modules/byDataAnalyticsAdapter_spec.js +5 -4
  436. package/test/spec/modules/cleanioRtdProvider_spec.js +6 -6
  437. package/test/spec/modules/concertAnalyticsAdapter_spec.js +7 -6
  438. package/test/spec/modules/confiantRtdProvider_spec.js +2 -2
  439. package/test/spec/modules/conversantAnalyticsAdapter_spec.js +61 -61
  440. package/test/spec/modules/criteoBidAdapter_spec.js +111 -5
  441. package/test/spec/modules/currency_spec.js +6 -6
  442. package/test/spec/modules/dailymotionBidAdapter_spec.js +369 -0
  443. package/test/spec/modules/dsaControl_spec.js +4 -4
  444. package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +20 -13
  445. package/test/spec/modules/fintezaAnalyticsAdapter_spec.js +5 -5
  446. package/test/spec/modules/genericAnalyticsAdapter_spec.js +2 -2
  447. package/test/spec/modules/geoedgeRtdProvider_spec.js +37 -37
  448. package/test/spec/modules/greenbidsAnalyticsAdapter_spec.js +15 -2
  449. package/test/spec/modules/greenbidsRtdProvider_spec.js +2 -2
  450. package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +2 -2
  451. package/test/spec/modules/gumgumBidAdapter_spec.js +1 -1
  452. package/test/spec/modules/hadronAnalyticsAdapter_spec.js +3 -3
  453. package/test/spec/modules/id5AnalyticsAdapter_spec.js +5 -5
  454. package/test/spec/modules/id5IdSystem_spec.js +2 -2
  455. package/test/spec/modules/improvedigitalBidAdapter_spec.js +3 -3
  456. package/test/spec/modules/insticatorBidAdapter_spec.js +275 -22
  457. package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +40 -40
  458. package/test/spec/modules/jwplayerBidAdapter_spec.js +412 -0
  459. package/test/spec/modules/kargoAnalyticsAdapter_spec.js +3 -3
  460. package/test/spec/modules/konduitAnalyticsAdapter_spec.js +13 -13
  461. package/test/spec/modules/lemmaDigitalBidAdapter_spec.js +1 -1
  462. package/test/spec/modules/liveIntentAnalyticsAdapter_spec.js +3 -3
  463. package/test/spec/modules/liveIntentIdSystem_spec.js +13 -15
  464. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +15 -20
  465. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +31 -15
  466. package/test/spec/modules/malltvAnalyticsAdapter_spec.js +3 -3
  467. package/test/spec/modules/mediafilterRtdProvider_spec.js +2 -2
  468. package/test/spec/modules/medianetAnalyticsAdapter_spec.js +3 -3
  469. package/test/spec/modules/nobidAnalyticsAdapter_spec.js +23 -23
  470. package/test/spec/modules/ooloAnalyticsAdapter_spec.js +33 -33
  471. package/test/spec/modules/optableBidAdapter_spec.js +89 -0
  472. package/test/spec/modules/optidigitalBidAdapter_spec.js +34 -4
  473. package/test/spec/modules/optimonAnalyticsAdapter_spec.js +0 -1
  474. package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +7 -7
  475. package/test/spec/modules/paapi_spec.js +40 -14
  476. package/test/spec/modules/permutiveRtdProvider_spec.js +29 -1
  477. package/test/spec/modules/pgamsspBidAdapter_spec.js +50 -4
  478. package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +9 -9
  479. package/test/spec/modules/pirIdSystem_spec.js +77 -0
  480. package/test/spec/modules/prebidServerBidAdapter_spec.js +7 -7
  481. package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +2 -2
  482. package/test/spec/modules/priceFloors_spec.js +6 -5
  483. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +12 -14
  484. package/test/spec/modules/pubmaticBidAdapter_spec.js +25 -2
  485. package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +0 -1
  486. package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +14 -14
  487. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +7 -7
  488. package/test/spec/modules/qortexRtdProvider_spec.js +2 -2
  489. package/test/spec/modules/realTimeDataModule_spec.js +9 -9
  490. package/test/spec/modules/relaidoBidAdapter_spec.js +62 -0
  491. package/test/spec/modules/relevantAnalyticsAdapter_spec.js +3 -3
  492. package/test/spec/modules/relevantdigitalBidAdapter_spec.js +2 -2
  493. package/test/spec/modules/rivrAnalyticsAdapter_spec.js +4 -4
  494. package/test/spec/modules/roxotAnalyticsAdapter_spec.js +25 -25
  495. package/test/spec/modules/scaleableAnalyticsAdapter_spec.js +5 -5
  496. package/test/spec/modules/seedtagBidAdapter_spec.js +56 -3
  497. package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +0 -1
  498. package/test/spec/modules/sonobiAnalyticsAdapter_spec.js +8 -7
  499. package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +2 -2
  500. package/test/spec/modules/sovrnBidAdapter_spec.js +5 -5
  501. package/test/spec/modules/staqAnalyticsAdapter_spec.js +7 -7
  502. package/test/spec/modules/stroeerCoreBidAdapter_spec.js +21 -0
  503. package/test/spec/modules/terceptAnalyticsAdapter_spec.js +7 -7
  504. package/test/spec/modules/trionBidAdapter_spec.js +1 -1
  505. package/test/spec/modules/ucfunnelAnalyticsAdapter_spec.js +1 -1
  506. package/test/spec/modules/userId_spec.js +4 -4
  507. package/test/spec/modules/videoModule/pbVideo_spec.js +3 -3
  508. package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +22 -21
  509. package/test/spec/modules/yuktamediaAnalyticsAdapter_spec.js +33 -32
  510. package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +8 -8
  511. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +1 -1
  512. package/test/spec/native_spec.js +19 -19
  513. package/test/spec/unit/adRendering_spec.js +14 -14
  514. package/test/spec/unit/adUnits_spec.js +1 -1
  515. package/test/spec/unit/core/adapterManager_spec.js +99 -59
  516. package/test/spec/unit/core/bidderFactory_spec.js +6 -6
  517. package/test/spec/unit/core/targeting_spec.js +47 -47
  518. package/test/spec/unit/pbjs_api_spec.js +81 -81
  519. package/test/spec/unit/secureCreatives_spec.js +27 -27
  520. package/test/spec/utils_spec.js +19 -3
  521. package/src/constants.json +0 -196
@@ -0,0 +1,412 @@
1
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
2
+ import { VIDEO } from '../src/mediaTypes.js';
3
+ import { isArray, isFn, deepAccess, deepSetValue, getDNT, logError, logWarn } from '../src/utils.js';
4
+ import { config } from '../src/config.js';
5
+ import { hasPurpose1Consent } from '../src/utils/gpdr.js';
6
+
7
+ const BIDDER_CODE = 'jwplayer';
8
+ const BASE_URL = 'https://vpb-server.jwplayer.com/';
9
+ const AUCTION_URL = BASE_URL + 'openrtb2/auction';
10
+ const USER_SYNC_URL = BASE_URL + 'setuid';
11
+ const GVLID = 1046;
12
+ const SUPPORTED_AD_TYPES = [VIDEO];
13
+
14
+ const VIDEO_ORTB_PARAMS = [
15
+ 'pos',
16
+ 'w',
17
+ 'h',
18
+ 'playbackend',
19
+ 'mimes',
20
+ 'minduration',
21
+ 'maxduration',
22
+ 'protocols',
23
+ 'startdelay',
24
+ 'placement',
25
+ 'plcmt',
26
+ 'skip',
27
+ 'skipafter',
28
+ 'minbitrate',
29
+ 'maxbitrate',
30
+ 'delivery',
31
+ 'playbackmethod',
32
+ 'api',
33
+ 'linearity'
34
+ ];
35
+
36
+ function getBidAdapter() {
37
+ function isBidRequestValid(bid) {
38
+ const params = bid && bid.params;
39
+ if (!params) {
40
+ return false;
41
+ }
42
+
43
+ return !!params.placementId && !!params.publisherId && !!params.siteId;
44
+ }
45
+
46
+ function buildRequests(bidRequests, bidderRequest) {
47
+ if (!bidRequests) {
48
+ return;
49
+ }
50
+
51
+ if (!hasContentUrl(bidderRequest.ortb2)) {
52
+ logError(`${BIDDER_CODE}: cannot bid without a valid Content URL. Please populate ortb2.site.content.url`);
53
+ return;
54
+ }
55
+
56
+ const warnings = getWarnings(bidderRequest);
57
+ warnings.forEach(warning => {
58
+ logWarn(`${BIDDER_CODE}: ${warning}`);
59
+ });
60
+
61
+ return bidRequests.map(bidRequest => {
62
+ const payload = buildRequest(bidRequest, bidderRequest);
63
+
64
+ return {
65
+ method: 'POST',
66
+ url: AUCTION_URL,
67
+ data: payload
68
+ }
69
+ });
70
+ }
71
+
72
+ function interpretResponse(serverResponse) {
73
+ const outgoingBidResponses = [];
74
+ const serverResponseBody = serverResponse.body;
75
+
76
+ logResponseWarnings(serverResponseBody);
77
+
78
+ const seatBids = serverResponseBody && serverResponseBody.seatbid;
79
+ if (!isArray(seatBids)) {
80
+ return outgoingBidResponses;
81
+ }
82
+
83
+ const cur = serverResponseBody.cur;
84
+
85
+ seatBids.forEach(seatBid => {
86
+ seatBid.bid.forEach(bid => {
87
+ const bidResponse = {
88
+ requestId: serverResponseBody.id,
89
+ cpm: bid.price,
90
+ currency: cur,
91
+ width: bid.w,
92
+ height: bid.h,
93
+ ad: bid.adm,
94
+ vastXml: bid.adm,
95
+ ttl: bid.ttl || 3600,
96
+ netRevenue: false,
97
+ creativeId: bid.adid,
98
+ dealId: bid.dealid,
99
+ meta: {
100
+ advertiserDomains: bid.adomain,
101
+ mediaType: VIDEO,
102
+ primaryCatId: bid.cat,
103
+ }
104
+ };
105
+
106
+ outgoingBidResponses.push(bidResponse);
107
+ });
108
+ });
109
+
110
+ return outgoingBidResponses;
111
+ }
112
+
113
+ function getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent) {
114
+ if (!hasPurpose1Consent(gdprConsent)) {
115
+ return [];
116
+ }
117
+
118
+ const userSyncs = [];
119
+ const consentQueryParams = getUserSyncConsentQueryParams(gdprConsent);
120
+ const url = `https://ib.adnxs.com/getuid?${USER_SYNC_URL}?bidder=jwplayer&uid=$UID&f=i` + consentQueryParams
121
+
122
+ if (syncOptions.iframeEnabled) {
123
+ userSyncs.push({
124
+ type: 'iframe',
125
+ url
126
+ });
127
+ }
128
+
129
+ if (syncOptions.pixelEnabled) {
130
+ userSyncs.push({
131
+ type: 'image',
132
+ url
133
+ });
134
+ }
135
+
136
+ return userSyncs;
137
+ }
138
+
139
+ return {
140
+ code: BIDDER_CODE,
141
+ gvlid: GVLID,
142
+ supportedMediaTypes: SUPPORTED_AD_TYPES,
143
+ isBidRequestValid,
144
+ buildRequests,
145
+ interpretResponse,
146
+ getUserSyncs
147
+ }
148
+
149
+ function getUserSyncConsentQueryParams(gdprConsent) {
150
+ if (!gdprConsent) {
151
+ return '';
152
+ }
153
+
154
+ const consentString = gdprConsent.consentString;
155
+ if (!consentString) {
156
+ return '';
157
+ }
158
+
159
+ let gdpr = 0;
160
+ const gdprApplies = gdprConsent.gdprApplies;
161
+ if (typeof gdprApplies === 'boolean') {
162
+ gdpr = Number(gdprApplies)
163
+ }
164
+
165
+ return `&gdpr=${gdpr}&gdpr_consent=${consentString}`;
166
+ }
167
+
168
+ function buildRequest(bidRequest, bidderRequest) {
169
+ const openrtbRequest = {
170
+ id: bidRequest.bidId,
171
+ imp: getRequestImpressions(bidRequest, bidderRequest),
172
+ site: getRequestSite(bidRequest, bidderRequest),
173
+ device: getRequestDevice(bidderRequest.ortb2),
174
+ user: getRequestUser(bidderRequest.ortb2),
175
+ };
176
+
177
+ // GDPR Consent Params
178
+ if (bidderRequest.gdprConsent) {
179
+ deepSetValue(openrtbRequest, 'user.ext.consent', bidderRequest.gdprConsent.consentString);
180
+ deepSetValue(openrtbRequest, 'regs.ext.gdpr', (bidderRequest.gdprConsent.gdprApplies ? 1 : 0));
181
+ }
182
+
183
+ // CCPA
184
+ if (bidderRequest.uspConsent) {
185
+ deepSetValue(openrtbRequest, 'regs.ext.us_privacy', bidderRequest.uspConsent);
186
+ }
187
+
188
+ if (bidRequest.schain) {
189
+ deepSetValue(openrtbRequest, 'source.schain', bidRequest.schain);
190
+ }
191
+
192
+ openrtbRequest.tmax = bidderRequest.timeout || 200;
193
+
194
+ return JSON.stringify(openrtbRequest);
195
+ }
196
+
197
+ function getRequestImpressions(bidRequest) {
198
+ const impressionObject = {
199
+ id: bidRequest.adUnitCode,
200
+ };
201
+
202
+ impressionObject.video = getImpressionVideo(bidRequest);
203
+
204
+ const bidFloorData = getBidFloorData(bidRequest);
205
+ if (bidFloorData) {
206
+ impressionObject.bidfloor = bidFloorData.floor;
207
+ impressionObject.bidfloorcur = bidFloorData.currency;
208
+ }
209
+
210
+ impressionObject.ext = getImpressionExtension(bidRequest);
211
+
212
+ return [impressionObject];
213
+ }
214
+
215
+ function getImpressionVideo(bidRequest) {
216
+ const videoParams = deepAccess(bidRequest, 'mediaTypes.video', {});
217
+
218
+ const video = {};
219
+
220
+ VIDEO_ORTB_PARAMS.forEach((param) => {
221
+ if (videoParams.hasOwnProperty(param)) {
222
+ video[param] = videoParams[param];
223
+ }
224
+ });
225
+
226
+ setPlayerSize(video, videoParams);
227
+
228
+ if (!videoParams.plcmt) {
229
+ logWarn(`${BIDDER_CODE}: Please set a value to mediaTypes.video.plcmt`);
230
+ }
231
+
232
+ return video;
233
+ }
234
+
235
+ function getImpressionExtension(bidRequest) {
236
+ return {
237
+ prebid: {
238
+ bidder: {
239
+ jwplayer: {
240
+ placementId: bidRequest.params.placementId
241
+ }
242
+ }
243
+ }
244
+ };
245
+ }
246
+
247
+ function setPlayerSize(videoImp, videoParams) {
248
+ if (videoImp.w !== undefined && videoImp.h !== undefined) {
249
+ return;
250
+ }
251
+
252
+ const playerSize = getNormalizedPlayerSize(videoParams.playerSize);
253
+ if (!playerSize.length) {
254
+ logWarn(logWarn(`${BIDDER_CODE}: Video size has not been set. Please set values in video.h and video.w`));
255
+ return;
256
+ }
257
+
258
+ if (videoImp.w === undefined) {
259
+ videoImp.w = playerSize[0];
260
+ }
261
+
262
+ if (videoImp.h === undefined) {
263
+ videoImp.h = playerSize[1];
264
+ }
265
+ }
266
+
267
+ function getNormalizedPlayerSize(playerSize) {
268
+ if (!Array.isArray(playerSize)) {
269
+ return [];
270
+ }
271
+
272
+ if (Array.isArray(playerSize[0])) {
273
+ playerSize = playerSize[0];
274
+ }
275
+
276
+ if (playerSize.length < 2) {
277
+ return [];
278
+ }
279
+
280
+ return playerSize;
281
+ }
282
+
283
+ function getBidFloorData(bidRequest) {
284
+ const { params } = bidRequest;
285
+ const currency = params.currency || 'USD';
286
+
287
+ let floorData;
288
+ if (isFn(bidRequest.getFloor)) {
289
+ const bidFloorRequest = {
290
+ currency: currency,
291
+ mediaType: VIDEO,
292
+ size: '*'
293
+ };
294
+ floorData = bidRequest.getFloor(bidFloorRequest);
295
+ } else if (params.bidFloor) {
296
+ floorData = { floor: params.bidFloor, currency: currency };
297
+ }
298
+
299
+ return floorData;
300
+ }
301
+
302
+ function getRequestSite(bidRequest, bidderRequest) {
303
+ const site = bidderRequest.ortb2.site || {};
304
+
305
+ site.domain = site.domain || config.publisherDomain || window.location.hostname;
306
+ site.page = site.page || config.pageUrl || window.location.href;
307
+
308
+ const referer = bidderRequest.refererInfo && bidderRequest.refererInfo.referer;
309
+ if (!site.ref && referer) {
310
+ site.ref = referer;
311
+ }
312
+
313
+ const jwplayerPublisherExtChain = 'publisher.ext.jwplayer.';
314
+
315
+ deepSetValue(site, jwplayerPublisherExtChain + 'publisherId', bidRequest.params.publisherId);
316
+ deepSetValue(site, jwplayerPublisherExtChain + 'siteId', bidRequest.params.siteId);
317
+
318
+ return site;
319
+ }
320
+
321
+ function getRequestDevice(ortb2) {
322
+ const device = Object.assign({
323
+ h: screen.height,
324
+ w: screen.width,
325
+ ua: navigator.userAgent,
326
+ dnt: getDNT() ? 1 : 0,
327
+ js: 1
328
+ }, ortb2.device || {})
329
+
330
+ const language = getLanguage();
331
+ if (!device.language && language) {
332
+ device.language = language;
333
+ }
334
+
335
+ return device;
336
+ }
337
+
338
+ function getLanguage() {
339
+ const navigatorLanguage = navigator.language;
340
+ if (!navigatorLanguage) {
341
+ return;
342
+ }
343
+
344
+ const languageCodeSegments = navigatorLanguage.split('-');
345
+ if (!languageCodeSegments.length) {
346
+ return;
347
+ }
348
+
349
+ return languageCodeSegments[0];
350
+ }
351
+
352
+ function getRequestUser(ortb2) {
353
+ const user = ortb2.user || {};
354
+ if (config.getConfig('coppa') === true) {
355
+ user.coppa = true;
356
+ }
357
+
358
+ return user;
359
+ }
360
+
361
+ function hasContentUrl(ortb2) {
362
+ const site = ortb2.site;
363
+ const content = site && site.content;
364
+ return !!(content && content.url);
365
+ }
366
+
367
+ function getWarnings(bidderRequest) {
368
+ const content = bidderRequest.ortb2.site.content;
369
+ const contentChain = 'ortb2.site.content.';
370
+ const warnings = [];
371
+ if (!content.id) {
372
+ warnings.push(getMissingFieldMessage(contentChain + 'id'));
373
+ }
374
+
375
+ if (!content.title) {
376
+ warnings.push(getMissingFieldMessage(contentChain + 'title'));
377
+ }
378
+
379
+ if (!content.ext || !content.ext.description) {
380
+ warnings.push(getMissingFieldMessage(contentChain + 'ext.description'));
381
+ }
382
+
383
+ return warnings;
384
+ }
385
+
386
+ function getMissingFieldMessage(fieldName) {
387
+ return `Optional field ${fieldName} is not populated; we recommend populating for maximum performance.`
388
+ }
389
+
390
+ function logResponseWarnings(serverResponseBody) {
391
+ const warningPayload = deepAccess(serverResponseBody, 'ext.warnings');
392
+ if (!warningPayload) {
393
+ return;
394
+ }
395
+
396
+ const warningCategories = Object.keys(warningPayload);
397
+ warningCategories.forEach(category => {
398
+ const warnings = warningPayload[category];
399
+ if (!isArray(warnings)) {
400
+ return;
401
+ }
402
+
403
+ warnings.forEach(warning => {
404
+ logWarn(`${BIDDER_CODE}: [Bid Response][Warning Code: ${warning.code}] ${warning.message}`);
405
+ });
406
+ });
407
+ }
408
+ }
409
+
410
+ export const spec = getBidAdapter();
411
+
412
+ registerBidder(spec);
@@ -0,0 +1,72 @@
1
+ # Overview
2
+
3
+ ```
4
+ Module Name: JWPlayer Bid Adapter
5
+ Module Type: Bidder Adapter
6
+ Maintainer: boost-engineering@jwplayer.com
7
+ ```
8
+
9
+ # Description
10
+
11
+ Connects to JWPlayer's demand sources.
12
+
13
+ JWPlayer bid adapter supports Video (instream and outstream).
14
+
15
+ # Sample Ad Unit
16
+
17
+ ```markdown
18
+ const adUnit = {
19
+ code: 'test-ad-unit',
20
+ mediaTypes: {
21
+ video: {
22
+ pos: 0,
23
+ w: 640,
24
+ h: 480,
25
+ mimes : ['video/x-ms-wmv', 'video/mp4'],
26
+ minduration : 0,
27
+ maxduration: 60,
28
+ protocols : [2,3,7,5,6,8],
29
+ startdelay: 0,
30
+ placement: 1,
31
+ plcmt: 1,
32
+ skip: 1,
33
+ skipafter: 10,
34
+ playbackmethod: [3],
35
+ api: [2],
36
+ linearity: 1
37
+ }
38
+ },
39
+ bids: [{
40
+ bidder: 'jwplayer',
41
+ params: {
42
+ publisherId: 'test-publisher-id',
43
+ siteId: 'test-site-id',
44
+ placementId: 'test-placement-id'
45
+ }
46
+ }]
47
+ };
48
+ ```
49
+
50
+ # Sample ortb2 config
51
+
52
+ ```markdown
53
+ pbjs.setConfig({
54
+ ortb2: {
55
+ site: {
56
+ publisher: {
57
+ id: 'test-publisher-id'
58
+ },
59
+ content: {
60
+ id: 'test-media-id',
61
+ url: 'test.mp4',
62
+ title: 'title of my media',
63
+ ext: {
64
+ description: 'description of my media'
65
+ }
66
+ },
67
+ domain: 'test-domain.com',
68
+ page: 'https://www.test-domain.com/test.html',
69
+ }
70
+ }
71
+ }
72
+ ```
@@ -2,7 +2,7 @@ import { logError } from '../src/utils.js';
2
2
  import { ajax } from '../src/ajax.js';
3
3
  import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
4
4
  import adapterManager from '../src/adapterManager.js';
5
- import CONSTANTS from '../src/constants.json';
5
+ import { EVENTS } from '../src/constants.js';
6
6
 
7
7
  const EVENT_URL = 'https://krk.kargo.com/api/v1/event';
8
8
  const KARGO_BIDDER_CODE = 'kargo';
@@ -23,11 +23,11 @@ var kargoAnalyticsAdapter = Object.assign(
23
23
  adapter({ analyticsType }), {
24
24
  track({ eventType, args }) {
25
25
  switch (eventType) {
26
- case CONSTANTS.EVENTS.AUCTION_INIT: {
26
+ case EVENTS.AUCTION_INIT: {
27
27
  _logBidResponseData.auctionTimeout = args.timeout;
28
28
  break;
29
29
  }
30
- case CONSTANTS.EVENTS.BID_RESPONSE: {
30
+ case EVENTS.BID_RESPONSE: {
31
31
  handleBidResponseData(args);
32
32
  break;
33
33
  }
@@ -195,25 +195,19 @@ function buildRequests(validBidRequests, bidderRequest) {
195
195
  }
196
196
 
197
197
  function interpretResponse(response, bidRequest) {
198
- let bids = response.body;
198
+ const bids = response.body;
199
199
  const bidResponses = [];
200
200
 
201
- if (isEmpty(bids)) {
201
+ if (isEmpty(bids) || typeof bids !== 'object') {
202
202
  return bidResponses;
203
203
  }
204
204
 
205
- if (typeof bids !== 'object') {
206
- return bidResponses;
207
- }
208
-
209
- Object.entries(bids).forEach((entry) => {
210
- const [bidID, adUnit] = entry;
211
-
205
+ for (const [bidID, adUnit] of Object.entries(bids)) {
212
206
  let meta = {
213
207
  mediaType: adUnit.mediaType && BIDDER.SUPPORTED_MEDIA_TYPES.includes(adUnit.mediaType) ? adUnit.mediaType : BANNER
214
208
  };
215
209
 
216
- if (adUnit.metadata && adUnit.metadata.landingPageDomain) {
210
+ if (adUnit.metadata?.landingPageDomain) {
217
211
  meta.clickUrl = adUnit.metadata.landingPageDomain[0];
218
212
  meta.advertiserDomains = adUnit.metadata.landingPageDomain;
219
213
  }
@@ -243,7 +237,7 @@ function interpretResponse(response, bidRequest) {
243
237
  }
244
238
 
245
239
  bidResponses.push(bidResponse);
246
- })
240
+ }
247
241
 
248
242
  return bidResponses;
249
243
  }
@@ -4,7 +4,7 @@ import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
4
4
  import adapterManager from '../src/adapterManager.js';
5
5
  import { targeting } from '../src/targeting.js';
6
6
  import { config } from '../src/config.js';
7
- import CONSTANTS from '../src/constants.json';
7
+ import {EVENTS} from '../src/constants.js';
8
8
 
9
9
  const TRACKER_HOST = 'tracker.konduit.me';
10
10
  const KONDUIT_PREBID_MODULE_VERSION = '1.0.0';
@@ -12,13 +12,13 @@ const KONDUIT_PREBID_MODULE_VERSION = '1.0.0';
12
12
  const analyticsType = 'endpoint';
13
13
 
14
14
  const eventDataComposerMap = {
15
- [CONSTANTS.EVENTS.AUCTION_INIT]: obtainAuctionInfo,
16
- [CONSTANTS.EVENTS.AUCTION_END]: obtainAuctionInfo,
17
- [CONSTANTS.EVENTS.BID_REQUESTED]: obtainBidRequestsInfo,
18
- [CONSTANTS.EVENTS.BID_TIMEOUT]: obtainBidTimeoutInfo,
19
- [CONSTANTS.EVENTS.BID_RESPONSE]: obtainBidResponseInfo,
20
- [CONSTANTS.EVENTS.BID_WON]: obtainWinnerBidInfo,
21
- [CONSTANTS.EVENTS.NO_BID]: obtainNoBidInfo,
15
+ [EVENTS.AUCTION_INIT]: obtainAuctionInfo,
16
+ [EVENTS.AUCTION_END]: obtainAuctionInfo,
17
+ [EVENTS.BID_REQUESTED]: obtainBidRequestsInfo,
18
+ [EVENTS.BID_TIMEOUT]: obtainBidTimeoutInfo,
19
+ [EVENTS.BID_RESPONSE]: obtainBidResponseInfo,
20
+ [EVENTS.BID_WON]: obtainWinnerBidInfo,
21
+ [EVENTS.NO_BID]: obtainNoBidInfo,
22
22
  };
23
23
 
24
24
  // This function is copy from prebid core
@@ -43,7 +43,7 @@ function buildUrl(obj) {
43
43
 
44
44
  const getWinnerBidFromAggregatedEvents = () => {
45
45
  return konduitAnalyticsAdapter.context.aggregatedEvents
46
- .filter(evt => evt.eventType === CONSTANTS.EVENTS.BID_WON)[0];
46
+ .filter(evt => evt.eventType === EVENTS.BID_WON)[0];
47
47
  };
48
48
 
49
49
  const isWinnerBidDetected = () => {
@@ -57,7 +57,7 @@ const konduitAnalyticsAdapter = Object.assign(
57
57
  adapter({ analyticsType }),
58
58
  {
59
59
  track ({ eventType, args }) {
60
- if (CONSTANTS.EVENTS.AUCTION_INIT === eventType) {
60
+ if (EVENTS.AUCTION_INIT === eventType) {
61
61
  konduitAnalyticsAdapter.context.aggregatedEvents.splice(0);
62
62
  }
63
63
 
@@ -68,12 +68,12 @@ const konduitAnalyticsAdapter = Object.assign(
68
68
  });
69
69
  }
70
70
 
71
- if (eventType === CONSTANTS.EVENTS.AUCTION_END) {
71
+ if (eventType === EVENTS.AUCTION_END) {
72
72
  if (!isWinnerBidDetected() && isWinnerBidExist()) {
73
- const bidWonData = eventDataComposerMap[CONSTANTS.EVENTS.BID_WON](targeting.getWinningBids()[0]);
73
+ const bidWonData = eventDataComposerMap[EVENTS.BID_WON](targeting.getWinningBids()[0]);
74
74
 
75
75
  konduitAnalyticsAdapter.context.aggregatedEvents.push({
76
- eventType: CONSTANTS.EVENTS.BID_WON,
76
+ eventType: EVENTS.BID_WON,
77
77
  data: bidWonData,
78
78
  });
79
79
  }
@@ -1,7 +1,7 @@
1
1
  import {ajax} from '../src/ajax.js';
2
2
  import { generateUUID, logInfo, logWarn } from '../src/utils.js';
3
3
  import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
4
- import CONSTANTS from '../src/constants.json';
4
+ import { EVENTS } from '../src/constants.js';
5
5
  import adapterManager from '../src/adapterManager.js';
6
6
  import { auctionManager } from '../src/auctionManager.js';
7
7
  import { getRefererInfo } from '../src/refererDetection.js';
@@ -11,7 +11,7 @@ const URL = 'https://wba.liadm.com/analytic-events';
11
11
  const GVL_ID = 148;
12
12
  const ADAPTER_CODE = 'liveintent';
13
13
  const DEFAULT_BID_WON_TIMEOUT = 2000;
14
- const { EVENTS: { AUCTION_END } } = CONSTANTS;
14
+ const { AUCTION_END } = EVENTS;
15
15
  let bidWonTimeout;
16
16
 
17
17
  function handleAuctionEnd(args) {
@@ -1,7 +1,7 @@
1
1
  import { timestamp, logInfo, getWindowTop } from '../src/utils.js';
2
2
  import {ajax} from '../src/ajax.js';
3
3
  import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
4
- import CONSTANTS from '../src/constants.json';
4
+ import { EVENTS, STATUS } from '../src/constants.js';
5
5
  import adapterManager from '../src/adapterManager.js';
6
6
  import { getGlobal } from '../src/prebidGlobal.js';
7
7
 
@@ -28,11 +28,11 @@ let livewrappedAnalyticsAdapter = Object.assign(adapter({EMPTYURL, ANALYTICSTYPE
28
28
  logInfo('LIVEWRAPPED_EVENT:', [eventType, args]);
29
29
 
30
30
  switch (eventType) {
31
- case CONSTANTS.EVENTS.AUCTION_INIT:
31
+ case EVENTS.AUCTION_INIT:
32
32
  logInfo('LIVEWRAPPED_AUCTION_INIT:', args);
33
33
  cache.auctions[args.auctionId] = {bids: {}, bidAdUnits: {}};
34
34
  break;
35
- case CONSTANTS.EVENTS.BID_REQUESTED:
35
+ case EVENTS.BID_REQUESTED:
36
36
  logInfo('LIVEWRAPPED_BID_REQUESTED:', args);
37
37
  cache.auctions[args.auctionId].timeStamp = args.start;
38
38
 
@@ -73,11 +73,11 @@ let livewrappedAnalyticsAdapter = Object.assign(adapter({EMPTYURL, ANALYTICSTYPE
73
73
  });
74
74
  logInfo(livewrappedAnalyticsAdapter.requestEvents);
75
75
  break;
76
- case CONSTANTS.EVENTS.BID_RESPONSE:
76
+ case EVENTS.BID_RESPONSE:
77
77
  logInfo('LIVEWRAPPED_BID_RESPONSE:', args);
78
78
 
79
79
  let bidResponse = cache.auctions[args.auctionId].bids[args.requestId];
80
- bidResponse.isBid = args.getStatusCode() === CONSTANTS.STATUS.GOOD;
80
+ bidResponse.isBid = args.getStatusCode() === STATUS.GOOD;
81
81
  bidResponse.width = args.width;
82
82
  bidResponse.height = args.height;
83
83
  bidResponse.cpm = args.cpm;
@@ -101,7 +101,7 @@ let livewrappedAnalyticsAdapter = Object.assign(adapter({EMPTYURL, ANALYTICSTYPE
101
101
  };
102
102
  }
103
103
  break;
104
- case CONSTANTS.EVENTS.BIDDER_DONE:
104
+ case EVENTS.BIDDER_DONE:
105
105
  logInfo('LIVEWRAPPED_BIDDER_DONE:', args);
106
106
  args.bids.forEach(doneBid => {
107
107
  let bid = cache.auctions[doneBid.auctionId].bids[doneBid.bidId || doneBid.requestId];
@@ -111,7 +111,7 @@ let livewrappedAnalyticsAdapter = Object.assign(adapter({EMPTYURL, ANALYTICSTYPE
111
111
  bid.readyToSend = 1;
112
112
  });
113
113
  break;
114
- case CONSTANTS.EVENTS.BID_WON:
114
+ case EVENTS.BID_WON:
115
115
  logInfo('LIVEWRAPPED_BID_WON:', args);
116
116
  let wonBid = cache.auctions[args.auctionId].bids[args.requestId];
117
117
  wonBid.won = true;
@@ -123,7 +123,7 @@ let livewrappedAnalyticsAdapter = Object.assign(adapter({EMPTYURL, ANALYTICSTYPE
123
123
  livewrappedAnalyticsAdapter.sendEvents();
124
124
  }
125
125
  break;
126
- case CONSTANTS.EVENTS.AD_RENDER_FAILED:
126
+ case EVENTS.AD_RENDER_FAILED:
127
127
  logInfo('LIVEWRAPPED_AD_RENDER_FAILED:', args);
128
128
  let adRenderFailedBid = cache.auctions[args.bid.auctionId].bids[args.bid.requestId];
129
129
  adRenderFailedBid.adRenderFailed = true;
@@ -133,13 +133,13 @@ let livewrappedAnalyticsAdapter = Object.assign(adapter({EMPTYURL, ANALYTICSTYPE
133
133
  livewrappedAnalyticsAdapter.sendEvents();
134
134
  }
135
135
  break;
136
- case CONSTANTS.EVENTS.BID_TIMEOUT:
136
+ case EVENTS.BID_TIMEOUT:
137
137
  logInfo('LIVEWRAPPED_BID_TIMEOUT:', args);
138
138
  args.forEach(timeout => {
139
139
  cache.auctions[timeout.auctionId].bids[timeout.bidId].timeout = true;
140
140
  });
141
141
  break;
142
- case CONSTANTS.EVENTS.AUCTION_END:
142
+ case EVENTS.AUCTION_END:
143
143
  logInfo('LIVEWRAPPED_AUCTION_END:', args);
144
144
  setTimeout(() => {
145
145
  livewrappedAnalyticsAdapter.sendEvents();