prebid.js 8.3.0 → 8.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) 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/admanBidAdapter.js +1 -1
  11. package/dist/admixerIdSystem.js +1 -1
  12. package/dist/adnuntiusBidAdapter.js +1 -1
  13. package/dist/adqueryBidAdapter.js +1 -1
  14. package/dist/adqueryIdSystem.js +1 -1
  15. package/dist/adrelevantisBidAdapter.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/brandmetricsRtdProvider.js +1 -1
  31. package/dist/bridBidAdapter.js +1 -1
  32. package/dist/bridgewellBidAdapter.js +1 -1
  33. package/dist/brightMountainMediaBidAdapter.js +1 -1
  34. package/dist/britepoolIdSystem.js +1 -1
  35. package/dist/carodaBidAdapter.js +1 -1
  36. package/dist/chtnwBidAdapter.js +1 -1
  37. package/dist/concertBidAdapter.js +1 -1
  38. package/dist/connectIdSystem.js +1 -1
  39. package/dist/connectadBidAdapter.js +1 -1
  40. package/dist/consentManagementGpp.js +1 -1
  41. package/dist/consumableBidAdapter.js +1 -1
  42. package/dist/conversantAnalyticsAdapter.js +1 -1
  43. package/dist/conversantBidAdapter.js +1 -1
  44. package/dist/craftBidAdapter.js +1 -1
  45. package/dist/criteoBidAdapter.js +1 -1
  46. package/dist/criteoIdSystem.js +1 -1
  47. package/dist/cwireBidAdapter.js +1 -1
  48. package/dist/czechAdIdSystem.js +1 -1
  49. package/dist/dacIdSystem.js +1 -1
  50. package/dist/deepintentDpesIdSystem.js +1 -1
  51. package/dist/dependencies.json +6 -0
  52. package/dist/dmdIdSystem.js +1 -1
  53. package/dist/dspxBidAdapter.js +1 -1
  54. package/dist/eplanningBidAdapter.js +1 -1
  55. package/dist/euidIdSystem.js +1 -1
  56. package/dist/fabrickIdSystem.js +1 -1
  57. package/dist/feedadBidAdapter.js +1 -1
  58. package/dist/finativeBidAdapter.js +1 -1
  59. package/dist/freewheel-sspBidAdapter.js +1 -1
  60. package/dist/ftrackIdSystem.js +1 -1
  61. package/dist/gdprEnforcement.js +1 -1
  62. package/dist/geolocationRtdProvider.js +1 -0
  63. package/dist/gmosspBidAdapter.js +1 -1
  64. package/dist/goldbachBidAdapter.js +1 -1
  65. package/dist/gravitoIdSystem.js +1 -1
  66. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  67. package/dist/greenbidsRtdProvider.js +1 -1
  68. package/dist/gridBidAdapter.js +1 -1
  69. package/dist/growthCodeIdSystem.js +1 -1
  70. package/dist/gumgumBidAdapter.js +1 -1
  71. package/dist/h12mediaBidAdapter.js +1 -1
  72. package/dist/hadronIdSystem.js +1 -1
  73. package/dist/hypelabBidAdapter.js +1 -1
  74. package/dist/id5IdSystem.js +1 -1
  75. package/dist/identityLinkIdSystem.js +1 -1
  76. package/dist/idxIdSystem.js +1 -1
  77. package/dist/imdsBidAdapter.js +1 -1
  78. package/dist/improvedigitalBidAdapter.js +1 -1
  79. package/dist/imuIdSystem.js +1 -1
  80. package/dist/insticatorBidAdapter.js +1 -1
  81. package/dist/intentIqIdSystem.js +1 -1
  82. package/dist/invibesBidAdapter.js +1 -1
  83. package/dist/ixBidAdapter.js +1 -1
  84. package/dist/justIdSystem.js +1 -1
  85. package/dist/justpremiumBidAdapter.js +1 -1
  86. package/dist/kargoBidAdapter.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/kulturemediaBidAdapter.js +1 -1
  92. package/dist/lassoBidAdapter.js +1 -1
  93. package/dist/lifestreetBidAdapter.js +1 -1
  94. package/dist/liveIntentIdSystem.js +1 -1
  95. package/dist/logicadBidAdapter.js +1 -1
  96. package/dist/loglyliftBidAdapter.js +1 -1
  97. package/dist/lotamePanoramaIdSystem.js +1 -1
  98. package/dist/magniteAnalyticsAdapter.js +1 -1
  99. package/dist/malltvAnalyticsAdapter.js +1 -1
  100. package/dist/marsmediaBidAdapter.js +1 -1
  101. package/dist/mediafuseBidAdapter.js +1 -1
  102. package/dist/mediasquareBidAdapter.js +1 -1
  103. package/dist/merkleIdSystem.js +1 -1
  104. package/dist/mgidBidAdapter.js +1 -1
  105. package/dist/minutemediaBidAdapter.js +1 -1
  106. package/dist/minutemediaplusBidAdapter.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/nexx360BidAdapter.js +1 -1
  111. package/dist/not-for-prod/prebid.js +185 -182
  112. package/dist/novatiqIdSystem.js +1 -1
  113. package/dist/oguryBidAdapter.js +1 -1
  114. package/dist/oneKeyIdSystem.js +1 -1
  115. package/dist/onetagBidAdapter.js +1 -1
  116. package/dist/ooloAnalyticsAdapter.js +1 -1
  117. package/dist/optidigitalBidAdapter.js +1 -1
  118. package/dist/outbrainBidAdapter.js +1 -1
  119. package/dist/ozoneBidAdapter.js +1 -1
  120. package/dist/pairIdSystem.js +1 -1
  121. package/dist/parrableIdSystem.js +1 -1
  122. package/dist/pixfutureBidAdapter.js +1 -1
  123. package/dist/prebid-core.js +2 -2
  124. package/dist/publinkIdSystem.js +1 -1
  125. package/dist/pubmaticBidAdapter.js +1 -1
  126. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  127. package/dist/pulsepointBidAdapter.js +1 -1
  128. package/dist/pxyzBidAdapter.js +1 -1
  129. package/dist/quantcastBidAdapter.js +1 -1
  130. package/dist/quantcastIdSystem.js +1 -1
  131. package/dist/readpeakBidAdapter.js +1 -1
  132. package/dist/relaidoBidAdapter.js +1 -1
  133. package/dist/retailspotBidAdapter.js +1 -1
  134. package/dist/rhythmoneBidAdapter.js +1 -1
  135. package/dist/riseBidAdapter.js +1 -1
  136. package/dist/rubiconBidAdapter.js +1 -1
  137. package/dist/seedingAllianceBidAdapter.js +1 -1
  138. package/dist/seedtagBidAdapter.js +1 -1
  139. package/dist/sharedIdSystem.js +1 -1
  140. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  141. package/dist/sharethroughBidAdapter.js +1 -1
  142. package/dist/shinezBidAdapter.js +1 -1
  143. package/dist/silverpushBidAdapter.js +1 -1
  144. package/dist/smaatoBidAdapter.js +1 -1
  145. package/dist/smartadserverBidAdapter.js +1 -1
  146. package/dist/smartxBidAdapter.js +1 -1
  147. package/dist/smilewantedBidAdapter.js +1 -1
  148. package/dist/sonobiBidAdapter.js +1 -1
  149. package/dist/sovrnAnalyticsAdapter.js +1 -1
  150. package/dist/sovrnBidAdapter.js +1 -1
  151. package/dist/ssmasBidAdapter.js +1 -0
  152. package/dist/sspBCBidAdapter.js +1 -1
  153. package/dist/stroeerCoreBidAdapter.js +1 -1
  154. package/dist/stvBidAdapter.js +1 -1
  155. package/dist/sublimeBidAdapter.js +1 -1
  156. package/dist/tapadIdSystem.js +1 -1
  157. package/dist/targetVideoBidAdapter.js +1 -1
  158. package/dist/teadsBidAdapter.js +1 -1
  159. package/dist/tncIdSystem.js +1 -1
  160. package/dist/topicsFpdModule.js +1 -1
  161. package/dist/trionBidAdapter.js +1 -1
  162. package/dist/tripleliftBidAdapter.js +1 -1
  163. package/dist/ttdBidAdapter.js +1 -1
  164. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  165. package/dist/uid2IdSystem.js +1 -1
  166. package/dist/underdogmediaBidAdapter.js +1 -1
  167. package/dist/undertoneBidAdapter.js +1 -1
  168. package/dist/unifiedIdSystem.js +1 -1
  169. package/dist/userId.js +1 -1
  170. package/dist/utiqSystem.js +1 -1
  171. package/dist/verizonMediaIdSystem.js +1 -1
  172. package/dist/vidazooBidAdapter.js +1 -1
  173. package/dist/videobyteBidAdapter.js +1 -1
  174. package/dist/visxBidAdapter.js +1 -1
  175. package/dist/voxBidAdapter.js +1 -1
  176. package/dist/vrtcalBidAdapter.js +1 -1
  177. package/dist/vuukleBidAdapter.js +1 -1
  178. package/dist/widespaceBidAdapter.js +1 -1
  179. package/dist/winrBidAdapter.js +1 -1
  180. package/dist/yahoosspBidAdapter.js +1 -1
  181. package/dist/yandexBidAdapter.js +1 -1
  182. package/dist/yieldmoBidAdapter.js +1 -1
  183. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  184. package/dist/zeotapIdPlusIdSystem.js +1 -1
  185. package/integrationExamples/gpt/adUnitFloors.html +0 -1
  186. package/integrationExamples/videoModule/jwplayer/bidMarkedAsUsed.html +1 -1
  187. package/integrationExamples/videoModule/jwplayer/eventListeners.html +2 -2
  188. package/integrationExamples/videoModule/jwplayer/eventsUI.html +1 -1
  189. package/integrationExamples/videoModule/jwplayer/gamAdServerMediation.html +1 -1
  190. package/integrationExamples/videoModule/jwplayer/mediaMetadata.html +1 -1
  191. package/integrationExamples/videoModule/jwplayer/playlist.html +1 -1
  192. package/integrationExamples/videoModule/videojs/bidMarkedAsUsed.html +1 -1
  193. package/integrationExamples/videoModule/videojs/bidRequestScheduling.html +1 -1
  194. package/integrationExamples/videoModule/videojs/eventListeners.html +1 -1
  195. package/integrationExamples/videoModule/videojs/eventsUI.html +1 -1
  196. package/integrationExamples/videoModule/videojs/gamAdServerMediation.html +1 -1
  197. package/integrationExamples/videoModule/videojs/mediaMetadata.html +1 -1
  198. package/integrationExamples/videoModule/videojs/playlist.html +1 -1
  199. package/modules/.submodules.json +1 -0
  200. package/modules/33acrossBidAdapter.js +24 -14
  201. package/modules/33acrossIdSystem.js +24 -4
  202. package/modules/a1MediaRtdProvider.js +92 -0
  203. package/modules/a1MediaRtdProvider.md +46 -0
  204. package/modules/adagioBidAdapter.js +0 -1
  205. package/modules/adfBidAdapter.js +4 -1
  206. package/modules/adkernelAdnBidAdapter.js +1 -1
  207. package/modules/adkernelBidAdapter.js +10 -3
  208. package/modules/admanBidAdapter.js +4 -0
  209. package/modules/admixerIdSystem.js +6 -0
  210. package/modules/adnuntiusBidAdapter.js +5 -13
  211. package/modules/adqueryIdSystem.js +6 -0
  212. package/modules/adtelligentIdSystem.js +6 -0
  213. package/modules/adyoulikeBidAdapter.js +6 -3
  214. package/modules/amxIdSystem.js +6 -0
  215. package/modules/beachfrontBidAdapter.js +32 -6
  216. package/modules/brandmetricsRtdProvider.js +36 -2
  217. package/modules/brandmetricsRtdProvider.md +17 -2
  218. package/modules/britepoolIdSystem.js +6 -0
  219. package/modules/connectIdSystem.js +6 -0
  220. package/modules/consentManagementGpp.js +10 -1
  221. package/modules/consumableBidAdapter.js +9 -1
  222. package/modules/criteoIdSystem.js +6 -0
  223. package/modules/czechAdIdSystem.js +6 -0
  224. package/modules/dacIdSystem.js +6 -0
  225. package/modules/deepintentDpesIdSystem.js +7 -2
  226. package/modules/dmdIdSystem.js +6 -0
  227. package/modules/euidIdSystem.js +9 -0
  228. package/modules/fabrickIdSystem.js +6 -0
  229. package/modules/ftrackIdSystem.js +16 -0
  230. package/modules/gdprEnforcement.js +27 -22
  231. package/modules/geolocationRtdProvider.js +65 -0
  232. package/modules/gravitoIdSystem.js +6 -0
  233. package/modules/greenbidsRtdProvider.js +1 -1
  234. package/modules/gridBidAdapter.js +19 -0
  235. package/modules/growthCodeIdSystem.js +20 -1
  236. package/modules/hadronIdSystem.js +6 -0
  237. package/modules/id5IdSystem.js +34 -8
  238. package/modules/identityLinkIdSystem.js +6 -0
  239. package/modules/idxIdSystem.js +6 -0
  240. package/modules/imdsBidAdapter.js +38 -14
  241. package/modules/imuIdSystem.js +10 -0
  242. package/modules/intentIqIdSystem.js +6 -0
  243. package/modules/invibesBidAdapter.js +5 -5
  244. package/modules/ixBidAdapter.js +56 -2
  245. package/modules/justIdSystem.js +6 -0
  246. package/modules/kargoBidAdapter.js +4 -0
  247. package/modules/kinessoIdSystem.js +7 -2
  248. package/modules/liveIntentIdSystem.js +53 -0
  249. package/modules/lotamePanoramaIdSystem.js +6 -0
  250. package/modules/merkleIdSystem.js +24 -0
  251. package/modules/minutemediaBidAdapter.js +17 -2
  252. package/modules/mwOpenLinkIdSystem.js +6 -0
  253. package/modules/naveggIdSystem.js +6 -0
  254. package/modules/netIdSystem.js +6 -0
  255. package/modules/novatiqIdSystem.js +12 -0
  256. package/modules/oguryBidAdapter.js +29 -16
  257. package/modules/oneKeyIdSystem.js +26 -0
  258. package/modules/ozoneBidAdapter.js +65 -18
  259. package/modules/ozoneBidAdapter.md +3 -1
  260. package/modules/pairIdSystem.js +6 -0
  261. package/modules/parrableIdSystem.js +38 -2
  262. package/modules/publinkIdSystem.js +7 -1
  263. package/modules/pubmaticBidAdapter.js +16 -1
  264. package/modules/pulsepointBidAdapter.js +63 -424
  265. package/modules/pulsepointBidAdapter.md +39 -45
  266. package/modules/quantcastIdSystem.js +6 -0
  267. package/modules/rubiconBidAdapter.js +9 -0
  268. package/modules/sharedIdSystem.js +7 -1
  269. package/modules/silverpushBidAdapter.js +2 -2
  270. package/modules/sovrnBidAdapter.js +5 -1
  271. package/modules/ssmasBidAdapter.js +126 -0
  272. package/modules/ssmasBidAdapter.md +35 -0
  273. package/modules/sspBCBidAdapter.js +36 -13
  274. package/modules/stroeerCoreBidAdapter.js +2 -3
  275. package/modules/tapadIdSystem.js +6 -0
  276. package/modules/teadsBidAdapter.js +2 -0
  277. package/modules/tncIdSystem.js +6 -0
  278. package/modules/topicsFpdModule.js +4 -1
  279. package/modules/topicsFpdModule.md +4 -0
  280. package/modules/tripleliftBidAdapter.js +5 -0
  281. package/modules/uid2IdSystem.js +14 -0
  282. package/modules/unifiedIdSystem.js +11 -0
  283. package/modules/userId/eids.js +6 -445
  284. package/modules/userId/index.js +38 -26
  285. package/modules/utiqSystem.js +9 -0
  286. package/modules/verizonMediaIdSystem.js +6 -0
  287. package/modules/vidazooBidAdapter.js +5 -7
  288. package/modules/voxBidAdapter.js +16 -5
  289. package/modules/vrtcalBidAdapter.js +10 -6
  290. package/modules/yahoosspBidAdapter.js +38 -33
  291. package/modules/yahoosspBidAdapter.md +96 -95
  292. package/modules/yandexBidAdapter.js +12 -15
  293. package/modules/zeotapIdPlusIdSystem.js +6 -0
  294. package/package.json +1 -1
  295. package/src/activities/redactor.js +1 -1
  296. package/src/adapters/bidderFactory.js +15 -6
  297. package/src/adloader.js +2 -1
  298. package/src/auction.js +24 -2
  299. package/src/constants.json +3 -1
  300. package/src/fpd/sua.js +8 -2
  301. package/test/spec/auctionmanager_spec.js +29 -1
  302. package/test/spec/fpd/enrichment_spec.js +7 -1
  303. package/test/spec/fpd/sua_spec.js +12 -0
  304. package/test/spec/modules/33acrossBidAdapter_spec.js +188 -35
  305. package/test/spec/modules/33acrossIdSystem_spec.js +122 -27
  306. package/test/spec/modules/a1MediaRtdProvider_spec.js +105 -0
  307. package/test/spec/modules/adagioBidAdapter_spec.js +0 -1
  308. package/test/spec/modules/adfBidAdapter_spec.js +47 -0
  309. package/test/spec/modules/adkernelAdnBidAdapter_spec.js +1 -2
  310. package/test/spec/modules/adkernelBidAdapter_spec.js +7 -2
  311. package/test/spec/modules/adnuntiusBidAdapter_spec.js +116 -64
  312. package/test/spec/modules/adyoulikeBidAdapter_spec.js +13 -24
  313. package/test/spec/modules/beachfrontBidAdapter_spec.js +35 -2
  314. package/test/spec/modules/brandmetricsRtdProvider_spec.js +69 -7
  315. package/test/spec/modules/consentManagementGpp_spec.js +16 -0
  316. package/test/spec/modules/consumableBidAdapter_spec.js +15 -0
  317. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +5 -5
  318. package/test/spec/modules/gdprEnforcement_spec.js +43 -2
  319. package/test/spec/modules/geolocationRtdProvider_spec.js +119 -0
  320. package/test/spec/modules/greenbidsRtdProvider_spec.js +1 -1
  321. package/test/spec/modules/gridBidAdapter_spec.js +42 -0
  322. package/test/spec/modules/id5IdSystem_spec.js +18 -0
  323. package/test/spec/modules/imdsBidAdapter_spec.js +98 -17
  324. package/test/spec/modules/invibesBidAdapter_spec.js +123 -32
  325. package/test/spec/modules/ixBidAdapter_spec.js +95 -5
  326. package/test/spec/modules/kargoBidAdapter_spec.js +121 -106
  327. package/test/spec/modules/medianetBidAdapter_spec.js +117 -0
  328. package/test/spec/modules/minutemediaBidAdapter_spec.js +36 -5
  329. package/test/spec/modules/oguryBidAdapter_spec.js +208 -108
  330. package/test/spec/modules/outbrainBidAdapter_spec.js +3 -5
  331. package/test/spec/modules/ozoneBidAdapter_spec.js +27 -1
  332. package/test/spec/modules/prebidServerBidAdapter_spec.js +2 -20
  333. package/test/spec/modules/priceFloors_spec.js +14 -0
  334. package/test/spec/modules/pubmaticBidAdapter_spec.js +125 -373
  335. package/test/spec/modules/pulsepointBidAdapter_spec.js +225 -486
  336. package/test/spec/modules/rubiconBidAdapter_spec.js +220 -9
  337. package/test/spec/modules/smaatoBidAdapter_spec.js +4 -6
  338. package/test/spec/modules/sovrnBidAdapter_spec.js +24 -4
  339. package/test/spec/modules/ssmasBidAdapter_spec.js +244 -0
  340. package/test/spec/modules/sspBCBidAdapter_spec.js +18 -19
  341. package/test/spec/modules/stroeerCoreBidAdapter_spec.js +8 -5
  342. package/test/spec/modules/teadsBidAdapter_spec.js +70 -21
  343. package/test/spec/modules/topicsFpdModule_spec.js +10 -4
  344. package/test/spec/modules/tripleliftBidAdapter_spec.js +40 -0
  345. package/test/spec/modules/userId_spec.js +116 -7
  346. package/test/spec/modules/vidazooBidAdapter_spec.js +0 -5
  347. package/test/spec/modules/voxBidAdapter_spec.js +93 -0
  348. package/test/spec/modules/vrtcalBidAdapter_spec.js +12 -4
  349. package/test/spec/modules/xeBidAdapter_spec.js +366 -368
  350. package/test/spec/modules/yahoosspBidAdapter_spec.js +405 -330
  351. package/test/spec/modules/yandexBidAdapter_spec.js +21 -3
  352. package/test/spec/unit/core/bidderFactory_spec.js +61 -14
  353. package/integrationExamples/gpt/inskin_example.html +0 -100
  354. package/integrationExamples/gpt/pbjs_video_adUnit.html +0 -109
@@ -707,32 +707,21 @@ describe('Adyoulike Adapter', function () {
707
707
  expect(payload.gdprConsent.consentRequired).to.be.null;
708
708
  });
709
709
 
710
- it('should add userid eids information to the request', function () {
711
- let bidderRequest = {
712
- 'auctionId': '1d1a030790a475',
713
- 'bidderRequestId': '22edbae2733bf6',
714
- 'timeout': 3000,
715
- 'userIdAsEids':
716
- [
717
- {
718
- 'source': 'pubcid.org',
719
- 'uids': [
720
- {
721
- 'atype': 1,
722
- 'id': '01EAJWWNEPN3CYMM5N8M5VXY22'
723
- }
724
- ]
725
- }
726
- ]
727
- };
728
-
729
- bidderRequest.bids = bidRequestWithSinglePlacement;
730
-
731
- const request = spec.buildRequests(bidRequestWithSinglePlacement, bidderRequest);
710
+ it('should add eids eids information to the request', function () {
711
+ let bidRequest = bidRequestWithSinglePlacement;
712
+ bidRequest[0].userIdAsEids = [{
713
+ 'source': 'pubcid.org',
714
+ 'uids': [{
715
+ 'atype': 1,
716
+ 'id': '01EAJWWNEPN3CYMM5N8M5VXY22'
717
+ }]
718
+ }]
719
+
720
+ const request = spec.buildRequests(bidRequest, bidderRequest);
732
721
  const payload = JSON.parse(request.data);
733
722
 
734
- expect(payload.userId).to.exist;
735
- expect(payload.userId).to.deep.equal(bidderRequest.userIdAsEids);
723
+ expect(payload.eids).to.exist;
724
+ expect(payload.eids).to.deep.equal(bidRequest[0].userIdAsEids);
736
725
  });
737
726
 
738
727
  it('sends bid request to endpoint with single placement', function () {
@@ -1,7 +1,6 @@
1
1
  import { expect } from 'chai';
2
2
  import { spec, VIDEO_ENDPOINT, BANNER_ENDPOINT, OUTSTREAM_SRC, DEFAULT_MIMES } from 'modules/beachfrontBidAdapter.js';
3
- import { config } from 'src/config.js';
4
- import { parseUrl, deepAccess } from 'src/utils.js';
3
+ import { parseUrl } from 'src/utils.js';
5
4
 
6
5
  describe('BeachfrontAdapter', function () {
7
6
  let bidRequests;
@@ -296,6 +295,23 @@ describe('BeachfrontAdapter', function () {
296
295
  expect(data.user.ext.consent).to.equal(consentString);
297
296
  });
298
297
 
298
+ it('must add GPP consent data to the request', function () {
299
+ const bidRequest = bidRequests[0];
300
+ bidRequest.mediaTypes = { video: {} };
301
+ const gppString = 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A==';
302
+ const applicableSections = [1, 2, 3];
303
+ const bidderRequest = {
304
+ gppConsent: {
305
+ gppString,
306
+ applicableSections
307
+ }
308
+ };
309
+ const requests = spec.buildRequests([ bidRequest ], bidderRequest);
310
+ const data = requests[0].data;
311
+ expect(data.regs.gpp).to.equal(gppString);
312
+ expect(data.regs.gpp_sid).to.deep.equal(applicableSections);
313
+ });
314
+
299
315
  it('must add schain data to the request', () => {
300
316
  const schain = {
301
317
  ver: '1.0',
@@ -517,6 +533,23 @@ describe('BeachfrontAdapter', function () {
517
533
  expect(data.gdprConsent).to.equal(consentString);
518
534
  });
519
535
 
536
+ it('must add GPP consent data to the request', function () {
537
+ const bidRequest = bidRequests[0];
538
+ bidRequest.mediaTypes = { banner: {} };
539
+ const gppString = 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A==';
540
+ const applicableSections = [1, 2, 3];
541
+ const bidderRequest = {
542
+ gppConsent: {
543
+ gppString,
544
+ applicableSections
545
+ }
546
+ };
547
+ const requests = spec.buildRequests([ bidRequest ], bidderRequest);
548
+ const data = requests[0].data;
549
+ expect(data.gpp).to.equal(gppString);
550
+ expect(data.gppSid).to.deep.equal(applicableSections);
551
+ });
552
+
520
553
  it('must add schain data to the request', () => {
521
554
  const schain = {
522
555
  ver: '1.0',
@@ -1,5 +1,7 @@
1
1
  import * as brandmetricsRTD from '../../../modules/brandmetricsRtdProvider.js';
2
2
  import {config} from 'src/config.js';
3
+ import * as events from '../../../src/events';
4
+ import * as sinon from 'sinon';
3
5
 
4
6
  const VALID_CONFIG = {
5
7
  name: 'brandmetrics',
@@ -77,14 +79,16 @@ function mockSurveyLoaded(surveyConf) {
77
79
  });
78
80
  }
79
81
 
80
- function scriptTagExists(url) {
81
- const tags = document.getElementsByTagName('script');
82
- for (let i = 0; i < tags.length; i++) {
83
- if (tags[i].src === url) {
84
- return true;
82
+ function mockCreativeInView(creativeInViewConf) {
83
+ const commands = window._brandmetrics || [];
84
+ commands.forEach(command => {
85
+ if (command.cmd === '_addeventlistener') {
86
+ const conf = command.val;
87
+ if (conf.event === 'creative_in_view') {
88
+ conf.handler(creativeInViewConf);
89
+ }
85
90
  }
86
- }
87
- return false;
91
+ })
88
92
  }
89
93
 
90
94
  describe('BrandmetricsRTD module', () => {
@@ -188,4 +192,62 @@ describe('getBidRequestData', () => {
188
192
  expect(bidderOrtb2[exp].user.ext.data.brandmetrics_survey).to.equal('mockMeasurementId')
189
193
  })
190
194
  });
195
+
196
+ describe('billable events', () => {
197
+ let sandbox;
198
+ let eventsEmitSpy;
199
+
200
+ before(() => {
201
+ sandbox = sinon.sandbox.create();
202
+ eventsEmitSpy = sandbox.spy(events, ['emit']);
203
+ });
204
+
205
+ beforeEach(() => {
206
+ eventsEmitSpy.resetHistory();
207
+ })
208
+
209
+ afterEach(() => {
210
+ sandbox.restore();
211
+ });
212
+
213
+ it('should emit billable event from prebid events', () => {
214
+ const expectedEvent = {
215
+ vendor: 'brandmetrics',
216
+ type: 'creative_in_view',
217
+ measurementId: 'mockMeasurementId',
218
+ auctionId: 'mockAuctionId',
219
+ transactionId: 'mockTransactionId'
220
+ };
221
+
222
+ mockCreativeInView({
223
+ mid: expectedEvent.measurementId,
224
+ source: {
225
+ type: 'pbj',
226
+ data: {
227
+ auctionId: expectedEvent.auctionId,
228
+ transactionId: expectedEvent.transactionId
229
+ },
230
+ }
231
+ });
232
+
233
+ expect(eventsEmitSpy.callCount).to.equal(1);
234
+
235
+ const event = eventsEmitSpy.getCalls()[0].args[1];
236
+ delete event['billingId'];
237
+
238
+ expect(event).to.deep.equal(expectedEvent);
239
+ });
240
+
241
+ it('should not emit billable event from non prebid- sources', () => {
242
+ mockCreativeInView({
243
+ mid: 'mockMeasurementId',
244
+ source: {
245
+ type: 'gpt',
246
+ data: {},
247
+ }
248
+ });
249
+
250
+ expect(eventsEmitSpy.callCount).to.equal(0);
251
+ });
252
+ });
191
253
  });
@@ -157,6 +157,22 @@ describe('consentManagementGpp', function () {
157
157
  expect(res.sectionData).to.eql(sectionData);
158
158
  })
159
159
  });
160
+
161
+ it('continues with no consent when CMP version is not 1.0', () => {
162
+ const pm = runLookup();
163
+ mockCmpEvent({
164
+ eventName: 'listenerRegistered',
165
+ pingData: {
166
+ gppVersion: '1.1'
167
+ }
168
+ });
169
+ return pm.then((res) => {
170
+ sinon.assert.match(res, {
171
+ gppString: undefined,
172
+ applicableSections: []
173
+ })
174
+ })
175
+ })
160
176
  })
161
177
 
162
178
  describe('static consent string setConsentConfig value', () => {
@@ -53,6 +53,10 @@ const BIDDER_REQUEST_1 = {
53
53
  consentString: 'consent-test',
54
54
  gdprApplies: false
55
55
  },
56
+ gppConsent: {
57
+ applicableSections: [1, 2],
58
+ gppString: 'consent-string'
59
+ },
56
60
  refererInfo: {
57
61
  referer: 'http://example.com/page.html',
58
62
  reachedTop: true,
@@ -647,6 +651,17 @@ describe('Consumable BidAdapter', function () {
647
651
  expect(opts[0].url).to.equal('https://sync.serverbid.com/ss/730181.html?gdpr=0&gdpr_consent=GDPR_CONSENT_STRING');
648
652
  })
649
653
 
654
+ it('should return a sync url if iframe syncs are enabled and GPP applies', function () {
655
+ let gppConsent = {
656
+ applicableSections: [1, 2],
657
+ gppString: 'GPP_CONSENT_STRING'
658
+ }
659
+ let opts = spec.getUserSyncs(syncOptions, [AD_SERVER_RESPONSE], {}, {}, gppConsent);
660
+
661
+ expect(opts.length).to.equal(1);
662
+ expect(opts[0].url).to.equal('https://sync.serverbid.com/ss/730181.html?gpp=GPP_CONSENT_STRING&gpp_sid=1,2');
663
+ })
664
+
650
665
  it('should return a sync url if iframe syncs are enabled and USP applies', function () {
651
666
  let uspConsent = {
652
667
  consentString: 'USP_CONSENT_STRING',
@@ -135,11 +135,11 @@ describe('freewheelSSP BidAdapter Test', () => {
135
135
 
136
136
  it('should pass 3rd party IDs with the request when present', function () {
137
137
  const bidRequest = bidRequests[0];
138
- bidRequest.userIdAsEids = createEidsArray({
139
- tdid: 'TTD_ID_FROM_USER_ID_MODULE',
140
- admixerId: 'admixerId_FROM_USER_ID_MODULE',
141
- adtelligentId: 'adtelligentId_FROM_USER_ID_MODULE'
142
- });
138
+ bidRequest.userIdAsEids = [
139
+ {source: 'adserver.org', uids: [{id: 'TTD_ID_FROM_USER_ID_MODULE', atype: 1, ext: {rtiPartner: 'TDID'}}]},
140
+ {source: 'admixer.net', uids: [{id: 'admixerId_FROM_USER_ID_MODULE', atype: 3}]},
141
+ {source: 'adtelligent.com', uids: [{id: 'adtelligentId_FROM_USER_ID_MODULE', atype: 3}]},
142
+ ];
143
143
  const request = spec.buildRequests(bidRequests);
144
144
  const payload = request[0].data;
145
145
  expect(payload._fw_prebid_3p_UID).to.deep.equal(JSON.stringify([
@@ -11,7 +11,7 @@ import {
11
11
  reportAnalyticsRule,
12
12
  setEnforcementConfig,
13
13
  STRICT_STORAGE_ENFORCEMENT,
14
- syncUserRule,
14
+ syncUserRule, ufpdRule,
15
15
  validateRules
16
16
  } from 'modules/gdprEnforcement.js';
17
17
  import {config} from 'src/config.js';
@@ -462,6 +462,46 @@ describe('gdpr enforcement', function () {
462
462
  });
463
463
  });
464
464
 
465
+ describe('transmitUfpdRule', () => {
466
+ it('should allow when purpose 3 consent is given', () => {
467
+ setEnforcementConfig({
468
+ gdpr: {
469
+ rules: [{
470
+ purpose: 'personalizedAds',
471
+ enforcePurpose: true,
472
+ enforceVendor: true,
473
+ }]
474
+ }
475
+ });
476
+ Object.assign(gvlids, {
477
+ mockBidder: 123
478
+ });
479
+ const consent = setupConsentData();
480
+ consent.vendorData.purpose.consents[4] = true;
481
+ consent.vendorData.vendor.consents[123] = true;
482
+ expectAllow(true, ufpdRule(activityParams(MODULE_TYPE_BIDDER, 'mockBidder')));
483
+ });
484
+
485
+ it('should return deny when purpose 4 consent is withheld', () => {
486
+ setEnforcementConfig({
487
+ gdpr: {
488
+ rules: [{
489
+ purpose: 'personalizedAds',
490
+ enforcePurpose: true,
491
+ enforceVendor: true,
492
+ }]
493
+ }
494
+ });
495
+ Object.assign(gvlids, {
496
+ mockBidder: 123
497
+ });
498
+ const consent = setupConsentData();
499
+ consent.vendorData.purpose.consents[4] = true;
500
+ consent.vendorData.vendor.consents[123] = false;
501
+ expectAllow(false, ufpdRule(activityParams(MODULE_TYPE_BIDDER, 'mockBidder')))
502
+ });
503
+ });
504
+
465
505
  describe('validateRules', function () {
466
506
  const createGdprRule = (purposeName = 'storage', enforcePurpose = true, enforceVendor = true, vendorExceptions = [], softVendorExceptions = []) => ({
467
507
  purpose: purposeName,
@@ -599,7 +639,8 @@ describe('gdpr enforcement', function () {
599
639
  Object.entries({
600
640
  'storage': 1,
601
641
  'basicAds': 2,
602
- 'measurement': 7
642
+ 'measurement': 7,
643
+ 'personalizedAds': 4,
603
644
  }).forEach(([purpose, purposeNo]) => {
604
645
  describe(`for purpose ${purpose}`, () => {
605
646
  const rule = createGdprRule(purpose);
@@ -0,0 +1,119 @@
1
+ import {config as _config, config} from 'src/config.js';
2
+ import { expect } from 'chai';
3
+ import * as events from 'src/events.js';
4
+ import * as prebidGlobal from 'src/prebidGlobal.js';
5
+ import { geolocationSubmodule } from 'modules/geolocationRtdProvider.js';
6
+ import * as utils from 'src/utils.js';
7
+ import {getGlobal} from 'src/prebidGlobal.js';
8
+ import 'src/prebid.js';
9
+
10
+ describe('Geolocation RTD Provider', function () {
11
+ let sandbox;
12
+ let placeholder;
13
+ const pbjs = getGlobal();
14
+ const adUnit = {
15
+ code: 'ad-slot-1',
16
+ mediaTypes: {
17
+ banner: {
18
+ sizes: [ [300, 250] ]
19
+ }
20
+ },
21
+ bids: [
22
+ {
23
+ bidder: 'fake'
24
+ }
25
+ ]
26
+ };
27
+ const providerConfig = {name: 'geolocation', waitForIt: true};
28
+ const rtdConfig = {realTimeData: {auctionDelay: 200, dataProviders: [providerConfig]}}
29
+ describe('Geolocation not supported', function() {
30
+ beforeEach(function() {
31
+ sandbox = sinon.sandbox.create();
32
+ });
33
+ afterEach(function() {
34
+ sandbox.restore();
35
+ sandbox = undefined;
36
+ });
37
+ it('init should return false', function () {
38
+ if (navigator.permissions) { sandbox.stub(navigator.permissions, 'query').value(undefined); expect(geolocationSubmodule.init({})).is.false; }
39
+ });
40
+ });
41
+ describe('Geolocation supported', function() {
42
+ beforeEach(function() {
43
+ sandbox = sinon.sandbox.create();
44
+ // placeholder = createDiv();
45
+ // append();
46
+ const __config = {};
47
+ sandbox.stub(_config, 'getConfig').callsFake(function (path) {
48
+ return utils.deepAccess(__config, path);
49
+ });
50
+ sandbox.stub(_config, 'setConfig').callsFake(function (obj) {
51
+ utils.mergeDeep(__config, obj);
52
+ });
53
+ });
54
+ afterEach(function() {
55
+ sandbox.restore();
56
+ // remove();
57
+ sandbox = undefined;
58
+ placeholder = undefined;
59
+ pbjs.removeAdUnit();
60
+ });
61
+ it('init should return true', function () {
62
+ navigator.permissions && expect(geolocationSubmodule.init({})).is.true;
63
+ });
64
+ it('should set geolocation. (request all)', function(done) {
65
+ navigator.permissions && sandbox.stub(navigator.permissions, 'query').value(() => Promise.resolve({
66
+ state: 'granted',
67
+ }));
68
+ navigator.geolocation && sandbox.stub(navigator.geolocation, 'getCurrentPosition').value((cb) => {
69
+ // eslint-disable-next-line standard/no-callback-literal
70
+ cb({coords: {latitude: 1, longitude: 1}});
71
+ });
72
+ pbjs.addAdUnits([utils.deepClone(adUnit)]);
73
+ config.setConfig(rtdConfig);
74
+ const onDone = sandbox.stub();
75
+ const requestBidObject = {};
76
+ geolocationSubmodule.init({});
77
+ geolocationSubmodule.getBidRequestData(
78
+ requestBidObject,
79
+ onDone,
80
+ providerConfig
81
+ );
82
+ expect(pbjs.adUnits.length).to.eq(1);
83
+ setTimeout(function() {
84
+ // expect(requestBidObject?.ortb2Fragments?.global.device.geo?.type).to.eq(1);
85
+ done();
86
+ }, 300);
87
+ });
88
+ it('should call done due timeout', function(done) {
89
+ // sandbox.stub(navigator.permissions, 'query').value(() => new Promise(() => {}));
90
+ // sandbox.stub(navigator.geolocation, 'getCurrentPosition').value((cb) => {});
91
+ config.setConfig(rtdConfig);
92
+ // remove();
93
+ const onDone = sandbox.stub();
94
+ const requestBidObject = {adUnits: [utils.deepClone(adUnit)]};
95
+ geolocationSubmodule.init({});
96
+ geolocationSubmodule.getBidRequestData(
97
+ requestBidObject,
98
+ onDone,
99
+ {...providerConfig, test: 1}
100
+ );
101
+ setTimeout(function() {
102
+ sinon.assert.calledOnce(onDone);
103
+ expect(requestBidObject).to.not.have.property('ortb2Fragments.global.device.geo');
104
+ done();
105
+ }, 300);
106
+ });
107
+ });
108
+ // function createDiv() {
109
+ // const div = document.createElement('div');
110
+ // div.id = adUnit.code;
111
+ // return div;
112
+ // }
113
+ // function append() {
114
+ // placeholder && document.body.appendChild(placeholder);
115
+ // }
116
+ // function remove() {
117
+ // placeholder && placeholder.parentElement && placeholder.parentElement.removeChild(placeholder);
118
+ // }
119
+ });
@@ -18,7 +18,7 @@ describe('greenbidsRtdProvider', () => {
18
18
  server.restore();
19
19
  });
20
20
 
21
- const endPoint = 'europe-west1-greenbids-357713.cloudfunctions.net';
21
+ const endPoint = 't.greenbids.ai';
22
22
 
23
23
  const SAMPLE_MODULE_CONFIG = {
24
24
  params: {
@@ -2,6 +2,7 @@ import { expect } from 'chai';
2
2
  import { spec, resetUserSync, getSyncUrl, storage } from 'modules/gridBidAdapter.js';
3
3
  import { newBidder } from 'src/adapters/bidderFactory.js';
4
4
  import { config } from 'src/config.js';
5
+ import {ENDPOINT_DOMAIN, ENDPOINT_PROTOCOL} from '../../../modules/adpartnerBidAdapter';
5
6
 
6
7
  describe('TheMediaGrid Adapter', function () {
7
8
  const adapter = newBidder(spec);
@@ -1465,6 +1466,47 @@ describe('TheMediaGrid Adapter', function () {
1465
1466
  });
1466
1467
  });
1467
1468
 
1469
+ describe('onDataDeletionRequest', function() {
1470
+ let ajaxStub;
1471
+ beforeEach(function() {
1472
+ ajaxStub = sinon.stub(spec, 'ajaxCall');
1473
+ });
1474
+
1475
+ it('should send right request on onDataDeletionRequest call', function() {
1476
+ spec.onDataDeletionRequest([{
1477
+ bids: [
1478
+ {
1479
+ bidder: 'grid',
1480
+ params: {
1481
+ uid: 1
1482
+ }
1483
+ },
1484
+ {
1485
+ bidder: 'grid',
1486
+ params: {
1487
+ uid: 2
1488
+ }
1489
+ },
1490
+ {
1491
+ bidder: 'another',
1492
+ params: {
1493
+ uid: 3
1494
+ }
1495
+ },
1496
+ {
1497
+ bidder: 'gridNM',
1498
+ params: {
1499
+ uid: 4
1500
+ }
1501
+ }
1502
+ ],
1503
+ }]);
1504
+ expect(ajaxStub.calledOnce).to.equal(true);
1505
+ expect(ajaxStub.firstCall.args[0]).to.equal('https://media.grid.bidswitch.net/uspapi_delete');
1506
+ expect(ajaxStub.firstCall.args[2]).to.equal('{"uids":[1,2,4]}');
1507
+ });
1508
+ });
1509
+
1468
1510
  describe('user sync', function () {
1469
1511
  const syncUrl = getSyncUrl();
1470
1512
 
@@ -407,6 +407,24 @@ describe('ID5 ID System', function () {
407
407
  })
408
408
  });
409
409
 
410
+ it('should call the ID5 server for config with partner id being a string', function () {
411
+ let xhrServerMock = new XhrServerMock(sinon.createFakeServer())
412
+ let id5FetchConfig = getId5FetchConfig();
413
+ id5FetchConfig.params.partner = '173';
414
+ let submoduleResponse = callSubmoduleGetId(id5FetchConfig, undefined, undefined);
415
+
416
+ return xhrServerMock.expectConfigRequest()
417
+ .then(configRequest => {
418
+ let requestBody = JSON.parse(configRequest.requestBody)
419
+ expect(requestBody.params.partner).is.eq(173)
420
+ return xhrServerMock.respondWithConfigAndExpectNext(configRequest)
421
+ })
422
+ .then(fetchRequest => {
423
+ fetchRequest.respond(200, responseHeader, JSON.stringify(ID5_JSON_RESPONSE));
424
+ return submoduleResponse
425
+ })
426
+ });
427
+
410
428
  it('should call the ID5 server for config with overridden url', function () {
411
429
  let xhrServerMock = new XhrServerMock(sinon.createFakeServer())
412
430
  let id5FetchConfig = getId5FetchConfig();