Skip to content

Various bid adapters: Currency config cleanup #12102

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

Merged
merged 18 commits into from
Dec 4, 2024
3 changes: 3 additions & 0 deletions libraries/ortb2Utils/currency.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function getCurrencyFromBidderRequest(bidderRequest) {
return bidderRequest?.ortb2?.ext?.prebid?.adServerCurrency;
}
3 changes: 2 additions & 1 deletion modules/adfBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
import {deepAccess, deepClone, deepSetValue, mergeDeep, parseSizesInput, setOnAny} from '../src/utils.js';
import {config} from '../src/config.js';
import {Renderer} from '../src/Renderer.js';
import { getCurrencyFromBidderRequest } from '../libraries/ortb2Utils/currency.js';

const { getConfig } = config;

Expand Down Expand Up @@ -60,7 +61,7 @@ export const spec = {
const pt = setOnAny(validBidRequests, 'params.pt') || setOnAny(validBidRequests, 'params.priceType') || 'net';
const tid = bidderRequest.ortb2?.source?.tid;
const test = setOnAny(validBidRequests, 'params.test');
const currency = getConfig('currency.adServerCurrency');
const currency = getCurrencyFromBidderRequest(bidderRequest);
const cur = currency && [ currency ];
const eids = setOnAny(validBidRequests, 'userIdAsEids');
const schain = setOnAny(validBidRequests, 'schain');
Expand Down
27 changes: 14 additions & 13 deletions modules/adgenerationBidAdapter.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import {deepAccess, getBidIdParameter} from '../src/utils.js';
import {registerBidder} from '../src/adapters/bidderFactory.js';
import {BANNER, NATIVE} from '../src/mediaTypes.js';
import {config} from '../src/config.js';
import {convertOrtbRequestToProprietaryNative} from '../src/native.js';
import {tryAppendQueryString} from '../libraries/urlUtils/urlUtils.js';
import {escapeUnsafeChars} from '../libraries/htmlEscape/htmlEscape.js';
import { escapeUnsafeChars } from '../libraries/htmlEscape/htmlEscape.js';
import { getCurrencyFromBidderRequest } from '../libraries/ortb2Utils/currency.js';
import { tryAppendQueryString } from '../libraries/urlUtils/urlUtils.js';
import { registerBidder } from '../src/adapters/bidderFactory.js';
import { BANNER, NATIVE } from '../src/mediaTypes.js';
import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
import { deepAccess, getBidIdParameter } from '../src/utils.js';

/**
* @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
Expand Down Expand Up @@ -61,7 +61,7 @@ export const spec = {
data = tryAppendQueryString(data, 't', 'json3');
data = tryAppendQueryString(data, 'transactionid', validReq.ortb2Imp?.ext?.tid);
data = tryAppendQueryString(data, 'sizes', getSizes(validReq));
data = tryAppendQueryString(data, 'currency', getCurrencyType());
data = tryAppendQueryString(data, 'currency', getCurrencyType(bidderRequest));
data = tryAppendQueryString(data, 'pbver', '$prebid.version$');
data = tryAppendQueryString(data, 'sdkname', 'prebidjs');
data = tryAppendQueryString(data, 'adapterver', ADGENE_PREBID_VERSION);
Expand Down Expand Up @@ -94,7 +94,8 @@ export const spec = {
method: 'GET',
url: url,
data: data,
bidRequest: validBidRequests[i]
bidRequest: validBidRequests[i],
bidderRequest
});
}
return serverRequests;
Expand All @@ -119,7 +120,7 @@ export const spec = {
height: body.h ? body.h : 1,
creativeId: body.creativeid || '',
dealId: body.dealid || '',
currency: getCurrencyType(),
currency: getCurrencyFromBidderRequest(bidRequests.bidderRequest),
netRevenue: true,
ttl: body.ttl || 10,
};
Expand Down Expand Up @@ -304,9 +305,9 @@ function getSizes(validReq) {
/**
* @return {?string} USD or JPY
*/
function getCurrencyType() {
if (config.getConfig('currency.adServerCurrency') && config.getConfig('currency.adServerCurrency').toUpperCase() === 'USD') return 'USD';
return 'JPY';
function getCurrencyType(bidderRequest) {
const adServerCurrency = getCurrencyFromBidderRequest(bidderRequest) || ''
return adServerCurrency.toUpperCase() === 'USD' ? 'USD' : 'JPY'
}

/**
Expand Down
10 changes: 5 additions & 5 deletions modules/admaticBidAdapter.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import {getValue, formatQS, logError, deepAccess, isArray, getBidIdParameter} 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 { getCurrencyFromBidderRequest } from '../libraries/ortb2Utils/currency.js';
import { Renderer } from '../src/Renderer.js';
import { registerBidder } from '../src/adapters/bidderFactory.js';
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
import { deepAccess, formatQS, getBidIdParameter, getValue, isArray, logError } from '../src/utils.js';

/**
* @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
Expand Down Expand Up @@ -73,7 +73,7 @@ export const spec = {
const ortb = bidderRequest.ortb2;
const networkId = getValue(validBidRequests[0].params, 'networkId');
const host = getValue(validBidRequests[0].params, 'host');
const currency = config.getConfig('currency.adServerCurrency') || 'TRY';
const currency = getCurrencyFromBidderRequest(bidderRequest) || 'TRY';
const bidderName = validBidRequests[0].bidder;

const payload = {
Expand Down
17 changes: 9 additions & 8 deletions modules/adotBidAdapter.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import {Renderer} from '../src/Renderer.js';
import {registerBidder} from '../src/adapters/bidderFactory.js';
import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
import {isArray, isBoolean, isFn, isPlainObject, isStr, logError, replaceAuctionPrice} from '../src/utils.js';
import {find} from '../src/polyfill.js';
import {config} from '../src/config.js';
import {OUTSTREAM} from '../src/video.js';
import { getCurrencyFromBidderRequest } from '../libraries/ortb2Utils/currency.js';
import { Renderer } from '../src/Renderer.js';
import { registerBidder } from '../src/adapters/bidderFactory.js';
import { config } from '../src/config.js';
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
import { find } from '../src/polyfill.js';
import { isArray, isBoolean, isFn, isPlainObject, isStr, logError, replaceAuctionPrice } from '../src/utils.js';
import { OUTSTREAM } from '../src/video.js';

/**
* @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
Expand Down Expand Up @@ -287,7 +288,7 @@ function buildImpFromAdUnit(adUnit, bidderRequest) {
if (!mediaType) return null;

const media = IMP_BUILDER[mediaType](mediaTypes[mediaType], bidderRequest, adUnit)
const currency = config.getConfig('currency.adServerCurrency') || DEFAULT_CURRENCY;
const currency = getCurrencyFromBidderRequest(bidderRequest) || DEFAULT_CURRENCY;
const bidfloor = getMainFloor(adUnit, media.format, mediaType, currency);

return {
Expand Down
9 changes: 5 additions & 4 deletions modules/audiencerunBidAdapter.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
import { getCurrencyFromBidderRequest } from '../libraries/ortb2Utils/currency.js';
import { registerBidder } from '../src/adapters/bidderFactory.js';
import { config } from '../src/config.js';
import { BANNER } from '../src/mediaTypes.js';
import {
_each,
deepAccess,
Expand All @@ -8,9 +12,6 @@ import {
logError,
triggerPixel,
} from '../src/utils.js';
import {config} from '../src/config.js';
import {registerBidder} from '../src/adapters/bidderFactory.js';
import {BANNER} from '../src/mediaTypes.js';

/**
* @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
Expand Down Expand Up @@ -136,7 +137,7 @@ export const spec = {
referer: deepAccess(bidderRequest, 'refererInfo.topmostLocation'),
// TODO: please do not send internal data structures over the network
refererInfo: deepAccess(bidderRequest, 'refererInfo.legacy'),
currencyCode: config.getConfig('currency.adServerCurrency'),
currencyCode: getCurrencyFromBidderRequest(bidderRequest),
timeout: config.getConfig('bidderTimeout'),
bids,
};
Expand Down
14 changes: 7 additions & 7 deletions modules/beopBidAdapter.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
import { getCurrencyFromBidderRequest } from '../libraries/ortb2Utils/currency.js';
import { getAllOrtbKeywords } from '../libraries/keywords/keywords.js';
import { registerBidder } from '../src/adapters/bidderFactory.js';
import { getRefererInfo } from '../src/refererDetection.js';
import {
buildUrl,
deepAccess, getBidIdParameter,
Expand All @@ -7,10 +11,6 @@ import {
logWarn,
triggerPixel
} from '../src/utils.js';
import {getRefererInfo} from '../src/refererDetection.js';
import {registerBidder} from '../src/adapters/bidderFactory.js';
import {config} from '../src/config.js';
import {getAllOrtbKeywords} from '../libraries/keywords/keywords.js';

/**
* @typedef {import('../src/adapters/bidderFactory.js').Bid} Bid
Expand Down Expand Up @@ -52,7 +52,7 @@ export const spec = {
* @return ServerRequest Info describing the request to the BeOp's server
*/
buildRequests: function(validBidRequests, bidderRequest) {
const slots = validBidRequests.map(beOpRequestSlotsMaker);
const slots = validBidRequests.map((bid) => beOpRequestSlotsMaker(bid, bidderRequest));
const firstPartyData = bidderRequest.ortb2 || {};
const psegs = firstPartyData.user?.ext?.permutive || firstPartyData.user?.ext?.data?.permutive || [];
const userBpSegs = firstPartyData.user?.ext?.bpsegs || firstPartyData.user?.ext?.data?.bpsegs || [];
Expand Down Expand Up @@ -142,9 +142,9 @@ function buildTrackingParams(data, info, value) {
};
}

function beOpRequestSlotsMaker(bid) {
function beOpRequestSlotsMaker(bid, bidderRequest) {
const bannerSizes = deepAccess(bid, 'mediaTypes.banner.sizes');
const publisherCurrency = config.getConfig('currency.adServerCurrency') || getValue(bid.params, 'currency') || 'EUR';
const publisherCurrency = getCurrencyFromBidderRequest(bidderRequest) || getValue(bid.params, 'currency') || 'EUR';
let floor;
if (typeof bid.getFloor === 'function') {
const floorInfo = bid.getFloor({currency: publisherCurrency, mediaType: 'banner', size: [1, 1]});
Expand Down
5 changes: 3 additions & 2 deletions modules/carodaBidAdapter.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
// jshint esversion: 6, es3: false, node: true
'use strict'

import { getCurrencyFromBidderRequest } from '../libraries/ortb2Utils/currency.js';
import { registerBidder } from '../src/adapters/bidderFactory.js';
import { config } from '../src/config.js';
import { BANNER, VIDEO } from '../src/mediaTypes.js';
import {
deepAccess,
Expand All @@ -11,7 +13,6 @@ import {
sizeTupleToRtbSize,
sizesToSizeTuples
} from '../src/utils.js';
import { config } from '../src/config.js';

const { getConfig } = config;

Expand Down Expand Up @@ -45,7 +46,7 @@ export const spec = {
getFirstWithKey(validBidRequests, 'params.priceType') ||
'net';
const test = getFirstWithKey(validBidRequests, 'params.test');
const currency = getConfig('currency.adServerCurrency');
const currency = getCurrencyFromBidderRequest(bidderRequest);
const eids = getFirstWithKey(validBidRequests, 'userIdAsEids');
const schain = getFirstWithKey(validBidRequests, 'schain');
const request = {
Expand Down
3 changes: 2 additions & 1 deletion modules/cointrafficBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { parseSizesInput, logError, isEmpty } from '../src/utils.js';
import { registerBidder } from '../src/adapters/bidderFactory.js';
import { BANNER } from '../src/mediaTypes.js'
import { config } from '../src/config.js'
import { getCurrencyFromBidderRequest } from '../libraries/ortb2Utils/currency.js';

/**
* @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
Expand Down Expand Up @@ -45,7 +46,7 @@ export const spec = {
const sizes = parseSizesInput(bidRequest.params.size || bidRequest.sizes);
const currency =
config.getConfig(`currency.bidderCurrencyDefault.${BIDDER_CODE}`) ||
config.getConfig('currency.adServerCurrency') ||
getCurrencyFromBidderRequest(bidderRequest) ||
DEFAULT_CURRENCY;

if (ALLOWED_CURRENCIES.indexOf(currency) === -1) {
Expand Down
14 changes: 12 additions & 2 deletions modules/currency.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {logError, logInfo, logMessage, logWarn} from '../src/utils.js';
import {deepSetValue, logError, logInfo, logMessage, logWarn} from '../src/utils.js';
import {getGlobal} from '../src/prebidGlobal.js';
import { EVENTS, REJECTION_REASON } from '../src/constants.js';
import {ajax} from '../src/ajax.js';
Expand All @@ -8,6 +8,7 @@ import {defer} from '../src/utils/promise.js';
import {registerOrtbProcessor, REQUEST} from '../src/pbjsORTB.js';
import {timedBidResponseHook} from '../src/utils/perfMetrics.js';
import {on as onEvent, off as offEvent} from '../src/events.js';
import { enrichFPD } from '../src/fpd/enrichment.js';

const DEFAULT_CURRENCY_RATE_URL = 'https://cdn.jsdelivr.net/gh/prebid/currency-file@1/latest.json?date=$$TODAY$$';
const CURRENCY_RATE_PRECISION = 4;
Expand Down Expand Up @@ -162,16 +163,18 @@ function initCurrency() {
getGlobal().convertCurrency = (cpm, fromCurrency, toCurrency) => parseFloat(cpm) * getCurrencyConversion(fromCurrency, toCurrency);
getHook('addBidResponse').before(addBidResponseHook, 100);
getHook('responsesReady').before(responsesReadyHook);
enrichFPD.before(enrichFPDHook);
onEvent(EVENTS.AUCTION_TIMEOUT, rejectOnAuctionTimeout);
onEvent(EVENTS.AUCTION_INIT, loadRates);
loadRates();
}
}

function resetCurrency() {
export function resetCurrency() {
if (currencySupportEnabled) {
getHook('addBidResponse').getHooks({hook: addBidResponseHook}).remove();
getHook('responsesReady').getHooks({hook: responsesReadyHook}).remove();
enrichFPD.getHooks({hook: enrichFPDHook}).remove();
offEvent(EVENTS.AUCTION_TIMEOUT, rejectOnAuctionTimeout);
offEvent(EVENTS.AUCTION_INIT, loadRates);
delete getGlobal().convertCurrency;
Expand Down Expand Up @@ -335,3 +338,10 @@ export function setOrtbCurrency(ortbRequest, bidderRequest, context) {
}

registerOrtbProcessor({type: REQUEST, name: 'currency', fn: setOrtbCurrency});

function enrichFPDHook(next, fpd) {
return next(fpd.then(ortb2 => {
deepSetValue(ortb2, 'ext.prebid.adServerCurrency', adServerCurrency);
return ortb2;
}))
}
12 changes: 6 additions & 6 deletions modules/deltaprojectsBidAdapter.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {registerBidder} from '../src/adapters/bidderFactory.js';
import {BANNER} from '../src/mediaTypes.js';
import { getCurrencyFromBidderRequest } from '../libraries/ortb2Utils/currency.js';
import { registerBidder } from '../src/adapters/bidderFactory.js';
import { BANNER } from '../src/mediaTypes.js';
import {
_each,
_map,
Expand All @@ -11,7 +12,6 @@ import {
logWarn,
setOnAny
} from '../src/utils.js';
import {config} from '../src/config.js';

export const BIDDER_CODE = 'deltaprojects';
export const BIDDER_ENDPOINT_URL = 'https://d5p.de17a.com/dogfight/prebid';
Expand Down Expand Up @@ -74,7 +74,7 @@ function buildRequests(validBidRequests, bidderRequest) {

// build bid specific
return validBidRequests.map(validBidRequest => {
const openRTBRequest = buildOpenRTBRequest(validBidRequest, id, site, device, user, tmax, regs);
const openRTBRequest = buildOpenRTBRequest(validBidRequest, bidderRequest, id, site, device, user, tmax, regs);
return {
method: 'POST',
url: BIDDER_ENDPOINT_URL,
Expand All @@ -85,9 +85,9 @@ function buildRequests(validBidRequests, bidderRequest) {
});
}

function buildOpenRTBRequest(validBidRequest, id, site, device, user, tmax, regs) {
function buildOpenRTBRequest(validBidRequest, bidderRequest, id, site, device, user, tmax, regs) {
// build cur
const currency = config.getConfig('currency.adServerCurrency') || deepAccess(validBidRequest, 'params.currency');
const currency = getCurrencyFromBidderRequest(bidderRequest) || deepAccess(validBidRequest, 'params.currency');
const cur = currency && [currency];

// build impression
Expand Down
3 changes: 2 additions & 1 deletion modules/dianomiBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
import { config } from '../src/config.js';
import { Renderer } from '../src/Renderer.js';
import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
import { getCurrencyFromBidderRequest } from '../libraries/ortb2Utils/currency.js';

const { getConfig } = config;

Expand Down Expand Up @@ -114,7 +115,7 @@ export const spec = {
setOnAny(validBidRequests, 'params.priceType') ||
'net';
const tid = bidderRequest.ortb2?.source?.tid;
const currency = getConfig('currency.adServerCurrency');
const currency = getCurrencyFromBidderRequest(bidderRequest);
const cur = currency && [currency];
const eids = setOnAny(validBidRequests, 'userIdAsEids');
const schain = setOnAny(validBidRequests, 'schain');
Expand Down
3 changes: 2 additions & 1 deletion modules/dsp_genieeBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { BANNER } from '../src/mediaTypes.js';
import { ortbConverter } from '../libraries/ortbConverter/converter.js';
import { deepAccess, deepSetValue } from '../src/utils.js';
import { config } from '../src/config.js';
import { getCurrencyFromBidderRequest } from '../libraries/ortb2Utils/currency.js';

/**
* @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
Expand Down Expand Up @@ -71,7 +72,7 @@ export const spec = {
if (deepAccess(bidderRequest, 'gdprConsent.gdprApplies') || // gdpr
USPConsent(bidderRequest.uspConsent) || // usp
config.getConfig('coppa') || // coppa
invalidCurrency(config.getConfig('currency.adServerCurrency')) // currency validation
invalidCurrency(getCurrencyFromBidderRequest(bidderRequest)) // currency validation
) {
return {
method: 'GET',
Expand Down
4 changes: 2 additions & 2 deletions modules/finativeBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import {registerBidder} from '../src/adapters/bidderFactory.js';
import {NATIVE} from '../src/mediaTypes.js';
import {_map, deepSetValue, isEmpty, setOnAny} from '../src/utils.js';
import {config} from '../src/config.js';
import {convertOrtbRequestToProprietaryNative} from '../src/native.js';
import { getCurrencyFromBidderRequest } from '../libraries/ortb2Utils/currency.js';

const BIDDER_CODE = 'finative';
const DEFAULT_CUR = 'EUR';
Expand Down Expand Up @@ -64,7 +64,7 @@ export const spec = {
validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
const pt = setOnAny(validBidRequests, 'params.pt') || setOnAny(validBidRequests, 'params.priceType') || 'net';
const tid = bidderRequest.ortb2?.source?.tid;
const cur = [config.getConfig('currency.adServerCurrency') || DEFAULT_CUR];
const cur = [getCurrencyFromBidderRequest(bidderRequest) || DEFAULT_CUR];
let url = bidderRequest.refererInfo.referer;

const imp = validBidRequests.map((bid, id) => {
Expand Down
Loading
Loading