prebid.js 7.10.0 → 7.13.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 (366) hide show
  1. package/.github/PULL_REQUEST_TEMPLATE.md +16 -10
  2. package/.github/codeql/codeql-config.yml +4 -0
  3. package/.github/workflows/codeql-analysis.yml +73 -0
  4. package/.github/workflows/issue_tracker.yml +1 -1
  5. package/README.md +0 -2
  6. package/babelConfig.js +10 -4
  7. package/dist/33acrossBidAdapter.js +1 -1
  8. package/dist/acuityAdsBidAdapter.js +1 -0
  9. package/dist/adagioBidAdapter.js +1 -1
  10. package/dist/adbookpspBidAdapter.js +1 -1
  11. package/dist/adgenerationBidAdapter.js +1 -1
  12. package/dist/adkernelBidAdapter.js +1 -1
  13. package/dist/adrelevantisBidAdapter.js +1 -1
  14. package/dist/adriverBidAdapter.js +1 -1
  15. package/dist/adriverIdSystem.js +1 -1
  16. package/dist/adtelligentBidAdapter.js +1 -1
  17. package/dist/adtrgtmeBidAdapter.js +1 -0
  18. package/dist/adxcgBidAdapter.js +1 -1
  19. package/dist/adyoulikeBidAdapter.js +1 -1
  20. package/dist/ajaBidAdapter.js +1 -1
  21. package/dist/alkimiBidAdapter.js +1 -1
  22. package/dist/amxBidAdapter.js +1 -1
  23. package/dist/amxIdSystem.js +1 -1
  24. package/dist/aniviewBidAdapter.js +1 -1
  25. package/dist/aolBidAdapter.js +1 -1
  26. package/dist/appierAnalyticsAdapter.js +1 -1
  27. package/dist/appnexusBidAdapter.js +1 -1
  28. package/dist/asoBidAdapter.js +1 -1
  29. package/dist/audiencerunBidAdapter.js +1 -1
  30. package/dist/axonixBidAdapter.js +1 -1
  31. package/dist/beopBidAdapter.js +1 -1
  32. package/dist/betweenBidAdapter.js +1 -1
  33. package/dist/bidglassBidAdapter.js +1 -1
  34. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  35. package/dist/big-richmediaBidAdapter.js +1 -1
  36. package/dist/bluebillywigBidAdapter.js +1 -1
  37. package/dist/brandmetricsRtdProvider.js +1 -1
  38. package/dist/bridgewellBidAdapter.js +1 -1
  39. package/dist/brightMountainMediaBidAdapter.js +1 -1
  40. package/dist/browsiRtdProvider.js +1 -1
  41. package/dist/cleanioRtdProvider.js +1 -1
  42. package/dist/concertBidAdapter.js +1 -1
  43. package/dist/connectadBidAdapter.js +1 -1
  44. package/dist/consentManagement.js +1 -1
  45. package/dist/consentManagementUsp.js +1 -1
  46. package/dist/consumableBidAdapter.js +1 -1
  47. package/dist/conversantBidAdapter.js +1 -1
  48. package/dist/cpmstarBidAdapter.js +1 -1
  49. package/dist/craftBidAdapter.js +1 -1
  50. package/dist/criteoBidAdapter.js +1 -1
  51. package/dist/currency.js +1 -1
  52. package/dist/datawrkzBidAdapter.js +1 -0
  53. package/dist/debugging-standalone.js +1 -1
  54. package/dist/dfpAdServerVideo.js +1 -1
  55. package/dist/dgkeywordRtdProvider.js +1 -1
  56. package/dist/displayioBidAdapter.js +1 -3
  57. package/dist/dspxBidAdapter.js +1 -1
  58. package/dist/enrichmentFpdModule.js +1 -1
  59. package/dist/eplanningBidAdapter.js +1 -1
  60. package/dist/finativeBidAdapter.js +1 -1
  61. package/dist/glimpseBidAdapter.js +1 -1
  62. package/dist/gmosspBidAdapter.js +1 -1
  63. package/dist/goldbachBidAdapter.js +1 -1
  64. package/dist/gridBidAdapter.js +1 -1
  65. package/dist/gridNMBidAdapter.js +1 -1
  66. package/dist/gumgumBidAdapter.js +1 -1
  67. package/dist/h12mediaBidAdapter.js +1 -1
  68. package/dist/id5IdSystem.js +1 -1
  69. package/dist/imRtdProvider.js +1 -1
  70. package/dist/impactifyBidAdapter.js +1 -1
  71. package/dist/improvedigitalBidAdapter.js +1 -1
  72. package/dist/inmarBidAdapter.js +1 -1
  73. package/dist/insticatorBidAdapter.js +1 -1
  74. package/dist/ixBidAdapter.js +1 -1
  75. package/dist/jixieBidAdapter.js +1 -1
  76. package/dist/justpremiumBidAdapter.js +1 -1
  77. package/dist/kargoBidAdapter.js +1 -1
  78. package/dist/konduitAnalyticsAdapter.js +1 -1
  79. package/dist/kueezBidAdapter.js +1 -1
  80. package/dist/lassoBidAdapter.js +1 -1
  81. package/dist/lifestreetBidAdapter.js +1 -0
  82. package/dist/limelightDigitalBidAdapter.js +1 -1
  83. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  84. package/dist/logicadBidAdapter.js +1 -1
  85. package/dist/loglyliftBidAdapter.js +1 -1
  86. package/dist/mabidderBidAdapter.js +1 -0
  87. package/dist/malltvAnalyticsAdapter.js +1 -1
  88. package/dist/marsmediaBidAdapter.js +1 -1
  89. package/dist/mediafuseBidAdapter.js +1 -1
  90. package/dist/mediagoBidAdapter.js +1 -0
  91. package/dist/mediakeysBidAdapter.js +1 -1
  92. package/dist/mediasquareBidAdapter.js +1 -1
  93. package/dist/mgidBidAdapter.js +1 -1
  94. package/dist/minutemediaBidAdapter.js +1 -1
  95. package/dist/nextMillenniumBidAdapter.js +1 -1
  96. package/dist/not-for-prod/prebid.js +153 -147
  97. package/dist/oguryBidAdapter.js +1 -1
  98. package/dist/oneKeyIdSystem.js +1 -0
  99. package/dist/oneKeyRtdProvider.js +1 -0
  100. package/dist/onetagBidAdapter.js +1 -1
  101. package/dist/ooloAnalyticsAdapter.js +1 -1
  102. package/dist/openxAnalyticsAdapter.js +1 -1
  103. package/dist/outbrainBidAdapter.js +1 -1
  104. package/dist/parrableIdSystem.js +1 -1
  105. package/dist/permutiveRtdProvider.js +1 -1
  106. package/dist/pixfutureBidAdapter.js +1 -1
  107. package/dist/prebid-core.js +2 -2
  108. package/dist/publinkIdSystem.js +1 -1
  109. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  110. package/dist/pubmaticBidAdapter.js +1 -1
  111. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  112. package/dist/pxyzBidAdapter.js +1 -1
  113. package/dist/quantcastBidAdapter.js +1 -1
  114. package/dist/rasBidAdapter.js +1 -1
  115. package/dist/readpeakBidAdapter.js +1 -1
  116. package/dist/relaidoBidAdapter.js +1 -1
  117. package/dist/rhythmoneBidAdapter.js +1 -1
  118. package/dist/riseBidAdapter.js +1 -1
  119. package/dist/rtbhouseBidAdapter.js +1 -1
  120. package/dist/rubiconAnalyticsAdapter.js +1 -1
  121. package/dist/rubiconBidAdapter.js +1 -1
  122. package/dist/seedingAllianceBidAdapter.js +1 -1
  123. package/dist/seedtagBidAdapter.js +1 -1
  124. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  125. package/dist/sharethroughBidAdapter.js +1 -1
  126. package/dist/shinezBidAdapter.js +1 -1
  127. package/dist/smaatoBidAdapter.js +1 -1
  128. package/dist/smartadserverBidAdapter.js +1 -1
  129. package/dist/smartxBidAdapter.js +1 -1
  130. package/dist/smilewantedBidAdapter.js +1 -1
  131. package/dist/sonobiBidAdapter.js +1 -1
  132. package/dist/sovrnAnalyticsAdapter.js +1 -1
  133. package/dist/sovrnBidAdapter.js +1 -1
  134. package/dist/sspBCBidAdapter.js +1 -1
  135. package/dist/sublimeBidAdapter.js +1 -1
  136. package/dist/synacormediaBidAdapter.js +1 -1
  137. package/dist/tappxBidAdapter.js +1 -1
  138. package/dist/targetVideoBidAdapter.js +1 -1
  139. package/dist/teadsBidAdapter.js +1 -1
  140. package/dist/trionBidAdapter.js +1 -1
  141. package/dist/tripleliftBidAdapter.js +1 -1
  142. package/dist/trustpidSystem.js +1 -1
  143. package/dist/ttdBidAdapter.js +1 -1
  144. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  145. package/dist/underdogmediaBidAdapter.js +1 -1
  146. package/dist/undertoneBidAdapter.js +1 -1
  147. package/dist/userId.js +1 -1
  148. package/dist/vidazooBidAdapter.js +1 -1
  149. package/dist/videobyteBidAdapter.js +1 -1
  150. package/dist/viewability.js +1 -1
  151. package/dist/visxBidAdapter.js +1 -1
  152. package/dist/vuukleBidAdapter.js +1 -1
  153. package/dist/widespaceBidAdapter.js +1 -1
  154. package/dist/winrBidAdapter.js +1 -1
  155. package/dist/yahoosspBidAdapter.js +1 -1
  156. package/dist/yieldmoBidAdapter.js +1 -1
  157. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  158. package/dist/zeta_global_sspBidAdapter.js +1 -1
  159. package/integrationExamples/gpt/permutiveRtdProvider_example.html +1 -1
  160. package/karma.conf.maker.js +2 -13
  161. package/modules/.submodules.json +2 -0
  162. package/modules/acuityAdsBidAdapter.js +207 -0
  163. package/modules/acuityAdsBidAdapter.md +79 -0
  164. package/modules/adagioBidAdapter.js +2 -3
  165. package/modules/adgenerationBidAdapter.js +2 -2
  166. package/modules/adkernelBidAdapter.js +28 -12
  167. package/modules/admixerBidAdapter.js +1 -1
  168. package/modules/adnowBidAdapter.js +1 -1
  169. package/modules/adpod.js +1 -1
  170. package/modules/adrelevantisBidAdapter.js +2 -2
  171. package/modules/adriverBidAdapter.js +5 -12
  172. package/modules/adriverIdSystem.js +2 -1
  173. package/modules/adtargetBidAdapter.js +1 -1
  174. package/modules/adtelligentBidAdapter.js +6 -2
  175. package/modules/adtrgtmeBidAdapter.js +333 -0
  176. package/modules/adtrgtmeBidAdapter.md +69 -0
  177. package/modules/adtrueBidAdapter.js +1 -1
  178. package/modules/adxpremiumAnalyticsAdapter.js +1 -1
  179. package/modules/adyoulikeBidAdapter.js +1 -1
  180. package/modules/alkimiBidAdapter.js +2 -1
  181. package/modules/aniviewBidAdapter.js +1 -1
  182. package/modules/appnexusBidAdapter.js +13 -93
  183. package/modules/apstreamBidAdapter.js +2 -2
  184. package/modules/beopBidAdapter.js +4 -4
  185. package/modules/betweenBidAdapter.js +4 -4
  186. package/modules/bidwatchAnalyticsAdapter.js +112 -59
  187. package/modules/bizzclickBidAdapter.js +1 -1
  188. package/modules/brightMountainMediaBidAdapter.js +1 -1
  189. package/modules/browsiRtdProvider.js +24 -10
  190. package/modules/cleanmedianetBidAdapter.js +1 -1
  191. package/modules/consentManagement.js +1 -1
  192. package/modules/consentManagementUsp.js +1 -1
  193. package/modules/consumableBidAdapter.js +43 -3
  194. package/modules/cpmstarBidAdapter.js +23 -13
  195. package/modules/criteoBidAdapter.js +19 -13
  196. package/modules/currency.js +1 -0
  197. package/modules/cwireBidAdapter.js +1 -1
  198. package/modules/datablocksBidAdapter.js +1 -1
  199. package/modules/datawrkzBidAdapter.js +633 -0
  200. package/modules/datawrkzBidAdapter.md +160 -0
  201. package/modules/dfpAdServerVideo.js +2 -2
  202. package/modules/dgkeywordRtdProvider.js +10 -1
  203. package/modules/displayioBidAdapter.js +92 -97
  204. package/modules/dspxBidAdapter.js +1 -1
  205. package/modules/e_volutionBidAdapter.js +3 -3
  206. package/modules/ebdrBidAdapter.js +1 -1
  207. package/modules/emx_digitalBidAdapter.js +1 -1
  208. package/modules/enrichmentFpdModule.js +11 -0
  209. package/modules/fabrickIdSystem.js +2 -2
  210. package/modules/gamoshiBidAdapter.js +1 -1
  211. package/modules/getintentBidAdapter.js +1 -1
  212. package/modules/gjirafaBidAdapter.js +2 -2
  213. package/modules/goldbachBidAdapter.js +8 -8
  214. package/modules/gothamadsBidAdapter.js +2 -2
  215. package/modules/gumgumBidAdapter.js +3 -3
  216. package/modules/h12mediaBidAdapter.js +1 -1
  217. package/modules/id5AnalyticsAdapter.js +1 -1
  218. package/modules/id5IdSystem.js +160 -111
  219. package/modules/id5IdSystem.md +16 -14
  220. package/modules/imRtdProvider.js +20 -7
  221. package/modules/imRtdProvider.md +3 -1
  222. package/modules/impactifyBidAdapter.js +1 -1
  223. package/modules/improvedigitalBidAdapter.js +50 -28
  224. package/modules/inskinBidAdapter.js +1 -1
  225. package/modules/insticatorBidAdapter.js +1 -1
  226. package/modules/integr8BidAdapter.js +2 -2
  227. package/modules/intentIqIdSystem.js +2 -2
  228. package/modules/interactiveOffersBidAdapter.js +1 -1
  229. package/modules/iqmBidAdapter.js +1 -1
  230. package/modules/ixBidAdapter.js +21 -328
  231. package/modules/ixBidAdapter.md +1 -19
  232. package/modules/kargoBidAdapter.js +4 -5
  233. package/modules/krushmediaBidAdapter.js +2 -2
  234. package/modules/lassoBidAdapter.js +3 -3
  235. package/modules/lifestreetBidAdapter.js +143 -0
  236. package/modules/limelightDigitalBidAdapter.js +2 -1
  237. package/modules/livewrappedAnalyticsAdapter.js +3 -3
  238. package/modules/lkqdBidAdapter.js +3 -3
  239. package/modules/loganBidAdapter.js +2 -2
  240. package/modules/luponmediaBidAdapter.js +3 -3
  241. package/modules/mabidderBidAdapter.js +60 -0
  242. package/modules/mabidderBidAdapter.md +31 -0
  243. package/modules/malltvBidAdapter.js +2 -2
  244. package/modules/mediagoBidAdapter.js +462 -0
  245. package/modules/mediagoBidAdapter.md +34 -0
  246. package/modules/mediakeysBidAdapter.js +2 -2
  247. package/modules/mgidBidAdapter.js +2 -2
  248. package/modules/nextMillenniumBidAdapter.js +25 -6
  249. package/modules/nobidBidAdapter.js +2 -2
  250. package/modules/novatiqIdSystem.js +1 -1
  251. package/modules/oneKeyIdSystem.js +78 -0
  252. package/modules/oneKeyIdSystem.md +109 -0
  253. package/modules/oneKeyRtdProvider.js +98 -0
  254. package/modules/oneKeyRtdProvider.md +127 -0
  255. package/modules/open8BidAdapter.js +1 -1
  256. package/modules/openwebBidAdapter.js +1 -1
  257. package/modules/openxAnalyticsAdapter.js +5 -744
  258. package/modules/openxAnalyticsAdapter.md +4 -0
  259. package/modules/openxBidAdapter.js +3 -3
  260. package/modules/permutiveRtdProvider.js +55 -8
  261. package/modules/pixfutureBidAdapter.js +1 -1
  262. package/modules/prebidmanagerAnalyticsAdapter.js +1 -1
  263. package/modules/priceFloors.js +1 -1
  264. package/modules/pubmaticAnalyticsAdapter.js +1 -1
  265. package/modules/pubmaticBidAdapter.js +19 -1
  266. package/modules/pubwiseAnalyticsAdapter.js +1 -1
  267. package/modules/pubwiseBidAdapter.js +3 -3
  268. package/modules/pubxBidAdapter.js +1 -1
  269. package/modules/pubxaiAnalyticsAdapter.js +2 -2
  270. package/modules/quantcastIdSystem.js +1 -1
  271. package/modules/radsBidAdapter.js +1 -1
  272. package/modules/rasBidAdapter.js +8 -0
  273. package/modules/rasBidAdapter.md +14 -13
  274. package/modules/revcontentBidAdapter.js +1 -1
  275. package/modules/richaudienceBidAdapter.js +1 -1
  276. package/modules/rtbhouseBidAdapter.js +25 -1
  277. package/modules/schain.js +1 -1
  278. package/modules/seedtagBidAdapter.md +25 -56
  279. package/modules/showheroes-bsBidAdapter.js +1 -1
  280. package/modules/sizeMappingV2.js +1 -1
  281. package/modules/smaatoBidAdapter.js +2 -2
  282. package/modules/sonobiAnalyticsAdapter.js +1 -1
  283. package/modules/sonobiBidAdapter.js +4 -3
  284. package/modules/staqAnalyticsAdapter.js +1 -1
  285. package/modules/tappxBidAdapter.js +11 -2
  286. package/modules/targetVideoBidAdapter.js +1 -1
  287. package/modules/theAdxBidAdapter.js +2 -2
  288. package/modules/tpmnBidAdapter.js +1 -1
  289. package/modules/trionBidAdapter.js +2 -2
  290. package/modules/tripleliftBidAdapter.js +20 -1
  291. package/modules/trustpidSystem.js +6 -42
  292. package/modules/trustpidSystem.md +10 -10
  293. package/modules/underdogmediaBidAdapter.js +1 -1
  294. package/modules/userId/eids.js +26 -0
  295. package/modules/userId/userId.md +2 -2
  296. package/modules/vdoaiBidAdapter.js +1 -1
  297. package/modules/vidazooBidAdapter.js +7 -5
  298. package/modules/vidoomyBidAdapter.js +1 -1
  299. package/modules/viewability.js +14 -14
  300. package/modules/winrBidAdapter.js +1 -1
  301. package/modules/yahoosspBidAdapter.js +3 -3
  302. package/modules/yandexBidAdapter.js +1 -1
  303. package/modules/yieldmoBidAdapter.js +3 -3
  304. package/modules/yieldoneBidAdapter.js +2 -2
  305. package/modules/zeta_global_sspBidAdapter.js +24 -21
  306. package/package.json +3 -3
  307. package/src/Renderer.js +1 -1
  308. package/src/adloader.js +2 -1
  309. package/src/adserver.js +0 -56
  310. package/src/auction.js +60 -16
  311. package/src/bidfactory.js +1 -1
  312. package/src/native.js +75 -60
  313. package/src/refererDetection.js +12 -1
  314. package/src/sizeMapping.js +5 -7
  315. package/src/targeting.js +1 -1
  316. package/src/userSync.js +1 -1
  317. package/src/utils/promise.js +3 -1
  318. package/src/utils.js +27 -0
  319. package/src/video.js +5 -4
  320. package/src/videoCache.js +8 -2
  321. package/test/pages/instream.html +2 -2
  322. package/test/spec/modules/acuityAdsBidAdapter_spec.js +398 -0
  323. package/test/spec/modules/adagioBidAdapter_spec.js +2 -0
  324. package/test/spec/modules/adkernelBidAdapter_spec.js +11 -2
  325. package/test/spec/modules/adriverBidAdapter_spec.js +6 -13
  326. package/test/spec/modules/adriverIdSystem_spec.js +3 -8
  327. package/test/spec/modules/adtelligentBidAdapter_spec.js +2 -0
  328. package/test/spec/modules/adtrgtmeBidAdapter_spec.js +802 -0
  329. package/test/spec/modules/alkimiBidAdapter_spec.js +2 -1
  330. package/test/spec/modules/appnexusBidAdapter_spec.js +1 -0
  331. package/test/spec/modules/beopBidAdapter_spec.js +11 -0
  332. package/test/spec/modules/betweenBidAdapter_spec.js +17 -0
  333. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +28 -12
  334. package/test/spec/modules/big-richmediaBidAdapter_spec.js +1 -0
  335. package/test/spec/modules/browsiRtdProvider_spec.js +40 -1
  336. package/test/spec/modules/consumableBidAdapter_spec.js +158 -0
  337. package/test/spec/modules/cpmstarBidAdapter_spec.js +1 -1
  338. package/test/spec/modules/criteoBidAdapter_spec.js +35 -26
  339. package/test/spec/modules/currency_spec.js +22 -0
  340. package/test/spec/modules/datawrkzBidAdapter_spec.js +656 -0
  341. package/test/spec/modules/dgkeywordRtdProvider_spec.js +1 -1
  342. package/test/spec/modules/displayioBidAdapter_spec.js +16 -52
  343. package/test/spec/modules/enrichmentFpdModule_spec.js +16 -1
  344. package/test/spec/modules/fpdModule_spec.js +2 -1
  345. package/test/spec/modules/id5IdSystem_spec.js +529 -172
  346. package/test/spec/modules/imRtdProvider_spec.js +10 -5
  347. package/test/spec/modules/improvedigitalBidAdapter_spec.js +9 -13
  348. package/test/spec/modules/ixBidAdapter_spec.js +216 -123
  349. package/test/spec/modules/kargoBidAdapter_spec.js +11 -2
  350. package/test/spec/modules/lifestreetBidAdapter_spec.js +232 -0
  351. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +59 -7
  352. package/test/spec/modules/mabidderBidAdapter_spec.js +125 -0
  353. package/test/spec/modules/mediagoBidAdapter_spec.js +97 -0
  354. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +2 -7
  355. package/test/spec/modules/oneKeyIdSystem_spec.js +107 -0
  356. package/test/spec/modules/oneKeyRtdProvider_spec.js +152 -0
  357. package/test/spec/modules/openxAnalyticsAdapter_spec.js +6 -638
  358. package/test/spec/modules/permutiveRtdProvider_spec.js +152 -2
  359. package/test/spec/modules/pubmaticBidAdapter_spec.js +69 -4
  360. package/test/spec/modules/rasBidAdapter_spec.js +2 -0
  361. package/test/spec/modules/tripleliftBidAdapter_spec.js +18 -0
  362. package/test/spec/modules/trustpidSystem_spec.js +27 -45
  363. package/test/spec/modules/vidazooBidAdapter_spec.js +36 -23
  364. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +59 -0
  365. package/test/spec/native_spec.js +257 -2
  366. package/test/spec/videoCache_spec.js +37 -7
@@ -0,0 +1,398 @@
1
+ import { expect } from 'chai';
2
+ import { spec } from '../../../modules/acuityAdsBidAdapter';
3
+ import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
4
+ import { getUniqueIdentifierStr } from '../../../src/utils.js';
5
+
6
+ const bidder = 'acuityads'
7
+
8
+ describe('AcuityAdsBidAdapter', function () {
9
+ const bids = [
10
+ {
11
+ bidId: getUniqueIdentifierStr(),
12
+ bidder: bidder,
13
+ mediaTypes: {
14
+ [BANNER]: {
15
+ sizes: [[300, 250]]
16
+ }
17
+ },
18
+ params: {
19
+ placementId: 'testBanner',
20
+ }
21
+ },
22
+ {
23
+ bidId: getUniqueIdentifierStr(),
24
+ bidder: bidder,
25
+ mediaTypes: {
26
+ [VIDEO]: {
27
+ playerSize: [[300, 300]],
28
+ minduration: 5,
29
+ maxduration: 60
30
+ }
31
+ },
32
+ params: {
33
+ placementId: 'testVideo',
34
+ }
35
+ },
36
+ {
37
+ bidId: getUniqueIdentifierStr(),
38
+ bidder: bidder,
39
+ mediaTypes: {
40
+ [NATIVE]: {
41
+ native: {
42
+ title: {
43
+ required: true
44
+ },
45
+ body: {
46
+ required: true
47
+ },
48
+ icon: {
49
+ required: true,
50
+ size: [64, 64]
51
+ }
52
+ }
53
+ }
54
+ },
55
+ params: {
56
+ placementId: 'testNative',
57
+ }
58
+ }
59
+ ];
60
+
61
+ const invalidBid = {
62
+ bidId: getUniqueIdentifierStr(),
63
+ bidder: bidder,
64
+ mediaTypes: {
65
+ [BANNER]: {
66
+ sizes: [[300, 250]]
67
+ }
68
+ },
69
+ params: {
70
+
71
+ }
72
+ }
73
+
74
+ const bidderRequest = {
75
+ uspConsent: '1---',
76
+ gdprConsent: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
77
+ refererInfo: {
78
+ referer: 'https://test.com'
79
+ }
80
+ };
81
+
82
+ describe('isBidRequestValid', function () {
83
+ it('Should return true if there are bidId, params and key parameters present', function () {
84
+ expect(spec.isBidRequestValid(bids[0])).to.be.true;
85
+ });
86
+ it('Should return false if at least one of parameters is not present', function () {
87
+ expect(spec.isBidRequestValid(invalidBid)).to.be.false;
88
+ });
89
+ });
90
+
91
+ describe('buildRequests', function () {
92
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
93
+
94
+ it('Creates a ServerRequest object with method, URL and data', function () {
95
+ expect(serverRequest).to.exist;
96
+ expect(serverRequest.method).to.exist;
97
+ expect(serverRequest.url).to.exist;
98
+ expect(serverRequest.data).to.exist;
99
+ });
100
+
101
+ it('Returns POST method', function () {
102
+ expect(serverRequest.method).to.equal('POST');
103
+ });
104
+
105
+ it('Returns valid URL', function () {
106
+ expect(serverRequest.url).to.equal('https://prebid.admanmedia.com/pbjs');
107
+ });
108
+
109
+ it('Returns general data valid', function () {
110
+ let data = serverRequest.data;
111
+ expect(data).to.be.an('object');
112
+ expect(data).to.have.all.keys('deviceWidth',
113
+ 'deviceHeight',
114
+ 'language',
115
+ 'secure',
116
+ 'host',
117
+ 'page',
118
+ 'placements',
119
+ 'coppa',
120
+ 'ccpa',
121
+ 'gdpr',
122
+ 'tmax'
123
+ );
124
+ expect(data.deviceWidth).to.be.a('number');
125
+ expect(data.deviceHeight).to.be.a('number');
126
+ expect(data.language).to.be.a('string');
127
+ expect(data.secure).to.be.within(0, 1);
128
+ expect(data.host).to.be.a('string');
129
+ expect(data.page).to.be.a('string');
130
+ expect(data.coppa).to.be.a('number');
131
+ expect(data.gdpr).to.be.a('string');
132
+ expect(data.ccpa).to.be.a('string');
133
+ expect(data.tmax).to.be.a('number');
134
+ expect(data.placements).to.have.lengthOf(3);
135
+ });
136
+
137
+ it('Returns valid placements', function () {
138
+ const { placements } = serverRequest.data;
139
+ for (let i = 0, len = placements.length; i < len; i++) {
140
+ const placement = placements[i];
141
+ expect(placement.placementId).to.be.oneOf(['testBanner', 'testVideo', 'testNative']);
142
+ expect(placement.adFormat).to.be.oneOf([BANNER, VIDEO, NATIVE]);
143
+ expect(placement.bidId).to.be.a('string');
144
+ expect(placement.schain).to.be.an('object');
145
+ expect(placement.bidfloor).to.exist.and.to.equal(0);
146
+ expect(placement.type).to.exist.and.to.equal('publisher');
147
+
148
+ if (placement.adFormat === BANNER) {
149
+ expect(placement.sizes).to.be.an('array');
150
+ }
151
+ switch (placement.adFormat) {
152
+ case BANNER:
153
+ expect(placement.sizes).to.be.an('array');
154
+ break;
155
+ case VIDEO:
156
+ expect(placement.playerSize).to.be.an('array');
157
+ expect(placement.minduration).to.be.an('number');
158
+ expect(placement.maxduration).to.be.an('number');
159
+ break;
160
+ case NATIVE:
161
+ expect(placement.native).to.be.an('object');
162
+ break;
163
+ }
164
+ }
165
+ });
166
+
167
+ it('Returns data with gdprConsent and without uspConsent', function () {
168
+ delete bidderRequest.uspConsent;
169
+ serverRequest = spec.buildRequests(bids, bidderRequest);
170
+ let data = serverRequest.data;
171
+ expect(data.gdpr).to.exist;
172
+ expect(data.gdpr).to.be.a('string');
173
+ expect(data.gdpr).to.equal(bidderRequest.gdprConsent);
174
+ expect(data.ccpa).to.not.exist;
175
+ delete bidderRequest.gdprConsent;
176
+ });
177
+
178
+ it('Returns data with uspConsent and without gdprConsent', function () {
179
+ bidderRequest.uspConsent = '1---';
180
+ delete bidderRequest.gdprConsent;
181
+ serverRequest = spec.buildRequests(bids, bidderRequest);
182
+ let data = serverRequest.data;
183
+ expect(data.ccpa).to.exist;
184
+ expect(data.ccpa).to.be.a('string');
185
+ expect(data.ccpa).to.equal(bidderRequest.uspConsent);
186
+ expect(data.gdpr).to.not.exist;
187
+ });
188
+
189
+ it('Returns empty data if no valid requests are passed', function () {
190
+ serverRequest = spec.buildRequests([], bidderRequest);
191
+ let data = serverRequest.data;
192
+ expect(data.placements).to.be.an('array').that.is.empty;
193
+ });
194
+ });
195
+
196
+ describe('interpretResponse', function () {
197
+ it('Should interpret banner response', function () {
198
+ const banner = {
199
+ body: [{
200
+ mediaType: 'banner',
201
+ width: 300,
202
+ height: 250,
203
+ cpm: 0.4,
204
+ ad: 'Test',
205
+ requestId: '23fhj33i987f',
206
+ ttl: 120,
207
+ creativeId: '2',
208
+ netRevenue: true,
209
+ currency: 'USD',
210
+ dealId: '1',
211
+ meta: {
212
+ advertiserDomains: ['google.com'],
213
+ advertiserId: 1234
214
+ }
215
+ }]
216
+ };
217
+ let bannerResponses = spec.interpretResponse(banner);
218
+ expect(bannerResponses).to.be.an('array').that.is.not.empty;
219
+ let dataItem = bannerResponses[0];
220
+ expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId',
221
+ 'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
222
+ expect(dataItem.requestId).to.equal(banner.body[0].requestId);
223
+ expect(dataItem.cpm).to.equal(banner.body[0].cpm);
224
+ expect(dataItem.width).to.equal(banner.body[0].width);
225
+ expect(dataItem.height).to.equal(banner.body[0].height);
226
+ expect(dataItem.ad).to.equal(banner.body[0].ad);
227
+ expect(dataItem.ttl).to.equal(banner.body[0].ttl);
228
+ expect(dataItem.creativeId).to.equal(banner.body[0].creativeId);
229
+ expect(dataItem.netRevenue).to.be.true;
230
+ expect(dataItem.currency).to.equal(banner.body[0].currency);
231
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
232
+ });
233
+ it('Should interpret video response', function () {
234
+ const video = {
235
+ body: [{
236
+ vastUrl: 'test.com',
237
+ mediaType: 'video',
238
+ cpm: 0.5,
239
+ requestId: '23fhj33i987f',
240
+ ttl: 120,
241
+ creativeId: '2',
242
+ netRevenue: true,
243
+ currency: 'USD',
244
+ dealId: '1',
245
+ meta: {
246
+ advertiserDomains: ['google.com'],
247
+ advertiserId: 1234
248
+ }
249
+ }]
250
+ };
251
+ let videoResponses = spec.interpretResponse(video);
252
+ expect(videoResponses).to.be.an('array').that.is.not.empty;
253
+
254
+ let dataItem = videoResponses[0];
255
+ expect(dataItem).to.have.all.keys('requestId', 'cpm', 'vastUrl', 'ttl', 'creativeId',
256
+ 'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
257
+ expect(dataItem.requestId).to.equal('23fhj33i987f');
258
+ expect(dataItem.cpm).to.equal(0.5);
259
+ expect(dataItem.vastUrl).to.equal('test.com');
260
+ expect(dataItem.ttl).to.equal(120);
261
+ expect(dataItem.creativeId).to.equal('2');
262
+ expect(dataItem.netRevenue).to.be.true;
263
+ expect(dataItem.currency).to.equal('USD');
264
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
265
+ });
266
+ it('Should interpret native response', function () {
267
+ const native = {
268
+ body: [{
269
+ mediaType: 'native',
270
+ native: {
271
+ clickUrl: 'test.com',
272
+ title: 'Test',
273
+ image: 'test.com',
274
+ impressionTrackers: ['test.com'],
275
+ },
276
+ ttl: 120,
277
+ cpm: 0.4,
278
+ requestId: '23fhj33i987f',
279
+ creativeId: '2',
280
+ netRevenue: true,
281
+ currency: 'USD',
282
+ meta: {
283
+ advertiserDomains: ['google.com'],
284
+ advertiserId: 1234
285
+ }
286
+ }]
287
+ };
288
+ let nativeResponses = spec.interpretResponse(native);
289
+ expect(nativeResponses).to.be.an('array').that.is.not.empty;
290
+
291
+ let dataItem = nativeResponses[0];
292
+ expect(dataItem).to.have.keys('requestId', 'cpm', 'ttl', 'creativeId', 'netRevenue', 'currency', 'mediaType', 'native', 'meta');
293
+ expect(dataItem.native).to.have.keys('clickUrl', 'impressionTrackers', 'title', 'image')
294
+ expect(dataItem.requestId).to.equal('23fhj33i987f');
295
+ expect(dataItem.cpm).to.equal(0.4);
296
+ expect(dataItem.native.clickUrl).to.equal('test.com');
297
+ expect(dataItem.native.title).to.equal('Test');
298
+ expect(dataItem.native.image).to.equal('test.com');
299
+ expect(dataItem.native.impressionTrackers).to.be.an('array').that.is.not.empty;
300
+ expect(dataItem.native.impressionTrackers[0]).to.equal('test.com');
301
+ expect(dataItem.ttl).to.equal(120);
302
+ expect(dataItem.creativeId).to.equal('2');
303
+ expect(dataItem.netRevenue).to.be.true;
304
+ expect(dataItem.currency).to.equal('USD');
305
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
306
+ });
307
+ it('Should return an empty array if invalid banner response is passed', function () {
308
+ const invBanner = {
309
+ body: [{
310
+ width: 300,
311
+ cpm: 0.4,
312
+ ad: 'Test',
313
+ requestId: '23fhj33i987f',
314
+ ttl: 120,
315
+ creativeId: '2',
316
+ netRevenue: true,
317
+ currency: 'USD',
318
+ dealId: '1'
319
+ }]
320
+ };
321
+
322
+ let serverResponses = spec.interpretResponse(invBanner);
323
+ expect(serverResponses).to.be.an('array').that.is.empty;
324
+ });
325
+ it('Should return an empty array if invalid video response is passed', function () {
326
+ const invVideo = {
327
+ body: [{
328
+ mediaType: 'video',
329
+ cpm: 0.5,
330
+ requestId: '23fhj33i987f',
331
+ ttl: 120,
332
+ creativeId: '2',
333
+ netRevenue: true,
334
+ currency: 'USD',
335
+ dealId: '1'
336
+ }]
337
+ };
338
+ let serverResponses = spec.interpretResponse(invVideo);
339
+ expect(serverResponses).to.be.an('array').that.is.empty;
340
+ });
341
+ it('Should return an empty array if invalid native response is passed', function () {
342
+ const invNative = {
343
+ body: [{
344
+ mediaType: 'native',
345
+ clickUrl: 'test.com',
346
+ title: 'Test',
347
+ impressionTrackers: ['test.com'],
348
+ ttl: 120,
349
+ requestId: '23fhj33i987f',
350
+ creativeId: '2',
351
+ netRevenue: true,
352
+ currency: 'USD',
353
+ }]
354
+ };
355
+ let serverResponses = spec.interpretResponse(invNative);
356
+ expect(serverResponses).to.be.an('array').that.is.empty;
357
+ });
358
+ it('Should return an empty array if invalid response is passed', function () {
359
+ const invalid = {
360
+ body: [{
361
+ ttl: 120,
362
+ creativeId: '2',
363
+ netRevenue: true,
364
+ currency: 'USD',
365
+ dealId: '1'
366
+ }]
367
+ };
368
+ let serverResponses = spec.interpretResponse(invalid);
369
+ expect(serverResponses).to.be.an('array').that.is.empty;
370
+ });
371
+ });
372
+
373
+ describe('getUserSyncs', function() {
374
+ it('Should return array of objects with proper sync config , include GDPR', function() {
375
+ const syncData = spec.getUserSyncs({}, {}, {
376
+ consentString: 'ALL',
377
+ gdprApplies: true,
378
+ }, {});
379
+ expect(syncData).to.be.an('array').which.is.not.empty;
380
+ expect(syncData[0]).to.be.an('object')
381
+ expect(syncData[0].type).to.be.a('string')
382
+ expect(syncData[0].type).to.equal('image')
383
+ expect(syncData[0].url).to.be.a('string')
384
+ expect(syncData[0].url).to.equal('https://cs.admanmedia.com/image?pbjs=1&gdpr=1&gdpr_consent=ALL&coppa=0')
385
+ });
386
+ it('Should return array of objects with proper sync config , include CCPA', function() {
387
+ const syncData = spec.getUserSyncs({}, {}, {}, {
388
+ consentString: '1---'
389
+ });
390
+ expect(syncData).to.be.an('array').which.is.not.empty;
391
+ expect(syncData[0]).to.be.an('object')
392
+ expect(syncData[0].type).to.be.a('string')
393
+ expect(syncData[0].type).to.equal('image')
394
+ expect(syncData[0].url).to.be.a('string')
395
+ expect(syncData[0].url).to.equal('https://cs.admanmedia.com/image?pbjs=1&ccpa_consent=1---&coppa=0')
396
+ });
397
+ });
398
+ });
@@ -1391,6 +1391,7 @@ describe('Adagio bid adapter', () => {
1391
1391
  refererInfo: {
1392
1392
  numIframes: 0,
1393
1393
  reachedTop: true,
1394
+ topmostLocation: 'https://test.io/article/a.html',
1394
1395
  page: 'https://test.io/article/a.html',
1395
1396
  domain: 'test.io',
1396
1397
  ref: 'https://google.com'
@@ -1417,6 +1418,7 @@ describe('Adagio bid adapter', () => {
1417
1418
  numIframes: 0,
1418
1419
  reachedTop: true,
1419
1420
  page: 'http://level.io/',
1421
+ topmostLocation: 'http://level.io/',
1420
1422
  stack: [
1421
1423
  'http://level.io/',
1422
1424
  'http://example.com/iframe1.html',
@@ -17,6 +17,9 @@ describe('Adkernel adapter', function () {
17
17
  banner: {
18
18
  sizes: [[300, 250], [300, 200]]
19
19
  }
20
+ },
21
+ ortb2Imp: {
22
+ battr: [6, 7, 9]
20
23
  }
21
24
  }, bid2_zone2 = {
22
25
  bidder: 'adkernel',
@@ -95,12 +98,12 @@ describe('Adkernel adapter', function () {
95
98
  params: {
96
99
  zoneId: 1,
97
100
  host: 'rtb.adkernel.com',
98
- video: {api: [1, 2]}
99
101
  },
100
102
  mediaTypes: {
101
103
  video: {
102
104
  context: 'instream',
103
- playerSize: [[640, 480]]
105
+ playerSize: [[640, 480]],
106
+ api: [1, 2]
104
107
  }
105
108
  },
106
109
  adUnitCode: 'ad-unit-1'
@@ -293,6 +296,7 @@ describe('Adkernel adapter', function () {
293
296
 
294
297
  describe('banner request building', function () {
295
298
  let bidRequest, bidRequests, _;
299
+
296
300
  before(function () {
297
301
  [_, bidRequests] = buildRequest([bid1_zone1]);
298
302
  bidRequest = bidRequests[0];
@@ -337,6 +341,11 @@ describe('Adkernel adapter', function () {
337
341
  expect(bidRequest.device).to.have.property('dnt', 1);
338
342
  });
339
343
 
344
+ it('should copy FPD to imp.banner', function() {
345
+ expect(bidRequest.imp[0].banner).to.have.property('battr');
346
+ expect(bidRequest.imp[0].banner.battr).to.be.eql([6, 7, 9]);
347
+ });
348
+
340
349
  it('shouldn\'t contain gdpr nor ccpa information for default request', function () {
341
350
  let [_, bidRequests] = buildRequest([bid1_zone1]);
342
351
  expect(bidRequests[0]).to.not.have.property('regs');
@@ -297,25 +297,18 @@ describe('adriverAdapter', function () {
297
297
  { adrcid: undefined }
298
298
  ]
299
299
  cookieValues.forEach(cookieValue => describe('test cookie exist or not behavior', function () {
300
- let expectedValues = {
301
- adrcid: cookieValue.adrcid,
302
- at: '',
303
- cur: '',
304
- tmax: '',
305
- site: '',
306
- id: '',
307
- user: '',
308
- device: '',
309
- imp: ''
310
- }
300
+ let expectedValues = [
301
+ 'buyerid',
302
+ 'ext'
303
+ ]
311
304
 
312
305
  it('check adrcid if it exists', function () {
313
306
  bidRequests[0].userId.adrcid = cookieValue.adrcid;
314
307
  const payload = JSON.parse(spec.buildRequests(bidRequests).data);
315
308
  if (cookieValue.adrcid) {
316
- expect(Object.keys(payload)).to.have.members(Object.keys(expectedValues));
309
+ expect(Object.keys(payload.user)).to.have.members(expectedValues);
317
310
  } else {
318
- expect(payload.adrcid).to.equal(undefined);
311
+ expect(payload.user.buyerid).to.equal(0);
319
312
  }
320
313
  });
321
314
  }));
@@ -32,7 +32,6 @@ describe('AdriverIdSystem', function () {
32
32
  expect(request.url).to.include('https://ad.adriver.ru/cgi-bin/json.cgi');
33
33
  request.respond(503, null, 'Unavailable');
34
34
  expect(logErrorStub.calledOnce).to.be.true;
35
- expect(callbackSpy.calledOnce).to.be.true;
36
35
  });
37
36
 
38
37
  it('test call user sync url with the right params', function() {
@@ -67,16 +66,12 @@ describe('AdriverIdSystem', function () {
67
66
  let request = server.requests[0];
68
67
  request.respond(200, { 'Content-Type': 'application/json' }, JSON.stringify({ adrcid: response.adrcid }));
69
68
 
70
- let expectedExpiration = new Date();
71
- expectedExpiration.setTime(expectedExpiration.getTime() + 86400 * 1825 * 1000);
69
+ let now = new Date();
70
+ now.setTime(now.getTime() + 86400 * 1825 * 1000);
72
71
  const minimalDate = new Date(0).toString();
73
72
 
74
- function dateStringFor(date, maxDeltaMs = 2000) {
75
- return sinon.match((val) => Math.abs(date.getTime() - new Date(val).getTime()) <= maxDeltaMs)
76
- }
77
-
78
73
  if (response.adrcid) {
79
- expect(setCookieStub.calledWith('adrcid', response.adrcid, dateStringFor(expectedExpiration))).to.be.true;
74
+ expect(setCookieStub.calledWith('adrcid', response.adrcid, now.toUTCString())).to.be.true;
80
75
  expect(setLocalStorageStub.calledWith('adrcid', response.adrcid)).to.be.true;
81
76
  } else {
82
77
  expect(setCookieStub.calledWith('adrcid', '', minimalDate)).to.be.false;
@@ -19,6 +19,8 @@ const aliasEP = {
19
19
  streamkey: 'https://ghb.hb.streamkey.net/v2/auction/',
20
20
  janet: 'https://ghb.bidder.jmgads.com/v2/auction/',
21
21
  pgam: 'https://ghb.pgamssp.com/v2/auction/',
22
+ ocm: 'https://ghb.cenarius.orangeclickmedia.com/v2/auction/',
23
+ vidcrunchllc: 'https://ghb.platform.vidcrunch.com/v2/auction/',
22
24
  };
23
25
 
24
26
  const DEFAULT_ADATPER_REQ = { bidderCode: 'adtelligent' };