Skip to content

Commit 8c3513e

Browse files
committed
Fixed for issue #7 - add Casale adapter
1 parent 0056eb3 commit 8c3513e

File tree

4 files changed

+144
-2
lines changed

4 files changed

+144
-2
lines changed

integrationExamples/gpt/pbjs_example_gpt.html

+7
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,13 @@
116116
pub: '{id}',
117117
name: '{id}'
118118
}
119+
},
120+
{
121+
bidder: 'casale',
122+
params: {
123+
slotId: '{id}', // number
124+
casaleUrl: '{url}'
125+
}
119126
}]
120127
}];
121128

src/adaptermanager.js

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ var PubmaticAdapter = require('./adapters/pubmatic.js');
77
var CriteoAdapter = require('./adapters/criteo');
88
var AmazonAdapter = require('./adapters/amazon');
99
var YieldbotAdapter = require('./adapters/yieldbot');
10+
var Casale = require('./adapters/casale');
1011
var bidmanager = require('./bidmanager.js');
1112
var utils = require('./utils.js');
1213
var CONSTANTS = require('./constants.json');
@@ -52,3 +53,4 @@ registerBidAdapter(PubmaticAdapter(), 'pubmatic');
5253
registerBidAdapter(CriteoAdapter(), 'criteo');
5354
registerBidAdapter(AmazonAdapter(), 'amazon');
5455
registerBidAdapter(YieldbotAdapter(), 'yieldbot');
56+
registerBidAdapter(Casale(), 'casale');

src/adapters/casale.js

+133
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
//Factory for creating the bidderAdaptor
2+
var CONSTANTS = require('../constants.json');
3+
var utils = require('../utils.js');
4+
var bidfactory = require('../bidfactory.js');
5+
var bidmanager = require('../bidmanager.js');
6+
7+
var ADAPTER_NAME = 'CASALE';
8+
var ADAPTER_CODE = 'casale';
9+
10+
var CasaleAdapter = function CasaleAdapter() {
11+
var slotIdMap = {};
12+
var requiredParams = [
13+
/* 0 */
14+
'slotId',
15+
/* 1 */
16+
'casaleUrl'
17+
];
18+
var firstAdUnitCode = '';
19+
20+
function _callBids(request) {
21+
var bidArr = request.bids;
22+
23+
//validate first bid request with all required params.
24+
if (!utils.hasValidBidRequest(bidArr[0].params, requiredParams, ADAPTER_NAME)) {
25+
return;
26+
}
27+
for (var i = 0; i < bidArr.length; i++) {
28+
var bid = bidArr[i];
29+
//only validate 1st param on rest of bids
30+
if (utils.hasValidBidRequest(bid.params, requiredParams.slice(0, 1), ADAPTER_NAME)) {
31+
firstAdUnitCode = bid.placementCode;
32+
var slotId = bid.params[requiredParams[0]];
33+
slotIdMap[slotId] = bid;
34+
}
35+
}
36+
37+
var adUrl = bidArr[0].params[requiredParams[1]];
38+
var iframeContents = createRequestContent(adUrl);
39+
var iframe = buildIframeContainer();
40+
var iframeId = iframe.id;
41+
//attach to onload event of iframe to ensure script is ready
42+
utils.addEventHandler(iframe, 'load', function() {
43+
try {
44+
var iframeObj = window.frames[iframeId];
45+
var casaleObj = iframeObj.contentWindow._IndexRequestData.targetIDToBid;
46+
var lookupObj = iframeObj.contentWindow.cygnus_index_args;
47+
48+
if (utils.isEmpty(casaleObj)) {
49+
//no bid response
50+
var bid = bidfactory.createBid(2);
51+
bid.bidderCode = ADAPTER_CODE;
52+
logErrorBidResponse();
53+
return;
54+
}
55+
56+
utils._each(casaleObj, function(adContents, cpmAndSlotId) {
57+
58+
utils._each(slotIdMap, function(bid, adSlotId) {
59+
var obj = cpmAndSlotId.split('_');
60+
var currentId = obj[0];
61+
var currentCPM = obj[1];
62+
if (currentId === adSlotId) {
63+
var bidObj = slotIdMap[adSlotId];
64+
var adUnitCode = bidObj.placementCode;
65+
var slotObj = getSlotObj(lookupObj, adSlotId);
66+
bid = bidfactory.createBid(1);
67+
bid.cpm = (currentCPM / 100);
68+
bid.ad = adContents;
69+
bid.ad_id = adSlotId;
70+
bid.bidderCode = ADAPTER_CODE;
71+
bid.width = slotObj.width;
72+
bid.height = slotObj.height;
73+
bid.siteID = slotObj.siteID;
74+
bidmanager.addBidResponse(adUnitCode, bid);
75+
}
76+
});
77+
});
78+
79+
} catch (e) {
80+
utils.logError('Error calling casale adapter', ADAPTER_NAME, e);
81+
logErrorBidResponse();
82+
}
83+
});
84+
85+
var iframeDoc = iframe.contentWindow.document;
86+
iframeDoc.write(iframeContents);
87+
iframeDoc.close();
88+
}
89+
90+
function getSlotObj(obj, id) {
91+
var arr = obj.slots;
92+
var returnObj = {};
93+
utils._each(arr, function(value) {
94+
if (value.id === id) {
95+
returnObj = value;
96+
}
97+
});
98+
return returnObj;
99+
}
100+
101+
function logErrorBidResponse() {
102+
//no bid response
103+
var bid = bidfactory.createBid(2);
104+
bid.bidderCode = ADAPTER_CODE;
105+
//log error to first add unit
106+
bidmanager.addBidResponse(firstAdUnitCode, bid);
107+
}
108+
109+
function buildIframeContainer() {
110+
var iframe = utils.createInvisibleIframe();
111+
var elToAppend = document.getElementsByTagName('head')[0];
112+
//insert the iframe into document
113+
elToAppend.insertBefore(iframe, elToAppend.firstChild);
114+
return iframe;
115+
116+
}
117+
118+
function createRequestContent(url) {
119+
var content = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><base target="_top" /><scr' + 'ipt>inDapIF=true;</scr' + 'ipt></head>';
120+
content += '<body>';
121+
content += '<scr' + 'ipt src="' + url + '"></scr' + 'ipt>';
122+
content += '</body></html>';
123+
return content;
124+
}
125+
126+
127+
return {
128+
callBids: _callBids
129+
};
130+
//end of Rubicon bid adaptor
131+
};
132+
133+
module.exports = CasaleAdapter;

src/utils.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ exports.getPriceBucketString = function(cpm) {
263263
* @param {string[]} requiredParamsArr [description]
264264
* @return {bool} Bool if paramaters are valid
265265
*/
266-
exports.hasValidBidRequest = function(paramObj, requiredParamsArr){
266+
exports.hasValidBidRequest = function(paramObj, requiredParamsArr, adapter){
267267

268268
for(var i = 0; i < requiredParamsArr.length; i++){
269269
var found = false;
@@ -275,7 +275,7 @@ exports.hasValidBidRequest = function(paramObj, requiredParamsArr){
275275
});
276276

277277
if(!found){
278-
this.logError('Params are missing for adapter. One of these required paramaters are missing: ' + requiredParamsArr);
278+
this.logError('Params are missing for bid request. One of these required paramaters are missing: ' + requiredParamsArr, adapter);
279279
return false;
280280
}
281281
}

0 commit comments

Comments
 (0)