prebid.js 7.51.0 → 7.53.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 (277) hide show
  1. package/dist/1plusXRtdProvider.js +1 -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/adkernelBidAdapter.js +1 -1
  8. package/dist/adqueryBidAdapter.js +1 -1
  9. package/dist/adrelevantisBidAdapter.js +1 -1
  10. package/dist/adriverIdSystem.js +1 -1
  11. package/dist/adtrgtmeBidAdapter.js +1 -1
  12. package/dist/adxcgBidAdapter.js +1 -1
  13. package/dist/adyoulikeBidAdapter.js +1 -1
  14. package/dist/airgridRtdProvider.js +1 -1
  15. package/dist/ajaBidAdapter.js +1 -1
  16. package/dist/allowActivities.js +1 -0
  17. package/dist/amxBidAdapter.js +1 -1
  18. package/dist/amxIdSystem.js +1 -1
  19. package/dist/appierAnalyticsAdapter.js +1 -1
  20. package/dist/appnexusBidAdapter.js +1 -1
  21. package/dist/asoBidAdapter.js +1 -1
  22. package/dist/axonixBidAdapter.js +1 -1
  23. package/dist/beopBidAdapter.js +1 -1
  24. package/dist/bidglassBidAdapter.js +1 -1
  25. package/dist/big-richmediaBidAdapter.js +1 -1
  26. package/dist/bridgewellBidAdapter.js +1 -1
  27. package/dist/brightMountainMediaBidAdapter.js +1 -1
  28. package/dist/carodaBidAdapter.js +1 -1
  29. package/dist/chtnwBidAdapter.js +1 -1
  30. package/dist/conceptxBidAdapter.js +1 -0
  31. package/dist/concertBidAdapter.js +1 -1
  32. package/dist/connectIdSystem.js +1 -1
  33. package/dist/connectadBidAdapter.js +1 -1
  34. package/dist/consumableBidAdapter.js +1 -1
  35. package/dist/conversantAnalyticsAdapter.js +1 -1
  36. package/dist/conversantBidAdapter.js +1 -1
  37. package/dist/craftBidAdapter.js +1 -1
  38. package/dist/criteoBidAdapter.js +1 -1
  39. package/dist/cwireBidAdapter.js +1 -1
  40. package/dist/dependencies.json +6 -0
  41. package/dist/dspxBidAdapter.js +1 -1
  42. package/dist/eplanningBidAdapter.js +1 -1
  43. package/dist/eskimiBidAdapter.js +1 -1
  44. package/dist/euidIdSystem.js +1 -0
  45. package/dist/feedadBidAdapter.js +1 -1
  46. package/dist/finativeBidAdapter.js +1 -1
  47. package/dist/freepassIdSystem.js +1 -0
  48. package/dist/freewheel-sspBidAdapter.js +1 -1
  49. package/dist/gdprEnforcement.js +1 -1
  50. package/dist/glimpseBidAdapter.js +1 -1
  51. package/dist/gmosspBidAdapter.js +1 -1
  52. package/dist/goldbachBidAdapter.js +1 -1
  53. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  54. package/dist/greenbidsRtdProvider.js +1 -1
  55. package/dist/gridBidAdapter.js +1 -1
  56. package/dist/growthCodeRtdProvider.js +1 -0
  57. package/dist/gumgumBidAdapter.js +1 -1
  58. package/dist/h12mediaBidAdapter.js +1 -1
  59. package/dist/id5IdSystem.js +1 -1
  60. package/dist/improvedigitalBidAdapter.js +1 -1
  61. package/dist/inmarBidAdapter.js +1 -1
  62. package/dist/insticatorBidAdapter.js +1 -1
  63. package/dist/ixBidAdapter.js +1 -1
  64. package/dist/justpremiumBidAdapter.js +1 -1
  65. package/dist/kargoBidAdapter.js +1 -1
  66. package/dist/konduitAnalyticsAdapter.js +1 -1
  67. package/dist/kueezBidAdapter.js +1 -1
  68. package/dist/kueezRtbBidAdapter.js +1 -1
  69. package/dist/kulturemediaBidAdapter.js +1 -1
  70. package/dist/lassoBidAdapter.js +1 -1
  71. package/dist/lifestreetBidAdapter.js +1 -1
  72. package/dist/limelightDigitalBidAdapter.js +1 -1
  73. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  74. package/dist/logicadBidAdapter.js +1 -1
  75. package/dist/loglyliftBidAdapter.js +1 -1
  76. package/dist/magniteAnalyticsAdapter.js +1 -1
  77. package/dist/malltvAnalyticsAdapter.js +1 -1
  78. package/dist/marsmediaBidAdapter.js +1 -1
  79. package/dist/mediafuseBidAdapter.js +1 -1
  80. package/dist/mediasquareBidAdapter.js +1 -1
  81. package/dist/mgidBidAdapter.js +1 -1
  82. package/dist/minutemediaBidAdapter.js +1 -1
  83. package/dist/minutemediaplusBidAdapter.js +1 -1
  84. package/dist/nexx360BidAdapter.js +1 -1
  85. package/dist/not-for-prod/prebid.js +154 -146
  86. package/dist/objectGuard.js +1 -0
  87. package/dist/oguryBidAdapter.js +1 -1
  88. package/dist/onetagBidAdapter.js +1 -1
  89. package/dist/ooloAnalyticsAdapter.js +1 -1
  90. package/dist/optidigitalBidAdapter.js +1 -1
  91. package/dist/outbrainBidAdapter.js +1 -1
  92. package/dist/oxxionAnalyticsAdapter.js +1 -0
  93. package/dist/pairIdSystem.js +1 -1
  94. package/dist/parrableIdSystem.js +1 -1
  95. package/dist/pixfutureBidAdapter.js +1 -1
  96. package/dist/prebid-core.js +1 -1
  97. package/dist/proxistoreBidAdapter.js +1 -1
  98. package/dist/publinkIdSystem.js +1 -1
  99. package/dist/pubmaticBidAdapter.js +1 -1
  100. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  101. package/dist/pxyzBidAdapter.js +1 -1
  102. package/dist/quantcastBidAdapter.js +1 -1
  103. package/dist/readpeakBidAdapter.js +1 -1
  104. package/dist/relaidoBidAdapter.js +1 -1
  105. package/dist/retailspotBidAdapter.js +1 -1
  106. package/dist/rhythmoneBidAdapter.js +1 -1
  107. package/dist/richaudienceBidAdapter.js +1 -1
  108. package/dist/riseBidAdapter.js +1 -1
  109. package/dist/rtdModule.js +1 -1
  110. package/dist/rubiconAnalyticsAdapter.js +1 -1
  111. package/dist/rubiconBidAdapter.js +1 -1
  112. package/dist/schain.js +1 -1
  113. package/dist/seedingAllianceBidAdapter.js +1 -1
  114. package/dist/seedtagBidAdapter.js +1 -1
  115. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  116. package/dist/sharethroughBidAdapter.js +1 -1
  117. package/dist/shinezBidAdapter.js +1 -1
  118. package/dist/sirdataRtdProvider.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/stroeerCoreBidAdapter.js +1 -1
  128. package/dist/stvBidAdapter.js +1 -1
  129. package/dist/sublimeBidAdapter.js +1 -1
  130. package/dist/synacormediaBidAdapter.js +1 -1
  131. package/dist/targetVideoBidAdapter.js +1 -1
  132. package/dist/teadsBidAdapter.js +1 -1
  133. package/dist/trionBidAdapter.js +1 -1
  134. package/dist/tripleliftBidAdapter.js +1 -1
  135. package/dist/ttdBidAdapter.js +1 -1
  136. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  137. package/dist/uid2IdSystem.js +1 -1
  138. package/dist/uid2IdSystem_shared.js +1 -0
  139. package/dist/underdogmediaBidAdapter.js +1 -1
  140. package/dist/undertoneBidAdapter.js +1 -1
  141. package/dist/userId.js +1 -1
  142. package/dist/vidazooBidAdapter.js +1 -1
  143. package/dist/videobyteBidAdapter.js +1 -1
  144. package/dist/viouslyBidAdapter.js +1 -1
  145. package/dist/visxBidAdapter.js +1 -1
  146. package/dist/vuukleBidAdapter.js +1 -1
  147. package/dist/weboramaRtdProvider.js +1 -1
  148. package/dist/widespaceBidAdapter.js +1 -1
  149. package/dist/winrBidAdapter.js +1 -1
  150. package/dist/yahoosspBidAdapter.js +1 -1
  151. package/dist/yieldlabBidAdapter.js +1 -1
  152. package/dist/yieldmoBidAdapter.js +1 -1
  153. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  154. package/dist/zeta_global_sspBidAdapter.js +1 -1
  155. package/integrationExamples/gpt/growthcode.html +20 -9
  156. package/integrationExamples/gpt/userId_example.html +20 -6
  157. package/libraries/objectGuard/objectGuard.js +108 -0
  158. package/libraries/objectGuard/ortbGuard.js +88 -0
  159. package/modules/.submodules.json +3 -1
  160. package/modules/1plusXRtdProvider.js +31 -60
  161. package/modules/adagioBidAdapter.js +86 -24
  162. package/modules/adgenerationBidAdapter.js +14 -5
  163. package/modules/adkernelBidAdapter.js +2 -2
  164. package/modules/adriverIdSystem.js +1 -1
  165. package/modules/airgridRtdProvider.js +11 -12
  166. package/modules/allowActivities.js +74 -0
  167. package/modules/asoBidAdapter.js +2 -1
  168. package/modules/beopBidAdapter.js +6 -0
  169. package/modules/conceptxBidAdapter.js +70 -0
  170. package/modules/conceptxBidAdapter.md +36 -0
  171. package/modules/connectIdSystem.js +89 -13
  172. package/modules/connectIdSystem.md +4 -7
  173. package/modules/criteoBidAdapter.js +18 -2
  174. package/modules/eskimiBidAdapter.js +171 -41
  175. package/modules/eskimiBidAdapter.md +35 -16
  176. package/modules/euidIdSystem.js +121 -0
  177. package/modules/euidIdSystem.md +131 -0
  178. package/modules/freepassIdSystem.js +61 -0
  179. package/modules/freepassIdSystem.md +47 -0
  180. package/modules/gdprEnforcement.js +98 -169
  181. package/modules/greenbidsAnalyticsAdapter.js +1 -1
  182. package/modules/growthCodeRtdProvider.js +131 -0
  183. package/modules/growthCodeRtdProvider.md +55 -0
  184. package/modules/id5IdSystem.js +3 -5
  185. package/modules/ixBidAdapter.js +17 -3
  186. package/modules/limelightDigitalBidAdapter.js +1 -1
  187. package/modules/logicadBidAdapter.js +14 -1
  188. package/modules/mediasquareBidAdapter.js +13 -5
  189. package/modules/nexx360BidAdapter.js +1 -0
  190. package/modules/oxxionAnalyticsAdapter.js +212 -0
  191. package/modules/oxxionAnalyticsAdapter.md +33 -0
  192. package/modules/pairIdSystem.js +16 -11
  193. package/modules/proxistoreBidAdapter.js +11 -14
  194. package/modules/richaudienceBidAdapter.js +10 -1
  195. package/modules/riseBidAdapter.js +1 -1
  196. package/modules/rtdModule/index.js +12 -1
  197. package/modules/schain.js +2 -2
  198. package/modules/sharethroughBidAdapter.js +2 -2
  199. package/modules/sirdataRtdProvider.js +73 -146
  200. package/modules/smartadserverBidAdapter.js +5 -0
  201. package/modules/sovrnBidAdapter.js +4 -1
  202. package/modules/stroeerCoreBidAdapter.js +55 -6
  203. package/modules/stvBidAdapter.js +34 -1
  204. package/modules/uid2IdSystem.js +27 -210
  205. package/modules/uid2IdSystem.md +104 -23
  206. package/modules/uid2IdSystem_shared.js +232 -0
  207. package/modules/undertoneBidAdapter.js +9 -1
  208. package/modules/userId/eids.js +8 -0
  209. package/modules/userId/index.js +69 -41
  210. package/modules/userId/userId.md +2 -1
  211. package/modules/viouslyBidAdapter.js +2 -2
  212. package/modules/weboramaRtdProvider.js +25 -95
  213. package/modules/weboramaRtdProvider.md +4 -4
  214. package/modules/yahoosspBidAdapter.js +45 -3
  215. package/modules/yahoosspBidAdapter.md +1 -1
  216. package/modules/yieldlabBidAdapter.js +23 -14
  217. package/modules/zeta_global_sspBidAdapter.js +28 -22
  218. package/package.json +1 -1
  219. package/src/activities/activities.js +47 -0
  220. package/src/activities/activityParams.js +8 -0
  221. package/src/activities/modules.js +1 -1
  222. package/src/activities/params.js +59 -0
  223. package/src/activities/redactor.js +157 -0
  224. package/src/activities/rules.js +95 -0
  225. package/src/adapterManager.js +45 -8
  226. package/src/adloader.js +1 -0
  227. package/src/fpd/rootDomain.js +1 -1
  228. package/src/prebid.js +1 -1
  229. package/src/storageManager.js +57 -44
  230. package/src/userSync.js +35 -18
  231. package/test/spec/activities/allowActivites_spec.js +138 -0
  232. package/test/spec/activities/objectGuard_spec.js +144 -0
  233. package/test/spec/activities/ortbGuard_spec.js +140 -0
  234. package/test/spec/activities/params_spec.js +25 -0
  235. package/test/spec/activities/redactor_spec.js +296 -0
  236. package/test/spec/activities/rules_spec.js +135 -0
  237. package/test/spec/modules/1plusXRtdProvider_spec.js +98 -149
  238. package/test/spec/modules/adagioBidAdapter_spec.js +46 -17
  239. package/test/spec/modules/adgenerationBidAdapter_spec.js +52 -12
  240. package/test/spec/modules/airgridRtdProvider_spec.js +2 -0
  241. package/test/spec/modules/beopBidAdapter_spec.js +24 -0
  242. package/test/spec/modules/conceptxBidAdapter_spec.js +136 -0
  243. package/test/spec/modules/connectIdSystem_spec.js +291 -23
  244. package/test/spec/modules/criteoBidAdapter_spec.js +85 -1
  245. package/test/spec/modules/eids_spec.js +15 -0
  246. package/test/spec/modules/eskimiBidAdapter_spec.js +264 -112
  247. package/test/spec/modules/euidIdSystem_spec.js +130 -0
  248. package/test/spec/modules/freepassIdSystem_spec.js +186 -0
  249. package/test/spec/modules/gdprEnforcement_spec.js +127 -414
  250. package/test/spec/modules/growthCodeRtdProvider_spec.js +127 -0
  251. package/test/spec/modules/id5IdSystem_spec.js +10 -3
  252. package/test/spec/modules/ixBidAdapter_spec.js +32 -1
  253. package/test/spec/modules/logicadBidAdapter_spec.js +122 -2
  254. package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -0
  255. package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +324 -0
  256. package/test/spec/modules/pairIdSystem_spec.js +16 -3
  257. package/test/spec/modules/realTimeDataModule_spec.js +1 -1
  258. package/test/spec/modules/richaudienceBidAdapter_spec.js +44 -0
  259. package/test/spec/modules/schain_spec.js +9 -0
  260. package/test/spec/modules/sharethroughBidAdapter_spec.js +1 -1
  261. package/test/spec/modules/sirdataRtdProvider_spec.js +110 -17
  262. package/test/spec/modules/smartadserverBidAdapter_spec.js +42 -0
  263. package/test/spec/modules/sovrnBidAdapter_spec.js +13 -0
  264. package/test/spec/modules/stroeerCoreBidAdapter_spec.js +151 -6
  265. package/test/spec/modules/stvBidAdapter_spec.js +13 -1
  266. package/test/spec/modules/uid2IdSystem_helpers.js +70 -0
  267. package/test/spec/modules/uid2IdSystem_spec.js +131 -86
  268. package/test/spec/modules/undertoneBidAdapter_spec.js +57 -1
  269. package/test/spec/modules/userId_spec.js +96 -33
  270. package/test/spec/modules/weboramaRtdProvider_spec.js +331 -205
  271. package/test/spec/modules/yahoosspBidAdapter_spec.js +103 -51
  272. package/test/spec/modules/yieldlabBidAdapter_spec.js +42 -2
  273. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +204 -4
  274. package/test/spec/unit/core/adapterManager_spec.js +181 -1
  275. package/test/spec/unit/core/storageManager_spec.js +76 -68
  276. package/test/spec/unit/pbjs_api_spec.js +15 -25
  277. package/test/spec/userSync_spec.js +45 -16
@@ -89,11 +89,16 @@ let generateBidderRequest = (bidRequestArray, adUnitCode, ortb2 = {}) => {
89
89
  numIframes: 0,
90
90
  stack: ['https://publisher-test.com'],
91
91
  },
92
+ uspConsent: '1-Y-',
92
93
  gdprConsent: {
93
94
  consentString: 'BOtmiBKOtmiBKABABAENAFAAAAACeAAA',
94
95
  vendorData: {},
95
96
  gdprApplies: true
96
97
  },
98
+ gppConsent: {
99
+ gppString: 'DBACNYA~CPXxRfAPXxRfAAfKABENB-CgAAAAAAAAAAYgAAAAAAAA~1YNN',
100
+ applicableSections: [1, 2, 3]
101
+ },
97
102
  start: new Date().getTime(),
98
103
  timeout: 1000,
99
104
  ortb2
@@ -177,11 +182,6 @@ const generateResponseMock = (admPayloadType, vastVersion, videoContext) => {
177
182
 
178
183
  // Unit tests
179
184
  describe('YahooSSP Bid Adapter:', () => {
180
- it('PLACEHOLDER TO PASS GULP', () => {
181
- const obj = {};
182
- expect(obj).to.be.an('object');
183
- });
184
-
185
185
  describe('Validate basic properties', () => {
186
186
  it('should define the correct bidder code', () => {
187
187
  expect(spec.code).to.equal('yahoossp')
@@ -193,40 +193,38 @@ describe('YahooSSP Bid Adapter:', () => {
193
193
  });
194
194
 
195
195
  describe('getUserSyncs()', () => {
196
- const IMAGE_PIXEL_URL = 'http://image-pixel.com/foo/bar?1234&baz=true';
197
- const IFRAME_ONE_URL = 'http://image-iframe.com/foo/bar?1234&baz=true';
196
+ const IMAGE_PIXEL_URL = 'http://image-pixel.com/foo/bar?1234&baz=true&gdpr=foo&gdpr_consent=bar';
197
+ const IFRAME_ONE_URL = 'http://image-iframe.com/foo/bar?1234&baz=true&us_privacy=hello&gpp=goodbye';
198
198
  const IFRAME_TWO_URL = 'http://image-iframe-two.com/foo/bar?1234&baz=true';
199
-
200
- let serverResponses = [];
201
- beforeEach(() => {
202
- serverResponses[0] = {
203
- body: {
204
- ext: {
205
- pixels: `<script>document.write('<iframe src="${IFRAME_ONE_URL}"></iframe>` +
206
- `<img src="${IMAGE_PIXEL_URL}"></iframe>` +
207
- `<iframe src="${IFRAME_TWO_URL}"></iframe>');</script>`
208
- }
199
+ const SERVER_RESPONSES = [{
200
+ body: {
201
+ ext: {
202
+ pixels: `<script>document.write('<iframe src="${IFRAME_ONE_URL}"></iframe>` +
203
+ `<img src="${IMAGE_PIXEL_URL}"></iframe>` +
204
+ `<iframe src="${IFRAME_TWO_URL}"></iframe>');</script>`
209
205
  }
210
206
  }
211
- });
212
-
213
- after(() => {
214
- serverResponses = undefined;
215
- });
207
+ }];
208
+ const bidderRequest = generateBuildRequestMock({}).bidderRequest;
216
209
 
217
210
  it('for only iframe enabled syncs', () => {
218
211
  let syncOptions = {
219
212
  iframeEnabled: true,
220
213
  pixelEnabled: false
221
214
  };
222
- let pixelsObjects = spec.getUserSyncs(syncOptions, serverResponses);
223
- expect(pixelsObjects.length).to.equal(2);
224
- expect(pixelsObjects).to.deep.equal(
225
- [
226
- {type: 'iframe', 'url': IFRAME_ONE_URL},
227
- {type: 'iframe', 'url': IFRAME_TWO_URL}
228
- ]
229
- )
215
+ let pixelObjects = spec.getUserSyncs(
216
+ syncOptions,
217
+ SERVER_RESPONSES,
218
+ bidderRequest.gdprConsent,
219
+ bidderRequest.uspConsent,
220
+ bidderRequest.gppConsent
221
+ );
222
+ expect(pixelObjects.length).to.equal(2);
223
+
224
+ pixelObjects.forEach(pixelObject => {
225
+ expect(pixelObject).to.have.all.keys('type', 'url');
226
+ expect(pixelObject.type).to.equal('iframe');
227
+ });
230
228
  });
231
229
 
232
230
  it('for only pixel enabled syncs', () => {
@@ -234,13 +232,16 @@ describe('YahooSSP Bid Adapter:', () => {
234
232
  iframeEnabled: false,
235
233
  pixelEnabled: true
236
234
  };
237
- let pixelsObjects = spec.getUserSyncs(syncOptions, serverResponses);
238
- expect(pixelsObjects.length).to.equal(1);
239
- expect(pixelsObjects).to.deep.equal(
240
- [
241
- {type: 'image', 'url': IMAGE_PIXEL_URL}
242
- ]
243
- )
235
+ let pixelObjects = spec.getUserSyncs(
236
+ syncOptions,
237
+ SERVER_RESPONSES,
238
+ bidderRequest.gdprConsent,
239
+ bidderRequest.uspConsent,
240
+ bidderRequest.gppConsent
241
+ );
242
+ expect(pixelObjects.length).to.equal(1);
243
+ expect(pixelObjects[0]).to.have.all.keys('type', 'url');
244
+ expect(pixelObjects[0].type).to.equal('image');
244
245
  });
245
246
 
246
247
  it('for both pixel and iframe enabled syncs', () => {
@@ -248,15 +249,56 @@ describe('YahooSSP Bid Adapter:', () => {
248
249
  iframeEnabled: true,
249
250
  pixelEnabled: true
250
251
  };
251
- let pixelsObjects = spec.getUserSyncs(syncOptions, serverResponses);
252
- expect(pixelsObjects.length).to.equal(3);
253
- expect(pixelsObjects).to.deep.equal(
254
- [
255
- {type: 'iframe', 'url': IFRAME_ONE_URL},
256
- {type: 'image', 'url': IMAGE_PIXEL_URL},
257
- {type: 'iframe', 'url': IFRAME_TWO_URL}
258
- ]
259
- )
252
+ let pixelObjects = spec.getUserSyncs(
253
+ syncOptions,
254
+ SERVER_RESPONSES,
255
+ bidderRequest.gdprConsent,
256
+ bidderRequest.uspConsent,
257
+ bidderRequest.gppConsent
258
+ );
259
+ expect(pixelObjects.length).to.equal(3);
260
+ let iframeCount = 0;
261
+ let imageCount = 0;
262
+ pixelObjects.forEach(pixelObject => {
263
+ if (pixelObject.type == 'iframe') {
264
+ iframeCount++;
265
+ } else if (pixelObject.type == 'image') {
266
+ imageCount++;
267
+ }
268
+ });
269
+ expect(iframeCount).to.equal(2);
270
+ expect(imageCount).to.equal(1);
271
+ });
272
+
273
+ describe('user consent parameters are updated', () => {
274
+ let syncOptions = {
275
+ iframeEnabled: true,
276
+ pixelEnabled: true
277
+ };
278
+ let pixelObjects = spec.getUserSyncs(
279
+ syncOptions,
280
+ SERVER_RESPONSES,
281
+ bidderRequest.gdprConsent,
282
+ bidderRequest.uspConsent,
283
+ bidderRequest.gppConsent
284
+ );
285
+ pixelObjects.forEach(pixelObject => {
286
+ let url = pixelObject.url;
287
+ let urlParams = new URL(url).searchParams;
288
+ const expectedParams = {
289
+ 'baz': 'true',
290
+ 'gdpr_consent': bidderRequest.gdprConsent.consentString,
291
+ 'gdpr': bidderRequest.gdprConsent.gdprApplies ? '1' : '0',
292
+ 'us_privacy': bidderRequest.uspConsent,
293
+ 'gpp': bidderRequest.gppConsent.gppString,
294
+ 'gpp_sid': Array.isArray(bidderRequest.gppConsent.applicableSections) ? bidderRequest.gppConsent.applicableSections.join(',') : ''
295
+ }
296
+ for (const [key, value] of Object.entries(expectedParams)) {
297
+ it(`Updates the ${key} consent param in user sync URL ${url}`, () => {
298
+ expect(urlParams.get(key)).to.equal(value);
299
+ });
300
+ };
301
+ });
260
302
  });
261
303
  });
262
304
 
@@ -749,7 +791,15 @@ describe('YahooSSP Bid Adapter:', () => {
749
791
  expect(options.withCredentials).to.be.false;
750
792
  });
751
793
 
752
- it('adds the ortb2 gpp consent info to the request', function () {
794
+ it('set the GPP consent data from the data within the bid request', function () {
795
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
796
+ let clonedBidderRequest = {...bidderRequest};
797
+ const data = spec.buildRequests(validBidRequests, clonedBidderRequest)[0].data;
798
+ expect(data.regs.ext.gpp).to.equal(bidderRequest.gppConsent.gppString);
799
+ expect(data.regs.ext.gpp_sid).to.eql(bidderRequest.gppConsent.applicableSections);
800
+ });
801
+
802
+ it('overrides the GPP consent data using data from the ortb2 config object', function () {
753
803
  const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
754
804
  const ortb2 = {
755
805
  regs: {
@@ -759,8 +809,8 @@ describe('YahooSSP Bid Adapter:', () => {
759
809
  };
760
810
  let clonedBidderRequest = {...bidderRequest, ortb2};
761
811
  const data = spec.buildRequests(validBidRequests, clonedBidderRequest)[0].data;
762
- expect(data.regs.ext.gpp).to.equal('somegppstring');
763
- expect(data.regs.ext.gpp_sid).to.eql([6, 7]);
812
+ expect(data.regs.ext.gpp).to.equal(ortb2.regs.gpp);
813
+ expect(data.regs.ext.gpp_sid).to.eql(ortb2.regs.gpp_sid);
764
814
  });
765
815
  });
766
816
 
@@ -930,8 +980,10 @@ describe('YahooSSP Bid Adapter:', () => {
930
980
 
931
981
  expect(data.regs).to.deep.equal({
932
982
  ext: {
933
- 'us_privacy': '',
934
- gdpr: 1
983
+ 'us_privacy': bidderRequest.uspConsent,
984
+ gdpr: 1,
985
+ gpp: bidderRequest.gppConsent.gppString,
986
+ gpp_sid: bidderRequest.gppConsent.applicableSections
935
987
  }
936
988
  });
937
989
 
@@ -200,6 +200,15 @@ const NATIVE_RESPONSE = Object.assign({}, RESPONSE, {
200
200
  value: 'Native body value',
201
201
  },
202
202
  },
203
+ {
204
+ id: 4,
205
+ img: {
206
+ url: 'https://localhost:8080/assets/favicon/favicon-16x16.png',
207
+ w: 16,
208
+ h: 16,
209
+ type: 1,
210
+ },
211
+ },
203
212
  ],
204
213
  imptrackers: [
205
214
  'http://localhost:8080/ve?d=ODE9ZSY2MTI1MjAzNjMzMzYxPXN0JjA0NWUwZDk0NTY5Yi05M2FiLWUwZTQtOWFjNy1hYWY0MzFiZj1kaXQmMj12',
@@ -567,15 +576,24 @@ describe('yieldlabBidAdapter', () => {
567
576
  expect(result[0].native.image.url).to.equal('https://localhost:8080/yl-logo100x100.jpg');
568
577
  expect(result[0].native.image.width).to.equal(100);
569
578
  expect(result[0].native.image.height).to.equal(100);
579
+ expect(result[0].native.icon.url).to.equal('https://localhost:8080/assets/favicon/favicon-16x16.png');
580
+ expect(result[0].native.icon.width).to.equal(16);
581
+ expect(result[0].native.icon.height).to.equal(16);
570
582
  expect(result[0].native.clickUrl).to.equal('https://www.yieldlab.de');
571
583
  expect(result[0].native.impressionTrackers.length).to.equal(3);
572
- expect(result[0].native.assets.length).to.equal(3);
584
+ expect(result[0].native.assets.length).to.equal(4);
573
585
  const titleAsset = result[0].native.assets.find(asset => 'title' in asset);
574
- const imageAsset = result[0].native.assets.find(asset => 'img' in asset);
586
+ const imageAsset = result[0].native.assets.find((asset) => {
587
+ return asset?.img?.type === 3;
588
+ });
589
+ const iconAsset = result[0].native.assets.find((asset) => {
590
+ return asset?.img?.type === 1;
591
+ });
575
592
  const bodyAsset = result[0].native.assets.find(asset => 'data' in asset);
576
593
  expect(titleAsset).to.exist.and.to.have.nested.property('id', 1)
577
594
  expect(imageAsset).to.exist.and.to.have.nested.property('id', 2)
578
595
  expect(bodyAsset).to.exist.and.to.have.nested.property('id', 3)
596
+ expect(iconAsset).to.exist.and.to.have.nested.property('id', 4)
579
597
  });
580
598
 
581
599
  it('should add adUrl and default native assets when type is Native', () => {
@@ -601,6 +619,28 @@ describe('yieldlabBidAdapter', () => {
601
619
  expect(result[0].native.image.height).to.equal(0);
602
620
  });
603
621
 
622
+ it('should not add icon if not present in the native response', () => {
623
+ const NATIVE_RESPONSE_WITHOUT_ICON = Object.assign({}, NATIVE_RESPONSE, {
624
+ native: {
625
+ link: {
626
+ url: 'https://www.yieldlab.de',
627
+ },
628
+ assets: [
629
+ {
630
+ id: 1,
631
+ title: {
632
+ text: 'This is a great headline',
633
+ }
634
+ }
635
+ ],
636
+ imptrackers: [],
637
+ },
638
+ });
639
+ const result = spec.interpretResponse({body: [NATIVE_RESPONSE_WITHOUT_ICON]}, {validBidRequests: [NATIVE_REQUEST()], queryParams: REQPARAMS});
640
+ expect(result[0].native.hasOwnProperty('icon')).to.be.false;
641
+ expect(result[0].native.title).to.equal('This is a great headline');
642
+ });
643
+
604
644
  it('should append gdpr parameters to vastUrl', () => {
605
645
  const result = spec.interpretResponse({body: [VIDEO_RESPONSE]}, {validBidRequests: [VIDEO_REQUEST()], queryParams: REQPARAMS_GDPR});
606
646
 
@@ -127,6 +127,29 @@ describe('Zeta Ssp Bid Adapter', function () {
127
127
  timeout: 500
128
128
  }];
129
129
 
130
+ const bannerWithFewSizesRequest = [{
131
+ bidId: 12345,
132
+ auctionId: 67890,
133
+ mediaTypes: {
134
+ banner: {
135
+ sizes: [[300, 250], [200, 240], [100, 150]],
136
+ }
137
+ },
138
+ refererInfo: {
139
+ page: 'http://www.zetaglobal.com/page?param=value',
140
+ domain: 'www.zetaglobal.com',
141
+ },
142
+ gdprConsent: {
143
+ gdprApplies: 1,
144
+ consentString: 'consentString'
145
+ },
146
+ schain: schain,
147
+ uspConsent: 'someCCPAString',
148
+ params: params,
149
+ userIdAsEids: eids,
150
+ timeout: 500
151
+ }];
152
+
130
153
  const videoRequest = [{
131
154
  bidId: 112233,
132
155
  auctionId: 667788,
@@ -137,6 +160,8 @@ describe('Zeta Ssp Bid Adapter', function () {
137
160
  mimes: ['video/mp4'],
138
161
  minduration: 5,
139
162
  maxduration: 30,
163
+ placement: 2,
164
+ plcmt: 1,
140
165
  protocols: [2, 3]
141
166
  }
142
167
  },
@@ -146,6 +171,87 @@ describe('Zeta Ssp Bid Adapter', function () {
146
171
  params: params
147
172
  }];
148
173
 
174
+ const zetaResponse = {
175
+ body: {
176
+ id: '12345',
177
+ seatbid: [
178
+ {
179
+ bid: [
180
+ {
181
+ id: 'auctionId',
182
+ impid: 'impId',
183
+ price: 0.0,
184
+ adm: 'adMarkup',
185
+ crid: 'creativeId',
186
+ adomain: [
187
+ 'https://example.com'
188
+ ],
189
+ h: 250,
190
+ w: 300
191
+ }
192
+ ]
193
+ }
194
+ ],
195
+ cur: 'USD'
196
+ }
197
+ }
198
+
199
+ const responseBannerPayload = {
200
+ data: {
201
+ id: '123',
202
+ site: {
203
+ id: 'SITE_ID',
204
+ page: 'page.com',
205
+ domain: 'domain.com'
206
+ },
207
+ user: {
208
+ id: '45asdf9tydhrty789adfad4678rew656789',
209
+ buyeruid: '1234567890'
210
+ },
211
+ cur: [
212
+ 'USD'
213
+ ],
214
+ imp: [
215
+ {
216
+ id: '1',
217
+ banner: {
218
+ h: 600,
219
+ w: 160
220
+ }
221
+ }
222
+ ],
223
+ at: 1
224
+ }
225
+ };
226
+
227
+ const responseVideoPayload = {
228
+ data: {
229
+ id: '123',
230
+ site: {
231
+ id: 'SITE_ID',
232
+ page: 'page.com',
233
+ domain: 'domain.com'
234
+ },
235
+ user: {
236
+ id: '45asdf9tydhrty789adfad4678rew656789',
237
+ buyeruid: '1234567890'
238
+ },
239
+ cur: [
240
+ 'USD'
241
+ ],
242
+ imp: [
243
+ {
244
+ id: '1',
245
+ video: {
246
+ h: 600,
247
+ w: 160
248
+ }
249
+ }
250
+ ],
251
+ at: 1
252
+ }
253
+ };
254
+
149
255
  it('Test the bid validation function', function () {
150
256
  const validBid = spec.isBidRequestValid(bannerRequest[0]);
151
257
  const invalidBid = spec.isBidRequestValid(null);
@@ -199,7 +305,12 @@ describe('Zeta Ssp Bid Adapter', function () {
199
305
  'https://example.com'
200
306
  ],
201
307
  h: 250,
202
- w: 300
308
+ w: 300,
309
+ ext: {
310
+ prebid: {
311
+ type: 'banner'
312
+ }
313
+ }
203
314
  },
204
315
  {
205
316
  id: 'auctionId2',
@@ -213,7 +324,9 @@ describe('Zeta Ssp Bid Adapter', function () {
213
324
  h: 150,
214
325
  w: 200,
215
326
  ext: {
216
- bidtype: 'video'
327
+ prebid: {
328
+ type: 'video'
329
+ }
217
330
  }
218
331
  },
219
332
  {
@@ -226,7 +339,12 @@ describe('Zeta Ssp Bid Adapter', function () {
226
339
  'https://example3.com'
227
340
  ],
228
341
  h: 400,
229
- w: 300
342
+ w: 300,
343
+ ext: {
344
+ prebid: {
345
+ type: 'video'
346
+ }
347
+ }
230
348
  }
231
349
  ]
232
350
  }
@@ -235,7 +353,7 @@ describe('Zeta Ssp Bid Adapter', function () {
235
353
  }
236
354
  };
237
355
 
238
- const bidResponse = spec.interpretResponse(response, null);
356
+ const bidResponse = spec.interpretResponse(response, responseBannerPayload);
239
357
  expect(bidResponse).to.not.be.empty;
240
358
 
241
359
  const bid1 = bidResponse[0];
@@ -326,6 +444,8 @@ describe('Zeta Ssp Bid Adapter', function () {
326
444
  expect(payload.imp[0].video.mimes).to.eql(videoRequest[0].mediaTypes.video.mimes);
327
445
  expect(payload.imp[0].video.w).to.eql(720);
328
446
  expect(payload.imp[0].video.h).to.eql(340);
447
+ expect(payload.imp[0].video.placement).to.eql(videoRequest[0].mediaTypes.video.placement);
448
+ expect(payload.imp[0].video.plcmt).to.eql(videoRequest[0].mediaTypes.video.plcmt);
329
449
 
330
450
  expect(payload.imp[0].banner).to.be.undefined;
331
451
  });
@@ -404,4 +524,84 @@ describe('Zeta Ssp Bid Adapter', function () {
404
524
 
405
525
  expect(payload.imp[0].tagid).to.eql(params.tagid);
406
526
  });
527
+
528
+ it('Test if only one size', function () {
529
+ const request = spec.buildRequests(bannerRequest, bannerRequest[0]);
530
+ const payload = JSON.parse(request.data);
531
+
532
+ // banner
533
+ expect(payload.imp[0].banner.w).to.eql(300);
534
+ expect(payload.imp[0].banner.h).to.eql(250);
535
+
536
+ expect(payload.imp[0].banner.format).to.be.undefined;
537
+ });
538
+
539
+ it('Test few sizes provided in format', function () {
540
+ const request = spec.buildRequests(bannerWithFewSizesRequest, bannerWithFewSizesRequest[0]);
541
+ const payload = JSON.parse(request.data);
542
+
543
+ // banner
544
+ expect(payload.imp[0].banner.w).to.eql(300);
545
+ expect(payload.imp[0].banner.h).to.eql(250);
546
+
547
+ expect(payload.imp[0].banner.format.length).to.eql(3);
548
+
549
+ // format[0]
550
+ expect(payload.imp[0].banner.format[0].w).to.eql(300);
551
+ expect(payload.imp[0].banner.format[0].h).to.eql(250);
552
+
553
+ // format[1]
554
+ expect(payload.imp[0].banner.format[1].w).to.eql(200);
555
+ expect(payload.imp[0].banner.format[1].h).to.eql(240);
556
+
557
+ // format[2]
558
+ expect(payload.imp[0].banner.format[2].w).to.eql(100);
559
+ expect(payload.imp[0].banner.format[2].h).to.eql(150);
560
+ });
561
+
562
+ it('Test the response default mediaType:banner', function () {
563
+ const bidResponse = spec.interpretResponse(zetaResponse, responseBannerPayload);
564
+ expect(bidResponse).to.not.be.empty;
565
+ expect(bidResponse.length).to.eql(1);
566
+ expect(bidResponse[0].mediaType).to.eql(BANNER);
567
+ expect(bidResponse[0].ad).to.eql(zetaResponse.body.seatbid[0].bid[0].adm);
568
+ expect(bidResponse[0].vastXml).to.be.undefined;
569
+ });
570
+
571
+ it('Test the response default mediaType:video', function () {
572
+ const bidResponse = spec.interpretResponse(zetaResponse, responseVideoPayload);
573
+ expect(bidResponse).to.not.be.empty;
574
+ expect(bidResponse.length).to.eql(1);
575
+ expect(bidResponse[0].mediaType).to.eql(VIDEO);
576
+ expect(bidResponse[0].ad).to.eql(zetaResponse.body.seatbid[0].bid[0].adm);
577
+ expect(bidResponse[0].vastXml).to.eql(zetaResponse.body.seatbid[0].bid[0].adm);
578
+ });
579
+
580
+ it('Test the response mediaType:video from ext param', function () {
581
+ zetaResponse.body.seatbid[0].bid[0].ext = {
582
+ prebid: {
583
+ type: 'video'
584
+ }
585
+ }
586
+ const bidResponse = spec.interpretResponse(zetaResponse, responseBannerPayload);
587
+ expect(bidResponse).to.not.be.empty;
588
+ expect(bidResponse.length).to.eql(1);
589
+ expect(bidResponse[0].mediaType).to.eql(VIDEO);
590
+ expect(bidResponse[0].ad).to.eql(zetaResponse.body.seatbid[0].bid[0].adm);
591
+ expect(bidResponse[0].vastXml).to.eql(zetaResponse.body.seatbid[0].bid[0].adm);
592
+ });
593
+
594
+ it('Test the response mediaType:banner from ext param', function () {
595
+ zetaResponse.body.seatbid[0].bid[0].ext = {
596
+ prebid: {
597
+ type: 'banner'
598
+ }
599
+ }
600
+ const bidResponse = spec.interpretResponse(zetaResponse, responseVideoPayload);
601
+ expect(bidResponse).to.not.be.empty;
602
+ expect(bidResponse.length).to.eql(1);
603
+ expect(bidResponse[0].mediaType).to.eql(BANNER);
604
+ expect(bidResponse[0].ad).to.eql(zetaResponse.body.seatbid[0].bid[0].adm);
605
+ expect(bidResponse[0].vastXml).to.be.undefined;
606
+ });
407
607
  });