prebid.js 8.40.0 → 8.41.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 (199) 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/adbookpspBidAdapter.js +1 -1
  8. package/dist/adgenerationBidAdapter.js +1 -1
  9. package/dist/adkernelBidAdapter.js +1 -1
  10. package/dist/adqueryBidAdapter.js +1 -1
  11. package/dist/adrelevantisBidAdapter.js +1 -1
  12. package/dist/adstirBidAdapter.js +1 -1
  13. package/dist/adtrgtmeBidAdapter.js +1 -1
  14. package/dist/adxcgBidAdapter.js +1 -1
  15. package/dist/adyoulikeBidAdapter.js +1 -1
  16. package/dist/agmaAnalyticsAdapter.js +1 -1
  17. package/dist/ajaBidAdapter.js +1 -1
  18. package/dist/amxBidAdapter.js +1 -1
  19. package/dist/amxIdSystem.js +1 -1
  20. package/dist/appierAnalyticsAdapter.js +1 -1
  21. package/dist/appnexusBidAdapter.js +1 -1
  22. package/dist/asoBidAdapter.js +1 -1
  23. package/dist/automatadAnalyticsAdapter.js +1 -1
  24. package/dist/axonixBidAdapter.js +1 -1
  25. package/dist/bidglassBidAdapter.js +1 -1
  26. package/dist/big-richmediaBidAdapter.js +1 -1
  27. package/dist/bridBidAdapter.js +1 -1
  28. package/dist/bridgewellBidAdapter.js +1 -1
  29. package/dist/brightMountainMediaBidAdapter.js +1 -1
  30. package/dist/carodaBidAdapter.js +1 -1
  31. package/dist/chtnwBidAdapter.js +1 -1
  32. package/dist/concertBidAdapter.js +1 -1
  33. package/dist/connectadBidAdapter.js +1 -1
  34. package/dist/consumableBidAdapter.js +1 -1
  35. package/dist/conversantAnalyticsAdapter.js +1 -1
  36. package/dist/conversantBidAdapter.js +1 -1
  37. package/dist/craftBidAdapter.js +1 -1
  38. package/dist/criteoBidAdapter.js +1 -1
  39. package/dist/cwireBidAdapter.js +1 -1
  40. package/dist/discoveryBidAdapter.js +1 -1
  41. package/dist/dspxBidAdapter.js +1 -1
  42. package/dist/dxkultureBidAdapter.js +1 -1
  43. package/dist/eplanningBidAdapter.js +1 -1
  44. package/dist/euidIdSystem.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/gmosspBidAdapter.js +1 -1
  49. package/dist/goldbachBidAdapter.js +1 -1
  50. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  51. package/dist/greenbidsRtdProvider.js +1 -1
  52. package/dist/gridBidAdapter.js +1 -1
  53. package/dist/gumgumBidAdapter.js +1 -1
  54. package/dist/h12mediaBidAdapter.js +1 -1
  55. package/dist/hypelabBidAdapter.js +1 -1
  56. package/dist/id5IdSystem.js +1 -1
  57. package/dist/illuminBidAdapter.js +1 -1
  58. package/dist/imdsBidAdapter.js +1 -1
  59. package/dist/improvedigitalBidAdapter.js +1 -1
  60. package/dist/insticatorBidAdapter.js +1 -1
  61. package/dist/ixBidAdapter.js +1 -1
  62. package/dist/jixieBidAdapter.js +1 -1
  63. package/dist/justpremiumBidAdapter.js +1 -1
  64. package/dist/kargoBidAdapter.js +1 -1
  65. package/dist/kimberliteBidAdapter.js +1 -1
  66. package/dist/konduitAnalyticsAdapter.js +1 -1
  67. package/dist/kueezBidAdapter.js +1 -1
  68. package/dist/kueezRtbBidAdapter.js +1 -1
  69. package/dist/lassoBidAdapter.js +1 -1
  70. package/dist/lifestreetBidAdapter.js +1 -1
  71. package/dist/liveIntentIdSystem.js +1 -1
  72. package/dist/logicadBidAdapter.js +1 -1
  73. package/dist/loglyliftBidAdapter.js +1 -1
  74. package/dist/luceadBidAdapter.js +1 -1
  75. package/dist/magniteAnalyticsAdapter.js +1 -1
  76. package/dist/malltvAnalyticsAdapter.js +1 -1
  77. package/dist/marsmediaBidAdapter.js +1 -1
  78. package/dist/mediafuseBidAdapter.js +1 -1
  79. package/dist/mediasquareBidAdapter.js +1 -1
  80. package/dist/mgidBidAdapter.js +1 -1
  81. package/dist/minutemediaBidAdapter.js +1 -1
  82. package/dist/minutemediaplusBidAdapter.js +1 -1
  83. package/dist/missenaBidAdapter.js +1 -1
  84. package/dist/nextMillenniumBidAdapter.js +1 -1
  85. package/dist/nexx360BidAdapter.js +1 -1
  86. package/dist/not-for-prod/prebid.js +155 -153
  87. package/dist/oguryBidAdapter.js +1 -1
  88. package/dist/onetagBidAdapter.js +1 -1
  89. package/dist/ooloAnalyticsAdapter.js +1 -1
  90. package/dist/openxBidAdapter.js +1 -1
  91. package/dist/optidigitalBidAdapter.js +1 -1
  92. package/dist/outbrainBidAdapter.js +1 -1
  93. package/dist/parrableIdSystem.js +1 -1
  94. package/dist/pixfutureBidAdapter.js +1 -1
  95. package/dist/prebid-core.js +1 -1
  96. package/dist/pstudioBidAdapter.js +1 -0
  97. package/dist/publinkIdSystem.js +1 -1
  98. package/dist/publirBidAdapter.js +1 -0
  99. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  100. package/dist/pubmaticBidAdapter.js +1 -1
  101. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  102. package/dist/pxyzBidAdapter.js +1 -1
  103. package/dist/quantcastBidAdapter.js +1 -1
  104. package/dist/rasBidAdapter.js +1 -1
  105. package/dist/readpeakBidAdapter.js +1 -1
  106. package/dist/relaidoBidAdapter.js +1 -1
  107. package/dist/retailspotBidAdapter.js +1 -1
  108. package/dist/rhythmoneBidAdapter.js +1 -1
  109. package/dist/riseBidAdapter.js +1 -1
  110. package/dist/rtbhouseBidAdapter.js +1 -1
  111. package/dist/rubiconBidAdapter.js +1 -1
  112. package/dist/seedingAllianceBidAdapter.js +1 -1
  113. package/dist/seedtagBidAdapter.js +1 -1
  114. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  115. package/dist/sharethroughBidAdapter.js +1 -1
  116. package/dist/shinezBidAdapter.js +1 -1
  117. package/dist/shinezRtbBidAdapter.js +1 -1
  118. package/dist/smaatoBidAdapter.js +1 -1
  119. package/dist/smartadserverBidAdapter.js +1 -1
  120. package/dist/smartxBidAdapter.js +1 -1
  121. package/dist/smartyadsBidAdapter.js +1 -1
  122. package/dist/smilewantedBidAdapter.js +1 -1
  123. package/dist/sonobiBidAdapter.js +1 -1
  124. package/dist/sovrnAnalyticsAdapter.js +1 -1
  125. package/dist/sovrnBidAdapter.js +1 -1
  126. package/dist/sspBCBidAdapter.js +1 -1
  127. package/dist/stnBidAdapter.js +1 -1
  128. package/dist/stvBidAdapter.js +1 -1
  129. package/dist/sublimeBidAdapter.js +1 -1
  130. package/dist/taboolaBidAdapter.js +1 -1
  131. package/dist/tagorasBidAdapter.js +1 -1
  132. package/dist/targetVideoBidAdapter.js +1 -1
  133. package/dist/teadsBidAdapter.js +1 -1
  134. package/dist/themoneytizerBidAdapter.js +1 -1
  135. package/dist/trionBidAdapter.js +1 -1
  136. package/dist/tripleliftBidAdapter.js +1 -1
  137. package/dist/ttdBidAdapter.js +1 -1
  138. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  139. package/dist/uid2IdSystem.js +1 -1
  140. package/dist/underdogmediaBidAdapter.js +1 -1
  141. package/dist/undertoneBidAdapter.js +1 -1
  142. package/dist/unrulyBidAdapter.js +1 -1
  143. package/dist/userId.js +1 -1
  144. package/dist/vidazooBidAdapter.js +1 -1
  145. package/dist/videobyteBidAdapter.js +1 -1
  146. package/dist/visxBidAdapter.js +1 -1
  147. package/dist/vuukleBidAdapter.js +1 -1
  148. package/dist/weboramaRtdProvider.js +1 -1
  149. package/dist/widespaceBidAdapter.js +1 -1
  150. package/dist/winrBidAdapter.js +1 -1
  151. package/dist/yahoosspBidAdapter.js +1 -1
  152. package/dist/yieldmoBidAdapter.js +1 -1
  153. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  154. package/dist/zeta_global_sspBidAdapter.js +1 -1
  155. package/integrationExamples/gpt/publir_hello_world.html +84 -0
  156. package/modules/adkernelBidAdapter.js +2 -1
  157. package/modules/automatadAnalyticsAdapter.js +31 -22
  158. package/modules/discoveryBidAdapter.js +5 -4
  159. package/modules/hypelabBidAdapter.js +31 -5
  160. package/modules/kargoBidAdapter.js +25 -13
  161. package/modules/kueezRtbBidAdapter.js +1 -1
  162. package/modules/nextMillenniumBidAdapter.js +52 -33
  163. package/modules/nexx360BidAdapter.js +2 -3
  164. package/modules/onetagBidAdapter.js +2 -1
  165. package/modules/pstudioBidAdapter.js +435 -0
  166. package/modules/pstudioBidAdapter.md +148 -0
  167. package/modules/publirBidAdapter.js +391 -0
  168. package/modules/publirBidAdapter.md +47 -0
  169. package/modules/pubmaticAnalyticsAdapter.js +7 -2
  170. package/modules/rasBidAdapter.js +178 -22
  171. package/modules/rasBidAdapter.md +2 -2
  172. package/modules/rtbhouseBidAdapter.js +2 -1
  173. package/modules/sharethroughBidAdapter.js +4 -0
  174. package/modules/smartyadsBidAdapter.js +10 -2
  175. package/modules/sovrnBidAdapter.js +15 -8
  176. package/modules/sspBCBidAdapter.js +22 -17
  177. package/modules/taboolaBidAdapter.js +1 -1
  178. package/modules/userId/index.js +1 -1
  179. package/modules/weboramaRtdProvider.js +99 -36
  180. package/modules/weboramaRtdProvider.md +13 -4
  181. package/modules/zeta_global_sspBidAdapter.js +26 -1
  182. package/package.json +1 -1
  183. package/test/spec/modules/automatadAnalyticsAdapter_spec.js +102 -15
  184. package/test/spec/modules/discoveryBidAdapter_spec.js +1 -1
  185. package/test/spec/modules/hypelabBidAdapter_spec.js +5 -1
  186. package/test/spec/modules/kargoBidAdapter_spec.js +29 -11
  187. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +34 -3
  188. package/test/spec/modules/nexx360BidAdapter_spec.js +5 -5
  189. package/test/spec/modules/onetagBidAdapter_spec.js +4 -1
  190. package/test/spec/modules/pstudioBidAdapter_spec.js +514 -0
  191. package/test/spec/modules/publirBidAdapter_spec.js +488 -0
  192. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +12 -1
  193. package/test/spec/modules/rasBidAdapter_spec.js +364 -2
  194. package/test/spec/modules/sharethroughBidAdapter_spec.js +35 -0
  195. package/test/spec/modules/sovrnBidAdapter_spec.js +39 -0
  196. package/test/spec/modules/sspBCBidAdapter_spec.js +1 -1
  197. package/test/spec/modules/taboolaBidAdapter_spec.js +1 -1
  198. package/test/spec/modules/weboramaRtdProvider_spec.js +114 -0
  199. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +4 -4
@@ -1,8 +1,12 @@
1
1
  import { registerBidder } from '../src/adapters/bidderFactory.js';
2
- import { BANNER } from '../src/mediaTypes.js';
3
- import { isEmpty, parseSizesInput, deepAccess } from '../src/utils.js';
4
- import {getAllOrtbKeywords} from '../libraries/keywords/keywords.js';
5
- import {getAdUnitSizes} from '../libraries/sizeUtils/sizeUtils.js';
2
+ import { BANNER, NATIVE } from '../src/mediaTypes.js';
3
+ import {
4
+ isEmpty,
5
+ parseSizesInput,
6
+ deepAccess
7
+ } from '../src/utils.js';
8
+ import { getAllOrtbKeywords } from '../libraries/keywords/keywords.js';
9
+ import { getAdUnitSizes } from '../libraries/sizeUtils/sizeUtils.js';
6
10
 
7
11
  const BIDDER_CODE = 'ras';
8
12
  const VERSION = '1.0';
@@ -56,28 +60,156 @@ function parseParams(params, bidderRequest) {
56
60
  }
57
61
  }
58
62
  }
63
+ if (bidderRequest?.ortb2?.regs?.ext?.dsa?.required !== undefined) {
64
+ newParams.dsainfo = bidderRequest?.ortb2?.regs?.ext?.dsa?.required;
65
+ }
59
66
  return newParams;
60
67
  }
61
68
 
62
- const buildBid = (ad) => {
63
- if (ad.type === 'empty') {
69
+ /**
70
+ * @param url string
71
+ * @param type number // 1 - img, 2 - js
72
+ * @returns an object { event: 1, method: 1 or 2, url: 'string' }
73
+ */
74
+ function prepareItemEventtrackers(url, type) {
75
+ return {
76
+ event: 1,
77
+ method: type,
78
+ url: url
79
+ };
80
+ }
81
+
82
+ function prepareEventtrackers(emsLink, imp, impression, impression1, impressionJs1) {
83
+ const eventtrackers = [prepareItemEventtrackers(emsLink, 1)];
84
+
85
+ if (imp) {
86
+ eventtrackers.push(prepareItemEventtrackers(imp, 1));
87
+ }
88
+
89
+ if (impression) {
90
+ eventtrackers.push(prepareItemEventtrackers(impression, 1));
91
+ }
92
+
93
+ if (impression1) {
94
+ eventtrackers.push(prepareItemEventtrackers(impression1, 1));
95
+ }
96
+
97
+ if (impressionJs1) {
98
+ eventtrackers.push(prepareItemEventtrackers(impressionJs1, 2));
99
+ }
100
+
101
+ return eventtrackers;
102
+ }
103
+
104
+ function parseOrtbResponse(ad) {
105
+ if (!(ad.data?.fields && ad.data?.meta)) {
106
+ return false;
107
+ }
108
+
109
+ const { image, Image, title, url, Headline, Thirdpartyclicktracker, imp, impression, impression1, impressionJs1 } = ad.data.fields;
110
+ const { dsaurl, height, width, adclick } = ad.data.meta;
111
+ const emsLink = ad.ems_link;
112
+ const link = adclick + (url || Thirdpartyclicktracker);
113
+ const eventtrackers = prepareEventtrackers(emsLink, imp, impression, impression1, impressionJs1);
114
+ const ortb = {
115
+ ver: '1.2',
116
+ assets: [
117
+ {
118
+ id: 2,
119
+ img: {
120
+ url: image || Image || '',
121
+ w: width,
122
+ h: height
123
+ }
124
+ },
125
+ {
126
+ id: 4,
127
+ title: {
128
+ text: title || Headline || ''
129
+ }
130
+ },
131
+ {
132
+ id: 3,
133
+ data: {
134
+ value: deepAccess(ad, 'data.meta.advertiser_name', null),
135
+ type: 1
136
+ }
137
+ }
138
+ ],
139
+ link: {
140
+ url: link
141
+ },
142
+ eventtrackers
143
+ };
144
+
145
+ if (dsaurl) {
146
+ ortb.privacy = dsaurl
147
+ }
148
+
149
+ return ortb
150
+ }
151
+
152
+ function parseNativeResponse(ad) {
153
+ if (!(ad.data?.fields && ad.data?.meta)) {
154
+ return false;
155
+ }
156
+
157
+ const { image, Image, title, leadtext, url, Calltoaction, Body, Headline, Thirdpartyclicktracker } = ad.data.fields;
158
+ const { dsaurl, height, width, adclick } = ad.data.meta;
159
+ const link = adclick + (url || Thirdpartyclicktracker);
160
+ const nativeResponse = {
161
+ sendTargetingKeys: false,
162
+ title: title || Headline || '',
163
+ image: {
164
+ url: image || Image || '',
165
+ width,
166
+ height
167
+ },
168
+
169
+ clickUrl: link,
170
+ cta: Calltoaction || '',
171
+ body: leadtext || Body || '',
172
+ sponsoredBy: deepAccess(ad, 'data.meta.advertiser_name', null) || '',
173
+ ortb: parseOrtbResponse(ad)
174
+ };
175
+
176
+ if (dsaurl) {
177
+ nativeResponse.privacyLink = dsaurl;
178
+ }
179
+
180
+ return nativeResponse
181
+ }
182
+
183
+ const buildBid = (ad, mediaType) => {
184
+ if (ad.type === 'empty' || mediaType === undefined) {
64
185
  return null;
65
186
  }
66
- return {
187
+
188
+ const data = {
67
189
  requestId: ad.id,
68
190
  cpm: ad.bid_rate ? ad.bid_rate.toFixed(2) : 0,
69
- width: ad.width || 0,
70
- height: ad.height || 0,
71
191
  ttl: 300,
72
192
  creativeId: ad.adid ? parseInt(ad.adid.split(',')[2], 10) : 0,
73
193
  netRevenue: true,
74
194
  currency: ad.currency || 'USD',
75
195
  dealId: null,
76
- meta: {
77
- mediaType: BANNER
78
- },
79
- ad: ad.html || null
80
- };
196
+ actgMatch: ad.actg_match || 0,
197
+ meta: { mediaType: BANNER },
198
+ mediaType: BANNER,
199
+ ad: ad.html || null,
200
+ width: ad.width || 0,
201
+ height: ad.height || 0
202
+ }
203
+
204
+ if (mediaType === 'native') {
205
+ data.meta = { mediaType: NATIVE };
206
+ data.mediaType = NATIVE;
207
+ data.native = parseNativeResponse(ad) || {};
208
+
209
+ delete data.ad;
210
+ }
211
+
212
+ return data;
81
213
  };
82
214
 
83
215
  const getContextParams = (bidRequests, bidderRequest) => {
@@ -102,18 +234,24 @@ const getSlots = (bidRequests) => {
102
234
  for (let i = 0; i < batchSize; i++) {
103
235
  const adunit = bidRequests[i];
104
236
  const slotSequence = deepAccess(adunit, 'params.slotSequence');
105
-
106
- const sizes = parseSizesInput(getAdUnitSizes(adunit)).join(',');
237
+ const creFormat = getAdUnitCreFormat(adunit);
238
+ const sizes = creFormat === 'native' ? 'fluid' : parseSizesInput(getAdUnitSizes(adunit)).join(',');
107
239
 
108
240
  queryString += `&slot${i}=${encodeURIComponent(adunit.params.slot)}&id${i}=${encodeURIComponent(adunit.bidId)}&composition${i}=CHILD`;
109
241
 
110
- if (sizes.length) {
242
+ if (creFormat === 'native') {
243
+ queryString += `&cre_format${i}=native`;
244
+ }
245
+
246
+ if (sizes) {
111
247
  queryString += `&iusizes${i}=${encodeURIComponent(sizes)}`;
112
248
  }
113
- if (slotSequence !== undefined) {
249
+
250
+ if (slotSequence !== undefined && slotSequence !== null) {
114
251
  queryString += `&pos${i}=${encodeURIComponent(slotSequence)}`;
115
252
  }
116
253
  }
254
+
117
255
  return queryString;
118
256
  };
119
257
 
@@ -160,9 +298,24 @@ const parseAuctionConfigs = (serverResponse, bidRequest) => {
160
298
  }
161
299
  }
162
300
 
301
+ const getAdUnitCreFormat = (adUnit) => {
302
+ if (!adUnit) {
303
+ return;
304
+ }
305
+
306
+ let creFormat = 'html';
307
+ let mediaTypes = Object.keys(adUnit.mediaTypes);
308
+
309
+ if (mediaTypes && mediaTypes.length === 1 && mediaTypes.includes('native')) {
310
+ creFormat = 'native';
311
+ }
312
+
313
+ return creFormat;
314
+ }
315
+
163
316
  export const spec = {
164
317
  code: BIDDER_CODE,
165
- supportedMediaTypes: [BANNER],
318
+ supportedMediaTypes: [BANNER, NATIVE],
166
319
 
167
320
  isBidRequestValid: function (bidRequest) {
168
321
  if (!bidRequest || !bidRequest.params || typeof bidRequest.params !== 'object') {
@@ -183,7 +336,8 @@ export const spec = {
183
336
  bidId: bid.bidId,
184
337
  sizes: getAdUnitSizes(bid),
185
338
  params: bid.params,
186
- fledgeEnabled: fledgeEligible
339
+ fledgeEnabled: fledgeEligible,
340
+ mediaType: (bid.mediaTypes && bid.mediaTypes.banner) ? 'display' : NATIVE
187
341
  }));
188
342
 
189
343
  return [{
@@ -195,9 +349,11 @@ export const spec = {
195
349
 
196
350
  interpretResponse: function (serverResponse, bidRequest) {
197
351
  const response = serverResponse.body;
198
-
199
352
  const fledgeAuctionConfigs = parseAuctionConfigs(serverResponse, bidRequest);
200
- const bids = (!response || !response.ads || response.ads.length === 0) ? [] : response.ads.map(buildBid).filter((bid) => !isEmpty(bid));
353
+ const bids = (!response || !response.ads || response.ads.length === 0) ? [] : response.ads.map((ad, index) => buildBid(
354
+ ad,
355
+ bidRequest?.bidIds?.[index]?.mediaType || 'banner'
356
+ )).filter((bid) => !isEmpty(bid));
201
357
 
202
358
  if (fledgeAuctionConfigs) {
203
359
  // Return a tuple of bids and auctionConfigs. It is possible that bids could be null.
@@ -9,7 +9,7 @@ Maintainer: support@ringpublishing.com
9
9
  # Description
10
10
 
11
11
  Module that connects to Ringer Axel Springer demand sources.
12
- Only banner format is supported.
12
+ Only banner and native format is supported.
13
13
 
14
14
  # Test Parameters
15
15
  ```js
@@ -49,4 +49,4 @@ var adUnits = [{
49
49
  | pageContext.keyValues | optional | Object | Key-values associated with this ad unit (case-insensitive); following characters are not allowed in the values: `" ' = ! + # * ~ ; ^ ( ) < > [ ] & @` | `{}` |
50
50
  | pageContext.keyValues.ci | optional | String | Content unique identifier | `"932016a5-02fc-4d5c-b643-fafc2f270f06"` |
51
51
  | pageContext.keyValues.adunit | optional | String | Ad unit name | `"example_com/sport"` |
52
- | customParams | optional | Object | Custom request params | `{}` |
52
+ | customParams | optional | Object | Custom request params | `{}` |
@@ -165,6 +165,7 @@ export const spec = {
165
165
  interpretResponse: function (serverResponse, originalRequest) {
166
166
  let bids;
167
167
 
168
+ const fledgeInterestGroupBuyers = config.getConfig('fledgeConfig.interestGroupBuyers') || [];
168
169
  const responseBody = serverResponse.body;
169
170
  let fledgeAuctionConfigs = null;
170
171
 
@@ -186,7 +187,7 @@ export const spec = {
186
187
  {
187
188
  seller,
188
189
  decisionLogicUrl,
189
- interestGroupBuyers: Object.keys(perBuyerSignals),
190
+ interestGroupBuyers: [...fledgeInterestGroupBuyers, ...Object.keys(perBuyerSignals)],
190
191
  perBuyerSignals,
191
192
  },
192
193
  sellerTimeout
@@ -92,6 +92,10 @@ export const sharethroughAdapterSpec = {
92
92
  req.regs.ext.gpp_sid = bidderRequest.ortb2.regs.gpp_sid;
93
93
  }
94
94
 
95
+ if (bidderRequest?.ortb2?.regs?.ext?.dsa) {
96
+ req.regs.ext.dsa = bidderRequest.ortb2.regs.ext.dsa;
97
+ }
98
+
95
99
  const imps = bidRequests
96
100
  .map((bidReq) => {
97
101
  const impression = { ext: {} };
@@ -41,8 +41,16 @@ function getAdUrlByRegion(bid) {
41
41
  try {
42
42
  const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
43
43
  const region = timezone.split('/')[0];
44
- if (region === 'Europe') adUrl = adUrls['EU'];
45
- else adUrl = adUrls['US_EAST'];
44
+
45
+ switch (region) {
46
+ case 'Europe':
47
+ adUrl = adUrls['EU'];
48
+ break;
49
+ case 'Asia':
50
+ adUrl = adUrls['SGP'];
51
+ break;
52
+ default: adUrl = adUrls['US_EAST'];
53
+ }
46
54
  } catch (err) {
47
55
  adUrl = adUrls['US_EAST'];
48
56
  }
@@ -107,18 +107,11 @@ export const spec = {
107
107
  }
108
108
  iv = iv || getBidIdParameter('iv', bid.params)
109
109
 
110
- const floorInfo = (bid.getFloor && typeof bid.getFloor === 'function') ? bid.getFloor({
111
- currency: 'USD',
112
- mediaType: bid.mediaTypes && bid.mediaTypes.banner ? 'banner' : 'video',
113
- size: '*'
114
- }) : {}
115
- floorInfo.floor = floorInfo.floor || getBidIdParameter('bidfloor', bid.params)
116
-
117
110
  const imp = {
118
111
  adunitcode: bid.adUnitCode,
119
112
  id: bid.bidId,
120
113
  tagid: String(getBidIdParameter('tagid', bid.params)),
121
- bidfloor: floorInfo.floor
114
+ bidfloor: _getBidFloors(bid)
122
115
  }
123
116
 
124
117
  if (deepAccess(bid, 'mediaTypes.banner')) {
@@ -332,4 +325,18 @@ function _buildVideoRequestObj(bid) {
332
325
  return videoObj
333
326
  }
334
327
 
328
+ function _getBidFloors(bid) {
329
+ const floorInfo = (bid.getFloor && typeof bid.getFloor === 'function') ? bid.getFloor({
330
+ currency: 'USD',
331
+ mediaType: bid.mediaTypes && bid.mediaTypes.banner ? 'banner' : 'video',
332
+ size: '*'
333
+ }) : {}
334
+ const floorModuleValue = parseFloat(floorInfo.floor)
335
+ if (!isNaN(floorModuleValue)) {
336
+ return floorModuleValue
337
+ }
338
+ const paramValue = parseFloat(getBidIdParameter('bidfloor', bid.params))
339
+ return !isNaN(paramValue) ? paramValue : undefined
340
+ }
341
+
335
342
  registerBidder(spec)
@@ -12,7 +12,7 @@ const SYNC_URL = 'https://ssp.wp.pl/bidder/usersync';
12
12
  const NOTIFY_URL = 'https://ssp.wp.pl/bidder/notify';
13
13
  const GVLID = 676;
14
14
  const TMAX = 450;
15
- const BIDDER_VERSION = '5.92';
15
+ const BIDDER_VERSION = '5.93';
16
16
  const DEFAULT_CURRENCY = 'PLN';
17
17
  const W = window;
18
18
  const { navigator } = W;
@@ -77,7 +77,7 @@ const getContentLanguage = () => {
77
77
 
78
78
  /**
79
79
  * Get Bid parameters - returns bid params from Object, or 1el array
80
- * @param {*} bidData - bid (bidWon), or array of bids (timeout)
80
+ * @param {*} bidParams - bid (bidWon), or array of bids (timeout)
81
81
  * @returns {object} params object
82
82
  */
83
83
  const unpackParams = (bidParams) => {
@@ -216,8 +216,11 @@ const applyTopics = (validBidRequest, ortbRequest) => {
216
216
  };
217
217
 
218
218
  const applyUserIds = (validBidRequest, ortbRequest) => {
219
- const eids = validBidRequest.userIdAsEids
220
- if (eids && eids.length) {
219
+ const { userIdAsEids: eidsVbr = [], ortb2 = {} } = validBidRequest;
220
+ const eidsOrtb = ortb2.user?.ext?.data?.eids || [];
221
+ const eids = [...eidsVbr, ...eidsOrtb];
222
+
223
+ if (eids.length) {
221
224
  const ids = { eids };
222
225
  ortbRequest.user = { ...ortbRequest.user, ...ids };
223
226
  }
@@ -243,7 +246,7 @@ const applyGdpr = (bidderRequest, ortbRequest) => {
243
246
  * returns floor = 0 if getFloor() is not defined
244
247
  *
245
248
  * @param {object} slot bid request adslot
246
- * @returns {float} floorprice
249
+ * @returns {number} floorprice
247
250
  */
248
251
  const getHighestFloor = (slot) => {
249
252
  const currency = getCurrency();
@@ -570,6 +573,7 @@ const parseNative = (nativeData, adUnitCode) => {
570
573
  }
571
574
 
572
575
  const renderCreative = (site, auctionId, bid, seat, request) => {
576
+ const { adLabel, id, slot, sn, page, publisherId, ref } = site;
573
577
  let gam;
574
578
 
575
579
  const mcad = {
@@ -619,16 +623,16 @@ const renderCreative = (site, auctionId, bid, seat, request) => {
619
623
  }
620
624
  </style>
621
625
  <script>
622
- window.rekid = ${site.id};
623
- window.slot = ${parseInt(site.slot, 10)};
626
+ window.rekid = ${id};
627
+ window.slot = ${parseInt(slot, 10)};
624
628
  window.responseTimestamp = ${Date.now()};
625
- window.wp_sn = "${site.sn}";
629
+ window.wp_sn = "${sn}";
626
630
  window.mcad = JSON.parse(decodeURI(atob("${mcbase}")));
627
- window.gdpr = ${JSON.stringify(request.gdprConsent)};
628
- window.page = "${site.page}";
629
- window.ref = "${site.ref}";
630
- window.adlabel = "${site.adLabel ? site.adLabel : ''}";
631
- window.pubid = "${site.publisherId ? site.publisherId : ''}";
631
+ window.tcString = "${request.gdprConsent?.consentString || ''}";
632
+ window.page = "${page}";
633
+ window.ref = "${ref}";
634
+ window.adlabel = "${adLabel || ''}";
635
+ window.pubid = "${publisherId || ''}";
632
636
  window.requestPVID = "${pageView.id}";
633
637
  `;
634
638
 
@@ -654,8 +658,6 @@ const spec = {
654
658
  return true;
655
659
  },
656
660
  buildRequests(validBidRequests, bidderRequest) {
657
- logWarn('DEBUG: buildRequests', bidderRequest.auctionId, bidderRequest.bidderRequestId);
658
-
659
661
  // convert Native ORTB definition to old-style prebid native definition
660
662
  validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
661
663
 
@@ -663,6 +665,7 @@ const spec = {
663
665
  return false;
664
666
  }
665
667
 
668
+ const ortb2 = setOnAny(validBidRequests, 'ortb2');
666
669
  const siteId = setOnAny(validBidRequests, 'params.siteId');
667
670
  const publisherId = setOnAny(validBidRequests, 'params.publisherId');
668
671
  const page = setOnAny(validBidRequests, 'params.page') || bidderRequest.refererInfo.page;
@@ -671,6 +674,7 @@ const spec = {
671
674
  const pbver = '$prebid.version$';
672
675
  const testMode = setOnAny(validBidRequests, 'params.test') ? 1 : undefined;
673
676
  const ref = bidderRequest.refererInfo.ref;
677
+ const { regs = {} } = ortb2 || {};
674
678
 
675
679
  const payload = {
676
680
  id: bidderRequest.bidderRequestId,
@@ -686,7 +690,7 @@ const spec = {
686
690
  cur: [getCurrency()],
687
691
  tmax,
688
692
  user: {},
689
- regs: {},
693
+ regs,
690
694
  device: {
691
695
  language: getBrowserLanguage(),
692
696
  w: screen.width,
@@ -740,7 +744,7 @@ const spec = {
740
744
  const { bidId } = bidRequest || {};
741
745
 
742
746
  // get ext data from bid
743
- const { siteid = site.id, slotid = site.slot, pubid, adlabel, cache: creativeCache, vurls = [] } = ext;
747
+ const { siteid = site.id, slotid = site.slot, pubid, adlabel, cache: creativeCache, vurls = [], dsa } = ext;
744
748
 
745
749
  // update site data
746
750
  site = {
@@ -772,6 +776,7 @@ const spec = {
772
776
  advertiserDomains: adomain,
773
777
  networkName: seat,
774
778
  pricepl: ext && ext.pricepl,
779
+ dsa,
775
780
  },
776
781
  netRevenue: true,
777
782
  vurls,
@@ -200,7 +200,7 @@ export const spec = {
200
200
  },
201
201
 
202
202
  onBidderError: ({ error, bidderRequest }) => {
203
- ajax(EVENT_ENDPOINT + '/bidError', null, JSON.stringify(error, bidderRequest), {method: 'POST'});
203
+ ajax(EVENT_ENDPOINT + '/bidError', null, JSON.stringify({error, bidderRequest}), {method: 'POST'});
204
204
  },
205
205
  };
206
206
 
@@ -1096,7 +1096,7 @@ export function init(config, {delay = GreedyPromise.timeout} = {}) {
1096
1096
  // init config update listener to start the application
1097
1097
  init(config);
1098
1098
 
1099
- module('userId', attachIdSystem);
1099
+ module('userId', attachIdSystem, { postInstallAllowed: true });
1100
1100
 
1101
1101
  export function setOrtbUserExtEids(ortbRequest, bidderRequest, context) {
1102
1102
  const eids = deepAccess(context, 'bidRequests.0.userIdAsEids');