Skip to content
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

Refactor of Prebid #349

Merged
merged 58 commits into from
May 18, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
97fbbf8
Concurrent bid requests
Apr 26, 2016
ead59fc
ad being rendered, still in progress
May 10, 2016
ae38f32
fix bug in appnexus adapter, lower timeout duration
May 10, 2016
a015460
notes
May 10, 2016
fcb2aa6
render ads as soon as all bids are back
May 10, 2016
96fca00
remove deprecated code
May 10, 2016
280dbc5
add small composable functions for readability, comment out a few API…
May 10, 2016
965a07e
comment API methods and related tests
May 10, 2016
d6e0817
adds fixtures, refactor tests, comment some api tests until methods a…
May 10, 2016
9b134b4
restore API methods, add fixtures functions, fix tests
May 11, 2016
e782a5b
restore all adpaters, remove deprecated code and tests
May 11, 2016
e1a3a70
review notes
May 11, 2016
d36eccd
review notes: naming things, restore api methods, move composables to…
May 12, 2016
1db6f0b
exclude adapters from coverage reporting
May 12, 2016
bf1e3b3
include adapters in coverage reporting
May 12, 2016
921667c
restore `bidsAvailableForAdapter` API method, move `getBidRequest` to…
May 12, 2016
0d669e7
restore test for `getAdserverTargetingForAdUnitCodeStr`
May 12, 2016
bb05754
Fix `pbjs.enableSendAllBids()` when using DivId for your adunit.code.
mkendall07 May 12, 2016
e914f77
fix object destructuring bug in `pbjs.requestBids` method signature
May 12, 2016
0ef87fe
bug fixes: allBidsAvailable should return boolean, wrap one time exte…
May 12, 2016
be317dc
move `getKeys` and `getVal` to utils module, rename `bidSet` to `bidd…
May 13, 2016
638c0a2
Derive bidder codes from adUnits, fixes "Calling All Bidders" bug, al…
May 13, 2016
e2ee6f0
fix `getAdServerTargeting` test
May 13, 2016
57d53e7
Fix token illegal error
mkendall07 May 16, 2016
6e9d25b
Concurrent bid requests
Apr 26, 2016
cfa3eea
ad being rendered, still in progress
May 10, 2016
ab944bd
fix bug in appnexus adapter, lower timeout duration
May 10, 2016
052c15c
notes
May 10, 2016
856f5f0
render ads as soon as all bids are back
May 10, 2016
7df0a3b
remove deprecated code
May 10, 2016
562dd09
add small composable functions for readability, comment out a few API…
May 10, 2016
2051d55
comment API methods and related tests
May 10, 2016
6f0d1fd
adds fixtures, refactor tests, comment some api tests until methods a…
May 10, 2016
c605b82
restore API methods, add fixtures functions, fix tests
May 11, 2016
a5ee300
restore all adpaters, remove deprecated code and tests
May 11, 2016
a679ce3
review notes
May 11, 2016
c869737
review notes: naming things, restore api methods, move composables to…
May 12, 2016
9850e24
exclude adapters from coverage reporting
May 12, 2016
21f55e2
include adapters in coverage reporting
May 12, 2016
8c2a833
restore `bidsAvailableForAdapter` API method, move `getBidRequest` to…
May 12, 2016
bc13bbc
restore test for `getAdserverTargetingForAdUnitCodeStr`
May 12, 2016
2af9d59
fix object destructuring bug in `pbjs.requestBids` method signature
May 12, 2016
bbc7ef6
bug fixes: allBidsAvailable should return boolean, wrap one time exte…
May 12, 2016
dfe2854
move `getKeys` and `getVal` to utils module, rename `bidSet` to `bidd…
May 13, 2016
5e41aac
Derive bidder codes from adUnits, fixes "Calling All Bidders" bug, al…
May 13, 2016
cc6e395
fix `getAdServerTargeting` test
May 13, 2016
320c7c8
Fix token illegal error
mkendall07 May 16, 2016
0924b39
restore return value format for `pbjs.getBidResponses`
May 16, 2016
60a28a7
fix merge conflicts
May 16, 2016
b4e4f97
restore return format for `getAdServerTargeting()`
May 16, 2016
f99c833
restore `getAdServerTargeting` return value as map
May 17, 2016
0d9c738
Restore getBidResponsesForAdUnitCode()
mkendall07 May 17, 2016
ad33048
restore `getAdServerTargetingForAdUnitCodeStr` return value as string…
May 17, 2016
b629a04
Merge branch 'fp_refactor' of https://github.com/prebid/Prebid.js int…
May 17, 2016
770948f
check if send all bids before adding bid landscape targeting
May 17, 2016
5ad34e2
Implement 'dense' price bucket mode
matthewlane May 16, 2016
ce82e57
Merge branch 'fp_refactor' into dense-mode
mkendall07 May 18, 2016
340befa
Merge branch 'dense-mode' into fp_refactor
mkendall07 May 18, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .jscsrc
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
{
"maxErrors": 1000,
"esnext": true,
"requireTrailingComma": null,
"requireCamelCaseOrUpperCaseIdentifiers": null,
"requireSpacesInAnonymousFunctionExpression": null,
Expand Down
63 changes: 37 additions & 26 deletions src/adaptermanager.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/** @module adaptermanger */

var bidmanager = require('./bidmanager.js');
import { flatten, getBidderCodes } from './utils';

var utils = require('./utils.js');
var CONSTANTS = require('./constants.json');
var events = require('./events');
Expand All @@ -9,34 +10,44 @@ import { BaseAdapter } from './adapters/baseAdapter';
var _bidderRegistry = {};
exports.bidderRegistry = _bidderRegistry;

exports.callBids = function (bidderArr) {
for (var i = 0; i < bidderArr.length; i++) {
//use the bidder code to identify which function to call
var bidder = bidderArr[i];
if (bidder.bidderCode && _bidderRegistry[bidder.bidderCode]) {
utils.logMessage('CALLING BIDDER ======= ' + bidder.bidderCode);
var currentBidder = _bidderRegistry[bidder.bidderCode];

//emit 'bidRequested' event
events.emit(CONSTANTS.EVENTS.BID_REQUESTED, bidder);
currentBidder.callBids(bidder);

// if the bidder didn't explicitly set the number of bids
// expected, default to the number of bids passed into the bidder
if (bidmanager.getExpectedBidsCount(bidder.bidderCode) === undefined) {
bidmanager.setExpectedBidsCount(bidder.bidderCode, bidder.bids.length);
}

var currentTime = new Date().getTime();
bidmanager.registerBidRequestTime(bidder.bidderCode, currentTime);

if (currentBidder.defaultBidderSettings) {
bidmanager.registerDefaultBidderSetting(bidder.bidderCode, currentBidder.defaultBidderSettings);
function getBids({ bidderCode, requestId, bidderRequestId }) {
return pbjs.adUnits.map(adUnit => {
return adUnit.bids.filter(bid => bid.bidder === bidderCode)
.map(bid => Object.assign(bid, {
placementCode: adUnit.code,
sizes: adUnit.sizes,
bidId: utils.getUniqueIdentifierStr(),
bidderRequestId,
requestId
}));
}).reduce(flatten, []);
}

exports.callBids = () => {
const requestId = utils.getUniqueIdentifierStr();

getBidderCodes().forEach(bidderCode => {
const adapter = _bidderRegistry[bidderCode];
if (adapter) {
const bidderRequestId = utils.getUniqueIdentifierStr();
const bidderRequest = {
bidderCode,
requestId,
bidderRequestId,
bids: getBids({ bidderCode, requestId, bidderRequestId }),
start: new Date().getTime()
};
console.log('bid set:', bidderCode, bidderRequestId);
utils.logMessage(`CALLING BIDDER ======= ${bidderCode}`);
pbjs._bidsRequested.push(bidderRequest);
events.emit(CONSTANTS.EVENTS.BID_REQUESTED, bidderRequest);
if (bidderRequest.bids && bidderRequest.bids.length) {
adapter.callBids(bidderRequest);
}
} else {
utils.logError('Adapter trying to be called which does not exist: ' + bidder.bidderCode, 'adaptermanager.callBids');
utils.logError(`Adapter trying to be called which does not exist: ${bidderCode} adaptermanager.callBids`);
}
}
});
};

exports.registerBidAdapter = function (bidAdaptor, bidderCode) {
Expand Down
3 changes: 2 additions & 1 deletion src/adapters/adform.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@ function AdformAdapter() {
};

function _callBids(params) {
var callbackName = '_adf_' + utils.getUniqueIdentifierStr();
//var callbackName = '_adf_' + utils.getUniqueIdentifierStr();
var bid;
var noDomain = true;
var bids = params.bids;
var request = [];
var callbackName = '_adf_' + utils.getUniqueIdentifierStr();

for (var i = 0, l = bids.length; i < l; i++) {
bid = bids[i];
Expand Down
17 changes: 10 additions & 7 deletions src/adapters/appnexus.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { getBidRequest } from '../utils.js';

var CONSTANTS = require('../constants.json');
var utils = require('../utils.js');
var adloader = require('../adloader.js');
Expand All @@ -10,21 +12,22 @@ AppNexusAdapter = function AppNexusAdapter() {
var baseAdapter = Adapter.createNew('appnexus');

baseAdapter.callBids = function (params) {
var bidCode = baseAdapter.getBidderCode();
//var bidCode = baseAdapter.getBidderCode();

var anArr = params.bids;
var bidsCount = anArr.length;

//var bidsCount = anArr.length;

//set expected bids count for callback execution
bidmanager.setExpectedBidsCount(bidCode, bidsCount);
//bidmanager.setExpectedBidsCount(bidCode, bidsCount);

for (var i = 0; i < bidsCount; i++) {
for (var i = 0; i < anArr.length; i++) {
var bidRequest = anArr[i];
var callbackId = utils.getUniqueIdentifierStr();
var callbackId = bidRequest.bidId;
adloader.loadScript(buildJPTCall(bidRequest, callbackId));

//store a reference to the bidRequest from the callback id
bidmanager.pbCallbackMap[callbackId] = bidRequest;
//bidmanager.pbCallbackMap[callbackId] = bidRequest;
}
};

Expand Down Expand Up @@ -149,7 +152,7 @@ AppNexusAdapter = function AppNexusAdapter() {
var responseCPM;
var id = jptResponseObj.callback_uid;
var placementCode = '';
var bidObj = bidmanager.getPlacementIdByCBIdentifer(id);
var bidObj = getBidRequest(id);
if (bidObj) {

bidCode = bidObj.bidder;
Expand Down
6 changes: 3 additions & 3 deletions src/adapters/brightcom.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ var BrightcomAdapter = function BrightcomAdapter() {
// Add current impression to collection
brightcomImps.push(imp);
// Add mapping to current bid via impression id
bidmanager.pbCallbackMap[imp.id] = bid;
//bidmanager.pbCallbackMap[imp.id] = bid;

// Add current ad unit's code to tracking
reqAdUnitsCode.push(bid.placementCode);
Expand Down Expand Up @@ -136,8 +136,8 @@ var BrightcomAdapter = function BrightcomAdapter() {
brightcomResponseObj.seatbid[0].bid.forEach( function(curBid) {

// Get the bid request data
var bidRequest = bidmanager.getPlacementIdByCBIdentifer(curBid.impid);
var bidRequest = pbjs._bidsRequested.find(bidSet => bidSet.bidderCode === 'brightcom').bids[0]; // this assumes a single request only

// Make sure the bid exists
if (bidRequest) {

Expand Down
2 changes: 1 addition & 1 deletion src/adapters/indexExchange.js
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() {
utils.logError('Too many unique sizes on slots, will use the first 20.', ADAPTER_NAME);
}

bidmanager.setExpectedBidsCount(ADAPTER_CODE, expectedBids);
//bidmanager.setExpectedBidsCount(ADAPTER_CODE, expectedBids);
adloader.loadScript(cygnus_index_start());

var responded = false;
Expand Down
5 changes: 3 additions & 2 deletions src/adapters/nginad.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ var NginAdAdapter = function NginAdAdapter() {
};

nginadImps.push(imp);
bidmanager.pbCallbackMap[imp.id] = bid;
//bidmanager.pbCallbackMap[imp.id] = bid;

rtbServerDomain = bid.params.nginadDomain;

Expand Down Expand Up @@ -141,7 +141,8 @@ var NginAdAdapter = function NginAdAdapter() {
var id = nginadBid.impid;

// try to fetch the bid request we sent NginAd
var bidObj = bidmanager.getPlacementIdByCBIdentifer(id);
var bidObj = pbjs._bidsRequested.find(bidSet => bidSet.bidderCode === 'nginad').bids
.filter(bid => bid.params && bid.params.impId === id);
if (!bidObj) {
return handleErrorResponse(nginadBid, defaultPlacementForBadBid);
}
Expand Down
2 changes: 1 addition & 1 deletion src/adapters/pubmatic.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ var PubmaticAdapter = function PubmaticAdapter() {
bids = params.bids;
for (var i = 0; i < bids.length; i++) {
var bid = bids[i];
bidmanager.pbCallbackMap['' + bid.params.adSlot] = bid;
//bidmanager.pbCallbackMap['' + bid.params.adSlot] = bid;
_pm_pub_id = _pm_pub_id || bid.params.publisherId;
_pm_optimize_adslots.push(bid.params.adSlot);
}
Expand Down
4 changes: 2 additions & 2 deletions src/adapters/sovrn.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ var SovrnAdapter = function SovrnAdapter() {
bidfloor: bidFloor
};
sovrnImps.push(imp);
bidmanager.pbCallbackMap[imp.id] = bid;
//bidmanager.pbCallbackMap[imp.id] = bid;
allPlacementCodes.push(bid.placementCode);
});

Expand Down Expand Up @@ -105,7 +105,7 @@ var SovrnAdapter = function SovrnAdapter() {
var bid = {};

// try to fetch the bid request we sent Sovrn
var bidObj = bidmanager.getPlacementIdByCBIdentifer(id);
var bidObj = pbjs._bidsRequested.map(bidSet => bidSet.bids.filter(bid => bid.params && bid.params.impId === id));
if (bidObj) {
placementCode = bidObj.placementCode;
placementsWithBidsBack.push(placementCode);
Expand Down
12 changes: 7 additions & 5 deletions src/adapters/springserve.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ SpringServeAdapter = function SpringServeAdapter() {
var bids = params.bids || [];
for (var i = 0; i < bids.length; i++) {
var bid = bids[i];
bidmanager.pbCallbackMap[bid.params.impId] = params;
//bidmanager.pbCallbackMap[bid.params.impId] = params;
adloader.loadScript(buildSpringServeCall(bid));
}
}
Expand All @@ -67,13 +67,15 @@ SpringServeAdapter = function SpringServeAdapter() {
responseObj.seatbid[0].bid[0] !== undefined) {
//look up the request attributs stored in the bidmanager
var responseBid = responseObj.seatbid[0].bid[0];
var requestObj = bidmanager.getPlacementIdByCBIdentifer(responseBid.impid);
//var requestObj = bidmanager.getPlacementIdByCBIdentifer(responseBid.impid);
var requestBids = pbjs._bidsRequested.find(bidSet => bidSet.bidderCode === 'springserve').bids
.filter(bid => bid.params && bid.params.impId === +responseBid.impid);
var bid = bidfactory.createBid(1);
var placementCode;

//assign properties from the original request to the bid object
for (var i = 0; i < requestObj.bids.length; i++) {
var bidRequest = requestObj.bids[i];
for (var i = 0; i < requestBids.length; i++) {
var bidRequest = requestBids[i];
if (bidRequest.bidder === 'springserve') {
placementCode = bidRequest.placementCode;
var size = bidRequest.sizes[0];
Expand All @@ -82,7 +84,7 @@ SpringServeAdapter = function SpringServeAdapter() {
}
}

bid.bidderCode = requestObj.bidderCode;
bid.bidderCode = requestBids[0].bidder;

if (responseBid.hasOwnProperty('price') && responseBid.hasOwnProperty('adm')) {
//assign properties from the response to the bid object
Expand Down
15 changes: 8 additions & 7 deletions src/adapters/triplelift.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ var TripleLiftAdapter = function TripleLiftAdapter() {
var bidsCount = tlReq.length;

//set expected bids count for callback execution
bidmanager.setExpectedBidsCount('triplelift',bidsCount);
//bidmanager.setExpectedBidsCount('triplelift',bidsCount);

for (var i = 0; i < bidsCount; i++) {
var bidReqeust = tlReq[i];
var callbackId = utils.getUniqueIdentifierStr();
adloader.loadScript(buildTLCall(bidReqeust, callbackId));
var bidRequest = tlReq[i];
var callbackId = bidRequest.bidderRequestId;
adloader.loadScript(buildTLCall(bidRequest, callbackId));
//store a reference to the bidRequest from the callback id
bidmanager.pbCallbackMap[callbackId] = bidReqeust;
//bidmanager.pbCallbackMap[callbackId] = bidRequest;
}

}
Expand Down Expand Up @@ -72,8 +72,9 @@ var TripleLiftAdapter = function TripleLiftAdapter() {
//expose the callback to the global object:
pbjs.TLCB = function(tlResponseObj) {
if (tlResponseObj && tlResponseObj.callback_id) {
var bidObj = bidmanager.pbCallbackMap[tlResponseObj.callback_id],
placementCode = bidObj.placementCode;
//var bidObj = bidmanager.pbCallbackMap[tlResponseObj.callback_id],
var bidObj = pbjs._bidsRequested.find(bidSet => bidSet.bidderRequestId === tlResponseObj.callback_id).bids.reduce((a, b) => b);
var placementCode = bidObj.placementCode;

// @if NODE_ENV='debug'
utils.logMessage('JSONP callback function called for inventory code: ' + bidObj.params.inventoryCode);
Expand Down
4 changes: 2 additions & 2 deletions src/bidfactory.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,6 @@ function Bid(statusCode) {
}

// Bid factory function.
exports.createBid = function (statusCde) {
return new Bid(statusCde);
exports.createBid = function (statusCode) {
return new Bid(statusCode);
};
Loading