prebid.js 8.4.0 → 8.6.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 (332) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/a1MediaRtdProvider.js +1 -0
  4. package/dist/adagioBidAdapter.js +1 -1
  5. package/dist/adbookpspBidAdapter.js +1 -1
  6. package/dist/adfBidAdapter.js +1 -1
  7. package/dist/adgenerationBidAdapter.js +1 -1
  8. package/dist/adkernelAdnBidAdapter.js +1 -1
  9. package/dist/adkernelBidAdapter.js +1 -1
  10. package/dist/admixerIdSystem.js +1 -1
  11. package/dist/adnuntiusBidAdapter.js +1 -1
  12. package/dist/adqueryBidAdapter.js +1 -1
  13. package/dist/adqueryIdSystem.js +1 -1
  14. package/dist/adrelevantisBidAdapter.js +1 -1
  15. package/dist/adsinteractiveBidAdapter.js +1 -1
  16. package/dist/adtelligentIdSystem.js +1 -1
  17. package/dist/adtrgtmeBidAdapter.js +1 -1
  18. package/dist/adxcgBidAdapter.js +1 -1
  19. package/dist/adyoulikeBidAdapter.js +1 -1
  20. package/dist/ajaBidAdapter.js +1 -1
  21. package/dist/amxBidAdapter.js +1 -1
  22. package/dist/amxIdSystem.js +1 -1
  23. package/dist/appierAnalyticsAdapter.js +1 -1
  24. package/dist/appnexusBidAdapter.js +1 -1
  25. package/dist/asoBidAdapter.js +1 -1
  26. package/dist/axonixBidAdapter.js +1 -1
  27. package/dist/beachfrontBidAdapter.js +1 -1
  28. package/dist/bidglassBidAdapter.js +1 -1
  29. package/dist/big-richmediaBidAdapter.js +1 -1
  30. package/dist/bridBidAdapter.js +1 -1
  31. package/dist/bridgewellBidAdapter.js +1 -1
  32. package/dist/brightMountainMediaBidAdapter.js +1 -1
  33. package/dist/britepoolIdSystem.js +1 -1
  34. package/dist/carodaBidAdapter.js +1 -1
  35. package/dist/chtnwBidAdapter.js +1 -1
  36. package/dist/concertBidAdapter.js +1 -1
  37. package/dist/connectIdSystem.js +1 -1
  38. package/dist/connectadBidAdapter.js +1 -1
  39. package/dist/consentManagementGpp.js +1 -1
  40. package/dist/consumableBidAdapter.js +1 -1
  41. package/dist/conversantAnalyticsAdapter.js +1 -1
  42. package/dist/conversantBidAdapter.js +1 -1
  43. package/dist/craftBidAdapter.js +1 -1
  44. package/dist/criteoBidAdapter.js +1 -1
  45. package/dist/criteoIdSystem.js +1 -1
  46. package/dist/cwireBidAdapter.js +1 -1
  47. package/dist/czechAdIdSystem.js +1 -1
  48. package/dist/dacIdSystem.js +1 -1
  49. package/dist/deepintentDpesIdSystem.js +1 -1
  50. package/dist/dependencies.json +6 -0
  51. package/dist/dmdIdSystem.js +1 -1
  52. package/dist/dspxBidAdapter.js +1 -1
  53. package/dist/eplanningBidAdapter.js +1 -1
  54. package/dist/euidIdSystem.js +1 -1
  55. package/dist/fabrickIdSystem.js +1 -1
  56. package/dist/feedadBidAdapter.js +1 -1
  57. package/dist/finativeBidAdapter.js +1 -1
  58. package/dist/freewheel-sspBidAdapter.js +1 -1
  59. package/dist/ftrackIdSystem.js +1 -1
  60. package/dist/geolocationRtdProvider.js +1 -0
  61. package/dist/gmosspBidAdapter.js +1 -1
  62. package/dist/goldbachBidAdapter.js +1 -1
  63. package/dist/gravitoIdSystem.js +1 -1
  64. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  65. package/dist/greenbidsRtdProvider.js +1 -1
  66. package/dist/gridBidAdapter.js +1 -1
  67. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  68. package/dist/growthCodeIdSystem.js +1 -1
  69. package/dist/gumgumBidAdapter.js +1 -1
  70. package/dist/h12mediaBidAdapter.js +1 -1
  71. package/dist/hadronIdSystem.js +1 -1
  72. package/dist/hypelabBidAdapter.js +1 -1
  73. package/dist/id5IdSystem.js +1 -1
  74. package/dist/identityLinkIdSystem.js +1 -1
  75. package/dist/idxIdSystem.js +1 -1
  76. package/dist/imdsBidAdapter.js +1 -1
  77. package/dist/improvedigitalBidAdapter.js +1 -1
  78. package/dist/imuIdSystem.js +1 -1
  79. package/dist/insticatorBidAdapter.js +1 -1
  80. package/dist/intentIqIdSystem.js +1 -1
  81. package/dist/invibesBidAdapter.js +1 -1
  82. package/dist/ixBidAdapter.js +1 -1
  83. package/dist/justIdSystem.js +1 -1
  84. package/dist/justpremiumBidAdapter.js +1 -1
  85. package/dist/kargoBidAdapter.js +1 -1
  86. package/dist/kinessoIdSystem.js +1 -1
  87. package/dist/konduitAnalyticsAdapter.js +1 -1
  88. package/dist/kueezBidAdapter.js +1 -1
  89. package/dist/kueezRtbBidAdapter.js +1 -1
  90. package/dist/kulturemediaBidAdapter.js +1 -1
  91. package/dist/lassoBidAdapter.js +1 -1
  92. package/dist/lifestreetBidAdapter.js +1 -1
  93. package/dist/liveIntentIdSystem.js +1 -1
  94. package/dist/logicadBidAdapter.js +1 -1
  95. package/dist/loglyliftBidAdapter.js +1 -1
  96. package/dist/lotamePanoramaIdSystem.js +1 -1
  97. package/dist/magniteAnalyticsAdapter.js +1 -1
  98. package/dist/malltvAnalyticsAdapter.js +1 -1
  99. package/dist/marsmediaBidAdapter.js +1 -1
  100. package/dist/mediafuseBidAdapter.js +1 -1
  101. package/dist/mediasquareBidAdapter.js +1 -1
  102. package/dist/merkleIdSystem.js +1 -1
  103. package/dist/mgidBidAdapter.js +1 -1
  104. package/dist/minutemediaBidAdapter.js +1 -1
  105. package/dist/minutemediaplusBidAdapter.js +1 -1
  106. package/dist/mspa.js +1 -1
  107. package/dist/mwOpenLinkIdSystem.js +1 -1
  108. package/dist/naveggIdSystem.js +1 -1
  109. package/dist/netIdSystem.js +1 -1
  110. package/dist/newspassidBidAdapter.js +1 -1
  111. package/dist/nexx360BidAdapter.js +1 -1
  112. package/dist/not-for-prod/prebid.js +186 -181
  113. package/dist/novatiqIdSystem.js +1 -1
  114. package/dist/oguryBidAdapter.js +1 -1
  115. package/dist/oneKeyIdSystem.js +1 -1
  116. package/dist/onetagBidAdapter.js +1 -1
  117. package/dist/ooloAnalyticsAdapter.js +1 -1
  118. package/dist/optidigitalBidAdapter.js +1 -1
  119. package/dist/outbrainBidAdapter.js +1 -1
  120. package/dist/ozoneBidAdapter.js +1 -1
  121. package/dist/pairIdSystem.js +1 -1
  122. package/dist/parrableIdSystem.js +1 -1
  123. package/dist/pixfutureBidAdapter.js +1 -1
  124. package/dist/prebid-core.js +1 -1
  125. package/dist/pubCircleBidAdapter.js +1 -0
  126. package/dist/publinkIdSystem.js +1 -1
  127. package/dist/pubmaticBidAdapter.js +1 -1
  128. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  129. package/dist/pxyzBidAdapter.js +1 -1
  130. package/dist/quantcastBidAdapter.js +1 -1
  131. package/dist/quantcastIdSystem.js +1 -1
  132. package/dist/readpeakBidAdapter.js +1 -1
  133. package/dist/relaidoBidAdapter.js +1 -1
  134. package/dist/relevadRtdProvider.js +1 -1
  135. package/dist/retailspotBidAdapter.js +1 -1
  136. package/dist/rhythmoneBidAdapter.js +1 -1
  137. package/dist/riseBidAdapter.js +1 -1
  138. package/dist/rubiconBidAdapter.js +1 -1
  139. package/dist/seedingAllianceBidAdapter.js +1 -1
  140. package/dist/seedtagBidAdapter.js +1 -1
  141. package/dist/sharedIdSystem.js +1 -1
  142. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  143. package/dist/sharethroughBidAdapter.js +1 -1
  144. package/dist/shinezBidAdapter.js +1 -1
  145. package/dist/silverpushBidAdapter.js +1 -1
  146. package/dist/smaatoBidAdapter.js +1 -1
  147. package/dist/smartadserverBidAdapter.js +1 -1
  148. package/dist/smartxBidAdapter.js +1 -1
  149. package/dist/smilewantedBidAdapter.js +1 -1
  150. package/dist/sonobiBidAdapter.js +1 -1
  151. package/dist/sovrnAnalyticsAdapter.js +1 -1
  152. package/dist/sovrnBidAdapter.js +1 -1
  153. package/dist/ssmasBidAdapter.js +1 -0
  154. package/dist/sspBCBidAdapter.js +1 -1
  155. package/dist/stvBidAdapter.js +1 -1
  156. package/dist/sublimeBidAdapter.js +1 -1
  157. package/dist/tapadIdSystem.js +1 -1
  158. package/dist/tappxBidAdapter.js +1 -1
  159. package/dist/targetVideoBidAdapter.js +1 -1
  160. package/dist/teadsBidAdapter.js +1 -1
  161. package/dist/tncIdSystem.js +1 -1
  162. package/dist/topicsFpdModule.js +1 -1
  163. package/dist/trionBidAdapter.js +1 -1
  164. package/dist/tripleliftBidAdapter.js +1 -1
  165. package/dist/ttdBidAdapter.js +1 -1
  166. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  167. package/dist/uid2IdSystem.js +1 -1
  168. package/dist/underdogmediaBidAdapter.js +1 -1
  169. package/dist/undertoneBidAdapter.js +1 -1
  170. package/dist/unifiedIdSystem.js +1 -1
  171. package/dist/userId.js +1 -1
  172. package/dist/utiqSystem.js +1 -1
  173. package/dist/verizonMediaIdSystem.js +1 -1
  174. package/dist/viantOrtbBidAdapter.js +1 -0
  175. package/dist/vidazooBidAdapter.js +1 -1
  176. package/dist/videobyteBidAdapter.js +1 -1
  177. package/dist/videojsVideoProvider.js +1 -1
  178. package/dist/visxBidAdapter.js +1 -1
  179. package/dist/vrtcalBidAdapter.js +1 -1
  180. package/dist/vuukleBidAdapter.js +1 -1
  181. package/dist/widespaceBidAdapter.js +1 -1
  182. package/dist/winrBidAdapter.js +1 -1
  183. package/dist/yahoosspBidAdapter.js +1 -1
  184. package/dist/yieldmoBidAdapter.js +1 -1
  185. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  186. package/dist/zeotapIdPlusIdSystem.js +1 -1
  187. package/integrationExamples/gpt/adUnitFloors.html +0 -1
  188. package/integrationExamples/videoModule/jwplayer/bidMarkedAsUsed.html +1 -1
  189. package/integrationExamples/videoModule/jwplayer/bidRequestScheduling.html +1 -1
  190. package/integrationExamples/videoModule/jwplayer/bidsBackHandlerOverride.html +137 -0
  191. package/integrationExamples/videoModule/jwplayer/eventListeners.html +1 -1
  192. package/integrationExamples/videoModule/jwplayer/eventsUI.html +1 -1
  193. package/integrationExamples/videoModule/jwplayer/gamAdServerMediation.html +1 -1
  194. package/integrationExamples/videoModule/jwplayer/mediaMetadata.html +1 -1
  195. package/integrationExamples/videoModule/jwplayer/playlist.html +1 -1
  196. package/integrationExamples/videoModule/videojs/bidsBackHandlerOverride.html +164 -0
  197. package/libraries/mspa/activityControls.js +51 -32
  198. package/modules/.submodules.json +1 -0
  199. package/modules/33acrossIdSystem.js +9 -0
  200. package/modules/a1MediaRtdProvider.js +92 -0
  201. package/modules/a1MediaRtdProvider.md +46 -0
  202. package/modules/adfBidAdapter.js +4 -1
  203. package/modules/adgenerationBidAdapter.js +3 -3
  204. package/modules/adkernelAdnBidAdapter.js +1 -1
  205. package/modules/adkernelBidAdapter.js +10 -3
  206. package/modules/admixerIdSystem.js +6 -0
  207. package/modules/adnuntiusBidAdapter.js +5 -13
  208. package/modules/adqueryIdSystem.js +6 -0
  209. package/modules/adsinteractiveBidAdapter.js +2 -2
  210. package/modules/adtelligentIdSystem.js +6 -0
  211. package/modules/adyoulikeBidAdapter.js +6 -3
  212. package/modules/amxIdSystem.js +6 -0
  213. package/modules/appnexusBidAdapter.js +1 -1
  214. package/modules/beachfrontBidAdapter.js +32 -6
  215. package/modules/britepoolIdSystem.js +6 -0
  216. package/modules/connectIdSystem.js +6 -0
  217. package/modules/consentManagementGpp.js +10 -1
  218. package/modules/consumableBidAdapter.js +9 -1
  219. package/modules/criteoBidAdapter.js +18 -0
  220. package/modules/criteoIdSystem.js +6 -0
  221. package/modules/cwireBidAdapter.js +19 -0
  222. package/modules/czechAdIdSystem.js +6 -0
  223. package/modules/dacIdSystem.js +6 -0
  224. package/modules/deepintentDpesIdSystem.js +7 -2
  225. package/modules/dmdIdSystem.js +6 -0
  226. package/modules/euidIdSystem.js +9 -0
  227. package/modules/fabrickIdSystem.js +6 -0
  228. package/modules/ftrackIdSystem.js +16 -0
  229. package/modules/geolocationRtdProvider.js +65 -0
  230. package/modules/gravitoIdSystem.js +6 -0
  231. package/modules/greenbidsRtdProvider.js +1 -1
  232. package/modules/growthCodeAnalyticsAdapter.js +7 -2
  233. package/modules/growthCodeIdSystem.js +20 -1
  234. package/modules/hadronIdSystem.js +6 -0
  235. package/modules/id5IdSystem.js +34 -8
  236. package/modules/identityLinkIdSystem.js +6 -0
  237. package/modules/idxIdSystem.js +6 -0
  238. package/modules/imdsBidAdapter.js +38 -14
  239. package/modules/imuIdSystem.js +10 -0
  240. package/modules/intentIqIdSystem.js +6 -0
  241. package/modules/invibesBidAdapter.js +5 -5
  242. package/modules/ixBidAdapter.js +16 -0
  243. package/modules/justIdSystem.js +6 -0
  244. package/modules/kinessoIdSystem.js +7 -2
  245. package/modules/liveIntentIdSystem.js +53 -0
  246. package/modules/lotamePanoramaIdSystem.js +6 -0
  247. package/modules/merkleIdSystem.js +24 -0
  248. package/modules/mwOpenLinkIdSystem.js +6 -0
  249. package/modules/naveggIdSystem.js +6 -0
  250. package/modules/netIdSystem.js +6 -0
  251. package/modules/newspassid.md +76 -0
  252. package/modules/newspassidBidAdapter.js +44 -18
  253. package/modules/novatiqIdSystem.js +12 -0
  254. package/modules/oneKeyIdSystem.js +26 -0
  255. package/modules/ozoneBidAdapter.js +65 -18
  256. package/modules/ozoneBidAdapter.md +3 -1
  257. package/modules/pairIdSystem.js +6 -0
  258. package/modules/parrableIdSystem.js +38 -2
  259. package/modules/pubCircleBidAdapter.js +231 -0
  260. package/modules/pubCircleBidAdapter.md +79 -0
  261. package/modules/publinkIdSystem.js +7 -1
  262. package/modules/quantcastIdSystem.js +6 -0
  263. package/modules/relevadRtdProvider.js +6 -7
  264. package/modules/rubiconBidAdapter.js +9 -0
  265. package/modules/sharedIdSystem.js +6 -0
  266. package/modules/silverpushBidAdapter.js +2 -2
  267. package/modules/ssmasBidAdapter.js +126 -0
  268. package/modules/ssmasBidAdapter.md +35 -0
  269. package/modules/sspBCBidAdapter.js +36 -13
  270. package/modules/tapadIdSystem.js +6 -0
  271. package/modules/tappxBidAdapter.js +10 -1
  272. package/modules/tappxBidAdapter.md +17 -0
  273. package/modules/tncIdSystem.js +6 -0
  274. package/modules/topicsFpdModule.js +21 -48
  275. package/modules/tripleliftBidAdapter.js +5 -0
  276. package/modules/uid2IdSystem.js +14 -0
  277. package/modules/unifiedIdSystem.js +11 -0
  278. package/modules/userId/eids.js +6 -445
  279. package/modules/userId/index.js +36 -24
  280. package/modules/utiqSystem.js +9 -0
  281. package/modules/verizonMediaIdSystem.js +6 -0
  282. package/modules/viantOrtbBidAdapter.js +113 -0
  283. package/modules/viantOrtbBidAdapter.md +54 -0
  284. package/modules/vidazooBidAdapter.js +9 -2
  285. package/modules/videojsVideoProvider.js +9 -2
  286. package/modules/vrtcalBidAdapter.js +10 -6
  287. package/modules/zeotapIdPlusIdSystem.js +6 -0
  288. package/package.json +1 -1
  289. package/src/adapters/bidderFactory.js +15 -6
  290. package/src/adloader.js +2 -1
  291. package/test/spec/libraries/mspa/activityControls_spec.js +145 -212
  292. package/test/spec/modules/a1MediaRtdProvider_spec.js +105 -0
  293. package/test/spec/modules/adfBidAdapter_spec.js +47 -0
  294. package/test/spec/modules/adgenerationBidAdapter_spec.js +6 -6
  295. package/test/spec/modules/adkernelAdnBidAdapter_spec.js +1 -2
  296. package/test/spec/modules/adkernelBidAdapter_spec.js +7 -2
  297. package/test/spec/modules/adnuntiusBidAdapter_spec.js +116 -64
  298. package/test/spec/modules/adyoulikeBidAdapter_spec.js +13 -24
  299. package/test/spec/modules/appnexusBidAdapter_spec.js +12 -1
  300. package/test/spec/modules/beachfrontBidAdapter_spec.js +35 -2
  301. package/test/spec/modules/consentManagementGpp_spec.js +16 -0
  302. package/test/spec/modules/consumableBidAdapter_spec.js +15 -0
  303. package/test/spec/modules/criteoBidAdapter_spec.js +31 -3
  304. package/test/spec/modules/cwireBidAdapter_spec.js +47 -0
  305. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +5 -5
  306. package/test/spec/modules/geolocationRtdProvider_spec.js +119 -0
  307. package/test/spec/modules/greenbidsRtdProvider_spec.js +1 -1
  308. package/test/spec/modules/id5IdSystem_spec.js +18 -0
  309. package/test/spec/modules/imdsBidAdapter_spec.js +98 -17
  310. package/test/spec/modules/invibesBidAdapter_spec.js +123 -32
  311. package/test/spec/modules/ixBidAdapter_spec.js +23 -5
  312. package/test/spec/modules/medianetBidAdapter_spec.js +117 -0
  313. package/test/spec/modules/newspassidBidAdapter_spec.js +6 -0
  314. package/test/spec/modules/outbrainBidAdapter_spec.js +3 -5
  315. package/test/spec/modules/ozoneBidAdapter_spec.js +27 -1
  316. package/test/spec/modules/prebidServerBidAdapter_spec.js +2 -20
  317. package/test/spec/modules/priceFloors_spec.js +14 -0
  318. package/test/spec/modules/pubCircleBidAdapter_spec.js +399 -0
  319. package/test/spec/modules/pubmaticBidAdapter_spec.js +6 -373
  320. package/test/spec/modules/rubiconBidAdapter_spec.js +220 -9
  321. package/test/spec/modules/smaatoBidAdapter_spec.js +4 -6
  322. package/test/spec/modules/ssmasBidAdapter_spec.js +244 -0
  323. package/test/spec/modules/sspBCBidAdapter_spec.js +18 -19
  324. package/test/spec/modules/topicsFpdModule_spec.js +343 -365
  325. package/test/spec/modules/tripleliftBidAdapter_spec.js +40 -0
  326. package/test/spec/modules/userId_spec.js +116 -7
  327. package/test/spec/modules/viantOrtbBidAdapter_spec.js +432 -0
  328. package/test/spec/modules/vrtcalBidAdapter_spec.js +12 -4
  329. package/test/spec/modules/xeBidAdapter_spec.js +366 -368
  330. package/test/spec/modules/yahoosspBidAdapter_spec.js +5 -18
  331. package/test/spec/unit/core/bidderFactory_spec.js +61 -14
  332. package/integrationExamples/gpt/pbjs_video_adUnit.html +0 -109
@@ -1667,6 +1667,12 @@ describe('newspassid Adapter', function () {
1667
1667
  expect(result[0]['price']).to.equal(0.9);
1668
1668
  expect(result[0]['adserverTargeting']['np_npappnexus_adId']).to.equal('2899ec066a91ff8-0-np-1');
1669
1669
  });
1670
+ it('should add np_auc_id (response id value)', function () {
1671
+ const request = spec.buildRequests(validBidRequests, validBidderRequest);
1672
+ let validres = JSON.parse(JSON.stringify(validBidResponse1adWith2Bidders));
1673
+ const result = spec.interpretResponse(validres, request);
1674
+ expect(utils.deepAccess(result[0].adserverTargeting, 'np_auc_id')).to.equal(validBidResponse1adWith2Bidders.body.id);
1675
+ });
1670
1676
  it('should correctly process an auction with 2 adunits & multiple bidders one of which bids for both adslots', function() {
1671
1677
  let validres = JSON.parse(JSON.stringify(multiResponse1));
1672
1678
  let request = spec.buildRequests(multiRequest1, multiBidderRequest1.bidderRequest);
@@ -2,8 +2,6 @@ import { expect } from 'chai';
2
2
  import { spec } from 'modules/outbrainBidAdapter.js';
3
3
  import { config } from 'src/config.js';
4
4
  import { server } from 'test/mocks/xhr';
5
- import { createEidsArray } from 'modules/userId/eids.js';
6
- import * as utils from 'src/utils.js';
7
5
 
8
6
  describe('Outbrain Adapter', function () {
9
7
  describe('Bid request and response', function () {
@@ -511,9 +509,9 @@ describe('Outbrain Adapter', function () {
511
509
  let bidRequest = {
512
510
  bidId: 'bidId',
513
511
  params: {},
514
- userIdAsEids: createEidsArray({
515
- idl_env: 'id-value',
516
- }),
512
+ userIdAsEids: [
513
+ { source: 'liveramp.com', uids: [{ id: 'id-value', atype: 3 }] }
514
+ ],
517
515
  ...commonBidRequest,
518
516
  };
519
517
 
@@ -6,7 +6,6 @@ import {getGranularityKeyName, getGranularityObject} from '../../../modules/ozon
6
6
  import * as utils from '../../../src/utils.js';
7
7
  const OZONEURI = 'https://elb.the-ozone-project.com/openrtb2/auction';
8
8
  const BIDDER_CODE = 'ozone';
9
-
10
9
  var validBidRequests = [
11
10
  {
12
11
  adUnitCode: 'div-gpt-ad-1460505748561-0',
@@ -2049,6 +2048,27 @@ describe('ozone Adapter', function () {
2049
2048
  expect(data.imp[0].ext.ozone.customData).to.be.an('array');
2050
2049
  expect(data.imp[0].ext.ozone.customData[0].targeting.oztestmode).to.equal('mytestvalue_123');
2051
2050
  });
2051
+ it('should pass gpid to auction if it is present (gptPreAuction adapter sets this)', function () {
2052
+ var specMock = utils.deepClone(spec);
2053
+ let br = JSON.parse(JSON.stringify(validBidRequests));
2054
+ utils.deepSetValue(br[0], 'ortb2Imp.ext.gpid', '/22037345/projectozone');
2055
+ const request = specMock.buildRequests(br, validBidderRequest);
2056
+ const data = JSON.parse(request.data);
2057
+ expect(data.imp[0].ext.gpid).to.equal('/22037345/projectozone');
2058
+ });
2059
+ it('should batch into 10s if config is set', function () {
2060
+ config.setConfig({ozone: {'batchRequests': true}});
2061
+ var specMock = utils.deepClone(spec);
2062
+ let arrReq = [];
2063
+ for (let i = 0; i < 25; i++) {
2064
+ let b = validBidRequests[0];
2065
+ b.adUnitCode += i;
2066
+ arrReq.push(b);
2067
+ }
2068
+ const request = specMock.buildRequests(arrReq, validBidderRequest);
2069
+ expect(request.length).to.equal(3);
2070
+ config.resetConfig();
2071
+ });
2052
2072
  it('should use GET values auction=dev & cookiesync=dev if set', function() {
2053
2073
  var specMock = utils.deepClone(spec);
2054
2074
  specMock.getGetParametersAsObject = function() {
@@ -2429,6 +2449,12 @@ describe('ozone Adapter', function () {
2429
2449
  const result = spec.interpretResponse(validres, request);
2430
2450
  expect(utils.deepAccess(result[0].adserverTargeting, 'oz_ozappnexus_sid')).to.equal(result[0].cid);
2431
2451
  });
2452
+ it('should add oz_auc_id (response id value)', function () {
2453
+ const request = spec.buildRequests(validBidRequestsMulti, validBidderRequest);
2454
+ let validres = JSON.parse(JSON.stringify(validBidResponse1adWith2Bidders));
2455
+ const result = spec.interpretResponse(validres, request);
2456
+ expect(utils.deepAccess(result[0].adserverTargeting, 'oz_auc_id')).to.equal(validBidResponse1adWith2Bidders.body.id);
2457
+ });
2432
2458
  it('should add unique adId values to each bid', function() {
2433
2459
  const request = spec.buildRequests(validBidRequests, validBidderRequest);
2434
2460
  let validres = JSON.parse(JSON.stringify(validResponse2BidsSameAdunit));
@@ -2082,30 +2082,12 @@ describe('S2S Adapter', function () {
2082
2082
  }
2083
2083
  }
2084
2084
  };
2085
- userIdBidRequest[0].bids[0].userIdAsEids = createEidsArray(userIdBidRequest[0].bids[0].userId);
2085
+ userIdBidRequest[0].bids[0].userIdAsEids = [{id: 1}, {id: 2}];
2086
2086
 
2087
2087
  adapter.callBids(REQUEST, userIdBidRequest, addBidResponse, done, ajax);
2088
2088
  let requestBid = JSON.parse(server.requests[0].requestBody);
2089
2089
  expect(typeof requestBid.user.ext.eids).is.equal('object');
2090
- expect(Array.isArray(requestBid.user.ext.eids)).to.be.true;
2091
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'adserver.org')).is.not.empty;
2092
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'adserver.org')[0].uids[0].id).is.equal('abc123');
2093
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'criteo.com')).is.not.empty;
2094
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'criteo.com')[0].uids[0].id).is.equal('44VmRDeUE3ZGJ5MzRkRVJHU3BIUlJ6TlFPQUFU');
2095
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'pubcid.org')).is.not.empty;
2096
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'pubcid.org')[0].uids[0].id).is.equal('1234');
2097
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'parrable.com')).is.not.empty;
2098
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'parrable.com')[0].uids[0].id).is.equal('01.1563917337.test-eid');
2099
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'liveintent.com')).is.not.empty;
2100
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'liveintent.com')[0].uids[0].id).is.equal('li-xyz');
2101
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'liveintent.com')[0].ext.segments.length).is.equal(2);
2102
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'liveintent.com')[0].ext.segments[0]).is.equal('segA');
2103
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'liveintent.com')[0].ext.segments[1]).is.equal('segB');
2104
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'id5-sync.com')).is.not.empty;
2105
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'id5-sync.com')[0].uids[0].id).is.equal('11111');
2106
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'id5-sync.com')[0].uids[0].ext.linkType).is.equal('some-link-type');
2107
- // LiveRamp should exist
2108
- expect(requestBid.user.ext.eids.filter(eid => eid.source === 'liveramp.com')[0].uids[0].id).is.equal('0000-1111-2222-3333');
2090
+ expect(requestBid.user.ext.eids).to.eql([{id: 1}, {id: 2}]);
2109
2091
  });
2110
2092
 
2111
2093
  it('when config \'currency.adServerCurrency\' value is a string: ORTB has property \'cur\' value set to a single item array', function () {
@@ -20,6 +20,8 @@ import 'src/prebid.js';
20
20
  import {createBid} from '../../../src/bidfactory.js';
21
21
  import {auctionManager} from '../../../src/auctionManager.js';
22
22
  import {stubAuctionIndex} from '../../helpers/indexStub.js';
23
+ import {guardTids} from '../../../src/adapters/bidderFactory.js';
24
+ import * as activities from '../../../src/activities/rules.js';
23
25
 
24
26
  describe('the price floors module', function () {
25
27
  let logErrorSpy;
@@ -1369,6 +1371,18 @@ describe('the price floors module', function () {
1369
1371
  floor: 2.5
1370
1372
  });
1371
1373
  });
1374
+
1375
+ it('works when TIDs are disabled', () => {
1376
+ sandbox.stub(activities, 'isActivityAllowed').returns(false);
1377
+ const req = utils.deepClone(bidRequest);
1378
+ _floorDataForAuction[req.auctionId] = utils.deepClone(basicFloorConfig);
1379
+
1380
+ expect(guardTids('mock-bidder').bidRequest(req).getFloor({})).to.deep.equal({
1381
+ currency: 'USD',
1382
+ floor: 1.0
1383
+ });
1384
+ });
1385
+
1372
1386
  it('picks the right rule with more complex rules', function () {
1373
1387
  _floorDataForAuction[bidRequest.auctionId] = {
1374
1388
  ...basicFloorConfig,
@@ -0,0 +1,399 @@
1
+ import { expect } from 'chai';
2
+ import { spec } from '../../../modules/pubCircleBidAdapter';
3
+ import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
4
+ import { getUniqueIdentifierStr } from '../../../src/utils.js';
5
+
6
+ const bidder = 'pubcircle'
7
+
8
+ describe('PubCircleBidAdapter', 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
+ timeout: 500
81
+ };
82
+
83
+ describe('isBidRequestValid', function () {
84
+ it('Should return true if there are bidId, params and key parameters present', function () {
85
+ expect(spec.isBidRequestValid(bids[0])).to.be.true;
86
+ });
87
+ it('Should return false if at least one of parameters is not present', function () {
88
+ expect(spec.isBidRequestValid(invalidBid)).to.be.false;
89
+ });
90
+ });
91
+
92
+ describe('buildRequests', function () {
93
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
94
+
95
+ it('Creates a ServerRequest object with method, URL and data', function () {
96
+ expect(serverRequest).to.exist;
97
+ expect(serverRequest.method).to.exist;
98
+ expect(serverRequest.url).to.exist;
99
+ expect(serverRequest.data).to.exist;
100
+ });
101
+
102
+ it('Returns POST method', function () {
103
+ expect(serverRequest.method).to.equal('POST');
104
+ });
105
+
106
+ it('Returns valid URL', function () {
107
+ expect(serverRequest.url).to.equal('https://ml.pubcircle.ai/pbjs');
108
+ });
109
+
110
+ it('Returns general data valid', function () {
111
+ let data = serverRequest.data;
112
+ expect(data).to.be.an('object');
113
+ expect(data).to.have.all.keys('deviceWidth',
114
+ 'deviceHeight',
115
+ 'language',
116
+ 'secure',
117
+ 'host',
118
+ 'page',
119
+ 'placements',
120
+ 'coppa',
121
+ 'ccpa',
122
+ 'gdpr',
123
+ 'tmax'
124
+ );
125
+ expect(data.deviceWidth).to.be.a('number');
126
+ expect(data.deviceHeight).to.be.a('number');
127
+ expect(data.language).to.be.a('string');
128
+ expect(data.secure).to.be.within(0, 1);
129
+ expect(data.host).to.be.a('string');
130
+ expect(data.page).to.be.a('string');
131
+ expect(data.coppa).to.be.a('number');
132
+ expect(data.gdpr).to.be.a('string');
133
+ expect(data.ccpa).to.be.a('string');
134
+ expect(data.tmax).to.be.a('number');
135
+ expect(data.placements).to.have.lengthOf(3);
136
+ });
137
+
138
+ it('Returns valid placements', function () {
139
+ const { placements } = serverRequest.data;
140
+ for (let i = 0, len = placements.length; i < len; i++) {
141
+ const placement = placements[i];
142
+ expect(placement.placementId).to.be.oneOf(['testBanner', 'testVideo', 'testNative']);
143
+ expect(placement.adFormat).to.be.oneOf([BANNER, VIDEO, NATIVE]);
144
+ expect(placement.bidId).to.be.a('string');
145
+ expect(placement.schain).to.be.an('object');
146
+ expect(placement.bidfloor).to.exist.and.to.equal(0);
147
+ expect(placement.type).to.exist.and.to.equal('publisher');
148
+
149
+ if (placement.adFormat === BANNER) {
150
+ expect(placement.sizes).to.be.an('array');
151
+ }
152
+ switch (placement.adFormat) {
153
+ case BANNER:
154
+ expect(placement.sizes).to.be.an('array');
155
+ break;
156
+ case VIDEO:
157
+ expect(placement.playerSize).to.be.an('array');
158
+ expect(placement.minduration).to.be.an('number');
159
+ expect(placement.maxduration).to.be.an('number');
160
+ break;
161
+ case NATIVE:
162
+ expect(placement.native).to.be.an('object');
163
+ break;
164
+ }
165
+ }
166
+ });
167
+
168
+ it('Returns data with gdprConsent and without uspConsent', function () {
169
+ delete bidderRequest.uspConsent;
170
+ serverRequest = spec.buildRequests(bids, bidderRequest);
171
+ let data = serverRequest.data;
172
+ expect(data.gdpr).to.exist;
173
+ expect(data.gdpr).to.be.a('string');
174
+ expect(data.gdpr).to.equal(bidderRequest.gdprConsent);
175
+ expect(data.ccpa).to.not.exist;
176
+ delete bidderRequest.gdprConsent;
177
+ });
178
+
179
+ it('Returns data with uspConsent and without gdprConsent', function () {
180
+ bidderRequest.uspConsent = '1---';
181
+ delete bidderRequest.gdprConsent;
182
+ serverRequest = spec.buildRequests(bids, bidderRequest);
183
+ let data = serverRequest.data;
184
+ expect(data.ccpa).to.exist;
185
+ expect(data.ccpa).to.be.a('string');
186
+ expect(data.ccpa).to.equal(bidderRequest.uspConsent);
187
+ expect(data.gdpr).to.not.exist;
188
+ });
189
+
190
+ it('Returns empty data if no valid requests are passed', function () {
191
+ serverRequest = spec.buildRequests([], bidderRequest);
192
+ let data = serverRequest.data;
193
+ expect(data.placements).to.be.an('array').that.is.empty;
194
+ });
195
+ });
196
+
197
+ describe('interpretResponse', function () {
198
+ it('Should interpret banner response', function () {
199
+ const banner = {
200
+ body: [{
201
+ mediaType: 'banner',
202
+ width: 300,
203
+ height: 250,
204
+ cpm: 0.4,
205
+ ad: 'Test',
206
+ requestId: '23fhj33i987f',
207
+ ttl: 120,
208
+ creativeId: '2',
209
+ netRevenue: true,
210
+ currency: 'USD',
211
+ dealId: '1',
212
+ meta: {
213
+ advertiserDomains: ['google.com'],
214
+ advertiserId: 1234
215
+ }
216
+ }]
217
+ };
218
+ let bannerResponses = spec.interpretResponse(banner);
219
+ expect(bannerResponses).to.be.an('array').that.is.not.empty;
220
+ let dataItem = bannerResponses[0];
221
+ expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId',
222
+ 'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
223
+ expect(dataItem.requestId).to.equal(banner.body[0].requestId);
224
+ expect(dataItem.cpm).to.equal(banner.body[0].cpm);
225
+ expect(dataItem.width).to.equal(banner.body[0].width);
226
+ expect(dataItem.height).to.equal(banner.body[0].height);
227
+ expect(dataItem.ad).to.equal(banner.body[0].ad);
228
+ expect(dataItem.ttl).to.equal(banner.body[0].ttl);
229
+ expect(dataItem.creativeId).to.equal(banner.body[0].creativeId);
230
+ expect(dataItem.netRevenue).to.be.true;
231
+ expect(dataItem.currency).to.equal(banner.body[0].currency);
232
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
233
+ });
234
+ it('Should interpret video response', function () {
235
+ const video = {
236
+ body: [{
237
+ vastUrl: 'test.com',
238
+ mediaType: 'video',
239
+ cpm: 0.5,
240
+ requestId: '23fhj33i987f',
241
+ ttl: 120,
242
+ creativeId: '2',
243
+ netRevenue: true,
244
+ currency: 'USD',
245
+ dealId: '1',
246
+ meta: {
247
+ advertiserDomains: ['google.com'],
248
+ advertiserId: 1234
249
+ }
250
+ }]
251
+ };
252
+ let videoResponses = spec.interpretResponse(video);
253
+ expect(videoResponses).to.be.an('array').that.is.not.empty;
254
+
255
+ let dataItem = videoResponses[0];
256
+ expect(dataItem).to.have.all.keys('requestId', 'cpm', 'vastUrl', 'ttl', 'creativeId',
257
+ 'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
258
+ expect(dataItem.requestId).to.equal('23fhj33i987f');
259
+ expect(dataItem.cpm).to.equal(0.5);
260
+ expect(dataItem.vastUrl).to.equal('test.com');
261
+ expect(dataItem.ttl).to.equal(120);
262
+ expect(dataItem.creativeId).to.equal('2');
263
+ expect(dataItem.netRevenue).to.be.true;
264
+ expect(dataItem.currency).to.equal('USD');
265
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
266
+ });
267
+ it('Should interpret native response', function () {
268
+ const native = {
269
+ body: [{
270
+ mediaType: 'native',
271
+ native: {
272
+ clickUrl: 'test.com',
273
+ title: 'Test',
274
+ image: 'test.com',
275
+ impressionTrackers: ['test.com'],
276
+ },
277
+ ttl: 120,
278
+ cpm: 0.4,
279
+ requestId: '23fhj33i987f',
280
+ creativeId: '2',
281
+ netRevenue: true,
282
+ currency: 'USD',
283
+ meta: {
284
+ advertiserDomains: ['google.com'],
285
+ advertiserId: 1234
286
+ }
287
+ }]
288
+ };
289
+ let nativeResponses = spec.interpretResponse(native);
290
+ expect(nativeResponses).to.be.an('array').that.is.not.empty;
291
+
292
+ let dataItem = nativeResponses[0];
293
+ expect(dataItem).to.have.keys('requestId', 'cpm', 'ttl', 'creativeId', 'netRevenue', 'currency', 'mediaType', 'native', 'meta');
294
+ expect(dataItem.native).to.have.keys('clickUrl', 'impressionTrackers', 'title', 'image')
295
+ expect(dataItem.requestId).to.equal('23fhj33i987f');
296
+ expect(dataItem.cpm).to.equal(0.4);
297
+ expect(dataItem.native.clickUrl).to.equal('test.com');
298
+ expect(dataItem.native.title).to.equal('Test');
299
+ expect(dataItem.native.image).to.equal('test.com');
300
+ expect(dataItem.native.impressionTrackers).to.be.an('array').that.is.not.empty;
301
+ expect(dataItem.native.impressionTrackers[0]).to.equal('test.com');
302
+ expect(dataItem.ttl).to.equal(120);
303
+ expect(dataItem.creativeId).to.equal('2');
304
+ expect(dataItem.netRevenue).to.be.true;
305
+ expect(dataItem.currency).to.equal('USD');
306
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
307
+ });
308
+ it('Should return an empty array if invalid banner response is passed', function () {
309
+ const invBanner = {
310
+ body: [{
311
+ width: 300,
312
+ cpm: 0.4,
313
+ ad: 'Test',
314
+ requestId: '23fhj33i987f',
315
+ ttl: 120,
316
+ creativeId: '2',
317
+ netRevenue: true,
318
+ currency: 'USD',
319
+ dealId: '1'
320
+ }]
321
+ };
322
+
323
+ let serverResponses = spec.interpretResponse(invBanner);
324
+ expect(serverResponses).to.be.an('array').that.is.empty;
325
+ });
326
+ it('Should return an empty array if invalid video response is passed', function () {
327
+ const invVideo = {
328
+ body: [{
329
+ mediaType: 'video',
330
+ cpm: 0.5,
331
+ requestId: '23fhj33i987f',
332
+ ttl: 120,
333
+ creativeId: '2',
334
+ netRevenue: true,
335
+ currency: 'USD',
336
+ dealId: '1'
337
+ }]
338
+ };
339
+ let serverResponses = spec.interpretResponse(invVideo);
340
+ expect(serverResponses).to.be.an('array').that.is.empty;
341
+ });
342
+ it('Should return an empty array if invalid native response is passed', function () {
343
+ const invNative = {
344
+ body: [{
345
+ mediaType: 'native',
346
+ clickUrl: 'test.com',
347
+ title: 'Test',
348
+ impressionTrackers: ['test.com'],
349
+ ttl: 120,
350
+ requestId: '23fhj33i987f',
351
+ creativeId: '2',
352
+ netRevenue: true,
353
+ currency: 'USD',
354
+ }]
355
+ };
356
+ let serverResponses = spec.interpretResponse(invNative);
357
+ expect(serverResponses).to.be.an('array').that.is.empty;
358
+ });
359
+ it('Should return an empty array if invalid response is passed', function () {
360
+ const invalid = {
361
+ body: [{
362
+ ttl: 120,
363
+ creativeId: '2',
364
+ netRevenue: true,
365
+ currency: 'USD',
366
+ dealId: '1'
367
+ }]
368
+ };
369
+ let serverResponses = spec.interpretResponse(invalid);
370
+ expect(serverResponses).to.be.an('array').that.is.empty;
371
+ });
372
+ });
373
+
374
+ describe('getUserSyncs', function() {
375
+ it('Should return array of objects with proper sync config , include GDPR', function() {
376
+ const syncData = spec.getUserSyncs({}, {}, {
377
+ consentString: 'ALL',
378
+ gdprApplies: true,
379
+ }, {});
380
+ expect(syncData).to.be.an('array').which.is.not.empty;
381
+ expect(syncData[0]).to.be.an('object')
382
+ expect(syncData[0].type).to.be.a('string')
383
+ expect(syncData[0].type).to.equal('image')
384
+ expect(syncData[0].url).to.be.a('string')
385
+ expect(syncData[0].url).to.equal('https://cs.pubcircle.ai/image?pbjs=1&gdpr=1&gdpr_consent=ALL&coppa=0')
386
+ });
387
+ it('Should return array of objects with proper sync config , include CCPA', function() {
388
+ const syncData = spec.getUserSyncs({}, {}, {}, {
389
+ consentString: '1---'
390
+ });
391
+ expect(syncData).to.be.an('array').which.is.not.empty;
392
+ expect(syncData[0]).to.be.an('object')
393
+ expect(syncData[0].type).to.be.a('string')
394
+ expect(syncData[0].type).to.equal('image')
395
+ expect(syncData[0].url).to.be.a('string')
396
+ expect(syncData[0].url).to.equal('https://cs.pubcircle.ai/image?pbjs=1&ccpa_consent=1---&coppa=0')
397
+ });
398
+ });
399
+ });