prebid.js 7.52.0 → 7.53.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 (214) hide show
  1. package/dist/1plusXRtdProvider.js +1 -1
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.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/adkernelBidAdapter.js +1 -1
  8. package/dist/adqueryBidAdapter.js +1 -1
  9. package/dist/adrelevantisBidAdapter.js +1 -1
  10. package/dist/adtrgtmeBidAdapter.js +1 -1
  11. package/dist/adxcgBidAdapter.js +1 -1
  12. package/dist/adyoulikeBidAdapter.js +1 -1
  13. package/dist/airgridRtdProvider.js +1 -1
  14. package/dist/ajaBidAdapter.js +1 -1
  15. package/dist/amxBidAdapter.js +1 -1
  16. package/dist/amxIdSystem.js +1 -1
  17. package/dist/appierAnalyticsAdapter.js +1 -1
  18. package/dist/appnexusBidAdapter.js +1 -1
  19. package/dist/asoBidAdapter.js +1 -1
  20. package/dist/axonixBidAdapter.js +1 -1
  21. package/dist/beopBidAdapter.js +1 -1
  22. package/dist/bidglassBidAdapter.js +1 -1
  23. package/dist/big-richmediaBidAdapter.js +1 -1
  24. package/dist/bridgewellBidAdapter.js +1 -1
  25. package/dist/brightMountainMediaBidAdapter.js +1 -1
  26. package/dist/carodaBidAdapter.js +1 -1
  27. package/dist/chtnwBidAdapter.js +1 -1
  28. package/dist/conceptxBidAdapter.js +1 -0
  29. package/dist/concertBidAdapter.js +1 -1
  30. package/dist/connectadBidAdapter.js +1 -1
  31. package/dist/consumableBidAdapter.js +1 -1
  32. package/dist/conversantAnalyticsAdapter.js +1 -1
  33. package/dist/conversantBidAdapter.js +1 -1
  34. package/dist/craftBidAdapter.js +1 -1
  35. package/dist/criteoBidAdapter.js +1 -1
  36. package/dist/cwireBidAdapter.js +1 -1
  37. package/dist/dspxBidAdapter.js +1 -1
  38. package/dist/eplanningBidAdapter.js +1 -1
  39. package/dist/eskimiBidAdapter.js +1 -1
  40. package/dist/euidIdSystem.js +1 -0
  41. package/dist/feedadBidAdapter.js +1 -1
  42. package/dist/finativeBidAdapter.js +1 -1
  43. package/dist/freepassIdSystem.js +1 -0
  44. package/dist/freewheel-sspBidAdapter.js +1 -1
  45. package/dist/glimpseBidAdapter.js +1 -1
  46. package/dist/gmosspBidAdapter.js +1 -1
  47. package/dist/goldbachBidAdapter.js +1 -1
  48. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  49. package/dist/greenbidsRtdProvider.js +1 -1
  50. package/dist/gridBidAdapter.js +1 -1
  51. package/dist/gumgumBidAdapter.js +1 -1
  52. package/dist/h12mediaBidAdapter.js +1 -1
  53. package/dist/id5IdSystem.js +1 -1
  54. package/dist/improvedigitalBidAdapter.js +1 -1
  55. package/dist/inmarBidAdapter.js +1 -1
  56. package/dist/insticatorBidAdapter.js +1 -1
  57. package/dist/ixBidAdapter.js +1 -1
  58. package/dist/justpremiumBidAdapter.js +1 -1
  59. package/dist/kargoBidAdapter.js +1 -1
  60. package/dist/konduitAnalyticsAdapter.js +1 -1
  61. package/dist/kueezBidAdapter.js +1 -1
  62. package/dist/kueezRtbBidAdapter.js +1 -1
  63. package/dist/kulturemediaBidAdapter.js +1 -1
  64. package/dist/lassoBidAdapter.js +1 -1
  65. package/dist/lifestreetBidAdapter.js +1 -1
  66. package/dist/limelightDigitalBidAdapter.js +1 -1
  67. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  68. package/dist/logicadBidAdapter.js +1 -1
  69. package/dist/loglyliftBidAdapter.js +1 -1
  70. package/dist/magniteAnalyticsAdapter.js +1 -1
  71. package/dist/malltvAnalyticsAdapter.js +1 -1
  72. package/dist/marsmediaBidAdapter.js +1 -1
  73. package/dist/mediafuseBidAdapter.js +1 -1
  74. package/dist/mediasquareBidAdapter.js +1 -1
  75. package/dist/mgidBidAdapter.js +1 -1
  76. package/dist/minutemediaBidAdapter.js +1 -1
  77. package/dist/minutemediaplusBidAdapter.js +1 -1
  78. package/dist/nexx360BidAdapter.js +1 -1
  79. package/dist/not-for-prod/prebid.js +146 -142
  80. package/dist/oguryBidAdapter.js +1 -1
  81. package/dist/onetagBidAdapter.js +1 -1
  82. package/dist/ooloAnalyticsAdapter.js +1 -1
  83. package/dist/optidigitalBidAdapter.js +1 -1
  84. package/dist/outbrainBidAdapter.js +1 -1
  85. package/dist/pairIdSystem.js +1 -1
  86. package/dist/parrableIdSystem.js +1 -1
  87. package/dist/pixfutureBidAdapter.js +1 -1
  88. package/dist/prebid-core.js +1 -1
  89. package/dist/proxistoreBidAdapter.js +1 -1
  90. package/dist/publinkIdSystem.js +1 -1
  91. package/dist/pubmaticBidAdapter.js +1 -1
  92. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  93. package/dist/pxyzBidAdapter.js +1 -1
  94. package/dist/quantcastBidAdapter.js +1 -1
  95. package/dist/readpeakBidAdapter.js +1 -1
  96. package/dist/relaidoBidAdapter.js +1 -1
  97. package/dist/retailspotBidAdapter.js +1 -1
  98. package/dist/rhythmoneBidAdapter.js +1 -1
  99. package/dist/richaudienceBidAdapter.js +1 -1
  100. package/dist/riseBidAdapter.js +1 -1
  101. package/dist/rubiconAnalyticsAdapter.js +1 -1
  102. package/dist/rubiconBidAdapter.js +1 -1
  103. package/dist/schain.js +1 -1
  104. package/dist/seedingAllianceBidAdapter.js +1 -1
  105. package/dist/seedtagBidAdapter.js +1 -1
  106. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  107. package/dist/sharethroughBidAdapter.js +1 -1
  108. package/dist/shinezBidAdapter.js +1 -1
  109. package/dist/sirdataRtdProvider.js +1 -1
  110. package/dist/smaatoBidAdapter.js +1 -1
  111. package/dist/smartadserverBidAdapter.js +1 -1
  112. package/dist/smartxBidAdapter.js +1 -1
  113. package/dist/smilewantedBidAdapter.js +1 -1
  114. package/dist/sonobiBidAdapter.js +1 -1
  115. package/dist/sovrnAnalyticsAdapter.js +1 -1
  116. package/dist/sovrnBidAdapter.js +1 -1
  117. package/dist/sspBCBidAdapter.js +1 -1
  118. package/dist/stroeerCoreBidAdapter.js +1 -1
  119. package/dist/stvBidAdapter.js +1 -1
  120. package/dist/sublimeBidAdapter.js +1 -1
  121. package/dist/synacormediaBidAdapter.js +1 -1
  122. package/dist/targetVideoBidAdapter.js +1 -1
  123. package/dist/teadsBidAdapter.js +1 -1
  124. package/dist/trionBidAdapter.js +1 -1
  125. package/dist/tripleliftBidAdapter.js +1 -1
  126. package/dist/ttdBidAdapter.js +1 -1
  127. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  128. package/dist/uid2IdSystem.js +1 -1
  129. package/dist/uid2IdSystem_shared.js +1 -0
  130. package/dist/underdogmediaBidAdapter.js +1 -1
  131. package/dist/undertoneBidAdapter.js +1 -1
  132. package/dist/userId.js +1 -1
  133. package/dist/vidazooBidAdapter.js +1 -1
  134. package/dist/videobyteBidAdapter.js +1 -1
  135. package/dist/viouslyBidAdapter.js +1 -1
  136. package/dist/visxBidAdapter.js +1 -1
  137. package/dist/vuukleBidAdapter.js +1 -1
  138. package/dist/weboramaRtdProvider.js +1 -1
  139. package/dist/widespaceBidAdapter.js +1 -1
  140. package/dist/winrBidAdapter.js +1 -1
  141. package/dist/yahoosspBidAdapter.js +1 -1
  142. package/dist/yieldlabBidAdapter.js +1 -1
  143. package/dist/yieldmoBidAdapter.js +1 -1
  144. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  145. package/dist/zeta_global_sspBidAdapter.js +1 -1
  146. package/integrationExamples/gpt/userId_example.html +20 -6
  147. package/modules/.submodules.json +3 -1
  148. package/modules/1plusXRtdProvider.js +31 -60
  149. package/modules/adagioBidAdapter.js +86 -24
  150. package/modules/adkernelBidAdapter.js +2 -2
  151. package/modules/airgridRtdProvider.js +11 -12
  152. package/modules/asoBidAdapter.js +2 -1
  153. package/modules/beopBidAdapter.js +6 -0
  154. package/modules/conceptxBidAdapter.js +70 -0
  155. package/modules/conceptxBidAdapter.md +36 -0
  156. package/modules/criteoBidAdapter.js +9 -2
  157. package/modules/eskimiBidAdapter.js +171 -41
  158. package/modules/eskimiBidAdapter.md +35 -16
  159. package/modules/euidIdSystem.js +121 -0
  160. package/modules/euidIdSystem.md +131 -0
  161. package/modules/freepassIdSystem.js +61 -0
  162. package/modules/freepassIdSystem.md +47 -0
  163. package/modules/greenbidsAnalyticsAdapter.js +1 -1
  164. package/modules/id5IdSystem.js +3 -5
  165. package/modules/ixBidAdapter.js +12 -1
  166. package/modules/limelightDigitalBidAdapter.js +1 -1
  167. package/modules/logicadBidAdapter.js +14 -1
  168. package/modules/mediasquareBidAdapter.js +13 -5
  169. package/modules/nexx360BidAdapter.js +1 -0
  170. package/modules/pairIdSystem.js +10 -5
  171. package/modules/proxistoreBidAdapter.js +11 -14
  172. package/modules/richaudienceBidAdapter.js +10 -1
  173. package/modules/riseBidAdapter.js +1 -1
  174. package/modules/schain.js +2 -2
  175. package/modules/sirdataRtdProvider.js +73 -146
  176. package/modules/sovrnBidAdapter.js +4 -1
  177. package/modules/stroeerCoreBidAdapter.js +55 -6
  178. package/modules/uid2IdSystem.js +27 -210
  179. package/modules/uid2IdSystem.md +104 -23
  180. package/modules/uid2IdSystem_shared.js +232 -0
  181. package/modules/userId/eids.js +8 -0
  182. package/modules/userId/userId.md +2 -1
  183. package/modules/viouslyBidAdapter.js +2 -2
  184. package/modules/weboramaRtdProvider.js +25 -95
  185. package/modules/weboramaRtdProvider.md +4 -4
  186. package/modules/yieldlabBidAdapter.js +23 -14
  187. package/modules/zeta_global_sspBidAdapter.js +27 -22
  188. package/package.json +1 -1
  189. package/src/adloader.js +1 -0
  190. package/test/spec/modules/1plusXRtdProvider_spec.js +98 -149
  191. package/test/spec/modules/adagioBidAdapter_spec.js +46 -17
  192. package/test/spec/modules/airgridRtdProvider_spec.js +2 -0
  193. package/test/spec/modules/beopBidAdapter_spec.js +24 -0
  194. package/test/spec/modules/conceptxBidAdapter_spec.js +136 -0
  195. package/test/spec/modules/criteoBidAdapter_spec.js +1 -1
  196. package/test/spec/modules/eids_spec.js +15 -0
  197. package/test/spec/modules/eskimiBidAdapter_spec.js +264 -112
  198. package/test/spec/modules/euidIdSystem_spec.js +130 -0
  199. package/test/spec/modules/freepassIdSystem_spec.js +186 -0
  200. package/test/spec/modules/id5IdSystem_spec.js +10 -3
  201. package/test/spec/modules/ixBidAdapter_spec.js +30 -0
  202. package/test/spec/modules/logicadBidAdapter_spec.js +122 -2
  203. package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -0
  204. package/test/spec/modules/richaudienceBidAdapter_spec.js +44 -0
  205. package/test/spec/modules/schain_spec.js +9 -0
  206. package/test/spec/modules/sirdataRtdProvider_spec.js +110 -17
  207. package/test/spec/modules/sovrnBidAdapter_spec.js +13 -0
  208. package/test/spec/modules/stroeerCoreBidAdapter_spec.js +151 -6
  209. package/test/spec/modules/uid2IdSystem_helpers.js +70 -0
  210. package/test/spec/modules/uid2IdSystem_spec.js +131 -86
  211. package/test/spec/modules/userId_spec.js +16 -12
  212. package/test/spec/modules/weboramaRtdProvider_spec.js +331 -205
  213. package/test/spec/modules/yieldlabBidAdapter_spec.js +42 -2
  214. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +200 -4
@@ -134,44 +134,24 @@ export function getSegmentsAndCategories(reqBidsConfigObj, onDone, moduleConfig,
134
134
  });
135
135
  }
136
136
 
137
- export function setGlobalOrtb2Sda(ortb2Fragments, data, segtaxid, cattaxid) {
137
+ export function pushToOrtb2(ortb2Fragments, bidder, data, segtaxid, cattaxid) {
138
138
  try {
139
139
  if (!isEmpty(data.segments)) {
140
- applyGlobalOrtb2Sda(ortb2Fragments, 'user', data.segments, segtaxid);
140
+ if (segtaxid) {
141
+ setOrtb2Sda(ortb2Fragments, bidder, 'user', data.segments, segtaxid);
142
+ } else {
143
+ setOrtb2(ortb2Fragments, bidder, 'user.ext.data', {sd_rtd: {segments: data.segments}});
144
+ }
141
145
  }
142
146
  if (!isEmpty(data.categories)) {
143
- applyGlobalOrtb2Sda(ortb2Fragments, 'site', data.categories, cattaxid);
144
- }
145
- } catch (e) {
146
- logError(e)
147
- }
148
- return true;
149
- }
150
-
151
- export function applyGlobalOrtb2Sda(ortb2Fragments, type, segments, segtaxValue) {
152
- try {
153
- let ortb2Data = [{
154
- name: ORTB2_NAME,
155
- segment: segments.map((segmentId) => ({ id: segmentId })),
156
- }];
157
- if (segtaxValue) {
158
- ortb2Data[0].ext = { segtax: segtaxValue };
159
- }
160
- let ortb2Conf = (type == 'site' ? {site: {content: {data: ortb2Data}}} : {user: {data: ortb2Data}});
161
- mergeDeep(ortb2Fragments, ortb2Conf);
162
- } catch (e) {
163
- logError(e)
164
- }
165
- return true;
166
- }
167
-
168
- export function setBidderOrtb2Sda(ortb2Fragments, bidder, data, segtaxid, cattaxid) {
169
- try {
170
- if (!isEmpty(data.segments)) {
171
- applyBidderOrtb2Sda(ortb2Fragments, bidder, 'user', data.segments, segtaxid);
147
+ if (cattaxid) {
148
+ setOrtb2Sda(ortb2Fragments, bidder, 'site', data.categories, cattaxid);
149
+ } else {
150
+ setOrtb2(ortb2Fragments, bidder, 'site.ext.data', {sd_rtd: {categories: data.categories}});
151
+ }
172
152
  }
173
- if (!isEmpty(data.categories)) {
174
- applyBidderOrtb2Sda(ortb2Fragments, bidder, 'site', data.categories, cattaxid);
153
+ if (!isEmpty(data.categories_score) && !cattaxid) {
154
+ setOrtb2(ortb2Fragments, bidder, 'site.ext.data', {sd_rtd: {categories_score: data.categories_score}});
175
155
  }
176
156
  } catch (e) {
177
157
  logError(e)
@@ -179,7 +159,7 @@ export function setBidderOrtb2Sda(ortb2Fragments, bidder, data, segtaxid, cattax
179
159
  return true;
180
160
  }
181
161
 
182
- export function applyBidderOrtb2Sda(ortb2Fragments, bidder, type, segments, segtaxValue) {
162
+ export function setOrtb2Sda(ortb2Fragments, bidder, type, segments, segtaxValue) {
183
163
  try {
184
164
  let ortb2Data = [{
185
165
  name: ORTB2_NAME,
@@ -189,19 +169,25 @@ export function applyBidderOrtb2Sda(ortb2Fragments, bidder, type, segments, segt
189
169
  ortb2Data[0].ext = { segtax: segtaxValue };
190
170
  }
191
171
  let ortb2Conf = (type == 'site' ? {site: {content: {data: ortb2Data}}} : {user: {data: ortb2Data}});
192
- mergeDeep(ortb2Fragments, {[bidder]: ortb2Conf});
172
+ if (bidder) {
173
+ ortb2Conf = {[bidder]: ortb2Conf};
174
+ }
175
+ mergeDeep(ortb2Fragments, ortb2Conf);
193
176
  } catch (e) {
194
177
  logError(e)
195
178
  }
196
179
  return true;
197
180
  }
198
181
 
199
- export function setBidderOrtb2(bidderOrtb2Fragments, bidder, path, segments) {
182
+ export function setOrtb2(ortb2Fragments, bidder, path, segments) {
200
183
  try {
201
- if (isEmpty(segments)) { return; }
184
+ if (isEmpty(segments)) { return false; }
202
185
  let ortb2Conf = {};
203
186
  deepSetValue(ortb2Conf, path, segments || {});
204
- mergeDeep(bidderOrtb2Fragments, {[bidder]: ortb2Conf});
187
+ if (bidder) {
188
+ ortb2Conf = {[bidder]: ortb2Conf};
189
+ }
190
+ mergeDeep(ortb2Fragments, ortb2Conf);
205
191
  } catch (e) {
206
192
  logError(e)
207
193
  }
@@ -221,15 +207,22 @@ export function loadCustomFunction(todo, adUnit, list, data, bid) {
221
207
  }
222
208
 
223
209
  export function getSegAndCatsArray(data, minScore, pid) {
224
- let sirdataData = {'segments': [], 'categories': []};
210
+ let sirdataData = {'segments': [], 'categories': [], 'categories_score': {}};
225
211
  minScore = minScore && typeof minScore == 'number' ? minScore : 30;
212
+ let cattaxid = data.cattaxid || null;
213
+ let segtaxid = data.segtaxid || null;
226
214
  try {
227
215
  if (data && data.contextual_categories) {
228
216
  for (let catId in data.contextual_categories) {
229
217
  if (data.contextual_categories.hasOwnProperty(catId) && data.contextual_categories[catId]) {
230
218
  let value = data.contextual_categories[catId];
231
219
  if (value >= minScore && sirdataData.categories.indexOf(catId) === -1) {
232
- sirdataData.categories.push((pid ? pid.toString() + 'cc' : '') + catId.toString());
220
+ if (pid && cattaxid) {
221
+ sirdataData.categories.push(pid.toString() + 'cc' + catId.toString());
222
+ } else {
223
+ sirdataData.categories.push(catId.toString());
224
+ sirdataData.categories_score[catId] = value;
225
+ }
233
226
  }
234
227
  }
235
228
  }
@@ -241,9 +234,16 @@ export function getSegAndCatsArray(data, minScore, pid) {
241
234
  if (data && data.segments) {
242
235
  for (let segId in data.segments) {
243
236
  if (data.segments.hasOwnProperty(segId) && data.segments[segId]) {
244
- sirdataData.segments.push((pid ? pid.toString() + 'us' : '') + data.segments[segId].toString());
237
+ let id = data.segments[segId].toString();
245
238
  if (pid && CONTEXT_ONLY) {
246
- sirdataData.categories.push(pid.toString() + 'uc' + data.segments[segId].toString());
239
+ if (segtaxid) {
240
+ sirdataData.categories.push(pid.toString() + 'uc' + id);
241
+ } else {
242
+ sirdataData.categories.push(id);
243
+ sirdataData.categories_score[id] = 100;
244
+ }
245
+ } else {
246
+ sirdataData.segments.push((pid && segtaxid) ? pid.toString() + 'us' + id : id);
247
247
  }
248
248
  }
249
249
  }
@@ -254,12 +254,12 @@ export function getSegAndCatsArray(data, minScore, pid) {
254
254
  return sirdataData;
255
255
  }
256
256
 
257
- export function applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit) {
257
+ export function applySdaGetSpecificData(data, sirdataData, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit) {
258
258
  // only share SDA data if whitelisted
259
259
  if (!biddersParamsExist || indexFound) {
260
260
  // SDA Publisher
261
261
  let sirdataDataForSDA = getSegAndCatsArray(data, minScore, moduleConfig.params.partnerId);
262
- setBidderOrtb2Sda(reqBids.ortb2Fragments?.bidder, bid.bidder, sirdataDataForSDA, data.segtaxid, data.cattaxid);
262
+ pushToOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, sirdataDataForSDA, data.segtaxid, data.cattaxid);
263
263
  }
264
264
 
265
265
  // always share SDA for curation
@@ -268,30 +268,31 @@ export function applySdaGetSpecificData(data, sirdataList, biddersParamsExist, m
268
268
  // seller defined audience & bidder specific data
269
269
  if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
270
270
  // Get Bidder Specific Data
271
- let curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore, null);
272
- sirdataList = sirdataList.concat(curationData.segments).concat(curationData.categories);
273
-
274
- // SDA Partners
275
- let curationDataForSDA = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore, curationId);
276
- setBidderOrtb2Sda(reqBids.ortb2Fragments?.bidder, bid.bidder, curationDataForSDA, data.shared_taxonomy[curationId].segtaxid, data.shared_taxonomy[curationId].cattaxid);
271
+ let curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore, curationId);
272
+ pushToOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, curationData, data.shared_taxonomy[curationId].segtaxid, data.shared_taxonomy[curationId].cattaxid);
277
273
  }
278
274
  }
279
275
 
280
276
  // Apply custom function or return Bidder Specific Data if publisher is ok
281
- if (sirdataList && sirdataList.length > 0 && (!biddersParamsExist || indexFound)) {
277
+ if (!biddersParamsExist || indexFound) {
282
278
  if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
283
- return loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataList, data, bid);
279
+ return loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataData, data, bid);
284
280
  } else {
285
- return sirdataList;
281
+ return sirdataData;
286
282
  }
287
283
  }
288
284
  }
289
285
 
290
- export function applySdaAndDefaultSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit) {
291
- let specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
292
- if (specificData && specificData.length > 0) {
293
- setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, 'user.ext.data', {sd_rtd: specificData});
286
+ export function applySdaAndDefaultSpecificData(data, sirdataData, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit) {
287
+ sirdataData = applySdaGetSpecificData(data, sirdataData, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
288
+ /*
289
+ if (sirdataData.segments && sirdataData.segments.length > 0) {
290
+ setOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, 'user.ext.data', {sd_rtd: sirdataData.segments});
294
291
  }
292
+ if (sirdataData.categories && sirdataData.categories.length > 0) {
293
+ setOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, 'site.ext.data', {sd_rtd: sirdataData.categories});
294
+ }
295
+ */
295
296
  }
296
297
 
297
298
  export function addSegmentData(reqBids, data, moduleConfig, onDone) {
@@ -301,17 +302,15 @@ export function addSegmentData(reqBids, data, moduleConfig, onDone) {
301
302
  const globalMinScore = moduleConfig.params.hasOwnProperty('contextualMinRelevancyScore') ? moduleConfig.params.contextualMinRelevancyScore : 30;
302
303
  var sirdataData = getSegAndCatsArray(data, globalMinScore, null);
303
304
 
304
- const sirdataList = sirdataData.segments.concat(sirdataData.categories);
305
-
306
305
  const biddersParamsExist = (!!(moduleConfig.params && moduleConfig.params.bidders));
307
306
 
308
307
  // Global ortb2 SDA
309
308
  if (data.global_taxonomy && !isEmpty(data.global_taxonomy)) {
310
- let globalData = {'segments': [], 'categories': []};
309
+ let globalData = {'segments': [], 'categories': [], 'categories_score': []};
311
310
  for (let i in data.global_taxonomy) {
312
311
  if (!isEmpty(data.global_taxonomy[i])) {
313
312
  globalData = getSegAndCatsArray(data.global_taxonomy[i], globalMinScore, null);
314
- setGlobalOrtb2Sda(reqBids.ortb2Fragments?.global, globalData, data.global_taxonomy[i].segtaxid, data.global_taxonomy[i].cattaxid);
313
+ pushToOrtb2(reqBids.ortb2Fragments?.global, null, globalData, data.global_taxonomy[i].segtaxid, data.global_taxonomy[i].cattaxid);
315
314
  }
316
315
  }
317
316
  }
@@ -320,15 +319,17 @@ export function addSegmentData(reqBids, data, moduleConfig, onDone) {
320
319
  if (typeof window.googletag !== 'undefined' && (moduleConfig.params.setGptKeyValues || !moduleConfig.params.hasOwnProperty('setGptKeyValues'))) {
321
320
  try {
322
321
  let gptCurationId = (moduleConfig.params.gptCurationId ? moduleConfig.params.gptCurationId : (partnerIds['sdRtdForGpt'] ? partnerIds['sdRtdForGpt'] : null));
323
- let sirdataMergedList = sirdataList;
322
+ let sirdataMergedList = sirdataData.segments.concat(sirdataData.categories);
324
323
  if (gptCurationId && data.shared_taxonomy && data.shared_taxonomy[gptCurationId]) {
325
324
  let gamCurationData = getSegAndCatsArray(data.shared_taxonomy[gptCurationId], globalMinScore, null);
326
325
  sirdataMergedList = sirdataMergedList.concat(gamCurationData.segments).concat(gamCurationData.categories);
327
326
  }
328
- window.googletag.pubads().getSlots().forEach(function (n) {
329
- if (typeof n.setTargeting !== 'undefined' && sirdataMergedList && sirdataMergedList.length > 0) {
330
- n.setTargeting('sd_rtd', sirdataMergedList);
331
- }
327
+ window.googletag.cmd.push(function() {
328
+ window.googletag.pubads().getSlots().forEach(function (n) {
329
+ if (typeof n.setTargeting !== 'undefined' && sirdataMergedList && sirdataMergedList.length > 0) {
330
+ n.setTargeting('sd_rtd', sirdataMergedList);
331
+ }
332
+ });
332
333
  });
333
334
  } catch (e) {
334
335
  logError(e);
@@ -340,10 +341,6 @@ export function addSegmentData(reqBids, data, moduleConfig, onDone) {
340
341
  var indexFound = false;
341
342
 
342
343
  adUnits.forEach(adUnit => {
343
- if (!biddersParamsExist && !deepAccess(adUnit, 'ortb2Imp.ext.data.sd_rtd')) {
344
- deepSetValue(adUnit, 'ortb2Imp.ext.data.sd_rtd', sirdataList);
345
- }
346
-
347
344
  adUnit.hasOwnProperty('bids') && adUnit.bids.forEach(bid => {
348
345
  bidderIndex = (moduleConfig.params.hasOwnProperty('bidders') ? findIndex(moduleConfig.params.bidders, function (i) {
349
346
  return i.bidder === bid.bidder;
@@ -351,7 +348,6 @@ export function addSegmentData(reqBids, data, moduleConfig, onDone) {
351
348
  indexFound = (!!(typeof bidderIndex == 'number' && bidderIndex >= 0));
352
349
  try {
353
350
  let minScore = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('contextualMinRelevancyScore') ? moduleConfig.params.bidders[bidderIndex].contextualMinRelevancyScore : globalMinScore);
354
- let specificData = null;
355
351
 
356
352
  switch (bid.bidder) {
357
353
  case 'appnexus':
@@ -370,87 +366,18 @@ export function addSegmentData(reqBids, data, moduleConfig, onDone) {
370
366
  case 'msq_classic':
371
367
  case 'msq_max':
372
368
  case '366_apx':
373
- specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
374
- if (specificData && specificData.length > 0) {
375
- deepSetValue(bid, 'params.keywords.sd_rtd', specificData);
369
+ sirdataData = applySdaGetSpecificData(data, sirdataData, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
370
+ if (sirdataData.segments && sirdataData.segments.length > 0) {
371
+ setOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, 'user.keywords', 'sd_rtd=' + sirdataData.segments.join(',sd_rtd='));
376
372
  }
377
- break;
378
-
379
- case 'smartadserver':
380
- case 'smart':
381
- specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
382
- if (specificData && specificData.length > 0) {
383
- var target = [];
384
- if (bid.hasOwnProperty('params') && bid.params.hasOwnProperty('target')) {
385
- target.push(bid.params.target);
386
- }
387
- specificData.forEach(function (entry) {
388
- if (target.indexOf('sd_rtd=' + entry) === -1) {
389
- target.push('sd_rtd=' + entry);
390
- }
391
- });
392
- deepSetValue(bid, 'params.target', target.join(';'));
373
+ if (sirdataData.categories && sirdataData.categories.length > 0) {
374
+ setOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, 'site.content.keywords', 'sd_rtd=' + sirdataData.categories.join(',sd_rtd='));
393
375
  }
394
376
  break;
395
377
 
396
- case 'ix':
397
- specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
398
- let ixConfig = config.getConfig('ix.firstPartyData.sd_rtd');
399
- if (!ixConfig && specificData && specificData.length > 0) {
400
- let cappIxCategories = [];
401
- let ixLength = 0;
402
- let ixLimit = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('sizeLimit') ? moduleConfig.params.bidders[bidderIndex].sizeLimit : 1000);
403
- // Push ids For publisher use and for curation if exists but limit size because the bidder uses GET parameters
404
- specificData.forEach(function (entry) {
405
- if (ixLength < ixLimit) {
406
- cappIxCategories.push(entry);
407
- ixLength += entry.toString().length;
408
- }
409
- });
410
- config.setConfig({ix: {firstPartyData: {sd_rtd: cappIxCategories}}});
411
- }
412
- break;
413
-
414
- case 'proxistore':
415
- specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
416
- if (specificData && specificData.length > 0) {
417
- let psCurationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : (partnerIds[bid.bidder] ? partnerIds[bid.bidder] : null));
418
- if (!data.shared_taxonomy || !data.shared_taxonomy[psCurationId]) {
419
- data.shared_taxonomy[psCurationId] = {segments: [], contextual_categories: {}, segtaxid: null, cattaxid: null};
420
- }
421
- let psCurationData = getSegAndCatsArray(data.shared_taxonomy[psCurationId], minScore, null);
422
- setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, 'user.ext.data', {
423
- segments: sirdataData.segments.concat(psCurationData.segments),
424
- contextual_categories: {...data.contextual_categories, ...data.shared_taxonomy[psCurationId].contextual_categories}
425
- });
426
- }
427
- break;
428
-
429
- case 'rubicon':
430
- case 'criteo':
431
- case 'triplelift':
432
- case 'smaato':
433
- case 'yahoossp':
434
- case 'openx':
435
- case 'pubmatic':
436
- case 'smilewanted':
437
- case 'taboola':
438
- case 'ttd':
439
- case 'zeta_global':
440
- case 'zeta_global_ssp':
441
- case 'teads':
442
- case 'conversant':
443
- case 'improvedigital':
444
- case 'invibes':
445
- case 'sublime':
446
- case 'rtbhouse':
447
- case 'mediasquare':
448
- applySdaAndDefaultSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
449
- break;
450
-
451
378
  default:
452
379
  if (!biddersParamsExist || (indexFound && (!moduleConfig.params.bidders[bidderIndex].hasOwnProperty('adUnitCodes') || moduleConfig.params.bidders[bidderIndex].adUnitCodes.indexOf(adUnit.code) !== -1))) {
453
- applySdaAndDefaultSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
380
+ applySdaAndDefaultSpecificData(data, sirdataData, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
454
381
  }
455
382
  }
456
383
  } catch (e) {
@@ -151,11 +151,14 @@ export const spec = {
151
151
  site.page = bidderRequest.refererInfo.page
152
152
  site.domain = bidderRequest.refererInfo.domain
153
153
 
154
+ const tmax = deepAccess(bidderRequest, 'timeout');
155
+
154
156
  const sovrnBidReq = {
155
157
  id: getUniqueIdentifierStr(),
156
158
  imp: sovrnImps,
157
159
  site: site,
158
- user: fpd.user || {}
160
+ user: fpd.user || {},
161
+ tmax: tmax
159
162
  }
160
163
 
161
164
  if (schain) {
@@ -1,6 +1,7 @@
1
1
  import {buildUrl, deepAccess, getWindowSelf, getWindowTop, isEmpty, isStr, logWarn} from '../src/utils.js';
2
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
3
3
  import {BANNER, VIDEO} from '../src/mediaTypes.js';
4
+ import {find} from '../src/polyfill.js';
4
5
 
5
6
  const GVL_ID = 136;
6
7
  const BIDDER_CODE = 'stroeerCore';
@@ -211,12 +212,16 @@ const mapToPayloadBaseBid = (bidRequest) => ({
211
212
  viz: elementInView(bidRequest.adUnitCode),
212
213
  });
213
214
 
214
- const mapToPayloadBannerBid = (bidRequest) => ({
215
- ban: {
216
- siz: deepAccess(bidRequest, 'mediaTypes.banner.sizes') || [],
217
- },
218
- ...mapToPayloadBaseBid(bidRequest)
219
- });
215
+ const mapToPayloadBannerBid = (bidRequest) => {
216
+ const sizes = deepAccess(bidRequest, 'mediaTypes.banner.sizes') || [];
217
+ return ({
218
+ ban: {
219
+ siz: sizes,
220
+ fp: createFloorPriceObject(BANNER, sizes, bidRequest)
221
+ },
222
+ ...mapToPayloadBaseBid(bidRequest)
223
+ });
224
+ };
220
225
 
221
226
  const mapToPayloadVideoBid = (bidRequest) => {
222
227
  const video = deepAccess(bidRequest, 'mediaTypes.video') || {};
@@ -225,9 +230,53 @@ const mapToPayloadVideoBid = (bidRequest) => {
225
230
  ctx: video.context,
226
231
  siz: video.playerSize,
227
232
  mim: video.mimes,
233
+ fp: createFloorPriceObject(VIDEO, [video.playerSize], bidRequest),
228
234
  },
229
235
  ...mapToPayloadBaseBid(bidRequest)
230
236
  };
231
237
  };
232
238
 
239
+ const createFloorPriceObject = (mediaType, sizes, bidRequest) => {
240
+ if (!bidRequest.getFloor) {
241
+ return undefined;
242
+ }
243
+
244
+ const defaultFloor = bidRequest.getFloor({
245
+ currency: 'EUR',
246
+ mediaType: mediaType,
247
+ size: '*'
248
+ });
249
+
250
+ const sizeFloors = sizes.map(size => {
251
+ const floor = bidRequest.getFloor({
252
+ currency: 'EUR',
253
+ mediaType: mediaType,
254
+ size: [size[0], size[1]]
255
+ });
256
+ return {...floor, size};
257
+ });
258
+
259
+ const floorWithCurrency = find([defaultFloor].concat(sizeFloors), floor => floor.currency);
260
+
261
+ if (!floorWithCurrency) {
262
+ return undefined;
263
+ }
264
+
265
+ const currency = floorWithCurrency.currency;
266
+ const defaultFloorPrice = defaultFloor.currency === currency ? defaultFloor.floor : undefined;
267
+
268
+ return {
269
+ def: defaultFloorPrice,
270
+ cur: currency,
271
+ siz: sizeFloors
272
+ .filter(sizeFloor => sizeFloor.currency === currency)
273
+ .filter(sizeFloor => sizeFloor.floor !== defaultFloorPrice)
274
+ .map(sizeFloor => ({
275
+ w: sizeFloor.size[0],
276
+ h: sizeFloor.size[1],
277
+ p: sizeFloor.floor
278
+ }))
279
+ };
280
+ }
281
+
233
282
  registerBidder(spec);