prebid.js 9.4.0 → 9.5.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 (363) hide show
  1. package/.eslintrc.js +31 -5
  2. package/.github/workflows/jscpd.yml +2 -2
  3. package/.github/workflows/linter.yml +107 -0
  4. package/creative/crossDomain.js +6 -3
  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/adagioAnalyticsAdapter.js +1 -1
  10. package/dist/adagioBidAdapter.js +1 -1
  11. package/dist/adagioRtdProvider.js +1 -1
  12. package/dist/adagioUtils.js +1 -1
  13. package/dist/addefendBidAdapter.js +1 -1
  14. package/dist/adgenerationBidAdapter.js +1 -1
  15. package/dist/adkernelAdnBidAdapter.js +1 -1
  16. package/dist/adkernelBidAdapter.js +1 -1
  17. package/dist/adkernelUtils.js +1 -0
  18. package/dist/adlooxRtdProvider.js +1 -1
  19. package/dist/admixerBidAdapter.js +1 -1
  20. package/dist/adqueryBidAdapter.js +1 -1
  21. package/dist/adrelevantisBidAdapter.js +1 -1
  22. package/dist/adstirBidAdapter.js +1 -1
  23. package/dist/adtrgtmeBidAdapter.js +1 -1
  24. package/dist/advRedAnalyticsAdapter.js +1 -0
  25. package/dist/adxcgAnalyticsAdapter.js +1 -1
  26. package/dist/adxcgBidAdapter.js +1 -1
  27. package/dist/adyoulikeBidAdapter.js +1 -1
  28. package/dist/agmaAnalyticsAdapter.js +1 -1
  29. package/dist/ajaBidAdapter.js +1 -1
  30. package/dist/akamaiDapRtdProvider.js +1 -1
  31. package/dist/amxBidAdapter.js +1 -1
  32. package/dist/amxIdSystem.js +1 -1
  33. package/dist/anonymisedRtdProvider.js +1 -1
  34. package/dist/apacdexBidAdapter.js +1 -1
  35. package/dist/appierAnalyticsAdapter.js +1 -1
  36. package/dist/appnexusBidAdapter.js +1 -1
  37. package/dist/asoBidAdapter.js +1 -1
  38. package/dist/axonixBidAdapter.js +1 -1
  39. package/dist/azerionedgeRtdProvider.js +1 -1
  40. package/dist/bidglassBidAdapter.js +1 -1
  41. package/dist/big-richmediaBidAdapter.js +1 -1
  42. package/dist/bridBidAdapter.js +1 -1
  43. package/dist/bridgewellBidAdapter.js +1 -1
  44. package/dist/brightMountainMediaBidAdapter.js +1 -1
  45. package/dist/carodaBidAdapter.js +1 -1
  46. package/dist/chtnwBidAdapter.js +1 -1
  47. package/dist/chunk-core.js +1 -1
  48. package/dist/concertBidAdapter.js +1 -1
  49. package/dist/connatixBidAdapter.js +1 -1
  50. package/dist/connectadBidAdapter.js +1 -1
  51. package/dist/consumableBidAdapter.js +1 -1
  52. package/dist/contxtfulRtdProvider.js +1 -1
  53. package/dist/conversantAnalyticsAdapter.js +1 -1
  54. package/dist/conversantBidAdapter.js +1 -1
  55. package/dist/craftBidAdapter.js +1 -1
  56. package/dist/criteoBidAdapter.js +1 -1
  57. package/dist/currencyUtils.js +1 -1
  58. package/dist/cwireBidAdapter.js +1 -1
  59. package/dist/dailymotionBidAdapter.js +1 -1
  60. package/dist/debugging-standalone.js +1 -1
  61. package/dist/dependencies.json +43 -7
  62. package/dist/dfpAdServerVideo.js +1 -1
  63. package/dist/dfpAdpod.js +1 -1
  64. package/dist/dfpUtils.js +1 -1
  65. package/dist/discoveryBidAdapter.js +1 -1
  66. package/dist/dspxBidAdapter.js +1 -1
  67. package/dist/dxkultureBidAdapter.js +1 -1
  68. package/dist/eightPodAnalyticsAdapter.js +1 -1
  69. package/dist/eightPodBidAdapter.js +1 -1
  70. package/dist/eplanningBidAdapter.js +1 -1
  71. package/dist/euidIdSystem.js +1 -1
  72. package/dist/exadsBidAdapter.js +1 -1
  73. package/dist/feedadBidAdapter.js +1 -1
  74. package/dist/finativeBidAdapter.js +1 -1
  75. package/dist/fintezaAnalyticsAdapter.js +1 -1
  76. package/dist/fpdUtils.js +1 -0
  77. package/dist/freewheel-sspBidAdapter.js +1 -1
  78. package/dist/gmosspBidAdapter.js +1 -1
  79. package/dist/goldbachBidAdapter.js +1 -1
  80. package/dist/gptPreAuction.js +1 -1
  81. package/dist/gptUtils.js +1 -1
  82. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  83. package/dist/greenbidsRtdProvider.js +1 -1
  84. package/dist/gridBidAdapter.js +1 -1
  85. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  86. package/dist/growthCodeRtdProvider.js +1 -1
  87. package/dist/gumgumBidAdapter.js +1 -1
  88. package/dist/h12mediaBidAdapter.js +1 -1
  89. package/dist/hypelabBidAdapter.js +1 -1
  90. package/dist/id5AnalyticsAdapter.js +1 -1
  91. package/dist/id5IdSystem.js +1 -1
  92. package/dist/imdsBidAdapter.js +1 -1
  93. package/dist/improvedigitalBidAdapter.js +1 -1
  94. package/dist/insticatorBidAdapter.js +1 -1
  95. package/dist/intentIqAnalyticsAdapter.js +1 -0
  96. package/dist/ixBidAdapter.js +1 -1
  97. package/dist/jixieBidAdapter.js +1 -1
  98. package/dist/justpremiumBidAdapter.js +1 -1
  99. package/dist/jwplayerBidAdapter.js +1 -1
  100. package/dist/jwplayerRtdProvider.js +1 -1
  101. package/dist/kargoBidAdapter.js +1 -1
  102. package/dist/kimberliteBidAdapter.js +1 -1
  103. package/dist/konduitAnalyticsAdapter.js +1 -1
  104. package/dist/kueezBidAdapter.js +1 -1
  105. package/dist/lassoBidAdapter.js +1 -1
  106. package/dist/lifestreetBidAdapter.js +1 -1
  107. package/dist/liveIntentIdSystem.js +1 -1
  108. package/dist/logicadBidAdapter.js +1 -1
  109. package/dist/loglyliftBidAdapter.js +1 -1
  110. package/dist/luceadBidAdapter.js +1 -1
  111. package/dist/mabidderBidAdapter.js +1 -1
  112. package/dist/magniteAnalyticsAdapter.js +1 -1
  113. package/dist/malltvAnalyticsAdapter.js +1 -1
  114. package/dist/marsmediaBidAdapter.js +1 -1
  115. package/dist/mediafuseBidAdapter.js +1 -1
  116. package/dist/mediagoBidAdapter.js +1 -1
  117. package/dist/medianetAnalyticsAdapter.js +1 -1
  118. package/dist/medianetBidAdapter.js +1 -1
  119. package/dist/mediasquareBidAdapter.js +1 -1
  120. package/dist/mgidBidAdapter.js +1 -1
  121. package/dist/minutemediaBidAdapter.js +1 -1
  122. package/dist/missenaBidAdapter.js +1 -1
  123. package/dist/mobianRtdProvider.js +1 -1
  124. package/dist/nextMillenniumBidAdapter.js +1 -1
  125. package/dist/nexx360BidAdapter.js +1 -1
  126. package/dist/nobidAnalyticsAdapter.js +1 -1
  127. package/dist/nobidBidAdapter.js +1 -1
  128. package/dist/not-for-prod/prebid.js +201 -193
  129. package/dist/oguryBidAdapter.js +1 -1
  130. package/dist/onetagBidAdapter.js +1 -1
  131. package/dist/ooloAnalyticsAdapter.js +1 -1
  132. package/dist/openwebBidAdapter.js +1 -1
  133. package/dist/openxBidAdapter.js +1 -1
  134. package/dist/optidigitalBidAdapter.js +1 -1
  135. package/dist/optoutBidAdapter.js +1 -1
  136. package/dist/orbidderBidAdapter.js +1 -1
  137. package/dist/outbrainBidAdapter.js +1 -1
  138. package/dist/paapi.js +1 -1
  139. package/dist/permutiveRtdProvider.js +1 -1
  140. package/dist/pixfutureBidAdapter.js +1 -1
  141. package/dist/playdigoBidAdapter.js +1 -1
  142. package/dist/prebidServerBidAdapter.js +1 -1
  143. package/dist/programmaticaBidAdapter.js +1 -1
  144. package/dist/publinkIdSystem.js +1 -1
  145. package/dist/publirBidAdapter.js +1 -1
  146. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  147. package/dist/pubmaticBidAdapter.js +1 -1
  148. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  149. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  150. package/dist/pxyzBidAdapter.js +1 -1
  151. package/dist/quantcastBidAdapter.js +1 -1
  152. package/dist/readpeakBidAdapter.js +1 -1
  153. package/dist/relaidoBidAdapter.js +1 -1
  154. package/dist/relevatehealthBidAdapter.js +1 -1
  155. package/dist/retailspotBidAdapter.js +1 -1
  156. package/dist/rhythmoneBidAdapter.js +1 -1
  157. package/dist/ringieraxelspringerBidAdapter.js +1 -1
  158. package/dist/riseBidAdapter.js +1 -1
  159. package/dist/rubiconBidAdapter.js +1 -1
  160. package/dist/schainSerializer.js +1 -0
  161. package/dist/seedingAllianceBidAdapter.js +1 -1
  162. package/dist/seedtagBidAdapter.js +1 -1
  163. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  164. package/dist/sharethroughBidAdapter.js +1 -1
  165. package/dist/shinezBidAdapter.js +1 -1
  166. package/dist/sizeMapping.js +1 -1
  167. package/dist/sizeUtils.js +1 -1
  168. package/dist/smaatoBidAdapter.js +1 -1
  169. package/dist/smartadserverBidAdapter.js +1 -1
  170. package/dist/smartxBidAdapter.js +1 -1
  171. package/dist/smilewantedBidAdapter.js +1 -1
  172. package/dist/snigelBidAdapter.js +1 -1
  173. package/dist/sonobiBidAdapter.js +1 -1
  174. package/dist/sovrnBidAdapter.js +1 -1
  175. package/dist/sspBCBidAdapter.js +1 -1
  176. package/dist/stnBidAdapter.js +1 -1
  177. package/dist/stvBidAdapter.js +1 -1
  178. package/dist/sublimeBidAdapter.js +1 -1
  179. package/dist/symitriDapRtdProvider.js +1 -0
  180. package/dist/taboolaBidAdapter.js +1 -1
  181. package/dist/tappxBidAdapter.js +1 -1
  182. package/dist/targetVideoBidAdapter.js +1 -1
  183. package/dist/targetVideoUtils.js +1 -0
  184. package/dist/teadsBidAdapter.js +1 -1
  185. package/dist/terceptAnalyticsAdapter.js +1 -1
  186. package/dist/themoneytizerBidAdapter.js +1 -1
  187. package/dist/trionBidAdapter.js +1 -1
  188. package/dist/tripleliftBidAdapter.js +1 -1
  189. package/dist/ttdBidAdapter.js +1 -1
  190. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  191. package/dist/uid2IdSystem.js +1 -1
  192. package/dist/underdogmediaBidAdapter.js +1 -1
  193. package/dist/undertoneBidAdapter.js +1 -1
  194. package/dist/unrulyBidAdapter.js +1 -1
  195. package/dist/userAgentUtils.js +1 -0
  196. package/dist/utiqIdSystem.js +1 -1
  197. package/dist/vidazooUtils.js +1 -1
  198. package/dist/videobyteBidAdapter.js +1 -1
  199. package/dist/visxBidAdapter.js +1 -1
  200. package/dist/vuukleBidAdapter.js +1 -1
  201. package/dist/widespaceBidAdapter.js +1 -1
  202. package/dist/winrBidAdapter.js +1 -1
  203. package/dist/yahooAdsBidAdapter.js +1 -1
  204. package/dist/yandexIdSystem.js +1 -1
  205. package/dist/yieldmoBidAdapter.js +1 -1
  206. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  207. package/integrationExamples/gpt/x-domain/creative.html +1 -1
  208. package/libraries/adkernelUtils/adkernelUtils.js +11 -0
  209. package/libraries/currencyUtils/floor.js +23 -0
  210. package/libraries/dfpUtils/dfpUtils.js +7 -0
  211. package/libraries/fpdUtils/deviceInfo.js +58 -0
  212. package/libraries/fpdUtils/pageInfo.js +73 -0
  213. package/libraries/gptUtils/gptUtils.js +23 -1
  214. package/libraries/schainSerializer/schainSerializer.js +24 -0
  215. package/libraries/sizeUtils/tranformSize.js +43 -0
  216. package/libraries/targetVideoUtils/bidderUtils.js +178 -0
  217. package/libraries/targetVideoUtils/constants.js +23 -0
  218. package/libraries/userAgentUtils/index.js +58 -0
  219. package/libraries/userAgentUtils/userAgentTypes.enums.js +22 -0
  220. package/modules/.submodules.json +1 -0
  221. package/modules/33acrossAnalyticsAdapter.js +2 -0
  222. package/modules/adagioBidAdapter.js +1 -1
  223. package/modules/adagioRtdProvider.js +18 -4
  224. package/modules/adkernelAdnBidAdapter.js +1 -12
  225. package/modules/adkernelBidAdapter.js +4 -13
  226. package/modules/adlooxAnalyticsAdapter.js +1 -0
  227. package/modules/admixerBidAdapter.js +10 -6
  228. package/modules/admixerBidAdapter.md +7 -10
  229. package/modules/adtrgtmeBidAdapter.js +1 -1
  230. package/modules/advRedAnalyticsAdapter.js +198 -0
  231. package/modules/advRedAnalyticsAdapter.md +30 -0
  232. package/modules/akamaiDapRtdProvider.js +19 -798
  233. package/modules/anonymisedRtdProvider.js +5 -1
  234. package/modules/anonymisedRtdProvider.md +1 -1
  235. package/modules/apacdexBidAdapter.js +1 -1
  236. package/modules/appnexusBidAdapter.js +56 -2
  237. package/modules/automatadAnalyticsAdapter.js +2 -0
  238. package/modules/azerionedgeRtdProvider.js +13 -3
  239. package/modules/azerionedgeRtdProvider.md +0 -17
  240. package/modules/bridBidAdapter.js +47 -47
  241. package/modules/cleanioRtdProvider.js +1 -0
  242. package/modules/concertBidAdapter.js +1 -1
  243. package/modules/connatixBidAdapter.js +36 -8
  244. package/modules/connectIdSystem.js +3 -1
  245. package/modules/contxtfulRtdProvider.js +20 -2
  246. package/modules/contxtfulRtdProvider.md +1 -0
  247. package/modules/craftBidAdapter.js +1 -1
  248. package/modules/criteoBidAdapter.js +1 -1
  249. package/modules/cwireBidAdapter.js +5 -1
  250. package/modules/dailymotionBidAdapter.js +85 -65
  251. package/modules/debugging/debugging.js +3 -0
  252. package/modules/dfpAdServerVideo.js +15 -33
  253. package/modules/dfpAdpod.js +2 -6
  254. package/modules/dgkeywordRtdProvider.js +2 -0
  255. package/modules/discoveryBidAdapter.js +26 -210
  256. package/modules/dspxBidAdapter.js +176 -54
  257. package/modules/eightPodAnalyticsAdapter.js +28 -34
  258. package/modules/eightPodBidAdapter.js +113 -57
  259. package/modules/fintezaAnalyticsAdapter.js +9 -4
  260. package/modules/goldbachBidAdapter.js +1 -1
  261. package/modules/gptPreAuction.js +63 -4
  262. package/modules/growthCodeAnalyticsAdapter.js +1 -1
  263. package/modules/growthCodeRtdProvider.js +1 -1
  264. package/modules/gumgumBidAdapter.js +14 -10
  265. package/modules/improvedigitalBidAdapter.js +1 -1
  266. package/modules/intentIqAnalyticsAdapter.js +234 -0
  267. package/modules/intentIqAnalyticsAdapter.md +27 -0
  268. package/modules/intentIqIdSystem.md +0 -0
  269. package/modules/jwplayerBidAdapter.js +1 -1
  270. package/modules/jwplayerRtdProvider.js +26 -6
  271. package/modules/jwplayerVideoProvider.js +6 -0
  272. package/modules/mediafuseBidAdapter.js +1 -1
  273. package/modules/mediagoBidAdapter.js +7 -176
  274. package/modules/medianetBidAdapter.js +101 -40
  275. package/modules/mgidBidAdapter.js +3 -1
  276. package/modules/mobianRtdProvider.js +16 -2
  277. package/modules/nextMillenniumBidAdapter.js +1 -27
  278. package/modules/nobidBidAdapter.js +1 -1
  279. package/modules/optoutBidAdapter.js +1 -1
  280. package/modules/paapi.js +48 -35
  281. package/modules/permutiveRtdProvider.js +72 -22
  282. package/modules/playdigoBidAdapter.js +4 -2
  283. package/modules/prebidServerBidAdapter/index.js +4 -2
  284. package/modules/prebidServerBidAdapter/ortbConverter.js +1 -0
  285. package/modules/programmaticaBidAdapter.js +1 -1
  286. package/modules/pubmaticBidAdapter.js +12 -0
  287. package/modules/pubxaiAnalyticsAdapter.js +306 -164
  288. package/modules/relevatehealthBidAdapter.js +2 -1
  289. package/modules/richaudienceBidAdapter.js +1 -1
  290. package/modules/rtdModule/index.js +5 -3
  291. package/modules/sirdataRtdProvider.js +2 -0
  292. package/modules/sizeMapping.js +2 -5
  293. package/modules/smaatoBidAdapter.js +18 -1
  294. package/modules/smilewantedBidAdapter.js +26 -22
  295. package/modules/snigelBidAdapter.js +1 -1
  296. package/modules/sonobiBidAdapter.js +5 -10
  297. package/modules/symitriDapRtdProvider.js +812 -0
  298. package/modules/symitriDapRtdProvider.md +49 -0
  299. package/modules/targetVideoBidAdapter.js +120 -152
  300. package/modules/targetVideoBidAdapter.md +20 -3
  301. package/modules/userId/eids.js +3 -0
  302. package/modules/utiqIdSystem.js +12 -10
  303. package/modules/validationFpdModule/index.js +22 -17
  304. package/modules/videojsVideoProvider.js +3 -0
  305. package/modules/visxBidAdapter.js +1 -1
  306. package/modules/winrBidAdapter.js +2 -27
  307. package/modules/yahooAdsBidAdapter.js +1 -1
  308. package/modules/yandexIdSystem.js +1 -1
  309. package/package.json +4 -4
  310. package/plugins/eslint/index.js +73 -45
  311. package/src/adRendering.js +7 -3
  312. package/src/adloader.js +1 -0
  313. package/src/ajax.js +15 -0
  314. package/src/config.js +0 -4
  315. package/src/debugging.js +1 -0
  316. package/src/secureCreatives.js +1 -1
  317. package/src/storageManager.js +62 -73
  318. package/src/targeting.js +26 -20
  319. package/src/utils.js +9 -0
  320. package/test/pages/banner_sync.html +97 -0
  321. package/test/pages/consent_mgt_gdpr.html +1 -1
  322. package/test/spec/ajax_spec.js +11 -0
  323. package/test/spec/creative/crossDomainCreative_spec.js +26 -9
  324. package/test/spec/e2e/banner/basic_banner_ad.spec.js +20 -14
  325. package/test/spec/fpd/gdpr_spec.js +1 -1
  326. package/test/spec/libraries/userAgentUtils_spec.js +109 -0
  327. package/test/spec/modules/adagioRtdProvider_spec.js +72 -0
  328. package/test/spec/modules/admixerBidAdapter_spec.js +21 -17
  329. package/test/spec/modules/advRedAnalyticsAdapter_spec.js +114 -0
  330. package/test/spec/modules/adxcgBidAdapter_spec.js +1 -1
  331. package/test/spec/modules/appnexusBidAdapter_spec.js +36 -0
  332. package/test/spec/modules/azerionedgeRtdProvider_spec.js +36 -21
  333. package/test/spec/modules/connatixBidAdapter_spec.js +55 -2
  334. package/test/spec/modules/consentManagement_spec.js +1 -1
  335. package/test/spec/modules/contxtfulRtdProvider_spec.js +6 -0
  336. package/test/spec/modules/dailymotionBidAdapter_spec.js +497 -4
  337. package/test/spec/modules/discoveryBidAdapter_spec.js +9 -6
  338. package/test/spec/modules/dspxBidAdapter_spec.js +188 -7
  339. package/test/spec/modules/eightPodAnalyticsAdapter_spec.js +22 -13
  340. package/test/spec/modules/gptPreAuction_spec.js +143 -1
  341. package/test/spec/modules/gumgumBidAdapter_spec.js +17 -0
  342. package/test/spec/modules/intentIqAnalyticsAdapter_spec.js +172 -0
  343. package/test/spec/modules/jwplayerRtdProvider_spec.js +61 -0
  344. package/test/spec/modules/mediagoBidAdapter_spec.js +34 -37
  345. package/test/spec/modules/medianetBidAdapter_spec.js +297 -16
  346. package/test/spec/modules/mgidBidAdapter_spec.js +15 -5
  347. package/test/spec/modules/mobianRtdProvider_spec.js +1 -3
  348. package/test/spec/modules/paapi_spec.js +177 -111
  349. package/test/spec/modules/permutiveRtdProvider_spec.js +42 -8
  350. package/test/spec/modules/prebidServerBidAdapter_spec.js +17 -3
  351. package/test/spec/modules/proxistoreBidAdapter_spec.js +1 -1
  352. package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
  353. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +970 -603
  354. package/test/spec/modules/pulsepointBidAdapter_spec.js +4 -4
  355. package/test/spec/modules/smaatoBidAdapter_spec.js +36 -1
  356. package/test/spec/modules/smilewantedBidAdapter_spec.js +57 -1
  357. package/test/spec/modules/symitriDapRtdProvider_spec.js +600 -0
  358. package/test/spec/modules/targetVideoBidAdapter_spec.js +112 -11
  359. package/test/spec/modules/yandexIdSystem_spec.js +6 -1
  360. package/test/spec/schainSerializer/schainSerializer_spec.js +138 -0
  361. package/test/spec/unit/core/storageManager_spec.js +68 -51
  362. package/test/spec/utils_spec.js +19 -0
  363. /package/src/utils/{gpdr.js → gdpr.js} +0 -0
@@ -0,0 +1,178 @@
1
+ import {VIDEO} from '../../src/mediaTypes.js';
2
+ import {getRefererInfo} from '../../src/refererDetection.js';
3
+ import {createTrackPixelHtml, deepAccess, getBidRequest} from '../../src/utils.js';
4
+
5
+ export function getSizes(request) {
6
+ let sizes = request.sizes;
7
+ if (!sizes && request.mediaTypes && request.mediaTypes.banner && request.mediaTypes.banner.sizes) {
8
+ sizes = request.mediaTypes.banner.sizes;
9
+ }
10
+ if (Array.isArray(sizes) && !Array.isArray(sizes[0])) {
11
+ sizes = [sizes[0], sizes[1]];
12
+ }
13
+ if (!Array.isArray(sizes) || !Array.isArray(sizes[0])) {
14
+ sizes = [[0, 0]];
15
+ }
16
+
17
+ return sizes;
18
+ }
19
+
20
+ export function formatRequest({payload, url, bidderRequest, bidId}) {
21
+ const request = {
22
+ method: 'POST',
23
+ data: JSON.stringify(payload),
24
+ url,
25
+ options: {
26
+ withCredentials: true,
27
+ }
28
+ }
29
+
30
+ if (bidderRequest) {
31
+ request.bidderRequest = bidderRequest;
32
+ }
33
+
34
+ if (bidId) {
35
+ request.bidId = bidId;
36
+ }
37
+
38
+ return request;
39
+ }
40
+
41
+ export function createVideoTag(bid) {
42
+ const tag = {};
43
+ tag.id = parseInt(bid.params.placementId, 10);
44
+ tag.gpid = 'targetVideo';
45
+ tag.sizes = getSizes(bid);
46
+ tag.primary_size = tag.sizes[0];
47
+ tag.ad_types = [VIDEO];
48
+ tag.uuid = bid.bidId;
49
+ tag.allow_smaller_sizes = false;
50
+ tag.use_pmt_rule = false;
51
+ tag.prebid = true;
52
+ tag.disable_psa = true;
53
+ tag.hb_source = 1;
54
+ tag.require_asset_url = true;
55
+ tag.video = {
56
+ playback_method: 2,
57
+ skippable: true
58
+ };
59
+
60
+ return tag;
61
+ }
62
+
63
+ export function bannerBid(serverBid, rtbBid, bidderRequest, margin) {
64
+ const bidRequest = getBidRequest(serverBid.uuid, [bidderRequest]);
65
+ const sizes = getSizes(bidRequest);
66
+ const bid = {
67
+ requestId: serverBid.uuid,
68
+ cpm: rtbBid.cpm / margin,
69
+ creativeId: rtbBid.creative_id,
70
+ dealId: rtbBid.deal_id,
71
+ currency: 'USD',
72
+ netRevenue: true,
73
+ width: sizes[0][0],
74
+ height: sizes[0][1],
75
+ ttl: 300,
76
+ adUnitCode: bidRequest.adUnitCode,
77
+ appnexus: {
78
+ buyerMemberId: rtbBid.buyer_member_id,
79
+ dealPriority: rtbBid.deal_priority,
80
+ dealCode: rtbBid.deal_code
81
+ }
82
+ };
83
+
84
+ if (rtbBid.rtb.video) {
85
+ Object.assign(bid, {
86
+ vastImpUrl: rtbBid.notify_url,
87
+ ad: getBannerHtml(rtbBid.notify_url + '&redir=' + encodeURIComponent(rtbBid.rtb.video.asset_url)),
88
+ ttl: 3600
89
+ });
90
+ }
91
+
92
+ return bid;
93
+ }
94
+
95
+ export function videoBid(serverBid, requestId, currency, params, ttl) {
96
+ const {ad, adUrl, vastUrl, vastXml} = getAd(serverBid);
97
+
98
+ const bid = {
99
+ requestId,
100
+ params,
101
+ currency,
102
+ cpm: serverBid.price,
103
+ width: serverBid.w,
104
+ height: serverBid.h,
105
+ creativeId: serverBid.adid || serverBid.crid,
106
+ netRevenue: false,
107
+ ttl,
108
+ meta: {
109
+ advertiserDomains: serverBid.adomain || []
110
+ }
111
+ };
112
+
113
+ if (vastUrl || vastXml) {
114
+ bid.mediaType = VIDEO;
115
+ if (vastUrl) bid.vastUrl = vastUrl;
116
+ if (vastXml) bid.vastXml = vastXml;
117
+ } else {
118
+ bid.ad = ad;
119
+ bid.adUrl = adUrl;
120
+ };
121
+
122
+ return bid;
123
+ }
124
+
125
+ export function getRtbBid(tag) {
126
+ return tag && tag.ads && tag.ads.length && tag.ads.find(ad => ad.rtb);
127
+ }
128
+
129
+ export function getBannerHtml(vastUrl) {
130
+ return `<!DOCTYPE html>
131
+ <html lang="en">
132
+ <head>
133
+ <meta charset="UTF-8">
134
+ <title></title>
135
+ <style>html, body {width: 100%; height: 100%; margin: 0;}</style>
136
+ </head>
137
+ <body>
138
+ <div id="targetVideoPlayer"></div>
139
+ <script src="https://player.target-video.com/custom/targetvideo-banner.js"></script>
140
+ <script>initPlayer("${vastUrl}");</script>
141
+ </body>
142
+ </html>`;
143
+ }
144
+
145
+ export function getAd(bid) {
146
+ let ad, adUrl, vastXml, vastUrl;
147
+
148
+ switch (deepAccess(bid, 'ext.prebid.type')) {
149
+ case VIDEO:
150
+ if (bid.adm.substr(0, 4) === 'http') {
151
+ vastUrl = bid.adm;
152
+ } else {
153
+ vastXml = bid.adm;
154
+ };
155
+ break;
156
+ default:
157
+ if (bid.adm && bid.nurl) {
158
+ ad = bid.adm;
159
+ ad += createTrackPixelHtml(decodeURIComponent(bid.nurl));
160
+ } else if (bid.adm) {
161
+ ad = bid.adm;
162
+ } else if (bid.nurl) {
163
+ adUrl = bid.nurl;
164
+ };
165
+ }
166
+
167
+ return {ad, adUrl, vastXml, vastUrl};
168
+ }
169
+
170
+ export function getSiteObj() {
171
+ const refInfo = (getRefererInfo && getRefererInfo()) || {};
172
+
173
+ return {
174
+ page: refInfo.page,
175
+ ref: refInfo.ref,
176
+ domain: refInfo.domain
177
+ }
178
+ }
@@ -0,0 +1,23 @@
1
+ const SOURCE = 'pbjs';
2
+ const GVLID = 786;
3
+ const MARGIN = 1.35;
4
+ const BIDDER_CODE = 'targetVideo';
5
+
6
+ const TIME_TO_LIVE = 300;
7
+ const BANNER_ENDPOINT_URL = 'https://ib.adnxs.com/ut/v3/prebid';
8
+ const VIDEO_ENDPOINT_URL = 'https://pbs.prebrid.tv/openrtb2/auction';
9
+ const VIDEO_PARAMS = [
10
+ 'api', 'linearity', 'maxduration', 'mimes', 'minduration',
11
+ 'plcmt', 'playbackmethod', 'protocols', 'startdelay'
12
+ ];
13
+
14
+ export {
15
+ SOURCE,
16
+ GVLID,
17
+ MARGIN,
18
+ BIDDER_CODE,
19
+ TIME_TO_LIVE,
20
+ BANNER_ENDPOINT_URL,
21
+ VIDEO_ENDPOINT_URL,
22
+ VIDEO_PARAMS
23
+ }
@@ -0,0 +1,58 @@
1
+ import { deviceTypes, browserTypes, osTypes } from './userAgentTypes.enums.js';
2
+
3
+ /**
4
+ * Get the approximate device type enum from the user agent
5
+ * @returns {number}
6
+ */
7
+ export const getDeviceType = () => {
8
+ if (
9
+ /ipad|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(
10
+ navigator.userAgent.toLowerCase()
11
+ )
12
+ ) return deviceTypes.TABLET;
13
+ if (
14
+ /iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i.test(
15
+ navigator.userAgent.toLowerCase()
16
+ )
17
+ ) return deviceTypes.MOBILE;
18
+ return deviceTypes.DESKTOP;
19
+ };
20
+
21
+ /**
22
+ * Get the approximate browser type enum from the user agent (or vendor
23
+ * if available)
24
+ * @returns {number}
25
+ */
26
+ export const getBrowser = () => {
27
+ if (/Edg/.test(navigator.userAgent)) return browserTypes.EDGE;
28
+ else if (
29
+ /Chrome/.test(navigator.userAgent) &&
30
+ /Google Inc/.test(navigator.vendor)
31
+ ) return browserTypes.CHROME;
32
+ else if (navigator.userAgent.match('CriOS')) return browserTypes.CHROME;
33
+ else if (/Firefox/.test(navigator.userAgent)) return browserTypes.FIREFOX;
34
+ else if (
35
+ /Safari/.test(navigator.userAgent) &&
36
+ /Apple Computer/.test(navigator.vendor)
37
+ ) return browserTypes.SAFARI;
38
+ else if (
39
+ /Trident/.test(navigator.userAgent) ||
40
+ /MSIE/.test(navigator.userAgent)
41
+ ) return browserTypes.INTERNET_EXPLORER;
42
+ else return browserTypes.OTHER;
43
+ };
44
+
45
+ /**
46
+ * Get the approximate OS enum from the user agent (or app version,
47
+ * if available)
48
+ * @returns {number}
49
+ */
50
+ export const getOS = () => {
51
+ if (navigator.userAgent.indexOf('Android') != -1) return osTypes.ANDROID;
52
+ if (navigator.userAgent.indexOf('like Mac') != -1) return osTypes.IOS;
53
+ if (navigator.userAgent.indexOf('Win') != -1) return osTypes.WINDOWS;
54
+ if (navigator.userAgent.indexOf('Mac') != -1) return osTypes.MAC;
55
+ if (navigator.userAgent.indexOf('Linux') != -1) return osTypes.LINUX;
56
+ if (navigator.appVersion.indexOf('X11') != -1) return osTypes.UNIX;
57
+ return osTypes.OTHER;
58
+ };
@@ -0,0 +1,22 @@
1
+ export const deviceTypes = Object.freeze({
2
+ DESKTOP: 0,
3
+ MOBILE: 1,
4
+ TABLET: 2,
5
+ })
6
+ export const browserTypes = Object.freeze({
7
+ CHROME: 0,
8
+ FIREFOX: 1,
9
+ SAFARI: 2,
10
+ EDGE: 3,
11
+ INTERNET_EXPLORER: 4,
12
+ OTHER: 5
13
+ })
14
+ export const osTypes = Object.freeze({
15
+ WINDOWS: 0,
16
+ MAC: 1,
17
+ LINUX: 2,
18
+ UNIX: 3,
19
+ IOS: 4,
20
+ ANDROID: 5,
21
+ OTHER: 6
22
+ })
@@ -97,6 +97,7 @@
97
97
  "reconciliationRtdProvider",
98
98
  "relevadRtdProvider",
99
99
  "sirdataRtdProvider",
100
+ "symitriDapRtdProvider",
100
101
  "timeoutRtdProvider",
101
102
  "weboramaRtdProvider"
102
103
  ],
@@ -629,6 +629,8 @@ function setCachedBidStatus(auctionId, bidId, status) {
629
629
  * @param {string} endpoint URL
630
630
  */
631
631
  function sendReport(report, endpoint) {
632
+ // TODO FIX THIS RULES VIOLATION
633
+ // eslint-disable-next-line
632
634
  if (navigator.sendBeacon(endpoint, JSON.stringify(report))) {
633
635
  log.info(`Analytics report sent to ${endpoint}`, report);
634
636
 
@@ -576,7 +576,7 @@ export const spec = {
576
576
  sessionData.rnd = Math.random()
577
577
  }
578
578
 
579
- const aucId = deepAccess('bidderRequest', 'ortb2.site.ext.data.adg_rtd.uid') || generateUUID()
579
+ const aucId = deepAccess(bidderRequest, 'ortb2.site.ext.data.adg_rtd.uid') || generateUUID()
580
580
 
581
581
  const adUnits = validBidRequests.map(rawBidRequest => {
582
582
  const bidRequest = deepClone(rawBidRequest);
@@ -73,20 +73,34 @@ const _SESSION = (function() {
73
73
 
74
74
  storage.getDataFromLocalStorage('adagio', (storageValue) => {
75
75
  // session can be an empty object
76
- const { rnd, new: isNew, vwSmplg, vwSmplgNxt, lastActivityTime } = _internal.getSessionFromLocalStorage(storageValue);
76
+ const { rnd, new: isNew = false, vwSmplg, vwSmplgNxt, lastActivityTime, id, testName, testVersion, initiator } = _internal.getSessionFromLocalStorage(storageValue);
77
+
78
+ // isNew can be `true` if the session has been initialized by the A/B test snippet (external)
79
+ const isNewSess = (initiator === 'snippet') ? isNew : isNewSession(lastActivityTime);
77
80
 
78
81
  data.session = {
79
82
  rnd,
80
- new: isNew || false, // legacy: `new` was used but the choosen name is not good.
83
+ new: isNewSess, // legacy: `new` was used but the choosen name is not good.
81
84
  // Don't use values if they are not defined.
82
85
  ...(vwSmplg !== undefined && { vwSmplg }),
83
86
  ...(vwSmplgNxt !== undefined && { vwSmplgNxt }),
84
- ...(lastActivityTime !== undefined && { lastActivityTime })
87
+ ...(lastActivityTime !== undefined && { lastActivityTime }),
88
+ ...(id !== undefined && { id }),
89
+ ...(testName !== undefined && { testName }),
90
+ ...(testVersion !== undefined && { testVersion }),
91
+ ...(initiator !== undefined && { initiator }),
85
92
  };
86
93
 
87
- if (isNewSession(lastActivityTime)) {
94
+ // `initiator` is a pseudo flag used to know if the session has been initialized by the A/B test snippet (external).
95
+ // If the AB Test snippet has not been used, then `initiator` value is `adgjs` or `undefined`.
96
+ // The check on `testName` is used to ensure that the A/B test values are removed.
97
+ if (initiator !== 'snippet' && (isNewSess || testName)) {
88
98
  data.session.new = true;
99
+ data.session.id = generateUUID();
89
100
  data.session.rnd = Math.random();
101
+ // Ensure that the A/B test values are removed.
102
+ delete data.session.testName;
103
+ delete data.session.testVersion;
90
104
  }
91
105
 
92
106
  _internal.getAdagioNs().queue.push({
@@ -2,6 +2,7 @@ import {deepAccess, deepSetValue, isArray, isNumber, isStr, logInfo, parseSizesI
2
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
3
3
  import {BANNER, VIDEO} from '../src/mediaTypes.js';
4
4
  import {config} from '../src/config.js';
5
+ import {getBidFloor} from '../libraries/adkernelUtils/adkernelUtils.js'
5
6
 
6
7
  const DEFAULT_ADKERNEL_DSP_DOMAIN = 'tag.adkernel.com';
7
8
  const DEFAULT_MIMES = ['video/mp4', 'video/webm', 'application/x-shockwave-flash', 'application/javascript'];
@@ -143,18 +144,6 @@ function fillBidMeta(bid, tag) {
143
144
  }
144
145
  }
145
146
 
146
- function getBidFloor(bid, mediaType, sizes) {
147
- var floor;
148
- var size = sizes.length === 1 ? sizes[0] : '*';
149
- if (typeof bid.getFloor === 'function') {
150
- const floorInfo = bid.getFloor({currency: 'USD', mediaType, size});
151
- if (typeof floorInfo === 'object' && floorInfo.currency === 'USD' && !isNaN(parseFloat(floorInfo.floor))) {
152
- floor = parseFloat(floorInfo.floor);
153
- }
154
- }
155
- return floor;
156
- }
157
-
158
147
  export const spec = {
159
148
  code: 'adkernelAdn',
160
149
  gvlid: GVLID,
@@ -20,6 +20,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
20
20
  import {find} from '../src/polyfill.js';
21
21
  import {config} from '../src/config.js';
22
22
  import {getAdUnitSizes} from '../libraries/sizeUtils/sizeUtils.js';
23
+ import {getBidFloor} from '../libraries/adkernelUtils/adkernelUtils.js'
23
24
 
24
25
  /**
25
26
  * In case you're AdKernel whitelable platform's client who needs branded adapter to
@@ -95,7 +96,9 @@ export const spec = {
95
96
  {code: 'headbidder'},
96
97
  {code: 'digiad'},
97
98
  {code: 'monetix'},
98
- {code: 'hyperbrainz'}
99
+ {code: 'hyperbrainz'},
100
+ {code: 'globalsun'},
101
+ {code: 'voisetech'}
99
102
  ],
100
103
  supportedMediaTypes: [BANNER, VIDEO, NATIVE],
101
104
 
@@ -246,18 +249,6 @@ function groupImpressionsByHostZone(bidRequests, refererInfo) {
246
249
  );
247
250
  }
248
251
 
249
- function getBidFloor(bid, mediaType, sizes) {
250
- var floor;
251
- var size = sizes.length === 1 ? sizes[0] : '*';
252
- if (typeof bid.getFloor === 'function') {
253
- const floorInfo = bid.getFloor({currency: 'USD', mediaType, size});
254
- if (typeof floorInfo === 'object' && floorInfo.currency === 'USD' && !isNaN(parseFloat(floorInfo.floor))) {
255
- floor = parseFloat(floorInfo.floor);
256
- }
257
- }
258
- return floor;
259
- }
260
-
261
252
  /**
262
253
  * Builds rtb imp object(s) for single adunit
263
254
  * @param bidRequest {BidRequest}
@@ -232,6 +232,7 @@ analyticsAdapter[`handle_${EVENTS.AUCTION_END}`] = function(auctionDetails) {
232
232
  link.setAttribute('href', `${uri.protocol}://${uri.host}${uri.pathname}`);
233
233
  link.setAttribute('rel', 'preload');
234
234
  link.setAttribute('as', 'script');
235
+ // TODO fix rules violation
235
236
  insertElement(link);
236
237
  }
237
238
 
@@ -13,7 +13,7 @@ const ALIASES = [
13
13
  {code: 'futureads', endpoint: 'https://ads.futureads.io/prebid.1.2.aspx'},
14
14
  {code: 'smn', endpoint: 'https://ads.smn.rs/prebid.1.2.aspx'},
15
15
  {code: 'admixeradx', endpoint: 'https://inv-nets.admixer.net/adxprebid.1.2.aspx'},
16
- {code: 'admixerwl', endpoint: 'https://inv-nets-adxwl.admixer.com/adxwlprebid.aspx'},
16
+ 'rtbstack'
17
17
  ];
18
18
  export const spec = {
19
19
  code: BIDDER_CODE,
@@ -23,8 +23,8 @@ export const spec = {
23
23
  * Determines whether or not the given bid request is valid.
24
24
  */
25
25
  isBidRequestValid: function (bid) {
26
- return bid.bidder === 'admixerwl'
27
- ? !!bid.params.clientId && !!bid.params.endpointId
26
+ return bid.bidder === 'rtbstack'
27
+ ? !!bid.params.tagId
28
28
  : !!bid.params.zone;
29
29
  },
30
30
  /**
@@ -51,8 +51,12 @@ export const spec = {
51
51
  };
52
52
  let endpointUrl;
53
53
  if (bidderRequest) {
54
- const {bidderCode} = bidderRequest;
55
- endpointUrl = config.getConfig(`${bidderCode}.endpoint_url`);
54
+ // checks if there is specified any endpointUrl in bidder config
55
+ endpointUrl = config.getConfig('bidderURL');
56
+ if (!endpointUrl && bidderRequest.bidderCode === 'rtbstack') {
57
+ logError('The bidderUrl config is required for RTB Stack bids. Please set it with setBidderConfig() for "rtbstack".');
58
+ return;
59
+ }
56
60
  // TODO: is 'page' the right value here?
57
61
  if (bidderRequest.refererInfo?.page) {
58
62
  payload.referrer = encodeURIComponent(bidderRequest.refererInfo.page);
@@ -82,7 +86,7 @@ export const spec = {
82
86
  let urlForRequest = endpointUrl || getEndpointUrl(bidderRequest.bidderCode)
83
87
  return {
84
88
  method: 'POST',
85
- url: bidderRequest.bidderCode === 'admixerwl' ? `${urlForRequest}?client=${payload.imps[0]?.params?.clientId}` : urlForRequest,
89
+ url: urlForRequest,
86
90
  data: payload,
87
91
  };
88
92
  },
@@ -51,7 +51,7 @@ Please use ```admixer``` as the bidder code.
51
51
  ];
52
52
  ```
53
53
 
54
- ### AdmixerWL Test Parameters
54
+ ### RTB Stack Test Parameters
55
55
  ```
56
56
  var adUnits = [
57
57
  {
@@ -59,10 +59,9 @@ Please use ```admixer``` as the bidder code.
59
59
  sizes: [[300, 250]], // a display size
60
60
  bids: [
61
61
  {
62
- bidder: "admixer",
62
+ bidder: "rtbstack",
63
63
  params: {
64
- endpointId: 41512,
65
- clientId: 62
64
+ tagId: 41512
66
65
  }
67
66
  }
68
67
  ]
@@ -71,10 +70,9 @@ Please use ```admixer``` as the bidder code.
71
70
  sizes: [[300, 50]], // a mobile size
72
71
  bids: [
73
72
  {
74
- bidder: "admixer",
73
+ bidder: "rtbstack",
75
74
  params: {
76
- endpointId: 41512,
77
- clientId: 62
75
+ tagId: 41512
78
76
  }
79
77
  }
80
78
  ]
@@ -84,10 +82,9 @@ Please use ```admixer``` as the bidder code.
84
82
  mediaType: 'video',
85
83
  bids: [
86
84
  {
87
- bidder: "admixer",
85
+ bidder: "rtbstack",
88
86
  params: {
89
- endpointId: 41512,
90
- clientId: 62
87
+ tagId: 41512
91
88
  }
92
89
  }
93
90
  ]
@@ -2,7 +2,7 @@ import { registerBidder } from '../src/adapters/bidderFactory.js';
2
2
  import { BANNER } from '../src/mediaTypes.js';
3
3
  import { deepAccess, isFn, isStr, isNumber, isArray, isEmpty, isPlainObject, generateUUID, logWarn } from '../src/utils.js';
4
4
  import { config } from '../src/config.js';
5
- import { hasPurpose1Consent } from '../src/utils/gpdr.js';
5
+ import { hasPurpose1Consent } from '../src/utils/gdpr.js';
6
6
 
7
7
  const INTEGRATION_METHOD = 'prebid.js';
8
8
  const BIDDER_CODE = 'adtrgtme';