prebid.js 8.0.0 → 8.2.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 (232) hide show
  1. package/.devcontainer/devcontainer.json +3 -1
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.js +1 -1
  4. package/dist/adagioBidAdapter.js +1 -1
  5. package/dist/adbookpspBidAdapter.js +1 -1
  6. package/dist/adgenerationBidAdapter.js +1 -1
  7. package/dist/admanBidAdapter.js +1 -1
  8. package/dist/adqueryBidAdapter.js +1 -1
  9. package/dist/adrelevantisBidAdapter.js +1 -1
  10. package/dist/adtrgtmeBidAdapter.js +1 -1
  11. package/dist/adxcgBidAdapter.js +1 -1
  12. package/dist/adyoulikeBidAdapter.js +1 -1
  13. package/dist/ajaBidAdapter.js +1 -1
  14. package/dist/amxBidAdapter.js +1 -1
  15. package/dist/amxIdSystem.js +1 -1
  16. package/dist/appierAnalyticsAdapter.js +1 -1
  17. package/dist/appnexusBidAdapter.js +1 -1
  18. package/dist/asoBidAdapter.js +1 -1
  19. package/dist/axonixBidAdapter.js +1 -1
  20. package/dist/bedigitechBidAdapter.js +1 -1
  21. package/dist/beopBidAdapter.js +1 -1
  22. package/dist/bidglassBidAdapter.js +1 -1
  23. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  24. package/dist/big-richmediaBidAdapter.js +1 -1
  25. package/dist/bridBidAdapter.js +1 -0
  26. package/dist/bridgewellBidAdapter.js +1 -1
  27. package/dist/brightMountainMediaBidAdapter.js +1 -1
  28. package/dist/carodaBidAdapter.js +1 -1
  29. package/dist/categoryTranslation.js +1 -1
  30. package/dist/chtnwBidAdapter.js +1 -1
  31. package/dist/cmp.js +1 -0
  32. package/dist/colossussspBidAdapter.js +1 -1
  33. package/dist/conceptxBidAdapter.js +1 -1
  34. package/dist/concertBidAdapter.js +1 -1
  35. package/dist/connectadBidAdapter.js +1 -1
  36. package/dist/consentManagement.js +1 -1
  37. package/dist/consentManagementGpp.js +1 -1
  38. package/dist/consentManagementUsp.js +1 -1
  39. package/dist/consumableBidAdapter.js +1 -1
  40. package/dist/conversantAnalyticsAdapter.js +1 -1
  41. package/dist/conversantBidAdapter.js +1 -1
  42. package/dist/craftBidAdapter.js +1 -1
  43. package/dist/criteoBidAdapter.js +1 -1
  44. package/dist/cwireBidAdapter.js +1 -1
  45. package/dist/dependencies.json +15 -0
  46. package/dist/dspxBidAdapter.js +1 -1
  47. package/dist/eplanningBidAdapter.js +1 -1
  48. package/dist/euidIdSystem.js +1 -1
  49. package/dist/feedadBidAdapter.js +1 -1
  50. package/dist/finativeBidAdapter.js +1 -1
  51. package/dist/freepassBidAdapter.js +1 -0
  52. package/dist/freewheel-sspBidAdapter.js +1 -1
  53. package/dist/gmosspBidAdapter.js +1 -1
  54. package/dist/goldbachBidAdapter.js +1 -1
  55. package/dist/gppControl_usnat.js +1 -0
  56. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  57. package/dist/greenbidsRtdProvider.js +1 -1
  58. package/dist/gridBidAdapter.js +1 -1
  59. package/dist/gumgumBidAdapter.js +1 -1
  60. package/dist/h12mediaBidAdapter.js +1 -1
  61. package/dist/hypelabBidAdapter.js +1 -1
  62. package/dist/id5IdSystem.js +1 -1
  63. package/dist/imdsBidAdapter.js +1 -1
  64. package/dist/improvedigitalBidAdapter.js +1 -1
  65. package/dist/insticatorBidAdapter.js +1 -1
  66. package/dist/intentIqIdSystem.js +1 -1
  67. package/dist/ixBidAdapter.js +1 -1
  68. package/dist/justpremiumBidAdapter.js +1 -1
  69. package/dist/kargoBidAdapter.js +1 -1
  70. package/dist/kiviadsBidAdapter.js +1 -0
  71. package/dist/konduitAnalyticsAdapter.js +1 -1
  72. package/dist/kueezBidAdapter.js +1 -1
  73. package/dist/kueezRtbBidAdapter.js +1 -1
  74. package/dist/kulturemediaBidAdapter.js +1 -1
  75. package/dist/lassoBidAdapter.js +1 -1
  76. package/dist/lifestreetBidAdapter.js +1 -1
  77. package/dist/liveIntentIdSystem.js +1 -1
  78. package/dist/logicadBidAdapter.js +1 -1
  79. package/dist/loglyliftBidAdapter.js +1 -1
  80. package/dist/magniteAnalyticsAdapter.js +1 -1
  81. package/dist/malltvAnalyticsAdapter.js +1 -1
  82. package/dist/marsmediaBidAdapter.js +1 -1
  83. package/dist/mediafuseBidAdapter.js +1 -1
  84. package/dist/mediasquareBidAdapter.js +1 -1
  85. package/dist/mgidBidAdapter.js +1 -1
  86. package/dist/mgidXBidAdapter.js +1 -0
  87. package/dist/minutemediaBidAdapter.js +1 -1
  88. package/dist/minutemediaplusBidAdapter.js +1 -1
  89. package/dist/mspa.js +1 -0
  90. package/dist/nexx360BidAdapter.js +1 -1
  91. package/dist/not-for-prod/prebid.js +146 -139
  92. package/dist/oguryBidAdapter.js +1 -1
  93. package/dist/onetagBidAdapter.js +1 -1
  94. package/dist/ooloAnalyticsAdapter.js +1 -1
  95. package/dist/optidigitalBidAdapter.js +1 -1
  96. package/dist/outbrainBidAdapter.js +1 -1
  97. package/dist/oxxionAnalyticsAdapter.js +1 -1
  98. package/dist/oxxionRtdProvider.js +1 -1
  99. package/dist/parrableIdSystem.js +1 -1
  100. package/dist/pixfutureBidAdapter.js +1 -1
  101. package/dist/prebid-core.js +1 -1
  102. package/dist/publinkIdSystem.js +1 -1
  103. package/dist/pubmaticBidAdapter.js +1 -1
  104. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  105. package/dist/pxyzBidAdapter.js +1 -1
  106. package/dist/quantcastBidAdapter.js +1 -1
  107. package/dist/readpeakBidAdapter.js +1 -1
  108. package/dist/relaidoBidAdapter.js +1 -1
  109. package/dist/retailspotBidAdapter.js +1 -1
  110. package/dist/rhythmoneBidAdapter.js +1 -1
  111. package/dist/riseBidAdapter.js +1 -1
  112. package/dist/rtbhouseBidAdapter.js +1 -1
  113. package/dist/rubiconBidAdapter.js +1 -1
  114. package/dist/seedingAllianceBidAdapter.js +1 -1
  115. package/dist/seedtagBidAdapter.js +1 -1
  116. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  117. package/dist/sharethroughBidAdapter.js +1 -1
  118. package/dist/shinezBidAdapter.js +1 -1
  119. package/dist/smaatoBidAdapter.js +1 -1
  120. package/dist/smartadserverBidAdapter.js +1 -1
  121. package/dist/smartxBidAdapter.js +1 -1
  122. package/dist/smilewantedBidAdapter.js +1 -1
  123. package/dist/sonobiBidAdapter.js +1 -1
  124. package/dist/sovrnAnalyticsAdapter.js +1 -1
  125. package/dist/sovrnBidAdapter.js +1 -1
  126. package/dist/sspBCBidAdapter.js +1 -1
  127. package/dist/stvBidAdapter.js +1 -1
  128. package/dist/sublimeBidAdapter.js +1 -1
  129. package/dist/targetVideoBidAdapter.js +1 -1
  130. package/dist/teadsBidAdapter.js +1 -1
  131. package/dist/trionBidAdapter.js +1 -1
  132. package/dist/tripleliftBidAdapter.js +1 -1
  133. package/dist/ttdBidAdapter.js +1 -1
  134. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  135. package/dist/uid2IdSystem.js +1 -1
  136. package/dist/underdogmediaBidAdapter.js +1 -1
  137. package/dist/undertoneBidAdapter.js +1 -1
  138. package/dist/userId.js +1 -1
  139. package/dist/vidazooBidAdapter.js +1 -1
  140. package/dist/videobyteBidAdapter.js +1 -1
  141. package/dist/visxBidAdapter.js +1 -1
  142. package/dist/vuukleBidAdapter.js +1 -1
  143. package/dist/widespaceBidAdapter.js +1 -1
  144. package/dist/winrBidAdapter.js +1 -1
  145. package/dist/yahoosspBidAdapter.js +1 -1
  146. package/dist/yieldmoBidAdapter.js +1 -1
  147. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  148. package/libraries/cmp/cmpClient.js +139 -0
  149. package/libraries/mspa/activityControls.js +91 -0
  150. package/modules/admanBidAdapter.js +5 -0
  151. package/modules/amxBidAdapter.js +11 -12
  152. package/modules/bedigitechBidAdapter.js +15 -12
  153. package/modules/bedigitechBidAdapter.md +2 -2
  154. package/modules/beopBidAdapter.js +0 -4
  155. package/modules/bidwatchAnalyticsAdapter.js +33 -5
  156. package/modules/bridBidAdapter.js +223 -0
  157. package/modules/categoryTranslation.js +3 -2
  158. package/modules/colossussspBidAdapter.js +9 -0
  159. package/modules/conceptxBidAdapter.js +6 -3
  160. package/modules/consentManagement.js +12 -86
  161. package/modules/consentManagementGpp.js +47 -126
  162. package/modules/consentManagementUsp.js +19 -97
  163. package/modules/freepassBidAdapter.js +98 -0
  164. package/modules/freepassBidAdapter.md +31 -0
  165. package/modules/freepassIdSystem.md +1 -1
  166. package/modules/gppControl_usnat.js +11 -0
  167. package/modules/greenbidsAnalyticsAdapter.js +7 -13
  168. package/modules/gridBidAdapter.js +3 -4
  169. package/modules/intentIqIdSystem.js +11 -9
  170. package/modules/ixBidAdapter.js +284 -55
  171. package/modules/kiviadsBidAdapter.js +212 -0
  172. package/modules/kiviadsBidAdapter.md +79 -0
  173. package/modules/liveIntentIdSystem.js +8 -3
  174. package/modules/mediasquareBidAdapter.js +19 -23
  175. package/modules/mgidXBidAdapter.js +263 -0
  176. package/modules/mgidXBidAdapter.md +79 -0
  177. package/modules/oxxionAnalyticsAdapter.js +33 -5
  178. package/modules/oxxionRtdProvider.js +124 -11
  179. package/modules/oxxionRtdProvider.md +19 -4
  180. package/modules/pubmaticBidAdapter.js +18 -2
  181. package/modules/rtbhouseBidAdapter.js +9 -2
  182. package/modules/rtbhouseBidAdapter.md +27 -8
  183. package/modules/rubiconBidAdapter.js +13 -1
  184. package/modules/sharethroughBidAdapter.js +14 -0
  185. package/modules/sonobiBidAdapter.js +4 -7
  186. package/modules/tripleliftBidAdapter.js +21 -1
  187. package/modules/userId/eids.js +29 -0
  188. package/modules/userId/eids.md +19 -2
  189. package/modules/userId/index.js +78 -29
  190. package/modules/userId/userId.md +3 -0
  191. package/package.json +1 -1
  192. package/src/activities/params.js +4 -1
  193. package/test/spec/libraries/cmp/cmpClient_spec.js +233 -0
  194. package/test/spec/libraries/mspa/activityControls_spec.js +315 -0
  195. package/test/spec/modules/admanBidAdapter_spec.js +8 -2
  196. package/test/spec/modules/adqueryBidAdapter_spec.js +5 -1
  197. package/test/spec/modules/amxBidAdapter_spec.js +6 -3
  198. package/test/spec/modules/bedigitechBidAdapter_spec.js +25 -36
  199. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +21 -1
  200. package/test/spec/modules/bridBidAdapter_spec.js +129 -0
  201. package/test/spec/modules/byDataAnalyticsAdapter_spec.js +9 -7
  202. package/test/spec/modules/chtnwBidAdapter_spec.js +4 -1
  203. package/test/spec/modules/colossussspBidAdapter_spec.js +29 -0
  204. package/test/spec/modules/consentManagementGpp_spec.js +84 -7
  205. package/test/spec/modules/consentManagement_spec.js +8 -18
  206. package/test/spec/modules/datablocksBidAdapter_spec.js +7 -3
  207. package/test/spec/modules/eids_spec.js +87 -0
  208. package/test/spec/modules/freepassBidAdapter_spec.js +161 -0
  209. package/test/spec/modules/greenbidsAnalyticsAdapter_spec.js +0 -15
  210. package/test/spec/modules/gridBidAdapter_spec.js +29 -28
  211. package/test/spec/modules/insticatorBidAdapter_spec.js +6 -2
  212. package/test/spec/modules/intentIqIdSystem_spec.js +36 -2
  213. package/test/spec/modules/ixBidAdapter_spec.js +785 -15
  214. package/test/spec/modules/kiviadsBidAdapter_spec.js +404 -0
  215. package/test/spec/modules/lassoBidAdapter_spec.js +6 -4
  216. package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +17 -2
  217. package/test/spec/modules/liveIntentIdSystem_spec.js +11 -6
  218. package/test/spec/modules/mediasquareBidAdapter_spec.js +3 -0
  219. package/test/spec/modules/mgidXBidAdapter_spec.js +426 -0
  220. package/test/spec/modules/onetagBidAdapter_spec.js +81 -75
  221. package/test/spec/modules/orbidderBidAdapter_spec.js +6 -3
  222. package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +21 -2
  223. package/test/spec/modules/oxxionRtdProvider_spec.js +113 -1
  224. package/test/spec/modules/pubmaticBidAdapter_spec.js +25 -0
  225. package/test/spec/modules/relaidoBidAdapter_spec.js +4 -3
  226. package/test/spec/modules/rtbhouseBidAdapter_spec.js +35 -0
  227. package/test/spec/modules/rubiconBidAdapter_spec.js +41 -0
  228. package/test/spec/modules/sharethroughBidAdapter_spec.js +75 -0
  229. package/test/spec/modules/sonobiBidAdapter_spec.js +15 -15
  230. package/test/spec/modules/tripleliftBidAdapter_spec.js +20 -1
  231. package/test/spec/modules/ucfunnelBidAdapter_spec.js +37 -16
  232. package/test/spec/modules/userId_spec.js +393 -6
@@ -1,4 +1,5 @@
1
1
  import oxxionAnalytics from 'modules/oxxionAnalyticsAdapter.js';
2
+ import {dereferenceWithoutRenderer} from 'modules/oxxionAnalyticsAdapter.js';
2
3
  import { expect } from 'chai';
3
4
  import { server } from 'test/mocks/xhr.js';
4
5
  let adapterManager = require('src/adapterManager').default;
@@ -155,7 +156,7 @@ describe('Oxxion Analytics', function () {
155
156
  'requestId': '34a63e5d5378a3',
156
157
  'transactionId': 'de664ccb-e18b-4436-aeb0-362382eb1b40',
157
158
  'auctionId': '1e8b993d-8f0a-4232-83eb-3639ddf3a44b',
158
- 'mediaType': 'banner',
159
+ 'mediaType': 'video',
159
160
  'source': 'client',
160
161
  'cpm': 27.4276,
161
162
  'creativeId': '158534630',
@@ -168,6 +169,7 @@ describe('Oxxion Analytics', function () {
168
169
  'example.com'
169
170
  ]
170
171
  },
172
+ 'renderer': 'something',
171
173
  'originalCpm': 25.02521,
172
174
  'originalCurrency': 'EUR',
173
175
  'responseTimestamp': 1647424261559,
@@ -221,6 +223,7 @@ describe('Oxxion Analytics', function () {
221
223
  'example.com'
222
224
  ]
223
225
  },
226
+ 'renderer': 'something',
224
227
  'originalCpm': 25.02521,
225
228
  'originalCurrency': 'EUR',
226
229
  'responseTimestamp': 1647424261558,
@@ -267,7 +270,24 @@ describe('Oxxion Analytics', function () {
267
270
  oxxionAnalytics.disableAnalytics();
268
271
  oxxionAnalytics.track.restore();
269
272
  });
273
+ it('test dereferenceWithoutRenderer', function () {
274
+ adapterManager.registerAnalyticsAdapter({
275
+ code: 'oxxion',
276
+ adapter: oxxionAnalytics
277
+ });
270
278
 
279
+ adapterManager.enableAnalytics({
280
+ provider: 'oxxion',
281
+ options: {
282
+ domain: 'test'
283
+ }
284
+ });
285
+ let resultBidWon = JSON.parse(dereferenceWithoutRenderer(bidWon));
286
+ expect(resultBidWon).not.to.have.property('renderer');
287
+ let resultBid = JSON.parse(dereferenceWithoutRenderer(auctionEnd));
288
+ expect(resultBid).to.have.property('bidsReceived').and.to.have.lengthOf(1);
289
+ expect(resultBid.bidsReceived[0]).not.to.have.property('renderer');
290
+ });
271
291
  it('test auctionEnd', function () {
272
292
  adapterManager.registerAnalyticsAdapter({
273
293
  code: 'oxxion',
@@ -297,7 +317,6 @@ describe('Oxxion Analytics', function () {
297
317
  expect(message.auctionEnd[0]).to.have.property('bidderRequests').and.to.have.lengthOf(1);
298
318
  expect(message.auctionEnd[0].bidderRequests[0]).to.have.property('gdprConsent');
299
319
  expect(message.auctionEnd[0].bidderRequests[0].gdprConsent).not.to.have.property('vendorData');
300
- sinon.assert.callCount(oxxionAnalytics.track, 5);
301
320
  });
302
321
 
303
322
  it('test bidWon', function() {
@@ -6,7 +6,10 @@ const utils = require('src/utils.js');
6
6
  const moduleConfig = {
7
7
  params: {
8
8
  domain: 'test.endpoint',
9
- contexts: ['instream', 'outstream']
9
+ contexts: ['instream', 'outstream'],
10
+ samplingRate: 10,
11
+ threshold: false,
12
+ bidders: ['appnexus', 'mediasquare'],
10
13
  }
11
14
  };
12
15
 
@@ -31,6 +34,14 @@ let request = {
31
34
  ],
32
35
  'transactionId': 'de664ccb-e18b-4436-aeb0-362382eb1b41'
33
36
  },
37
+ {
38
+ 'code': 'msq_tag_200125_banner',
39
+ 'mediaTypes': { 'banner': { 'sizes': [[300, 250]] } },
40
+ 'bids': [
41
+ {'bidder': 'appnexusAst', 'params': {'placementId': 345678}},
42
+ ],
43
+ 'transactionId': 'de664ccb-e18b-4436-aeb0-362382eb1b41'
44
+ }
34
45
  ]
35
46
  };
36
47
 
@@ -102,6 +113,93 @@ let bids = [{
102
113
  },
103
114
  ];
104
115
 
116
+ let originalBidderRequests = [{
117
+ 'bidderCode': 'rubicon',
118
+ 'auctionId': 'dd42b870-2072-4b71-8ab7-e7789b14c5ce',
119
+ 'bidderRequestId': '16c2bceb2e891a',
120
+ 'bids': [
121
+ {
122
+ 'bidder': 'rubicon',
123
+ 'params': {
124
+ 'accountId': 1234,
125
+ 'siteId': 2345,
126
+ 'zoneId': 3456
127
+ },
128
+ 'auctionId': 'dd42b870-2072-4b71-8ab7-e7789b14c5ce',
129
+ 'mediaTypes': {'banner': {'sizes': [[970, 250]]}},
130
+ 'adUnitCode': 'adunit1',
131
+ 'transactionId': '8f20b49c-5e47-4bb5-a7d5-0b816cf527f3',
132
+ 'bidId': '2d9920072ab028',
133
+ 'bidderRequestId': '16c2bceb2e891a',
134
+ },
135
+ {
136
+ 'bidder': 'rubicon',
137
+ 'params': {
138
+ 'accountId': 1234,
139
+ 'siteId': 2345,
140
+ 'zoneId': 4567
141
+ },
142
+ 'auctionId': 'dd42b870-2072-4b71-8ab7-e7789b14c5ce',
143
+ 'mediaTypes': {'banner': {'sizes': [[300, 250]]}},
144
+ 'adUnitCode': 'adunit2',
145
+ 'transactionId': '4161f09e-7870-4486-b2a6-b4158a327bc4',
146
+ 'bidId': '331c3d708f4864',
147
+ 'bidderRequestId': '16c2bceb2e891a',
148
+ 'src': 'client',
149
+ }
150
+ ],
151
+ 'auctionStart': 1683383333809,
152
+ 'timeout': 3000,
153
+ 'gdprConsent': {
154
+ 'consentString': 'consent_hash',
155
+ 'gdprApplies': true,
156
+ 'apiVersion': 2
157
+ }
158
+ },
159
+ {
160
+ 'bidderCode': 'appnexusAst',
161
+ 'auctionId': 'dd42b870-2072-4b71-8ab7-e7789b14c5ce',
162
+ 'bidderRequestId': '4d83b8c60d45e7',
163
+ 'bids': [
164
+ {
165
+ 'bidder': 'appnexusAst',
166
+ 'params': {
167
+ 'placementId': 10471298
168
+ },
169
+ 'auctionId': 'dd42b870-2072-4b71-8ab7-e7789b14c5ce',
170
+ 'mediaTypes': {'banner': {'sizes': [[300, 250]]}},
171
+ 'adUnitCode': 'adunit2',
172
+ 'transactionId': '4161f09e-7870-4486-b2a6-b4158a327bc4',
173
+ 'bidId': '5b7cd5abc6aea3',
174
+ 'bidderRequestId': '4d83b8c60d45e7',
175
+ }
176
+ ],
177
+ 'auctionStart': 1683383333809,
178
+ 'timeout': 3000,
179
+ 'gdprConsent': {
180
+ 'consentString': 'consent_hash',
181
+ 'gdprApplies': true,
182
+ 'apiVersion': 2
183
+ }
184
+ }
185
+ ];
186
+
187
+ let bidInterests = [
188
+ {'id': 0, 'rate': 50.0, 'suggestion': true},
189
+ {'id': 1, 'rate': 12.0, 'suggestion': false},
190
+ {'id': 2, 'rate': 0.0, 'suggestion': true},
191
+ {'id': 3, 'rate': 0.0, 'suggestion': false},
192
+ ];
193
+
194
+ const userConsent = {
195
+ 'gdpr': {
196
+ 'consentString': 'consent_hash'
197
+ },
198
+ 'usp': null,
199
+ 'gpp': null,
200
+ 'coppa': false
201
+ };
202
+
105
203
  describe('oxxionRtdProvider', () => {
106
204
  describe('Oxxion RTD sub module', () => {
107
205
  it('should init, return true, and set the params', () => {
@@ -117,6 +215,20 @@ describe('oxxionRtdProvider', () => {
117
215
  oxxionSubmodule.onBidResponseEvent(auctionEnd.bidsReceived[0], moduleConfig);
118
216
  oxxionSubmodule.onBidResponseEvent(auctionEnd.bidsReceived[1], moduleConfig);
119
217
  });
218
+ it('check bid filtering', function() {
219
+ let requestsList = oxxionSubmodule.getRequestsList(request);
220
+ expect(requestsList.length).to.equal(4);
221
+ expect(requestsList[0]).to.have.property('id');
222
+ expect(request.adUnits[0].bids[0]).to.have.property('_id');
223
+ expect(requestsList[0].id).to.equal(request.adUnits[0].bids[0]._id);
224
+ const [filteredBiddderRequests, filteredBids] = oxxionSubmodule.getFilteredAdUnitsOnBidRates(bidInterests, request.adUnits, moduleConfig.params, false);
225
+ expect(filteredBids.length).to.equal(1);
226
+ expect(filteredBiddderRequests.length).to.equal(3);
227
+ expect(filteredBiddderRequests[0]).to.have.property('bids');
228
+ expect(filteredBiddderRequests[0].bids.length).to.equal(1);
229
+ expect(filteredBiddderRequests[1]).to.have.property('bids');
230
+ expect(filteredBiddderRequests[1].bids.length).to.equal(1);
231
+ });
120
232
  it('check vastImpUrl', function() {
121
233
  expect(auctionEnd.bidsReceived[0]).to.have.property('vastImpUrl');
122
234
  let expectVastImpUrl = 'https://' + moduleConfig.params.domain + '.oxxion.io/analytics/vast_imp?';
@@ -3056,6 +3056,31 @@ describe('PubMatic adapter', function () {
3056
3056
  expect(data.imp[0]['video']['h']).to.equal(videoBidRequests[0].mediaTypes.video.playerSize[1]);
3057
3057
  });
3058
3058
  }
3059
+
3060
+ describe('Fledge', function() {
3061
+ it('should not send imp.ext.ae when FLEDGE is disabled, ', function () {
3062
+ let bidRequest = Object.assign([], bidRequests);
3063
+ bidRequest[0].ortb2Imp = {
3064
+ ext: { ae: 1 }
3065
+ };
3066
+ const req = spec.buildRequests(bidRequest, { ...bidRequest, fledgeEnabled: false });
3067
+ let data = JSON.parse(req.data);
3068
+ if (data.imp[0].ext) {
3069
+ expect(data.imp[0].ext).to.not.have.property('ae');
3070
+ }
3071
+ });
3072
+
3073
+ it('when FLEDGE is enabled, should send whatever is set in ortb2imp.ext.ae in all bid requests', function () {
3074
+ let bidRequest = Object.assign([], bidRequests);
3075
+ delete bidRequest[0].params.test;
3076
+ bidRequest[0].ortb2Imp = {
3077
+ ext: { ae: 1 }
3078
+ };
3079
+ const req = spec.buildRequests(bidRequest, { ...bidRequest, fledgeEnabled: true });
3080
+ let data = JSON.parse(req.data);
3081
+ expect(data.imp[0].ext.ae).to.equal(1);
3082
+ });
3083
+ });
3059
3084
  });
3060
3085
 
3061
3086
  it('Request params dctr check', function () {
@@ -7,9 +7,6 @@ import {getCoreStorageManager} from '../../../src/storageManager.js';
7
7
  const UUID_KEY = 'relaido_uuid';
8
8
  const relaido_uuid = 'hogehoge';
9
9
 
10
- const storage = getCoreStorageManager();
11
- storage.setCookie(UUID_KEY, relaido_uuid);
12
-
13
10
  describe('RelaidoAdapter', function () {
14
11
  let bidRequest;
15
12
  let bidderRequest;
@@ -18,6 +15,10 @@ describe('RelaidoAdapter', function () {
18
15
  let serverRequest;
19
16
  let generateUUIDStub;
20
17
  let triggerPixelStub;
18
+ before(() => {
19
+ const storage = getCoreStorageManager();
20
+ storage.setCookie(UUID_KEY, relaido_uuid);
21
+ });
21
22
 
22
23
  beforeEach(function () {
23
24
  generateUUIDStub = sinon.stub(utils, 'generateUUID').returns(relaido_uuid);
@@ -318,6 +318,41 @@ describe('RTBHouseAdapter', () => {
318
318
  expect(request.method).to.equal('POST');
319
319
  });
320
320
 
321
+ it('sets default fledgeConfig object values when none available from config', function () {
322
+ let bidRequest = Object.assign([], bidRequests);
323
+ delete bidRequest[0].params.test;
324
+
325
+ config.setConfig({ fledgeConfig: false });
326
+ const request = spec.buildRequests(bidRequest, { ...bidderRequest, fledgeEnabled: true });
327
+ const data = JSON.parse(request.data);
328
+ expect(data.ext).to.exist.and.to.be.a('object');
329
+ expect(data.ext.fledge_config).to.exist.and.to.be.a('object');
330
+ expect(data.ext.fledge_config).to.contain.keys('seller', 'decisionLogicUrl', 'sellerTimeout');
331
+ expect(data.ext.fledge_config.seller).to.equal('https://fledge-ssp.creativecdn.com');
332
+ expect(data.ext.fledge_config.decisionLogicUrl).to.equal('https://fledge-ssp.creativecdn.com/component-seller-prebid.js');
333
+ expect(data.ext.fledge_config.sellerTimeout).to.equal(500);
334
+ });
335
+
336
+ it('sets a fledgeConfig object values when available from config', function () {
337
+ let bidRequest = Object.assign([], bidRequests);
338
+ delete bidRequest[0].params.test;
339
+
340
+ config.setConfig({
341
+ fledgeConfig: {
342
+ seller: 'https://sellers.domain',
343
+ decisionLogicUrl: 'https://sellers.domain/decision.url'
344
+ }
345
+ });
346
+ const request = spec.buildRequests(bidRequest, { ...bidderRequest, fledgeEnabled: true });
347
+ const data = JSON.parse(request.data);
348
+ expect(data.ext).to.exist.and.to.be.a('object');
349
+ expect(data.ext.fledge_config).to.exist.and.to.be.a('object');
350
+ expect(data.ext.fledge_config).to.contain.keys('seller', 'decisionLogicUrl');
351
+ expect(data.ext.fledge_config.seller).to.equal('https://sellers.domain');
352
+ expect(data.ext.fledge_config.decisionLogicUrl).to.equal('https://sellers.domain/decision.url');
353
+ expect(data.ext.fledge_config.sellerTimeout).to.not.exist;
354
+ });
355
+
321
356
  it('when FLEDGE is disabled, should not send imp.ext.ae', function () {
322
357
  let bidRequest = Object.assign([], bidRequests);
323
358
  delete bidRequest[0].params.test;
@@ -825,6 +825,29 @@ describe('the rubicon adapter', function () {
825
825
  });
826
826
  });
827
827
 
828
+ describe('GPP Consent', function () {
829
+ it('should send gpp information if bidderRequest has a value for gppConsent', function () {
830
+ bidderRequest.gppConsent = {
831
+ gppString: 'consent',
832
+ applicableSections: 2
833
+ };
834
+ let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
835
+ let data = parseQuery(request.data);
836
+ delete bidderRequest.gppConsent;
837
+
838
+ expect(data['gpp']).to.equal('consent');
839
+ expect(data['gpp_sid']).to.equal('2');
840
+ });
841
+
842
+ it('should not send gpp information if bidderRequest does not have a value for gppConsent', function () {
843
+ let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
844
+ let data = parseQuery(request.data);
845
+
846
+ expect(data['gpp']).to.equal(undefined);
847
+ expect(data['gpp_sid']).to.equal(undefined);
848
+ });
849
+ });
850
+
828
851
  describe('first party data', function () {
829
852
  it('should not have any tg_v or tg_i params if all are undefined', function () {
830
853
  let params = {
@@ -3653,6 +3676,24 @@ describe('the rubicon adapter', function () {
3653
3676
  type: 'iframe', url: `${emilyUrl}?gdpr=1&gdpr_consent=foo&us_privacy=1NYN`
3654
3677
  });
3655
3678
  });
3679
+
3680
+ it('should pass gpp params when gppConsent is present', function () {
3681
+ expect(spec.getUserSyncs({iframeEnabled: true}, {}, {}, undefined, {
3682
+ gppString: 'foo',
3683
+ applicableSections: [2]
3684
+ })).to.deep.equal({
3685
+ type: 'iframe', url: `${emilyUrl}?gpp=foo&gpp_sid=2`
3686
+ });
3687
+ });
3688
+
3689
+ it('should pass multiple sid\'s when multiple are present', function () {
3690
+ expect(spec.getUserSyncs({iframeEnabled: true}, {}, {}, undefined, {
3691
+ gppString: 'foo',
3692
+ applicableSections: [2, 5]
3693
+ })).to.deep.equal({
3694
+ type: 'iframe', url: `${emilyUrl}?gpp=foo&gpp_sid=2,5`
3695
+ });
3696
+ });
3656
3697
  });
3657
3698
 
3658
3699
  describe('get price granularity', function () {
@@ -706,6 +706,81 @@ describe('sharethrough adapter spec', function () {
706
706
  expect(bannerBid.vastXml).to.equal('vastTag');
707
707
  });
708
708
  });
709
+
710
+ describe('meta object', () => {
711
+ beforeEach(() => {
712
+ request = spec.buildRequests(bidRequests, bidderRequest)[0];
713
+ response = {
714
+ body: {
715
+ seatbid: [{
716
+ bid: [{
717
+ id: '123',
718
+ impid: 'bidId1',
719
+ w: 300,
720
+ h: 250,
721
+ price: 42,
722
+ crid: 'creative',
723
+ dealid: 'deal',
724
+ adomain: ['domain.com'],
725
+ adm: 'markup',
726
+ }],
727
+ }],
728
+ },
729
+ };
730
+ });
731
+
732
+ it('should have null optional fields when the response\'s optional seatbid[].bid[].ext field is empty', () => {
733
+ const bid = spec.interpretResponse(response, request)[0];
734
+
735
+ expect(bid.meta.networkId).to.be.null;
736
+ expect(bid.meta.networkName).to.be.null;
737
+ expect(bid.meta.agencyId).to.be.null;
738
+ expect(bid.meta.agencyName).to.be.null;
739
+ expect(bid.meta.advertiserId).to.be.null;
740
+ expect(bid.meta.advertiserName).to.be.null;
741
+ expect(bid.meta.brandId).to.be.null;
742
+ expect(bid.meta.brandName).to.be.null;
743
+ expect(bid.meta.demandSource).to.be.null;
744
+ expect(bid.meta.dchain).to.be.null;
745
+ expect(bid.meta.primaryCatId).to.be.null;
746
+ expect(bid.meta.secondaryCatIds).to.be.null;
747
+ expect(bid.meta.mediaType).to.be.null;
748
+ });
749
+
750
+ it('should have populated fields when the response\'s optional seatbid[].bid[].ext fields are filled', () => {
751
+ response.body.seatbid[0].bid[0].ext = {
752
+ networkId: 'my network id',
753
+ networkName: 'my network name',
754
+ agencyId: 'my agency id',
755
+ agencyName: 'my agency name',
756
+ advertiserId: 'my advertiser id',
757
+ advertiserName: 'my advertiser name',
758
+ brandId: 'my brand id',
759
+ brandName: 'my brand name',
760
+ demandSource: 'my demand source',
761
+ dchain: { 'my key': 'my value' },
762
+ primaryCatId: 'my primary cat id',
763
+ secondaryCatIds: ['my', 'secondary', 'cat', 'ids'],
764
+ mediaType: 'my media type',
765
+ };
766
+
767
+ const bid = spec.interpretResponse(response, request)[0];
768
+
769
+ expect(bid.meta.networkId).to.equal('my network id');
770
+ expect(bid.meta.networkName).to.equal('my network name');
771
+ expect(bid.meta.agencyId).to.equal('my agency id');
772
+ expect(bid.meta.agencyName).to.equal('my agency name');
773
+ expect(bid.meta.advertiserId).to.equal('my advertiser id');
774
+ expect(bid.meta.advertiserName).to.equal('my advertiser name');
775
+ expect(bid.meta.brandId).to.equal('my brand id');
776
+ expect(bid.meta.brandName).to.equal('my brand name');
777
+ expect(bid.meta.demandSource).to.equal('my demand source');
778
+ expect(bid.meta.dchain).to.deep.equal({ 'my key': 'my value' });
779
+ expect(bid.meta.primaryCatId).to.equal('my primary cat id');
780
+ expect(bid.meta.secondaryCatIds).to.deep.equal(['my', 'secondary', 'cat', 'ids']);
781
+ expect(bid.meta.mediaType).to.equal('my media type');
782
+ });
783
+ });
709
784
  });
710
785
 
711
786
  describe('getUserSyncs', function () {
@@ -193,7 +193,7 @@ describe('SonobiBidAdapter', function () {
193
193
  });
194
194
 
195
195
  describe('outstream', () => {
196
- it('should return false if there is no param sizes', () => {
196
+ it('should return false if there is no playerSize', () => {
197
197
  const bid = {
198
198
  'bidder': 'sonobi',
199
199
  'adUnitCode': 'adunit-code',
@@ -203,7 +203,6 @@ describe('SonobiBidAdapter', function () {
203
203
  'mediaTypes': {
204
204
  video: {
205
205
  context: 'outstream',
206
- playerSize: [300, 250]
207
206
  }
208
207
  },
209
208
  'bidId': '30b31c1838de1e',
@@ -213,7 +212,7 @@ describe('SonobiBidAdapter', function () {
213
212
  expect(spec.isBidRequestValid(bid)).to.equal(false);
214
213
  });
215
214
 
216
- it('should return true if there is param sizes', () => {
215
+ it('should return true if there is playerSize', () => {
217
216
  const bid = {
218
217
  'bidder': 'sonobi',
219
218
  'adUnitCode': 'adunit-code',
@@ -224,7 +223,8 @@ describe('SonobiBidAdapter', function () {
224
223
  },
225
224
  'mediaTypes': {
226
225
  video: {
227
- context: 'outstream'
226
+ context: 'outstream',
227
+ playerSize: [640, 480]
228
228
  }
229
229
  },
230
230
  'bidId': '30b31c1838de1e',
@@ -294,7 +294,7 @@ describe('SonobiBidAdapter', function () {
294
294
  },
295
295
  mediaTypes: {
296
296
  video: {
297
- sizes: [[300, 250], [300, 600]],
297
+ playerSize: [640, 480],
298
298
  context: 'outstream'
299
299
  }
300
300
  }
@@ -339,7 +339,7 @@ describe('SonobiBidAdapter', function () {
339
339
  }];
340
340
 
341
341
  let keyMakerData = {
342
- '30b31c1838de1f': '1a2b3c4d5e6f1a2b3c4d|300x250,300x600|f=1.25,gpid=/123123/gpt_publisher/adunit-code-1,c=v,',
342
+ '30b31c1838de1f': '1a2b3c4d5e6f1a2b3c4d|640x480|f=1.25,gpid=/123123/gpt_publisher/adunit-code-1,c=v,',
343
343
  '30b31c1838de1d': '1a2b3c4d5e6f1a2b3c4e|300x250,300x600|f=0.42,gpid=/123123/gpt_publisher/adunit-code-3,c=d,',
344
344
  '/7780971/sparks_prebid_LB|30b31c1838de1e': '300x250,300x600|gpid=/7780971/sparks_prebid_LB,c=d,',
345
345
  };
@@ -635,12 +635,12 @@ describe('SonobiBidAdapter', function () {
635
635
  bidder: 'sonobi',
636
636
  mediaTypes: {
637
637
  video: {
638
- context: 'outstream'
638
+ context: 'outstream',
639
+ playerSize: [640, 480]
639
640
  }
640
641
  },
641
642
  params: {
642
- placement_id: '92e95368e86639dbd86d',
643
- sizes: [[640, 480]]
643
+ placement_id: '92e95368e86639dbd86d'
644
644
  }
645
645
  }
646
646
  ]
@@ -658,7 +658,7 @@ describe('SonobiBidAdapter', function () {
658
658
  'sbi_adomain': 'sonobi.com'
659
659
  },
660
660
  '30b31c1838de1e': {
661
- 'sbi_size': '300x250',
661
+ 'sbi_size': '640x480',
662
662
  'sbi_apoc': 'remnant',
663
663
  'sbi_aid': '30292e432662bd5f86d90774b944b038',
664
664
  'sbi_mouse': 1.25,
@@ -668,7 +668,7 @@ describe('SonobiBidAdapter', function () {
668
668
 
669
669
  },
670
670
  '/7780971/sparks_prebid_LB_OUTSTREAM|30b31c1838de1g': {
671
- 'sbi_size': '300x600',
671
+ 'sbi_size': '640x480',
672
672
  'sbi_apoc': 'remnant',
673
673
  'sbi_crid': '1234abcd',
674
674
  'sbi_aid': '30292e432662bd5f86d90774b944b038',
@@ -720,8 +720,8 @@ describe('SonobiBidAdapter', function () {
720
720
  {
721
721
  'requestId': '30b31c1838de1e',
722
722
  'cpm': 1.25,
723
- 'width': 300,
724
- 'height': 250,
723
+ 'width': 640,
724
+ 'height': 480,
725
725
  'vastUrl': 'https://mco-1-apex.go.sonobi.com/vast.xml?vid=30292e432662bd5f86d90774b944b038&ref=https%3A%2F%2Flocalhost%2F',
726
726
  'ttl': 500,
727
727
  'creativeId': '30292e432662bd5f86d90774b944b038',
@@ -737,8 +737,8 @@ describe('SonobiBidAdapter', function () {
737
737
  {
738
738
  'requestId': '30b31c1838de1g',
739
739
  'cpm': 1.07,
740
- 'width': 300,
741
- 'height': 600,
740
+ 'width': 640,
741
+ 'height': 480,
742
742
  'ad': `<script type="text/javascript" src="https://mco-1-apex.go.sonobi.com/sbi.js?aid=30292e432662bd5f86d90774b944b038&as=null&ref=https%3A%2F%2Flocalhost%2F"></script>`,
743
743
  'ttl': 500,
744
744
  'creativeId': '1234abcd',
@@ -8,6 +8,7 @@ import * as utils from 'src/utils.js';
8
8
 
9
9
  const ENDPOINT = 'https://tlx.3lift.com/header/auction?';
10
10
  const GDPR_CONSENT_STR = 'BOONm0NOONm0NABABAENAa-AAAARh7______b9_3__7_9uz_Kv_K7Vf7nnG072lPVA9LTOQ6gEaY';
11
+ const GPP_CONSENT_STR = 'DBACNYA~CPXxRfAPXxRfAAfKABENB-CgAAAAAAAAAAYgAAAAAAAA~1YNN'
11
12
 
12
13
  describe('triplelift adapter', function () {
13
14
  const adapter = newBidder(tripleliftAdapterSpec);
@@ -1039,6 +1040,12 @@ describe('triplelift adapter', function () {
1039
1040
  const url = request.url;
1040
1041
  expect(url).to.match(/(\?|&)us_privacy=1YYY/);
1041
1042
  });
1043
+ it('should pass fledge signal when Triplelift is eligible for fledge', function() {
1044
+ bidderRequest.fledgeEnabled = true;
1045
+ const request = tripleliftAdapterSpec.buildRequests(bidRequests, bidderRequest);
1046
+ const url = request.url;
1047
+ expect(url).to.match(/(\?|&)fledge=true/);
1048
+ });
1042
1049
  it('should return coppa param when COPPA config is set to true', function() {
1043
1050
  sinon.stub(config, 'getConfig').withArgs('coppa').returns(true);
1044
1051
  const request = tripleliftAdapterSpec.buildRequests(bidRequests, bidderRequest);
@@ -1506,6 +1513,7 @@ describe('triplelift adapter', function () {
1506
1513
  describe('getUserSyncs', function() {
1507
1514
  let expectedIframeSyncUrl = 'https://eb2.3lift.com/sync?gdpr=true&cmp_cs=' + GDPR_CONSENT_STR + '&';
1508
1515
  let expectedImageSyncUrl = 'https://eb2.3lift.com/sync?px=1&src=prebid&gdpr=true&cmp_cs=' + GDPR_CONSENT_STR + '&';
1516
+ let expectedGppSyncUrl = 'https://eb2.3lift.com/sync?gdpr=true&cmp_cs=' + GDPR_CONSENT_STR + '&gpp=' + GPP_CONSENT_STR + '&gpp_sid=2%2C8' + '&';
1509
1517
 
1510
1518
  it('returns undefined when syncing is not enabled', function() {
1511
1519
  expect(tripleliftAdapterSpec.getUserSyncs({})).to.equal(undefined);
@@ -1543,8 +1551,19 @@ describe('triplelift adapter', function () {
1543
1551
  let syncOptions = {
1544
1552
  iframeEnabled: true
1545
1553
  };
1546
- let result = tripleliftAdapterSpec.getUserSyncs(syncOptions, null, null, '1YYY');
1554
+ let result = tripleliftAdapterSpec.getUserSyncs(syncOptions, null, null, '1YYY', null);
1547
1555
  expect(result[0].url).to.match(/(\?|&)us_privacy=1YYY/);
1548
1556
  });
1557
+ it('returns a user sync pixel with GPP signals when available', function() {
1558
+ let syncOptions = {
1559
+ iframeEnabled: true
1560
+ };
1561
+ let gppConsent = {
1562
+ 'applicableSections': [2, 8],
1563
+ 'gppString': 'DBACNYA~CPXxRfAPXxRfAAfKABENB-CgAAAAAAAAAAYgAAAAAAAA~1YNN'
1564
+ }
1565
+ let result = tripleliftAdapterSpec.getUserSyncs(syncOptions, null, null, null, gppConsent);
1566
+ expect(result[0].url).to.equal(expectedGppSyncUrl);
1567
+ });
1549
1568
  });
1550
1569
  });