prebid.js 9.2.0 → 9.4.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 (279) hide show
  1. package/creative/constants.js +2 -1
  2. package/creative/crossDomain.js +16 -4
  3. package/dist/33acrossAnalyticsAdapter.js +1 -1
  4. package/dist/33acrossBidAdapter.js +1 -1
  5. package/dist/33acrossIdSystem.js +1 -1
  6. package/dist/BTBidAdapter.js +1 -1
  7. package/dist/adagioAnalyticsAdapter.js +1 -1
  8. package/dist/adagioBidAdapter.js +1 -1
  9. package/dist/adagioRtdProvider.js +1 -1
  10. package/dist/adagioUtils.js +1 -1
  11. package/dist/addefendBidAdapter.js +1 -1
  12. package/dist/adfBidAdapter.js +1 -1
  13. package/dist/adgenerationBidAdapter.js +1 -1
  14. package/dist/adlooxRtdProvider.js +1 -1
  15. package/dist/adnuntiusBidAdapter.js +1 -1
  16. package/dist/adqueryBidAdapter.js +1 -1
  17. package/dist/adrelevantisBidAdapter.js +1 -1
  18. package/dist/adstirBidAdapter.js +1 -1
  19. package/dist/adtrgtmeBidAdapter.js +1 -1
  20. package/dist/adxcgAnalyticsAdapter.js +1 -1
  21. package/dist/adxcgBidAdapter.js +1 -1
  22. package/dist/adyoulikeBidAdapter.js +1 -1
  23. package/dist/agmaAnalyticsAdapter.js +1 -1
  24. package/dist/ajaBidAdapter.js +1 -1
  25. package/dist/amxBidAdapter.js +1 -1
  26. package/dist/amxIdSystem.js +1 -1
  27. package/dist/appierAnalyticsAdapter.js +1 -1
  28. package/dist/appnexusBidAdapter.js +1 -1
  29. package/dist/asoBidAdapter.js +1 -1
  30. package/dist/axonixBidAdapter.js +1 -1
  31. package/dist/bidglassBidAdapter.js +1 -1
  32. package/dist/big-richmediaBidAdapter.js +1 -1
  33. package/dist/bridBidAdapter.js +1 -1
  34. package/dist/bridgewellBidAdapter.js +1 -1
  35. package/dist/brightMountainMediaBidAdapter.js +1 -1
  36. package/dist/carodaBidAdapter.js +1 -1
  37. package/dist/chtnwBidAdapter.js +1 -1
  38. package/dist/chunk-core.js +1 -1
  39. package/dist/codefuelBidAdapter.js +1 -1
  40. package/dist/concertBidAdapter.js +1 -1
  41. package/dist/connectadBidAdapter.js +1 -1
  42. package/dist/consentManagement.js +1 -0
  43. package/dist/consentManagementGpp.js +1 -1
  44. package/dist/consentManagementTcf.js +1 -1
  45. package/dist/consumableBidAdapter.js +1 -1
  46. package/dist/conversantAnalyticsAdapter.js +1 -1
  47. package/dist/conversantBidAdapter.js +1 -1
  48. package/dist/copper6sspBidAdapter.js +1 -0
  49. package/dist/cpmstarBidAdapter.js +1 -1
  50. package/dist/craftBidAdapter.js +1 -1
  51. package/dist/criteoBidAdapter.js +1 -1
  52. package/dist/cwireBidAdapter.js +1 -1
  53. package/dist/dailymotionBidAdapter.js +1 -1
  54. package/dist/deltaprojectsBidAdapter.js +1 -1
  55. package/dist/dependencies.json +51 -13
  56. package/dist/dianomiBidAdapter.js +1 -1
  57. package/dist/dspxBidAdapter.js +1 -1
  58. package/dist/dxkultureBidAdapter.js +1 -1
  59. package/dist/eplanningBidAdapter.js +1 -1
  60. package/dist/euidIdSystem.js +1 -1
  61. package/dist/exadsBidAdapter.js +1 -1
  62. package/dist/feedadBidAdapter.js +1 -1
  63. package/dist/finativeBidAdapter.js +1 -1
  64. package/dist/freewheel-sspBidAdapter.js +1 -1
  65. package/dist/gmosspBidAdapter.js +1 -1
  66. package/dist/goldbachBidAdapter.js +1 -1
  67. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  68. package/dist/greenbidsRtdProvider.js +1 -1
  69. package/dist/gridBidAdapter.js +1 -1
  70. package/dist/gumgumBidAdapter.js +1 -1
  71. package/dist/h12mediaBidAdapter.js +1 -1
  72. package/dist/hypelabBidAdapter.js +1 -1
  73. package/dist/id5AnalyticsAdapter.js +1 -1
  74. package/dist/id5IdSystem.js +1 -1
  75. package/dist/illuminBidAdapter.js +1 -1
  76. package/dist/imdsBidAdapter.js +1 -1
  77. package/dist/improvedigitalBidAdapter.js +1 -1
  78. package/dist/insticatorBidAdapter.js +1 -1
  79. package/dist/intentIqIdSystem.js +1 -1
  80. package/dist/ixBidAdapter.js +1 -1
  81. package/dist/jixieBidAdapter.js +1 -1
  82. package/dist/justpremiumBidAdapter.js +1 -1
  83. package/dist/kargoBidAdapter.js +1 -1
  84. package/dist/kimberliteBidAdapter.js +1 -1
  85. package/dist/konduitAnalyticsAdapter.js +1 -1
  86. package/dist/kueezBidAdapter.js +1 -1
  87. package/dist/kueezRtbBidAdapter.js +1 -1
  88. package/dist/lassoBidAdapter.js +1 -1
  89. package/dist/lifestreetBidAdapter.js +1 -1
  90. package/dist/liveIntentIdSystem.js +1 -1
  91. package/dist/logicadBidAdapter.js +1 -1
  92. package/dist/loglyliftBidAdapter.js +1 -1
  93. package/dist/luceadBidAdapter.js +1 -1
  94. package/dist/luponmediaBidAdapter.js +1 -1
  95. package/dist/mabidderBidAdapter.js +1 -1
  96. package/dist/magniteAnalyticsAdapter.js +1 -1
  97. package/dist/malltvAnalyticsAdapter.js +1 -1
  98. package/dist/marsmediaBidAdapter.js +1 -1
  99. package/dist/mediafuseBidAdapter.js +1 -1
  100. package/dist/medianetAnalyticsAdapter.js +1 -1
  101. package/dist/medianetBidAdapter.js +1 -1
  102. package/dist/mediasquareBidAdapter.js +1 -1
  103. package/dist/mgidBidAdapter.js +1 -1
  104. package/dist/minutemediaBidAdapter.js +1 -1
  105. package/dist/missenaBidAdapter.js +1 -1
  106. package/dist/nexx360BidAdapter.js +1 -1
  107. package/dist/nobidAnalyticsAdapter.js +1 -1
  108. package/dist/nobidBidAdapter.js +1 -1
  109. package/dist/not-for-prod/prebid.js +184 -178
  110. package/dist/oguryBidAdapter.js +1 -1
  111. package/dist/onetagBidAdapter.js +1 -1
  112. package/dist/ooloAnalyticsAdapter.js +1 -1
  113. package/dist/openwebBidAdapter.js +1 -1
  114. package/dist/openxBidAdapter.js +1 -1
  115. package/dist/optidigitalBidAdapter.js +1 -1
  116. package/dist/orakiBidAdapter.js +1 -0
  117. package/dist/orbidderBidAdapter.js +1 -1
  118. package/dist/outbrainBidAdapter.js +1 -1
  119. package/dist/ozoneBidAdapter.js +1 -1
  120. package/dist/pairIdSystem.js +1 -1
  121. package/dist/pixfutureBidAdapter.js +1 -1
  122. package/dist/prebidServerBidAdapter.js +1 -1
  123. package/dist/processResponse.js +1 -0
  124. package/dist/publinkIdSystem.js +1 -1
  125. package/dist/publirBidAdapter.js +1 -1
  126. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  127. package/dist/pubmaticBidAdapter.js +1 -1
  128. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  129. package/dist/pxyzBidAdapter.js +1 -1
  130. package/dist/quantcastBidAdapter.js +1 -1
  131. package/dist/readpeakBidAdapter.js +1 -1
  132. package/dist/relaidoBidAdapter.js +1 -1
  133. package/dist/retailspotBidAdapter.js +1 -1
  134. package/dist/rhythmoneBidAdapter.js +1 -1
  135. package/dist/riseBidAdapter.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/sharethroughAnalyticsAdapter.js +1 -1
  140. package/dist/sharethroughBidAdapter.js +1 -1
  141. package/dist/shinezBidAdapter.js +1 -1
  142. package/dist/shinezRtbBidAdapter.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/smartyadsBidAdapter.js +1 -1
  147. package/dist/smartyadsUtils.js +1 -0
  148. package/dist/smilewantedBidAdapter.js +1 -1
  149. package/dist/snigelBidAdapter.js +1 -1
  150. package/dist/sonobiBidAdapter.js +1 -1
  151. package/dist/sovrnBidAdapter.js +1 -1
  152. package/dist/sspBCBidAdapter.js +1 -1
  153. package/dist/stnBidAdapter.js +1 -1
  154. package/dist/stvBidAdapter.js +1 -1
  155. package/dist/sublimeBidAdapter.js +1 -1
  156. package/dist/taboolaBidAdapter.js +1 -1
  157. package/dist/tagorasBidAdapter.js +1 -1
  158. package/dist/tappxBidAdapter.js +1 -1
  159. package/dist/targetVideoBidAdapter.js +1 -1
  160. package/dist/teadsBidAdapter.js +1 -1
  161. package/dist/terceptAnalyticsAdapter.js +1 -1
  162. package/dist/themoneytizerBidAdapter.js +1 -1
  163. package/dist/trionBidAdapter.js +1 -1
  164. package/dist/tripleliftBidAdapter.js +1 -1
  165. package/dist/ttdBidAdapter.js +1 -1
  166. package/dist/twistDigitalBidAdapter.js +1 -1
  167. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  168. package/dist/uid2IdSystem.js +1 -1
  169. package/dist/underdogmediaBidAdapter.js +1 -1
  170. package/dist/undertoneBidAdapter.js +1 -1
  171. package/dist/unrulyBidAdapter.js +1 -1
  172. package/dist/userId.js +1 -1
  173. package/dist/viantOrtbBidAdapter.js +1 -1
  174. package/dist/vidazooBidAdapter.js +1 -1
  175. package/dist/vidazooUtils.js +1 -0
  176. package/dist/videobyteBidAdapter.js +1 -1
  177. package/dist/visxBidAdapter.js +1 -1
  178. package/dist/vuukleBidAdapter.js +1 -1
  179. package/dist/widespaceBidAdapter.js +1 -1
  180. package/dist/winrBidAdapter.js +1 -1
  181. package/dist/yahooAdsBidAdapter.js +1 -1
  182. package/dist/yieldmoBidAdapter.js +1 -1
  183. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  184. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  185. package/dist/zeta_global_sspBidAdapter.js +1 -1
  186. package/integrationExamples/gpt/x-domain/creative.html +1 -1
  187. package/libraries/consentManagement/cmUtils.js +38 -0
  188. package/libraries/processResponse/index.js +12 -0
  189. package/libraries/smartyadsUtils/getAdUrlByRegion.js +32 -0
  190. package/libraries/vidazooUtils/bidderUtils.js +480 -0
  191. package/libraries/vidazooUtils/constants.js +7 -0
  192. package/modules/adagioRtdProvider.js +9 -7
  193. package/modules/addefendBidAdapter.js +1 -2
  194. package/modules/adfBidAdapter.js +1 -10
  195. package/modules/adlooxRtdProvider.js +1 -1
  196. package/modules/adnuntiusBidAdapter.js +1 -0
  197. package/modules/adxcgAnalyticsAdapter.js +1 -2
  198. package/modules/carodaBidAdapter.js +3 -8
  199. package/modules/codefuelBidAdapter.js +1 -10
  200. package/modules/consentManagementGpp.js +2 -38
  201. package/modules/consentManagementTcf.js +7 -38
  202. package/modules/conversantAnalyticsAdapter.js +1 -2
  203. package/modules/copper6sspBidAdapter.js +19 -0
  204. package/modules/copper6sspBidAdapter.md +79 -0
  205. package/modules/cpmstarBidAdapter.js +52 -36
  206. package/modules/cpmstarBidAdapter.md +1 -4
  207. package/modules/criteoBidAdapter.js +10 -3
  208. package/modules/dailymotionBidAdapter.js +1 -1
  209. package/modules/deltaprojectsBidAdapter.js +2 -11
  210. package/modules/dianomiBidAdapter.js +1 -9
  211. package/modules/finativeBidAdapter.js +1 -10
  212. package/modules/gridBidAdapter.js +2 -12
  213. package/modules/id5AnalyticsAdapter.js +1 -2
  214. package/modules/illuminBidAdapter.js +9 -304
  215. package/modules/intentIqIdSystem.js +408 -50
  216. package/modules/intentIqIdSystem.md +92 -0
  217. package/modules/kueezRtbBidAdapter.js +17 -312
  218. package/modules/liveIntentIdSystem.js +2 -2
  219. package/modules/luponmediaBidAdapter.js +4 -10
  220. package/modules/mabidderBidAdapter.js +1 -2
  221. package/modules/medianetAnalyticsAdapter.js +1 -2
  222. package/modules/medianetBidAdapter.js +1 -1
  223. package/modules/mgidBidAdapter.js +1 -10
  224. package/modules/orakiBidAdapter.js +19 -0
  225. package/modules/orakiBidAdapter.md +79 -0
  226. package/modules/orbidderBidAdapter.js +4 -2
  227. package/modules/outbrainBidAdapter.js +8 -43
  228. package/modules/ozoneBidAdapter.js +9 -7
  229. package/modules/pairIdSystem.js +27 -10
  230. package/modules/pixfutureBidAdapter.js +1 -2
  231. package/modules/prebidServerBidAdapter/index.js +1 -1
  232. package/modules/seedtagBidAdapter.js +4 -0
  233. package/modules/shinezRtbBidAdapter.js +12 -304
  234. package/modules/smartadserverBidAdapter.js +3 -0
  235. package/modules/smartyadsBidAdapter.js +6 -110
  236. package/modules/snigelBidAdapter.js +1 -2
  237. package/modules/tagorasBidAdapter.js +13 -316
  238. package/modules/tappxBidAdapter.js +1 -2
  239. package/modules/terceptAnalyticsAdapter.js +1 -2
  240. package/modules/twistDigitalBidAdapter.js +9 -433
  241. package/modules/userId/index.js +31 -21
  242. package/modules/viantOrtbBidAdapter.js +20 -0
  243. package/modules/vidazooBidAdapter.js +26 -468
  244. package/modules/visxBidAdapter.js +27 -29
  245. package/modules/yahooAdsBidAdapter.js +4 -1
  246. package/modules/yuktamediaAnalyticsAdapter.js +1 -2
  247. package/modules/zeta_global_sspBidAdapter.js +2 -2
  248. package/package.json +1 -1
  249. package/src/adRendering.js +25 -2
  250. package/src/constants.js +2 -0
  251. package/src/prebid.js +2 -1
  252. package/src/utils.js +19 -1
  253. package/test/spec/creative/crossDomainCreative_spec.js +38 -2
  254. package/test/spec/fpd/gdpr_spec.js +24 -2
  255. package/test/spec/libraries/processResponse_spec.js +60 -0
  256. package/test/spec/modules/adagioRtdProvider_spec.js +12 -0
  257. package/test/spec/modules/adnuntiusBidAdapter_spec.js +6 -3
  258. package/test/spec/modules/conversantAnalyticsAdapter_spec.js +1 -1
  259. package/test/spec/modules/copper6sspBidAdapter_spec.js +514 -0
  260. package/test/spec/modules/cpmstarBidAdapter_spec.js +1 -1
  261. package/test/spec/modules/dailymotionBidAdapter_spec.js +18 -14
  262. package/test/spec/modules/illuminBidAdapter_spec.js +26 -13
  263. package/test/spec/modules/intentIqIdSystem_spec.js +264 -36
  264. package/test/spec/modules/kueezRtbBidAdapter_spec.js +26 -15
  265. package/test/spec/modules/orakiBidAdapter_spec.js +510 -0
  266. package/test/spec/modules/outbrainBidAdapter_spec.js +32 -1
  267. package/test/spec/modules/seedtagBidAdapter_spec.js +27 -0
  268. package/test/spec/modules/shinezRtbBidAdapter_spec.js +26 -14
  269. package/test/spec/modules/smartadserverBidAdapter_spec.js +7 -0
  270. package/test/spec/modules/smartyadsBidAdapter_spec.js +6 -83
  271. package/test/spec/modules/tagorasBidAdapter_spec.js +26 -15
  272. package/test/spec/modules/twistDigitalBidAdapter_spec.js +19 -22
  273. package/test/spec/modules/userId_spec.js +86 -47
  274. package/test/spec/modules/viantOrtbBidAdapter_spec.js +87 -6
  275. package/test/spec/modules/vidazooBidAdapter_spec.js +21 -23
  276. package/test/spec/modules/visxBidAdapter_spec.js +180 -0
  277. package/test/spec/modules/yahooAdsBidAdapter_spec.js +1 -1
  278. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +11 -0
  279. package/test/spec/unit/pbjs_api_spec.js +6 -1
@@ -22,7 +22,7 @@ const AUCTIONURI = '/openrtb2/auction';
22
22
  const OZONECOOKIESYNC = '/static/load-cookie.html';
23
23
  const OZONE_RENDERER_URL = 'https://prebid.the-ozone-project.com/ozone-renderer.js';
24
24
  const ORIGIN_DEV = 'https://test.ozpr.net';
25
- const OZONEVERSION = '2.9.2';
25
+ const OZONEVERSION = '2.9.3';
26
26
  export const spec = {
27
27
  gvlid: 524,
28
28
  aliases: [{code: 'lmc', gvlid: 524}, {code: 'venatus', gvlid: 524}],
@@ -535,7 +535,7 @@ export const spec = {
535
535
  for (let j = 0; j < sb.bid.length; j++) {
536
536
  let thisRequestBid = this.getBidRequestForBidId(sb.bid[j].impid, request.bidderRequest.bids);
537
537
  logInfo(`seatbid:${i}, bid:${j} Going to set default w h for seatbid/bidRequest`, sb.bid[j], thisRequestBid);
538
- const {defaultWidth, defaultHeight} = defaultSize(thisRequestBid);
538
+ let {defaultWidth, defaultHeight} = defaultSize(thisRequestBid);
539
539
  let thisBid = ozoneAddStandardProperties(sb.bid[j], defaultWidth, defaultHeight);
540
540
  thisBid.meta = {advertiserDomains: thisBid.adomain || []};
541
541
  let videoContext = null;
@@ -567,8 +567,8 @@ export const spec = {
567
567
  this.setBidMediaTypeIfNotExist(thisBid, BANNER);
568
568
  }
569
569
  if (enhancedAdserverTargeting) {
570
- let allBidsForThisBidid = ozoneGetAllBidsForBidId(thisBid.bidId, serverResponse.seatbid);
571
- logInfo('Going to iterate allBidsForThisBidId', allBidsForThisBidid);
570
+ let allBidsForThisBidid = ozoneGetAllBidsForBidId(thisBid.bidId, serverResponse.seatbid, defaultWidth, defaultHeight);
571
+ logInfo('Going to iterate allBidsForThisBidId', deepClone(allBidsForThisBidid));
572
572
  Object.keys(allBidsForThisBidid).forEach((bidderName, index, ar2) => {
573
573
  logInfo(`adding adserverTargeting for ${bidderName} for bidId ${thisBid.bidId}`);
574
574
  adserverTargeting[whitelabelPrefix + '_' + bidderName] = bidderName;
@@ -606,6 +606,7 @@ export const spec = {
606
606
  }
607
607
  }
608
608
  let {seat: winningSeat, bid: winningBid} = ozoneGetWinnerForRequestBid(thisBid.bidId, serverResponse.seatbid);
609
+ winningBid = ozoneAddStandardProperties(winningBid, defaultWidth, defaultHeight);
609
610
  adserverTargeting[whitelabelPrefix + '_auc_id'] = String(aucId); // was request.bidderRequest.auctionId
610
611
  adserverTargeting[whitelabelPrefix + '_winner'] = String(winningSeat);
611
612
  adserverTargeting[whitelabelPrefix + '_bid'] = 'true';
@@ -899,7 +900,7 @@ export const spec = {
899
900
  }
900
901
  };
901
902
  export function injectAdIdsIntoAllBidResponses(seatbid) {
902
- logInfo('injectAdIdsIntoAllBidResponses', seatbid);
903
+ logInfo('injectAdIdsIntoAllBidResponses', deepClone(seatbid));
903
904
  for (let i = 0; i < seatbid.length; i++) {
904
905
  let sb = seatbid[i];
905
906
  for (let j = 0; j < sb.bid.length; j++) {
@@ -951,7 +952,7 @@ export function ozoneGetWinnerForRequestBid(requestBidId, serverResponseSeatBid)
951
952
  }
952
953
  return {'seat': winningSeat, 'bid': thisBidWinner};
953
954
  }
954
- export function ozoneGetAllBidsForBidId(matchBidId, serverResponseSeatBid) {
955
+ export function ozoneGetAllBidsForBidId(matchBidId, serverResponseSeatBid, defaultWidth, defaultHeight) {
955
956
  let objBids = {};
956
957
  for (let j = 0; j < serverResponseSeatBid.length; j++) {
957
958
  let theseBids = serverResponseSeatBid[j].bid;
@@ -960,10 +961,11 @@ export function ozoneGetAllBidsForBidId(matchBidId, serverResponseSeatBid) {
960
961
  if (theseBids[k].impid === matchBidId) {
961
962
  if (objBids.hasOwnProperty(thisSeat)) { // > 1 bid for an adunit from a bidder - only use the one with the highest bid
962
963
  if (objBids[thisSeat]['price'] < theseBids[k].price) {
963
- objBids[thisSeat] = theseBids[k];
964
+ objBids[thisSeat] = ozoneAddStandardProperties(theseBids[k], defaultWidth, defaultHeight);
964
965
  }
965
966
  } else {
966
967
  objBids[thisSeat] = theseBids[k];
968
+ objBids[thisSeat] = ozoneAddStandardProperties(theseBids[k], defaultWidth, defaultHeight);
967
969
  }
968
970
  }
969
971
  }
@@ -50,9 +50,11 @@ export const pairIdSubmodule = {
50
50
  return value && Array.isArray(value) ? {'pairId': value} : undefined
51
51
  },
52
52
  /**
53
- * performs action to obtain id and return a value in the callback's response argument
54
- * @function
55
- * @returns {id: string | undefined }
53
+ * Performs action to obtain ID and return a value in the callback's response argument.
54
+ * @function getId
55
+ * @param {Object} config - The configuration object.
56
+ * @param {Object} config.params - The parameters from the configuration.
57
+ * @returns {{id: string[] | undefined}} The obtained IDs or undefined if no IDs are found.
56
58
  */
57
59
  getId(config) {
58
60
  const pairIdsString = pairIdFromLocalStorage(PAIR_ID_KEY) || pairIdFromCookie(PAIR_ID_KEY)
@@ -67,13 +69,28 @@ export const pairIdSubmodule = {
67
69
 
68
70
  const configParams = (config && config.params) || {};
69
71
  if (configParams && configParams.liveramp) {
70
- let LRStorageLocation = configParams.liveramp.storageKey || DEFAULT_LIVERAMP_PAIR_ID_KEY
71
- const liverampValue = pairIdFromLocalStorage(LRStorageLocation) || pairIdFromCookie(LRStorageLocation)
72
- try {
73
- const obj = JSON.parse(atob(liverampValue));
74
- ids = ids.concat(obj.envelope);
75
- } catch (error) {
76
- logInfo(error)
72
+ let LRStorageLocation = configParams.liveramp.storageKey || DEFAULT_LIVERAMP_PAIR_ID_KEY;
73
+ const liverampValue = pairIdFromLocalStorage(LRStorageLocation) || pairIdFromCookie(LRStorageLocation);
74
+
75
+ if (liverampValue) {
76
+ try {
77
+ const parsedValue = atob(liverampValue);
78
+ if (parsedValue) {
79
+ const obj = JSON.parse(parsedValue);
80
+
81
+ if (obj && typeof obj === 'object' && obj.envelope) {
82
+ ids = ids.concat(obj.envelope);
83
+ } else {
84
+ logInfo('Pairid: Parsed object is not valid or does not contain envelope');
85
+ }
86
+ } else {
87
+ logInfo('Pairid: Decoded value is empty');
88
+ }
89
+ } catch (error) {
90
+ logInfo('Pairid: Error parsing JSON: ', error);
91
+ }
92
+ } else {
93
+ logInfo('Pairid: liverampValue for pairId from storage is empty or null');
77
94
  }
78
95
  }
79
96
 
@@ -5,7 +5,6 @@ import {config} from '../src/config.js';
5
5
  import {find, includes} from '../src/polyfill.js';
6
6
  import {deepAccess, isArray, isFn, isNumber, isPlainObject} from '../src/utils.js';
7
7
  import {auctionManager} from '../src/auctionManager.js';
8
- import {getGlobal} from '../src/prebidGlobal.js';
9
8
  import {getANKeywordParam} from '../libraries/appnexusUtils/anKeywords.js';
10
9
  import {convertCamelToUnderscore} from '../libraries/appnexusUtils/anUtils.js';
11
10
 
@@ -126,7 +125,7 @@ export const spec = {
126
125
  method: 'POST',
127
126
  options: {withCredentials: true},
128
127
  data: {
129
- v: getGlobal().version,
128
+ v: 'v' + '$prebid.version$',
130
129
  pageUrl: referer,
131
130
  bidId: bidRequest.bidId,
132
131
  // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781
@@ -179,7 +179,7 @@ function setS2sConfig(options) {
179
179
 
180
180
  const activeBidders = [];
181
181
  const optionsValid = normalizedOptions.every((option, i, array) => {
182
- formatUrlParams(options);
182
+ formatUrlParams(option);
183
183
  const updateSuccess = updateConfigDefaultVendor(option);
184
184
  if (updateSuccess !== false) {
185
185
  const valid = validateConfigRequiredProps(option);
@@ -333,6 +333,10 @@ export const spec = {
333
333
  payload.badv = bidderRequest.ortb2?.badv
334
334
  }
335
335
 
336
+ if (bidderRequest.ortb2?.device?.sua) {
337
+ payload.sua = bidderRequest.ortb2.device.sua
338
+ }
339
+
336
340
  const payloadString = JSON.stringify(payload);
337
341
 
338
342
  return {
@@ -1,321 +1,29 @@
1
- import {_each, deepAccess, parseSizesInput, parseUrl, uniques, isFn} from '../src/utils.js';
2
1
  import {registerBidder} from '../src/adapters/bidderFactory.js';
3
2
  import {BANNER, VIDEO} from '../src/mediaTypes.js';
4
3
  import {getStorageManager} from '../src/storageManager.js';
5
- import {config} from '../src/config.js';
4
+ import {
5
+ isBidRequestValid,
6
+ createBuildRequestsFn,
7
+ createInterpretResponseFn, createUserSyncGetter
8
+ } from '../libraries/vidazooUtils/bidderUtils.js';
6
9
 
7
10
  const DEFAULT_SUB_DOMAIN = 'exchange';
8
11
  const BIDDER_CODE = 'shinezRtb';
9
12
  const BIDDER_VERSION = '1.0.0';
10
- const CURRENCY = 'USD';
11
- const TTL_SECONDS = 60 * 5;
12
- const UNIQUE_DEAL_ID_EXPIRY = 1000 * 60 * 15;
13
- const storage = getStorageManager({bidderCode: BIDDER_CODE});
14
-
15
- function getTopWindowQueryParams() {
16
- try {
17
- const parsedUrl = parseUrl(window.top.document.URL, {decodeSearchAsString: true});
18
- return parsedUrl.search;
19
- } catch (e) {
20
- return '';
21
- }
22
- }
13
+ export const storage = getStorageManager({bidderCode: BIDDER_CODE});
23
14
 
24
15
  export function createDomain(subDomain = DEFAULT_SUB_DOMAIN) {
25
16
  return `https://${subDomain}.sweetgum.io`;
26
17
  }
27
18
 
28
- export function extractCID(params) {
29
- return params.cId || params.CID || params.cID || params.CId || params.cid || params.ciD || params.Cid || params.CiD;
30
- }
31
-
32
- export function extractPID(params) {
33
- return params.pId || params.PID || params.pID || params.PId || params.pid || params.piD || params.Pid || params.PiD;
34
- }
35
-
36
- export function extractSubDomain(params) {
37
- return params.subDomain || params.SubDomain || params.Subdomain || params.subdomain || params.SUBDOMAIN || params.subDOMAIN;
38
- }
39
-
40
- function isBidRequestValid(bid) {
41
- const params = bid.params || {};
42
- return !!(extractCID(params) && extractPID(params));
43
- }
44
-
45
- function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) {
46
- const {
47
- params,
48
- bidId,
49
- userId,
50
- adUnitCode,
51
- schain,
52
- mediaTypes,
53
- ortb2Imp,
54
- bidderRequestId,
55
- bidRequestsCount,
56
- bidderRequestsCount,
57
- bidderWinsCount
58
- } = bid;
59
- let {bidFloor, ext} = params;
60
- const hashUrl = hashCode(topWindowUrl);
61
- const uniqueDealId = getUniqueDealId(hashUrl);
62
- const cId = extractCID(params);
63
- const pId = extractPID(params);
64
- const subDomain = extractSubDomain(params);
65
-
66
- const gpid = deepAccess(bid, 'ortb2Imp.ext.gpid', deepAccess(bid, 'ortb2Imp.ext.data.pbadslot', ''));
67
-
68
- if (isFn(bid.getFloor)) {
69
- const floorInfo = bid.getFloor({
70
- currency: 'USD',
71
- mediaType: '*',
72
- size: '*'
73
- });
74
-
75
- if (floorInfo.currency === 'USD') {
76
- bidFloor = floorInfo.floor;
77
- }
78
- }
79
-
80
- let data = {
81
- url: encodeURIComponent(topWindowUrl),
82
- uqs: getTopWindowQueryParams(),
83
- cb: Date.now(),
84
- bidFloor: bidFloor,
85
- bidId: bidId,
86
- referrer: bidderRequest.refererInfo.ref,
87
- adUnitCode: adUnitCode,
88
- publisherId: pId,
89
- sizes: sizes,
90
- uniqueDealId: uniqueDealId,
91
- bidderVersion: BIDDER_VERSION,
92
- prebidVersion: '$prebid.version$',
93
- res: `${screen.width}x${screen.height}`,
94
- schain: schain,
95
- mediaTypes: mediaTypes,
96
- gpid: gpid,
97
- transactionId: ortb2Imp?.ext?.tid,
98
- bidderRequestId: bidderRequestId,
99
- bidRequestsCount: bidRequestsCount,
100
- bidderRequestsCount: bidderRequestsCount,
101
- bidderWinsCount: bidderWinsCount,
102
- bidderTimeout: bidderTimeout
103
- };
104
-
105
- appendUserIdsToRequestPayload(data, userId);
106
-
107
- const sua = deepAccess(bidderRequest, 'ortb2.device.sua');
108
-
109
- if (sua) {
110
- data.sua = sua;
111
- }
112
-
113
- if (bidderRequest.gdprConsent) {
114
- if (bidderRequest.gdprConsent.consentString) {
115
- data.gdprConsent = bidderRequest.gdprConsent.consentString;
116
- }
117
- if (bidderRequest.gdprConsent.gdprApplies !== undefined) {
118
- data.gdpr = bidderRequest.gdprConsent.gdprApplies ? 1 : 0;
119
- }
120
- }
121
- if (bidderRequest.uspConsent) {
122
- data.usPrivacy = bidderRequest.uspConsent;
123
- }
124
-
125
- if (bidderRequest.gppConsent) {
126
- data.gppString = bidderRequest.gppConsent.gppString;
127
- data.gppSid = bidderRequest.gppConsent.applicableSections;
128
- } else if (bidderRequest.ortb2?.regs?.gpp) {
129
- data.gppString = bidderRequest.ortb2.regs.gpp;
130
- data.gppSid = bidderRequest.ortb2.regs.gpp_sid;
131
- }
132
-
133
- const dto = {
134
- method: 'POST',
135
- url: `${createDomain(subDomain)}/prebid/multi/${cId}`,
136
- data: data
137
- };
138
-
139
- _each(ext, (value, key) => {
140
- dto.data['ext.' + key] = value;
141
- });
142
-
143
- return dto;
144
- }
145
-
146
- function appendUserIdsToRequestPayload(payloadRef, userIds) {
147
- let key;
148
- _each(userIds, (userId, idSystemProviderName) => {
149
- key = `uid.${idSystemProviderName}`;
19
+ const buildRequests = createBuildRequestsFn(createDomain, null, storage, BIDDER_CODE, BIDDER_VERSION, false);
150
20
 
151
- switch (idSystemProviderName) {
152
- case 'lipb':
153
- payloadRef[key] = userId.lipbid;
154
- break;
155
- case 'id5id':
156
- payloadRef[key] = userId.uid;
157
- break;
158
- default:
159
- payloadRef[key] = userId;
160
- }
161
- });
162
- }
163
-
164
- function buildRequests(validBidRequests, bidderRequest) {
165
- const topWindowUrl = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation;
166
- const bidderTimeout = config.getConfig('bidderTimeout');
167
- const requests = [];
168
- validBidRequests.forEach(validBidRequest => {
169
- const sizes = parseSizesInput(validBidRequest.sizes);
170
- const request = buildRequest(validBidRequest, topWindowUrl, sizes, bidderRequest, bidderTimeout);
171
- requests.push(request);
172
- });
173
- return requests;
174
- }
175
-
176
- function interpretResponse(serverResponse, request) {
177
- if (!serverResponse || !serverResponse.body) {
178
- return [];
179
- }
180
- const {bidId} = request.data;
181
- const {results} = serverResponse.body;
182
-
183
- let output = [];
184
-
185
- try {
186
- results.forEach(result => {
187
- const {
188
- creativeId,
189
- ad,
190
- price,
191
- exp,
192
- width,
193
- height,
194
- currency,
195
- metaData,
196
- advertiserDomains,
197
- mediaType = BANNER
198
- } = result;
199
- if (!ad || !price) {
200
- return;
201
- }
202
-
203
- const response = {
204
- requestId: bidId,
205
- cpm: price,
206
- width: width,
207
- height: height,
208
- creativeId: creativeId,
209
- currency: currency || CURRENCY,
210
- netRevenue: true,
211
- ttl: exp || TTL_SECONDS,
212
- };
213
-
214
- if (metaData) {
215
- Object.assign(response, {
216
- meta: metaData
217
- })
218
- } else {
219
- Object.assign(response, {
220
- meta: {
221
- advertiserDomains: advertiserDomains || []
222
- }
223
- })
224
- }
225
-
226
- if (mediaType === BANNER) {
227
- Object.assign(response, {
228
- ad: ad,
229
- });
230
- } else {
231
- Object.assign(response, {
232
- vastXml: ad,
233
- mediaType: VIDEO
234
- });
235
- }
236
- output.push(response);
237
- });
238
- return output;
239
- } catch (e) {
240
- return [];
241
- }
242
- }
243
-
244
- function getUserSyncs(syncOptions, responses, gdprConsent = {}, uspConsent = '') {
245
- let syncs = [];
246
- const {iframeEnabled, pixelEnabled} = syncOptions;
247
- const {gdprApplies, consentString = ''} = gdprConsent;
248
-
249
- const cidArr = responses.filter(resp => deepAccess(resp, 'body.cid')).map(resp => resp.body.cid).filter(uniques);
250
- const params = `?cid=${encodeURIComponent(cidArr.join(','))}&gdpr=${gdprApplies ? 1 : 0}&gdpr_consent=${encodeURIComponent(consentString || '')}&us_privacy=${encodeURIComponent(uspConsent || '')}`
251
- if (iframeEnabled) {
252
- syncs.push({
253
- type: 'iframe',
254
- url: `https://sync.sweetgum.io/api/sync/iframe/${params}`
255
- });
256
- }
257
- if (pixelEnabled) {
258
- syncs.push({
259
- type: 'image',
260
- url: `https://sync.sweetgum.io/api/sync/image/${params}`
261
- });
262
- }
263
- return syncs;
264
- }
21
+ const interpretResponse = createInterpretResponseFn(BIDDER_CODE, false);
265
22
 
266
- export function hashCode(s, prefix = '_') {
267
- const l = s.length;
268
- let h = 0
269
- let i = 0;
270
- if (l > 0) {
271
- while (i < l) {
272
- h = (h << 5) - h + s.charCodeAt(i++) | 0;
273
- }
274
- }
275
- return prefix + h;
276
- }
277
-
278
- export function getUniqueDealId(key, expiry = UNIQUE_DEAL_ID_EXPIRY) {
279
- const storageKey = `u_${key}`;
280
- const now = Date.now();
281
- const data = getStorageItem(storageKey);
282
- let uniqueId;
283
-
284
- if (!data || !data.value || now - data.created > expiry) {
285
- uniqueId = `${key}_${now.toString()}`;
286
- setStorageItem(storageKey, uniqueId);
287
- } else {
288
- uniqueId = data.value;
289
- }
290
-
291
- return uniqueId;
292
- }
293
-
294
- export function getStorageItem(key) {
295
- try {
296
- return tryParseJSON(storage.getDataFromLocalStorage(key));
297
- } catch (e) {
298
- }
299
-
300
- return null;
301
- }
302
-
303
- export function setStorageItem(key, value, timestamp) {
304
- try {
305
- const created = timestamp || Date.now();
306
- const data = JSON.stringify({value, created});
307
- storage.setDataInLocalStorage(key, data);
308
- } catch (e) {
309
- }
310
- }
311
-
312
- export function tryParseJSON(value) {
313
- try {
314
- return JSON.parse(value);
315
- } catch (e) {
316
- return value;
317
- }
318
- }
23
+ const getUserSyncs = createUserSyncGetter({
24
+ iframeSyncUrl: 'https://sync.sweetgum.io/api/sync/iframe',
25
+ imageSyncUrl: 'https://sync.sweetgum.io/api/sync/image',
26
+ });
319
27
 
320
28
  export const spec = {
321
29
  code: BIDDER_CODE,
@@ -156,6 +156,9 @@ export const spec = {
156
156
  method: 'POST',
157
157
  url: (domain !== undefined ? domain : 'https://prg.smartadserver.com') + '/prebid/v1',
158
158
  data: JSON.stringify(payload),
159
+ options: {
160
+ browsingTopics: false
161
+ }
159
162
  };
160
163
  },
161
164
 
@@ -1,63 +1,15 @@
1
- import {registerBidder} from '../src/adapters/bidderFactory.js';
1
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
2
2
  import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
3
3
  import { config } from '../src/config.js';
4
4
  import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
5
- import { ajax } from '../src/ajax.js';
5
+ import { getAdUrlByRegion } from '../libraries/smartyadsUtils/getAdUrlByRegion.js';
6
+ import { interpretResponse, getUserSyncs } from '../libraries/teqblazeUtils/bidderUtils.js';
6
7
 
7
8
  const BIDDER_CODE = 'smartyads';
8
9
  const GVLID = 534;
9
- const adUrls = {
10
- US_EAST: 'https://n1.smartyads.com/?c=o&m=prebid&secret_key=prebid_js',
11
- EU: 'https://n2.smartyads.com/?c=o&m=prebid&secret_key=prebid_js',
12
- SGP: 'https://n6.smartyads.com/?c=o&m=prebid&secret_key=prebid_js'
13
- }
14
10
 
15
11
  const URL_SYNC = 'https://as.ck-ie.com/prebidjs?p=7c47322e527cf8bdeb7facc1bb03387a';
16
12
 
17
- function isBidResponseValid(bid) {
18
- if (!bid.requestId || !bid.cpm || !bid.creativeId ||
19
- !bid.ttl || !bid.currency) {
20
- return false;
21
- }
22
- switch (bid['mediaType']) {
23
- case BANNER:
24
- return Boolean(bid.width && bid.height && bid.ad);
25
- case VIDEO:
26
- return Boolean(bid.vastUrl) || Boolean(bid.vastXml);
27
- case NATIVE:
28
- return Boolean(bid.native && bid.native.title && bid.native.image && bid.native.impressionTrackers);
29
- default:
30
- return false;
31
- }
32
- }
33
-
34
- function getAdUrlByRegion(bid) {
35
- let adUrl;
36
-
37
- if (bid.params.region && adUrls[bid.params.region]) {
38
- adUrl = adUrls[bid.params.region];
39
- } else {
40
- try {
41
- const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
42
- const region = timezone.split('/')[0];
43
-
44
- switch (region) {
45
- case 'Europe':
46
- adUrl = adUrls['EU'];
47
- break;
48
- case 'Asia':
49
- adUrl = adUrls['SGP'];
50
- break;
51
- default: adUrl = adUrls['US_EAST'];
52
- }
53
- } catch (err) {
54
- adUrl = adUrls['US_EAST'];
55
- }
56
- }
57
-
58
- return adUrl;
59
- }
60
-
61
13
  export const spec = {
62
14
  code: BIDDER_CODE,
63
15
  gvlid: GVLID,
@@ -78,8 +30,6 @@ export const spec = {
78
30
  let request = {
79
31
  'deviceWidth': winTop.screen.width,
80
32
  'deviceHeight': winTop.screen.height,
81
- 'language': (navigator && navigator.language) ? navigator.language : '',
82
- 'secure': 1,
83
33
  'host': location?.domain ?? '',
84
34
  'page': location?.page ?? '',
85
35
  'coppa': config.getConfig('coppa') === true ? 1 : 0,
@@ -87,11 +37,8 @@ export const spec = {
87
37
  'eeid': validBidRequests[0]?.userIdAsEids,
88
38
  'ifa': bidderRequest?.ortb2?.device?.ifa,
89
39
  };
90
- request.language.indexOf('-') != -1 && (request.language = request.language.split('-')[0])
40
+
91
41
  if (bidderRequest) {
92
- if (bidderRequest.uspConsent) {
93
- request.ccpa = bidderRequest.uspConsent;
94
- }
95
42
  if (bidderRequest.gdprConsent) {
96
43
  request.gdpr = bidderRequest.gdprConsent
97
44
  }
@@ -128,59 +75,8 @@ export const spec = {
128
75
  }
129
76
  },
130
77
 
131
- interpretResponse: (serverResponse) => {
132
- let response = [];
133
- serverResponse = serverResponse.body;
134
- for (let i = 0; i < serverResponse.length; i++) {
135
- let resItem = serverResponse[i];
136
- if (isBidResponseValid(resItem)) {
137
- response.push(resItem);
138
- }
139
- }
140
- return response;
141
- },
142
-
143
- getUserSyncs: (syncOptions, serverResponses = [], gdprConsent = {}, uspConsent = '', gppConsent = '') => {
144
- let syncs = [];
145
- let { gdprApplies, consentString = '' } = gdprConsent;
146
-
147
- if (syncOptions.iframeEnabled) {
148
- syncs.push({
149
- type: 'iframe',
150
- url: `${URL_SYNC}&gdpr=${gdprApplies ? 1 : 0}&gdpr_consent=${consentString}&type=iframe&us_privacy=${uspConsent}&gpp=${gppConsent}`
151
- });
152
- } else {
153
- syncs.push({
154
- type: 'image',
155
- url: `${URL_SYNC}&gdpr=${gdprApplies ? 1 : 0}&gdpr_consent=${consentString}&type=image&us_privacy=${uspConsent}&gpp=${gppConsent}`
156
- });
157
- }
158
-
159
- return syncs
160
- },
161
-
162
- onBidWon: function(bid) {
163
- if (bid.winUrl) {
164
- ajax(bid.winUrl, () => {}, JSON.stringify(bid));
165
- } else {
166
- if (bid?.postData && bid?.postData[0] && bid?.postData[0].params && bid?.postData[0].params[0].host == 'prebid') {
167
- ajax('https://et-nd43.itdsmr.com/?c=o&m=prebid&secret_key=prebid_js&winTest=1', () => {}, JSON.stringify(bid));
168
- }
169
- }
170
- },
171
-
172
- onTimeout: function(bid) {
173
- if (bid?.postData && bid?.postData[0] && bid?.postData[0].params && bid?.postData[0].params[0].host == 'prebid') {
174
- ajax('https://et-nd43.itdsmr.com/?c=o&m=prebid&secret_key=prebid_js&bidTimeout=1', () => {}, JSON.stringify(bid));
175
- }
176
- },
177
-
178
- onBidderError: function(bid) {
179
- if (bid?.postData && bid?.postData[0] && bid?.postData[0].params && bid?.postData[0].params[0].host == 'prebid') {
180
- ajax('https://et-nd43.itdsmr.com/?c=o&m=prebid&secret_key=prebid_js&bidderError=1', () => {}, JSON.stringify(bid));
181
- }
182
- },
183
-
78
+ interpretResponse,
79
+ getUserSyncs: getUserSyncs(URL_SYNC),
184
80
  };
185
81
 
186
82
  registerBidder(spec);
@@ -3,7 +3,6 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
3
3
  import {BANNER} from '../src/mediaTypes.js';
4
4
  import {deepAccess, isArray, isFn, isPlainObject, inIframe, getDNT, generateUUID} from '../src/utils.js';
5
5
  import {hasPurpose1Consent} from '../src/utils/gpdr.js';
6
- import {getGlobal} from '../src/prebidGlobal.js';
7
6
  import {getStorageManager} from '../src/storageManager.js';
8
7
 
9
8
  const BIDDER_CODE = 'snigel';
@@ -46,7 +45,7 @@ export const spec = {
46
45
  gdprConsent: gdprApplies === true ? hasFullGdprConsent(deepAccess(bidderRequest, 'gdprConsent')) : false,
47
46
  cur: getCurrencies(),
48
47
  test: getTestFlag(),
49
- version: getGlobal().version,
48
+ version: 'v' + '$prebid.version$',
50
49
  gpp: deepAccess(bidderRequest, 'gppConsent.gppString') || deepAccess(bidderRequest, 'ortb2.regs.gpp'),
51
50
  gpp_sid:
52
51
  deepAccess(bidderRequest, 'gppConsent.applicableSections') || deepAccess(bidderRequest, 'ortb2.regs.gpp_sid'),