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
@@ -13,7 +13,6 @@ import {
13
13
  logError,
14
14
  logWarn,
15
15
  mergeDeep,
16
- parseQueryStringParameters,
17
16
  safeJSONParse
18
17
  } from '../src/utils.js';
19
18
  import { BANNER, VIDEO, NATIVE } from '../src/mediaTypes.js';
@@ -104,9 +103,12 @@ export const LOCAL_STORAGE_FEATURE_TOGGLES_KEY = `${BIDDER_CODE}_features`;
104
103
  let hasRegisteredHandler = false;
105
104
  export const storage = getStorageManager({ bidderCode: BIDDER_CODE });
106
105
  export const FEATURE_TOGGLES = {
106
+ // Update with list of CFTs to be requested from Exchange
107
+ REQUESTED_FEATURE_TOGGLES: [],
108
+
107
109
  featureToggles: {},
108
110
  isFeatureEnabled: function (ft) {
109
- return deepAccess(this.featureToggles, `features.${ft}.activated`)
111
+ return deepAccess(this.featureToggles, `features.${ft}.activated`, false)
110
112
  },
111
113
  getFeatureToggles: function () {
112
114
  if (storage.localStorageIsEnabled()) {
@@ -152,11 +154,6 @@ const MEDIA_TYPES = {
152
154
  Native: 4
153
155
  };
154
156
 
155
- let baseRequestSize = 0;
156
- let currentRequestSize = 0;
157
- let wasAdUnitImpressionsTrimmed = false;
158
- let currentImpressionSize = 0;
159
-
160
157
  /**
161
158
  * Transform valid bid request config object to banner impression object that will be sent to ad server.
162
159
  *
@@ -198,6 +195,9 @@ function bidToVideoImp(bid) {
198
195
  // populate imp level transactionId
199
196
  imp.ext.tid = deepAccess(bid, 'ortb2Imp.ext.tid');
200
197
 
198
+ // AdUnit-Specific First Party Data
199
+ addAdUnitFPD(imp, bid)
200
+
201
201
  // copy all video properties to imp object
202
202
  for (const adUnitProperty in videoAdUnitRef) {
203
203
  if (VIDEO_PARAMS_ALLOW_LIST.indexOf(adUnitProperty) !== -1 && !imp.video.hasOwnProperty(adUnitProperty)) {
@@ -271,6 +271,9 @@ function bidToNativeImp(bid) {
271
271
  // populate imp level transactionId
272
272
  imp.ext.tid = deepAccess(bid, 'ortb2Imp.ext.tid');
273
273
 
274
+ // AdUnit-Specific First Party Data
275
+ addAdUnitFPD(imp, bid)
276
+
274
277
  _applyFloor(bid, imp, NATIVE);
275
278
 
276
279
  return imp;
@@ -598,19 +601,12 @@ function getEidInfo(allEids) {
598
601
  *
599
602
  */
600
603
  function buildRequest(validBidRequests, bidderRequest, impressions, version) {
601
- baseRequestSize = 0;
602
- currentRequestSize = 0;
603
- wasAdUnitImpressionsTrimmed = false;
604
- currentImpressionSize = 0;
605
-
606
604
  // Always use secure HTTPS protocol.
607
605
  let baseUrl = SECURE_BID_URL;
608
606
  // Get ids from Prebid User ID Modules
609
607
  let eidInfo = getEidInfo(deepAccess(validBidRequests, '0.userIdAsEids'));
610
608
  let userEids = eidInfo.toSend;
611
609
 
612
- let MAX_REQUEST_SIZE = 8000;
613
-
614
610
  // RTI ids will be included in the bid request if the function getIdentityInfo() is loaded
615
611
  // and if the data for the partner exist
616
612
  if (window.headertag && typeof window.headertag.getIdentityInfo === 'function') {
@@ -625,6 +621,9 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
625
621
  const requests = [];
626
622
  let r = createRequest(validBidRequests);
627
623
 
624
+ // Add FTs to be requested from Exchange
625
+ r = addRequestedFeatureToggles(r, FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES)
626
+
628
627
  // getting ixdiags for adunits of the video, outstream & multi format (MF) style
629
628
  let ixdiag = buildIXDiag(validBidRequests);
630
629
  for (var key in ixdiag) {
@@ -636,25 +635,17 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
636
635
  r = applyRegulations(r, bidderRequest);
637
636
 
638
637
  let payload = {};
639
- createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, payload, MAX_REQUEST_SIZE);
638
+ createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, payload);
640
639
 
641
- let requestSequenceNumber = 0;
642
640
  const transactionIds = Object.keys(impressions);
643
641
  let isFpdAdded = false;
644
642
 
645
643
  for (let adUnitIndex = 0; adUnitIndex < transactionIds.length; adUnitIndex++) {
646
- // buildRequestV2 does not have request spliting logic.
647
- if (!FEATURE_TOGGLES.isFeatureEnabled('pbjs_use_buildRequestV2')) {
648
- if (currentRequestSize >= MAX_REQUEST_SIZE) {
649
- break;
650
- }
651
- }
652
644
  if (requests.length >= MAX_REQUEST_LIMIT) {
653
645
  break;
654
646
  }
655
647
 
656
- r = addImpressions(impressions, transactionIds, r, adUnitIndex, MAX_REQUEST_SIZE);
657
- currentRequestSize += currentImpressionSize;
648
+ r = addImpressions(impressions, transactionIds, r, adUnitIndex);
658
649
 
659
650
  const fpd = deepAccess(bidderRequest, 'ortb2') || {};
660
651
  const site = { ...(fpd.site || fpd.context) };
@@ -667,31 +658,17 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
667
658
  clonedRObject.site = mergeDeep({}, clonedRObject.site, site);
668
659
  clonedRObject.user = mergeDeep({}, clonedRObject.user, user);
669
660
 
670
- const requestSize = `${baseUrl}${parseQueryStringParameters({ ...payload, r: JSON.stringify(clonedRObject) })}`.length;
671
-
672
- if (requestSize < MAX_REQUEST_SIZE) {
673
- r.site = mergeDeep({}, r.site, site);
674
- r.user = mergeDeep({}, r.user, user);
675
- isFpdAdded = true;
676
- const fpdRequestSize = encodeURIComponent(JSON.stringify({ ...site, ...user })).length;
677
- currentRequestSize += fpdRequestSize;
678
- } else {
679
- logError('IX Bid Adapter: FPD request size has exceeded maximum request size.', { bidder: BIDDER_CODE, code: ERROR_CODES.PB_FPD_EXCEEDS_MAX_SIZE });
680
- }
661
+ r.site = mergeDeep({}, r.site, site);
662
+ r.user = mergeDeep({}, r.user, user);
663
+ isFpdAdded = true;
681
664
  }
682
665
 
683
666
  // add identifiers info to ixDiag
684
- r = addIdentifiersInfo(impressions, r, transactionIds, adUnitIndex, payload, baseUrl, MAX_REQUEST_SIZE);
667
+ r = addIdentifiersInfo(impressions, r, transactionIds, adUnitIndex, payload, baseUrl);
685
668
 
686
669
  const isLastAdUnit = adUnitIndex === transactionIds.length - 1;
687
670
 
688
- if (wasAdUnitImpressionsTrimmed || isLastAdUnit) {
689
- if (!isLastAdUnit || requestSequenceNumber) {
690
- r.ext.ixdiag.sn = requestSequenceNumber;
691
- }
692
-
693
- requestSequenceNumber++;
694
-
671
+ if (isLastAdUnit) {
695
672
  requests.push({
696
673
  method: 'POST',
697
674
  url: baseUrl + '?s=' + siteID,
@@ -702,7 +679,6 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
702
679
  validBidRequests
703
680
  });
704
681
 
705
- currentRequestSize = baseRequestSize;
706
682
  r.imp = [];
707
683
  isFpdAdded = false;
708
684
  }
@@ -751,6 +727,24 @@ function createRequest(validBidRequests) {
751
727
  return r
752
728
  }
753
729
 
730
+ /**
731
+ * Adds requested feature toggles to the provided request object to be sent to Exchange.
732
+ * @param {object} r - The request object to add feature toggles to.
733
+ * @param {Array} requestedFeatureToggles - The list of feature toggles to add.
734
+ * @returns {object} The updated request object with the added feature toggles.
735
+ */
736
+ function addRequestedFeatureToggles(r, requestedFeatureToggles) {
737
+ if (requestedFeatureToggles.length > 0) {
738
+ r.ext.features = {};
739
+ // Loop through each feature toggle and add it to the features object.
740
+ // Add current activation status as well.
741
+ requestedFeatureToggles.forEach(toggle => {
742
+ r.ext.features[toggle] = { activated: FEATURE_TOGGLES.isFeatureEnabled(toggle) };
743
+ });
744
+ }
745
+ return r;
746
+ }
747
+
754
748
  /**
755
749
  * enrichRequest adds userSync configs, source, and referer info to request and ixDiag objects.
756
750
  *
@@ -871,9 +865,8 @@ function applyRegulations(r, bidderRequest) {
871
865
  * @param {string} baseUrl Base exchagne URL.
872
866
  * @param {array} requests List of request obejcts.
873
867
  * @param {object} payload Request payload object.
874
- * @param {int} MAX_REQUEST_SIZE Maximum request size limit (buildrequest V1).
875
868
  */
876
- function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, payload, MAX_REQUEST_SIZE) {
869
+ function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, payload) {
877
870
  // Use the siteId in the first bid request as the main siteId.
878
871
  siteID = validBidRequests[0].params.siteId;
879
872
  payload.s = siteID;
@@ -882,16 +875,6 @@ function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, pa
882
875
  const bidderCode = (bidderRequest && bidderRequest.bidderCode) || 'ix';
883
876
  const otherIxConfig = config.getConfig(bidderCode);
884
877
 
885
- baseRequestSize = `${baseUrl}${parseQueryStringParameters({ ...payload, r: JSON.stringify(r) })}`.length;
886
-
887
- if (baseRequestSize > MAX_REQUEST_SIZE) {
888
- logError('IX Bid Adapter: Base request size has exceeded maximum request size.', { bidder: BIDDER_CODE, code: ERROR_CODES.EXCEEDS_MAX_SIZE });
889
- return requests;
890
- }
891
-
892
- currentRequestSize = baseRequestSize;
893
- let fpdRequestSize = 0;
894
-
895
878
  if (otherIxConfig) {
896
879
  // Append firstPartyData to r.site.page if firstPartyData exists.
897
880
  if (typeof otherIxConfig.firstPartyData === 'object') {
@@ -904,25 +887,10 @@ function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, pa
904
887
  }
905
888
  firstPartyString = firstPartyString.slice(0, -1);
906
889
 
907
- fpdRequestSize = encodeURIComponent(firstPartyString).length;
908
-
909
- if (!FEATURE_TOGGLES.isFeatureEnabled('pbjs_use_buildRequestV2')) {
910
- if (fpdRequestSize < MAX_REQUEST_SIZE) {
911
- if ('page' in r.site) {
912
- r.site.page += firstPartyString;
913
- } else {
914
- r.site.page = firstPartyString;
915
- }
916
- currentRequestSize += fpdRequestSize;
917
- } else {
918
- logError('IX Bid Adapter: IX config FPD request size has exceeded maximum request size.', { bidder: BIDDER_CODE, code: ERROR_CODES.IX_FPD_EXCEEDS_MAX_SIZE });
919
- }
890
+ if ('page' in r.site) {
891
+ r.site.page += firstPartyString;
920
892
  } else {
921
- if ('page' in r.site) {
922
- r.site.page += firstPartyString;
923
- } else {
924
- r.site.page = firstPartyString;
925
- }
893
+ r.site.page = firstPartyString;
926
894
  }
927
895
  }
928
896
  }
@@ -935,30 +903,17 @@ function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, pa
935
903
  * @param {array} transactionIds List of transaction Ids.
936
904
  * @param {object} r Reuqest object.
937
905
  * @param {int} adUnitIndex Index of the current add unit
938
- * @param {int} MAX_REQUEST_SIZE Maximum request size limit (buildrequest V1).
939
906
  * @return {object} Reqyest object with added impressions describing the request to the server.
940
907
  */
941
- function addImpressions(impressions, transactionIds, r, adUnitIndex, MAX_REQUEST_SIZE) {
908
+ function addImpressions(impressions, transactionIds, r, adUnitIndex) {
942
909
  const adUnitImpressions = impressions[transactionIds[adUnitIndex]];
943
910
  const { missingImps: missingBannerImpressions = [], ixImps = [] } = adUnitImpressions;
944
-
945
- let remainingRequestSize = MAX_REQUEST_SIZE - currentRequestSize;
946
911
  const sourceImpressions = { ixImps, missingBannerImpressions };
947
912
  const impressionObjects = Object.keys(sourceImpressions)
948
913
  .map((key) => sourceImpressions[key])
949
914
  .filter(item => Array.isArray(item))
950
915
  .reduce((acc, curr) => acc.concat(...curr), []);
951
916
 
952
- currentImpressionSize = encodeURIComponent(JSON.stringify({ impressionObjects })).length;
953
-
954
- if (!FEATURE_TOGGLES.isFeatureEnabled('pbjs_use_buildRequestV2')) {
955
- while (impressionObjects.length && currentImpressionSize > remainingRequestSize) {
956
- wasAdUnitImpressionsTrimmed = true;
957
- impressionObjects.pop();
958
- currentImpressionSize = encodeURIComponent(JSON.stringify({ impressionObjects })).length;
959
- }
960
- }
961
-
962
917
  const gpid = impressions[transactionIds[adUnitIndex]].gpid;
963
918
  const dfpAdUnitCode = impressions[transactionIds[adUnitIndex]].dfp_ad_unit_code;
964
919
  const tid = impressions[transactionIds[adUnitIndex]].tid;
@@ -1007,6 +962,11 @@ function addImpressions(impressions, transactionIds, r, adUnitIndex, MAX_REQUEST
1007
962
  _bannerImpression.bidfloorcur = impressionObjects[0].bidfloorcur;
1008
963
  }
1009
964
 
965
+ const adUnitFPD = impressions[transactionIds[adUnitIndex]].adUnitFPD
966
+ if (adUnitFPD) {
967
+ _bannerImpression.ext.data = adUnitFPD;
968
+ }
969
+
1010
970
  r.imp.push(_bannerImpression);
1011
971
  } else {
1012
972
  // set imp.ext.gpid to resolved gpid for each imp
@@ -1062,6 +1022,19 @@ function addFPD(bidderRequest, r, fpd, site, user) {
1062
1022
  return r;
1063
1023
  }
1064
1024
 
1025
+ /**
1026
+ * Adds First-Party Data (FPD) from the bid object to the imp object.
1027
+ *
1028
+ * @param {Object} imp - The imp object, representing an impression in the OpenRTB format.
1029
+ * @param {Object} bid - The bid object, containing information about the bid request.
1030
+ */
1031
+ function addAdUnitFPD(imp, bid) {
1032
+ const adUnitFPD = deepAccess(bid, 'ortb2Imp.ext.data');
1033
+ if (adUnitFPD) {
1034
+ deepSetValue(imp, 'ext.data', adUnitFPD)
1035
+ }
1036
+ }
1037
+
1065
1038
  /**
1066
1039
  * addIdentifiersInfo adds indentifier info to ixDaig.
1067
1040
  *
@@ -1071,30 +1044,18 @@ function addFPD(bidderRequest, r, fpd, site, user) {
1071
1044
  * @param {int} adUnitIndex Index of the current add unit
1072
1045
  * @param {object} payload Request payload object.
1073
1046
  * @param {string} baseUrl Base exchagne URL.
1074
- * @param {int} MAX_REQUEST_SIZE Maximum request size limit (buildrequest V1).
1075
1047
  * @return {object} Reqyest object with added indentigfier info to ixDiag.
1076
1048
  */
1077
- function addIdentifiersInfo(impressions, r, transactionIds, adUnitIndex, payload, baseUrl, MAX_REQUEST_SIZE) {
1049
+ function addIdentifiersInfo(impressions, r, transactionIds, adUnitIndex, payload, baseUrl) {
1078
1050
  const pbaAdSlot = impressions[transactionIds[adUnitIndex]].pbadslot;
1079
1051
  const tagId = impressions[transactionIds[adUnitIndex]].tagId;
1080
1052
  const adUnitCode = impressions[transactionIds[adUnitIndex]].adUnitCode;
1081
1053
  const divId = impressions[transactionIds[adUnitIndex]].divId;
1082
1054
  if (pbaAdSlot || tagId || adUnitCode || divId) {
1083
- const clonedRObject = deepClone(r);
1084
- const requestSize = `${baseUrl}${parseQueryStringParameters({ ...payload, r: JSON.stringify(clonedRObject) })}`.length;
1085
- if (!FEATURE_TOGGLES.isFeatureEnabled('pbjs_use_buildRequestV2')) {
1086
- if (requestSize < MAX_REQUEST_SIZE) {
1087
- r.ext.ixdiag.pbadslot = pbaAdSlot;
1088
- r.ext.ixdiag.tagid = tagId;
1089
- r.ext.ixdiag.adunitcode = adUnitCode;
1090
- r.ext.ixdiag.divId = divId;
1091
- }
1092
- } else {
1093
- r.ext.ixdiag.pbadslot = pbaAdSlot;
1094
- r.ext.ixdiag.tagid = tagId;
1095
- r.ext.ixdiag.adunitcode = adUnitCode;
1096
- r.ext.ixdiag.divId = divId;
1097
- }
1055
+ r.ext.ixdiag.pbadslot = pbaAdSlot;
1056
+ r.ext.ixdiag.tagid = tagId;
1057
+ r.ext.ixdiag.adunitcode = adUnitCode;
1058
+ r.ext.ixdiag.divId = divId;
1098
1059
  }
1099
1060
 
1100
1061
  return r;
@@ -1259,6 +1220,12 @@ function createBannerImps(validBidRequest, missingBannerSizes, bannerImps) {
1259
1220
  bannerImps[validBidRequest.transactionId].tagId = deepAccess(validBidRequest, 'params.tagId');
1260
1221
  bannerImps[validBidRequest.transactionId].pos = deepAccess(validBidRequest, 'mediaTypes.banner.pos');
1261
1222
 
1223
+ // AdUnit-Specific First Party Data
1224
+ const adUnitFPD = deepAccess(validBidRequest, 'ortb2Imp.ext.data');
1225
+ if (adUnitFPD) {
1226
+ bannerImps[validBidRequest.transactionId].adUnitFPD = adUnitFPD;
1227
+ }
1228
+
1262
1229
  const sid = deepAccess(validBidRequest, 'params.id');
1263
1230
  if (sid && (typeof sid === 'string' || typeof sid === 'number')) {
1264
1231
  bannerImps[validBidRequest.transactionId].sid = String(sid);
@@ -47,31 +47,29 @@ export function JWPlayerProvider(config, jwplayer_, adState_, timeState_, callba
47
47
 
48
48
  function init() {
49
49
  if (!jwplayer) {
50
- triggerSetupFailure(-1); // TODO: come up with error code schema- player is absent
50
+ triggerSetupFailure({ code: -1 }); // TODO: come up with error code schema- player is absent
51
51
  return;
52
52
  }
53
53
 
54
54
  playerVersion = jwplayer.version;
55
55
 
56
56
  if (playerVersion < minimumSupportedPlayerVersion) {
57
- triggerSetupFailure(-2); // TODO: come up with error code schema - version not supported
57
+ triggerSetupFailure({ code: -2 }); // TODO: come up with error code schema - version not supported
58
58
  return;
59
59
  }
60
60
 
61
61
  if (!document.getElementById(divId)) {
62
- triggerSetupFailure(-3); // TODO: come up with error code schema - missing div id
62
+ triggerSetupFailure({ code: -3 }); // TODO: come up with error code schema - missing div id
63
63
  return;
64
64
  }
65
65
 
66
66
  player = jwplayer(divId);
67
67
  if (!player || !player.getState) {
68
- triggerSetupFailure(-4); // TODO: come up with error code schema - factory function failure
68
+ triggerSetupFailure({ code: -4 }); // TODO: come up with error code schema - factory function failure
69
69
  } else if (player.getState() === undefined) {
70
70
  setupPlayer(playerConfig);
71
71
  } else {
72
- const payload = getSetupCompletePayload();
73
- setupCompleteCallbacks.forEach(callback => callback(SETUP_COMPLETE, payload));
74
- setupCompleteCallbacks = [];
72
+ triggerSetupComplete();
75
73
  }
76
74
  }
77
75
 
@@ -192,8 +190,12 @@ export function JWPlayerProvider(config, jwplayer_, adState_, timeState_, callba
192
190
  function onEvent(externalEventName, callback, basePayload) {
193
191
  if (externalEventName === SETUP_COMPLETE) {
194
192
  setupCompleteCallbacks.push(callback);
195
- } else if (externalEventName === SETUP_FAILED) {
193
+ return;
194
+ }
195
+
196
+ if (externalEventName === SETUP_FAILED) {
196
197
  setupFailedCallbacks.push(callback);
198
+ return;
197
199
  }
198
200
 
199
201
  if (!player) {
@@ -203,25 +205,6 @@ export function JWPlayerProvider(config, jwplayer_, adState_, timeState_, callba
203
205
  let getEventPayload;
204
206
 
205
207
  switch (externalEventName) {
206
- case SETUP_COMPLETE:
207
- getEventPayload = () => {
208
- setupCompleteCallbacks = [];
209
- return getSetupCompletePayload();
210
- };
211
- break;
212
-
213
- case SETUP_FAILED:
214
- getEventPayload = e => {
215
- setupFailedCallbacks = [];
216
- return {
217
- playerVersion,
218
- errorCode: e.code,
219
- errorMessage: e.message,
220
- sourceError: e.sourceError
221
- };
222
- };
223
- break;
224
-
225
208
  case AD_REQUEST:
226
209
  case AD_PLAY:
227
210
  case AD_PAUSE:
@@ -496,7 +479,17 @@ export function JWPlayerProvider(config, jwplayer_, adState_, timeState_, callba
496
479
  if (!config) {
497
480
  return;
498
481
  }
499
- player.setup(utils.getJwConfig(config));
482
+ player.setup(utils.getJwConfig(config)).on('ready', triggerSetupComplete).on('setupError', triggerSetupFailure);
483
+ }
484
+
485
+ function triggerSetupComplete() {
486
+ if (!setupCompleteCallbacks.length) {
487
+ return;
488
+ }
489
+
490
+ const payload = getSetupCompletePayload();
491
+ setupCompleteCallbacks.forEach(callback => callback(SETUP_COMPLETE, payload));
492
+ setupCompleteCallbacks = [];
500
493
  }
501
494
 
502
495
  function getSetupCompletePayload() {
@@ -511,7 +504,7 @@ export function JWPlayerProvider(config, jwplayer_, adState_, timeState_, callba
511
504
  };
512
505
  }
513
506
 
514
- function triggerSetupFailure(errorCode) {
507
+ function triggerSetupFailure(e) {
515
508
  if (!setupFailedCallbacks.length) {
516
509
  return;
517
510
  }
@@ -520,9 +513,9 @@ export function JWPlayerProvider(config, jwplayer_, adState_, timeState_, callba
520
513
  divId,
521
514
  playerVersion,
522
515
  type: SETUP_FAILED,
523
- errorCode,
524
- errorMessage: '',
525
- sourceError: null
516
+ errorCode: e.code,
517
+ errorMessage: e.message,
518
+ sourceError: e.sourceError
526
519
  };
527
520
 
528
521
  setupFailedCallbacks.forEach(callback => callback(SETUP_FAILED, payload));