prebid.js 7.44.0 → 7.45.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 (254) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/acuityAdsBidAdapter.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/adrelevantisBidAdapter.js +1 -1
  8. package/dist/adtrgtmeBidAdapter.js +1 -1
  9. package/dist/adxcgBidAdapter.js +1 -1
  10. package/dist/adyoulikeBidAdapter.js +1 -1
  11. package/dist/ajaBidAdapter.js +1 -1
  12. package/dist/amxBidAdapter.js +1 -1
  13. package/dist/amxIdSystem.js +1 -1
  14. package/dist/appierAnalyticsAdapter.js +1 -1
  15. package/dist/appnexusBidAdapter.js +1 -1
  16. package/dist/appushBidAdapter.js +1 -1
  17. package/dist/asoBidAdapter.js +1 -1
  18. package/dist/axonixBidAdapter.js +1 -1
  19. package/dist/beyondmediaBidAdapter.js +1 -1
  20. package/dist/bidglassBidAdapter.js +1 -1
  21. package/dist/big-richmediaBidAdapter.js +1 -1
  22. package/dist/braveBidAdapter.js +1 -1
  23. package/dist/bridgewellBidAdapter.js +1 -1
  24. package/dist/brightMountainMediaBidAdapter.js +1 -1
  25. package/dist/brightcomBidAdapter.js +1 -1
  26. package/dist/brightcomSSPBidAdapter.js +1 -1
  27. package/dist/carodaBidAdapter.js +1 -1
  28. package/dist/chtnwBidAdapter.js +1 -1
  29. package/dist/coinzillaBidAdapter.js +1 -1
  30. package/dist/compassBidAdapter.js +1 -1
  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/contentexchangeBidAdapter.js +1 -1
  36. package/dist/conversantAnalyticsAdapter.js +1 -1
  37. package/dist/conversantBidAdapter.js +1 -1
  38. package/dist/craftBidAdapter.js +1 -1
  39. package/dist/criteoBidAdapter.js +1 -1
  40. package/dist/cwireBidAdapter.js +1 -1
  41. package/dist/dependencies.json +12 -0
  42. package/dist/domainOverrideToRootDomain.js +1 -0
  43. package/dist/dspxBidAdapter.js +1 -1
  44. package/dist/eplanningBidAdapter.js +1 -1
  45. package/dist/feedadBidAdapter.js +1 -1
  46. package/dist/finativeBidAdapter.js +1 -1
  47. package/dist/freewheel-sspBidAdapter.js +1 -1
  48. package/dist/glimpseBidAdapter.js +1 -1
  49. package/dist/globalsunBidAdapter.js +1 -1
  50. package/dist/gmosspBidAdapter.js +1 -1
  51. package/dist/goldbachBidAdapter.js +1 -1
  52. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  53. package/dist/gridBidAdapter.js +1 -1
  54. package/dist/gridNMBidAdapter.js +1 -1
  55. package/dist/growthCodeIdSystem.js +1 -1
  56. package/dist/gumgumBidAdapter.js +1 -1
  57. package/dist/h12mediaBidAdapter.js +1 -1
  58. package/dist/id5IdSystem.js +1 -1
  59. package/dist/improvedigitalBidAdapter.js +1 -1
  60. package/dist/inmarBidAdapter.js +1 -1
  61. package/dist/insticatorBidAdapter.js +1 -1
  62. package/dist/iqzoneBidAdapter.js +1 -1
  63. package/dist/ivsBidAdapter.js +1 -0
  64. package/dist/ixBidAdapter.js +1 -1
  65. package/dist/justpremiumBidAdapter.js +1 -1
  66. package/dist/jwplayerVideoProvider.js +1 -1
  67. package/dist/kargoBidAdapter.js +1 -1
  68. package/dist/koblerBidAdapter.js +1 -1
  69. package/dist/konduitAnalyticsAdapter.js +1 -1
  70. package/dist/kueezBidAdapter.js +1 -1
  71. package/dist/kueezRtbBidAdapter.js +1 -1
  72. package/dist/kulturemediaBidAdapter.js +1 -1
  73. package/dist/lassoBidAdapter.js +1 -1
  74. package/dist/lifestreetBidAdapter.js +1 -1
  75. package/dist/liveIntentIdSystem.js +1 -1
  76. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  77. package/dist/logicadBidAdapter.js +1 -1
  78. package/dist/loglyliftBidAdapter.js +1 -1
  79. package/dist/luponmediaBidAdapter.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/mathildeadsBidAdapter.js +1 -1
  84. package/dist/mediafuseBidAdapter.js +1 -1
  85. package/dist/medianetBidAdapter.js +1 -1
  86. package/dist/mediasquareBidAdapter.js +1 -1
  87. package/dist/mgidBidAdapter.js +1 -1
  88. package/dist/minutemediaBidAdapter.js +1 -1
  89. package/dist/minutemediaplusBidAdapter.js +1 -1
  90. package/dist/nexx360BidAdapter.js +1 -1
  91. package/dist/not-for-prod/prebid.js +158 -156
  92. package/dist/oguryBidAdapter.js +1 -1
  93. package/dist/onetagBidAdapter.js +1 -1
  94. package/dist/onomagicBidAdapter.js +1 -1
  95. package/dist/ooloAnalyticsAdapter.js +1 -1
  96. package/dist/openxBidAdapter.js +1 -1
  97. package/dist/openxOrtbBidAdapter.js +1 -1
  98. package/dist/operaadsBidAdapter.js +1 -1
  99. package/dist/optidigitalBidAdapter.js +1 -1
  100. package/dist/outbrainBidAdapter.js +1 -1
  101. package/dist/parrableIdSystem.js +1 -1
  102. package/dist/pixfutureBidAdapter.js +1 -1
  103. package/dist/prebid-core.js +1 -1
  104. package/dist/publinkIdSystem.js +1 -1
  105. package/dist/pubmaticBidAdapter.js +1 -1
  106. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  107. package/dist/pubxBidAdapter.js +1 -1
  108. package/dist/pxyzBidAdapter.js +1 -1
  109. package/dist/quantcastBidAdapter.js +1 -1
  110. package/dist/readpeakBidAdapter.js +1 -1
  111. package/dist/relaidoBidAdapter.js +1 -1
  112. package/dist/rhythmoneBidAdapter.js +1 -1
  113. package/dist/riseBidAdapter.js +1 -1
  114. package/dist/rubiconAnalyticsAdapter.js +1 -1
  115. package/dist/rubiconBidAdapter.js +1 -1
  116. package/dist/seedingAllianceBidAdapter.js +1 -1
  117. package/dist/seedtagBidAdapter.js +1 -1
  118. package/dist/sharedIdSystem.js +1 -1
  119. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  120. package/dist/sharethroughBidAdapter.js +1 -1
  121. package/dist/shinezBidAdapter.js +1 -1
  122. package/dist/smaatoBidAdapter.js +1 -1
  123. package/dist/smartadserverBidAdapter.js +1 -1
  124. package/dist/smarthubBidAdapter.js +1 -1
  125. package/dist/smartxBidAdapter.js +1 -1
  126. package/dist/smilewantedBidAdapter.js +1 -1
  127. package/dist/sonobiBidAdapter.js +1 -1
  128. package/dist/sovrnAnalyticsAdapter.js +1 -1
  129. package/dist/sovrnBidAdapter.js +1 -1
  130. package/dist/sspBCBidAdapter.js +1 -1
  131. package/dist/stvBidAdapter.js +1 -1
  132. package/dist/sublimeBidAdapter.js +1 -1
  133. package/dist/synacormediaBidAdapter.js +1 -1
  134. package/dist/targetVideoBidAdapter.js +1 -1
  135. package/dist/teadsBidAdapter.js +1 -1
  136. package/dist/trionBidAdapter.js +1 -1
  137. package/dist/tripleliftBidAdapter.js +1 -1
  138. package/dist/truereachBidAdapter.js +1 -1
  139. package/dist/ttdBidAdapter.js +1 -1
  140. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  141. package/dist/uid2IdSystem.js +1 -1
  142. package/dist/underdogmediaBidAdapter.js +1 -1
  143. package/dist/undertoneBidAdapter.js +1 -1
  144. package/dist/userId.js +1 -1
  145. package/dist/vidazooBidAdapter.js +1 -1
  146. package/dist/videobyteBidAdapter.js +1 -1
  147. package/dist/videoheroesBidAdapter.js +1 -1
  148. package/dist/vidoomyBidAdapter.js +1 -1
  149. package/dist/visiblemeasuresBidAdapter.js +1 -1
  150. package/dist/visxBidAdapter.js +1 -1
  151. package/dist/vrtcalBidAdapter.js +1 -1
  152. package/dist/vuukleBidAdapter.js +1 -1
  153. package/dist/widespaceBidAdapter.js +1 -1
  154. package/dist/winrBidAdapter.js +1 -1
  155. package/dist/yahoosspBidAdapter.js +1 -1
  156. package/dist/yieldmoBidAdapter.js +1 -1
  157. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  158. package/dist/yieldoneBidAdapter.js +1 -1
  159. package/libraries/domainOverrideToRootDomain/index.js +39 -0
  160. package/modules/acuityAdsBidAdapter.js +1 -1
  161. package/modules/amxBidAdapter.js +1 -1
  162. package/modules/amxIdSystem.js +23 -20
  163. package/modules/amxIdSystem.md +7 -7
  164. package/modules/appushBidAdapter.js +1 -1
  165. package/modules/beyondmediaBidAdapter.js +1 -1
  166. package/modules/braveBidAdapter.js +1 -1
  167. package/modules/brightcomBidAdapter.js +1 -1
  168. package/modules/brightcomSSPBidAdapter.js +1 -1
  169. package/modules/coinzillaBidAdapter.js +1 -2
  170. package/modules/compassBidAdapter.js +1 -1
  171. package/modules/connectIdSystem.js +96 -21
  172. package/modules/connectIdSystem.md +6 -5
  173. package/modules/contentexchangeBidAdapter.js +1 -1
  174. package/modules/freewheel-sspBidAdapter.js +8 -0
  175. package/modules/glimpseBidAdapter.js +1 -2
  176. package/modules/globalsunBidAdapter.js +1 -1
  177. package/modules/gridBidAdapter.js +1 -1
  178. package/modules/gridNMBidAdapter.js +1 -1
  179. package/modules/growthCodeIdSystem.js +18 -15
  180. package/modules/gumgumBidAdapter.js +1 -1
  181. package/modules/iqzoneBidAdapter.js +1 -1
  182. package/modules/ivsBidAdapter.js +85 -0
  183. package/modules/ivsBidAdapter.md +34 -0
  184. package/modules/ixBidAdapter.js +42 -105
  185. package/modules/jwplayerVideoProvider.js +25 -32
  186. package/modules/koblerBidAdapter.js +1 -2
  187. package/modules/kueezBidAdapter.js +1 -1
  188. package/modules/liveIntentIdSystem.js +8 -0
  189. package/modules/luponmediaBidAdapter.js +1 -1
  190. package/modules/magniteAnalyticsAdapter.js +76 -3
  191. package/modules/mathildeadsBidAdapter.js +1 -1
  192. package/modules/medianetBidAdapter.js +1 -1
  193. package/modules/mgidBidAdapter.js +178 -26
  194. package/modules/minutemediaBidAdapter.js +1 -1
  195. package/modules/oguryBidAdapter.js +3 -2
  196. package/modules/onomagicBidAdapter.js +1 -2
  197. package/modules/openxBidAdapter.js +192 -563
  198. package/modules/openxBidAdapter.md +22 -20
  199. package/modules/openxOrtbBidAdapter.js +13 -11
  200. package/modules/openxOrtbBidAdapter.md +5 -3
  201. package/modules/operaadsBidAdapter.js +1 -1
  202. package/modules/pubmaticBidAdapter.js +1 -1
  203. package/modules/pubxBidAdapter.js +5 -2
  204. package/modules/riseBidAdapter.js +1 -1
  205. package/modules/sharedIdSystem.js +4 -27
  206. package/modules/sharethroughBidAdapter.js +1 -1
  207. package/modules/shinezBidAdapter.js +1 -1
  208. package/modules/smarthubBidAdapter.js +1 -1
  209. package/modules/synacormediaBidAdapter.js +1 -3
  210. package/modules/truereachBidAdapter.js +1 -2
  211. package/modules/userId/eids.js +18 -0
  212. package/modules/userId/eids.md +16 -0
  213. package/modules/videoheroesBidAdapter.js +1 -1
  214. package/modules/vidoomyBidAdapter.js +22 -1
  215. package/modules/visiblemeasuresBidAdapter.js +1 -1
  216. package/modules/vrtcalBidAdapter.js +1 -1
  217. package/modules/yieldoneBidAdapter.js +1 -1
  218. package/package.json +1 -1
  219. package/src/Renderer.js +2 -1
  220. package/src/native.js +5 -1
  221. package/test/spec/auctionmanager_spec.js +2 -2
  222. package/test/spec/libraries/domainOverrideToRootDomain/index_spec.js +77 -0
  223. package/test/spec/modules/acuityAdsBidAdapter_spec.js +2 -1
  224. package/test/spec/modules/amxIdSystem_spec.js +13 -26
  225. package/test/spec/modules/appushBidAdapter_spec.js +2 -1
  226. package/test/spec/modules/beyondmediaBidAdapter_spec.js +2 -1
  227. package/test/spec/modules/compassBidAdapter_spec.js +2 -1
  228. package/test/spec/modules/connectIdSystem_spec.js +420 -242
  229. package/test/spec/modules/contentexchangeBidAdapter_spec.js +2 -1
  230. package/test/spec/modules/eids_spec.js +30 -0
  231. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +37 -0
  232. package/test/spec/modules/globalsunBidAdapter_spec.js +2 -1
  233. package/test/spec/modules/iqzoneBidAdapter_spec.js +2 -1
  234. package/test/spec/modules/ivsBidAdapter_spec.js +197 -0
  235. package/test/spec/modules/ixBidAdapter_spec.js +84 -71
  236. package/test/spec/modules/koblerBidAdapter_spec.js +0 -20
  237. package/test/spec/modules/liveIntentIdSystem_spec.js +10 -0
  238. package/test/spec/modules/luponmediaBidAdapter_spec.js +1 -1
  239. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +129 -1
  240. package/test/spec/modules/mathildeadsBidAdapter_spec.js +2 -1
  241. package/test/spec/modules/mgidBidAdapter_spec.js +184 -36
  242. package/test/spec/modules/oguryBidAdapter_spec.js +19 -4
  243. package/test/spec/modules/openxBidAdapter_spec.js +1157 -1936
  244. package/test/spec/modules/openxOrtbBidAdapter_spec.js +12 -39
  245. package/test/spec/modules/pubxBidAdapter_spec.js +10 -2
  246. package/test/spec/modules/sharedIdSystem_spec.js +0 -46
  247. package/test/spec/modules/sharethroughBidAdapter_spec.js +2 -1
  248. package/test/spec/modules/smarthubBidAdapter_spec.js +2 -1
  249. package/test/spec/modules/synacormediaBidAdapter_spec.js +0 -26
  250. package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +17 -4
  251. package/test/spec/modules/vidoomyBidAdapter_spec.js +35 -0
  252. package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +2 -1
  253. package/test/spec/modules/vrtcalBidAdapter_spec.js +3 -2
  254. package/test/spec/renderer_spec.js +1 -2
@@ -79,7 +79,8 @@ describe('ContentexchangeBidAdapter', function () {
79
79
  gdprConsent: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
80
80
  refererInfo: {
81
81
  referer: 'https://test.com'
82
- }
82
+ },
83
+ timeout: 500
83
84
  };
84
85
 
85
86
  describe('isBidRequestValid', function () {
@@ -172,6 +172,36 @@ describe('eids array generation for known sub-modules', function() {
172
172
  });
173
173
  });
174
174
 
175
+ it('bidswitch', function() {
176
+ const userId = {
177
+ bidswitch: {'id': 'sample_id'}
178
+ };
179
+ const newEids = createEidsArray(userId);
180
+ expect(newEids.length).to.equal(1);
181
+ expect(newEids[0]).to.deep.equal({
182
+ source: 'bidswitch.net',
183
+ uids: [{
184
+ id: 'sample_id',
185
+ atype: 3
186
+ }]
187
+ });
188
+ });
189
+
190
+ it('medianet', function() {
191
+ const userId = {
192
+ medianet: {'id': 'sample_id'}
193
+ };
194
+ const newEids = createEidsArray(userId);
195
+ expect(newEids.length).to.equal(1);
196
+ expect(newEids[0]).to.deep.equal({
197
+ source: 'media.net',
198
+ uids: [{
199
+ id: 'sample_id',
200
+ atype: 3
201
+ }]
202
+ });
203
+ });
204
+
175
205
  it('liveIntentId; getValue call and NO ext', function() {
176
206
  const userId = {
177
207
  lipb: {
@@ -252,6 +252,13 @@ describe('freewheelSSP BidAdapter Test', () => {
252
252
  }
253
253
  ];
254
254
 
255
+ it('should return context and placement with default values', () => {
256
+ const request = spec.buildRequests(bidRequests);
257
+ const payload = request[0].data;
258
+ expect(payload.video_context).to.equal('instream'); ;
259
+ expect(payload.video_placement).to.equal(1);
260
+ });
261
+
255
262
  it('should add parameters to the tag', () => {
256
263
  const request = spec.buildRequests(bidRequests);
257
264
  const payload = request[0].data;
@@ -319,6 +326,36 @@ describe('freewheelSSP BidAdapter Test', () => {
319
326
  });
320
327
  })
321
328
 
329
+ describe('buildRequestsForVideoWithContextAndPlacement', () => {
330
+ let bidRequests = [
331
+ {
332
+ 'bidder': 'freewheel-ssp',
333
+ 'params': {
334
+ 'zoneId': '277225'
335
+ },
336
+ 'adUnitCode': 'adunit-code',
337
+ 'mediaTypes': {
338
+ 'video': {
339
+ 'context': 'outstream',
340
+ 'placement': 2,
341
+ 'playerSize': [300, 600],
342
+ }
343
+ },
344
+ 'sizes': [[300, 250], [300, 600]],
345
+ 'bidId': '30b31c1838de1e',
346
+ 'bidderRequestId': '22edbae2733bf6',
347
+ 'auctionId': '1d1a030790a475',
348
+ }
349
+ ];
350
+
351
+ it('should return input context and placement', () => {
352
+ const request = spec.buildRequests(bidRequests);
353
+ const payload = request[0].data;
354
+ expect(payload.video_context).to.equal('outstream'); ;
355
+ expect(payload.video_placement).to.equal(2);
356
+ });
357
+ })
358
+
322
359
  describe('interpretResponseForBanner', () => {
323
360
  let bidRequests = [
324
361
  {
@@ -76,7 +76,8 @@ describe('GlobalsunBidAdapter', function () {
76
76
  gdprConsent: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
77
77
  refererInfo: {
78
78
  referer: 'https://test.com'
79
- }
79
+ },
80
+ timeout: 500
80
81
  };
81
82
 
82
83
  describe('isBidRequestValid', function () {
@@ -76,7 +76,8 @@ describe('IQZoneBidAdapter', function () {
76
76
  gdprConsent: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
77
77
  refererInfo: {
78
78
  referer: 'https://test.com'
79
- }
79
+ },
80
+ timeout: 500
80
81
  };
81
82
 
82
83
  describe('isBidRequestValid', function () {
@@ -0,0 +1,197 @@
1
+ import { spec, converter } from 'modules/ivsBidAdapter.js';
2
+ import { assert } from 'chai';
3
+ import { deepClone } from '../../../src/utils';
4
+
5
+ describe('ivsBidAdapter', function () {
6
+ describe('isBidRequestValid()', function () {
7
+ let validBid = {
8
+ bidder: 'ivs',
9
+ mediaTypes: {
10
+ video: {
11
+ context: 'instream',
12
+ playerSize: [640, 480],
13
+ mimes: ['video/mp4']
14
+ }
15
+ },
16
+ params: {
17
+ bidderDomain: 'https://www.example.com',
18
+ publisherId: '3001234'
19
+ }
20
+ };
21
+
22
+ it('should return true for a valid bid', function () {
23
+ assert.isTrue(spec.isBidRequestValid(validBid));
24
+ });
25
+
26
+ it('should return false if publisherId info is missing', function () {
27
+ let bid = deepClone(validBid);
28
+ delete bid.params.publisherId;
29
+ assert.isFalse(spec.isBidRequestValid(bid));
30
+ });
31
+
32
+ it('should return false for empty video parameters', function () {
33
+ let bid = deepClone(validBid);
34
+ delete bid.mediaTypes.video;
35
+ assert.isFalse(spec.isBidRequestValid(bid));
36
+ });
37
+
38
+ it('should return false for non instream context', function () {
39
+ let bid = deepClone(validBid);
40
+ bid.mediaTypes.video.context = 'outstream';
41
+ assert.isFalse(spec.isBidRequestValid(bid));
42
+ });
43
+ });
44
+
45
+ describe('buildRequests()', function () {
46
+ let validBidRequests, validBidderRequest;
47
+
48
+ beforeEach(function () {
49
+ validBidRequests = [{
50
+ bidder: 'ivs',
51
+ mediaTypes: {
52
+ video: {
53
+ context: 'instream',
54
+ playerSize: [640, 480],
55
+ mimes: ['video/mp4']
56
+ },
57
+ adUnitCode: 'video1',
58
+ transactionId: '1f420478-a3cd-452d-8e33-ac851e7bfba6',
59
+ bidId: '2d986cea00fd01',
60
+ bidderRequestId: '1022d594d79bf5',
61
+ auctionId: '835eacc9-cfe7-4fa2-8738-ab4b5c4f26d2'
62
+ },
63
+ params: {
64
+ bidderDomain: 'https://www.example.com',
65
+ publisherId: '3001234'
66
+ }
67
+ }];
68
+
69
+ validBidderRequest = {
70
+ bidderCode: 'ivs',
71
+ auctionId: '409bd13d-d0be-43c4-9c4f-e6f81ecff475',
72
+ bidderRequestId: '17bfe74bd98e68',
73
+ refererInfo: {
74
+ domain: 'example.com',
75
+ page: 'https://www.example.com/test.html',
76
+ },
77
+ bids: [{
78
+ bidder: 'ivs',
79
+ params: {
80
+ publisherId: '3001234'
81
+ },
82
+ mediaTypes: {
83
+ video: {
84
+ context: 'instream',
85
+ playerSize: [[640, 480]],
86
+ mimes: ['video/mp4']
87
+ }
88
+ },
89
+ adUnitCode: 'video1',
90
+ transactionId: '91b1977f-d05c-45c3-af1f-69b4e7d11e86',
91
+ sizes: [
92
+ [640, 480]
93
+ ],
94
+ }],
95
+ ortb2: {
96
+ site: {
97
+ publisher: {
98
+ domain: 'example.com',
99
+ }
100
+ }
101
+ }
102
+ };
103
+ });
104
+
105
+ it('should return a validate bid request', function () {
106
+ const bidRequest = spec.buildRequests(validBidRequests, validBidderRequest);
107
+ assert.equal(bidRequest.method, 'POST');
108
+ assert.deepEqual(bidRequest.options, { contentType: 'application/json' });
109
+ assert.ok(bidRequest.data);
110
+ });
111
+
112
+ it('should contain the required parameters', function () {
113
+ const bidRequest = spec.buildRequests(validBidRequests, validBidderRequest);
114
+ const bidderRequest = bidRequest.data;
115
+ assert.equal(bidderRequest.id, validBidderRequest.auctionId);
116
+ assert.ok(bidderRequest.site);
117
+ assert.ok(bidderRequest.source);
118
+ assert.lengthOf(bidderRequest.imp, 1);
119
+ });
120
+ });
121
+
122
+ describe('interpretResponse()', function () {
123
+ let serverResponse, bidderRequest, request;
124
+
125
+ beforeEach(function () {
126
+ serverResponse = {
127
+ body: {
128
+ id: '635ba1ed-68ba-47b4-bcec-4a86565f25f9',
129
+ seatbid: [{
130
+ bid: [{
131
+ crid: 3715,
132
+ id: 'bca9823d-ca7a-4dac-b292-0e1fae5948f8',
133
+ impid: '200d1ca23b15a6',
134
+ price: 1.5,
135
+ nurl: 'https://a.ivstracker.net/dev/getvastxml?ad_creativeid=3715&domain=localhost%3A9999&ip=136.158.51.114&pageurl=http%3A%2F%2Flocalhost%3A9999%2Ftest%2Fpages%2Fivs.html&spid=3001234&adplacement=&brand=unknown&device=desktop&adsclientid=A45-fd46289e-dc60-4be2-a637-4bc8eb953ddf&clientid=3b5e435f-0351-4ba0-bd2d-8d6f3454c5ed&uastring=Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_15_7)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F109.0.0.0%20Safari%2F537.36'
136
+ }]
137
+ }],
138
+ cur: 'USD'
139
+ },
140
+ headers: {}
141
+ };
142
+
143
+ bidderRequest = {
144
+ bidderCode: 'ivs',
145
+ auctionId: '635ba1ed-68ba-47b4-bcec-4a86565f25f9',
146
+ bidderRequestId: '1def3e1d03f5a',
147
+ bids: [{
148
+ bidder: 'ivs',
149
+ params: {
150
+ publisherId: '3001234'
151
+ },
152
+ mediaTypes: {
153
+ video: {
154
+ context: 'instream',
155
+ playerSize: [
156
+ [640, 480]
157
+ ],
158
+ mimes: ['video/mp4']
159
+ }
160
+ },
161
+ adUnitCode: 'video1',
162
+ transactionId: '89e5a3e7-df30-4ed6-a130-edfa91941e67',
163
+ bidId: '200d1ca23b15a6',
164
+ bidderRequestId: '1def3e1d03f5a',
165
+ auctionId: '635ba1ed-68ba-47b4-bcec-4a86565f25f9'
166
+ }],
167
+ };
168
+
169
+ request = { data: converter.toORTB({ bidderRequest }) };
170
+ });
171
+
172
+ if (FEATURES.VIDEO) {
173
+ it('should match parsed server response', function () {
174
+ const results = spec.interpretResponse(serverResponse, request);
175
+ const expected = {
176
+ mediaType: 'video',
177
+ playerWidth: 640,
178
+ playerHeight: 480,
179
+ vastUrl: 'https://a.ivstracker.net/dev/getvastxml?ad_creativeid=3715&domain=localhost%3A9999&ip=136.158.51.114&pageurl=http%3A%2F%2Flocalhost%3A9999%2Ftest%2Fpages%2Fivs.html&spid=3001234&adplacement=&brand=unknown&device=desktop&adsclientid=A45-fd46289e-dc60-4be2-a637-4bc8eb953ddf&clientid=3b5e435f-0351-4ba0-bd2d-8d6f3454c5ed&uastring=Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_15_7)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F109.0.0.0%20Safari%2F537.36',
180
+ requestId: '200d1ca23b15a6',
181
+ seatBidId: 'bca9823d-ca7a-4dac-b292-0e1fae5948f8',
182
+ cpm: 1.5,
183
+ currency: 'USD',
184
+ creativeId: 3715,
185
+ ttl: 360,
186
+ };
187
+
188
+ expect(results.length).to.equal(1);
189
+ sinon.assert.match(results[0], expected);
190
+ });
191
+ }
192
+
193
+ it('should return empty when no response', function () {
194
+ assert.ok(!spec.interpretResponse({}, request));
195
+ });
196
+ });
197
+ });
@@ -2,14 +2,14 @@ import * as utils from 'src/utils.js';
2
2
  import { config } from 'src/config.js';
3
3
  import { expect } from 'chai';
4
4
  import { newBidder } from 'src/adapters/bidderFactory.js';
5
- import { spec, storage, ERROR_CODES, FEATURE_TOGGLES, LOCAL_STORAGE_FEATURE_TOGGLES_KEY } from '../../../modules/ixBidAdapter.js';
5
+ import { spec, storage, ERROR_CODES, FEATURE_TOGGLES, LOCAL_STORAGE_FEATURE_TOGGLES_KEY, REQUESTED_FEATURE_TOGGLES } from '../../../modules/ixBidAdapter.js';
6
6
  import { createEidsArray } from 'modules/userId/eids.js';
7
7
  import { deepAccess, deepClone } from '../../../src/utils.js';
8
8
 
9
9
  describe('IndexexchangeAdapter', function () {
10
10
  const IX_SECURE_ENDPOINT = 'https://htlb.casalemedia.com/openrtb/pbjs';
11
- const VIDEO_ENDPOINT_VERSION = 8.1;
12
- const BANNER_ENDPOINT_VERSION = 7.2;
11
+
12
+ FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES = ['test1', 'test2'];
13
13
 
14
14
  const SAMPLE_SCHAIN = {
15
15
  'ver': '1.0',
@@ -1669,27 +1669,6 @@ describe('IndexexchangeAdapter', function () {
1669
1669
  expect(r.user.testProperty).to.be.undefined;
1670
1670
  });
1671
1671
 
1672
- it('should not add fpd data to r object if it exceeds maximum request', function () {
1673
- const ortb2 = {
1674
- site: {
1675
- keywords: 'power tools, drills',
1676
- search: 'drill',
1677
- },
1678
- user: {
1679
- keywords: Array(1200).join('#'),
1680
- }
1681
- };
1682
-
1683
- const bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
1684
- bid.mediaTypes.banner.sizes = LARGE_SET_OF_SIZES;
1685
-
1686
- const request = spec.buildRequests([bid], { ortb2 })[0];
1687
- const r = extractPayload(request);
1688
-
1689
- expect(r.site.ref).to.exist;
1690
- expect(r.site.keywords).to.be.undefined;
1691
- expect(r.user).to.be.undefined;
1692
- });
1693
1672
  it('should set gpp and gpp_sid field when defined', function () {
1694
1673
  const request = spec.buildRequests(DEFAULT_BANNER_VALID_BID, { ortb2: {regs: {gpp: 'gpp', gpp_sid: [1]}} })[0];
1695
1674
  const r = extractPayload(request);
@@ -2273,7 +2252,7 @@ describe('IndexexchangeAdapter', function () {
2273
2252
  expect(requests[0].data.sn).to.be.undefined;
2274
2253
  });
2275
2254
 
2276
- it('2 requests due to 2 ad units, one larger than url size', function () {
2255
+ it('1 request, one larger than url size, no splitting', function () {
2277
2256
  const bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
2278
2257
  bid.mediaTypes.banner.sizes = LARGE_SET_OF_SIZES;
2279
2258
  bid.params.siteId = '124';
@@ -2283,10 +2262,10 @@ describe('IndexexchangeAdapter', function () {
2283
2262
 
2284
2263
  const requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
2285
2264
  expect(requests).to.be.an('array');
2286
- expect(requests).to.have.lengthOf(2);
2265
+ expect(requests).to.have.lengthOf(1);
2287
2266
  });
2288
2267
 
2289
- it('6 ad units should generate only 4 requests', function () {
2268
+ it('6 ad units should generate only 1 requests', function () {
2290
2269
  const bid1 = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
2291
2270
  bid1.mediaTypes.banner.sizes = LARGE_SET_OF_SIZES;
2292
2271
  bid1.params.siteId = '121';
@@ -2312,7 +2291,7 @@ describe('IndexexchangeAdapter', function () {
2312
2291
  const requests = spec.buildRequests([bid1, bid2, bid3, bid4, bid5, bid6], DEFAULT_OPTION);
2313
2292
 
2314
2293
  expect(requests).to.be.an('array');
2315
- expect(requests).to.have.lengthOf(4);
2294
+ expect(requests).to.have.lengthOf(1);
2316
2295
 
2317
2296
  for (var i = 0; i < requests.length; i++) {
2318
2297
  const reqSize = `${requests[i].url}?${utils.parseQueryStringParameters(requests[i].data)}`.length;
@@ -3611,7 +3590,7 @@ describe('IndexexchangeAdapter', function () {
3611
3590
  }
3612
3591
  }
3613
3592
  FEATURE_TOGGLES.getFeatureToggles(LOCAL_STORAGE_FEATURE_TOGGLES_KEY);
3614
- expect(FEATURE_TOGGLES.isFeatureEnabled('test')).to.be.undefined;
3593
+ expect(FEATURE_TOGGLES.isFeatureEnabled('test')).to.be.false;
3615
3594
  expect(FEATURE_TOGGLES.featureToggles).to.deep.equal({});
3616
3595
  });
3617
3596
 
@@ -3672,6 +3651,82 @@ describe('IndexexchangeAdapter', function () {
3672
3651
  expect(requests).to.be.an('array');
3673
3652
  expect(requests).to.have.lengthOf(1);
3674
3653
  });
3654
+
3655
+ it('request should have requested feature toggles when local storage is enabled', function () {
3656
+ sandbox.stub(storage, 'localStorageIsEnabled').returns(true);
3657
+ const bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3658
+ const requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3659
+ const r = extractPayload(requests[0]);
3660
+ expect(r.ext.features).to.exist;
3661
+ expect(Object.keys(r.ext.features).length).to.equal(FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES.length);
3662
+ });
3663
+
3664
+ it('request should have requested feature toggles when local storage is not enabled', function () {
3665
+ sandbox.stub(storage, 'localStorageIsEnabled').returns(false);
3666
+ const bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3667
+ const requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3668
+ const r = extractPayload(requests[0]);
3669
+ expect(r.ext.features).to.exist;
3670
+ expect(Object.keys(r.ext.features).length).to.equal(FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES.length);
3671
+ });
3672
+
3673
+ it('request should not have any feature toggles when there is no requested feature toggle', function () {
3674
+ sandbox.stub(storage, 'localStorageIsEnabled').returns(true);
3675
+ const bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3676
+ FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES = []
3677
+ const requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3678
+ const r = extractPayload(requests[0]);
3679
+ expect(r.ext.features).to.be.undefined;
3680
+ });
3681
+
3682
+ it('request should not have any feature toggles when there is no requested feature toggle and local storage not enabled', function () {
3683
+ sandbox.stub(storage, 'localStorageIsEnabled').returns(false);
3684
+ const bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3685
+ const requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3686
+ const r = extractPayload(requests[0]);
3687
+ FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES = []
3688
+ expect(r.ext.features).to.be.undefined;
3689
+ });
3690
+
3691
+ it('correct activation status of requested feature toggles when local storage not enabled', function () {
3692
+ sandbox.stub(storage, 'localStorageIsEnabled').returns(false);
3693
+ const bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3694
+ FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES = ['test1']
3695
+ const requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3696
+ const r = extractPayload(requests[0]);
3697
+ expect(r.ext.features).to.deep.equal({
3698
+ [FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES[0]]: { activated: false }
3699
+ });
3700
+ });
3701
+
3702
+ it('correct activation status of requested feature toggles', function () {
3703
+ sandbox.stub(storage, 'localStorageIsEnabled').returns(true);
3704
+ serverResponse.body.ext.features = {
3705
+ [FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES[0]]: {
3706
+ activated: true
3707
+ }
3708
+ }
3709
+ FEATURE_TOGGLES.setFeatureToggles(serverResponse);
3710
+ let bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3711
+ let requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3712
+ let r = extractPayload(requests[0]);
3713
+ expect(r.ext.features).to.deep.equal({
3714
+ [FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES[0]]: { activated: true }
3715
+ });
3716
+
3717
+ serverResponse.body.ext.features = {
3718
+ [FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES[0]]: {
3719
+ activated: false
3720
+ }
3721
+ }
3722
+ FEATURE_TOGGLES.setFeatureToggles(serverResponse);
3723
+ bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3724
+ requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3725
+ r = extractPayload(requests[0]);
3726
+ expect(r.ext.features).to.deep.equal({
3727
+ [FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES[0]]: { activated: false }
3728
+ });
3729
+ });
3675
3730
  });
3676
3731
 
3677
3732
  describe('LocalStorage error codes', () => {
@@ -3751,48 +3806,6 @@ describe('IndexexchangeAdapter', function () {
3751
3806
  expect(JSON.parse(localStorageValues[key])).to.deep.equal({ [TODAY]: { [ERROR_CODES.BID_FLOOR_INVALID_FORMAT]: 1 } });
3752
3807
  });
3753
3808
 
3754
- it('should log ERROR_CODES.IX_FPD_EXCEEDS_MAX_SIZE in LocalStorage when there is logError called.', () => {
3755
- const bid = utils.deepClone(DEFAULT_MULTIFORMAT_VIDEO_VALID_BID[0]);
3756
-
3757
- config.setConfig({
3758
- ix: {
3759
- firstPartyData: {
3760
- cd: Array(1700).join('#')
3761
- }
3762
- }
3763
- });
3764
-
3765
- expect(spec.isBidRequestValid(bid)).to.be.true;
3766
- spec.buildRequests([bid], {});
3767
- expect(JSON.parse(localStorageValues[key])).to.deep.equal({ [TODAY]: { [ERROR_CODES.IX_FPD_EXCEEDS_MAX_SIZE]: 2 } });
3768
- });
3769
-
3770
- it('should log ERROR_CODES.EXCEEDS_MAX_SIZE in LocalStorage when there is logError called.', () => {
3771
- const bid = utils.deepClone(DEFAULT_MULTIFORMAT_VIDEO_VALID_BID[0]);
3772
- bid.bidderRequestId = Array(8000).join('#');
3773
-
3774
- expect(spec.isBidRequestValid(bid)).to.be.true;
3775
- spec.buildRequests([bid], {});
3776
- expect(JSON.parse(localStorageValues[key])).to.deep.equal({ [TODAY]: { [ERROR_CODES.EXCEEDS_MAX_SIZE]: 2 } });
3777
- });
3778
-
3779
- it('should log ERROR_CODES.PB_FPD_EXCEEDS_MAX_SIZE in LocalStorage when there is logError called.', () => {
3780
- const bid = utils.deepClone(DEFAULT_MULTIFORMAT_VIDEO_VALID_BID[0]);
3781
- const ortb2 = {
3782
- site: {
3783
- ext: {
3784
- data: {
3785
- pageType: Array(5700).join('#')
3786
- }
3787
- }
3788
- }
3789
- };
3790
-
3791
- expect(spec.isBidRequestValid(bid)).to.be.true;
3792
- spec.buildRequests([bid], { ortb2 });
3793
- expect(JSON.parse(localStorageValues[key])).to.deep.equal({ [TODAY]: { [ERROR_CODES.PB_FPD_EXCEEDS_MAX_SIZE]: 2 } });
3794
- });
3795
-
3796
3809
  it('should log ERROR_CODES.VIDEO_DURATION_INVALID in LocalStorage when there is logError called.', () => {
3797
3810
  const bid = utils.deepClone(DEFAULT_MULTIFORMAT_VIDEO_VALID_BID[0]);
3798
3811
  bid.params.video.minduration = 1;
@@ -366,26 +366,6 @@ describe('KoblerAdapter', function () {
366
366
  expect(openRtbRequest.imp[1].pmp.deals[1].id).to.be.equal(dealIds2[1]);
367
367
  });
368
368
 
369
- it('should read timeout from config', function () {
370
- const timeout = 4000;
371
- const validBidRequests = [createValidBidRequest()];
372
- // No timeout field
373
- const bidderRequest = {
374
- auctionId: 'c1243d83-0bed-4fdb-8c76-42b456be17d0',
375
- refererInfo: {
376
- page: 'example.com'
377
- }
378
- };
379
- config.setConfig({
380
- bidderTimeout: timeout
381
- });
382
-
383
- const result = spec.buildRequests(validBidRequests, bidderRequest);
384
- const openRtbRequest = JSON.parse(result.data);
385
-
386
- expect(openRtbRequest.tmax).to.be.equal(timeout);
387
- });
388
-
389
369
  it('should read floor price using floors module', function () {
390
370
  const floorPriceFor580x400 = 6.5148;
391
371
  const floorPriceForAnySize = 4.2343;
@@ -313,6 +313,16 @@ describe('LiveIntentId', function() {
313
313
  expect(result).to.eql({'lipb': {'lipbid': 'foo', 'nonId': 'foo', 'uid2': 'bar'}, 'uid2': {'id': 'bar'}});
314
314
  });
315
315
 
316
+ it('should decode a bidswitch id to a seperate object when present', function() {
317
+ const result = liveIntentIdSubmodule.decode({ nonId: 'foo', bidswitch: 'bar' });
318
+ expect(result).to.eql({'lipb': {'lipbid': 'foo', 'nonId': 'foo', 'bidswitch': 'bar'}, 'bidswitch': {'id': 'bar'}});
319
+ });
320
+
321
+ it('should decode a medianet id to a seperate object when present', function() {
322
+ const result = liveIntentIdSubmodule.decode({ nonId: 'foo', medianet: 'bar' });
323
+ expect(result).to.eql({'lipb': {'lipbid': 'foo', 'nonId': 'foo', 'medianet': 'bar'}, 'medianet': {'id': 'bar'}});
324
+ });
325
+
316
326
  it('should decode values with uid2 but no nonId', function() {
317
327
  const result = liveIntentIdSubmodule.decode({ uid2: 'bar' });
318
328
  expect(result).to.eql({'uid2': {'id': 'bar'}});
@@ -133,7 +133,7 @@ describe('luponmediaBidAdapter', function () {
133
133
  }
134
134
  ],
135
135
  'auctionStart': 1587413920820,
136
- 'timeout': 2000,
136
+ 'timeout': 1500,
137
137
  'refererInfo': {
138
138
  'page': 'https://novi.ba/clanak/176067/fast-car-beginner-s-guide-to-tuning-turbo-engines',
139
139
  'reachedTop': true,