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
@@ -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
  *
@@ -598,19 +595,12 @@ function getEidInfo(allEids) {
598
595
  *
599
596
  */
600
597
  function buildRequest(validBidRequests, bidderRequest, impressions, version) {
601
- baseRequestSize = 0;
602
- currentRequestSize = 0;
603
- wasAdUnitImpressionsTrimmed = false;
604
- currentImpressionSize = 0;
605
-
606
598
  // Always use secure HTTPS protocol.
607
599
  let baseUrl = SECURE_BID_URL;
608
600
  // Get ids from Prebid User ID Modules
609
601
  let eidInfo = getEidInfo(deepAccess(validBidRequests, '0.userIdAsEids'));
610
602
  let userEids = eidInfo.toSend;
611
603
 
612
- let MAX_REQUEST_SIZE = 8000;
613
-
614
604
  // RTI ids will be included in the bid request if the function getIdentityInfo() is loaded
615
605
  // and if the data for the partner exist
616
606
  if (window.headertag && typeof window.headertag.getIdentityInfo === 'function') {
@@ -625,6 +615,9 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
625
615
  const requests = [];
626
616
  let r = createRequest(validBidRequests);
627
617
 
618
+ // Add FTs to be requested from Exchange
619
+ r = addRequestedFeatureToggles(r, FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES)
620
+
628
621
  // getting ixdiags for adunits of the video, outstream & multi format (MF) style
629
622
  let ixdiag = buildIXDiag(validBidRequests);
630
623
  for (var key in ixdiag) {
@@ -636,25 +629,17 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
636
629
  r = applyRegulations(r, bidderRequest);
637
630
 
638
631
  let payload = {};
639
- createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, payload, MAX_REQUEST_SIZE);
632
+ createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, payload);
640
633
 
641
- let requestSequenceNumber = 0;
642
634
  const transactionIds = Object.keys(impressions);
643
635
  let isFpdAdded = false;
644
636
 
645
637
  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
638
  if (requests.length >= MAX_REQUEST_LIMIT) {
653
639
  break;
654
640
  }
655
641
 
656
- r = addImpressions(impressions, transactionIds, r, adUnitIndex, MAX_REQUEST_SIZE);
657
- currentRequestSize += currentImpressionSize;
642
+ r = addImpressions(impressions, transactionIds, r, adUnitIndex);
658
643
 
659
644
  const fpd = deepAccess(bidderRequest, 'ortb2') || {};
660
645
  const site = { ...(fpd.site || fpd.context) };
@@ -667,31 +652,17 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
667
652
  clonedRObject.site = mergeDeep({}, clonedRObject.site, site);
668
653
  clonedRObject.user = mergeDeep({}, clonedRObject.user, user);
669
654
 
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
- }
655
+ r.site = mergeDeep({}, r.site, site);
656
+ r.user = mergeDeep({}, r.user, user);
657
+ isFpdAdded = true;
681
658
  }
682
659
 
683
660
  // add identifiers info to ixDiag
684
- r = addIdentifiersInfo(impressions, r, transactionIds, adUnitIndex, payload, baseUrl, MAX_REQUEST_SIZE);
661
+ r = addIdentifiersInfo(impressions, r, transactionIds, adUnitIndex, payload, baseUrl);
685
662
 
686
663
  const isLastAdUnit = adUnitIndex === transactionIds.length - 1;
687
664
 
688
- if (wasAdUnitImpressionsTrimmed || isLastAdUnit) {
689
- if (!isLastAdUnit || requestSequenceNumber) {
690
- r.ext.ixdiag.sn = requestSequenceNumber;
691
- }
692
-
693
- requestSequenceNumber++;
694
-
665
+ if (isLastAdUnit) {
695
666
  requests.push({
696
667
  method: 'POST',
697
668
  url: baseUrl + '?s=' + siteID,
@@ -702,7 +673,6 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
702
673
  validBidRequests
703
674
  });
704
675
 
705
- currentRequestSize = baseRequestSize;
706
676
  r.imp = [];
707
677
  isFpdAdded = false;
708
678
  }
@@ -751,6 +721,24 @@ function createRequest(validBidRequests) {
751
721
  return r
752
722
  }
753
723
 
724
+ /**
725
+ * Adds requested feature toggles to the provided request object to be sent to Exchange.
726
+ * @param {object} r - The request object to add feature toggles to.
727
+ * @param {Array} requestedFeatureToggles - The list of feature toggles to add.
728
+ * @returns {object} The updated request object with the added feature toggles.
729
+ */
730
+ function addRequestedFeatureToggles(r, requestedFeatureToggles) {
731
+ if (requestedFeatureToggles.length > 0) {
732
+ r.ext.features = {};
733
+ // Loop through each feature toggle and add it to the features object.
734
+ // Add current activation status as well.
735
+ requestedFeatureToggles.forEach(toggle => {
736
+ r.ext.features[toggle] = { activated: FEATURE_TOGGLES.isFeatureEnabled(toggle) };
737
+ });
738
+ }
739
+ return r;
740
+ }
741
+
754
742
  /**
755
743
  * enrichRequest adds userSync configs, source, and referer info to request and ixDiag objects.
756
744
  *
@@ -871,9 +859,8 @@ function applyRegulations(r, bidderRequest) {
871
859
  * @param {string} baseUrl Base exchagne URL.
872
860
  * @param {array} requests List of request obejcts.
873
861
  * @param {object} payload Request payload object.
874
- * @param {int} MAX_REQUEST_SIZE Maximum request size limit (buildrequest V1).
875
862
  */
876
- function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, payload, MAX_REQUEST_SIZE) {
863
+ function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, payload) {
877
864
  // Use the siteId in the first bid request as the main siteId.
878
865
  siteID = validBidRequests[0].params.siteId;
879
866
  payload.s = siteID;
@@ -882,16 +869,6 @@ function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, pa
882
869
  const bidderCode = (bidderRequest && bidderRequest.bidderCode) || 'ix';
883
870
  const otherIxConfig = config.getConfig(bidderCode);
884
871
 
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
872
  if (otherIxConfig) {
896
873
  // Append firstPartyData to r.site.page if firstPartyData exists.
897
874
  if (typeof otherIxConfig.firstPartyData === 'object') {
@@ -904,25 +881,10 @@ function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, pa
904
881
  }
905
882
  firstPartyString = firstPartyString.slice(0, -1);
906
883
 
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
- }
884
+ if ('page' in r.site) {
885
+ r.site.page += firstPartyString;
920
886
  } else {
921
- if ('page' in r.site) {
922
- r.site.page += firstPartyString;
923
- } else {
924
- r.site.page = firstPartyString;
925
- }
887
+ r.site.page = firstPartyString;
926
888
  }
927
889
  }
928
890
  }
@@ -935,30 +897,17 @@ function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, pa
935
897
  * @param {array} transactionIds List of transaction Ids.
936
898
  * @param {object} r Reuqest object.
937
899
  * @param {int} adUnitIndex Index of the current add unit
938
- * @param {int} MAX_REQUEST_SIZE Maximum request size limit (buildrequest V1).
939
900
  * @return {object} Reqyest object with added impressions describing the request to the server.
940
901
  */
941
- function addImpressions(impressions, transactionIds, r, adUnitIndex, MAX_REQUEST_SIZE) {
902
+ function addImpressions(impressions, transactionIds, r, adUnitIndex) {
942
903
  const adUnitImpressions = impressions[transactionIds[adUnitIndex]];
943
904
  const { missingImps: missingBannerImpressions = [], ixImps = [] } = adUnitImpressions;
944
-
945
- let remainingRequestSize = MAX_REQUEST_SIZE - currentRequestSize;
946
905
  const sourceImpressions = { ixImps, missingBannerImpressions };
947
906
  const impressionObjects = Object.keys(sourceImpressions)
948
907
  .map((key) => sourceImpressions[key])
949
908
  .filter(item => Array.isArray(item))
950
909
  .reduce((acc, curr) => acc.concat(...curr), []);
951
910
 
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
911
  const gpid = impressions[transactionIds[adUnitIndex]].gpid;
963
912
  const dfpAdUnitCode = impressions[transactionIds[adUnitIndex]].dfp_ad_unit_code;
964
913
  const tid = impressions[transactionIds[adUnitIndex]].tid;
@@ -1071,30 +1020,18 @@ function addFPD(bidderRequest, r, fpd, site, user) {
1071
1020
  * @param {int} adUnitIndex Index of the current add unit
1072
1021
  * @param {object} payload Request payload object.
1073
1022
  * @param {string} baseUrl Base exchagne URL.
1074
- * @param {int} MAX_REQUEST_SIZE Maximum request size limit (buildrequest V1).
1075
1023
  * @return {object} Reqyest object with added indentigfier info to ixDiag.
1076
1024
  */
1077
- function addIdentifiersInfo(impressions, r, transactionIds, adUnitIndex, payload, baseUrl, MAX_REQUEST_SIZE) {
1025
+ function addIdentifiersInfo(impressions, r, transactionIds, adUnitIndex, payload, baseUrl) {
1078
1026
  const pbaAdSlot = impressions[transactionIds[adUnitIndex]].pbadslot;
1079
1027
  const tagId = impressions[transactionIds[adUnitIndex]].tagId;
1080
1028
  const adUnitCode = impressions[transactionIds[adUnitIndex]].adUnitCode;
1081
1029
  const divId = impressions[transactionIds[adUnitIndex]].divId;
1082
1030
  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
- }
1031
+ r.ext.ixdiag.pbadslot = pbaAdSlot;
1032
+ r.ext.ixdiag.tagid = tagId;
1033
+ r.ext.ixdiag.adunitcode = adUnitCode;
1034
+ r.ext.ixdiag.divId = divId;
1098
1035
  }
1099
1036
 
1100
1037
  return r;
@@ -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));
@@ -17,7 +17,6 @@ const BIDDER_ENDPOINT = 'https://bid.essrtb.com/bid/prebid_rtb_call';
17
17
  const DEV_BIDDER_ENDPOINT = 'https://bid-service.dev.essrtb.com/bid/prebid_rtb_call';
18
18
  const TIMEOUT_NOTIFICATION_ENDPOINT = 'https://bid.essrtb.com/notify/prebid_timeout';
19
19
  const SUPPORTED_CURRENCY = 'USD';
20
- const DEFAULT_TIMEOUT = 1000;
21
20
  const TIME_TO_LIVE_IN_SECONDS = 10 * 60;
22
21
 
23
22
  export const isBidRequestValid = function (bid) {
@@ -124,7 +123,7 @@ function getPageUrlFromRefererInfo() {
124
123
 
125
124
  function buildOpenRtbBidRequestPayload(validBidRequests, bidderRequest) {
126
125
  const imps = validBidRequests.map(buildOpenRtbImpObject);
127
- const timeout = bidderRequest.timeout || config.getConfig('bidderTimeout') || DEFAULT_TIMEOUT;
126
+ const timeout = bidderRequest.timeout;
128
127
  const pageUrl = getPageUrlFromRequest(validBidRequests[0], bidderRequest)
129
128
  const request = {
130
129
  id: bidderRequest.auctionId,
@@ -293,7 +293,7 @@ function generateSharedParams(sharedParams, bidderRequest) {
293
293
  const generalBidParams = getBidIdParameter('params', sharedParams);
294
294
  const userIds = getBidIdParameter('userId', sharedParams);
295
295
  const ortb2Metadata = bidderRequest.ortb2 || {};
296
- const timeout = config.getConfig('bidderTimeout');
296
+ const timeout = bidderRequest.timeout;
297
297
 
298
298
  const params = {
299
299
  adapter_version: VERSION,
@@ -188,6 +188,14 @@ export const liveIntentIdSubmodule = {
188
188
  result.uid2 = { 'id': value.uid2 }
189
189
  }
190
190
 
191
+ if (value.bidswitch) {
192
+ result.bidswitch = { 'id': value.bidswitch }
193
+ }
194
+
195
+ if (value.medianet) {
196
+ result.medianet = { 'id': value.medianet }
197
+ }
198
+
191
199
  return result
192
200
  }
193
201
 
@@ -292,7 +292,7 @@ function newOrtbBidRequest(bidRequest, bidderRequest, currentImps) {
292
292
  source: {
293
293
  tid: bidRequest.transactionId
294
294
  },
295
- tmax: config.getConfig('timeout') || 1500,
295
+ tmax: bidderRequest.timeout,
296
296
  imp: currentImps.concat([{
297
297
  id: bidRequest.bidId,
298
298
  secure: 1,
@@ -56,7 +56,8 @@ const {
56
56
  BIDDER_DONE,
57
57
  BID_TIMEOUT,
58
58
  BID_WON,
59
- BILLABLE_EVENT
59
+ BILLABLE_EVENT,
60
+ SEAT_NON_BID
60
61
  },
61
62
  STATUS: {
62
63
  GOOD,
@@ -483,7 +484,7 @@ const findMatchingAdUnitFromAuctions = (matchesFunction, returnFirstMatch) => {
483
484
  }
484
485
  }
485
486
  return matches;
486
- }
487
+ };
487
488
 
488
489
  const getRenderingIds = bidWonData => {
489
490
  // if bid caching off -> return the bidWon auction id
@@ -840,7 +841,16 @@ magniteAdapter.track = ({ eventType, args }) => {
840
841
  auctionEntry.floors.dealsEnforced = args.floorData.enforcements.floorDeals;
841
842
  }
842
843
 
843
- // Log error if no matching bid!
844
+ // no-bid from server. report it!
845
+ if (!bid && args.seatBidId) {
846
+ bid = adUnit.bids[args.seatBidId] = {
847
+ bidder: args.bidderCode,
848
+ source: 'server',
849
+ bidId: args.seatBidId,
850
+ unknownBid: true
851
+ };
852
+ }
853
+
844
854
  if (!bid) {
845
855
  logError(`${MODULE_NAME}: Could not find associated bid request for bid response with requestId: `, args.requestId);
846
856
  break;
@@ -871,6 +881,9 @@ magniteAdapter.track = ({ eventType, args }) => {
871
881
  bid.pbsBidId = pbsBidId;
872
882
  }
873
883
  break;
884
+ case SEAT_NON_BID:
885
+ handleNonBidEvent(args);
886
+ break;
874
887
  case BIDDER_DONE:
875
888
  const serverError = deepAccess(args, 'serverErrors.0');
876
889
  const serverResponseTimeMs = args.serverResponseTimeMs;
@@ -958,6 +971,66 @@ magniteAdapter.track = ({ eventType, args }) => {
958
971
  }
959
972
  };
960
973
 
974
+ const handleNonBidEvent = function(args) {
975
+ const {seatnonbid, auctionId} = args;
976
+ const auction = deepAccess(cache, `auctions.${auctionId}.auction`);
977
+ // if no auction just bail
978
+ if (!auction) {
979
+ logWarn(`Unable to match nonbid to auction`);
980
+ return;
981
+ }
982
+ const adUnits = auction.adUnits;
983
+ seatnonbid.forEach(seatnonbid => {
984
+ let {seat} = seatnonbid;
985
+ seatnonbid.nonbid.forEach(nonbid => {
986
+ try {
987
+ const {status, impid} = nonbid;
988
+ const matchingTid = Object.keys(adUnits).find(tid => adUnits[tid].adUnitCode === impid);
989
+ const adUnit = adUnits[matchingTid];
990
+ const statusInfo = statusMap[status] || { status: 'no-bid' };
991
+ adUnit.bids[generateUUID()] = {
992
+ bidder: seat,
993
+ source: 'server',
994
+ isSeatNonBid: true,
995
+ clientLatencyMillis: Date.now() - auction.auctionStart,
996
+ ...statusInfo
997
+ };
998
+ } catch (error) {
999
+ logWarn(`Unable to match nonbid to adUnit`);
1000
+ }
1001
+ });
1002
+ });
1003
+ };
1004
+
1005
+ const statusMap = {
1006
+ 0: {
1007
+ status: 'no-bid'
1008
+ },
1009
+ 100: {
1010
+ status: 'error',
1011
+ error: {
1012
+ code: 'request-error',
1013
+ description: 'general error'
1014
+ }
1015
+ },
1016
+ 101: {
1017
+ status: 'error',
1018
+ error: {
1019
+ code: 'timeout-error',
1020
+ description: 'prebid server timeout'
1021
+ }
1022
+ },
1023
+ 200: {
1024
+ status: 'rejected'
1025
+ },
1026
+ 202: {
1027
+ status: 'rejected'
1028
+ },
1029
+ 301: {
1030
+ status: 'rejected-ipf'
1031
+ }
1032
+ };
1033
+
961
1034
  adapterManager.registerAnalyticsAdapter({
962
1035
  adapter: magniteAdapter,
963
1036
  code: 'magnite',
@@ -155,7 +155,7 @@ export const spec = {
155
155
  coppa: config.getConfig('coppa') === true ? 1 : 0,
156
156
  ccpa: bidderRequest.uspConsent || undefined,
157
157
  gdpr: bidderRequest.gdprConsent || undefined,
158
- tmax: config.getConfig('bidderTimeout')
158
+ tmax: bidderRequest.timeout
159
159
  };
160
160
 
161
161
  const len = validBidRequests.length;
@@ -334,7 +334,7 @@ function generatePayload(bidRequests, bidderRequests) {
334
334
  id: bidRequests[0].auctionId,
335
335
  imp: bidRequests.map(request => slotParams(request)),
336
336
  ortb2: bidderRequests.ortb2,
337
- tmax: bidderRequests.timeout || config.getConfig('bidderTimeout')
337
+ tmax: bidderRequests.timeout
338
338
  }
339
339
  }
340
340