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,155 @@
1
+ import {
2
+ isFn,
3
+ isStr,
4
+ deepAccess,
5
+ getWindowTop,
6
+ triggerPixel
7
+ } from '../src/utils.js';
8
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
9
+ import { BANNER } from '../src/mediaTypes.js';
10
+ import { config } from '../src/config.js';
11
+
12
+ const BIDDER_CODE = 'redtram';
13
+ const AD_URL = 'https://prebid.redtram.com/pbjs';
14
+ const SYNC_URL = 'https://prebid.redtram.com/sync';
15
+
16
+ function isBidResponseValid(bid) {
17
+ if (!bid.requestId || !bid.cpm || !bid.creativeId ||
18
+ !bid.ttl || !bid.currency || !bid.meta) {
19
+ return false;
20
+ }
21
+
22
+ switch (bid.mediaType) {
23
+ case BANNER:
24
+ return Boolean(bid.width && bid.height && bid.ad);
25
+ default:
26
+ return false;
27
+ }
28
+ }
29
+
30
+ function getBidFloor(bid) {
31
+ if (!isFn(bid.getFloor)) {
32
+ return deepAccess(bid, 'params.bidFloor', 0);
33
+ }
34
+
35
+ try {
36
+ const bidFloor = bid.getFloor({
37
+ currency: 'USD',
38
+ mediaType: '*',
39
+ size: '*',
40
+ });
41
+ return bidFloor.floor;
42
+ } catch (_) {
43
+ return 0
44
+ }
45
+ }
46
+
47
+ export const spec = {
48
+ code: BIDDER_CODE,
49
+ supportedMediaTypes: [BANNER],
50
+
51
+ isBidRequestValid: (bid) => {
52
+ return Boolean(bid.bidId && bid.params && bid.params.placementId);
53
+ },
54
+
55
+ buildRequests: (validBidRequests = [], bidderRequest) => {
56
+ const winTop = getWindowTop();
57
+ const location = winTop.location;
58
+ const placements = [];
59
+
60
+ const request = {
61
+ deviceWidth: winTop.screen.width,
62
+ deviceHeight: winTop.screen.height,
63
+ language: (navigator && navigator.language) ? navigator.language.split('-')[0] : '',
64
+ host: location.host,
65
+ page: location.pathname,
66
+ placements: placements
67
+ };
68
+
69
+ if (bidderRequest) {
70
+ if (bidderRequest.uspConsent) {
71
+ request.ccpa = bidderRequest.uspConsent;
72
+ }
73
+ if (bidderRequest.gdprConsent) {
74
+ request.gdpr = bidderRequest.gdprConsent;
75
+ }
76
+ }
77
+
78
+ const len = validBidRequests.length;
79
+ for (let i = 0; i < len; i++) {
80
+ const bid = validBidRequests[i];
81
+ const placement = {
82
+ placementId: bid.params.placementId,
83
+ bidId: bid.bidId,
84
+ schain: bid.schain || {},
85
+ bidfloor: getBidFloor(bid)
86
+ };
87
+
88
+ if (typeof bid.userId !== 'undefined') {
89
+ placement.userId = bid.userId;
90
+ }
91
+
92
+ const mediaType = bid.mediaTypes;
93
+
94
+ if (mediaType && mediaType[BANNER] && mediaType[BANNER].sizes) {
95
+ placement.sizes = mediaType[BANNER].sizes;
96
+ placement.adFormat = BANNER;
97
+ }
98
+
99
+ placements.push(placement);
100
+ }
101
+
102
+ return {
103
+ method: 'POST',
104
+ url: AD_URL,
105
+ data: request
106
+ };
107
+ },
108
+
109
+ interpretResponse: (serverResponse) => {
110
+ let response = [];
111
+ for (let i = 0; i < serverResponse.body.length; i++) {
112
+ let resItem = serverResponse.body[i];
113
+ if (isBidResponseValid(resItem)) {
114
+ const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
115
+ resItem.meta = { ...resItem.meta, advertiserDomains };
116
+
117
+ response.push(resItem);
118
+ }
119
+ }
120
+ return response;
121
+ },
122
+
123
+ getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
124
+ let syncType = syncOptions.iframeEnabled ? 'iframe' : 'image';
125
+ let syncUrl = SYNC_URL + `/${syncType}?pbjs=1`;
126
+ if (gdprConsent && gdprConsent.consentString) {
127
+ if (typeof gdprConsent.gdprApplies === 'boolean') {
128
+ syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
129
+ } else {
130
+ syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
131
+ }
132
+ }
133
+ if (uspConsent && uspConsent.consentString) {
134
+ syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
135
+ }
136
+
137
+ const coppa = config.getConfig('coppa') ? 1 : 0;
138
+ syncUrl += `&coppa=${coppa}`;
139
+
140
+ return [{
141
+ type: syncType,
142
+ url: syncUrl
143
+ }];
144
+ },
145
+
146
+ onBidWon: (bid) => {
147
+ const cpm = deepAccess(bid, 'adserverTargeting.hb_pb') || '';
148
+ if (isStr(bid.nurl) && bid.nurl !== '') {
149
+ bid.nurl = bid.nurl.replace(/\${AUCTION_PRICE}/, cpm);
150
+ triggerPixel(bid.nurl);
151
+ }
152
+ }
153
+ };
154
+
155
+ registerBidder(spec);
@@ -0,0 +1,33 @@
1
+ # Overview
2
+
3
+ ```
4
+ Module Name: redtram Bidder Adapter
5
+ Module Type: redtram Bidder Adapter
6
+ Maintainer: support@redtram.com
7
+ ```
8
+
9
+ # Description
10
+
11
+ Module that connects to redtram demand sources
12
+
13
+ # Test Parameters
14
+ ```
15
+ var adUnits = [
16
+ {
17
+ code: 'div-prebid',
18
+ mediaTypes:{
19
+ banner: {
20
+ sizes: [[300, 250]],
21
+ }
22
+ },
23
+ bids:[
24
+ {
25
+ bidder: 'redtram',
26
+ params: {
27
+ placementId: '23611' //test, please replace after test
28
+ }
29
+ }
30
+ ]
31
+ },
32
+ ];
33
+ ```
@@ -309,6 +309,16 @@ function generateBidParameters(bid, bidderRequest) {
309
309
  bidObject.placementId = placementId;
310
310
  }
311
311
 
312
+ const mimes = deepAccess(bid, `mediaTypes.${mediaType}.mimes`);
313
+ if (mimes) {
314
+ bidObject.mimes = mimes;
315
+ }
316
+
317
+ const api = deepAccess(bid, `mediaTypes.${mediaType}.api`);
318
+ if (api) {
319
+ bidObject.api = api;
320
+ }
321
+
312
322
  if (mediaType === VIDEO) {
313
323
  const playbackMethod = deepAccess(bid, `mediaTypes.video.playbackmethod`);
314
324
  let playbackMethodValue;
@@ -349,6 +359,11 @@ function generateBidParameters(bid, bidderRequest) {
349
359
  if (linearity) {
350
360
  bidObject.linearity = linearity;
351
361
  }
362
+
363
+ const protocols = deepAccess(bid, `mediaTypes.video.protocols`);
364
+ if (protocols) {
365
+ bidObject.protocols = protocols;
366
+ }
352
367
  }
353
368
 
354
369
  return bidObject;
@@ -20,7 +20,7 @@ The adapter supports Video(instream).
20
20
 
21
21
  | Name | Scope | Type | Description | Example
22
22
  | ---- | ----- | ---- | ----------- | -------
23
- | `org` | required | String | Rise publisher Id provided by your Rise representative | "56f91cd4d3e3660002000033"
23
+ | `org` | required | String | Rise publisher Id provided by your Rise representative | "1234567890abcdef12345678"
24
24
  | `floorPrice` | optional | Number | Minimum price in USD. Misuse of this parameter can impact revenue | 2.00
25
25
  | `placementId` | optional | String | A unique placement identifier | "12345678"
26
26
  | `testMode` | optional | Boolean | This activates the test mode | false
@@ -41,10 +41,10 @@ var adUnits = [
41
41
  bids: [{
42
42
  bidder: 'rise',
43
43
  params: {
44
- org: '56f91cd4d3e3660002000033', // Required
44
+ org: '1234567890abcdef12345678', // Required
45
45
  floorPrice: 2.00, // Optional
46
46
  placementId: '12345678', // Optional
47
- testMode: false // Optional,
47
+ testMode: false, // Optional,
48
48
  rtbDomain: "www.test.com" //Optional
49
49
  }
50
50
  }]
@@ -1,13 +1,15 @@
1
- import {deepAccess, isArray, logError} from '../src/utils.js';
1
+ import {deepAccess, mergeDeep, isArray, logError, logInfo} from '../src/utils.js';
2
2
  import { getOrigin } from '../libraries/getOrigin/index.js';
3
3
  import {BANNER, NATIVE} from '../src/mediaTypes.js';
4
4
  import {registerBidder} from '../src/adapters/bidderFactory.js';
5
5
  import {includes} from '../src/polyfill.js';
6
6
  import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
7
+ import { config } from '../src/config.js';
7
8
 
8
9
  const BIDDER_CODE = 'rtbhouse';
9
10
  const REGIONS = ['prebid-eu', 'prebid-us', 'prebid-asia'];
10
11
  const ENDPOINT_URL = 'creativecdn.com/bidder/prebid/bids';
12
+ const FLEDGE_ENDPOINT_URL = 'creativecdn.com/bidder/prebidfledge/bids';
11
13
  const DEFAULT_CURRENCY_ARR = ['USD']; // NOTE - USD is the only supported currency right now; Hardcoded for bids
12
14
  const SUPPORTED_MEDIA_TYPES = [BANNER, NATIVE];
13
15
  const TTL = 55;
@@ -50,12 +52,13 @@ export const spec = {
50
52
 
51
53
  const request = {
52
54
  id: validBidRequests[0].auctionId,
53
- imp: validBidRequests.map(slot => mapImpression(slot)),
55
+ imp: validBidRequests.map(slot => mapImpression(slot, bidderRequest)),
54
56
  site: mapSite(validBidRequests, bidderRequest),
55
57
  cur: DEFAULT_CURRENCY_ARR,
56
58
  test: validBidRequests[0].params.test || 0,
57
59
  source: mapSource(validBidRequests[0]),
58
60
  };
61
+
59
62
  if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies) {
60
63
  const consentStr = (bidderRequest.gdprConsent.consentString)
61
64
  ? bidderRequest.gdprConsent.consentString.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '') : '';
@@ -81,37 +84,32 @@ export const spec = {
81
84
  }
82
85
  }
83
86
 
84
- const ortb2Params = bidderRequest && bidderRequest.ortb2;
85
- if (ortb2Params?.user) {
86
- request.user = {
87
- ...request.user,
88
- ...(ortb2Params.user.data && {
89
- data: { ...request.user?.data, ...ortb2Params.user.data },
90
- }),
91
- ...(ortb2Params.user.ext && {
92
- ext: { ...request.user?.ext, ...ortb2Params.user.ext },
93
- }),
94
- };
87
+ const ortb2Params = bidderRequest?.ortb2 || {};
88
+ if (ortb2Params.site) {
89
+ mergeDeep(request, { site: ortb2Params.site });
90
+ }
91
+ if (ortb2Params.user) {
92
+ mergeDeep(request, { user: ortb2Params.user });
93
+ }
94
+ if (ortb2Params.device) {
95
+ mergeDeep(request, { device: ortb2Params.device });
95
96
  }
96
- if (ortb2Params?.site) {
97
- request.site = {
98
- ...request.site,
99
- ...(ortb2Params.site.content && {
100
- content: { ...request.site?.content, ...ortb2Params.site.content },
101
- }),
102
- ...(ortb2Params.site.ext && {
103
- ext: { ...request.site?.ext, ...ortb2Params.site.ext },
104
- }),
105
- };
97
+
98
+ let computedEndpointUrl = ENDPOINT_URL;
99
+
100
+ const fledgeConfig = config.getConfig('fledgeConfig');
101
+ if (bidderRequest.fledgeEnabled && fledgeConfig) {
102
+ mergeDeep(request, { ext: { fledge_config: fledgeConfig } });
103
+ computedEndpointUrl = FLEDGE_ENDPOINT_URL;
106
104
  }
107
105
 
108
106
  return {
109
107
  method: 'POST',
110
- url: 'https://' + validBidRequests[0].params.region + '.' + ENDPOINT_URL,
108
+ url: 'https://' + validBidRequests[0].params.region + '.' + computedEndpointUrl,
111
109
  data: JSON.stringify(request)
112
110
  };
113
111
  },
114
- interpretResponse: function (serverResponse, originalRequest) {
112
+ interpretOrtbResponse: function (serverResponse, originalRequest) {
115
113
  const responseBody = serverResponse.body;
116
114
  if (!isArray(responseBody)) {
117
115
  return [];
@@ -119,17 +117,72 @@ export const spec = {
119
117
 
120
118
  const bids = [];
121
119
  responseBody.forEach(serverBid => {
122
- if (serverBid.price === 0) {
120
+ if (!serverBid.price) { // price may exist and is === 0 or there's no price prop at all (fledge req case)
123
121
  return;
124
122
  }
123
+
124
+ let interpretedBid;
125
+
125
126
  // try...catch would be risky cause JSON.parse throws SyntaxError
126
127
  if (serverBid.adm.indexOf('{') === 0) {
127
- bids.push(interpretNativeBid(serverBid));
128
+ interpretedBid = interpretNativeBid(serverBid);
128
129
  } else {
129
- bids.push(interpretBannerBid(serverBid));
130
+ interpretedBid = interpretBannerBid(serverBid);
130
131
  }
132
+ if (serverBid.ext) interpretedBid.ext = serverBid.ext;
133
+
134
+ bids.push(interpretedBid);
131
135
  });
132
136
  return bids;
137
+ },
138
+ interpretResponse: function (serverResponse, originalRequest) {
139
+ let bids;
140
+
141
+ const responseBody = serverResponse.body;
142
+ let fledgeAuctionConfigs = null;
143
+
144
+ if (responseBody.bidid && isArray(responseBody?.ext?.igbid)) {
145
+ // we have fledge response
146
+ // mimic the original response ([{},...])
147
+ bids = this.interpretOrtbResponse({ body: responseBody.seatbid[0]?.bid }, originalRequest);
148
+
149
+ const seller = responseBody.ext.seller;
150
+ const decisionLogicUrl = responseBody.ext.decisionLogicUrl;
151
+ const sellerTimeout = 'sellerTimeout' in responseBody.ext ? { sellerTimeout: responseBody.ext.sellerTimeout } : {};
152
+ responseBody.ext.igbid.forEach((igbid) => {
153
+ const perBuyerSignals = {};
154
+ igbid.igbuyer.forEach(buyerItem => {
155
+ perBuyerSignals[buyerItem.igdomain] = buyerItem.buyersignal
156
+ });
157
+ fledgeAuctionConfigs = fledgeAuctionConfigs || {};
158
+ fledgeAuctionConfigs[igbid.impid] = mergeDeep(
159
+ {
160
+ seller,
161
+ decisionLogicUrl,
162
+ interestGroupBuyers: Object.keys(perBuyerSignals),
163
+ perBuyerSignals,
164
+ },
165
+ sellerTimeout
166
+ );
167
+ });
168
+ } else {
169
+ bids = this.interpretOrtbResponse(serverResponse, originalRequest);
170
+ }
171
+
172
+ if (fledgeAuctionConfigs) {
173
+ fledgeAuctionConfigs = Object.entries(fledgeAuctionConfigs).map(([bidId, cfg]) => {
174
+ return Object.assign({
175
+ bidId,
176
+ auctionSignals: {}
177
+ }, cfg);
178
+ });
179
+ logInfo('Response with FLEDGE:', { bids, fledgeAuctionConfigs });
180
+ return {
181
+ bids,
182
+ fledgeAuctionConfigs,
183
+ }
184
+ }
185
+ return bids;
133
186
  }
134
187
  };
135
188
  registerBidder(spec);
@@ -154,7 +207,7 @@ function applyFloor(slot) {
154
207
  * @param {object} slot Ad Unit Params by Prebid
155
208
  * @returns {object} Imp by OpenRTB 2.5 §3.2.4
156
209
  */
157
- function mapImpression(slot) {
210
+ function mapImpression(slot, bidderRequest) {
158
211
  const imp = {
159
212
  id: slot.bidId,
160
213
  banner: mapBanner(slot),
@@ -167,6 +220,14 @@ function mapImpression(slot) {
167
220
  imp.bidfloor = bidfloor;
168
221
  }
169
222
 
223
+ if (bidderRequest.fledgeEnabled) {
224
+ imp.ext = imp.ext || {};
225
+ imp.ext.ae = slot?.ortb2Imp?.ext?.ae
226
+ } else {
227
+ if (imp.ext?.ae) {
228
+ delete imp.ext.ae;
229
+ }
230
+ }
170
231
  return imp;
171
232
  }
172
233
 
@@ -134,7 +134,8 @@ var sizeMap = {
134
134
  574: '620x891',
135
135
  576: '610x877',
136
136
  578: '980x552',
137
- 580: '505x656'
137
+ 580: '505x656',
138
+ 622: '192x160'
138
139
  };
139
140
  _each(sizeMap, (item, key) => sizeMap[item] = key);
140
141
 
@@ -1,19 +1,18 @@
1
1
  import { isArray, _map, triggerPixel } from '../src/utils.js';
2
- import { registerBidder } from '../src/adapters/bidderFactory.js'
3
- import { VIDEO, BANNER } from '../src/mediaTypes.js'
2
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
3
+ import { VIDEO, BANNER } from '../src/mediaTypes.js';
4
4
  import { config } from '../src/config.js';
5
5
 
6
6
  const BIDDER_CODE = 'seedtag';
7
7
  const SEEDTAG_ALIAS = 'st';
8
8
  const SEEDTAG_SSP_ENDPOINT = 'https://s.seedtag.com/c/hb/bid';
9
9
  const SEEDTAG_SSP_ONTIMEOUT_ENDPOINT = 'https://s.seedtag.com/se/hb/timeout';
10
- const ALLOWED_PLACEMENTS = {
11
- inImage: true,
12
- inScreen: true,
13
- inArticle: true,
14
- banner: true,
15
- video: true
16
- }
10
+ const ALLOWED_DISPLAY_PLACEMENTS = [
11
+ 'inScreen',
12
+ 'inImage',
13
+ 'inArticle',
14
+ 'inBanner',
15
+ ];
17
16
 
18
17
  // Global Vendor List Id
19
18
  // https://iabeurope.eu/vendor-list-tcf-v2-0/
@@ -21,27 +20,33 @@ const GVLID = 157;
21
20
 
22
21
  const mediaTypesMap = {
23
22
  [BANNER]: 'display',
24
- [VIDEO]: 'video'
23
+ [VIDEO]: 'video',
25
24
  };
26
25
 
27
26
  const deviceConnection = {
28
27
  FIXED: 'fixed',
29
28
  MOBILE: 'mobile',
30
- UNKNOWN: 'unknown'
29
+ UNKNOWN: 'unknown',
31
30
  };
32
31
 
33
32
  const getConnectionType = () => {
34
- const connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection || {}
33
+ const connection =
34
+ navigator.connection ||
35
+ navigator.mozConnection ||
36
+ navigator.webkitConnection ||
37
+ {};
35
38
  switch (connection.type || connection.effectiveType) {
36
39
  case 'wifi':
37
40
  case 'ethernet':
38
- return deviceConnection.FIXED
41
+ return deviceConnection.FIXED;
39
42
  case 'cellular':
40
43
  case 'wimax':
41
- return deviceConnection.MOBILE
44
+ return deviceConnection.MOBILE;
42
45
  default:
43
- const isMobile = /iPad|iPhone|iPod/.test(navigator.userAgent) || /android/i.test(navigator.userAgent)
44
- return isMobile ? deviceConnection.UNKNOWN : deviceConnection.FIXED
46
+ const isMobile =
47
+ /iPad|iPhone|iPod/.test(navigator.userAgent) ||
48
+ /android/i.test(navigator.userAgent);
49
+ return isMobile ? deviceConnection.UNKNOWN : deviceConnection.FIXED;
45
50
  }
46
51
  };
47
52
 
@@ -52,24 +57,32 @@ function mapMediaType(seedtagMediaType) {
52
57
  }
53
58
 
54
59
  function hasVideoMediaType(bid) {
55
- return (!!bid.mediaTypes && !!bid.mediaTypes.video) || (!!bid.params && !!bid.params.video)
60
+ return !!bid.mediaTypes && !!bid.mediaTypes.video;
56
61
  }
57
62
 
58
- function hasMandatoryParams(params) {
63
+ function hasMandatoryDisplayParams(bid) {
64
+ const p = bid.params;
59
65
  return (
60
- !!params.publisherId &&
61
- !!params.adUnitId &&
62
- !!params.placement &&
63
- !!ALLOWED_PLACEMENTS[params.placement]
66
+ !!p.publisherId &&
67
+ !!p.adUnitId &&
68
+ ALLOWED_DISPLAY_PLACEMENTS.indexOf(p.placement) > -1
64
69
  );
65
70
  }
66
71
 
67
72
  function hasMandatoryVideoParams(bid) {
68
- const videoParams = getVideoParams(bid)
73
+ const videoParams = getVideoParams(bid);
69
74
 
70
- return hasVideoMediaType(bid) && !!videoParams.playerSize &&
75
+ return (
76
+ !!bid.params.publisherId &&
77
+ !!bid.params.adUnitId &&
78
+ hasVideoMediaType(bid) &&
79
+ !!videoParams.playerSize &&
71
80
  isArray(videoParams.playerSize) &&
72
- videoParams.playerSize.length > 0;
81
+ videoParams.playerSize.length > 0 &&
82
+ // only instream is supported for video
83
+ videoParams.context === 'instream' &&
84
+ bid.params.placement === 'inStream'
85
+ );
73
86
  }
74
87
 
75
88
  function buildBidRequest(validBidRequest) {
@@ -89,15 +102,11 @@ function buildBidRequest(validBidRequest) {
89
102
  adUnitId: params.adUnitId,
90
103
  adUnitCode: validBidRequest.adUnitCode,
91
104
  placement: params.placement,
92
- requestCount: validBidRequest.bidderRequestsCount || 1 // FIXME : in unit test the parameter bidderRequestsCount is undefined
105
+ requestCount: validBidRequest.bidderRequestsCount || 1, // FIXME : in unit test the parameter bidderRequestsCount is undefined
93
106
  };
94
107
 
95
- if (params.adPosition) {
96
- bidRequest.adPosition = params.adPosition;
97
- }
98
-
99
108
  if (hasVideoMediaType(validBidRequest)) {
100
- bidRequest.videoParams = getVideoParams(validBidRequest)
109
+ bidRequest.videoParams = getVideoParams(validBidRequest);
101
110
  }
102
111
 
103
112
  return bidRequest;
@@ -113,13 +122,7 @@ function getVideoParams(validBidRequest) {
113
122
  videoParams.h = videoParams.playerSize[0][1];
114
123
  }
115
124
 
116
- const bidderVideoParams = (validBidRequest.params && validBidRequest.params.video) || {}
117
- // override video params from seedtag bidder params
118
- Object.keys(bidderVideoParams).forEach(key => {
119
- videoParams[key] = validBidRequest.params.video[key]
120
- })
121
-
122
- return videoParams
125
+ return videoParams;
123
126
  }
124
127
 
125
128
  function buildBidResponse(seedtagBid) {
@@ -136,8 +139,11 @@ function buildBidResponse(seedtagBid) {
136
139
  ttl: seedtagBid.ttl,
137
140
  nurl: seedtagBid.nurl,
138
141
  meta: {
139
- advertiserDomains: seedtagBid && seedtagBid.adomain && seedtagBid.adomain.length > 0 ? seedtagBid.adomain : []
140
- }
142
+ advertiserDomains:
143
+ seedtagBid && seedtagBid.adomain && seedtagBid.adomain.length > 0
144
+ ? seedtagBid.adomain
145
+ : [],
146
+ },
141
147
  };
142
148
 
143
149
  if (mediaType === VIDEO) {
@@ -181,16 +187,21 @@ function ttfb() {
181
187
  export function getTimeoutUrl(data) {
182
188
  let queryParams = '';
183
189
  if (
184
- isArray(data) && data[0] &&
185
- isArray(data[0].params) && data[0].params[0]
190
+ isArray(data) &&
191
+ data[0] &&
192
+ isArray(data[0].params) &&
193
+ data[0].params[0]
186
194
  ) {
187
195
  const params = data[0].params[0];
188
- const timeout = data[0].timeout
196
+ const timeout = data[0].timeout;
189
197
 
190
198
  queryParams =
191
- '?publisherToken=' + params.publisherId +
192
- '&adUnitId=' + params.adUnitId +
193
- '&timeout=' + timeout;
199
+ '?publisherToken=' +
200
+ params.publisherId +
201
+ '&adUnitId=' +
202
+ params.adUnitId +
203
+ '&timeout=' +
204
+ timeout;
194
205
  }
195
206
  return SEEDTAG_SSP_ONTIMEOUT_ENDPOINT + queryParams;
196
207
  }
@@ -208,8 +219,8 @@ export const spec = {
208
219
  */
209
220
  isBidRequestValid(bid) {
210
221
  return hasVideoMediaType(bid)
211
- ? hasMandatoryParams(bid.params) && hasMandatoryVideoParams(bid)
212
- : hasMandatoryParams(bid.params);
222
+ ? hasMandatoryVideoParams(bid)
223
+ : hasMandatoryDisplayParams(bid);
213
224
  },
214
225
 
215
226
  /**
@@ -237,24 +248,24 @@ export const spec = {
237
248
  payload['cd'] = bidderRequest.gdprConsent.consentString;
238
249
  }
239
250
  if (bidderRequest.uspConsent) {
240
- payload['uspConsent'] = bidderRequest.uspConsent
251
+ payload['uspConsent'] = bidderRequest.uspConsent;
241
252
  }
242
253
 
243
254
  if (validBidRequests[0].schain) {
244
255
  payload.schain = validBidRequests[0].schain;
245
256
  }
246
257
 
247
- let coppa = config.getConfig('coppa')
258
+ let coppa = config.getConfig('coppa');
248
259
  if (coppa) {
249
- payload.coppa = coppa
260
+ payload.coppa = coppa;
250
261
  }
251
262
 
252
- const payloadString = JSON.stringify(payload)
263
+ const payloadString = JSON.stringify(payload);
253
264
  return {
254
265
  method: 'POST',
255
266
  url: SEEDTAG_SSP_ENDPOINT,
256
- data: payloadString
257
- }
267
+ data: payloadString,
268
+ };
258
269
  },
259
270
 
260
271
  /**
@@ -308,6 +319,6 @@ export const spec = {
308
319
  if (bid && bid.nurl) {
309
320
  triggerPixel(bid.nurl);
310
321
  }
311
- }
312
- }
322
+ },
323
+ };
313
324
  registerBidder(spec);