Skip to content

Commit

Permalink
Merge pull request #3 from prebid/master
Browse files Browse the repository at this point in the history
Sync with prebid master
  • Loading branch information
pm-nitin-shirsat committed May 12, 2023
2 parents ade41d3 + 8fe7115 commit 7d0b86d
Show file tree
Hide file tree
Showing 52 changed files with 2,741 additions and 418 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,8 @@ pbjs.requestBids({

## Install



$ git clone https://github.com/prebid/Prebid.js.git
$ cd Prebid.js
$ npm ci
Expand Down Expand Up @@ -358,3 +360,4 @@ Prebid.js is supported on IE11 and modern browsers until 5.x. 6.x+ transpiles to

### Governance
Review our governance model [here](https://github.com/prebid/Prebid.js/tree/master/governance.md).
### END
39 changes: 24 additions & 15 deletions modules/adgenerationBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export const spec = {
buildRequests: function (validBidRequests, bidderRequest) {
// convert Native ORTB definition to old-style prebid native definition
validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
const ADGENE_PREBID_VERSION = '1.4.0';
const ADGENE_PREBID_VERSION = '1.5.0';
let serverRequests = [];
for (let i = 0, len = validBidRequests.length; i < len; i++) {
const validReq = validBidRequests[i];
Expand Down Expand Up @@ -59,7 +59,6 @@ export const spec = {
data = tryAppendQueryString(data, 'imark', '1');
}

// TODO: is 'page' the right value here?
data = tryAppendQueryString(data, 'tp', bidderRequest.refererInfo.page);
if (isIos()) {
const hyperId = getHyperId(validReq);
Expand Down Expand Up @@ -210,35 +209,45 @@ function appendChildToBody(ad, data) {
return ad.replace(/<\/\s?body>/, `${data}</body>`);
}

/**
* create APVTag
* @return {string}
*/
function createAPVTag() {
const APVURL = 'https://cdn.apvdr.com/js/VideoAd.min.js';
let apvScript = document.createElement('script');
apvScript.type = 'text/javascript';
apvScript.id = 'apv';
apvScript.src = APVURL;
return apvScript.outerHTML;
return `<script type="text/javascript" id="apv" src="${APVURL}"></script>`
}

/**
* create ADGBrowserMTag
* @return {string}
*/
function createADGBrowserMTag() {
const ADGBrowserMURL = 'https://i.socdm.com/sdk/js/adg-browser-m.js';
return `<script type="text/javascript" src="${ADGBrowserMURL}"></script>`;
}

/**
* create APVTag & insertVast
* @param targetId
* @param vastXml
* @return {string}
*/
function insertVASTMethodForAPV(targetId, vastXml) {
let apvVideoAdParam = {
s: targetId
};
let script = document.createElement(`script`);
script.type = 'text/javascript';
script.innerHTML = `(function(){ new APV.VideoAd(${escapeUnsafeChars(JSON.stringify(apvVideoAdParam))}).load('${vastXml.replace(/\r?\n/g, '')}'); })();`;
return script.outerHTML;
return `<script type="text/javascript">(function(){ new APV.VideoAd(${escapeUnsafeChars(JSON.stringify(apvVideoAdParam))}).load('${vastXml.replace(/\r?\n/g, '')}'); })();</script>`
}

/**
* create ADGBrowserMTag & insertVast
* @param vastXml
* @param marginTop
* @return {string}
*/
function insertVASTMethodForADGBrowserM(vastXml, marginTop) {
const script = document.createElement(`script`);
script.type = 'text/javascript';
script.innerHTML = `window.ADGBrowserM.init({vastXml: '${vastXml.replace(/\r?\n/g, '')}', marginTop: '${marginTop}'});`;
return script.outerHTML;
return `<script type="text/javascript">window.ADGBrowserM.init({vastXml: '${vastXml.replace(/\r?\n/g, '')}', marginTop: '${marginTop}'});</script>`
}

/**
Expand Down
24 changes: 15 additions & 9 deletions modules/admixerBidAdapter.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
import {logError} from '../src/utils.js';
import {isStr, logError} from '../src/utils.js';
import {registerBidder} from '../src/adapters/bidderFactory.js';
import {config} from '../src/config.js';
import {BANNER, VIDEO, NATIVE} from '../src/mediaTypes.js';
import {convertOrtbRequestToProprietaryNative} from '../src/native.js';
import {find} from '../src/polyfill.js';

const BIDDER_CODE = 'admixer';
const BIDDER_CODE_ADX = 'admixeradx';
const ALIASES = ['go2net', 'adblender', 'adsyield', 'futureads', 'admixeradx'];
const ENDPOINT_URL = 'https://inv-nets.admixer.net/prebid.1.2.aspx';
const ADX_ENDPOINT_URL = 'https://inv-nets.admixer.net/adxprebid.1.2.aspx';
const ALIASES = [
{code: 'go2net', endpoint: 'https://ads.go2net.com.ua/prebid.1.2.aspx'},
'adblender',
{code: 'adsyield', endpoint: 'https://ads.adsyield.com/prebid.1.2.aspx'},
{code: 'futureads', endpoint: 'https://ads.futureads.io/prebid.1.2.aspx'},
{code: 'smn', endpoint: 'https://ads.smn.rs/prebid.1.2.aspx'},
{code: 'admixeradx', endpoint: 'https://inv-nets.admixer.net/adxprebid.1.2.aspx'},
];
export const spec = {
code: BIDDER_CODE,
aliases: ALIASES,
aliases: ALIASES.map(val => isStr(val) ? val : val.code),
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
/**
* Determines whether or not the given bid request is valid.
Expand Down Expand Up @@ -72,10 +78,7 @@ export const spec = {
return {
method: 'POST',
url:
endpointUrl ||
(bidderRequest.bidderCode === BIDDER_CODE_ADX
? ADX_ENDPOINT_URL
: ENDPOINT_URL),
endpointUrl || getEndpointUrl(bidderRequest.bidderCode),
data: payload,
};
},
Expand Down Expand Up @@ -106,6 +109,9 @@ export const spec = {
return pixels;
}
};
function getEndpointUrl(code) {
return find(ALIASES, (val) => val.code === code)?.endpoint || ENDPOINT_URL;
}
function getBidFloor(bid) {
try {
const bidFloor = bid.getFloor({
Expand Down
4 changes: 3 additions & 1 deletion modules/aidemBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ function getPageUrl(bidderRequest) {
function buildWinNotice(bid) {
const params = bid.params[0];
const app = deepAccess(bid, 'meta.ext.app')
const winNoticeExt = deepAccess(bid, 'meta.ext.win_notice_ext')
return {
publisherId: params.publisherId,
siteId: params.siteId,
Expand All @@ -170,7 +171,8 @@ function buildWinNotice(bid) {
responseTimestamp: bid.responseTimestamp,
mediatype: bid.mediaType,
environment: app ? 'app' : 'web',
...app
...app,
ext: winNoticeExt,
};
}

Expand Down
39 changes: 32 additions & 7 deletions modules/freewheel-sspBidAdapter.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { logWarn, isArray, isFn, deepAccess } from '../src/utils.js';
import { logWarn, isArray, isFn, deepAccess, formatQS } from '../src/utils.js';
import { BANNER, VIDEO } from '../src/mediaTypes.js';
import { registerBidder } from '../src/adapters/bidderFactory.js';
import { config } from '../src/config.js';
Expand Down Expand Up @@ -372,6 +372,15 @@ export const spec = {
requestParams._fw_us_privacy = bidderRequest.uspConsent;
}

// Add GPP consent
if (bidderRequest && bidderRequest.gppConsent) {
requestParams.gpp = bidderRequest.gppConsent.gppString;
requestParams.gpp_sid = bidderRequest.gppConsent.applicableSections;
} else if (bidderRequest && bidderRequest.ortb2 && bidderRequest.ortb2.regs && bidderRequest.ortb2.regs.gpp) {
requestParams.gpp = bidderRequest.ortb2.regs.gpp;
requestParams.gpp_sid = bidderRequest.ortb2.regs.gpp_sid;
}

// Add schain object
var schain = currentBidRequest.schain;
if (schain) {
Expand Down Expand Up @@ -526,26 +535,42 @@ export const spec = {
return bidResponses;
},

getUserSyncs: function(syncOptions, responses, gdprConsent, usPrivacy) {
var gdprParams = '';
getUserSyncs: function(syncOptions, responses, gdprConsent, usPrivacy, gppConsent) {
const params = {};

if (gdprConsent) {
if (typeof gdprConsent.gdprApplies === 'boolean') {
gdprParams = `?gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
params.gdpr = Number(gdprConsent.gdprApplies);
params.gdpr_consent = gdprConsent.consentString;
} else {
gdprParams = `?gdpr_consent=${gdprConsent.consentString}`;
params.gdpr_consent = gdprConsent.consentString;
}
}

if (gppConsent) {
if (typeof gppConsent.gppString === 'string') {
params.gpp = gppConsent.gppString;
}
if (gppConsent.applicableSections) {
params.gpp_sid = gppConsent.applicableSections;
}
}

var queryString = '';
if (params) {
queryString = '?' + `${formatQS(params)}`;
}

const syncs = [];
if (syncOptions && syncOptions.pixelEnabled) {
syncs.push({
type: 'image',
url: USER_SYNC_URL + gdprParams
url: USER_SYNC_URL + queryString
});
} else if (syncOptions.iframeEnabled) {
syncs.push({
type: 'iframe',
url: USER_SYNC_URL + gdprParams
url: USER_SYNC_URL + queryString
});
}

Expand Down
110 changes: 110 additions & 0 deletions modules/greenbidsRtdProvider.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
import { logError } from '../src/utils.js';
import { ajax } from '../src/ajax.js';
import { submodule } from '../src/hook.js';

const MODULE_NAME = 'greenbidsRtdProvider';
const MODULE_VERSION = '1.0.0';
const ENDPOINT = 'https://europe-west1-greenbids-357713.cloudfunctions.net/partner-selection';

const auctionInfo = {};
const rtdOptions = {};

function init(moduleConfig) {
let params = moduleConfig?.params;
if (!params?.pbuid) {
logError('Greenbids pbuid is not set!');
return false;
} else {
rtdOptions.pbuid = params?.pbuid;
rtdOptions.targetTPR = params?.targetTPR || 0.99;
rtdOptions.timeout = params?.timeout || 200;
return true;
}
}

function onAuctionInitEvent(auctionDetails) {
auctionInfo.auctionId = auctionDetails.auctionId;
}

function getBidRequestData(reqBidsConfigObj, callback, config, userConsent) {
let promise = createPromise(reqBidsConfigObj);
promise.then(callback);
}

function createPromise(reqBidsConfigObj) {
return new Promise((resolve) => {
const timeoutId = setTimeout(() => {
resolve(reqBidsConfigObj);
}, rtdOptions.timeout);
ajax(
ENDPOINT,
{
success: (response) => {
processSuccessResponse(response, timeoutId, reqBidsConfigObj);
resolve(reqBidsConfigObj);
},
error: () => {
clearTimeout(timeoutId);
resolve(reqBidsConfigObj);
},
},
createPayload(reqBidsConfigObj),
{ contentType: 'application/json' }
);
});
}

function processSuccessResponse(response, timeoutId, reqBidsConfigObj) {
clearTimeout(timeoutId);
const responseAdUnits = JSON.parse(response);

updateAdUnitsBasedOnResponse(reqBidsConfigObj.adUnits, responseAdUnits);
}

function updateAdUnitsBasedOnResponse(adUnits, responseAdUnits) {
adUnits.forEach((adUnit) => {
const matchingAdUnit = findMatchingAdUnit(responseAdUnits, adUnit.code);
if (matchingAdUnit) {
removeFalseBidders(adUnit, matchingAdUnit);
}
});
}

function findMatchingAdUnit(responseAdUnits, adUnitCode) {
return responseAdUnits.find((responseAdUnit) => responseAdUnit.code === adUnitCode);
}

function removeFalseBidders(adUnit, matchingAdUnit) {
const falseBidders = getFalseBidders(matchingAdUnit.bidders);
adUnit.bids = adUnit.bids.filter((bidRequest) => !falseBidders.includes(bidRequest.bidder));
}

function getFalseBidders(bidders) {
return Object.entries(bidders)
.filter(([bidder, shouldKeep]) => !shouldKeep)
.map(([bidder]) => bidder);
}

function createPayload(reqBidsConfigObj) {
return JSON.stringify({
auctionId: auctionInfo.auctionId,
version: MODULE_VERSION,
referrer: window.location.href,
prebid: '$prebid.version$',
rtdOptions: rtdOptions,
adUnits: reqBidsConfigObj.adUnits,
});
}

export const greenbidsSubmodule = {
name: MODULE_NAME,
init: init,
onAuctionInitEvent: onAuctionInitEvent,
getBidRequestData: getBidRequestData,
updateAdUnitsBasedOnResponse: updateAdUnitsBasedOnResponse,
findMatchingAdUnit: findMatchingAdUnit,
removeFalseBidders: removeFalseBidders,
getFalseBidders: getFalseBidders,
};

submodule('realTimeData', greenbidsSubmodule);
Loading

0 comments on commit 7d0b86d

Please sign in to comment.