Skip to content

Commit

Permalink
Prebid Core: refactor bidderSettings to have only one entry point (#7712
Browse files Browse the repository at this point in the history
)

* Refactor bidderSettings to have only one entry point

Add thin wrapper around `$$PREBID_GLOBAL$$.bidderSettings` that reduces some duplicate logic around fallback to `bidderSettings.standard`

* Do not return direct reference to a global array

* Fix bug where result of auction.js/getPriceByGranularity would ignore per-bid granularity after the first call

* Remove redundant utils.deepMerge, move utils unit tests

* Attempt to trick codacy into being a little less helpful

* Use class syntax

* Remove caching of standard adServerTargeting

* Convert recent 'allowZeroCpmBids' to new bidderSettings api
  • Loading branch information
dgirardi authored Jan 25, 2022
1 parent 6a76544 commit 444047a
Show file tree
Hide file tree
Showing 13 changed files with 45,345 additions and 8,507 deletions.
9 changes: 8 additions & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,13 @@ module.exports = {
'BROWSERSTACK_USERNAME': false,
'BROWSERSTACK_KEY': false
},
// use babel as parser for fancy syntax
parser: '@babel/eslint-parser',
parserOptions: {
sourceType: 'module',
ecmaVersion: 2018,
},

rules: {
'comma-dangle': 'off',
semi: 'off',
Expand All @@ -49,5 +52,9 @@ module.exports = {
rules: {
'prebid/validate-imports': ['error', allowedModules[key]]
}
}))
})).concat([{
// code in other packages (such as plugins/eslint) is not "seen" by babel and its parser will complain.
files: 'plugins/*/**/*.js',
parser: 'esprima'
}])
};
5 changes: 3 additions & 2 deletions modules/appnexusBidAdapter.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { convertCamelToUnderscore, isArray, isNumber, isPlainObject, logError, logInfo, deepAccess, logMessage, convertTypes, isStr, getParameterByName, deepClone, chunk, logWarn, getBidRequest, createTrackPixelHtml, isEmpty, transformBidderParamKeywords, getMaxValueFromArray, fill, getMinValueFromArray, isArrayOfNums, isFn, isAllowZeroCpmBidsEnabled } from '../src/utils.js';
import { convertCamelToUnderscore, isArray, isNumber, isPlainObject, logError, logInfo, deepAccess, logMessage, convertTypes, isStr, getParameterByName, deepClone, chunk, logWarn, getBidRequest, createTrackPixelHtml, isEmpty, transformBidderParamKeywords, getMaxValueFromArray, fill, getMinValueFromArray, isArrayOfNums, isFn } from '../src/utils.js';
import { Renderer } from '../src/Renderer.js';
import { config } from '../src/config.js';
import { registerBidder, getIabSubCategory } from '../src/adapters/bidderFactory.js';
Expand All @@ -8,6 +8,7 @@ import find from 'core-js-pure/features/array/find.js';
import includes from 'core-js-pure/features/array/includes.js';
import { OUTSTREAM, INSTREAM } from '../src/video.js';
import { getStorageManager } from '../src/storageManager.js';
import { bidderSettings } from '../src/bidderSettings.js';

const BIDDER_CODE = 'appnexus';
const URL = 'https://ib.adnxs.com/ut/v3/prebid';
Expand Down Expand Up @@ -303,7 +304,7 @@ export const spec = {
serverResponse.tags.forEach(serverBid => {
const rtbBid = getRtbBid(serverBid);
if (rtbBid) {
const cpmCheck = (isAllowZeroCpmBidsEnabled(bidderRequest.bidderCode)) ? rtbBid.cpm >= 0 : rtbBid.cpm > 0;
const cpmCheck = (bidderSettings.get(bidderRequest.bidderCode, 'allowZeroCpmBids') === true) ? rtbBid.cpm >= 0 : rtbBid.cpm > 0;
if (cpmCheck && includes(this.supportedMediaTypes, rtbBid.ad_type)) {
const bid = newBid(serverBid, rtbBid, bidderRequest);
bid.mediaType = parseMediaType(rtbBid);
Expand Down
3 changes: 2 additions & 1 deletion modules/priceFloors.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { getHook } from '../src/hook.js';
import { createBid } from '../src/bidfactory.js';
import find from 'core-js-pure/features/array/find.js';
import { getRefererInfo } from '../src/refererDetection.js';
import {bidderSettings} from '../src/bidderSettings.js';

/**
* @summary This Module is intended to provide users with the ability to dynamically set and enforce price floors on a per auction basis.
Expand Down Expand Up @@ -147,7 +148,7 @@ function generatePossibleEnumerations(arrayOfFields, delimiter) {
* @summary If a the input bidder has a registered cpmadjustment it returns the input CPM after being adjusted
*/
export function getBiddersCpmAdjustment(bidderName, inputCpm, bid = {}) {
const adjustmentFunction = deepAccess(getGlobal(), `bidderSettings.${bidderName}.bidCpmAdjustment`) || deepAccess(getGlobal(), 'bidderSettings.standard.bidCpmAdjustment');
const adjustmentFunction = bidderSettings.get(bidderName, 'bidCpmAdjustment');
if (adjustmentFunction) {
return parseFloat(adjustmentFunction(inputCpm, {...bid, cpm: inputCpm}));
}
Expand Down
9 changes: 5 additions & 4 deletions modules/sortableAnalyticsAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import adapterManager from '../src/adapterManager.js';
import {ajax} from '../src/ajax.js';
import {getGlobal} from '../src/prebidGlobal.js';
import { config } from '../src/config.js';
import {bidderSettings} from '../src/bidderSettings.js';

const DEFAULT_PROTOCOL = 'https';
const DEFAULT_HOST = 'pa.deployads.com';
Expand Down Expand Up @@ -182,11 +183,11 @@ function getFactor(bidder) {
}

function getBiddersFactors() {
const pb = getGlobal();
const result = {};
if (pb && pb.bidderSettings) {
Object.keys(pb.bidderSettings).forEach(bidderKey => {
const bidder = pb.bidderSettings[bidderKey];
const settings = bidderSettings.getSettings();
if (settings) {
Object.keys(settings).forEach(bidderKey => {
const bidder = settings[bidderKey];
const factor = getFactor(bidder);
if (factor !== null) {
result[bidderKey] = factor;
Expand Down
Loading

0 comments on commit 444047a

Please sign in to comment.