prebid.js 7.44.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 (309) 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/admaticBidAdapter.js +1 -1
  8. package/dist/adnuntiusBidAdapter.js +1 -1
  9. package/dist/adrelevantisBidAdapter.js +1 -1
  10. package/dist/adtrgtmeBidAdapter.js +1 -1
  11. package/dist/adxcgBidAdapter.js +1 -1
  12. package/dist/adyoulikeBidAdapter.js +1 -1
  13. package/dist/ajaBidAdapter.js +1 -1
  14. package/dist/amxBidAdapter.js +1 -1
  15. package/dist/amxIdSystem.js +1 -1
  16. package/dist/appierAnalyticsAdapter.js +1 -1
  17. package/dist/appnexusBidAdapter.js +1 -1
  18. package/dist/appushBidAdapter.js +1 -1
  19. package/dist/asoBidAdapter.js +1 -1
  20. package/dist/axonixBidAdapter.js +1 -1
  21. package/dist/beyondmediaBidAdapter.js +1 -1
  22. package/dist/bidglassBidAdapter.js +1 -1
  23. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  24. package/dist/big-richmediaBidAdapter.js +1 -1
  25. package/dist/braveBidAdapter.js +1 -1
  26. package/dist/bridgewellBidAdapter.js +1 -1
  27. package/dist/brightMountainMediaBidAdapter.js +1 -1
  28. package/dist/brightcomBidAdapter.js +1 -1
  29. package/dist/brightcomSSPBidAdapter.js +1 -1
  30. package/dist/carodaBidAdapter.js +1 -1
  31. package/dist/chtnwBidAdapter.js +1 -1
  32. package/dist/coinzillaBidAdapter.js +1 -1
  33. package/dist/compassBidAdapter.js +1 -1
  34. package/dist/concertBidAdapter.js +1 -1
  35. package/dist/connectIdSystem.js +1 -1
  36. package/dist/connectadBidAdapter.js +1 -1
  37. package/dist/consumableBidAdapter.js +1 -1
  38. package/dist/contentexchangeBidAdapter.js +1 -1
  39. package/dist/conversantAnalyticsAdapter.js +1 -1
  40. package/dist/conversantBidAdapter.js +1 -1
  41. package/dist/craftBidAdapter.js +1 -1
  42. package/dist/criteoBidAdapter.js +1 -1
  43. package/dist/cwireBidAdapter.js +1 -1
  44. package/dist/debugging-standalone.js +1 -1
  45. package/dist/dependencies.json +15 -0
  46. package/dist/domainOverrideToRootDomain.js +1 -0
  47. package/dist/dspxBidAdapter.js +1 -1
  48. package/dist/eplanningBidAdapter.js +1 -1
  49. package/dist/eskimiBidAdapter.js +1 -0
  50. package/dist/feedadBidAdapter.js +1 -1
  51. package/dist/finativeBidAdapter.js +1 -1
  52. package/dist/freewheel-sspBidAdapter.js +1 -1
  53. package/dist/glimpseBidAdapter.js +1 -1
  54. package/dist/globalsunBidAdapter.js +1 -1
  55. package/dist/gmosspBidAdapter.js +1 -1
  56. package/dist/goldbachBidAdapter.js +1 -1
  57. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  58. package/dist/gridBidAdapter.js +1 -1
  59. package/dist/growthCodeIdSystem.js +1 -1
  60. package/dist/gumgumBidAdapter.js +1 -1
  61. package/dist/h12mediaBidAdapter.js +1 -1
  62. package/dist/id5IdSystem.js +1 -1
  63. package/dist/improvedigitalBidAdapter.js +1 -1
  64. package/dist/inmarBidAdapter.js +1 -1
  65. package/dist/insticatorBidAdapter.js +1 -1
  66. package/dist/iqzoneBidAdapter.js +1 -1
  67. package/dist/ivsBidAdapter.js +1 -0
  68. package/dist/ixBidAdapter.js +1 -1
  69. package/dist/justpremiumBidAdapter.js +1 -1
  70. package/dist/jwplayerVideoProvider.js +1 -1
  71. package/dist/kargoBidAdapter.js +1 -1
  72. package/dist/koblerBidAdapter.js +1 -1
  73. package/dist/konduitAnalyticsAdapter.js +1 -1
  74. package/dist/kueezBidAdapter.js +1 -1
  75. package/dist/kueezRtbBidAdapter.js +1 -1
  76. package/dist/kulturemediaBidAdapter.js +1 -1
  77. package/dist/lassoBidAdapter.js +1 -1
  78. package/dist/lifestreetBidAdapter.js +1 -1
  79. package/dist/liveIntentIdSystem.js +1 -1
  80. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  81. package/dist/logicadBidAdapter.js +1 -1
  82. package/dist/loglyliftBidAdapter.js +1 -1
  83. package/dist/luponmediaBidAdapter.js +1 -1
  84. package/dist/magniteAnalyticsAdapter.js +1 -1
  85. package/dist/malltvAnalyticsAdapter.js +1 -1
  86. package/dist/marsmediaBidAdapter.js +1 -1
  87. package/dist/mathildeadsBidAdapter.js +1 -1
  88. package/dist/mediafuseBidAdapter.js +1 -1
  89. package/dist/medianetBidAdapter.js +1 -1
  90. package/dist/mediasquareBidAdapter.js +1 -1
  91. package/dist/mgidBidAdapter.js +1 -1
  92. package/dist/minutemediaBidAdapter.js +1 -1
  93. package/dist/minutemediaplusBidAdapter.js +1 -1
  94. package/dist/nativoBidAdapter.js +1 -1
  95. package/dist/neuwoRtdProvider.js +1 -1
  96. package/dist/nexx360BidAdapter.js +1 -1
  97. package/dist/not-for-prod/prebid.js +165 -162
  98. package/dist/oguryBidAdapter.js +1 -1
  99. package/dist/onetagBidAdapter.js +1 -1
  100. package/dist/onomagicBidAdapter.js +1 -1
  101. package/dist/ooloAnalyticsAdapter.js +1 -1
  102. package/dist/openxBidAdapter.js +1 -1
  103. package/dist/openxOrtbBidAdapter.js +1 -1
  104. package/dist/operaadsBidAdapter.js +1 -1
  105. package/dist/optidigitalBidAdapter.js +1 -1
  106. package/dist/ortbConverter.js +1 -1
  107. package/dist/outbrainBidAdapter.js +1 -1
  108. package/dist/pairIdSystem.js +1 -0
  109. package/dist/parrableIdSystem.js +1 -1
  110. package/dist/pixfutureBidAdapter.js +1 -1
  111. package/dist/prebid-core.js +1 -1
  112. package/dist/publinkIdSystem.js +1 -1
  113. package/dist/pubmaticBidAdapter.js +1 -1
  114. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  115. package/dist/pubxBidAdapter.js +1 -1
  116. package/dist/pxyzBidAdapter.js +1 -1
  117. package/dist/quantcastBidAdapter.js +1 -1
  118. package/dist/readpeakBidAdapter.js +1 -1
  119. package/dist/relaidoBidAdapter.js +1 -1
  120. package/dist/rhythmoneBidAdapter.js +1 -1
  121. package/dist/riseBidAdapter.js +1 -1
  122. package/dist/rubiconAnalyticsAdapter.js +1 -1
  123. package/dist/rubiconBidAdapter.js +1 -1
  124. package/dist/seedingAllianceBidAdapter.js +1 -1
  125. package/dist/seedtagBidAdapter.js +1 -1
  126. package/dist/sharedIdSystem.js +1 -1
  127. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  128. package/dist/sharethroughBidAdapter.js +1 -1
  129. package/dist/shinezBidAdapter.js +1 -1
  130. package/dist/smaatoBidAdapter.js +1 -1
  131. package/dist/smartadserverBidAdapter.js +1 -1
  132. package/dist/smarthubBidAdapter.js +1 -1
  133. package/dist/smartxBidAdapter.js +1 -1
  134. package/dist/smilewantedBidAdapter.js +1 -1
  135. package/dist/sonobiBidAdapter.js +1 -1
  136. package/dist/sovrnAnalyticsAdapter.js +1 -1
  137. package/dist/sovrnBidAdapter.js +1 -1
  138. package/dist/sspBCBidAdapter.js +1 -1
  139. package/dist/stvBidAdapter.js +1 -1
  140. package/dist/sublimeBidAdapter.js +1 -1
  141. package/dist/synacormediaBidAdapter.js +1 -1
  142. package/dist/targetVideoBidAdapter.js +1 -1
  143. package/dist/teadsBidAdapter.js +1 -1
  144. package/dist/trionBidAdapter.js +1 -1
  145. package/dist/tripleliftBidAdapter.js +1 -1
  146. package/dist/truereachBidAdapter.js +1 -1
  147. package/dist/ttdBidAdapter.js +1 -1
  148. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  149. package/dist/uid2IdSystem.js +1 -1
  150. package/dist/underdogmediaBidAdapter.js +1 -1
  151. package/dist/undertoneBidAdapter.js +1 -1
  152. package/dist/userId.js +1 -1
  153. package/dist/vidazooBidAdapter.js +1 -1
  154. package/dist/videobyteBidAdapter.js +1 -1
  155. package/dist/videoheroesBidAdapter.js +1 -1
  156. package/dist/vidoomyBidAdapter.js +1 -1
  157. package/dist/visiblemeasuresBidAdapter.js +1 -1
  158. package/dist/visxBidAdapter.js +1 -1
  159. package/dist/vrtcalBidAdapter.js +1 -1
  160. package/dist/vuukleBidAdapter.js +1 -1
  161. package/dist/widespaceBidAdapter.js +1 -1
  162. package/dist/winrBidAdapter.js +1 -1
  163. package/dist/yahoosspBidAdapter.js +1 -1
  164. package/dist/yieldmoBidAdapter.js +1 -1
  165. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  166. package/dist/yieldoneBidAdapter.js +1 -1
  167. package/integrationExamples/gpt/fledge_example.html +103 -0
  168. package/integrationExamples/gpt/prebidServer_fledge_example.html +111 -0
  169. package/libraries/domainOverrideToRootDomain/index.js +39 -0
  170. package/libraries/ortbConverter/processors/video.js +1 -0
  171. package/modules/acuityAdsBidAdapter.js +1 -1
  172. package/modules/admaticBidAdapter.js +7 -2
  173. package/modules/adnuntiusBidAdapter.js +3 -1
  174. package/modules/amxBidAdapter.js +1 -1
  175. package/modules/amxIdSystem.js +23 -20
  176. package/modules/amxIdSystem.md +7 -7
  177. package/modules/appnexusBidAdapter.js +108 -102
  178. package/modules/appushBidAdapter.js +1 -1
  179. package/modules/beyondmediaBidAdapter.js +1 -1
  180. package/modules/bidwatchAnalyticsAdapter.js +2 -0
  181. package/modules/braveBidAdapter.js +1 -1
  182. package/modules/brightcomBidAdapter.js +1 -1
  183. package/modules/brightcomSSPBidAdapter.js +1 -1
  184. package/modules/coinzillaBidAdapter.js +1 -2
  185. package/modules/compassBidAdapter.js +1 -1
  186. package/modules/connectIdSystem.js +96 -21
  187. package/modules/connectIdSystem.md +6 -5
  188. package/modules/contentexchangeBidAdapter.js +1 -1
  189. package/modules/conversantBidAdapter.js +3 -0
  190. package/modules/criteoBidAdapter.js +5 -1
  191. package/modules/eskimiBidAdapter.js +72 -0
  192. package/modules/eskimiBidAdapter.md +34 -0
  193. package/modules/freewheel-sspBidAdapter.js +8 -0
  194. package/modules/glimpseBidAdapter.js +1 -2
  195. package/modules/globalsunBidAdapter.js +1 -1
  196. package/modules/gridBidAdapter.js +43 -20
  197. package/modules/growthCodeIdSystem.js +18 -15
  198. package/modules/gumgumBidAdapter.js +1 -1
  199. package/modules/iqzoneBidAdapter.js +1 -1
  200. package/modules/ivsBidAdapter.js +85 -0
  201. package/modules/ivsBidAdapter.md +34 -0
  202. package/modules/ixBidAdapter.js +72 -105
  203. package/modules/jwplayerVideoProvider.js +25 -32
  204. package/modules/kargoBidAdapter.js +473 -246
  205. package/modules/koblerBidAdapter.js +1 -2
  206. package/modules/kueezBidAdapter.js +1 -1
  207. package/modules/kueezRtbBidAdapter.js +16 -4
  208. package/modules/liveIntentIdSystem.js +8 -0
  209. package/modules/luponmediaBidAdapter.js +1 -1
  210. package/modules/magniteAnalyticsAdapter.js +76 -3
  211. package/modules/mathildeadsBidAdapter.js +1 -1
  212. package/modules/medianetBidAdapter.js +1 -1
  213. package/modules/mediasquareBidAdapter.js +2 -1
  214. package/modules/mgidBidAdapter.js +178 -26
  215. package/modules/minutemediaBidAdapter.js +1 -1
  216. package/modules/minutemediaplusBidAdapter.js +16 -4
  217. package/modules/nativoBidAdapter.js +110 -21
  218. package/modules/neuwoRtdProvider.js +0 -2
  219. package/modules/oguryBidAdapter.js +3 -2
  220. package/modules/onomagicBidAdapter.js +1 -2
  221. package/modules/openxBidAdapter.js +192 -563
  222. package/modules/openxBidAdapter.md +22 -20
  223. package/modules/openxOrtbBidAdapter.js +13 -11
  224. package/modules/openxOrtbBidAdapter.md +5 -3
  225. package/modules/operaadsBidAdapter.js +1 -1
  226. package/modules/pairIdSystem.js +79 -0
  227. package/modules/pubmaticBidAdapter.js +13 -10
  228. package/modules/pubxBidAdapter.js +5 -2
  229. package/modules/riseBidAdapter.js +1 -1
  230. package/modules/sharedIdSystem.js +4 -27
  231. package/modules/sharethroughBidAdapter.js +1 -1
  232. package/modules/shinezBidAdapter.js +1 -1
  233. package/modules/smarthubBidAdapter.js +1 -1
  234. package/modules/synacormediaBidAdapter.js +1 -3
  235. package/modules/truereachBidAdapter.js +1 -2
  236. package/modules/userId/eids.js +24 -0
  237. package/modules/userId/eids.md +16 -0
  238. package/modules/videoheroesBidAdapter.js +1 -1
  239. package/modules/vidoomyBidAdapter.js +33 -4
  240. package/modules/visiblemeasuresBidAdapter.js +1 -1
  241. package/modules/vrtcalBidAdapter.js +1 -1
  242. package/modules/yieldmoBidAdapter.js +15 -5
  243. package/modules/yieldoneBidAdapter.js +1 -1
  244. package/package.json +1 -1
  245. package/src/Renderer.js +2 -1
  246. package/src/config.js +78 -127
  247. package/src/native.js +5 -1
  248. package/test/spec/auctionmanager_spec.js +2 -2
  249. package/test/spec/libraries/domainOverrideToRootDomain/index_spec.js +77 -0
  250. package/test/spec/modules/1plusXRtdProvider_spec.js +8 -7
  251. package/test/spec/modules/acuityAdsBidAdapter_spec.js +2 -1
  252. package/test/spec/modules/adagioBidAdapter_spec.js +0 -25
  253. package/test/spec/modules/admaticBidAdapter_spec.js +1 -1
  254. package/test/spec/modules/adnuntiusBidAdapter_spec.js +2 -1
  255. package/test/spec/modules/amxIdSystem_spec.js +13 -26
  256. package/test/spec/modules/appnexusBidAdapter_spec.js +464 -448
  257. package/test/spec/modules/appushBidAdapter_spec.js +2 -1
  258. package/test/spec/modules/axonixBidAdapter_spec.js +0 -27
  259. package/test/spec/modules/beyondmediaBidAdapter_spec.js +2 -1
  260. package/test/spec/modules/big-richmediaBidAdapter_spec.js +68 -64
  261. package/test/spec/modules/compassBidAdapter_spec.js +2 -1
  262. package/test/spec/modules/connectIdSystem_spec.js +420 -242
  263. package/test/spec/modules/contentexchangeBidAdapter_spec.js +2 -1
  264. package/test/spec/modules/conversantBidAdapter_spec.js +1 -0
  265. package/test/spec/modules/criteoBidAdapter_spec.js +33 -1
  266. package/test/spec/modules/eids_spec.js +30 -0
  267. package/test/spec/modules/eskimiBidAdapter_spec.js +155 -0
  268. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +37 -0
  269. package/test/spec/modules/globalsunBidAdapter_spec.js +2 -1
  270. package/test/spec/modules/gridBidAdapter_spec.js +8 -0
  271. package/test/spec/modules/iqzoneBidAdapter_spec.js +2 -1
  272. package/test/spec/modules/ivsBidAdapter_spec.js +197 -0
  273. package/test/spec/modules/ixBidAdapter_spec.js +141 -71
  274. package/test/spec/modules/kargoBidAdapter_spec.js +297 -140
  275. package/test/spec/modules/koblerBidAdapter_spec.js +0 -20
  276. package/test/spec/modules/kueezRtbBidAdapter_spec.js +22 -2
  277. package/test/spec/modules/liveIntentIdSystem_spec.js +10 -0
  278. package/test/spec/modules/luponmediaBidAdapter_spec.js +1 -1
  279. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +129 -1
  280. package/test/spec/modules/mathildeadsBidAdapter_spec.js +2 -1
  281. package/test/spec/modules/mgidBidAdapter_spec.js +184 -36
  282. package/test/spec/modules/minutemediaplusBidAdapter_spec.js +22 -2
  283. package/test/spec/modules/nativoBidAdapter_spec.js +101 -0
  284. package/test/spec/modules/neuwoRtdProvider_spec.js +0 -1
  285. package/test/spec/modules/oguryBidAdapter_spec.js +19 -4
  286. package/test/spec/modules/ooloAnalyticsAdapter_spec.js +1 -1
  287. package/test/spec/modules/openxBidAdapter_spec.js +1157 -1936
  288. package/test/spec/modules/openxOrtbBidAdapter_spec.js +12 -39
  289. package/test/spec/modules/pairIdSystem_spec.js +68 -0
  290. package/test/spec/modules/pubCommonId_spec.js +0 -17
  291. package/test/spec/modules/pubmaticBidAdapter_spec.js +868 -867
  292. package/test/spec/modules/pubxBidAdapter_spec.js +10 -2
  293. package/test/spec/modules/realvuAnalyticsAdapter_spec.js +0 -5
  294. package/test/spec/modules/sharedIdSystem_spec.js +0 -46
  295. package/test/spec/modules/sharethroughBidAdapter_spec.js +2 -1
  296. package/test/spec/modules/smarthubBidAdapter_spec.js +2 -1
  297. package/test/spec/modules/synacormediaBidAdapter_spec.js +0 -26
  298. package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +17 -4
  299. package/test/spec/modules/vidoomyBidAdapter_spec.js +58 -0
  300. package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +2 -1
  301. package/test/spec/modules/vrtcalBidAdapter_spec.js +3 -2
  302. package/test/spec/modules/yieldmoBidAdapter_spec.js +19 -1
  303. package/test/spec/renderer_spec.js +1 -2
  304. package/test/spec/unit/pbjs_api_spec.js +19 -3
  305. package/test/test_index.js +13 -3
  306. package/dist/gridNMBidAdapter.js +0 -1
  307. package/modules/gridNMBidAdapter.js +0 -422
  308. package/modules/gridNMBidAdapter.md +0 -39
  309. package/test/spec/modules/gridNMBidAdapter_spec.js +0 -636
@@ -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);
@@ -1724,6 +1703,63 @@ describe('IndexexchangeAdapter', function () {
1724
1703
  expect(r.regs.gpp_sid).to.be.an('array');
1725
1704
  expect(r.regs.gpp_sid).to.include(1);
1726
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
+ });
1727
1763
  });
1728
1764
 
1729
1765
  describe('buildRequests', function () {
@@ -2273,7 +2309,7 @@ describe('IndexexchangeAdapter', function () {
2273
2309
  expect(requests[0].data.sn).to.be.undefined;
2274
2310
  });
2275
2311
 
2276
- it('2 requests due to 2 ad units, one larger than url size', function () {
2312
+ it('1 request, one larger than url size, no splitting', function () {
2277
2313
  const bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
2278
2314
  bid.mediaTypes.banner.sizes = LARGE_SET_OF_SIZES;
2279
2315
  bid.params.siteId = '124';
@@ -2283,10 +2319,10 @@ describe('IndexexchangeAdapter', function () {
2283
2319
 
2284
2320
  const requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
2285
2321
  expect(requests).to.be.an('array');
2286
- expect(requests).to.have.lengthOf(2);
2322
+ expect(requests).to.have.lengthOf(1);
2287
2323
  });
2288
2324
 
2289
- it('6 ad units should generate only 4 requests', function () {
2325
+ it('6 ad units should generate only 1 requests', function () {
2290
2326
  const bid1 = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
2291
2327
  bid1.mediaTypes.banner.sizes = LARGE_SET_OF_SIZES;
2292
2328
  bid1.params.siteId = '121';
@@ -2312,7 +2348,7 @@ describe('IndexexchangeAdapter', function () {
2312
2348
  const requests = spec.buildRequests([bid1, bid2, bid3, bid4, bid5, bid6], DEFAULT_OPTION);
2313
2349
 
2314
2350
  expect(requests).to.be.an('array');
2315
- expect(requests).to.have.lengthOf(4);
2351
+ expect(requests).to.have.lengthOf(1);
2316
2352
 
2317
2353
  for (var i = 0; i < requests.length; i++) {
2318
2354
  const reqSize = `${requests[i].url}?${utils.parseQueryStringParameters(requests[i].data)}`.length;
@@ -3611,7 +3647,7 @@ describe('IndexexchangeAdapter', function () {
3611
3647
  }
3612
3648
  }
3613
3649
  FEATURE_TOGGLES.getFeatureToggles(LOCAL_STORAGE_FEATURE_TOGGLES_KEY);
3614
- expect(FEATURE_TOGGLES.isFeatureEnabled('test')).to.be.undefined;
3650
+ expect(FEATURE_TOGGLES.isFeatureEnabled('test')).to.be.false;
3615
3651
  expect(FEATURE_TOGGLES.featureToggles).to.deep.equal({});
3616
3652
  });
3617
3653
 
@@ -3672,6 +3708,82 @@ describe('IndexexchangeAdapter', function () {
3672
3708
  expect(requests).to.be.an('array');
3673
3709
  expect(requests).to.have.lengthOf(1);
3674
3710
  });
3711
+
3712
+ it('request should have requested feature toggles when local storage is enabled', function () {
3713
+ sandbox.stub(storage, 'localStorageIsEnabled').returns(true);
3714
+ const bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3715
+ const requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3716
+ const r = extractPayload(requests[0]);
3717
+ expect(r.ext.features).to.exist;
3718
+ expect(Object.keys(r.ext.features).length).to.equal(FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES.length);
3719
+ });
3720
+
3721
+ it('request should have requested feature toggles when local storage is not enabled', function () {
3722
+ sandbox.stub(storage, 'localStorageIsEnabled').returns(false);
3723
+ const bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3724
+ const requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3725
+ const r = extractPayload(requests[0]);
3726
+ expect(r.ext.features).to.exist;
3727
+ expect(Object.keys(r.ext.features).length).to.equal(FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES.length);
3728
+ });
3729
+
3730
+ it('request should not have any feature toggles when there is no requested feature toggle', function () {
3731
+ sandbox.stub(storage, 'localStorageIsEnabled').returns(true);
3732
+ const bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3733
+ FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES = []
3734
+ const requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3735
+ const r = extractPayload(requests[0]);
3736
+ expect(r.ext.features).to.be.undefined;
3737
+ });
3738
+
3739
+ it('request should not have any feature toggles when there is no requested feature toggle and local storage not enabled', function () {
3740
+ sandbox.stub(storage, 'localStorageIsEnabled').returns(false);
3741
+ const bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3742
+ const requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3743
+ const r = extractPayload(requests[0]);
3744
+ FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES = []
3745
+ expect(r.ext.features).to.be.undefined;
3746
+ });
3747
+
3748
+ it('correct activation status of requested feature toggles when local storage not enabled', function () {
3749
+ sandbox.stub(storage, 'localStorageIsEnabled').returns(false);
3750
+ const bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3751
+ FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES = ['test1']
3752
+ const requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3753
+ const r = extractPayload(requests[0]);
3754
+ expect(r.ext.features).to.deep.equal({
3755
+ [FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES[0]]: { activated: false }
3756
+ });
3757
+ });
3758
+
3759
+ it('correct activation status of requested feature toggles', function () {
3760
+ sandbox.stub(storage, 'localStorageIsEnabled').returns(true);
3761
+ serverResponse.body.ext.features = {
3762
+ [FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES[0]]: {
3763
+ activated: true
3764
+ }
3765
+ }
3766
+ FEATURE_TOGGLES.setFeatureToggles(serverResponse);
3767
+ let bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3768
+ let requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3769
+ let r = extractPayload(requests[0]);
3770
+ expect(r.ext.features).to.deep.equal({
3771
+ [FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES[0]]: { activated: true }
3772
+ });
3773
+
3774
+ serverResponse.body.ext.features = {
3775
+ [FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES[0]]: {
3776
+ activated: false
3777
+ }
3778
+ }
3779
+ FEATURE_TOGGLES.setFeatureToggles(serverResponse);
3780
+ bid = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
3781
+ requests = spec.buildRequests([bid, DEFAULT_BANNER_VALID_BID[0]], DEFAULT_OPTION);
3782
+ r = extractPayload(requests[0]);
3783
+ expect(r.ext.features).to.deep.equal({
3784
+ [FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES[0]]: { activated: false }
3785
+ });
3786
+ });
3675
3787
  });
3676
3788
 
3677
3789
  describe('LocalStorage error codes', () => {
@@ -3751,48 +3863,6 @@ describe('IndexexchangeAdapter', function () {
3751
3863
  expect(JSON.parse(localStorageValues[key])).to.deep.equal({ [TODAY]: { [ERROR_CODES.BID_FLOOR_INVALID_FORMAT]: 1 } });
3752
3864
  });
3753
3865
 
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
3866
  it('should log ERROR_CODES.VIDEO_DURATION_INVALID in LocalStorage when there is logError called.', () => {
3797
3867
  const bid = utils.deepClone(DEFAULT_MULTIFORMAT_VIDEO_VALID_BID[0]);
3798
3868
  bid.params.video.minduration = 1;