From a5a58b19235f90767eafe80764fdf42ed4c79eff Mon Sep 17 00:00:00 2001 From: Daniel Hoffmann Date: Mon, 3 Oct 2016 14:50:15 +0100 Subject: [PATCH 1/6] xhb adapter added - use AppNexus test ad unit --- src/adapters/xhb.js | 186 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 src/adapters/xhb.js diff --git a/src/adapters/xhb.js b/src/adapters/xhb.js new file mode 100644 index 00000000000..0c6ab2f51ed --- /dev/null +++ b/src/adapters/xhb.js @@ -0,0 +1,186 @@ +import { getBidRequest } from '../utils.js'; + +var CONSTANTS = require('../constants.json'); +var utils = require('../utils.js'); +var adloader = require('../adloader.js'); +var bidmanager = require('../bidmanager.js'); +var bidfactory = require('../bidfactory.js'); +//var Adapter = require('./adapter.js'); + +var XhbAdapter = function XhbAdapter() { + + function buildJPTCall(bid, callbackId) { + //determine tag params + var placementId = utils.getBidIdParamater('placementId', bid.params); + var inventoryCode = utils.getBidIdParamater('invCode', bid.params); + var referrer = utils.getBidIdParamater('referrer', bid.params); + var altReferrer = utils.getBidIdParamater('alt_referrer', bid.params); + + //Always use https + var jptCall = 'https://ib.adnxs.com/jpt?'; + + jptCall = utils.tryAppendQueryString(jptCall, 'callback', '$$PREBID_GLOBAL$$.handleXhbCB'); + jptCall = utils.tryAppendQueryString(jptCall, 'callback_uid', callbackId); + jptCall = utils.tryAppendQueryString(jptCall, 'id', placementId); + jptCall = utils.tryAppendQueryString(jptCall, 'code', inventoryCode); + + //sizes takes a bit more logic + var sizeQueryString = ''; + var parsedSizes = utils.parseSizesInput(bid.sizes); + + //combine string into proper querystring for impbus + var parsedSizesLength = parsedSizes.length; + if (parsedSizesLength > 0) { + //first value should be "size" + sizeQueryString = 'size=' + parsedSizes[0]; + if (parsedSizesLength > 1) { + //any subsequent values should be "promo_sizes" + sizeQueryString += '&promo_sizes='; + for (var j = 1; j < parsedSizesLength; j++) { + sizeQueryString += parsedSizes[j] += ','; + } + //remove trailing comma + if (sizeQueryString && sizeQueryString.charAt(sizeQueryString.length - 1) === ',') { + sizeQueryString = sizeQueryString.slice(0, sizeQueryString.length - 1); + } + } + } + + if (sizeQueryString) { + jptCall += sizeQueryString + '&'; + } + + + + + //append custom attributes: + var paramsCopy = utils.extend({}, bid.params); + + //delete attributes already used + delete paramsCopy.placementId; + delete paramsCopy.invCode; + delete paramsCopy.query; + delete paramsCopy.referrer; + delete paramsCopy.alt_referrer; + + //get the reminder + var queryParams = utils.parseQueryStringParameters(paramsCopy); + + //append + if (queryParams) { + jptCall += queryParams; + } + + //append referrer + if (referrer === '') { + referrer = utils.getTopWindowUrl(); + } + + jptCall = utils.tryAppendQueryString(jptCall, 'referrer', referrer); + jptCall = utils.tryAppendQueryString(jptCall, 'alt_referrer', altReferrer); + + + + + //remove the trailing "&" + if (jptCall.lastIndexOf('&') === jptCall.length - 1) { + jptCall = jptCall.substring(0, jptCall.length - 1); + } + + // @if NODE_ENV='debug' + utils.logMessage('jpt request built: ' + jptCall); + // @endif + + //append a timer here to track latency + bid.startTime = new Date().getTime(); + + return jptCall; + } + + //expose the callback to the global object: + $$PREBID_GLOBAL$$.handleXhbCB = function (jptResponseObj) { + + var bidCode; + + if (jptResponseObj && jptResponseObj.callback_uid) { + + var responseCPM; + var id = jptResponseObj.callback_uid; + var placementCode = ''; + var bidObj = getBidRequest(id); + if (bidObj) { + bidCode = bidObj.bidder; + placementCode = bidObj.placementCode; + //set the status + bidObj.status = CONSTANTS.STATUS.GOOD; + } + + // @if NODE_ENV='debug' + utils.logMessage('JSONP callback function called for ad ID: ' + id); + // @endif + + var bid = []; + if (jptResponseObj.result && jptResponseObj.result.ad && jptResponseObj.result.ad !== '') { + + + //responseCPM = parseInt(jptResponseObj.result.cpm, 10); + //CPM response from /jpt is dollar/cent multiplied by 10000 + //in order to avoid using floats + //switch CPM to "dollar/cent" + //responseCPM = responseCPM / 10000; + responseCPM = 0.01; + + //store bid response + //bid status is good (indicating 1) + + var adId = jptResponseObj.result.creative_id; + bid = bidfactory.createBid(1); + bid.creative_id = adId; + bid.bidderCode = bidCode; + bid.cpm = responseCPM; + //bid.available = '1'; + bid.adUrl = jptResponseObj.result.ad; + bid.width = jptResponseObj.result.width; + bid.height = jptResponseObj.result.height; + bid.dealId = jptResponseObj.result.deal_id; + + bidmanager.addBidResponse(placementCode, bid); + + } else { + //no response data + // @if NODE_ENV='debug' + utils.logMessage('No prebid response from AppNexus for placement code ' + placementCode); + // @endif + + //indicate that there is no bid for this placement + bid = bidfactory.createBid(2); + bid.bidderCode = bidCode; + bidmanager.addBidResponse(placementCode, bid); + } + + } else { + //no response data + // @if NODE_ENV='debug' + utils.logMessage('No prebid response for placement %%PLACEMENT%%'); + + // @endif + } + }; + + function _callBids(params) { + var bids = params.bids || []; + for (var i = 0; i < bids.length; i++) { + var bid = bids[i]; + var callbackId = bid.bidId; + adloader.loadScript(buildJPTCall(bid, callbackId)); + } + } + + // Export the callBids function, so that prebid.js can execute + // this function when the page asks to send out bid requests. + return { + callBids: _callBids + }; +}; + +module.exports = XhbAdapter; From 4d54224427cc6c2fa2987ca8dbe06ae866594c26 Mon Sep 17 00:00:00 2001 From: Daniel Hoffmann Date: Wed, 11 Jan 2017 14:36:31 +0000 Subject: [PATCH 2/6] adjusted adapter to set responseCPM to 0 and add in dealId --- src/adapters/xhb.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/adapters/xhb.js b/src/adapters/xhb.js index 0c6ab2f51ed..193116256d4 100644 --- a/src/adapters/xhb.js +++ b/src/adapters/xhb.js @@ -128,7 +128,7 @@ var XhbAdapter = function XhbAdapter() { //in order to avoid using floats //switch CPM to "dollar/cent" //responseCPM = responseCPM / 10000; - responseCPM = 0.01; + responseCPM = 0.00; //store bid response //bid status is good (indicating 1) @@ -142,7 +142,8 @@ var XhbAdapter = function XhbAdapter() { bid.adUrl = jptResponseObj.result.ad; bid.width = jptResponseObj.result.width; bid.height = jptResponseObj.result.height; - bid.dealId = jptResponseObj.result.deal_id; + //bid.dealId = jptResponseObj.result.deal_id; + bid.dealId = '99999999'; bidmanager.addBidResponse(placementCode, bid); From 151d010e6c014961d539039f921e1953204b34ab Mon Sep 17 00:00:00 2001 From: Daniel Hoffmann Date: Fri, 13 Jan 2017 10:06:16 +0000 Subject: [PATCH 3/6] implemented suggested changes --- src/adapters/xhb.js | 46 ++++----------------------------------------- 1 file changed, 4 insertions(+), 42 deletions(-) diff --git a/src/adapters/xhb.js b/src/adapters/xhb.js index 193116256d4..b445b3e671a 100644 --- a/src/adapters/xhb.js +++ b/src/adapters/xhb.js @@ -1,17 +1,16 @@ -import { getBidRequest } from '../utils.js'; +import {getBidRequest} from '../utils.js'; -var CONSTANTS = require('../constants.json'); +const CONSTANTS = require('../constants.json'); var utils = require('../utils.js'); var adloader = require('../adloader.js'); var bidmanager = require('../bidmanager.js'); var bidfactory = require('../bidfactory.js'); -//var Adapter = require('./adapter.js'); var XhbAdapter = function XhbAdapter() { function buildJPTCall(bid, callbackId) { //determine tag params - var placementId = utils.getBidIdParamater('placementId', bid.params); + const placementId = utils.getBidIdParamater('placementId', bid.params); var inventoryCode = utils.getBidIdParamater('invCode', bid.params); var referrer = utils.getBidIdParamater('referrer', bid.params); var altReferrer = utils.getBidIdParamater('alt_referrer', bid.params); @@ -50,9 +49,6 @@ var XhbAdapter = function XhbAdapter() { jptCall += sizeQueryString + '&'; } - - - //append custom attributes: var paramsCopy = utils.extend({}, bid.params); @@ -80,20 +76,11 @@ var XhbAdapter = function XhbAdapter() { jptCall = utils.tryAppendQueryString(jptCall, 'alt_referrer', altReferrer); - - //remove the trailing "&" if (jptCall.lastIndexOf('&') === jptCall.length - 1) { jptCall = jptCall.substring(0, jptCall.length - 1); } - // @if NODE_ENV='debug' - utils.logMessage('jpt request built: ' + jptCall); - // @endif - - //append a timer here to track latency - bid.startTime = new Date().getTime(); - return jptCall; } @@ -115,56 +102,31 @@ var XhbAdapter = function XhbAdapter() { bidObj.status = CONSTANTS.STATUS.GOOD; } - // @if NODE_ENV='debug' - utils.logMessage('JSONP callback function called for ad ID: ' + id); - // @endif - var bid = []; if (jptResponseObj.result && jptResponseObj.result.ad && jptResponseObj.result.ad !== '') { - - - //responseCPM = parseInt(jptResponseObj.result.cpm, 10); - //CPM response from /jpt is dollar/cent multiplied by 10000 - //in order to avoid using floats - //switch CPM to "dollar/cent" - //responseCPM = responseCPM / 10000; responseCPM = 0.00; //store bid response //bid status is good (indicating 1) - var adId = jptResponseObj.result.creative_id; - bid = bidfactory.createBid(1); + bid = bidfactory.createBid(CONSTANTS.STATUS.GOOD, bidObj); bid.creative_id = adId; bid.bidderCode = bidCode; bid.cpm = responseCPM; - //bid.available = '1'; bid.adUrl = jptResponseObj.result.ad; bid.width = jptResponseObj.result.width; bid.height = jptResponseObj.result.height; - //bid.dealId = jptResponseObj.result.deal_id; bid.dealId = '99999999'; bidmanager.addBidResponse(placementCode, bid); } else { //no response data - // @if NODE_ENV='debug' - utils.logMessage('No prebid response from AppNexus for placement code ' + placementCode); - // @endif - //indicate that there is no bid for this placement bid = bidfactory.createBid(2); bid.bidderCode = bidCode; bidmanager.addBidResponse(placementCode, bid); } - - } else { - //no response data - // @if NODE_ENV='debug' - utils.logMessage('No prebid response for placement %%PLACEMENT%%'); - - // @endif } }; From f2ea3b5873a14eb3d0c1e85e525dc3cc4ad87e8b Mon Sep 17 00:00:00 2001 From: Daniel Hoffmann Date: Fri, 13 Jan 2017 14:26:01 +0000 Subject: [PATCH 4/6] implemented suggested changes --- src/adapters/xhb.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/adapters/xhb.js b/src/adapters/xhb.js index b445b3e671a..e33a17f7b64 100644 --- a/src/adapters/xhb.js +++ b/src/adapters/xhb.js @@ -75,7 +75,6 @@ var XhbAdapter = function XhbAdapter() { jptCall = utils.tryAppendQueryString(jptCall, 'referrer', referrer); jptCall = utils.tryAppendQueryString(jptCall, 'alt_referrer', altReferrer); - //remove the trailing "&" if (jptCall.lastIndexOf('&') === jptCall.length - 1) { jptCall = jptCall.substring(0, jptCall.length - 1); @@ -86,7 +85,6 @@ var XhbAdapter = function XhbAdapter() { //expose the callback to the global object: $$PREBID_GLOBAL$$.handleXhbCB = function (jptResponseObj) { - var bidCode; if (jptResponseObj && jptResponseObj.callback_uid) { From a9f9dacd84cde0b0aa161b9c2d7d4f26e780f3ce Mon Sep 17 00:00:00 2001 From: Daniel Hoffmann Date: Thu, 19 Jan 2017 14:03:07 +0000 Subject: [PATCH 5/6] ran jscs fixer for xhb.js and added it to adapters.json --- adapters.json | 1 + src/adapters/xhb.js | 214 ++++++++++++++++++++++---------------------- 2 files changed, 108 insertions(+), 107 deletions(-) diff --git a/adapters.json b/adapters.json index 18b4e1ba691..ce821dc5f93 100644 --- a/adapters.json +++ b/adapters.json @@ -28,6 +28,7 @@ "underdogmedia", "memeglobal", "centro", + "xhb", { "appnexus": { "alias": "brealtime" diff --git a/src/adapters/xhb.js b/src/adapters/xhb.js index e33a17f7b64..8ea1547cb34 100644 --- a/src/adapters/xhb.js +++ b/src/adapters/xhb.js @@ -9,78 +9,78 @@ var bidfactory = require('../bidfactory.js'); var XhbAdapter = function XhbAdapter() { function buildJPTCall(bid, callbackId) { - //determine tag params - const placementId = utils.getBidIdParamater('placementId', bid.params); - var inventoryCode = utils.getBidIdParamater('invCode', bid.params); - var referrer = utils.getBidIdParamater('referrer', bid.params); - var altReferrer = utils.getBidIdParamater('alt_referrer', bid.params); - - //Always use https - var jptCall = 'https://ib.adnxs.com/jpt?'; - - jptCall = utils.tryAppendQueryString(jptCall, 'callback', '$$PREBID_GLOBAL$$.handleXhbCB'); - jptCall = utils.tryAppendQueryString(jptCall, 'callback_uid', callbackId); - jptCall = utils.tryAppendQueryString(jptCall, 'id', placementId); - jptCall = utils.tryAppendQueryString(jptCall, 'code', inventoryCode); - - //sizes takes a bit more logic - var sizeQueryString = ''; - var parsedSizes = utils.parseSizesInput(bid.sizes); - - //combine string into proper querystring for impbus - var parsedSizesLength = parsedSizes.length; - if (parsedSizesLength > 0) { - //first value should be "size" - sizeQueryString = 'size=' + parsedSizes[0]; - if (parsedSizesLength > 1) { - //any subsequent values should be "promo_sizes" - sizeQueryString += '&promo_sizes='; - for (var j = 1; j < parsedSizesLength; j++) { - sizeQueryString += parsedSizes[j] += ','; - } - //remove trailing comma - if (sizeQueryString && sizeQueryString.charAt(sizeQueryString.length - 1) === ',') { - sizeQueryString = sizeQueryString.slice(0, sizeQueryString.length - 1); - } - } + //determine tag params + const placementId = utils.getBidIdParamater('placementId', bid.params); + var inventoryCode = utils.getBidIdParamater('invCode', bid.params); + var referrer = utils.getBidIdParamater('referrer', bid.params); + var altReferrer = utils.getBidIdParamater('alt_referrer', bid.params); + + //Always use https + var jptCall = 'https://ib.adnxs.com/jpt?'; + + jptCall = utils.tryAppendQueryString(jptCall, 'callback', '$$PREBID_GLOBAL$$.handleXhbCB'); + jptCall = utils.tryAppendQueryString(jptCall, 'callback_uid', callbackId); + jptCall = utils.tryAppendQueryString(jptCall, 'id', placementId); + jptCall = utils.tryAppendQueryString(jptCall, 'code', inventoryCode); + + //sizes takes a bit more logic + var sizeQueryString = ''; + var parsedSizes = utils.parseSizesInput(bid.sizes); + + //combine string into proper querystring for impbus + var parsedSizesLength = parsedSizes.length; + if (parsedSizesLength > 0) { + //first value should be "size" + sizeQueryString = 'size=' + parsedSizes[0]; + if (parsedSizesLength > 1) { + //any subsequent values should be "promo_sizes" + sizeQueryString += '&promo_sizes='; + for (var j = 1; j < parsedSizesLength; j++) { + sizeQueryString += parsedSizes[j] += ','; + } + //remove trailing comma + if (sizeQueryString && sizeQueryString.charAt(sizeQueryString.length - 1) === ',') { + sizeQueryString = sizeQueryString.slice(0, sizeQueryString.length - 1); + } } + } - if (sizeQueryString) { - jptCall += sizeQueryString + '&'; - } + if (sizeQueryString) { + jptCall += sizeQueryString + '&'; + } - //append custom attributes: - var paramsCopy = utils.extend({}, bid.params); + //append custom attributes: + var paramsCopy = utils.extend({}, bid.params); - //delete attributes already used - delete paramsCopy.placementId; - delete paramsCopy.invCode; - delete paramsCopy.query; - delete paramsCopy.referrer; - delete paramsCopy.alt_referrer; + //delete attributes already used + delete paramsCopy.placementId; + delete paramsCopy.invCode; + delete paramsCopy.query; + delete paramsCopy.referrer; + delete paramsCopy.alt_referrer; - //get the reminder - var queryParams = utils.parseQueryStringParameters(paramsCopy); + //get the reminder + var queryParams = utils.parseQueryStringParameters(paramsCopy); - //append - if (queryParams) { - jptCall += queryParams; - } + //append + if (queryParams) { + jptCall += queryParams; + } - //append referrer - if (referrer === '') { - referrer = utils.getTopWindowUrl(); - } + //append referrer + if (referrer === '') { + referrer = utils.getTopWindowUrl(); + } - jptCall = utils.tryAppendQueryString(jptCall, 'referrer', referrer); - jptCall = utils.tryAppendQueryString(jptCall, 'alt_referrer', altReferrer); + jptCall = utils.tryAppendQueryString(jptCall, 'referrer', referrer); + jptCall = utils.tryAppendQueryString(jptCall, 'alt_referrer', altReferrer); - //remove the trailing "&" - if (jptCall.lastIndexOf('&') === jptCall.length - 1) { - jptCall = jptCall.substring(0, jptCall.length - 1); - } + //remove the trailing "&" + if (jptCall.lastIndexOf('&') === jptCall.length - 1) { + jptCall = jptCall.substring(0, jptCall.length - 1); + } - return jptCall; + return jptCall; } //expose the callback to the global object: @@ -89,59 +89,59 @@ var XhbAdapter = function XhbAdapter() { if (jptResponseObj && jptResponseObj.callback_uid) { - var responseCPM; - var id = jptResponseObj.callback_uid; - var placementCode = ''; - var bidObj = getBidRequest(id); - if (bidObj) { - bidCode = bidObj.bidder; - placementCode = bidObj.placementCode; - //set the status - bidObj.status = CONSTANTS.STATUS.GOOD; - } - - var bid = []; - if (jptResponseObj.result && jptResponseObj.result.ad && jptResponseObj.result.ad !== '') { - responseCPM = 0.00; - - //store bid response - //bid status is good (indicating 1) - var adId = jptResponseObj.result.creative_id; - bid = bidfactory.createBid(CONSTANTS.STATUS.GOOD, bidObj); - bid.creative_id = adId; - bid.bidderCode = bidCode; - bid.cpm = responseCPM; - bid.adUrl = jptResponseObj.result.ad; - bid.width = jptResponseObj.result.width; - bid.height = jptResponseObj.result.height; - bid.dealId = '99999999'; - - bidmanager.addBidResponse(placementCode, bid); - - } else { - //no response data - //indicate that there is no bid for this placement - bid = bidfactory.createBid(2); - bid.bidderCode = bidCode; - bidmanager.addBidResponse(placementCode, bid); - } + var responseCPM; + var id = jptResponseObj.callback_uid; + var placementCode = ''; + var bidObj = getBidRequest(id); + if (bidObj) { + bidCode = bidObj.bidder; + placementCode = bidObj.placementCode; + //set the status + bidObj.status = CONSTANTS.STATUS.GOOD; + } + + var bid = []; + if (jptResponseObj.result && jptResponseObj.result.ad && jptResponseObj.result.ad !== '') { + responseCPM = 0.00; + + //store bid response + //bid status is good (indicating 1) + var adId = jptResponseObj.result.creative_id; + bid = bidfactory.createBid(CONSTANTS.STATUS.GOOD, bidObj); + bid.creative_id = adId; + bid.bidderCode = bidCode; + bid.cpm = responseCPM; + bid.adUrl = jptResponseObj.result.ad; + bid.width = jptResponseObj.result.width; + bid.height = jptResponseObj.result.height; + bid.dealId = '99999999'; + + bidmanager.addBidResponse(placementCode, bid); + + } else { + //no response data + //indicate that there is no bid for this placement + bid = bidfactory.createBid(2); + bid.bidderCode = bidCode; + bidmanager.addBidResponse(placementCode, bid); + } } - }; + }; function _callBids(params) { - var bids = params.bids || []; - for (var i = 0; i < bids.length; i++) { - var bid = bids[i]; - var callbackId = bid.bidId; - adloader.loadScript(buildJPTCall(bid, callbackId)); - } + var bids = params.bids || []; + for (var i = 0; i < bids.length; i++) { + var bid = bids[i]; + var callbackId = bid.bidId; + adloader.loadScript(buildJPTCall(bid, callbackId)); + } } // Export the callBids function, so that prebid.js can execute // this function when the page asks to send out bid requests. return { callBids: _callBids - }; -}; + }; + }; module.exports = XhbAdapter; From b0badbcc64d5fa20acc6061a66dadcec3058714d Mon Sep 17 00:00:00 2001 From: mkendall07 Date: Thu, 19 Jan 2017 11:20:03 -0500 Subject: [PATCH 6/6] Fixed adapter code and style --- src/adapters/xhb.js | 254 ++++++++++++++++++++++---------------------- 1 file changed, 127 insertions(+), 127 deletions(-) diff --git a/src/adapters/xhb.js b/src/adapters/xhb.js index 8ea1547cb34..722d97ebc91 100644 --- a/src/adapters/xhb.js +++ b/src/adapters/xhb.js @@ -1,147 +1,147 @@ import {getBidRequest} from '../utils.js'; const CONSTANTS = require('../constants.json'); -var utils = require('../utils.js'); -var adloader = require('../adloader.js'); -var bidmanager = require('../bidmanager.js'); -var bidfactory = require('../bidfactory.js'); - -var XhbAdapter = function XhbAdapter() { - - function buildJPTCall(bid, callbackId) { - //determine tag params - const placementId = utils.getBidIdParamater('placementId', bid.params); - var inventoryCode = utils.getBidIdParamater('invCode', bid.params); - var referrer = utils.getBidIdParamater('referrer', bid.params); - var altReferrer = utils.getBidIdParamater('alt_referrer', bid.params); - - //Always use https - var jptCall = 'https://ib.adnxs.com/jpt?'; - - jptCall = utils.tryAppendQueryString(jptCall, 'callback', '$$PREBID_GLOBAL$$.handleXhbCB'); - jptCall = utils.tryAppendQueryString(jptCall, 'callback_uid', callbackId); - jptCall = utils.tryAppendQueryString(jptCall, 'id', placementId); - jptCall = utils.tryAppendQueryString(jptCall, 'code', inventoryCode); - - //sizes takes a bit more logic - var sizeQueryString = ''; - var parsedSizes = utils.parseSizesInput(bid.sizes); - - //combine string into proper querystring for impbus - var parsedSizesLength = parsedSizes.length; - if (parsedSizesLength > 0) { - //first value should be "size" - sizeQueryString = 'size=' + parsedSizes[0]; - if (parsedSizesLength > 1) { - //any subsequent values should be "promo_sizes" - sizeQueryString += '&promo_sizes='; - for (var j = 1; j < parsedSizesLength; j++) { - sizeQueryString += parsedSizes[j] += ','; - } - //remove trailing comma - if (sizeQueryString && sizeQueryString.charAt(sizeQueryString.length - 1) === ',') { - sizeQueryString = sizeQueryString.slice(0, sizeQueryString.length - 1); - } +const utils = require('../utils.js'); +const adloader = require('../adloader.js'); +const bidmanager = require('../bidmanager.js'); +const bidfactory = require('../bidfactory.js'); + +const XhbAdapter = function XhbAdapter() { + + function buildJPTCall(bid, callbackId) { + //determine tag params + const placementId = utils.getBidIdParameter('placementId', bid.params); + const inventoryCode = utils.getBidIdParameter('invCode', bid.params); + let referrer = utils.getBidIdParameter('referrer', bid.params); + const altReferrer = utils.getBidIdParameter('alt_referrer', bid.params); + + //Always use https + let jptCall = 'https://ib.adnxs.com/jpt?'; + + jptCall = utils.tryAppendQueryString(jptCall, 'callback', '$$PREBID_GLOBAL$$.handleXhbCB'); + jptCall = utils.tryAppendQueryString(jptCall, 'callback_uid', callbackId); + jptCall = utils.tryAppendQueryString(jptCall, 'id', placementId); + jptCall = utils.tryAppendQueryString(jptCall, 'code', inventoryCode); + + //sizes takes a bit more logic + let sizeQueryString = ''; + let parsedSizes = utils.parseSizesInput(bid.sizes); + + //combine string into proper querystring for impbus + let parsedSizesLength = parsedSizes.length; + if (parsedSizesLength > 0) { + //first value should be "size" + sizeQueryString = 'size=' + parsedSizes[0]; + if (parsedSizesLength > 1) { + //any subsequent values should be "promo_sizes" + sizeQueryString += '&promo_sizes='; + for (let j = 1; j < parsedSizesLength; j++) { + sizeQueryString += parsedSizes[j] += ','; + } + //remove trailing comma + if (sizeQueryString && sizeQueryString.charAt(sizeQueryString.length - 1) === ',') { + sizeQueryString = sizeQueryString.slice(0, sizeQueryString.length - 1); } } + } - if (sizeQueryString) { - jptCall += sizeQueryString + '&'; - } - - //append custom attributes: - var paramsCopy = utils.extend({}, bid.params); + if (sizeQueryString) { + jptCall += sizeQueryString + '&'; + } - //delete attributes already used - delete paramsCopy.placementId; - delete paramsCopy.invCode; - delete paramsCopy.query; - delete paramsCopy.referrer; - delete paramsCopy.alt_referrer; + //append custom attributes: + let paramsCopy = utils.extend({}, bid.params); - //get the reminder - var queryParams = utils.parseQueryStringParameters(paramsCopy); + //delete attributes already used + delete paramsCopy.placementId; + delete paramsCopy.invCode; + delete paramsCopy.query; + delete paramsCopy.referrer; + delete paramsCopy.alt_referrer; - //append - if (queryParams) { - jptCall += queryParams; - } + //get the reminder + let queryParams = utils.parseQueryStringParameters(paramsCopy); - //append referrer - if (referrer === '') { - referrer = utils.getTopWindowUrl(); - } + //append + if (queryParams) { + jptCall += queryParams; + } - jptCall = utils.tryAppendQueryString(jptCall, 'referrer', referrer); - jptCall = utils.tryAppendQueryString(jptCall, 'alt_referrer', altReferrer); + //append referrer + if (referrer === '') { + referrer = utils.getTopWindowUrl(); + } - //remove the trailing "&" - if (jptCall.lastIndexOf('&') === jptCall.length - 1) { - jptCall = jptCall.substring(0, jptCall.length - 1); - } + jptCall = utils.tryAppendQueryString(jptCall, 'referrer', referrer); + jptCall = utils.tryAppendQueryString(jptCall, 'alt_referrer', altReferrer); - return jptCall; + //remove the trailing "&" + if (jptCall.lastIndexOf('&') === jptCall.length - 1) { + jptCall = jptCall.substring(0, jptCall.length - 1); } - //expose the callback to the global object: - $$PREBID_GLOBAL$$.handleXhbCB = function (jptResponseObj) { - var bidCode; - - if (jptResponseObj && jptResponseObj.callback_uid) { - - var responseCPM; - var id = jptResponseObj.callback_uid; - var placementCode = ''; - var bidObj = getBidRequest(id); - if (bidObj) { - bidCode = bidObj.bidder; - placementCode = bidObj.placementCode; - //set the status - bidObj.status = CONSTANTS.STATUS.GOOD; - } - - var bid = []; - if (jptResponseObj.result && jptResponseObj.result.ad && jptResponseObj.result.ad !== '') { - responseCPM = 0.00; - - //store bid response - //bid status is good (indicating 1) - var adId = jptResponseObj.result.creative_id; - bid = bidfactory.createBid(CONSTANTS.STATUS.GOOD, bidObj); - bid.creative_id = adId; - bid.bidderCode = bidCode; - bid.cpm = responseCPM; - bid.adUrl = jptResponseObj.result.ad; - bid.width = jptResponseObj.result.width; - bid.height = jptResponseObj.result.height; - bid.dealId = '99999999'; - - bidmanager.addBidResponse(placementCode, bid); - - } else { - //no response data - //indicate that there is no bid for this placement - bid = bidfactory.createBid(2); - bid.bidderCode = bidCode; - bidmanager.addBidResponse(placementCode, bid); - } + return jptCall; + } + + //expose the callback to the global object: + $$PREBID_GLOBAL$$.handleXhbCB = function (jptResponseObj) { + let bidCode; + + if (jptResponseObj && jptResponseObj.callback_uid) { + + let responseCPM; + let id = jptResponseObj.callback_uid; + let placementCode = ''; + let bidObj = getBidRequest(id); + if (bidObj) { + bidCode = bidObj.bidder; + placementCode = bidObj.placementCode; + //set the status + bidObj.status = CONSTANTS.STATUS.GOOD; + } + + let bid = []; + if (jptResponseObj.result && jptResponseObj.result.ad && jptResponseObj.result.ad !== '') { + responseCPM = 0.00; + + //store bid response + //bid status is good (indicating 1) + let adId = jptResponseObj.result.creative_id; + bid = bidfactory.createBid(CONSTANTS.STATUS.GOOD, bidObj); + bid.creative_id = adId; + bid.bidderCode = bidCode; + bid.cpm = responseCPM; + bid.adUrl = jptResponseObj.result.ad; + bid.width = jptResponseObj.result.width; + bid.height = jptResponseObj.result.height; + bid.dealId = '99999999'; + + bidmanager.addBidResponse(placementCode, bid); + + } else { + //no response data + //indicate that there is no bid for this placement + bid = bidfactory.createBid(2); + bid.bidderCode = bidCode; + bidmanager.addBidResponse(placementCode, bid); } - }; - - function _callBids(params) { - var bids = params.bids || []; - for (var i = 0; i < bids.length; i++) { - var bid = bids[i]; - var callbackId = bid.bidId; - adloader.loadScript(buildJPTCall(bid, callbackId)); } + }; + + function _callBids(params) { + let bids = params.bids || []; + for (let i = 0; i < bids.length; i++) { + let bid = bids[i]; + let callbackId = bid.bidId; + adloader.loadScript(buildJPTCall(bid, callbackId)); } - - // Export the callBids function, so that prebid.js can execute - // this function when the page asks to send out bid requests. - return { - callBids: _callBids - }; - }; + } + + // Export the callBids function, so that prebid.js can execute + // this function when the page asks to send out bid requests. + return { + callBids: _callBids + }; +}; module.exports = XhbAdapter;