prebid.js 7.26.0 → 7.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/adWMGAnalyticsAdapter.js +1 -1
  4. package/dist/adagioAnalyticsAdapter.js +1 -1
  5. package/dist/adagioBidAdapter.js +1 -1
  6. package/dist/adbookpspBidAdapter.js +1 -1
  7. package/dist/adgenerationBidAdapter.js +1 -1
  8. package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
  9. package/dist/adlooxAdServerVideo.js +1 -1
  10. package/dist/adlooxAnalyticsAdapter.js +1 -1
  11. package/dist/adlooxRtdProvider.js +1 -1
  12. package/dist/admaticBidAdapter.js +1 -1
  13. package/dist/admixerBidAdapter.js +1 -1
  14. package/dist/adomikAnalyticsAdapter.js +1 -1
  15. package/dist/adrelevantisBidAdapter.js +1 -1
  16. package/dist/adtrgtmeBidAdapter.js +1 -1
  17. package/dist/adxcgAnalyticsAdapter.js +1 -1
  18. package/dist/adxcgBidAdapter.js +1 -1
  19. package/dist/adxpremiumAnalyticsAdapter.js +1 -1
  20. package/dist/aidemBidAdapter.js +1 -0
  21. package/dist/ajaBidAdapter.js +1 -1
  22. package/dist/amxBidAdapter.js +1 -1
  23. package/dist/amxIdSystem.js +1 -1
  24. package/dist/analyticsAdapter.js +1 -1
  25. package/dist/appierAnalyticsAdapter.js +1 -1
  26. package/dist/appnexusBidAdapter.js +1 -1
  27. package/dist/asoBidAdapter.js +1 -1
  28. package/dist/atsAnalyticsAdapter.js +1 -1
  29. package/dist/axonixBidAdapter.js +1 -1
  30. package/dist/bidViewability.js +1 -1
  31. package/dist/bidglassBidAdapter.js +1 -1
  32. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  33. package/dist/big-richmediaBidAdapter.js +1 -1
  34. package/dist/bridgewellBidAdapter.js +1 -1
  35. package/dist/brightMountainMediaBidAdapter.js +1 -1
  36. package/dist/browsiRtdProvider.js +1 -1
  37. package/dist/bucksenseBidAdapter.js +1 -1
  38. package/dist/byDataAnalyticsAdapter.js +1 -1
  39. package/dist/carodaBidAdapter.js +1 -1
  40. package/dist/chtnwBidAdapter.js +1 -1
  41. package/dist/concertAnalyticsAdapter.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/conversantAnalyticsAdapter.js +1 -1
  48. package/dist/conversantBidAdapter.js +1 -1
  49. package/dist/craftBidAdapter.js +1 -1
  50. package/dist/criteoBidAdapter.js +1 -1
  51. package/dist/datablocksAnalyticsAdapter.js +1 -1
  52. package/dist/dependencies.json +6 -0
  53. package/dist/dfpAdServerVideo.js +1 -1
  54. package/dist/dspxBidAdapter.js +1 -1
  55. package/dist/eplanningAnalyticsAdapter.js +1 -1
  56. package/dist/eplanningBidAdapter.js +1 -1
  57. package/dist/finativeBidAdapter.js +1 -1
  58. package/dist/fintezaAnalyticsAdapter.js +1 -1
  59. package/dist/fluctBidAdapter.js +1 -1
  60. package/dist/ftrackIdSystem.js +1 -1
  61. package/dist/gdprEnforcement.js +1 -1
  62. package/dist/genericAnalyticsAdapter.js +1 -0
  63. package/dist/geoedgeRtdProvider.js +1 -1
  64. package/dist/glimpseBidAdapter.js +1 -1
  65. package/dist/glomexBidAdapter.js +1 -1
  66. package/dist/gmosspBidAdapter.js +1 -1
  67. package/dist/goldbachBidAdapter.js +1 -1
  68. package/dist/googleAnalyticsAdapter.js +1 -1
  69. package/dist/gravitoIdSystem.js +1 -1
  70. package/dist/gridBidAdapter.js +1 -1
  71. package/dist/gridNMBidAdapter.js +1 -1
  72. package/dist/growthCodeAnalyticsAdapter.js +1 -0
  73. package/dist/gumgumBidAdapter.js +1 -1
  74. package/dist/h12mediaBidAdapter.js +1 -1
  75. package/dist/hadronAnalyticsAdapter.js +1 -1
  76. package/dist/id5AnalyticsAdapter.js +1 -1
  77. package/dist/id5IdSystem.js +1 -1
  78. package/dist/impactifyBidAdapter.js +1 -1
  79. package/dist/improvedigitalBidAdapter.js +1 -1
  80. package/dist/inmarBidAdapter.js +1 -1
  81. package/dist/insticatorBidAdapter.js +1 -1
  82. package/dist/invisiblyAnalyticsAdapter.js +1 -1
  83. package/dist/ixBidAdapter.js +1 -1
  84. package/dist/justpremiumBidAdapter.js +1 -1
  85. package/dist/jwplayerRtdProvider.js +1 -1
  86. package/dist/kargoAnalyticsAdapter.js +1 -1
  87. package/dist/kinessoIdSystem.js +1 -1
  88. package/dist/konduitAnalyticsAdapter.js +1 -1
  89. package/dist/kueezBidAdapter.js +1 -1
  90. package/dist/kueezRtbBidAdapter.js +1 -1
  91. package/dist/lassoBidAdapter.js +1 -1
  92. package/dist/lifestreetBidAdapter.js +1 -1
  93. package/dist/limelightDigitalBidAdapter.js +1 -1
  94. package/dist/liveIntentAnalyticsAdapter.js +1 -1
  95. package/dist/liveIntentIdSystem.js +1 -1
  96. package/dist/livewrappedAnalyticsAdapter.js +1 -1
  97. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  98. package/dist/logicadBidAdapter.js +1 -1
  99. package/dist/loglyliftBidAdapter.js +1 -1
  100. package/dist/lotamePanoramaIdSystem.js +1 -1
  101. package/dist/magniteAnalyticsAdapter.js +1 -1
  102. package/dist/malltvAnalyticsAdapter.js +1 -1
  103. package/dist/marsmediaAnalyticsAdapter.js +1 -1
  104. package/dist/marsmediaBidAdapter.js +1 -1
  105. package/dist/mediafuseBidAdapter.js +1 -1
  106. package/dist/medianetAnalyticsAdapter.js +1 -1
  107. package/dist/mediasquareBidAdapter.js +1 -1
  108. package/dist/mgidBidAdapter.js +1 -1
  109. package/dist/minutemediaBidAdapter.js +1 -1
  110. package/dist/nexx360BidAdapter.js +1 -1
  111. package/dist/not-for-prod/prebid.js +200 -196
  112. package/dist/oguryBidAdapter.js +1 -1
  113. package/dist/onetagBidAdapter.js +1 -1
  114. package/dist/ooloAnalyticsAdapter.js +1 -1
  115. package/dist/openxAnalyticsAdapter.js +1 -1
  116. package/dist/optimonAnalyticsAdapter.js +1 -1
  117. package/dist/outbrainBidAdapter.js +1 -1
  118. package/dist/parrableIdSystem.js +1 -1
  119. package/dist/pbsExtensions.js +1 -1
  120. package/dist/pianoDmpAnalyticsAdapter.js +1 -1
  121. package/dist/pixfutureBidAdapter.js +1 -1
  122. package/dist/prebid-core.js +1 -1
  123. package/dist/prebidServerBidAdapter.js +1 -1
  124. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  125. package/dist/pubCommonId.js +1 -1
  126. package/dist/pubProvidedIdSystem.js +1 -1
  127. package/dist/publinkIdSystem.js +1 -1
  128. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  129. package/dist/pubmaticBidAdapter.js +1 -1
  130. package/dist/pubperfAnalyticsAdapter.js +1 -1
  131. package/dist/pubstackAnalyticsAdapter.js +1 -1
  132. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  133. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  134. package/dist/pulsepointAnalyticsAdapter.js +1 -1
  135. package/dist/pxyzBidAdapter.js +1 -1
  136. package/dist/quantcastBidAdapter.js +1 -1
  137. package/dist/quantcastIdSystem.js +1 -1
  138. package/dist/rasBidAdapter.js +1 -1
  139. package/dist/readpeakBidAdapter.js +1 -1
  140. package/dist/realvuAnalyticsAdapter.js +1 -1
  141. package/dist/redtramBidAdapter.js +1 -0
  142. package/dist/relaidoBidAdapter.js +1 -1
  143. package/dist/relevantAnalyticsAdapter.js +1 -1
  144. package/dist/rhythmoneBidAdapter.js +1 -1
  145. package/dist/riseBidAdapter.js +1 -1
  146. package/dist/rivrAnalyticsAdapter.js +1 -1
  147. package/dist/roxotAnalyticsAdapter.js +1 -1
  148. package/dist/rtbhouseBidAdapter.js +1 -1
  149. package/dist/rtdModule.js +1 -1
  150. package/dist/rubiconAnalyticsAdapter.js +1 -1
  151. package/dist/rubiconBidAdapter.js +1 -1
  152. package/dist/s2sTesting.js +1 -1
  153. package/dist/scaleableAnalyticsAdapter.js +1 -1
  154. package/dist/schain.js +1 -1
  155. package/dist/seedingAllianceBidAdapter.js +1 -1
  156. package/dist/seedtagBidAdapter.js +1 -1
  157. package/dist/sharedIdSystem.js +1 -1
  158. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  159. package/dist/sharethroughBidAdapter.js +1 -1
  160. package/dist/shinezBidAdapter.js +1 -1
  161. package/dist/sigmoidAnalyticsAdapter.js +1 -1
  162. package/dist/smaatoBidAdapter.js +1 -1
  163. package/dist/smartadserverBidAdapter.js +1 -1
  164. package/dist/smartxBidAdapter.js +1 -1
  165. package/dist/smilewantedBidAdapter.js +1 -1
  166. package/dist/sonobiAnalyticsAdapter.js +1 -1
  167. package/dist/sonobiBidAdapter.js +1 -1
  168. package/dist/sovrnAnalyticsAdapter.js +1 -1
  169. package/dist/sovrnBidAdapter.js +1 -1
  170. package/dist/sspBCBidAdapter.js +1 -1
  171. package/dist/staqAnalyticsAdapter.js +1 -1
  172. package/dist/sublimeBidAdapter.js +1 -1
  173. package/dist/synacormediaBidAdapter.js +1 -1
  174. package/dist/tapadIdSystem.js +1 -1
  175. package/dist/targetVideoBidAdapter.js +1 -1
  176. package/dist/teadsBidAdapter.js +1 -1
  177. package/dist/teadsIdSystem.js +1 -1
  178. package/dist/terceptAnalyticsAdapter.js +1 -1
  179. package/dist/trionBidAdapter.js +1 -1
  180. package/dist/tripleliftBidAdapter.js +1 -1
  181. package/dist/ttdBidAdapter.js +1 -1
  182. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  183. package/dist/underdogmediaBidAdapter.js +1 -1
  184. package/dist/undertoneBidAdapter.js +1 -1
  185. package/dist/userId.js +1 -1
  186. package/dist/vidazooBidAdapter.js +1 -1
  187. package/dist/videobyteBidAdapter.js +1 -1
  188. package/dist/visxBidAdapter.js +1 -1
  189. package/dist/vuukleBidAdapter.js +1 -1
  190. package/dist/weboramaRtdProvider.js +1 -1
  191. package/dist/widespaceBidAdapter.js +1 -1
  192. package/dist/winrBidAdapter.js +1 -1
  193. package/dist/yahoosspBidAdapter.js +1 -1
  194. package/dist/yandexBidAdapter.js +1 -1
  195. package/dist/yieldlabBidAdapter.js +1 -1
  196. package/dist/yieldliftBidAdapter.js +1 -1
  197. package/dist/yieldmoBidAdapter.js +1 -1
  198. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  199. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  200. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  201. package/integrationExamples/gpt/growthcode.html +134 -0
  202. package/libraries/analyticsAdapter/AnalyticsAdapter.js +95 -102
  203. package/modules/admaticBidAdapter.js +10 -1
  204. package/modules/admixerBidAdapter.js +1 -1
  205. package/modules/aidemBidAdapter.js +492 -0
  206. package/modules/aidemBidAdapter.md +187 -0
  207. package/modules/browsiRtdProvider.js +6 -4
  208. package/modules/bucksenseBidAdapter.js +1 -1
  209. package/modules/criteoBidAdapter.js +3 -3
  210. package/modules/eplanningBidAdapter.js +2 -6
  211. package/modules/fluctBidAdapter.js +5 -0
  212. package/modules/gdprEnforcement.js +26 -24
  213. package/modules/genericAnalyticsAdapter.js +157 -0
  214. package/modules/geoedgeRtdProvider.js +22 -0
  215. package/modules/glomexBidAdapter.js +2 -0
  216. package/modules/gravitoIdSystem.js +3 -4
  217. package/modules/gridBidAdapter.js +1 -1
  218. package/modules/gridNMBidAdapter.js +1 -1
  219. package/modules/growthCodeAnalyticsAdapter.js +176 -0
  220. package/modules/growthCodeAnalyticsAdapter.md +41 -0
  221. package/modules/impactifyBidAdapter.js +19 -1
  222. package/modules/jwplayerRtdProvider.js +1 -2
  223. package/modules/limelightDigitalBidAdapter.js +1 -1
  224. package/modules/minutemediaBidAdapter.md +3 -3
  225. package/modules/nexx360BidAdapter.js +264 -138
  226. package/modules/pubCommonId.js +2 -1
  227. package/modules/pubProvidedIdSystem.js +2 -0
  228. package/modules/rasBidAdapter.js +8 -3
  229. package/modules/rasBidAdapter.md +16 -15
  230. package/modules/redtramBidAdapter.js +155 -0
  231. package/modules/redtramBidAdapter.md +33 -0
  232. package/modules/riseBidAdapter.js +15 -0
  233. package/modules/riseBidAdapter.md +3 -3
  234. package/modules/rtbhouseBidAdapter.js +90 -29
  235. package/modules/rubiconBidAdapter.js +2 -1
  236. package/modules/seedtagBidAdapter.js +67 -56
  237. package/modules/seedtagBidAdapter.md +60 -0
  238. package/modules/sharedIdSystem.js +3 -1
  239. package/modules/smartxBidAdapter.js +1 -1
  240. package/modules/smnBidAdapter.md +52 -0
  241. package/modules/tripleliftBidAdapter.js +1 -1
  242. package/modules/ttdBidAdapter.js +4 -0
  243. package/modules/vidazooBidAdapter.js +11 -1
  244. package/modules/yandexBidAdapter.js +85 -19
  245. package/modules/yandexBidAdapter.md +7 -7
  246. package/modules/yieldlabBidAdapter.js +10 -4
  247. package/modules/yieldliftBidAdapter.js +3 -3
  248. package/package.json +1 -1
  249. package/src/auction.js +19 -3
  250. package/src/consentHandler.js +8 -0
  251. package/src/events.js +4 -0
  252. package/src/native.js +31 -20
  253. package/src/refererDetection.js +6 -1
  254. package/src/storageManager.js +6 -3
  255. package/test/helpers/analytics.js +34 -0
  256. package/test/mocks/analyticsStub.js +3 -1
  257. package/test/spec/AnalyticsAdapter_spec.js +119 -116
  258. package/test/spec/auctionmanager_spec.js +86 -0
  259. package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +10 -8
  260. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +18 -25
  261. package/test/spec/modules/aidemBidAdapter_spec.js +664 -0
  262. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +0 -2
  263. package/test/spec/modules/browsiRtdProvider_spec.js +2 -1
  264. package/test/spec/modules/concertAnalyticsAdapter_spec.js +2 -4
  265. package/test/spec/modules/enrichmentFpdModule_spec.js +3 -2
  266. package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +0 -3
  267. package/test/spec/modules/eplanningBidAdapter_spec.js +4 -4
  268. package/test/spec/modules/fluctBidAdapter_spec.js +37 -1
  269. package/test/spec/modules/fpdModule_spec.js +1 -1
  270. package/test/spec/modules/gdprEnforcement_spec.js +115 -68
  271. package/test/spec/modules/genericAnalyticsAdapter_spec.js +284 -0
  272. package/test/spec/modules/geoedgeRtdProvider_spec.js +15 -0
  273. package/test/spec/modules/glomexBidAdapter_spec.js +4 -0
  274. package/test/spec/modules/gravitoIdSystem_spec.js +1 -1
  275. package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +70 -0
  276. package/test/spec/modules/impactifyBidAdapter_spec.js +13 -0
  277. package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +17 -27
  278. package/test/spec/modules/jwplayerRtdProvider_spec.js +3 -3
  279. package/test/spec/modules/konduitAnalyticsAdapter_spec.js +0 -2
  280. package/test/spec/modules/liveIntentAnalyticsAdapter_spec.js +3 -6
  281. package/test/spec/modules/medianetAnalyticsAdapter_spec.js +7 -1
  282. package/test/spec/modules/nexx360BidAdapter_spec.js +441 -221
  283. package/test/spec/modules/optimonAnalyticsAdapter_spec.js +3 -11
  284. package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +4 -11
  285. package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +3 -12
  286. package/test/spec/modules/pubperfAnalyticsAdapter_spec.js +6 -19
  287. package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +3 -17
  288. package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +13 -19
  289. package/test/spec/modules/rasBidAdapter_spec.js +5 -1
  290. package/test/spec/modules/redtramBidAdapter_spec.js +256 -0
  291. package/test/spec/modules/riseBidAdapter_spec.js +24 -0
  292. package/test/spec/modules/rtbhouseBidAdapter_spec.js +79 -0
  293. package/test/spec/modules/seedtagBidAdapter_spec.js +65 -92
  294. package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +4 -8
  295. package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +6 -18
  296. package/test/spec/modules/tripleliftBidAdapter_spec.js +3 -10
  297. package/test/spec/modules/ttdBidAdapter_spec.js +14 -0
  298. package/test/spec/modules/vidazooBidAdapter_spec.js +39 -24
  299. package/test/spec/modules/yandexBidAdapter_spec.js +22 -13
  300. package/test/spec/modules/yieldlabBidAdapter_spec.js +49 -20
  301. package/test/spec/modules/yieldliftBidAdapter_spec.js +1 -1
  302. package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +5 -2
  303. package/test/spec/native_spec.js +68 -56
  304. package/test/spec/refererDetection_spec.js +45 -7
  305. package/test/spec/unit/core/storageManager_spec.js +2 -1
@@ -658,36 +658,65 @@ describe('yieldlabBidAdapter', () => {
658
658
  });
659
659
 
660
660
  describe('getBidFloor', function () {
661
- let bidRequest, getFloor;
662
-
663
- it('should add valid bid floor', () => {
664
- getFloor = () => {
665
- return {
666
- currency: 'EUR',
667
- floor: 1.33
668
- };
669
- };
661
+ let bidRequest, bidRequest2, currency, floor;
662
+ const getFloor = () => {
663
+ return {
664
+ currency: currency,
665
+ floor: floor
666
+ }
667
+ }
668
+
669
+ it('should add valid bid floor in the format floor={adslotId}:{floorPriceInCents}[, ...]', () => {
670
+ bidRequest = Object.assign(DEFAULT_REQUEST(), {
671
+ getFloor: () => {
672
+ return {
673
+ currency: 'EUR',
674
+ floor: 1.33
675
+ }
676
+ }});
677
+ bidRequest2 = Object.assign(DEFAULT_REQUEST(), {
678
+ params: {
679
+ adslotId: 2222
680
+ },
681
+ getFloor: () => {
682
+ return {
683
+ currency: 'EUR',
684
+ floor: 2.99
685
+ }
686
+ }
687
+ });
688
+ const result = spec.buildRequests([bidRequest, bidRequest2], REQPARAMS)
689
+ expect(result).to.have.nested.property('queryParams.floor', '1111:133,2222:299')
690
+ });
691
+
692
+ it('should round the floor price up', () => {
693
+ currency = 'EUR';
694
+ floor = 0.745;
670
695
  bidRequest = Object.assign(DEFAULT_REQUEST(), {getFloor})
671
696
  const result = spec.buildRequests([bidRequest], REQPARAMS)
672
- expect(result).to.have.nested.property('queryParams.floor', 1.33)
697
+ expect(result).to.have.nested.property('queryParams.floor', '1111:75')
673
698
  });
674
699
 
675
- it('should not add empty bid floor', () => {
676
- getFloor = () => {
677
- return {};
678
- };
700
+ it('should round the floor price down', () => {
701
+ currency = 'EUR';
702
+ floor = 0.034;
679
703
  bidRequest = Object.assign(DEFAULT_REQUEST(), {getFloor})
680
704
  const result = spec.buildRequests([bidRequest], REQPARAMS)
705
+ expect(result).to.have.nested.property('queryParams.floor', '1111:3')
706
+ });
707
+
708
+ it('should not add empty bid floor', () => {
709
+ bidRequest = Object.assign(DEFAULT_REQUEST(), {
710
+ getFloor: () => {
711
+ return {};
712
+ }})
713
+ const result = spec.buildRequests([bidRequest], REQPARAMS)
681
714
  expect(result).not.to.have.nested.property('queryParams.floor')
682
715
  });
683
716
 
684
717
  it('should not add bid floor when currency is not matching', () => {
685
- getFloor = (currency, mediaType, size) => {
686
- return {
687
- currency: 'USD',
688
- floor: 1.33
689
- };
690
- };
718
+ currency = 'USD';
719
+ floor = 1.33;
691
720
  bidRequest = Object.assign(DEFAULT_REQUEST(), {getFloor})
692
721
  const result = spec.buildRequests([bidRequest], REQPARAMS)
693
722
  expect(result).not.to.have.nested.property('queryParams.floor')
@@ -229,7 +229,7 @@ describe('YieldLift', function () {
229
229
  expect(bids[index]).to.have.property('ad', RESPONSE.body.seatbid[0].bid[index].adm);
230
230
  expect(bids[index]).to.have.property('creativeId', RESPONSE.body.seatbid[0].bid[index].crid);
231
231
  expect(bids[index].meta).to.have.property('advertiserDomains', RESPONSE.body.seatbid[0].bid[index].advertiserDomains);
232
- expect(bids[index]).to.have.property('ttl', 30);
232
+ expect(bids[index]).to.have.property('ttl', 300);
233
233
  expect(bids[index]).to.have.property('netRevenue', true);
234
234
  }
235
235
  });
@@ -1,6 +1,7 @@
1
1
  import yieldoneAnalytics from 'modules/yieldoneAnalyticsAdapter.js';
2
2
  import { targeting } from 'src/targeting.js';
3
3
  import { expect } from 'chai';
4
+ import _ from 'lodash';
4
5
  let events = require('src/events');
5
6
  let adapterManager = require('src/adapterManager').default;
6
7
  let constants = require('src/constants.json');
@@ -225,7 +226,9 @@ describe('Yieldone Prebid Analytic', function () {
225
226
  pubId: initOptions.pubId,
226
227
  page: {url: testReferrer},
227
228
  wrapper_version: '$prebid.version$',
228
- events: expectedEvents
229
+ events: sinon.match(evs => {
230
+ return !expectedEvents.some((expectedEvent) => evs.find(ev => _.isEqual(ev, expectedEvent)) === -1)
231
+ })
229
232
  };
230
233
 
231
234
  const preparedWinnerParams = Object.assign({adServerTargeting: fakeTargeting}, winner);
@@ -262,7 +265,7 @@ describe('Yieldone Prebid Analytic', function () {
262
265
 
263
266
  events.emit(constants.EVENTS.AUCTION_END, auctionEnd);
264
267
 
265
- expect(yieldoneAnalytics.eventsStorage[auctionId]).to.deep.equal(expectedResult);
268
+ sinon.assert.match(yieldoneAnalytics.eventsStorage[auctionId], expectedResult);
266
269
 
267
270
  delete yieldoneAnalytics.eventsStorage[auctionId];
268
271
 
@@ -5,6 +5,7 @@ import {
5
5
  nativeBidIsValid,
6
6
  getAssetMessage,
7
7
  getAllAssetsMessage,
8
+ toLegacyResponse,
8
9
  decorateAdUnitsWithNativeParams,
9
10
  isOpenRTBBidRequestValid,
10
11
  isNativeOpenRTBBidValid,
@@ -37,6 +38,7 @@ const bid = {
37
38
  clickTrackers: ['https://tracker.example'],
38
39
  impressionTrackers: ['https://impression.example'],
39
40
  javascriptTrackers: '<script src="http://www.foobar.js"></script>',
41
+ privacyLink: 'https://privacy-link.example',
40
42
  ext: {
41
43
  foo: 'foo-value',
42
44
  baz: 'baz-value',
@@ -98,9 +100,18 @@ const ortbBid = {
98
100
  privacy: 'https://privacy-link.example',
99
101
  ver: '1.2'
100
102
  }
101
- },
103
+ }
102
104
  };
103
105
 
106
+ const completeNativeBid = {
107
+ adId: '123',
108
+ transactionId: 'au',
109
+ native: {
110
+ ...bid.native,
111
+ ...ortbBid.native
112
+ }
113
+ }
114
+
104
115
  const ortbRequest = {
105
116
  assets: [
106
117
  {
@@ -224,6 +235,14 @@ describe('native.js', function () {
224
235
  expect(targeting.hb_native_baz).to.equal('hb_native_baz:123');
225
236
  });
226
237
 
238
+ it('sends placeholdes targetings with ortb native response', function () {
239
+ const targeting = getNativeTargeting(completeNativeBid);
240
+
241
+ expect(targeting[CONSTANTS.NATIVE_KEYS.title]).to.equal('Native Creative');
242
+ expect(targeting[CONSTANTS.NATIVE_KEYS.body]).to.equal('Cool description great stuff');
243
+ expect(targeting[CONSTANTS.NATIVE_KEYS.clickUrl]).to.equal('https://www.link.example');
244
+ });
245
+
227
246
  it('should only include native targeting keys with values', function () {
228
247
  const adUnit = {
229
248
  transactionId: 'au',
@@ -302,6 +321,10 @@ describe('native.js', function () {
302
321
  required: false,
303
322
  sendTargetingKeys: false,
304
323
  },
324
+ privacyLink: {
325
+ required: false,
326
+ sendTargetingKeys: false,
327
+ },
305
328
  ext: {
306
329
  foo: {
307
330
  required: false,
@@ -348,6 +371,7 @@ describe('native.js', function () {
348
371
  CONSTANTS.NATIVE_KEYS.icon,
349
372
  CONSTANTS.NATIVE_KEYS.sponsoredBy,
350
373
  CONSTANTS.NATIVE_KEYS.clickUrl,
374
+ CONSTANTS.NATIVE_KEYS.privacyLink,
351
375
  CONSTANTS.NATIVE_KEYS.rendererUrl,
352
376
  ]);
353
377
 
@@ -380,6 +404,7 @@ describe('native.js', function () {
380
404
  CONSTANTS.NATIVE_KEYS.icon,
381
405
  CONSTANTS.NATIVE_KEYS.sponsoredBy,
382
406
  CONSTANTS.NATIVE_KEYS.clickUrl,
407
+ CONSTANTS.NATIVE_KEYS.privacyLink,
383
408
  ]);
384
409
 
385
410
  expect(bid.native.adTemplate).to.deep.equal(
@@ -437,9 +462,9 @@ describe('native.js', function () {
437
462
  adId: '123',
438
463
  };
439
464
 
440
- const message = getAllAssetsMessage(messageRequest, bid, {getNativeReq: () => null});
465
+ const message = getAllAssetsMessage(messageRequest, bid);
441
466
 
442
- expect(message.assets.length).to.equal(9);
467
+ expect(message.assets.length).to.equal(10);
443
468
  expect(message.assets).to.deep.include({
444
469
  key: 'body',
445
470
  value: bid.native.body,
@@ -485,7 +510,7 @@ describe('native.js', function () {
485
510
  adId: '123',
486
511
  };
487
512
 
488
- const message = getAllAssetsMessage(messageRequest, bidWithUndefinedFields, {getNativeReq: () => null});
513
+ const message = getAllAssetsMessage(messageRequest, bidWithUndefinedFields);
489
514
 
490
515
  expect(message.assets.length).to.equal(4);
491
516
  expect(message.assets).to.deep.include({
@@ -506,16 +531,16 @@ describe('native.js', function () {
506
531
  });
507
532
  });
508
533
 
509
- it('creates native all asset message with OpenRTB format', function () {
534
+ it('creates native all asset message with complete format', function () {
510
535
  const messageRequest = {
511
536
  message: 'Prebid Native',
512
537
  action: 'allAssetRequest',
513
538
  adId: '123',
514
539
  };
515
540
 
516
- const message = getAllAssetsMessage(messageRequest, ortbBid, {getNativeReq: () => ortbRequest});
541
+ const message = getAllAssetsMessage(messageRequest, completeNativeBid);
517
542
 
518
- expect(message.assets.length).to.equal(8);
543
+ expect(message.assets.length).to.equal(10);
519
544
  expect(message.assets).to.deep.include({
520
545
  key: 'body',
521
546
  value: bid.native.body,
@@ -548,6 +573,14 @@ describe('native.js', function () {
548
573
  key: 'privacyLink',
549
574
  value: ortbBid.native.ortb.privacy,
550
575
  });
576
+ expect(message.assets).to.deep.include({
577
+ key: 'foo',
578
+ value: bid.native.ext.foo,
579
+ });
580
+ expect(message.assets).to.deep.include({
581
+ key: 'baz',
582
+ value: bid.native.ext.baz,
583
+ });
551
584
  });
552
585
 
553
586
  const SAMPLE_ORTB_REQUEST = toOrtbNativeRequest({
@@ -555,60 +588,39 @@ describe('native.js', function () {
555
588
  body: 'vbody'
556
589
  });
557
590
  const SAMPLE_ORTB_RESPONSE = {
558
- native: {
559
- ortb: {
560
- link: {
561
- url: 'url'
562
- },
563
- assets: [
564
- {
565
- id: 0,
566
- title: {
567
- text: 'vtitle'
568
- }
569
- },
570
- {
571
- id: 1,
572
- data: {
573
- value: 'vbody'
574
- }
575
- }
576
- ]
591
+ link: {
592
+ url: 'url'
593
+ },
594
+ assets: [
595
+ {
596
+ id: 0,
597
+ title: {
598
+ text: 'vtitle'
599
+ }
600
+ },
601
+ {
602
+ id: 1,
603
+ data: {
604
+ value: 'vbody'
605
+ }
577
606
  }
578
- }
607
+ ],
608
+ eventtrackers: [
609
+ { event: 1, method: 1, url: 'https://sampleurl.com' },
610
+ { event: 1, method: 2, url: 'https://sampleurljs.com' }
611
+ ]
579
612
  }
580
- describe('getAllAssetsMessage', () => {
613
+ describe('toLegacyResponse', () => {
581
614
  it('returns assets in legacy format for ortb responses', () => {
582
- const actual = getAllAssetsMessage({}, SAMPLE_ORTB_RESPONSE, {getNativeReq: () => SAMPLE_ORTB_REQUEST});
583
- expect(actual.assets).to.eql([
584
- {
585
- key: 'clickUrl',
586
- value: 'url'
587
- },
588
- {
589
- key: 'title',
590
- value: 'vtitle'
591
- },
592
- {
593
- key: 'body',
594
- value: 'vbody'
595
- },
596
- ])
615
+ const actual = toLegacyResponse(SAMPLE_ORTB_RESPONSE, SAMPLE_ORTB_REQUEST);
616
+ expect(actual.body).to.equal('vbody');
617
+ expect(actual.title).to.equal('vtitle');
618
+ expect(actual.clickUrl).to.equal('url');
619
+ expect(actual.javascriptTrackers).to.equal('<script async src="https://sampleurljs.com"></script>');
620
+ expect(actual.impressionTrackers.length).to.equal(1);
621
+ expect(actual.impressionTrackers[0]).to.equal('https://sampleurl.com');
597
622
  });
598
623
  });
599
- describe('getAssetsMessage', () => {
600
- Object.entries({
601
- 'hb_native_title': {key: 'title', value: 'vtitle'},
602
- 'hb_native_body': {key: 'body', value: 'vbody'}
603
- }).forEach(([tkey, assetVal]) => {
604
- it(`returns ${tkey} asset in legacy format for ortb responses`, () => {
605
- const actual = getAssetMessage({
606
- assets: [tkey]
607
- }, SAMPLE_ORTB_RESPONSE, {getNativeReq: () => SAMPLE_ORTB_REQUEST})
608
- expect(actual.assets).to.eql([assetVal])
609
- })
610
- })
611
- })
612
624
  });
613
625
 
614
626
  describe('validate native openRTB', function () {
@@ -128,11 +128,49 @@ describe('Referer detection', () => {
128
128
  numIframes: 0,
129
129
  stack: ['https://example.com/some/page'],
130
130
  canonicalUrl: 'https://example.com/canonical/page',
131
- page: 'https://example.com/canonical/page',
131
+ page: 'https://example.com/some/page',
132
132
  ref: 'https://othersite.com/',
133
133
  domain: 'example.com'
134
134
  });
135
135
  });
136
+
137
+ it('Should set page and canonical to pageUrl value set in config if present, even if canonical url is also present in head', () => {
138
+ config.setConfig({'pageUrl': 'https://www.set-from-config.com/path'});
139
+ const testWindow = buildWindowTree(['https://example.com/some/page'], 'https://othersite.com/', 'https://example.com/canonical/page'),
140
+ result = detectReferer(testWindow)();
141
+
142
+ sinon.assert.match(result, {
143
+ topmostLocation: 'https://example.com/some/page',
144
+ location: 'https://example.com/some/page',
145
+ reachedTop: true,
146
+ isAmp: false,
147
+ numIframes: 0,
148
+ stack: ['https://example.com/some/page'],
149
+ canonicalUrl: 'https://www.set-from-config.com/path',
150
+ page: 'https://www.set-from-config.com/path',
151
+ ref: 'https://othersite.com/',
152
+ domain: 'www.set-from-config.com'
153
+ });
154
+ });
155
+
156
+ it('Should set page with query params if canonical url is present without query params but the current page does have them', () => {
157
+ config.setConfig({'pageUrl': 'https://www.set-from-config.com/path'});
158
+ const testWindow = buildWindowTree(['https://example.com/some/page?query1=123&query2=456'], 'https://othersite.com/', 'https://example.com/canonical/page'),
159
+ result = detectReferer(testWindow)();
160
+
161
+ sinon.assert.match(result, {
162
+ topmostLocation: 'https://example.com/some/page?query1=123&query2=456',
163
+ location: 'https://example.com/some/page?query1=123&query2=456',
164
+ reachedTop: true,
165
+ isAmp: false,
166
+ numIframes: 0,
167
+ stack: ['https://example.com/some/page?query1=123&query2=456'],
168
+ canonicalUrl: 'https://www.set-from-config.com/path',
169
+ page: 'https://www.set-from-config.com/path?query1=123&query2=456',
170
+ ref: 'https://othersite.com/',
171
+ domain: 'www.set-from-config.com'
172
+ });
173
+ });
136
174
  });
137
175
 
138
176
  describe('Friendly iframes', () => {
@@ -174,7 +212,7 @@ describe('Referer detection', () => {
174
212
  'https://example.com/third/page'
175
213
  ],
176
214
  canonicalUrl: 'https://example.com/canonical/page',
177
- page: 'https://example.com/canonical/page',
215
+ page: 'https://example.com/some/page',
178
216
  ref: 'https://othersite.com/',
179
217
  domain: 'example.com'
180
218
  });
@@ -317,7 +355,7 @@ describe('Referer detection', () => {
317
355
  'https://ad-iframe.ampproject.org/ad'
318
356
  ],
319
357
  canonicalUrl: 'https://example.com/some/page/',
320
- page: 'https://example.com/some/page/',
358
+ page: 'https://example.com/some/page/amp/',
321
359
  ref: null,
322
360
  domain: 'example.com'
323
361
  });
@@ -344,7 +382,7 @@ describe('Referer detection', () => {
344
382
  'https://ad-iframe.ampproject.org/ad'
345
383
  ],
346
384
  canonicalUrl: 'https://example.com/some/page/',
347
- page: 'https://example.com/some/page/',
385
+ page: 'https://example.com/some/page/amp/',
348
386
  ref: null,
349
387
  domain: 'example.com'
350
388
  });
@@ -384,7 +422,7 @@ describe('Referer detection', () => {
384
422
  'https://ad-iframe.ampproject.org/ad'
385
423
  ],
386
424
  canonicalUrl: 'https://example.com/some/page/',
387
- page: 'https://example.com/some/page/',
425
+ page: 'https://example.com/some/page/amp/',
388
426
  ref: null,
389
427
  domain: 'example.com',
390
428
  });
@@ -412,7 +450,7 @@ describe('Referer detection', () => {
412
450
  'https://ad-iframe.ampproject.org/ad'
413
451
  ],
414
452
  canonicalUrl: 'https://example.com/some/page/',
415
- page: 'https://example.com/some/page/',
453
+ page: 'https://example.com/some/page/amp/',
416
454
  ref: null,
417
455
  domain: 'example.com'
418
456
  });
@@ -441,7 +479,7 @@ describe('Referer detection', () => {
441
479
  'https://ad-iframe.ampproject.org/ad'
442
480
  ],
443
481
  canonicalUrl: 'https://example.com/some/page/',
444
- page: 'https://example.com/some/page/',
482
+ page: 'https://example.com/some/page/amp/',
445
483
  ref: null,
446
484
  domain: 'example.com',
447
485
  });
@@ -8,6 +8,7 @@ import {
8
8
  import { config } from 'src/config.js';
9
9
  import * as utils from 'src/utils.js';
10
10
  import {hook} from '../../../../src/hook.js';
11
+ import {VENDORLESS_GVLID} from '../../../../src/consentHandler.js';
11
12
 
12
13
  describe('storage manager', function() {
13
14
  before(() => {
@@ -73,7 +74,7 @@ describe('storage manager', function() {
73
74
 
74
75
  it('should respect (vendorless) consent enforcement', () => {
75
76
  storage.localStorageIsEnabled();
76
- expect(validateHook.args[0][1]).to.eql(true); // isVendorless should be set to true
77
+ expect(validateHook.args[0][1]).to.equal(VENDORLESS_GVLID); // gvlid should be set to VENDORLESS_GVLID
77
78
  });
78
79
 
79
80
  it('should respect the deviceAccess flag', () => {