diff --git a/src/auction.js b/src/auction.js index c94e3adc9a7..15c6b50ce71 100644 --- a/src/auction.js +++ b/src/auction.js @@ -626,6 +626,16 @@ export const getPriceByGranularity = (granularity) => { } } +/** + * This function returns a function to get first advertiser domain from bid response meta + * @returns {function} + */ +export const getAdvertiserDomain = () => { + return (bid) => { + return (bid.meta && bid.meta.advertiserDomains && bid.meta.advertiserDomains.length > 0) ? bid.meta.advertiserDomains[0] : ''; + } +} + /** * @param {string} mediaType * @param {string} bidderCode @@ -662,6 +672,7 @@ export function getStandardBidderSettings(mediaType, bidderCode, bidReq) { createKeyVal(TARGETING_KEYS.DEAL, 'dealId'), createKeyVal(TARGETING_KEYS.SOURCE, 'source'), createKeyVal(TARGETING_KEYS.FORMAT, 'mediaType'), + createKeyVal(TARGETING_KEYS.ADOMAIN, getAdvertiserDomain()), ] } diff --git a/src/constants.json b/src/constants.json index 92b1dc6cc34..4025e084682 100644 --- a/src/constants.json +++ b/src/constants.json @@ -59,6 +59,19 @@ "CUSTOM": "custom" }, "TARGETING_KEYS": { + "BIDDER": "hb_bidder", + "AD_ID": "hb_adid", + "PRICE_BUCKET": "hb_pb", + "SIZE": "hb_size", + "DEAL": "hb_deal", + "SOURCE": "hb_source", + "FORMAT": "hb_format", + "UUID": "hb_uuid", + "CACHE_ID": "hb_cache_id", + "CACHE_HOST": "hb_cache_host", + "ADOMAIN" : "hb_adomain" + }, + "DEFAULT_TARGETING_KEYS": { "BIDDER": "hb_bidder", "AD_ID": "hb_adid", "PRICE_BUCKET": "hb_pb", diff --git a/src/targeting.js b/src/targeting.js index 1c1a97a7016..aa80ce6fd5d 100644 --- a/src/targeting.js +++ b/src/targeting.js @@ -250,7 +250,8 @@ export function newTargeting(auctionManager) { }); }); - const allowedKeys = config.getConfig('targetingControls.allowTargetingKeys'); + const defaultKeys = Object.keys(Object.assign({}, CONSTANTS.DEFAULT_TARGETING_KEYS, CONSTANTS.NATIVE_KEYS)); + const allowedKeys = config.getConfig('targetingControls.allowTargetingKeys') || defaultKeys; if (Array.isArray(allowedKeys) && allowedKeys.length > 0) { targeting = getAllowedTargetingKeyValues(targeting, allowedKeys); } diff --git a/test/spec/auctionmanager_spec.js b/test/spec/auctionmanager_spec.js index a50eba5e585..69e34c4a07a 100644 --- a/test/spec/auctionmanager_spec.js +++ b/test/spec/auctionmanager_spec.js @@ -143,6 +143,9 @@ describe('auctionmanager.js', function () { adId: '1adId', source: 'client', mediaType: 'banner', + meta: { + advertiserDomains: ['adomain'] + } }; /* return the expected response for a given bid, filter by keys if given */ @@ -154,6 +157,7 @@ describe('auctionmanager.js', function () { expected[ CONSTANTS.TARGETING_KEYS.SIZE ] = bid.getSize(); expected[ CONSTANTS.TARGETING_KEYS.SOURCE ] = bid.source; expected[ CONSTANTS.TARGETING_KEYS.FORMAT ] = bid.mediaType; + expected[ CONSTANTS.TARGETING_KEYS.ADOMAIN ] = bid.meta.advertiserDomains[0]; if (bid.mediaType === 'video') { expected[ CONSTANTS.TARGETING_KEYS.UUID ] = bid.videoCacheKey; expected[ CONSTANTS.TARGETING_KEYS.CACHE_ID ] = bid.videoCacheKey; @@ -239,6 +243,12 @@ describe('auctionmanager.js', function () { return bidResponse.mediaType; } }, + { + key: CONSTANTS.TARGETING_KEYS.ADOMAIN, + val: function (bidResponse) { + return bidResponse.meta.advertiserDomains[0]; + } + } ] } @@ -309,6 +319,12 @@ describe('auctionmanager.js', function () { val: function (bidResponse) { return bidResponse.videoCacheKey; } + }, + { + key: CONSTANTS.TARGETING_KEYS.ADOMAIN, + val: function (bidResponse) { + return bidResponse.meta.advertiserDomains[0]; + } } ]