prebid.js 7.25.0 → 7.27.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 (353) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/adWMGAnalyticsAdapter.js +1 -1
  4. package/dist/adagioAnalyticsAdapter.js +1 -1
  5. package/dist/adagioBidAdapter.js +1 -1
  6. package/dist/adbookpspBidAdapter.js +1 -1
  7. package/dist/adgenerationBidAdapter.js +1 -1
  8. package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
  9. package/dist/adlooxAdServerVideo.js +1 -1
  10. package/dist/adlooxAnalyticsAdapter.js +1 -1
  11. package/dist/adlooxRtdProvider.js +1 -1
  12. package/dist/admaticBidAdapter.js +1 -1
  13. package/dist/admixerBidAdapter.js +1 -1
  14. package/dist/adomikAnalyticsAdapter.js +1 -1
  15. package/dist/adrelevantisBidAdapter.js +1 -1
  16. package/dist/adtrgtmeBidAdapter.js +1 -1
  17. package/dist/adxcgAnalyticsAdapter.js +1 -1
  18. package/dist/adxcgBidAdapter.js +1 -1
  19. package/dist/adxpremiumAnalyticsAdapter.js +1 -1
  20. package/dist/aidemBidAdapter.js +1 -0
  21. package/dist/ajaBidAdapter.js +1 -1
  22. package/dist/amxBidAdapter.js +1 -1
  23. package/dist/amxIdSystem.js +1 -1
  24. package/dist/analyticsAdapter.js +1 -1
  25. package/dist/appierAnalyticsAdapter.js +1 -1
  26. package/dist/appnexusBidAdapter.js +1 -1
  27. package/dist/asoBidAdapter.js +1 -1
  28. package/dist/atsAnalyticsAdapter.js +1 -1
  29. package/dist/axonixBidAdapter.js +1 -1
  30. package/dist/beopBidAdapter.js +1 -1
  31. package/dist/bidViewability.js +1 -1
  32. package/dist/bidglassBidAdapter.js +1 -1
  33. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  34. package/dist/big-richmediaBidAdapter.js +1 -1
  35. package/dist/bridgewellBidAdapter.js +1 -1
  36. package/dist/brightMountainMediaBidAdapter.js +1 -1
  37. package/dist/browsiRtdProvider.js +1 -1
  38. package/dist/bucksenseBidAdapter.js +1 -1
  39. package/dist/byDataAnalyticsAdapter.js +1 -1
  40. package/dist/captifyRtdProvider.js +1 -0
  41. package/dist/carodaBidAdapter.js +1 -1
  42. package/dist/chtnwBidAdapter.js +1 -1
  43. package/dist/concertAnalyticsAdapter.js +1 -1
  44. package/dist/concertBidAdapter.js +1 -1
  45. package/dist/connectadBidAdapter.js +1 -1
  46. package/dist/consentManagement.js +1 -1
  47. package/dist/consentManagementUsp.js +1 -1
  48. package/dist/consumableBidAdapter.js +1 -1
  49. package/dist/conversantAnalyticsAdapter.js +1 -1
  50. package/dist/conversantBidAdapter.js +1 -1
  51. package/dist/craftBidAdapter.js +1 -1
  52. package/dist/criteoBidAdapter.js +1 -1
  53. package/dist/datablocksAnalyticsAdapter.js +1 -1
  54. package/dist/dependencies.json +6 -0
  55. package/dist/dfpAdServerVideo.js +1 -1
  56. package/dist/discoveryBidAdapter.js +1 -1
  57. package/dist/dspxBidAdapter.js +1 -1
  58. package/dist/eplanningAnalyticsAdapter.js +1 -1
  59. package/dist/eplanningBidAdapter.js +1 -1
  60. package/dist/finativeBidAdapter.js +1 -1
  61. package/dist/fintezaAnalyticsAdapter.js +1 -1
  62. package/dist/fluctBidAdapter.js +1 -1
  63. package/dist/ftrackIdSystem.js +1 -1
  64. package/dist/gdprEnforcement.js +1 -1
  65. package/dist/genericAnalyticsAdapter.js +1 -0
  66. package/dist/geoedgeRtdProvider.js +1 -1
  67. package/dist/glimpseBidAdapter.js +1 -1
  68. package/dist/glomexBidAdapter.js +1 -1
  69. package/dist/gmosspBidAdapter.js +1 -1
  70. package/dist/goldbachBidAdapter.js +1 -1
  71. package/dist/googleAnalyticsAdapter.js +1 -1
  72. package/dist/gravitoIdSystem.js +1 -1
  73. package/dist/gridBidAdapter.js +1 -1
  74. package/dist/gridNMBidAdapter.js +1 -1
  75. package/dist/growthCodeAnalyticsAdapter.js +1 -0
  76. package/dist/gumgumBidAdapter.js +1 -1
  77. package/dist/h12mediaBidAdapter.js +1 -1
  78. package/dist/hadronAnalyticsAdapter.js +1 -1
  79. package/dist/id5AnalyticsAdapter.js +1 -1
  80. package/dist/id5IdSystem.js +1 -1
  81. package/dist/impactifyBidAdapter.js +1 -1
  82. package/dist/improvedigitalBidAdapter.js +1 -1
  83. package/dist/inmarBidAdapter.js +1 -1
  84. package/dist/insticatorBidAdapter.js +1 -1
  85. package/dist/invisiblyAnalyticsAdapter.js +1 -1
  86. package/dist/ixBidAdapter.js +1 -1
  87. package/dist/justpremiumBidAdapter.js +1 -1
  88. package/dist/jwplayerRtdProvider.js +1 -1
  89. package/dist/kargoAnalyticsAdapter.js +1 -1
  90. package/dist/kinessoIdSystem.js +1 -1
  91. package/dist/konduitAnalyticsAdapter.js +1 -1
  92. package/dist/kueezBidAdapter.js +1 -1
  93. package/dist/kueezRtbBidAdapter.js +1 -1
  94. package/dist/lassoBidAdapter.js +1 -1
  95. package/dist/lifestreetBidAdapter.js +1 -1
  96. package/dist/limelightDigitalBidAdapter.js +1 -1
  97. package/dist/liveIntentAnalyticsAdapter.js +1 -1
  98. package/dist/liveIntentIdSystem.js +1 -1
  99. package/dist/livewrappedAnalyticsAdapter.js +1 -1
  100. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  101. package/dist/logicadBidAdapter.js +1 -1
  102. package/dist/loglyliftBidAdapter.js +1 -1
  103. package/dist/lotamePanoramaIdSystem.js +1 -1
  104. package/dist/magniteAnalyticsAdapter.js +1 -1
  105. package/dist/malltvAnalyticsAdapter.js +1 -1
  106. package/dist/marsmediaAnalyticsAdapter.js +1 -1
  107. package/dist/marsmediaBidAdapter.js +1 -1
  108. package/dist/mediafuseBidAdapter.js +1 -1
  109. package/dist/medianetAnalyticsAdapter.js +1 -1
  110. package/dist/mediasquareBidAdapter.js +1 -1
  111. package/dist/mgidBidAdapter.js +1 -1
  112. package/dist/minutemediaBidAdapter.js +1 -1
  113. package/dist/nextMillenniumBidAdapter.js +1 -1
  114. package/dist/nexx360BidAdapter.js +1 -1
  115. package/dist/not-for-prod/prebid.js +240 -202
  116. package/dist/oguryBidAdapter.js +1 -1
  117. package/dist/onetagBidAdapter.js +1 -1
  118. package/dist/ooloAnalyticsAdapter.js +1 -1
  119. package/dist/openxAnalyticsAdapter.js +1 -1
  120. package/dist/optimonAnalyticsAdapter.js +1 -1
  121. package/dist/outbrainBidAdapter.js +1 -1
  122. package/dist/parrableIdSystem.js +1 -1
  123. package/dist/pbsExtensions.js +1 -1
  124. package/dist/pianoDmpAnalyticsAdapter.js +1 -1
  125. package/dist/pixfutureBidAdapter.js +1 -1
  126. package/dist/prebid-core.js +1 -1
  127. package/dist/prebidServerBidAdapter.js +1 -1
  128. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  129. package/dist/pubCommonId.js +1 -1
  130. package/dist/pubProvidedIdSystem.js +1 -1
  131. package/dist/publinkIdSystem.js +1 -1
  132. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  133. package/dist/pubmaticBidAdapter.js +1 -1
  134. package/dist/pubperfAnalyticsAdapter.js +1 -1
  135. package/dist/pubstackAnalyticsAdapter.js +1 -1
  136. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  137. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  138. package/dist/pulsepointAnalyticsAdapter.js +1 -1
  139. package/dist/pxyzBidAdapter.js +1 -1
  140. package/dist/quantcastBidAdapter.js +1 -1
  141. package/dist/quantcastIdSystem.js +1 -1
  142. package/dist/rasBidAdapter.js +1 -1
  143. package/dist/readpeakBidAdapter.js +1 -1
  144. package/dist/realvuAnalyticsAdapter.js +1 -1
  145. package/dist/redtramBidAdapter.js +1 -0
  146. package/dist/relaidoBidAdapter.js +1 -1
  147. package/dist/relevantAnalyticsAdapter.js +1 -1
  148. package/dist/rhythmoneBidAdapter.js +1 -1
  149. package/dist/riseBidAdapter.js +1 -1
  150. package/dist/rivrAnalyticsAdapter.js +1 -1
  151. package/dist/roxotAnalyticsAdapter.js +1 -1
  152. package/dist/rtbhouseBidAdapter.js +1 -1
  153. package/dist/rtdModule.js +1 -1
  154. package/dist/rubiconAnalyticsAdapter.js +1 -1
  155. package/dist/rubiconBidAdapter.js +1 -1
  156. package/dist/s2sTesting.js +1 -1
  157. package/dist/scaleableAnalyticsAdapter.js +1 -1
  158. package/dist/schain.js +1 -1
  159. package/dist/seedingAllianceBidAdapter.js +1 -1
  160. package/dist/seedtagBidAdapter.js +1 -1
  161. package/dist/sharedIdSystem.js +1 -1
  162. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  163. package/dist/sharethroughBidAdapter.js +1 -1
  164. package/dist/shinezBidAdapter.js +1 -1
  165. package/dist/sigmoidAnalyticsAdapter.js +1 -1
  166. package/dist/smaatoBidAdapter.js +1 -1
  167. package/dist/smartadserverBidAdapter.js +1 -1
  168. package/dist/smartxBidAdapter.js +1 -1
  169. package/dist/smartytechBidAdapter.js +1 -0
  170. package/dist/smilewantedBidAdapter.js +1 -1
  171. package/dist/sonobiAnalyticsAdapter.js +1 -1
  172. package/dist/sonobiBidAdapter.js +1 -1
  173. package/dist/sovrnAnalyticsAdapter.js +1 -1
  174. package/dist/sovrnBidAdapter.js +1 -1
  175. package/dist/sspBCBidAdapter.js +1 -1
  176. package/dist/staqAnalyticsAdapter.js +1 -1
  177. package/dist/sublimeBidAdapter.js +1 -1
  178. package/dist/synacormediaBidAdapter.js +1 -1
  179. package/dist/taboolaBidAdapter.js +1 -1
  180. package/dist/tapadIdSystem.js +1 -1
  181. package/dist/tappxBidAdapter.js +1 -1
  182. package/dist/targetVideoBidAdapter.js +1 -1
  183. package/dist/teadsBidAdapter.js +1 -1
  184. package/dist/teadsIdSystem.js +1 -1
  185. package/dist/terceptAnalyticsAdapter.js +1 -1
  186. package/dist/trionBidAdapter.js +1 -1
  187. package/dist/tripleliftBidAdapter.js +1 -1
  188. package/dist/ttdBidAdapter.js +1 -1
  189. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  190. package/dist/underdogmediaBidAdapter.js +1 -1
  191. package/dist/undertoneBidAdapter.js +1 -1
  192. package/dist/userId.js +1 -1
  193. package/dist/vidazooBidAdapter.js +1 -1
  194. package/dist/videobyteBidAdapter.js +1 -1
  195. package/dist/viqeoBidAdapter.js +1 -0
  196. package/dist/visxBidAdapter.js +1 -1
  197. package/dist/vuukleBidAdapter.js +1 -1
  198. package/dist/weboramaRtdProvider.js +1 -1
  199. package/dist/widespaceBidAdapter.js +1 -1
  200. package/dist/winrBidAdapter.js +1 -1
  201. package/dist/yahoosspBidAdapter.js +1 -1
  202. package/dist/yandexBidAdapter.js +1 -1
  203. package/dist/yieldlabBidAdapter.js +1 -1
  204. package/dist/yieldliftBidAdapter.js +1 -1
  205. package/dist/yieldmoBidAdapter.js +1 -1
  206. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  207. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  208. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  209. package/dist/zeta_global_sspBidAdapter.js +1 -1
  210. package/dist/zeusPrimeRtdProvider.js +31 -0
  211. package/integrationExamples/gpt/captifyRtdProvider_example.html +167 -0
  212. package/integrationExamples/gpt/growthcode.html +134 -0
  213. package/libraries/analyticsAdapter/AnalyticsAdapter.js +95 -102
  214. package/modules/.submodules.json +3 -1
  215. package/modules/admaticBidAdapter.js +116 -58
  216. package/modules/admaticBidAdapter.md +2 -2
  217. package/modules/admixerBidAdapter.js +1 -1
  218. package/modules/aidemBidAdapter.js +492 -0
  219. package/modules/aidemBidAdapter.md +187 -0
  220. package/modules/beopBidAdapter.js +17 -2
  221. package/modules/browsiRtdProvider.js +6 -4
  222. package/modules/bucksenseBidAdapter.js +1 -1
  223. package/modules/captifyRtdProvider.js +146 -0
  224. package/modules/captifyRtdProvider.md +68 -0
  225. package/modules/criteoBidAdapter.js +3 -3
  226. package/modules/discoveryBidAdapter.js +38 -17
  227. package/modules/discoveryBidAdapter.md +7 -6
  228. package/modules/eplanningBidAdapter.js +2 -6
  229. package/modules/fluctBidAdapter.js +5 -0
  230. package/modules/gdprEnforcement.js +26 -24
  231. package/modules/genericAnalyticsAdapter.js +157 -0
  232. package/modules/geoedgeRtdProvider.js +22 -0
  233. package/modules/glomexBidAdapter.js +2 -0
  234. package/modules/gravitoIdSystem.js +3 -4
  235. package/modules/gridBidAdapter.js +441 -23
  236. package/modules/gridNMBidAdapter.js +1 -1
  237. package/modules/growthCodeAnalyticsAdapter.js +176 -0
  238. package/modules/growthCodeAnalyticsAdapter.md +41 -0
  239. package/modules/impactifyBidAdapter.js +19 -1
  240. package/modules/jwplayerRtdProvider.js +1 -2
  241. package/modules/limelightDigitalBidAdapter.js +1 -1
  242. package/modules/minutemediaBidAdapter.md +3 -3
  243. package/modules/nextMillenniumBidAdapter.js +19 -23
  244. package/modules/nexx360BidAdapter.js +264 -138
  245. package/modules/pubCommonId.js +2 -1
  246. package/modules/pubProvidedIdSystem.js +2 -0
  247. package/modules/rasBidAdapter.js +8 -3
  248. package/modules/rasBidAdapter.md +16 -15
  249. package/modules/redtramBidAdapter.js +155 -0
  250. package/modules/redtramBidAdapter.md +33 -0
  251. package/modules/riseBidAdapter.js +15 -0
  252. package/modules/riseBidAdapter.md +3 -3
  253. package/modules/rtbhouseBidAdapter.js +90 -29
  254. package/modules/rubiconBidAdapter.js +2 -1
  255. package/modules/seedtagBidAdapter.js +67 -56
  256. package/modules/seedtagBidAdapter.md +60 -0
  257. package/modules/sharedIdSystem.js +3 -1
  258. package/modules/smartadserverBidAdapter.js +6 -2
  259. package/modules/smartxBidAdapter.js +11 -8
  260. package/modules/smartytechBidAdapter.js +78 -0
  261. package/modules/smartytechBidAdapter.md +44 -0
  262. package/modules/smnBidAdapter.md +52 -0
  263. package/modules/taboolaBidAdapter.js +3 -3
  264. package/modules/taboolaBidAdapter.md +0 -2
  265. package/modules/tappxBidAdapter.js +21 -6
  266. package/modules/tripleliftBidAdapter.js +1 -1
  267. package/modules/ttdBidAdapter.js +8 -3
  268. package/modules/userId/index.js +1 -1
  269. package/modules/vidazooBidAdapter.js +26 -3
  270. package/modules/viqeoBidAdapter.js +180 -0
  271. package/modules/viqeoBidAdapter.md +56 -0
  272. package/modules/yandexBidAdapter.js +85 -19
  273. package/modules/yandexBidAdapter.md +7 -7
  274. package/modules/yieldlabBidAdapter.js +29 -12
  275. package/modules/yieldliftBidAdapter.js +3 -3
  276. package/modules/yieldoneBidAdapter.js +60 -8
  277. package/modules/yieldoneBidAdapter.md +109 -9
  278. package/modules/zeta_global_sspBidAdapter.js +4 -0
  279. package/modules/zeusPrimeRtdProvider.js +357 -0
  280. package/modules/zeusPrimeRtdProvider.md +60 -0
  281. package/package.json +1 -1
  282. package/src/adloader.js +0 -1
  283. package/src/auction.js +19 -3
  284. package/src/consentHandler.js +8 -0
  285. package/src/events.js +4 -0
  286. package/src/native.js +31 -20
  287. package/src/refererDetection.js +6 -1
  288. package/src/storageManager.js +6 -3
  289. package/test/helpers/analytics.js +34 -0
  290. package/test/mocks/analyticsStub.js +3 -1
  291. package/test/spec/AnalyticsAdapter_spec.js +119 -116
  292. package/test/spec/auctionmanager_spec.js +86 -0
  293. package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +10 -8
  294. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +18 -25
  295. package/test/spec/modules/admaticBidAdapter_spec.js +262 -3
  296. package/test/spec/modules/aidemBidAdapter_spec.js +664 -0
  297. package/test/spec/modules/beopBidAdapter_spec.js +52 -0
  298. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +0 -2
  299. package/test/spec/modules/browsiRtdProvider_spec.js +2 -1
  300. package/test/spec/modules/captifyRtdProvider_spec.js +253 -0
  301. package/test/spec/modules/concertAnalyticsAdapter_spec.js +2 -4
  302. package/test/spec/modules/discoveryBidAdapter_spec.js +9 -8
  303. package/test/spec/modules/enrichmentFpdModule_spec.js +3 -2
  304. package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +0 -3
  305. package/test/spec/modules/eplanningBidAdapter_spec.js +4 -4
  306. package/test/spec/modules/fluctBidAdapter_spec.js +37 -1
  307. package/test/spec/modules/fpdModule_spec.js +1 -1
  308. package/test/spec/modules/gdprEnforcement_spec.js +115 -68
  309. package/test/spec/modules/genericAnalyticsAdapter_spec.js +284 -0
  310. package/test/spec/modules/geoedgeRtdProvider_spec.js +15 -0
  311. package/test/spec/modules/glomexBidAdapter_spec.js +4 -0
  312. package/test/spec/modules/gravitoIdSystem_spec.js +1 -1
  313. package/test/spec/modules/gridBidAdapter_spec.js +289 -1
  314. package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +70 -0
  315. package/test/spec/modules/impactifyBidAdapter_spec.js +13 -0
  316. package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +17 -27
  317. package/test/spec/modules/jwplayerRtdProvider_spec.js +3 -3
  318. package/test/spec/modules/konduitAnalyticsAdapter_spec.js +0 -2
  319. package/test/spec/modules/liveIntentAnalyticsAdapter_spec.js +3 -6
  320. package/test/spec/modules/medianetAnalyticsAdapter_spec.js +7 -1
  321. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +4 -3
  322. package/test/spec/modules/nexx360BidAdapter_spec.js +441 -221
  323. package/test/spec/modules/optimonAnalyticsAdapter_spec.js +3 -11
  324. package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +4 -11
  325. package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +3 -12
  326. package/test/spec/modules/pubperfAnalyticsAdapter_spec.js +6 -19
  327. package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +3 -17
  328. package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +13 -19
  329. package/test/spec/modules/rasBidAdapter_spec.js +5 -1
  330. package/test/spec/modules/redtramBidAdapter_spec.js +256 -0
  331. package/test/spec/modules/riseBidAdapter_spec.js +24 -0
  332. package/test/spec/modules/rtbhouseBidAdapter_spec.js +79 -0
  333. package/test/spec/modules/seedtagBidAdapter_spec.js +65 -92
  334. package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +4 -8
  335. package/test/spec/modules/smartadserverBidAdapter_spec.js +80 -0
  336. package/test/spec/modules/smartxBidAdapter_spec.js +32 -0
  337. package/test/spec/modules/smartytechBidAdapter_spec.js +162 -0
  338. package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +6 -18
  339. package/test/spec/modules/taboolaBidAdapter_spec.js +0 -77
  340. package/test/spec/modules/tripleliftBidAdapter_spec.js +3 -10
  341. package/test/spec/modules/ttdBidAdapter_spec.js +27 -0
  342. package/test/spec/modules/vidazooBidAdapter_spec.js +39 -24
  343. package/test/spec/modules/viqeoBidAdapter_spec.js +124 -0
  344. package/test/spec/modules/yandexBidAdapter_spec.js +22 -13
  345. package/test/spec/modules/yieldlabBidAdapter_spec.js +174 -20
  346. package/test/spec/modules/yieldliftBidAdapter_spec.js +1 -1
  347. package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +5 -2
  348. package/test/spec/modules/yieldoneBidAdapter_spec.js +30 -6
  349. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +16 -1
  350. package/test/spec/modules/zeusPrimeRtdProvider_spec.js +410 -0
  351. package/test/spec/native_spec.js +68 -56
  352. package/test/spec/refererDetection_spec.js +45 -7
  353. package/test/spec/unit/core/storageManager_spec.js +2 -1
@@ -0,0 +1,180 @@
1
+ import {registerBidder} from '../src/adapters/bidderFactory.js';
2
+ import {logError, logInfo, _each, mergeDeep, isFn, isNumber, isPlainObject} from '../src/utils.js'
3
+ import {VIDEO} from '../src/mediaTypes.js';
4
+ import {Renderer} from '../src/Renderer.js';
5
+
6
+ const BIDDER_CODE = 'viqeo';
7
+ const DEFAULT_MIMES = ['application/javascript'];
8
+ const VIQEO_ENDPOINT = 'https://ads.betweendigital.com/openrtb_bid';
9
+ const RENDERER_URL = 'https://cdn.viqeo.tv/js/vq_starter.js';
10
+ const DEFAULT_CURRENCY = 'USD';
11
+ const DEFAULT_SSPID = 44697;
12
+
13
+ function getBidFloor(bid) {
14
+ const {floor, currency} = bid.params;
15
+ const curr = currency || DEFAULT_CURRENCY;
16
+ if (!isFn(bid.getFloor)) {
17
+ return {floor: isNumber(floor) ? floor : 0, currency: curr};
18
+ }
19
+ const floorInfo = bid.getFloor({currency: curr, mediaType: VIDEO, size: '*'});
20
+ if (isPlainObject(floorInfo) && isNumber(floorInfo.floor) && floorInfo.currency === curr) {
21
+ return floorInfo;
22
+ }
23
+ return {floor: floor || 0, currency: currency || DEFAULT_CURRENCY};
24
+ }
25
+
26
+ function getVideoTargetingParams({mediaTypes: {video}}) {
27
+ const result = {};
28
+ Object.keys(Object(video))
29
+ .forEach(key => {
30
+ if (key === 'playerSize') {
31
+ result.w = video.playerSize[0][0];
32
+ result.h = video.playerSize[0][1];
33
+ } else if (key !== 'context') {
34
+ result[key] = video[key];
35
+ }
36
+ })
37
+ return result;
38
+ }
39
+
40
+ /**
41
+ * @type {BidderSpec}
42
+ */
43
+ export const spec = {
44
+ code: BIDDER_CODE,
45
+ supportedMediaTypes: [VIDEO],
46
+ /**
47
+ * @param {BidRequest} bidRequest The bid params to validate.
48
+ * @return boolean True if this is a valid bid, and false otherwise.
49
+ */
50
+ isBidRequestValid: ({params}) => {
51
+ if (!params) {
52
+ logError('failed validation: params not declared');
53
+ return false;
54
+ }
55
+ if (!params.user && !params.user?.buyeruid) {
56
+ logError('failed validation: user.buyeruid not declared');
57
+ return false;
58
+ }
59
+ if (!params.playerOptions) {
60
+ logError('failed validation: playerOptions not declared');
61
+ return false;
62
+ }
63
+ const {profileId, videoId, playerId} = params.playerOptions;
64
+ if (!profileId) {
65
+ logError('failed validation: profileId not declared');
66
+ return false;
67
+ }
68
+ if (!videoId && !playerId) {
69
+ logError('failed validation: videoId or playerId not declared');
70
+ return false;
71
+ }
72
+ return true;
73
+ },
74
+ /**
75
+ * @param validBidRequests {BidRequest[]}
76
+ * @returns {ServerRequest[]}
77
+ */
78
+ buildRequests: (validBidRequests) => {
79
+ logInfo('validBidRequests', validBidRequests);
80
+ const bidRequests = [];
81
+ _each(validBidRequests, (bid, i) => {
82
+ const {
83
+ params: {test, sspId, endpointUrl},
84
+ mediaTypes: {video},
85
+ } = bid;
86
+ const ortb2 = bid.ortb2 || {};
87
+ const user = bid.params.user || {};
88
+ const device = bid.params.device || {};
89
+ const site = bid.params.site || {};
90
+ const w = window;
91
+ const floorInfo = getBidFloor(bid);
92
+ const data = {
93
+ id: bid.bidId,
94
+ test,
95
+ imp: [{
96
+ id: `${i}`,
97
+ tagid: bid.adUnitCode,
98
+ video: {
99
+ ...getVideoTargetingParams(bid),
100
+ mimes: video.mimes || DEFAULT_MIMES,
101
+ },
102
+ bidfloor: floorInfo.floor,
103
+ bidfloorcur: floorInfo.currency,
104
+ secure: 1
105
+ }],
106
+ site: test === 1 ? {
107
+ page: 'https://viqeo.tv',
108
+ domain: 'viqeo.tv'
109
+ } : mergeDeep({
110
+ domain: w.location.hostname,
111
+ page: w.location.href
112
+ }, ortb2.site, site),
113
+ device: mergeDeep({
114
+ w: w.screen.width,
115
+ h: w.screen.height,
116
+ ua: w.navigator.userAgent,
117
+ }, ortb2.device, device),
118
+ user: mergeDeep({...user}, ortb2.user),
119
+ app: bid.params.app,
120
+ };
121
+ bidRequests.push({
122
+ url: endpointUrl || `${VIQEO_ENDPOINT}/?sspId=${sspId || DEFAULT_SSPID}`,
123
+ method: 'POST',
124
+ data,
125
+ bids: validBidRequests,
126
+ });
127
+ });
128
+ return bidRequests;
129
+ },
130
+ /**
131
+ * @param {ServerResponse} serverResponse
132
+ * @param {BidRequest} bidRequests
133
+ * @return {Bid[]}
134
+ */
135
+ interpretResponse: (serverResponse, bidRequests) => {
136
+ logInfo('serverResponse', serverResponse);
137
+ const bidResponses = [];
138
+ if (!serverResponse || !serverResponse.body) {
139
+ logError('empty response');
140
+ return [];
141
+ }
142
+ try {
143
+ const {id, seatbid, cur} = serverResponse.body;
144
+ _each(seatbid, (sb) => {
145
+ const {bid} = sb;
146
+ _each(bid, (b) => {
147
+ const bidRequest = bidRequests.bids.find(({bidId}) => bidId === id);
148
+ const renderer = Renderer.install({
149
+ url: bidRequest?.params?.renderUrl || RENDERER_URL,
150
+ });
151
+ renderer.setRender((bid) => {
152
+ if (window.VIQEO) {
153
+ window.VIQEO.renderPrebid(bid);
154
+ } else {
155
+ logError('failed get window.VIQEO');
156
+ }
157
+ });
158
+ bidResponses.push({
159
+ requestId: id,
160
+ currency: cur,
161
+ cpm: b.price,
162
+ ttl: b.exp,
163
+ netRevenue: true,
164
+ creativeId: b.cid,
165
+ width: b.w || bidRequest?.mediaTypes[VIDEO].playerSize[0][0],
166
+ height: b.h || bidRequest?.mediaTypes[VIDEO].playerSize[0][1],
167
+ vastXml: b.adm,
168
+ vastUrl: b.nurl,
169
+ mediaType: VIDEO,
170
+ renderer,
171
+ })
172
+ })
173
+ });
174
+ } catch (error) {
175
+ logError(error);
176
+ }
177
+ return bidResponses;
178
+ },
179
+ }
180
+ registerBidder(spec);
@@ -0,0 +1,56 @@
1
+ # Overview
2
+
3
+ **Module Name**: Viqeo Bidder Adapter
4
+ **Module Type**: Bidder Adapter
5
+ **Maintainer**: muravjovv1@gmail.com
6
+
7
+ # Description
8
+
9
+ Viqeo Bidder Adapter for Prebid.js. About: https://viqeo.tv/
10
+
11
+ ### Bid params
12
+
13
+ {: .table .table-bordered .table-striped }
14
+ | Name | Scope | Description | Example | Type |
15
+ |-----------------------------|----------|----------------------------------------------------------------------------------------------------------------------------|--------------------------|-----------|
16
+ | `user` | required | The object containing user data (See OpenRTB spec) | `user: {}` | `object` |
17
+ | `user.buyeruid` | required | User id | `"12345"` | `string` |
18
+ | `playerOptions` | required | The object containing Viqeo player options | `playerOptions: {}` | `object` |
19
+ | `playerOptions.profileId` | required | Viqeo profile id | `1382` | `number` |
20
+ | `playerOptions.videId` | optional | Viqeo video id | `"ed584da454c7205ca7e4"` | `string` |
21
+ | `playerOptions.playerId` | optional | Viqeo player id | `1` | `number` |
22
+ | `device` | optional | The object containing device data (See OpenRTB spec) | `device: {}` | `object` |
23
+ | `site` | optional | The object containing site data (See OpenRTB spec) | `site: {}` | `object` |
24
+ | `app` | optional | The object containing app data (See OpenRTB spec) | `app: {}` | `object` |
25
+ | `floor` | optional | Bid floor price | `0.5` | `number` |
26
+ | `currency` | optional | 3-letter ISO 4217 code defining the currency of the bid. | `EUR` | `string` |
27
+ | `test` | optional | Flag which will induce a sample bid response when true; only set to true for testing purposes (1 = true, 0 = false) | `1` | `integer` |
28
+ | `sspId` | optional | For debug, request id | `1` | `number` |
29
+ | `renderUrl` | optional | For debug, script player url | `"https://viqeo.tv"` | `string` |
30
+ | `endpointUrl` | optional | For debug, api endpoint | `"https://viqeo.tv"` | `string` |
31
+
32
+ # Test Parameters
33
+ ```
34
+ var adUnits = [{
35
+ code: 'your-slot', // use exactly the same code as your slot div id.
36
+ mediaTypes: {
37
+ video: {
38
+ context: 'outstream',
39
+ playerSize: [640, 480]
40
+ }
41
+ },
42
+ bids: [{
43
+ bidder: 'viqeo',
44
+ params: {
45
+ user: {
46
+ buyeruid: '1',
47
+ },
48
+ playerOptions: {
49
+ videoId: 'ed584da454c7205ca7e4',
50
+ profileId: 1382,
51
+ },
52
+ test: 1,
53
+ }
54
+ }]
55
+ }];
56
+ ```
@@ -1,5 +1,6 @@
1
- import { formatQS, deepAccess, triggerPixel } from '../src/utils.js';
1
+ import { formatQS, deepAccess, triggerPixel, isArray, isNumber } from '../src/utils.js';
2
2
  import { registerBidder } from '../src/adapters/bidderFactory.js';
3
+ import { BANNER } from '../src/mediaTypes.js'
3
4
 
4
5
  const BIDDER_CODE = 'yandex';
5
6
  const BIDDER_URL = 'https://bs.yandex.ru/metadsp';
@@ -10,9 +11,19 @@ const SSP_ID = 10500;
10
11
  export const spec = {
11
12
  code: BIDDER_CODE,
12
13
  aliases: ['ya'], // short code
14
+ supportedMediaTypes: [ BANNER ],
13
15
 
14
16
  isBidRequestValid: function(bid) {
15
- return !!(bid.params && bid.params.pageId && bid.params.impId);
17
+ const { params } = bid;
18
+ if (!params) {
19
+ return false;
20
+ }
21
+ const { pageId, impId } = extractPlacementIds(params);
22
+ if (!(pageId && impId)) {
23
+ return false;
24
+ }
25
+ const sizes = bid.mediaTypes?.banner?.sizes;
26
+ return isArray(sizes) && isArray(sizes[0]) && isNumber(sizes[0][0]) && isNumber(sizes[0][1]);
16
27
  },
17
28
 
18
29
  buildRequests: function(validBidRequests, bidderRequest) {
@@ -29,9 +40,19 @@ export const spec = {
29
40
  page = bidderRequest.refererInfo.page;
30
41
  }
31
42
 
43
+ let timeout = null;
44
+ if (bidderRequest) {
45
+ timeout = bidderRequest.timeout;
46
+ }
47
+
32
48
  return validBidRequests.map((bidRequest) => {
33
49
  const { params } = bidRequest;
34
- const { pageId, impId, targetRef, withCredentials = true } = params;
50
+ const { targetRef, withCredentials = true } = params;
51
+ const sizes = bidRequest.mediaTypes.banner.sizes;
52
+ const size = sizes[0];
53
+ const [ w, h ] = size;
54
+
55
+ const { pageId, impId } = extractPlacementIds(params);
35
56
 
36
57
  const queryParams = {
37
58
  'imp-id': impId,
@@ -43,24 +64,23 @@ export const spec = {
43
64
  queryParams['tcf-consent'] = consentString;
44
65
  }
45
66
 
46
- const floorInfo = bidRequest.getFloor ? bidRequest.getFloor({
47
- currency: DEFAULT_CURRENCY
48
- }) : {};
49
- const bidfloor = floorInfo.floor;
50
- const bidfloorcur = floorInfo.currency;
51
-
52
67
  const imp = {
53
68
  id: impId,
54
- bidfloor,
55
- bidfloorcur,
56
- };
57
- const bannerParams = deepAccess(bidRequest, 'mediaTypes.banner');
58
- if (bannerParams) {
59
- const [ w, h ] = bannerParams.sizes[0];
60
- imp.banner = {
69
+ banner: {
70
+ format: sizes,
61
71
  w,
62
72
  h,
63
- };
73
+ }
74
+ };
75
+
76
+ if (bidRequest.getFloor) {
77
+ const floorInfo = bidRequest.getFloor({
78
+ currency: DEFAULT_CURRENCY,
79
+ size
80
+ });
81
+
82
+ imp.bidfloor = floorInfo.floor;
83
+ imp.bidfloorcur = floorInfo.currency;
64
84
  }
65
85
 
66
86
  const queryParamsString = formatQS(queryParams);
@@ -74,6 +94,7 @@ export const spec = {
74
94
  ref_url: referrer,
75
95
  page_url: page,
76
96
  },
97
+ tmax: timeout,
77
98
  },
78
99
  options: {
79
100
  withCredentials,
@@ -102,6 +123,7 @@ export const spec = {
102
123
  width: rtbBid.w,
103
124
  height: rtbBid.h,
104
125
  creativeId: rtbBid.adid,
126
+ nurl: rtbBid.nurl,
105
127
 
106
128
  netRevenue: true,
107
129
  ttl: DEFAULT_TTL,
@@ -118,13 +140,57 @@ export const spec = {
118
140
  },
119
141
 
120
142
  onBidWon: function (bid) {
121
- const nurl = bid['nurl'];
122
-
143
+ let nurl = bid['nurl'];
123
144
  if (!nurl) {
124
145
  return;
125
146
  }
147
+
148
+ const cpm = deepAccess(bid, 'adserverTargeting.hb_pb') || '';
149
+ const curr = (bid.hasOwnProperty('originalCurrency') && bid.hasOwnProperty('originalCpm'))
150
+ ? bid.originalCurrency
151
+ : bid.currency;
152
+
153
+ nurl = nurl
154
+ .replace(/\${AUCTION_PRICE}/, cpm)
155
+ .replace(/\${AUCTION_CURRENCY}/, curr)
156
+ ;
157
+
126
158
  triggerPixel(nurl);
127
159
  }
128
160
  }
129
161
 
162
+ function extractPlacementIds(bidRequestParams) {
163
+ const { placementId } = bidRequestParams;
164
+ const result = { pageId: null, impId: null };
165
+
166
+ let pageId, impId;
167
+ if (placementId) {
168
+ /*
169
+ * Possible formats
170
+ * R-I-123456-2
171
+ * R-123456-1
172
+ * 123456-789
173
+ */
174
+ const num = placementId.lastIndexOf('-');
175
+ if (num === -1) {
176
+ return result;
177
+ }
178
+ const num2 = placementId.lastIndexOf('-', num - 1);
179
+ pageId = placementId.slice(num2 + 1, num);
180
+ impId = placementId.slice(num + 1);
181
+ } else {
182
+ pageId = bidRequestParams.pageId;
183
+ impId = bidRequestParams.impId;
184
+ }
185
+
186
+ if (!parseInt(pageId, 10) || !parseInt(impId, 10)) {
187
+ return result;
188
+ }
189
+
190
+ result.pageId = pageId;
191
+ result.impId = impId;
192
+
193
+ return result;
194
+ }
195
+
130
196
  registerBidder(spec);
@@ -12,10 +12,11 @@ Yandex Bidder Adapter for Prebid.js.
12
12
 
13
13
  # Parameters
14
14
 
15
- | Name | Scope | Description | Example | Type |
16
- |---------------|----------|-------------------------|-----------|-----------|
17
- | `pageId` | required | Page ID | `123` | `Integer` |
18
- | `impId` | required | Block ID | `1` | `Integer` |
15
+ | Name | Required? | Description | Example | Type |
16
+ |---------------|--------------------------------------------|-------------|---------|-----------|
17
+ | `placementId` | Yes | Block ID | `123-1` | `String` |
18
+ | `pageId` | No<br>Deprecated. Please use `placementId` | Page ID | `123` | `Integer` |
19
+ | `impId` | No<br>Deprecated. Please use `placementId` | Imp ID | `1` | `Integer` |
19
20
 
20
21
  # Test Parameters
21
22
 
@@ -24,15 +25,14 @@ var adUnits = [{
24
25
  code: 'banner-1',
25
26
  mediaTypes: {
26
27
  banner: {
27
- sizes: [[240, 400]],
28
+ sizes: [[240, 400], [300, 600]],
28
29
  }
29
30
  },
30
31
  bids: [{
31
32
  {
32
33
  bidder: 'yandex',
33
34
  params: {
34
- pageId: 346580,
35
- impId: 143,
35
+ placementId: '346580-1'
36
36
  },
37
37
  }
38
38
  }]
@@ -41,6 +41,7 @@ export const spec = {
41
41
 
42
42
  const adslotIds = []
43
43
  const adslotSizes = [];
44
+ const adslotFloors = [];
44
45
  const timestamp = Date.now()
45
46
  const query = {
46
47
  ts: timestamp,
@@ -77,7 +78,7 @@ export const spec = {
77
78
  }
78
79
  const floor = getBidFloor(bid, sizes)
79
80
  if (floor) {
80
- query.floor = floor;
81
+ adslotFloors.push(bid.params.adslotId + ':' + floor);
81
82
  }
82
83
  })
83
84
 
@@ -99,6 +100,11 @@ export const spec = {
99
100
  if (adslotSizes.length > 0) {
100
101
  query.sizes = adslotSizes.join(',')
101
102
  }
103
+
104
+ if (adslotFloors.length > 0) {
105
+ query.floor = adslotFloors.join(',')
106
+ }
107
+
102
108
  const queryString = createQueryString(query)
103
109
 
104
110
  return {
@@ -370,21 +376,32 @@ function getContentObject(bid) {
370
376
  }
371
377
 
372
378
  /**
373
- * Creates a string for iab_content object
379
+ * Creates a string for iab_content object by
380
+ * 1. flatten the iab content object
381
+ * 2. encoding the values
382
+ * 3. joining array of defined keys ('keyword', 'cat') into one value seperated with '|'
383
+ * 4. encoding the whole string
374
384
  * @param {Object} iabContent
375
385
  * @returns {String}
376
386
  */
377
387
  function createIabContentString(iabContent) {
378
388
  const arrKeys = ['keywords', 'cat']
379
389
  const str = []
380
- for (const key in iabContent) {
381
- if (iabContent.hasOwnProperty(key)) {
382
- const value = (arrKeys.indexOf(key) !== -1 && Array.isArray(iabContent[key]))
383
- ? iabContent[key].map(node => encodeURIComponent(node)).join('|') : encodeURIComponent(iabContent[key])
384
- str.push(''.concat(key, ':', value))
390
+ const transformObjToParam = (obj = {}, extraKey = '') => {
391
+ for (const key in obj) {
392
+ if ((arrKeys.indexOf(key) !== -1 && Array.isArray(obj[key]))) {
393
+ // Array of defined keyword which have to be joined into one value from "key: [value1, value2, value3]" to "key:value1|value2|value3"
394
+ str.push(''.concat(key, ':', obj[key].map(node => encodeURIComponent(node)).join('|')))
395
+ } else if (typeof obj[key] !== 'object') {
396
+ str.push(''.concat(extraKey + key, ':', encodeURIComponent(obj[key])))
397
+ } else {
398
+ // Object has to be further flattened
399
+ transformObjToParam(obj[key], ''.concat(extraKey, key, '.'));
400
+ }
385
401
  }
386
- }
387
- return encodeURIComponent(str.join(','))
402
+ return str.join(',');
403
+ };
404
+ return encodeURIComponent(transformObjToParam(iabContent))
388
405
  }
389
406
 
390
407
  /**
@@ -452,7 +469,7 @@ function extractSizes(bid) {
452
469
  *
453
470
  * @param {Object} bid
454
471
  * @param {string[]} sizes
455
- * @returns The floor CPM of a matched rule based on the rule selection process (mediaType, size and currency),
472
+ * @returns The floor CPM in cents of a matched rule based on the rule selection process (mediaType, size and currency),
456
473
  * using the getFloor() inputs. Multi sizes and unsupported media types will default to '*'
457
474
  */
458
475
  function getBidFloor(bid, sizes) {
@@ -464,10 +481,10 @@ function getBidFloor(bid, sizes) {
464
481
  const floor = bid.getFloor({
465
482
  currency: CURRENCY_CODE,
466
483
  mediaType: mediaType !== undefined && spec.supportedMediaTypes.includes(mediaType) ? mediaType : '*',
467
- size: sizes.length !== 1 ? '*' : extractSizes(sizes)
484
+ size: sizes.length !== 1 ? '*' : sizes[0].split(DIMENSION_SIGN)
468
485
  });
469
486
  if (floor.currency === CURRENCY_CODE) {
470
- return floor.floor;
487
+ return (floor.floor * 100).toFixed(0);
471
488
  }
472
489
  return undefined;
473
490
  }
@@ -2,9 +2,9 @@ import {deepSetValue, logInfo, deepAccess} from '../src/utils.js';
2
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
3
3
  import {BANNER} from '../src/mediaTypes.js';
4
4
 
5
- const ENDPOINT_URL = 'https://x.yieldlift.com/auction';
5
+ const ENDPOINT_URL = 'https://x.yieldlift.com/pbjs';
6
6
 
7
- const DEFAULT_BID_TTL = 30;
7
+ const DEFAULT_BID_TTL = 300;
8
8
  const DEFAULT_CURRENCY = 'USD';
9
9
  const DEFAULT_NET_REVENUE = true;
10
10
 
@@ -98,7 +98,7 @@ export const spec = {
98
98
  width: bid.w,
99
99
  height: bid.h,
100
100
  ad: bid.adm,
101
- ttl: DEFAULT_BID_TTL,
101
+ ttl: typeof bid.exp === 'number' ? bid.exp : DEFAULT_BID_TTL,
102
102
  creativeId: bid.crid,
103
103
  netRevenue: DEFAULT_NET_REVENUE,
104
104
  currency: DEFAULT_CURRENCY,