Skip to content

Commit 111c207

Browse files
Merge pull request #345 from PubMatic/UOE-7256-5.20.3
Hybrid support in openwrap
2 parents 5300bd9 + a79cf9e commit 111c207

File tree

6 files changed

+264
-16
lines changed

6 files changed

+264
-16
lines changed

src_new/adapters/prebid.js

+105-12
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ var refThis = this;
2828
var onEventAdded = false;
2929
var isPrebidPubMaticAnalyticsEnabled = CONFIG.isPrebidPubMaticAnalyticsEnabled();
3030
var isSingleImpressionSettingEnabled = CONFIG.isSingleImpressionSettingEnabled();
31+
var defaultAliases = CONSTANTS.DEFAULT_ALIASES;
3132

3233
/* start-test-block */
3334
exports.isSingleImpressionSettingEnabled = isSingleImpressionSettingEnabled;
@@ -365,7 +366,9 @@ function generatedKeyCallbackForPbAnalytics(adapterID, adUnits, adapterConfig, i
365366
var mediaTypeConfig;
366367
var partnerConfig;
367368

368-
if(CONFIG.isServerSideAdapter(adapterID)){
369+
//If we are using PubMaticServerBidAdapatar then serverSideEabled: do not add config into adUnits.
370+
//If we are using PrebidServerBidAdapatar then we need to add config into adUnits.
371+
if(CONFIG.isServerSideAdapter(adapterID) && CONFIG.usePBSAdapter() != true){
369372
util.log("Not calling adapter: "+ adapterID + ", for " + generatedKey +", as it is serverSideEnabled.");
370373
return;
371374
}
@@ -479,8 +482,9 @@ function generatedKeyCallback(adapterID, adUnits, adapterConfig, impressionID, g
479482
}
480483
}
481484

482-
//serverSideEabled: do not add config into adUnits
483-
if(CONFIG.isServerSideAdapter(adapterID)){
485+
//If we are using PubMaticServerBidAdapatar then serverSideEabled: do not add config into adUnits.
486+
//If we are using PrebidServerBidAdapatar then we need to add config into adUnits.
487+
if(CONFIG.isServerSideAdapter(adapterID) && CONFIG.usePBSAdapter() != true){
484488
util.log("Not calling adapter: "+ adapterID + ", for " + generatedKey +", as it is serverSideEnabled.");
485489
return;
486490
}
@@ -542,14 +546,15 @@ function pushAdapterParamsInAdunits(adapterID, generatedKey, impressionID, keyCo
542546
var slotParams = {};
543547
var mediaTypeConfig = adUnits[code].mediaTypes;
544548
var sizes = adUnits[code].sizes;
549+
var isWiidRequired = false;
545550
if(mediaTypeConfig && util.isOwnProperty(mediaTypeConfig,"video") && adapterID != "telaria"){
546551
slotParams["video"]= mediaTypeConfig.video;
547552
}
548553
util.forEachOnObject(keyConfig, function(key, value){
549554
/* istanbul ignore next */
550555
slotParams[key] = value;
551556
});
552-
557+
553558
if(isPrebidPubMaticAnalyticsEnabled){
554559
slotParams["kgpv"] = generatedKey; // TODO : Update this in case of video, change the size to 0x0
555560
slotParams["regexPattern"] = regexPattern;
@@ -580,6 +585,12 @@ function pushAdapterParamsInAdunits(adapterID, generatedKey, impressionID, keyCo
580585
slotParams["video"]= mediaTypeConfig.video;
581586
}
582587
}
588+
// for pubmaticServer partner we used to pass wiid when isPrebidPubMaticAnalyticsEnabled is false but now we do not
589+
// get pubmaticServer partner when usePBSAdapter flag is true so we will be adding wiid conditionally.
590+
if(isPrebidPubMaticAnalyticsEnabled === false && CONFIG.usePBSAdapter()){
591+
slotParams["wiid"] = impressionID;
592+
isWiidRequired = true;
593+
}
583594

584595
var adapterName = CONFIG.getAdapterNameForAlias(adapterID) || adapterID;
585596

@@ -616,6 +627,19 @@ function pushAdapterParamsInAdunits(adapterID, generatedKey, impressionID, keyCo
616627
if((adapterID != "pubmatic2" && adapterName != "pubmatic2") && window.PWT.udpv){
617628
slotParams["verId"] = CONFIG.getProfileDisplayVersionID();
618629
}
630+
631+
// If we will be using PrebidServerBidAdaptar add wrapper object with profile and version
632+
if(CONFIG.usePBSAdapter() == true && CONFIG.isServerSideAdapter(adapterID)) {
633+
slotParams["wrapper"] = {
634+
profile: parseInt(CONF.pwt.pid),
635+
version: parseInt(CONF.pwt.pdvid)
636+
};
637+
// If mapping is regex then we should pass hashedKey to adSlot params earlier it was handled on s2s side.
638+
if(slotParams["hashedKey"]) {
639+
slotParams["adSlot"] = slotParams["hashedKey"];
640+
}
641+
}
642+
619643
// We are removing mimes because it merges with the existing adUnit mimes
620644
// if(slotParams["video"] && slotParams["video"]["mimes"]){
621645
// delete slotParams["video"]["mimes"];
@@ -630,6 +654,9 @@ function pushAdapterParamsInAdunits(adapterID, generatedKey, impressionID, keyCo
630654
slotParams[key] = value;
631655
});
632656
slotParams["cf"] = size[0] + "x" + size[1];
657+
if(isWiidRequired) {
658+
slotParams["wiid"] = impressionID;
659+
}
633660
adUnits[ code ].bids.push({ bidder: adapterID, params: slotParams });
634661
});
635662
break;
@@ -643,6 +670,9 @@ function pushAdapterParamsInAdunits(adapterID, generatedKey, impressionID, keyCo
643670
});
644671
slotParams["width"] = size[0];
645672
slotParams["height"] = size[1];
673+
if(isWiidRequired) {
674+
slotParams["wiid"] = impressionID;
675+
}
646676
if(!(refThis.isSingleImpressionSettingEnabled && isAdUnitsCodeContainBidder(adUnits, code, adapterID))){
647677
adUnits[ code ].bids.push({ bidder: adapterID, params: slotParams });
648678
}
@@ -657,6 +687,9 @@ function pushAdapterParamsInAdunits(adapterID, generatedKey, impressionID, keyCo
657687
slotParams[key] = value;
658688
});
659689
slotParams["adSize"] = size[0] + "x" + size[1];
690+
if(isWiidRequired) {
691+
slotParams["wiid"] = impressionID;
692+
}
660693
if(!(refThis.isSingleImpressionSettingEnabled && isAdUnitsCodeContainBidder(adUnits, code, adapterID))){
661694
adUnits[ code ].bids.push({ bidder: adapterID, params: slotParams });
662695
}
@@ -681,6 +714,9 @@ function pushAdapterParamsInAdunits(adapterID, generatedKey, impressionID, keyCo
681714
sltParams["id"] = keyConfig["id"];
682715
}
683716
sltParams["size"] = size;
717+
if(isWiidRequired) {
718+
sltParams["wiid"] = impressionID;
719+
}
684720
adUnits [code].bids.push({bidder: adapterID, params: sltParams});
685721
});
686722
break;
@@ -862,15 +898,23 @@ function generateAdUnitsArray(activeSlots, impressionID){
862898
/* istanbul ignore else */
863899
if(adapterID !== refThis.parentAdapterID){
864900

865-
//serverSideEabled: we do not want to throttle them at client-side
901+
// If we will be using PrebidServerBidAdapatar then we need to check throttling for
902+
// serverEnabled partners at client-side
866903
/* istanbul ignore if */
867-
if(CONFIG.isServerSideAdapter(adapterID) || refThis.throttleAdapter(randomNumberBelow100, adapterID) == false){
868-
util.forEachOnObject(activeSlots, function(j, slot){
869-
bidManager.setCallInitTime(slot.getDivID(), adapterID);
870-
});
871-
refThis.generatePbConf(adapterID, adapterConfig, activeSlots, adUnits, impressionID);
872-
}else{
873-
util.log(adapterID+CONSTANTS.MESSAGES.M2);
904+
if(CONFIG.usePBSAdapter() == true&& CONFIG.isServerSideAdapter(adapterID)) {
905+
if(refThis.throttleAdapter(randomNumberBelow100, adapterID) == false) {
906+
refThis.generateConfig(adapterID, adapterConfig, activeSlots, adUnits, impressionID);
907+
} else {
908+
util.log(adapterID+CONSTANTS.MESSAGES.M2);
909+
}
910+
} else {
911+
// serverSideEabled: we do not want to throttle them at client-side
912+
/* istanbul ignore if */
913+
if(CONFIG.isServerSideAdapter(adapterID) || refThis.throttleAdapter(randomNumberBelow100, adapterID) == false){
914+
refThis.generateConfig(adapterID, adapterConfig, activeSlots, adUnits, impressionID);
915+
}else{
916+
util.log(adapterID+CONSTANTS.MESSAGES.M2);
917+
}
874918
}
875919
}
876920
});
@@ -889,6 +933,14 @@ function generateAdUnitsArray(activeSlots, impressionID){
889933

890934
exports.generateAdUnitsArray = generateAdUnitsArray;
891935

936+
function generateConfig(adapterID, adapterConfig, activeSlots, adUnits, impressionID) {
937+
util.forEachOnObject(activeSlots, function(j, slot){
938+
bidManager.setCallInitTime(slot.getDivID(), adapterID);
939+
});
940+
refThis.generatePbConf(adapterID, adapterConfig, activeSlots, adUnits, impressionID);
941+
}
942+
exports.generateConfig = generateConfig;
943+
892944
// removeIf(removeLegacyAnalyticsRelatedCode)
893945
function addOnBidResponseHandler(){
894946
if(util.isFunction(window[pbNameSpace].onEvent)){
@@ -950,6 +1002,10 @@ function setPrebidConfig(){
9501002
refThis.assignCurrencyConfigIfRequired(prebidConfig);
9511003
refThis.assignSchainConfigIfRequired(prebidConfig);
9521004
refThis.assignSingleRequestConfigForBidders(prebidConfig);
1005+
// if usePBSAdapter is 1 then add s2sConfig
1006+
if(CONFIG.usePBSAdapter()) {
1007+
refThis.gets2sConfig(prebidConfig);
1008+
}
9531009
// Check for yahoossp bidder and add property {mode: 'all'} to setConfig
9541010
refThis.checkForYahooSSPBidder(prebidConfig);
9551011
// Adding a hook for publishers to modify the Prebid Config we have generated
@@ -964,6 +1020,43 @@ function setPrebidConfig(){
9641020

9651021
exports.setPrebidConfig = setPrebidConfig;
9661022

1023+
function gets2sConfig(prebidConfig){
1024+
var bidderParams = {};
1025+
var s2sBidders = CONFIG.getServerEnabledAdaptars();
1026+
for(var key in CONF.alias) {
1027+
defaultAliases[key] = CONF.alias[key];
1028+
}
1029+
var pubmaticAndAliases = CONFIG.getPubMaticAndAlias(s2sBidders);
1030+
if(pubmaticAndAliases.length) {
1031+
pubmaticAndAliases.forEach(function(bidder) {
1032+
bidderParams[bidder] = {};
1033+
})
1034+
}
1035+
1036+
prebidConfig["s2sConfig"] = {
1037+
accountId: CONFIG.getPublisherId(),
1038+
adapter: CONSTANTS.PBSPARAMS.adapter,
1039+
enabled: true,
1040+
bidders: s2sBidders,
1041+
endpoint: CONSTANTS.PBSPARAMS.endpoint,
1042+
syncEndpoint: CONSTANTS.PBSPARAMS.syncEndpoint,
1043+
timeout: CONFIG.getTimeoutForPBSRequest(),
1044+
secure: 1,// request needs secure assets pass 1
1045+
extPrebid: {
1046+
aliases: defaultAliases,
1047+
bidderparams: bidderParams,
1048+
targeting: {
1049+
pricegranularity: CONFIG.getPriceGranularity()
1050+
},
1051+
isPrebidPubMaticAnalyticsEnabled: CONFIG.isPrebidPubMaticAnalyticsEnabled(),
1052+
isUsePrebidKeysEnabled: CONFIG.isUsePrebidKeysEnabled(),
1053+
macros: CONFIG.createMacros()
1054+
}
1055+
}
1056+
}
1057+
1058+
exports.gets2sConfig = gets2sConfig;
1059+
9671060
function getFloorsConfiguration(prebidConfig){
9681061
if(CONFIG.isFloorPriceModuleEnabled() == true){
9691062
prebidConfig["floors"]={

src_new/bid.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,10 @@ Bid.prototype.setMi = function(mi){
329329
// endRemoveIf(removeLegacyAnalyticsRelatedCode)
330330

331331
// removeIf(removeLegacyAnalyticsRelatedCode)
332-
Bid.prototype.getMi = function(){
332+
Bid.prototype.getMi = function(partnerName){
333+
if(UTIL.isUndefined(this.mi)) {
334+
this.mi = window.matchedimpressions && window.matchedimpressions[partnerName];
335+
}
333336
return this.mi;
334337
};
335338
// endRemoveIf(removeLegacyAnalyticsRelatedCode)

src_new/bidManager.js

+27-2
Original file line numberDiff line numberDiff line change
@@ -520,10 +520,12 @@ function getAdDomain(bidResponse) {
520520

521521
// removeIf(removeLegacyAnalyticsRelatedCode)
522522
function analyticalPixelCallback(slotID, bmEntry, impressionIDMap) { // TDD, i/o : done
523+
var usePBSAdapter = CONFIG.usePBSAdapter();
523524
var startTime = bmEntry.getCreationTime() || 0;
524-
var pslTime = undefined;
525+
var pslTime = (usePBSAdapter && window.pbsLatency) ? 0 : undefined;
525526
var impressionID = bmEntry.getImpressionID();
526527
var adUnitInfo = refThis.getAdUnitInfo(slotID);
528+
var latencyValue = {};
527529
const isAnalytics = true; // this flag is required to get grossCpm and netCpm in dollars instead of adserver currency
528530
/* istanbul ignore else */
529531
if (bmEntry.getAnalyticEnabledStatus() && !bmEntry.getExpiredStatus()) {
@@ -545,6 +547,24 @@ function analyticalPixelCallback(slotID, bmEntry, impressionIDMap) { // TDD, i/o
545547
}
546548

547549
util.forEachOnObject(adapterEntry.bids, function(bidID, theBid) {
550+
if(usePBSAdapter) {
551+
// In PrebidServerBidAdapater we are capturing start and end time of request
552+
// fetching these values here to calculate psl time for logger call
553+
latencyValue = window.pbsLatency && window.pbsLatency[impressionID];
554+
if(latencyValue && latencyValue['endTime'] && latencyValue['startTime']) {
555+
pslTime = latencyValue['endTime'] - latencyValue['startTime'];
556+
}
557+
// When we use PrebidServerBidAdapter we do not get seatbid for zero bid / no bid partners
558+
// as we need to log PubMatic partner in logger will be changing db = 0.
559+
if((adapterID === "pubmatic" || adapterID === "pubmatic2") && (util.isOwnProperty(window.partnersWithoutErrorAndBids, impressionID) && window.partnersWithoutErrorAndBids[impressionID].includes(adapterID))) {
560+
theBid.defaultBid = 0;
561+
} else if(util.isOwnProperty(window.partnersWithoutErrorAndBids, impressionID) &&
562+
window.partnersWithoutErrorAndBids[impressionID].includes(adapterID) &&
563+
CONFIG.getAdapterNameForAlias(adapterID).includes('pubmatic')) {
564+
theBid.defaultBid = 0;
565+
}
566+
}
567+
548568
var endTime = theBid.getReceivedTime();
549569
if (adapterID === "pubmaticServer") {
550570
if ((util.isOwnProperty(window.PWT.owLatency, impressionID)) &&
@@ -612,7 +632,7 @@ function analyticalPixelCallback(slotID, bmEntry, impressionIDMap) { // TDD, i/o
612632
"ss": theBid.getServerSideStatus(),
613633
"t": theBid.getPostTimeoutStatus() === false ? 0 : 1,
614634
"wb": theBid.getWinningBidStatus() === true ? 1 : 0,
615-
"mi": theBid.getServerSideStatus() ? theBid.getMi() : undefined,
635+
"mi": theBid.getServerSideStatus() ? theBid.getMi(adapterID) : undefined,
616636
"af": theBid.getAdFormat(),
617637
"ocpm": CONFIG.getAdServerCurrency() ? theBid.getOriginalCpm() : theBid.getGrossEcpm(),
618638
"ocry": CONFIG.getAdServerCurrency() ? theBid.getOriginalCurrency() : CONSTANTS.COMMON.ANALYTICS_CURRENCY,
@@ -623,6 +643,11 @@ function analyticalPixelCallback(slotID, bmEntry, impressionIDMap) { // TDD, i/o
623643
});
624644

625645
impressionIDMap[impressionID].push(slotObject);
646+
// special handling when all media types are disabled for adunit and
647+
// if we are using PrebidServerBidAdapter with
648+
if(usePBSAdapter && CONFIG.getServerEnabledAdaptars().length && pslTime == undefined && !window.pbsLatency) {
649+
pslTime = 0;
650+
}
626651
if (pslTime !== undefined) {
627652
impressionIDMap[impressionID].psl = pslTime;
628653
}

src_new/config.js

+45
Original file line numberDiff line numberDiff line change
@@ -394,4 +394,49 @@ exports.getAdapterNameForAlias = function(aliasName){
394394

395395
exports.isSSOEnabled = function() {
396396
return parseInt(config[CONSTANTS.CONFIG.COMMON][CONSTANTS.CONFIG.SSO_ENABLED]) === 1;
397+
}
398+
399+
exports.getServerEnabledAdaptars = function() {
400+
var s2sBidders = Object.keys(config.adapters).filter(function(adapter){
401+
if(config.adapters[adapter]["serverSideEnabled"] == "1") {
402+
return adapter;
403+
}
404+
});
405+
return s2sBidders;
406+
}
407+
408+
exports.getTimeoutForPBSRequest = function() {
409+
var ssTimeOut = parseInt(config.pwt.ssTimeout);
410+
var maxTimeout = CONSTANTS.TIMEOUT_CONFIG.MaxTimeout;
411+
var minTimeout = CONSTANTS.TIMEOUT_CONFIG.MinTimeout;
412+
if(ssTimeOut >= minTimeout && ssTimeOut <= maxTimeout) {
413+
return ssTimeOut;
414+
} else if(ssTimeOut >= minTimeout) {
415+
return maxTimeout;
416+
}
417+
return minTimeout;
418+
}
419+
420+
exports.getPubMaticAndAlias = function(s2sBidders) {
421+
var pubMaticaliases = s2sBidders.filter(function(adapter) {
422+
if(config.alias && config.alias[adapter] && config.alias[adapter].includes("pubmatic") || adapter.includes("pubmatic")) {
423+
return adapter;
424+
}
425+
});
426+
return pubMaticaliases;
427+
}
428+
429+
exports.usePBSAdapter = function() {
430+
if(config.pwt.usePBSAdapter == "1") {
431+
return true;
432+
}
433+
return false;
434+
}
435+
436+
exports.createMacros = function() {
437+
return {
438+
"[PLATFORM]": util.getDevicePlatform().toString(),
439+
"[PROFILE_ID]": refThis.getProfileID().toString(),
440+
"[PROFILE_VERSION]": refThis.getProfileDisplayVersionID().toString()
441+
}
397442
}

src_new/constants.js

+18-1
Original file line numberDiff line numberDiff line change
@@ -289,4 +289,21 @@ exports.BID_STATUS = {
289289
// Add list of PubMatic aliases here.
290290
exports.PUBMATIC_ALIASES = ["pubmatic2"];
291291

292-
exports.YAHOOSSP = "yahoossp";
292+
exports.PBSPARAMS = {
293+
adapter: "prebidServer",
294+
endpoint: "https://ow.pubmatic.com/pbs/openrtb2/auction",
295+
syncEndpoint: "https://ow.pubmatic.com/cookie_sync/?sec=1"
296+
}
297+
298+
exports.TIMEOUT_CONFIG = {
299+
MaxTimeout: 500,
300+
MinTimeout: 200
301+
}
302+
303+
exports.DEFAULT_ALIASES = {
304+
adg: "adgeneration",
305+
districtm: "appnexus",
306+
districtmDMX: "dmx",
307+
pubmatic2: "pubmatic"
308+
}
309+
exports.YAHOOSSP = "yahoossp";

0 commit comments

Comments
 (0)