From e17a6ec3363a53e3b0b8bc64425dda7794edcd5b Mon Sep 17 00:00:00 2001 From: Gary Kertis Date: Wed, 22 Feb 2017 16:55:17 -0500 Subject: [PATCH 1/8] Wrote initial call logic to make request to serverbid. --- adapters.json | 1 + src/adapters/serverbid.js | 49 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 src/adapters/serverbid.js diff --git a/adapters.json b/adapters.json index 3aa09851a33..0ebf6ba9319 100644 --- a/adapters.json +++ b/adapters.json @@ -30,6 +30,7 @@ "smartyads", "smartadserver", "sekindoUM", + "serverbid", "sonobi", "sovrn", "springserve", diff --git a/src/adapters/serverbid.js b/src/adapters/serverbid.js new file mode 100644 index 00000000000..47a6b449fb6 --- /dev/null +++ b/src/adapters/serverbid.js @@ -0,0 +1,49 @@ +// var bidfactory = require('../bidfactory.js'); +// var bidmanager = require('../bidmanager.js'); +var Ajax = require('../ajax'); + +var BidderNameAdapter = function BidderNameAdapter() { + + const BASE_URI = '//e.serverbid.com/ados'; + + var timestamp = Date.now(); + + var request = { + Placements: [], + Keywords: undefined, + Referrer: "", + IsAsync: true + }; + + + function _callBids(params) { + var bids = params.bids || []; + for (var i = 0; i < bids.length; i++) { + var bid = bids[i]; + bid.params.D = bid.bidId; + request.Placements.push(bid.params); + } + + var data = { + t: timestamp, + request: JSON.stringify(request) + }; + + Ajax.ajax(BASE_URI, _responseCallback, data, { method: 'GET', withCredentials: false }); + + } + + function _responseCallback(result) { + console.log(result); + } + + // 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 = BidderNameAdapter; \ No newline at end of file From 9ad8b18badb96eaa512a56397fa7393924cdae57 Mon Sep 17 00:00:00 2001 From: Gary Kertis Date: Thu, 23 Feb 2017 13:22:56 -0500 Subject: [PATCH 2/8] Add initial bid response handling logic. --- src/adapters/serverbid.js | 76 ++++++++++++++++++++++++++++----------- 1 file changed, 56 insertions(+), 20 deletions(-) diff --git a/src/adapters/serverbid.js b/src/adapters/serverbid.js index 47a6b449fb6..059433b9925 100644 --- a/src/adapters/serverbid.js +++ b/src/adapters/serverbid.js @@ -1,40 +1,77 @@ -// var bidfactory = require('../bidfactory.js'); -// var bidmanager = require('../bidmanager.js'); +import { getBidRequest } from '../utils.js'; + +var bidfactory = require('../bidfactory.js'); +var bidmanager = require('../bidmanager.js'); var Ajax = require('../ajax'); var BidderNameAdapter = function BidderNameAdapter() { - const BASE_URI = '//e.serverbid.com/ados'; + const BASE_URI = '//e.serverbid.com/api/v2'; var timestamp = Date.now(); - var request = { - Placements: [], - Keywords: undefined, - Referrer: "", - IsAsync: true - }; + function _callBids(params) { + var data = { + placements: [], + time: timestamp, + user: {} + }; - function _callBids(params) { var bids = params.bids || []; for (var i = 0; i < bids.length; i++) { + var bid = bids[i]; - bid.params.D = bid.bidId; - request.Placements.push(bid.params); - } - var data = { - t: timestamp, - request: JSON.stringify(request) - }; + var bid_data = { + networkId: bid.params.networkId, + siteId: bid.params.siteId, + divName: bid.bidId, + adTypes: bid.params.adTypes, + includePricingData: true + }; + + // data.user.key = readCookie('azk'); + // console.log(data.user.key); + + data.placements.push(bid_data); + } - Ajax.ajax(BASE_URI, _responseCallback, data, { method: 'GET', withCredentials: false }); + Ajax.ajax(BASE_URI, _responseCallback, JSON.stringify(data), { method: 'POST', withCredentials: false, contentType: 'application/json' }); } function _responseCallback(result) { - console.log(result); + + result = JSON.parse(result); + + if (result && result.decisions) { + for (var key in result.decisions) { + + var bidObj = getBidRequest(key); + var decision = result.decisions[key]; + var bidCode; + var placementCode; + + if (bidObj) { + + var bid = bidfactory.createBid(1, bidObj); + + bidCode = bidObj.bidder; + placementCode = bidObj.placementCode; + + bid.bidderCode = bidCode; + bid.cpm = decision.pricing && decision.pricing.clearPrice || Math.floor(Math.random() * 10); + bid.width = decision.width; + bid.height = decision.height; + + console.log(bid); + + bidmanager.addBidResponse(placementCode, bid); + + } + } + } } // Export the `callBids` function, so that Prebid.js can execute @@ -43,7 +80,6 @@ var BidderNameAdapter = function BidderNameAdapter() { callBids: _callBids }; - }; module.exports = BidderNameAdapter; \ No newline at end of file From 3b13ae04f9af706a96c14cba3becde8d4a547d93 Mon Sep 17 00:00:00 2001 From: Gary Kertis Date: Thu, 23 Feb 2017 17:20:43 -0500 Subject: [PATCH 3/8] Handle requests and responses, successfully pass to add server, write initial tests. --- src/adapters/serverbid.js | 176 ++++++++++++++++++-------- test/spec/adapters/serverbid_spec.js | 178 +++++++++++++++++++++++++++ 2 files changed, 305 insertions(+), 49 deletions(-) create mode 100644 test/spec/adapters/serverbid_spec.js diff --git a/src/adapters/serverbid.js b/src/adapters/serverbid.js index 059433b9925..12ee6417093 100644 --- a/src/adapters/serverbid.js +++ b/src/adapters/serverbid.js @@ -1,85 +1,163 @@ -import { getBidRequest } from '../utils.js'; - -var bidfactory = require('../bidfactory.js'); -var bidmanager = require('../bidmanager.js'); -var Ajax = require('../ajax'); - -var BidderNameAdapter = function BidderNameAdapter() { - - const BASE_URI = '//e.serverbid.com/api/v2'; - - var timestamp = Date.now(); - - function _callBids(params) { - - var data = { - placements: [], - time: timestamp, - user: {} - }; - - var bids = params.bids || []; - for (var i = 0; i < bids.length; i++) { +import Adapter from 'src/adapters/adapter'; +import bidfactory from 'src/bidfactory'; +import bidmanager from 'src/bidmanager'; +import * as utils from 'src/utils'; +import { ajax } from 'src/ajax'; + +var ServerBidAdapter = function ServerBidAdapter() { + + var baseAdapter = Adapter.createNew('serverbid'); + + var BASE_URI = '//e.serverbid.com/api/v2'; + + var sizeMap = [null, + "120x90", + "120x90", + "468x60", + "728x90", + "300x250", + "160x600", + "120x600", + "300x100", + "180x150", + "336x280", + "240x400", + "234x60", + "88x31", + "120x60", + "120x240", + "125x125", + "220x250", + "250x250", + "250x90", + "0x0", + "200x90", + "300x50", + "320x50", + "320x480", + "185x185", + "620x45", + "300x125", + "800x250" + ]; + + baseAdapter.callBids = function(params) { + + if (params && params.bids && utils.isArray(params.bids) && params.bids.length) { + + var data = { + placements: [], + time: Date.now(), + user: {}, + url: document.location.href, + referrer: document.referrer, + enableBotFiltering: true + }; - var bid = bids[i]; + var bids = params.bids || []; + for (var i = 0; i < bids.length; i++) { + + var bid = bids[i]; + + var bid_data = { + networkId: bid.params.networkId, + siteId: bid.params.siteId, + zoneIds: bid.params.zoneIds, + campaignId: bid.params.campaignId, + flightId: bid.params.flightId, + adId: bid.params.adId, + divName: bid.bidId, + adTypes: getSize(bid.sizes), + includePricingData: true + }; + + if (bid_data.networkId && bid_data.siteId) { + data.placements.push(bid_data); + } - var bid_data = { - networkId: bid.params.networkId, - siteId: bid.params.siteId, - divName: bid.bidId, - adTypes: bid.params.adTypes, - includePricingData: true - }; + } - // data.user.key = readCookie('azk'); - // console.log(data.user.key); + if (data.placements.length) { + ajax(BASE_URI, _responseCallback, JSON.stringify(data), { method: 'POST', withCredentials: false, contentType: 'application/json' }); + } - data.placements.push(bid_data); } - Ajax.ajax(BASE_URI, _responseCallback, JSON.stringify(data), { method: 'POST', withCredentials: false, contentType: 'application/json' }); - - } + }; function _responseCallback(result) { result = JSON.parse(result); if (result && result.decisions) { + for (var key in result.decisions) { - var bidObj = getBidRequest(key); - var decision = result.decisions[key]; + var bid; var bidCode; var placementCode; + var bidObj = utils.getBidRequest(key); + var decision = result.decisions[key]; + var price = decision.pricing && decision.pricing.clearPrice || Math.floor(Math.random() * 10) + 1; if (bidObj) { - var bid = bidfactory.createBid(1, bidObj); + console.log(bidObj); + + if (price && price > 0) { + + bid = bidfactory.createBid(1, bidObj); + bidCode = bidObj.bidder; + placementCode = bidObj.placementCode; - bidCode = bidObj.bidder; - placementCode = bidObj.placementCode; + bid.bidderCode = bidCode; + bid.cpm = price; + bid.width = decision.width; + bid.height = decision.height; + bid.ad = retrieveAd(decision); - bid.bidderCode = bidCode; - bid.cpm = decision.pricing && decision.pricing.clearPrice || Math.floor(Math.random() * 10); - bid.width = decision.width; - bid.height = decision.height; + bidmanager.addBidResponse(placementCode, bid); - console.log(bid); + } else { - bidmanager.addBidResponse(placementCode, bid); + //send a no bid response. + bid = bidfactory.createBid(2, bidObj); + bid.bidderCode = bidCode; + + bidmanager.addBidResponse(placementCode, bid); + + } } + } + } + + } + + function retrieveAd(decision) { + return decision.contents && decision.contents[0] && decision.contents[0].body + utils.createTrackPixelHtml(decision.impressionUrl); + } + + function getSize(sizes) { + var result = []; + sizes.forEach(function(size) { + result.push(sizeMap.indexOf(size[0] + "x" + size[1])); + }); + return result; } // Export the `callBids` function, so that Prebid.js can execute // this function when the page asks to send out bid requests. return { - callBids: _callBids + callBids: baseAdapter.callBids }; }; -module.exports = BidderNameAdapter; \ No newline at end of file +ServerBidAdapter.createNew = function() { + return new ServerBidAdapter(); +}; + +module.exports = ServerBidAdapter; \ No newline at end of file diff --git a/test/spec/adapters/serverbid_spec.js b/test/spec/adapters/serverbid_spec.js new file mode 100644 index 00000000000..e37ebe910bd --- /dev/null +++ b/test/spec/adapters/serverbid_spec.js @@ -0,0 +1,178 @@ +import { expect } from 'chai'; +import Adapter from 'src/adapters/serverbid'; +import bidmanager from 'src/bidmanager'; +import * as utils from 'src/utils'; + +const ENDPOINT = '//e.serverbid.com/api/v2'; + +const REQUEST = { + "bidderCode": "serverbid", + "requestId": "a4713c32-3762-4798-b342-4ab810ca770d", + "bidderRequestId": "109f2a181342a9", + "bids": [{ + "bidder": "serverbid", + "params": { + "networkId": 9969, + "siteId": 730181 + }, + "placementCode": "div-gpt-ad-1487778092495-0", + "sizes": [ + [728, 90], + [970, 90] + ], + "bidId": "2b0f82502298c9", + "bidderRequestId": "109f2a181342a9", + "requestId": "a4713c32-3762-4798-b342-4ab810ca770d" + }], + "start": 1487883186070, + "auctionStart": 1487883186069, + "timeout": 3000 +}; + +const RESPONSE = { + "user": { "key": "ue1-2d33e91b71e74929b4aeecc23f4376f1" }, + "decisions": { + "2b0f82502298c9": { + "adId": 2364764, + "creativeId": 1950991, + "flightId": 2788300, + "campaignId": 542982, + "clickUrl": "http://e.serverbid.com/r", + "impressionUrl": "http://e.serverbid.com/i.gif", + "contents": [{ + "type": "html", + "body": "", + "data": { + "height": 90, + "width": 728, + "imageUrl": "http://static.adzerk.net/Advertisers/b0ab77db8a7848c8b78931aed022a5ef.gif", + "fileName": "b0ab77db8a7848c8b78931aed022a5ef.gif" + }, + "template": "image" + }], + "height": 90, + "width": 728, + "events": [] + }, + } +} + +describe.only('serverbidAdapter', () => { + + let adapter; + + beforeEach(() => adapter = Adapter.createNew()); + + describe('request function', () => { + + let xhr; + let requests; + let pbConfig; + + + beforeEach(() => { + xhr = sinon.useFakeXMLHttpRequest(); + requests = []; + xhr.onCreate = request => requests.push(request); + pbConfig = REQUEST; + //just a single slot + pbConfig.bids = [pbConfig.bids[0]]; + }); + + afterEach(() => xhr.restore()); + + it('exists and is a function', () => { + expect(adapter.callBids).to.exist.and.to.be.a('function'); + }); + + it('requires paramaters to make request', () => { + adapter.callBids({}); + expect(requests).to.be.empty; + }); + + it('requires networkId and siteId', () => { + let backup = pbConfig.bids[0].params; + pbConfig.bids[0].params = { networkId: 1234 }; //no hbid + adapter.callBids(pbConfig); + expect(requests).to.be.empty; + + pbConfig.bids[0].params = { siteId: 1234 }; //no placementid + adapter.callBids(pbConfig); + expect(requests).to.be.empty; + + pbConfig.bids[0].params = backup; + }); + + it('sends bid request to ENDPOINT via POST', () => { + adapter.callBids(pbConfig); + expect(requests[0].url).to.equal(ENDPOINT); + expect(requests[0].method).to.equal('POST'); + }); + }); + + describe('response handler', () => { + + let server; + + beforeEach(() => { + server = sinon.fakeServer.create(); + sinon.stub(bidmanager, 'addBidResponse'); + sinon.stub(utils, "getBidRequest").returns(REQUEST); + }); + + afterEach(() => { + server.restore() + bidmanager.addBidResponse.restore(); + utils.getBidRequest.restore(); + }); + + it('registers bids', () => { + server.respondWith(JSON.stringify(RESPONSE)); + + adapter.callBids(REQUEST); + server.respond(); + sinon.assert.calledOnce(bidmanager.addBidResponse); + + const response = bidmanager.addBidResponse.firstCall.args[1]; + expect(response).to.have.property('statusMessage', 'Bid available'); + expect(response).to.have.property('cpm'); + expect(response.cpm).to.be.above(0); + }); + + it('handles nobid responses', () => { + server.respondWith(JSON.stringify({ + "bids": [{ + "cpm": 0, + "creative": "", + "uuid": "30e5e911c00703" + }] + })); + + adapter.callBids(REQUEST); + server.respond(); + sinon.assert.calledOnce(bidmanager.addBidResponse); + + const response = bidmanager.addBidResponse.firstCall.args[1]; + expect(response).to.have.property( + 'statusMessage', + 'Bid returned empty or error response' + ); + }); + + it('handles JSON.parse errors', () => { + server.respondWith(''); + + adapter.callBids(REQUEST); + server.respond(); + sinon.assert.calledOnce(bidmanager.addBidResponse); + + const response = bidmanager.addBidResponse.firstCall.args[1]; + expect(response).to.have.property( + 'statusMessage', + 'Bid returned empty or error response' + ); + }); + + }); + +}); \ No newline at end of file From f31fd858af905bce5d33c2b33e16d7f67236f2b2 Mon Sep 17 00:00:00 2001 From: Gary Kertis Date: Fri, 24 Feb 2017 12:50:19 -0500 Subject: [PATCH 4/8] Clean up pricing and fix tests. --- src/adapters/serverbid.js | 79 +++++++++++++++------------- test/spec/adapters/serverbid_spec.js | 11 ++-- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/src/adapters/serverbid.js b/src/adapters/serverbid.js index 12ee6417093..7ca8f840c1d 100644 --- a/src/adapters/serverbid.js +++ b/src/adapters/serverbid.js @@ -41,6 +41,8 @@ var ServerBidAdapter = function ServerBidAdapter() { "800x250" ]; + var bidIds = []; + baseAdapter.callBids = function(params) { if (params && params.bids && utils.isArray(params.bids) && params.bids.length) { @@ -51,7 +53,8 @@ var ServerBidAdapter = function ServerBidAdapter() { user: {}, url: document.location.href, referrer: document.referrer, - enableBotFiltering: true + enableBotFiltering: true, + includePricingData: true }; var bids = params.bids || []; @@ -59,6 +62,8 @@ var ServerBidAdapter = function ServerBidAdapter() { var bid = bids[i]; + bidIds.push(bid.bidId); + var bid_data = { networkId: bid.params.networkId, siteId: bid.params.siteId, @@ -67,8 +72,7 @@ var ServerBidAdapter = function ServerBidAdapter() { flightId: bid.params.flightId, adId: bid.params.adId, divName: bid.bidId, - adTypes: getSize(bid.sizes), - includePricingData: true + adTypes: bid.adTypes || getSize(bid.sizes) }; if (bid_data.networkId && bid_data.siteId) { @@ -87,51 +91,47 @@ var ServerBidAdapter = function ServerBidAdapter() { function _responseCallback(result) { - result = JSON.parse(result); - - if (result && result.decisions) { - - for (var key in result.decisions) { - - var bid; - var bidCode; - var placementCode; - var bidObj = utils.getBidRequest(key); - var decision = result.decisions[key]; - var price = decision.pricing && decision.pricing.clearPrice || Math.floor(Math.random() * 10) + 1; - - if (bidObj) { + var bid; + var bidId; + var bidObj; + var bidCode; + var placementCode; - console.log(bidObj); - - if (price && price > 0) { - - bid = bidfactory.createBid(1, bidObj); - bidCode = bidObj.bidder; - placementCode = bidObj.placementCode; - - bid.bidderCode = bidCode; - bid.cpm = price; - bid.width = decision.width; - bid.height = decision.height; - bid.ad = retrieveAd(decision); + try { + result = JSON.parse(result); + } catch (error) { + utils.logError(error); + } - bidmanager.addBidResponse(placementCode, bid); + for (var i = 0; i < bidIds.length; i++) { - } else { + bidId = bidIds[i]; + bidObj = utils.getBidRequest(bidId); + bidCode = bidObj.bidder; + placementCode = bidObj.placementCode; - //send a no bid response. - bid = bidfactory.createBid(2, bidObj); - bid.bidderCode = bidCode; + //prepare a no bid response. + bid = bidfactory.createBid(2, bidObj); + bid.bidderCode = bidCode; - bidmanager.addBidResponse(placementCode, bid); + if (result) { - } + var decision = result.decisions && result.decisions[bidId]; + var price = decision && decision.pricing && decision.pricing.clearPrice; + if (decision && price) { + bid = bidfactory.createBid(1, bidObj); + bid.bidderCode = bidCode; + bid.cpm = price; + bid.width = decision.width; + bid.height = decision.height; + bid.ad = retrieveAd(decision); } } + bidmanager.addBidResponse(placementCode, bid); + } } @@ -143,7 +143,10 @@ var ServerBidAdapter = function ServerBidAdapter() { function getSize(sizes) { var result = []; sizes.forEach(function(size) { - result.push(sizeMap.indexOf(size[0] + "x" + size[1])); + var index = sizeMap.indexOf(size[0] + "x" + size[1]); + if (index >= 0) { + result.push(index); + } }); return result; } diff --git a/test/spec/adapters/serverbid_spec.js b/test/spec/adapters/serverbid_spec.js index e37ebe910bd..96330cfdf38 100644 --- a/test/spec/adapters/serverbid_spec.js +++ b/test/spec/adapters/serverbid_spec.js @@ -52,12 +52,13 @@ const RESPONSE = { }], "height": 90, "width": 728, - "events": [] + "events": [], + "pricing":{"price":0.5,"clearPrice":0.5,"revenue":0.0005,"rateType":2,"eCPM":0.5} }, } } -describe.only('serverbidAdapter', () => { +describe('serverbidAdapter', () => { let adapter; @@ -141,11 +142,7 @@ describe.only('serverbidAdapter', () => { it('handles nobid responses', () => { server.respondWith(JSON.stringify({ - "bids": [{ - "cpm": 0, - "creative": "", - "uuid": "30e5e911c00703" - }] + "decisions": [] })); adapter.callBids(REQUEST); From ae79307e7404a409f11d70560f7e524e9aaa2146 Mon Sep 17 00:00:00 2001 From: Gary Kertis Date: Mon, 27 Feb 2017 09:04:15 -0500 Subject: [PATCH 5/8] Enable request credentials. --- src/adapters/serverbid.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/adapters/serverbid.js b/src/adapters/serverbid.js index 7ca8f840c1d..f2e1bc2d8a4 100644 --- a/src/adapters/serverbid.js +++ b/src/adapters/serverbid.js @@ -82,7 +82,7 @@ var ServerBidAdapter = function ServerBidAdapter() { } if (data.placements.length) { - ajax(BASE_URI, _responseCallback, JSON.stringify(data), { method: 'POST', withCredentials: false, contentType: 'application/json' }); + ajax(BASE_URI, _responseCallback, JSON.stringify(data), { method: 'POST', withCredentials: true, contentType: 'application/json' }); } } From de99d6c590cc876c3ca2956504a3ba7a4e7233df Mon Sep 17 00:00:00 2001 From: Gary Kertis Date: Thu, 2 Mar 2017 09:05:24 -0500 Subject: [PATCH 6/8] JSHint and JSCS --- test/spec/adapters/serverbid_spec.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/spec/adapters/serverbid_spec.js b/test/spec/adapters/serverbid_spec.js index 96330cfdf38..3a7408c34e5 100644 --- a/test/spec/adapters/serverbid_spec.js +++ b/test/spec/adapters/serverbid_spec.js @@ -1,3 +1,6 @@ +/* jshint -W024 */ +/* jshint expr:true */ + import { expect } from 'chai'; import Adapter from 'src/adapters/serverbid'; import bidmanager from 'src/bidmanager'; @@ -56,7 +59,7 @@ const RESPONSE = { "pricing":{"price":0.5,"clearPrice":0.5,"revenue":0.0005,"rateType":2,"eCPM":0.5} }, } -} +}; describe('serverbidAdapter', () => { @@ -122,7 +125,7 @@ describe('serverbidAdapter', () => { }); afterEach(() => { - server.restore() + server.restore(); bidmanager.addBidResponse.restore(); utils.getBidRequest.restore(); }); From 360b51181406acb33ec0d7ab39214c88f091315e Mon Sep 17 00:00:00 2001 From: Gary Kertis Date: Mon, 13 Mar 2017 17:13:15 -0400 Subject: [PATCH 7/8] Incorporate code review comments. --- src/adapters/serverbid.js | 57 +++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/src/adapters/serverbid.js b/src/adapters/serverbid.js index f2e1bc2d8a4..741eb3ed8c4 100644 --- a/src/adapters/serverbid.js +++ b/src/adapters/serverbid.js @@ -4,13 +4,13 @@ import bidmanager from 'src/bidmanager'; import * as utils from 'src/utils'; import { ajax } from 'src/ajax'; -var ServerBidAdapter = function ServerBidAdapter() { +const ServerBidAdapter = function ServerBidAdapter() { - var baseAdapter = Adapter.createNew('serverbid'); + const baseAdapter = Adapter.createNew('serverbid'); - var BASE_URI = '//e.serverbid.com/api/v2'; + const BASE_URI = '//e.serverbid.com/api/v2'; - var sizeMap = [null, + const sizeMap = [null, "120x90", "120x90", "468x60", @@ -41,30 +41,29 @@ var ServerBidAdapter = function ServerBidAdapter() { "800x250" ]; - var bidIds = []; + const bidIds = []; baseAdapter.callBids = function(params) { if (params && params.bids && utils.isArray(params.bids) && params.bids.length) { - var data = { + const data = { placements: [], time: Date.now(), user: {}, - url: document.location.href, + url: utils.getTopWindowUrl, referrer: document.referrer, enableBotFiltering: true, includePricingData: true }; - var bids = params.bids || []; - for (var i = 0; i < bids.length; i++) { - - var bid = bids[i]; + const bids = params.bids || []; + for (let i = 0; i < bids.length; i++) { + const bid = bids[i]; bidIds.push(bid.bidId); - var bid_data = { + const bid_data = { networkId: bid.params.networkId, siteId: bid.params.siteId, zoneIds: bid.params.zoneIds, @@ -91,11 +90,11 @@ var ServerBidAdapter = function ServerBidAdapter() { function _responseCallback(result) { - var bid; - var bidId; - var bidObj; - var bidCode; - var placementCode; + let bid; + let bidId; + let bidObj; + let bidCode; + let placementCode; try { result = JSON.parse(result); @@ -103,21 +102,16 @@ var ServerBidAdapter = function ServerBidAdapter() { utils.logError(error); } - for (var i = 0; i < bidIds.length; i++) { + for (let i = 0; i < bidIds.length; i++) { bidId = bidIds[i]; bidObj = utils.getBidRequest(bidId); bidCode = bidObj.bidder; placementCode = bidObj.placementCode; - //prepare a no bid response. - bid = bidfactory.createBid(2, bidObj); - bid.bidderCode = bidCode; - if (result) { - - var decision = result.decisions && result.decisions[bidId]; - var price = decision && decision.pricing && decision.pricing.clearPrice; + const decision = result.decisions && result.decisions[bidId]; + const price = decision && decision.pricing && decision.pricing.clearPrice; if (decision && price) { bid = bidfactory.createBid(1, bidObj); @@ -126,14 +120,17 @@ var ServerBidAdapter = function ServerBidAdapter() { bid.width = decision.width; bid.height = decision.height; bid.ad = retrieveAd(decision); + } else { + bid = bidfactory.createBid(2, bidObj); + bid.bidderCode = bidCode; } + } else { + bid = bidfactory.createBid(2, bidObj); + bid.bidderCode = bidCode; } - bidmanager.addBidResponse(placementCode, bid); - } - } function retrieveAd(decision) { @@ -141,9 +138,9 @@ var ServerBidAdapter = function ServerBidAdapter() { } function getSize(sizes) { - var result = []; + const result = []; sizes.forEach(function(size) { - var index = sizeMap.indexOf(size[0] + "x" + size[1]); + const index = sizeMap.indexOf(size[0] + "x" + size[1]); if (index >= 0) { result.push(index); } From 3375c461a6587e08b8c5e07c3af6681ab451fb37 Mon Sep 17 00:00:00 2001 From: Gary Kertis Date: Tue, 14 Mar 2017 11:35:18 -0400 Subject: [PATCH 8/8] Add function invocation to getTopWindowUrl --- src/adapters/serverbid.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/adapters/serverbid.js b/src/adapters/serverbid.js index 741eb3ed8c4..74b731bbe3f 100644 --- a/src/adapters/serverbid.js +++ b/src/adapters/serverbid.js @@ -51,7 +51,7 @@ const ServerBidAdapter = function ServerBidAdapter() { placements: [], time: Date.now(), user: {}, - url: utils.getTopWindowUrl, + url: utils.getTopWindowUrl(), referrer: document.referrer, enableBotFiltering: true, includePricingData: true