prebid.js 5.16.0 → 5.20.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/.devcontainer/Dockerfile +11 -0
- package/.devcontainer/devcontainer.json +27 -0
- package/.devcontainer/postCreate.sh +6 -0
- package/browsers.json +1 -0
- package/integrationExamples/gpt/akamaidap_segments_example.html +132 -0
- package/modules/.submodules.json +1 -0
- package/modules/adfBidAdapter.js +21 -16
- package/modules/adgenerationBidAdapter.js +28 -4
- package/modules/adkernelBidAdapter.js +3 -1
- package/modules/admixerBidAdapter.js +11 -0
- package/modules/adnuntiusBidAdapter.js +1 -0
- package/modules/adtelligentBidAdapter.js +2 -1
- package/modules/airgridRtdProvider.js +1 -1
- package/modules/akamaiDapRtdProvider.js +474 -0
- package/modules/akamaiDapRtdProvider.md +47 -0
- package/modules/aolBidAdapter.js +2 -1
- package/modules/appnexusBidAdapter.js +5 -3
- package/modules/atsAnalyticsAdapter.js +89 -63
- package/modules/atsAnalyticsAdapter.md +1 -0
- package/modules/betweenBidAdapter.js +20 -3
- package/modules/bliinkBidAdapter.js +58 -32
- package/modules/bliinkBidAdapter.md +29 -6
- package/modules/browsiRtdProvider.js +106 -18
- package/modules/cleanioRtdProvider.js +192 -0
- package/modules/cleanioRtdProvider.md +59 -0
- package/modules/codefuelBidAdapter.js +183 -0
- package/modules/codefuelBidAdapter.md +111 -0
- package/modules/connectIdSystem.js +104 -0
- package/modules/connectIdSystem.md +33 -0
- package/modules/cwireBidAdapter.js +272 -0
- package/modules/cwireBidAdapter.md +43 -0
- package/modules/deepintentBidAdapter.js +106 -9
- package/modules/deepintentBidAdapter.md +36 -1
- package/modules/deltaprojectsBidAdapter.js +252 -0
- package/modules/deltaprojectsBidAdapter.md +32 -0
- package/modules/dgkeywordRtdProvider.js +0 -1
- package/modules/engageyaBidAdapter.js +157 -0
- package/modules/glimpseBidAdapter.js +160 -48
- package/modules/glimpseBidAdapter.md +11 -74
- package/modules/gridBidAdapter.js +1 -0
- package/modules/gridNMBidAdapter.js +7 -6
- package/modules/gumgumBidAdapter.js +16 -2
- package/modules/iasRtdProvider.js +83 -67
- package/modules/inskinBidAdapter.js +7 -3
- package/modules/ixBidAdapter.js +8 -1
- package/modules/jixieBidAdapter.js +8 -2
- package/modules/justpremiumBidAdapter.js +6 -1
- package/modules/kargoBidAdapter.js +14 -7
- package/modules/kargoBidAdapter.md +20 -0
- package/modules/limelightDigitalBidAdapter.js +22 -2
- package/modules/livewrappedAnalyticsAdapter.js +53 -3
- package/modules/mediakeysBidAdapter.js +405 -14
- package/modules/mediakeysBidAdapter.md +108 -0
- package/modules/multibid/index.js +3 -3
- package/modules/mytargetBidAdapter.js +112 -0
- package/modules/nativoBidAdapter.js +48 -29
- package/modules/nativoBidAdapter.md +0 -1
- package/modules/nextMillenniumBidAdapter.js +12 -3
- package/modules/nextrollBidAdapter.js +375 -0
- package/modules/nobidBidAdapter.js +2 -1
- package/modules/oguryBidAdapter.js +36 -7
- package/modules/openxBidAdapter.js +34 -22
- package/modules/operaadsBidAdapter.js +21 -1
- package/modules/otmBidAdapter.js +146 -0
- package/modules/otmBidAdapter.md +27 -26
- package/modules/outbrainBidAdapter.js +5 -0
- package/modules/pixfutureBidAdapter.js +24 -4
- package/modules/pixfutureBidAdapter.md +127 -0
- package/modules/playwireBidAdapter.md +61 -0
- package/modules/prebidServerBidAdapter/index.js +1 -1
- package/modules/proxistoreBidAdapter.js +4 -6
- package/modules/publinkIdSystem.js +17 -7
- package/modules/publinkIdSystem.md +7 -2
- package/modules/pubmaticBidAdapter.js +22 -6
- package/modules/pubmaticBidAdapter.md +1 -1
- package/modules/relaidoBidAdapter.js +8 -2
- package/modules/rtdModule/index.js +2 -2
- package/modules/sharethroughBidAdapter.js +12 -19
- package/modules/slimcutBidAdapter.js +121 -0
- package/modules/sonobiBidAdapter.js +7 -0
- package/modules/sortableBidAdapter.js +1 -0
- package/modules/spotxBidAdapter.js +15 -1
- package/modules/sspBCBidAdapter.js +207 -12
- package/modules/sspBCBidAdapter.md +1 -1
- package/modules/talkadsBidAdapter.js +129 -0
- package/modules/talkadsBidAdapter.md +60 -0
- package/modules/tappxBidAdapter.js +6 -5
- package/modules/teadsBidAdapter.js +3 -0
- package/modules/tripleliftBidAdapter.js +22 -5
- package/modules/trustxBidAdapter.js +17 -11
- package/modules/undertoneBidAdapter.js +9 -5
- package/modules/undertoneBidAdapter.md +5 -1
- package/modules/unicornBidAdapter.js +3 -3
- package/modules/userId/eids.js +18 -0
- package/modules/userId/eids.md +7 -0
- package/modules/userId/userId.md +12 -0
- package/modules/ventesBidAdapter.js +370 -0
- package/modules/ventesBidAdapter.md +94 -0
- package/modules/videobyteBidAdapter.js +13 -6
- package/modules/videobyteBidAdapter.md +49 -0
- package/modules/vidoomyBidAdapter.js +20 -12
- package/modules/visxBidAdapter.js +15 -22
- package/modules/yahoosspBidAdapter.js +637 -0
- package/modules/yahoosspBidAdapter.md +795 -0
- package/modules/yieldlabBidAdapter.js +48 -3
- package/modules/yieldlabBidAdapter.md +16 -1
- package/modules/yieldmoBidAdapter.js +20 -6
- package/modules/yieldmoSyntheticInventoryModule.js +46 -0
- package/modules/yieldmoSyntheticInventoryModule.md +68 -0
- package/package.json +1 -1
- package/src/adapterManager.js +5 -0
- package/src/adapters/bidderFactory.js +4 -3
- package/src/auction.js +11 -11
- package/src/constants.json +1 -0
- package/src/secureCreatives.js +6 -7
- package/src/targeting.js +11 -9
- package/test/.eslintrc.js +2 -1
- package/test/spec/modules/adfBidAdapter_spec.js +83 -29
- package/test/spec/modules/adgenerationBidAdapter_spec.js +121 -50
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +68 -0
- package/test/spec/modules/adtelligentBidAdapter_spec.js +1 -0
- package/test/spec/modules/akamaiDapRtdProvider_spec.js +246 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +2 -1
- package/test/spec/modules/atsAnalyticsAdapter_spec.js +77 -9
- package/test/spec/modules/betweenBidAdapter_spec.js +41 -0
- package/test/spec/modules/bliinkBidAdapter_spec.js +87 -36
- package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
- package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
- package/test/spec/modules/codefuelBidAdapter_spec.js +316 -0
- package/test/spec/modules/connectIdSystem_spec.js +189 -0
- package/test/spec/modules/cwireBidAdapter_spec.js +246 -0
- package/test/spec/modules/deepintentBidAdapter_spec.js +153 -3
- package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
- package/test/spec/modules/engageyaBidAdapter_spec.js +286 -0
- package/test/spec/modules/glimpseBidAdapter_spec.js +302 -204
- package/test/spec/modules/gridNMBidAdapter_spec.js +40 -1
- package/test/spec/modules/gumgumBidAdapter_spec.js +23 -6
- package/test/spec/modules/iasRtdProvider_spec.js +71 -6
- package/test/spec/modules/ixBidAdapter_spec.js +13 -3
- package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
- package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +155 -1
- package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +67 -12
- package/test/spec/modules/mediakeysBidAdapter_spec.js +406 -51
- package/test/spec/modules/multibid_spec.js +31 -31
- package/test/spec/modules/mytargetBidAdapter_spec.js +199 -0
- package/test/spec/modules/nativoBidAdapter_spec.js +50 -3
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +13 -1
- package/test/spec/modules/nextrollBidAdapter_spec.js +290 -0
- package/test/spec/modules/nobidBidAdapter_spec.js +65 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +125 -37
- package/test/spec/modules/openxBidAdapter_spec.js +85 -13
- package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
- package/test/spec/modules/otmBidAdapter_spec.js +67 -0
- package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
- package/test/spec/modules/publinkIdSystem_spec.js +34 -15
- package/test/spec/modules/pubmaticBidAdapter_spec.js +217 -1
- package/test/spec/modules/relaidoBidAdapter_spec.js +21 -20
- package/test/spec/modules/sharethroughBidAdapter_spec.js +156 -136
- package/test/spec/modules/slimcutBidAdapter_spec.js +200 -0
- package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
- package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
- package/test/spec/modules/spotxBidAdapter_spec.js +36 -0
- package/test/spec/modules/sspBCBidAdapter_spec.js +210 -62
- package/test/spec/modules/talkadsBidAdapter_spec.js +231 -0
- package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
- package/test/spec/modules/tripleliftBidAdapter_spec.js +128 -0
- package/test/spec/modules/trustxBidAdapter_spec.js +38 -5
- package/test/spec/modules/undertoneBidAdapter_spec.js +52 -0
- package/test/spec/modules/unicornBidAdapter_spec.js +4 -4
- package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
- package/test/spec/modules/videobyteBidAdapter_spec.js +2 -2
- package/test/spec/modules/visxBidAdapter_spec.js +48 -4
- package/test/spec/modules/yahoosspBidAdapter_spec.js +1332 -0
- package/test/spec/modules/yieldlabBidAdapter_spec.js +65 -1
- package/test/spec/modules/yieldmoBidAdapter_spec.js +30 -9
- package/test/spec/modules/yieldmoSyntheticInventoryModule_spec.js +89 -0
- package/test/spec/unit/core/adapterManager_spec.js +32 -0
- package/test/spec/unit/core/bidderFactory_spec.js +61 -1
- package/test/spec/unit/pbjs_api_spec.js +37 -2
- package/test/spec/unit/secureCreatives_spec.js +54 -25
- package/modules/turktelekomBidAdapter.md +0 -49
|
@@ -13,9 +13,6 @@ export const storage = getStorageManager();
|
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
const analyticsType = 'endpoint';
|
|
16
|
-
// dev endpoints
|
|
17
|
-
// const preflightUrl = 'https://analytics-check.publishersite.xyz/check/';
|
|
18
|
-
// export const analyticsUrl = 'https://analyticsv2.publishersite.xyz';
|
|
19
16
|
|
|
20
17
|
const preflightUrl = 'https://check.analytics.rlcdn.com/check/';
|
|
21
18
|
export const analyticsUrl = 'https://analytics.rlcdn.com';
|
|
@@ -23,7 +20,7 @@ export const analyticsUrl = 'https://analytics.rlcdn.com';
|
|
|
23
20
|
let handlerRequest = [];
|
|
24
21
|
let handlerResponse = [];
|
|
25
22
|
|
|
26
|
-
let atsAnalyticsAdapterVersion =
|
|
23
|
+
let atsAnalyticsAdapterVersion = 3;
|
|
27
24
|
|
|
28
25
|
let browsersList = [
|
|
29
26
|
/* Googlebot */
|
|
@@ -207,12 +204,6 @@ let browsersList = [
|
|
|
207
204
|
},
|
|
208
205
|
];
|
|
209
206
|
|
|
210
|
-
function setSamplingCookie(samplRate) {
|
|
211
|
-
let now = new Date();
|
|
212
|
-
now.setTime(now.getTime() + 3600000);
|
|
213
|
-
storage.setCookie('_lr_sampling_rate', samplRate, now.toUTCString());
|
|
214
|
-
}
|
|
215
|
-
|
|
216
207
|
let listOfSupportedBrowsers = ['Safari', 'Chrome', 'Firefox', 'Microsoft Edge'];
|
|
217
208
|
|
|
218
209
|
function bidRequestedHandler(args) {
|
|
@@ -231,7 +222,8 @@ function bidRequestedHandler(args) {
|
|
|
231
222
|
auction_start: new Date(args.auctionStart).toJSON(),
|
|
232
223
|
domain: window.location.hostname,
|
|
233
224
|
pid: atsAnalyticsAdapter.context.pid,
|
|
234
|
-
adapter_version: atsAnalyticsAdapterVersion
|
|
225
|
+
adapter_version: atsAnalyticsAdapterVersion,
|
|
226
|
+
bid_won: false
|
|
235
227
|
};
|
|
236
228
|
});
|
|
237
229
|
return requests;
|
|
@@ -260,13 +252,14 @@ export function parseBrowser() {
|
|
|
260
252
|
}
|
|
261
253
|
}
|
|
262
254
|
|
|
263
|
-
function sendDataToAnalytic () {
|
|
255
|
+
function sendDataToAnalytic (events) {
|
|
264
256
|
// send data to ats analytic endpoint
|
|
265
257
|
try {
|
|
266
|
-
let dataToSend = {'Data':
|
|
258
|
+
let dataToSend = {'Data': events};
|
|
267
259
|
let strJSON = JSON.stringify(dataToSend);
|
|
268
260
|
logInfo('ATS Analytics - tried to send analytics data!');
|
|
269
261
|
ajax(analyticsUrl, function () {
|
|
262
|
+
logInfo('ATS Analytics - events sent successfully!');
|
|
270
263
|
}, strJSON, {method: 'POST', contentType: 'application/json'});
|
|
271
264
|
} catch (err) {
|
|
272
265
|
logError('ATS Analytics - request encounter an error: ', err);
|
|
@@ -274,41 +267,26 @@ function sendDataToAnalytic () {
|
|
|
274
267
|
}
|
|
275
268
|
|
|
276
269
|
// preflight request, to check did publisher have permission to send data to analytics endpoint
|
|
277
|
-
function preflightRequest (envelopeSourceCookieValue) {
|
|
270
|
+
function preflightRequest (envelopeSourceCookieValue, events) {
|
|
278
271
|
logInfo('ATS Analytics - preflight request!');
|
|
279
|
-
ajax(preflightUrl + atsAnalyticsAdapter.context.pid,
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
handlerResponse.push(bidResponseHandler(args));
|
|
296
|
-
}
|
|
297
|
-
if (evtype === CONSTANTS.EVENTS.AUCTION_END) {
|
|
298
|
-
if (handlerRequest.length) {
|
|
299
|
-
let events = [];
|
|
300
|
-
if (handlerResponse.length) {
|
|
301
|
-
events = handlerRequest.filter(request => handlerResponse.filter(function(response) {
|
|
302
|
-
if (request.bid_id === response.bid_id) {
|
|
303
|
-
Object.assign(request, response);
|
|
304
|
-
}
|
|
305
|
-
}));
|
|
306
|
-
} else {
|
|
307
|
-
events = handlerRequest;
|
|
272
|
+
ajax(preflightUrl + atsAnalyticsAdapter.context.pid,
|
|
273
|
+
{
|
|
274
|
+
success: function (data) {
|
|
275
|
+
let samplingRateObject = JSON.parse(data);
|
|
276
|
+
logInfo('ATS Analytics - Sampling Rate: ', samplingRateObject);
|
|
277
|
+
let samplingRate = samplingRateObject.samplingRate;
|
|
278
|
+
atsAnalyticsAdapter.setSamplingCookie(samplingRate);
|
|
279
|
+
let samplingRateNumber = Number(samplingRate);
|
|
280
|
+
if (data && samplingRate && atsAnalyticsAdapter.shouldFireRequest(samplingRateNumber) && envelopeSourceCookieValue != null) {
|
|
281
|
+
logInfo('ATS Analytics - events to send: ', events);
|
|
282
|
+
sendDataToAnalytic(events);
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
error: function () {
|
|
286
|
+
atsAnalyticsAdapter.setSamplingCookie(0);
|
|
287
|
+
logInfo('ATS Analytics - Sampling Rate Request Error!');
|
|
308
288
|
}
|
|
309
|
-
|
|
310
|
-
}
|
|
311
|
-
}
|
|
289
|
+
}, undefined, {method: 'GET', crossOrigin: true});
|
|
312
290
|
}
|
|
313
291
|
|
|
314
292
|
let atsAnalyticsAdapter = Object.assign(adapter(
|
|
@@ -318,22 +296,7 @@ let atsAnalyticsAdapter = Object.assign(adapter(
|
|
|
318
296
|
{
|
|
319
297
|
track({eventType, args}) {
|
|
320
298
|
if (typeof args !== 'undefined') {
|
|
321
|
-
callHandler(eventType, args);
|
|
322
|
-
}
|
|
323
|
-
if (eventType === CONSTANTS.EVENTS.AUCTION_END) {
|
|
324
|
-
let envelopeSourceCookieValue = storage.getCookie('_lr_env_src_ats');
|
|
325
|
-
try {
|
|
326
|
-
let samplingRateCookie = storage.getCookie('_lr_sampling_rate');
|
|
327
|
-
if (!samplingRateCookie) {
|
|
328
|
-
preflightRequest(envelopeSourceCookieValue);
|
|
329
|
-
} else {
|
|
330
|
-
if (atsAnalyticsAdapter.shouldFireRequest(parseInt(samplingRateCookie)) && envelopeSourceCookieValue != null) {
|
|
331
|
-
sendDataToAnalytic();
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
} catch (err) {
|
|
335
|
-
logError('ATS Analytics - preflight request encounter an error: ', err);
|
|
336
|
-
}
|
|
299
|
+
atsAnalyticsAdapter.callHandler(eventType, args);
|
|
337
300
|
}
|
|
338
301
|
}
|
|
339
302
|
});
|
|
@@ -356,6 +319,13 @@ atsAnalyticsAdapter.shouldFireRequest = function (samplingRate) {
|
|
|
356
319
|
atsAnalyticsAdapter.getUserAgent = function () {
|
|
357
320
|
return window.navigator.userAgent;
|
|
358
321
|
};
|
|
322
|
+
|
|
323
|
+
atsAnalyticsAdapter.setSamplingCookie = function (samplRate) {
|
|
324
|
+
const now = new Date();
|
|
325
|
+
now.setTime(now.getTime() + 86400000);
|
|
326
|
+
storage.setCookie('_lr_sampling_rate', samplRate, now.toUTCString());
|
|
327
|
+
}
|
|
328
|
+
|
|
359
329
|
// override enableAnalytics so we can get access to the config passed in from the page
|
|
360
330
|
atsAnalyticsAdapter.enableAnalytics = function (config) {
|
|
361
331
|
if (!config.options.pid) {
|
|
@@ -364,13 +334,69 @@ atsAnalyticsAdapter.enableAnalytics = function (config) {
|
|
|
364
334
|
}
|
|
365
335
|
atsAnalyticsAdapter.context = {
|
|
366
336
|
events: [],
|
|
367
|
-
pid: config.options.pid
|
|
337
|
+
pid: config.options.pid,
|
|
338
|
+
bidWonTimeout: config.options.bidWonTimeout
|
|
368
339
|
};
|
|
369
340
|
let initOptions = config.options;
|
|
370
341
|
logInfo('ATS Analytics - adapter enabled! ');
|
|
371
342
|
atsAnalyticsAdapter.originEnableAnalytics(initOptions); // call the base class function
|
|
372
343
|
};
|
|
373
344
|
|
|
345
|
+
atsAnalyticsAdapter.callHandler = function (evtype, args) {
|
|
346
|
+
if (evtype === CONSTANTS.EVENTS.BID_REQUESTED) {
|
|
347
|
+
handlerRequest = handlerRequest.concat(bidRequestedHandler(args));
|
|
348
|
+
} else if (evtype === CONSTANTS.EVENTS.BID_RESPONSE) {
|
|
349
|
+
handlerResponse.push(bidResponseHandler(args));
|
|
350
|
+
}
|
|
351
|
+
if (evtype === CONSTANTS.EVENTS.AUCTION_END) {
|
|
352
|
+
let bidWonTimeout = atsAnalyticsAdapter.context.bidWonTimeout ? atsAnalyticsAdapter.context.bidWonTimeout : 2000;
|
|
353
|
+
let events = [];
|
|
354
|
+
setTimeout(() => {
|
|
355
|
+
let winningBids = $$PREBID_GLOBAL$$.getAllWinningBids();
|
|
356
|
+
logInfo('ATS Analytics - winning bids: ', winningBids)
|
|
357
|
+
// prepare format data for sending to analytics endpoint
|
|
358
|
+
if (handlerRequest.length) {
|
|
359
|
+
let wonEvent = {};
|
|
360
|
+
if (handlerResponse.length) {
|
|
361
|
+
events = handlerRequest.filter(request => handlerResponse.filter(function (response) {
|
|
362
|
+
if (request.bid_id === response.bid_id) {
|
|
363
|
+
Object.assign(request, response);
|
|
364
|
+
}
|
|
365
|
+
}));
|
|
366
|
+
if (winningBids.length) {
|
|
367
|
+
events = events.filter(event => winningBids.filter(function (won) {
|
|
368
|
+
wonEvent.bid_id = won.requestId;
|
|
369
|
+
wonEvent.bid_won = true;
|
|
370
|
+
if (event.bid_id === wonEvent.bid_id) {
|
|
371
|
+
Object.assign(event, wonEvent);
|
|
372
|
+
}
|
|
373
|
+
}))
|
|
374
|
+
}
|
|
375
|
+
} else {
|
|
376
|
+
events = handlerRequest;
|
|
377
|
+
}
|
|
378
|
+
// check should we send data to analytics or not, check first cookie value _lr_sampling_rate
|
|
379
|
+
try {
|
|
380
|
+
let envelopeSourceCookieValue = storage.getCookie('_lr_env_src_ats');
|
|
381
|
+
let samplingRateCookie = storage.getCookie('_lr_sampling_rate');
|
|
382
|
+
if (!samplingRateCookie) {
|
|
383
|
+
preflightRequest(envelopeSourceCookieValue, events);
|
|
384
|
+
} else {
|
|
385
|
+
if (atsAnalyticsAdapter.shouldFireRequest(parseInt(samplingRateCookie)) && envelopeSourceCookieValue != null) {
|
|
386
|
+
logInfo('ATS Analytics - events to send: ', events);
|
|
387
|
+
sendDataToAnalytic(events);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
// empty events array to not send duplicate events
|
|
391
|
+
events = [];
|
|
392
|
+
} catch (err) {
|
|
393
|
+
logError('ATS Analytics - preflight request encounter an error: ', err);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}, bidWonTimeout);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
374
400
|
adaptermanager.registerAnalyticsAdapter({
|
|
375
401
|
adapter: atsAnalyticsAdapter,
|
|
376
402
|
code: 'atsAnalytics',
|
|
@@ -17,6 +17,7 @@ Analytics adapter for Authenticated Traffic Solution(ATS), provided by LiveRamp.
|
|
|
17
17
|
provider: 'atsAnalytics',
|
|
18
18
|
options: {
|
|
19
19
|
pid: '999', // publisher ID
|
|
20
|
+
bidWonTimeout: 2000 // on auction end for how long to wait for bid_won events, by default it's 2000 miliseconds, if it's not set it will be 2000 miliseconds.
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
```
|
|
@@ -3,12 +3,14 @@ import { getAdUnitSizes, parseSizesInput } from '../src/utils.js';
|
|
|
3
3
|
import { getRefererInfo } from '../src/refererDetection.js';
|
|
4
4
|
|
|
5
5
|
const BIDDER_CODE = 'between';
|
|
6
|
-
|
|
6
|
+
let ENDPOINT = 'https://ads.betweendigital.com/adjson?t=prebid';
|
|
7
|
+
const CODE_TYPES = ['inpage', 'preroll', 'midroll', 'postroll'];
|
|
7
8
|
|
|
9
|
+
const includes = require('core-js-pure/features/array/includes.js');
|
|
8
10
|
export const spec = {
|
|
9
11
|
code: BIDDER_CODE,
|
|
10
12
|
aliases: ['btw'],
|
|
11
|
-
supportedMediaTypes: ['banner'],
|
|
13
|
+
supportedMediaTypes: ['banner', 'video'],
|
|
12
14
|
/**
|
|
13
15
|
* Determines whether or not the given bid request is valid.
|
|
14
16
|
*
|
|
@@ -30,6 +32,8 @@ export const spec = {
|
|
|
30
32
|
const refInfo = getRefererInfo();
|
|
31
33
|
|
|
32
34
|
validBidRequests.forEach((i) => {
|
|
35
|
+
const video = i.mediaTypes && i.mediaTypes.video;
|
|
36
|
+
|
|
33
37
|
let params = {
|
|
34
38
|
eids: getUsersIds(i),
|
|
35
39
|
sizes: parseSizesInput(getAdUnitSizes(i)),
|
|
@@ -38,12 +42,21 @@ export const spec = {
|
|
|
38
42
|
tz: getTz(),
|
|
39
43
|
fl: getFl(),
|
|
40
44
|
rr: getRr(),
|
|
41
|
-
s: i.params.s,
|
|
45
|
+
s: i.params && i.params.s,
|
|
42
46
|
bidid: i.bidId,
|
|
43
47
|
transactionid: i.transactionId,
|
|
44
48
|
auctionid: i.auctionId
|
|
45
49
|
};
|
|
46
50
|
|
|
51
|
+
if (video) {
|
|
52
|
+
params.mediaType = 2;
|
|
53
|
+
params.maxd = video.maxd;
|
|
54
|
+
params.mind = video.mind;
|
|
55
|
+
params.pos = 'atf';
|
|
56
|
+
ENDPOINT += '&jst=pvc';
|
|
57
|
+
params.codeType = includes(CODE_TYPES, video.codeType) ? video.codeType : 'inpage';
|
|
58
|
+
}
|
|
59
|
+
|
|
47
60
|
if (i.params.itu !== undefined) {
|
|
48
61
|
params.itu = i.params.itu;
|
|
49
62
|
}
|
|
@@ -94,12 +107,15 @@ export const spec = {
|
|
|
94
107
|
*/
|
|
95
108
|
interpretResponse: function(serverResponse, bidRequest) {
|
|
96
109
|
const bidResponses = [];
|
|
110
|
+
|
|
97
111
|
for (var i = 0; i < serverResponse.body.length; i++) {
|
|
98
112
|
let bidResponse = {
|
|
99
113
|
requestId: serverResponse.body[i].bidid,
|
|
100
114
|
cpm: serverResponse.body[i].cpm || 0,
|
|
101
115
|
width: serverResponse.body[i].w,
|
|
102
116
|
height: serverResponse.body[i].h,
|
|
117
|
+
vastXml: serverResponse.body[i].vastXml,
|
|
118
|
+
mediaType: serverResponse.body[i].mediaType,
|
|
103
119
|
ttl: serverResponse.body[i].ttl,
|
|
104
120
|
creativeId: serverResponse.body[i].creativeid,
|
|
105
121
|
currency: serverResponse.body[i].currency || 'RUB',
|
|
@@ -109,6 +125,7 @@ export const spec = {
|
|
|
109
125
|
advertiserDomains: serverResponse.body[i].adomain ? serverResponse.body[i].adomain : []
|
|
110
126
|
}
|
|
111
127
|
};
|
|
128
|
+
|
|
112
129
|
bidResponses.push(bidResponse);
|
|
113
130
|
}
|
|
114
131
|
return bidResponses;
|
|
@@ -10,10 +10,9 @@ export const META_KEYWORDS = 'keywords'
|
|
|
10
10
|
export const META_DESCRIPTION = 'description'
|
|
11
11
|
|
|
12
12
|
const VIDEO = 'video'
|
|
13
|
-
const NATIVE = 'native'
|
|
14
13
|
const BANNER = 'banner'
|
|
15
14
|
|
|
16
|
-
const supportedMediaTypes = [BANNER, VIDEO
|
|
15
|
+
const supportedMediaTypes = [BANNER, VIDEO]
|
|
17
16
|
const aliasBidderCode = ['bk']
|
|
18
17
|
|
|
19
18
|
export function getMetaList(name) {
|
|
@@ -90,7 +89,11 @@ export const parseXML = (content) => {
|
|
|
90
89
|
if (typeof content !== 'string' || content.length === 0) return null
|
|
91
90
|
|
|
92
91
|
const parser = new DOMParser()
|
|
93
|
-
|
|
92
|
+
let xml;
|
|
93
|
+
|
|
94
|
+
try {
|
|
95
|
+
xml = parser.parseFromString(content, 'text/xml')
|
|
96
|
+
} catch (e) {}
|
|
94
97
|
|
|
95
98
|
if (xml &&
|
|
96
99
|
xml.getElementsByTagName('VAST')[0] &&
|
|
@@ -104,19 +107,19 @@ export const parseXML = (content) => {
|
|
|
104
107
|
/**
|
|
105
108
|
* @param bidRequest
|
|
106
109
|
* @param bliinkCreative
|
|
107
|
-
* @return {{cpm, netRevenue: boolean,
|
|
110
|
+
* @return {{cpm, netRevenue: boolean, requestId, width: (*|number), currency, ttl: number, creativeId, height: (*|number)} & {mediaType: string, vastXml}}
|
|
108
111
|
*/
|
|
109
112
|
export const buildBid = (bidRequest, bliinkCreative) => {
|
|
110
113
|
if (!bidRequest && !bliinkCreative) return null
|
|
111
114
|
|
|
112
115
|
const body = {
|
|
113
116
|
requestId: bidRequest.bidId,
|
|
117
|
+
currency: bliinkCreative.currency,
|
|
114
118
|
cpm: bliinkCreative.price,
|
|
115
119
|
creativeId: bliinkCreative.creativeId,
|
|
116
|
-
|
|
120
|
+
width: (bidRequest.sizes && bidRequest.sizes[0][0]) || 1,
|
|
121
|
+
height: (bidRequest.sizes && bidRequest.sizes[0][1]) || 1,
|
|
117
122
|
netRevenue: false,
|
|
118
|
-
width: 1,
|
|
119
|
-
height: 1,
|
|
120
123
|
ttl: 3600,
|
|
121
124
|
}
|
|
122
125
|
|
|
@@ -131,14 +134,20 @@ export const buildBid = (bidRequest, bliinkCreative) => {
|
|
|
131
134
|
|
|
132
135
|
delete bidRequest['bids']
|
|
133
136
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
137
|
+
switch (bliinkCreative.media_type) {
|
|
138
|
+
case VIDEO:
|
|
139
|
+
return Object.assign(body, {
|
|
140
|
+
mediaType: VIDEO,
|
|
141
|
+
vastXml: bliinkCreative.content,
|
|
142
|
+
})
|
|
143
|
+
case BANNER:
|
|
144
|
+
return Object.assign(body, {
|
|
145
|
+
mediaType: BANNER,
|
|
146
|
+
ad: (bliinkCreative && bliinkCreative.content && bliinkCreative.content.creative && bliinkCreative.content.creative.adm) || '',
|
|
147
|
+
})
|
|
148
|
+
default:
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
142
151
|
}
|
|
143
152
|
|
|
144
153
|
/**
|
|
@@ -209,7 +218,7 @@ export const buildRequests = (_, bidderRequest) => {
|
|
|
209
218
|
* @return
|
|
210
219
|
*/
|
|
211
220
|
const interpretResponse = (serverResponse, request) => {
|
|
212
|
-
if ((serverResponse && serverResponse.mode === 'no-ad')
|
|
221
|
+
if ((serverResponse && serverResponse.mode === 'no-ad')) {
|
|
213
222
|
return []
|
|
214
223
|
}
|
|
215
224
|
|
|
@@ -218,23 +227,40 @@ const interpretResponse = (serverResponse, request) => {
|
|
|
218
227
|
|
|
219
228
|
const xml = parseXML(body)
|
|
220
229
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
230
|
+
let creative;
|
|
231
|
+
|
|
232
|
+
switch (serverBody.bids[0].params.placement) {
|
|
233
|
+
case xml && VIDEO:
|
|
234
|
+
const price = xml.getElementsByTagName('Price') && xml.getElementsByTagName('Price')[0]
|
|
235
|
+
const currency = xml.getElementsByTagName('Currency') && xml.getElementsByTagName('Currency')[0]
|
|
236
|
+
const creativeId = xml.getElementsByTagName('CreativeId') && xml.getElementsByTagName('CreativeId')[0]
|
|
237
|
+
|
|
238
|
+
creative = {
|
|
239
|
+
content: body,
|
|
240
|
+
price: (price && price.textContent) || 0,
|
|
241
|
+
currency: (currency && currency.textContent) || 'EUR',
|
|
242
|
+
creativeId: creativeId || 0,
|
|
243
|
+
media_type: 'video',
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return buildBid(serverBody.bids[0], creative)
|
|
247
|
+
case BANNER:
|
|
248
|
+
if (body) {
|
|
249
|
+
creative = {
|
|
250
|
+
content: body,
|
|
251
|
+
price: body.price,
|
|
252
|
+
currency: body.currency,
|
|
253
|
+
creativeId: 0,
|
|
254
|
+
media_type: 'banner',
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
return buildBid(serverBody.bids[0], creative)
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
break
|
|
261
|
+
default:
|
|
262
|
+
break
|
|
235
263
|
}
|
|
236
|
-
|
|
237
|
-
return []
|
|
238
264
|
}
|
|
239
265
|
|
|
240
266
|
/**
|
|
@@ -31,7 +31,7 @@ const adUnits = [
|
|
|
31
31
|
bidder: 'bliink',
|
|
32
32
|
params: {
|
|
33
33
|
placement: 'banner',
|
|
34
|
-
tagId: '
|
|
34
|
+
tagId: '41'
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
]
|
|
@@ -50,11 +50,34 @@ const adUnits = [
|
|
|
50
50
|
mediaTypes: {
|
|
51
51
|
video: {
|
|
52
52
|
context: 'instream',
|
|
53
|
-
playerSize: [640,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
playerSize: [[640,480]],
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
bids: [
|
|
57
|
+
{
|
|
58
|
+
bidder: 'bliink',
|
|
59
|
+
params: {
|
|
60
|
+
tagId: '41',
|
|
61
|
+
placement: 'video',
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Sample outstream Video Ad Unit
|
|
70
|
+
|
|
71
|
+
```js
|
|
72
|
+
const adUnits = [
|
|
73
|
+
{
|
|
74
|
+
code: '/19968336/prebid_cache_video_adunit',
|
|
75
|
+
sizes: [[640,480]],
|
|
76
|
+
mediaType: 'video',
|
|
77
|
+
mediaTypes: {
|
|
78
|
+
video: {
|
|
79
|
+
context: 'outstream',
|
|
80
|
+
playerSize: [[640,480]],
|
|
58
81
|
}
|
|
59
82
|
},
|
|
60
83
|
bids: [
|