Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sync with prebid master #3

Merged
merged 28 commits into from
May 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
f076c8b
Relevant Digital Bid Adapter: initial release (#9685)
samuel-palmer-relevant-digital May 3, 2023
16fe0cf
Greenbids RTD provider (#9848)
jbogp May 4, 2023
27c817e
Bump engine.io and socket.io (#9903)
dependabot[bot] May 4, 2023
0ac5d66
support VIDEO feature flag in TTD bid adapter (#9878)
mbcrute May 4, 2023
045b5d2
FreeWheel SSP Bid Adapter: add GPP support (#9859)
xwang202 May 4, 2023
b5cfcd9
Prebid 7.48.0 release
prebidjs-release May 4, 2023
bc665aa
Increment version to 7.49.0-pre
prebidjs-release May 4, 2023
879e5c4
Prebid Core: Functionality to Optionally Defer Billing for an Ad (#9640)
jlquaccia May 5, 2023
71a5e21
MgidAdapter: change user sync get parameters (#9891)
Gaudeamus May 6, 2023
88095ca
Rise Bid Adapter: support Coppa param (#9837)
YakirLavi May 6, 2023
d5bfdee
Bidder Settings: Support for option to apply adapter bid adjustment t…
jlquaccia May 6, 2023
45867d4
PBjs Core : filter bidders from config when not server-side (#9632)
May 6, 2023
ea889fe
MinuteMedia Bid Adapter: Support Coppa param (#9838)
YakirLavi May 6, 2023
386c95a
ttd bid adapter: pass on all of user/app/ortb2imp for first party dat…
khang-vu-ttd May 6, 2023
c43a0e4
AIDEM Bidder Adapter: added arbitrary ext field to win notice (#9906)
Wazabit May 6, 2023
ce01d89
YieldlabBidAdapter updated native asset mapping (#9895)
nkloeber May 6, 2023
122f67d
Update index.js (#9913)
patmmccann May 8, 2023
b6d949f
fix for #8421, Update ad generation adapter 1.5.0 (#9911)
banakemi May 8, 2023
9f1dd22
PubmaticAnalyticsAdapter - Passing GPT slot name for "au" field. (#9912)
kapil-tuptewar May 8, 2023
ca2f974
Retailspot Bid Adapter : initial release (#9824)
rs-guian May 8, 2023
fbfb4c7
Vidazoo Bid Adapter: allow all id systems (#9910)
saar120 May 9, 2023
a222952
Admixer Bid Adapter: add alias handlers (#9931)
AdmixerTech May 10, 2023
bc6aa84
IX Bid Adapter : fix missing IX First Party Data (#9920)
shahinrahbariasl May 10, 2023
36ccf08
Update nexx360BidAdapter.js (#9938)
gchicoye May 11, 2023
b5a9556
KueezRtb Bid Adapter: added support for all user id systems. (#9926)
saar120 May 11, 2023
facd0b7
MinuteMediaPlus Bid Adapter: added support for all user id systems. (…
saar120 May 11, 2023
2abfd46
Prebid 7.49.0 release
prebidjs-release May 11, 2023
8fe7115
Increment version to 7.50.0-pre
prebidjs-release May 11, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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