prebid.js 7.49.0 → 7.51.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/33acrossIdSystem.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adhashBidAdapter.js +1 -1
- package/dist/adkernelBidAdapter.js +1 -1
- package/dist/admanBidAdapter.js +1 -1
- package/dist/adnuntiusBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adrinoBidAdapter.js +1 -1
- package/dist/adtelligentBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.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/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/cleanioRtdProvider.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/confiantRtdProvider.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/dependencies.json +3 -0
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/glimpseBidAdapter.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/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/kulturemediaBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.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/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +140 -139
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/permutiveRtdProvider.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/prebidServerBidAdapter.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/retailspotBidAdapter.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/silverpushBidAdapter.js +1 -0
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.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/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.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/uid2IdSystem.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/video.js +1 -1
- package/dist/videoModule.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- 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/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/integrationExamples/videoModule/eventsUI/eventsUI.css +205 -0
- package/integrationExamples/videoModule/eventsUI/eventsUI.js +181 -0
- package/integrationExamples/videoModule/jwplayer/eventsUI.html +295 -0
- package/integrationExamples/videoModule/videojs/eventsUI.html +319 -0
- package/libraries/video/shared/helpers.js +14 -0
- package/modules/33acrossBidAdapter.js +1 -1
- package/modules/adhashBidAdapter.js +28 -17
- package/modules/adkernelBidAdapter.js +2 -1
- package/modules/admanBidAdapter.js +30 -22
- package/modules/adnuntiusBidAdapter.js +98 -79
- package/modules/adnuntiusBidAdapter.md +2 -1
- package/modules/adqueryBidAdapter.js +7 -1
- package/modules/adrinoBidAdapter.js +1 -0
- package/modules/adtelligentBidAdapter.js +4 -2
- package/modules/appnexusBidAdapter.js +2 -0
- package/modules/beopBidAdapter.js +1 -0
- package/modules/cleanioRtdProvider.js +2 -4
- package/modules/confiantRtdProvider.js +15 -12
- package/modules/conversantAnalyticsAdapter.js +7 -5
- package/modules/conversantBidAdapter.js +1 -1
- package/modules/criteoBidAdapter.js +58 -4
- package/modules/freewheel-sspBidAdapter.js +10 -2
- package/modules/gridBidAdapter.js +3 -0
- package/modules/gumgumBidAdapter.js +5 -0
- package/modules/liveIntentIdSystem.js +8 -4
- package/modules/magniteAnalyticsAdapter.js +26 -3
- package/modules/minutemediaBidAdapter.js +13 -3
- package/modules/permutiveRtdProvider.js +9 -38
- package/modules/prebidServerBidAdapter/index.js +7 -8
- package/modules/pubmaticBidAdapter.js +1 -0
- package/modules/riseBidAdapter.js +13 -3
- package/modules/rtbhouseBidAdapter.md +24 -0
- package/modules/rubiconBidAdapter.js +6 -2
- package/modules/silverpushBidAdapter.js +326 -0
- package/modules/silverpushBidAdapter.md +107 -0
- package/modules/underdogmediaBidAdapter.js +2 -2
- package/modules/videoModule/adQueue.js +2 -2
- package/modules/videoModule/index.js +9 -5
- package/modules/yahoosspBidAdapter.js +6 -0
- package/modules/yahoosspBidAdapter.md +37 -0
- package/package.json +1 -1
- package/src/adloader.js +2 -1
- package/src/native.js +20 -4
- package/test/spec/modules/33acrossBidAdapter_spec.js +4 -3
- package/test/spec/modules/adhashBidAdapter_spec.js +51 -1
- package/test/spec/modules/admanBidAdapter_spec.js +1 -2
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +535 -264
- package/test/spec/modules/adqueryBidAdapter_spec.js +9 -0
- package/test/spec/modules/adrinoBidAdapter_spec.js +4 -0
- package/test/spec/modules/adtelligentBidAdapter_spec.js +1 -0
- package/test/spec/modules/beopBidAdapter_spec.js +4 -0
- package/test/spec/modules/cleanioRtdProvider_spec.js +7 -8
- package/test/spec/modules/confiantRtdProvider_spec.js +4 -1
- package/test/spec/modules/conversantBidAdapter_spec.js +2 -1
- package/test/spec/modules/criteoBidAdapter_spec.js +159 -2
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +5 -2
- package/test/spec/modules/gridBidAdapter_spec.js +3 -0
- package/test/spec/modules/gumgumBidAdapter_spec.js +14 -0
- package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +28 -0
- package/test/spec/modules/liveIntentIdSystem_spec.js +45 -0
- package/test/spec/modules/magniteAnalyticsAdapter_spec.js +16 -36
- package/test/spec/modules/mass_spec.js +2 -0
- package/test/spec/modules/minutemediaBidAdapter_spec.js +69 -1
- package/test/spec/modules/permutiveRtdProvider_spec.js +0 -20
- package/test/spec/modules/prebidServerBidAdapter_spec.js +3 -1
- package/test/spec/modules/pubmaticBidAdapter_spec.js +7 -0
- package/test/spec/modules/riseBidAdapter_spec.js +69 -1
- package/test/spec/modules/rubiconBidAdapter_spec.js +143 -67
- package/test/spec/modules/silverpushBidAdapter_spec.js +394 -0
- package/test/spec/modules/underdogmediaBidAdapter_spec.js +1 -1
- package/test/spec/modules/videoModule/shared/helpers_spec.js +22 -0
- package/test/spec/modules/yahoosspBidAdapter_spec.js +60 -1
- package/test/spec/native_spec.js +12 -12
|
@@ -8,8 +8,11 @@ import { verify } from 'criteo-direct-rsa-validate/build/verify.js'; // ref#2
|
|
|
8
8
|
import { getStorageManager } from '../src/storageManager.js';
|
|
9
9
|
import { getRefererInfo } from '../src/refererDetection.js';
|
|
10
10
|
import { hasPurpose1Consent } from '../src/utils/gpdr.js';
|
|
11
|
+
import { Renderer } from '../src/Renderer.js';
|
|
12
|
+
import { OUTSTREAM } from '../src/video.js';
|
|
13
|
+
|
|
11
14
|
const GVLID = 91;
|
|
12
|
-
export const ADAPTER_VERSION =
|
|
15
|
+
export const ADAPTER_VERSION = 36;
|
|
13
16
|
const BIDDER_CODE = 'criteo';
|
|
14
17
|
const CDB_ENDPOINT = 'https://bidder.criteo.com/cdb';
|
|
15
18
|
const PROFILE_ID_INLINE = 207;
|
|
@@ -29,6 +32,7 @@ export const FAST_BID_VERSION_CURRENT = 135;
|
|
|
29
32
|
const FAST_BID_VERSION_LATEST = 'latest';
|
|
30
33
|
const FAST_BID_VERSION_NONE = 'none';
|
|
31
34
|
const PUBLISHER_TAG_URL_TEMPLATE = 'https://static.criteo.net/js/ld/publishertag.prebid' + FAST_BID_VERSION_PLACEHOLDER + '.js';
|
|
35
|
+
const PUBLISHER_TAG_OUTSTREAM_SRC = 'https://static.criteo.net/js/ld/publishertag.renderer.js'
|
|
32
36
|
const FAST_BID_PUBKEY_E = 65537;
|
|
33
37
|
const FAST_BID_PUBKEY_N = 'ztQYwCE5BU7T9CDM5he6rKoabstXRmkzx54zFPZkWbK530dwtLBDeaWBMxHBUT55CYyboR/EZ4efghPi3CoNGfGWezpjko9P6p2EwGArtHEeS4slhu/SpSIFMjG6fdrpRoNuIAMhq1Z+Pr/+HOd1pThFKeGFr2/NhtAg+TXAzaU=';
|
|
34
38
|
|
|
@@ -230,6 +234,9 @@ export const spec = {
|
|
|
230
234
|
if (slot.adomain) {
|
|
231
235
|
bid.meta = Object.assign({}, bid.meta, { advertiserDomains: [slot.adomain].flat() });
|
|
232
236
|
}
|
|
237
|
+
if (slot.ext?.meta?.networkName) {
|
|
238
|
+
bid.meta = Object.assign({}, bid.meta, {networkName: slot.ext.meta.networkName})
|
|
239
|
+
}
|
|
233
240
|
if (slot.native) {
|
|
234
241
|
if (bidRequest.params.nativeCallback) {
|
|
235
242
|
bid.ad = createNativeAd(bidId, slot.native, bidRequest.params.nativeCallback);
|
|
@@ -240,6 +247,11 @@ export const spec = {
|
|
|
240
247
|
} else if (slot.video) {
|
|
241
248
|
bid.vastUrl = slot.displayurl;
|
|
242
249
|
bid.mediaType = VIDEO;
|
|
250
|
+
const context = deepAccess(bidRequest, 'mediaTypes.video.context');
|
|
251
|
+
// if outstream video, add a default render for it.
|
|
252
|
+
if (context === OUTSTREAM) {
|
|
253
|
+
bid.renderer = createOutstreamVideoRenderer(slot);
|
|
254
|
+
}
|
|
243
255
|
} else {
|
|
244
256
|
bid.ad = slot.creative;
|
|
245
257
|
}
|
|
@@ -249,7 +261,6 @@ export const spec = {
|
|
|
249
261
|
|
|
250
262
|
return bids;
|
|
251
263
|
},
|
|
252
|
-
|
|
253
264
|
/**
|
|
254
265
|
* @param {TimedOutBid} timeoutData
|
|
255
266
|
*/
|
|
@@ -407,6 +418,7 @@ function checkNativeSendId(bidRequest) {
|
|
|
407
418
|
function buildCdbRequest(context, bidRequests, bidderRequest) {
|
|
408
419
|
let networkId;
|
|
409
420
|
let schain;
|
|
421
|
+
let userIdAsEids;
|
|
410
422
|
const request = {
|
|
411
423
|
publisher: {
|
|
412
424
|
url: context.url,
|
|
@@ -418,6 +430,9 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
|
|
|
418
430
|
gpp_sid: bidderRequest.ortb2?.regs?.gpp_sid
|
|
419
431
|
},
|
|
420
432
|
slots: bidRequests.map(bidRequest => {
|
|
433
|
+
if (!userIdAsEids) {
|
|
434
|
+
userIdAsEids = bidRequest.userIdAsEids;
|
|
435
|
+
}
|
|
421
436
|
networkId = bidRequest.params.networkId || networkId;
|
|
422
437
|
schain = bidRequest.schain || schain;
|
|
423
438
|
const slot = {
|
|
@@ -431,11 +446,16 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
|
|
|
431
446
|
if (deepAccess(bidRequest, 'ortb2Imp.ext')) {
|
|
432
447
|
slot.ext = bidRequest.ortb2Imp.ext;
|
|
433
448
|
}
|
|
449
|
+
|
|
450
|
+
if (deepAccess(bidRequest, 'ortb2Imp.rwdd')) {
|
|
451
|
+
slot.rwdd = bidRequest.ortb2Imp.rwdd;
|
|
452
|
+
}
|
|
453
|
+
|
|
434
454
|
if (bidRequest.params.ext) {
|
|
435
455
|
slot.ext = Object.assign({}, slot.ext, bidRequest.params.ext);
|
|
436
456
|
}
|
|
437
457
|
if (bidRequest.nativeOrtbRequest?.assets) {
|
|
438
|
-
slot.ext = Object.assign({}, slot.ext, {assets: bidRequest.nativeOrtbRequest.assets});
|
|
458
|
+
slot.ext = Object.assign({}, slot.ext, { assets: bidRequest.nativeOrtbRequest.assets });
|
|
439
459
|
}
|
|
440
460
|
if (bidRequest.params.publisherSubId) {
|
|
441
461
|
slot.publishersubid = bidRequest.params.publisherSubId;
|
|
@@ -465,7 +485,8 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
|
|
|
465
485
|
placement: bidRequest.mediaTypes.video.placement,
|
|
466
486
|
minduration: bidRequest.mediaTypes.video.minduration,
|
|
467
487
|
playbackmethod: bidRequest.mediaTypes.video.playbackmethod,
|
|
468
|
-
startdelay: bidRequest.mediaTypes.video.startdelay
|
|
488
|
+
startdelay: bidRequest.mediaTypes.video.startdelay,
|
|
489
|
+
plcmt: bidRequest.mediaTypes.video.plcmt
|
|
469
490
|
};
|
|
470
491
|
const paramsVideo = bidRequest.params.video;
|
|
471
492
|
if (paramsVideo !== undefined) {
|
|
@@ -516,6 +537,10 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
|
|
|
516
537
|
request.user.ext = request.user.ext || {};
|
|
517
538
|
request.user.ext.sua = bidderRequest.ortb2?.device?.sua || {};
|
|
518
539
|
}
|
|
540
|
+
if (userIdAsEids) {
|
|
541
|
+
request.user.ext = request.user.ext || {};
|
|
542
|
+
request.user.ext.eids = [...userIdAsEids];
|
|
543
|
+
}
|
|
519
544
|
return request;
|
|
520
545
|
}
|
|
521
546
|
|
|
@@ -695,6 +720,35 @@ export function getFastBidUrl(fastBidVersion) {
|
|
|
695
720
|
return PUBLISHER_TAG_URL_TEMPLATE.replace(FAST_BID_VERSION_PLACEHOLDER, version);
|
|
696
721
|
}
|
|
697
722
|
|
|
723
|
+
function createOutstreamVideoRenderer(slot) {
|
|
724
|
+
if (slot.ext.videoPlayerConfig === undefined || slot.ext.videoPlayerType === undefined) {
|
|
725
|
+
return undefined;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
const config = {
|
|
729
|
+
documentResolver: (bid, sourceDocument, renderDocument) => {
|
|
730
|
+
return renderDocument ?? sourceDocument;
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
const render = (bid, renderDocument) => {
|
|
735
|
+
let payload = {
|
|
736
|
+
slotid: slot.impid,
|
|
737
|
+
vastUrl: slot.displayurl,
|
|
738
|
+
vastXml: slot.creative,
|
|
739
|
+
documentContext: renderDocument,
|
|
740
|
+
};
|
|
741
|
+
|
|
742
|
+
let outstreamConfig = slot.ext.videoPlayerConfig;
|
|
743
|
+
|
|
744
|
+
window.CriteoOutStream[slot.ext.videoPlayerType].play(payload, outstreamConfig)
|
|
745
|
+
};
|
|
746
|
+
|
|
747
|
+
const renderer = Renderer.install({url: PUBLISHER_TAG_OUTSTREAM_SRC, config: config});
|
|
748
|
+
renderer.setRender(render);
|
|
749
|
+
return renderer;
|
|
750
|
+
}
|
|
751
|
+
|
|
698
752
|
export function tryGetCriteoFastBid() {
|
|
699
753
|
// begin ref#1
|
|
700
754
|
try {
|
|
@@ -340,6 +340,7 @@ export const spec = {
|
|
|
340
340
|
var timeInMillis = new Date().getTime();
|
|
341
341
|
var keyCode = hashcode(zone + '' + timeInMillis);
|
|
342
342
|
var bidfloor = getBidFloor(currentBidRequest, config);
|
|
343
|
+
var format = currentBidRequest.params.format;
|
|
343
344
|
|
|
344
345
|
var requestParams = {
|
|
345
346
|
reqType: 'AdsSetup',
|
|
@@ -435,10 +436,17 @@ export const spec = {
|
|
|
435
436
|
|
|
436
437
|
// Add video context and placement in requestParams
|
|
437
438
|
if (currentBidRequest.mediaTypes.video) {
|
|
438
|
-
var videoContext = currentBidRequest.mediaTypes.video.context ? currentBidRequest.mediaTypes.video.context : '
|
|
439
|
-
var videoPlacement = currentBidRequest.mediaTypes.video.placement ? currentBidRequest.mediaTypes.video.placement :
|
|
439
|
+
var videoContext = currentBidRequest.mediaTypes.video.context ? currentBidRequest.mediaTypes.video.context : '';
|
|
440
|
+
var videoPlacement = currentBidRequest.mediaTypes.video.placement ? currentBidRequest.mediaTypes.video.placement : null;
|
|
441
|
+
var videoPlcmt = currentBidRequest.mediaTypes.video.plcmt ? currentBidRequest.mediaTypes.video.plcmt : null;
|
|
442
|
+
|
|
443
|
+
if (format == 'inbanner') {
|
|
444
|
+
videoPlacement = 2;
|
|
445
|
+
videoContext = 'In-Banner';
|
|
446
|
+
}
|
|
440
447
|
requestParams.video_context = videoContext;
|
|
441
448
|
requestParams.video_placement = videoPlacement;
|
|
449
|
+
requestParams.video_plcmt = videoPlcmt;
|
|
442
450
|
}
|
|
443
451
|
|
|
444
452
|
return {
|
|
@@ -984,6 +984,9 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
|
|
|
984
984
|
playbackmethod: bidRequest.mediaTypes.video.playbackmethod,
|
|
985
985
|
startdelay: bidRequest.mediaTypes.video.startdelay
|
|
986
986
|
};
|
|
987
|
+
if ('plcmt' in bidRequest.mediaTypes.video) {
|
|
988
|
+
video.plcmt = bidRequest.mediaTypes.video.plcmt;
|
|
989
|
+
}
|
|
987
990
|
const paramsVideo = bidRequest.params.video;
|
|
988
991
|
if (paramsVideo !== undefined) {
|
|
989
992
|
video.skip = video.skip || paramsVideo.skip || 0;
|
|
@@ -312,6 +312,11 @@ function buildRequests(validBidRequests, bidderRequest) {
|
|
|
312
312
|
data.lt = lt;
|
|
313
313
|
data.to = to;
|
|
314
314
|
|
|
315
|
+
// ADJS-1286 Read id5 id linktype field
|
|
316
|
+
if (userId && userId.id5id && userId.id5id.uid && userId.id5id.ext) {
|
|
317
|
+
data.id5Id = userId.id5id.uid || null
|
|
318
|
+
data.id5IdLinkType = userId.id5id.ext.linkType || null
|
|
319
|
+
}
|
|
315
320
|
// ADTS-169 add adUnitCode to requests
|
|
316
321
|
if (adUnitCode) data.aun = adUnitCode;
|
|
317
322
|
|
|
@@ -92,21 +92,25 @@ function initializeLiveConnect(configParams) {
|
|
|
92
92
|
|
|
93
93
|
const publisherId = configParams.publisherId || 'any';
|
|
94
94
|
const identityResolutionConfig = {
|
|
95
|
-
source: 'prebid',
|
|
96
95
|
publisherId: publisherId,
|
|
97
96
|
requestedAttributes: parseRequestedAttributes(configParams.requestedAttributesOverrides)
|
|
98
97
|
};
|
|
99
98
|
if (configParams.url) {
|
|
100
99
|
identityResolutionConfig.url = configParams.url
|
|
101
100
|
}
|
|
102
|
-
if (configParams.partner) {
|
|
103
|
-
identityResolutionConfig.source = configParams.partner
|
|
104
|
-
}
|
|
105
101
|
if (configParams.ajaxTimeout) {
|
|
106
102
|
identityResolutionConfig.ajaxTimeout = configParams.ajaxTimeout;
|
|
107
103
|
}
|
|
108
104
|
|
|
109
105
|
const liveConnectConfig = parseLiveIntentCollectorConfig(configParams.liCollectConfig);
|
|
106
|
+
|
|
107
|
+
if (!liveConnectConfig.appId && configParams.distributorId) {
|
|
108
|
+
liveConnectConfig.distributorId = configParams.distributorId;
|
|
109
|
+
identityResolutionConfig.source = configParams.distributorId;
|
|
110
|
+
} else {
|
|
111
|
+
identityResolutionConfig.source = configParams.partner || 'prebid'
|
|
112
|
+
}
|
|
113
|
+
|
|
110
114
|
liveConnectConfig.wrapperName = 'prebid';
|
|
111
115
|
liveConnectConfig.identityResolutionConfig = identityResolutionConfig;
|
|
112
116
|
liveConnectConfig.identifiersToResolve = configParams.identifiersToResolve || [];
|
|
@@ -702,6 +702,25 @@ magniteAdapter.onDataDeletionRequest = function () {
|
|
|
702
702
|
magniteAdapter.MODULE_INITIALIZED_TIME = Date.now();
|
|
703
703
|
magniteAdapter.referrerHostname = '';
|
|
704
704
|
|
|
705
|
+
const getLatencies = (args, auctionStart) => {
|
|
706
|
+
try {
|
|
707
|
+
const metrics = args.metrics.getMetrics();
|
|
708
|
+
const src = args.src || args.source;
|
|
709
|
+
return {
|
|
710
|
+
total: parseInt(metrics[`adapter.${src}.total`]),
|
|
711
|
+
// If it is array, get slowest
|
|
712
|
+
net: parseInt(Array.isArray(metrics[`adapter.${src}.net`]) ? metrics[`adapter.${src}.net`][metrics[`adapter.${src}.net`].length - 1] : metrics[`adapter.${src}.net`])
|
|
713
|
+
}
|
|
714
|
+
} catch (error) {
|
|
715
|
+
// default to old way if not able to get better ones
|
|
716
|
+
const latency = Date.now() - auctionStart;
|
|
717
|
+
return {
|
|
718
|
+
total: latency,
|
|
719
|
+
net: latency
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
|
|
705
724
|
let browser;
|
|
706
725
|
magniteAdapter.track = ({ eventType, args }) => {
|
|
707
726
|
switch (eventType) {
|
|
@@ -872,7 +891,9 @@ magniteAdapter.track = ({ eventType, args }) => {
|
|
|
872
891
|
code: 'request-error'
|
|
873
892
|
};
|
|
874
893
|
}
|
|
875
|
-
|
|
894
|
+
const latencies = getLatencies(args, auctionEntry.auctionStart);
|
|
895
|
+
bid.clientLatencyMillis = latencies.total;
|
|
896
|
+
bid.httpLatencyMillis = latencies.net;
|
|
876
897
|
bid.bidResponse = parseBidResponse(args, bid.bidResponse);
|
|
877
898
|
|
|
878
899
|
// if pbs gave us back a bidId, we need to use it and update our bidId to PBA
|
|
@@ -904,8 +925,10 @@ magniteAdapter.track = ({ eventType, args }) => {
|
|
|
904
925
|
}
|
|
905
926
|
|
|
906
927
|
// set client latency if not done yet
|
|
907
|
-
if (!cachedBid.clientLatencyMillis) {
|
|
908
|
-
|
|
928
|
+
if (!cachedBid.clientLatencyMillis || !cachedBid.httpLatencyMillis) {
|
|
929
|
+
const latencies = getLatencies(bid, deepAccess(cache, `auctions.${args.auctionId}.auction.auctionStart`));
|
|
930
|
+
cachedBid.clientLatencyMillis = cachedBid.clientLatencyMillis || latencies.total;
|
|
931
|
+
cachedBid.httpLatencyMillis = cachedBid.httpLatencyMillis || latencies.net;
|
|
909
932
|
}
|
|
910
933
|
});
|
|
911
934
|
break;
|
|
@@ -307,6 +307,16 @@ function generateBidParameters(bid, bidderRequest) {
|
|
|
307
307
|
bidObject.placementId = placementId;
|
|
308
308
|
}
|
|
309
309
|
|
|
310
|
+
const sua = deepAccess(bid, `ortb2.device.sua`);
|
|
311
|
+
if (sua) {
|
|
312
|
+
bidObject.sua = sua;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
const coppa = deepAccess(bid, `ortb2.regs.coppa`)
|
|
316
|
+
if (coppa) {
|
|
317
|
+
bidObject.coppa = 1;
|
|
318
|
+
}
|
|
319
|
+
|
|
310
320
|
if (mediaType === VIDEO) {
|
|
311
321
|
const playbackMethod = deepAccess(bid, `mediaTypes.video.playbackmethod`);
|
|
312
322
|
let playbackMethodValue;
|
|
@@ -348,9 +358,9 @@ function generateBidParameters(bid, bidderRequest) {
|
|
|
348
358
|
bidObject.linearity = linearity;
|
|
349
359
|
}
|
|
350
360
|
|
|
351
|
-
const
|
|
352
|
-
if (
|
|
353
|
-
bidObject.
|
|
361
|
+
const plcmt = deepAccess(bid, `mediaTypes.video.plcmt`);
|
|
362
|
+
if (plcmt) {
|
|
363
|
+
bidObject.plcmt = plcmt;
|
|
354
364
|
}
|
|
355
365
|
}
|
|
356
366
|
|
|
@@ -201,6 +201,12 @@ function updateOrtbConfig(bidder, currConfig, segmentIDs, sspSegmentIDs, transfo
|
|
|
201
201
|
logger.logInfo(`Extending ortb2.user.ext.data with "${PERMUTIVE_CUSTOM_COHORTS_KEYWORD}"`, customCohortsData)
|
|
202
202
|
}
|
|
203
203
|
|
|
204
|
+
// Set site extensions
|
|
205
|
+
if (segmentIDs.length > 0) {
|
|
206
|
+
deepSetValue(ortbConfig, `ortb2.site.ext.permutive.${PERMUTIVE_STANDARD_KEYWORD}`, segmentIDs)
|
|
207
|
+
logger.logInfo(`Extending ortb2.site.ext.permutive with "${PERMUTIVE_STANDARD_KEYWORD}"`, segmentIDs)
|
|
208
|
+
}
|
|
209
|
+
|
|
204
210
|
logger.logInfo(`Updated ortb2 config`, { bidder, config: ortbConfig })
|
|
205
211
|
return ortbConfig
|
|
206
212
|
}
|
|
@@ -230,12 +236,11 @@ function setSegments (reqBidsConfigObj, moduleConfig, segmentData) {
|
|
|
230
236
|
}
|
|
231
237
|
const acEnabled = isAcEnabled(moduleConfig, bidder)
|
|
232
238
|
const customFn = getCustomBidderFn(moduleConfig, bidder)
|
|
233
|
-
const defaultFn = getDefaultBidderFn(bidder)
|
|
234
239
|
|
|
235
240
|
if (customFn) {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
241
|
+
// For backwards compatibility we pass an identity function to any custom bidder function set by a publisher
|
|
242
|
+
const bidIdentity = (bid) => bid
|
|
243
|
+
customFn(bid, segmentData, acEnabled, utils, bidIdentity)
|
|
239
244
|
}
|
|
240
245
|
})
|
|
241
246
|
})
|
|
@@ -263,40 +268,6 @@ function getCustomBidderFn (moduleConfig, bidder) {
|
|
|
263
268
|
}
|
|
264
269
|
}
|
|
265
270
|
|
|
266
|
-
/**
|
|
267
|
-
* Returns a function that receives a `bid` object, a `data` object and a `acEnabled` boolean
|
|
268
|
-
* and which will set the right segment targeting keys for `bid` based on `data` and `acEnabled`
|
|
269
|
-
* @param {string} bidder - Bidder name
|
|
270
|
-
* @return {Object} Bidder function
|
|
271
|
-
*/
|
|
272
|
-
function getDefaultBidderFn (bidder) {
|
|
273
|
-
const isPStandardTargetingEnabled = (data, acEnabled) => {
|
|
274
|
-
return (acEnabled && data.ac && data.ac.length) || (data.ssp && data.ssp.cohorts && data.ssp.cohorts.length)
|
|
275
|
-
}
|
|
276
|
-
const pStandardTargeting = (data, acEnabled) => {
|
|
277
|
-
const ac = (acEnabled) ? (data.ac ?? []) : []
|
|
278
|
-
const ssp = data?.ssp?.cohorts ?? []
|
|
279
|
-
return [...new Set([...ac, ...ssp])]
|
|
280
|
-
}
|
|
281
|
-
const bidderMap = {
|
|
282
|
-
ozone: function (bid, data, acEnabled) {
|
|
283
|
-
if (isPStandardTargetingEnabled(data, acEnabled)) {
|
|
284
|
-
const segments = pStandardTargeting(data, acEnabled)
|
|
285
|
-
deepSetValue(bid, 'params.customData.0.targeting.p_standard', segments)
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
return bid
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
// On no default bidder just return the same bid as passed in
|
|
293
|
-
function bidIdentity(bid) {
|
|
294
|
-
return bid
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
return bidderMap[bidder] || bidIdentity
|
|
298
|
-
}
|
|
299
|
-
|
|
300
271
|
/**
|
|
301
272
|
* Check whether ac is enabled for bidder
|
|
302
273
|
* @param {Object} moduleConfig - Module configuration
|
|
@@ -472,7 +472,13 @@ export function PrebidServer() {
|
|
|
472
472
|
bidRequests.forEach(bidderRequest => events.emit(CONSTANTS.EVENTS.BIDDER_DONE, bidderRequest));
|
|
473
473
|
}
|
|
474
474
|
if (shouldEmitNonbids(s2sBidRequest.s2sConfig, response)) {
|
|
475
|
-
|
|
475
|
+
events.emit(CONSTANTS.EVENTS.SEAT_NON_BID, {
|
|
476
|
+
seatnonbid: response.ext.seatnonbid,
|
|
477
|
+
auctionId: bidRequests[0].auctionId,
|
|
478
|
+
requestedBidders,
|
|
479
|
+
response,
|
|
480
|
+
adapterMetrics
|
|
481
|
+
});
|
|
476
482
|
}
|
|
477
483
|
done();
|
|
478
484
|
doClientSideSyncs(requestedBidders, gdprConsent, uspConsent, gppConsent);
|
|
@@ -578,13 +584,6 @@ function shouldEmitNonbids(s2sConfig, response) {
|
|
|
578
584
|
return s2sConfig?.extPrebid?.returnallbidstatus && response?.ext?.seatnonbid;
|
|
579
585
|
}
|
|
580
586
|
|
|
581
|
-
function emitNonBids(seatnonbid, auctionId) {
|
|
582
|
-
events.emit(CONSTANTS.EVENTS.SEAT_NON_BID, {
|
|
583
|
-
seatnonbid,
|
|
584
|
-
auctionId
|
|
585
|
-
});
|
|
586
|
-
}
|
|
587
|
-
|
|
588
587
|
/**
|
|
589
588
|
* Global setter that sets eids permissions for bidders
|
|
590
589
|
* This setter is to be used by userId module when included
|
|
@@ -320,6 +320,16 @@ function generateBidParameters(bid, bidderRequest) {
|
|
|
320
320
|
bidObject.api = api;
|
|
321
321
|
}
|
|
322
322
|
|
|
323
|
+
const sua = deepAccess(bid, `ortb2.device.sua`);
|
|
324
|
+
if (sua) {
|
|
325
|
+
bidObject.sua = sua;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
const coppa = deepAccess(bid, `ortb2.regs.coppa`)
|
|
329
|
+
if (coppa) {
|
|
330
|
+
bidObject.coppa = 1;
|
|
331
|
+
}
|
|
332
|
+
|
|
323
333
|
if (mediaType === VIDEO) {
|
|
324
334
|
const playbackMethod = deepAccess(bid, `mediaTypes.video.playbackmethod`);
|
|
325
335
|
let playbackMethodValue;
|
|
@@ -366,9 +376,9 @@ function generateBidParameters(bid, bidderRequest) {
|
|
|
366
376
|
bidObject.protocols = protocols;
|
|
367
377
|
}
|
|
368
378
|
|
|
369
|
-
const
|
|
370
|
-
if (
|
|
371
|
-
bidObject.
|
|
379
|
+
const plcmt = deepAccess(bid, `mediaTypes.video.plcmt`);
|
|
380
|
+
if (plcmt) {
|
|
381
|
+
bidObject.plcmt = plcmt;
|
|
372
382
|
}
|
|
373
383
|
}
|
|
374
384
|
|
|
@@ -65,3 +65,27 @@ Please reach out to pmp@rtbhouse.com to receive your own
|
|
|
65
65
|
}
|
|
66
66
|
];
|
|
67
67
|
```
|
|
68
|
+
|
|
69
|
+
# Protected Audience API (FLEDGE) support
|
|
70
|
+
There’s an option to receive demand for Protected Audience API (FLEDGE/PAAPI)
|
|
71
|
+
ads using RTB House bid adapter.
|
|
72
|
+
Prebid’s [fledgeForGpt](https://docs.prebid.org/dev-docs/modules/fledgeForGpt.html)
|
|
73
|
+
module and Google Ad Manager is currently required.
|
|
74
|
+
|
|
75
|
+
The following steps should be taken to setup Protected Audience for RTB House:
|
|
76
|
+
|
|
77
|
+
1. Reach out to your RTB House representative for setup coordination.
|
|
78
|
+
|
|
79
|
+
2. Build and enable FLEDGE module as described in
|
|
80
|
+
[fledgeForGpt](https://docs.prebid.org/dev-docs/modules/fledgeForGpt.html)
|
|
81
|
+
module documentation.
|
|
82
|
+
|
|
83
|
+
a. Make sure to enable RTB House bidder to participate in FLEDGE. If there are any other bidders to be allowed for that, add them to the **bidders** array:
|
|
84
|
+
```javascript
|
|
85
|
+
pbjs.setBidderConfig({
|
|
86
|
+
bidders: ["rtbhouse"],
|
|
87
|
+
config: {
|
|
88
|
+
fledgeEnabled: true
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
```
|
|
@@ -207,11 +207,15 @@ export const converter = ortbConverter({
|
|
|
207
207
|
const bidResponse = buildBidResponse(bid, context);
|
|
208
208
|
bidResponse.meta.mediaType = deepAccess(bid, 'ext.prebid.type');
|
|
209
209
|
const {bidRequest} = context;
|
|
210
|
+
|
|
211
|
+
let [parseSizeWidth, parseSizeHeight] = bidRequest.mediaTypes.video?.context === 'outstream' ? parseSizes(bidRequest, VIDEO) : [undefined, undefined];
|
|
212
|
+
|
|
213
|
+
bidResponse.width = bid.w || parseSizeWidth || bidResponse.playerWidth;
|
|
214
|
+
bidResponse.height = bid.h || parseSizeHeight || bidResponse.playerHeight;
|
|
215
|
+
|
|
210
216
|
if (bidResponse.mediaType === VIDEO && bidRequest.mediaTypes.video.context === 'outstream') {
|
|
211
217
|
bidResponse.renderer = outstreamRenderer(bidResponse);
|
|
212
218
|
}
|
|
213
|
-
bidResponse.width = bid.w || deepAccess(bidRequest, 'mediaTypes.video.w') || deepAccess(bidRequest, 'params.video.playerWidth');
|
|
214
|
-
bidResponse.height = bid.h || deepAccess(bidRequest, 'mediaTypes.video.h') || deepAccess(bidRequest, 'params.video.playerHeight');
|
|
215
219
|
|
|
216
220
|
if (deepAccess(bid, 'ext.bidder.rp.advid')) {
|
|
217
221
|
deepSetValue(bidResponse, 'meta.advertiserId', bid.ext.bidder.rp.advid);
|