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.
- package/dist/33acrossAnalyticsAdapter.js +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/BTBidAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adstirBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/agmaAnalyticsAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/automatadAnalyticsAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/dxkultureBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/illuminBidAdapter.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kimberliteBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/luceadBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/missenaBidAdapter.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +155 -153
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxBidAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/pstudioBidAdapter.js +1 -0
- package/dist/publinkIdSystem.js +1 -1
- package/dist/publirBidAdapter.js +1 -0
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/rasBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rtbhouseBidAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/shinezRtbBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smartyadsBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stnBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tagorasBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/themoneytizerBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/uid2IdSystem.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/unrulyBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/weboramaRtdProvider.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspBidAdapter.js +1 -1
- package/integrationExamples/gpt/publir_hello_world.html +84 -0
- package/modules/adkernelBidAdapter.js +2 -1
- package/modules/automatadAnalyticsAdapter.js +31 -22
- package/modules/discoveryBidAdapter.js +5 -4
- package/modules/hypelabBidAdapter.js +31 -5
- package/modules/kargoBidAdapter.js +25 -13
- package/modules/kueezRtbBidAdapter.js +1 -1
- package/modules/nextMillenniumBidAdapter.js +52 -33
- package/modules/nexx360BidAdapter.js +2 -3
- package/modules/onetagBidAdapter.js +2 -1
- package/modules/pstudioBidAdapter.js +435 -0
- package/modules/pstudioBidAdapter.md +148 -0
- package/modules/publirBidAdapter.js +391 -0
- package/modules/publirBidAdapter.md +47 -0
- package/modules/pubmaticAnalyticsAdapter.js +7 -2
- package/modules/rasBidAdapter.js +178 -22
- package/modules/rasBidAdapter.md +2 -2
- package/modules/rtbhouseBidAdapter.js +2 -1
- package/modules/sharethroughBidAdapter.js +4 -0
- package/modules/smartyadsBidAdapter.js +10 -2
- package/modules/sovrnBidAdapter.js +15 -8
- package/modules/sspBCBidAdapter.js +22 -17
- package/modules/taboolaBidAdapter.js +1 -1
- package/modules/userId/index.js +1 -1
- package/modules/weboramaRtdProvider.js +99 -36
- package/modules/weboramaRtdProvider.md +13 -4
- package/modules/zeta_global_sspBidAdapter.js +26 -1
- package/package.json +1 -1
- package/test/spec/modules/automatadAnalyticsAdapter_spec.js +102 -15
- package/test/spec/modules/discoveryBidAdapter_spec.js +1 -1
- package/test/spec/modules/hypelabBidAdapter_spec.js +5 -1
- package/test/spec/modules/kargoBidAdapter_spec.js +29 -11
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +34 -3
- package/test/spec/modules/nexx360BidAdapter_spec.js +5 -5
- package/test/spec/modules/onetagBidAdapter_spec.js +4 -1
- package/test/spec/modules/pstudioBidAdapter_spec.js +514 -0
- package/test/spec/modules/publirBidAdapter_spec.js +488 -0
- package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +12 -1
- package/test/spec/modules/rasBidAdapter_spec.js +364 -2
- package/test/spec/modules/sharethroughBidAdapter_spec.js +35 -0
- package/test/spec/modules/sovrnBidAdapter_spec.js +39 -0
- package/test/spec/modules/sspBCBidAdapter_spec.js +1 -1
- package/test/spec/modules/taboolaBidAdapter_spec.js +1 -1
- package/test/spec/modules/weboramaRtdProvider_spec.js +114 -0
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +4 -4
package/modules/rasBidAdapter.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
2
|
-
import { BANNER } from '../src/mediaTypes.js';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
63
|
-
|
|
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
|
-
|
|
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
|
-
|
|
77
|
-
|
|
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 (
|
|
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
|
-
|
|
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(
|
|
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.
|
package/modules/rasBidAdapter.md
CHANGED
|
@@ -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
|
-
|
|
45
|
-
|
|
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:
|
|
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.
|
|
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 {*}
|
|
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
|
|
220
|
-
|
|
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 {
|
|
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 = ${
|
|
623
|
-
window.slot = ${parseInt(
|
|
626
|
+
window.rekid = ${id};
|
|
627
|
+
window.slot = ${parseInt(slot, 10)};
|
|
624
628
|
window.responseTimestamp = ${Date.now()};
|
|
625
|
-
window.wp_sn = "${
|
|
629
|
+
window.wp_sn = "${sn}";
|
|
626
630
|
window.mcad = JSON.parse(decodeURI(atob("${mcbase}")));
|
|
627
|
-
window.
|
|
628
|
-
window.page = "${
|
|
629
|
-
window.ref = "${
|
|
630
|
-
window.adlabel = "${
|
|
631
|
-
window.pubid = "${
|
|
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
|
|
package/modules/userId/index.js
CHANGED
|
@@ -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');
|