From 600b498f719ed80acb337c80e28ee4985428450d Mon Sep 17 00:00:00 2001 From: Vikram Jiandani Date: Sun, 25 Oct 2015 12:58:45 -0700 Subject: [PATCH] added adaptor for sovrn --- dist/prebid.js | 128 ++++++++++++++++-- dist/prebid.min.js | 5 +- integrationExamples/gpt/pbjs_example_gpt.html | 6 + src/adaptermanager.js | 4 +- src/adapters/sovrn.js | 93 +++++++++++++ 5 files changed, 218 insertions(+), 18 deletions(-) create mode 100644 src/adapters/sovrn.js diff --git a/dist/prebid.js b/dist/prebid.js index 6799fa1cbce..68b3b26d71a 100644 --- a/dist/prebid.js +++ b/dist/prebid.js @@ -1,5 +1,5 @@ /* Prebid.js v0.4.0 -Updated : 2015-10-23 */ +Updated : 2015-10-26 */ (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o=i){o=!0,d=c[s],a.trackPixel(d);break}o||(d=l,a.trackPixel(d)),n.logMessage("latency for placement code : "+r+" : "+i+" ms. Tracking URL Fired : "+d)}}function s(e,t){var r=n.getBidIdParamater("placementId",e.params),i=n.getBidIdParamater("memberId",e.params),a=n.getBidIdParamater("invCode",e.params),o=n.getBidIdParamater("query",e.params),d="http"+("https:"===document.location.protocol?"s://secure.adnxs.com/jpt?":"://ib.adnxs.com/jpt?");d=n.tryAppendQueryString(d,"callback","pbjs.handleCB"),d=n.tryAppendQueryString(d,"callback_uid",t),d=n.tryAppendQueryString(d,"psa","0"),d=n.tryAppendQueryString(d,"id",r),d=n.tryAppendQueryString(d,"member_id",i),d=n.tryAppendQueryString(d,"code",a);var s=n.parseSizesInput(e.sizes);s&&(d+=s+"&");var c=n.parseQueryStringParameters(o);return c&&(d+=c),d=n.tryAppendQueryString(d,"referrer",n.getTopWindowUrl()),d.lastIndexOf("&")===d.length-1&&(d=d.substring(0,d.length-1)),n.logMessage("jpt request built: "+d),e.startTime=(new Date).getTime(),d}var c=[];c[100]=e(21139),c[200]=e(21140),c[300]=e(21141),c[400]=e(21142),c[500]=e(21143),c[600]=e(21144),c[700]=e(21145),c[800]=e(21146),c[1e3]=e(21147),c[1300]=e(21148),c[1600]=e(21149),c[2e3]=e(21150),c[5e3]=e(21151),c[1e4]=e(21152);{var l=e(21154);e(21153)}return pbjs.handleCB=function(e){if(e&&e.callback_uid){var t,a=e.callback_uid,s="",c=o.getPlacementIdByCBIdentifer(a);if(c){s=c.placementCode,c.status=i.STATUS.GOOD;try{r(c.startTime,(new Date).getTime(),s)}catch(l){}}n.logMessage("JSONP callback function called for ad ID: "+a);var p=[];if(e.result&&e.result.cpm&&0!==e.result.cpm){t=parseInt(e.result.cpm,10),t/=1e4;var u=(e.result.ad,e.result.creative_id);p=d.createBid(1),p.creative_id=u,p.bidderCode="appnexus",p.cpm=t,p.adUrl=e.result.ad,p.width=e.result.width,p.height=e.result.height,p.dealId=e.result.deal_id,o.addBidResponse(s,p)}else n.logMessage("No prebid response from AppNexus for placement code "+s),p=d.createBid(2),p.bidderCode="appnexus",o.addBidResponse(s,p)}else n.logMessage("No prebid response for placement %%PLACEMENT%%")},{callBids:t}};t.exports=s},{"../adloader.js":9,"../bidfactory.js":10,"../bidmanager.js":11,"../constants.json":12,"../utils.js":14}],3:[function(e,t,r){var i=(e("../constants.json"),e("../utils.js")),n=e("../bidfactory.js"),a=e("../bidmanager.js"),o="CASALE",d="casale",s=function(){function e(e){var g=e.bids;if(i.hasValidBidRequest(g[0].params,p,o)){for(var f=0;f',t+=""}var l={},p=["slotId","casaleUrl"],u="";return{callBids:e}};t.exports=s},{"../bidfactory.js":10,"../bidmanager.js":11,"../constants.json":12,"../utils.js":14}],4:[function(e,t,r){var i=(e("../constants.json"),e("../utils.js"),e("../bidfactory.js")),n=e("../bidmanager.js"),a=e("../adloader"),o=function(){function e(e){o=e.bids||[],t(o).forEach(r)}function t(e){var t,r={},i=[];e.forEach(function(e){r[e.params.nid]=e});for(t in r)r.hasOwnProperty(t)&&i.push(r[t]);return i}function r(e){var t="crtg_varname_"+e.params.nid,r="//rtax.criteo.com/delivery/rta/rta.js?netId="+encodeURI(e.params.nid)+"&cookieName="+encodeURI(e.params.cookiename)+"&rnd="+Math.floor(99999999999*Math.random())+"&varName="+encodeURI(t);a.loadScript(r,function(r){var a,d=window[t];o.forEach(function(t){t.params.nid===e.params.nid&&(d?(a=i.createBid(1),a.bidderCode="criteo",a.keys=d.split(";")):(a=i.createBid(2),a.bidderCode="criteo"),n.addBidResponse(t.placementCode,a))})})}var o;return{callBids:e}};t.exports=o},{"../adloader":9,"../bidfactory.js":10,"../bidmanager.js":11,"../constants.json":12,"../utils.js":14}],5:[function(e,t,r){var i=(e("../constants.json"),e("../utils.js"),e("../bidfactory.js")),n=e("../bidmanager.js"),a=e("../adloader"),o=function(e){function t(e){d=e.bids||[];for(var t=0;t',e+="",e+="",e=i.replaceTokenInString(e,t,"%%")}var o,d,s=[];return pbjs.handlePubmaticCallback=function(e){var t,r,i,d,s,c=e&&e.bidDetailsMap||{},l=e&&e.progKeyValueMap||{};for(t=0;t",a+='',a+="",a=n.replaceTokenInString(a,o,"%%")}var s={};return window.pbjs=window.pbjs||{que:[]},window.pbjs.handleRubiconCallback=function(e){var r="",d={};if(e&&"ok"===e.status)try{var c="",l=o.getPlacementIdByCBIdentifer(t(e));if(l&&(r=l.placementCode,l.status=i.STATUS.GOOD,c=l.iframeId),d=a.createBid(1),e.ads&&e.ads[0]){var p=e.ads[0],u=s[p.size_id],g=0,f=0,m=window.frames[c],b=m.contentWindow.RubiconAdServing;if(b&&b.AdSizes){u=b.AdSizes[p.size_id];var h=u.dim.split("x");g=h[0],f=h[1]}d.cpm=p.cpm,d.ad="",d.ad_id=p.ad_id,d.bidderCode="rubicon",d.sizeId=p.size_id,d.width=g,d.height=f}}catch(v){n.logError("Error parsing rubicon response bid: "+v.message)}else{d=a.createBid(2),d.bidderCode="rubicon";var l=o.getPlacementIdByCBIdentifer(t(e));l&&(r=l.placementCode)}o.addBidResponse(r,d)},{callBids:e}};t.exports=d},{"../bidfactory.js":10,"../bidmanager.js":11,"../constants.json":12,"../utils.js":14}],8:[function(e,t,r){var i=e("../adloader"),n=e("../bidfactory"),a=e("../bidmanager"),o=e("../utils"),d=function(){window.ybotq=window.ybotq||[];var e={BID_STATUS:{PENDING:0,AVAILABLE:1,EMPTY:2},definedSlots:[],pageLevelOption:!1,buildCreative:function(e,t){return'"},buildBid:function(t){var r={};if(t&&t.ybot_ad&&"n"!==t.ybot_ad){r=n.createBid(e.BID_STATUS.AVAILABLE),r.cpm=parseInt(t.ybot_cpm)/100||0;var i=t.ybot_size?t.ybot_size.split("x"):[0,0],a=t.ybot_slot||"",o=t.ybot_size||"";r.width=i[0]||0,r.height=i[1]||0,r.ad=e.buildCreative(a,o);for(var d in t)r[d]=t[d]}else r=n.createBid(BID_STATUS.EMPTY);return r.bidderCode="yieldbot",r},callBids:function(t){var r=t.bids||[],n=window.ybotq||[];e.pageLevelOption=!1,n.push(function(){var t=window.yieldbot;o._each(r,function(r){var i=r,n=i.params&&i.params.psn||"ERROR_DEFINE_YB_PSN",d=i.params&&i.params.slot||"ERROR_DEFINE_YB_SLOT";t.pub(n),t.defineSlot(d,{sizes:i.sizes||[]});var s=o.getUniqueIdentifierStr();a.pbCallbackMap[s]=i,e.definedSlots.push(s)}),t.enableAsync(),t.go()}),n.push(function(){e.handleUpdateState()}),i.loadScript("//cdn.yldbt.com/js/yieldbot.intent.js")},handleUpdateState:function(){var t=window.yieldbot;o._each(e.definedSlots,function(r){var i,n,o,d;d=a.getPlacementIdByCBIdentifer(r)||{},i=d.params.slot||"",n=t.getSlotCriteria(i),o=d.placementCode||"ERROR_YB_NO_PLACEMENT";var s=e.buildBid(n);a.addBidResponse(o,s)})}};return{callBids:e.callBids}};t.exports=d},{"../adloader":9,"../bidfactory":10,"../bidmanager":11,"../utils":14}],9:[function(e,t,r){r.loadScript=function(e,t){var r=document.createElement("script");r.type="text/javascript",r.async=!0,t&&"function"==typeof t&&(r.readyState?r.onreadystatechange=function(){("loaded"==r.readyState||"complete"==r.readyState)&&(r.onreadystatechange=null,t())}:r.onload=function(){t()}),r.src=e;var i=document.getElementsByTagName("head");i=i.length?i:document.getElementsByTagName("body"),i.length&&(i=i[0],i.insertBefore(r,i.firstChild))},r.trackPixel=function(e){try{if(e+="&rnd="+Math.random()){var t=document.createElement("img");t.src=e}}catch(r){}}},{}],10:[function(e,t,r){function i(e){function t(){switch(i){case 0:return"Pending";case 1:return"Bid available";case 2:return"Bid returned empty or error response";case 3:return"Bid timed out"}}var r=n.getUniqueIdentifierStr(),i=e||0;this.bidderCode="",this.width=0,this.height=0,this.statusMessage=t(),this.adId=r,this.getStatusCode=function(){return i},this.getSize=function(){return this.width+"x"+this.height}}var n=e("./utils.js");r.createBid=function(e){return new i(e)}},{"./utils.js":14}],11:[function(e,t,r){function i(e,t){var r={},i=pbjs.bidderSettings||{};return e&&t&&i&&i[e]?(n(r,i[e],t),t.alwaysUseBid=i[e].alwaysUseBid):I[e]?(n(r,I[e],t),t.alwaysUseBid=I[e].alwaysUseBid):t&&i&&(i[c.JSON_MAPPING.BD_SETTING_STANDARD]||(i[c.JSON_MAPPING.BD_SETTING_STANDARD]={adserverTargeting:[{key:"hb_bidder",val:function(e){return e.bidderCode}},{key:"hb_adid",val:function(e){return e.adId}},{key:"hb_pb",val:function(e){return e.pbMg}},{key:"hb_size",val:function(e){return e.size}}]}),n(r,i[c.JSON_MAPPING.BD_SETTING_STANDARD],t)),r}function n(e,t,r){var i=t[c.JSON_MAPPING.ADSERVER_TARGETING];return r.size=r.getSize(),l._each(i,function(t){var i=t.key,n=t.val;if(l.isFn(n))try{e[i]=n(r)}catch(a){l.logError("bidmanager","ERROR",a)}else e[i]=n}),e}function a(e){var t=[e];o(u,t)}function o(e,t){var r;if(l.isArray(e))for(r=0;r0&&i.push({cpm:o.cpm,bid:o}),t.push(n)}}if(r&&0!==i.length){var d=c(i),s=d.adserverTargeting;P[r]=y.extend(P[r],s)}return t}function g(e){var t={};if(e){var r=JSON.stringify(e);t=JSON.parse(r),delete t.pbLg,delete t.pbMg,delete t.pbHg}return t}function f(){B.clearAllBidResponses(),j={}}function m(e){var t=e;f(),n(t)}function b(e){var t=null;return e&&(t=p(e.getSlotElementId()),t||(t=p(e.getAdUnitPath()))),t}window.pbjs=window.pbjs||{},window.pbjs.que=window.pbjs.que||[];var h=window.pbjs,v=e("./constants.json"),y=e("./utils.js"),B=e("./bidmanager.js"),_=e("./adaptermanager"),w=e("./bidfactory"),I=e("./adloader"),A="function",T="undefined",C="object",R="string",E=[],S=[],j={},P={};h.bidderTimeout=h.bidderTimeout||3e3,h.logging=h.logging||!1,h.libLoaded=!0,h.adUnits=h.adUnits||[],h.que.push=function(e){if(typeof e===A)try{e.call()}catch(t){y.logError("Error processing command :"+t.message)}else y.logError("Commands written into pbjs.que.push must wrapped in a function")},h.getAdserverTargetingForAdUnitCodeStr=function(e){if(e){var t=h.getAdserverTargetingForAdUnitCode(e);return y.transformAdServerTargetingObj(t)}y.logMessage("Need to call getAdserverTargetingForAdUnitCodeStr with adunitCode")},h.getAdserverTargetingForAdUnitCode=function(e){return h.getBidResponses(e),e?P[e]:P},h.getAdserverTargeting=function(){return h.getAdserverTargetingForAdUnitCode()},h.getBidResponses=function(e){var t={},r=[],i={};if(e)t=p(e),r=[],t&&t.bids&&(r=u(t.bids)),i={bids:r};else{t=p();for(var n in t)t.hasOwnProperty(n)&&(t&&t[n]&&t[n].bids&&(r=u(t[n].bids)),i[n]={bids:r})}return i},h.getBidResponsesForAdUnitCode=function(e){return h.getBidResponses(e)},h.setTargetingForAdUnitsGPTAsync=function(e){if(!window.googletag||!y.isFn(window.googletag.pubads)||!y.isFn(window.googletag.pubads().getSlots))return void y.logError("window.googletag is not defined on the page");var t=e;typeof e===R?t=[e]:typeof e===C&&(t=e);var r={},i=0;if(t)for(i=0;i'),e.close(),e.defaultView&&e.defaultView.frameElement&&(e.defaultView.frameElement.width=n,e.defaultView.frameElement.height=i)):y.logError("Error trying to write ad. No ad for bid response id: "+t)}else y.logError("Error trying to write ad. Cannot find ad by given id : "+t)}catch(d){y.logError("Error trying to write ad Id :"+t+" to the page:"+d.message)}else y.logError("Error trying to write ad Id :"+t+" to the page. Missing document or adId")},h.requestBidsForAdUnit=function(e){f(),n(e)},h.requestBidsForAdUnits=function(e){if(!e||e.constructor!==Array)return void y.logError("requestBidsForAdUnits must pass an array of adUnits");f();var t=h.adUnits.slice(0);h.adUnits=e,n(),h.adUnits=t},h.removeAdUnit=function(e){if(e)for(var t=0;t0)if(2===c&&typeof e[0]===s&&typeof e[1]===s)r.push(this.parseGPTSingleSizeArray(e));else for(var l=0;c>l;l++)r.push(this.parseGPTSingleSizeArray(e[l]))}var p=r.length;if(p>0&&(t="size="+r[0],p>1)){t+="&promo_sizes=";for(var u=1;p>u;u++)t+=r[u]+=",";t&&","===t.charAt(t.length-1)&&(t=t.slice(0,t.length-1))}return t},r.parseGPTSingleSizeArray=function(e){return!this.isArray(e)||2!==e.length||isNaN(e[0])||isNaN(e[1])?void 0:e[0]+"x"+e[1]},r.getTopWindowUrl=function(){try{return window.top.location.href}catch(e){return window.location.href}},r.logMessage=function(e){B()&&n()&&console.log("MESSAGE: "+e)},r.hasConsoleLogger=n;var y=function(e){return e?window.console.error?"error":"log":""}(n()),B=function(){return pbjs.logging===!1&&c===!1&&(pbjs.logging="TRUE"===_(a.DEBUG_MODE).toUpperCase(),c=!0),pbjs.logging?!0:!1};r.debugTurnedOn=B,r.logError=function(e,t,r){var i=t||"ERROR";B()&&n()&&console[y].call(console,i+": "+e,r||"")},r.createInvisibleIframe=function(){var e=document.createElement("iframe");return e.id=i(),e.height=0,e.width=0,e.border="0px",e.hspace="0",e.vspace="0",e.marginWidth="0",e.marginHeight="0",e.style.border="0",e.scrolling="no",e.frameBorder="0",e.src="about:self",e.style="display:none",e};var _=function(e){var t="[\\?&]"+e+"=([^&#]*)",r=new RegExp(t),i=r.exec(window.location.search);return null===i?"":decodeURIComponent(i[1].replace(/\+/g," "))};r.getPriceBucketString=function(e){var t="",r="",i="",n=0,a={low:t,med:r,high:i};try{n=parseFloat(e),n&&(a.low=n>l?l.toFixed(2):(Math.floor(2*e)/2).toFixed(2),a.med=n>p?p.toFixed(2):(Math.floor(10*e)/10).toFixed(2),a.high=n>u?u.toFixed(2):(Math.floor(100*e)/100).toFixed(2))}catch(o){this.logError("Exception parsing CPM :"+o.message)}return a},r.hasValidBidRequest=function(e,t,r){for(var i=0;i0);for(var t in e)if(h.call(e,t))return!1;return!0},r._each=function(e,t){if(!this.isEmpty(e)){if(this.isFn(e.forEach))return e.forEach(t);var r=0,i=e.length;if(i>0)for(;i>r;r++)t(e[r],r,e);else for(r in e)h.call(e,r)&&t(e[r],r,e)}}},{"./constants.json":12}]},{},[13]); \ No newline at end of file +Updated : 2015-10-26 */ +!function e(t,r,i){function n(o,s){if(!r[o]){if(!t[o]){var d="function"==typeof require&&require;if(!s&&d)return d(o,!0);if(a)return a(o,!0);throw new Error("Cannot find module '"+o+"'")}var c=r[o]={exports:{}};t[o][0].call(c.exports,function(e){var r=t[o][1][e];return n(r?r:e)},c,c.exports,e,t,r,i)}return r[o].exports}for(var a="function"==typeof require&&require,o=0;o=i){o=!0,s=c[d],a.trackPixel(s);break}o||(s=l,a.trackPixel(s)),n.logMessage("latency for placement code : "+r+" : "+i+" ms. Tracking URL Fired : "+s)}}function d(e,t){var r=n.getBidIdParamater("placementId",e.params),i=n.getBidIdParamater("memberId",e.params),a=n.getBidIdParamater("invCode",e.params),o=n.getBidIdParamater("query",e.params),s="http"+("https:"===document.location.protocol?"s://secure.adnxs.com/jpt?":"://ib.adnxs.com/jpt?");s=n.tryAppendQueryString(s,"callback","pbjs.handleCB"),s=n.tryAppendQueryString(s,"callback_uid",t),s=n.tryAppendQueryString(s,"psa","0"),s=n.tryAppendQueryString(s,"id",r),s=n.tryAppendQueryString(s,"member_id",i),s=n.tryAppendQueryString(s,"code",a);var d=n.parseSizesInput(e.sizes);d&&(s+=d+"&");var c=n.parseQueryStringParameters(o);return c&&(s+=c),s=n.tryAppendQueryString(s,"referrer",n.getTopWindowUrl()),s.lastIndexOf("&")===s.length-1&&(s=s.substring(0,s.length-1)),n.logMessage("jpt request built: "+s),e.startTime=(new Date).getTime(),s}var c=[];c[100]=e(21139),c[200]=e(21140),c[300]=e(21141),c[400]=e(21142),c[500]=e(21143),c[600]=e(21144),c[700]=e(21145),c[800]=e(21146),c[1e3]=e(21147),c[1300]=e(21148),c[1600]=e(21149),c[2e3]=e(21150),c[5e3]=e(21151),c[1e4]=e(21152);var l=e(21154);e(21153);return pbjs.handleCB=function(e){if(e&&e.callback_uid){var t,a=e.callback_uid,d="",c=o.getPlacementIdByCBIdentifer(a);if(c){d=c.placementCode,c.status=i.STATUS.GOOD;try{r(c.startTime,(new Date).getTime(),d)}catch(l){}}n.logMessage("JSONP callback function called for ad ID: "+a);var p=[];if(e.result&&e.result.cpm&&0!==e.result.cpm){t=parseInt(e.result.cpm,10),t/=1e4;var u=(e.result.ad,e.result.creative_id);p=s.createBid(1),p.creative_id=u,p.bidderCode="appnexus",p.cpm=t,p.adUrl=e.result.ad,p.width=e.result.width,p.height=e.result.height,p.dealId=e.result.deal_id,o.addBidResponse(d,p)}else n.logMessage("No prebid response from AppNexus for placement code "+d),p=s.createBid(2),p.bidderCode="appnexus",o.addBidResponse(d,p)}else n.logMessage("No prebid response for placement %%PLACEMENT%%")},{callBids:t}};t.exports=d},{"../adloader.js":10,"../bidfactory.js":11,"../bidmanager.js":12,"../constants.json":13,"../utils.js":15}],3:[function(e,t,r){var i=(e("../constants.json"),e("../utils.js")),n=e("../bidfactory.js"),a=e("../bidmanager.js"),o="CASALE",s="casale",d=function(){function e(e){var g=e.bids;if(i.hasValidBidRequest(g[0].params,p,o)){for(var f=0;f',t+=""}var l={},p=["slotId","casaleUrl"],u="";return{callBids:e}};t.exports=d},{"../bidfactory.js":11,"../bidmanager.js":12,"../constants.json":13,"../utils.js":15}],4:[function(e,t,r){var i=(e("../constants.json"),e("../utils.js"),e("../bidfactory.js")),n=e("../bidmanager.js"),a=e("../adloader"),o=function(){function e(e){o=e.bids||[],t(o).forEach(r)}function t(e){var t,r={},i=[];e.forEach(function(e){r[e.params.nid]=e});for(t in r)r.hasOwnProperty(t)&&i.push(r[t]);return i}function r(e){var t="crtg_varname_"+e.params.nid,r="//rtax.criteo.com/delivery/rta/rta.js?netId="+encodeURI(e.params.nid)+"&cookieName="+encodeURI(e.params.cookiename)+"&rnd="+Math.floor(99999999999*Math.random())+"&varName="+encodeURI(t);a.loadScript(r,function(r){var a,s=window[t];o.forEach(function(t){t.params.nid===e.params.nid&&(s?(a=i.createBid(1),a.bidderCode="criteo",a.keys=s.split(";")):(a=i.createBid(2),a.bidderCode="criteo"),n.addBidResponse(t.placementCode,a))})})}var o;return{callBids:e}};t.exports=o},{"../adloader":10,"../bidfactory.js":11,"../bidmanager.js":12,"../constants.json":13,"../utils.js":15}],5:[function(e,t,r){var i=(e("../constants.json"),e("../utils.js"),e("../bidfactory.js")),n=e("../bidmanager.js"),a=e("../adloader"),o=function(e){function t(e){s=e.bids||[];for(var t=0;t',e+="",e+="",e=i.replaceTokenInString(e,t,"%%")}var o,s,d=[];return pbjs.handlePubmaticCallback=function(e){var t,r,i,s,d,c=e&&e.bidDetailsMap||{},l=e&&e.progKeyValueMap||{};for(t=0;t",a+='',a+="",a=n.replaceTokenInString(a,o,"%%")}var d={};return window.pbjs=window.pbjs||{que:[]},window.pbjs.handleRubiconCallback=function(e){var r="",s={};if(e&&"ok"===e.status)try{var c="",l=o.getPlacementIdByCBIdentifer(t(e));if(l&&(r=l.placementCode,l.status=i.STATUS.GOOD,c=l.iframeId),s=a.createBid(1),e.ads&&e.ads[0]){var p=e.ads[0],u=d[p.size_id],g=0,f=0,b=window.frames[c],m=b.contentWindow.RubiconAdServing;if(m&&m.AdSizes){u=m.AdSizes[p.size_id];var h=u.dim.split("x");g=h[0],f=h[1]}s.cpm=p.cpm,s.ad="",s.ad_id=p.ad_id,s.bidderCode="rubicon",s.sizeId=p.size_id,s.width=g,s.height=f}}catch(v){n.logError("Error parsing rubicon response bid: "+v.message)}else{s=a.createBid(2),s.bidderCode="rubicon";var l=o.getPlacementIdByCBIdentifer(t(e));l&&(r=l.placementCode)}o.addBidResponse(r,s)},{callBids:e}};t.exports=s},{"../bidfactory.js":11,"../bidmanager.js":12,"../constants.json":13,"../utils.js":15}],8:[function(e,t,r){var i=e("../bidfactory.js"),n=e("../bidmanager.js"),a=e("../adloader"),o=function(){function e(e){if(-1!=e.bidderCode.indexOf("sovrn")){var t=e.bids||[];if(0!=t.length){for(var r=[],i=0;i"},buildBid:function(t){var r={};if(t&&t.ybot_ad&&"n"!==t.ybot_ad){r=n.createBid(e.BID_STATUS.AVAILABLE),r.cpm=parseInt(t.ybot_cpm)/100||0;var i=t.ybot_size?t.ybot_size.split("x"):[0,0],a=t.ybot_slot||"",o=t.ybot_size||"";r.width=i[0]||0,r.height=i[1]||0,r.ad=e.buildCreative(a,o);for(var s in t)r[s]=t[s]}else r=n.createBid(BID_STATUS.EMPTY);return r.bidderCode="yieldbot",r},callBids:function(t){var r=t.bids||[],n=window.ybotq||[];e.pageLevelOption=!1,n.push(function(){var t=window.yieldbot;o._each(r,function(r){var i=r,n=i.params&&i.params.psn||"ERROR_DEFINE_YB_PSN",s=i.params&&i.params.slot||"ERROR_DEFINE_YB_SLOT";t.pub(n),t.defineSlot(s,{sizes:i.sizes||[]});var d=o.getUniqueIdentifierStr();a.pbCallbackMap[d]=i,e.definedSlots.push(d)}),t.enableAsync(),t.go()}),n.push(function(){e.handleUpdateState()}),i.loadScript("//cdn.yldbt.com/js/yieldbot.intent.js")},handleUpdateState:function(){var t=window.yieldbot;o._each(e.definedSlots,function(r){var i,n,o,s;s=a.getPlacementIdByCBIdentifer(r)||{},i=s.params.slot||"",n=t.getSlotCriteria(i),o=s.placementCode||"ERROR_YB_NO_PLACEMENT";var d=e.buildBid(n);a.addBidResponse(o,d)})}};return{callBids:e.callBids}};t.exports=s},{"../adloader":10,"../bidfactory":11,"../bidmanager":12,"../utils":15}],10:[function(e,t,r){r.loadScript=function(e,t){var r=document.createElement("script");r.type="text/javascript",r.async=!0,t&&"function"==typeof t&&(r.readyState?r.onreadystatechange=function(){("loaded"==r.readyState||"complete"==r.readyState)&&(r.onreadystatechange=null,t())}:r.onload=function(){t()}),r.src=e;var i=document.getElementsByTagName("head");i=i.length?i:document.getElementsByTagName("body"),i.length&&(i=i[0],i.insertBefore(r,i.firstChild))},r.trackPixel=function(e){try{if(e+="&rnd="+Math.random()){var t=document.createElement("img");t.src=e}}catch(r){}}},{}],11:[function(e,t,r){function i(e){function t(){switch(i){case 0:return"Pending";case 1:return"Bid available";case 2:return"Bid returned empty or error response";case 3:return"Bid timed out"}}var r=n.getUniqueIdentifierStr(),i=e||0;this.bidderCode="",this.width=0,this.height=0,this.statusMessage=t(),this.adId=r,this.getStatusCode=function(){return i},this.getSize=function(){return this.width+"x"+this.height}}var n=e("./utils.js");r.createBid=function(e){return new i(e)}},{"./utils.js":15}],12:[function(e,t,r){function i(e,t){var r={},i=pbjs.bidderSettings||{};return e&&t&&i&&i[e]?(n(r,i[e],t),t.alwaysUseBid=i[e].alwaysUseBid):I[e]?(n(r,I[e],t),t.alwaysUseBid=I[e].alwaysUseBid):t&&i&&(i[c.JSON_MAPPING.BD_SETTING_STANDARD]||(i[c.JSON_MAPPING.BD_SETTING_STANDARD]={adserverTargeting:[{key:"hb_bidder",val:function(e){return e.bidderCode}},{key:"hb_adid",val:function(e){return e.adId}},{key:"hb_pb",val:function(e){return e.pbMg}},{key:"hb_size",val:function(e){return e.size}}]}),n(r,i[c.JSON_MAPPING.BD_SETTING_STANDARD],t)),r}function n(e,t,r){var i=t[c.JSON_MAPPING.ADSERVER_TARGETING];return r.size=r.getSize(),l._each(i,function(t){var i=t.key,n=t.val;if(l.isFn(n))try{e[i]=n(r)}catch(a){l.logError("bidmanager","ERROR",a)}else e[i]=n}),e}function a(e){var t=[e];o(u,t)}function o(e,t){var r;if(l.isArray(e))for(r=0;r0&&i.push({cpm:o.cpm,bid:o}),t.push(n)}}if(r&&0!==i.length){var s=c(i),d=s.adserverTargeting;P[r]=y.extend(P[r],d)}return t}function g(e){var t={};if(e){var r=JSON.stringify(e);t=JSON.parse(r),delete t.pbLg,delete t.pbMg,delete t.pbHg}return t}function f(){B.clearAllBidResponses(),E={}}function b(e){var t=e;f(),n(t)}function m(e){var t=null;return e&&(t=p(e.getSlotElementId()),t||(t=p(e.getAdUnitPath()))),t}window.pbjs=window.pbjs||{},window.pbjs.que=window.pbjs.que||[];var h=window.pbjs,v=e("./constants.json"),y=e("./utils.js"),B=e("./bidmanager.js"),_=e("./adaptermanager"),w=e("./bidfactory"),I=e("./adloader"),C="function",j="undefined",A="object",T="string",R=[],S=[],E={},P={};h.bidderTimeout=h.bidderTimeout||3e3,h.logging=h.logging||!1,h.libLoaded=!0,h.adUnits=h.adUnits||[],h.que.push=function(e){if(typeof e===C)try{e.call()}catch(t){y.logError("Error processing command :"+t.message)}else y.logError("Commands written into pbjs.que.push must wrapped in a function")},h.getAdserverTargetingForAdUnitCodeStr=function(e){if(e){var t=h.getAdserverTargetingForAdUnitCode(e);return y.transformAdServerTargetingObj(t)}y.logMessage("Need to call getAdserverTargetingForAdUnitCodeStr with adunitCode")},h.getAdserverTargetingForAdUnitCode=function(e){return h.getBidResponses(e),e?P[e]:P},h.getAdserverTargeting=function(){return h.getAdserverTargetingForAdUnitCode()},h.getBidResponses=function(e){var t={},r=[],i={};if(e)t=p(e),r=[],t&&t.bids&&(r=u(t.bids)),i={bids:r};else{t=p();for(var n in t)t.hasOwnProperty(n)&&(t&&t[n]&&t[n].bids&&(r=u(t[n].bids)),i[n]={bids:r})}return i},h.getBidResponsesForAdUnitCode=function(e){return h.getBidResponses(e)},h.setTargetingForAdUnitsGPTAsync=function(e){if(!window.googletag||!y.isFn(window.googletag.pubads)||!y.isFn(window.googletag.pubads().getSlots))return void y.logError("window.googletag is not defined on the page");var t=e;typeof e===T?t=[e]:typeof e===A&&(t=e);var r={},i=0;if(t)for(i=0;i'),e.close(),e.defaultView&&e.defaultView.frameElement&&(e.defaultView.frameElement.width=n,e.defaultView.frameElement.height=i)):y.logError("Error trying to write ad. No ad for bid response id: "+t)}else y.logError("Error trying to write ad. Cannot find ad by given id : "+t)}catch(s){y.logError("Error trying to write ad Id :"+t+" to the page:"+s.message)}else y.logError("Error trying to write ad Id :"+t+" to the page. Missing document or adId")},h.requestBidsForAdUnit=function(e){f(),n(e)},h.requestBidsForAdUnits=function(e){if(!e||e.constructor!==Array)return void y.logError("requestBidsForAdUnits must pass an array of adUnits");f();var t=h.adUnits.slice(0);h.adUnits=e,n(),h.adUnits=t},h.removeAdUnit=function(e){if(e)for(var t=0;t0)if(2===c&&typeof e[0]===d&&typeof e[1]===d)r.push(this.parseGPTSingleSizeArray(e));else for(var l=0;c>l;l++)r.push(this.parseGPTSingleSizeArray(e[l]))}var p=r.length;if(p>0&&(t="size="+r[0],p>1)){t+="&promo_sizes=";for(var u=1;p>u;u++)t+=r[u]+=",";t&&","===t.charAt(t.length-1)&&(t=t.slice(0,t.length-1))}return t},r.parseGPTSingleSizeArray=function(e){return!this.isArray(e)||2!==e.length||isNaN(e[0])||isNaN(e[1])?void 0:e[0]+"x"+e[1]},r.getTopWindowUrl=function(){try{return window.top.location.href}catch(e){return window.location.href}},r.logMessage=function(e){B()&&n()&&console.log("MESSAGE: "+e)},r.hasConsoleLogger=n;var y=function(e){return e?window.console.error?"error":"log":""}(n()),B=function(){return pbjs.logging===!1&&c===!1&&(pbjs.logging="TRUE"===_(a.DEBUG_MODE).toUpperCase(),c=!0),pbjs.logging?!0:!1};r.debugTurnedOn=B,r.logError=function(e,t,r){var i=t||"ERROR";B()&&n()&&console[y].call(console,i+": "+e,r||"")},r.createInvisibleIframe=function(){var e=document.createElement("iframe");return e.id=i(),e.height=0,e.width=0,e.border="0px",e.hspace="0",e.vspace="0",e.marginWidth="0",e.marginHeight="0",e.style.border="0",e.scrolling="no",e.frameBorder="0",e.src="about:self",e.style="display:none",e};var _=function(e){var t="[\\?&]"+e+"=([^&#]*)",r=new RegExp(t),i=r.exec(window.location.search);return null===i?"":decodeURIComponent(i[1].replace(/\+/g," "))};r.getPriceBucketString=function(e){var t="",r="",i="",n=0,a={low:t,med:r,high:i};try{n=parseFloat(e),n&&(n>l?a.low=l.toFixed(2):a.low=(Math.floor(2*e)/2).toFixed(2),n>p?a.med=p.toFixed(2):a.med=(Math.floor(10*e)/10).toFixed(2),n>u?a.high=u.toFixed(2):a.high=(Math.floor(100*e)/100).toFixed(2))}catch(o){this.logError("Exception parsing CPM :"+o.message)}return a},r.hasValidBidRequest=function(e,t,r){for(var i=0;i0);for(var t in e)if(h.call(e,t))return!1;return!0},r._each=function(e,t){if(!this.isEmpty(e)){ +if(this.isFn(e.forEach))return e.forEach(t);var r=0,i=e.length;if(i>0)for(;i>r;r++)t(e[r],r,e);else for(r in e)h.call(e,r)&&t(e[r],r,e)}}},{"./constants.json":13}]},{},[14]); \ No newline at end of file diff --git a/integrationExamples/gpt/pbjs_example_gpt.html b/integrationExamples/gpt/pbjs_example_gpt.html index 97e9c6ca78b..f6e14ed1a97 100644 --- a/integrationExamples/gpt/pbjs_example_gpt.html +++ b/integrationExamples/gpt/pbjs_example_gpt.html @@ -94,6 +94,12 @@ psn: 'TO ADD', slot: 'TO ADD', } + }, { + bidder: 'sovrn', + params: { + tagId: 'TO ADD', + bidFloor: 'TO ADD@0.57' + } }] },{ code: 'div-gpt-ad-12345678-1', diff --git a/src/adaptermanager.js b/src/adaptermanager.js index afcdcd415c4..c4a4aa56b81 100644 --- a/src/adaptermanager.js +++ b/src/adaptermanager.js @@ -7,6 +7,7 @@ var PubmaticAdapter = require('./adapters/pubmatic.js'); var CriteoAdapter = require('./adapters/criteo'); var YieldbotAdapter = require('./adapters/yieldbot'); var Casale = require('./adapters/casale'); +var Sovrn = require('./adapters/sovrn'); var bidmanager = require('./bidmanager.js'); var utils = require('./utils.js'); var CONSTANTS = require('./constants.json'); @@ -52,4 +53,5 @@ this.registerBidAdapter(OpenxAdapter(), 'openx'); this.registerBidAdapter(PubmaticAdapter(), 'pubmatic'); this.registerBidAdapter(CriteoAdapter(), 'criteo'); this.registerBidAdapter(YieldbotAdapter(), 'yieldbot'); -this.registerBidAdapter(Casale(), 'casale'); \ No newline at end of file +this.registerBidAdapter(Casale(), 'casale'); +this.registerBidAdapter(Sovrn(), 'sovrn'); diff --git a/src/adapters/sovrn.js b/src/adapters/sovrn.js new file mode 100644 index 00000000000..e1e9da410ea --- /dev/null +++ b/src/adapters/sovrn.js @@ -0,0 +1,93 @@ +var bidfactory = require('../bidfactory.js'); +var bidmanager = require('../bidmanager.js'); +var adloader = require('../adloader'); + +var SovrnAdapter = function SovrnAdapter() { + pbjs.sovrn = { + requestMap: {}, + impressionMap: {}, + handleSovrnCallback: function (response) { + var i, j, bid, bidObject; + if (undefined === pbjs.sovrn.requestMap[response.id]) { + return; + } + + for (i = 0; i < response.seatbid.length; i++) { + for (j = 0; j < response.seatbid[i].bid.length; j++) { + bid = response.seatbid[i].bid[j]; + if (undefined === pbjs.sovrn.impressionMap[bid.impid]) { + continue; + } + + bidObject = bidfactory.createBid(1); + bidObject.bidderCode = 'sovrn'; + bidObject.cpm = bid.price; + bidObject.ad = bid.adm; + bidObject.width = pbjs.sovrn.impressionMap[bid.impid].width; + bidObject.height = pbjs.sovrn.impressionMap[bid.impid].height; + bidmanager.addBidResponse(pbjs.sovrn.impressionMap[bid.impid].adUnitCode, bidObject); + } + } + } + }; + + function _callBids(params) { + if (-1 == params.bidderCode.indexOf('sovrn')) { + return; + } + + var bids = params.bids || []; + if (0 == bids.length) { + return; + } + + var impressions = []; + for (var i = 0; i < bids.length; i++) { + var bid = bids[i]; + for (var j = 0; j < bids[i].sizes.length; j++) { + var size = bid.sizes[j]; + var width = size[0]; + var height = size[1]; + var impressionId = 'i_' + width + 'x' + height + '_' + (new Date()).getTime(); + pbjs.sovrn.impressionMap[impressionId] = { + bid: bid, + width: width, + height: height, + adUnitCode: bid.placementCode + }; + impressions.push({ + id: impressionId, + banner: { + w: width, + h: height + }, + tagid: bid.params.tagId, + bidfloor: bid.params.bidFloor + }); + } + } + + var requestId = 'br_' + (new Date()).getTime(); + pbjs.sovrn.requestMap[requestId] = bids; + var bidRequest = { + id: requestId, + imp: impressions, + site: { + domain: location.hostname, + page: location.pathname + location.search + location.hash + } + }; + + var scriptUrl = '//ap.lijit.com/rtb/bid?callback=window.pbjs.sovrn.handleSovrnCallback&br=' + + encodeURIComponent(JSON.stringify(bidRequest)); + adloader.loadScript(scriptUrl); + } + + // 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 = SovrnAdapter;