prebid.js 7.45.0 → 7.46.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 (189) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/adagioBidAdapter.js +1 -1
  4. package/dist/adbookpspBidAdapter.js +1 -1
  5. package/dist/adgenerationBidAdapter.js +1 -1
  6. package/dist/admaticBidAdapter.js +1 -1
  7. package/dist/adnuntiusBidAdapter.js +1 -1
  8. package/dist/adrelevantisBidAdapter.js +1 -1
  9. package/dist/adtrgtmeBidAdapter.js +1 -1
  10. package/dist/adxcgBidAdapter.js +1 -1
  11. package/dist/adyoulikeBidAdapter.js +1 -1
  12. package/dist/ajaBidAdapter.js +1 -1
  13. package/dist/amxBidAdapter.js +1 -1
  14. package/dist/amxIdSystem.js +1 -1
  15. package/dist/appierAnalyticsAdapter.js +1 -1
  16. package/dist/appnexusBidAdapter.js +1 -1
  17. package/dist/asoBidAdapter.js +1 -1
  18. package/dist/axonixBidAdapter.js +1 -1
  19. package/dist/bidglassBidAdapter.js +1 -1
  20. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  21. package/dist/big-richmediaBidAdapter.js +1 -1
  22. package/dist/bridgewellBidAdapter.js +1 -1
  23. package/dist/brightMountainMediaBidAdapter.js +1 -1
  24. package/dist/carodaBidAdapter.js +1 -1
  25. package/dist/chtnwBidAdapter.js +1 -1
  26. package/dist/concertBidAdapter.js +1 -1
  27. package/dist/connectadBidAdapter.js +1 -1
  28. package/dist/consumableBidAdapter.js +1 -1
  29. package/dist/conversantAnalyticsAdapter.js +1 -1
  30. package/dist/conversantBidAdapter.js +1 -1
  31. package/dist/craftBidAdapter.js +1 -1
  32. package/dist/criteoBidAdapter.js +1 -1
  33. package/dist/cwireBidAdapter.js +1 -1
  34. package/dist/debugging-standalone.js +1 -1
  35. package/dist/dependencies.json +3 -0
  36. package/dist/dspxBidAdapter.js +1 -1
  37. package/dist/eplanningBidAdapter.js +1 -1
  38. package/dist/eskimiBidAdapter.js +1 -0
  39. package/dist/feedadBidAdapter.js +1 -1
  40. package/dist/finativeBidAdapter.js +1 -1
  41. package/dist/freewheel-sspBidAdapter.js +1 -1
  42. package/dist/glimpseBidAdapter.js +1 -1
  43. package/dist/gmosspBidAdapter.js +1 -1
  44. package/dist/goldbachBidAdapter.js +1 -1
  45. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  46. package/dist/gridBidAdapter.js +1 -1
  47. package/dist/gumgumBidAdapter.js +1 -1
  48. package/dist/h12mediaBidAdapter.js +1 -1
  49. package/dist/id5IdSystem.js +1 -1
  50. package/dist/improvedigitalBidAdapter.js +1 -1
  51. package/dist/inmarBidAdapter.js +1 -1
  52. package/dist/insticatorBidAdapter.js +1 -1
  53. package/dist/ixBidAdapter.js +1 -1
  54. package/dist/justpremiumBidAdapter.js +1 -1
  55. package/dist/kargoBidAdapter.js +1 -1
  56. package/dist/konduitAnalyticsAdapter.js +1 -1
  57. package/dist/kueezBidAdapter.js +1 -1
  58. package/dist/kueezRtbBidAdapter.js +1 -1
  59. package/dist/kulturemediaBidAdapter.js +1 -1
  60. package/dist/lassoBidAdapter.js +1 -1
  61. package/dist/lifestreetBidAdapter.js +1 -1
  62. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  63. package/dist/logicadBidAdapter.js +1 -1
  64. package/dist/loglyliftBidAdapter.js +1 -1
  65. package/dist/magniteAnalyticsAdapter.js +1 -1
  66. package/dist/malltvAnalyticsAdapter.js +1 -1
  67. package/dist/marsmediaBidAdapter.js +1 -1
  68. package/dist/mediafuseBidAdapter.js +1 -1
  69. package/dist/mediasquareBidAdapter.js +1 -1
  70. package/dist/mgidBidAdapter.js +1 -1
  71. package/dist/minutemediaBidAdapter.js +1 -1
  72. package/dist/minutemediaplusBidAdapter.js +1 -1
  73. package/dist/nativoBidAdapter.js +1 -1
  74. package/dist/neuwoRtdProvider.js +1 -1
  75. package/dist/nexx360BidAdapter.js +1 -1
  76. package/dist/not-for-prod/prebid.js +132 -131
  77. package/dist/oguryBidAdapter.js +1 -1
  78. package/dist/onetagBidAdapter.js +1 -1
  79. package/dist/ooloAnalyticsAdapter.js +1 -1
  80. package/dist/optidigitalBidAdapter.js +1 -1
  81. package/dist/ortbConverter.js +1 -1
  82. package/dist/outbrainBidAdapter.js +1 -1
  83. package/dist/pairIdSystem.js +1 -0
  84. package/dist/parrableIdSystem.js +1 -1
  85. package/dist/pixfutureBidAdapter.js +1 -1
  86. package/dist/prebid-core.js +1 -1
  87. package/dist/publinkIdSystem.js +1 -1
  88. package/dist/pubmaticBidAdapter.js +1 -1
  89. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  90. package/dist/pxyzBidAdapter.js +1 -1
  91. package/dist/quantcastBidAdapter.js +1 -1
  92. package/dist/readpeakBidAdapter.js +1 -1
  93. package/dist/relaidoBidAdapter.js +1 -1
  94. package/dist/rhythmoneBidAdapter.js +1 -1
  95. package/dist/riseBidAdapter.js +1 -1
  96. package/dist/rubiconAnalyticsAdapter.js +1 -1
  97. package/dist/rubiconBidAdapter.js +1 -1
  98. package/dist/seedingAllianceBidAdapter.js +1 -1
  99. package/dist/seedtagBidAdapter.js +1 -1
  100. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  101. package/dist/sharethroughBidAdapter.js +1 -1
  102. package/dist/shinezBidAdapter.js +1 -1
  103. package/dist/smaatoBidAdapter.js +1 -1
  104. package/dist/smartadserverBidAdapter.js +1 -1
  105. package/dist/smartxBidAdapter.js +1 -1
  106. package/dist/smilewantedBidAdapter.js +1 -1
  107. package/dist/sonobiBidAdapter.js +1 -1
  108. package/dist/sovrnAnalyticsAdapter.js +1 -1
  109. package/dist/sovrnBidAdapter.js +1 -1
  110. package/dist/sspBCBidAdapter.js +1 -1
  111. package/dist/stvBidAdapter.js +1 -1
  112. package/dist/sublimeBidAdapter.js +1 -1
  113. package/dist/synacormediaBidAdapter.js +1 -1
  114. package/dist/targetVideoBidAdapter.js +1 -1
  115. package/dist/teadsBidAdapter.js +1 -1
  116. package/dist/trionBidAdapter.js +1 -1
  117. package/dist/tripleliftBidAdapter.js +1 -1
  118. package/dist/ttdBidAdapter.js +1 -1
  119. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  120. package/dist/uid2IdSystem.js +1 -1
  121. package/dist/underdogmediaBidAdapter.js +1 -1
  122. package/dist/undertoneBidAdapter.js +1 -1
  123. package/dist/userId.js +1 -1
  124. package/dist/vidazooBidAdapter.js +1 -1
  125. package/dist/videobyteBidAdapter.js +1 -1
  126. package/dist/vidoomyBidAdapter.js +1 -1
  127. package/dist/visxBidAdapter.js +1 -1
  128. package/dist/vuukleBidAdapter.js +1 -1
  129. package/dist/widespaceBidAdapter.js +1 -1
  130. package/dist/winrBidAdapter.js +1 -1
  131. package/dist/yahoosspBidAdapter.js +1 -1
  132. package/dist/yieldmoBidAdapter.js +1 -1
  133. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  134. package/integrationExamples/gpt/fledge_example.html +103 -0
  135. package/integrationExamples/gpt/prebidServer_fledge_example.html +111 -0
  136. package/libraries/ortbConverter/processors/video.js +1 -0
  137. package/modules/admaticBidAdapter.js +7 -2
  138. package/modules/adnuntiusBidAdapter.js +3 -1
  139. package/modules/appnexusBidAdapter.js +108 -102
  140. package/modules/bidwatchAnalyticsAdapter.js +2 -0
  141. package/modules/conversantBidAdapter.js +3 -0
  142. package/modules/criteoBidAdapter.js +5 -1
  143. package/modules/eskimiBidAdapter.js +72 -0
  144. package/modules/eskimiBidAdapter.md +34 -0
  145. package/modules/gridBidAdapter.js +42 -19
  146. package/modules/ixBidAdapter.js +30 -0
  147. package/modules/kargoBidAdapter.js +473 -246
  148. package/modules/kueezRtbBidAdapter.js +16 -4
  149. package/modules/mediasquareBidAdapter.js +2 -1
  150. package/modules/minutemediaplusBidAdapter.js +16 -4
  151. package/modules/nativoBidAdapter.js +110 -21
  152. package/modules/neuwoRtdProvider.js +0 -2
  153. package/modules/pairIdSystem.js +79 -0
  154. package/modules/pubmaticBidAdapter.js +12 -9
  155. package/modules/userId/eids.js +6 -0
  156. package/modules/vidoomyBidAdapter.js +11 -3
  157. package/modules/yieldmoBidAdapter.js +15 -5
  158. package/package.json +1 -1
  159. package/src/config.js +78 -127
  160. package/test/spec/modules/1plusXRtdProvider_spec.js +8 -7
  161. package/test/spec/modules/adagioBidAdapter_spec.js +0 -25
  162. package/test/spec/modules/admaticBidAdapter_spec.js +1 -1
  163. package/test/spec/modules/adnuntiusBidAdapter_spec.js +2 -1
  164. package/test/spec/modules/appnexusBidAdapter_spec.js +464 -448
  165. package/test/spec/modules/axonixBidAdapter_spec.js +0 -27
  166. package/test/spec/modules/big-richmediaBidAdapter_spec.js +68 -64
  167. package/test/spec/modules/conversantBidAdapter_spec.js +1 -0
  168. package/test/spec/modules/criteoBidAdapter_spec.js +33 -1
  169. package/test/spec/modules/eskimiBidAdapter_spec.js +155 -0
  170. package/test/spec/modules/gridBidAdapter_spec.js +8 -0
  171. package/test/spec/modules/ixBidAdapter_spec.js +57 -0
  172. package/test/spec/modules/kargoBidAdapter_spec.js +297 -140
  173. package/test/spec/modules/kueezRtbBidAdapter_spec.js +22 -2
  174. package/test/spec/modules/minutemediaplusBidAdapter_spec.js +22 -2
  175. package/test/spec/modules/nativoBidAdapter_spec.js +101 -0
  176. package/test/spec/modules/neuwoRtdProvider_spec.js +0 -1
  177. package/test/spec/modules/ooloAnalyticsAdapter_spec.js +1 -1
  178. package/test/spec/modules/pairIdSystem_spec.js +68 -0
  179. package/test/spec/modules/pubCommonId_spec.js +0 -17
  180. package/test/spec/modules/pubmaticBidAdapter_spec.js +868 -867
  181. package/test/spec/modules/realvuAnalyticsAdapter_spec.js +0 -5
  182. package/test/spec/modules/vidoomyBidAdapter_spec.js +23 -0
  183. package/test/spec/modules/yieldmoBidAdapter_spec.js +19 -1
  184. package/test/spec/unit/pbjs_api_spec.js +19 -3
  185. package/test/test_index.js +13 -3
  186. package/dist/gridNMBidAdapter.js +0 -1
  187. package/modules/gridNMBidAdapter.js +0 -422
  188. package/modules/gridNMBidAdapter.md +0 -39
  189. package/test/spec/modules/gridNMBidAdapter_spec.js +0 -636
@@ -286,26 +286,6 @@ describe('AxonixBidAdapter', function () {
286
286
  });
287
287
  });
288
288
 
289
- describe.skip('buildRequests: can handle native ad requests', function () {
290
- it('creates ServerRequests pointing to the correct region and endpoint if it changes', function () {
291
- // loop:
292
- // set supply id
293
- // set region/endpoint in ssp config
294
- // call buildRequests, validate request (url, method, supply id)
295
- expect.fail('Not implemented');
296
- });
297
-
298
- it('creates ServerRequests pointing to default endpoint if missing', function () {
299
- // no endpoint in config means default value openrtb.axonix.com
300
- expect.fail('Not implemented');
301
- });
302
-
303
- it('creates ServerRequests pointing to default region if missing', function () {
304
- // no region in config means default value us-east-1
305
- expect.fail('Not implemented');
306
- });
307
- });
308
-
309
289
  describe('interpretResponse', function () {
310
290
  it('considers corner cases', function() {
311
291
  expect(spec.interpretResponse(null)).to.be.an('array').that.is.empty;
@@ -331,13 +311,6 @@ describe('AxonixBidAdapter', function () {
331
311
  expect(response).to.be.an('array').that.is.not.empty;
332
312
  expect(response[0]).to.equal(VIDEO_RESPONSE.body[0]);
333
313
  });
334
-
335
- it.skip('parses 1 native responses', function () {
336
- // passing 1 valid native in a response generates an array with 1 correct prebid response
337
- // examine mediaType:native, native element
338
- // check nativeBidIsValid from {@link file://./../../../src/native.js}
339
- expect.fail('Not implemented');
340
- });
341
314
  });
342
315
 
343
316
  describe('onBidWon', function () {
@@ -92,40 +92,42 @@ describe('bigRichMediaAdapterTests', function () {
92
92
  expect(payload.tags[0].sizes).to.have.lengthOf(3);
93
93
  });
94
94
 
95
- it('should build video bid request', function() {
96
- const bidRequest = deepClone(bidRequests[0]);
97
- bidRequest.params = {
98
- placementId: '1234235',
99
- video: {
100
- skippable: true,
101
- playback_method: ['auto_play_sound_off', 'auto_play_sound_unknown'],
102
- context: 'outstream',
103
- format: 'sticky-top'
104
- }
105
- };
106
- bidRequest.mediaTypes = {
107
- video: {
108
- playerSize: [640, 480],
109
- context: 'outstream',
110
- mimes: ['video/mp4'],
111
- skip: 0,
112
- minduration: 5,
113
- api: [1, 5, 6],
114
- playbackmethod: [2, 4]
115
- }
116
- };
95
+ if (FEATURES.VIDEO) {
96
+ it('should build video bid request', function() {
97
+ const bidRequest = deepClone(bidRequests[0]);
98
+ bidRequest.params = {
99
+ placementId: '1234235',
100
+ video: {
101
+ skippable: true,
102
+ playback_method: ['auto_play_sound_off', 'auto_play_sound_unknown'],
103
+ context: 'outstream',
104
+ format: 'sticky-top'
105
+ }
106
+ };
107
+ bidRequest.mediaTypes = {
108
+ video: {
109
+ playerSize: [640, 480],
110
+ context: 'outstream',
111
+ mimes: ['video/mp4'],
112
+ skip: 0,
113
+ minduration: 5,
114
+ api: [1, 5, 6],
115
+ playbackmethod: [2, 4]
116
+ }
117
+ };
117
118
 
118
- const request = spec.buildRequests([bidRequest]);
119
- const payload = JSON.parse(request.data);
119
+ const request = spec.buildRequests([bidRequest]);
120
+ const payload = JSON.parse(request.data);
120
121
 
121
- expect(payload.tags[0].video).to.deep.equal({
122
- minduration: 5,
123
- playback_method: 2,
124
- skippable: true,
125
- context: 4
122
+ expect(payload.tags[0].video).to.deep.equal({
123
+ minduration: 5,
124
+ playback_method: 2,
125
+ skippable: true,
126
+ context: 4
127
+ });
128
+ expect(payload.tags[0].video_frameworks).to.deep.equal([1, 4])
126
129
  });
127
- expect(payload.tags[0].video_frameworks).to.deep.equal([1, 4])
128
- });
130
+ }
129
131
  });
130
132
 
131
133
  describe('interpretResponse', function () {
@@ -227,42 +229,44 @@ describe('bigRichMediaAdapterTests', function () {
227
229
  expect(Object.keys(result[0])).to.have.members(Object.keys(expectedResponse[0]));
228
230
  });
229
231
 
230
- it('handles outstream video responses', function () {
231
- const response = {
232
- 'tags': [{
233
- 'uuid': '84ab500420319d',
234
- 'ads': [{
235
- 'ad_type': 'video',
236
- 'cpm': 0.500000,
237
- 'notify_url': 'imptracker.com',
238
- 'rtb': {
239
- 'video': {
240
- 'content': '<!-- VAST Creative -->'
241
- }
242
- },
243
- 'javascriptTrackers': '<script type=\'text/javascript\' async=\'true\' src=\'https://cdn.adnxs.com/v/s/152/trk.js#v;vk=appnexus.com-omid;tv=native1-18h;dom_id=%native_dom_id%;st=0;d=1x1;vc=iab;vid_ccr=1;tag_id=13232354;cb=https%3A%2F%2Fams1-ib.adnxs.com%2Fvevent%3Freferrer%3Dhttps253A%252F%252Ftestpages-pmahe.tp.adnxs.net%252F01_basic_single%26e%3DwqT_3QLNB6DNAwAAAwDWAAUBCLfl_-MFEMStk8u3lPTjRxih88aF0fq_2QsqNgkAAAECCCRAEQEHEAAAJEAZEQkAIREJACkRCQAxEQmoMOLRpwY47UhA7UhIAlCDy74uWJzxW2AAaM26dXjzjwWAAQGKAQNVU0SSAQEG8FCYAQGgAQGoAQGwAQC4AQHAAQTIAQLQAQDYAQDgAQDwAQCKAjt1ZignYScsIDI1Mjk4ODUsIDE1NTE4ODkwNzkpO3VmKCdyJywgOTc0OTQ0MDM2HgDwjZIC8QEha0RXaXBnajgtTHdLRUlQTHZpNFlBQ0NjOFZzd0FEZ0FRQVJJN1VoUTR0R25CbGdBWU1rR2FBQndMSGlrTDRBQlVvZ0JwQy1RQVFHWUFRR2dBUUdvQVFPd0FRQzVBZk90YXFRQUFDUkF3UUh6cldxa0FBQWtRTWtCbWo4dDA1ZU84VF9aQVFBQUEBAyRQQV80QUVBOVFFAQ4sQW1BSUFvQUlBdFFJBRAAdg0IeHdBSUF5QUlBNEFJQTZBSUEtQUlBZ0FNQm1BTUJxQVAFzIh1Z01KUVUxVE1UbzBNekl3NEFPVENBLi6aAmEhUXcxdGNRagUoEfQkblBGYklBUW9BRAl8AEEBqAREbzJEABRRSk1JU1EBGwRBQQGsAFURDAxBQUFXHQzwWNgCAOACrZhI6gIzaHR0cDovL3Rlc3RwYWdlcy1wbWFoZS50cC5hZG54cy5uZXQvMDFfYmFzaWNfc2luZ2xl8gITCg9DVVNUT01fTU9ERUxfSUQSAPICGgoWMhYAPExFQUZfTkFNRRIA8gIeCho2HQAIQVNUAT7wnElGSUVEEgCAAwCIAwGQAwCYAxegAwGqAwDAA-CoAcgDANgD8ao-4AMA6AMA-AMBgAQAkgQNL3V0L3YzL3ByZWJpZJgEAKIECjEwLjIuMTIuMzioBIqpB7IEDggAEAEYACAAKAAwADgCuAQAwAQAyAQA0gQOOTMyNSNBTVMxOjQzMjDaBAIIAeAEAfAEg8u-LogFAZgFAKAF______8BAxgBwAUAyQUABQEU8D_SBQkJBQt8AAAA2AUB4AUB8AWZ9CH6BQQIABAAkAYBmAYAuAYAwQYBITAAAPA_yAYA2gYWChAAOgEAGBAAGADgBgw.%26s%3D971dce9d49b6bee447c8a58774fb30b40fe98171;ts=1551889079;cet=0;cecb=\'></script>'
232
+ if (FEATURES.VIDEO) {
233
+ it('handles outstream video responses', function () {
234
+ const response = {
235
+ 'tags': [{
236
+ 'uuid': '84ab500420319d',
237
+ 'ads': [{
238
+ 'ad_type': 'video',
239
+ 'cpm': 0.500000,
240
+ 'notify_url': 'imptracker.com',
241
+ 'rtb': {
242
+ 'video': {
243
+ 'content': '<!-- VAST Creative -->'
244
+ }
245
+ },
246
+ 'javascriptTrackers': '<script type=\'text/javascript\' async=\'true\' src=\'https://cdn.adnxs.com/v/s/152/trk.js#v;vk=appnexus.com-omid;tv=native1-18h;dom_id=%native_dom_id%;st=0;d=1x1;vc=iab;vid_ccr=1;tag_id=13232354;cb=https%3A%2F%2Fams1-ib.adnxs.com%2Fvevent%3Freferrer%3Dhttps253A%252F%252Ftestpages-pmahe.tp.adnxs.net%252F01_basic_single%26e%3DwqT_3QLNB6DNAwAAAwDWAAUBCLfl_-MFEMStk8u3lPTjRxih88aF0fq_2QsqNgkAAAECCCRAEQEHEAAAJEAZEQkAIREJACkRCQAxEQmoMOLRpwY47UhA7UhIAlCDy74uWJzxW2AAaM26dXjzjwWAAQGKAQNVU0SSAQEG8FCYAQGgAQGoAQGwAQC4AQHAAQTIAQLQAQDYAQDgAQDwAQCKAjt1ZignYScsIDI1Mjk4ODUsIDE1NTE4ODkwNzkpO3VmKCdyJywgOTc0OTQ0MDM2HgDwjZIC8QEha0RXaXBnajgtTHdLRUlQTHZpNFlBQ0NjOFZzd0FEZ0FRQVJJN1VoUTR0R25CbGdBWU1rR2FBQndMSGlrTDRBQlVvZ0JwQy1RQVFHWUFRR2dBUUdvQVFPd0FRQzVBZk90YXFRQUFDUkF3UUh6cldxa0FBQWtRTWtCbWo4dDA1ZU84VF9aQVFBQUEBAyRQQV80QUVBOVFFAQ4sQW1BSUFvQUlBdFFJBRAAdg0IeHdBSUF5QUlBNEFJQTZBSUEtQUlBZ0FNQm1BTUJxQVAFzIh1Z01KUVUxVE1UbzBNekl3NEFPVENBLi6aAmEhUXcxdGNRagUoEfQkblBGYklBUW9BRAl8AEEBqAREbzJEABRRSk1JU1EBGwRBQQGsAFURDAxBQUFXHQzwWNgCAOACrZhI6gIzaHR0cDovL3Rlc3RwYWdlcy1wbWFoZS50cC5hZG54cy5uZXQvMDFfYmFzaWNfc2luZ2xl8gITCg9DVVNUT01fTU9ERUxfSUQSAPICGgoWMhYAPExFQUZfTkFNRRIA8gIeCho2HQAIQVNUAT7wnElGSUVEEgCAAwCIAwGQAwCYAxegAwGqAwDAA-CoAcgDANgD8ao-4AMA6AMA-AMBgAQAkgQNL3V0L3YzL3ByZWJpZJgEAKIECjEwLjIuMTIuMzioBIqpB7IEDggAEAEYACAAKAAwADgCuAQAwAQAyAQA0gQOOTMyNSNBTVMxOjQzMjDaBAIIAeAEAfAEg8u-LogFAZgFAKAF______8BAxgBwAUAyQUABQEU8D_SBQkJBQt8AAAA2AUB4AUB8AWZ9CH6BQQIABAAkAYBmAYAuAYAwQYBITAAAPA_yAYA2gYWChAAOgEAGBAAGADgBgw.%26s%3D971dce9d49b6bee447c8a58774fb30b40fe98171;ts=1551889079;cet=0;cecb=\'></script>'
247
+ }]
244
248
  }]
245
- }]
246
- };
247
- const bidderRequest = {
248
- bids: [{
249
- bidId: '84ab500420319d',
250
- adUnitCode: 'code',
251
- mediaTypes: {
252
- video: {
253
- context: 'outstream'
249
+ };
250
+ const bidderRequest = {
251
+ bids: [{
252
+ bidId: '84ab500420319d',
253
+ adUnitCode: 'code',
254
+ mediaTypes: {
255
+ video: {
256
+ context: 'outstream'
257
+ }
254
258
  }
255
- }
256
- }]
257
- }
259
+ }]
260
+ }
258
261
 
259
- const result = spec.interpretResponse({ body: response }, {bidderRequest});
260
- expect(result[0]).not.to.have.property('vastXml');
261
- expect(result[0]).not.to.have.property('vastUrl');
262
- expect(result[0]).to.have.property('width', 1);
263
- expect(result[0]).to.have.property('height', 1);
264
- expect(result[0]).to.have.property('mediaType', 'banner');
265
- });
262
+ const result = spec.interpretResponse({ body: response }, {bidderRequest});
263
+ expect(result[0]).not.to.have.property('vastXml');
264
+ expect(result[0]).not.to.have.property('vastUrl');
265
+ expect(result[0]).to.have.property('width', 1);
266
+ expect(result[0]).to.have.property('height', 1);
267
+ expect(result[0]).to.have.property('mediaType', 'banner');
268
+ });
269
+ }
266
270
  });
267
271
 
268
272
  describe('getUserSyncs', function() {
@@ -263,6 +263,7 @@ describe('Conversant adapter tests', function() {
263
263
  const payload = request.data;
264
264
 
265
265
  expect(payload).to.have.property('id', 'req000');
266
+ expect(payload.source).to.have.property('tid', 'req000');
266
267
  expect(payload).to.have.property('at', 1);
267
268
  expect(payload).to.have.property('imp');
268
269
  expect(payload.imp).to.be.an('array').with.lengthOf(8);
@@ -883,6 +883,38 @@ describe('The Criteo bidding adapter', function () {
883
883
  expect(request.data.user.uspIab).to.equal('1YNY');
884
884
  });
885
885
 
886
+ it('should properly build a request with device sua field', function () {
887
+ const sua = {}
888
+ const bidRequests = [
889
+ {
890
+ bidder: 'criteo',
891
+ adUnitCode: 'bid-123',
892
+ transactionId: 'transaction-123',
893
+ mediaTypes: {
894
+ banner: {
895
+ sizes: [[728, 90]]
896
+ }
897
+ },
898
+ params: {
899
+ zoneId: 123,
900
+ },
901
+ },
902
+ ];
903
+ const bidderRequest = {
904
+ timeout: 3000,
905
+ uspConsent: '1YNY',
906
+ ortb2: {
907
+ device: {
908
+ sua: sua
909
+ }
910
+ }
911
+ };
912
+
913
+ const request = spec.buildRequests(bidRequests, bidderRequest);
914
+ expect(request.data.user.ext.sua).to.not.be.null;
915
+ expect(request.data.user.ext.sua).to.equal(sua);
916
+ });
917
+
886
918
  it('should properly build a request with gpp consent field', function () {
887
919
  const bidRequests = [
888
920
  {
@@ -1475,7 +1507,7 @@ describe('The Criteo bidding adapter', function () {
1475
1507
  creativecode: 'test-crId',
1476
1508
  width: 728,
1477
1509
  height: 90,
1478
- dealCode: 'myDealCode',
1510
+ deal: 'myDealCode',
1479
1511
  adomain: ['criteo.com'],
1480
1512
  }],
1481
1513
  },
@@ -0,0 +1,155 @@
1
+ import {expect} from 'chai';
2
+ import {spec} from 'modules/eskimiBidAdapter.js';
3
+
4
+ const REQUEST = {
5
+ 'bidderCode': 'eskimi',
6
+ 'auctionId': 'auctionId-56a2-4f71-9098-720a68f2f708',
7
+ 'bidderRequestId': 'requestId',
8
+ 'bidRequest': [{
9
+ 'bidder': 'eskimi',
10
+ 'params': {
11
+ 'placementId': 1003000,
12
+ 'accId': 123
13
+ },
14
+ 'sizes': [
15
+ [300, 250]
16
+ ],
17
+ 'bidId': 'bidId1',
18
+ 'adUnitCode': 'adUnitCode1',
19
+ 'bidderRequestId': 'bidderRequestId',
20
+ 'auctionId': 'auctionId-56a2-4f71-9098-720a68f2f708'
21
+ },
22
+ {
23
+ 'bidder': 'eskimi',
24
+ 'params': {
25
+ 'placementId': 1003001,
26
+ 'accId': 123
27
+ },
28
+ 'sizes': [
29
+ [300, 250]
30
+ ],
31
+ 'bidId': 'bidId2',
32
+ 'adUnitCode': 'adUnitCode2',
33
+ 'bidderRequestId': 'bidderRequestId',
34
+ 'auctionId': 'auctionId-56a2-4f71-9098-720a68f2f708'
35
+ }],
36
+ 'start': 1487883186070,
37
+ 'auctionStart': 1487883186069,
38
+ 'timeout': 3000
39
+ };
40
+
41
+ const RESPONSE = {
42
+ 'headers': null,
43
+ 'body': {
44
+ 'id': 'requestId',
45
+ 'seatbid': [
46
+ {
47
+ 'bid': [
48
+ {
49
+ 'id': 'bidId1',
50
+ 'impid': 'bidId1',
51
+ 'price': 0.18,
52
+ 'adm': '<script>adm</script>',
53
+ 'adid': '144762342',
54
+ 'adomain': [
55
+ 'https://dummydomain.com'
56
+ ],
57
+ 'iurl': 'iurl',
58
+ 'cid': '109',
59
+ 'crid': 'creativeId',
60
+ 'cat': [],
61
+ 'w': 300,
62
+ 'h': 250,
63
+ 'ext': {
64
+ 'prebid': {
65
+ 'type': 'banner'
66
+ },
67
+ 'bidder': {
68
+ 'eskimi': {
69
+ 'brand_id': 334553,
70
+ 'auction_id': 514667951122925701,
71
+ 'bidder_id': 2,
72
+ 'bid_ad_type': 0
73
+ }
74
+ }
75
+ }
76
+ }
77
+ ],
78
+ 'seat': 'seat'
79
+ }
80
+ ]
81
+ }
82
+ };
83
+
84
+ describe('Eskimi bid adapter', function () {
85
+ describe('isBidRequestValid', function () {
86
+ it('should accept request if placementId is passed', function () {
87
+ let bid = {
88
+ bidder: 'eskimi',
89
+ params: {
90
+ placementId: 123
91
+ }
92
+ };
93
+ expect(spec.isBidRequestValid(bid)).to.equal(true);
94
+ });
95
+ it('reject requests without params', function () {
96
+ let bid = {
97
+ bidder: 'eskimi',
98
+ params: {}
99
+ };
100
+ expect(spec.isBidRequestValid(bid)).to.equal(false);
101
+ });
102
+ });
103
+
104
+ describe('buildRequests', function () {
105
+ it('creates request data', function () {
106
+ let request = spec.buildRequests(REQUEST.bidRequest, REQUEST)[0];
107
+ expect(request).to.exist.and.to.be.a('object');
108
+ const payload = request.data;
109
+ expect(payload.imp[0]).to.have.property('id', REQUEST.bidRequest[0].bidId);
110
+ expect(payload.imp[1]).to.have.property('id', REQUEST.bidRequest[1].bidId);
111
+ });
112
+
113
+ it('has gdpr data if applicable', function () {
114
+ const req = Object.assign({}, REQUEST, {
115
+ gdprConsent: {
116
+ consentString: 'consentString',
117
+ gdprApplies: true,
118
+ }
119
+ });
120
+ let request = spec.buildRequests(REQUEST.bidRequest, req)[0];
121
+
122
+ const payload = request.data;
123
+ expect(payload.user.ext).to.have.property('consent', req.gdprConsent.consentString);
124
+ expect(payload.regs.ext).to.have.property('gdpr', 1);
125
+ });
126
+ });
127
+
128
+ describe('interpretResponse', function () {
129
+ it('has bids', function () {
130
+ let request = spec.buildRequests(REQUEST.bidRequest, REQUEST)[0];
131
+ let bids = spec.interpretResponse(RESPONSE, request);
132
+ expect(bids).to.be.an('array').that.is.not.empty;
133
+ validateBidOnIndex(0);
134
+
135
+ function validateBidOnIndex(index) {
136
+ expect(bids[index]).to.have.property('currency', 'USD');
137
+ expect(bids[index]).to.have.property('requestId', RESPONSE.body.seatbid[0].bid[index].id);
138
+ expect(bids[index]).to.have.property('cpm', RESPONSE.body.seatbid[0].bid[index].price);
139
+ expect(bids[index]).to.have.property('width', RESPONSE.body.seatbid[0].bid[index].w);
140
+ expect(bids[index]).to.have.property('height', RESPONSE.body.seatbid[0].bid[index].h);
141
+ expect(bids[index]).to.have.property('ad', RESPONSE.body.seatbid[0].bid[index].adm);
142
+ expect(bids[index]).to.have.property('creativeId', RESPONSE.body.seatbid[0].bid[index].crid);
143
+ expect(bids[index]).to.have.property('ttl', 30);
144
+ expect(bids[index]).to.have.property('netRevenue', true);
145
+ }
146
+ });
147
+
148
+ it('handles empty response', function () {
149
+ let request = spec.buildRequests(REQUEST.bidRequest, REQUEST)[0];
150
+ const EMPTY_RESP = Object.assign({}, RESPONSE, {'body': {}});
151
+ const bids = spec.interpretResponse(EMPTY_RESP, request);
152
+ expect(bids).to.be.empty;
153
+ });
154
+ });
155
+ });
@@ -480,6 +480,14 @@ describe('TheMediaGrid Adapter', function () {
480
480
  'h': 600,
481
481
  'protocols': [1, 2, 3],
482
482
  'mimes': ['video/mp4', 'video/webm', 'application/javascript', 'video/ogg'],
483
+ 'context': 'instream',
484
+ 'maxduration': 30,
485
+ 'minduration': 0,
486
+ 'api': [1, 2],
487
+ 'skip': 1,
488
+ 'placement': 1,
489
+ 'playbackmethod': 1,
490
+ 'startdelay': 0
483
491
  }
484
492
  }, {
485
493
  'id': bidRequests[3].bidId,
@@ -1703,6 +1703,63 @@ describe('IndexexchangeAdapter', function () {
1703
1703
  expect(r.regs.gpp_sid).to.be.an('array');
1704
1704
  expect(r.regs.gpp_sid).to.include(1);
1705
1705
  });
1706
+
1707
+ it('should add adunit specific data to imp ext for banner', function () {
1708
+ const AD_UNIT_CODE = '/19968336/some-adunit-path';
1709
+ const validBids = utils.deepClone(DEFAULT_BANNER_VALID_BID);
1710
+ validBids[0].ortb2Imp = {
1711
+ ext: {
1712
+ data: {
1713
+ adserver: {
1714
+ name: 'gam banner',
1715
+ adslot: AD_UNIT_CODE
1716
+ }
1717
+ }
1718
+ }
1719
+ };
1720
+ const requests = spec.buildRequests(validBids, DEFAULT_OPTION);
1721
+ const imp = extractPayload(requests[0]).imp[0];
1722
+ expect(deepAccess(imp, 'ext.data.adserver.name')).to.equal('gam banner');
1723
+ expect(deepAccess(imp, 'ext.data.adserver.adslot')).to.equal(AD_UNIT_CODE);
1724
+ });
1725
+
1726
+ it('should add adunit specific data to imp ext for native', function () {
1727
+ const AD_UNIT_CODE = '/19968336/some-adunit-path';
1728
+ const validBids = utils.deepClone(DEFAULT_NATIVE_VALID_BID);
1729
+ validBids[0].ortb2Imp = {
1730
+ ext: {
1731
+ data: {
1732
+ adserver: {
1733
+ name: 'gam native',
1734
+ adslot: AD_UNIT_CODE
1735
+ }
1736
+ }
1737
+ }
1738
+ };
1739
+ const requests = spec.buildRequests(validBids, DEFAULT_OPTION);
1740
+ const imp = extractPayload(requests[0]).imp[0];
1741
+ expect(deepAccess(imp, 'ext.data.adserver.name')).to.equal('gam native');
1742
+ expect(deepAccess(imp, 'ext.data.adserver.adslot')).to.equal(AD_UNIT_CODE);
1743
+ });
1744
+
1745
+ it('should add adunit specific data to imp ext for video', function () {
1746
+ const AD_UNIT_CODE = '/19968336/some-adunit-path';
1747
+ const validBids = utils.deepClone(DEFAULT_VIDEO_VALID_BID);
1748
+ validBids[0].ortb2Imp = {
1749
+ ext: {
1750
+ data: {
1751
+ adserver: {
1752
+ name: 'gam video',
1753
+ adslot: AD_UNIT_CODE
1754
+ }
1755
+ }
1756
+ }
1757
+ };
1758
+ const requests = spec.buildRequests(validBids, DEFAULT_OPTION);
1759
+ const imp = extractPayload(requests[0]).imp[0];
1760
+ expect(deepAccess(imp, 'ext.data.adserver.name')).to.equal('gam video');
1761
+ expect(deepAccess(imp, 'ext.data.adserver.adslot')).to.equal(AD_UNIT_CODE);
1762
+ });
1706
1763
  });
1707
1764
 
1708
1765
  describe('buildRequests', function () {