prebid.js 9.53.2 → 9.53.4

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 (229) hide show
  1. package/dist/33acrossAnalyticsAdapter.js +1 -1
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.js +1 -1
  4. package/dist/BTBidAdapter.js +1 -1
  5. package/dist/adagioAnalyticsAdapter.js +1 -1
  6. package/dist/adagioBidAdapter.js +1 -1
  7. package/dist/adagioRtdProvider.js +1 -1
  8. package/dist/adagioUtils.js +1 -1
  9. package/dist/addefendBidAdapter.js +1 -1
  10. package/dist/adgenerationBidAdapter.js +1 -1
  11. package/dist/adlooxRtdProvider.js +1 -1
  12. package/dist/adqueryBidAdapter.js +1 -1
  13. package/dist/adrelevantisBidAdapter.js +1 -1
  14. package/dist/adstirBidAdapter.js +1 -1
  15. package/dist/adtrgtmeBidAdapter.js +1 -1
  16. package/dist/adxcgAnalyticsAdapter.js +1 -1
  17. package/dist/adxcgBidAdapter.js +1 -1
  18. package/dist/adyoulikeBidAdapter.js +1 -1
  19. package/dist/agmaAnalyticsAdapter.js +1 -1
  20. package/dist/ajaBidAdapter.js +1 -1
  21. package/dist/amxBidAdapter.js +1 -1
  22. package/dist/amxIdSystem.js +1 -1
  23. package/dist/aniviewBidAdapter.js +1 -1
  24. package/dist/appierAnalyticsAdapter.js +1 -1
  25. package/dist/appnexusBidAdapter.js +1 -1
  26. package/dist/asoBidAdapter.js +1 -1
  27. package/dist/axonixBidAdapter.js +1 -1
  28. package/dist/beopBidAdapter.js +1 -1
  29. package/dist/bidderTimeoutUtils.js +1 -0
  30. package/dist/bidglassBidAdapter.js +1 -1
  31. package/dist/big-richmediaBidAdapter.js +1 -1
  32. package/dist/bitmediaBidAdapter.js +1 -1
  33. package/dist/bridBidAdapter.js +1 -1
  34. package/dist/bridgeuppBidAdapter.js +1 -1
  35. package/dist/bridgewellBidAdapter.js +1 -1
  36. package/dist/brightMountainMediaBidAdapter.js +1 -1
  37. package/dist/carodaBidAdapter.js +1 -1
  38. package/dist/chtnwBidAdapter.js +1 -1
  39. package/dist/chunk-core.js +1 -1
  40. package/dist/concertBidAdapter.js +1 -1
  41. package/dist/connectadBidAdapter.js +1 -1
  42. package/dist/consumableBidAdapter.js +1 -1
  43. package/dist/contxtfulBidAdapter.js +1 -1
  44. package/dist/conversantAnalyticsAdapter.js +1 -1
  45. package/dist/conversantBidAdapter.js +1 -1
  46. package/dist/craftBidAdapter.js +1 -1
  47. package/dist/criteoBidAdapter.js +1 -1
  48. package/dist/cwireBidAdapter.js +1 -1
  49. package/dist/dailymotionBidAdapter.js +1 -1
  50. package/dist/debugging-standalone.js +1 -1
  51. package/dist/dependencies.json +10 -1
  52. package/dist/dspxBidAdapter.js +1 -1
  53. package/dist/dxkultureBidAdapter.js +1 -1
  54. package/dist/eplanningBidAdapter.js +1 -1
  55. package/dist/equativBidAdapter.js +1 -1
  56. package/dist/eskimiBidAdapter.js +1 -1
  57. package/dist/euidIdSystem.js +1 -1
  58. package/dist/exadsBidAdapter.js +1 -1
  59. package/dist/excoBidAdapter.js +1 -1
  60. package/dist/feedadBidAdapter.js +1 -1
  61. package/dist/finativeBidAdapter.js +1 -1
  62. package/dist/freewheel-sspBidAdapter.js +1 -1
  63. package/dist/fwsspBidAdapter.js +1 -1
  64. package/dist/gmosspBidAdapter.js +1 -1
  65. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  66. package/dist/greenbidsBidAdapter.js +1 -1
  67. package/dist/greenbidsRtdProvider.js +1 -1
  68. package/dist/gridBidAdapter.js +1 -1
  69. package/dist/gumgumBidAdapter.js +1 -1
  70. package/dist/h12mediaBidAdapter.js +1 -1
  71. package/dist/hypelabBidAdapter.js +1 -1
  72. package/dist/id5AnalyticsAdapter.js +1 -1
  73. package/dist/id5IdSystem.js +1 -1
  74. package/dist/imdsBidAdapter.js +1 -1
  75. package/dist/improvedigitalBidAdapter.js +1 -1
  76. package/dist/inmobiBidAdapter.js +1 -1
  77. package/dist/insticatorBidAdapter.js +1 -1
  78. package/dist/intentIqAnalyticsAdapter.js +1 -1
  79. package/dist/ixBidAdapter.js +1 -1
  80. package/dist/jixieBidAdapter.js +1 -1
  81. package/dist/justpremiumBidAdapter.js +1 -1
  82. package/dist/kargoBidAdapter.js +1 -1
  83. package/dist/kimberliteBidAdapter.js +1 -1
  84. package/dist/konduitAnalyticsAdapter.js +1 -1
  85. package/dist/kueezBidAdapter.js +1 -1
  86. package/dist/lassoBidAdapter.js +1 -1
  87. package/dist/lifestreetBidAdapter.js +1 -1
  88. package/dist/liveIntentId.js +1 -1
  89. package/dist/logicadBidAdapter.js +1 -1
  90. package/dist/loglyliftBidAdapter.js +1 -1
  91. package/dist/luceadBidAdapter.js +1 -1
  92. package/dist/mabidderBidAdapter.js +1 -1
  93. package/dist/madsenseBidAdapter.js +1 -1
  94. package/dist/magniteAnalyticsAdapter.js +1 -1
  95. package/dist/malltvAnalyticsAdapter.js +1 -1
  96. package/dist/marsmediaBidAdapter.js +1 -1
  97. package/dist/mediafuseBidAdapter.js +1 -1
  98. package/dist/medianetBidAdapter.js +1 -1
  99. package/dist/medianetUtils.js +1 -1
  100. package/dist/mediasquareBidAdapter.js +1 -1
  101. package/dist/mgidBidAdapter.js +1 -1
  102. package/dist/missenaBidAdapter.js +1 -1
  103. package/dist/mobilefuseBidAdapter.js +1 -1
  104. package/dist/nextMillenniumBidAdapter.js +1 -1
  105. package/dist/nexx360Utils.js +1 -1
  106. package/dist/nobidAnalyticsAdapter.js +1 -1
  107. package/dist/nobidBidAdapter.js +1 -1
  108. package/dist/nodalsAiRtdProvider.js +1 -1
  109. package/dist/not-for-prod/prebid.js +178 -175
  110. package/dist/objectGuard.js +1 -1
  111. package/dist/oguryBidAdapter.js +1 -1
  112. package/dist/onetagBidAdapter.js +1 -1
  113. package/dist/ooloAnalyticsAdapter.js +1 -1
  114. package/dist/openxBidAdapter.js +1 -1
  115. package/dist/optableRtdProvider.js +1 -1
  116. package/dist/optidigitalBidAdapter.js +1 -1
  117. package/dist/orbidderBidAdapter.js +1 -1
  118. package/dist/outbrainBidAdapter.js +1 -1
  119. package/dist/pixfutureBidAdapter.js +1 -1
  120. package/dist/publinkIdSystem.js +1 -1
  121. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  122. package/dist/pubmaticBidAdapter.js +1 -1
  123. package/dist/pubmaticIdSystem.js +1 -1
  124. package/dist/pubmaticRtdProvider.js +1 -1
  125. package/dist/pubmaticUtils.js +1 -0
  126. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  127. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  128. package/dist/pxyzBidAdapter.js +1 -1
  129. package/dist/quantcastBidAdapter.js +1 -1
  130. package/dist/readpeakBidAdapter.js +1 -1
  131. package/dist/relaidoBidAdapter.js +1 -1
  132. package/dist/retailspotBidAdapter.js +1 -1
  133. package/dist/rhythmoneBidAdapter.js +1 -1
  134. package/dist/riseUtils.js +1 -1
  135. package/dist/rtdModule.js +1 -1
  136. package/dist/rubiconBidAdapter.js +1 -1
  137. package/dist/seedingAllianceBidAdapter.js +1 -1
  138. package/dist/seedtagBidAdapter.js +1 -1
  139. package/dist/sevioBidAdapter.js +1 -0
  140. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  141. package/dist/sharethroughBidAdapter.js +1 -1
  142. package/dist/showheroes-bsBidAdapter.js +1 -1
  143. package/dist/smaatoBidAdapter.js +1 -1
  144. package/dist/smartadserverBidAdapter.js +1 -1
  145. package/dist/smartxBidAdapter.js +1 -1
  146. package/dist/smilewantedBidAdapter.js +1 -1
  147. package/dist/snigelBidAdapter.js +1 -1
  148. package/dist/sonobiBidAdapter.js +1 -1
  149. package/dist/sovrnBidAdapter.js +1 -1
  150. package/dist/sparteoBidAdapter.js +1 -1
  151. package/dist/sspBCBidAdapter.js +1 -1
  152. package/dist/stvBidAdapter.js +1 -1
  153. package/dist/sublimeBidAdapter.js +1 -1
  154. package/dist/taboolaBidAdapter.js +1 -1
  155. package/dist/tappxBidAdapter.js +1 -1
  156. package/dist/targetVideoBidAdapter.js +1 -1
  157. package/dist/teadsBidAdapter.js +1 -1
  158. package/dist/terceptAnalyticsAdapter.js +1 -1
  159. package/dist/themoneytizerBidAdapter.js +1 -1
  160. package/dist/timeoutRtdProvider.js +1 -1
  161. package/dist/trionBidAdapter.js +1 -1
  162. package/dist/tripleliftBidAdapter.js +1 -1
  163. package/dist/ttdBidAdapter.js +1 -1
  164. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  165. package/dist/uid2IdSystem.js +1 -1
  166. package/dist/underdogmediaBidAdapter.js +1 -1
  167. package/dist/undertoneBidAdapter.js +1 -1
  168. package/dist/unrulyBidAdapter.js +1 -1
  169. package/dist/userId.js +1 -1
  170. package/dist/vidazooUtils.js +1 -1
  171. package/dist/videobyteBidAdapter.js +1 -1
  172. package/dist/visxBidAdapter.js +1 -1
  173. package/dist/vuukleBidAdapter.js +1 -1
  174. package/dist/widespaceBidAdapter.js +1 -1
  175. package/dist/winrBidAdapter.js +1 -1
  176. package/dist/yahooAdsBidAdapter.js +1 -1
  177. package/dist/yandexBidAdapter.js +1 -1
  178. package/dist/yieldmoBidAdapter.js +1 -1
  179. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  180. package/integrationExamples/gpt/pubmaticRtdProvider_Example.html +161 -0
  181. package/libraries/bidderTimeoutUtils/bidderTimeoutUtils.js +119 -0
  182. package/libraries/objectGuard/objectGuard.js +170 -48
  183. package/libraries/objectGuard/ortbGuard.js +33 -43
  184. package/libraries/pubmaticUtils/plugins/dynamicTimeout.js +209 -0
  185. package/libraries/pubmaticUtils/plugins/floorProvider.js +168 -0
  186. package/libraries/pubmaticUtils/plugins/pluginManager.js +106 -0
  187. package/libraries/pubmaticUtils/plugins/unifiedPricingRule.js +375 -0
  188. package/libraries/pubmaticUtils/pubmaticUtils.js +76 -0
  189. package/modules/adagioAnalyticsAdapter.js +6 -1
  190. package/modules/adagioBidAdapter.js +12 -5
  191. package/modules/adagioRtdProvider.js +41 -35
  192. package/modules/fwsspBidAdapter.js +134 -69
  193. package/modules/fwsspBidAdapter.md +121 -26
  194. package/modules/optableRtdProvider.js +33 -12
  195. package/modules/pubmaticAnalyticsAdapter.js +315 -587
  196. package/modules/pubmaticBidAdapter.js +71 -8
  197. package/modules/pubmaticIdSystem.js +4 -4
  198. package/modules/pubmaticRtdProvider.js +105 -613
  199. package/modules/rtdModule/index.js +23 -6
  200. package/modules/sevioBidAdapter.js +413 -0
  201. package/modules/sevioBidAdapter.md +29 -0
  202. package/modules/sparteoBidAdapter.js +122 -10
  203. package/modules/timeoutRtdProvider.js +2 -105
  204. package/modules/ttdBidAdapter.js +0 -5
  205. package/modules/userId/eids.js +1 -1
  206. package/modules/userId/index.js +32 -1
  207. package/package.json +1 -1
  208. package/src/auction.js +3 -0
  209. package/test/spec/activities/objectGuard_spec.js +189 -32
  210. package/test/spec/activities/ortbGuard_spec.js +10 -15
  211. package/test/spec/libraries/bidderTimeoutUtils/bidderTimeoutUtils_spec.js +213 -0
  212. package/test/spec/libraries/pubmaticUtils/plugins/dynamicTimeout_spec.js +746 -0
  213. package/test/spec/libraries/pubmaticUtils/plugins/floorProvider_spec.js +184 -0
  214. package/test/spec/libraries/pubmaticUtils/plugins/pluginManager_spec.js +489 -0
  215. package/test/spec/libraries/pubmaticUtils/plugins/unifiedPricingRule_spec.js +359 -0
  216. package/test/spec/libraries/pubmaticUtils/pubmaticUtils_spec.js +236 -0
  217. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +94 -24
  218. package/test/spec/modules/adagioRtdProvider_spec.js +17 -17
  219. package/test/spec/modules/fwsspBidAdapter_spec.js +513 -78
  220. package/test/spec/modules/optableRtdProvider_spec.js +55 -5
  221. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +634 -916
  222. package/test/spec/modules/pubmaticBidAdapter_spec.js +260 -1
  223. package/test/spec/modules/pubmaticRtdProvider_spec.js +252 -1505
  224. package/test/spec/modules/realTimeDataModule_spec.js +58 -8
  225. package/test/spec/modules/sevioBidAdapter_spec.js +513 -0
  226. package/test/spec/modules/sparteoBidAdapter_spec.js +528 -43
  227. package/test/spec/modules/timeoutRtdProvider_spec.js +1 -201
  228. package/test/spec/modules/ttdBidAdapter_spec.js +0 -33
  229. package/test/spec/modules/userId_spec.js +115 -1
@@ -30,6 +30,7 @@ const RENDERER_URL = 'https://pubmatic.bbvms.com/r/'.concat('$RENDERER', '.js');
30
30
  const MSG_VIDEO_PLCMT_MISSING = 'Video.plcmt param missing';
31
31
  const PREBID_NATIVE_DATA_KEY_VALUES = Object.values(PREBID_NATIVE_DATA_KEYS_TO_ORTB);
32
32
  const DEFAULT_TTL = 360;
33
+ const DEFAULT_GZIP_ENABLED = true;
33
34
  const CUSTOM_PARAMS = {
34
35
  'kadpageurl': '', // Custom page url
35
36
  'gender': '', // User gender
@@ -72,6 +73,8 @@ const converter = ortbConverter({
72
73
  if (!imp.hasOwnProperty('banner') && !imp.hasOwnProperty('video') && !imp.hasOwnProperty('native')) {
73
74
  return null;
74
75
  }
76
+ imp.ext = imp.ext || {};
77
+ imp.ext.pbcode = adUnitCode;
75
78
  if (deals) addPMPDeals(imp, deals);
76
79
  if (dctr) addDealCustomTargetings(imp, dctr);
77
80
  if (rtd?.jwplayer) addJWPlayerSegmentData(imp, rtd.jwplayer);
@@ -94,7 +97,9 @@ const converter = ortbConverter({
94
97
  return imp;
95
98
  },
96
99
  request(buildRequest, imps, bidderRequest, context) {
97
- const request = buildRequest(imps, bidderRequest, context);
100
+ // Optimize the imps array before building the request
101
+ const optimizedImps = optimizeImps(imps, bidderRequest);
102
+ const request = buildRequest(optimizedImps, bidderRequest, context);
98
103
  if (blockedIabCategories.length || request.bcat) {
99
104
  const validatedBCategories = validateBlockedCategories([...(blockedIabCategories || []), ...(request.bcat || [])]);
100
105
  if (validatedBCategories.length) request.bcat = validatedBCategories;
@@ -105,7 +110,7 @@ const converter = ortbConverter({
105
110
  }
106
111
  reqLevelParams(request);
107
112
  updateUserSiteDevice(request, context?.bidRequests);
108
- addExtenstionParams(request);
113
+ addExtenstionParams(request, bidderRequest)
109
114
  const marketPlaceEnabled = bidderRequest?.bidderCode
110
115
  ? bidderSettings.get(bidderRequest.bidderCode, 'allowAlternateBidderCodes') : undefined;
111
116
  if (marketPlaceEnabled) updateRequestExt(request, bidderRequest);
@@ -505,8 +510,8 @@ const updateResponseWithCustomFields = (res, bid, ctx) => {
505
510
  }
506
511
  }
507
512
 
508
- const addExtenstionParams = (req) => {
509
- const { profId, verId, wiid, transactionId } = conf;
513
+ const addExtenstionParams = (req, bidderRequest) => {
514
+ const { profId, verId, wiid } = conf;
510
515
  req.ext = {
511
516
  epoch: new Date().getTime(), // Sending epoch timestamp in request.ext object
512
517
  wrapper: {
@@ -514,8 +519,8 @@ const addExtenstionParams = (req) => {
514
519
  version: verId ? parseInt(verId) : undefined,
515
520
  wiid: wiid,
516
521
  wv: '$$REPO_AND_VERSION$$',
517
- transactionId,
518
- wp: 'pbjs'
522
+ wp: 'pbjs',
523
+ biddercode: bidderRequest?.bidderCode
519
524
  },
520
525
  cpmAdjustment: cpmAdjustment
521
526
  }
@@ -569,6 +574,46 @@ const getConnectionType = () => {
569
574
  return types[connection?.effectiveType] || 0;
570
575
  }
571
576
 
577
+ /**
578
+ * Optimizes the impressions array by consolidating impressions for the same ad unit and media type
579
+ * @param {Array} imps - Array of impression objects
580
+ * @param {Object} bidderRequest - The bidder request object
581
+ * @returns {Array} - Optimized impressions array
582
+ */
583
+ function optimizeImps(imps, bidderRequest) {
584
+ const optimizedImps = {};
585
+
586
+ bidderRequest.bids.forEach(bid => {
587
+ const correspondingImp = imps.find(imp => imp.id === bid.bidId);
588
+ if (!correspondingImp) return;
589
+ const uniqueKey = bid.adUnitId;
590
+ if (!optimizedImps[uniqueKey]) {
591
+ optimizedImps[uniqueKey] = deepClone(correspondingImp);
592
+ return;
593
+ }
594
+ const baseImp = optimizedImps[uniqueKey];
595
+
596
+ if (isStr(correspondingImp.tagid)) {
597
+ baseImp.tagid = correspondingImp.tagid;
598
+ }
599
+
600
+ const copyPropertytoPath = (propPath, propName, toMerge) => {
601
+ if (!correspondingImp[propPath] || !correspondingImp[propPath][propName]) return;
602
+ if (!baseImp[propPath]) baseImp[propPath] = {};
603
+ if (toMerge) {
604
+ if (!baseImp[propPath][propName]) baseImp[propPath][propName] = [];
605
+ baseImp[propPath][propName] = [...baseImp[propPath][propName], ...correspondingImp[propPath][propName]];
606
+ } else {
607
+ baseImp[propPath][propName] = correspondingImp[propPath][propName];
608
+ }
609
+ };
610
+ copyPropertytoPath('ext', 'key_val', false);
611
+ copyPropertytoPath('ext', 'pmZoneId', false);
612
+ copyPropertytoPath('pmp', 'deals', true);
613
+ });
614
+ return Object.values(optimizedImps);
615
+ }
616
+
572
617
  // BB stands for Blue BillyWig
573
618
  const BB_RENDERER = {
574
619
  bootstrapPlayer: function(bid) {
@@ -641,6 +686,25 @@ const getPublisherId = (bids) =>
641
686
  ? bids.find(bid => bid.params?.publisherId?.trim())?.params.publisherId || null
642
687
  : null;
643
688
 
689
+ function getGzipSetting() {
690
+ // Check bidder-specific configuration
691
+ try {
692
+ const gzipSetting = deepAccess(config.getBidderConfig(), 'pubmatic.gzipEnabled');
693
+ if (gzipSetting !== undefined) {
694
+ const gzipValue = String(gzipSetting).toLowerCase().trim();
695
+ if (gzipValue === 'true' || gzipValue === 'false') {
696
+ const parsedValue = gzipValue === 'true';
697
+ logInfo('PubMatic: Using bidder-specific gzipEnabled setting:', parsedValue);
698
+ return parsedValue;
699
+ }
700
+ logWarn('PubMatic: Invalid gzipEnabled value in bidder config:', gzipSetting);
701
+ }
702
+ } catch (e) { logWarn('PubMatic: Error accessing bidder config:', e); }
703
+
704
+ logInfo('PubMatic: Using default gzipEnabled setting:', DEFAULT_GZIP_ENABLED);
705
+ return DEFAULT_GZIP_ENABLED;
706
+ }
707
+
644
708
  const _handleCustomParams = (params, conf) => {
645
709
  Object.keys(CUSTOM_PARAMS).forEach(key => {
646
710
  const value = params[key];
@@ -768,7 +832,6 @@ export const spec = {
768
832
  originalBid.params.wiid = originalBid.params.wiid || bidderRequest.auctionId || wiid;
769
833
  bid = deepClone(originalBid);
770
834
  _handleCustomParams(bid.params, conf);
771
- conf.transactionId = bid.ortb2Imp?.ext?.tid;
772
835
  const { bcat, acat } = bid.params;
773
836
  if (bcat) {
774
837
  blockedIabCategories = blockedIabCategories.concat(bcat);
@@ -785,7 +848,7 @@ export const spec = {
785
848
  data: data,
786
849
  bidderRequest: bidderRequest,
787
850
  options: {
788
- endpointCompression: true
851
+ endpointCompression: getGzipSetting()
789
852
  },
790
853
  };
791
854
  return data?.imp?.length ? serverRequest : null;
@@ -23,7 +23,7 @@ function generateQueryStringParams(config) {
23
23
  const gdprConsent = gdprDataHandler.getConsentData();
24
24
 
25
25
  const params = {
26
- publisherId: Number(config.params.publisherId),
26
+ publisherId: String(config.params.publisherId).trim(),
27
27
  gdpr: (gdprConsent && gdprConsent?.gdprApplies) ? 1 : 0,
28
28
  gdpr_consent: gdprConsent && gdprConsent?.consentString ? encodeURIComponent(gdprConsent.consentString) : '',
29
29
  src: 'pbjs_uid',
@@ -95,13 +95,13 @@ function hasRequiredConfig(config) {
95
95
  return false;
96
96
  }
97
97
 
98
- // convert publisherId to number
98
+ // ensure publisherId is a string
99
99
  if (config.params.publisherId) {
100
- config.params.publisherId = Number(config.params.publisherId);
100
+ config.params.publisherId = String(config.params.publisherId).trim();
101
101
  }
102
102
 
103
103
  if (!config.params.publisherId) {
104
- logError(LOG_PREFIX + 'config.params.publisherId (Number) should be provided.');
104
+ logError(LOG_PREFIX + 'config.params.publisherId (String) should be provided.');
105
105
  return false;
106
106
  }
107
107