prebid.js 7.24.0 → 7.26.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/33acrossBidAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/admaticBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.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/axonixBidAdapter.js +1 -1
- package/dist/beopBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/captifyRtdProvider.js +1 -0
- 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/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.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/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.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/microadBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +154 -120
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.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/publinkIdSystem.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/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconAnalyticsAdapter.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/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smartytechBidAdapter.js +1 -0
- 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/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tappxBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.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/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/viqeoBidAdapter.js +1 -0
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldlabBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspBidAdapter.js +1 -1
- package/dist/zeusPrimeRtdProvider.js +31 -0
- package/integrationExamples/gpt/captifyRtdProvider_example.html +167 -0
- package/modules/.submodules.json +3 -1
- package/modules/adagioBidAdapter.js +1 -1
- package/modules/admaticBidAdapter.js +108 -59
- package/modules/admaticBidAdapter.md +2 -2
- package/modules/beopBidAdapter.js +17 -2
- package/modules/captifyRtdProvider.js +146 -0
- package/modules/captifyRtdProvider.md +68 -0
- package/modules/concertBidAdapter.js +17 -3
- package/modules/conversantAnalyticsAdapter.md +12 -13
- package/modules/conversantBidAdapter.md +3 -3
- package/modules/discoveryBidAdapter.js +38 -17
- package/modules/discoveryBidAdapter.md +7 -6
- package/modules/gridBidAdapter.js +440 -22
- package/modules/kargoBidAdapter.js +14 -8
- package/modules/magniteAnalyticsAdapter.js +1 -1
- package/modules/microadBidAdapter.js +22 -11
- package/modules/nextMillenniumBidAdapter.js +20 -24
- package/modules/oguryBidAdapter.js +5 -2
- package/modules/pubmaticBidAdapter.js +1 -1
- package/modules/seedtagBidAdapter.js +9 -4
- package/modules/smartadserverBidAdapter.js +6 -2
- package/modules/smartxBidAdapter.js +10 -7
- package/modules/smartytechBidAdapter.js +78 -0
- package/modules/smartytechBidAdapter.md +44 -0
- package/modules/taboolaBidAdapter.js +3 -3
- package/modules/taboolaBidAdapter.md +0 -2
- package/modules/tappxBidAdapter.js +21 -6
- package/modules/ttdBidAdapter.js +4 -3
- package/modules/userId/index.js +1 -1
- package/modules/vidazooBidAdapter.js +29 -3
- package/modules/viqeoBidAdapter.js +180 -0
- package/modules/viqeoBidAdapter.md +56 -0
- package/modules/yieldlabBidAdapter.js +19 -8
- package/modules/yieldmoBidAdapter.js +22 -8
- package/modules/yieldoneBidAdapter.js +60 -8
- package/modules/yieldoneBidAdapter.md +109 -9
- package/modules/zeta_global_sspBidAdapter.js +4 -0
- package/modules/zeusPrimeRtdProvider.js +357 -0
- package/modules/zeusPrimeRtdProvider.md +60 -0
- package/package.json +1 -1
- package/src/adloader.js +0 -1
- package/test/spec/modules/adagioBidAdapter_spec.js +2 -2
- package/test/spec/modules/admaticBidAdapter_spec.js +262 -3
- package/test/spec/modules/beopBidAdapter_spec.js +52 -0
- package/test/spec/modules/captifyRtdProvider_spec.js +253 -0
- package/test/spec/modules/concertBidAdapter_spec.js +26 -15
- package/test/spec/modules/discoveryBidAdapter_spec.js +9 -8
- package/test/spec/modules/gridBidAdapter_spec.js +289 -1
- package/test/spec/modules/kargoBidAdapter_spec.js +76 -4
- package/test/spec/modules/magniteAnalyticsAdapter_spec.js +20 -0
- package/test/spec/modules/microadBidAdapter_spec.js +48 -0
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +4 -3
- package/test/spec/modules/oguryBidAdapter_spec.js +27 -5
- package/test/spec/modules/pubmaticBidAdapter_spec.js +2 -2
- package/test/spec/modules/seedtagBidAdapter_spec.js +34 -10
- package/test/spec/modules/smartadserverBidAdapter_spec.js +80 -0
- package/test/spec/modules/smartxBidAdapter_spec.js +32 -0
- package/test/spec/modules/smartytechBidAdapter_spec.js +162 -0
- package/test/spec/modules/taboolaBidAdapter_spec.js +0 -77
- package/test/spec/modules/ttdBidAdapter_spec.js +13 -0
- package/test/spec/modules/vidazooBidAdapter_spec.js +1 -0
- package/test/spec/modules/viqeoBidAdapter_spec.js +124 -0
- package/test/spec/modules/yieldlabBidAdapter_spec.js +125 -0
- package/test/spec/modules/yieldmoBidAdapter_spec.js +3 -4
- package/test/spec/modules/yieldoneBidAdapter_spec.js +30 -6
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +16 -1
- package/test/spec/modules/zeusPrimeRtdProvider_spec.js +410 -0
|
@@ -22,7 +22,7 @@ import { getRefererInfo } from '../src/refererDetection.js';
|
|
|
22
22
|
const BIDDER_CODE = 'nextMillennium';
|
|
23
23
|
const ENDPOINT = 'https://pbs.nextmillmedia.com/openrtb2/auction';
|
|
24
24
|
const TEST_ENDPOINT = 'https://test.pbs.nextmillmedia.com/openrtb2/auction';
|
|
25
|
-
const SYNC_ENDPOINT = 'https://
|
|
25
|
+
const SYNC_ENDPOINT = 'https://cookies.nextmillmedia.com/sync?';
|
|
26
26
|
const TIME_TO_LIVE = 360;
|
|
27
27
|
const VIDEO_PARAMS = [
|
|
28
28
|
'api', 'linearity', 'maxduration', 'mimes', 'minduration', 'placement',
|
|
@@ -141,7 +141,7 @@ export const spec = {
|
|
|
141
141
|
url: isTest ? TEST_ENDPOINT : ENDPOINT,
|
|
142
142
|
data: JSON.stringify(postBody),
|
|
143
143
|
options: {
|
|
144
|
-
contentType: '
|
|
144
|
+
contentType: 'text/plain',
|
|
145
145
|
withCredentials: true
|
|
146
146
|
},
|
|
147
147
|
|
|
@@ -198,28 +198,24 @@ export const spec = {
|
|
|
198
198
|
},
|
|
199
199
|
|
|
200
200
|
getUserSyncs: function (syncOptions, responses, gdprConsent, uspConsent) {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
return [{
|
|
220
|
-
type: 'iframe',
|
|
221
|
-
url: syncurl
|
|
222
|
-
}];
|
|
201
|
+
const pixels = [];
|
|
202
|
+
let syncUrl = SYNC_ENDPOINT;
|
|
203
|
+
|
|
204
|
+
if (gdprConsent && gdprConsent.gdprApplies) {
|
|
205
|
+
syncUrl += 'gdpr=1&gdpr_consent=' + gdprConsent.consentString;
|
|
206
|
+
}
|
|
207
|
+
if (uspConsent) {
|
|
208
|
+
syncUrl += 'us_privacy=' + uspConsent;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
if (syncOptions.iframeEnabled) {
|
|
212
|
+
pixels.push({type: 'iframe', url: syncUrl + 'type=iframe'});
|
|
213
|
+
}
|
|
214
|
+
if (syncOptions.pixelEnabled) {
|
|
215
|
+
pixels.push({type: 'image', url: syncUrl + 'type=image'});
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
return pixels;
|
|
223
219
|
},
|
|
224
220
|
};
|
|
225
221
|
|
|
@@ -11,7 +11,7 @@ const DEFAULT_TIMEOUT = 1000;
|
|
|
11
11
|
const BID_HOST = 'https://mweb-hb.presage.io/api/header-bidding-request';
|
|
12
12
|
const TIMEOUT_MONITORING_HOST = 'https://ms-ads-monitoring-events.presage.io';
|
|
13
13
|
const MS_COOKIE_SYNC_DOMAIN = 'https://ms-cookie-sync.presage.io';
|
|
14
|
-
const ADAPTER_VERSION = '1.
|
|
14
|
+
const ADAPTER_VERSION = '1.4.0';
|
|
15
15
|
|
|
16
16
|
function getClientWidth() {
|
|
17
17
|
const documentElementClientWidth = window.top.document.documentElement.clientWidth
|
|
@@ -114,7 +114,10 @@ function buildRequests(validBidRequests, bidderRequest) {
|
|
|
114
114
|
banner: {
|
|
115
115
|
format: sizes
|
|
116
116
|
},
|
|
117
|
-
ext:
|
|
117
|
+
ext: {
|
|
118
|
+
...bidRequest.params,
|
|
119
|
+
timeSpentOnPage: document.timeline && document.timeline.currentTime ? document.timeline.currentTime : 0
|
|
120
|
+
}
|
|
118
121
|
});
|
|
119
122
|
}
|
|
120
123
|
});
|
|
@@ -1254,7 +1254,7 @@ export const spec = {
|
|
|
1254
1254
|
seatbidder.bid.forEach(bid => {
|
|
1255
1255
|
let newBid = {
|
|
1256
1256
|
requestId: bid.impid,
|
|
1257
|
-
cpm:
|
|
1257
|
+
cpm: parseFloat((bid.price || 0).toFixed(2)),
|
|
1258
1258
|
width: bid.w,
|
|
1259
1259
|
height: bid.h,
|
|
1260
1260
|
creativeId: bid.crid || bid.id,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { isArray, _map, triggerPixel } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js'
|
|
3
3
|
import { VIDEO, BANNER } from '../src/mediaTypes.js'
|
|
4
|
+
import { config } from '../src/config.js';
|
|
4
5
|
|
|
5
6
|
const BIDDER_CODE = 'seedtag';
|
|
6
7
|
const SEEDTAG_ALIAS = 'st';
|
|
@@ -177,7 +178,7 @@ function ttfb() {
|
|
|
177
178
|
return ttfb >= 0 && ttfb <= performance.now() ? ttfb : 0;
|
|
178
179
|
}
|
|
179
180
|
|
|
180
|
-
export function getTimeoutUrl
|
|
181
|
+
export function getTimeoutUrl(data) {
|
|
181
182
|
let queryParams = '';
|
|
182
183
|
if (
|
|
183
184
|
isArray(data) && data[0] &&
|
|
@@ -235,7 +236,6 @@ export const spec = {
|
|
|
235
236
|
if (gdprApplies !== undefined) payload['ga'] = gdprApplies;
|
|
236
237
|
payload['cd'] = bidderRequest.gdprConsent.consentString;
|
|
237
238
|
}
|
|
238
|
-
|
|
239
239
|
if (bidderRequest.uspConsent) {
|
|
240
240
|
payload['uspConsent'] = bidderRequest.uspConsent
|
|
241
241
|
}
|
|
@@ -244,6 +244,11 @@ export const spec = {
|
|
|
244
244
|
payload.schain = validBidRequests[0].schain;
|
|
245
245
|
}
|
|
246
246
|
|
|
247
|
+
let coppa = config.getConfig('coppa')
|
|
248
|
+
if (coppa) {
|
|
249
|
+
payload.coppa = coppa
|
|
250
|
+
}
|
|
251
|
+
|
|
247
252
|
const payloadString = JSON.stringify(payload)
|
|
248
253
|
return {
|
|
249
254
|
method: 'POST',
|
|
@@ -258,10 +263,10 @@ export const spec = {
|
|
|
258
263
|
* @param {ServerResponse} serverResponse A successful response from the server.
|
|
259
264
|
* @return {Bid[]} An array of bids which were nested inside the server.
|
|
260
265
|
*/
|
|
261
|
-
interpretResponse: function(serverResponse) {
|
|
266
|
+
interpretResponse: function (serverResponse) {
|
|
262
267
|
const serverBody = serverResponse.body;
|
|
263
268
|
if (serverBody && serverBody.bids && isArray(serverBody.bids)) {
|
|
264
|
-
return _map(serverBody.bids, function(bid) {
|
|
269
|
+
return _map(serverBody.bids, function (bid) {
|
|
265
270
|
return buildBidResponse(bid);
|
|
266
271
|
});
|
|
267
272
|
} else {
|
|
@@ -133,6 +133,8 @@ export const spec = {
|
|
|
133
133
|
// use bidderRequest.bids[] to get bidder-dependent request info
|
|
134
134
|
|
|
135
135
|
const adServerCurrency = config.getConfig('currency.adServerCurrency');
|
|
136
|
+
const sellerDefinedAudience = deepAccess(bidderRequest, 'ortb2.user.data', config.getAnyConfig('ortb2.user.data'));
|
|
137
|
+
const sellerDefinedContext = deepAccess(bidderRequest, 'ortb2.site.content.data', config.getAnyConfig('ortb2.site.content.data'));
|
|
136
138
|
|
|
137
139
|
// pull requested transaction ID from bidderRequest.bids[].transactionId
|
|
138
140
|
return validBidRequests.reduce((bidRequests, bid) => {
|
|
@@ -154,7 +156,9 @@ export const spec = {
|
|
|
154
156
|
timeout: config.getConfig('bidderTimeout'),
|
|
155
157
|
bidId: bid.bidId,
|
|
156
158
|
prebidVersion: '$prebid.version$',
|
|
157
|
-
schain: spec.serializeSupplyChain(bid.schain)
|
|
159
|
+
schain: spec.serializeSupplyChain(bid.schain),
|
|
160
|
+
sda: sellerDefinedAudience,
|
|
161
|
+
sdc: sellerDefinedContext
|
|
158
162
|
};
|
|
159
163
|
|
|
160
164
|
if (bidderRequest && bidderRequest.gdprConsent) {
|
|
@@ -209,7 +213,7 @@ export const spec = {
|
|
|
209
213
|
const bidResponses = [];
|
|
210
214
|
let response = serverResponse.body;
|
|
211
215
|
try {
|
|
212
|
-
if (response && !response.isNoAd) {
|
|
216
|
+
if (response && !response.isNoAd && (response.ad || response.adUrl)) {
|
|
213
217
|
const bidRequest = JSON.parse(bidRequestString.data);
|
|
214
218
|
|
|
215
219
|
let bidResponse = {
|
|
@@ -67,7 +67,6 @@ export const spec = {
|
|
|
67
67
|
* @return ServerRequest Info describing the request to the server.
|
|
68
68
|
*/
|
|
69
69
|
buildRequests: function (bidRequests, bidderRequest) {
|
|
70
|
-
// TODO: does the fallback make sense here?
|
|
71
70
|
const page = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation;
|
|
72
71
|
const isPageSecure = !!page.match(/^https:/)
|
|
73
72
|
|
|
@@ -197,6 +196,15 @@ export const spec = {
|
|
|
197
196
|
userExt.fpc = pubcid;
|
|
198
197
|
}
|
|
199
198
|
|
|
199
|
+
// Add schain object if available
|
|
200
|
+
if (bid && bid.schain) {
|
|
201
|
+
requestPayload['source'] = {
|
|
202
|
+
ext: {
|
|
203
|
+
schain: bid.schain
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
|
|
200
208
|
// Only add the user object if it's not empty
|
|
201
209
|
if (!isEmpty(userExt)) {
|
|
202
210
|
requestPayload.user = {
|
|
@@ -204,9 +212,7 @@ export const spec = {
|
|
|
204
212
|
};
|
|
205
213
|
}
|
|
206
214
|
|
|
207
|
-
//
|
|
208
|
-
|
|
209
|
-
// Targeting
|
|
215
|
+
// Add targeting
|
|
210
216
|
if (getBidIdParameter('data', bid.params.user)) {
|
|
211
217
|
var targetingarr = [];
|
|
212
218
|
for (var i = 0; i < bid.params.user.data.length; i++) {
|
|
@@ -225,8 +231,6 @@ export const spec = {
|
|
|
225
231
|
}
|
|
226
232
|
}
|
|
227
233
|
|
|
228
|
-
// Todo: USER ID MODULE
|
|
229
|
-
|
|
230
234
|
requestPayload.user = {
|
|
231
235
|
ext: userExt,
|
|
232
236
|
data: targetingarr
|
|
@@ -269,7 +273,6 @@ export const spec = {
|
|
|
269
273
|
}
|
|
270
274
|
/**
|
|
271
275
|
* Make sure currency and price are the right ones
|
|
272
|
-
* TODO: what about the pre_market_bid partners sizes?
|
|
273
276
|
*/
|
|
274
277
|
_each(currentBidRequest.params.pre_market_bids, function (pmb) {
|
|
275
278
|
if (pmb.deal_id == smartxBid.id) {
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
2
|
+
import {buildUrl} from '../src/utils.js'
|
|
3
|
+
|
|
4
|
+
const BIDDER_CODE = 'smartytech';
|
|
5
|
+
export const ENDPOINT_PROTOCOL = 'https';
|
|
6
|
+
export const ENDPOINT_DOMAIN = 'server.smartytech.io';
|
|
7
|
+
export const ENDPOINT_PATH = '/hb/bidder';
|
|
8
|
+
|
|
9
|
+
export const spec = {
|
|
10
|
+
code: BIDDER_CODE,
|
|
11
|
+
|
|
12
|
+
isBidRequestValid: function (bidRequest) {
|
|
13
|
+
return !!parseInt(bidRequest.params.endpointId);
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
buildRequests: function (validBidRequests, bidderRequest) {
|
|
17
|
+
const referer = bidderRequest?.refererInfo?.page || window.location.href;
|
|
18
|
+
|
|
19
|
+
const bidRequests = validBidRequests.map((validBidRequest) => {
|
|
20
|
+
return {
|
|
21
|
+
endpointId: validBidRequest.params.endpointId,
|
|
22
|
+
adUnitCode: validBidRequest.adUnitCode,
|
|
23
|
+
sizes: validBidRequest.sizes,
|
|
24
|
+
bidId: validBidRequest.bidId,
|
|
25
|
+
referer: referer
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
let adPartnerRequestUrl = buildUrl({
|
|
30
|
+
protocol: ENDPOINT_PROTOCOL,
|
|
31
|
+
hostname: ENDPOINT_DOMAIN,
|
|
32
|
+
pathname: ENDPOINT_PATH,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
method: 'POST',
|
|
37
|
+
url: adPartnerRequestUrl,
|
|
38
|
+
data: bidRequests
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
interpretResponse: function (serverResponse, bidRequest) {
|
|
43
|
+
if (typeof serverResponse.body === 'undefined') {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const validBids = bidRequest.data;
|
|
48
|
+
const keys = Object.keys(serverResponse.body)
|
|
49
|
+
const responseBody = serverResponse.body;
|
|
50
|
+
|
|
51
|
+
return keys.filter(key => {
|
|
52
|
+
return responseBody[key].ad
|
|
53
|
+
}).map(key => {
|
|
54
|
+
return {
|
|
55
|
+
bid: validBids.find(b => b.adUnitCode === key),
|
|
56
|
+
response: responseBody[key]
|
|
57
|
+
}
|
|
58
|
+
}).map(item => spec.adResponse(item.bid.bidId, item.response));
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
adResponse: function (requestId, response) {
|
|
62
|
+
const bidObject = {
|
|
63
|
+
requestId,
|
|
64
|
+
ad: response.ad,
|
|
65
|
+
cpm: response.cpm,
|
|
66
|
+
width: response.width,
|
|
67
|
+
height: response.height,
|
|
68
|
+
ttl: 60,
|
|
69
|
+
creativeId: response.creativeId,
|
|
70
|
+
netRevenue: true,
|
|
71
|
+
currency: response.currency,
|
|
72
|
+
}
|
|
73
|
+
return bidObject;
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
registerBidder(spec);
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
Module Name: SmartyTech Bidder Adapter
|
|
4
|
+
|
|
5
|
+
Module Type: Bidder Adapter
|
|
6
|
+
|
|
7
|
+
Maintainer: info@adpartner.pro
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
You can use this adapter to get a bid from smartytech.io.
|
|
12
|
+
|
|
13
|
+
About us : https://smartytech.io
|
|
14
|
+
|
|
15
|
+
# Test Parameters
|
|
16
|
+
|
|
17
|
+
```javascript
|
|
18
|
+
var adUnits = [
|
|
19
|
+
{
|
|
20
|
+
code: 'div-smartytech-example',
|
|
21
|
+
sizes: [[300, 250]],
|
|
22
|
+
bids: [
|
|
23
|
+
{
|
|
24
|
+
bidder: "smartytech",
|
|
25
|
+
params: {
|
|
26
|
+
endpointId: 14
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
code: 'div-smartytech-example-2',
|
|
33
|
+
sizes: [[300, 250]],
|
|
34
|
+
bids: [
|
|
35
|
+
{
|
|
36
|
+
bidder: "smartytech",
|
|
37
|
+
params: {
|
|
38
|
+
endpointId: 14
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
];
|
|
44
|
+
```
|
|
@@ -9,7 +9,7 @@ import {getStorageManager} from '../src/storageManager.js';
|
|
|
9
9
|
const BIDDER_CODE = 'taboola';
|
|
10
10
|
const GVLID = 42;
|
|
11
11
|
const CURRENCY = 'USD';
|
|
12
|
-
export const END_POINT_URL = 'https://
|
|
12
|
+
export const END_POINT_URL = 'https://display.bidder.taboola.com/OpenRTB/TaboolaHB/auction';
|
|
13
13
|
const USER_ID = 'user-id';
|
|
14
14
|
const STORAGE_KEY = `taboola global:${USER_ID}`;
|
|
15
15
|
const COOKIE_KEY = 'trc_cookie_storage';
|
|
@@ -80,7 +80,7 @@ export const spec = {
|
|
|
80
80
|
buildRequests: (validBidRequests, bidderRequest) => {
|
|
81
81
|
const [bidRequest] = validBidRequests;
|
|
82
82
|
const {refererInfo, gdprConsent = {}, uspConsent} = bidderRequest;
|
|
83
|
-
const {publisherId
|
|
83
|
+
const {publisherId} = bidRequest.params;
|
|
84
84
|
const site = getSiteProperties(bidRequest.params, refererInfo);
|
|
85
85
|
const device = {ua: navigator.userAgent};
|
|
86
86
|
const imps = getImps(validBidRequests);
|
|
@@ -124,7 +124,7 @@ export const spec = {
|
|
|
124
124
|
regs
|
|
125
125
|
};
|
|
126
126
|
|
|
127
|
-
const url = [
|
|
127
|
+
const url = [END_POINT_URL, publisherId].join('/');
|
|
128
128
|
|
|
129
129
|
return {
|
|
130
130
|
url,
|
|
@@ -31,7 +31,6 @@ The Taboola Bidding adapter requires setup before beginning. Please contact us o
|
|
|
31
31
|
bidfloor: 0.25, // Optional - default is null
|
|
32
32
|
bcat: ['IAB1-1'], // Optional - default is []
|
|
33
33
|
badv: ['example.com'], // Optional - default is []
|
|
34
|
-
endpointUrl: ['https://example.com'] // Optional
|
|
35
34
|
}
|
|
36
35
|
}]
|
|
37
36
|
}];
|
|
@@ -46,6 +45,5 @@ The Taboola Bidding adapter requires setup before beginning. Please contact us o
|
|
|
46
45
|
| `bcat` | optional | List of blocked advertiser categories (IAB) | `['IAB1-1']` | `Array` |
|
|
47
46
|
| `badv` | optional | Blocked Advertiser Domains | `'example.com'` | `String Url` |
|
|
48
47
|
| `bidfloor` | optional | CPM bid floor | `0.25` | `Float` |
|
|
49
|
-
| `endpointUrl` | optional | Endpoint Url (only if provided by Taboola) | `https://example.com` | `String` |
|
|
50
48
|
|
|
51
49
|
|
|
@@ -11,7 +11,7 @@ const BIDDER_CODE = 'tappx';
|
|
|
11
11
|
const GVLID_CODE = 628;
|
|
12
12
|
const TTL = 360;
|
|
13
13
|
const CUR = 'USD';
|
|
14
|
-
const TAPPX_BIDDER_VERSION = '0.1.
|
|
14
|
+
const TAPPX_BIDDER_VERSION = '0.1.2';
|
|
15
15
|
const TYPE_CNN = 'prebidjs';
|
|
16
16
|
const LOG_PREFIX = '[TAPPX]: ';
|
|
17
17
|
const VIDEO_SUPPORT = ['instream', 'outstream'];
|
|
@@ -271,12 +271,28 @@ function buildOneRequest(validBidRequests, bidderRequest) {
|
|
|
271
271
|
api[0] = deepAccess(validBidRequests, 'params.api') ? deepAccess(validBidRequests, 'params.api') : [3, 5];
|
|
272
272
|
} else {
|
|
273
273
|
let bundle = _extractPageUrl(validBidRequests, bidderRequest);
|
|
274
|
-
let site = {};
|
|
274
|
+
let site = deepAccess(validBidRequests, 'params.site') || {};
|
|
275
275
|
site.name = bundle;
|
|
276
|
+
site.page = bidderRequest?.refererInfo?.page || deepAccess(validBidRequests, 'params.site.page') || bidderRequest?.refererInfo?.topmostLocation || window.location.href || bundle;
|
|
276
277
|
site.domain = bundle;
|
|
278
|
+
site.ref = bidderRequest?.refererInfo?.ref || window.top.document.referrer || '';
|
|
279
|
+
site.ext = {};
|
|
280
|
+
site.ext.is_amp = bidderRequest?.refererInfo?.isAmp || 0;
|
|
281
|
+
site.ext.page_da = deepAccess(validBidRequests, 'params.site.page') || '-';
|
|
282
|
+
site.ext.page_rip = bidderRequest?.refererInfo?.page || '-';
|
|
283
|
+
site.ext.page_rit = bidderRequest?.refererInfo?.topmostLocation || '-';
|
|
284
|
+
site.ext.page_wlh = window.location.href || '-';
|
|
277
285
|
publisher.name = bundle;
|
|
278
286
|
publisher.domain = bundle;
|
|
287
|
+
let sitename = document.getElementsByTagName('meta')['title'];
|
|
288
|
+
if (sitename && sitename.content) {
|
|
289
|
+
site.name = sitename.content;
|
|
290
|
+
}
|
|
279
291
|
tagid = `${site.name}_typeAdBanVid_${getOs()}`;
|
|
292
|
+
let keywords = document.getElementsByTagName('meta')['keywords'];
|
|
293
|
+
if (keywords && keywords.content) {
|
|
294
|
+
site.keywords = keywords.content;
|
|
295
|
+
}
|
|
280
296
|
payload.site = site;
|
|
281
297
|
}
|
|
282
298
|
// < App/Site object
|
|
@@ -295,9 +311,9 @@ function buildOneRequest(validBidRequests, bidderRequest) {
|
|
|
295
311
|
if (
|
|
296
312
|
((bannerMediaType.sizes[0].indexOf(480) >= 0) && (bannerMediaType.sizes[0].indexOf(320) >= 0)) ||
|
|
297
313
|
((bannerMediaType.sizes[0].indexOf(768) >= 0) && (bannerMediaType.sizes[0].indexOf(1024) >= 0))) {
|
|
298
|
-
banner.pos =
|
|
314
|
+
banner.pos = 0;
|
|
299
315
|
} else {
|
|
300
|
-
banner.pos =
|
|
316
|
+
banner.pos = 0;
|
|
301
317
|
}
|
|
302
318
|
|
|
303
319
|
banner.api = api;
|
|
@@ -565,8 +581,7 @@ export function _checkParamDataType(key, value, datatype) {
|
|
|
565
581
|
}
|
|
566
582
|
|
|
567
583
|
export function _extractPageUrl(validBidRequests, bidderRequest) {
|
|
568
|
-
|
|
569
|
-
let url = bidderRequest?.refererInfo?.page || bidderRequest.refererInfo?.topmostLocation;
|
|
584
|
+
let url = bidderRequest?.refererInfo?.page || bidderRequest?.refererInfo?.topmostLocation;
|
|
570
585
|
return parseDomain(url, {noLeadingWww: true});
|
|
571
586
|
}
|
|
572
587
|
|
package/modules/ttdBidAdapter.js
CHANGED
|
@@ -132,14 +132,15 @@ function getUser(bidderRequest) {
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
function getSite(bidderRequest, firstPartyData) {
|
|
135
|
-
var site = {
|
|
135
|
+
var site = utils.mergeDeep({
|
|
136
136
|
page: utils.deepAccess(bidderRequest, 'refererInfo.page'),
|
|
137
137
|
ref: utils.deepAccess(bidderRequest, 'refererInfo.ref'),
|
|
138
138
|
publisher: {
|
|
139
139
|
id: utils.deepAccess(bidderRequest, 'bids.0.params.publisherId'),
|
|
140
140
|
},
|
|
141
|
-
|
|
142
|
-
|
|
141
|
+
},
|
|
142
|
+
firstPartyData.site
|
|
143
|
+
);
|
|
143
144
|
|
|
144
145
|
var publisherDomain = bidderRequest.refererInfo.domain;
|
|
145
146
|
if (publisherDomain) {
|
package/modules/userId/index.js
CHANGED
|
@@ -240,7 +240,7 @@ export function setStoredValue(submodule, value) {
|
|
|
240
240
|
const valueStr = isPlainObject(value) ? JSON.stringify(value) : value;
|
|
241
241
|
if (storage.type === COOKIE) {
|
|
242
242
|
const setCookie = cookieSetter(submodule);
|
|
243
|
-
setCookie(null,
|
|
243
|
+
setCookie(null, valueStr, expiresStr);
|
|
244
244
|
if (typeof storage.refreshInSeconds === 'number') {
|
|
245
245
|
setCookie('_last', new Date().toUTCString(), expiresStr);
|
|
246
246
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {_each, deepAccess, parseSizesInput, parseUrl, uniques} from '../src/utils.js';
|
|
1
|
+
import { _each, deepAccess, parseSizesInput, parseUrl, uniques, isFn } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import { BANNER } from '../src/mediaTypes.js';
|
|
4
4
|
import { getStorageManager } from '../src/storageManager.js';
|
|
@@ -12,6 +12,7 @@ const TTL_SECONDS = 60 * 5;
|
|
|
12
12
|
const DEAL_ID_EXPIRY = 1000 * 60 * 15;
|
|
13
13
|
const UNIQUE_DEAL_ID_EXPIRY = 1000 * 60 * 60;
|
|
14
14
|
const SESSION_ID_KEY = 'vidSid';
|
|
15
|
+
const OPT_CACHE_KEY = 'vdzwopt';
|
|
15
16
|
export const SUPPORTED_ID_SYSTEMS = {
|
|
16
17
|
'britepoolid': 1,
|
|
17
18
|
'criteoId': 1,
|
|
@@ -58,7 +59,8 @@ function isBidRequestValid(bid) {
|
|
|
58
59
|
|
|
59
60
|
function buildRequest(bid, topWindowUrl, sizes, bidderRequest) {
|
|
60
61
|
const { params, bidId, userId, adUnitCode, schain } = bid;
|
|
61
|
-
const {
|
|
62
|
+
const { ext } = params;
|
|
63
|
+
let { bidFloor } = params;
|
|
62
64
|
const hashUrl = hashCode(topWindowUrl);
|
|
63
65
|
const dealId = getNextDealId(hashUrl);
|
|
64
66
|
const uniqueDealId = getUniqueDealId(hashUrl);
|
|
@@ -66,6 +68,19 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest) {
|
|
|
66
68
|
const cId = extractCID(params);
|
|
67
69
|
const pId = extractPID(params);
|
|
68
70
|
const subDomain = extractSubDomain(params);
|
|
71
|
+
const ptrace = getCacheOpt();
|
|
72
|
+
|
|
73
|
+
if (isFn(bid.getFloor)) {
|
|
74
|
+
const floorInfo = bid.getFloor({
|
|
75
|
+
currency: 'USD',
|
|
76
|
+
mediaType: '*',
|
|
77
|
+
size: '*'
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
if (floorInfo.currency === 'USD') {
|
|
81
|
+
bidFloor = floorInfo.floor;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
69
84
|
|
|
70
85
|
let data = {
|
|
71
86
|
url: encodeURIComponent(topWindowUrl),
|
|
@@ -83,7 +98,8 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest) {
|
|
|
83
98
|
bidderVersion: BIDDER_VERSION,
|
|
84
99
|
prebidVersion: '$prebid.version$',
|
|
85
100
|
res: `${screen.width}x${screen.height}`,
|
|
86
|
-
schain: schain
|
|
101
|
+
schain: schain,
|
|
102
|
+
ptrace: ptrace
|
|
87
103
|
};
|
|
88
104
|
|
|
89
105
|
appendUserIdsToRequestPayload(data, userId);
|
|
@@ -258,6 +274,16 @@ export function getVidazooSessionId() {
|
|
|
258
274
|
return getStorageItem(SESSION_ID_KEY) || '';
|
|
259
275
|
}
|
|
260
276
|
|
|
277
|
+
export function getCacheOpt() {
|
|
278
|
+
let data = storage.getDataFromLocalStorage(OPT_CACHE_KEY);
|
|
279
|
+
if (!data) {
|
|
280
|
+
data = String(Date.now());
|
|
281
|
+
storage.setDataInLocalStorage(OPT_CACHE_KEY, data);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
return data;
|
|
285
|
+
}
|
|
286
|
+
|
|
261
287
|
export function getStorageItem(key) {
|
|
262
288
|
try {
|
|
263
289
|
return tryParseJSON(storage.getDataFromLocalStorage(key));
|